package hep.aida.util.comparison;

import hep.aida.ext.IComparisonData;

import org.apache.commons.math3.distribution.*;

/**
 *
 * @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 =  new ChiSquaredDistribution(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;
    }
}

 

Ads help maintain this website.