93 parser = argparse.ArgumentParser(description=
'Output run number (mc channel number in case of Monte Carlo),'
94 ' event number of events in input (POOL/BS) file(s).',
95 formatter_class=argparse.ArgumentDefaultsHelpFormatter)
96 parser.add_argument(
'--inputFiles', required=
True,
97 help=
'input (POOL/BS) file(s) separated with commas')
98 parser.add_argument(
'--outputFile', default=
'-',
99 help=
'output text file containing <run number> <event number> record(s) (one per line);'
100 ' if is -, write output on standard output')
101 parser.add_argument(
'--prefix', default=
'',
102 help=
'prefix to print in front of each line of output')
103 args = parser.parse_args(args=args)
105 if args.outputFile ==
"-":
109 output = open(args.outputFile,
'w', encoding=
"utf-8")
113 from AthenaCommon.Logging
import logging
114 log = logging.getLogger(
'EventInfo')
116 from os.path
import expandvars, expanduser
117 args.inputFiles = [expandvars(expanduser(fn))
for fn
in args.inputFiles.split(
',')]
119 log.info(f
"input files: {",
".join(repr(fn) for fn in args.inputFiles)}")
120 log.info(f
"output file: {args.outputFile!r}")
121 log.info(f
"prefix: {args.prefix!r}")
123 from PyUtils.MetaReader
import read_metadata
124 logging.getLogger(
'MetaReader').setLevel(logging.WARNING)
125 metadata = read_metadata(args.inputFiles[0], mode=
'tiny')[args.inputFiles[0]]
127 if metadata[
'file_type'] ==
'BS':
130 cmd = [
"AtlListBSEvents",
"-l"]
131 cmd.extend(args.inputFiles)
134 log.debug(f
"... {cmd=}")
136 proc = subprocess.run(cmd, capture_output=
True, text=
True, check=
True)
137 except OSError
as err:
140 except subprocess.CalledProcessError
as err:
141 log.error(f
"{err}\nstderr={err.stderr!r}\nstdout={err.stdout!r}")
142 return err.returncode
144 from collections
import defaultdict
145 info = defaultdict(list)
147 indexprefix =
"Index="
149 runoff = len(runprefix)
150 eventprefix =
"Event="
151 eventoff = len(eventprefix)
152 for line
in proc.stdout.splitlines():
154 case [Index, Run, Event, _, _, *_]
if Index.startswith(indexprefix):
155 if Run.startswith(runprefix)
and Event.startswith(eventprefix):
157 run = int(Run[runoff:])
158 event = int(Event[eventoff:])
160 log.warning(f
"could not parse {line=}")
162 log.debug(f
"parsed {run=} {event=}")
163 info[
'run_number'].append(run)
164 info[
'event_number'].append(event)
166 log.warning(f
"could not parse {line=}")
168 for run, event
in zip(info[
'run_number'], info[
'event_number'], strict=
True):
170 print(f
"{args.prefix}{run:d} {event:d}",
173 if opened: output.close()
177 log.info(
'== Listing EventInfo for events from POOL files (the CA Configuration)')
180 log.info(
'== Setting ConfigFlags')
181 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
182 flags = initConfigFlags()
183 flags.Input.Files = args.inputFiles
186 flags.Exec.OutputLevel=Lvl.WARNING
190 log.info(
'== ConfigFlags Locked')
193 log.info(
'== Configuring Main Services')
194 from AthenaConfiguration.MainServicesConfig
import MainServicesCfg
195 cfg = MainServicesCfg(flags)
198 log.info(
'== Configuring Input Reading')
199 from AthenaPoolCnvSvc.PoolReadConfig
import PoolReadCfg
200 cfg.merge(PoolReadCfg(flags))
205 evt_info=
'EventInfo',
206 is_mc=flags.Input.isMC,
209 OutputLevel=Lvl.WARNING),
210 sequenceName=
'AthAlgSeq')
212 for item
in flags.Input.TypedCollections:
213 ctype, cname = item.split(
'#')
214 if ctype.startswith((
'Trk',
'InDet')):
215 from TrkEventCnvTools.TrkEventCnvToolsConfig
import TrkEventCnvSuperToolCfg
216 cfg.merge(TrkEventCnvSuperToolCfg(flags))
217 if ctype.startswith((
'Calo',
'LAr')):
218 from LArGeoAlgsNV.LArGMConfig
import LArGMCfg
219 cfg.merge(LArGMCfg(flags))
220 if ctype.startswith((
'Calo',
'Tile')):
221 from TileGeoModel.TileGMConfig
import TileGMCfg
222 cfg.merge(TileGMCfg(flags))
223 if ctype.startswith(
'Muon'):
224 from MuonConfig.MuonGeometryConfig
import MuonGeoModelCfg
225 cfg.merge(MuonGeoModelCfg(flags))
228 log.info(
'== Running...')
231 if opened: output.close()
234 return sc.isFailure()