Non-linear fits with HFitter using signal+background assumption
Code: "fit_hfitter2.py". Programming language: Python DMelt Version 1. Last modified: 12/08/2015. License: Pro
https://datamelt.org/code/cache/fit_hfitter2_1117.py
To run this script using the DMelt IDE, copy the above URL link to the menu [File]→[Read script from URL] of the DMelt IDE.



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.