ATLAS Offline Software
AtlRunQuerySelectorWorker.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
2 
3 
4 #import the selectors
5 from CoolRunQuery.selector.AtlRunQuerySelectorDQ import DQSelector
6 from CoolRunQuery.selector.AtlRunQuerySelectorTrigger import TrigKeySelector, TriggerSelector, L1TrigKeySelector, HLTTrigKeySelector, BGSKeySelector, RatesSelector # noqa: F401
7 from CoolRunQuery.selector.AtlRunQuerySelectorMisc import BPMSelector, LArcondSelector, DatasetsSelector, DetectorSelector, FilenameSelector, PartitionSelector, ReadyForPhysicsSelector, DurationSelector, BFieldSelector
8 from CoolRunQuery.selector.AtlRunQuerySelectorEvents import EventSelector
9 from CoolRunQuery.selector.AtlRunQuerySelectorStreams import StreamSelector
10 from CoolRunQuery.selector.AtlRunQuerySelectorLhcOlc import LHCSelector, OLCLumiSelector, LuminositySelector, BeamspotSelector, OLCLBDataCondition, OLCFillParamsCondition # noqa: F401
11 
12 from CoolRunQuery.AtlRunQueryRun import Run
13 
14 
16 
17  class SelDescr:
18  def __init__(self,selector, priority, doesSelect, doesShow, executed):
19  self.selector = selector
20  self.priority = priority
21  self.doesSelect = doesSelect
22  self.doesShow = doesShow
23  self.executed = executed
24 
25 
26  __selectors = []
27  __executedSelectorsInOrder = []
28  __showSelectorsInOrder = []
29  __selectorDependencies = { 'trigger':['trigkey','l1trigkey','hlttrigkey'],
30  'dataquality':['readyforphysics']
31  }
32 
33  __creationRules = {
34  'dataquality' : 'DQSelector',
35  'streams' : 'StreamSelector',
36  'trigger' : 'TriggerSelector',
37  'datasets' : 'DatasetsSelector',
38  'rates' : 'RatesSelector',
39  'lhc' : 'LHCSelector',
40  'bfield' : 'BFieldSelector',
41  'events' : 'EventSelector',
42  'allevents' : 'AllEventsSelector',
43  'release' : 'TrigKeySelector',
44  'trigkey' : 'TrigKeySelector',
45  'l1trigkey' : 'L1TrigKeySelector',
46  'hlttrigkey' : 'HLTTrigKeySelector',
47  'bgskey' : 'BGSKeySelector',
48  'detmask' : 'DetectorSelector',
49  'olclumi' : 'OLCLumiSelector',
50  'olcfillparams' : 'OLCFillParamsCondition',
51  'olclbdata' : 'OLCLBDataCondition',
52  'datasets' : 'DatasetsSelector',
53  'partition' : 'PartitionSelector',
54  'readyforphysics' : 'ReadyForPhysicsSelector',
55  'larcond' : 'LArcondSelector',
56  'luminosity' : 'LuminositySelector',
57  'beamspot' : 'BeamspotSelector',
58  'bpm' : 'BPMSelector',
59  'filenametag' : 'FilenameSelector'
60  }
61 
62 
63  @classmethod
64  def selectors(cls):
65  for s in SelectorWorker.getOrderedSelectorList():
66  if s.executed:
67  continue
68  needs = cls.getOrderedNeeds(s)
69  for ss in needs:
70  if ss.executed:
71  continue
72  yield ss.selector
73  cls.__executedSelectorsInOrder += [ss]
74  ss.executed=True
75  yield s.selector
77  s.executed=True
78 
79  @classmethod
81  for s in cls.__executedSelectorsInOrder:
82  yield s.selector
83 
84  @classmethod
85  def getOrderedNeeds(cls, client):
86  needs = []
87  selname = client.selector.name
88  if selname in cls.__selectorDependencies:
89  dependson = cls.__selectorDependencies[selname]
90  for d in dependson:
91  dep = cls.findSelectorDescriptor(d)
92  if dep is None:
93  raise RuntimeError('Selector %s depends on %s which is not defined' % (selname,d))
94  needs.insert(0, dep)
95  return needs
96 
97 
98  @classmethod
99  def addSelector(cls, selector, priority):
100  s = cls.findSelectorDescriptor(selector.name)
101  if s:
102  return s.selector
103  cls.__selectors += [cls.SelDescr(selector=selector,priority=priority,doesSelect=True,doesShow=False,executed=False)]
104  return cls.__selectors[-1].selector
105 
106 
107  # pure selector search by class name and instance name
108  @classmethod
109  def findSelectorDescriptor(cls, selname, selcls=None):
110  """ returns a SelDescr if name and class match"""
111  for s in cls.__selectors:
112  if s.selector.name == selname and (selcls is None or selcls==s.selector.__class__.__name__):
113  return s
114  return None
115 
116  @classmethod
117  def getShowSelector(cls, selname, *args, **kwargs):
118  selcls = SelectorWorker.__creationRules[selname]
119  # see if the selector is already there
120  s = cls.findSelectorDescriptor(selname, selcls)
121  if s:
122  s.doesShow=True
123  cls.__showSelectorsInOrder += [s]
124  try:
125  s.selector.addShowSelector(*args, **kwargs)
126  except Exception:
127  pass
128  else:
129  s = cls.CreateSelector( selname, True, *args, **kwargs)
130  cls.__showSelectorsInOrder += [s]
131  cls.__selectors += [s]
132  return s.selector
133 
134  @classmethod
135  def CreateSelector( cls, selname, doesShow, *args, **kwargs):
136  selcls = SelectorWorker.__creationRules[selname]
137  thecls = eval('%s' % selcls)
138  newsel = thecls(selname, *args, **kwargs)
139  # print ("CREATING SELECTOR %s %s('%s')" % (("SHOW" if doesShow else "RETRIEVE"), selcls, selname))
140  s = cls.SelDescr(selector=newsel, priority=0, doesSelect=False, doesShow=True, executed=False)
141  return s
142 
143 
144  @classmethod
145  def getRetrieveSelector(cls, selname, selcls=None, *args, **kwargs):
146  s = cls.findSelectorDescriptor(selname, selcls)
147  if s:
148  try:
149  s.selector.addShowSelector()
150  except Exception:
151  pass
152  return s.selector
153  elif selcls is not None:
154  s = cls.CreateSelector( selname, False, *args, **kwargs)
155  cls.__selectors += [s]
156  return s.selector
157  else:
158  return None
159 
160 
161  @classmethod
163  # Highes priority first
164  sortedSel = cls.__selectors
165  sortedSel.sort(key = lambda x: x.priority, reverse=True)
166  return sortedSel
167 
168  @classmethod
170  for s in cls.__selectors:
171  s.selector.applySelection = s.doesSelect
172 
173  @classmethod
174  def setShowOutput(cls):
175  for s in cls.__showSelectorsInOrder:
176  s.selector.setShowOutput()
177 
178 
179  @classmethod
180  def parseSelectorOptions(cls,options):
181 
182  if options.events:
183  cls.addSelector( EventSelector(name = 'events', events = options.events), 280 )
184 
185  if options.larcond:
186  cls.addSelector( LArcondSelector(name = 'larcond', larcond = options.larcond), 115 )
187 
188  if options.datasets:
189  cls.addSelector( DatasetsSelector(name = 'datasets', datasets = options.datasets), 110 )
190 
191  if options.duration:
192  cls.addSelector( DurationSelector(name = 'duration', duration = options.duration), 95 )
193 
194  if options.streams:
195  cls.addSelector( StreamSelector(name = 'streams', streams = options.streams), 95 )
196 
197  if options.smklist:
198  cls.addSelector( TrigKeySelector(name = 'trigkey'), 71 ).setSelectSMK(smks = options.smklist)
199 
200  if options.release:
201  cls.addSelector( TrigKeySelector(name = 'trigkey'), 70 ).setSelectRelease(release = options.release)
202 
203  if options.detmaskin or options.detmaskout:
204  cls.addSelector( DetectorSelector('detmask', options.detmaskin, options.detmaskout), 60 )
205 
206  if options.lhc:
207  cls.addSelector( LHCSelector(name = 'lhc', lhc = options.lhc), 48 )
208 
209  if options.beamspot:
210  cls.addSelector( BeamspotSelector(name = 'beamspot', beamspot = options.beamspot), 44 )
211 
212  if options.olclumi:
213  cls.addSelector( OLCLumiSelector(name = 'olclumi', olclumi = options.olclumi), 43 )
214 
215  if options.bpm:
216  cls.addSelector( BPMSelector(name = 'bpm', release = options.bpm), 40 )
217 
218  if options.luminosity:
219  cls.addSelector( LuminositySelector(name = 'luminosity', luminosity = options.luminosity), 40 )
220 
221  if options.projecttag:
222  cls.addSelector( FilenameSelector(name = 'filenametag', projecttag = options.projecttag), 40 )
223 
224  if options.readyforphysics:
225  cls.addSelector( ReadyForPhysicsSelector(name = 'readyforphysics', readyforphysics = options.readyforphysics), 31 )
226 
227  if options.partition:
228  cls.addSelector( PartitionSelector(name = 'partition', partition = options.partition), 300 )
229 
230  if options.trigger:
231  cls.addSelector( TriggerSelector(name = 'trigger', trigger = options.trigger), 25 )
232 
233  if options.bfield:
234  cls.addSelector( BFieldSelector(name = 'bfield', bf = options.bfield), 10 )
235 
236  if options.dqchannels:
237  cls.addSelector( DQSelector(), 50 ).addSelectionChannel(options.dqchannels)
238 
239 
240 
241 
242  @classmethod
243  def parseShowOption(cls,options):
244  if not options.show:
245  return
246 
247  for s in options.show:
248 
249  if s == 'summary' or s == 'dqeff' or s == 'dqsummary' or s == 'dqplots' or s == 'cosmics' or s == 'heavyions':
250  pass # handled outside
251 
252  elif s=='run':
253  Run.showrunnr = True
254 
255  elif s=='time':
256  Run.showtime = True
257 
258  elif s=='duration':
259  Run.showduration = True
260 
261  elif s[0:3]=='dq ' or s=='dq':
262  SelectorWorker.getShowSelector('dataquality').addShowChannel(s[3:])
263 
264  elif s[0:7] == 'streams':
265  SelectorWorker.getShowSelector('streams').addShowStreamPattern(s[8:])
266 
267  elif s[0:7] == 'trigger':
268  SelectorWorker.getShowSelector('trigger').addShowTriggerPattern(s[8:])
269 
270  elif s[0:8] == 'datasets':
271  SelectorWorker.getShowSelector('datasets').addShowDatasetPattern(s[9:])
272 
273  elif s[0:9] == 'trigrates':
274  SelectorWorker.getShowSelector('rates').addPattern(s[10:])
275 
276  elif s[0:3] == 'lhc':
277  arg = ''
278  if 'all' in s:
279  arg = 'all'
280  elif 'min' in s:
281  arg = 'min'
282  SelectorWorker.getShowSelector('lhc',addArg=arg)
283 
284  elif 'olclumi' in s:
285  SelectorWorker.getShowSelector(s)
286 
287  elif s == 'smk':
288  SelectorWorker.getShowSelector('trigkey').setShow('smk')
289 
290  elif s == 'trigkeys' or s == 'smk':
291  SelectorWorker.getShowSelector('trigkey').setShow('smk')
292  SelectorWorker.getShowSelector('l1trigkey')
293  SelectorWorker.getShowSelector('hlttrigkey')
294  SelectorWorker.getShowSelector('bgskey')
295 
296  elif s == 'release':
297  SelectorWorker.getShowSelector('trigkey').setShow('release')
298 
299  elif s[0:10] == 'luminosity':
300  SelectorWorker.getShowSelector('luminosity').addShowTag(s.split(None,1)[1])
301 
302  elif s[0:8] == 'beamspot':
303  SelectorWorker.getShowSelector('beamspot',args=s[8:])
304 
305  elif s[0:3] == 'bpm':
306  SelectorWorker.getShowSelector('bpm')
307 
308  elif s == 'filenametag' or s == 'projecttag':
309  SelectorWorker.getShowSelector('filenametag')
310 
311  elif s in ['bfield', 'events', 'allevents', 'detmask', 'olcfillparams', 'olclbdata', 'datasets', 'partition', 'readyforphysics', 'larcond']:
312  SelectorWorker.getShowSelector(s)
313 
314  else:
315  raise RuntimeError("ERROR: option 'show %s' not implemented" %s)
316 
python.AtlRunQuerySelectorWorker.SelectorWorker
Definition: AtlRunQuerySelectorWorker.py:15
python.AtlRunQuerySelectorWorker.SelectorWorker.setShowOutput
def setShowOutput(cls)
Definition: AtlRunQuerySelectorWorker.py:174
python.AtlRunQuerySelectorWorker.SelectorWorker.addSelector
def addSelector(cls, selector, priority)
Definition: AtlRunQuerySelectorWorker.py:99
python.AtlRunQuerySelectorWorker.SelectorWorker.getOrderedSelectorList
def getOrderedSelectorList(cls)
Definition: AtlRunQuerySelectorWorker.py:162
python.AtlRunQuerySelectorWorker.SelectorWorker.SelDescr
Definition: AtlRunQuerySelectorWorker.py:17
EventInfoWrite.EventSelector
EventSelector
Definition: EventInfoWrite.py:49
python.AtlRunQuerySelectorWorker.SelectorWorker.SelDescr.__init__
def __init__(self, selector, priority, doesSelect, doesShow, executed)
Definition: AtlRunQuerySelectorWorker.py:18
python.AtlRunQuerySelectorWorker.SelectorWorker.setApplySelection
def setApplySelection(cls)
Definition: AtlRunQuerySelectorWorker.py:169
python.AtlRunQuerySelectorWorker.SelectorWorker.SelDescr.priority
priority
Definition: AtlRunQuerySelectorWorker.py:20
python.AtlRunQuerySelectorWorker.SelectorWorker.SelDescr.doesSelect
doesSelect
Definition: AtlRunQuerySelectorWorker.py:21
python.AtlRunQuerySelectorWorker.SelectorWorker.CreateSelector
def CreateSelector(cls, selname, doesShow, *args, **kwargs)
Definition: AtlRunQuerySelectorWorker.py:135
python.AtlRunQuerySelectorWorker.SelectorWorker.findSelectorDescriptor
def findSelectorDescriptor(cls, selname, selcls=None)
Definition: AtlRunQuerySelectorWorker.py:109
python.AtlRunQuerySelectorWorker.SelectorWorker.__selectorDependencies
dictionary __selectorDependencies
Definition: AtlRunQuerySelectorWorker.py:29
python.AtlRunQuerySelectorWorker.SelectorWorker.__showSelectorsInOrder
list __showSelectorsInOrder
Definition: AtlRunQuerySelectorWorker.py:28
python.AtlRunQuerySelectorWorker.SelectorWorker.executedSelectors
def executedSelectors(cls)
Definition: AtlRunQuerySelectorWorker.py:80
python.AtlRunQuerySelectorWorker.SelectorWorker.parseSelectorOptions
def parseSelectorOptions(cls, options)
Definition: AtlRunQuerySelectorWorker.py:180
python.AtlRunQuerySelectorWorker.SelectorWorker.__executedSelectorsInOrder
list __executedSelectorsInOrder
Definition: AtlRunQuerySelectorWorker.py:27
python.AtlRunQuerySelectorWorker.SelectorWorker.parseShowOption
def parseShowOption(cls, options)
Definition: AtlRunQuerySelectorWorker.py:243
python.AtlRunQuerySelectorWorker.SelectorWorker.SelDescr.selector
selector
Definition: AtlRunQuerySelectorWorker.py:19
python.AtlRunQuerySelectorWorker.SelectorWorker.SelDescr.executed
executed
Definition: AtlRunQuerySelectorWorker.py:23
python.AtlRunQuerySelectorWorker.SelectorWorker.selectors
def selectors(cls)
Definition: AtlRunQuerySelectorWorker.py:64
python.AtlRunQuerySelectorWorker.SelectorWorker.getShowSelector
def getShowSelector(cls, selname, *args, **kwargs)
Definition: AtlRunQuerySelectorWorker.py:117
python.AtlRunQuerySelectorWorker.SelectorWorker.getRetrieveSelector
def getRetrieveSelector(cls, selname, selcls=None, *args, **kwargs)
Definition: AtlRunQuerySelectorWorker.py:145
python.AtlRunQuerySelectorWorker.SelectorWorker.__selectors
__selectors
Definition: AtlRunQuerySelectorWorker.py:26
python.AtlRunQuerySelectorWorker.SelectorWorker.SelDescr.doesShow
doesShow
Definition: AtlRunQuerySelectorWorker.py:22
python.AtlRunQuerySelectorWorker.SelectorWorker.getOrderedNeeds
def getOrderedNeeds(cls, client)
Definition: AtlRunQuerySelectorWorker.py:85