ATLAS Offline Software
compileRPVLLRates_emergingFilterTest.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
2 
3 # the input log file should have the output of:
4 # $ python readFiles.py [output file name] [InputFolderWithLogFiles]
5 # before deleted, can find log files on eos -- ex:
6 # /eos/atlas/atlastier0/tzero/prod/data16_13TeV/physics_Main/00303304/data16_13TeV.00303304.physics_Main.daq.RAW.f716.recon.task.LOG/
7 # log files only stay around for a few weeks, or the folder is empty and only LOGARC remains
8 # logs can likely be recovered from LOGARC files, if necessary
9 
10 # for shorter or local individual runs, you can also use a grep command:
11 # grep -E "RAWtoALL.*RPVLL.*Events|BSESOutputSvcStreamDRAW_RPVLL.*events" INPUT_LOG_FILES > rpvllLog_runNumber.out &
12 
13 # 2*n_filters+1 lines should be recovered from each file!
14 # 22 filters + DVAugmentationKernel --> 2*23+1 = 47
15 
16 # compile rate estimates w/:
17 # $ python compileRPVLLRates.py rpvllLog_runNumber.out RUNNUMBER lbTimes_runNumber.out
18 # rpvllLog = output from readFiles.py or grep command
19 # RUNNUMBER is data run number (for labeling plots)
20 # lbTimes = list of lumiblocks info (can be copied from runquery)
21 # --> column 1: lumiblock; column 2: lb duration; column 3: events per lb
22 
23 # NOTE ON lbTimes FILE:
24 # for easiest copying from runquery, code designed to read file with (at least) three columns:
25 # lb | start time (not used) | duration | nEvents in lb (optional)
26 # --> second column must contain any non-empty string
27 # --> fourth column is optional and used for scaling of analyses of partial lb's
28 
29 # outputs n_filters+1 rate plots:
30 # one plot for overall rate + stacked filter rates
31 # n_filters plots for individual filter rates -- one per filter
32 # plots outputted into "plots/" directory
33 # --> MAKE SURE THIS EXISTS IN CURRENT WORKING DIRECTORY (wherever script called from)
34 
35 # NOTE: for personal runs, RAWtoDRAW_RPVLL log files need to be in following format to work w/ this script:
36 # *._lb*._*
37 
38 
41 
42 import sys
43 import ROOT
44 from ROOT import gROOT, TCanvas, TH1F, THStack, gPad, gStyle
45 import math
46 from decimal import Decimal
47 
48 
49 
50 
51 mypath = sys.argv[1]
52 runNumber = sys.argv[2]
53 lb_rates = sys.argv[3]
54 
55 
56 
57 
59 filterNames = [
60  'DiLep_SiElectronFilterKernel',
61  'DiLep_SiPhotonXFilterKernel',
62  'DiLep_SiMuonFilterKernel',
63  'DiLep_DiElectronFilterKernel',
64  'DiLep_DiPhotonFilterKernel',
65  'DiLep_DiElPhFilterKernel',
66  'DiLep_DiLoElPhFilterKernel',
67  'DVAugmentationKernel',
68  'DVMuonFilterKernel',
69  'DV_PhotonFilterKernel',
70  'DV_PhotonPlusTLJetFilterKernel',
71  'DV_MultiJetFilterKernel',
72  'DV_METFilterKernel',
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',
115  'HnlFilterKernel',
116  'HV_MuvtxFilterKernel',
117  'HV_JetMETFilterKernel',
118  'HV_CalRatioFilterKernel' ]
119 
120 # list filter names excluding DVAugmentationKernel -- want to ignore completely
121 filterNames_mAug = [fn for fn in filterNames if fn != 'DVAugmentationKernel']
122 
123 # list pt100 emerging filters
124 filterNames_pt100 = [fn for fn in filterNames if ('Emerging' in fn and 'Pt' not in fn)]
125 # list pt120 emerging filters
126 filterNames_pt120 = [fn for fn in filterNames if ('Emerging' in fn and 'Pt120' in fn)]
127 # list pt130 emerging filters
128 filterNames_pt130 = [fn for fn in filterNames if ('Emerging' in fn and 'Pt130' in fn)]
129 # list pt140 emerging filters
130 filterNames_pt140 = [fn for fn in filterNames if ('Emerging' in fn and 'Pt140' in fn)]
131 # list pt150 emerging filters
132 filterNames_pt150 = [fn for fn in filterNames if ('Emerging' in fn and 'Pt150' in fn)]
133 
134 # extract just emerging + just dijet filters from each list
135 # --> em_120, di_120
136 # --> concatenate em + di lists --> em, di
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]
139 #emFilterList = filterNames_em_pt100 + filterNames_di_pt100
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:
143  print(i)
144 print('')
145 for i in dijetFilterList:
146  print(i)
147 print('')
148 
149 
150 
151 # numbers of filters in different lists
152 nf = len(filterNames) # number of filters
153 nft = nf*2+1 # number of lines per lumiblock
154 
155 # indices of certain filters
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)
160 print('')
161 
162 
163 
164 # class to fill rate histograms with number of passing events per lumiblock
165 # lumiblock = current lumiblock
166 # lbEventList = filter event info for current lumiblock
167 # --> n events processed + passed for each filter + n total rpvll events
168 # rateHists = individual filter rate histograms
169 # totalRateHist = overall rpvll rate histogram
170 def end_lb(lumiBlock, lbEventList = [], rateHists = [], totalRateHist = 0):
171  n_passed_lb = lbEventList[nft-1] # get total number of rpvll events per lumiblock
172  lbFilters = [0] * (nf-1) # initialize list of filter-passing events for specific lb
173  for i in range (0,nf):
174  # exclude DVAug -- don't want to plot this
175  if i < ix_dv:
176  # every second line contains number of accepted events (starts from 0)
177  lbFilters[i] = lbEventList[2*i+1]
178  elif i > ix_dv:
179  lbFilters[i-1] = lbEventList[2*i+1]
180  # fill each filter histogram with number of filter-passing events
181  for i,lb in enumerate(lbFilters):
182  rateHists[i].Fill(lumiBlock, float(lb))
183  # fill total-rate histogram with number of overall rpvll-passing events
184  totalRateHist.Fill(lumiBlock, float(n_passed_lb))
185  return
186 
187 
188 
189 
191 rateHists = []
192 for i in range(0,nf-1):
193  rateHists.append(TH1F("ratePerLB_filter" + str(i), "ratePerLB_filter;lb;rate", 2500, 0, 2500))
194  rateHists[i].Sumw2()
195 eventHists = []
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()
199 # overall rate histogram
200 totalRateHist = TH1F("ratePerLB_overall", "ratePerLB_overall;lb;rate", 2500, 0, 2500)
201 totalRateHist.Sumw2()
202 
203 # lumiblock time hists (for calculating rate)
204 lbTimeHist = TH1F("lbTimeHist", "lbTimeHist", 2500, 0, 2500)
205 lbList = open(lb_rates).readlines()
206 n_lb = 0
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)
210  n_lb += 1
211 
212 
213 
214 
216 List = open(mypath).readlines()
217 
218 # initialize lists to hold filter data from log files
219 lbEventList = [0] * nft # events per lumiblock
220 eventList = [0] * nft # total events for all lumiblocks
221 
222 # initialize lumiblock variables
223 first_lb = 0
224 first_line = List[0]
225 for lb1 in first_line.split("._"):
226  if "lb" in lb1: first_lb = int(lb1[2:])
227 current_lb = first_lb
228 last_lb = 2500 # will change based on data in file
229 
230 #initialize list to hold total number of processed events per lumiblock
231 procEvents = []
232 lb_i = 0
233 
234 # loop over lines in filter-data list (from rpvll log output)
235 for lineNo,line in enumerate(List):
236  # if line number mod 2*n_filters+1 = 0, we're at the beginning of filter list
237  if lineNo % nft == 0:
238  # extract lumiblock info from line
239  for lb in line.split("._"):
240  if "lb" in lb:
241  # if lumiblock read from line not "current_lb"
242  # we've collected all info for current lumiblock --> start of new lb
243  # --> call end_lb for lumiblock just processed + reset
244  if int(lb[2:]) != current_lb:
245  end_lb(current_lb, lbEventList, rateHists, totalRateHist)
246  # save number of events processed per lumiblock
247  procEvents.append(lbEventList[0])
248  # set current lumiblock to lumiblock read from line
249  current_lb = int(lb[2:])
250  # re-initialize lbEventList -- set all elements to zero
251  lbEventList = [0] * nft
252  # catches any repeats ??? -- necessary to avoid overcounting somehow
253  if (lineNo < len(List) - nft):
254  if (line.split()[0][:-10] == List[lineNo+nft].split()[0][:-10]):
255  continue
256  # get number of events analyzed/accepted from each line
257  s = line.split()[-1]
258  # add number of events analyzed/accepted per lb to lbEventList
259  lbEventList[lineNo % nft] += int(s)
260  eventList[lineNo % nft] += int(s)
261 
262 # run end_lb for last lumiblock; set last_lb to last lb in file; get n events from last lb
263 end_lb(current_lb, lbEventList, rateHists, totalRateHist)
264 last_lb = current_lb
265 procEvents.append(lbEventList[0])
266 
267 
268 
269 
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')
275 print('')
276 
277 # calculate fraction of events passing each individual filter
278 fracList_total = [0] * nf # fraction of ALL events passing filter
279 fracList_RPVLL = [0] * nf # fraction of RPVLL events passing filter
280 filterEvents = [0] * nf
281 closureTest = 0
282 
283 print('FRACTION OF (RPVLL | TOTAL) EVENTS PASSING EACH FILTER:')
284 for filterNo in range(0, nf):
285  closureTest += eventList[filterNo*2+1] # add up all filter-passing events
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]
289 # if filterNo != ix_dv:
290 # print filterNames[filterNo], ' -- ', '%.2E' % Decimal(fracList_RPVLL[filterNo]), ' | ', '%.2E' % Decimal(fracList_total[filterNo])
291 #print ''
292 
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')
297 print('')
298 
299 
314 
315 
316 
317 
318 lbEventHist = TH1F("lbEventHist", "lbEventHist", 2500, 0, 2500)
319 lbFullEventHist = TH1F("lbFullEventHist", "lbFullEventHist", 2500, 0, 2500)
320 lbScaleHist = TH1F("lbScaleHist", "lbScaleHist", 2500, 0, 2500)
321 # parse lbTimes file for total events per lumiblock per run -- for scaling partial runs
322 scale = []
323 l = 0
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]))
332  else:
333  lbFullEventHist.Fill(float(line.split()[0]), procEvents[l])
334  scale.append(1)
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])
338  l += 1
339 print('')
340 
341 
342 
343 
345 colors = [
346 # seven for DiLep
347 ROOT.kBlue+3, ROOT.kBlue+1, ROOT.kBlue-4, ROOT.kBlue-2, ROOT.kBlue-7, ROOT.kBlue-5, ROOT.kBlue-9,
348 # six for DV
349 ROOT.kRed+3, ROOT.kRed+1, ROOT.kRed-2, ROOT.kRed-4, ROOT.kRed-6, ROOT.kRed-9,
350 # four for kinked track
351 ROOT.kCyan+2, ROOT.kTeal-8, ROOT.kCyan-6, ROOT.kCyan,
352 # five for emerging
353 ROOT.kGreen+1, ROOT.kGreen+3, ROOT.kSpring+4, ROOT.kYellow-2, ROOT.kOrange,
354 # HNL
355 ROOT.kOrange+8,
356 # three for HV
357 ROOT.kViolet+8, ROOT.kViolet+3, ROOT.kViolet-9,
358 # extras
359 ROOT.kViolet, ROOT.kMagenta+2, ROOT.kPink+10, ROOT.kPink+5, ROOT.kPink-5 ]
360 
361 
362 # ALL FILTERS -- STACK PLOT
363 # create + configure new canvas
364 c1 = TCanvas('c1', '', 1000, 600)
365 c1.SetRightMargin(0.25)
366 c1.SetLeftMargin(0.1)
367 
368 # create + configure new legend
369 l1 = ROOT.TLegend(0.76, 0.1, 0.97, 0.91)
370 l1.SetFillColor(0)
371 l1.SetFillStyle(0)
372 l1.SetBorderSize(0)
373 l1.SetTextSize(0.02)
374 
375 # FILTER EVENTS
376 # configure total rate hist
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) # no appreciable errors on rate
385 # add total rpvll event hist entry to legend
386 l1.AddEntry(totalRateHist, "Overall RPVLL Events", "lp")
387 
388 # initialize stack for all filter rate hists
389 hs1 = THStack("hs1", "");
390 # add individual filter rate hists to stack
391 for i,hist in enumerate(rateHists):
392  hist.SetFillColor(colors[i%len(colors)])
393  hist.SetLineColor(colors[i%len(colors)])
394  if i >= len(colors):
395  hist.SetFillStyle(3004)
396  hs1.Add(hist)
397  # add individual event entries to legend
398  l1.AddEntry(hist, filterNames_mAug[i], "f")
399 
400 # draw individual filter stack + overall rate hist
401 hs1.Draw("HIST")
402 totalRateHist.Draw("pSAME")
403 
404 
406 hs1.GetXaxis().SetTitle("lumi block")
407 hs1.GetYaxis().SetTitle("n events")
408 hs1.GetYaxis().SetTitleOffset(.75)
409 # set axis ranges
410 hs1.GetXaxis().SetRangeUser(first_lb - 20, last_lb + 20)
411 hs1.GetYaxis().SetRangeUser(0,100)
412 # set tick marks on all axes
413 gPad.SetTicks(1,1)
414 
415 # draw legend
416 l1.Draw()
417 
418 # add text to plot
419 latex1 = ROOT.TLatex(0.52, 0.875, "#font[72]{ATLAS }#font[42]{Internal}")
420 latex1.SetNDC()
421 latex1.SetTextSize(0.05)
422 latex1.SetTextAlign(13)
423 latex1.Draw()
424 latex2 = ROOT.TLatex(0.55, 0.82, "Run " + runNumber)
425 latex2.SetNDC()
426 latex2.SetTextSize(0.05)
427 latex2.SetTextAlign(13)
428 latex2.SetTextFont(42)
429 latex2.Draw()
430 
431 # print stack
432 c1.Update()
433 c1.Print("run_" + runNumber + "_events.pdf")
434 c1.Clear()
435 l1.Clear()
436 
437 
438 # INDIVIDUAL FILTER EVENTS
439 c2 = TCanvas('c2', '', 850, 600)
440 c2.SetRightMargin(0.11765)
441 c2.SetLeftMargin(0.11765)
442 
443 latex3 = ROOT.TLatex(0.62, 0.875, "#font[72]{ATLAS }#font[42]{Internal}")
444 latex3.SetNDC()
445 latex3.SetTextSize(0.05)
446 latex3.SetTextAlign(13)
447 latex4 = ROOT.TLatex(0.65, 0.82, "Run " + runNumber)
448 latex4.SetNDC()
449 latex4.SetTextSize(0.05)
450 latex4.SetTextAlign(13)
451 latex4.SetTextFont(42)
452 
453 # loop over filter rate histograms
454 for j,h in enumerate(rateHists):
455  h.SetMarkerStyle(22)
456  h.SetMarkerSize(1.2)
457  if (last_lb - first_lb) > 600:
458  h.SetMarkerSize(0.6)
459  h.SetMarkerColor(colors[j%len(colors)])
460  h.SetLineColor(colors[j%len(colors)])
461  h.Draw("P")
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)
467  gPad.SetTicks(1,1)
468  gStyle.SetErrorX(0)
469  latex3.Draw()
470  latex4.Draw()
471  c2.Update()
472  c2.Print("run_" + runNumber + "_" + str(j) + "_events.pdf")
473 
474 
475 # FILTER RATES
476 c1.cd()
477 # configure total rate hist
478 totalRateHist.Divide(lbTimeHist)
479 totalRateHist.Multiply(lbScaleHist)
480 for bin in range(1, totalRateHist.GetNbinsX() + 1):
481  totalRateHist.SetBinError(bin, 0) # no appreciable errors on rate
482 # add total rpvll rate hist entry to legend
483 l1.AddEntry(totalRateHist, "Overall RPVLL Rate", "lp")
484 
485 # initialize stack for all filter rate hists
486 hs2 = THStack("hs2", "");
487 # add individual filter rate hists to stack
488 for i,hist in enumerate(rateHists):
489  hist.SetFillColor(colors[i%len(colors)])
490  hist.SetLineColor(colors[i%len(colors)])
491  if i >= len(colors):
492  hist.SetFillStyle(3004)
493  hist.Divide(lbTimeHist) # calculate rate estimate
494  hist.Multiply(lbScaleHist) # scale to full lb
495  hs2.Add(hist)
496  # add individual event entries to legend
497  l1.AddEntry(hist, filterNames_mAug[i], "f")
498 
499 # draw individual filter stack + overall rate hist
500 hs2.Draw("HIST")
501 totalRateHist.Draw("pSAME")
502 
503 
505 hs2.GetXaxis().SetTitle("lumi block")
506 hs2.GetYaxis().SetTitle("rate [Hz]")
507 hs2.GetYaxis().SetTitleOffset(.75)
508 # set axis ranges
509 hs2.GetXaxis().SetRangeUser(first_lb - 20, last_lb + 20)
510 hs2.GetYaxis().SetRangeUser(0,100)
511 # set tick marks on all axes
512 gPad.SetTicks(1,1)
513 # draw legend
514 l1.Draw()
515 # add text to plot
516 latex1.Draw()
517 latex2.Draw()
518 # print stack
519 c1.Update()
520 c1.Print("run_" + runNumber + "_rate.pdf")
521 c1.Clear()
522 l1.Clear()
523 
524 
525 # INDIVIDUAL FILTERS RATES
526 c2.cd()
527 # loop through filter rate histograms
528 for j,h in enumerate(rateHists):
529  h.SetMarkerStyle(22)
530  h.SetMarkerSize(1.2)
531  if (last_lb - first_lb) > 600:
532  h.SetMarkerSize(0.6)
533  h.SetMarkerColor(colors[j%len(colors)])
534  h.SetLineColor(colors[j%len(colors)])
535  # already divided by lb-times + multiplied by scale
536  h.Draw("P")
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)
542  gPad.SetTicks(1,1)
543  gStyle.SetErrorX(0)
544  latex3.Draw()
545  latex4.Draw()
546  c2.Update()
547  c2.Print("run_" + runNumber + "_" + str(j) + "_rate.pdf")
548 
549 
550 
551 
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 ]
558 
559 c3 = TCanvas('c3', '', 1000, 600)
560 c3.SetRightMargin(0.25)
561 c3.SetLeftMargin(0.1)
562 
563 l2 = ROOT.TLegend(0.76, 0.4, 0.97, 0.61)
564 l2.SetFillColor(0)
565 l2.SetFillStyle(0)
566 l2.SetBorderSize(0)
567 l2.SetTextSize(0.02)
568 
569 
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):
575  c = pt*4
576  d = pt*4
577  # loop over histograms -- only grab those for emerging filters
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)
586  c += 1
587  else:
588  h_ej.SetFillColor(em_col[d])
589  h_ej.SetLineColor(em_col[d])
590  h_ej.SetFillStyle(3004)
591  d += 1
592  hs_ej.Add(h_ej)
593  l2.AddEntry(h_ej, filterNames_mAug[k], "f")
594  hs_ej.Draw("HIST")
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) # SET Y-RANGE SAME FOR ALL STACKS (HOW?)
600  gPad.SetTicks(1, 1)
601  l2.Draw()
602  latex1.Draw()
603  latex2.Draw()
604  c3.Update()
605  c3.Print("run_" + runNumber + "_ej_pt" + ptList[pt] + "_rate.pdf")
606  c3.Clear()
607  l2.Clear()
608 
609 
610 
611 hs_em = THStack("hs_em", "");
612 c = 0
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':
620  c += 4
621  else:
622  c += 1
623  hs_em.Add(h_em)
624  l1.AddEntry(h_em, filterNames_mAug[k], "f")
625 hs_em.Draw("HIST")
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)
631 gPad.SetTicks(1, 1)
632 l1.Draw()
633 latex1.Draw()
634 latex2.Draw()
635 c3.Update()
636 c3.Print("run_" + runNumber + "_ej_em_rate.pdf")
637 c3.Clear()
638 l1.Clear()
639 
640 
641 hs_di = THStack("hs_di", "");
642 d = 0
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)
649  d += 1
650  hs_di.Add(h_di)
651  l1.AddEntry(h_di, filterNames_mAug[k], "f")
652 hs_di.Draw("HIST")
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)
658 gPad.SetTicks(1, 1)
659 l1.Draw()
660 latex1.Draw()
661 latex2.Draw()
662 c3.Update()
663 c3.Print("run_" + runNumber + "_ej_di_rate.pdf")
664 c3.Clear()
665 l1.Clear()
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
compileRPVLLRates_emergingFilterTest.end_lb
def end_lb(lumiBlock, lbEventList=[], rateHists=[], totalRateHist=0)
Definition: compileRPVLLRates_emergingFilterTest.py:170
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:195
Trk::open
@ open
Definition: BinningType.h:40
Muon::print
std::string print(const MuPatSegment &)
Definition: MuonTrackSteering.cxx:28
str
Definition: BTagTrackIpAccessor.cxx:11
python.TrigEgammaMonitorHelper.TH1F
def TH1F(name, title, nxbins, bins_par2, bins_par3=None, path='', **kwargs)
Definition: TrigEgammaMonitorHelper.py:24
readCCLHist.float
float
Definition: readCCLHist.py:83
Trk::split
@ split
Definition: LayerMaterialProperties.h:38