34 dfz = pd.read_csv(infilename, delimiter=
",")
36 dfz_small[
'ZLumi'] = dfz_small[channel +
'Lumi']
37 dfz_small[
'ZLumiErr'] = dfz_small[channel +
'LumiErr']
38 dfz_small[
'EffTrig'] = dfz_small[channel +
'EffTrig']
39 dfz_small[
'ErrTrig'] = dfz_small[channel +
'ErrTrig']
40 dfz_small[
'EffReco'] = dfz_small[channel +
'EffReco']
41 dfz_small[
'ErrReco'] = dfz_small[channel +
'ErrReco']
43 dfz_small = dfz_small.drop(dfz_small[dfz_small.ZLumi == 0].index)
45 channel_string =
"Z #rightarrow ee"
50 leg = R.TLegend(0.7, 0.37, 0.8, 0.6)
53 leg = R.TLegend(0.7, 0.22, 0.8, 0.45)
54 elif channel ==
"Zmumu":
55 channel_string =
"Z #rightarrow #mu#mu"
57 leg = R.TLegend(0.7, 0.47, 0.8, 0.7)
67 for index, event
in dfz_small.iterrows():
68 run_number =
str(
int(event.RunNum))
69 lhc_fill =
str(
int(event.FillNum))
71 pileup =
int(event.OffMu)
73 pileup = (event.LBNum // 20)*20
75 if event.ErrTrig == 0.0
or event.ErrReco == 0.0:
78 weight_trig = 1/
pow(event.ErrTrig, 2)
79 weight_reco = 1/
pow(event.ErrReco, 2)
80 if pileup
not in dict_mu:
81 dict_mu[pileup] = pileup
82 dict_trig[pileup] = weight_trig * event.EffTrig
83 dict_reco[pileup] = weight_reco * event.EffReco
84 dict_trig_err[pileup] = weight_trig
85 dict_reco_err[pileup] = weight_reco
87 dict_trig[pileup] += weight_trig * event.EffTrig
88 dict_reco[pileup] += weight_reco * event.EffReco
89 dict_trig_err[pileup] += weight_trig
90 dict_reco_err[pileup] += weight_reco
93 vec_trig_err =
array(
'd')
95 vec_reco_err =
array(
'd')
99 print(
"File "+infilename+
" has no filled lumi blocks!")
102 for pileup
in dict_mu:
103 trig_weighted_average = dict_trig[pileup]/dict_trig_err[pileup]
104 trig_error = sqrt(1/dict_trig_err[pileup])
105 vec_trig.append(trig_weighted_average)
106 vec_trig_err.append(trig_error)
108 reco_weighted_average = dict_reco[pileup]/dict_reco_err[pileup]
109 reco_error = sqrt(1/dict_reco_err[pileup])
110 vec_reco.append(reco_weighted_average)
111 vec_reco_err.append(reco_error)
113 vec_mu.append(pileup)
115 trig_graph = R.TGraphErrors(len(vec_trig), vec_mu, vec_trig, R.nullptr, vec_trig_err)
116 trig_graph.GetHistogram().SetYTitle(
"Efficiency")
117 trig_graph.GetHistogram().GetYaxis().SetRangeUser(ymin, 1.0)
118 trig_graph.SetMarkerSize(1)
120 reco_graph = R.TGraphErrors(len(vec_reco), vec_mu, vec_reco, R.nullptr, vec_reco_err)
121 reco_graph.GetHistogram().GetYaxis().SetRangeUser(ymin, 1.0)
122 reco_graph.SetMarkerSize(1)
123 reco_graph.SetMarkerStyle(21)
124 reco_graph.SetMarkerColor(R.kRed)
125 reco_graph.SetLineColor(R.kRed)
129 leg.SetTextSize(0.07)
130 leg.AddEntry(reco_graph,
"#varepsilon_{reco}^{single-"+lep+
"}",
"ep")
131 leg.AddEntry(trig_graph,
"#varepsilon_{trig}^{single-"+lep+
"}",
"ep")
134 trig_graph.Draw(
"ap")
137 pt.drawAtlasLabel(0.2, ymax,
"Internal")
138 if year
in [
'15',
'16',
'17',
'18']:
139 pt.drawText(0.2, ymax-0.06,
"Data 20" + year +
", #sqrt{s} = 13 TeV")
141 pt.drawText(0.2, ymax-0.06,
"Data 20" + year +
", #sqrt{s} = 13.6 TeV")
142 pt.drawText(0.2, ymax-0.12,
"LHC Fill " + lhc_fill)
143 pt.drawText(0.2, ymax-0.18, channel_string +
" counting")
147 trig_graph.GetHistogram().SetXTitle(
"<#mu>")
148 c1.SaveAs(outdir +run_number+
"/eff_v_mu_"+channel+
"_data"+year+
"_"+run_number+
".eps")
149 c1.SaveAs(outdir +run_number+
"/eff_v_mu_"+channel+
"_data"+year+
"_"+run_number+
".pdf")
151 trig_graph.GetHistogram().SetXTitle(
"Luminosity Block Number")
152 c1.SaveAs(outdir +run_number+
"/eff_v_lb_"+channel+
"_data"+year+
"_"+run_number+
".eps")
153 c1.SaveAs(outdir +run_number+
"/eff_v_lb_"+channel+
"_data"+year+
"_"+run_number+
".pdf")