import ROOT,math,argparse def getGConst(charge,sigma): return charge/(g_sigma*ROOT.TMath.Sqrt(ROOT.TMath.Pi())) def fillTuple(ptuple,sig,con,N=5000,binw=-1,swidth=10): gauss=ROOT.TF1('f','gaus') gauss.SetParameter(0,con) gauss.SetParameter(1,0) gauss.SetParameter(2,sig) i=0 posarr=[] if binw==-2: N=int(2*swidth*sig) while i0: pos=int(pos/binw)*binw if pos in posarr: continue posarr.append(pos) i+=1 val=gauss.Eval(pos) ptuple.Fill(ROOT.Double(pos),ROOT.Double(val)) def fitRooFit(ptuple,opt=''): rooX=ROOT.RooRealVar('x','',0.,-10*g_sigma,10*g_sigma) rooA=ROOT.RooRealVar('amp','',0.) varset=ROOT.RooArgSet('varset') varset.add(rooX) varset.add(rooA) dataset=ROOT.RooDataSet('dataset','pointstuple',ptuple,varset,'','amp') fitMean=ROOT.RooRealVar('fitMean','',0.,-10*g_sigma,10*g_sigma) fitSigma=ROOT.RooRealVar('fitSigma','',g_sigma,-10*g_sigma,10*g_sigma) fitgauss=ROOT.RooGaussian("fitgauss",'roogauss',rooX,fitMean,fitSigma) result=fitgauss.fitTo(dataset, ROOT.RooFit.SumW2Error(True), ROOT.RooFit.Save()) if opt.find('plot')!=-1: frame=rooX.frame(ROOT.RooFit.Title('title')) dataset.plotOn(frame,ROOT.RooFit.Binning(50)) fitgauss.plotOn(frame,ROOT.RooFit.Range("Full"),ROOT.RooFit.LineStyle(ROOT.kDashed),ROOT.RooFit.LineColor(ROOT.kRed)) frame.Draw() error=fitMean.getError() return error def fitTGraph(ptuple,opt=''): for e in ptuple: print ptuple.x,ptuple.amp parser=argparse.ArgumentParser(description='Mickey Mouse MC for error on Mean') #parser.add_argument() ROOT.gROOT.ProcessLine(".x rootlogon.C") charge=100 g_sigma=10 g_const=getGConst(charge,g_sigma) pointstuple=ROOT.TNtuple('points','','x:amp') fillTuple(pointstuple,g_sigma,g_const,100,-2) canv=ROOT.TCanvas('roofitCanvas','RooFit') fitRooFit(pointstuple,'plot') fitTGraph(pointstuple) u=raw_input('done?')