package hep.aida.ref.plotter.adapter;
import hep.aida.IAnnotation;
import hep.aida.ICloud2D;
import jas.hist.ExtendedStatistics;
import java.util.ArrayList;
/**
*
* @author manj
* @version
*/
class AIDACloudStatistics2D implements ExtendedStatistics
{
/** Creates new AidaStatistics */
public AIDACloudStatistics2D(ICloud2D histo)
{
this.histo=histo;
}
public String[] getStatisticNames()
{
ArrayList stat = new ArrayList();
for ( int i = 0; i < statNames.length; i++ )
stat.add(statNames[i]);
if ( getExtendedStatistic(outOfRangeStat) != null && ((Integer) getExtendedStatistic(outOfRangeStat)).intValue() != 0 )
stat.add(outOfRangeStat);
if ( getExtendedStatistic(nanExtStat) != null && ((Integer) getExtendedStatistic(nanExtStat)).intValue() != 0 )
stat.add(nanExtStat);
if ( ((Integer) getExtendedStatistic("Entries")).intValue() != ((Double) getExtendedStatistic(sumOfWeightsStat)).doubleValue() )
stat.add(sumOfWeightsStat);
IAnnotation an = histo.annotation();
if (an != null) {
int n = an.size();
for (int i=0; i<n; i++) {
try {
String key = an.key(i);
if (key.toLowerCase().startsWith("stat.") || key.toLowerCase().startsWith("stat:")) {
stat.add(key.substring(5));
}
} catch (IllegalArgumentException e) {}
}
}
String[] statArray = new String[stat.size()];
for ( int i = 0; i < stat.size(); i++ )
statArray[i] = (String)stat.get(i);
return statArray;
}
public double getStatistic(String name)
{
if (name.equals("XMean")) return histo.meanX();
if (name.equals("XRms")) return histo.rmsX();
if (name.equals("YMean")) return histo.meanY();
if (name.equals("YRms")) return histo.rmsY();
return 0;
}
public Object getExtendedStatistic(String name)
{
if (name.equals("Entries")) return new Integer(histo.entries());
if (name.equals(outOfRangeStat)) {
if ( histo.isConverted() )
return new Integer(histo.histogram().extraEntries());
}
if (name.equals(nanExtStat))
return new Integer( histo.nanEntries() );
if (name.equals(sumOfWeightsStat)) return new Double(histo.sumOfWeights());
IAnnotation an = histo.annotation();
if (an == null) return null;
String v = null;
try {
if (an.hasKey("stat."+name))
v = an.value("stat."+name);
else if (an.hasKey("stat:"+name))
v = an.value("stat:"+name);
} catch (IllegalArgumentException e) {}
return v;
}
private ICloud2D histo;
private final String[] statNames = {"Entries","XMean","XRms","YMean","YRms"};
private final String nanExtStat = "NaN";
private final String sumOfWeightsStat = "SumOfWeights";
private final String outOfRangeStat = "OutOfRange";
}