80def TrigMinBiasEff(flags):
81 from TrigConfigSvc.TriggerConfigAccess import getHLTMonitoringAccess
82 monAccess = getHLTMonitoringAccess(flags)
83
84 mbNames = [name for name, _ in getMinBiasChains(monAccess)]
85 if len(mbNames) == 0:
86 return _TrigEff(flags, [])
87
88 log.info(f'Monitoring {len(mbNames)} MinBias chains')
89 log.debug(mbNames)
90
91
92 def _c(chain, refchain, level, **kwargs):
93 conf = {"chain": chain, "refchain": refchain, "level": level, "xmin": 0, "xmax": 20}
94 conf.update(kwargs)
95 return conf
96
97 def _isFilled(chain):
98 name, _ = chain
99 return "_EMPTY" not in name and "_UNPAIRED_ISO" not in name
100
101 spTrkChains = getMinBiasChains(monAccess, '(_sptrk_|_sp_|_mbts_)')
102 filledChains = list(filter(_isFilled, spTrkChains))
103 emptyChains = [chain for chain in spTrkChains if "_EMPTY" in chain[0]]
104 unpairedChains = [chain for chain in spTrkChains if "_UNPAIRED_ISO" in chain[0]]
105
106 triggerAndRef = []
107
108
109 triggerAndRef += [_c(name, "HLT_noalg_L1RD0_FILLED", level) for name, level in filledChains]
110 triggerAndRef += [_c(name, "HLT_noalg_L1RD0_EMPTY", level) for name, level in emptyChains]
111 triggerAndRef += [_c(name, "HLT_noalg_L1RD0_UNPAIRED_ISO", level) for name, level in unpairedChains]
112
113
114 triggerAndRef += [_c(name, "HLT_noalg_mb_L1RD0_FILLED", level) for name, level in filledChains]
115 triggerAndRef += [_c(name, "HLT_noalg_mb_L1RD0_EMPTY", level) for name, level in emptyChains]
116 triggerAndRef += [_c(name, "HLT_noalg_mb_L1RD0_UNPAIRED_ISO", level) for name, level in unpairedChains]
117
118
119 triggerAndRef += [_c("HLT_mb_sptrk_L1RD0_FILLED", "HLT_mb_sp_L1RD0_FILLED", 'Shifter')]
120
121
122 hmtChains = getMinBiasChains(monAccess, '(hmt)')
123 nonPusupChains = [chain for chain in hmtChains if '_pusup' not in chain[0]]
124 if len(nonPusupChains) != 0:
125
126 def _trk(chain):
127 name, _ = chain
128 part = name.split("_")
129 for el in part:
130 if el.startswith("trk"):
131 return int(el.strip("trk"))
132 raise RuntimeError(f"Chain {name} is not the hmt chain")
133
134 nonPusupChains.sort(key=lambda chain: int(_trk(chain)))
135
136
137 first = nonPusupChains[0]
138 triggerAndRef += [_c(first[0], "HLT_mb_sptrk_L1RD0_FILLED", first[1], xmax=_trk(first) + 30)]
139
140
141 triggerAndRef += [_c(chain[0], "HLT_mb_sptrk_L1RD0_FILLED", chain[1], xmin=_trk(chain) - 20, xmax=_trk(chain) + 50) for chain in nonPusupChains[1:]]
142
143
144 pusupChains = [chain for chain in hmtChains if '_pusup' in chain[0]]
145
146 def _dropsup(name):
147 s = name.split("_")
148 return "_".join(s[:3] + s[4:])
149
150 triggerAndRef += [_c(chain[0], _dropsup(chain[0]), chain[1], xmin=_trk(chain) - 20, xmax=_trk(chain) + 50) for chain in pusupChains]
151
152
153 exclChains = getMinBiasChains(monAccess, '(excl)')
154 for name, level in exclChains:
155 triggerAndRef.append(_c(name, 'HLT_mb_sptrk_L1RD0_FILLED', level))
156 triggerAndRef.append(_c(name, 'HLT_mb_sp_L1RD0_FILLED', level))
157
158
159 noalgMbtsChains = getMinBiasChains(monAccess, '^HLT_noalg_.*(L1MBTS)')
160 triggerAndRef += [_c(name, 'HLT_mb_sptrk_L1RD0_FILLED', level) for name, level in noalgMbtsChains]
161
162
163 mbtsL1Chains = ["L1_MBTS_A", "L1_MBTS_C", "L1_MBTS_1", "L1_MBTS_2", "L1_MBTS_1_1"]
164 triggerAndRef += [_c(chain, 'HLT_mb_sptrk_L1RD0_FILLED', 'Expert') for chain in mbtsL1Chains]
165
166
167 triggerAndRef += [_c("L1_TE{}".format(i), 'HLT_mb_sptrk_L1RD0_FILLED', 'Expert', xmin=0, xmax=100) for i in [3, 5, 10, 40]]
168
169
170 def _find_noalg(chain):
171 pos = chain.find('L1')
172 return 'HLT_noalg_' + chain[pos:]
173
174 def _chains_with_noalg_ref():
175 chains = []
176
177 for name, level in filledChains:
178
179 if 'L1RD0_FILLED' in name:
180 continue
181
182 noalg = _find_noalg(name)
183 if noalg not in mbNames:
184 continue
185
186 chains.append(_c(name, noalg, level))
187
188 return chains
189
190 triggerAndRef += _chains_with_noalg_ref()
191
192
193 hiChains = getMinBiasChains(monAccess, '(_hi_)')
194
195
196 def _hi_chain_with_mb_ref():
197 chains = []
198
199 for name, level in hiChains:
200 split = name.split('_hi_')
201 if len(split) != 2:
202 continue
203 mb, hi_l1 = split
204
205 split = hi_l1.split('L1')
206 if len(split) != 2:
207 continue
208 hi, l1 = split
209
210 ref = f'{mb}_L1{l1}'
211 if ref not in mbNames:
212 continue
213
214 chains.append(_c(name, ref, level))
215
216 return chains
217
218 triggerAndRef += _hi_chain_with_mb_ref()
219
220
221
222 triggerAndRef.append(_c('HLT_mb_excl_1trk4_pt1_hi_FgapAC5_L12eEM1_VjTE200', 'HLT_mb_excl_1trk4_pt1_L12eEM1_VjTE200_GAP_AANDC', 'Expert'))
223
224 return _TrigEff(flags, triggerAndRef)
225
226