83 livetime, zlumi, zerr, olumi, timestamp, dfz_small = pt.get_dfz(args.indir, year, run, channel)
86 if livetime < pt.runlivetimecut:
87 if livetime >= 0.:
print(f
"Skip Run {run} because of live time {livetime/60:.1f} min")
91 if (year ==
"16" and dfz_small[
'LBStart'].iloc[0] < 1463184000)
or run ==
"310247":
94 dflist.append(dfz_small)
96 df = pd.concat(dflist)
97 df[
'OffMu'] = df[
'OffMu'].
round(0)
98 df = df.groupby(pd.cut(df.OffMu, bins, right=
False), observed=
False).
sum()
99 df.reset_index(drop=
True, inplace=
True)
101 df[
'ZeeLumiErr'] = np.sqrt(df[
'ZeeLumiErr'])
102 df[
'ZmumuLumiErr'] = np.sqrt(df[
'ZmumuLumiErr'])
103 df[
'Ratio'] = df[
'ZeeLumi'] / df[
'ZmumuLumi']
104 df[
'RatioErr'] = df[
'Ratio'] * np.sqrt(
pow(df[
'ZeeLumiErr'] / df[
'ZeeLumi'], 2) +
pow(df[
'ZmumuLumiErr'] / df[
'ZmumuLumi'], 2))
106 df[
'ZLumiErr'] = np.sqrt(df[
'ZLumiErr'])
107 df[
'Bin'] = pd.Series(bins)
109 norm = df[
'ZLumi'].
sum() / df[
'OffLumi'].
sum()
110 df[
'Ratio'] = df[
'ZLumi'] / df[
'OffLumi'] / norm
111 df[
'RatioErr'] = df[
'ZLumiErr'] / df[
'OffLumi'] / norm
113 h_total = R.TH1F(
"h_total",
"", len(bins)-1, bins)
115 nan_list = df[df[
'Ratio'].isnull()].index.tolist()
119 for xbin
in range(0, h_total.GetNbinsX()):
125 h_total.SetBinContent(xbin+1, df[
'Ratio'][xbin])
126 h_total.SetBinError(xbin+1, df[
'RatioErr'][xbin])
127 arr_ratio.append(df[
'Ratio'][xbin])
130 print(
"Cannot do ratio for", xbin)
132 arr_ratio = np.array(arr_ratio)
134 median = np.median(arr_ratio)
135 stdev = np.percentile(abs(arr_ratio - median), 68)
138 h_total.GetXaxis().SetTitle(
"<#mu>")
141 line = R.TLine(h_total.GetXaxis().GetXmin(), median, h_total.GetXaxis().GetXmax(), median)
142 line.SetLineColor(R.kRed)
146 h_total.GetYaxis().SetRangeUser(ymin, ymax)
147 leg = R.TLegend(0.54, 0.72, 0.805, 0.92)
149 leg.AddEntry(h_total, pt.Leemumuratiolabel,
"ep")
150 leg.AddEntry(line, f
"Median = {median:.3f}#pm{stdev:.3f}",
"l")
152 h_total.GetYaxis().SetRangeUser(0.95, 1.05)
153 leg = R.TLegend(0.20, 0.18, 0.45, 0.35)
155 print(f
"Year = {year} channel = {channel}: median +- 68% percentile = {median:.3f} +- {stdev:.3f}")
157 line1 = pt.make_bands(bins, stdev, median)
160 h_total.Draw(
'same E0')
163 leg.SetTextSize(0.05)
165 h_total.GetYaxis().SetTitle(pt.Leemumuratiolabel)
168 h_total.GetYaxis().SetTitle(
"L_{"+pt.plotlabel[channel]+
"} / L_{ATLAS}")
169 leg.AddEntry(h_total,
"L_{"+pt.plotlabel[channel]+
"}^{year-normalised}/L_{ATLAS}",
"ep")
170 zstring = pt.plotlabel[channel]+
" counting"
173 pt.drawAtlasLabel(0.2, 0.88,
"Internal")
174 pt.drawText(0.2, 0.83, date_string, size=22)
175 pt.drawText(0.2, 0.78, zstring, size=22)
177 pt.drawAtlasLabel(xmin, 0.88,
"Internal")
178 pt.drawText(xmin, 0.83, date_string, size=22)
179 pt.drawText(xmin, 0.78, zstring, size=22)
180 pt.drawText(xmin, 0.71,
"OflLumi-Run3-006", size=22)
182 leg.AddEntry(line1,
"68% band (#pm" +
str(
round(stdev, 3)) +
")",
"f")
186 c1.SaveAs(outdir + outfile)
188 c1.SaveAs(outdir + channel +
"ATLAS_ratio_vs_mu_"+out_tag+
".pdf")