8 __doc__ =
"Print out event numbers of the events in a file. Format: (run#, event#)"
9 __author__ =
"Marcin Nowak"
12 import PyUtils.acmdlib
as acmdlib
15 @acmdlib.command(name=
'list-events')
16 @acmdlib.argument(
'-f',
'--file',
17 help=
'Athena file to scan')
18 @acmdlib.argument(
'-t',
'--tree-name',
19 default=
'CollectionTree',
20 help=
'name of the TTree to scan')
21 @acmdlib.argument(
'--entries',
23 help=
'a list of entries (indices, not event numbers) or an expression (like 0:3) leading to such a list, to inspect')
24 @acmdlib.argument(
'-v',
'--verbose',
27 help=
"""Enable verbose printout""")
32 eiNames = [
'EventInfoAuxDyn.eventNumber',
35 'xAOD::EventAuxInfo_v3_EventInfoAux.',
36 'xAOD::EventAuxInfo_v2_EventInfoAux.',
37 'xAOD::EventAuxInfo_v1_EventInfoAux.',
38 'xAOD::EventAuxInfo_v3_Bkg_EventInfoAux.',
39 'xAOD::EventAuxInfo_v2_Bkg_EventInfoAux.',
40 'xAOD::EventAuxInfo_v1_Bkg_EventInfoAux.',
42 'ByteStreamEventInfo',
43 'EventInfo_p4_McEventInfo',
44 'EventInfo_p4_ByteStreamEventInfo']
45 runName =
'EventInfoAuxDyn.runNumber'
54 msg.error(
'Cannot find event info, aborting.')
56 msg.info(
"Using branch: %s", einame)
58 tree.SetBranchStatus (
'*', 0)
59 tree.SetBranchStatus (einame, 1)
60 if 'AuxDyn' in einame:
61 tree.SetBranchStatus (runName, 1)
64 for idx
in range(tree.GetEntriesFast()):
66 if einame.endswith(
'Aux.'):
67 ei = getattr(tree, einame)
68 eventList.append((ei.runNumber, ei.eventNumber))
69 elif einame.endswith(
'Info'):
70 eid = getattr(tree, einame).m_event_ID
71 eventList.append((eid.m_run_number, eid.m_event_number))
72 elif 'AuxDyn' in einame:
73 eventList.append(( getattr(tree, runName), getattr(tree, einame)))
75 tree.SetBranchStatus (
'*', 1)
81 def getEventList(file, tree_name="CollectionTree", entries='', verbose=False):
82 """Get list of event+run numbers for given entries in a file/tree"""
84 import PyUtils.Logging
as L
85 msg = L.logging.getLogger(
'list-events')
87 msg.setLevel(L.logging.VERBOSE)
89 msg.setLevel(L.logging.WARNING)
91 msg.info(
'file: [%s]', file)
92 msg.info(
'tree: [%s]', tree_name)
93 msg.info(
'entries: %s', entries)
95 def get_event_range(entry):
98 if isinstance(entry, str):
102 vals = entry.split(
':')
103 smin =
int(vals[0])
if len(vals) > 0
and vals[0].isdigit()
else 0
104 smax =
int(vals[1])
if len(vals) > 1
and vals[1].isdigit()
else None
106 elif entry.isdigit():
108 smax =
int(entry)
if int(entry) > 0
else None
110 elif isinstance(entry, int):
112 smax = entry
if entry > 0
else None
115 msg.warning(f
"Unknown entries argument {entry}, will list all events...")
118 import PyUtils.RootUtils
as ru
121 dumper = ru.RootFileDumper(file, tree_name)
122 except AttributeError
as e:
127 if entries
in (-1,
'',
'-1'):
128 smax = dumper.tree.GetEntries()
130 smin, smax = get_event_range(entries)
131 msg.debug(f
"Getting Event numbers for entries [{smin},{smax}]")
137 """Print event numbers of events in a file. Format: (run#, event#)"""
139 eventList =
getEventList(args.file, args.tree_name, args.entries, args.verbose)
141 for ent
in eventList:
148 if __name__ ==
"__main__":
150 if len(sys.argv) < 2:
151 print(
"no filename given")
154 for ent
in eventList: