/*
* AidaProfileStatistics2D.java
*
* Created on March 19, 2001, 1:32 PM
*/
package hep.aida.ref.plotter.adapter;
import hep.aida.IAnnotation;
import hep.aida.IProfile2D;
import jas.hist.ExtendedStatistics;
import java.util.ArrayList;
/**
*
* @author manj
* @version
*/
class AIDAProfileStatistics2D implements ExtendedStatistics
{
/** Creates new AidaProfileStatistics2D */
AIDAProfileStatistics2D(IProfile2D profile)
{
this.profile=profile;
}
public String[] getStatisticNames()
{
ArrayList stat = new ArrayList();
for ( int i = 0; i < statNames.length; i++ )
stat.add(statNames[i]);
if ( ((Integer) getExtendedStatistic(outOfRangeStat)).intValue() != 0 )
stat.add(outOfRangeStat);
if ( ((Integer) getExtendedStatistic(nanExtStat)).intValue() != 0 )
stat.add(nanExtStat);
if ( ((Integer) getExtendedStatistic("Entries")).intValue() != ((Double) getExtendedStatistic(sumOfWeightsStat)).doubleValue() )
stat.add(sumOfWeightsStat);
IAnnotation an = profile.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 profile.meanX();
if (name.equals("XRms")) return profile.rmsX();
if (name.equals("YMean")) return profile.meanY();
if (name.equals("YRms")) return profile.rmsY();
return 0;
}
public Object getExtendedStatistic(String name)
{
if (name.equals("Entries")) return new Integer(profile.entries());
if (name.equals(outOfRangeStat)) return new Integer(profile.extraEntries());
if (name.equals(nanExtStat)) return new Integer(profile.nanEntries());
if (name.equals(sumOfWeightsStat)) return new Double(profile.sumBinHeights());
IAnnotation an = profile.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 IProfile2D profile;
private String[] statNames = {"Entries","XMean","XRms","YMean","YRms"};
private final String nanExtStat = "NaN";
private final String sumOfWeightsStat = "SumOfWeights";
private final String outOfRangeStat = "OutOfRange";
}