216 from AthenaMonitoringKernel.GenericMonitoringTool
import GenericMonitoringTool
218 chainName = chainDict[
'chainName']
219 log.debug(
"[Trig3VarComboHypoToolFromDict] chain %s, combo hypos to be processed: %s, t", chainName, chainDict[
'extraComboHypos'])
227 theregex = fr
"(\d*)({'|'.join(allowed_3var_obs.keys())})([{topo3VarLegIndices}])([{topo3VarLegIndices}])([{topo3VarLegIndices}])(\d*)"
228 matcher = re.compile(theregex)
230 for iTopo, topoInfo
in enumerate(chainDict[
'extraComboHypos']):
231 log.debug(
"[Trig3VarComboHypoToolFromDict] new combo hypo for chain: %s, topoInfo = %s", chainName, topoInfo)
233 result = matcher.match(topoInfo)
235 log.error(
"[Trig3VarComboHypoToolFromDict] Topo expression %s does not conform to format (min?)(var)(legA)(legB)(legC)(max?).",topoInfo)
236 log.error(
"[Trig3VarComboHypoToolFromDict] Must use leg IDs in %s, vars in {allowed_3var_obs.keys()}",topo3VarLegIndices)
237 raise ValueError(f
"[Trig3VarComboHypoToolFromDict] Invalid topo expression {topoInfo} received in 'extraComboHypos'!")
240 str_min, var, char_legA, char_legB, char_legC, str_max = result.groups()
243 use_min =
bool(str_min)
244 use_max =
bool(str_max)
245 if not (use_min
or use_max):
246 log.error(
"[Trig3VarComboHypoToolFromDict] Topo expression %s does not specify a min or max cut value.",topoInfo)
247 raise ValueError(f
"[Trig3VarComboHypoToolFromDict] Invalid topo expression {topoInfo} received in 'extraComboHypos'!")
249 cut_min =
float(str_min)
if use_min
else float(
'nan')
250 cut_max =
float(str_max)
if use_max
else float(
'nan')
253 i_legA = topo3VarLegIndices.find(char_legA)
254 i_legB = topo3VarLegIndices.find(char_legB)
255 i_legC = topo3VarLegIndices.find(char_legC)
260 for ileg
in [i_legA,i_legB,i_legC]:
261 cpart = chainDict[
'chainParts'][ileg]
262 legname = f
"leg{ileg:03d}_{chainName}"
267 'isMET' : cpart[
'signature']==
'MET',
268 'multiplicity':
int(cpart[
'multiplicity'])
272 n_MET_legs = legInfo[0][
'isMET'] + legInfo[1][
'isMET'] + legInfo[2][
'isMET']
275 if n_MET_legs
not in allowed_3var_obs[var][
'n_MET_legs']:
276 log.error(
"[Trig3VarComboHypoToolFromDict] Attempting var %s with %d MET legs, %s allowed", var, n_MET_legs, allowed_3var_obs[var][
'n_MET_legs'])
277 raise Exception(
"[Trig3VarComboHypoToolFromDict] Attempting to use the MET leg in var")
279 if len(chainDict[
'extraComboHypos'])==1:
280 monToolName =
"MonTool_"+chainName
282 monToolName = f
"MonTool_{chainName}_{chainDict['extraComboHypos'][iTopo]}"
285 monTool.defineHistogram(histNameTag+
'OfAccepted', type=
'TH1F', path=
'EXPERT',
286 title=var+
" in accepted combinations; {}".
format(var),
287 xbins=allowed_3var_obs[var][
'hist_nbins'],
288 xmin=allowed_3var_obs[var][
'hist_min'],
289 xmax=allowed_3var_obs[var][
'hist_max'])
290 monTool.defineHistogram(histNameTag+
'OfProcessed', type=
'TH1F', path=
'EXPERT',
291 title=var+
" in processed combinations; {}".
format(var),
292 xbins=allowed_3var_obs[var][
'hist_nbins'],
293 xmin=allowed_3var_obs[var][
'hist_min'],
294 xmax=allowed_3var_obs[var][
'hist_max'])
295 log.debug(
"[Trig3VarComboHypoToolFromDict] tool configured for hypo name: %s, topoInfo = %s", chainName, topoInfo)
296 log.debug(
"[Trig3VarComboHypoToolFromDict] histName = %s", histNameTag)
298 if len(chainDict[
'extraComboHypos'])==1:
299 monTool.HistPath = f
'ComboHypo/{chainName}'
301 subDirNameTag = f
"{var}leg{i_legA:03d}leg{i_legB:03d}leg{i_legC:03d}"
302 monTool.HistPath = f
'ComboHypo/{chainName}/detail_{subDirNameTag}'
307 "UseMinVec" : use_min,
308 "UseMaxVec" : use_max,
309 "LowerCutVec" : cut_min,
310 "UpperCutVec" : cut_max,
311 "LegAVec" : legInfo[0][
"HLTId"],
312 "LegBVec" : legInfo[1][
"HLTId"],
313 "LegCVec" : legInfo[2][
"HLTId"],
314 "IsLegA_METVec": legInfo[0][
"isMET"],
315 "IsLegB_METVec": legInfo[1][
"isMET"],
316 "IsLegC_METVec": legInfo[2][
"isMET"],
317 "MonTools" : monTool,
319 topoDefs.append(singleTopoDef)
322 log.debug(
"[Trig3VarComboHypoToolFromDict] tool configured for hypo name: %s, topoInfo = %s", chainName, topoInfo)
323 log.debug(
"[Trig3VarComboHypoToolFromDict] var = %s", singleTopoDef[
'Variables'])
324 log.debug(
"[Trig3VarComboHypoToolFromDict] legA = %s", singleTopoDef[
'LegAVec'])
325 log.debug(
"[Trig3VarComboHypoToolFromDict] legB = %s", singleTopoDef[
'LegBVec'])
326 log.debug(
"[Trig3VarComboHypoToolFromDict] legC = %s", singleTopoDef[
'LegCVec'])
328 log.debug(
"[Trig3VarComboHypoToolFromDict] min = %10.3f", singleTopoDef[
'LowerCutVec'])
330 log.debug(
"[Trig3VarComboHypoToolFromDict] max = %10.3f", singleTopoDef[
'UpperCutVec'])
335 toolProps = {k:[thedef[k]
for thedef
in topoDefs]
for k
in topoDefs[0]}
336 tool = CompFactory.Trig3VarComboHypoTool(chainName, **toolProps)