ATLAS Offline Software
Classes | Functions
GetLBInfoFromCOOL Namespace Reference

Classes

class  Folder
 
class  LumiBlock
 
class  Run
 

Functions

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

Function Documentation

◆ GetLumiInfoDic()

def GetLBInfoFromCOOL.GetLumiInfoDic (   beg_run,
  end_run 
)

Definition at line 193 of file GetLBInfoFromCOOL.py.

193 def GetLumiInfoDic(beg_run, end_run):
194  collect_runs = getRunLB(beg_run, end_run)
195  physics_runs = []
196 
197  getRunOnlineLumi(collect_runs)
198  physics_runs = [Run(run, lbs.values()) for run,lbs in collect_runs.items()]
199 
200  if len(physics_runs) == 0:
201  print('WARNING::Found 0 physics runs')
202  return
203 
204  physics_runs.sort(key = lambda x: x.run_number)
205 
206  RunsLumiDic = {}
207  for run in physics_runs:
208  LumiDic = {}
209 
210  key_since = run.GetRunStartTime() - 100000
211  key_until = run.GetRunEndTime() + 100000
212 
213  f = Folder('COOLOFL_TRIGGER/CONDBR2', '/TRIGGER/OFLLUMI/LumiAccounting')
214  taglist=f.folder.listTags()
215  filledTags = {}
216  for tag in taglist:
217  objs = f.folder.browseObjects(key_since, key_until, cool.ChannelSelection.all(), tag)
218  if len(objs) != 0:
219  filledTags[tag] = len(objs)
220 
221  if len(filledTags) == 0:
222  print ("ERROR: no filled tag")
223  return
224  elif len(filledTags) > 1:
225  print ("WARNING: the number filled tags is more than 1")
226 
227  filledTags = sorted(filledTags.items(),key=lambda x:x[1],reverse=True)
228  objs = f.folder.browseObjects(key_since, key_until, cool.ChannelSelection.all(), filledTags[0][0])
229  icount = 0
230  for obj in objs:
231  crun = obj.payload()['Run']
232  clb = obj.payload()['LumiBlock']
233 
234  if crun != run.run_number:
235  continue
236 
237  for lb in run.lbs:
238  if lb.lb == clb:
239  lb.ReadPhysicsLumiInfo(obj.payload())
240  icount += 1
241  break
242 
243  i_LB = obj.payload()['LumiBlock']
244  LumiDic[i_LB] = {
245  'AtlasPhysics' : obj.payload()['AtlasPhysics'],
246  'InstLumi' : obj.payload()['InstLumi']/10000.,
247  'LiveFraction' : obj.payload()['LiveFraction'],
248  'Duration' : lb.GetLBSecs(),
249  'start_time' : lb.start_time,
250  'end_time' : lb.end_time
251  }
252 
253  if len(run.lbs) != icount:
254  print('WARNING::getRunPhysicsLumi - number of missed lbs=%d' ,(len(run.lbs) - icount))
255  print('WARNING:: number of run lbs=%d' ,(len(run.lbs)))
256  print('WARNING:: number of matched lbs=%d' ,(icount))
257 
258  RunsLumiDic = LumiDic
259 
260  return RunsLumiDic
261 
262 #==================================================================================================================

◆ getRunLB()

def GetLBInfoFromCOOL.getRunLB (   beg_run,
  end_run 
)

Definition at line 133 of file GetLBInfoFromCOOL.py.

133 def getRunLB(beg_run, end_run):
134  print('INFO::getRunLB - will search for ATLAS runs in the following range:')
135  print('INFO:: beg run: ' ,(beg_run))
136  print('INFO:: end run: ' ,(end_run))
137 
138  f = Folder('COOLONL_TRIGGER/CONDBR2', '/TRIGGER/LUMI/LBLB')
139 
140  fit = f.folder.browseObjects(beg_run << 32, end_run << 32, cool.ChannelSelection.all())
141 
142  runs = {}
143 
144  while fit.goToNext():
145  lb = LumiBlock(fit.currentRef())
146 
147  try:
148  runs[lb.run]
149  except KeyError:
150  runs[lb.run] = {}
151 
152  runs[lb.run][lb.lb] = lb
153 
154  print('INFO::getRunLB - found ', len(runs), ' ATLAS runs')
155 
156  return runs
157 
158 #==================================================================================================================

