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