31 """Output run number (mc channel number in case of Monte Carlo), event number of events in input (POOL/BS) file(s).
35 if args.output ==
"-":
39 output = open(args.output,
'w', encoding=
"utf-8")
43 from AthenaCommon.Logging
import logging
44 log = logging.getLogger(
'list-events')
46 from os.path
import expandvars, expanduser
47 args.files = [expandvars(expanduser(fn))
for fn
in args.files]
49 log.info(f
"input files: {" ".join(repr(fn) for fn in args.files)}")
50 log.info(f
"output file: {args.output!r}")
51 log.info(f
"prefix: {args.prefix!r}")
53 from PyUtils.MetaReader
import read_metadata
54 logging.getLogger(
'MetaReader').setLevel(logging.WARNING)
55 metadata = read_metadata(args.files[0], mode=
'tiny')[args.files[0]]
57 if metadata[
'file_type'] ==
'BS':
60 cmd = [
"AtlListBSEvents",
"-l"]
61 cmd.extend(args.files)
64 log.debug(f
"... {cmd=}")
66 proc = subprocess.run(cmd, capture_output=
True, text=
True, check=
True)
67 except OSError
as err:
70 except subprocess.CalledProcessError
as err:
71 log.error(f
"{err}\nstderr={err.stderr!r}\nstdout={err.stdout!r}")
74 from collections
import defaultdict
75 info = defaultdict(list)
77 indexprefix =
"Index="
79 runoff = len(runprefix)
80 eventprefix =
"Event="
81 eventoff = len(eventprefix)
82 for line
in proc.stdout.splitlines():
84 case [Index, Run, Event, _, _, *_]
if Index.startswith(indexprefix):
85 if Run.startswith(runprefix)
and Event.startswith(eventprefix):
87 run = int(Run[runoff:])
88 event = int(Event[eventoff:])
90 log.warning(f
"could not parse {line=}")
92 log.debug(f
"parsed {run=} {event=}")
93 info[
'run_number'].append(run)
94 info[
'event_number'].append(event)
96 log.warning(f
"could not parse {line=}")
98 for run, event
in zip(info[
'run_number'], info[
'event_number'], strict=
True):
100 print(f
"{args.prefix}{run:d} {event:d}",
103 if opened: output.close()
107 log.info(
'== Listing <run number> <event number> for events from POOL files (the CA Configuration)')
110 log.info(
'== Setting ConfigFlags')
111 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
112 flags = initConfigFlags()
113 flags.Input.Files = args.files
116 flags.Exec.OutputLevel=Lvl.WARNING
120 log.info(
'== ConfigFlags Locked')
123 log.info(
'== Configuring Main Services')
124 from AthenaConfiguration.MainServicesConfig
import MainServicesCfg
125 cfg = MainServicesCfg(flags)
128 log.info(
'== Configuring Input Reading')
129 from AthenaPoolCnvSvc.PoolReadConfig
import PoolReadCfg
130 cfg.merge(PoolReadCfg(flags))
135 evt_info=
'EventInfo',
136 is_mc=flags.Input.isMC,
139 OutputLevel=Lvl.WARNING),
140 sequenceName=
'AthAlgSeq')
142 for item
in flags.Input.TypedCollections:
143 ctype, cname = item.split(
'#')
144 if ctype.startswith((
'Trk',
'InDet')):
145 from TrkEventCnvTools.TrkEventCnvToolsConfig
import TrkEventCnvSuperToolCfg
146 cfg.merge(TrkEventCnvSuperToolCfg(flags))
147 if ctype.startswith((
'Calo',
'LAr')):
148 from LArGeoAlgsNV.LArGMConfig
import LArGMCfg
149 cfg.merge(LArGMCfg(flags))
150 if ctype.startswith((
'Calo',
'Tile')):
151 from TileGeoModel.TileGMConfig
import TileGMCfg
152 cfg.merge(TileGMCfg(flags))
153 if ctype.startswith(
'Muon'):
154 from MuonConfig.MuonGeometryConfig
import MuonGeoModelCfg
155 cfg.merge(MuonGeoModelCfg(flags))
158 log.info(
'== Running...')
161 if opened: output.close()
164 return sc.isFailure()