package hep.aida.ref.test.jaida; import hep.aida.IAnalysisFactory; import hep.aida.IFitFactory; import hep.aida.IFitResult; import hep.aida.IFitter; import hep.aida.IFunction; import hep.aida.IFunctionFactory; import hep.aida.IHistogram1D; import hep.aida.IHistogramFactory; import hep.aida.ITree; import java.util.Random; import junit.framework.TestCase; /** * * @author AIDA Team * @version $Id: AbstractTestFitting.java 8584 2006-08-10 23:06:37Z duns $ */ public class AbstractTestFitting extends TestCase { private IAnalysisFactory af; private ITree tree; private IHistogram1D hist; private String fitter; /** Creates a new instance of FitTest */ public AbstractTestFitting(String name,String fitter) { super(name); this.fitter = fitter; } public void testScriptedFunction() { IFunctionFactory functionfact = af.createFunctionFactory(tree); IFunction f = functionfact.createFunctionFromScript("gauss",1,"b*lambda*exp(-x[0]*lambda)+a*exp(-(x[0]-mean)*(x[0]-mean)/sigma/sigma)","b,lambda,a,mean,sigma","Gaussian+Exponential"); assertEquals(1,f.dimension()); assertEquals(5,f.parameters().length); f.setParameter("b",1800); f.setParameter("lambda",.3); f.setParameter("a",70); f.setParameter("mean",10); f.setParameter("sigma",1.5); testFunction(fitter,f); } public void testBuiltinFunction() { IFunctionFactory functionfact = af.createFunctionFactory(tree); IFunction f = functionfact.createFunctionByName("e+g","e+g"); assertEquals(1,f.dimension()); assertEquals(5,f.parameters().length); f.setParameter("amplitude",600); f.setParameter("exponent",-.3); f.setParameter("amplitude_1",80); f.setParameter("mean",10); f.setParameter("sigma",1); testFunction(fitter,f); } private void testFunction(String fitter, IFunction f) { IFitFactory ff = af.createFitFactory(); IFitter minuit = ff.createFitter("Chi2",fitter); IFitResult result = minuit.fit(hist,f); assertTrue(result.isValid()); assertEquals(5,result.fittedParameterNames().length); //assertEquals(95,result.ndf()); int status = result.fitStatus(); assertTrue(status>0 && status<6); assertTrue(result.quality()<1.5); } protected void setUp() throws java.lang.Exception { af = IAnalysisFactory.create(); tree = af.createTreeFactory().create(); IHistogramFactory hf = af.createHistogramFactory(tree); Random r = new Random(); hist = hf.createHistogram1D("hist",100,0,20); for (int i=0; i<10000; i++) { hist.fill(-Math.log(r.nextDouble()) / .3); } for (int i=0; i<1000; i++) { hist.fill(r.nextGaussian()+10); } } }