Example #1
0
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")
Example #2
0
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")
Example #3
0
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")
Example #4
0
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")
Example #5
0
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")
Example #6
0
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")
Example #7
0
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")
Example #8
0
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")
Example #9
0
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")
Example #10
0
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")
Example #11
0
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")
Example #12
0
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")
Example #13
0
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")
Example #14
0
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")
Example #15
0
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")
Example #16
0
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")
Example #17
0
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")
Example #18
0
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")
Example #19
0
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")
Example #20
0
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")
Example #21
0
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")
Example #22
0
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")
Example #23
0
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")
Example #24
0
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")
Example #25
0
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")
Example #26
0
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")
Example #27
0
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")
Example #28
0
        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")
Example #29
0
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")