34 aliases =
'\n'.join(f
'{a} -> {f}' for a, f
in MENU_ALIASES.items())
35 epi=
'menu aliases:\n' + aliases
36 parser = flags.getArgumentParser(
37 description=__doc__, epilog=epi,
39 parser.add_argument(
'-m',
'--menu',
40 default=
'Physics_pp_run3_v1',
42 output = parser.add_mutually_exclusive_group()
43 output.add_argument(
'-n',
'--names', action=
'store_true',
45 output.add_argument(
'-p',
'--parse-names', action=
'store_true',
47 parser.add_argument(
'-L',
'--check-l1', action=
'store_true',
49 parser.add_argument(
'-C',
'--check-CPS', action=
'store_true',
51 parser.add_argument(
'-s',
'--stream', const=
'Main', nargs=
'?',
53 parser.add_argument(
'-D',
'--dump-dicts', action=
'store_true',
55 group = parser.add_mutually_exclusive_group()
74 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
75 flags = initConfigFlags()
78 args = flags.fillFromArgs(parser=parser)
79 menu_name = MENU_ALIASES.get(args.menu, args.menu)
82 if args.check_l1
or args.check_CPS
or args.dump_dicts:
83 args.parse_names =
True
85 from AthenaConfiguration.TestDefaults
import defaultGeometryTags
86 if "run4" in args.menu:
87 flags.GeoModel.AtlasVersion = defaultGeometryTags.RUN4
89 flags.GeoModel.AtlasVersion = defaultGeometryTags.RUN3
91 flags.Trigger.triggerConfig=
'FILE'
93 flags.Trigger.triggerMenuSetup=menu_name
97 from TrigConfigSvc.TrigConfigSvcCfg
import generateL1Menu
101 menumodule = importlib.import_module(f
'TriggerMenuMT.HLT.Menu.{menu_name}')
102 menu = menumodule.setupMenu()
107 return args.stream
in chain.stream
113 groupstr = args.group
114 def filt(x, old=filt):
117 for group
in x.groups:
118 if group.startswith(groupstr):
125 elif args.parse_names:
132 for chain, chain_dict
in chain_to_dict.items():
133 if not chain_dict[
'L1item']:
136 this_l1items = chain_dict[
'L1item'].
split(
',')
137 for this_l1
in this_l1items:
138 if this_l1
not in l1items:
139 sys.stderr.write(f
'L1 item not in menu for HLT item {chain}\n')
148 def match_group(expr,chain):
149 for group
in chain.groups:
158 chain_dict = chain_to_dict[chain.name]
160 not chain_dict[
'L1item']
161 or not match_group(
'Support',chain)
162 or match_group(
'TagAndProbe',chain)
168 if len(chain_dict[
'L1item'].
split(
',')) == 1:
169 if chain_dict[
'L1item']
not in L1_to_chains:
170 L1_to_chains[chain_dict[
'L1item']] =
set()
171 L1_to_chains[chain_dict[
'L1item']].
add(chain.name)
173 if match_group(
'RATE:CPS',chain):
175 for group
in chain.groups:
176 if group.startswith(
'RATE:CPS_'):
177 cps_item =
'L1_'+group[9:]
178 if cps_item ==
'L1_ZB':
179 cps_item =
'L1_ZeroBias'
180 if cps_item
not in cps_to_chains:
181 cps_to_chains[cps_item] =
set()
182 cps_to_chains[cps_item].
add(chain.name)
184 for cps_item, cps_chains
in cps_to_chains.items():
185 L1_chains = L1_to_chains[cps_item]
186 if len(L1_chains) < len(cps_chains):
187 raise RuntimeError(
'More CPS chains than L1-seeded, something wrong in parsing')
188 if len(cps_chains) < len(L1_chains):
189 print(f
'CPS group seeded by {cps_item} does not include all support chains')
190 print(f
' Contains {len(cps_chains)} / {len(L1_chains)}')
192 for missing
in L1_chains.difference(cps_chains):
221 returns map of chain names to dictionaries with a set of failed chains
224 logging.WARNING = logging.DEBUG
226 known_failure =
set()
230 chain_dict = dictFromChainName(flags, chain)
231 name = chain_dict[
'chainName']
232 chain_to_dict[name] = chain_dict
235 f
'Passed: {len(passed)}, Known failures: {len(known_failure)}\n')
237 return chain_to_dict, new_failure