from jhplot import *
from java.util import Random
# creating 2D data
h1 = H2D('Data', 20, -10, 10, 20, -10,10)
r = Random()
for i in range(10000):
h1.fill(2*r.nextGaussian(),2*r.nextGaussian()+3)
c1 = HPlot3D('Canvas',800,400,2,1)
c1.visible()
# fitting with 2D Gaussian
f=HFitter()
f.setFunc('g2D',2, 'N*(exp( -0.5*((mu0-x[0])*(mu0-x[0])+0.5*(mu1-x[1])*(mu1-x[1])) /(s0*s0) ))','N,s0,mu0,mu1')
f.setPar("N",100)
f.setPar("s0",1.0)
f.setPar("mu0",0.0)
f.setPar("mu1",1.0)
f.fit(h1)
ff=f.getFittedFunc()
r=f.getResult()
Pars = r.fittedParameters()
Errors = r.errors()
Names = r.fittedParameterNames()
print "Fit results:"
for i in range(ff.numberOfParameters()):
print Names[i]+" : "+str(Pars[i])+" +- "+str(Errors[i])
print 'chi**2/ndf='+str(round(r.quality()*r.ndf()))+"/",r.ndf()
f1 = F2D(ff,-10,10,-10,10)
c1.setGTitle("2D data fitted with a 2D Gaussian")
c1.cd(1,1)
c1.setLabelOffsetX(1.04)
c1.setLabelOffsetY(1.04)
c1.draw(h1)
c1.cd(2,1)
c1.setLabelOffsetX(1.04)
c1.setLabelOffsetY(1.04)
c1.draw(f1)
Ads help maintain this website.