ATLAS Offline Software
Classes | Functions
GetLBInfoFromCOOL Namespace Reference

Classes

class  LumiBlock
 
class  Run
 

Functions

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

Function Documentation

◆ GetLumiInfoDic()

def GetLBInfoFromCOOL.GetLumiInfoDic (   beg_run,
  end_run 
)

Definition at line 173 of file GetLBInfoFromCOOL.py.

173 def 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 #==================================================================================================================

◆ getRunLB()

def GetLBInfoFromCOOL.getRunLB (   beg_run,
  end_run,
  dbObj 
)

Definition at line 114 of file GetLBInfoFromCOOL.py.

114 def 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()

def GetLBInfoFromCOOL.getRunLBFromObj (   obj)

Definition at line 108 of file GetLBInfoFromCOOL.py.

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

◆ getRunOnlineLumi()

def GetLBInfoFromCOOL.getRunOnlineLumi (   runs,
  dbObj 
)

Definition at line 139 of file GetLBInfoFromCOOL.py.

139 def 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()

def GetLBInfoFromCOOL.printLumiInfo (   RunsLumiDic)

Definition at line 250 of file GetLBInfoFromCOOL.py.

250 def 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 #==================================================================================================================
LArL1Calo_ComputeHVCorr.LumiBlock
LumiBlock
Definition: LArL1Calo_ComputeHVCorr.py:38
DerivationFramework::TriggerMatchingUtils::sorted
std::vector< typename R::value_type > sorted(const R &r, PROJ proj={})
Helper function to create a sorted vector from an unsorted range.
GetLBInfoFromCOOL.getRunOnlineLumi
def getRunOnlineLumi(runs, dbObj)
Definition: GetLBInfoFromCOOL.py:139
GetLBInfoFromCOOL.getRunLB
def getRunLB(beg_run, end_run, dbObj)
Definition: GetLBInfoFromCOOL.py:114
GetLBInfoFromCOOL.GetLumiInfoDic
def GetLumiInfoDic(beg_run, end_run)
Definition: GetLBInfoFromCOOL.py:173
GetLBInfoFromCOOL.getRunLBFromObj
def getRunLBFromObj(obj)
Definition: GetLBInfoFromCOOL.py:108
GetLBInfoFromCOOL.printLumiInfo
def printLumiInfo(RunsLumiDic)
Definition: GetLBInfoFromCOOL.py:250
print
void print(char *figname, TCanvas *c1)
Definition: TRTCalib_StrawStatusPlots.cxx:25
python.AtlCoolLib.indirectOpen
def indirectOpen(coolstr, readOnly=True, debug=False)
Definition: AtlCoolLib.py:129
CaloLCWConfig.Run
Run
Definition: CaloLCWConfig.py:39