ATLAS Offline Software
Loading...
Searching...
No Matches
GetLBInfoFromCOOL Namespace Reference

Classes

class  LumiBlock
class  Run

Functions

 getRunLBFromObj (obj)
 getRunLB (beg_run, end_run, dbObj)
 getRunOnlineLumi (runs, dbObj)
 GetLumiInfoDic (beg_run, end_run)
 printLumiInfo (RunsLumiDic)

Function Documentation

◆ GetLumiInfoDic()

GetLBInfoFromCOOL.GetLumiInfoDic ( beg_run,
end_run )

Definition at line 173 of file GetLBInfoFromCOOL.py.

173def GetLumiInfoDic(beg_run, end_run):
174 dbInst=indirectOpen("COOLONL_TRIGGER/CONDBR2")
175
176 collect_runs = getRunLB(beg_run, end_run,dbInst)
177 physics_runs = []
178
179 getRunOnlineLumi(collect_runs,dbInst)
180 physics_runs = [Run(run, lbs.values()) for run,lbs in collect_runs.items()]
181
182 dbInst.closeDatabase()
183
184 if len(physics_runs) == 0:
185 print('WARNING::Found 0 physics runs')
186 return
187
188 physics_runs.sort(key = lambda x: x.run_number)
189
190 oflDb=indirectOpen('COOLOFL_TRIGGER/CONDBR2')
191
192 RunsLumiDic = {}
193 for run in physics_runs:
194 LumiDic = {}
195
196 key_since = run.GetRunStartTime() - 100000
197 key_until = run.GetRunEndTime() + 100000
198
199 f = oflDb.getFolder('/TRIGGER/OFLLUMI/LumiAccounting')
200 taglist=f.listTags()
201 filledTags = {}
202 for tag in taglist:
203 objs = f.browseObjects(key_since, key_until, cool.ChannelSelection.all(), tag)
204 if len(objs) != 0:
205 filledTags[tag] = len(objs)
206
207 if len(filledTags) == 0:
208 print ("ERROR: no filled tag")
209 return
210 elif len(filledTags) > 1:
211 print ("WARNING: the number filled tags is more than 1")
212
213 filledTags = sorted(filledTags.items(),key=lambda x:x[1],reverse=True)
214 objs = f.browseObjects(key_since, key_until, cool.ChannelSelection.all(), filledTags[0][0])
215 icount = 0
216 for obj in objs:
217 crun = obj.payload()['Run']
218 clb = obj.payload()['LumiBlock']
219
220 if crun != run.run_number:
221 continue
222
223 for lb in run.lbs:
224 if lb.lb == clb:
225 lb.ReadPhysicsLumiInfo(obj.payload())
226 icount += 1
227 break
228
229 i_LB = obj.payload()['LumiBlock']
230 LumiDic[i_LB] = {
231 'AtlasPhysics' : obj.payload()['AtlasPhysics'],
232 'InstLumi' : obj.payload()['InstLumi']/10000.,
233 'LiveFraction' : obj.payload()['LiveFraction'],
234 'Duration' : lb.GetLBSecs(),
235 'start_time' : lb.start_time,
236 'end_time' : lb.end_time
237 }
238
239 if len(run.lbs) != icount:
240 print('WARNING::getRunPhysicsLumi - number of missed lbs=%d' ,(len(run.lbs) - icount))
241 print('WARNING:: number of run lbs=%d' ,(len(run.lbs)))
242 print('WARNING:: number of matched lbs=%d' ,(icount))
243
244 RunsLumiDic = LumiDic
245
246 oflDb.closeDatabase()
247 return RunsLumiDic
248
249#==================================================================================================================
void print(char *figname, TCanvas *c1)

◆ getRunLB()

GetLBInfoFromCOOL.getRunLB ( beg_run,
end_run,
dbObj )

Definition at line 114 of file GetLBInfoFromCOOL.py.

114def getRunLB(beg_run, end_run,dbObj):
115 print('INFO::getRunLB - will search for ATLAS runs in the following range:')
116 print('INFO:: beg run: ' ,(beg_run))
117 print('INFO:: end run: ' ,(end_run))
118
119 f=dbObj.getFolder('/TRIGGER/LUMI/LBLB')
120 fit = f.browseObjects(beg_run << 32, end_run << 32, cool.ChannelSelection.all())
121
122 runs = {}
123
124 while fit.goToNext():
125 lb = LumiBlock(fit.currentRef())
126
127 try:
128 runs[lb.run]
129 except KeyError:
130 runs[lb.run] = {}
131
132 runs[lb.run][lb.lb] = lb
133
134 print('INFO::getRunLB - found ', len(runs), ' ATLAS runs')
135
136 return runs
137
138#==================================================================================================================

◆ getRunLBFromObj()

GetLBInfoFromCOOL.getRunLBFromObj ( obj)

Definition at line 108 of file GetLBInfoFromCOOL.py.

108def getRunLBFromObj(obj):
109 run = (obj.since() >> 32)
110 lb = (obj.since() & 0xffff)
111 return (run, lb)
112
113#==================================================================================================================

◆ getRunOnlineLumi()

GetLBInfoFromCOOL.getRunOnlineLumi ( runs,
dbObj )

Definition at line 139 of file GetLBInfoFromCOOL.py.

139def getRunOnlineLumi(runs,dbObj):
140
141 print('INFO::getRunOnlineLumi - will read online luminosity for ', len(runs), ' ATLAS runs')
142
143 f= dbObj.getFolder('/TRIGGER/LUMI/OnlPrefLumi')
144 icount = 0
145
146 for run_, lbs in runs.items():
147
148 fit = f.browseObjects(run_ << 32, (run_ << 32) + 100000, cool.ChannelSelection(0))
149
150 while fit.goToNext():
151 obj = fit.currentRef()
152
153 run = (obj.since() >> 32)
154 lb = (obj.since() & 0xffff)
155
156 if run != run_:
157 raise Exception('getRunOnlineLumi - logic error: run=', run, ', run_=', run_)
158
159 if lb == 0:
160 continue
161
162 try:
163 lblock = lbs[lb]
164 except KeyError:
165 print('WANRING::getRunOnlineLumi - failed to find LumiBlock for run, lb: ', run, lb)
166 continue
167
168 lblock.ReadLumiInfo(obj)
169
170 icount += 1
171
172#==================================================================================================================

◆ printLumiInfo()

GetLBInfoFromCOOL.printLumiInfo ( RunsLumiDic)

Definition at line 250 of file GetLBInfoFromCOOL.py.

250def printLumiInfo(RunsLumiDic):
251 # for run, lumiDic in RunsLumiDic.items():
252 for lb, lumiInfo in RunsLumiDic.items():
253 # s = 'Run %d lb=%4d - AtlasPhysics=%d, InstLumi=%f, LiveFraction=%f, Duration=%f' %(
254 # run,
255 s = 'lb=%4d - AtlasPhysics=%d, InstLumi=%f, LiveFraction=%f, Duration=%f' %(
256 lb,
257 lumiInfo['AtlasPhysics'],
258 lumiInfo['InstLumi'],
259 lumiInfo['LiveFraction'],
260 lumiInfo['Duration']
261 )
262
263 print (s)
264
265#==================================================================================================================