def sigma_xy(): #beam sigma in x and y gen = make_gen() beam = gen.beam_par gx = TGraph(beam.hz.GetNbinsX() + 1) gy = TGraph(beam.hz.GetNbinsX() + 1) for ibin in range(beam.hz.GetNbinsX() + 1): zpos = beam.hz.GetBinCenter(ibin) sx = beam.gx[ibin].GetParameter(2) sy = beam.gy[ibin].GetParameter(2) gx.SetPoint(ibin, zpos, sx) gy.SetPoint(ibin, zpos, sy) ut.set_graph(gx, rt.kBlue) ut.set_graph(gy, rt.kRed) can = ut.box_canvas() frame = gPad.DrawFrame(-10e3, 0, 15.5e3, 3.3) gx.Draw("lsame") gy.Draw("lsame") gPad.SetGrid() ut.invert_col(gPad) can.SaveAs("01fig.pdf")
def div_xy(): #beam divergence in x and y gen = make_gen() beam = gen.beam_par gx = TGraph(beam.hz.GetNbinsX() + 1) gy = TGraph(beam.hz.GetNbinsX() + 1) for ibin in range(beam.hz.GetNbinsX() + 1): zpos = beam.hz.GetBinCenter(ibin) dx = beam.divx[ibin].GetParameter(2) dy = beam.divy[ibin].GetParameter(2) gx.SetPoint(ibin, zpos, dx) gy.SetPoint(ibin, zpos, dy) ut.set_graph(gx, rt.kBlue) ut.set_graph(gy, rt.kRed) can = ut.box_canvas() frame = gPad.DrawFrame(-10e3, 0, 15.5e3, 600e-6) gx.Draw("lsame") gy.Draw("lsame") gPad.SetGrid() ut.invert_col(gPad) can.SaveAs("01fig.pdf")
def energy(): #acceptance in electron energy i1 = "/home/jaroslav/sim/lmon/data/taggers/tag1a/hits_tag.root" i2 = "/home/jaroslav/sim/lmon/data/taggers/tag1ax1/hits_tag.root" #tag = ["s1_IsHit", "Tagger 1", 2] tag = ["s2_IsHit", "Tagger 2", 11] in1 = TFile.Open(i1) t1 = in1.Get("event") in2 = TFile.Open(i2) t2 = in2.Get("event") #mrad xmin = tag[2] xmax = 19 amax = 0.9 a1 = rt.acc_Q2_kine(t1, "true_el_E", tag[0]) a1.prec = 0.05 a1.bmin = 0.1 #a1.nev = int(1e5) g1 = a1.get() a2 = rt.acc_Q2_kine(t2, "true_el_E", tag[0]) a2.prec = 0.05 a2.bmin = 0.1 #a2.nev = int(1e5) g2 = a2.get() can = ut.box_canvas() frame = gPad.DrawFrame(xmin, 0, xmax, amax) ut.put_yx_tit(frame, "Tagger acceptance", "Electron energy #it{E} (GeV)", 1.6, 1.3) frame.Draw() ut.set_margin_lbtr(gPad, 0.11, 0.1, 0.03, 0.02) ut.set_graph(g1, rt.kRed) g1.Draw("psame") ut.set_graph(g2, rt.kBlue) g2.Draw("psame") gPad.SetGrid() leg = ut.prepare_leg(0.15, 0.8, 0.24, 0.14, 0.035) # x, y, dx, dy, tsiz leg.AddEntry("", tag[1], "") leg.AddEntry(g1, "Quasi-real photoproduction", "lp") leg.AddEntry(g2, "Pythia 6", "lp") leg.Draw("same") #ut.invert_col(rt.gPad) can.SaveAs("01fig.pdf")
def eta(): #acceptance in electron polar angle as pi - theta in mrad i1 = "/home/jaroslav/sim/lmon/data/taggers/tag1a/hits_tag.root" i2 = "/home/jaroslav/sim/lmon/data/taggers/tag1ax1/hits_tag.root" #tag = ["s1_IsHit", "Tagger 1", 0.15] tag = ["s2_IsHit", "Tagger 2", 0.3] in1 = TFile.Open(i1) t1 = in1.Get("event") in2 = TFile.Open(i2) t2 = in2.Get("event") #eta xmin = -17 xmax = -3 a1 = rt.acc_Q2_kine(t1, "true_el_theta", tag[0]) a1.modif = 0 # eta from theta a1.prec = 0.01 a1.bmin = 0.1 #a1.nev = int(1e5) g1 = a1.get() a2 = rt.acc_Q2_kine(t2, "true_el_theta", tag[0]) a2.modif = 0 # eta from theta a2.prec = 0.01 a2.bmin = 0.1 #a2.nev = int(1e5) g2 = a2.get() can = ut.box_canvas() frame = gPad.DrawFrame(xmin, 0, xmax, tag[2]) ut.put_yx_tit(frame, "Tagger acceptance", "Electron pseudorapidity #it{#eta}", 1.6, 1.3) frame.Draw() ut.set_margin_lbtr(gPad, 0.11, 0.1, 0.03, 0.02) ut.set_graph(g1, rt.kRed) g1.Draw("psame") ut.set_graph(g2, rt.kBlue) g2.Draw("psame") gPad.SetGrid() leg = ut.prepare_leg(0.15, 0.8, 0.24, 0.14, 0.035) # x, y, dx, dy, tsiz leg.AddEntry("", tag[1], "") leg.AddEntry(g1, "Quasi-real photoproduction", "lp") leg.AddEntry(g2, "Pythia 6", "lp") leg.Draw("same") #ut.invert_col(rt.gPad) can.SaveAs("01fig.pdf")
def acc_mlt_theta_s12(): #acceptance in electron polar angle as -log10(pi - theta) in mrad for tagger 1 and tagger 2 #inp = "/home/jaroslav/sim/lmon/data/taggers/tag1a/hits_tag.root" #inp = "/home/jaroslav/sim/lmon/data/taggers/tag1ax1/hits_tag.root" inp = "/home/jaroslav/sim/lmon/data/taggers/tag2a/hits_tag_10files.root" infile = TFile.Open(inp) tree = infile.Get("event") #mrad tmin = 1.5 tmax = 7.5 #amax = 0.3 amax = 1 as1 = rt.acc_Q2_kine(tree, "true_el_theta", "s1_IsHit") as1.modif = 3 # -log10(pi - theta) as1.prec = 0.05 as1.bmin = 0.1 #as1.nev = int(1e5) gs1 = as1.get() as2 = rt.acc_Q2_kine(tree, "true_el_theta", "s2_IsHit") as2.modif = 3 # -log10(pi - theta) as2.prec = 0.05 as2.bmin = 0.1 #as2.nev = int(1e5) gs2 = as2.get() can = ut.box_canvas() frame = gPad.DrawFrame(tmin, 0, tmax, amax) ut.put_yx_tit(frame, "Acceptance", "Electron -log_{10}(#pi - #it{#theta}_{e})", 1.6, 1.3) frame.Draw() ut.set_margin_lbtr(gPad, 0.11, 0.1, 0.03, 0.02) ut.set_graph(gs1, rt.kBlue) gs1.Draw("psame") ut.set_graph(gs2, rt.kRed) gs2.Draw("psame") gPad.SetGrid() #leg = ut.prepare_leg(0.15, 0.78, 0.24, 0.16, 0.035) # x, y, dx, dy, tsiz #leg.AddEntry(None, "Tagger 1", "") #leg.AddEntry(glQ2Py, "Pythia6", "l") #leg.AddEntry(glQ2Qr, "QR", "l") #leg.Draw("same") ut.invert_col(rt.gPad) can.SaveAs("01fig.pdf")
def acc_gap_both(): #acceptance in gap between taggers and ecal lqmin = -2.9 lqmax = -0.2 #lqmin = -8 #lqmax = 3 acc_py = acc_gap("../data/ir6/lmon_pythia_5M_beff2_5Mevt_v2.root", lqmin, lqmax) #acc_py = acc_gap("../data/ir6/lmon_pythia_5M_beff2_NoSol_5Mevt.root", lqmin, lqmax) #acc_py_close = acc_gap("../data/ir6_close/lmon_pythia_5M_beff2_close_5Mevt.root", -2.4, 0) #acc_py_close = acc_gap("../data/ir6/lmon_pythia_5M_beff2_1p5T_5Mevt.root", -2.9, -0.2) acc_py_close = acc_gap("../data/ir6/lmon_pythia_5M_beff2_1p5T_5Mevt_v2.root", lqmin, lqmax) #acc_py_close = acc_gap("../data/ir6/lmon_pythia_5M_beff2_5Mevt_v2.root", lqmin, lqmax) #acc_py_close = acc_gap("../data/ir6/lmon_pythia_5M_beff2_NoSol_5Mevt_v2.root", lqmin, lqmax) #acc_py_3 = acc_gap("../data/ir6/lmon_pythia_5M_beff2_NoSol_5Mevt.root", lqmin, lqmax) #make the plot can = ut.box_canvas() ut.set_graph(acc_py, rt.kBlue) ut.set_graph(acc_py_close, rt.kRed) #ut.set_graph(acc_py_3, rt.kGreen) #frame = gPad.DrawFrame(-3, 0, 0.1, 1.1) frame = gPad.DrawFrame(-3, 0.03, 0.1, 1.4) # for log scale #frame = gPad.DrawFrame(-10, 0, 4, 1.1) frame.Draw() #ytit = "Acceptance / {0:.1f} %".format(prec*100) ut.put_yx_tit(frame, "Acceptance", "log_{10}(#it{Q}^{2})", 1.6, 1.2) frame.Draw() ut.set_margin_lbtr(gPad, 0.11, 0.1, 0.03, 0.02) gPad.SetGrid() gPad.SetLogy() frame.GetYaxis().SetMoreLogLabels() acc_py.Draw("psame") acc_py_close.Draw("psame") #acc_py_3.Draw("psame") leg = ut.prepare_leg(0.2, 0.84, 0.2, 0.1, 0.035) #leg.AddEntry(acc_qr, "Quasi-real photoproduction", "lp") #leg.AddEntry(acc_py, "Pythia6", "lp") leg.AddEntry(acc_py, "Default geometry", "lp") #leg.AddEntry(acc_py_close, "Magnets in central det", "lp") leg.AddEntry(acc_py_close, "1.5T solenoid", "lp") #leg.AddEntry(acc_py_3, "No solenoid", "lp") leg.Draw("same") #ut.invert_col(rt.gPad) can.SaveAs("01fig.pdf")
def acc_eta_s2(): #Tagger 2 pseudorapidity emin = -17 emax = -3 amax = 0.3 acc_qr = rt.acc_Q2_kine(tree_qr, "true_el_theta", "lowQ2s2_IsHit") acc_qr.modif = 0 # eta from theta acc_qr.prec = 0.01 acc_qr.bmin = 0.1 #acc_qr.nev = int(1e5) gEtaQr = acc_qr.get() #gprint(gPtQr) acc_py = rt.acc_Q2_kine(tree_py, "true_el_theta", "lowQ2s2_IsHit") acc_py.modif = 0 acc_py.prec = 0.01 acc_py.bmin = 0.1 #acc_py.nev = int(1e5) gEtaPy = acc_py.get() can = ut.box_canvas() frame = gPad.DrawFrame(emin, 0, emax, amax) #ytit = "Acceptance / {0:.1f} %".format(acc_qr.prec*100) ut.put_yx_tit(frame, "Acceptance", "Electron pseudorapidity #eta", 1.6, 1.3) frame.Draw() ut.set_margin_lbtr(gPad, 0.11, 0.1, 0.03, 0.02) ut.set_graph(gEtaQr, rt.kRed) gEtaQr.Draw("psame") ut.set_graph(gEtaPy, rt.kBlue) gEtaPy.Draw("psame") gPad.SetGrid() leg = ut.prepare_leg(0.15, 0.78, 0.24, 0.16, 0.035) # x, y, dx, dy, tsiz leg.AddEntry(None, "Tagger 2", "") leg.AddEntry(gEtaPy, "Pythia6", "l") leg.AddEntry(gEtaQr, "QR", "l") leg.Draw("same") #ut.invert_col(rt.gPad) can.SaveAs("01fig.pdf")
def acc_eta_s12(): #acceptance in electron pseudorapidity for tagger 1 and tagger 2 inp = "/home/jaroslav/sim/lmon/data/taggers/tag1a/hits_tag.root" infile = TFile.Open(inp) tree = infile.Get("event") emin = -17 emax = -3 amax = 0.3 as1 = rt.acc_Q2_kine(tree, "true_el_theta", "s1_IsHit") as1.modif = 0 # eta from theta as1.prec = 0.01 as1.bmin = 0.1 #as1.nev = int(1e5) gs1 = as1.get() as2 = rt.acc_Q2_kine(tree, "true_el_theta", "s2_IsHit") as2.modif = 0 # eta from theta as2.prec = 0.01 as2.bmin = 0.1 #as2.nev = int(1e5) gs2 = as2.get() can = ut.box_canvas() frame = gPad.DrawFrame(emin, 0, emax, amax) ut.put_yx_tit(frame, "Acceptance", "Electron pseudorapidity #eta", 1.6, 1.3) frame.Draw() ut.set_margin_lbtr(gPad, 0.11, 0.1, 0.03, 0.02) ut.set_graph(gs1, rt.kBlue) gs1.Draw("psame") ut.set_graph(gs2, rt.kRed) gs2.Draw("psame") gPad.SetGrid() #leg = ut.prepare_leg(0.15, 0.78, 0.24, 0.16, 0.035) # x, y, dx, dy, tsiz #leg.AddEntry(None, "Tagger 1", "") #leg.AddEntry(glQ2Py, "Pythia6", "l") #leg.AddEntry(glQ2Qr, "QR", "l") #leg.Draw("same") ut.invert_col(rt.gPad) can.SaveAs("01fig.pdf")
def acc_theta_s12(): #acceptance in electron polar angle for tagger 1 and tagger 2 inp = "/home/jaroslav/sim/lmon/data/taggers/tag1a/hits_tag.root" #inp = "/home/jaroslav/sim/lmon/data/taggers/tag1ax1/hits_tag.root" infile = TFile.Open(inp) tree = infile.Get("event") tmin = TMath.Pi() - 1.1e-2 tmax = TMath.Pi() + 1e-3 #amax = 0.25 amax = 0.4 as1 = rt.acc_Q2_kine(tree, "true_el_theta", "s1_IsHit") as1.prec = 0.1 as1.bmin = 2e-4 #as1.nev = int(1e5) gs1 = as1.get() as2 = rt.acc_Q2_kine(tree, "true_el_theta", "s2_IsHit") as2.prec = 0.1 as2.bmin = 2e-4 #as2.nev = int(1e5) gs2 = as2.get() can = ut.box_canvas() frame = gPad.DrawFrame(tmin, 0, tmax, amax) ut.put_yx_tit(frame, "Tagger acceptance", "Electron polar angle #it{#theta} (rad)", 1.6, 1.3) frame.Draw() ut.set_margin_lbtr(gPad, 0.11, 0.1, 0.03, 0.02) ut.set_graph(gs1, rt.kRed) gs1.Draw("psame") ut.set_graph(gs2, rt.kBlue) gs2.Draw("psame") gPad.SetGrid() leg = ut.prepare_leg(0.15, 0.82, 0.24, 0.12, 0.035) # x, y, dx, dy, tsiz leg.AddEntry(gs1, "Tagger 1", "lp") leg.AddEntry(gs2, "Tagger 2", "lp") leg.Draw("same") ut.invert_col(rt.gPad) can.SaveAs("01fig.pdf")
def conv_theta(): #conversion probablity as a function of polar angle theta tbin = 2e-4 tmin = 0 tmax = 2.5e-3 prec = 0.01 delt = 1e-6 gROOT.LoadMacro("get_ew_conv.C") #hEffV1 = rt.get_ew_conv(tree_v1, "phot_theta", "ew_conv", prec, delt, -1., TMath.Pi()) hEffV2 = rt.get_ew_conv(tree_v2, "phot_theta", "ew_conv", prec, delt, -1., TMath.Pi()) #hEffV1 = get_eff(tree_v1, "TMath::Pi()-phot_theta", "ew_conv", tbin, tmin, tmax) #hEffV2 = get_eff(tree_v2, "TMath::Pi()-phot_theta", "ew_conv", tbin, tmin, tmax) #ut.set_graph(hEffV1, rt.kBlue) #ut.set_graph(hEffV2, rt.kRed, rt.kFullTriangleUp) #hEffV2.SetMarkerSize(1.5) ut.set_graph(hEffV2) #plot the probability can = ut.box_canvas() frame = gPad.DrawFrame(tmin, 0.065, tmax, 0.095) frame.SetXTitle("Generated #vartheta (rad)") frame.SetYTitle("Conversion probability") frame.SetTitleOffset(2.1, "Y") frame.SetTitleOffset(1.5, "X") ut.set_margin_lbtr(gPad, 0.14, 0.11, 0.02, 0.01) frame.Draw() #hEffV1.Draw("psame") hEffV2.Draw("psame") leg = ut.prepare_leg(0.2, 0.84, 0.2, 0.1, 0.035) #leg.AddEntry(hEffV1, "Tilted plane", "lp") leg.AddEntry(hEffV2, "Half-cylinder", "lp") #leg.Draw("same") gPad.SetLogx() #ut.invert_col(rt.gPad) can.SaveAs("01fig.pdf")
def acc_en_s1(): #Tagger 1 energy emin = 0 emax = 15 amax = 1 acc_qr = rt.acc_Q2_kine(tree_qr, "true_el_E", "lowQ2s1_IsHit") acc_qr.prec = 0.05 acc_qr.bmin = 0.1 #acc_qr.nev = int(1e5) gEnQr = acc_qr.get() #gprint(gPtQr) acc_py = rt.acc_Q2_kine(tree_py, "true_el_E", "lowQ2s1_IsHit") acc_py.prec = 0.05 acc_py.bmin = 0.1 #acc_py.nev = int(1e5) gEnPy = acc_py.get() can = ut.box_canvas() frame = gPad.DrawFrame(emin, 0, emax, amax) #ytit = "Acceptance / {0:.1f} %".format(acc_qr.prec*100) ut.put_yx_tit(frame, "Acceptance", "Electron energy #it{E} (GeV)", 1.6, 1.3) frame.Draw() ut.set_margin_lbtr(gPad, 0.11, 0.1, 0.03, 0.02) ut.set_graph(gEnQr, rt.kRed) gEnQr.Draw("psame") ut.set_graph(gEnPy, rt.kBlue) gEnPy.Draw("psame") gPad.SetGrid() leg = ut.prepare_leg(0.15, 0.78, 0.24, 0.16, 0.035) # x, y, dx, dy, tsiz leg.AddEntry(None, "Tagger 1", "") leg.AddEntry(gEnPy, "Pythia6", "l") leg.AddEntry(gEnQr, "QR", "l") leg.Draw("same") ut.invert_col(rt.gPad) can.SaveAs("01fig.pdf")
def acc_phi_s2(): #Tagger 2 phi pmin = -TMath.Pi() - 0.3 pmax = TMath.Pi() + 0.3 amax = 0.3 acc_qr = rt.acc_Q2_kine(tree_qr, "true_el_phi", "lowQ2s2_IsHit") acc_qr.prec = 0.01 #acc_qr.bmin = 2e-4 #acc_qr.nev = int(1e5) gPhiQr = acc_qr.get() #gprint(gPtQr) acc_py = rt.acc_Q2_kine(tree_py, "true_el_phi", "lowQ2s2_IsHit") acc_py.prec = 0.01 #acc_py.bmin = 2e-4 #acc_py.nev = int(1e4) gPhiPy = acc_py.get() can = ut.box_canvas() frame = gPad.DrawFrame(pmin, 0, pmax, amax) #ytit = "Acceptance / {0:.1f} %".format(acc_qr.prec*100) ut.put_yx_tit(frame, "Acceptance", "Electron azimuthal angle #phi (rad)", 1.6, 1.3) frame.Draw() ut.set_margin_lbtr(gPad, 0.11, 0.1, 0.03, 0.02) ut.set_graph(gPhiQr, rt.kRed) gPhiQr.Draw("psame") ut.set_graph(gPhiPy, rt.kBlue) gPhiPy.Draw("psame") gPad.SetGrid() leg = ut.prepare_leg(0.72, 0.78, 0.24, 0.16, 0.035) # x, y, dx, dy, tsiz leg.AddEntry(None, "Tagger 2", "") leg.AddEntry(gPhiPy, "Pythia6", "l") leg.AddEntry(gPhiQr, "QR", "l") leg.Draw("same") #ut.invert_col(rt.gPad) can.SaveAs("01fig.pdf")
def acc_both(): #acceptance for quasi-real photoproduction and for Pythia #selection mode, 1 - s1, 2 - s2, 3 - s1 or s2, 4 - ecal, 5 - any #acc_qr = acc_quasi_real(False) acc_py_s1 = acc_pythia(False, 1) acc_py_s2 = acc_pythia(False, 2) #acc_py_s12 = acc_pythia(False, 3) acc_py_ecal = acc_pythia(False, 4) acc_py_all = acc_pythia(False, 5) #acc_py = acc_gap("../data/ir6_close/lmon_pythia_5M_beff2_close_5Mevt.root") #make the plot can = ut.box_canvas() #ut.set_graph(acc_qr, rt.kRed) #ut.set_graph(acc_py, rt.kBlue, rt.kFullTriangleUp) ut.set_graph(acc_py_s1, rt.kYellow+1) ut.set_graph(acc_py_s2, rt.kGreen+1) #ut.set_graph(acc_py_s12, rt.kBlack) ut.set_graph(acc_py_ecal, rt.kBlue) ut.set_graph(acc_py_all, rt.kBlack) frame = gPad.DrawFrame(-10, 0, 5, 1.1) # 0.3 frame.Draw() #ytit = "Acceptance / {0:.1f} %".format(prec*100) ut.put_yx_tit(frame, "Acceptance", "log_{10}(#it{Q}^{2})", 1.6, 1.2) frame.Draw() ut.set_margin_lbtr(gPad, 0.11, 0.1, 0.03, 0.02) gPad.SetGrid() #acc_py.Draw("psame") #acc_qr.Draw("psame") acc_py_s1.Draw("psame") acc_py_s2.Draw("psame") #acc_py_s12.Draw("psame") acc_py_all.Draw("psame") acc_py_ecal.Draw("psame") #leg = ut.prepare_leg(0.2, 0.82, 0.2, 0.12, 0.035) leg = ut.prepare_leg(0.15, 0.78, 0.2, 0.16, 0.035) #leg.AddEntry(acc_qr, "Quasi-real photoproduction", "lp") #leg.AddEntry(acc_py, "Pythia6", "lp") leg.AddEntry(acc_py_s1, "Tagger 1", "lp") leg.AddEntry(acc_py_s2, "Tagger 2", "lp") #leg.AddEntry(acc_py_s12, "Tagger 1 #bf{or} Tagger 2", "lp") leg.AddEntry(acc_py_ecal, "ecal", "lp") leg.AddEntry(acc_py_all, "Tagger 1 #bf{or} Tagger 2 #bf{or} ecal", "lp") leg.Draw("same") #ut.invert_col(rt.gPad) can.SaveAs("01fig.pdf")
def acc_lQ2_s2(): #Tagger 2 log_10(Q^2) lQ2min = -10 lQ2max = 0 amax = 0.3 acc_qr = rt.acc_Q2_kine(tree_qr, "true_Q2", "lowQ2s2_IsHit") acc_qr.modif = 1 # log_10(Q^2) from Q2 acc_qr.prec = 0.05 acc_qr.bmin = 0.1 #acc_qr.nev = int(1e5) glQ2Qr = acc_qr.get() acc_py = rt.acc_Q2_kine(tree_py, "true_Q2", "lowQ2s2_IsHit") acc_py.modif = 1 acc_py.prec = 0.05 acc_py.bmin = 0.1 #acc_py.nev = int(1e5) glQ2Py = acc_py.get() can = ut.box_canvas() frame = gPad.DrawFrame(lQ2min, 0, lQ2max, amax) ut.put_yx_tit(frame, "Acceptance", "Virtuality log_{10}(#it{Q}^{2}) (GeV)", 1.6, 1.3) frame.Draw() ut.set_margin_lbtr(gPad, 0.11, 0.1, 0.03, 0.02) ut.set_graph(glQ2Qr, rt.kRed) glQ2Qr.Draw("psame") ut.set_graph(glQ2Py, rt.kBlue) glQ2Py.Draw("psame") gPad.SetGrid() leg = ut.prepare_leg(0.15, 0.78, 0.24, 0.16, 0.035) # x, y, dx, dy, tsiz leg.AddEntry(None, "Tagger 2", "") leg.AddEntry(glQ2Py, "Pythia6", "l") leg.AddEntry(glQ2Qr, "QR", "l") leg.Draw("same") ut.invert_col(rt.gPad) can.SaveAs("01fig.pdf")
def acc_theta_s1(): tmin = TMath.Pi() - 2.1e-2 tmax = TMath.Pi() + 0.5e-2 amax = 0.08 acc_qr = rt.acc_Q2_kine(tree_qr, "true_el_theta", "lowQ2s1_IsHit") acc_qr.prec = 0.05 acc_qr.bmin = 2e-4 #acc_qr.nev = int(1e5) gThetaQr = acc_qr.get() #gprint(gPtQr) acc_py = rt.acc_Q2_kine(tree_py, "true_el_theta", "lowQ2s1_IsHit") acc_py.prec = 0.05 acc_py.bmin = 2e-4 #acc_py.nev = int(1e4) gThetaPy = acc_py.get() can = ut.box_canvas() frame = gPad.DrawFrame(tmin, 0, tmax, amax) #ytit = "Acceptance / {0:.1f} %".format(acc_qr.prec*100) ut.put_yx_tit(frame, "Acceptance", "Electron polar angle #theta (rad)", 1.6, 1.3) frame.Draw() ut.set_margin_lbtr(gPad, 0.11, 0.1, 0.03, 0.02) ut.set_graph(gThetaQr, rt.kRed) gThetaQr.Draw("psame") ut.set_graph(gThetaPy, rt.kBlue) gThetaPy.Draw("psame") gPad.SetGrid() leg = ut.prepare_leg(0.15, 0.78, 0.24, 0.16, 0.035) # x, y, dx, dy, tsiz leg.AddEntry(None, "Tagger 1", "") leg.AddEntry(gThetaPy, "Pythia6", "l") leg.AddEntry(gThetaQr, "QR", "l") leg.Draw("same") ut.invert_col(rt.gPad) can.SaveAs("01fig.pdf")
def conv_phi(): #conversion probablity as a function of azimuthal angle phi pbin = 0.4 pmin = -TMath.Pi() - 0.3 pmax = TMath.Pi() + 0.3 prec = 0.01 delt = 1e-6 gROOT.LoadMacro("get_ew_conv.C") #hEffV1 = rt.get_ew_conv(tree_v1, "phot_phi", "ew_conv", prec, delt) hEffV2 = rt.get_ew_conv(tree_v2, "phot_phi", "ew_conv", prec, delt) #hEffV1 = get_eff(tree_v1, "phot_phi", "ew_conv", pbin, pmin, pmax) #hEffV2 = get_eff(tree_v2, "phot_phi", "ew_conv", pbin, pmin, pmax) #ut.set_graph(hEffV1, rt.kBlue) #ut.set_graph(hEffV2, rt.kRed, rt.kFullTriangleUp) #hEffV2.SetMarkerSize(1.5) ut.set_graph(hEffV2) #plot the probability can = ut.box_canvas() #frame = gPad.DrawFrame(pmin, 0.075, pmax, 0.087) frame = gPad.DrawFrame(pmin, 0.065, pmax, 0.095) frame.SetXTitle("Generated #phi (rad)") frame.SetYTitle("Conversion probability") frame.SetTitleOffset(2.1, "Y") frame.SetTitleOffset(1.2, "X") ut.set_margin_lbtr(gPad, 0.14, 0.09, 0.02, 0.01) frame.Draw() #hEffV1.Draw("psame") hEffV2.Draw("psame") leg = ut.prepare_leg(0.2, 0.84, 0.2, 0.1, 0.035) #leg.AddEntry(hEffV1, "Tilted plane", "lp") leg.AddEntry(hEffV2, "Half-cylinder", "lp") #leg.Draw("same") #ut.invert_col(rt.gPad) can.SaveAs("01fig.pdf")
def acc_pT_s2(): ptmin = 0 ptmax = 0.25 amax = 0.25 acc_qr = rt.acc_Q2_kine(tree_qr, "true_el_pT", "lowQ2s2_IsHit") acc_qr.prec = 0.05 acc_qr.bmin = 0.003 #acc_qr.nev = int(1e5) gPtQr = acc_qr.get() acc_py = rt.acc_Q2_kine(tree_py, "true_el_pT", "lowQ2s2_IsHit") acc_py.prec = 0.05 acc_py.bmin = 0.003 #acc_py.nev = int(1e4) gPtPy = acc_py.get() can = ut.box_canvas() frame = gPad.DrawFrame(ptmin, 0, ptmax, amax) #ytit = "Acceptance / {0:.1f} %".format(acc_qr.prec*100) ut.put_yx_tit(frame, "Acceptance", "Electron #it{p}_{T} (GeV)", 1.6, 1.3) frame.Draw() ut.set_margin_lbtr(gPad, 0.11, 0.1, 0.03, 0.05) ut.set_graph(gPtQr, rt.kRed) gPtQr.Draw("psame") ut.set_graph(gPtPy, rt.kBlue) gPtPy.Draw("psame") gPad.SetGrid() leg = ut.prepare_leg(0.72, 0.78, 0.24, 0.16, 0.035) # x, y, dx, dy, tsiz leg.AddEntry(None, "Tagger 2", "") leg.AddEntry(gPtPy, "Pythia6", "l") leg.AddEntry(gPtQr, "QR", "l") leg.Draw("same") #ut.invert_col(rt.gPad) can.SaveAs("01fig.pdf")
def conv_prob_en(): #conversion probability as a function of photon energy #plot range emin = 0 emax = 19 pmin = 0.05 pmax = 0.1 #pmax = 1 inp = TFile.Open("ew.root") tree = inp.Get("conv_tree") prec = 0.01 calc = rt.conv_calc(prec, 1e-6) calc.set_tree(tree) #calc.nev = 300000 conv = calc.get_conv() calc.release_tree() #calc.conv_in_all = True #calc.clean_in_sel = True #clean = calc.get_conv() can = ut.box_canvas() frame = gPad.DrawFrame(emin, pmin, emax, pmax) ut.put_yx_tit(frame, "Conversion probability", "#it{E}_{#gamma} (GeV)", 1.8) ut.set_margin_lbtr(gPad, 0.12, 0.09, 0.02, 0.01) frame.Draw() gPad.SetGrid() ut.set_graph(conv, rt.kBlue) conv.Draw("psame") #ut.set_graph(clean, rt.kRed) #clean.Draw("psame") ut.invert_col(rt.gPad) can.SaveAs("01fig.pdf")
def acc_qr_py(): #acceptance for quasi-real photoproduction and for Pythia #selection mode, 1 - s1, 2 - s2, 3 - s1 or s2, 4 - ecal, 5 - any acc_qr = acc_quasi_real(False, 3) acc_py = acc_pythia(False, 3) #make the plot can = ut.box_canvas() ut.set_graph(acc_qr, rt.kRed) ut.set_graph(acc_py, rt.kBlue)#, rt.kFullTriangleUp) #frame = gPad.DrawFrame(-10, 0, 5, 0.3) # 0.3 1.1 0 frame = gPad.DrawFrame(-10, 0, 0, 0.3) # 0.3 1.1 0 frame.Draw() ut.put_yx_tit(frame, "Acceptance", "log_{10}(#it{Q}^{2})", 1.6, 1.2) frame.Draw() ut.set_margin_lbtr(gPad, 0.11, 0.1, 0.03, 0.02) gPad.SetGrid() acc_qr.Draw("psame") acc_py.Draw("psame") leg = ut.prepare_leg(0.18, 0.82, 0.2, 0.12, 0.035) leg.AddEntry(acc_qr, "Quasi-real photoproduction", "lp") leg.AddEntry(acc_py, "Pythia6", "lp") leg.Draw("same") ut.invert_col(rt.gPad) can.SaveAs("01fig.pdf")
def acc_pythia(do_plot=True, sel_mode=5): #selection mode, 1 - s1, 2 - s2, 3 - s1 or s2, 4 - ecal, 5 - any #Pythia input #inp_py = "../data/lmon_pythia_5M_1Mevt.root" #inp_py = "../data/lmon_pythia_5M_beff2_1Mevt.root" #inp_py = "../data/lmon_pythia_5M_beff2_5Mevt.root" #inp_py = "../data/ir6/lmon_pythia_5M_beff2_5Mevt.root" #inp_py = "../data/ir6_close/lmon_pythia_5M_beff2_close_5Mevt.root" inp_py = "../data/lmon_py_18x275_Q2all_beff2_5Mevt.root" #range in the log_10(Q^2) lqmin = -10 lqmax = 5 #bins calculation prec = 0.01 # 0.02 0.06 delt = 1e-6 #number of events, 0 for all #nev = 200000 nev = 0 #tree from the input tree_py, infile_py = get_tree(inp_py) #calculate the acceptance acalc = rt.acc_Q2_calc(tree_py, 18, prec, delt, nev) acalc.sel_mode = sel_mode #acalc.lQ2min = -2.4 #acalc.lQ2max = -0.5 acc_py = acalc.get_acc() acalc.release_tree() #return #electron beam energy and B2eR acceptance #acc_py = rt.get_Q2_acc(tree_py, 18, 0.01021, prec, delt, nev) if do_plot is False: return acc_py #make the plot can = ut.box_canvas() #ut.set_graph(acc_py, rt.kRed) # , rt.kFullTriangleUp ut.set_graph(acc_py, rt.kBlack) frame = gPad.DrawFrame(lqmin, 0, lqmax, 1.1) ytit = "Acceptance / {0:.1f} %".format(prec*100) ut.put_yx_tit(frame, ytit, "log_{10}(#it{Q}^{2})", 1.6, 1.2) frame.Draw() ut.set_margin_lbtr(gPad, 0.11, 0.1, 0.03, 0.02) gPad.SetGrid() acc_py.Draw("psame") leg = ut.prepare_leg(0.2, 0.84, 0.2, 0.1, 0.035) leg.AddEntry(acc_py, "Acceptance for Pythia6", "lp") leg.Draw("same") ut.invert_col(rt.gPad) can.SaveAs("01fig.pdf")
def acc_lQ2_s12(): #acceptance in log_10(Q^2) for tagger 1 and tagger 2 inp = "/home/jaroslav/sim/lmon/data/taggers/tag1a/hits_tag.root" #inp = "/home/jaroslav/sim/lmon/data/taggers/tag1ax1/hits_tag.root" infile = TFile.Open(inp) tree = infile.Get("event") lQ2min = -9 lQ2max = 0 #amax = 0.21 amax = 0.4 as1 = rt.acc_Q2_kine(tree, "true_Q2", "s1_IsHit") as1.modif = 1 # log_10(Q^2) from Q2 as1.prec = 0.05 as1.bmin = 0.1 as1.nev = int(1e5) gs1 = as1.get() as2 = rt.acc_Q2_kine(tree, "true_Q2", "s2_IsHit") as2.modif = 1 # log_10(Q^2) from Q2 as2.prec = 0.05 as2.bmin = 0.1 as2.nev = int(1e5) gs2 = as2.get() can = ut.box_canvas() frame = gPad.DrawFrame(lQ2min, 0, lQ2max, amax) ut.put_yx_tit(frame, "Tagger acceptance", "Virtuality #it{Q}^{2} (GeV^{2})", 1.6, 1.5) frame.Draw() ut.set_margin_lbtr(gPad, 0.11, 0.11, 0.03, 0.02) #labels in power of 10 ax = frame.GetXaxis() labels = range(lQ2min, lQ2max+1, 1) for i in range(len(labels)): if labels[i] == 0: ax.ChangeLabel(i+1, -1, -1, -1, -1, -1, "1") continue ax.ChangeLabel(i+1, -1, -1, -1, -1, -1, "10^{"+str(labels[i])+"}") ax.SetLabelOffset(0.015) ut.set_graph(gs1, rt.kRed) gs1.Draw("psame") ut.set_graph(gs2, rt.kBlue) gs2.Draw("psame") gPad.SetGrid() leg = ut.prepare_leg(0.15, 0.82, 0.24, 0.12, 0.035) # x, y, dx, dy, tsiz leg.AddEntry(gs1, "Tagger 1", "lp") leg.AddEntry(gs2, "Tagger 2", "lp") leg.Draw("same") ut.invert_col(rt.gPad) can.SaveAs("01fig.pdf")
def acc_spec(): #infile = "hits_spect.root" infile = "/home/jaroslav/sim/lmon/data/luminosity/lm2ax2/hits_spect.root" #infile = "/home/jaroslav/sim/lmon/data/luminosity/lm3a/hits_spect.root" #infile = "/home/jaroslav/sim/lmon/data/luminosity/lm1bx1/hits_spect.root" #infile = "/home/jaroslav/sim/lmon/data/luminosity/lm1cx1/hits_spect.root" emin = 0 emax = 19 amax = 0.05 inp_lmon = TFile.Open(infile) tree_lmon = inp_lmon.Get("event") acc_lmon = rt.acc_Q2_kine(tree_lmon, "gen_en", "is_spect") acc_lmon.prec = 0.04 #acc_lmon.prec = 0.1 acc_lmon.delt = 1e-2 acc_lmon.bmin = 0.1 #acc_lmon.nev = int(1e5) gLmon = acc_lmon.get() can = ut.box_canvas() frame = gPad.DrawFrame(emin, 0, emax, amax) ut.put_yx_tit(frame, "Spectrometer acceptance", "Photon energy #it{E}_{#gamma} (GeV)", 1.9, 1.3) frame.Draw() ut.set_margin_lbtr(gPad, 0.14, 0.1, 0.03, 0.02) ut.set_graph(gLmon, rt.kBlue) gLmon.Draw("psame") #integrate the acceptance to scale the parametrization en = c_double(0) av = c_double(0) iacc = 0. for i in range(gLmon.GetN()): gLmon.GetPoint(i, en, av) iacc += av.value * (gLmon.GetErrorXhigh(i) + gLmon.GetErrorXlow(i)) print("iacc:", iacc) geo = rt.GeoParser("../../config/pro1/geom_all.in") length = geo.GetD("lumi_dipole", "zpos") - geo.GetD( "vac_lumi_spec_mid", "z0") print("Length (mm):", length) field = 0.37 # T #field = 0.2 # T #field = 0.1 # T acc = spec_acc(length, field, geo.GetD("vac_lumi_spec_mid", "dY0"), geo.GetD("vac_lumi_mag_spec", "dY1")) acc.scale = iacc / acc.acc_func.Integral(1, 21) acc.acc_func.Draw("same") gPad.SetGrid() leg = ut.prepare_leg(0.15, 0.82, 0.24, 0.12, 0.035) # x, y, dx, dy, tsiz leg.AddEntry(gLmon, "Geant4", "lp") leg.AddEntry(acc.acc_func, "Geometry model", "l") leg.Draw("same") #ut.invert_col(rt.gPad) can.SaveAs("01fig.pdf")
def compare_clean(): #comparison in fraction of clean conversions for different inputs #plot range emin = 0 emax = 19 pmin = 0.1 pmax = 0.9 prec = 0.01 calc = rt.conv_calc(prec, 1e-6) calc.conv_in_all = True calc.clean_in_sel = True #calc.nev = 300000 inp = TFile.Open("conv_b.root") tree = inp.Get("conv_tree") calc.set_tree(tree) conv_b = calc.get_conv() calc.release_tree() inp = TFile.Open("conv_c.root") tree = inp.Get("conv_tree") calc.set_tree(tree) conv_c = calc.get_conv() calc.release_tree() inp = TFile.Open("conv_d.root") tree = inp.Get("conv_tree") calc.set_tree(tree) conv_d = calc.get_conv() calc.release_tree() inp = TFile.Open("conv_e.root") tree = inp.Get("conv_tree") calc.set_tree(tree) conv_e = calc.get_conv() calc.release_tree() can = ut.box_canvas() frame = gPad.DrawFrame(emin, pmin, emax, pmax) ut.put_yx_tit(frame, "Fraction of clean conversions", "#it{E}_{#gamma} (GeV)") ut.set_margin_lbtr(gPad, 0.11, 0.09, 0.02, 0.01) frame.Draw() gPad.SetGrid() ut.set_graph(conv_b, rt.kRed) conv_b.Draw("psame") ut.set_graph(conv_c, rt.kBlue) conv_c.Draw("psame") ut.set_graph(conv_d, rt.kYellow + 1) conv_d.Draw("psame") ut.set_graph(conv_e, rt.kGreen + 1) conv_e.Draw("psame") leg = ut.prepare_leg(0.45, 0.7, 0.15, 0.25) leg.AddEntry("", "Exit window thickness:", "") leg.AddEntry(conv_b, "2.6 mm", "lp") leg.AddEntry(conv_c, "2 mm", "lp") leg.AddEntry(conv_d, "1.5 mm", "lp") leg.AddEntry(conv_e, "1 mm", "lp") leg.Draw("same") #ut.invert_col(rt.gPad) can.SaveAs("01fig.pdf")
def lQ2(): #acceptance in log_10(Q^2) i1 = "/home/jaroslav/sim/lmon/data/taggers/tag1a/hits_tag.root" i2 = "/home/jaroslav/sim/lmon/data/taggers/tag1ax1/hits_tag.root" #tag = ["s1_IsHit", "Tagger 1", 0.15] tag = ["s2_IsHit", "Tagger 2", 0.25] in1 = TFile.Open(i1) t1 = in1.Get("event") in2 = TFile.Open(i2) t2 = in2.Get("event") lQ2min = -9 lQ2max = 0 #amax = 0.21 #amax = 0.25 a1 = rt.acc_Q2_kine(t1, "true_Q2", tag[0]) a1.modif = 1 # log_10(Q^2) from Q2 a1.prec = 0.05 a1.bmin = 0.1 #a1.nev = int(1e5) g1 = a1.get() a2 = rt.acc_Q2_kine(t2, "true_Q2", tag[0]) a2.modif = 1 # log_10(Q^2) from Q2 a2.prec = 0.05 a2.bmin = 0.1 #a2.nev = int(1e5) g2 = a2.get() can = ut.box_canvas() frame = gPad.DrawFrame(lQ2min, 0, lQ2max, tag[2]) ut.put_yx_tit(frame, "Tagger acceptance", "Virtuality #it{Q}^{2} (GeV^{2})", 1.6, 1.5) frame.Draw() ut.set_margin_lbtr(gPad, 0.11, 0.11, 0.03, 0.02) #labels in power of 10 ax = frame.GetXaxis() labels = range(lQ2min, lQ2max + 1, 1) for i in range(len(labels)): if labels[i] == 0: ax.ChangeLabel(i + 1, -1, -1, -1, -1, -1, "1") continue ax.ChangeLabel(i + 1, -1, -1, -1, -1, -1, "10^{" + str(labels[i]) + "}") ax.SetLabelOffset(0.015) ut.set_graph(g1, rt.kRed) g1.Draw("psame") ut.set_graph(g2, rt.kBlue) g2.Draw("psame") gPad.SetGrid() leg = ut.prepare_leg(0.15, 0.8, 0.24, 0.14, 0.035) # x, y, dx, dy, tsiz leg.AddEntry("", tag[1], "") leg.AddEntry(g1, "Quasi-real photoproduction", "lp") leg.AddEntry(g2, "Pythia 6", "lp") leg.Draw("same") #ut.invert_col(rt.gPad) can.SaveAs("01fig.pdf")
def acceptance_autobin(): #spectrometer acceptance as a function of generated photon energy, #size of bins is given by the desired precision emin = 1 emax = 20 edet = 1 prec = 0.07 #prec = 0.02 delt = 1e-2 sel = "up_en>" + str(edet * 1e3) + " && down_en>" + str(edet * 1e3) can = ut.box_canvas() gROOT.LoadMacro("get_acc.C") hAcc = rt.get_acc(tree, "phot_gen", sel, prec, delt) #ut.set_graph(hAcc, rt.kBlue) ut.set_graph(hAcc) #hAcc.GetYaxis().SetTitle("Spectrometer acceptance / "+str(prec*1e2)+" %") hAcc.GetYaxis().SetTitle("Spectrometer acceptance") hAcc.GetXaxis().SetTitle("Generated #it{E}_{#gamma} (GeV)") hAcc.SetTitle("") hAcc.GetYaxis().SetTitleOffset(2) hAcc.GetXaxis().SetTitleOffset(1.3) ut.set_margin_lbtr(gPad, 0.14, 0.1, 0.01, 0.02) hAcc.Draw("AP") #save the acceptance to a temporary file #tmp = TFile.Open("tmp/hacc.root", "recreate") #hAcc.Write() #tmp.Write() #tmp.Close() #integrate the acceptance to scale the parametrization en = rt.Double(0) av = rt.Double(0) iacc = 0. for i in xrange(hAcc.GetN()): hAcc.GetPoint(i, en, av) iacc += av * (hAcc.GetErrorXhigh(i) + hAcc.GetErrorXlow(i)) #acceptance parametrization from spec_acc import spec_acc #acc = spec_acc() acc = spec_acc(8200, 0.26, 42, 242) acc.scale = iacc / acc.acc_func.Integral(2, 21) acc.acc_func.Draw("same") leg = ut.prepare_leg(0.63, 0.86, 0.12, 0.1) #, 0.027) # x, y, dx, dy, tsiz #leg.AddEntry(hAcc, "#frac{#it{N}(#it{E}_{up}>1 #bf{and} #it{E}_{down}>1 GeV)}{#it{N}_{all}}", "lp") leg.AddEntry(hAcc, "Geant4", "lp") leg.AddEntry(acc.acc_func, "Geometry model", "l") leg.Draw("same") #ut.invert_col(rt.gPad) can.SaveAs("01fig.pdf")
def main(): gROOT.SetBatch() #range for |t| ptmin = 0. ptmax = 0.109 # 0.109 0.01 for interference range #default binning ptbin = 0.004 # 0.004 0.0005 for interference range #long bins at high |t| ptmid = 0.06 # 0.08, value > ptmax will switch it off 0.06 ptlon = 0.01 # 0.01 #short bins at low |t| ptlow = 0.01 ptshort = 0.0005 #mass interval mmin = 2.8 mmax = 3.2 #dy = 2. # rapidity interval, for integrated sigma dy = 1. ngg = 131 # number of gamma-gamma from mass fit lumi = 13871.907 # lumi in inv. ub #correction to luminosity for ana/triggered events ratio_ana = 3420950. / 3694000 #scale the lumi for |z| around nominal bunch crossing ratio_zdc_vtx = 0.502 Reta = 0.503 # pseudorapidity preselection #Reta = 1. trg_eff = 0.67 # bemc trigger efficiency ratio_tof = 1.433 # tof correction to efficiency bbceff = 0.97 # BBC veto inefficiency zdc_acc = 0.49 # ZDC acceptance to XnXn 0.7 #zdc_acc = 1. br = 0.05971 # dielectrons branching ratio #data basedir = "../../../star-upc-data/ana/muDst/muDst_run1/sel5" infile = "ana_muDst_run1_all_sel5z.root" #MC basedir_sl = "../../../star-upc-data/ana/starsim/slight14e/sel5" #infile_sl = "ana_slight14e1x2_s6_sel5z.root" infile_sl = "ana_slight14e1x3_s6_sel5z.root" # basedir_sart = "../../../star-upc-data/ana/starsim/sartre14a/sel5" infile_sart = "ana_sartre14a1_sel5z_s6_v2.root" # basedir_bgen = "../../../star-upc-data/ana/starsim/bgen14a/sel5" infile_bgen = "ana_bgen14a1_v0_sel5z_s6.root" #infile_bgen = "ana_bgen14a2_sel5z_s6.root" # basedir_gg = "../../../star-upc-data/ana/starsim/slight14e/sel5" infile_gg = "ana_slight14e2x1_sel5_nzvtx.root" #model predictions gSlight = load_starlight(dy) gSartre = load_sartre() gFlat = loat_flat_pt2() gMS = load_ms() gCCK = load_cck() #open the inputs inp = TFile.Open(basedir + "/" + infile) tree = inp.Get("jRecTree") # inp_gg = TFile.Open(basedir_gg + "/" + infile_gg) tree_gg = inp_gg.Get("jRecTree") # inp_sl = TFile.Open(basedir_sl + "/" + infile_sl) tree_sl_gen = inp_sl.Get("jGenTree") # inp_sart = TFile.Open(basedir_sart + "/" + infile_sart) tree_sart_gen = inp_sart.Get("jGenTree") # inp_bgen = TFile.Open(basedir_bgen + "/" + infile_bgen) tree_bgen_gen = inp_bgen.Get("jGenTree") #evaluate binning #print "bins:", ut.get_nbins(ptbin, ptmin, ptmax) bins = ut.get_bins_vec_2pt(ptbin, ptlon, ptmin, ptmax, ptmid) #bins = ut.get_bins_vec_3pt(ptshort, ptbin, ptlon, ptmin, ptmax, ptlow, ptmid) #print "bins2:", bins.size()-1 #load the data strsel = "jRecM>{0:.3f} && jRecM<{1:.3f}".format(mmin, mmax) hPt = ut.prepare_TH1D_vec("hPt", bins) tree.Draw("jRecPt*jRecPt >> hPt", strsel) #distribution for bin centers hPtCen = hPt.Clone("hPtCen") #gamma-gamma component hPtGG = ut.prepare_TH1D_vec("hPtGG", bins) tree_gg.Draw("jRecPt*jRecPt >> hPtGG", strsel) #normalize the gamma-gamma component ut.norm_to_num(hPtGG, ngg, rt.kGreen) #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 hPtIncoh = ut.prepare_TH1D_vec("hPtIncoh", bins) ut.fill_h1_tf(hPtIncoh, func_incoh_pt2, rt.kRed) #print "Entries before gamma-gamma and incoherent subtraction:", hPt.GetEntries() #subtract gamma-gamma and incoherent components hPt.Sumw2() hPt.Add(hPtGG, -1) #print "Gamma-gamma entries:", hPtGG.Integral() #print "Entries after gamma-gamma subtraction:", hPt.Integral() #print "Incoherent entries:", hPtIncoh.Integral() hPt.Add(hPtIncoh, -1) #print "Entries after all subtraction:", hPt.Integral() #scale the luminosity lumi_scaled = lumi * ratio_ana * ratio_zdc_vtx #print "lumi_scaled:", lumi_scaled #denominator for deconvoluted distribution, conversion ub to mb den = Reta * br * zdc_acc * trg_eff * bbceff * ratio_tof * lumi_scaled * 1000. * dy #deconvolution deconv_min = bins[0] deconv_max = bins[bins.size() - 1] deconv_nbin = bins.size() - 1 gROOT.LoadMacro("fill_response_matrix.C") #Starlight response #resp_sl = RooUnfoldResponse(deconv_nbin, deconv_min, deconv_max, deconv_nbin, deconv_min, deconv_max) resp_sl = RooUnfoldResponse(hPt, hPt) rt.fill_response_matrix(tree_sl_gen, resp_sl) # unfold_sl = RooUnfoldBayes(resp_sl, hPt, 15) #unfold_sl = RooUnfoldSvd(resp_sl, hPt, 15) hPtSl = unfold_sl.Hreco() #ut.set_H1D(hPtSl) #apply the denominator and bin width ut.norm_to_den_w(hPtSl, den) #Sartre response #resp_sart = RooUnfoldResponse(deconv_nbin, deconv_min, deconv_max, deconv_nbin, deconv_min, deconv_max) #resp_sart = RooUnfoldResponse(hPt, hPt) #rt.fill_response_matrix(tree_sart_gen, resp_sart) # #unfold_sart = RooUnfoldBayes(resp_sart, hPt, 10) #hPtSart = unfold_sart.Hreco() #ut.set_H1D(hPtSart) #hPtSart.SetMarkerStyle(21) #Flat pT^2 response #resp_bgen = RooUnfoldResponse(deconv_nbin, deconv_min, deconv_max, deconv_nbin, deconv_min, deconv_max) resp_bgen = RooUnfoldResponse(hPt, hPt) rt.fill_response_matrix(tree_bgen_gen, resp_bgen) # unfold_bgen = RooUnfoldBayes(resp_bgen, hPt, 14) hPtFlat = unfold_bgen.Hreco() #ut.set_H1D(hPtFlat) #apply the denominator and bin width ut.norm_to_den_w(hPtFlat, den) #hPtFlat.SetMarkerStyle(22) #hPtFlat.SetMarkerSize(1.3) #systematical errors err_zdc_acc = 0.1 err_bemc_eff = 0.03 #sys_err = rt.TMath.Sqrt(err_zdc_acc*err_zdc_acc + err_bemc_eff*err_bemc_eff) sys_err = err_zdc_acc * err_zdc_acc + err_bemc_eff * err_bemc_eff #print "Total sys err:", sys_err hSys = ut.prepare_TH1D_vec("hSys", bins) hSys.SetOption("E2") hSys.SetFillColor(rt.kOrange + 1) hSys.SetLineColor(rt.kOrange) for ibin in xrange(1, hPtFlat.GetNbinsX() + 1): hSys.SetBinContent(ibin, hPtFlat.GetBinContent(ibin)) sig_sl = hPtSl.GetBinContent(ibin) sig_fl = hPtFlat.GetBinContent(ibin) err_deconv = TMath.Abs(sig_fl - sig_sl) / sig_fl #print "err_deconv", err_deconv #sys_err += err_deconv*err_deconv sys_err_sq = sys_err + err_deconv * err_deconv sys_err_bin = TMath.Sqrt(sys_err_sq) stat_err = hPtFlat.GetBinError(ibin) / hPtFlat.GetBinContent(ibin) tot_err = TMath.Sqrt(stat_err * stat_err + sys_err_sq) #hSys.SetBinError(ibin, hPtFlat.GetBinContent(ibin)*err_deconv) hSys.SetBinError(ibin, hPtFlat.GetBinContent(ibin) * sys_err_bin) #hPtFlat.SetBinError(ibin, hPtFlat.GetBinContent(ibin)*tot_err) #draw the results gStyle.SetPadTickX(1) gStyle.SetFrameLineWidth(2) #frame for models plot only frame = ut.prepare_TH1D("frame", ptbin, ptmin, ptmax) can = ut.box_canvas() #ut.set_margin_lbtr(gPad, 0.1, 0.09, 0.03, 0.03) ut.set_margin_lbtr(gPad, 0.1, 0.09, 0.055, 0.01) ytit = "d#it{#sigma}/d#it{t}d#it{y} (mb/(GeV/c)^{2})" xtit = "|#kern[0.3]{#it{t}}| ((GeV/c)^{2})" ut.put_yx_tit(frame, ytit, xtit, 1.4, 1.2) frame.SetMaximum(11) #frame.SetMinimum(1.e-6) #frame.SetMinimum(2e-4) frame.SetMinimum(1e-5) # 3e-5 frame.Draw() #hSys.Draw("e2same") #bin center points from data #gSig = apply_centers(hPtFlat, hPtCen) gSig = fixed_centers(hPtFlat) ut.set_graph(gSig) #hPtSl.Draw("e1same") #hPtSart.Draw("e1same") #hPtFlat.Draw("e1same") #put model predictions #gSartre.Draw("lsame") #gFlat.Draw("lsame") gMS.Draw("lsame") gCCK.Draw("lsame") gSlight.Draw("lsame") gSig.Draw("P") frame.Draw("same") gPad.SetLogy() cleg = ut.prepare_leg(0.1, 0.96, 0.14, 0.01, 0.035) cleg.AddEntry( None, "Au+Au #rightarrow J/#psi + Au+Au + XnXn, #sqrt{#it{s}_{#it{NN}}} = 200 GeV", "") cleg.Draw("same") leg = ut.prepare_leg(0.45, 0.82, 0.18, 0.1, 0.035) leg.AddEntry(None, "#bf{|#kern[0.3]{#it{y}}| < 1}", "") hx = ut.prepare_TH1D("hx", 1, 0, 1) leg.AddEntry(hx, "STAR") hx.Draw("same") leg.Draw("same") #legend for models mleg = ut.prepare_leg(0.68, 0.76, 0.3, 0.16, 0.035) #mleg = ut.prepare_leg(0.68, 0.8, 0.3, 0.12, 0.035) mleg.AddEntry(gSlight, "STARLIGHT", "l") mleg.AddEntry(gMS, "MS", "l") mleg.AddEntry(gCCK, "CCK-hs", "l") #mleg.AddEntry(gSartre, "Sartre", "l") #mleg.AddEntry(gFlat, "Flat #it{p}_{T}^{2}", "l") mleg.Draw("same") #legend for deconvolution method dleg = ut.prepare_leg(0.3, 0.75, 0.2, 0.18, 0.035) #dleg = ut.prepare_leg(0.3, 0.83, 0.2, 0.1, 0.035) dleg.AddEntry(None, "Unfolding with:", "") dleg.AddEntry(hPtSl, "Starlight", "p") #dleg.AddEntry(hPtSart, "Sartre", "p") dleg.AddEntry(hPtFlat, "Flat #it{p}_{T}^{2}", "p") #dleg.Draw("same") ut.invert_col(rt.gPad) can.SaveAs("01fig.pdf") #to prevent 'pure virtual method called' gPad.Close() #save the cross section to output file out = TFile("sigma.root", "recreate") gSig.Write("sigma") out.Close() #beep when finished gSystem.Exec("mplayer ../computerbeep_1.mp3 > /dev/null 2>&1")
def acc_en_s12(): #acceptance in energy for Tagger 1 by lmon and dd4hep #inp = "/home/jaroslav/sim/lmon/data/taggers/tag1a/hits_tag.root" #inp = "/home/jaroslav/sim/lmon/data/taggers/tag1ax1/hits_tag.root" inp = "/home/jaroslav/sim/lmon/data/taggers/tag2a/hits_tag_10files.root" infile = TFile.Open(inp) tree_lmon = infile.Get("event") #inp_dd = TFile.Open("dd.root") #tree_dd = inp_dd.Get("event") emin = 2 emax = 19 #amax = 0.6 amax = 0.9 acc_lmon_s1 = rt.acc_Q2_kine(tree_lmon, "true_el_E", "s1_IsHit") acc_lmon_s1.prec = 0.05 acc_lmon_s1.bmin = 0.1 #acc_lmon_s1.nev = int(1e5) gLmonS1 = acc_lmon_s1.get() acc_lmon_s2 = rt.acc_Q2_kine(tree_lmon, "true_el_E", "s2_IsHit") acc_lmon_s2.prec = 0.05 acc_lmon_s2.bmin = 0.1 #acc_lmon_s2.nev = int(1e5) gLmonS2 = acc_lmon_s2.get() #acc_dd = rt.acc_Q2_kine(tree_dd, "gen_en", "s1_IsHit") #acc_dd = rt.acc_Q2_kine(tree_dd, "gen_en", "s2_IsHit") #acc_dd.prec = 0.1 #acc_dd.bmin = 0.1 #gDD = acc_dd.get() can = ut.box_canvas() frame = gPad.DrawFrame(emin, 0, emax, amax) ut.put_yx_tit(frame, "Tagger acceptance", "Electron energy #it{E} (GeV)", 1.6, 1.3) frame.Draw() ut.set_margin_lbtr(gPad, 0.11, 0.1, 0.03, 0.02) ut.set_graph(gLmonS1, rt.kRed) gLmonS1.Draw("psame") ut.set_graph(gLmonS2, rt.kBlue) gLmonS2.Draw("psame") #ut.set_graph(gDD, rt.kRed) #gDD.Draw("psame") gPad.SetGrid() leg = ut.prepare_leg(0.15, 0.82, 0.24, 0.12, 0.035) # x, y, dx, dy, tsiz leg.AddEntry(gLmonS1, "Tagger 1", "lp") leg.AddEntry(gLmonS2, "Tagger 2", "lp") leg.Draw("same") ut.invert_col(rt.gPad) can.SaveAs("01fig.pdf")
ut.log_results(out, "{0:9} {1:.3f} +/- {2:.3f}".format(nam+":", val, err)) #plot the efficiency gStyle.SetPadTickX(1) gStyle.SetPadTickY(1) can = ut.box_canvas() if logx == True: gPad.SetLogx() gPad.SetTopMargin(0.01) gPad.SetRightMargin(0.01) gPad.SetBottomMargin(0.12) gPad.SetLeftMargin(0.1) ut.set_graph(hEff) hEff.GetYaxis().SetTitleOffset(1.4) hEff.GetXaxis().SetTitleOffset(1.5) hEff.GetXaxis().SetTitle("Track momentum #it{p}_{tot} at BEMC (GeV)") hEff.GetYaxis().SetTitle("BEMC efficiency") hEff.SetTitle("") hEff.GetXaxis().SetMoreLogLabels() leg = ut.prepare_leg(0.15, 0.82, 0.34, 0.12, 0.03) leg.SetMargin(0.17) #fitform = "#epsilon_{0} + #it{n}#left[1 + erf#left(#frac{#it{p}_{tot} - #it{p}_{tot}^{thr}}{#sqrt{2}#sigma}#right)#right]" fitform = "#it{n}#left[1 + erf#left(#frac{#it{p}_{tot} - #it{p}_{tot}^{thr}}{#sqrt{2}#sigma}#right)#right]" leg.AddEntry(fitFunc, fitform, "l")
def acc_quasi_real(do_plot=True, sel_mode=5): #selection mode, 1 - s1, 2 - s2, 3 - s1 or s2, 4 - ecal, 5 - any #Quasi-real input #inp_qr = "../data/test/lmon.root" #inp_qr = "../data/lmon_18x275_qr_xB_yA_lowQ2_B2eRv2_1Mevt.root" #inp_qr = "../data/lmon_18x275_qr_xD_yC_1Mevt.root" #inp_qr = "../data/lmon_18x275_qr_Qb_1Mevt.root" #inp_qr = "../data/lmon_18x275_qr_Qc_10Mevt.root" #inp_qr = "../data/lmon_18x275_qr_Qb_beff2_1Mevt.root" #inp_qr = "../data/lmon_18x275_qr_Qd_beff2_5Mevt.root" inp_qr = "../data/qr/lmon_qr_18x275_Qe_beff2_5Mevt.root" #range in the log_10(Q^2) #lqmin = -4.5 lqmin = -10 lqmax = 5 #bins calculation prec = 0.01 delt = 1e-6 #number of events, 0 for all #nev = 100000 nev = 0 #tree from the input tree_qr, infile_qr = get_tree(inp_qr) #calculate the acceptance acalc = rt.acc_Q2_calc(tree_qr, 18, prec, delt, nev) acalc.sel_mode = sel_mode acc_qr = acalc.get_acc() acalc.release_tree() if do_plot is False: return acc_qr #make the plot can = ut.box_canvas() ut.set_graph(acc_qr, rt.kRed) # , rt.kRed frame = gPad.DrawFrame(lqmin, 0, lqmax, 1.1) # 0.25 ytit = "Acceptance / {0:.1f} %".format(prec*100) ut.put_yx_tit(frame, ytit, "log_{10}(#it{Q}^{2})", 1.6, 1.2) frame.Draw() ut.set_margin_lbtr(gPad, 0.11, 0.1, 0.03, 0.02) gPad.SetGrid() acc_qr.Draw("psame") leg = ut.prepare_leg(0.2, 0.84, 0.2, 0.1, 0.035) leg.AddEntry(acc_qr, "Acceptance for quasi-real photoproduction", "lp") leg.Draw("same") ut.invert_col(rt.gPad) can.SaveAs("01fig.pdf")