43 from ROOT
import gROOT, TCanvas, TH1F, THStack, gPad, gStyle
45 from decimal
import Decimal
51 runNumber = sys.argv[2]
52 lb_rates = sys.argv[3]
59 filterNames = [
'DiLep_SiElectronFilterKernel',
60 'DiLep_SiPhotonXFilterKernel',
61 'DiLep_SiMuonFilterKernel',
62 'DiLep_DiElectronFilterKernel',
63 'DiLep_DiPhotonFilterKernel',
64 'DiLep_DiElPhFilterKernel',
65 'DiLep_DiLoElPhFilterKernel',
66 'DVAugmentationKernel',
68 'DV_PhotonFilterKernel',
69 'DV_PhotonPlusTLJetFilterKernel',
70 'DV_MultiJetFilterKernel',
72 'DV_MeffFilterKernel',
73 'KinkedTrackJetFilterKernel',
74 'KinkedTrackMultiJetFilterKernel',
75 'KinkedTrackZeeFilterKernel',
76 'KinkedTrackZmumuFilterKernel',
77 'EmergingFilterKernel',
79 'HV_MuvtxFilterKernel',
80 'HV_JetMETFilterKernel',
81 'HV_CalRatioFilterKernel',
82 'LargeRTaus_SiFilterKernel',
83 'LargeRTaus_DiFilterKernel',
84 'LargeRTaus_METFilterKernel']
87 filterNames_mAug = [fn
for fn
in filterNames
if fn !=
'DVAugmentationKernel']
90 nfm = len(filterNames_mAug)
92 n_aug = filterNames.index(
'DVAugmentationKernel')
100 def end_lb(lumiBlock, lbEventList = [], rateHists = [], totalRateHist = 0):
101 n_events_lb = lbEventList[0]
102 n_passed_lb = lbEventList[nft-1]
103 lbFilters = [0] * (nf-1)
104 for i
in range (0,nf):
108 lbFilters[i] = lbEventList[2*i+1]
110 lbFilters[i-1] = lbEventList[2*i+1]
112 for i,lb
in enumerate(lbFilters):
113 rateHists[i].Fill(lumiBlock,
float(lb))
115 totalRateHist.Fill(lumiBlock,
float(n_passed_lb))
122 for i
in range(0,nf-1):
123 rateHists.append(
TH1F(
"ratePerLB_filter" +
str(i),
"ratePerLB_filter;lb;rate", 2500, 0, 2500))
126 for i
in range(0,nf-1):
127 eventHists.append(
TH1F(
"eventsPerLB_filter" +
str(i),
"eventsPerLB_filter;lb;events", 2500, 0, 2500))
128 eventHists[i].Sumw2()
130 totalRateHist =
TH1F(
"ratePerLB_overall",
"ratePerLB_overall;lb;rate", 2500, 0, 2500)
131 totalRateHist.Sumw2()
134 lbTimeHist =
TH1F(
"lbTimeHist",
"lbTimeHist", 2500, 0, 2500)
135 lbList =
open(lb_rates).readlines()
136 for lineNo,line
in enumerate(lbList):
137 lbTimeHist.Fill(
float(line.split()[0]),
float(line.split()[2]))
138 lbTimeHist.SetBinError(lbTimeHist.FindBin(
float(line.split()[0])), 0)
143 List =
open(mypath).readlines()
146 lbEventList = [0] * nft
147 eventList = [0] * nft
152 for lb1
in first_line.split(
"._"):
153 if "lb" in lb1: first_lb =
int(lb1[2:])
154 current_lb = first_lb
156 print(
"FIRST LB:", first_lb, current_lb)
162 for lineNo,line
in enumerate(List):
164 if lineNo % nft == 0:
166 for lb
in line.split(
"._"):
171 if int(lb[2:]) != current_lb:
172 end_lb(current_lb, lbEventList, rateHists, totalRateHist)
174 procEvents.append(lbEventList[0])
176 current_lb =
int(lb[2:])
178 lbEventList = [0] * nft
180 if (lineNo < len(List) - nft):
181 if (line.split()[0][:-10] == List[lineNo+nft].
split()[0][:-10]):
186 lbEventList[lineNo % nft] +=
int(s)
187 eventList[lineNo % nft] +=
int(s)
190 end_lb(current_lb, lbEventList, rateHists, totalRateHist)
192 procEvents.append(lbEventList[0])
196 totalEvents = eventList[0]
197 totalRPVLLpass = eventList[nft-1]
198 print(
'Events passing RPVLL filters:', totalRPVLLpass,
'out of', totalEvents)
199 print(
'RPVLL filter efficiency:',
float(totalRPVLLpass)/
float(totalEvents) * 100.,
'%')
200 print(
'RPVLL normalized average rate: ',
float(totalRPVLLpass)/
float(totalEvents) * 1000.,
'Hz')
204 fracList_total = [0] * nf
205 fracList_RPVLL = [0] * nf
206 filterEvents = [0] * nf
209 print(
'FRACTION OF (RPVLL | TOTAL) EVENTS PASSING EACH FILTER:')
210 for filterNo
in range(0,nf):
211 closureTest += eventList[filterNo*2+1]
212 fracList_total[filterNo] =
float(eventList[filterNo*2+1])/
float(totalEvents)
213 fracList_RPVLL[filterNo] =
float(eventList[filterNo*2+1])/
float(totalRPVLLpass)
214 filterEvents[filterNo] = eventList[filterNo*2+1]
215 if filterNo != n_aug:
216 print(filterNames[filterNo],
' -- ',
'%.2E' % Decimal(fracList_RPVLL[filterNo]),
' | ',
'%.2E' % Decimal(fracList_total[filterNo]))
219 print(
'NORMALIZED (to 1 kHz) AVERAGE FILTER RATE:')
220 for filterNo
in range(0,nf):
221 if filterNo != n_aug:
222 print(filterNames[filterNo],
' -- ',
'%.2f' % (fracList_total[filterNo]*1000),
'Hz')
228 closureTest_mAug = closureTest - filterEvents[n_aug]
229 print(
'Total number of events passing filters / total number of events passing RPVLL: ', closureTest_mAug,
'/', totalRPVLLpass,
'=',
float(closureTest_mAug)/
float(totalRPVLLpass) * 100.,
'%')
233 for n
in filterNames_mAug:
236 for n
in range(0,nf):
237 if n != n_aug:
print(filterEvents[n],)
243 lbEventHist =
TH1F(
"lbEventHist",
"lbEventHist", 2500, 0, 2500)
244 lbFullEventHist =
TH1F(
"lbFullEventHist",
"lbFullEventHist", 2500, 0, 2500)
245 lbScaleHist =
TH1F(
"lbScaleHist",
"lbScaleHist", 2500, 0, 2500)
249 for lineNo,line
in enumerate(lbList):
250 if (
float(line.split()[0]) >= first_lb
and float(line.split()[0]) <= last_lb):
251 lbEventHist.Fill(
float(line.split()[0]), procEvents[l])
252 lbEventHist.SetBinError(lbEventHist.FindBin(
float(line.split()[0])), 0)
253 if len(line.split()) > 3:
254 lbFullEventHist.Fill(
float(line.split()[0]),
float(line.split()[3]))
255 lbFullEventHist.SetBinError(lbFullEventHist.FindBin(
float(line.split()[0])), 0)
256 scale.append(
float(line.split()[3])/
float(procEvents[l]))
258 lbFullEventHist.Fill(
float(line.split()[0]), procEvents[l])
260 lbScaleHist.Fill(
float(line.split()[0]), scale[l])
261 lbScaleHist.SetBinError(lbScaleHist.FindBin(
float(line.split()[0])), 0)
271 ROOT.kBlue+3, ROOT.kBlue+1, ROOT.kBlue-4, ROOT.kBlue-2, ROOT.kBlue-7,ROOT.kBlue-5, ROOT.kBlue-9,
273 ROOT.kRed+3, ROOT.kRed+1, ROOT.kRed-2, ROOT.kRed-4, ROOT.kRed-6,ROOT.kRed-9,
275 ROOT.kCyan+2, ROOT.kTeal-8, ROOT.kCyan-6, ROOT.kCyan,
281 ROOT.kViolet+8, ROOT.kViolet+3, ROOT.kViolet-9,
283 ROOT.kYellow+2,ROOT.kYellow+9,ROOT.kYellow-5
288 c1 = TCanvas(
'c1',
'', 1000, 600)
289 c1.SetRightMargin(0.25)
290 c1.SetLeftMargin(0.1)
293 l1 = ROOT.TLegend(0.76, 0.1, 0.97, 0.91)
301 totalRateHist.SetMarkerStyle(22)
302 totalRateHist.SetMarkerSize(1.2)
303 if (last_lb - first_lb) > 600:
304 totalRateHist.SetMarkerSize(0.6)
305 totalRateHist.SetMarkerColor(ROOT.kBlack)
306 totalRateHist.SetLineColor(ROOT.kBlack)
307 for bin
in range(1, totalRateHist.GetNbinsX() + 1):
308 totalRateHist.SetBinError(bin, 0)
310 l1.AddEntry(totalRateHist,
"Overall RPVLL Events",
"lp")
313 hs1 = THStack(
"hs1",
"");
315 for i,hist
in enumerate(rateHists):
316 hist.SetFillColor(colors[i])
317 hist.SetLineColor(colors[i])
320 l1.AddEntry(hist, filterNames_mAug[i],
"f")
324 totalRateHist.Draw(
"pSAME")
328 hs1.GetXaxis().SetTitle(
"lumi block")
329 hs1.GetYaxis().SetTitle(
"n events")
330 hs1.GetYaxis().SetTitleOffset(.75)
332 hs1.GetXaxis().SetRangeUser(first_lb - 20, last_lb + 20)
333 hs1.GetYaxis().SetRangeUser(0, 100)
341 latex1 = ROOT.TLatex(0.52, 0.875,
"#font[72]{ATLAS }#font[42]{Internal}")
343 latex1.SetTextSize(0.05)
344 latex1.SetTextAlign(13)
346 latex2 = ROOT.TLatex(0.55, 0.82,
"Run " + runNumber)
348 latex2.SetTextSize(0.05)
349 latex2.SetTextAlign(13)
350 latex2.SetTextFont(42)
355 c1.Print(
"run_" + runNumber +
"_rpvllEvents.pdf")
361 c2 = TCanvas(
'c2',
'', 850, 600)
362 c2.SetRightMargin(0.11765)
363 c2.SetLeftMargin(0.11765)
365 latex3 = ROOT.TLatex(0.62, 0.875,
"#font[72]{ATLAS }#font[42]{Internal}")
367 latex3.SetTextSize(0.05)
368 latex3.SetTextAlign(13)
369 latex4 = ROOT.TLatex(0.65, 0.82,
"Run " + runNumber)
371 latex4.SetTextSize(0.05)
372 latex4.SetTextAlign(13)
373 latex4.SetTextFont(42)
376 for j,h
in enumerate(rateHists):
379 if (last_lb - first_lb) > 600:
381 h.SetMarkerColor(colors[j])
382 h.SetLineColor(colors[j])
384 h.SetTitle(filterNames_mAug[j])
385 h.GetXaxis().SetTitle(
"lumi block")
386 h.GetYaxis().SetTitle(
"n events")
387 h.GetXaxis().SetRangeUser(first_lb - 20, last_lb + 20)
388 h.SetStats(ROOT.kFALSE)
394 c2.Print(
"run_" + runNumber +
"_" +
str(j) +
"_events.pdf")
400 totalRateHist.Divide(lbTimeHist)
401 totalRateHist.Multiply(lbScaleHist)
402 for bin
in range(1, totalRateHist.GetNbinsX() + 1):
403 totalRateHist.SetBinError(bin, 0)
405 l1.AddEntry(totalRateHist,
"Overall RPVLL Rate",
"lp")
408 hs2 = THStack(
"hs2",
"");
410 for i,hist
in enumerate(rateHists):
411 hist.SetFillColor(colors[i])
412 hist.SetLineColor(colors[i])
413 hist.Divide(lbTimeHist)
414 hist.Multiply(lbScaleHist)
417 l1.AddEntry(hist, filterNames_mAug[i],
"f")
421 totalRateHist.Draw(
"pSAME")
425 hs2.GetXaxis().SetTitle(
"lumi block")
426 hs2.GetYaxis().SetTitle(
"rate [Hz]")
427 hs2.GetYaxis().SetTitleOffset(.75)
429 hs2.GetXaxis().SetRangeUser(first_lb - 20, last_lb + 20)
430 hs2.GetYaxis().SetRangeUser(0,100)
443 c1.Print(
"run_" + runNumber +
"_rpvllRate.pdf")
451 for j,h
in enumerate(rateHists):
454 if (last_lb - first_lb) > 600:
456 h.SetMarkerColor(colors[j])
457 h.SetLineColor(colors[j])
460 h.SetTitle(filterNames_mAug[j])
461 h.GetXaxis().SetTitle(
"lumi block")
462 h.GetYaxis().SetTitle(
"rate [Hz]")
463 h.GetXaxis().SetRangeUser(first_lb - 20, last_lb + 20)
464 h.SetStats(ROOT.kFALSE)
470 c2.Print(
"run_" + runNumber +
"_" +
str(j) +
"_rate.pdf")