def drawDsPlot(ds,catNum = 0): from ROOT import RooAbsData,TCanvas etaHist = RooAbsData.createHistogram(ds,'eta',100); theCanvas = TCanvas('dsCanvas','Eta histogram (category' + str(catNum) + ')' ) etaHist.Draw("hist PFC"); theCanvas.SaveAs("etaCat"+str(catNum)+"Hist"+TIME_NOW+".pdf"); #s = raw_input("Press Enter to continue..."); theCanvas.Close();
def saveEta(g, numBins = 100): from ROOT import TFile, RooAbsData import os if not os.path.isdir('etaHist'): os.makedirs('etaHist'); os.chdir('etaHist'); etaHist = RooAbsData.createHistogram(g,'eta',100); f = TFile('etaHist003_%04d.root' % SEED, 'recreate') etaHist.Write('etaHist') f.Close() del f
def _convert_rooabspdf_to_tf1(x: RooRealVar, roofit_func: RooAbsPdf, roofit_data: RooAbsData = None, *args, **kwargs) -> TF1: ''' Convert a RooAbsPdf into a TF1. Parameters ---------- x : RooRealVar RooFit RooRealVar observable roofit_func : RooAbsPdf RooFit pdf roofit_data : RooAbsData RooFit dataset Returns ------- TF1 ROOT TF1 ''' assert (isinstance(x, RooRealVar)) assert (isinstance(roofit_func, RooAbsPdf)) # Dirty trick to get correct normalization. # Plot data and model on frame then get the model back from the frame. frame = x.frame() if roofit_data: assert (isinstance(roofit_data, RooAbsData)) roofit_data.plotOn(frame) roofit_func.plotOn(frame, RooFit.Name('tmp_pdf')) if 'component' in kwargs.keys(): roofit_func.plotOn(frame, RooFit.Components(kwargs['component']), RooFit.Name('tmp_pdf_component')) return frame.findObject('tmp_pdf_component') return frame.findObject('tmp_pdf')
def _convert_rooabsdata_to_th1(x: RooRealVar, roofit_obj: RooAbsData) -> TH1: ''' Convert a RooDataHist into a TH1. Parameters ---------- x : RooRealVar ROOT RooRealVar observable roofit_obj : RooAbsData RooFit dataset Returns ------- TH1 ROOT histogram ''' assert (isinstance(x, RooRealVar) and isinstance(roofit_obj, RooAbsData)) return roofit_obj.createHistogram(x.GetName(), x.getBinning().numBins())
def createCategoryHistogram(ds,x,numCat,categoryList = None): from ROOT import RooAbsData, RooDataSet, RooPrintable, RooThresholdCategory, THStack, TF1 from ROOT.Math import GaussIntegrator import ROOT if categoryList==None: categoryList = [] for i in range(numCat): categoryList += ["Cat"+str(i+1)] etaHist = RooAbsData.createHistogram(ds,'eta',100); histSum = etaHist.Integral(); #print "HISTSUM",histSum, etaHist.Integral(0,50)+etaHist.Integral(51,100),etaHist.Integral(0,50),etaHist.Integral(51,100),"\n"; limList = [-1]; for i in range(1,numCat): start = limList[i-1]+1; targetVal = histSum/numCat; left = start; right = etaHist.GetNbinsX(); #print "\n\n\n",etaHist.Integral(start,start+1),"\n\n\n\n"; while abs(left-right)>1: if etaHist.Integral(start,int((left+right)/2))>targetVal: right = (left + right) / 2; else: left = (left + right) / 2; #print start, left, right, etaHist.Integral(start,int((left+right)/2)),targetVal,",", if abs(etaHist.Integral(start,left)-targetVal) > abs(etaHist.Integral(start,right)-targetVal): limList += [right]; else: limList += [left]; limList[0] = 0; print limList xRegions = RooThresholdCategory("tageffRegion", "region of tageff", x, categoryList[numCat-1]); for i in range(0,numCat-1): xRegions.addThreshold(etaHist.GetXaxis().GetBinCenter(limList[i+1]),categoryList[i]); xRegions.writeToStream(ROOT.cout,False); xRegions.writeToStream(ROOT.cout,True); ''' #etaSet = RooDataSet('etaSet','etaSet',ds,RooArgSet(ds.get().find['eta'])); #etaSet.Print(); #etaHist.SetAxisRange(0.1,0.2); #etaHist.SetAxisRange(0.1,0.3); ROOT.gStyle.SetPalette(ROOT.kOcean); #create stack to contain the chopped TH1Ds etaHistStack = THStack("etaHistStack", "Stack of TH1Ds"); limList += [etaHist.GetNbinsX()]; histCutterFunc = TF1("histCutterFunc","((x>=[0])?((x<[1])?1:0):0)*x",0.0,1.0); for i in range(len(limList)-1): etaHistClone = etaHist.Clone(); #etaHistClone.SetBins(limList[i+1]-limList[i],etaHist.GetBinContent(limList[i]),etaHist.GetBinContent(limList[i+1])); histCutterFunc.SetParameter(0,etaHist.GetXaxis().GetBinCenter(limList[i])); histCutterFunc.SetParameter(1,etaHist.GetXaxis().GetBinCenter(limList[i+1])); etaHistClone.Multiply(histCutterFunc); etaHistClone.SetFillColor(38+i); #etaHist.DrawCopy("hist PFC"); etaHistStack.Add(etaHistClone); etaHistStack.Draw("hist PFC"); s = raw_input("Press Enter to continue...");''' return xRegions#,x
def main(): output = argv[1] rap = argv[2] flavour = argv[3] trackType = argv[4] funct = argv[5] fit_min = int(argv[6]) fit_max = int(argv[7]) rebinFactor = int(argv[8]) i = int(argv[9]) if funct == "CB": DOCRYSTALBALL = True DOCRUIJFF = False DODOUBLECB = False elif funct == "cruijff": DOCRUIJFF = True DOCRYSTALBALL = False DODOUBLECB = False elif funct == "doubleCB": DODOUBLECB = True DOCRYSTALBALL = False DOCRUIJFF = False print("+++++++++++++++++++++++++++++++++++++++++") print("Fitting histogram for %d < pt_{l} <%d" % (ptbins[i], ptbins[i + 1])) print("+++++++++++++++++++++++++++++++++++++++++\n") wsFile = TFile("tmpWorkspace.root") ws = wsFile.Get("tempWS") # fit with a gaussian if DOCRYSTALBALL: funct = TF1("crystal", "crystalball", fit_min, fit_max) funct.SetLineColor(kRed) if ws.data("hist").sum(False) < 1500: nDOF = (fit_max - fit_min) * 2 / (rebinFactor * 4) - 3 else: nDOF = (fit_max - fit_min) * 2 / rebinFactor - 3 ws.factory( "RooCBShape::cb(mass, mean[0.0], sigma[2,0,10], alphaL[3,-25,25], nL[5,-25,25])" ) ws.factory("BreitWigner::bw(mass,meanZ[91.187], width[2.495])") bw = ws.pdf("bw") cb = ws.pdf("cb") ws.var("mass").setBins(2000, "cache") ws.var("mass").setMin("cache", 0) ws.var("mass").setMax("cache", 1000) ## need to be adjusted to be higher than limit setting sigpdf = RooFFTConvPdf("sig", "sig", ws.var("mass"), bw, cb) getattr(ws, 'import')(sigpdf, RooCmdArg()) fitResult = ws.pdf("sig").fitTo(ws.data("hist"), RooFit.Save(), RooFit.SumW2Error(kFALSE), RooFit.Minos(kFALSE)) elif DOCRUIJFF: gSystem.Load("./RooCruijff_cxx.so") ws.factory( "RooCruijff::cb(mass, mean[0.0], sigma[2,0,20], sigma, alphaL[1,0,25], alphaR[1,0,25])" ) if ws.data("hist").sum(False) < 1500: nDOF = (fit_max - fit_min) * 2 / (6) - 3 elif ws.data("hist").sum(False) < 2500: nDOF = (fit_max - fit_min) * 2 / (4) - 3 else: nDOF = (fit_max - fit_min) * 2 / rebinFactor - 3 ws.factory("BreitWigner::bw(mass,meanZ[91.187], width[2.495])") bw = ws.pdf("bw") cb = ws.pdf("cb") ws.var("mass").setBins(2000, "cache") ws.var("mass").setMin("cache", 0) ws.var("mass").setMax("cache", 1000) ## need to be adjusted to be higher than limit setting sigpdf = RooFFTConvPdf("sig", "sig", ws.var("mass"), bw, cb) getattr(ws, 'import')(sigpdf, RooCmdArg()) fitResult = ws.pdf("sig").fitTo(ws.data("hist"), RooFit.Save(), RooFit.SumW2Error(kFALSE), RooFit.Minos(kFALSE)) elif DODOUBLECB: gSystem.Load("./RooDCBShape_cxx.so") ws.factory( "RooDCBShape::cb(mass, mean[0.0,-1.5,1.5], sigma[2,0,20], alphaL[2,0,25] , alphaR[2,0,25], nL[1.5,0,25], nR[1.5,0,25])" ) if i == 0: ws.var("nL").setVal(1) ws.var("nR").setVal(1) ws.factory("BreitWigner::bw(mass,meanZ[91.187], width[2.495])") bw = ws.pdf("bw") cb = ws.pdf("cb") ws.var("mass").setBins(2000, "cache") ws.var("mass").setMin("cache", 0) ws.var("mass").setMax("cache", 1000) ## need to be adjusted to be higher than limit setting sigpdf = RooFFTConvPdf("sig", "sig", ws.var("mass"), bw, cb) getattr(ws, 'import')(sigpdf, RooCmdArg()) fitResult = ws.pdf("sig").fitTo(ws.data("hist"), RooFit.Save(), RooFit.SumW2Error(kFALSE), RooFit.Minos(kFALSE)) chi2 = RooChi2Var("bla", "blubb", ws.pdf("sig"), ws.data("hist")).getVal() if ws.data("hist").sum(False) < 1500: nDOF = (fit_max - fit_min) * 2 / (6) - 5 elif ws.data("hist").sum(False) < 2500: nDOF = (fit_max - fit_min) * 2 / (4) - 5 else: nDOF = (fit_max - fit_min) * 2 / rebinFactor - 5 chi2 = RooChi2Var("bla", "blubb", ws.pdf("sig"), ws.data("hist")).getVal() nDOFforWS = RooRealVar('nDOF', 'nDOF', nDOF) getattr(ws, 'import')(nDOFforWS, RooCmdArg()) chi2forWS = RooRealVar('chi2', 'chi2', chi2) getattr(ws, 'import')(chi2forWS, RooCmdArg()) mean = RooRealVar('Mean', 'Mean', ws.var("meanZ").getVal()) getattr(ws, 'import')(mean, RooCmdArg()) meane = RooRealVar('Meane', 'Meane', ws.var("meanZ").getError()) getattr(ws, 'import')(meane, RooCmdArg()) sig = RooRealVar('Sig', 'Sig', ws.var("sigma").getVal()) getattr(ws, 'import')(sig, RooCmdArg()) sige = RooRealVar('Sige', 'Sige', ws.var("sigma").getError()) getattr(ws, 'import')(sige, RooCmdArg()) c1 = TCanvas("c1", "c1", 700, 700) c1.cd() plotPad = TPad("plotPad", "plotPad", 0, 0, 1, 1) style = setTDRStyle() gStyle.SetOptStat(0) gStyle.SetTitleXOffset(1.45) gStyle.SetPadLeftMargin(0.2) gStyle.SetTitleYOffset(2) plotPad.UseCurrentStyle() plotPad.Draw() plotPad.cd() if DODOUBLECB or DOCRYSTALBALL or DOCRUIJFF: ws.var("mass").setBins(30) frame = ws.var('mass').frame( RooFit.Title('Invariant mass of dimuon pairs')) frame.GetXaxis().SetTitle('m_{#mu#mu} [GeV]') frame.GetYaxis().SetTitle("Events / 2 GeV") RooAbsData.plotOn(ws.data('hist'), frame, RooFit.Name("hist")) ws.pdf('sig').plotOn(frame, RooFit.Name("sig")) frame.Draw() #chi2 = frame.chiSquare("sig","hist",nDOF) else: h.GetXaxis().SetTitle("m_{ll} [GeV]") h.SetLineColor(kBlack) h.GetXaxis().SetRangeUser(fit_min, fit_max) h.SetMarkerStyle(20) h.SetMarkerSize(0.7) h.Draw("E") if DOCRYSTALBALL or DOCRUIJFF or DODOUBLECB: funct.Draw("SAME") else: gaus.Draw("SAME") latex = TLatex() latex.SetTextFont(42) latex.SetTextAlign(31) latex.SetTextSize(0.04) latex.SetNDC(True) latexCMS = TLatex() latexCMS.SetTextFont(61) latexCMS.SetTextSize(0.055) latexCMS.SetNDC(True) latexCMSExtra = TLatex() latexCMSExtra.SetTextFont(52) latexCMSExtra.SetTextSize(0.03) latexCMSExtra.SetNDC(True) latex.DrawLatex(0.95, 0.96, "(13 TeV)") cmsExtra = "Preliminary" latexCMS.DrawLatex(0.78, 0.88, "CMS") yLabelPos = 0.84 latexCMSExtra.DrawLatex(0.78, yLabelPos, "%s" % (cmsExtra)) latexFit1 = TLatex() latexFit1.SetTextFont(42) latexFit1.SetTextSize(0.035) latexFit1.SetNDC(True) latexFit1.DrawLatex(0.25, 0.84, "%d GeV < p_{T} < %d GeV" % (ptbins[i], ptbins[i + 1])) latexFit = TLatex() latexFit.SetTextFont(42) latexFit.SetTextSize(0.030) latexFit.SetNDC(True) latexFit.DrawLatex( 0.25, 0.74, "%s = %5.3g #pm %5.3g GeV" % ("mean bias", ws.var("mean").getVal(), ws.var("mean").getError())) if funct == "CB": latexFit.DrawLatex( 0.25, 0.7, "%s = %5.3g #pm %5.3g GeV" % ("#sigma", ws.var("sigma").getVal(), ws.var("sigma").getError())) latexFit.DrawLatex( 0.25, 0.66, "%s = %5.3g #pm %5.3g" % ("alphaL", ws.var("alphaL").getVal(), ws.var("alphaL").getError())) latexFit.DrawLatex( 0.25, 0.62, "%s = %5.3g #pm %5.3g" % ("nL", ws.var("nL").getVal(), ws.var("nL").getError())) if funct == "cruijff": latexFit.DrawLatex( 0.25, 0.7, "%s = %5.3g #pm %5.3g GeV" % ("#sigma", ws.var("sigma").getVal(), ws.var("sigma").getError())) latexFit.DrawLatex( 0.25, 0.66, "%s = %5.3g #pm %5.3g" % ("alphaL", ws.var("alphaL").getVal(), ws.var("alphaL").getError())) latexFit.DrawLatex( 0.25, 0.62, "%s = %5.3g #pm %5.3g" % ("alphaR", ws.var("alphaR").getVal(), ws.var("alphaR").getError())) if funct == "doubleCB": latexFit.DrawLatex( 0.25, 0.7, "%s = %5.3g #pm %5.3g GeV" % ("#sigma", ws.var("sigma").getVal(), ws.var("sigma").getError())) latexFit.DrawLatex( 0.25, 0.66, "%s = %5.3g #pm %5.3g" % ("alphaL", ws.var("alphaL").getVal(), ws.var("alphaL").getError())) latexFit.DrawLatex( 0.25, 0.62, "%s = %5.3g #pm %5.3g" % ("alphaR", ws.var("alphaR").getVal(), ws.var("alphaR").getError())) latexFit.DrawLatex( 0.25, 0.58, "%s = %5.3g #pm %5.3g" % ("nL", ws.var("nL").getVal(), ws.var("nL").getError())) latexFit.DrawLatex( 0.25, 0.54, "%s = %5.3g #pm %5.3g" % ("nR", ws.var("nR").getVal(), ws.var("nR").getError())) latexFit.DrawLatex( 0.25, 0.5, "#chi^{2}/ndf = %5.1f / %2.0f = %4.2f" % (chi2, nDOF, chi2 / nDOF)) saveas = "/MassRes_%s_%s_Pt%d_%d_%s" % (trackType, flavour, ptbins[i], ptbins[i + 1], rap) c1.SaveAs(output + saveas + ".root") c1.SaveAs(output + saveas + ".C") c1.SaveAs(output + saveas + ".png") c1.SaveAs(output + saveas + ".pdf") print("DONE Fitting...") ws.writeToFile("tmpWorkspaceReturn.root")
def mbc_dline_che(evtfile, mc, setMres, setGamma, setR, sp1, sp2, sp3, fa, fb, setmd, setp, setxi, setN1, setN2, setNbkgd1, setNbkgd2, title1, title2, epsfile, txtfile, ymin=0.5, cuts=None, err_type='SYMM', test=False): from ROOT import (gROOT, RooRealVar, RooCategory, RooArgSet, RooDataSet, RooFit, RooGaussian, RooArgList, RooAddPdf, RooSimultaneous, RooArgusBG, RooFormulaVar, RooChebychev, RooAbsData, RooDataHist, TCanvas, kRed, kBlue, kGreen, kMagenta, TPaveText, RooDLineShape) set_root_style(stat=1, grid=0) mbc = RooRealVar('mbc', 'Beam constrained mass', 1.83, 1.89, 'GeV') ebeam = RooRealVar('ebeam','Ebeam', 1.8815, 1.892, 'GeV') dflav = RooCategory('dflav','D0 flavor') dflav.defineType('dflav',1) dflav.defineType('dbarflav',-1) if cuts != None: if 'kkmass' in cuts: kkmass = RooRealVar('kkmass', 'KK invariant mass', 0.97, 1.90, 'GeV') ras = RooArgSet(mbc, ebeam, kkmass, dflav) dataset = RooDataSet.read(evtfile, ras) else: raise NameError(cuts) sys.stdout.write('Using cuts: %s...' %cuts) dataset = dataset.reduce(cuts) sys.stdout.write(' selected %s events.\n' % dataset.numEntries()) else: ras = RooArgSet(mbc, ebeam, dflav) dataset = RooDataSet.read(evtfile, ras) res = RooRealVar("datares", "datares", mc) mres = RooRealVar("mres","mres", setMres) gamma = RooRealVar('gamma', 'gamma', setGamma) r = RooRealVar('r', 'r', setR) sigmaE = RooRealVar("sigmaE","sigmaE", 0.0021) sigmap1 = RooRealVar("sigmap1","sigmap1", sp1, 0.002, 0.040) scalep2 = RooRealVar("scalep2","scalep2",2.00,1.500,5.500) scalep3 = RooRealVar("scalep3","scalep3",5.00,3.00,10.000) scalep2.setVal(sp2) scalep2.setConstant(1) scalep3.setVal(sp3) scalep3.setConstant(1) as12 = RooArgList(sigmap1,scalep2) sigmap2 = RooFormulaVar("sigmap2","sigma2","sigmap1*scalep2", as12) as123 = RooArgList(sigmap1,scalep2,scalep3) sigmap3 = RooFormulaVar("sigmap3","sigma3","sigmap1*scalep2*scalep3", as123) md = RooRealVar("md","md", setmd,1.863,1.875) f2 = RooRealVar("f2","f2", fa) f3 = RooRealVar("f3","f3", fb) al23 = RooArgList(f2,f3) f1 = RooFormulaVar("f1","f1","1.0-f2-f3", al23) # Construct signal shape fcn1_1 = RooDLineShape("DLineshape1_1","DLineShape1_1",4,mbc,ebeam, mres,gamma,r,sigmaE,sigmap1,md,res) fcn1_2 = RooDLineShape("DLineshape1_2","DLineShape1_2",4,mbc,ebeam, mres,gamma,r,sigmaE,sigmap2,md,res) fcn1_3 = RooDLineShape("DLineshape1_3","DLineShape1_3",4,mbc,ebeam, mres,gamma,r,sigmaE,sigmap3,md,res) fcn2_1 = RooDLineShape("DLineshape2_1","DLineShape2_1",4,mbc,ebeam, mres,gamma,r,sigmaE,sigmap1,md,res) fcn2_2 = RooDLineShape("DLineshape2_2","DLineShape2_2",4,mbc,ebeam, mres,gamma,r,sigmaE,sigmap2,md,res) fcn2_3 = RooDLineShape("DLineshape2_3","DLineShape2_3",4,mbc,ebeam, mres,gamma,r,sigmaE,sigmap3,md,res) alf1_123 = RooArgList(fcn1_1,fcn1_2,fcn1_3) af12 = RooArgList(f1,f2) sigpdf = RooAddPdf("signal1_3","signal1_3", alf1_123, af12) alf2_123 = RooArgList(fcn2_1,fcn2_2,fcn2_3) sigbarpdf = RooAddPdf("signal2_3","signal2_3", alf2_123, af12) con0 = RooRealVar('c0', 'constant', -1, 1) con1 = RooRealVar('c1', 'linear', -10, 10) con2 = RooRealVar('c2', 'quadratic', 1) bkgpdf = RooChebychev('bkgpdf', 'Background', mbc, RooArgList(con1, con2)) bkgbarpdf = RooChebychev('bkgbarpdf', 'Background', mbc, RooArgList(con1, con2)) yld = RooRealVar('yld', 'D yield', 100, 0, 2000) bkg = RooRealVar('bkg', 'Background', 100, 0, 1000) sumpdf = RooAddPdf('sumpdf', 'Sum pdf', RooArgList(sigpdf, bkgpdf), RooArgList(yld, bkg)) yldbar = RooRealVar('yldbar', 'Dbar yield', 100, 0, 2000) bkgbar = RooRealVar('bkgbar', 'Background', 100, 0, 1000) sumpdfbar = RooAddPdf('sumpdfbar', 'Sum pdf', RooArgList(sigbarpdf, bkgbarpdf), RooArgList(yldbar, bkgbar)) totalpdf = RooSimultaneous('rs', 'Simultaneous PDF', dflav) totalpdf.addPdf(sumpdf, 'dflav') totalpdf.addPdf(sumpdfbar, 'dbarflav') MINUIT = 'ermh4' if err_type == 'ASYM': MINUIT = 'erh4' if test: sys.stdout.write('Will save epsfile as: %s \n' %epsfile) sys.stdout.write('Will save txtfile as: %s \n' %txtfile) return if dataset.numEntries() == 0: yld.setVal(0) yldbar.setVal(0) else: # Start Fitting fitres = totalpdf.fitTo(dataset, MINUIT) fitres.Print('v') # Save plots canvas = TCanvas('canvas','mbc', 400, 400); xframe=mbc.frame(50) ProjWData = RooFit.ProjWData(dataset) RooAbsData.plotOn(dataset, xframe) totalpdf.plotOn(xframe, ProjWData) totalpdf.paramOn(xframe) xframe.Draw() canvas.Print(epsfile) # Save fitting parameters pars = [bkg, bkgbar, con1, md, sigmap1, yld, yldbar] save_fit_result(pars, txtfile, err_type=err_type, verbose=1)
def mbc_gau_che(evtfile, mc, setMres, setGamma, setR, sp1, sp2, sp3, fa, fb, setmd, setp, setxi, setN1, setN2, setNbkgd1, setNbkgd2, title1, title2, epsfile, txtfile, ymin=0.5, cuts=None, err_type='SYMM', test=False): from ROOT import (gROOT, RooRealVar, RooCategory, RooArgSet, RooDataSet, RooFit, RooGaussian, RooArgList, RooAddPdf, RooSimultaneous, RooArgusBG, RooFormulaVar, RooChebychev, RooAbsData, RooDataHist, TCanvas, kRed, kBlue, kGreen, kMagenta, TPaveText) set_root_style(stat=1, grid=0) mbc = RooRealVar('mbc', 'Beam constrained mass', 1.83, 1.89, 'GeV') ebeam = RooRealVar('ebeam','Ebeam', 1.8815, 1.892, 'GeV') dflav = RooCategory('dflav','D0 flavor') dflav.defineType('dflav',1) dflav.defineType('dbarflav',-1) if cuts != None: if 'kkmass' in cuts: kkmass = RooRealVar('kkmass', 'KK invariant mass', 0.97, 1.90, 'GeV') ras = RooArgSet(mbc, ebeam, kkmass, dflav) dataset = RooDataSet.read(evtfile, ras) elif 'kpimass' in cuts: kpimass = RooRealVar('kpimass', 'Kpi invariant mass', 0.6, 1.4, 'GeV') ras = RooArgSet(mbc, ebeam, kpimass, dflav) dataset = RooDataSet.read(evtfile, ras) else: raise NameError(cuts) sys.stdout.write('Using cuts: %s...' %cuts) dataset = dataset.reduce(cuts) sys.stdout.write(' selected %s events.\n' % dataset.numEntries()) else: ras = RooArgSet(mbc, ebeam, dflav) dataset = RooDataSet.read(evtfile, ras) #sigma = RooRealVar('sigma', 'D width', 0.0001, 0.005, 'GeV') sigma = RooRealVar('sigma', 'D width', 0.00468, 'GeV') mbc_dp = RooRealVar('mbc_dp', 'D+ Mass', 1.86962, 'GeV') sigpdf = RooGaussian('gauss_dp', 'D+ gaussian', mbc, mbc_dp, sigma) #arg_cutoff = RooRealVar('arg_cutoff', 'Argus cutoff', 1.88, 1.89, 'GeV') #arg_slope = RooRealVar('arg_slope', 'Argus slope', -10, -100, -1) #bkgpdf = RooArgusBG('argus', 'Argus BG', mbc, arg_cutoff, arg_slope) con0 = RooRealVar('c0', 'constant', -1, 1) con1 = RooRealVar('c1', 'linear', -10, 10) con2 = RooRealVar('c2', 'quadratic', 1) bkgpdf = RooChebychev('bkgpdf', 'Background', mbc, RooArgList(con1, con2)) yld = RooRealVar('yld', 'D yield', 100, 0, 2000) bkg = RooRealVar('bkg', 'Background', 100, 0, 1000) sumpdf = RooAddPdf('sumpdf', 'Sum pdf', RooArgList(sigpdf, bkgpdf), RooArgList(yld, bkg)) yldbar = RooRealVar('yldbar', 'Dbar yield', 100, 0, 2000) bkgbar = RooRealVar('bkgbar', 'Background', 100, 0, 1000) sumpdfbar = RooAddPdf('sumpdfbar', 'Sum pdf', RooArgList(sigpdf, bkgpdf), RooArgList(yldbar, bkgbar)) totalpdf = RooSimultaneous('rs', 'Simultaneous PDF', dflav) totalpdf.addPdf(sumpdf, 'dflav') totalpdf.addPdf(sumpdfbar, 'dbarflav') MINUIT = 'ermh4' if err_type == 'ASYM': MINUIT = 'erh4' if test: sys.stdout.write('Will save epsfile as: %s \n' %epsfile) sys.stdout.write('Will save txtfile as: %s \n' %txtfile) return if dataset.numEntries() == 0: yld.setVal(0) yldbar.setVal(0) else: # Start Fitting fitres = totalpdf.fitTo(dataset, MINUIT) fitres.Print('v') # Save plots canvas = TCanvas('canvas','mbc', 400, 400); xframe=mbc.frame(50) ProjWData = RooFit.ProjWData(dataset) RooAbsData.plotOn(dataset, xframe) totalpdf.plotOn(xframe, ProjWData) totalpdf.paramOn(xframe) xframe.Draw() canvas.Print(epsfile) # Save fitting parameters pars = [bkg, bkgbar, con1, yld, yldbar] save_fit_result(pars, txtfile, err_type=err_type, verbose=1)
from ROOT import TLine, TLegend, TPad from ROOT import TFile, TH1, TH1F, TCanvas, TNtuple, TTreeReader, TTreeReaderValue from ROOT import RooDataSet, RooFormulaVar, RooLinkedList, RooBernstein from ROOT import RooStats, gPad, RooAbsData, RooAbsReal, RooBinning from ROOT import kGreen, kRed, kBlack, kBlue, kDashed, kDotted, kMagenta from ROOT import RooRealVar, RooAbsPdf, RooChebychev, RooExponential, RooGaussian, RooAbsPdf from ROOT import RooPlot, RooAddPdf, RooDataHist, RooArgSet, RooArgList from ROOT import RooDataSet, RooFormulaVar, RooLinkedList, RooBernstein, RooVoigtian from ROOT import RooFit, gStyle, kFullCircle, kTRUE, kFALSE from ROOT.RooFit import Layout, Components, Title, Name, Normalization, Layout, PrintLevel from ROOT.RooFit import Format, Label, Parameters, Range, LineColor, LineStyle, SelectVars from ROOT.RooAbsReal import Relative RooAbsData.setDefaultStorageType(RooAbsData.Tree) parser = argparse.ArgumentParser() parser.add_argument('--debug', action='store_true') parser.add_argument('--input', type=str, default="2mu2k_tree.root") parser.add_argument('--binned', action='store_true') parser.add_argument('--nonprompt', action='store_true') parser.add_argument('--prompt', action='store_true') parser.add_argument('--nofit', action='store_false') parser.add_argument('--nofitkk', action='store_false') parser.add_argument('--nofitb0', action='store_false') parser.add_argument('--nofitmm', action='store_false') parser.add_argument('--noplot', action='store_false') parser.add_argument('--numcpu', type=int, default=4) parser.add_argument('--nsignal', type=float, default=100000.) parser.add_argument('--ptcuts', type=float, default=None)
def studyVqqResolution(rootFile): #get all from file histos = {} inF = TFile.Open(rootFile) keys = inF.GetListOfKeys() for k in keys: obj = inF.Get(k.GetName()) obj.SetDirectory(0) histos[k.GetName()] = obj inF.Close() #plot gROOT.SetBatch() gROOT.SetStyle('Plain') gStyle.SetOptStat(0) gStyle.SetOptFit(1111) gStyle.SetOptTitle(0) gStyle.SetStatFont(42) kin = ['', '30to40', '40to50', '50to75', '75to100', '100toInf'] for k in kin: c = TCanvas('c', 'c', 600, 600) c.cd() c.SetCanvasSize(1000, 500) c.SetWindowSize(1000, 500) c.Divide(2, 1) c.cd(1) histos['deta' + k + 'barrel'].SetLineWidth(2) histos['deta' + k + 'barrel'].SetTitle('barrel') histos['deta' + k + 'barrel'].Draw('hist') histos['deta' + k + 'endcap'].SetLineWidth(2) histos['deta' + k + 'endcap'].SetLineStyle(7) histos['deta' + k + 'endcap'].SetTitle('endcap') histos['deta' + k + 'endcap'].Draw('histsame') leg = TLegend(0.6, 0.92, 0.9, 0.98) leg.SetFillStyle(0) leg.SetBorderSize(0) leg.SetTextFont(42) leg.AddEntry(histos['deta' + k + 'barrel'], 'barrel', 'f') leg.AddEntry(histos['deta' + k + 'endcap'], 'endcap', 'f') leg.SetNColumns(2) leg.Draw() drawHeader() c.cd(2) histos['dphi' + k + 'barrel'].SetLineWidth(2) histos['dphi' + k + 'barrel'].SetTitle('barrel') histos['dphi' + k + 'barrel'].Draw('hist') histos['dphi' + k + 'endcap'].SetLineWidth(2) histos['dphi' + k + 'endcap'].SetLineStyle(7) histos['dphi' + k + 'endcap'].SetTitle('endcap') histos['dphi' + k + 'endcap'].Draw('histsame') c.Modified() c.Update() c.SaveAs('dr_%s.png' % k) labels = [] responseVars = ['dpt', 'den', 'dphi', 'deta', 'dr'] for r in responseVars: barrelResponse = TGraphErrors() barrelResponse.SetName(r + 'barrelresponse') barrelResponse.SetLineWidth(2) barrelResponse.SetFillStyle(0) barrelResponse.SetMarkerStyle(20) barrelCoreResponse = barrelResponse.Clone(r + 'barrelcoreresponse') endcapResponse = TGraphErrors() endcapResponse.SetName(r + 'endcapresponse') endcapResponse.SetLineWidth(2) endcapResponse.SetFillStyle(0) endcapResponse.SetMarkerStyle(24) endcapCoreResponse = endcapResponse.Clone(r + 'endcapresponse') for k in kin: c.cd() c.Clear() c.SetWindowSize(1000, 500) c.Divide(2, 1) for i in [1, 2]: c.cd(i) reg = 'barrel' if i == 2: reg = 'endcap' h = histos[r + k + reg] x = RooRealVar("x", h.GetXaxis().GetTitle(), h.GetXaxis().GetXmin(), h.GetXaxis().GetXmax()) data = RooDataHist("data", "dataset with x", RooArgList(x), h) frame = x.frame() RooAbsData.plotOn(data, frame, RooFit.DataError(RooAbsData.SumW2)) mean1 = RooRealVar("mean1", "mean1", 0, -0.5, 0.5) sigma1 = RooRealVar("sigma1", "sigma1", 0.1, 0.01, 1.0) gauss1 = RooGaussian("g1", "g", x, mean1, sigma1) if r == 'dpt' or r == 'den': mean2 = RooRealVar("mean2", "mean2", 0, -0.5, 0.5) sigma2 = RooRealVar("sigma2", "sigma2", 0.1, 0.01, 1.0) alphacb = RooRealVar("alphacb", "alphacb", 1, 0.1, 3) ncb = RooRealVar("ncb", "ncb", 4, 1, 100) gauss2 = RooCBShape("cb2", "cb", x, mean2, sigma2, alphacb, ncb) else: mean1.setRange(0, 0.5) mean2 = RooRealVar("mean2", "mean", 0, 0, 1) sigma2 = RooRealVar("sigma2", "sigma", 0.1, 0.01, 1.0) gauss2 = RooGaussian("g2", "g", x, mean2, sigma2) frac = RooRealVar("frac", "fraction", 0.9, 0.0, 1.0) if data.sumEntries() < 100: frac.setVal(1.0) frac.setConstant(True) model = RooAddPdf("sum", "g1+g2", RooArgList(gauss1, gauss2), RooArgList(frac)) status = model.fitTo(data, RooFit.Save()).status() if status != 0: continue model_cdf = model.createCdf(RooArgSet(x)) cl = 0.90 ul = 0.5 * (1.0 + cl) closestToCL = 1.0 closestToUL = -1 closestToMedianCL = 1.0 closestToMedian = -1 for ibin in xrange(1, h.GetXaxis().GetNbins() * 10): xval = h.GetXaxis().GetXmin() + ( ibin - 1) * h.GetXaxis().GetBinWidth(ibin) / 10. x.setVal(xval) cdfValToCL = math.fabs(model_cdf.getVal() - ul) if cdfValToCL < closestToCL: closestToCL = cdfValToCL closestToUL = xval cdfValToCL = math.fabs(model_cdf.getVal() - 0.5) if cdfValToCL < closestToMedianCL: closestToMedianCL = cdfValToCL closestToMedian = xval RooAbsPdf.plotOn(model, frame) frame.Draw() if i == 1: drawHeader() labels.append(TPaveText(0.6, 0.92, 0.9, 0.98, 'brNDC')) ilab = len(labels) - 1 labels[ilab].SetName(r + k + 'txt') labels[ilab].SetBorderSize(0) labels[ilab].SetFillStyle(0) labels[ilab].SetTextFont(42) labels[ilab].SetTextAlign(12) kinReg = k.replace('to', '-') kinReg = kinReg.replace('Inf', '#infty') labels[ilab].AddText('[' + reg + '] ' + kinReg) labels[ilab].Draw() resolutionVal = math.fabs(closestToUL - closestToMedian) responseGr = barrelResponse responseCoreGr = barrelCoreResponse coreResolutionVal = sigma1.getVal() coreResolutionErr = sigma1.getError() if frac.getVal() < 0.7 and (sigma2.getVal() < sigma1.getVal()): coreResolutionVal = sigma2.getVal() coreResolutionErr = sigma2.getError() if i == 2: responseGr = endcapResponse responseCoreGr = endcapCoreResponse if k != '': nrespPts = responseGr.GetN() kinAvg = 150 kinWidth = 50 if k == '30to40': kinAvg = 35 kinWidth = 5 if k == '40to50': kinAvg = 45 kinWidth = 5 if k == '50to75': kinAvg = 62.5 kinWidth = 12.5 elif k == '75to100': kinAvg = 87.5 kinWidth = 12.5 responseGr.SetPoint(nrespPts, kinAvg, resolutionVal) responseCoreGr.SetPoint(nrespPts, kinAvg, coreResolutionVal) responseCoreGr.SetPointError(nrespPts, kinWidth, coreResolutionErr) labels.append(TPaveText(0.15, 0.7, 0.4, 0.9, 'brNDC')) ilab = len(labels) - 1 labels[ilab].SetName(r + k + 'fitrestxt') labels[ilab].SetBorderSize(0) labels[ilab].SetFillStyle(0) labels[ilab].SetTextFont(42) labels[ilab].SetTextAlign(12) labels[ilab].AddText('Gaussian #1 (f=%3.3f)' % frac.getVal()) labels[ilab].AddText('#mu=%3.3f#pm%3.3f' % (mean1.getVal(), mean1.getError())) labels[ilab].AddText('#sigma=%3.3f#pm%3.3f' % (sigma1.getVal(), sigma1.getError())) labels[ilab].AddText('Gaussian #2 (f=%3.3f)' % (1 - frac.getVal())) labels[ilab].AddText('#mu=%3.3f#pm%3.3f' % (mean2.getVal(), mean2.getError())) labels[ilab].AddText('#sigma=%3.3f#pm%3.3f' % (sigma2.getVal(), sigma2.getError())) labels[ilab].Draw() c.Modified() c.Update() c.SaveAs(r + 'res_' + k + '.png') frame = TGraphErrors() frame.SetPoint(0, 0, 0) frame.SetPoint(1, 200, 0.3) frame.SetMarkerStyle(1) frame.SetFillStyle(0) frame.SetName('frame') cresp = TCanvas('cresp', 'cresp', 500, 500) cresp.cd() frame.Draw('ap') barrelResponse.Draw('pl') endcapResponse.Draw('pl') frame.GetXaxis().SetTitle("Quark transverse momentum [GeV]") frame.GetYaxis().SetTitle("Resolution %3.2f C.L." % cl) frame.GetYaxis().SetTitleOffset(1.4) frame.GetYaxis().SetNdivisions(10) drawHeader() leg = TLegend(0.6, 0.92, 0.9, 0.98) leg.SetFillStyle(0) leg.SetBorderSize(0) leg.SetTextFont(42) leg.AddEntry(barrelResponse, 'barrel', 'fp') leg.AddEntry(endcapResponse, 'endcap', 'fp') leg.SetNColumns(2) leg.Draw() cresp.Modified() cresp.Update() cresp.SaveAs(r + 'res_evol.png') frameCore = frame.Clone('framecore') cresp.Clear() frameCore.Draw('ap') barrelCoreResponse.Draw('pl') endcapCoreResponse.Draw('pl') frameCore.GetXaxis().SetTitle("Quark transverse momentum [GeV]") frameCore.GetYaxis().SetTitle("Core resolution") frameCore.GetYaxis().SetTitleOffset(1.4) frameCore.GetYaxis().SetNdivisions(10) frameCore.GetYaxis().SetRangeUser(0, 0.2) drawHeader() leg = TLegend(0.6, 0.92, 0.9, 0.98) leg.SetFillStyle(0) leg.SetBorderSize(0) leg.SetTextFont(42) leg.AddEntry(barrelCoreResponse, 'barrel', 'fp') leg.AddEntry(endcapCoreResponse, 'endcap', 'fp') leg.SetNColumns(2) leg.Draw() cresp.Modified() cresp.Update() cresp.SaveAs(r + 'rescore_evol.png') bosons = ['h', 'z', 'w'] kin = ['', '50', '100'] region = ['', 'bb', 'eb', 'ee'] for k in kin: for r in region: c = TCanvas('c', 'c', 600, 600) c.cd() histos['mjj' + k + r].Rebin() histos['mjj' + k + r].Draw() ic = 1 leg = TLegend(0.6, 0.92, 0.9, 0.98) leg.SetFillStyle(0) leg.SetBorderSize(0) leg.SetTextFont(42) leg.AddEntry(histos['mjj' + k + r], 'inclusive', 'f') for b in bosons: if histos[b + 'mjj' + k + r].Integral() <= 0: continue ic = ic + 1 histos[b + 'mjj' + k + r].Rebin() histos[b + 'mjj' + k + r].SetLineColor(ic) histos[b + 'mjj' + k + r].SetLineWidth(2) histos[b + 'mjj' + k + r].SetMarkerColor(ic) histos[b + 'mjj' + k + r].SetMarkerStyle(1) histos[b + 'mjj' + k + r].SetFillStyle(3000 + ic) histos[b + 'mjj' + k + r].SetFillColor(ic) histos[b + 'mjj' + k + r].Draw('histsame') leg.AddEntry(histos[b + 'mjj' + k + r], b, "f") leg.SetNColumns(ic) leg.Draw() drawHeader() labels.append(TPaveText(0.65, 0.8, 0.9, 0.9, 'brNDC')) ilab = len(labels) - 1 labels[ilab].SetName(k + r + 'mjj') labels[ilab].SetBorderSize(0) labels[ilab].SetFillStyle(0) labels[ilab].SetTextFont(42) labels[ilab].SetTextAlign(12) regionTitle = "inclusive" if r == 'bb': regionTitle = 'barrel-barrel' if r == 'eb': regionTitle = 'endcap-barrel' if r == 'ee': regionTitle = 'endcap-endcap' labels[ilab].AddText(regionTitle) ptthreshold = 30 if k != '': ptthreshold = float(k) labels[ilab].AddText('p_{T}>%3.0f GeV' % ptthreshold) labels[ilab].Draw() c.Modified() c.Update() c.SaveAs('mjj' + k + r + '.png') massResolutionGrs = [] for r in region: massResolution = TGraphErrors() massResolution.SetName(r + 'dm') massResolution.SetLineWidth(2) massResolution.SetFillStyle(0) massResolution.SetMarkerStyle(20 + len(massResolutionGrs)) massResolution.SetMarkerColor(1 + len(massResolutionGrs)) massResolution.SetLineColor(1 + len(massResolutionGrs)) massResolution.SetFillColor(1 + len(massResolutionGrs)) massResolutionGrs.append(massResolution) for k in kin: c = TCanvas('c', 'c', 600, 600) c.cd() h = histos['dmjj' + k + r] x = RooRealVar("x", h.GetXaxis().GetTitle(), h.GetXaxis().GetXmin(), h.GetXaxis().GetXmax()) data = RooDataHist("data", "dataset with x", RooArgList(x), h) frame = x.frame() RooAbsData.plotOn(data, frame, RooFit.DataError(RooAbsData.SumW2)) mean1 = RooRealVar("mean1", "mean1", 0, -0.5, 0.5) sigma1 = RooRealVar("sigma1", "sigma1", 0.1, 0.01, 1.0) gauss1 = RooGaussian("g1", "g", x, mean1, sigma1) mean2 = RooRealVar("mean2", "mean2", 0, -0.5, 0.5) sigma2 = RooRealVar("sigma2", "sigma2", 0.1, 0.01, 1.0) alphacb = RooRealVar("alphacb", "alphacb", 1, 0.1, 3) ncb = RooRealVar("ncb", "ncb", 4, 1, 100) gauss2 = RooCBShape("cb2", "cb", x, mean2, sigma2, alphacb, ncb) frac = RooRealVar("frac", "fraction", 0.9, 0.0, 1.0) model = RooAddPdf("sum", "g1+g2", RooArgList(gauss1, gauss2), RooArgList(frac)) status = model.fitTo(data, RooFit.Save()).status() if status != 0: continue RooAbsPdf.plotOn(model, frame) frame.Draw() labels.append(TPaveText(0.6, 0.65, 0.85, 0.9, 'brNDC')) ilab = len(labels) - 1 labels[ilab].SetName(r + k + 'dmfitrestxt') labels[ilab].SetBorderSize(0) labels[ilab].SetFillStyle(0) labels[ilab].SetTextFont(42) labels[ilab].SetTextAlign(12) labels[ilab].AddText('Gaussian #1 (f=%3.3f)' % frac.getVal()) labels[ilab].AddText('#mu=%3.3f#pm%3.3f' % (mean1.getVal(), mean1.getError())) labels[ilab].AddText('#sigma=%3.3f#pm%3.3f' % (sigma1.getVal(), sigma1.getError())) labels[ilab].AddText('Gaussian #2 (f=%3.3f)' % (1 - frac.getVal())) labels[ilab].AddText('#mu=%3.3f#pm%3.3f' % (mean2.getVal(), mean2.getError())) labels[ilab].AddText('#sigma=%3.3f#pm%3.3f' % (sigma2.getVal(), sigma2.getError())) labels[ilab].Draw() drawHeader() labels.append(TPaveText(0.15, 0.8, 0.4, 0.9, 'brNDC')) ilab = len(labels) - 1 labels[ilab].SetName(k + r + 'dmjj') labels[ilab].SetBorderSize(0) labels[ilab].SetFillStyle(0) labels[ilab].SetTextFont(42) labels[ilab].SetTextAlign(12) regionTitle = "inclusive" if r == 'bb': regionTitle = 'barrel-barrel' if r == 'eb': regionTitle = 'endcap-barrel' if r == 'ee': regionTitle = 'endcap-endcap' labels[ilab].AddText(regionTitle) ptthreshold = 30 if k != '': ptthreshold = float(k) labels[ilab].AddText('p_{T}>%3.0f GeV' % ptthreshold) labels[ilab].Draw() c.Modified() c.Update() c.SaveAs('dmjj' + k + r + '.png') massResolution.SetTitle(regionTitle) ip = massResolution.GetN() x = 40 xerr = 10 if k == '50': x = 75 xerr = 25 elif k == '100': x = 150 xerr = 50 y = sigma1.getVal() yerr = sigma1.getError() if frac.getVal() < 0.8: if sigma2.getVal() < sigma1.getVal(): y = sigma2.getVal() ey = sigma2.getError() massResolution.SetPoint(ip, x, y) massResolution.SetPointError(ip, xerr, yerr) frame = TGraphErrors() frame.SetPoint(0, 0, 0) frame.SetPoint(1, 200, 0.2) frame.SetMarkerStyle(1) frame.SetFillStyle(0) frame.SetName('dmframe') cdmevol = TCanvas('cdmevol', 'cdmevol', 500, 500) cdmevol.cd() frame.Draw('ap') leg = TLegend(0.6, 0.92, 0.9, 0.98) leg.SetFillStyle(0) leg.SetBorderSize(0) leg.SetTextFont(42) for dmGr in massResolutionGrs: dmGr.Draw('pl') leg.AddEntry(dmGr, dmGr.GetTitle(), 'fp') frame.GetXaxis().SetTitle("Leading quark transverse momentum [GeV]") frame.GetYaxis().SetTitle("Core resolution") frame.GetYaxis().SetTitleOffset(1.4) frame.GetYaxis().SetNdivisions(10) drawHeader() leg.SetNColumns(2) leg.Draw() cdmevol.Modified() cdmevol.Update() cdmevol.SaveAs('dm_evol.png') c = TCanvas('c', 'c', 600, 600) c.cd() histos['sel'].Draw('histtext') drawHeader() c.Modified() c.Update() c.SaveAs('selection.png') return
#uncVZ.setRange("fitRange",mean-2*sigma,50) #result = gaussexp_pdf.fitTo(dataInRange,RooFit.Range("fitRange"),RooFit.PrintLevel(-1),RooFit.Save()) #gaussexp_params.printLatex() gaussexp_pdf.paramOn(frame) #gaussexp_pdf.plotOn(frame,RooFit.Range("fitRange"),RooFit.NormRange("fitRange")) #gaussexp_pdf.plotOn(frame,RooFit.Range("fitRange"),RooFit.NormRange("fitRange"),RooFit.LineColor(result.status()+1)) frame.SetAxisRange(-50,50) frame.SetMinimum(0.5) frame.Draw() c.Print(remainder[0]+".pdf","Title:slice_"+str(i)+"_roofit") #h1d = dataInRange.createHistogram("data_in_range",w.var("uncVZ"),"Binning(100,-50,50)") #h1d = dataInRange.createHistogram("data_in_range",w.var("uncVZ")) h1d = RooAbsData.createHistogram(dataInRange,"data_in_range",w.var("uncVZ"),RooFit.Binning(100,-50,50)) print h1d.GetEntries() #events.Draw("uncVZ>>hnew(100,-50,50)",cuts+"&&uncM>{0}&&uncM<{1}".format(lowedge,highedge),"goff") #h1d = gDirectory.Get("hnew") h1d.Sumw2() h1d.Scale(1/scale_factor) #h1d=totalH.ProjectionY("slice_{}".format(i),i,i+binning-1) #h1d=h1d.Rebin(2,"slice") integrals.append(h1d.Integral()) h1d.SetTitle(name) print name if (h1d.GetEntries()>100): fit=h1d.Fit("gaus","QS") peak=fit.Get().Parameter(0) mean=fit.Get().Parameter(1)
def createCategoryHistogram(ds, x, numCat, categoryList=None): from ROOT import RooAbsData, RooDataSet, RooPrintable, RooThresholdCategory, THStack, TF1 from ROOT.Math import GaussIntegrator import ROOT if categoryList == None: categoryList = [] for i in range(numCat): categoryList += ["Cat" + str(i + 1)] etaHist = RooAbsData.createHistogram(ds, 'eta', 100) histSum = etaHist.Integral() #print "HISTSUM",histSum, etaHist.Integral(0,50)+etaHist.Integral(51,100),etaHist.Integral(0,50),etaHist.Integral(51,100),"\n"; limList = [-1] for i in range(1, numCat): start = limList[i - 1] + 1 targetVal = histSum / numCat left = start right = etaHist.GetNbinsX() #print "\n\n\n",etaHist.Integral(start,start+1),"\n\n\n\n"; while abs(left - right) > 1: if etaHist.Integral(start, int((left + right) / 2)) > targetVal: right = (left + right) / 2 else: left = (left + right) / 2 #print start, left, right, etaHist.Integral(start,int((left+right)/2)),targetVal,",", if abs(etaHist.Integral(start, left) - targetVal) > abs(etaHist.Integral(start, right) - targetVal): limList += [right] else: limList += [left] limList[0] = 0 print limList xRegions = RooThresholdCategory("tageffRegion", "region of tageff", x, categoryList[numCat - 1]) for i in range(0, numCat - 1): xRegions.addThreshold(etaHist.GetXaxis().GetBinCenter(limList[i + 1]), categoryList[i]) xRegions.writeToStream(ROOT.cout, False) xRegions.writeToStream(ROOT.cout, True) #etaSet = RooDataSet('etaSet','etaSet',ds,RooArgSet(ds.get().find['eta'])); #etaSet.Print(); #etaHist.SetAxisRange(0.1,0.2); #etaHist.SetAxisRange(0.1,0.3); from ROOT import TCanvas histCanvas = TCanvas() ROOT.gStyle.SetPalette(ROOT.kOcean) #create stack to contain the chopped TH1Ds #etaHistStack = THStack("etaHistStack", "Distribution of #eta;#eta;number of pseudo-experiments"); limList += [etaHist.GetNbinsX()] histCutterFunc = TF1("histCutterFunc", "((x>=[0])?((x<[1])?1:0):0)", 0.0, 1.0) etaMax = etaHist.GetMaximum() print etaMax cloneList = [] etaHist.GetYaxis().SetRangeUser(0, etaMax * 1.05) etaHist.SetLineColor(ROOT.kWhite) etaHist.Draw("histSame") etaHist.SetTitle( 'Distribution of #eta (%s %s)' % ((originSuffix if originSuffix == 'MC' else 'Data'), taggerType)) etaHist.GetXaxis().SetTitle('#eta') for i in range(len(limList) - 1): cloneList = [etaHist.Clone()] #etaHistClone.SetBins(limList[i+1]-limList[i],etaHist.GetBinContent(limList[i]),etaHist.GetBinContent(limList[i+1])); histCutterFunc.SetParameter( 0, etaHist.GetXaxis().GetBinCenter(limList[i])) histCutterFunc.SetParameter( 1, etaHist.GetXaxis().GetBinCenter(limList[i + 1])) cloneList[-1].Multiply(histCutterFunc) cloneList[-1].SetFillColor(38 + i) cloneList[-1].SetLineColor(ROOT.kBlack) if i == 0: cloneList[-1].GetYaxis().SetRangeUser(0, etaMax * 1.05) cloneList[-1].Draw("histSAME") #etaHistStack.Add(etaHistClone); #etaHistStack.Draw(); histCanvas.Update() histCanvas.SaveAs('catHist-%s-%s.pdf' % (originSuffix, taggerType)) s = raw_input("Press Enter to continue...") sys.exit(0) return xRegions #,x
interf[-1].SetLineColor(kBlue+2) interf[-1].SetLineStyle(kDashed) interf[-1].Draw('same') qqHPdf = fitter_mWW.ws.pdf('qqH') qqHHisto = qqHPdf.createHistogram("HWW%snujj_qqH" % mode, fitter_mWW.ws.var(pars_mWW.var[0])) qqHHisto.Scale(fitter_mWW.ws.var('n_qqH').getVal()/qqHHisto.Integral()) qqHHisto.SetName("HWW%snujj_qqH" % mode) qqHHisto.SetLineColor(kRed+2) qqHHisto.Draw('same') dataHisto = RooAbsData.createHistogram(fitter_mWW.ws.data('data_obs'), 'HWW%snujj_data_obs' % mode, fitter_mWW.ws.var(pars_mWW.var[0])) dataHisto.SetMarkerStyle(20) dataHisto.SetName('HWW%snujj_data_obs' % mode) dataHisto.Draw('same') c_bkg.Update() fitter_mWW.ws.saveSnapshot('nullFitSnapshot', fitter_mWW.ws.allVars()) upperHist = None if opts.doLimit: (expectedLimit, toys) = \ limits.expectedPlcLimit(fitter_mWW.ws.var(pars_mWW.var[0]), fitter_mWW.ws.var('r_signal'), full_pdf, fitter_mWW.ws, ntoys = opts.doLimit,
p0FitError = fitresult.ParError(0); p0End = p0End.getValV()-etaAvg.getValV(); print 'P0FIT = ', p0Fit, '\nDSMEANVAL = ', dsMeanVal.getValV(), '\nP0END = ', p0End, '\n' p0Dev.setVal((p0Fit - p0End) / p0FitError); p0DevSet.add(RooArgSet(p0Dev)) #graphHolder.Add(mistagVsEtaGraph) #currentColor += 1 #break; currentTime = time.time(); theHistCanvas = TCanvas(); p1DevHist = RooAbsData.createHistogram(p1DevSet,"p1Dev",20); p1DevHist.Fit('gaus'); p1DevHist.Draw(); os.chdir(os.environ['B2DXFITTERSROOT']+'/tutorial'); if(not os.path.exists('p1HistPlots')): os.mkdir("p1HistPlots") os.chdir('p1HistPlots'); theHistCanvas.SaveAs("p1Hist_%f.pdf" % currentTime); raw_input("Press Enter to continue"); theHistCanvas.Close(); theHistCanvas = TCanvas(); p0DevHist = RooAbsData.createHistogram(p0DevSet,"p0Dev",20);
# background psi_c = RealVar( 'psi_c', Unit = '1/MeV', Value = -0.0004, MinMax = (-0.1, -0.0000001)) bkg_m = Pdf(Name = 'bkg_m', Type = Exponential, Parameters = [m, psi_c]) background = Component('background', (bkg_m,), Yield= (200000,500,5000000) ) signal = Component('signal', (sig_m, sig_t.pdf()), Yield= (200000,500,500000) ) from P2VV.Utilities.DataHandling import readData tree_name = 'DecayTree' ## cut = 'runNumber > 0 && sel == 1 && (hlt1_biased == 1 || hlt1_unbiased_dec == 1) && hlt2_biased == 1 && ' cut = 'runNumber > 0 && sel == 1 && hlt1_unbiased_dec == 1 && hlt2_unbiased == 1 && ' cut += ' && '.join(['%s < 4' % e for e in ['muplus_track_chi2ndof', 'muminus_track_chi2ndof', 'Kplus_track_chi2ndof', 'Kminus_track_chi2ndof']]) from ROOT import RooAbsData storage = RooAbsData.getDefaultStorageType() RooAbsData.setDefaultStorageType(RooAbsData.Tree) data = readData(input_data[args[0]]['data'], tree_name, ntupleCuts = cut, NTuple = True, observables = observables) from ROOT import TFile tmp_file = TFile.Open(os.path.join(prefix, 'p2vv/data/tmp.root'), 'recreate') data.store().tree().SetDirectory(tmp_file) data_cut = data.reduce("time > 0.3") data_cut.store().tree().SetDirectory(tmp_file) ## Build PDF mass_pdf = buildPdf(Components = (background, signal), Observables = (m, ), Name = 'mass_pdf') mass_pdf.Print("t")
interf[-1].SetLineColor(kBlue+2) interf[-1].SetLineStyle(kDashed) interf[-1].Draw('same') qqHPdf = fitter_mWW.ws.pdf('qqH') qqHHisto = qqHPdf.createHistogram("HWW%snujj_qqH" % mode, fitter_mWW.ws.var(pars_mWW.var[0])) qqHHisto.Scale(fitter_mWW.ws.var('n_qqH').getVal()/qqHHisto.Integral()) qqHHisto.SetName("HWW%snujj_qqH" % mode) qqHHisto.SetLineColor(kRed+2) qqHHisto.Draw('same') dataHisto = RooAbsData.createHistogram(fitter_mWW.ws.data('data_obs'), 'HWW%snujj_data_obs' % mode, fitter_mWW.ws.var(pars_mWW.var[0])) dataHisto.SetMarkerStyle(20) dataHisto.SetName('HWW%snujj_data_obs' % mode) dataHisto.Draw('same') dataHisto.Print() c_bkg.Update() fitter_mWW.ws.saveSnapshot('nullFitSnapshot', fitter_mWW.ws.allVars()) fitter_mWW.ws.loadSnapshot('nullFitSnapshot') if opts.obsLimit: limit = limits.plcLimit(fitter_mWW.ws.var(pars_mWW.var[0]), fitter_mWW.ws.var('r_signal'), full_pdf, fitter_mWW.ws,
def mbc_gau_che(evtfile, mc, setMres, setGamma, setR, sp1, sp2, sp3, fa, fb, setmd, setp, setxi, setN1, setN2, setNbkgd1, setNbkgd2, title1, title2, epsfile, txtfile, ymin=0.5, cuts=None, err_type='SYMM', test=False): from ROOT import (gROOT, RooRealVar, RooCategory, RooArgSet, RooDataSet, RooFit, RooGaussian, RooArgList, RooAddPdf, RooSimultaneous, RooArgusBG, RooFormulaVar, RooChebychev, RooAbsData, RooDataHist, TCanvas, kRed, kBlue, kGreen, kMagenta, TPaveText) set_root_style(stat=1, grid=0) mbc = RooRealVar('mbc', 'Beam constrained mass', 1.83, 1.89, 'GeV') ebeam = RooRealVar('ebeam', 'Ebeam', 1.8815, 1.892, 'GeV') dflav = RooCategory('dflav', 'D0 flavor') dflav.defineType('dflav', 1) dflav.defineType('dbarflav', -1) if cuts != None: if 'kkmass' in cuts: kkmass = RooRealVar('kkmass', 'KK invariant mass', 0.97, 1.90, 'GeV') ras = RooArgSet(mbc, ebeam, kkmass, dflav) dataset = RooDataSet.read(evtfile, ras) elif 'kpimass' in cuts: kpimass = RooRealVar('kpimass', 'Kpi invariant mass', 0.6, 1.4, 'GeV') ras = RooArgSet(mbc, ebeam, kpimass, dflav) dataset = RooDataSet.read(evtfile, ras) else: raise NameError(cuts) sys.stdout.write('Using cuts: %s...' % cuts) dataset = dataset.reduce(cuts) sys.stdout.write(' selected %s events.\n' % dataset.numEntries()) else: ras = RooArgSet(mbc, ebeam, dflav) dataset = RooDataSet.read(evtfile, ras) #sigma = RooRealVar('sigma', 'D width', 0.0001, 0.005, 'GeV') sigma = RooRealVar('sigma', 'D width', 0.00468, 'GeV') mbc_dp = RooRealVar('mbc_dp', 'D+ Mass', 1.86962, 'GeV') sigpdf = RooGaussian('gauss_dp', 'D+ gaussian', mbc, mbc_dp, sigma) #arg_cutoff = RooRealVar('arg_cutoff', 'Argus cutoff', 1.88, 1.89, 'GeV') #arg_slope = RooRealVar('arg_slope', 'Argus slope', -10, -100, -1) #bkgpdf = RooArgusBG('argus', 'Argus BG', mbc, arg_cutoff, arg_slope) con0 = RooRealVar('c0', 'constant', -1, 1) con1 = RooRealVar('c1', 'linear', -10, 10) con2 = RooRealVar('c2', 'quadratic', 1) bkgpdf = RooChebychev('bkgpdf', 'Background', mbc, RooArgList(con1, con2)) yld = RooRealVar('yld', 'D yield', 100, 0, 2000) bkg = RooRealVar('bkg', 'Background', 100, 0, 1000) sumpdf = RooAddPdf('sumpdf', 'Sum pdf', RooArgList(sigpdf, bkgpdf), RooArgList(yld, bkg)) yldbar = RooRealVar('yldbar', 'Dbar yield', 100, 0, 2000) bkgbar = RooRealVar('bkgbar', 'Background', 100, 0, 1000) sumpdfbar = RooAddPdf('sumpdfbar', 'Sum pdf', RooArgList(sigpdf, bkgpdf), RooArgList(yldbar, bkgbar)) totalpdf = RooSimultaneous('rs', 'Simultaneous PDF', dflav) totalpdf.addPdf(sumpdf, 'dflav') totalpdf.addPdf(sumpdfbar, 'dbarflav') MINUIT = 'ermh4' if err_type == 'ASYM': MINUIT = 'erh4' if test: sys.stdout.write('Will save epsfile as: %s \n' % epsfile) sys.stdout.write('Will save txtfile as: %s \n' % txtfile) return if dataset.numEntries() == 0: yld.setVal(0) yldbar.setVal(0) else: # Start Fitting fitres = totalpdf.fitTo(dataset, MINUIT) fitres.Print('v') # Save plots canvas = TCanvas('canvas', 'mbc', 400, 400) xframe = mbc.frame(50) ProjWData = RooFit.ProjWData(dataset) RooAbsData.plotOn(dataset, xframe) totalpdf.plotOn(xframe, ProjWData) totalpdf.paramOn(xframe) xframe.Draw() canvas.Print(epsfile) # Save fitting parameters pars = [bkg, bkgbar, con1, yld, yldbar] save_fit_result(pars, txtfile, err_type=err_type, verbose=1)
def studyVqqResolution(rootFile): #get all from file histos={} inF=TFile.Open(rootFile) keys=inF.GetListOfKeys() for k in keys: obj=inF.Get(k.GetName()) obj.SetDirectory(0) histos[k.GetName()]=obj inF.Close() #plot gROOT.SetBatch() gROOT.SetStyle('Plain') gStyle.SetOptStat(0) gStyle.SetOptFit(1111) gStyle.SetOptTitle(0) gStyle.SetStatFont(42) kin=['','30to40','40to50','50to75','75to100','100toInf'] for k in kin: c=TCanvas('c','c',600,600) c.cd() c.SetCanvasSize(1000,500) c.SetWindowSize(1000,500) c.Divide(2,1) c.cd(1) histos['deta'+k+'barrel'].SetLineWidth(2) histos['deta'+k+'barrel'].SetTitle('barrel') histos['deta'+k+'barrel'].Draw('hist') histos['deta'+k+'endcap'].SetLineWidth(2) histos['deta'+k+'endcap'].SetLineStyle(7) histos['deta'+k+'endcap'].SetTitle('endcap') histos['deta'+k+'endcap'].Draw('histsame') leg=TLegend(0.6,0.92,0.9,0.98) leg.SetFillStyle(0) leg.SetBorderSize(0) leg.SetTextFont(42) leg.AddEntry(histos['deta'+k+'barrel'],'barrel','f') leg.AddEntry(histos['deta'+k+'endcap'],'endcap','f') leg.SetNColumns(2) leg.Draw() drawHeader() c.cd(2) histos['dphi'+k+'barrel'].SetLineWidth(2) histos['dphi'+k+'barrel'].SetTitle('barrel') histos['dphi'+k+'barrel'].Draw('hist') histos['dphi'+k+'endcap'].SetLineWidth(2) histos['dphi'+k+'endcap'].SetLineStyle(7) histos['dphi'+k+'endcap'].SetTitle('endcap') histos['dphi'+k+'endcap'].Draw('histsame') c.Modified() c.Update() c.SaveAs('dr_%s.png'%k) labels=[] responseVars=['dpt','den','dphi','deta','dr'] for r in responseVars: barrelResponse=TGraphErrors() barrelResponse.SetName(r+'barrelresponse') barrelResponse.SetLineWidth(2) barrelResponse.SetFillStyle(0) barrelResponse.SetMarkerStyle(20) barrelCoreResponse=barrelResponse.Clone(r+'barrelcoreresponse') endcapResponse=TGraphErrors() endcapResponse.SetName(r+'endcapresponse') endcapResponse.SetLineWidth(2) endcapResponse.SetFillStyle(0) endcapResponse.SetMarkerStyle(24) endcapCoreResponse=endcapResponse.Clone(r+'endcapresponse') for k in kin: c.cd() c.Clear() c.SetWindowSize(1000,500) c.Divide(2,1) for i in [1,2] : c.cd(i) reg='barrel' if i==2: reg='endcap' h=histos[r+k+reg] x=RooRealVar("x", h.GetXaxis().GetTitle(), h.GetXaxis().GetXmin(), h.GetXaxis().GetXmax()) data=RooDataHist("data", "dataset with x", RooArgList(x), h) frame=x.frame() RooAbsData.plotOn( data, frame, RooFit.DataError(RooAbsData.SumW2) ) mean1=RooRealVar("mean1","mean1",0,-0.5,0.5); sigma1=RooRealVar("sigma1","sigma1",0.1,0.01,1.0); gauss1=RooGaussian("g1","g",x,mean1,sigma1) if r=='dpt' or r=='den' : mean2=RooRealVar("mean2","mean2",0,-0.5,0.5); sigma2=RooRealVar("sigma2","sigma2",0.1,0.01,1.0); alphacb=RooRealVar("alphacb","alphacb",1,0.1,3); ncb=RooRealVar("ncb","ncb",4,1,100) gauss2 = RooCBShape("cb2","cb",x,mean2,sigma2,alphacb,ncb); else: mean1.setRange(0,0.5) mean2=RooRealVar("mean2","mean",0,0,1); sigma2=RooRealVar("sigma2","sigma",0.1,0.01,1.0); gauss2=RooGaussian("g2","g",x,mean2,sigma2) ; frac = RooRealVar("frac","fraction",0.9,0.0,1.0) if data.sumEntries()<100 : frac.setVal(1.0) frac.setConstant(True) model = RooAddPdf("sum","g1+g2",RooArgList(gauss1,gauss2), RooArgList(frac)) status=model.fitTo(data,RooFit.Save()).status() if status!=0 : continue model_cdf=model.createCdf(RooArgSet(x)) ; cl=0.90 ul=0.5*(1.0+cl) closestToCL=1.0 closestToUL=-1 closestToMedianCL=1.0 closestToMedian=-1 for ibin in xrange(1,h.GetXaxis().GetNbins()*10): xval=h.GetXaxis().GetXmin()+(ibin-1)*h.GetXaxis().GetBinWidth(ibin)/10. x.setVal(xval) cdfValToCL=math.fabs(model_cdf.getVal()-ul) if cdfValToCL<closestToCL: closestToCL=cdfValToCL closestToUL=xval cdfValToCL=math.fabs(model_cdf.getVal()-0.5) if cdfValToCL<closestToMedianCL: closestToMedianCL=cdfValToCL closestToMedian=xval RooAbsPdf.plotOn(model,frame) frame.Draw() if i==1: drawHeader() labels.append( TPaveText(0.6,0.92,0.9,0.98,'brNDC') ) ilab=len(labels)-1 labels[ilab].SetName(r+k+'txt') labels[ilab].SetBorderSize(0) labels[ilab].SetFillStyle(0) labels[ilab].SetTextFont(42) labels[ilab].SetTextAlign(12) kinReg=k.replace('to','-') kinReg=kinReg.replace('Inf','#infty') labels[ilab].AddText('['+reg+'] '+kinReg) labels[ilab].Draw() resolutionVal=math.fabs(closestToUL-closestToMedian) responseGr=barrelResponse responseCoreGr=barrelCoreResponse coreResolutionVal=sigma1.getVal() coreResolutionErr=sigma1.getError() if frac.getVal()<0.7 and (sigma2.getVal()<sigma1.getVal()) : coreResolutionVal=sigma2.getVal() coreResolutionErr=sigma2.getError() if i==2 : responseGr=endcapResponse responseCoreGr=endcapCoreResponse if k!='' : nrespPts=responseGr.GetN() kinAvg=150 kinWidth=50 if k=='30to40' : kinAvg=35 kinWidth=5 if k=='40to50' : kinAvg=45 kinWidth=5 if k=='50to75' : kinAvg=62.5 kinWidth=12.5 elif k=='75to100' : kinAvg=87.5 kinWidth=12.5 responseGr.SetPoint(nrespPts,kinAvg,resolutionVal) responseCoreGr.SetPoint(nrespPts,kinAvg,coreResolutionVal) responseCoreGr.SetPointError(nrespPts,kinWidth,coreResolutionErr) labels.append( TPaveText(0.15,0.7,0.4,0.9,'brNDC') ) ilab=len(labels)-1 labels[ilab].SetName(r+k+'fitrestxt') labels[ilab].SetBorderSize(0) labels[ilab].SetFillStyle(0) labels[ilab].SetTextFont(42) labels[ilab].SetTextAlign(12) labels[ilab].AddText('Gaussian #1 (f=%3.3f)'%frac.getVal()) labels[ilab].AddText('#mu=%3.3f#pm%3.3f'%(mean1.getVal(),mean1.getError())) labels[ilab].AddText('#sigma=%3.3f#pm%3.3f'%(sigma1.getVal(),sigma1.getError())) labels[ilab].AddText('Gaussian #2 (f=%3.3f)'%(1-frac.getVal())) labels[ilab].AddText('#mu=%3.3f#pm%3.3f'%(mean2.getVal(),mean2.getError())) labels[ilab].AddText('#sigma=%3.3f#pm%3.3f'%(sigma2.getVal(),sigma2.getError())) labels[ilab].Draw() c.Modified() c.Update() c.SaveAs(r+'res_'+k+'.png') frame=TGraphErrors() frame.SetPoint(0,0,0) frame.SetPoint(1,200,0.3) frame.SetMarkerStyle(1) frame.SetFillStyle(0) frame.SetName('frame') cresp=TCanvas('cresp','cresp',500,500) cresp.cd() frame.Draw('ap') barrelResponse.Draw('pl') endcapResponse.Draw('pl') frame.GetXaxis().SetTitle("Quark transverse momentum [GeV]") frame.GetYaxis().SetTitle("Resolution %3.2f C.L."%cl ) frame.GetYaxis().SetTitleOffset(1.4) frame.GetYaxis().SetNdivisions(10) drawHeader() leg=TLegend(0.6,0.92,0.9,0.98) leg.SetFillStyle(0) leg.SetBorderSize(0) leg.SetTextFont(42) leg.AddEntry(barrelResponse,'barrel','fp') leg.AddEntry(endcapResponse,'endcap','fp') leg.SetNColumns(2) leg.Draw() cresp.Modified() cresp.Update() cresp.SaveAs(r+'res_evol.png') frameCore=frame.Clone('framecore') cresp.Clear() frameCore.Draw('ap') barrelCoreResponse.Draw('pl') endcapCoreResponse.Draw('pl') frameCore.GetXaxis().SetTitle("Quark transverse momentum [GeV]") frameCore.GetYaxis().SetTitle("Core resolution") frameCore.GetYaxis().SetTitleOffset(1.4) frameCore.GetYaxis().SetNdivisions(10) frameCore.GetYaxis().SetRangeUser(0,0.2) drawHeader() leg=TLegend(0.6,0.92,0.9,0.98) leg.SetFillStyle(0) leg.SetBorderSize(0) leg.SetTextFont(42) leg.AddEntry(barrelCoreResponse,'barrel','fp') leg.AddEntry(endcapCoreResponse,'endcap','fp') leg.SetNColumns(2) leg.Draw() cresp.Modified() cresp.Update() cresp.SaveAs(r+'rescore_evol.png') bosons=['h','z','w'] kin=['','50','100'] region=['','bb','eb','ee'] for k in kin: for r in region: c=TCanvas('c','c',600,600) c.cd() histos['mjj'+k+r].Rebin() histos['mjj'+k+r].Draw() ic=1 leg=TLegend(0.6,0.92,0.9,0.98) leg.SetFillStyle(0) leg.SetBorderSize(0) leg.SetTextFont(42) leg.AddEntry(histos['mjj'+k+r],'inclusive','f') for b in bosons: if histos[b+'mjj'+k+r].Integral()<=0 : continue ic=ic+1 histos[b+'mjj'+k+r].Rebin() histos[b+'mjj'+k+r].SetLineColor(ic) histos[b+'mjj'+k+r].SetLineWidth(2) histos[b+'mjj'+k+r].SetMarkerColor(ic) histos[b+'mjj'+k+r].SetMarkerStyle(1) histos[b+'mjj'+k+r].SetFillStyle(3000+ic) histos[b+'mjj'+k+r].SetFillColor(ic) histos[b+'mjj'+k+r].Draw('histsame') leg.AddEntry(histos[b+'mjj'+k+r],b,"f") leg.SetNColumns(ic) leg.Draw() drawHeader() labels.append( TPaveText(0.65,0.8,0.9,0.9,'brNDC') ) ilab=len(labels)-1 labels[ilab].SetName(k+r+'mjj') labels[ilab].SetBorderSize(0) labels[ilab].SetFillStyle(0) labels[ilab].SetTextFont(42) labels[ilab].SetTextAlign(12) regionTitle="inclusive" if r == 'bb' : regionTitle='barrel-barrel' if r == 'eb' : regionTitle='endcap-barrel' if r == 'ee' : regionTitle='endcap-endcap' labels[ilab].AddText(regionTitle) ptthreshold=30 if k!='' : ptthreshold=float(k) labels[ilab].AddText('p_{T}>%3.0f GeV'%ptthreshold) labels[ilab].Draw() c.Modified() c.Update() c.SaveAs('mjj'+k+r+'.png') massResolutionGrs=[] for r in region: massResolution=TGraphErrors() massResolution.SetName(r+'dm') massResolution.SetLineWidth(2) massResolution.SetFillStyle(0) massResolution.SetMarkerStyle(20+len(massResolutionGrs)) massResolution.SetMarkerColor(1+len(massResolutionGrs)) massResolution.SetLineColor(1+len(massResolutionGrs)) massResolution.SetFillColor(1+len(massResolutionGrs)) massResolutionGrs.append(massResolution) for k in kin: c=TCanvas('c','c',600,600) c.cd() h=histos['dmjj'+k+r] x=RooRealVar("x", h.GetXaxis().GetTitle(), h.GetXaxis().GetXmin(), h.GetXaxis().GetXmax()) data=RooDataHist("data", "dataset with x", RooArgList(x), h) frame=x.frame() RooAbsData.plotOn( data, frame, RooFit.DataError(RooAbsData.SumW2) ) mean1=RooRealVar("mean1","mean1",0,-0.5,0.5); sigma1=RooRealVar("sigma1","sigma1",0.1,0.01,1.0); gauss1=RooGaussian("g1","g",x,mean1,sigma1) mean2=RooRealVar("mean2","mean2",0,-0.5,0.5); sigma2=RooRealVar("sigma2","sigma2",0.1,0.01,1.0); alphacb=RooRealVar("alphacb","alphacb",1,0.1,3); ncb=RooRealVar("ncb","ncb",4,1,100) gauss2 = RooCBShape("cb2","cb",x,mean2,sigma2,alphacb,ncb); frac = RooRealVar("frac","fraction",0.9,0.0,1.0) model = RooAddPdf("sum","g1+g2",RooArgList(gauss1,gauss2), RooArgList(frac)) status=model.fitTo(data,RooFit.Save()).status() if status!=0 : continue RooAbsPdf.plotOn(model,frame) frame.Draw() labels.append( TPaveText(0.6,0.65,0.85,0.9,'brNDC') ) ilab=len(labels)-1 labels[ilab].SetName(r+k+'dmfitrestxt') labels[ilab].SetBorderSize(0) labels[ilab].SetFillStyle(0) labels[ilab].SetTextFont(42) labels[ilab].SetTextAlign(12) labels[ilab].AddText('Gaussian #1 (f=%3.3f)'%frac.getVal()) labels[ilab].AddText('#mu=%3.3f#pm%3.3f'%(mean1.getVal(),mean1.getError())) labels[ilab].AddText('#sigma=%3.3f#pm%3.3f'%(sigma1.getVal(),sigma1.getError())) labels[ilab].AddText('Gaussian #2 (f=%3.3f)'%(1-frac.getVal())) labels[ilab].AddText('#mu=%3.3f#pm%3.3f'%(mean2.getVal(),mean2.getError())) labels[ilab].AddText('#sigma=%3.3f#pm%3.3f'%(sigma2.getVal(),sigma2.getError())) labels[ilab].Draw() drawHeader() labels.append( TPaveText(0.15,0.8,0.4,0.9,'brNDC') ) ilab=len(labels)-1 labels[ilab].SetName(k+r+'dmjj') labels[ilab].SetBorderSize(0) labels[ilab].SetFillStyle(0) labels[ilab].SetTextFont(42) labels[ilab].SetTextAlign(12) regionTitle="inclusive" if r == 'bb' : regionTitle='barrel-barrel' if r == 'eb' : regionTitle='endcap-barrel' if r == 'ee' : regionTitle='endcap-endcap' labels[ilab].AddText(regionTitle) ptthreshold=30 if k!='' : ptthreshold=float(k) labels[ilab].AddText('p_{T}>%3.0f GeV'%ptthreshold) labels[ilab].Draw() c.Modified() c.Update() c.SaveAs('dmjj'+k+r+'.png') massResolution.SetTitle(regionTitle) ip=massResolution.GetN() x=40 xerr=10 if k=='50' : x=75 xerr=25 elif k=='100': x=150 xerr=50 y=sigma1.getVal() yerr=sigma1.getError() if frac.getVal()<0.8: if sigma2.getVal()<sigma1.getVal(): y=sigma2.getVal() ey=sigma2.getError() massResolution.SetPoint(ip,x,y) massResolution.SetPointError(ip,xerr,yerr) frame=TGraphErrors() frame.SetPoint(0,0,0) frame.SetPoint(1,200,0.2) frame.SetMarkerStyle(1) frame.SetFillStyle(0) frame.SetName('dmframe') cdmevol=TCanvas('cdmevol','cdmevol',500,500) cdmevol.cd() frame.Draw('ap') leg=TLegend(0.6,0.92,0.9,0.98) leg.SetFillStyle(0) leg.SetBorderSize(0) leg.SetTextFont(42) for dmGr in massResolutionGrs : dmGr.Draw('pl') leg.AddEntry(dmGr,dmGr.GetTitle(),'fp') frame.GetXaxis().SetTitle("Leading quark transverse momentum [GeV]") frame.GetYaxis().SetTitle("Core resolution") frame.GetYaxis().SetTitleOffset(1.4) frame.GetYaxis().SetNdivisions(10) drawHeader() leg.SetNColumns(2) leg.Draw() cdmevol.Modified() cdmevol.Update() cdmevol.SaveAs('dm_evol.png') c=TCanvas('c','c',600,600) c.cd() histos['sel'].Draw('histtext') drawHeader() c.Modified() c.Update() c.SaveAs('selection.png') return
def mbc_dline_che(evtfile, mc, setMres, setGamma, setR, sp1, sp2, sp3, fa, fb, setmd, setp, setxi, setN1, setN2, setNbkgd1, setNbkgd2, title1, title2, epsfile, txtfile, ymin=0.5, cuts=None, err_type='SYMM', test=False): from ROOT import (gROOT, RooRealVar, RooCategory, RooArgSet, RooDataSet, RooFit, RooGaussian, RooArgList, RooAddPdf, RooSimultaneous, RooArgusBG, RooFormulaVar, RooChebychev, RooAbsData, RooDataHist, TCanvas, kRed, kBlue, kGreen, kMagenta, TPaveText, RooDLineShape) set_root_style(stat=1, grid=0) mbc = RooRealVar('mbc', 'Beam constrained mass', 1.83, 1.89, 'GeV') ebeam = RooRealVar('ebeam', 'Ebeam', 1.8815, 1.892, 'GeV') dflav = RooCategory('dflav', 'D0 flavor') dflav.defineType('dflav', 1) dflav.defineType('dbarflav', -1) if cuts != None: if 'kkmass' in cuts: kkmass = RooRealVar('kkmass', 'KK invariant mass', 0.97, 1.90, 'GeV') ras = RooArgSet(mbc, ebeam, kkmass, dflav) dataset = RooDataSet.read(evtfile, ras) else: raise NameError(cuts) sys.stdout.write('Using cuts: %s...' % cuts) dataset = dataset.reduce(cuts) sys.stdout.write(' selected %s events.\n' % dataset.numEntries()) else: ras = RooArgSet(mbc, ebeam, dflav) dataset = RooDataSet.read(evtfile, ras) res = RooRealVar("datares", "datares", mc) mres = RooRealVar("mres", "mres", setMres) gamma = RooRealVar('gamma', 'gamma', setGamma) r = RooRealVar('r', 'r', setR) sigmaE = RooRealVar("sigmaE", "sigmaE", 0.0021) sigmap1 = RooRealVar("sigmap1", "sigmap1", sp1, 0.002, 0.040) scalep2 = RooRealVar("scalep2", "scalep2", 2.00, 1.500, 5.500) scalep3 = RooRealVar("scalep3", "scalep3", 5.00, 3.00, 10.000) scalep2.setVal(sp2) scalep2.setConstant(1) scalep3.setVal(sp3) scalep3.setConstant(1) as12 = RooArgList(sigmap1, scalep2) sigmap2 = RooFormulaVar("sigmap2", "sigma2", "sigmap1*scalep2", as12) as123 = RooArgList(sigmap1, scalep2, scalep3) sigmap3 = RooFormulaVar("sigmap3", "sigma3", "sigmap1*scalep2*scalep3", as123) md = RooRealVar("md", "md", setmd, 1.863, 1.875) f2 = RooRealVar("f2", "f2", fa) f3 = RooRealVar("f3", "f3", fb) al23 = RooArgList(f2, f3) f1 = RooFormulaVar("f1", "f1", "1.0-f2-f3", al23) # Construct signal shape fcn1_1 = RooDLineShape("DLineshape1_1", "DLineShape1_1", 4, mbc, ebeam, mres, gamma, r, sigmaE, sigmap1, md, res) fcn1_2 = RooDLineShape("DLineshape1_2", "DLineShape1_2", 4, mbc, ebeam, mres, gamma, r, sigmaE, sigmap2, md, res) fcn1_3 = RooDLineShape("DLineshape1_3", "DLineShape1_3", 4, mbc, ebeam, mres, gamma, r, sigmaE, sigmap3, md, res) fcn2_1 = RooDLineShape("DLineshape2_1", "DLineShape2_1", 4, mbc, ebeam, mres, gamma, r, sigmaE, sigmap1, md, res) fcn2_2 = RooDLineShape("DLineshape2_2", "DLineShape2_2", 4, mbc, ebeam, mres, gamma, r, sigmaE, sigmap2, md, res) fcn2_3 = RooDLineShape("DLineshape2_3", "DLineShape2_3", 4, mbc, ebeam, mres, gamma, r, sigmaE, sigmap3, md, res) alf1_123 = RooArgList(fcn1_1, fcn1_2, fcn1_3) af12 = RooArgList(f1, f2) sigpdf = RooAddPdf("signal1_3", "signal1_3", alf1_123, af12) alf2_123 = RooArgList(fcn2_1, fcn2_2, fcn2_3) sigbarpdf = RooAddPdf("signal2_3", "signal2_3", alf2_123, af12) con0 = RooRealVar('c0', 'constant', -1, 1) con1 = RooRealVar('c1', 'linear', -10, 10) con2 = RooRealVar('c2', 'quadratic', 1) bkgpdf = RooChebychev('bkgpdf', 'Background', mbc, RooArgList(con1, con2)) bkgbarpdf = RooChebychev('bkgbarpdf', 'Background', mbc, RooArgList(con1, con2)) yld = RooRealVar('yld', 'D yield', 100, 0, 2000) bkg = RooRealVar('bkg', 'Background', 100, 0, 1000) sumpdf = RooAddPdf('sumpdf', 'Sum pdf', RooArgList(sigpdf, bkgpdf), RooArgList(yld, bkg)) yldbar = RooRealVar('yldbar', 'Dbar yield', 100, 0, 2000) bkgbar = RooRealVar('bkgbar', 'Background', 100, 0, 1000) sumpdfbar = RooAddPdf('sumpdfbar', 'Sum pdf', RooArgList(sigbarpdf, bkgbarpdf), RooArgList(yldbar, bkgbar)) totalpdf = RooSimultaneous('rs', 'Simultaneous PDF', dflav) totalpdf.addPdf(sumpdf, 'dflav') totalpdf.addPdf(sumpdfbar, 'dbarflav') MINUIT = 'ermh4' if err_type == 'ASYM': MINUIT = 'erh4' if test: sys.stdout.write('Will save epsfile as: %s \n' % epsfile) sys.stdout.write('Will save txtfile as: %s \n' % txtfile) return if dataset.numEntries() == 0: yld.setVal(0) yldbar.setVal(0) else: # Start Fitting fitres = totalpdf.fitTo(dataset, MINUIT) fitres.Print('v') # Save plots canvas = TCanvas('canvas', 'mbc', 400, 400) xframe = mbc.frame(50) ProjWData = RooFit.ProjWData(dataset) RooAbsData.plotOn(dataset, xframe) totalpdf.plotOn(xframe, ProjWData) totalpdf.paramOn(xframe) xframe.Draw() canvas.Print(epsfile) # Save fitting parameters pars = [bkg, bkgbar, con1, md, sigmap1, yld, yldbar] save_fit_result(pars, txtfile, err_type=err_type, verbose=1)