/* * RmiAxis.java * * Created on October 26, 2003, 10:05 PM */ package hep.aida.ref.remote.rmi.data; import hep.aida.IAxis; import java.io.Serializable; /** * This class contains information for the IAxis * @author serbo */ public class RmiAxis implements IAxis, Serializable { static final long serialVersionUID = 8424716035826782276L; private int nBins; private double lowerEdge; private double upperEdge; private boolean fixedBinning; /** Creates a new instance of RmiAxis */ public RmiAxis(int nBins, double lowerEdge, double upperEdge) { this.nBins = nBins; this.lowerEdge = lowerEdge; this.upperEdge = upperEdge; this.fixedBinning = true; } // IAxis methods public double binLowerEdge(int index) { if (index == IAxis.UNDERFLOW_BIN) return Double.NEGATIVE_INFINITY; if (index == IAxis.OVERFLOW_BIN) return upperEdge(); return lowerEdge + binWidth(0)*index; } public double binUpperEdge(int index) { if (index == IAxis.UNDERFLOW_BIN) return lowerEdge; if (index == IAxis.OVERFLOW_BIN) return Double.POSITIVE_INFINITY; return lowerEdge + binWidth(0)*(index+1); } public double binWidth(int index) { return (upperEdge - lowerEdge)/nBins; } public double binCenter(int index) { if ( index == IAxis.OVERFLOW_BIN ) return Double.POSITIVE_INFINITY; if ( index == IAxis.UNDERFLOW_BIN ) return Double.NEGATIVE_INFINITY; return binLowerEdge(0) + binWidth(0)*index + binWidth(0)/2; } public int bins() { return nBins; } public int coordToIndex(double coord) { if (coord < lowerEdge) return IAxis.UNDERFLOW_BIN; int index = (int) Math.floor((coord - lowerEdge)/binWidth(0)); if (index >= nBins) return IAxis.OVERFLOW_BIN; return index; } public boolean isFixedBinning() { return fixedBinning; } public double lowerEdge() { return lowerEdge; } public double upperEdge() { return upperEdge; } }