5 from time
import gmtime
7 from CoolRunQuery.AtlRunQueryRun
import Run
8 from CoolRunQuery.utils.AtlRunQueryUtils
import coolDbConn, GetRanges
9 from CoolRunQuery.selector.AtlRunQuerySelectorBase
import Selector, RunLBBasedCondition, TimeBasedCondition, DataKey
18 super(FilenameSelector,self).
__init__(name=name,
19 dbfolderkey=
'COOLONL_TDAQ::/TDAQ/RunCtrl/SOR%s' % (
"_Params" if Selector.condDB() ==
"COMP200" else ""),
20 channelKeys = [(0,
'Project tag',
'FilenameTag' if Selector.condDB() ==
"COMP200" else 'T0ProjectTag')])
23 if self.applySelection:
24 return 'SELOUT Checking if the filename tag matches "%s"' % self.
filenametag
26 return "Retrieving filenametag"
37 super(PartitionSelector,self).
__init__(name=name,
38 dbfolderkey=
'COOLONL_TDAQ::/TDAQ/RunCtrl/EventCounters',
39 channelKeys = [(0,
'Partition',
'PartitionName')])
42 if self.applySelection:
43 return 'SELOUT Checking if partition name matches "%s"' % self.
partition
45 return "Retrieving partition name"
54 def __init__(self, name, readyforphysics=None):
56 super(ReadyForPhysicsSelector,self).
__init__(name=name,
57 dbfolderkey=
'COOLONL_TDAQ::/TDAQ/RunCtrl/DataTakingMode',
58 channelKeys = [(0,
'Ready for physics',
'ReadyForPhysics')])
61 if self.applySelection:
62 return 'SELOUT Checking if ReadyForPhysics flag matches "%s"' % self.
readyforphysics
64 return "Retrieving ReadyForPhysics flag"
75 self.
geReq = (duration[-1]!=
'-')
77 super(DurationSelector,self).
__init__(name)
79 return "SELOUT Checking if duration of run is %s than %i seconds" % (
"more" if self.
geReq else "less",self.
duration)
84 rmlist = [r
for r
in runlist
if (r.eor-r.sor)/1E9<self.
duration]
86 rmlist = [r
for r
in runlist
if (r.eor-r.sor)/1E9>self.
duration]
89 if self.applySelection:
90 print (
" ==> %i runs selected" % len(runlist))
95 def __init__(self, name, dmin=None, dmout=None):
115 if Selector.condDB() ==
"COMP200":
116 dbfolder =
"/TDAQ/RunCtrl/SOR_Params"
117 if Selector.condDB() ==
"CONDBR2":
118 dbfolder =
"/TDAQ/RunCtrl/SOR"
120 super(DetectorSelector,self).
__init__(name=name,
121 dbfolderkey=
'COOLONL_TDAQ::%s' % dbfolder,
122 channelKeys = [(0,
'Detector systems',
'DetectorMask')])
124 self.data_keys[0]._type = DataKey.DETECTOR
129 if self.applySelection:
130 if self.
bm!=0
and self.
bmany!=0:
131 return "SELOUT Checking if [detector mask & %i] matches %i and [detector mask & %i] is greater 0" % (self.
bm,self.
bp,self.
bmany)
133 return "SELOUT Checking if [detector mask & %i] is greater 0" % self.
bmany
135 return "SELOUT Checking if [detector mask & %i] matches %i" % (self.
bm,self.
bp)
137 return "Retrieving detector mask"
147 retval &= ((val & self.
bm) == self.
bp)
149 retval &= ((val & self.
bmany) != 0)
154 run 1: run 211541 has DetectorMask 281474976710647
155 run 2: run 252233 has DetectorMask 0d00069fffffffff0
163 def __init__(self, name, condition=None, channel=0, resDictKey=''):
164 super(BFieldCondition,self).
__init__(name,
165 dbfolderkey=
'COOLOFL_DCS::/EXT/DCS/MAGNETS/SENSORDATA',
166 channelKeys = [(channel,resDictKey,
'value')])
170 if self.applySelection:
172 txt =
'[%.0f,+inf]' % (self.
cutRange[0][0])
175 return "SELOUT Checking if the %s is within %s" % (
', '.
join(self.ResultKey()), txt)
177 return "Retrieving magnet currents %s" % self.ResultKey()
181 val = abs(
float(values))
186 if val>=cr[0]
and val<=cr[1]:
198 super(BFieldSelector,self).
__init__(name)
201 if 'solenoidon' in bf
or 'solenoidoff' in bf:
203 if 'solenoidon' in bf:
205 elif 'solenoidoff' in bf:
208 if 'toroidon' in bf
or 'toroidoff' in bf:
212 elif 'toroidoff' in bf:
220 sel.applySelection =
False
235 if s.name ==
'csolcur':
237 if s.name ==
'ctorcur':
240 sol =
BFieldCondition(
'csolcur', channel = 1, resDictKey =
'SolCurrent')
241 sol.applySelection =
False
244 tor =
BFieldCondition(
'ctorcur', channel = 3, resDictKey =
'TorCurrent')
245 tor.applySelection =
False
252 runlist = sel.select(runlist)
260 super(BPMSelector,self).
__init__(name)
263 return "Retrieving Beam Position Monitor values from PVSS archive"
273 from CoolRunQuery.AtlRunQueryPVSS
import GetPVSS_BPMs
274 pvssdb = coolDbConn.GetPVSSDBConnection()
275 cursor = pvssdb.cursor()
276 cursor.arraysize = 1000
278 t = gmtime(r.sor/1.E9)
279 sor =
"%02i-%02i-%4i %02i:%02i:%02i" % (t[2], t[1], t[0], t[3], t[4], t[5])
280 t = gmtime(r.eor/1.E9)
281 eor =
"%02i-%02i-%4i %02i:%02i:%02i" % (t[2], t[1], t[0], t[3], t[4], t[5])
285 r.addResult(
'BPM', res )
287 Run.AddToShowOrder(DataKey(
'BPM'))
296 super(DatasetsSelector,self).
__init__(name)
299 return "Retrieving datasets from Tier-0 DB"
308 if pattern.lower() ==
'caf':
314 if 'caf' == sp[0].lower():
317 elif 'caf' == sp[1].lower():
322 print (
'ERROR: wrong format in "show dataset". Usage: "show dataset [pattern] [caf]"')
331 from CoolRunQuery.AtlRunQueryTier0
import GetTier0_allDatasets
332 runnrlist = [r.runNr
for r
in runlist]
333 tier0connection = coolDbConn.GetTier0DBConnection()
337 if run.runNr
in tier0retdico:
338 run.addResult(
'Datasets', tier0retdico[run.runNr])
340 run.addResult(
'Datasets', {})
342 Run.AddToShowOrder(DataKey(
'Datasets'))
349 super(LArcondSelector,self).
__init__(name=name,
350 dbfolderkey=
'COOLONL_LAR::/LAR/Configuration/RunLog',
351 channelKeys = [(0,
'lar:runtype',
'runType'),
352 (0,
'lar:nsamples',
'nbOfSamples'),
353 (0,
'lar:format',
'format')])
359 larcondargs = c.split()
360 if len(larcondargs) == 2:
361 key =
'lar:' + larcondargs[0].strip().lower()
363 if key
not in self.ResultKey():
364 print (
'ERROR: unknown larcond variable "%s"' % key)
366 self.
larcond[key] = larcondargs[1].strip()
368 print (
'ERROR: unknown condition format for larcond: "%s" -> need two arguments separated by blank' % larcondargs)
373 if self.applySelection:
374 return "SELOUT Checking if LAr condition matches %s" % self.
larcond
376 return "Retrieving LAr run conditions"
379 if key.lower().strip()
in self.
larcond:
380 if values.strip() == self.
larcond[key.lower().strip()]: