159 obj = store[metadata_name]
161 msg.warning(
'could not retrieve [%s]', metadata_name)
163 if str(obj).
find(
'MetaCont') >= 0:
164 obj = obj.get (obj.sources()[0])
165 msg.info(
'processing container [%s]', obj.folderName())
167 payloads = obj.payloadContainer()
168 payloads_sz = payloads.size()
169 if hasattr(payloads,
'at'):
173 for ii
in range(payloads_sz):
174 payloads.append(_tmp.at(ii))
176 for ii,payload
in zip(range(payloads_sz), payloads):
179 msg.info (
"**error** null-pointer ?")
183 sz = payload.name_size()
184 msg.info(
'==names== (sz: %s)', sz)
185 for idx
in range(sz):
186 chan = payload.chanNum(idx)
187 chan_name = payload.chanName(chan)
189 chan_names.append(chan_name)
193 sz = payload.iov_size()
194 msg.info(
'==iovs== (sz: %s)',sz)
195 for idx
in range(sz):
196 chan = payload.chanNum(idx)
197 iov_range = payload.iovRange(chan)
198 iov_start = iov_range.start()
199 iov_stop = iov_range.stop()
201 msg.info(
'(%s, %s) => (%s, %s) valid=%s runEvt=%s',
207 iov_start.isRunEvent())
212 msg.info(
'==attrs== (sz: %s)', sz)
213 for idx
in range(sz):
214 chan = payload.chanNum(idx)
216 attr_list = payload.attributeList(chan)
218 for a
in list(
toiter(attr_list.begin(), attr_list.end())):
220 spec = a.specification()
221 a_type = spec.typeName()
222 if a_type.find(
'string') >= 0:
223 a_data = a.data[
'string']()
225 a_data = eval(a_data,{},{})
230 a_data = a.data[a_type]()
232 attr_data.append( (spec.name(), a_data) )
233 attrs.append(dict(attr_data))
235 if len(attrs) == len(chan_names):
236 data.append(dict(zip(chan_names,attrs)))
240 data.append(attrs[0])
244 data.append(chan_names)
313 """ the real function doing all the work of peeking at the input file
314 @return a dict of peeked-at data
317 import AthenaPython.PyAthena
as PyAthena
318 _info = self.
msg.info
319 _error= self.
msg.error
321 def _get_detdescr_tags(evt_type):
322 ddt = evt_type.get_detdescr_tags().
split()
325 ddt = dict(zip(ddt[0::2],
332 esi_keys = store.keys(
'EventStreamInfo')
335 if len(esi_keys) >= 1:
336 sg_key = esi_keys[-1]
338 stream_names = esi_keys[:]
339 for sg_key
in esi_keys:
340 esi = store.retrieve(
'EventStreamInfo', sg_key)
341 _info(
'=== [EventStreamInfo#%s] ===', sg_key)
342 nentries += esi.getNumberOfEvents()
344 evt_types = PyAthena.EventStreamInfo.evt_types(esi)
345 if len(evt_types) > 0:
346 evt_type = evt_types[0]
347 peeked_data[
'evt_type'] = evt_type.bit_mask
348 ddt = _get_detdescr_tags(evt_type)
349 peeked_data[
'det_descr_tags'] = ddt
350 from past.builtins
import long
351 peeked_data[
'mc_channel_number'] = [long(evt_type.mc_channel_number())]
353 def _make_item_list(item):
356 _typename = store._pyclidsvc.typename
357 return (_typename(clid)
or str(clid),
359 item_list = esi.item_list()
360 item_list = list(
map(_make_item_list, item_list))
361 peeked_data[
'eventdata_items'] = item_list
363 peeked_data[
'lumi_block'] = esi.lumi_blocks()
364 peeked_data[
'run_number'] = esi.run_numbers()
366 peeked_data[
'stream_names'] = esi.processing_tags()
368 if not peeked_data[
'stream_names']:
370 peeked_data[
'stream_names'] = list(
set(stream_names))
374 if len(esi.run_numbers()) == 0:
375 bsmd_keys = store.keys(
"ByteStreamMetadataContainer")
376 if len(bsmd_keys) == 1:
377 bsmd = store[bsmd_keys[0]][0]
378 peeked_data[
'lumi_block'] = [bsmd.getLumiBlock()]
379 peeked_data[
'run_number'] = [bsmd.getRunNumber()]
381 for md
in bsmd.getFreeMetaDataStrings():
382 if md.startswith(
'Event type:'):
385 if 'is sim' in md: v.append(
'IS_SIMULATION')
386 else: v.append(
'IS_DATA')
387 if 'is atlas' in md: v.append(
'IS_ATLAS')
388 else: v.append(
'IS_TESTBEAM')
389 if 'is physics' in md: v.append(
'IS_PHYSICS')
390 else: v.append(
'IS_CALIBRATION')
391 bs_metadata[k] = tuple(v)
392 elif md.startswith(
'GeoAtlas:'):
394 v = md.split(
'GeoAtlas:')[1].
strip()
396 elif md.startswith(
'IOVDbGlobalTag:'):
398 v = md.split(
'IOVDbGlobalTag:')[1].
strip()
404 peeked_data[
'evt_type'] = bs_metadata.get(
'evt_type', [])
405 peeked_data[
'geometry'] = bs_metadata.get(
'geometry',
None)
406 peeked_data[
'conditions_tag'] = bs_metadata.get(
'conditions_tag',
None)
407 peeked_data[
'bs_metadata'] = bs_metadata
415 root_files = list(ROOT.gROOT.GetListOfFiles())
416 root_files = [root_file
for root_file
in root_files
418 if len(root_files)==1:
419 root_file = root_files[0]
420 data_hdr = root_file.Get(
"POOLContainer")
422 data_hdr = root_file.Get(
"POOLContainer_DataHeader")
423 nentries = data_hdr.GetEntriesFast()
if bool(data_hdr) \
426 _info(
'could not find correct ROOT file (looking for [%s])',
431 peeked_data[
'nentries'] = nentries
437 root_files = list(ROOT.gROOT.GetListOfFiles())
438 root_files = [root_file
for root_file
in root_files
440 if len(root_files)==0:
441 _info(
'could not find correct ROOT file (looking for [%s])',
445 root_file = root_files[0]
446 pool = root_file.Get(
"##Params")
450 pool_token = re.compile(
r'[\[]NAME=(?P<name>.*?)[\]]'
451 r'[\[]VALUE=(?P<value>.*?)[\]]').match
453 for i
in range(pool.GetEntries()):
454 if pool.GetEntry(i)>0:
455 match = pool_token(pool.db_string)
458 d = match.groupdict()
459 params.append((d[
'name'], d[
'value']))
460 if d[
'name'].lower() ==
'fid':
465 peeked_data[
'file_guid'] = guid
468 metadata_items = [(self.
inputStore._pyclidsvc.typename(p.clID()),
471 peeked_data[
'metadata_items'] = metadata_items
473 def maybe_get(o, idx, default=None):
484 def mergeMultipleDict(inDicts):
487 for k,o
in d.items():
497 for k
in self.
inputStore.keys(
'IOVMetaDataContainer'):
499 metadata[k] = maybe_get(v, -1)
500 peeked_data[
'metadata'] = metadata
506 taginfo = mergeMultipleDict(v)
508 if '/TagInfo' in metadata:
509 taginfo = metadata[
'/TagInfo'].copy()
515 peeked_data[
'det_descr_tags'] = ddt
516 peeked_data[
'geometry'] = ddt.get(
'GeoAtlas',
None)
517 peeked_data[
'conditions_tag'] = ddt.get(
'IOVDbGlobalTag',
None)
518 peeked_data[
'tag_info'] = taginfo
520 peeked_data[
'det_descr_tags'] = taginfo
521 peeked_data[
'geometry'] = taginfo.get(
'GeoAtlas',
None)
522 peeked_data[
'conditions_tag'] = taginfo.get(
'IOVDbGlobalTag',
None)
523 peeked_data[
'beam_type'] = [taginfo.get(
'beam_type',
'N/A')]
524 peeked_data[
'beam_energy']= [maybe_float(taginfo.get(
'beam_energy',
527 if 'geometry' not in peeked_data:
528 peeked_data[
'geometry'] =
None
529 if 'conditions_tag' not in peeked_data:
530 peeked_data[
'conditions_tag'] =
None
531 if 'det_descr_tags' not in peeked_data:
532 peeked_data[
'det_descr_tags'] = {}
536 if taginfo
and taginfo.get(
'project_name',
None) ==
'IS_SIMULATION':
537 peeked_data[
'evt_type'] = (
'IS_SIMULATION',
'IS_ATLAS',
'IS_PHYSICS')
538 if '/Simulation/Parameters' in metadata:
539 peeked_data[
'run_number'] = [metadata.get(
'/Simulation/Parameters').
get(
'RunNumber',
None)]
542 if peek_evt_data
is False:
549 evt_info_keys = store.keys(
'EventInfo')
550 if len(evt_info_keys) != 1:
551 _info(
'more than one EventInfo: %s', evt_info_keys)
552 _info(
' ==> we\'ll use [%s]', evt_info_keys[0])
553 sg_key = evt_info_keys[0]
554 ei = store.retrieve(
'EventInfo', sg_key)
555 _info(
'=== [EventInfo#%s] ===', sg_key)
558 dh_keys = [k
for k
in store.keys(
'DataHeader')
560 if not k.startswith(
'[DB=')]
561 if len(dh_keys) != 1:
562 _error(
'more than 1 DataHeader key after filtering: %s', dh_keys)
563 _error(
'content of store: %s', store.keys(
'DataHeader'))
564 raise RuntimeError(
'more than one DataHeader key')
567 _info(
'=== [DataHeader#%s] ===', sg_key)
568 dh = store.retrieve(
'DataHeader', sg_key)
570 def _make_item_list(dhe):
572 clid = dhe.getPrimaryClassID()
573 _typename = store._pyclidsvc.typename
574 return (_typename(clid)
or str(clid),
577 if hasattr(dh,
'at'):
579 for ii
in range(len(dh)):
580 dhes.append(dh.at(ii))
583 dhes = list(dh.elements())
586 for i,dhe
in enumerate(dhes):
588 clid = dhe.getPrimaryClassID()
589 _typename = store._pyclidsvc.typename
591 clid_name = _typename(clid)
594 except Exception
as err:
595 self.
msg.info(
"no typename for clid [%s] (%s)", clid, err)
596 item_list.append((str(clid), sgkey))
599 evt_type = ei.event_type()
600 det_descr_tags = _get_detdescr_tags(evt_type)
603 'run_number': [eid.run_number()],
604 'evt_number': [eid.event_number()],
606 'evt_type': evt_type.bit_mask,
607 'det_descr_tags': det_descr_tags,
608 'geometry': det_descr_tags.get(
'GeoAtlas',
None),
609 'conditions_tag': det_descr_tags.get(
'IOVDbGlobalTag',
None),
610 'lumi_block': [eid.lumi_block()],
611 'stream_names': [dh.getProcessTag()],
612 'eventdata_items': item_list,
613 'beam_type': [det_descr_tags.get(
'beam_type',
'N/A')],
614 'beam_energy': [maybe_float(det_descr_tags.get(
'beam_energy',
618 trigger_info= ei.trigger_info()
619 stream_tags = trigger_info.streamTags()
if trigger_info
else []
621 for st
in stream_tags:
624 obeys_lbk=bool(st.obeysLumiblock())
625 stags.append(dict(stream_type=st_type,
627 obeys_lbk=obeys_lbk))
628 peeked_data[
'stream_tags'] = stags
634 metadata_items = [(self.
inputStore._pyclidsvc.typename(p.clID()),
637 peeked_data[
'metadata_items'] = metadata_items
639 for k
in self.
inputStore.keys(
'IOVMetaDataContainer'):
641 metadata[k] = maybe_get(v, -1)
642 peeked_data[
'metadata'] = metadata
648 taginfo = mergeMultipleDict(v)
651 atlas_release = metadata.get(
'/TagInfo', taginfo)
652 atlas_release = atlas_release.get(
'AtlasRelease',
653 taginfo[
'AtlasRelease'])
654 taginfo[
'AtlasRelease'] = atlas_release
655 peeked_data[
'det_descr_tags'] = taginfo
656 peeked_data[
'tag_info'] = taginfo
660 ddt = peeked_data[
'det_descr_tags']
661 peeked_data[
'geometry'] = ddt.get(
'GeoAtlas',
None)
662 peeked_data[
'conditions_tag'] = ddt.get(
'IOVDbGlobalTag',
None)
665 peeked_data[
'beam_type']= [ddt.get(
'beam_type',
'N/A')]
666 beam_ene = maybe_float(ddt.get(
'beam_energy',
'N/A'))
667 peeked_data[
'beam_energy']=[beam_ene]