def plot_rec_minus_gen_pt(): #reconstructed pT vs. generated pT for resolution #distribution range ptbin = 0.005 ptmin = -0.2 ptmax = 0.4 #generated pT selection to input data ptlo = 0 pthi = 0.1 #mass selection mmin = 2.8 mmax = 3.2 #range for the fit fitran = [-0.02, 0.2] strsel = "jRecM>{0:.3f} && jRecM<{1:.3f}".format(mmin, mmax) strsel += " && jGenPt>{0:.3f}".format(ptlo) strsel += " && jGenPt<{0:.3f}".format(pthi) nbins, ptmax = ut.get_nbins(ptbin, ptmin, ptmax) hPtDiff = ut.prepare_TH1D("hPtDiff", ptbin, ptmin, ptmax) ytit = "Events / ({0:.3f}".format(ptbin) + " GeV)" xtit = "#it{p}_{T, reconstructed} - #it{p}_{T, generated} (GeV)" mctree.Draw("jRecPt-jGenPt >> hPtDiff", strsel) #roofit binned data x = RooRealVar("x", "x", -1, 1) x.setRange("fitran", fitran[0], fitran[1]) rfPt = RooDataHist("rfPt", "rfPt", RooArgList(x), hPtDiff) #reversed Crystal Ball mean = RooRealVar("mean", "mean", 0., -0.1, 0.1) sigma = RooRealVar("sigma", "sigma", 0.01, 0., 0.1) alpha = RooRealVar("alpha", "alpha", -1.046, -10., 0.) n = RooRealVar("n", "n", 1.403, 0., 20.) pdf = RooCBShape("pdf", "pdf", x, mean, sigma, alpha, n) #make the fit res = pdf.fitTo(rfPt, rf.Range("fitran"), rf.Save()) can = ut.box_canvas() ut.set_margin_lbtr(gPad, 0.12, 0.1, 0.05, 0.03) frame = x.frame(rf.Bins(nbins), rf.Title("")) ut.put_frame_yx_tit(frame, ytit, xtit) rfPt.plotOn(frame, rf.Name("data")) pdf.plotOn(frame, rf.Precision(1e-6), rf.Name("pdf")) frame.Draw() ut.invert_col(rt.gPad) can.SaveAs("01fig.pdf")
def plot_rec_gen_track_pt(): #track pT resolution as ( pT_track_rec - pT_track_gen )/pT_track_gen ptbin = 0.001 ptmin = -0.3 ptmax = 0.1 #generated dielectron pT selection to input data ptlo = 0.2 pthi = 1 fitran = [-0.15, 0.018] mmin = 2.8 mmax = 3.2 ccb = rt.kBlue #output log file out = open("out.txt", "w") #log fit parameters loglist1 = [(x, eval(x)) for x in ["infile_mc", "ptbin", "ptmin", "ptmax"]] loglist2 = [(x, eval(x)) for x in ["ptlo", "pthi", "fitran", "mmin", "mmax"]] strlog = ut.make_log_string(loglist1, loglist2) ut.log_results(out, strlog + "\n") strsel = "jRecM>{0:.3f} && jRecM<{1:.3f}".format(mmin, mmax) strsel += " && jGenPt>{0:.3f}".format(ptlo) strsel += " && jGenPt<{0:.3f}".format(pthi) #strsel = "" nbins, ptmax = ut.get_nbins(ptbin, ptmin, ptmax) hPtTrackRel = ut.prepare_TH1D_n("hPtTrackRel", nbins, ptmin, ptmax) ytit = "Events / ({0:.3f})".format(ptbin) xtit = "(#it{p}_{T, rec}^{track} - #it{p}_{T, gen}^{track})/#it{p}_{T, gen}^{track}" mctree.Draw("(jT0pT-jGenP0pT)/jGenP0pT >> hPtTrackRel", strsel) # positive charge mctree.Draw("(jT1pT-jGenP1pT)/jGenP1pT >>+hPtTrackRel", strsel) # add negative charge x = RooRealVar("x", "x", ptmin, ptmax) x.setRange("fitran", fitran[0], fitran[1]) rfPtTrackRel = RooDataHist("rfPtTrackRel", "rfPtTrackRel", RooArgList(x), hPtTrackRel) #standard Crystal Ball mean = RooRealVar("mean", "mean", -0.003, -0.1, 0.1) sigma = RooRealVar("sigma", "sigma", 0.01, 0., 0.9) alpha = RooRealVar("alpha", "alpha", 1.2, 0., 10.) n = RooRealVar("n", "n", 1.3, 0., 20.) cbpdf = RooCBShape("cbpdf", "cbpdf", x, mean, sigma, alpha, n) res = cbpdf.fitTo(rfPtTrackRel, rf.Range("fitran"), rf.Save()) #log fit results ut.log_results(out, ut.log_fit_result(res)) #generate new distribution according to the fit gROOT.LoadMacro("cb_gen.h") #Crystal Ball generator, min, max, mean, sigma, alpha, n #cbgen = rt.cb_gen(-0.18, 0.05, -0.00226, 0.00908, 1.40165, 1.114) # -0.18, 0.05 ptmin, ptmax cbgen = rt.cb_gen(-0.5, 0.05, -0.00226, 0.00908, 0.2, 2.) # -0.18, 0.05 ptmin, ptmax hRelGen = ut.prepare_TH1D_n("hRelGen", nbins, ptmin, ptmax) ut.set_H1D_col(hRelGen, rt.kBlue) #rt.cb_generate_n(cbgen, hRelGen, int(hPtTrackRel.GetEntries())) rfRelGen = RooDataHist("rfRelGen", "rfRelGen", RooArgList(x), hRelGen) #generate distribution with additional smearing applied hRelSmear = ut.prepare_TH1D_n("hRelSmear", nbins, ptmin, ptmax) ut.set_H1D_col(hRelSmear, rt.kOrange) #tcopy = mctree.CopyTree(strsel) #rt.cb_apply_smear(cbgen, mctree, hRelSmear) can = ut.box_canvas() ut.set_margin_lbtr(gPad, 0.12, 0.1, 0.05, 0.03) frame = x.frame(rf.Bins(nbins), rf.Title("")) ut.put_frame_yx_tit(frame, ytit, xtit) rfPtTrackRel.plotOn(frame, rf.Name("data")) #rfRelGen.plotOn(frame, rf.Name("data")) cbpdf.plotOn(frame, rf.Precision(1e-6), rf.Name("cbpdf"), rf.LineColor(ccb)) frame.Draw() #hRelGen.Draw("e1same") #hRelSmear.Draw("e1same") desc = pdesc(frame, 0.2, 0.8, 0.057) #x, y, sep desc.set_text_size(0.03) desc.itemD("#chi^{2}/ndf", frame.chiSquare("cbpdf", "data", 4), -1, ccb) desc.prec = 5 desc.itemR("mean", mean, ccb) desc.itemR("#sigma", sigma, ccb) desc.itemR("#alpha", alpha, ccb) desc.prec = 3 desc.itemR("#it{n}", n, ccb) desc.draw() leg = ut.prepare_leg(0.2, 0.82, 0.21, 0.12, 0.03) # x, y, dx, dy, tsiz leg.SetMargin(0.05) leg.AddEntry(0, "#bf{%.1f < #it{p}_{T}^{pair} < %.1f GeV}" % (ptlo, pthi), "") leg.Draw("same") #ut.invert_col(rt.gPad) can.SaveAs("01fig.pdf")
def plot_rec_gen_pt_relative(): # relative dielectron pT resolution as ( pT_rec - pT_gen )/pT_gen ptbin = 0.01 ptmin = -1.2 ptmax = 4 #generated pT selection to input data ptlo = 0.2 pthi = 1. fitran = [-0.1, 3] mmin = 2.8 mmax = 3.2 #output log file out = open("out.txt", "w") #log fit parameters loglist1 = [(x, eval(x)) for x in ["infile_mc", "ptbin", "ptmin", "ptmax"]] loglist2 = [(x, eval(x)) for x in ["ptlo", "pthi", "fitran", "mmin", "mmax"]] strlog = ut.make_log_string(loglist1, loglist2) ut.log_results(out, strlog + "\n") strsel = "jRecM>{0:.3f} && jRecM<{1:.3f}".format(mmin, mmax) strsel += " && jGenPt>{0:.3f}".format(ptlo) strsel += " && jGenPt<{0:.3f}".format(pthi) nbins, ptmax = ut.get_nbins(ptbin, ptmin, ptmax) hPtRel = ut.prepare_TH1D("hPtRel", ptbin, ptmin, ptmax) ytit = "Events / ({0:.3f})".format(ptbin) xtit = "(#it{p}_{T, rec} - #it{p}_{T, gen})/#it{p}_{T, gen}" mctree.Draw("(jRecPt-jGenPt)/jGenPt >> hPtRel", strsel) x = RooRealVar("x", "x", ptmin, ptmax) x.setRange("fitran", fitran[0], fitran[1]) rfPtRel = RooDataHist("rfPtRel", "rfPtRel", RooArgList(x), hPtRel) #reversed Crystal Ball mean = RooRealVar("mean", "mean", 0., -0.1, 0.1) sigma = RooRealVar("sigma", "sigma", 0.2, 0., 0.9) alpha = RooRealVar("alpha", "alpha", -1.2, -10., 0.) n = RooRealVar("n", "n", 1.3, 0., 20.) cbpdf = RooCBShape("cbpdf", "cbpdf", x, mean, sigma, alpha, n) res = cbpdf.fitTo(rfPtRel, rf.Range("fitran"), rf.Save()) #log fit results ut.log_results(out, ut.log_fit_result(res)) can = ut.box_canvas() ut.set_margin_lbtr(gPad, 0.12, 0.1, 0.05, 0.03) frame = x.frame(rf.Bins(nbins), rf.Title("")) ut.put_frame_yx_tit(frame, ytit, xtit) rfPtRel.plotOn(frame, rf.Name("data")) cbpdf.plotOn(frame, rf.Precision(1e-6), rf.Name("cbpdf")) frame.Draw() desc = pdesc(frame, 0.65, 0.8, 0.057) #x, y, sep desc.set_text_size(0.03) desc.itemD("#chi^{2}/ndf", frame.chiSquare("cbpdf", "data", 4), -1, rt.kBlue) desc.prec = 5 desc.itemR("mean", mean, rt.kBlue) desc.prec = 4 desc.itemR("#sigma", sigma, rt.kBlue) desc.itemR("#alpha", alpha, rt.kBlue) desc.prec = 3 desc.itemR("#it{n}", n, rt.kBlue) desc.draw() leg = ut.prepare_leg(0.6, 0.82, 0.21, 0.12, 0.03) # x, y, dx, dy, tsiz leg.SetMargin(0.05) leg.AddEntry(0, "#bf{%.1f < #it{p}_{T}^{pair} < %.1f GeV}" % (ptlo, pthi), "") leg.Draw("same") #ut.invert_col(rt.gPad) can.SaveAs("01fig.pdf")
def plot_rec_gen_track_phi(): #track azimuthal angle phi resolution as ( phi_track_rec - phi_track_gen )/phi_track_gen phibin = 0.0001 phimin = -0.02 phimax = 0.02 #ptlo = 0. #pthi = 0.9 fitran = [-0.01, 0.01] mmin = 2.8 mmax = 3.2 cbw = rt.kBlue #output log file out = open("out.txt", "w") #log fit parameters loglist1 = [(x, eval(x)) for x in ["infile_mc", "phibin", "phimin", "phimax"]] loglist2 = [(x, eval(x)) for x in ["fitran", "mmin", "mmax"]] strlog = ut.make_log_string(loglist1, loglist2) ut.log_results(out, strlog + "\n") strsel = "jRecM>{0:.3f} && jRecM<{1:.3f}".format(mmin, mmax) #strsel += " && jGenPt>{0:.3f}".format(ptlo) #strsel += " && jGenPt<{0:.3f}".format(pthi) nbins, phimax = ut.get_nbins(phibin, phimin, phimax) hPhiRel = ut.prepare_TH1D_n("hPhiRel", nbins, phimin, phimax) ytit = "Events / ({0:.4f})".format(phibin) xtit = "(#phi_{rec} - #phi_{gen})/#phi_{gen}" mctree.Draw("(jT0phi-jGenP0phi)/jGenP0phi >> hPhiRel", strsel) # positive charge mctree.Draw("(jT1phi-jGenP1phi)/jGenP1phi >>+hPhiRel", strsel) # add negative charge x = RooRealVar("x", "x", phimin, phimax) x.setRange("fitran", fitran[0], fitran[1]) rfPhiRel = RooDataHist("rfPhiRel", "rfPhiRel", RooArgList(x), hPhiRel) #Breit-Wigner pdf mean = RooRealVar("mean", "mean", 0., -0.1, 0.1) sigma = RooRealVar("sigma", "sigma", 0.01, 0., 0.9) bwpdf = RooBreitWigner("bwpdf", "bwpdf", x, mean, sigma) res = bwpdf.fitTo(rfPhiRel, rf.Range("fitran"), rf.Save()) #log fit results ut.log_results(out, ut.log_fit_result(res)) can = ut.box_canvas() ut.set_margin_lbtr(gPad, 0.12, 0.1, 0.05, 0.03) frame = x.frame(rf.Bins(nbins), rf.Title("")) ut.put_frame_yx_tit(frame, ytit, xtit) rfPhiRel.plotOn(frame, rf.Name("data")) bwpdf.plotOn(frame, rf.Precision(1e-6), rf.Name("bwpdf")) frame.Draw() desc = pdesc(frame, 0.12, 0.93, 0.057) #x, y, sep desc.set_text_size(0.03) desc.itemD("#chi^{2}/ndf", frame.chiSquare("bwpdf", "data", 2), -1, cbw) desc.prec = 2 desc.fmt = "e" desc.itemR("mean", mean, cbw) desc.itemR("#sigma", sigma, cbw) desc.draw() leg = ut.make_uo_leg(hPhiRel, 0.5, 0.8, 0.2, 0.2) #leg.Draw("same") #print "Entries: ", hPhiRel.GetEntries() #ut.invert_col(rt.gPad) can.SaveAs("01fig.pdf")