from jhplot import *
from java.util import Random
from java.awt import Color
# create fitter
f=HFitter()
print f.getFitMethod()
print f.getFitEngines()
print f.getFuncCatalog()
# bulding a new function: gaussian+P1
f.setFunc("g+p1")
f.setPar('p0',10)
f.setPar('mean',0)
f.setPar('sigma',1)
f.setPar('amplitude',500)
f.setRange(-7,7)
func=f.getFunc()
func.setParameter("mean",10) # set paramete
print func.title()+' has: ', func.parameterNames()
# make a histogram with signal and background
h1 = H1D("Simple1",50, -7, 7)
r= Random()
# fill histogram
for i in range(10000):
if (i<5000): h1.fill(r.nextGaussian())
h1.fill(5*r.nextGaussian()+5)
c1 = HPlot("Canvas",600,400,1, 1)
c1.setGTitle("Fit example"); #put title
c1.visible()
c1.setRange(-10,15,0,1000)
c1.setMarginLeft(80)
# fit with the gaussian
h1.setPenWidthErr(2)
h1.setStyle("p")
h1.setSymbol(4)
h1.setDrawLine(0)
c1.setNameX("Time")
c1.setNameY("Temperature");
c1.drawStatBox(h1)
c1.draw(h1)
f.setRange(-7,7)
f.fit(h1)
ff=f.getFittedFunc()
# get fitted results
result=f.getResult()
fPars = result.fittedParameters()
fParErrs = result.errors()
fParNames = result.fittedParameterNames()
print "Fit results:"
for i in range(ff.numberOfParameters()):
print(fParNames[i]+" : "+str(fPars[i])+" +- "+str(fParErrs[i]))
# draw the fit line
f2 = F1D("Gaussian",ff,-7,7)
f2.setColor(Color.blue)
f2.setPenWidth(3);
# draw fit line
c1.draw(f2)
result=f.getResult()
print result.ndf()
print "Chi2/Ndf=",result.quality()
Ads help maintain this website.