ATLAS Offline Software
Loading...
Searching...
No Matches
GoodRunsListConfig.py
Go to the documentation of this file.
1# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
2
3
5 def __init__(self):
6 # -- run cmd options
7 self.name = "GoodRunsListConfig" # -- name set inside GRLB xml output file
8 self.querytool = "AtlRunQuery.py" # -- run query tool
9 self.listname = "default.xml" # -- name of GRL xml output file
10 self.prefix = "" # -- prefix for GRL file name
11 self.show = "" # -- show arguments for atlrunquery
12 self.dqfolder = "DEFECTS" # -- DQ folder, eg. LBSUMM, SHIFTOFL. Default by AtlRunQuery
13
14 # -- query selections in AtlRunQuery.py
15 # -- see Database/CoolRunQuery/python/AtlRunQueryParser.py for full list
16 self.querydict = {}
17 self.querydict['partition'] = ["ATLAS"] # -- DAQ partition
18 self.querydict['ptag'] = ["data09*"] # -- projecttag: collection filename prefix
19 #self.querydict['events'] = ["1000+"] # -- number of events per run
20 self.querydict['run'] = ["140541+"] # -- run number selection range
21 #self.querydict['duration'] = ["60s+"] # -- duration of run selection
22 self.querydict['time'] = [] # -- time of run selection, eg.
23 self.querydict['detector'] = [] #['all'] # -- subdetectors turned on, eg.
24 self.querydict['streams'] = [] # -- trigger output streams, eg.
25 self.querydict['mag'] = [] #["solenoidon","toroidon"] # -- magnetic field configuration
26 self.querydict['dq'] = [] # -- selection of data quality flags
27 self.querydict['smk'] = [] # -- super master key, eg.
28 self.querydict['trigger'] = [] # -- select specific triggers available, eg.
29 self.querydict['release'] = [] # -- release used, eg: '15.1.*'
30 #self.querydict['ctag'] = ['DetStatusLBSUMM-pass1'] # -- COOL conditions tag to use, eg: 'COMCOND-HLTC-001-00'. Default = head.
31 self.querydict['db'] = ['DATA'] # -- DATA or MC
32 self.dqignore = [] # DQ defects to ignore. These will be patched into the dq querydict
33
34
35 def Summary(self):
36 print ('Name : %s' % (self.name))
37 print ('Tool : %s' % (self.querytool))
38 print ('File : %s' % (self.listname))
39 print ('Show : %s' % (self.show))
40 print ('DQ folder : %s' % (self.dqfolder))
41 print ('Query :')
42 print (self.getsearchquery())
43 return
44
45
46 def getsearchquery(self):
47 cmd = "find "
48
49 for key in self.querydict.keys():
50 arr = self.querydict[key][:]
51 if key == 'dq':
52 if len(self.dqignore) > 0:
53 toexclude = '\\' + '\\'.join(self.dqignore)
54 else:
55 toexclude = ''
56 print ('to exclude', toexclude)
57 for i, q in enumerate(arr):
58 qsplit = q.split()
59 if len(qsplit) > 0:
60 arr[i] = ' '.join([qsplit[0] + toexclude] + qsplit[1:])
61 for selection in arr:
62 if len(selection)>0:
63 cmd += "%s %s and " % (key,selection)
64 cmd = cmd[:-4]
65
66 if len(self.show)>0:
67 cmd += " %s" % (self.show)
68 else: cmd += " / show run and events / nodef"
69
70 xmlstring = 'xmlfile %s:%s' % (self.listname,self.name)
71 cmd += " , %s" % (xmlstring)
72 return cmd
73
74
76 from CoolRunQuery.AtlRunQueryLib import DQSelector,AtlRunQueryOptions
77 from CoolRunQuery.AtlRunQueryParser import ArgumentParser
78
79
80 query = self.getsearchquery()
81 ap = ArgumentParser()
82 atlqueryarg = self.querytool + " " + ap.ParseArgument( query )
83 (options, args) = AtlRunQueryOptions().parse(atlqueryarg)
84
85
86 selector = DQSelector(name = 'dataquality', dq = options.dqchannels)
87 dqfolder = self.getdqfolder()
88
89 funcArr = []
90 dqconfig = selector.selectors[dqfolder]
91 for flag in dqconfig.flags:
92 fncName = dqconfig.flagInterpreter[flag]['passFncName']
93 fncName = fncName.replace("\'","")
94 funcArr.append(fncName)
95 #funcArr = selector.selectors[dqfolder].passFncName
96 #for i in range(len(funcArr)): funcArr[i] = funcArr[i].replace("\'","")
97
98
99 dqchannels = options.dqchannels
100 for i in range(len(dqchannels)):
101 dqArr = dqchannels[i].split()
102 dqArr[1] = funcArr[i]
103 dqchannels[i] = ' '.join(dqArr)
104
105 return dqchannels
106
107
108 def getdqfolder(self):
109 return self.dqfolder
110
111 def setdqfolder(self,dqfolder=''):
112 if len(dqfolder)>0: self.dqfolder = dqfolder
113 for idx in range( len(self.querydict['dq']) ):
114 dqquery = self.querydict['dq'][idx].strip()
115 queryArr = dqquery.split()
116
117 if len(queryArr)==3:
118 ctagArr = queryArr[1].split('#')
119 if len(ctagArr)==2:
120 queryArr[1] = '%s#%s' % (self.dqfolder,ctagArr[1])
121 else: queryArr[1] = self.dqfolder
122
123 elif len(queryArr)==2:
124 queryArr.insert(1,self.dqfolder)
125 dqquery = '%s %s %s' % (queryArr[0],queryArr[1],queryArr[2])
126 self.querydict['dq'][idx] = dqquery
127 return
128
129 def setdqctag(self,dqctag):
130 if len(dqctag)==0: return
131 for idx in range( len(self.querydict['dq']) ):
132 dqquery = self.querydict['dq'][idx].strip()
133 queryArr = dqquery.split()
134
135 if len(queryArr)==3:
136 ctagArr = queryArr[1].split('#')
137 queryArr[1] = '%s#%s' % (ctagArr[0],dqctag)
138
139 elif len(queryArr)==2:
140 dqfoldtag = '%s#%s' % (self.dqfolder,dqctag)
141 queryArr.insert(1,dqfoldtag)
142 dqquery = '%s %s %s' % (queryArr[0],queryArr[1],queryArr[2])
143 self.querydict['dq'][idx] = dqquery
144 return
145
146 def setctag(self,ctag):
147 if len(ctag)>0: self.querydict['ctag'] = ctag
148
149 def getctag(self):
150 return self.querydict.get('ctag', '')
151
152 def setPrefix(self,newprefix):
153 self.prefix = newprefix
154 self.listname = self.prefix+self.listname
155
std::map< std::string, std::string > parse(const std::string &list)
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)
Definition hcg.cxx:130
std::vector< std::string > split(const std::string &s, const std::string &t=":")
Definition hcg.cxx:177