package cern.hep.aida.bin;

/**
 * Abstract base class for all arbitrary-dimensional bins consumes double elements.
 * First see the package summary and javadoc tree view to get the broad picture.
 * 

* This class is fully thread safe (all public methods are synchronized). * Thus, you can have one or more threads adding to the bin as well as one or more threads reading and viewing the statistics of the bin while it is filled. * For high performance, add data in large chunks (buffers) via method addAllOf rather than piecewise via method add. * * @author wolfgang.hoschek@cern.ch * @version 0.9, 03-Jul-99 */ public abstract class AbstractBin extends cern.colt.PersistentObject { /** * Makes this class non instantiable, but still let's others inherit from it. */ protected AbstractBin() { } /** * Returns center(0). */ public final double center() { return center(0); } /** * Returns a custom definable "center" measure; override this method if necessary. * Returns the absolute or relative center of this bin. * For example, the center of gravity. * * The real absolute center can be obtained as follow: * partition(i).min(j) * bin(j).offset() + bin(j).center(i), * where i is the dimension. * and j is the index of this bin. * *

This default implementation always returns 0.5. * * @param dimension the dimension to be considered (zero based). */ public synchronized double center(int dimension) { return 0.5; } /** * Removes all elements from the receiver. * The receiver will be empty after this call returns. */ public abstract void clear(); /** * Returns whether two objects are equal; * This default implementation returns true if the other object is a bin * and has the same size, value, error and center. */ public boolean equals(Object otherObj) { if (! (otherObj instanceof AbstractBin)) return false; AbstractBin other = (AbstractBin) otherObj; return size()==other.size() && value()==other.value() && error()==other.error() && center()==other.center(); } /** * Returns error(0). */ public final double error() { return error(0); } /** * Returns a custom definable error measure; override this method if necessary. * This default implementation always returns 0. * * @param dimension the dimension to be considered. */ public synchronized double error(int dimension) { return 0; } /** * Returns whether a client can obtain all elements added to the receiver. * In other words, tells whether the receiver internally preserves all added elements. * If the receiver is rebinnable, the elements can be obtained via elements() methods. */ public abstract boolean isRebinnable(); /** * Returns offset(0). */ public final double offset() { return offset(0); } /** * Returns the relative or absolute position for the center of the bin; override this method if necessary. * Returns 1.0 if a relative center is stored in the bin. * Returns 0.0 if an absolute center is stored in the bin. * *

This default implementation always returns 1.0 (relative). * * @param dimension the index of the considered dimension (zero based); */ public double offset(int dimension) { return 1.0; } /** * Returns the number of elements contained. * * @returns the number of elements contained. */ public abstract int size(); /** * Returns a String representation of the receiver. */ public synchronized String toString() { StringBuffer buf = new StringBuffer(); buf.append(getClass().getName()); buf.append("\n-------------"); /* buf.append("\nValue: "+value()); buf.append("\nError: "+error()); buf.append("\nRMS: "+rms()+"\n"); */ buf.append("\n"); return buf.toString(); } /** * Trims the capacity of the receiver to be the receiver's current size. * Releases any superfluos internal memory. * An application can use this operation to minimize the storage of the receiver. * * This default implementation does nothing. */ public synchronized void trimToSize() {} /** * Returns value(0). */ public final double value() { return value(0); } /** * Returns a custom definable "value" measure; override this method if necessary. *

This default implementation always returns 0.0. * * @param dimension the dimension to be considered. */ public double value(int dimension) { return 0; } }

Ads help maintain this website.