package hep.aida.util.comparison;
import hep.aida.ext.IComparisonData;
/**
*
* @author The FreeHEP team @ SLAC.
* Algorithm taken from http://www.ge.infn.it/geant4/analysis/HEPstatistics/
*
*/
public class AndersonDarlingComparisonAlgorithm extends AbstractComparisonAlgorithm {
private static final String[] names = new String[] {"AndersonDarling","AD"};
private static final int dType = ANY_DATA;
private static final int eType = ANY_NUMBER_OF_EVENTS;
private static final double[] rejectionValues = new double[] {0.1, 0.05, 0.01, 0.001};
private static final double[] criticalValues = new double[] {1.933, 2.492, 3.857, 4.356};
public AndersonDarlingComparisonAlgorithm() {
super(dType, eType);
}
public void setRejectionLevel() {
super.setRejectionLevel();
double aL = rejectionLevel();
boolean found = false;
for ( int i = 0; i < rejectionValues.length; i++ )
if ( aL == rejectionValues[i]) {
found = true;
break;
}
if ( ! found ) {
String levels = "";
for ( int i = 0; i < rejectionValues.length; i++ )
levels += rejectionValues[i]+" ";
System.out.println("Algorithm "+algorithmNames()[0]+" can currently support ONLY the following rejection levels: "+levels);
}
}
public double matchLowerBound() {
return 0;
}
public double matchUpperBound() {
double aL = rejectionLevel();
for ( int i = 0; i < rejectionValues.length; i++ )
if ( aL == rejectionValues[i])
return criticalValues[i];
return criticalValues[1];
}
public double quality(IComparisonData d1, IComparisonData d2) {
if ( d1.type() != d2.type() )
throw new IllegalArgumentException("Incompatible data sets: one is binned the other is unbinned. Cannot perform test");
int nPoints1 = d1.nPoints();
int nPoints2 = d2.nPoints();
// Calculate the sum of weights
double sumOfWeights1=0.,sumOfWeights2=0.;
for(int i=0; i
Ads help maintain this website.