ATLAS Offline Software
AtlRunQuerySelectorTrigger.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
2 
3 
4 """Provides Trigger related selectors:
5 
6 TriggerSelector Trigger menu from TriggerDB
7 TrigKeySelector SMK
8 BGSKeySelector BGK
9 L1TrigKeySelector L1PSK
10 HLTTrigKeySelector HLTPSK
11 RatesSelector L1 rates from COOL
12 
13 """
14 
15 import re,sys
16 
17 from time import time
18 from collections import defaultdict
19 
20 from PyCool import cool
21 
22 from CoolRunQuery.selector.AtlRunQuerySelectorBase import Selector, RunLBBasedCondition
23 from CoolRunQuery.utils.AtlRunQueryUtils import coolDbConn, GetRanges
24 
25 
26 class TrigKeySelector(RunLBBasedCondition):
27  def __init__(self, name):
28  self.showRelease = False
29  self.showTrigKeys = False
30  self.smkCutRange = None
31  self.relCutRange = None
32  self.trigkeys = None
33  self.release = None
34  super(TrigKeySelector,self).__init__(name=name,
35  dbfolderkey='COOLONL_TRIGGER::/TRIGGER/HLT/HltConfigKeys',
36  channelKeys = [(0,'SMK','MasterConfigurationKey'),
37  (0,'Release','ConfigSource')])
38  self.applySelection = False
39 
40  def setSelectSMK(self,smks):
41  self.trigkeys = smks
42  if self.trigkeys:
43  self.smkCutRange = GetRanges(self.trigkeys)
44  self.applySelection = True
45 
46  def setSelectRelease(self,release):
47  self.release = release
48  if self.release:
49  self.relCutRange = GetRanges(','.join(self.release), intRepFnc=self.relStringToInt)
50  self.applySelection = True
51 
52  def setShow(self, what):
53  if what == 'smk':
54  super(TrigKeySelector,self).setShowOutput('SMK')
55  self.showTrigKeys = True
56  if what == 'release':
57  super(TrigKeySelector,self).setShowOutput('Release')
58  self.showRelease = True
59 
60  def relStringToInt(self, r):
61  major, minor, sub, patch = ([int(x) for x in r.split('.')] + [0,0,0,0])[0:4]
62  if sub<10:
63  sub*=10
64  return 1000000*major+10000*minor+100*sub+patch
65 
66  def __str__(self):
67  if self.applySelection:
68  if self.trigkeys and self.release:
69  return 'SELOUT Checking if SMK matches "%s" and release matches "%s"' % (self.trigkeys,self.release)
70  elif self.trigkeys:
71  return 'SELOUT Checking if SMK matches "%s"' % self.trigkeys
72  else:
73  return 'SELOUT Checking if release matches "%s"' % (self.release)
74  else:
75  if self.showTrigKeys and self.showRelease:
76  return "Retrieving SMK and release version"
77  elif self.showTrigKeys:
78  return "Retrieving SMK"
79  else:
80  return "Retrieving release version"
81 
82  def passes(self,values,key):
83  if self.smkCutRange:
84  smkPass = False
85  try:
86  val = int(values)
87  except ValueError:
88  self.selDataMissing = True
89  smkPass = True
90  else:
91  for cr in self.smkCutRange:
92  if val>=cr[0] and val<=cr[1]:
93  smkPass= True
94  if not smkPass:
95  return False
96  if self.relCutRange:
97  relPass = False
98  val = values[1]
99  if val=='n.a.':
100  self.selDataMissing = True
101  relPass = True
102  else:
103  val = val.split(',')
104  if len(val)>1:
105  val = self.relStringToInt(val[1])
106  for cr in self.relCutRange:
107  if val>=cr[0] and val<=cr[1]:
108  relPass= True
109  else:
110  self.selDataMissing = True
111  relPass = True
112  if not relPass:
113  return False
114  return True
115 
116  def prettyValue(self, value, key):
117  if key=='Release' and value!="n.a." and ',' in value:
118  return value.split(',')[1]
119  return value
120 
121  def valueForStorage(self, condData, key):
122  if key=='Release' and ';' in condData:
123  [db,rel,relfull] = condData.split(';')
124  return {"db" : db, "release" : rel, "releaseFullName" : relfull}
125  elif key == 'SMK':
126  try:
127  smk = int(condData)
128  except ValueError:
129  smk = 0
130  return {"value": smk}
131 
132  def runAfterQuery(self,runlist):
133 
134  from CoolRunQuery.utils.AtlRunQueryTriggerUtils import getSmkNames, getRandom, triggerDBAlias
135 
136  smksByLHCRun = {
137  1: set(),
138  2: set(),
139  3: defaultdict(set)
140  }
141  smkNamesByLHCRun = {}
142 
143  for run in runlist:
144  try:
145  smk = int(run.result['SMK'])
146  except (ValueError, KeyError):
147  continue
148 
149  if run.lhcRun < 3:
150  smksByLHCRun[run.lhcRun].add(smk)
151  else:
152  try:
153  dbAlias = run.data['Release'][0]["db"]
154  except KeyError:
155  smk = run.data['SMK'][0].value
156  dbAlias = "TRIGGERDB_RUN3" if smk>=3000 else "TRIGGERDBDEV1_I8"
157  smksByLHCRun[run.lhcRun][dbAlias].add(smk)
158 
159  smkNamesByLHCRun[1] = getSmkNames(smksByLHCRun[1], triggerDBAlias(lhcRun=1))
160  smkNamesByLHCRun[2] = getSmkNames(smksByLHCRun[2], triggerDBAlias(lhcRun=2))
161  smkNamesByLHCRun[3] = {}
162  for dbAlias in smksByLHCRun[3]:
163  smkNamesByLHCRun[3].update( getSmkNames(smksByLHCRun[3][dbAlias], dbAlias) )
164 
165  for run in runlist:
166  try:
167  smk = int(run.result['SMK'])
168  except (ValueError, KeyError):
169  continue
170 
171  if smk in smkNamesByLHCRun[run.lhcRun]:
172  info = list(smkNamesByLHCRun[run.lhcRun][smk])
173  else:
174  info = ["Name unknown", 0, "no comment"]
175  if info[2]=="" or info[2]=="~":
176  info[2]="no comment"
177  run.stats['SMK'] = {
178  "info": tuple(info),
179  "random": getRandom(smk, run.lhcRun)
180  }
181 
182 
183 class BGSKeySelector(RunLBBasedCondition):
184  def __init__(self, name):
185  self.showBGKeys = False
186  super(BGSKeySelector,self).__init__(name=name,
187  dbfolderkey='COOLONL_TRIGGER::/TRIGGER/LVL1/BunchGroupKey',
188  channelKeys = [(0,'BGS Key','Lvl1BunchGroupConfigurationKey')])
189  def __str__(self):
190  return "Retrieving Bunch group set key"
191 
192  def passes(self,values,key):
193  return True
194 
195  def prettyValue(self, value, key):
196  if not str.isdigit(value):
197  return None
198  return int(value)
199 
200  def runAfterQuery(self,runlist):
201  for k in self.ResultKey():
202  for run in runlist:
203  run.stats[k] = { "blocks" : [], "first" : 0 }
204  entries = run.data[k]
205  if len(entries)==0:
206  continue
207  blocks = []
208  for entry in entries:
209  v = entry.value
210  if len(blocks) > 0 and blocks[-1][0]==v and blocks[-1][2]==entry.startlb:
211  blocks[-1][2] = entry.endlb
212  else:
213  blocks += [ [v, entry.startlb, entry.endlb] ]
214  run.stats[k] = { "blocks" : blocks, "first" : entries[0].value }
215 
216 
217 class L1TrigKeySelector(RunLBBasedCondition):
218  def __init__(self, name):
219  self.showTrigKeys = False
220  super(L1TrigKeySelector,self).__init__(name=name,
221  dbfolderkey='COOLONL_TRIGGER::/TRIGGER/LVL1/Lvl1ConfigKey',
222  channelKeys = [(0,'L1 PSK','Lvl1PrescaleConfigurationKey')])
223 
224  def __str__(self):
225  return "Retrieving L1 PSK"
226 
227  def passes(self,values,key):
228  return True
229 
230  def prettyValue(self, value, key):
231  return int(value) if str.isdigit(value) else None
232 
233  def runAfterQuery(self,runlist):
234  for k in self.ResultKey():
235  for run in runlist:
236  run.stats[k] = { "blocks" : [], "first" : 0 }
237  entries = run.data[k]
238  if len(entries)==0:
239  continue
240  blocks = []
241  for entry in entries:
242  v = entry.value
243  if v == "n.a.":
244  v = None
245  if len(blocks) > 0 and blocks[-1][0]==v and blocks[-1][2]==entry.startlb:
246  blocks[-1][2] = entry.endlb
247  else:
248  blocks += [ [v, entry.startlb, entry.endlb] ]
249  run.stats[k] = { "blocks" : blocks, "first" : entries[0].value }
250  HLTTrigKeySelector.combineHltL1Keys(runlist)
251 
252 
253 class HLTTrigKeySelector(RunLBBasedCondition):
254  def __init__(self, name):
255  self.showTrigKeys = False
256  if Selector.condDB() == 'OFLP200':
257  super(HLTTrigKeySelector,self).__init__(name=name,
258  dbfolderkey='COOLONL_TRIGGER::/TRIGGER/HLT/HltConfigKeys',
259  channelKeys = [(0,'HLT PSK','HltPrescaleConfigurationKey')])
260  else:
261  super(HLTTrigKeySelector,self).__init__(name=name,
262  dbfolderkey='COOLONL_TRIGGER::/TRIGGER/HLT/PrescaleKey',
263  channelKeys = [(0,'HLT PSK','HltPrescaleKey')])
264 
265  def __str__(self):
266  return "Retrieving HLT PSK"
267 
268  def passes(self,values,key):
269  return True
270 
271  def prettyValue(self, value, key):
272  if not str.isdigit(value):
273  return None
274  return int(value)
275 
276  def runAfterQuery(self,runlist):
277  for k in self.ResultKey():
278  for run in runlist:
279  blocks = []
280  run.stats[k] = {}
281  for entry in run.data[k]:
282  v = entry.value
283  if v == "n.a.":
284  v = None
285  if len(blocks) > 0 and blocks[-1][0]==v and blocks[-1][2]==entry.startlb:
286  blocks[-1][2] = entry.endlb
287  else:
288  blocks += [ [v, entry.startlb, entry.endlb] ]
289  run.stats[k] = { "blocks" : blocks, "first" : run.data[k][0].value }
290 
291  HLTTrigKeySelector.combineHltL1Keys(runlist)
292 
293  @classmethod
294  def combineHltL1Keys(cls, runlist):
295  from CoolRunQuery.utils.AtlRunQueryTriggerUtils import isTriggerRun2
296  l1keysByDbAlias = defaultdict(set)
297  hltkeysByDbAlias = defaultdict(set)
298 
299  l1keysRun1 = set() # to collect run 1 keys
300  hltkeysRun1 = set()
301  l1keysRun2 = set() # to collect run 2 keys
302  hltkeysRun2 = set()
303  for run in runlist:
304  if run.lhcRun == 3:
305  try:
306  dbAlias = run.data['Release'][0]["db"]
307  except KeyError:
308  smk = run.data['SMK'][0].value
309  dbAlias = "TRIGGERDB_RUN3" if smk>=3000 else "TRIGGERDBDEV1_I8"
310  if 'L1 PSK' in run.stats:
311  l1keysByDbAlias[dbAlias].update( [x[0] for x in run.stats['L1 PSK']['blocks']] )
312  if 'HLT PSK' in run.stats:
313  hltkeysByDbAlias[dbAlias].update( [x[0] for x in run.stats['HLT PSK']['blocks']] )
314  elif isTriggerRun2(run_number = run.runNr): # run 2
315  if 'L1 PSK' in run.stats:
316  l1keysRun2.update( [x[0] for x in run.stats['L1 PSK']['blocks']] )
317  if 'HLT PSK' in run.stats:
318  hltkeysRun2.update( [x[0] for x in run.stats['HLT PSK']['blocks']] )
319  else: # run 1
320  if 'L1 PSK' in run.stats:
321  l1keysRun1.update( [x[0] for x in run.stats['L1 PSK']['blocks']] )
322  if 'HLT PSK' in run.stats:
323  hltkeysRun1.update( [x[0] for x in run.stats['HLT PSK']['blocks']] )
324 
325  # we need L1 and HLT keys before it makes sense to continue
326  if len(l1keysRun1)+len(l1keysRun2)+len(l1keysByDbAlias) == 0:
327  return
328  if len(hltkeysRun1)+len(hltkeysRun2)+len(hltkeysByDbAlias) == 0:
329  return
330 
331  from CoolRunQuery.utils.AtlRunQueryTriggerUtils import getL1PskNames, getHLTPskNames
332  l1namesRun1 = getL1PskNames(l1keysRun1, lhcRun = 1)
333  hltnamesRun1 = getHLTPskNames(hltkeysRun1, lhcRun = 1)
334  l1namesRun2 = getL1PskNames(l1keysRun2, lhcRun = 2)
335  hltnamesRun2 = getHLTPskNames(hltkeysRun2, lhcRun = 2)
336  l1NamesByDbAlias = {}
337  hltNamesByDbAlias = {}
338  for dbAlias in l1keysByDbAlias:
339  l1NamesByDbAlias[dbAlias] = getL1PskNames(l1keysByDbAlias[dbAlias], dbAlias = dbAlias)
340  for dbAlias in hltkeysByDbAlias:
341  hltNamesByDbAlias[dbAlias] = getHLTPskNames(hltkeysByDbAlias[dbAlias], dbAlias = dbAlias)
342 
343  for run in runlist:
344  if run.lhcRun == 3:
345  try:
346  dbAlias = run.data['Release'][0]["db"]
347  except KeyError:
348  smk = run.data['SMK'][0].value
349  dbAlias = "TRIGGERDB_RUN3" if smk>=3000 else "TRIGGERDBDEV1_I8"
350  l1names = l1NamesByDbAlias[dbAlias]
351  hltnames = hltNamesByDbAlias[dbAlias]
352  elif isTriggerRun2(run_number = run.runNr): # run 2
353  l1names = l1namesRun2
354  hltnames = hltnamesRun2
355  else:
356  l1names = l1namesRun1
357  hltnames = hltnamesRun1
358  if not ('L1 PSK' in run.stats and 'HLT PSK' in run.stats):
359  continue
360  ic = 0
361  blocks = set()
362  for l1key, l1beg, l1end in run.stats['L1 PSK' ]['blocks']:
363  for hltkey, hltbeg, hltend in run.stats['HLT PSK' ]['blocks']:
364  lbmin = max(ic,min(l1beg,hltbeg))
365  lbmax = min(l1end-1,hltend-1)
366  if lbmin > lbmax or lbmin == 0 or lbmax == 0:
367  continue
368  ic = lbmax + 1
369  # accept if new
370  l1name = l1names[l1key] if l1key else ""
371  hltname = hltnames[hltkey] if hltkey else ""
372  elm = (lbmin, lbmax, l1key, hltkey, l1name, hltname)
373  blocks.update([elm])
374  run.stats['PSK' ] = {'blocks' : sorted(list(blocks)) }
375 
376 
377 class RatesSelector(RunLBBasedCondition):
378  def __init__(self, name, trigger=[]):
379  # trigger can be ["*Electron*", "L1_*"]
380  # rate will be printed for all triggers matching the pattern
381 
382  super(RatesSelector,self).__init__(
383  name=name,
384  dbfolderkey='COOLONL_TRIGGER::/TRIGGER/LUMI/LVL1COUNTERS',
385  channelKeys = [(-1,'TriggerRates','TriggerName')]
386  )
387 
388  self.trigger=trigger
389  from CoolRunQuery.AtlRunQuerySelectorWorker import SelectorWorker
390  self.trigSel = SelectorWorker.getRetrieveSelector('trigger','TriggerSelector')
391  if len(trigger)>0:
392  self.trigSel.addShowTriggerPattern(','.join(trigger))
393 
394  def addPattern(self,pattern):
395  if pattern=="" or pattern=="L1":
396  pattern="L1_EM5,L1_TAU5,L1_XE10,L1_J5,L1_MBTS_4_4,L1_MU6"
397  self.trigSel.addShowTriggerPattern(pattern)
398  self.trigger += pattern.split(',')
399 
400 
401  def __str__(self):
402  return "Retrieving trigger rates for %r" % ','.join(self.trigger)
403 
404  def select(self, runlist):
405  start = time()
406  print (self, end='')
407  sys.stdout.flush()
408 
409  fL1R = coolDbConn.GetDBConn(self.schema,db=Selector.condDB()).getFolder(self.folder)
410 
411  for r in runlist:
412  menu = r.result['TriggerMenu']
413 
414  namelookup = 256*['']
415  channellist = []
416  for tr in menu:
417  if not tr.name.startswith("L1_"):
418  continue
419  ch = tr.counter
420  namelookup[ch] = tr.name
421  channellist.append(ch)
422 
423  if len(channellist)>50:
424  r.addResult(self.ResultKey()[0], "Too many L1 triggers requested (%i), maximum is 50" % len(channellist))
425  continue
426 
427  if len(channellist)==0:
428  r.addResult(self.ResultKey()[0], "No match")
429  continue
430 
431  channellist.sort()
432  ch = channellist[0]
433  chanselL1 = cool.ChannelSelection(ch,ch,cool.ChannelSelection.sinceBeforeChannel)
434  for ch in channellist[1:]:
435  chanselL1.addChannel(ch)
436 
437  iovmin=(r.runNr << 32)+0
438  iovmax=((r.runNr+1) << 32)-1
439 
440  countsholder = defaultdict(list)
441 
442  # the hlt part
443  objs = fL1R.browseObjects( iovmin, iovmax, chanselL1)
444  while objs.goToNext():
445  obj=objs.currentRef()
446  ch = obj.channelId()
447  countsholder[namelookup[ch]].append((obj.since()&0xFFFFFFFF,
448  obj.payloadValue('BeforePrescale'),
449  obj.payloadValue('AfterPrescale'),
450  obj.payloadValue('L1Accept')))
451 
452  r.addResult(self.ResultKey()[0], countsholder)
453 
454  duration = time() - start
455 
456  if self.applySelection:
457  print (" ==> %i runs found (%.2f sec)" % (len(runlist),duration))
458  else:
459  print (" ==> Done (%g sec)" % duration)
460 
461  return runlist
462 
463 
464 class TriggerSelector(RunLBBasedCondition):
465 
466  def __init__(self, name, trigger=[]):
467  # trigger can be ["*Electron*", "L1_*"]
468  # will select runs that satiesfy an 'or' of all patterns in the list
469  # a pattern without number are checked for existence
470  # a pattern with number will be checked against the sum of the events in all matching triggers
471  from CoolRunQuery.AtlRunQuerySelectorWorker import SelectorWorker
472  SelectorWorker.getRetrieveSelector('trigkey','TrigKeySelector')
473  SelectorWorker.getRetrieveSelector('l1trigkey','L1TrigKeySelector')
474  SelectorWorker.getRetrieveSelector('hlttrigkey','HLTTrigKeySelector')
475 
476  super(TriggerSelector,self).__init__(name=name,
477  dbfolderkey='COOLONL_TRIGGER::/TRIGGER/HLT/Menu',
478  channelKeys = [(-1,'TriggerMenu','ChainName')])
479 
480  self.triggers = ' or '.join(trigger)
481  self.applySelection = (len(trigger)>0)
484 
485  for s in trigger:
486  s += "$"
487  p = re.compile(s.split()[0].replace(',','|').replace('*','.*').replace('?','.').replace('%','.*'), re.I)
488  self.seltriggerpatterns += [p]
489 
490 
491  def addShowTriggerPattern(self, triggerpattern):
492  if triggerpattern=="":
493  triggerpattern = "*"
494  self.showtriggerpatterns += triggerpattern.split(',')
495 
496  def __str__(self):
497  if self.applySelection:
498  return 'SELOUT Checking if the trigger name matches "%s"' % self.triggers
499  else:
500  return "Retrieving trigger names [%s]" % ','.join(self.showtriggerpatterns)
501 
502 
503  def getL1Prescales(self, runl1psks):
504  """
505  runl1psks is a dict run -> [l1psk,...]
506  """
507  from CoolRunQuery.utils.AtlRunQueryTriggerUtils import getL1Prescales
508  l1pscache = dict()
509  for run_number, pss in runl1psks.items():
510  for l1psk in pss:
511  l1pscache[(run_number,l1psk)] = getL1Prescales(l1psk,run_number = run_number)
512  return l1pscache
513 
514  def getHLTPrescales(self, runhltpsks):
515  """
516  runhltpsks is a dict run -> [hltpsk,...]
517  """
518  from CoolRunQuery.utils.AtlRunQueryTriggerUtils import getHLTPrescales
519  l2pscache = dict()
520  efpscache = dict()
521  for run_number, pss in runhltpsks.items():
522  for psk in pss:
523  l2pscache[(run_number,psk)], efpscache[(run_number,psk)] = getHLTPrescales(psk, run_number = run_number)
524 
525  return l2pscache, efpscache
526 
527 
528  def getMenuFromRun(self, smks):
529  from CoolRunQuery.utils.AtlRunQueryTriggerUtils import getL1Menu, getHLTMenu
530 
531  l1menucache = dict()
532  l2menucache = defaultdict(dict)
533  efmenucache = defaultdict(dict)
534 
535  # fill the menu and prescale caches
536  for smk in set(smks):
537 
538  # the l1 menu
539  l1items = getL1Menu(smk)
540  l1menucache[smk] = l1items
541 
542  # the hlt menu
543  l2chains, efchains = getHLTMenu(smk)
544  d2 = l2menucache[smk] = dict([(c.counter,c) for c in l2chains])
545 
546  # connect the levels (assign lower counter)
547  for chain in efchains:
548  if chain.lowername=="":
549  continue
550  cc = chain.counter
551  if (cc in d2) and (chain.lowername == d2[cc].name):
552  chain.lower = d2[cc]
553  chain.lowercounter = cc
554  continue
555  for l2ch in l2chains:
556  if chain.lowername == l2ch.name:
557  chain.lower = l2ch
558  chain.lowercounter = l2ch.counter
559  break
560 
561  for chain in l2chains:
562  if chain.lowername == "":
563  continue
564  for l1item in l1items:
565  if l1item and chain.lowername == l1item.name:
566  chain.lower = l1item
567  chain.lowercounter = l1item.counter
568  break
569 
570  # set display flag
571  for item in l1items + l2chains + efchains:
572  if item:
573  item.forshow = self.matchShowPattern(item.name)
574 
575  # set 'selected' flag
576  if self.applySelection:
577  for item in l1items + l2chains + efchains:
578  if item:
579  item.forselect = self.matchSelectPattern(item.name)
580 
581  return l1menucache, l2menucache, efmenucache
582 
583 
584  def select(self, runlist):
585  start = time()
586  # some preparation: compile the show patterns
588  if '*' in self.showtriggerpatterns:
589  self.compiledShowPatterns = ['all']
590  else:
591  for p in self.showtriggerpatterns:
592  p += "$"
593  self.compiledShowPatterns += [re.compile(p.replace('*','.*').replace('?','.').replace('%','.*'),re.I)]
594 
595  print (self, end='')
596  sys.stdout.flush()
597  newrunlist = []
598 
599  smks = [int(r.result['SMK']) for r in runlist]
600  runl1psks = dict()
601  runhltpsks = dict()
602  for r in runlist:
603  runl1psks[r.runNr] = [l1psk for (l1psk,firstlb,lastlb) in r.stats['L1 PSK']['blocks']]
604  runhltpsks[r.runNr] = [hltpsk for (hltpsk,firstlb,lastlb) in r.stats['HLT PSK']['blocks']]
605 
606  l1menucache, l2menucache, efmenucache = self.getMenuFromRun(smks)
607 
608  l1pscache = self.getL1Prescales(runl1psks)
609 
610  l2pscache, efpscache = self.getHLTPrescales(runhltpsks) # for RUN 2 only efpscache is filled, l2pscache is None
611 
612  for run in runlist: # go through old runlist and see
613 
614  smk = int(run.result['SMK'])
615  psks = [(x[2],x[3]) for x in run.stats['PSK']['blocks']]
616 
617  l1items = [it for it in l1menucache[smk] if it and (it.forshow or it.forselect)]
618  l2chains = [ch for ch in l2menucache[smk].values() if (ch.forshow or ch.forselect) and not ch.multiseeded]
619  efchains = [ch for ch in efmenucache[smk].values() if (ch.forshow or ch.forselect) and not ch.multiseeded and ch.lower and not ch.lower.multiseeded]
620 
621  value = defaultdict(list)
622 
623  for item in l1items:
624  for l1psk,hltpsk in psks:
625  if not l1psk:
626  value[item].append(None)
627  continue
628  itemps = l1pscache[(run.runNr,l1psk)][item.counter]
629  value[item].append(itemps if itemps>=0 else -1)
630 
631  for l2chain in l2chains:
632  for l1psk,hltpsk in psks:
633  if not l1psk or not hltpsk:
634  value[l2chain].append(None)
635  continue
636  chainps,chainpt = l2pscache[(smk,hltpsk)][l2chain.counter]
637  if chainps<0:
638  value[l2chain].append(-1)
639  continue
640  chainps *= l1pscache[(run.runNr,l1psk)][l2chain.lowercounter]
641  value[l2chain].append(chainps if chainps>=0 else -1)
642 
643  for efchain in efchains:
644  l2chain = efchain.lower
645  for l1psk,hltpsk in psks:
646  if not l1psk or not hltpsk:
647  value[efchain].append(None)
648  continue
649  chainps,chainpt = efpscache[(smk,hltpsk)][efchain.counter]
650  if chainps<0:
651  value[efchain].append(-1)
652  continue
653  l2chainps,l2chainpt = l2pscache[(smk,hltpsk)][l2chain.counter]
654  chainps *= l2chainps
655  if chainps<0:
656  value[efchain].append(-1)
657  continue
658  chainps *= l1pscache[(run.runNr,l1psk)][l2chain.lowercounter]
659  value[efchain].append(chainps if chainps>=0 else -1)
660 
661  # remove all the disabled triggers
662  for tr,pslist in value.items():
663  if not any([ps is None or ps>=0 for ps in pslist]):
664  value.pop(tr)
665 
666  if self.applySelection and not self.passes(value):
667  continue
668  newrunlist += [run.runNr]
669 
670  run.addResult(self.ResultKey()[0], value)
671 
672  runlist = [r for r in runlist if r.runNr in newrunlist]
673 
674  duration = time() - start
675 
676  if self.applySelection:
677  print (" ==> %i runs found (%.2f sec)" % (len(runlist),duration))
678  else:
679  print (" ==> Done (%g sec)" % duration)
680 
681  return runlist
682 
683  def matchShowPattern(self,name):
684  if len(self.compiledShowPatterns)==0 or self.compiledShowPatterns[0]=='all':
685  return True
686  else:
687  return any([p.match(name) for p in self.compiledShowPatterns])
688 
689 
690  def matchSelectPattern(self,name):
691  return any([p.match(name) for p in self.seltriggerpatterns])
692 
693  def prettyValue(self, value):
694  form = []
695  for v in value:
696  if len(v)==2:
697  form += ["%s (%s)" % (v[0],','.join(v[1]))]
698  else:
699  form += ["%s (%s|%s)" % v]
700  return ', '.join(form)
701 
702 
703  def passes(self,triggers):
704  for chain in triggers:
705  if chain.forselect:
706  return True
707  return False
python.selector.AtlRunQuerySelectorTrigger.HLTTrigKeySelector.runAfterQuery
def runAfterQuery(self, runlist)
Definition: AtlRunQuerySelectorTrigger.py:276
python.utils.AtlRunQueryTriggerUtils.getL1Menu
def getL1Menu(smk)
Definition: AtlRunQueryTriggerUtils.py:528
python.selector.AtlRunQuerySelectorTrigger.TrigKeySelector.runAfterQuery
def runAfterQuery(self, runlist)
Definition: AtlRunQuerySelectorTrigger.py:132
DerivationFramework::TriggerMatchingUtils::sorted
std::vector< typename R::value_type > sorted(const R &r, PROJ proj={})
Helper function to create a sorted vector from an unsorted range.
replace
std::string replace(std::string s, const std::string &s2, const std::string &s3)
Definition: hcg.cxx:307
python.selector.AtlRunQuerySelectorTrigger.TrigKeySelector.setShow
def setShow(self, what)
Definition: AtlRunQuerySelectorTrigger.py:52
python.selector.AtlRunQuerySelectorTrigger.BGSKeySelector
Definition: AtlRunQuerySelectorTrigger.py:183
python.selector.AtlRunQuerySelectorTrigger.TriggerSelector.__init__
def __init__(self, name, trigger=[])
Definition: AtlRunQuerySelectorTrigger.py:466
python.selector.AtlRunQuerySelectorTrigger.RatesSelector.trigSel
trigSel
Definition: AtlRunQuerySelectorTrigger.py:390
python.selector.AtlRunQuerySelectorTrigger.TrigKeySelector.__str__
def __str__(self)
Definition: AtlRunQuerySelectorTrigger.py:66
python.selector.AtlRunQuerySelectorTrigger.TriggerSelector.triggers
triggers
Definition: AtlRunQuerySelectorTrigger.py:480
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
min
constexpr double min()
Definition: ap_fixedTest.cxx:26
python.selector.AtlRunQuerySelectorTrigger.TriggerSelector.prettyValue
def prettyValue(self, value)
Definition: AtlRunQuerySelectorTrigger.py:693
python.selector.AtlRunQuerySelectorTrigger.BGSKeySelector.passes
def passes(self, values, key)
Definition: AtlRunQuerySelectorTrigger.py:192
python.selector.AtlRunQuerySelectorTrigger.HLTTrigKeySelector
Definition: AtlRunQuerySelectorTrigger.py:253
python.selector.AtlRunQuerySelectorTrigger.L1TrigKeySelector.prettyValue
def prettyValue(self, value, key)
Definition: AtlRunQuerySelectorTrigger.py:230
python.selector.AtlRunQuerySelectorTrigger.HLTTrigKeySelector.passes
def passes(self, values, key)
Definition: AtlRunQuerySelectorTrigger.py:268
python.selector.AtlRunQuerySelectorTrigger.TriggerSelector.select
def select(self, runlist)
Definition: AtlRunQuerySelectorTrigger.py:584
python.utils.AtlRunQueryTriggerUtils.getSmkNames
def getSmkNames(smks, dbAlias)
Definition: AtlRunQueryTriggerUtils.py:464
python.selector.AtlRunQuerySelectorTrigger.TrigKeySelector.valueForStorage
def valueForStorage(self, condData, key)
Definition: AtlRunQuerySelectorTrigger.py:121
python.selector.AtlRunQuerySelectorTrigger.BGSKeySelector.__str__
def __str__(self)
Definition: AtlRunQuerySelectorTrigger.py:189
python.selector.AtlRunQuerySelectorTrigger.TrigKeySelector.setSelectSMK
def setSelectSMK(self, smks)
Definition: AtlRunQuerySelectorTrigger.py:40
python.selector.AtlRunQuerySelectorTrigger.HLTTrigKeySelector.prettyValue
def prettyValue(self, value, key)
Definition: AtlRunQuerySelectorTrigger.py:271
python.selector.AtlRunQuerySelectorTrigger.TriggerSelector.getMenuFromRun
def getMenuFromRun(self, smks)
Definition: AtlRunQuerySelectorTrigger.py:528
python.utils.AtlRunQueryTriggerUtils.getHLTPskNames
def getHLTPskNames(psk, dbAlias=None, run_number=None, smk=None, lhcRun=None)
Definition: AtlRunQueryTriggerUtils.py:442
python.selector.AtlRunQuerySelectorTrigger.RatesSelector.select
def select(self, runlist)
Definition: AtlRunQuerySelectorTrigger.py:404
dumpHVPathFromNtuple.append
bool append
Definition: dumpHVPathFromNtuple.py:91
python.selector.AtlRunQuerySelectorTrigger.TrigKeySelector.trigkeys
trigkeys
Definition: AtlRunQuerySelectorTrigger.py:32
python.selector.AtlRunQuerySelectorTrigger.TriggerSelector.seltriggerpatterns
seltriggerpatterns
Definition: AtlRunQuerySelectorTrigger.py:482
python.selector.AtlRunQuerySelectorTrigger.TriggerSelector.getHLTPrescales
def getHLTPrescales(self, runhltpsks)
Definition: AtlRunQuerySelectorTrigger.py:514
python.selector.AtlRunQuerySelectorTrigger.TriggerSelector.__str__
def __str__(self)
Definition: AtlRunQuerySelectorTrigger.py:496
python.Bindings.values
values
Definition: Control/AthenaPython/python/Bindings.py:808
python.selector.AtlRunQuerySelectorTrigger.RatesSelector.addPattern
def addPattern(self, pattern)
Definition: AtlRunQuerySelectorTrigger.py:394
python.utils.AtlRunQueryTriggerUtils.triggerDBAlias
def triggerDBAlias(run_number=None, smk=None, lhcRun=None)
Definition: AtlRunQueryTriggerUtils.py:32
python.selector.AtlRunQuerySelectorTrigger.TriggerSelector
Definition: AtlRunQuerySelectorTrigger.py:464
python.selector.AtlRunQuerySelectorTrigger.HLTTrigKeySelector.__str__
def __str__(self)
Definition: AtlRunQuerySelectorTrigger.py:265
python.selector.AtlRunQuerySelectorTrigger.L1TrigKeySelector
Definition: AtlRunQuerySelectorTrigger.py:217
python.selector.AtlRunQuerySelectorTrigger.TrigKeySelector.relStringToInt
def relStringToInt(self, r)
Definition: AtlRunQuerySelectorTrigger.py:60
python.selector.AtlRunQuerySelectorTrigger.TrigKeySelector.showTrigKeys
showTrigKeys
Definition: AtlRunQuerySelectorTrigger.py:29
python.selector.AtlRunQuerySelectorTrigger.TrigKeySelector.release
release
Definition: AtlRunQuerySelectorTrigger.py:33
python.selector.AtlRunQuerySelectorTrigger.TrigKeySelector.relCutRange
relCutRange
Definition: AtlRunQuerySelectorTrigger.py:31
python.selector.AtlRunQuerySelectorTrigger.TrigKeySelector
Definition: AtlRunQuerySelectorTrigger.py:26
python.selector.AtlRunQuerySelectorTrigger.TrigKeySelector.selDataMissing
selDataMissing
Definition: AtlRunQuerySelectorTrigger.py:88
python.selector.AtlRunQuerySelectorTrigger.L1TrigKeySelector.runAfterQuery
def runAfterQuery(self, runlist)
Definition: AtlRunQuerySelectorTrigger.py:233
python.selector.AtlRunQuerySelectorTrigger.L1TrigKeySelector.__init__
def __init__(self, name)
Definition: AtlRunQuerySelectorTrigger.py:218
add
bool add(const std::string &hname, TKey *tobj)
Definition: fastadd.cxx:55
python.selector.AtlRunQuerySelectorTrigger.BGSKeySelector.__init__
def __init__(self, name)
Definition: AtlRunQuerySelectorTrigger.py:184
histSizes.list
def list(name, path='/')
Definition: histSizes.py:38
python.selector.AtlRunQuerySelectorTrigger.TriggerSelector.applySelection
applySelection
Definition: AtlRunQuerySelectorTrigger.py:481
python.selector.AtlRunQuerySelectorTrigger.HLTTrigKeySelector.showTrigKeys
showTrigKeys
Definition: AtlRunQuerySelectorTrigger.py:255
python.utils.AtlRunQueryTriggerUtils.getRandom
def getRandom(smk, lhcRun)
Definition: AtlRunQueryTriggerUtils.py:612
CxxUtils::set
constexpr std::enable_if_t< is_bitmask_v< E >, E & > set(E &lhs, E rhs)
Convenience function to set bits in a class enum bitmask.
Definition: bitmask.h:232
python.selector.AtlRunQuerySelectorTrigger.TriggerSelector.showtriggerpatterns
showtriggerpatterns
Definition: AtlRunQuerySelectorTrigger.py:483
python.selector.AtlRunQuerySelectorTrigger.TrigKeySelector.applySelection
applySelection
Definition: AtlRunQuerySelectorTrigger.py:38
python.selector.AtlRunQuerySelectorTrigger.L1TrigKeySelector.__str__
def __str__(self)
Definition: AtlRunQuerySelectorTrigger.py:224
python.selector.AtlRunQuerySelectorTrigger.TrigKeySelector.setSelectRelease
def setSelectRelease(self, release)
Definition: AtlRunQuerySelectorTrigger.py:46
TCS::join
std::string join(const std::vector< std::string > &v, const char c=',')
Definition: Trigger/TrigT1/L1Topo/L1TopoCommon/Root/StringUtils.cxx:10
python.selector.AtlRunQuerySelectorTrigger.TriggerSelector.getL1Prescales
def getL1Prescales(self, runl1psks)
Definition: AtlRunQuerySelectorTrigger.py:503
python.selector.AtlRunQuerySelectorTrigger.TriggerSelector.compiledShowPatterns
compiledShowPatterns
Definition: AtlRunQuerySelectorTrigger.py:587
python.selector.AtlRunQuerySelectorTrigger.RatesSelector.trigger
trigger
Definition: AtlRunQuerySelectorTrigger.py:388
python.selector.AtlRunQuerySelectorTrigger.TrigKeySelector.showRelease
showRelease
Definition: AtlRunQuerySelectorTrigger.py:28
python.selector.AtlRunQuerySelectorTrigger.TriggerSelector.matchSelectPattern
def matchSelectPattern(self, name)
Definition: AtlRunQuerySelectorTrigger.py:690
python.selector.AtlRunQuerySelectorTrigger.HLTTrigKeySelector.combineHltL1Keys
def combineHltL1Keys(cls, runlist)
Definition: AtlRunQuerySelectorTrigger.py:294
python.utils.AtlRunQueryUtils.GetRanges
def GetRanges(rangestr, intRepFnc=stringToIntOrTime, maxval=1<< 30)
Definition: AtlRunQueryUtils.py:327
python.selector.AtlRunQuerySelectorTrigger.L1TrigKeySelector.passes
def passes(self, values, key)
Definition: AtlRunQuerySelectorTrigger.py:227
python.selector.AtlRunQuerySelectorTrigger.RatesSelector.__init__
def __init__(self, name, trigger=[])
Definition: AtlRunQuerySelectorTrigger.py:378
python.selector.AtlRunQuerySelectorTrigger.TriggerSelector.passes
def passes(self, triggers)
Definition: AtlRunQuerySelectorTrigger.py:703
python.selector.AtlRunQuerySelectorTrigger.RatesSelector
Definition: AtlRunQuerySelectorTrigger.py:377
python.utils.AtlRunQueryTriggerUtils.isTriggerRun2
def isTriggerRun2(run_number=None, smk=None, isRun2=None)
Definition: AtlRunQueryTriggerUtils.py:20
python.selector.AtlRunQuerySelectorTrigger.TrigKeySelector.prettyValue
def prettyValue(self, value, key)
Definition: AtlRunQuerySelectorTrigger.py:116
python.CaloAddPedShiftConfig.int
int
Definition: CaloAddPedShiftConfig.py:45
python.selector.AtlRunQuerySelectorTrigger.TrigKeySelector.smkCutRange
smkCutRange
Definition: AtlRunQuerySelectorTrigger.py:30
python.selector.AtlRunQuerySelectorTrigger.TrigKeySelector.__init__
def __init__(self, name)
Definition: AtlRunQuerySelectorTrigger.py:27
python.selector.AtlRunQuerySelectorTrigger.L1TrigKeySelector.showTrigKeys
showTrigKeys
Definition: AtlRunQuerySelectorTrigger.py:219
python.utils.AtlRunQueryTriggerUtils.getL1PskNames
def getL1PskNames(psk, dbAlias=None, run_number=None, smk=None, lhcRun=None)
Definition: AtlRunQueryTriggerUtils.py:418
python.selector.AtlRunQuerySelectorTrigger.TriggerSelector.matchShowPattern
def matchShowPattern(self, name)
Definition: AtlRunQuerySelectorTrigger.py:683
python.selector.AtlRunQuerySelectorTrigger.TriggerSelector.addShowTriggerPattern
def addShowTriggerPattern(self, triggerpattern)
Definition: AtlRunQuerySelectorTrigger.py:491
python.selector.AtlRunQuerySelectorTrigger.HLTTrigKeySelector.__init__
def __init__(self, name)
Definition: AtlRunQuerySelectorTrigger.py:254
python.selector.AtlRunQuerySelectorTrigger.BGSKeySelector.prettyValue
def prettyValue(self, value, key)
Definition: AtlRunQuerySelectorTrigger.py:195
python.selector.AtlRunQuerySelectorTrigger.BGSKeySelector.runAfterQuery
def runAfterQuery(self, runlist)
Definition: AtlRunQuerySelectorTrigger.py:200
python.selector.AtlRunQuerySelectorTrigger.RatesSelector.__str__
def __str__(self)
Definition: AtlRunQuerySelectorTrigger.py:401
python.selector.AtlRunQuerySelectorTrigger.BGSKeySelector.showBGKeys
showBGKeys
Definition: AtlRunQuerySelectorTrigger.py:185
python.selector.AtlRunQuerySelectorTrigger.TrigKeySelector.passes
def passes(self, values, key)
Definition: AtlRunQuerySelectorTrigger.py:82
python.utils.AtlRunQueryTriggerUtils.getHLTMenu
def getHLTMenu(smk)
Definition: AtlRunQueryTriggerUtils.py:488