package hep.aida.ref.plotter.adapter;
import hep.aida.ICloud1D;
import hep.aida.IHistogram1D;
import hep.aida.ref.histogram.Cloud1D;
import hep.aida.ref.histogram.HistUtils;
import jas.hist.DataSource;
import jas.hist.HasStatistics;
import jas.hist.Rebinnable1DHistogramData;
import jas.hist.Statistics;
/**
*
* @author manj
* @version $Id: AIDACloudAdapter1D.java 13422 2007-12-04 17:20:07Z serbo $
*/
public class AIDACloudAdapter1D extends AIDACloudAdapter implements Rebinnable1DHistogramData, HasStatistics
{
public AIDACloudAdapter1D(ICloud1D cloud)
{
super(cloud);
this.cloud=cloud;
String tmp = null;
try {
tmp = cloud.annotation().value("xAxisType");
if (tmp != null && tmp.equalsIgnoreCase("date")) xAxisType = DataSource.DATE;
} catch (IllegalArgumentException e) {}
}
public double[][] rebin(int bins, double min, double max, boolean wantErrors, boolean hurry)
{
IHistogram1D histo = null;
setValid();
if(isRebinnable()) {
histo=HistUtils.toShowableHistogram(cloud,bins,min,max);
nBins = bins;
} else histo=cloud.histogram();
double[][] data=new double [2][histo.axis().bins()];
for(int i=0;i<histo.axis().bins();i++)
{
data[0][i]=histo.binHeight(i);
if (Double.isInfinite(data[0][i])) data[0][i] = Double.NaN;
data[1][i]=histo.binError(i);
}
return data;
}
public double getMin()
{
if ( isRebinnable() ) {
if ( cloud instanceof Cloud1D )
return ((Cloud1D)cloud).lowerEdgeWithMargin();
else {
double edge= cloud.lowerEdge();
if ( Double.isNaN(edge) ) return Double.NaN;
return edge - getMarginValue(edge, cloud.upperEdge());
}
}
return cloud.histogram().axis().lowerEdge();
}
public double getMax()
{
if ( isRebinnable() ) {
if ( cloud instanceof Cloud1D )
return ((Cloud1D)cloud).upperEdgeWithMargin();
else {
double edge= cloud.upperEdge();
if ( Double.isNaN(edge) ) return Double.NaN;
return edge + getMarginValue(cloud.lowerEdge(), edge);
}
}
return cloud.histogram().axis().upperEdge();
}
public int getBins()
{
return isRebinnable() ? nBins : cloud.histogram().axis().bins();
}
public boolean isRebinnable()
{
return (!cloud.isConverted());
}
public int getAxisType() {
return xAxisType;
}
public void setAxisType(int type) {
xAxisType = type;
}
public String[] getAxisLabels()
{
return null;
}
public String getTitle()
{
return cloud.title();
}
public Statistics getStatistics()
{
return new AIDACloudStatistics1D(cloud);
}
private ICloud1D cloud;
private int nBins = 50;
}