◆ getRunLBFromObj()

def GetLBInfoFromCOOL.getRunLBFromObj (   obj)

Definition at line 127 of file GetLBInfoFromCOOL.py.

127 def getRunLBFromObj(obj):
128  run = (obj.since() >> 32)
129  lb = (obj.since() & 0xffff)
130  return (run, lb)
131 
132 #==================================================================================================================

◆ getRunOnlineLumi()

def GetLBInfoFromCOOL.getRunOnlineLumi (   runs)

Definition at line 159 of file GetLBInfoFromCOOL.py.

159 def getRunOnlineLumi(runs):
160 
161  print('INFO::getRunOnlineLumi - will read online luminosity for ', len(runs), ' ATLAS runs')
162 
163  f = Folder('COOLONL_TRIGGER/CONDBR2', '/TRIGGER/LUMI/OnlPrefLumi')
164  icount = 0
165 
166  for run_, lbs in runs.items():
167 
168  fit = f.folder.browseObjects(run_ << 32, (run_ << 32) + 100000, cool.ChannelSelection(0))
169 
170  while fit.goToNext():
171  obj = fit.currentRef()
172 
173  run = (obj.since() >> 32)
174  lb = (obj.since() & 0xffff)
175 
176  if run != run_:
177  raise Exception('getRunOnlineLumi - logic error: run=', run, ', run_=', run_)
178 
179  if lb == 0:
180  continue
181 
182  try:
183  lblock = lbs[lb]
184  except KeyError:
185  print('WANRING::getRunOnlineLumi - failed to find LumiBlock for run, lb: ', run, lb)
186  continue
187 
188  lblock.ReadLumiInfo(obj)
189 
190  icount += 1
191 
192 #==================================================================================================================

◆ printLumiInfo()

def GetLBInfoFromCOOL.printLumiInfo (   RunsLumiDic)

Definition at line 263 of file GetLBInfoFromCOOL.py.

263 def printLumiInfo(RunsLumiDic):
264  # for run, lumiDic in RunsLumiDic.items():
265  for lb, lumiInfo in RunsLumiDic.items():
266  # s = 'Run %d lb=%4d - AtlasPhysics=%d, InstLumi=%f, LiveFraction=%f, Duration=%f' %(
267  # run,
268  s = 'lb=%4d - AtlasPhysics=%d, InstLumi=%f, LiveFraction=%f, Duration=%f' %(
269  lb,
270  lumiInfo['AtlasPhysics'],
271  lumiInfo['InstLumi'],
272  lumiInfo['LiveFraction'],
273  lumiInfo['Duration']
274  )
275 
276  print (s)
277 
278 #==================================================================================================================
LArL1Calo_ComputeHVCorr.LumiBlock
LumiBlock
Definition: LArL1Calo_ComputeHVCorr.py:38
GetLBInfoFromCOOL.GetLumiInfoDic
def GetLumiInfoDic(beg_run, end_run)
Definition: GetLBInfoFromCOOL.py:193
GetLBInfoFromCOOL.getRunLBFromObj
def getRunLBFromObj(obj)
Definition: GetLBInfoFromCOOL.py:127
GetLBInfoFromCOOL.printLumiInfo
def printLumiInfo(RunsLumiDic)
Definition: GetLBInfoFromCOOL.py:263
GetLBInfoFromCOOL.getRunLB
def getRunLB(beg_run, end_run)
Definition: GetLBInfoFromCOOL.py:133
Folder
Definition: MakeReferenceFile.cxx:118
DerivationFramework::TriggerMatchingUtils::sorted
std::vector< typename T::value_type > sorted(T begin, T end)
Helper function to create a sorted vector from an unsorted one.
GetLBInfoFromCOOL.getRunOnlineLumi
def getRunOnlineLumi(runs)
Definition: GetLBInfoFromCOOL.py:159
Muon::print
std::string print(const MuPatSegment &)
Definition: MuonTrackSteering.cxx:28
CaloLCWConfig.Run
Run
Definition: CaloLCWConfig.py:39