//----------------------------------------------------------------------------//
// //
// I n t e g e r H i s t o g r a m //
// //
//----------------------------------------------------------------------------//
// <editor-fold defaultstate="collapsed" desc="hdr"> //
// Copyright © Hervé Bitteur and others 2000-2013. All rights reserved. //
// This software is released under the GNU General Public License. //
// Goto http://kenai.com/projects/audiveris to report bugs or suggestions. //
//----------------------------------------------------------------------------//
// </editor-fold>
package omr.math;
import java.io.PrintStream;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;
/**
* Class {@code IntegerHistogram} is an histogram where buckets are
* integers.
*
* @author Hervé Bitteur
*/
public class IntegerHistogram
extends Histogram<Integer>
{
//~ Instance fields --------------------------------------------------------
/** The derivatives values */
private SortedMap<Integer, Double> derivatives;
//~ Methods ----------------------------------------------------------------
//-------//
// clear //
//-------//
@Override
public void clear ()
{
super.clear();
derivatives = null;
}
//----------------//
// getDerivatives //
//----------------//
public SortedMap<Integer, Double> getDerivatives ()
{
if (derivatives == null) {
derivatives = new TreeMap<>();
Integer prevKey = null;
Integer prevValue = null;
Integer key = null;
Integer value = null;
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
Integer nextKey = entry.getKey();
Integer nextValue = entry.getValue();
if (key != null) {
if (prevKey != null) {
// We can compute a derivative
derivatives.put(
key,
(double) (nextValue - prevValue) / (nextKey
- prevKey));
}
prevKey = key;
prevValue = value;
}
key = nextKey;
value = nextValue;
}
}
return derivatives;
}
//---------------//
// increaseCount //
//---------------//
@Override
public void increaseCount (Integer bucket,
int delta)
{
super.increaseCount(bucket, delta);
derivatives = null;
}
//-------//
// print //
//-------//
@Override
public void print (PrintStream stream)
{
stream.print("[\n");
getDerivatives();
for (Map.Entry<Integer, Integer> entry : entrySet()) {
Integer key = entry.getKey();
Double der = derivatives.get(key);
stream.format(
" %s: v:%d d:%s\n",
key.toString(),
entry.getValue(),
(der != null) ? der.toString() : "");
}
stream.println("]");
}
}