package hep.aida.util.comparison; import hep.aida.ICloud1D; import hep.aida.IHistogram1D; import hep.aida.ext.IComparisonData; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; /** * * @author The FreeHEP team @ SLAC. * */ public abstract class ComparisonDataConverter { private static IncreasingOrder increasingOrder = new IncreasingOrder(); public static IComparisonData comparisonData(IHistogram1D hist, String testOptions) { int bins = hist.axis().bins(); double[] data = new double[bins]; double[] weights = new double[bins]; int[] entries = new int[bins]; for ( int i = 0; i < bins; i++ ) { data[i] = hist.axis().binLowerEdge(i); weights[i] = hist.binHeight(i); entries[i] = hist.binEntries(i); } return new ComparisonData(data, weights, entries, IComparisonData.BINNED_DATA); } public static IComparisonData comparisonData(ICloud1D cloud, String testOptions) { if (cloud.isConverted()) return comparisonData(cloud.histogram(),testOptions); int entries = cloud.entries(); double[] data = new double[entries]; double[] weights = new double[entries]; ArrayList list = new ArrayList(); for ( int i = 0; i < entries; i++ ) list.add(new DataWeightEntry(cloud.value(i), cloud.weight(i))); Object[] listArray = list.toArray(); Arrays.sort(listArray, increasingOrder); for ( int i = 0; i < entries; i++ ) { DataWeightEntry d = (DataWeightEntry) listArray[i]; data[i] = d.data(); weights[i] = d.weight(); } return new ComparisonData(data, weights, IComparisonData.UNBINNED_DATA); } private static class DataWeightEntry { private double data; private double weight; DataWeightEntry(double data, double weight) { this.data = data; this.weight = weight; } double data() { return data; } double weight() { return weight; } } private static class IncreasingOrder implements Comparator { public int compare(Object o1, Object o2) { DataWeightEntry d1 = (DataWeightEntry)o1; DataWeightEntry d2 = (DataWeightEntry)o2; if ( d1.data() < d2.data() ) return -1; else if ( d1.data() == d2.data() ) return 0; return 1; } } }