# How to use fits
from java.awt import Color
from java.util import Random
from jhplot  import HPlot
from jhplot  import H1D,F1D
from hep.aida import *


c1 = HPlot("Canvas",600,400,0.12,1, 1)
c1.gTitle("Fit example"); #put title
c1.visible(1)
c1.setAutoRange()

min=-3.0
max=3.0
h1 = H1D("Simple1",50, min, max)
rand = Random()
# fill histogram
for i in range(5000):
      h1.fill(rand.nextGaussian())

h1.setPenWidthErr(2)
h1.setStyle("p")
h1.setSymbol(4)
h1.setDrawLine(0)
c1.setNameX("Xaxis")
c1.setNameY("Yaxis");
c1.setName("Canvas title")
c1.drawStatBox(h1)

# create all factories
c1.factories();

# access  IAnalysisFactory
af = c1.analF()

# access  ITreeFactory
tf=c1.treeF()


# access  IFitFactory
fitf=c1.fitF()

# access IFunctionFactory
funcF=c1.funcF()


# access  IHistogramFactory
funcF=c1.histF()

# make fit using JAIDA
fitter  = fitf.createFitter( "chi2", "jminuit" )
result = fitter.fit(h1.get(), "g" )
fresult=result.fittedFunction();             
fPars     = result.fittedParameters()
fParErrs  = result.errors()
fParNames = result.fittedParameterNames()
print "Fit results:"
for i in range(fresult.numberOfParameters()):
   print(fParNames[i]+" : "+str(fPars[i])+" +- "+str(fParErrs[i]))

# make F1D function from IFunction in the same range as histogram
f2 = F1D(fresult,min,max)
f2.setColor(Color.blue)
f2.setPenWidth(3);

# draw fit line
c1.draw(f2)
# draw histogram on top
c1.draw(h1)

# export to png
c1.export(Editor.DocMasterName()+".png")

# jHepWork @S.Chekanov