from hep.aida import *
from java.util import Random

af   = IAnalysisFactory.create();
tree = af.createTreeFactory().create();
hf   = af.createHistogramFactory(tree);

h1 = hf.createHistogram1D("Histogram 1D",50,-3,3)

r = Random()


for i in range(100000):
    h1.fill(r.nextGaussian())
    h1.fill(r.nextDouble()*10-5)

functionfact = af.createFunctionFactory(tree)
gauss = functionfact.createFunctionFromScript("gauss",1,"background+a*exp(-(x[0]-mean)*(x[0]-mean)/sigma/sigma)","a,mean,sigma,background","A Gaussian")
gauss.setParameter("a",h1.maxBinHeight())
gauss.setParameter("mean",h1.mean())
gauss.setParameter("sigma",h1.rms())

plotter = af.createPlotterFactory().create("Fit.py Plot")
plotter.region(0).plot(h1)
plotter.region(0).plot(gauss)


ff = af.createFitFactory()
jminuit = ff.createFitter("Chi2","jminuit")
uncmin = ff.createFitter("Chi2","uncmin")
jminuitResult = jminuit.fit(h1,gauss)
uncminResult = uncmin.fit(h1,gauss)
plotter.region(0).plot(jminuitResult.fittedFunction())
plotter.region(0).plot(uncminResult.fittedFunction())
plotter.show()

functionfact.cloneFunction("fitted gauss (jminuit)",jminuitResult.fittedFunction())
functionfact.cloneFunction("fitted gauss (Uncmin)",uncminResult.fittedFunction())


print "jminuit Chi2 = ", jminuitResult.quality()
print "Uncmin Chi2 = ", uncminResult.quality()
# jHepWork @S.Chekanov