package hep.aida.util.comparison; import hep.aida.ext.IComparisonData; import org.apache.commons.math.distribution.ChiSquaredDistribution; import org.apache.commons.math.distribution.DistributionFactory; /** * * @author The FreeHEP team @ SLAC. * Algorithm taken from http://www.ge.infn.it/geant4/analysis/HEPstatistics/ * */ public class GoodmanComparisonAlgorithm extends KolmogorovSmirnovComparisonAlgorithm { private static final String[] names = new String[] {"Goodman","KolmogorovSmirnovChi2Approx","KSChi2Approx"}; private static final ChiSquaredDistribution chi2Distribution = DistributionFactory.newInstance().createChiSquareDistribution(3); public String[] algorithmNames() { return names; } public double quality(IComparisonData d1, IComparisonData d2) { double distance = evaluateDistance(d1,d2); double entries1 = entries(d1); double entries2 = entries(d2); double n = entries1 * entries2 / (entries1 + entries2); double chi2 = 4 * distance * distance * n; double prob = Double.NaN; try { prob = chi2Distribution.cumulativeProbability(chi2); } catch ( org.apache.commons.math.MathException me) { throw new RuntimeException("Problems evaluating probability ",me); } return prob; } }