44 from ROOT
import gROOT, TCanvas, TH1F, THStack, gPad, gStyle
46 from decimal
import Decimal
52 runNumber = sys.argv[2]
53 lb_rates = sys.argv[3]
60 'DiLep_SiElectronFilterKernel',
61 'DiLep_SiPhotonXFilterKernel',
62 'DiLep_SiMuonFilterKernel',
63 'DiLep_DiElectronFilterKernel',
64 'DiLep_DiPhotonFilterKernel',
65 'DiLep_DiElPhFilterKernel',
66 'DiLep_DiLoElPhFilterKernel',
67 'DVAugmentationKernel',
69 'DV_PhotonFilterKernel',
70 'DV_PhotonPlusTLJetFilterKernel',
71 'DV_MultiJetFilterKernel',
73 'DV_MeffFilterKernel',
74 'KinkedTrackJetFilterKernel',
75 'KinkedTrackMultiJetFilterKernel',
76 'KinkedTrackZeeFilterKernel',
77 'KinkedTrackZmumuFilterKernel',
78 'EmergingFilterKernel',
79 'EmergingPt120FilterKernel',
80 'EmergingPt130FilterKernel',
81 'EmergingPt140FilterKernel',
82 'EmergingPt150FilterKernel',
83 'EmergingPt120HighPt250FilterKernel',
84 'EmergingPt130HighPt250FilterKernel',
85 'EmergingPt140HighPt250FilterKernel',
86 'EmergingPt150HighPt250FilterKernel',
87 'EmergingPt120HighPt300FilterKernel',
88 'EmergingPt130HighPt300FilterKernel',
89 'EmergingPt140HighPt300FilterKernel',
90 'EmergingPt150HighPt300FilterKernel',
91 'EmergingPt120HighPt350FilterKernel',
92 'EmergingPt130HighPt350FilterKernel',
93 'EmergingPt140HighPt350FilterKernel',
94 'EmergingPt150HighPt350FilterKernel',
95 'EmergingDiJet110FilterKernel',
96 'EmergingDiJet110Pt120FilterKernel',
97 'EmergingDiJet110Pt130FilterKernel',
98 'EmergingDiJet110Pt140FilterKernel',
99 'EmergingDiJet110Pt150FilterKernel',
100 'EmergingDiJet150FilterKernel',
101 'EmergingDiJet150Pt120FilterKernel',
102 'EmergingDiJet150Pt130FilterKernel',
103 'EmergingDiJet150Pt140FilterKernel',
104 'EmergingDiJet150Pt150FilterKernel',
105 'EmergingDiJet175FilterKernel',
106 'EmergingDiJet175Pt120FilterKernel',
107 'EmergingDiJet175Pt130FilterKernel',
108 'EmergingDiJet175Pt140FilterKernel',
109 'EmergingDiJet175Pt150FilterKernel',
110 'EmergingDiJet260FilterKernel',
111 'EmergingDiJet260Pt120FilterKernel',
112 'EmergingDiJet260Pt130FilterKernel',
113 'EmergingDiJet260Pt140FilterKernel',
114 'EmergingDiJet260Pt150FilterKernel',
116 'HV_MuvtxFilterKernel',
117 'HV_JetMETFilterKernel',
118 'HV_CalRatioFilterKernel' ]
121 filterNames_mAug = [fn
for fn
in filterNames
if fn !=
'DVAugmentationKernel']
124 filterNames_pt100 = [fn
for fn
in filterNames
if (
'Emerging' in fn
and 'Pt' not in fn)]
126 filterNames_pt120 = [fn
for fn
in filterNames
if (
'Emerging' in fn
and 'Pt120' in fn)]
128 filterNames_pt130 = [fn
for fn
in filterNames
if (
'Emerging' in fn
and 'Pt130' in fn)]
130 filterNames_pt140 = [fn
for fn
in filterNames
if (
'Emerging' in fn
and 'Pt140' in fn)]
132 filterNames_pt150 = [fn
for fn
in filterNames
if (
'Emerging' in fn
and 'Pt150' in fn)]
137 filterNames_em_pt100 = [fn
for fn
in filterNames_pt100
if 'DiJet' not in fn]
138 filterNames_di_pt100 = [fn
for fn
in filterNames_pt100
if 'DiJet' in fn]
140 emFilterList = [fn
for fn
in filterNames_pt100
if 'DiJet' not in fn] + [fn
for fn
in filterNames_pt120
if 'DiJet' not in fn] + [fn
for fn
in filterNames_pt130
if 'DiJet' not in fn] + [fn
for fn
in filterNames_pt140
if 'DiJet' not in fn] + [fn
for fn
in filterNames_pt150
if 'DiJet' not in fn]
141 dijetFilterList = [fn
for fn
in filterNames_pt100
if 'DiJet' in fn] + [fn
for fn
in filterNames_pt120
if 'DiJet' in fn] + [fn
for fn
in filterNames_pt130
if 'DiJet' in fn] + [fn
for fn
in filterNames_pt140
if 'DiJet' in fn] + [fn
for fn
in filterNames_pt150
if 'DiJet' in fn]
142 for i
in emFilterList:
145 for i
in dijetFilterList:
152 nf = len(filterNames)
156 ix_dv = filterNames.index(
'DVAugmentationKernel')
157 ix_em = filterNames.index(
'EmergingFilterKernel')
158 ix_dj = filterNames.index(
'EmergingDiJet110FilterKernel')
159 print(nf, nft, ix_dv, ix_em, ix_dj)
170 def end_lb(lumiBlock, lbEventList = [], rateHists = [], totalRateHist = 0):
171 n_passed_lb = lbEventList[nft-1]
172 lbFilters = [0] * (nf-1)
173 for i
in range (0,nf):
177 lbFilters[i] = lbEventList[2*i+1]
179 lbFilters[i-1] = lbEventList[2*i+1]
181 for i,lb
in enumerate(lbFilters):
182 rateHists[i].Fill(lumiBlock,
float(lb))
184 totalRateHist.Fill(lumiBlock,
float(n_passed_lb))
192 for i
in range(0,nf-1):
193 rateHists.append(
TH1F(
"ratePerLB_filter" +
str(i),
"ratePerLB_filter;lb;rate", 2500, 0, 2500))
196 for i
in range(0,nf-1):
197 eventHists.append(
TH1F(
"eventsPerLB_filter" +
str(i),
"eventsPerLB_filter;lb;events", 2500, 0, 2500))
198 eventHists[i].Sumw2()
200 totalRateHist =
TH1F(
"ratePerLB_overall",
"ratePerLB_overall;lb;rate", 2500, 0, 2500)
201 totalRateHist.Sumw2()
204 lbTimeHist =
TH1F(
"lbTimeHist",
"lbTimeHist", 2500, 0, 2500)
205 lbList =
open(lb_rates).readlines()
207 for lineNo,line
in enumerate(lbList):
208 lbTimeHist.Fill(
float(line.split()[0]),
float(line.split()[2]))
209 lbTimeHist.SetBinError(lbTimeHist.FindBin(
float(line.split()[0])), 0)
216 List =
open(mypath).readlines()
219 lbEventList = [0] * nft
220 eventList = [0] * nft
225 for lb1
in first_line.split(
"._"):
226 if "lb" in lb1: first_lb =
int(lb1[2:])
227 current_lb = first_lb
235 for lineNo,line
in enumerate(List):
237 if lineNo % nft == 0:
239 for lb
in line.split(
"._"):
244 if int(lb[2:]) != current_lb:
245 end_lb(current_lb, lbEventList, rateHists, totalRateHist)
247 procEvents.append(lbEventList[0])
249 current_lb =
int(lb[2:])
251 lbEventList = [0] * nft
253 if (lineNo < len(List) - nft):
254 if (line.split()[0][:-10] == List[lineNo+nft].
split()[0][:-10]):
259 lbEventList[lineNo % nft] +=
int(s)
260 eventList[lineNo % nft] +=
int(s)
263 end_lb(current_lb, lbEventList, rateHists, totalRateHist)
265 procEvents.append(lbEventList[0])
270 totalEvents = eventList[0]
271 totalRPVLLpass = eventList[nft-1]
272 print(
'Events passing RPVLL filters: ', totalRPVLLpass,
'out of ', totalEvents)
273 print(
'RPVLL filter efficiency: ',
float(totalRPVLLpass)/
float(totalEvents) * 100.,
'%')
274 print(
'RPVLL normalized average rate: ',
float(totalRPVLLpass)/
float(totalEvents) * 1000.,
'Hz')
278 fracList_total = [0] * nf
279 fracList_RPVLL = [0] * nf
280 filterEvents = [0] * nf
283 print(
'FRACTION OF (RPVLL | TOTAL) EVENTS PASSING EACH FILTER:')
284 for filterNo
in range(0, nf):
285 closureTest += eventList[filterNo*2+1]
286 fracList_total[filterNo] =
float(eventList[filterNo*2+1])/
float(totalEvents)
287 fracList_RPVLL[filterNo] =
float(eventList[filterNo*2+1])/
float(totalRPVLLpass)
288 filterEvents[filterNo] = eventList[filterNo*2+1]
293 print(
'NORMALIZED (to 1 kHz) AVERAGE FILTER RATE:')
294 for filterNo
in range(0, nf):
295 if filterNo != ix_dv:
296 print(filterNames[filterNo],
' -- ',
'%.2f' % (fracList_total[filterNo]*1000),
'Hz')
318 lbEventHist =
TH1F(
"lbEventHist",
"lbEventHist", 2500, 0, 2500)
319 lbFullEventHist =
TH1F(
"lbFullEventHist",
"lbFullEventHist", 2500, 0, 2500)
320 lbScaleHist =
TH1F(
"lbScaleHist",
"lbScaleHist", 2500, 0, 2500)
324 for lineNo,line
in enumerate(lbList):
325 if (
float(line.split()[0]) >= first_lb
and float(line.split()[0]) <= last_lb):
326 lbEventHist.Fill(
float(line.split()[0]), procEvents[l])
327 lbEventHist.SetBinError(lbEventHist.FindBin(
float(line.split()[0])), 0)
328 if (len(line.split()) > 3):
329 lbFullEventHist.Fill(
float(line.split()[0]),
float(line.split()[3]))
330 lbFullEventHist.SetBinError(lbFullEventHist.FindBin(
float(line.split()[0])), 0)
331 scale.append(
float(line.split()[3])/
float(procEvents[l]))
333 lbFullEventHist.Fill(
float(line.split()[0]), procEvents[l])
335 lbScaleHist.Fill(
float(line.split()[0]), scale[l])
336 lbScaleHist.SetBinError(lbScaleHist.FindBin(
float(line.split()[0])), 0)
337 print(line.split()[0], procEvents[l], line.split()[3], scale[l])
347 ROOT.kBlue+3, ROOT.kBlue+1, ROOT.kBlue-4, ROOT.kBlue-2, ROOT.kBlue-7, ROOT.kBlue-5, ROOT.kBlue-9,
349 ROOT.kRed+3, ROOT.kRed+1, ROOT.kRed-2, ROOT.kRed-4, ROOT.kRed-6, ROOT.kRed-9,
351 ROOT.kCyan+2, ROOT.kTeal-8, ROOT.kCyan-6, ROOT.kCyan,
353 ROOT.kGreen+1, ROOT.kGreen+3, ROOT.kSpring+4, ROOT.kYellow-2, ROOT.kOrange,
357 ROOT.kViolet+8, ROOT.kViolet+3, ROOT.kViolet-9,
359 ROOT.kViolet, ROOT.kMagenta+2, ROOT.kPink+10, ROOT.kPink+5, ROOT.kPink-5 ]
364 c1 = TCanvas(
'c1',
'', 1000, 600)
365 c1.SetRightMargin(0.25)
366 c1.SetLeftMargin(0.1)
369 l1 = ROOT.TLegend(0.76, 0.1, 0.97, 0.91)
377 totalRateHist.SetMarkerStyle(22)
378 totalRateHist.SetMarkerSize(1.2)
379 if (last_lb - first_lb) > 600:
380 totalRateHist.SetMarkerSize(0.6)
381 totalRateHist.SetMarkerColor(ROOT.kBlack)
382 totalRateHist.SetLineColor(ROOT.kBlack)
383 for bin
in range(1, totalRateHist.GetNbinsX() + 1):
384 totalRateHist.SetBinError(bin, 0)
386 l1.AddEntry(totalRateHist,
"Overall RPVLL Events",
"lp")
389 hs1 = THStack(
"hs1",
"");
391 for i,hist
in enumerate(rateHists):
392 hist.SetFillColor(colors[i%len(colors)])
393 hist.SetLineColor(colors[i%len(colors)])
395 hist.SetFillStyle(3004)
398 l1.AddEntry(hist, filterNames_mAug[i],
"f")
402 totalRateHist.Draw(
"pSAME")
406 hs1.GetXaxis().SetTitle(
"lumi block")
407 hs1.GetYaxis().SetTitle(
"n events")
408 hs1.GetYaxis().SetTitleOffset(.75)
410 hs1.GetXaxis().SetRangeUser(first_lb - 20, last_lb + 20)
411 hs1.GetYaxis().SetRangeUser(0,100)
419 latex1 = ROOT.TLatex(0.52, 0.875,
"#font[72]{ATLAS }#font[42]{Internal}")
421 latex1.SetTextSize(0.05)
422 latex1.SetTextAlign(13)
424 latex2 = ROOT.TLatex(0.55, 0.82,
"Run " + runNumber)
426 latex2.SetTextSize(0.05)
427 latex2.SetTextAlign(13)
428 latex2.SetTextFont(42)
433 c1.Print(
"run_" + runNumber +
"_events.pdf")
439 c2 = TCanvas(
'c2',
'', 850, 600)
440 c2.SetRightMargin(0.11765)
441 c2.SetLeftMargin(0.11765)
443 latex3 = ROOT.TLatex(0.62, 0.875,
"#font[72]{ATLAS }#font[42]{Internal}")
445 latex3.SetTextSize(0.05)
446 latex3.SetTextAlign(13)
447 latex4 = ROOT.TLatex(0.65, 0.82,
"Run " + runNumber)
449 latex4.SetTextSize(0.05)
450 latex4.SetTextAlign(13)
451 latex4.SetTextFont(42)
454 for j,h
in enumerate(rateHists):
457 if (last_lb - first_lb) > 600:
459 h.SetMarkerColor(colors[j%len(colors)])
460 h.SetLineColor(colors[j%len(colors)])
462 h.SetTitle(filterNames_mAug[j])
463 h.GetXaxis().SetTitle(
"lumi block")
464 h.GetYaxis().SetTitle(
"n events")
465 h.GetXaxis().SetRangeUser(first_lb - 20, last_lb + 20)
466 h.SetStats(ROOT.kFALSE)
472 c2.Print(
"run_" + runNumber +
"_" +
str(j) +
"_events.pdf")
478 totalRateHist.Divide(lbTimeHist)
479 totalRateHist.Multiply(lbScaleHist)
480 for bin
in range(1, totalRateHist.GetNbinsX() + 1):
481 totalRateHist.SetBinError(bin, 0)
483 l1.AddEntry(totalRateHist,
"Overall RPVLL Rate",
"lp")
486 hs2 = THStack(
"hs2",
"");
488 for i,hist
in enumerate(rateHists):
489 hist.SetFillColor(colors[i%len(colors)])
490 hist.SetLineColor(colors[i%len(colors)])
492 hist.SetFillStyle(3004)
493 hist.Divide(lbTimeHist)
494 hist.Multiply(lbScaleHist)
497 l1.AddEntry(hist, filterNames_mAug[i],
"f")
501 totalRateHist.Draw(
"pSAME")
505 hs2.GetXaxis().SetTitle(
"lumi block")
506 hs2.GetYaxis().SetTitle(
"rate [Hz]")
507 hs2.GetYaxis().SetTitleOffset(.75)
509 hs2.GetXaxis().SetRangeUser(first_lb - 20, last_lb + 20)
510 hs2.GetYaxis().SetRangeUser(0,100)
520 c1.Print(
"run_" + runNumber +
"_rate.pdf")
528 for j,h
in enumerate(rateHists):
531 if (last_lb - first_lb) > 600:
533 h.SetMarkerColor(colors[j%len(colors)])
534 h.SetLineColor(colors[j%len(colors)])
537 h.SetTitle(filterNames_mAug[j])
538 h.GetXaxis().SetTitle(
"lumi block")
539 h.GetYaxis().SetTitle(
"rate [Hz]")
540 h.GetXaxis().SetRangeUser(first_lb - 20, last_lb + 20)
541 h.SetStats(ROOT.kFALSE)
547 c2.Print(
"run_" + runNumber +
"_" +
str(j) +
"_rate.pdf")
553 em_col = [ ROOT.kBlue+3, ROOT.kBlue+1, ROOT.kBlue-7, ROOT.kBlue-9,
554 ROOT.kRed+3, ROOT.kRed+1, ROOT.kRed-6, ROOT.kRed-9,
555 ROOT.kCyan+2, ROOT.kTeal-8, ROOT.kCyan-6, ROOT.kCyan,
556 ROOT.kGreen+1, ROOT.kGreen+3, ROOT.kYellow-2, ROOT.kOrange,
557 ROOT.kViolet+8, ROOT.kViolet+3, ROOT.kViolet-9, ROOT.kViolet ]
559 c3 = TCanvas(
'c3',
'', 1000, 600)
560 c3.SetRightMargin(0.25)
561 c3.SetLeftMargin(0.1)
563 l2 = ROOT.TLegend(0.76, 0.4, 0.97, 0.61)
572 ptFilterList = [filterNames_pt100, filterNames_pt120, filterNames_pt130, filterNames_pt140, filterNames_pt150]
573 ptList = [
"100",
"120",
"130",
"140",
"150"]
574 for pt,pf
in enumerate(ptFilterList):
578 hs_ej = THStack(
"hs_ej",
"");
579 for k,h_ej
in enumerate(rateHists):
580 for p,fn
in enumerate(ptFilterList[pt]):
581 if filterNames_mAug[k] == ptFilterList[pt][p]:
582 if 'DiJet' not in filterNames_mAug[k]:
583 h_ej.SetFillColor(em_col[c])
584 h_ej.SetLineColor(em_col[c])
585 h_ej.SetFillStyle(1000)
588 h_ej.SetFillColor(em_col[d])
589 h_ej.SetLineColor(em_col[d])
590 h_ej.SetFillStyle(3004)
593 l2.AddEntry(h_ej, filterNames_mAug[k],
"f")
595 hs_ej.GetXaxis().SetTitle(
"lumi block")
596 hs_ej.GetYaxis().SetTitle(
"rate [Hz]")
597 hs_ej.GetYaxis().SetTitleOffset(.75)
598 hs_ej.GetXaxis().SetRangeUser(first_lb - 20, last_lb + 20)
599 hs_ej.GetYaxis().SetRangeUser(0, 25)
605 c3.Print(
"run_" + runNumber +
"_ej_pt" + ptList[pt] +
"_rate.pdf")
611 hs_em = THStack(
"hs_em",
"");
613 for p,fn
in enumerate(emFilterList):
614 for k,h_em
in enumerate(rateHists):
615 if emFilterList[p] == filterNames_mAug[k]:
616 h_em.SetFillColor(em_col[c])
617 h_em.SetLineColor(em_col[c])
618 h_em.SetFillStyle(1000)
619 if emFilterList[p] ==
'EmergingFilterKernel':
624 l1.AddEntry(h_em, filterNames_mAug[k],
"f")
626 hs_em.GetXaxis().SetTitle(
"lumi block")
627 hs_em.GetYaxis().SetTitle(
"rate [Hz]")
628 hs_em.GetYaxis().SetTitleOffset(.75)
629 hs_em.GetXaxis().SetRangeUser(first_lb - 20, last_lb + 20)
630 hs_em.GetYaxis().SetRangeUser(0, 25)
636 c3.Print(
"run_" + runNumber +
"_ej_em_rate.pdf")
641 hs_di = THStack(
"hs_di",
"");
643 for p,fn
in enumerate(dijetFilterList):
644 for k,h_di
in enumerate(rateHists):
645 if dijetFilterList[p] == filterNames_mAug[k]:
646 h_di.SetFillColor(em_col[d])
647 h_di.SetLineColor(em_col[d])
648 h_di.SetFillStyle(3004)
651 l1.AddEntry(h_di, filterNames_mAug[k],
"f")
653 hs_di.GetXaxis().SetTitle(
"lumi block")
654 hs_di.GetYaxis().SetTitle(
"rate [Hz]")
655 hs_di.GetYaxis().SetTitleOffset(.75)
656 hs_di.GetXaxis().SetRangeUser(first_lb - 20, last_lb + 20)
657 hs_di.GetYaxis().SetRangeUser(0, 25)
663 c3.Print(
"run_" + runNumber +
"_ej_di_rate.pdf")