86 def generate(self, flags, store: bool =
False) -> AutoPrescaleSet:
87
88 from TriggerMenuMT.HLT.Config.Utility.HLTMenuConfig import HLTMenuConfig
89
90
91 from TrigConfigSvc.TriggerConfigAccess import getL1MenuAccess
92 l1_triggers = getL1MenuAccess(flags).itemNames()
93
94 group_prescales_set =
set(self.group_prescales.keys())
95
96 def match(s1: set, s2: set) -> bool:
return not s1.isdisjoint(s2)
97
98
99 ps_set = AutoPrescaleSet()
100
101
102 for chain, chain_dict in HLTMenuConfig.dicts().items():
103 ps = 1
104
105 if chain in self.disable_chains: ps = -1
106 elif self.enable_chains is not None and chain not in self.enable_chains: ps = -1
107 elif chain in self.chain_prescales: ps = self.chain_prescales[chain]
108 elif match(self.disable_groups, chain_dict[
'groups']): ps = -1
109 elif self.enable_groups
is not None and not match(self.enable_groups, chain_dict[
'groups']): ps = -1
110 elif match(group_prescales_set, chain_dict[
'groups']):
111
112 for group in reversed(chain_dict['groups']):
113 if group in self.group_prescales:
114 ps = self.group_prescales[group]
115 break
116 elif chain_dict['L1item']:
117 l1s = {chain_dict[
'L1item']}
if isinstance(chain_dict[
'L1item'], str)
else set(chain_dict[
'L1item'])
118
119 if l1s.issubset(self.disable_l1_triggers): ps = -1
120 elif self.enable_l1_triggers is not None and not l1s & self.enable_l1_triggers: ps = -1
121
122 if ps <= 0: ps = -1
123
124 ps_set.hlt_prescales[chain] = ps
125
126
127 for l1_trigger in l1_triggers:
128 ps = 1
129 if l1_trigger in self.disable_l1_triggers: ps = -1
130 elif self.enable_l1_triggers is not None and l1_trigger not in self.enable_l1_triggers: ps = -1
131 elif l1_trigger in self.l1_trigger_prescales: ps = self.l1_trigger_prescales[l1_trigger]
132
133 if ps <= 0: ps = -1
134
135 ps_set.l1_prescales[l1_trigger] = ps
136
137 if self.disable_unused_l1_triggers:
138 ps_set = self.disable_unused_l1(ps_set, HLTMenuConfig.dicts())
139
140
141 if self.custom_rules:
142 ps_set = self.custom_rules(ps_set, HLTMenuConfig.dicts())
143
144
145
146 for chain, ps in ps_set.hlt_prescales.items():
147 if ps != 1: log.info(f'Applying HLTPS to the chain {chain}: {ps}')
148 HLTMenuConfig.dicts()[chain]['prescale'] = ps
149
150
151 if store: self.store_json_files(flags, ps_set)
152
153 return ps_set
154
bool match(std::string s1, std::string s2)
match the individual directories of two strings