def plot_pt2(): #pT^2 with coherent incoherent and gamma-gamma components ptbin = 0.002 ptmin = 0. ptmax = 0.2 # 0.3 mmin = 2.8 mmax = 3.2 #mmin = 1.5 #mmax = 2.6 strsel = "jRecM>{0:.3f} && jRecM<{1:.3f}".format(mmin, mmax) can = ut.box_canvas() hPt = ut.prepare_TH1D("hPt", ptbin, ptmin, ptmax) hPtCoh = ut.prepare_TH1D("hPtCoh", ptbin / 3., ptmin, ptmax) hPtIncoh = ut.prepare_TH1D("hPtIncoh", ptbin, ptmin, ptmax) hPtGG = ut.prepare_TH1D("hPtGG", ptbin, ptmin, ptmax) ut.put_yx_tit(hPt, "Events / ({0:.3f}".format(ptbin) + " GeV^{2})", "#it{p}_{T}^{2} (GeV^{2})") ut.set_margin_lbtr(gPad, 0.11, 0.09, 0.01, 0.02) draw = "jRecPt*jRecPt" tree.Draw(draw + " >> hPt", strsel) tree_coh.Draw(draw + " >> hPtCoh", strsel) tree_incoh.Draw(draw + " >> hPtIncoh", strsel) tree_gg.Draw(draw + " >> hPtGG", strsel) ut.norm_to_data(hPtCoh, hPt, rt.kBlue, 0., 0.015) ut.norm_to_data(hPtIncoh, hPt, rt.kRed, 0.05, 0.16) # 0.3 ut.norm_to_data(hPtGG, hPt, rt.kGreen, 0., 0.001) hPt.Draw() hPtCoh.Draw("same") hPtIncoh.Draw("same") hPtGG.Draw("same") leg = ut.prepare_leg(0.67, 0.78, 0.14, 0.18, 0.03) ut.add_leg_mass(leg, mmin, mmax) leg.AddEntry(hPt, "Data") leg.AddEntry(hPtCoh, "Coherent MC", "l") leg.AddEntry(hPtIncoh, "Incoherent MC", "l") leg.AddEntry(hPtGG, "#gamma#gamma#rightarrow e^{+}e^{-} MC", "l") leg.Draw("same") uoleg = ut.make_uo_leg(hPt, 0.14, 0.9, 0.01, 0.1) uoleg.Draw("same") gPad.SetLogy() ut.invert_col(rt.gPad) can.SaveAs("01fig.pdf")
def fit_pt2_incoh(): #fit to incoherent MC pT^2 ptbin = 0.008 ptmin = 0. ptmax = 1. mmin = 2.8 mmax = 3.2 strsel = "jRecM>{0:.3f} && jRecM<{1:.3f}".format(mmin, mmax) can = ut.box_canvas() hPtIncoh = ut.prepare_TH1D("hPtIncoh", ptbin, ptmin, ptmax) ut.put_yx_tit(hPtIncoh, "Events / ({0:.3f}".format(ptbin) + " GeV^{2})", "#it{p}_{T}^{2} (GeV^{2})") tree_incoh.Draw("jRecPt*jRecPt >> hPtIncoh", strsel) #hPtIncoh.Sumw2() #hPtIncoh.Scale(1./hPtIncoh.Integral("width")) ut.set_margin_lbtr(gPad, 0.11, 0.09, 0.01, 0.01) func_incoh_pt2 = TF1("func_incoh", "[0]*exp(-[1]*x)", 0., 10.) func_incoh_pt2.SetParName(0, "A") func_incoh_pt2.SetParName(1, "b") func_incoh_pt2.SetNpx(1000) func_incoh_pt2.SetLineColor(rt.kRed) func_incoh_pt2.SetParameters(3000., 5.) r1 = (hPtIncoh.Fit(func_incoh_pt2, "RS")).Get() hPtIncoh.Draw() func_incoh_pt2.Draw("same") leg = ut.prepare_leg(0.67, 0.84, 0.14, 0.12, 0.03) ut.add_leg_mass(leg, mmin, mmax) leg.AddEntry(hPtIncoh, "Incoherent MC") leg.AddEntry(func_incoh_pt2, "#it{A}*exp(-#it{b}*#it{p}_{T}^{2})", "l") leg.Draw("same") desc = pdesc(hPtIncoh, 0.72, 0.84, 0.057) desc.set_text_size(0.03) desc.itemD("#chi^{2}/ndf", r1.Chi2() / r1.Ndf(), -1, rt.kRed) desc.itemRes("#it{A}", r1, 0, rt.kRed) desc.itemRes("#it{b}", r1, 1, rt.kRed) desc.draw() #gPad.SetLogy() ut.invert_col(rt.gPad) can.SaveAs("01fig.pdf")
def plot_jpsi_logPt2(): # log_10(pT^2) ptbin = 0.12 ptmin = -5. ptmax = 1. mmin = 2.8 mmax = 3.2 strsel = "jRecM>{0:.3f} && jRecM<{1:.3f}".format(mmin, mmax) can = ut.box_canvas() hPt = ut.prepare_TH1D("hPt", ptbin, ptmin, ptmax) hPtCoh = ut.prepare_TH1D("hPtCoh", ptbin / 3., ptmin, ptmax) hPtIncoh = ut.prepare_TH1D("hPtIncoh", ptbin / 3., ptmin, ptmax) hPtGG = ut.prepare_TH1D("hPtGG", ptbin, ptmin, ptmax) ut.put_yx_tit(hPt, "Events / ({0:.3f}".format(ptbin) + " GeV^{2})", "log_{10}( #it{p}_{T}^{2} ) (GeV^{2})") ut.set_margin_lbtr(gPad, 0.11, 0.09, 0.01, 0.01) draw = "TMath::Log10(jRecPt*jRecPt)" tree.Draw(draw + " >> hPt", strsel) tree_coh.Draw(draw + " >> hPtCoh", strsel) tree_incoh.Draw(draw + " >> hPtIncoh", strsel) tree_gg.Draw(draw + " >> hPtGG", strsel) ut.norm_to_data(hPtCoh, hPt, rt.kBlue, -5., -1.8) # norm for coh ut.norm_to_data(hPtIncoh, hPt, rt.kRed, -1.1, 1.) # for incoh ut.norm_to_data(hPtGG, hPt, rt.kGreen, -5., -2.9) # for ggel hPt.Draw() hPtCoh.Draw("same") hPtIncoh.Draw("same") hPtGG.Draw("same") leg = ut.prepare_leg(0.67, 0.79, 0.14, 0.17, 0.03) ut.add_leg_mass(leg, mmin, mmax) leg.AddEntry(hPt, "Data") leg.AddEntry(hPtCoh, "Coherent MC", "l") leg.AddEntry(hPtIncoh, "Incoherent MC", "l") leg.AddEntry(hPtGG, "#gamma#gamma#rightarrow e^{+}e^{-} MC", "l") leg.Draw("same") uoleg = ut.make_uo_leg(hPt, 0.14, 0.9, 0.01, 0.1) uoleg.Draw("same") #gPad.SetLogy() ut.invert_col(rt.gPad) can.SaveAs("01fig.pdf")
def plot_pt_gg(): #pT of gamma-gamma below and above J/psi ptbin = 0.02 #ptbin = 0.03 ptmin = 0. ptmax = 1.1 mmin = 2.1 mmax = 2.6 #mmin = 3.4 #mmax = 5. strsel = "jRecM>{0:.3f} && jRecM<{1:.3f}".format(mmin, mmax) can = ut.box_canvas() hPt = ut.prepare_TH1D("hPt", ptbin, ptmin, ptmax) hPtGG = ut.prepare_TH1D("hPtGG", ptbin, ptmin, ptmax) #ut.put_yx_tit(hPt, "Events / ({0:.3f}".format(ptbin)+" GeV)", "#it{p}_{T} (GeV})") ytit = "#gamma#gamma#rightarrow e^{+}e^{-} candidates / " + "({0:.3f}".format( ptbin) + " GeV)" ut.put_yx_tit(hPt, ytit, "Dielectron #it{p}_{T} (GeV)", 1.5, 1.2) ut.set_margin_lbtr(gPad, 0.11, 0.09, 0.01, 0.02) draw = "jRecPt" tree.Draw(draw + " >> hPt", strsel) tree_gg.Draw(draw + " >> hPtGG", strsel) ut.norm_to_data(hPtGG, hPt, rt.kGreen, 0., 0.3) #ut.norm_to_data(hPtGG, hPt, rt.kGreen, 0., 0.18) hPt.Draw() hPtGG.Draw("same") leg = ut.prepare_leg(0.67, 0.78, 0.14, 0.18, 0.03) leg.AddEntry(None, "#bf{|#kern[0.3]{#it{y}}| < 1}", "") ut.add_leg_mass(leg, mmin, mmax) leg.AddEntry(hPt, "Data") leg.AddEntry(hPtGG, "#gamma#gamma#rightarrow e^{+}e^{-}", "l") leg.Draw("same") pleg = ut.prepare_leg(0.33, 0.8, 0.01, 0.14, 0.035) pleg.AddEntry(None, "STAR Preliminary", "") pleg.AddEntry(None, "AuAu@200 GeV", "") pleg.AddEntry(None, "UPC sample", "") pleg.Draw("same") #ut.invert_col(rt.gPad) can.SaveAs("01fig.pdf")
def plot_vtx_z(): #primary vertex position along z from data and MC vbin = 4. vmax = 120. mmin = 1.5 mmax = 5 strsel = "jRecM>{0:.3f} && jRecM<{1:.3f}".format(mmin, mmax) can = ut.box_canvas() hVtx = ut.prepare_TH1D("hVtx", vbin, -vmax, vmax) hVtxMC = ut.prepare_TH1D("hVtxMC", vbin/2., -vmax, vmax) tree.Draw("jVtxZ >> hVtx", strsel) mctree.Draw("jVtxZ >> hVtxMC", strsel) ut.norm_to_data(hVtxMC, hVtx, rt.kBlue, -40, 40) hVtx.SetYTitle("Counts / {0:.0f} cm".format(vbin)); hVtx.SetXTitle("#it{z} of primary vertex (cm)"); hVtx.SetTitleOffset(1.5, "Y") hVtx.SetTitleOffset(1.3, "X") gPad.SetTopMargin(0.02) gPad.SetRightMargin(0.02) gPad.SetBottomMargin(0.1) gPad.SetLeftMargin(0.11) cut_lo = ut.cut_line(-30, 0.8, hVtx) cut_hi = ut.cut_line(30, 0.8, hVtx) leg = ut.prepare_leg(0.16, 0.82, 0.26, 0.12, 0.025) #leg.SetMargin(0.15) #leg.SetBorderSize(1) ut.add_leg_mass(leg, mmin, mmax) leg.AddEntry(hVtx, "Data") #leg.AddEntry(hVtxMC, "MC, coherent J/#it{#psi}", "l") leg.AddEntry(hVtxMC, "MC, #it{#gamma}#it{#gamma} #rightarrow e^{+}e^{-}", "l") leg.AddEntry(cut_lo, "Cut at #pm30 cm", "l") hVtx.Draw() hVtxMC.Draw("same") leg.Draw("same") cut_lo.Draw("same") cut_hi.Draw("same") #ut.invert_col(rt.gPad) can.SaveAs("01fig.pdf")
def plot_zdc_vtx(): #ZDC vertex from selected events and from all triggered events vbin = 0.1 vmin = -5. vmax = 7. mmin = 1.5 mmax = 5. can = ut.box_canvas() #selection string strsel = "jRecM>{0:.3f} && jRecM<{1:.3f}".format(mmin, mmax) #make the histograms hZdcVtx = ut.prepare_TH1D("hZdcVtx", vbin, vmin, vmax) hZdcVtxAll = ut.prepare_TH1D("hZdcVtxAll", vbin / 10., vmin, vmax) #convert to meters for plot tree.Draw("jZDCVtxZ/100. >> hZdcVtx", strsel) treeAll = inp.Get("jAllTree") treeAll.Draw("jZDCVtxZ/100. >> hZdcVtxAll") ut.norm_to_data(hZdcVtxAll, hZdcVtx, rt.kRed) hZdcVtx.SetYTitle("Events / {0:.0f} cm".format(vbin * 100.)) hZdcVtx.SetXTitle("ZDC vertex along #it{z} (meters)") hZdcVtx.SetTitleOffset(1.5, "Y") hZdcVtx.SetTitleOffset(1.1, "X") gPad.SetTopMargin(0.01) gPad.SetRightMargin(0.04) gPad.SetBottomMargin(0.08) gPad.SetLeftMargin(0.1) leg = ut.prepare_leg(0.67, 0.8, 0.28, 0.14, 0.025) leg.SetMargin(0.17) ut.add_leg_mass(leg, mmin, mmax) leg.AddEntry(hZdcVtx, "Selected events") leg.AddEntry(hZdcVtxAll, "All UPC-JpsiB triggers", "l") #gPad.SetLogy() hZdcVtx.Draw() hZdcVtxAll.Draw("same") leg.Draw("same") ut.invert_col(rt.gPad) can.SaveAs("01fig.pdf")
def plot_zdc_tpc_vtx(): #2D ZDC and TPC vertices zbin = 2. #zmin = -50. #zmax = 100. zmin = -100 zmax = 150 tbin = 2. #tmin = -55. #tmax = 55. tmin = -110 tmax = 110 mmin = 1.5 mmax = 5. can = ut.box_canvas() strsel = "jRecM>{0:.3f} && jRecM<{1:.3f}".format(mmin, mmax) hVtx = ut.prepare_TH2D("hVtx", tbin, tmin, tmax, zbin, zmin, zmax) tree.Draw("jZDCVtxZ:jVtxZ >> hVtx", strsel) hVtx.SetXTitle("TPC vertex along #it{z} / " + "{0:.0f} cm".format(zbin)) hVtx.SetYTitle("ZDC vertex along #it{z} / " + "{0:.0f} cm".format(zbin)) hVtx.SetTitleOffset(1.5, "Y") hVtx.SetTitleOffset(1.1, "X") gPad.SetTopMargin(0.02) gPad.SetRightMargin(0.09) gPad.SetBottomMargin(0.08) gPad.SetLeftMargin(0.11) leg = ut.prepare_leg(0.16, 0.82, 0.23, 0.05, 0.025) leg.SetMargin(0.02) leg.SetBorderSize(1) ut.add_leg_mass(leg, mmin, mmax) hVtx.Draw() leg.Draw("same") #ut.invert_col(rt.gPad) can.SaveAs("01fig.pdf")
def plot_jpsi_pt2(): #J/psi pT^2 ptbin = 0.002 ptmin = 0. ptmax = 0.15 mmin = 2.8 mmax = 3.2 strsel = "jRecM>{0:.3f} && jRecM<{1:.3f}".format(mmin, mmax) can = ut.box_canvas() hPt = ut.prepare_TH1D("hPt", ptbin, ptmin, ptmax) hPtMC = ut.prepare_TH1D("hPtMC", ptbin / 3., ptmin, ptmax) ut.put_yx_tit(hPt, "Events / ({0:.3f}".format(ptbin) + " GeV^{2})", "#it{p}_{T}^{2} (GeV^{2})") ut.set_margin_lbtr(gPad, 0.11, 0.09, 0.01, 0.02) draw = "jRecPt*jRecPt" tree.Draw(draw + " >> hPt", strsel) mctree.Draw(draw + " >> hPtMC", strsel) ut.norm_to_data(hPtMC, hPt, rt.kBlue, 0., 0.015) hPt.Draw() hPtMC.Draw("same") leg = ut.prepare_leg(0.67, 0.8, 0.14, 0.16, 0.03) ut.add_leg_mass(leg, mmin, mmax) leg.AddEntry(hPt, "Data") leg.AddEntry(hPtMC, "Coherent MC", "l") leg.Draw("same") uoleg = ut.make_uo_leg(hPt, 0.14, 0.9, 0.01, 0.1) uoleg.Draw("same") gPad.SetLogy() ut.invert_col(rt.gPad) can.SaveAs("01fig.pdf")
def plot_jpsi_logPt2(): #J/psi log_10(pT^2) ptbin = 0.12 ptmin = -5. ptmax = 1. mmin = 2.8 mmax = 3.2 strsel = "jRecM>{0:.3f} && jRecM<{1:.3f}".format(mmin, mmax) can = ut.box_canvas() hPt = ut.prepare_TH1D("hPt", ptbin, ptmin, ptmax) hPtMC = ut.prepare_TH1D("hPtMC", ptbin / 3., ptmin, ptmax) ut.put_yx_tit(hPt, "Events / ({0:.3f}".format(ptbin) + " GeV^{2})", "#it{p}_{T}^{2} (GeV^{2})") ut.set_margin_lbtr(gPad, 0.11, 0.09, 0.01, 0.01) draw = "TMath::Log10(jRecPt*jRecPt)" tree.Draw(draw + " >> hPt", strsel) mctree.Draw(draw + " >> hPtMC", strsel) ut.norm_to_data(hPtMC, hPt, rt.kBlue, -5., -1.8) # norm for coh #ut.norm_to_data(hPtMC, hPt, rt.kBlue, -1.1, 1.) # for incoh #ut.norm_to_data(hPtMC, hPt, rt.kBlue, -5., -2.4) # for ggel hPt.Draw() hPtMC.Draw("same") leg = ut.prepare_leg(0.67, 0.8, 0.14, 0.16, 0.03) ut.add_leg_mass(leg, mmin, mmax) leg.AddEntry(hPt, "Data") leg.AddEntry(hPtMC, "Coherent MC", "l") leg.Draw("same") uoleg = ut.make_uo_leg(hPt, 0.14, 0.9, 0.01, 0.1) uoleg.Draw("same") ut.invert_col(rt.gPad) can.SaveAs("01fig.pdf")
def pdf_logPt2_prelim(): #PDF fit to log_10(pT^2) for preliminary figure #tree_in = tree_incoh tree_in = tree #ptbin = 0.04 ptbin = 0.12 ptmin = -5. ptmax = 1. mmin = 2.8 mmax = 3.2 #fitran = [-5., 1.] fitran = [-0.9, 0.1] binned = False #gamma-gamma 131 evt for pT<0.18 #input data pT = RooRealVar("jRecPt", "pT", 0, 10) m = RooRealVar("jRecM", "mass", 0, 10) dataIN = RooDataSet("data", "data", tree_in, RooArgSet(pT, m)) strsel = "jRecM>{0:.3f} && jRecM<{1:.3f}".format(mmin, mmax) data = dataIN.reduce(strsel) #x is RooRealVar for log(Pt2) draw = "TMath::Log10(jRecPt*jRecPt)" draw_func = RooFormulaVar( "x", "Dielectron log_{10}( #it{p}_{T}^{2} ) ((GeV/c)^{2})", draw, RooArgList(pT)) x = data.addColumn(draw_func) x.setRange("fitran", fitran[0], fitran[1]) #binned data nbins, ptmax = ut.get_nbins(ptbin, ptmin, ptmax) hPt = TH1D("hPt", "hPt", nbins, ptmin, ptmax) hPtCoh = ut.prepare_TH1D("hPtCoh", ptbin, ptmin, ptmax) hPtCoh.SetLineWidth(2) #fill in binned data tree_in.Draw(draw + " >> hPt", strsel) tree_coh.Draw(draw + " >> hPtCoh", strsel) dataH = RooDataHist("dataH", "dataH", RooArgList(x), hPt) #range for plot x.setMin(ptmin) x.setMax(ptmax) x.setRange("plotran", ptmin, ptmax) #create the pdf b = RooRealVar("b", "b", 5., 0., 10.) pdf_func = "log(10.)*pow(10.,x)*exp(-b*pow(10.,x))" pdf_logPt2 = RooGenericPdf("pdf_logPt2", pdf_func, RooArgList(x, b)) #make the fit if binned == True: r1 = pdf_logPt2.fitTo(dataH, rf.Range("fitran"), rf.Save()) else: r1 = pdf_logPt2.fitTo(data, rf.Range("fitran"), rf.Save()) #calculate norm to number of events xset = RooArgSet(x) ipdf = pdf_logPt2.createIntegral(xset, rf.NormSet(xset), rf.Range("fitran")) print "PDF integral:", ipdf.getVal() if binned == True: nevt = tree_incoh.Draw( "", strsel + " && " + draw + ">{0:.3f}".format(fitran[0]) + " && " + draw + "<{1:.3f}".format(fitran[0], fitran[1])) else: nevt = data.sumEntries("x", "fitran") print "nevt:", nevt pdf_logPt2.setNormRange("fitran") print "PDF norm:", pdf_logPt2.getNorm(RooArgSet(x)) #a = nevt/ipdf.getVal() a = nevt / pdf_logPt2.getNorm(RooArgSet(x)) print "a =", a #gamma-gamma contribution hPtGG = ut.prepare_TH1D("hPtGG", ptbin, ptmin, ptmax) tree_gg.Draw(draw + " >> hPtGG", strsel) #ut.norm_to_data(hPtGG, hPt, rt.kGreen, -5., -2.9) ut.norm_to_num(hPtGG, 131., rt.kGreen + 1) print "Int GG:", hPtGG.Integral() #sum of all contributions hSum = ut.prepare_TH1D("hSum", ptbin, ptmin, ptmax) hSum.SetLineWidth(3) #add ggel to the sum hSum.Add(hPtGG) #add incoherent contribution func_logPt2 = TF1("pdf_logPt2", "[0]*log(10.)*pow(10.,x)*exp(-[1]*pow(10.,x))", -10., 10.) func_logPt2.SetParameters(a, b.getVal()) hInc = ut.prepare_TH1D("hInc", ptbin, ptmin, ptmax) ut.fill_h1_tf(hInc, func_logPt2) hSum.Add(hInc) #add coherent contribution ut.norm_to_data(hPtCoh, hPt, rt.kBlue, -5., -2.2) # norm for coh hSum.Add(hPtCoh) #set to draw as a lines ut.line_h1(hSum, rt.kBlack) #create canvas frame can = ut.box_canvas() ut.set_margin_lbtr(gPad, 0.11, 0.1, 0.01, 0.01) frame = x.frame(rf.Bins(nbins), rf.Title("")) frame.SetTitle("") frame.SetYTitle("J/#psi candidates / ({0:.3f}".format(ptbin) + " (GeV/c)^{2})") frame.GetXaxis().SetTitleOffset(1.2) frame.GetYaxis().SetTitleOffset(1.6) print "Int data:", hPt.Integral() #plot the data if binned == True: dataH.plotOn(frame, rf.Name("data")) else: data.plotOn(frame, rf.Name("data")) pdf_logPt2.plotOn(frame, rf.Range("fitran"), rf.LineColor(rt.kRed), rf.Name("pdf_logPt2")) pdf_logPt2.plotOn(frame, rf.Range("plotran"), rf.LineColor(rt.kRed), rf.Name("pdf_logPt2_full"), rf.LineStyle(rt.kDashed)) frame.Draw() leg = ut.prepare_leg(0.61, 0.77, 0.16, 0.19, 0.03) #ut.add_leg_mass(leg, mmin, mmax) hx = ut.prepare_TH1D("hx", 1, 0, 1) hx.Draw("same") ln = ut.col_lin(rt.kRed, 2) leg.AddEntry(hx, "Data", "p") leg.AddEntry(hSum, "Sum", "l") leg.AddEntry(hPtCoh, "Coherent J/#psi", "l") leg.AddEntry(ln, "Incoherent parametrization", "l") leg.AddEntry(hPtGG, "#gamma#gamma#rightarrow e^{+}e^{-}", "l") #leg.AddEntry(ln, "ln(10)*#it{A}*10^{log_{10}#it{p}_{T}^{2}}exp(-#it{b}10^{log_{10}#it{p}_{T}^{2}})", "l") leg.Draw("same") l0 = ut.cut_line(fitran[0], 0.9, frame) l1 = ut.cut_line(fitran[1], 0.9, frame) #l0.Draw() #l1.Draw() pleg = ut.prepare_leg(0.12, 0.75, 0.14, 0.22, 0.03) pleg.AddEntry(None, "#bf{|#kern[0.3]{#it{y}}| < 1}", "") ut.add_leg_mass(pleg, mmin, mmax) pleg.AddEntry(None, "STAR Preliminary", "") pleg.AddEntry(None, "AuAu@200 GeV", "") pleg.AddEntry(None, "UPC sample", "") pleg.Draw("same") desc = pdesc(frame, 0.14, 0.9, 0.057) desc.set_text_size(0.03) desc.itemD("#chi^{2}/ndf", frame.chiSquare("pdf_logPt2", "data", 2), -1, rt.kRed) desc.itemD("#it{A}", a, -1, rt.kRed) desc.itemR("#it{b}", b, rt.kRed) #desc.draw() #put the sum hSum.Draw("same") frame.Draw("same") #put gamma-gamma and coherent J/psi hPtGG.Draw("same") hPtCoh.Draw("same") #ut.invert_col(rt.gPad) can.SaveAs("01fig.pdf")
def fit_logPt2_incoh(): #fit to incoherent log_10(pT^2) ptbin = 0.12 ptmin = -5. ptmax = 1. mmin = 2.8 mmax = 3.2 fitran = [-1., -0.1] strsel = "jRecM>{0:.3f} && jRecM<{1:.3f}".format(mmin, mmax) can = ut.box_canvas() hPtIncoh = ut.prepare_TH1D("hPtIncoh", ptbin / 3., ptmin, ptmax) ut.put_yx_tit(hPtIncoh, "Events / ({0:.3f}".format(ptbin) + " GeV^{2})", "log_{10}( #it{p}_{T}^{2} ) (GeV^{2})") ut.set_margin_lbtr(gPad, 0.11, 0.09, 0.01, 0.01) draw = "TMath::Log10(jRecPt*jRecPt)" tree_incoh.Draw(draw + " >> hPtIncoh", strsel) #hPtIncoh.Sumw2() #hPtIncoh.Scale(1./hPtIncoh.Integral("width")) func_incoh_logPt2 = TF1("func_incoh_logPt2", "[0]*log(10.)*pow(10.,x)*exp(-[1]*pow(10.,x))", -10., 10.) func_incoh_logPt2.SetParName(0, "A") func_incoh_logPt2.SetParName(1, "b") func_incoh_logPt2.SetNpx(1000) func_incoh_logPt2.SetLineColor(rt.kRed) func_incoh_logPt2.SetParameters(3000., 5.) r1 = (hPtIncoh.Fit(func_incoh_logPt2, "RS", "", fitran[0], fitran[1])).Get() #create pdf normalized to number of events pdf_logPt2 = TF1("pdf_logPt2", "[0]*log(10.)*pow(10.,x)*exp(-[1]*pow(10.,x))", -10., 10.) nevt = tree_incoh.Draw( "", strsel + " && " + draw + ">{0:.3f}".format(fitran[0]) + " && " + draw + "<{1:.3f}".format(fitran[0], fitran[1])) k_norm = nevt / func_incoh_logPt2.Integral(fitran[0], fitran[1]) pdf_logPt2.SetParameter(0, k_norm * func_incoh_logPt2.GetParameter(0)) pdf_logPt2.SetParameter(1, func_incoh_logPt2.GetParameter(1)) #verify the normalization: print "PDF integral", pdf_logPt2.Integral(-10., 10.) hPtIncoh.Draw() func_incoh_logPt2.Draw("same") leg = ut.prepare_leg(0.18, 0.78, 0.14, 0.15, 0.03) ut.add_leg_mass(leg, mmin, mmax) leg.AddEntry(hPtIncoh, "Incoherent MC") leg.AddEntry( func_incoh_logPt2, "ln(10)*#it{A}*10^{log_{10}#it{p}_{T}^{2}}exp(-#it{b}10^{log_{10}#it{p}_{T}^{2}})", "l") leg.Draw("same") desc = pdesc(hPtIncoh, 0.18, 0.78, 0.057) desc.set_text_size(0.03) desc.itemD("#chi^{2}/ndf", r1.Chi2() / r1.Ndf(), -1, rt.kRed) desc.itemRes("#it{A}", r1, 0, rt.kRed) desc.itemD("#it{A}", pdf_logPt2.GetParameter(0), -1, rt.kRed) desc.itemRes("#it{b}", r1, 1, rt.kRed) desc.draw() uoleg = ut.make_uo_leg(hPtIncoh, 0.14, 0.9, 0.01, 0.1) uoleg.Draw("same") l0 = ut.cut_line(fitran[0], 0.9, hPtIncoh) l1 = ut.cut_line(fitran[1], 0.9, hPtIncoh) l0.Draw() l1.Draw() ut.invert_col(rt.gPad) can.SaveAs("01fig.pdf")
def pdf_logPt2_incoh(): #PDF fit to log_10(pT^2) #tree_in = tree_incoh tree_in = tree #ptbin = 0.04 ptbin = 0.12 ptmin = -5. ptmax = 1. mmin = 2.8 mmax = 3.2 #fitran = [-5., 1.] fitran = [-0.9, 0.1] binned = False #gamma-gamma 131 evt for pT<0.18 #output log file out = open("out.txt", "w") ut.log_results( out, "in " + infile + " in_coh " + infile_coh + " in_gg " + infile_gg) loglist = [(x, eval(x)) for x in ["ptbin", "ptmin", "ptmax", "mmin", "mmax", "fitran", "binned"]] strlog = ut.make_log_string(loglist) ut.log_results(out, strlog + "\n") #input data pT = RooRealVar("jRecPt", "pT", 0, 10) m = RooRealVar("jRecM", "mass", 0, 10) dataIN = RooDataSet("data", "data", tree_in, RooArgSet(pT, m)) strsel = "jRecM>{0:.3f} && jRecM<{1:.3f}".format(mmin, mmax) data = dataIN.reduce(strsel) #x is RooRealVar for log(Pt2) draw = "TMath::Log10(jRecPt*jRecPt)" draw_func = RooFormulaVar("x", "log_{10}( #it{p}_{T}^{2} ) (GeV^{2})", draw, RooArgList(pT)) x = data.addColumn(draw_func) x.setRange("fitran", fitran[0], fitran[1]) #binned data nbins, ptmax = ut.get_nbins(ptbin, ptmin, ptmax) hPt = TH1D("hPt", "hPt", nbins, ptmin, ptmax) tree_in.Draw(draw + " >> hPt", strsel) dataH = RooDataHist("dataH", "dataH", RooArgList(x), hPt) #range for plot x.setMin(ptmin) x.setMax(ptmax) x.setRange("plotran", ptmin, ptmax) #create the pdf b = RooRealVar("b", "b", 5., 0., 10.) pdf_func = "log(10.)*pow(10.,x)*exp(-b*pow(10.,x))" pdf_logPt2 = RooGenericPdf("pdf_logPt2", pdf_func, RooArgList(x, b)) #make the fit if binned == True: r1 = pdf_logPt2.fitTo(dataH, rf.Range("fitran"), rf.Save()) else: r1 = pdf_logPt2.fitTo(data, rf.Range("fitran"), rf.Save()) ut.log_results(out, ut.log_fit_result(r1)) #calculate norm to number of events xset = RooArgSet(x) ipdf = pdf_logPt2.createIntegral(xset, rf.NormSet(xset), rf.Range("fitran")) print "PDF integral:", ipdf.getVal() if binned == True: nevt = tree_incoh.Draw( "", strsel + " && " + draw + ">{0:.3f}".format(fitran[0]) + " && " + draw + "<{1:.3f}".format(fitran[0], fitran[1])) else: nevt = data.sumEntries("x", "fitran") print "nevt:", nevt pdf_logPt2.setNormRange("fitran") print "PDF norm:", pdf_logPt2.getNorm(RooArgSet(x)) #a = nevt/ipdf.getVal() a = nevt / pdf_logPt2.getNorm(RooArgSet(x)) ut.log_results(out, "log_10(pT^2) parametrization:") ut.log_results(out, "A = {0:.2f}".format(a)) ut.log_results(out, ut.log_fit_parameters(r1, 0, 2)) print "a =", a #Coherent contribution hPtCoh = ut.prepare_TH1D("hPtCoh", ptbin, ptmin, ptmax) hPtCoh.Sumw2() #tree_coh.Draw(draw + " >> hPtCoh", strsel) tree_coh.Draw("TMath::Log10(jGenPt*jGenPt) >> hPtCoh", strsel) ut.norm_to_data(hPtCoh, hPt, rt.kBlue, -5., -2.2) # norm for coh #ut.norm_to_data(hPtCoh, hPt, rt.kBlue, -5, -2.1) #ut.norm_to_num(hPtCoh, 405, rt.kBlue) print "Coherent integral:", hPtCoh.Integral() #TMath::Log10(jRecPt*jRecPt) #Sartre generated coherent shape sartre = TFile.Open( "/home/jaroslav/sim/sartre_tx/sartre_AuAu_200GeV_Jpsi_coh_2p7Mevt.root" ) sartre_tree = sartre.Get("sartre_tree") hSartre = ut.prepare_TH1D("hSartre", ptbin, ptmin, ptmax) sartre_tree.Draw("TMath::Log10(pT*pT) >> hSartre", "rapidity>-1 && rapidity<1") ut.norm_to_data(hSartre, hPt, rt.kViolet, -5, -2) # norm for Sartre #gamma-gamma contribution hPtGG = ut.prepare_TH1D("hPtGG", ptbin, ptmin, ptmax) tree_gg.Draw(draw + " >> hPtGG", strsel) #ut.norm_to_data(hPtGG, hPt, rt.kGreen, -5., -2.9) ut.norm_to_num(hPtGG, 131., rt.kGreen) print "Int GG:", hPtGG.Integral() #psi' contribution psiP = TFile.Open(basedir_mc + "/ana_slight14e4x1_s6_sel5z.root") psiP_tree = psiP.Get("jRecTree") hPtPsiP = ut.prepare_TH1D("hPtPsiP", ptbin, ptmin, ptmax) psiP_tree.Draw(draw + " >> hPtPsiP", strsel) ut.norm_to_num(hPtPsiP, 12, rt.kViolet) #sum of all contributions hSum = ut.prepare_TH1D("hSum", ptbin, ptmin, ptmax) hSum.SetLineWidth(3) #add ggel to the sum hSum.Add(hPtGG) #add incoherent contribution func_logPt2 = TF1("pdf_logPt2", "[0]*log(10.)*pow(10.,x)*exp(-[1]*pow(10.,x))", -10., 10.) func_logPt2.SetParameters(a, b.getVal()) hInc = ut.prepare_TH1D("hInc", ptbin, ptmin, ptmax) ut.fill_h1_tf(hInc, func_logPt2) hSum.Add(hInc) #add coherent contribution hSum.Add(hPtCoh) #add psi(2S) contribution #hSum.Add(hPtPsiP) #set to draw as a lines ut.line_h1(hSum, rt.kBlack) #create canvas frame can = ut.box_canvas() ut.set_margin_lbtr(gPad, 0.11, 0.09, 0.01, 0.01) frame = x.frame(rf.Bins(nbins), rf.Title("")) frame.SetTitle("") frame.SetMaximum(75) frame.SetYTitle("Events / ({0:.3f}".format(ptbin) + " GeV^{2})") print "Int data:", hPt.Integral() #plot the data if binned == True: dataH.plotOn(frame, rf.Name("data")) else: data.plotOn(frame, rf.Name("data")) pdf_logPt2.plotOn(frame, rf.Range("fitran"), rf.LineColor(rt.kRed), rf.Name("pdf_logPt2")) pdf_logPt2.plotOn(frame, rf.Range("plotran"), rf.LineColor(rt.kRed), rf.Name("pdf_logPt2_full"), rf.LineStyle(rt.kDashed)) frame.Draw() amin = TMath.Power(10, ptmin) amax = TMath.Power(10, ptmax) - 1 print amin, amax pt2func = TF1("f1", "TMath::Power(10, x)", amin, amax) #TMath::Power(x, 10) aPt2 = TGaxis(-5, 75, 1, 75, "f1", 510, "-") ut.set_axis(aPt2) aPt2.SetTitle("pt2") #aPt2.Draw(); leg = ut.prepare_leg(0.57, 0.78, 0.14, 0.19, 0.03) ut.add_leg_mass(leg, mmin, mmax) hx = ut.prepare_TH1D("hx", 1, 0, 1) hx.Draw("same") ln = ut.col_lin(rt.kRed) leg.AddEntry(hx, "Data") leg.AddEntry(hPtCoh, "Sartre MC", "l") leg.AddEntry(hPtGG, "#gamma#gamma#rightarrow e^{+}e^{-} MC", "l") #leg.AddEntry(ln, "ln(10)*#it{A}*10^{log_{10}#it{p}_{T}^{2}}exp(-#it{b}10^{log_{10}#it{p}_{T}^{2}})", "l") #leg.AddEntry(ln, "Incoherent fit", "l") leg.Draw("same") l0 = ut.cut_line(fitran[0], 0.9, frame) l1 = ut.cut_line(fitran[1], 0.9, frame) #l0.Draw() #l1.Draw() desc = pdesc(frame, 0.14, 0.8, 0.054) desc.set_text_size(0.03) desc.itemD("#chi^{2}/ndf", frame.chiSquare("pdf_logPt2", "data", 2), -1, rt.kRed) desc.itemD("#it{A}", a, -1, rt.kRed) desc.itemR("#it{b}", b, rt.kRed) desc.draw() #put the sum #hSum.Draw("same") #gPad.SetLogy() frame.Draw("same") #put gamma-gamma hPtGG.Draw("same") #put coherent J/psi hPtCoh.Draw("same") #put Sartre generated coherent shape #hSartre.Draw("same") #put psi(2S) contribution #hPtPsiP.Draw("same") leg2 = ut.prepare_leg(0.14, 0.9, 0.14, 0.08, 0.03) leg2.AddEntry( ln, "ln(10)*#it{A}*10^{log_{10}#it{p}_{T}^{2}}exp(-#it{b}10^{log_{10}#it{p}_{T}^{2}})", "l") #leg2.AddEntry(hPtCoh, "Sartre MC reconstructed", "l") #leg2.AddEntry(hSartre, "Sartre MC generated", "l") leg2.Draw("same") ut.invert_col(rt.gPad) can.SaveAs("01fig.pdf")
def plot_pt2_real(): #pT^2 with realistic normalization for incoherent and gamma-gamma components ptbin = 0.002 ptmin = 0. ptmax = 0.2 # 0.3 mmin = 2.8 mmax = 3.2 ngg = 131 # number of gamma-gamma from mass fit strsel = "jRecM>{0:.3f} && jRecM<{1:.3f}".format(mmin, mmax) can = ut.box_canvas() hPt = ut.prepare_TH1D("hPt", ptbin, ptmin, ptmax) hPtCoh = ut.prepare_TH1D("hPtCoh", ptbin, ptmin, ptmax) hPtIncoh = ut.prepare_TH1D("hPtIncoh", ptbin, ptmin, ptmax) hPtGG = ut.prepare_TH1D("hPtGG", ptbin, ptmin, ptmax) ut.put_yx_tit(hPt, "Events / ({0:.3f}".format(ptbin) + " GeV^{2})", "#it{p}_{T}^{2} (GeV^{2})") ut.set_margin_lbtr(gPad, 0.11, 0.09, 0.01, 0.02) draw = "jRecPt*jRecPt" tree.Draw(draw + " >> hPt", strsel) tree_coh.Draw(draw + " >> hPtCoh", strsel) tree_gg.Draw(draw + " >> hPtGG", strsel) #incoherent functional shape func_incoh_pt2 = TF1("func_incoh", "[0]*exp(-[1]*x)", 0., 10.) func_incoh_pt2.SetParameters(873.04, 3.28) #fill incoherent histogram from functional shape ut.fill_h1_tf(hPtIncoh, func_incoh_pt2, rt.kRed) ut.norm_to_data(hPtCoh, hPt, rt.kBlue, 0., 0.015) ut.norm_to_num(hPtGG, ngg, rt.kGreen) hPt.Draw() hPtCoh.Draw("same") hPtIncoh.Draw("same") hPtGG.Draw("same") leg = ut.prepare_leg(0.6, 0.78, 0.14, 0.18, 0.03) ut.add_leg_mass(leg, mmin, mmax) leg.AddEntry(hPt, "Data") leg.AddEntry(hPtCoh, "Coherent MC, Sartre", "l") leg.AddEntry(hPtIncoh, "Incoherent parametrization", "l") leg.AddEntry(hPtGG, "#gamma#gamma#rightarrow e^{+}e^{-} MC", "l") leg.Draw("same") uoleg = ut.make_uo_leg(hPt, 0.14, 0.9, 0.01, 0.1) #uoleg.Draw("same") gPad.SetLogy() #ut.invert_col(rt.gPad) can.SaveAs("01fig.pdf")
def plot_pt(): #pT with coherent incoherent and gamma-gamma components ptbin = 0.02 ptmin = 0. ptmax = 1.1 mmin = 2.8 mmax = 3.2 #mmin = 3.4 #mmax = 5. strsel = "jRecM>{0:.3f} && jRecM<{1:.3f}".format(mmin, mmax) can = ut.box_canvas() hPt = ut.prepare_TH1D("hPt", ptbin, ptmin, ptmax) hPtCoh = ut.prepare_TH1D("hPtCoh", ptbin, ptmin, ptmax) hPtIncoh = ut.prepare_TH1D("hPtIncoh", ptbin, ptmin, ptmax) hPtGG = ut.prepare_TH1D("hPtGG", ptbin, ptmin, ptmax) #ut.put_yx_tit(hPt, "Events / ({0:.3f}".format(ptbin)+" GeV)", "#it{p}_{T} (GeV})") ut.put_yx_tit(hPt, "J/#psi candidates / ({0:.3f}".format(ptbin) + " GeV/c)", "Dielectron #it{p}_{T} (GeV/c)", 1.5, 1.2) ut.set_margin_lbtr(gPad, 0.11, 0.09, 0.01, 0.02) draw = "jRecPt" tree.Draw(draw + " >> hPt", strsel) tree_coh.Draw(draw + " >> hPtCoh", strsel) tree_incoh.Draw(draw + " >> hPtIncoh", strsel) tree_gg.Draw(draw + " >> hPtGG", strsel) ut.norm_to_data(hPtCoh, hPt, rt.kBlue, 0., 0.08) ut.norm_to_data(hPtIncoh, hPt, rt.kRed, 0.28, 1.) #ut.norm_to_data(hPtGG, hPt, rt.kGreen, 0., 0.03) ut.norm_to_num(hPtGG, 131, rt.kGreen + 1) #sum of all contributions hSum = ut.prepare_TH1D("hSum", ptbin, ptmin, ptmax) hSum.SetLineWidth(3) #add ggel to the sum hSum.Add(hPtGG) #add incoherent contribution hSum.Add(hPtIncoh) #add coherent contribution hSum.Add(hPtCoh) #set to draw as a lines ut.line_h1(hSum, rt.kBlack) hPt.Draw() hSum.Draw("same") hPtCoh.Draw("same") hPtIncoh.Draw("same") hPtGG.Draw("same") leg = ut.prepare_leg(0.64, 0.65, 0.14, 0.3, 0.03) leg.AddEntry(None, "#bf{|#kern[0.3]{#it{y}}| < 1}", "") ut.add_leg_mass(leg, mmin, mmax) leg.AddEntry(hPt, "Data", "p") leg.AddEntry(hSum, "Sum", "l") leg.AddEntry(hPtCoh, "Coherent J/#psi", "l") leg.AddEntry(hPtIncoh, "Incoherent J/#psi", "l") leg.AddEntry(hPtGG, "#gamma#gamma#rightarrow e^{+}e^{-}", "l") leg.Draw("same") uoleg = ut.make_uo_leg(hPt, 0.14, 0.9, 0.01, 0.1) #uoleg.Draw("same") pleg = ut.prepare_leg(0.33, 0.8, 0.01, 0.14, 0.035) pleg.AddEntry(None, "STAR Preliminary", "") pleg.AddEntry(None, "AuAu@200 GeV", "") pleg.AddEntry(None, "UPC sample", "") pleg.Draw("same") #ut.invert_col(rt.gPad) can.SaveAs("01fig.pdf")
def fit(): #fit to log_10(pT^2) with components and plot of plain pT^2 #range in log_10(pT^2) ptbin = 0.12 ptmin = -5. ptmax = 0.99 # 1.01 #range in pT^2 ptsq_bin = 0.03 ptsq_min = 1e-5 ptsq_max = 1 mmin = 2.8 mmax = 3.2 #range for incoherent fit fitran = [-0.9, 0.1] #number of gamma-gamma events ngg = 131 #number of psi' events npsiP = 20 #input data pT = RooRealVar("jRecPt", "pT", 0, 10) m = RooRealVar("jRecM", "mass", 0, 10) data_all = RooDataSet("data", "data", tree, RooArgSet(pT, m)) #select for mass range strsel = "jRecM>{0:.3f} && jRecM<{1:.3f}".format(mmin, mmax) data = data_all.reduce(strsel) #create log(pT^2) from pT ptsq_draw = "jRecPt*jRecPt" # will be used for pT^2 logPtSq_draw = "TMath::Log10(" + ptsq_draw + ")" logPtSq_form = RooFormulaVar("logPtSq", "logPtSq", logPtSq_draw, RooArgList(pT)) logPtSq = data.addColumn(logPtSq_form) logPtSq.setRange("fitran", fitran[0], fitran[1]) #bins and range for the plot nbins, ptmax = ut.get_nbins(ptbin, ptmin, ptmax) logPtSq.setMin(ptmin) logPtSq.setMax(ptmax) logPtSq.setRange("plotran", ptmin, ptmax) #range for pT^2 ptsq_nbins, ptsq_max = ut.get_nbins(ptsq_bin, ptsq_min, ptsq_max) #incoherent parametrization bval = RooRealVar("bval", "bval", 3.3, 0, 10) inc_form = "log(10.)*pow(10.,logPtSq)*exp(-bval*pow(10.,logPtSq))" incpdf = RooGenericPdf("incpdf", inc_form, RooArgList(logPtSq, bval)) #make the incoherent fit res = incpdf.fitTo(data, rf.Range("fitran"), rf.Save()) #get incoherent norm to the number of events lset = RooArgSet(logPtSq) iinc = incpdf.createIntegral(lset, rf.NormSet(lset), rf.Range("fitran")) inc_nevt = data.sumEntries("logPtSq", "fitran") incpdf.setNormRange("fitran") aval = RooRealVar("aval", "aval", inc_nevt / incpdf.getNorm(lset)) #print "A =", aval.getVal() #print "b =", bval.getVal() #incoherent distribution from log_10(pT^2) function for the sum with gamma-gamma hIncPdf = ut.prepare_TH1D_n("hGG", nbins, ptmin, ptmax) func_incoh_logPt2 = TF1("func_incoh_logPt2", "[0]*log(10.)*pow(10.,x)*exp(-[1]*pow(10.,x))", -10., 10.) func_incoh_logPt2.SetNpx(1000) func_incoh_logPt2.SetLineColor(rt.kMagenta) func_incoh_logPt2.SetParameters( aval.getVal(), bval.getVal()) # 4.9 from incoherent mc, 3.3 from data fit ut.fill_h1_tf(hIncPdf, func_incoh_logPt2, rt.kMagenta) #gamma-gamma contribution hGG = ut.prepare_TH1D_n("hGG", nbins, ptmin, ptmax) tree_gg.Draw(logPtSq_draw + " >> hGG", strsel) ut.norm_to_num(hGG, ngg, rt.kGreen + 1) #sum of incoherent distribution and gamma-gamma hSumIncGG = ut.prepare_TH1D_n("hSumIncGG", nbins, ptmin, ptmax) hSumIncGG.Add(hIncPdf) hSumIncGG.Add(hGG) ut.line_h1(hSumIncGG, rt.kMagenta) #gamma-gamma in pT^2 hGG_ptsq = ut.prepare_TH1D_n("hGG_ptsq", ptsq_nbins, ptsq_min, ptsq_max) tree_gg.Draw(ptsq_draw + " >> hGG_ptsq", strsel) ut.norm_to_num(hGG_ptsq, ngg, rt.kGreen + 1) #psi' contribution psiP_file = TFile.Open(basedir_mc + "/ana_slight14e4x1_s6_sel5z.root") psiP_tree = psiP_file.Get("jRecTree") hPsiP = ut.prepare_TH1D_n("hPsiP", nbins, ptmin, ptmax) psiP_tree.Draw(logPtSq_draw + " >> hPsiP", strsel) ut.norm_to_num(hPsiP, npsiP, rt.kViolet) #psi' in pT^2 hPsiP_ptsq = ut.prepare_TH1D_n("hPsiP_ptsq", ptsq_nbins, ptsq_min, ptsq_max) psiP_tree.Draw(ptsq_draw + " >> hPsiP_ptsq", strsel) ut.norm_to_num(hPsiP_ptsq, npsiP, rt.kViolet) #create canvas frame gStyle.SetPadTickY(1) can = ut.box_canvas(1086, 543) # square area is still 768^2 can.SetMargin(0, 0, 0, 0) can.Divide(2, 1, 0, 0) gStyle.SetLineWidth(1) can.cd(1) ut.set_margin_lbtr(gPad, 0.11, 0.1, 0.01, 0) frame = logPtSq.frame(rf.Bins(nbins)) frame.SetTitle("") frame.SetMaximum(80) frame.SetYTitle("Events / ({0:.3f}".format(ptbin) + " GeV^{2})") frame.SetXTitle("log_{10}( #it{p}_{T}^{2} ) (GeV^{2})") frame.GetXaxis().SetTitleOffset(1.2) frame.GetYaxis().SetTitleOffset(1.6) #plot the data data.plotOn(frame, rf.Name("data"), rf.LineWidth(2)) #incoherent parametrization incpdf.plotOn(frame, rf.Range("fitran"), rf.LineColor(rt.kRed), rf.Name("incpdf"), rf.LineWidth(2)) incpdf.plotOn(frame, rf.Range("plotran"), rf.LineColor(rt.kRed), rf.Name("incpdf_full"), rf.LineStyle(rt.kDashed), rf.LineWidth(2)) frame.Draw() #add gamma-gamma contribution hGG.Draw("same") #sum of incoherent distribution and gamma-gamma #hSumIncGG.Draw("same") #add psi' #hPsiP.Draw("same") #legend for log_10(pT^2) leg = ut.prepare_leg(0.15, 0.77, 0.28, 0.19, 0.035) hxl = ut.prepare_TH1D("hxl", 1, 0, 1) hxl.Draw("same") ilin = ut.col_lin(rt.kRed, 2) ilin2 = ut.col_lin(rt.kRed, 2) ilin2.SetLineStyle(rt.kDashed) leg.AddEntry(ilin, "Incoherent parametrization, fit region", "l") leg.AddEntry(ilin2, "Incoherent parametrization, extrapolation region", "l") leg.AddEntry(hGG, "#gamma#gamma#rightarrow e^{+}e^{-}", "l") #leg.AddEntry(hxl, "Data", "lp") leg.AddEntry(hxl, "Data, log_{10}( #it{p}_{T}^{2} )", "lp") leg.Draw("same") #----- plot pT^2 on the right ----- #pT^2 variable from pT ptsq_form = RooFormulaVar("ptsq", "ptsq", ptsq_draw, RooArgList(pT)) ptsq = data.addColumn(ptsq_form) #range for pT^2 plot ptsq.setMin(ptsq_min) ptsq.setMax(ptsq_max) #make the pT^2 plot can.cd(2) gPad.SetLogy() #gPad.SetLineWidth(3) #gPad.SetFrameLineWidth(1) ut.set_margin_lbtr(gPad, 0, 0.1, 0.01, 0.15) ptsq_frame = ptsq.frame(rf.Bins(ptsq_nbins), rf.Title("")) #print type(ptsq_frame), type(ptsq) ptsq_frame.SetTitle("") ptsq_frame.SetXTitle("#it{p}_{T}^{2} (GeV^{2})") ptsq_frame.GetXaxis().SetTitleOffset(1.2) data.plotOn(ptsq_frame, rf.Name("data"), rf.LineWidth(2)) ptsq_frame.SetMaximum(9e2) ptsq_frame.SetMinimum(0.8) # 0.101 ptsq_frame.Draw() #incoherent parametrization in pT^2 over the fit region, scaled to the plot inc_ptsq = TF1("inc_ptsq", "[0]*exp(-[1]*x)", 10**fitran[0], 10**fitran[1]) inc_ptsq.SetParameters(aval.getVal() * ptsq_bin, bval.getVal()) #incoherent parametrization in the extrapolation region, below and above the fit region inc_ptsq_ext1 = TF1("inc_ptsq_ext1", "[0]*exp(-[1]*x)", 0., 10**fitran[0]) inc_ptsq_ext2 = TF1("inc_ptsq_ext2", "[0]*exp(-[1]*x)", 10**fitran[1], 10) inc_ptsq_ext1.SetParameters(aval.getVal() * ptsq_bin, bval.getVal()) inc_ptsq_ext1.SetLineStyle(rt.kDashed) inc_ptsq_ext2.SetParameters(aval.getVal() * ptsq_bin, bval.getVal()) inc_ptsq_ext2.SetLineStyle(rt.kDashed) inc_ptsq.Draw("same") inc_ptsq_ext1.Draw("same") inc_ptsq_ext2.Draw("same") #add gamma-gamma in pT^2 hGG_ptsq.Draw("same") #add psi' in pT^2 #hPsiP_ptsq.Draw("same") #redraw the frame #ptsq_frame.Draw("same") ptsq_frame.GetXaxis().SetLimits(-9e-3, ptsq_frame.GetXaxis().GetXmax()) #vertical axis for pT^2 plot xpos = ptsq_frame.GetXaxis().GetXmax() ypos = ptsq_frame.GetMaximum() ymin = ptsq_frame.GetMinimum() ptsq_axis = TGaxis(xpos, 0, xpos, ypos, ymin, ypos, 510, "+GL") ut.set_axis(ptsq_axis) ptsq_axis.SetMoreLogLabels() ptsq_axis.SetTitle("Events / ({0:.3f}".format(ptsq_bin) + " GeV^{2})") ptsq_axis.SetTitleOffset(2.2) ptsq_axis.Draw() #legend for input data #dleg = ut.prepare_leg(0.4, 0.77, 0.14, 0.18, 0.035) dleg = ut.prepare_leg(0.4, 0.71, 0.16, 0.24, 0.035) dleg.AddEntry(None, "#bf{|#kern[0.3]{#it{y}}| < 1}", "") ut.add_leg_mass(dleg, mmin, mmax) dleg.AddEntry(None, "AuAu@200 GeV", "") dleg.AddEntry(None, "UPC sample", "") dleg.AddEntry(hxl, "Data, #it{p}_{T}^{2}", "lp") dleg.Draw("same") #ut.invert_col_can(can) can.SaveAs("01fig.pdf")
def fit_vtx_z(): #gaussian fit to vertex z-position datamc = False #true - data, false - mc if datamc: vbin = 4. else: vbin = 2 vmax = 120. mmin = 1.5 mmax = 5. if datamc: fit_lo = -30. fit_hi = 35. else: fit_lo = -40. fit_hi = 45. fitcol = rt.kBlue strsel = "jRecM>{0:.3f} && jRecM<{1:.3f}".format(mmin, mmax) out = open("out.txt", "w") can = ut.box_canvas() hVtx = ut.prepare_TH1D("hVtx", vbin, -vmax, vmax) if datamc: tree.Draw("jVtxZ >> hVtx", strsel) else: mctree.Draw("jVtxZ >> hVtx", strsel) f1 = TF1("f1", "gaus", fit_lo, fit_hi) f1.SetNpx(1000) f1.SetLineColor(fitcol) #make the fit r1 = (hVtx.Fit(f1, "RS")).Get() out.write(ut.log_tfit_result(r1)) hVtx.SetYTitle("Counts / {0:.0f} cm".format(vbin)); hVtx.SetXTitle("#it{z} of primary vertex (cm)"); hVtx.SetTitleOffset(1.5, "Y") hVtx.SetTitleOffset(1.3, "X") gPad.SetTopMargin(0.02) gPad.SetRightMargin(0.02) gPad.SetBottomMargin(0.1) gPad.SetLeftMargin(0.11) leg = ut.prepare_leg(0.15, 0.82, 0.28, 0.12, 0.025) leg.SetMargin(0.17) ut.add_leg_mass(leg, mmin, mmax) if datamc: leg.AddEntry(hVtx, "Data") else: leg.AddEntry(hVtx, "Embedding MC #gamma#gamma") leg.AddEntry(f1, "Gaussian fit", "l") #fit parameters on the plot desc = pdesc(hVtx, 0.14, 0.82, 0.057) desc.set_text_size(0.03) desc.itemD("#chi^{2}/ndf", r1.Chi2()/r1.Ndf(), -1, fitcol) desc.prec = 2 desc.itemRes("mean", r1, 1, fitcol) desc.itemRes("#it{#sigma}", r1, 2, fitcol) desc.itemRes("norm", r1, 0, fitcol) hVtx.Draw() leg.Draw("same") desc.draw() #ut.invert_col(rt.gPad) can.SaveAs("01fig.pdf")
def fit_pt_incoh(): #fit to incoherent MC pT ptbin = 0.015 #ptbin = math.sqrt(0.005) ptmin = 0. ptmax = 1.4 mmin = 2.8 mmax = 3.2 fitran = [0.4, 1.] strsel = "jRecM>{0:.3f} && jRecM<{1:.3f}".format(mmin, mmax) can = ut.box_canvas() hPtIncoh = ut.prepare_TH1D("hPtIncoh", ptbin, ptmin, ptmax) ut.put_yx_tit(hPtIncoh, "Events / ({0:.3f}".format(ptbin) + " GeV)", "#it{p}_{T} (GeV)") tree_incoh.Draw("jRecPt >> hPtIncoh", strsel) print "Input events:", hPtIncoh.GetEntries() print "Histogram integral:", hPtIncoh.Integral() print "Histogram integral (w):", hPtIncoh.Integral("width") #hPtIncoh.Sumw2() #hPtIncoh.Scale(1./hPtIncoh.Integral("width")) ut.set_margin_lbtr(gPad, 0.11, 0.09, 0.01, 0.02) func_incoh = TF1("func_incoh", "2*[0]*x*exp(-[1]*x*x)", 0., 10.) func_incoh.SetParName(0, "A") func_incoh.SetParName(1, "b") func_incoh.SetNpx(1000) func_incoh.SetLineColor(rt.kRed) func_incoh.SetParameters(3000., 5.) r1 = (hPtIncoh.Fit(func_incoh, "RS", "", fitran[0], fitran[1])).Get() print "Fit integral:", func_incoh.Integral(0., 10.) hPtIncoh.Draw() func_incoh.Draw("same") #normalize fit function to number of events pdf_incoh = TF1("pdf_incoh", "2*[0]*x*exp(-[1]*x*x)", 0., 10.) pdf_incoh.SetParName(0, "A") pdf_incoh.SetParName(1, "b") # tree_incoh.Draw("jRecPt >> hPtIncoh", strsel) #strsel = "jRecM>{0:.3f} && jRecM<{1:.3f}".format(mmin, mmax) nevt = tree_incoh.Draw( "", strsel + " && jRecPt>{0:.3f} && jRecPt<{1:.3f}".format(fitran[0], fitran[1])) k_norm = nevt / func_incoh.Integral(fitran[0], fitran[1]) pdf_incoh.SetParameter(0, k_norm * func_incoh.GetParameter(0)) pdf_incoh.SetParameter(1, func_incoh.GetParameter(1)) #verify the normalization: print "Function integral after norm:", pdf_incoh.Integral(0., 10.) #create pdf for pT^2 and verify normalization pdf_pt2 = TF1("pdf_pt2", "[0]*exp(-[1]*x)", 0., 10.) pdf_pt2.SetParameter(0, pdf_incoh.GetParameter(0)) pdf_pt2.SetParameter(1, pdf_incoh.GetParameter(1)) print "PDF for pT^2 integral:", pdf_pt2.Integral(0., 10.) leg = ut.prepare_leg(0.67, 0.84, 0.14, 0.12, 0.03) ut.add_leg_mass(leg, mmin, mmax) leg.AddEntry(hPtIncoh, "Incoherent MC") leg.AddEntry(func_incoh, "2#it{A}*#it{p}_{T}exp(-#it{b}*#it{p}_{T}^{2})", "l") leg.Draw("same") desc = pdesc(hPtIncoh, 0.72, 0.84, 0.057) desc.set_text_size(0.03) desc.itemD("#chi^{2}/ndf", r1.Chi2() / r1.Ndf(), -1, rt.kRed) desc.prec = 2 desc.itemRes("#it{A}", r1, 0, rt.kRed) desc.itemD("#it{A}", pdf_incoh.GetParameter(0), -1, rt.kRed) desc.prec = 3 desc.itemRes("#it{b}", r1, 1, rt.kRed) desc.draw() l0 = ut.cut_line(fitran[0], 0.9, hPtIncoh) l1 = ut.cut_line(fitran[1], 0.9, hPtIncoh) l0.Draw() l1.Draw() uoleg = ut.make_uo_leg(hPtIncoh, 0.14, 0.9, 0.01, 0.1) uoleg.Draw("same") ut.invert_col(rt.gPad) can.SaveAs("01fig.pdf")
def plot_zdc_tpc_vtx_diff(): #difference between TPC and ZDC vertex dbin = 2.5 dmin = -90 dmax = 130 #dmin = -1500 #dmax = 2000 mmin = 1.5 mmax = 5. fitcol = rt.kBlue out = open("out.txt", "w") ut.log_results(out, "in " + infile) strlog = "dbin " + str(dbin) + " dmin " + str(dmin) + " dmax " + str(dmax) strlog += " mmin " + str(mmin) + " mmax " + str(mmax) + "\n" ut.log_results(out, strlog) can = ut.box_canvas() strsel = "jRecM>{0:.3f} && jRecM<{1:.3f}".format(mmin, mmax) hDVtx = ut.prepare_TH1D("hDVtx", dbin, dmin, dmax) tree.Draw("jZDCVtxZ-jVtxZ >> hDVtx", strsel) #fit function f1 = TF1("f1", "gaus+[3]", -50, 105) f1.SetNpx(1000) f1.SetLineColor(fitcol) f1.SetParameter(0, 77) f1.SetParameter(1, 25) f1.SetParameter(2, 13) f1.SetParameter(3, 5) f1.SetParName(0, "norm") f1.SetParName(1, "mean") f1.SetParName(2, "sigma") f1.SetParName(3, "ofs") #make the fit r1 = (hDVtx.Fit(f1, "RS")).Get() out.write(ut.log_tfit_result(r1)) #r1.Print() #fraction of events within +/- 4 sigma t1 = tree.CopyTree(strsel) nall = t1.GetEntries() lo = f1.GetParameter(1) - 4. * f1.GetParameter(2) hi = f1.GetParameter(1) + 4. * f1.GetParameter(2) nsel = t1.Draw( "", "(jZDCVtxZ-jVtxZ)>{0:.3f} && (jZDCVtxZ-jVtxZ)<{1:.3f}".format(lo, hi)) fraction = float(nsel) / float(nall) err = fraction * ma.sqrt(float(nall - nsel) / (nall * nsel)) ut.log_results(out, "Fraction of events within +/- 4 sigma") ut.log_results(out, "4sigma interval: " + str(lo) + " " + str(hi)) ut.log_results(out, "nall: " + str(nall)) ut.log_results(out, "nsel: " + str(nsel)) ut.log_results(out, "f_4s: {0:.3f} +/- {1:.3f}".format(fraction, err)) print("4sigma interval:", lo, hi) print("nall:", nall) print("nsel:", nsel) print("f_4s: {0:.3f} +/- {1:.3f}".format(fraction, err)) hDVtx.SetYTitle("Events / {0:.1f} cm".format(dbin)) hDVtx.SetXTitle("Vertex #it{z}_{ZDC} - #it{z}_{TPC} (cm)") hDVtx.SetTitleOffset(1.5, "Y") hDVtx.SetTitleOffset(1.3, "X") gPad.SetTopMargin(0.012) gPad.SetRightMargin(0.04) gPad.SetBottomMargin(0.1) gPad.SetLeftMargin(0.1) #fit parameters on the plot desc = pdesc(hDVtx, 0.16, 0.84, 0.057) desc.set_text_size(0.03) desc.itemD("#chi^{2}/ndf", r1.Chi2() / r1.Ndf(), -1, fitcol) desc.prec = 2 desc.itemRes("norm", r1, 0, fitcol) desc.itemRes("mean", r1, 1, fitcol) desc.itemRes("#it{#sigma}", r1, 2, fitcol) desc.itemRes("ofs", r1, 3, fitcol) #cut lines at mean +/- 4sigma #cut_lo = ut.cut_line(-20, 0.5, hDVtx) #cut_hi = ut.cut_line(70, 0.5, hDVtx) leg = ut.prepare_leg(0.14, 0.82, 0.28, 0.136, 0.025) leg.SetMargin(0.17) ut.add_leg_mass(leg, mmin, mmax) leg.AddEntry(hDVtx, "Data") leg.AddEntry(f1, "Gaussian + offset", "l") #leg.AddEntry(cut_lo, "4#it{#sigma} at -20 and 70 cm", "l") hDVtx.Draw() leg.Draw("same") desc.draw() #cut_lo.Draw("same") #cut_hi.Draw("same") #ut.invert_col(rt.gPad) can.SaveAs("01fig.pdf")