from hep.aida import *
from java.util import Random
anFactory = IAnalysisFactory.create()
tree = anFactory.createTreeFactory().create()
histFactory = anFactory.createHistogramFactory( tree );
tuplFactory = anFactory.createTupleFactory( tree );
funcFactory = anFactory.createFunctionFactory( tree );
fitFactory = anFactory.createFitFactory();
fitter = fitFactory.createFitter("chi2","jminuit");
hist = histFactory.createHistogram1D("hist","Test Histogram",100,-5,5);
r = Random(1234);
for i in range(10000):
x = r.nextGaussian();
hist.fill(x);
fitData = fitFactory.createFitData();
fitData.create1DConnection(hist);
pars = [hist.maxBinHeight(),hist.mean(),hist.rms()];
fitResult = fitter.fit(fitData,"g",pars);
meanIndex = fitResult.fittedFunction().indexOfParameter("mean");
meanVal = fitResult.fittedParameters()[meanIndex];
meanErr = fitResult.errors()[meanIndex];
meanScan = fitter.createScan1D(fitData, fitResult.fittedFunction(),"mean",20, meanVal-3*meanErr, meanVal+3*meanErr);
sigmaIndex = fitResult.fittedFunction().indexOfParameter("sigma");
sigmaVal = fitResult.fittedParameters()[sigmaIndex];
sigmaErr = fitResult.errors()[sigmaIndex];
oneSigmaContour = fitter.createContour(fitData, fitResult, "mean", "sigma", 10, 1);
twoSigmaContour = fitter.createContour(fitData, fitResult, "mean", "sigma", 10, 2);
plotter = anFactory.createPlotterFactory().create("ScansAndContour.py plot");
plotter.destroyRegions();
plotter.createRegion(0,0,.66,1).plot(hist);
plotter.region(0).plot(fitResult.fittedFunction());
plotter.createRegion(.66,0,.33,.5).plot( meanScan );
plotter.createRegion(.66,.5,.33,.5).plot( twoSigmaContour );
plotter.region(2).plot( oneSigmaContour );
plotter.show();
# jHepWork @S.Chekanov