59 from AthenaMonitoringKernel.GenericMonitoringTool
import GenericMonitoringTool
61 chainName = chainDict[
'chainName']
62 log.debug(
"[TrigComboHypoToolFromDict] chain %s, combo hypos to be processed: %s, t", chainName, chainDict[
'extraComboHypos'])
70 theregex = fr
"(\d*)({'|'.join(allowed_obs.keys())})([{topoLegIndices}])([{topoLegIndices}])(\d*)"
71 matcher = re.compile(theregex)
73 for iTopo, topoInfo
in enumerate(chainDict[
'extraComboHypos']):
74 log.debug(
"[TrigComboHypoToolFromDict] new combo hypo for chain: %s, topoInfo = %s", chainName, topoInfo)
76 result = matcher.match(topoInfo)
78 log.error(
"[TrigComboHypoToolFromDict] Topo expression %s does not conform to format (min?)(var)(legA)(legB)(max?).",topoInfo)
79 log.error(
"[TrigComboHypoToolFromDict] Must use leg IDs in %s, vars in {allowed_obs.keys()}",topoLegIndices)
80 raise ValueError(f
"[TrigComboHypoToolFromDict] Invalid topo expression {topoInfo} received in 'extraComboHypos'!")
83 str_min, var, char_legA, char_legB, str_max = result.groups()
86 use_min =
bool(str_min)
87 use_max =
bool(str_max)
88 if not (use_min
or use_max):
89 log.error(
"[TrigComboHypoToolFromDict] Topo expression %s does not specify a min or max cut value.",topoInfo)
90 raise ValueError(f
"[TrigComboHypoToolFromDict] Invalid topo expression {topoInfo} received in 'extraComboHypos'!")
92 if var
in [
'dR',
'dphi',
'deta']:
93 cut_min =
float(str_min)/10.
if use_min
else float(
'nan')
94 cut_max =
float(str_max)/10.
if use_max
else float(
'nan')
96 cut_min =
float(str_min)
if use_min
else float(
'nan')
97 cut_max =
float(str_max)
if use_max
else float(
'nan')
100 i_legA = topoLegIndices.find(char_legA)
101 i_legB = topoLegIndices.find(char_legB)
106 for ileg
in [i_legA,i_legB]:
107 cpart = chainDict[
'chainParts'][ileg]
108 legname = f
"leg{ileg:03d}_{chainName}"
113 'isMET' : cpart[
'signature']==
'MET',
114 'multiplicity':
int(cpart[
'multiplicity'])
118 n_MET_legs = legInfo[0][
'isMET'] + legInfo[1][
'isMET']
125 if legInfo[0][
'multiplicity'] != 2:
126 log.error(
"[TrigComboHypoToolFromDict] Error configuring topo for chain %s!",chainName)
127 log.error(
"[TrigComboHypoToolFromDict] Topo selection %s requires multiplicity 2 on leg %d, found %d!",topoInfo,i_legA,legInfo[0][
'multiplicity'])
128 raise Exception(
"[TrigComboHypoToolFromDict] Invalid multiplicity")
130 log.error(
"[TrigComboHypoToolFromDict] Configured with the same MET leg on both sides -- impossible to satisfy!")
131 raise Exception(
"[TrigComboHypoToolFromDict] Identical MET legs for topo selection")
132 if len(chainDict[
'chainParts'])==1:
136 if li[
'multiplicity'] != 1:
137 log.error(
"[TrigComboHypoToolFromDict] Error configuring topo for chain %s!",chainName)
138 log.error(
"[TrigComboHypoToolFromDict] Topo selection %s requires multiplicity 1 on leg %d, found %d!",topoInfo,li[
'index'],li[
'multiplicity'])
139 raise Exception(
"[TrigComboHypoToolFromDict] Invalid multiplicity")
142 if n_MET_legs
not in allowed_obs[var][
'n_MET_legs']:
143 log.error(
"[TrigComboHypoToolFromDict] Attempting var %s with %d MET legs, %s allowed", var, n_MET_legs, allowed_obs[var][
'n_MET_legs'])
144 raise Exception(
"[TrigComboHypoToolFromDict] Attempting to use the MET leg in var")
146 if len(chainDict[
'extraComboHypos'])==1:
147 monToolName =
"MonTool_"+chainName
149 monToolName = f
"MonTool_{chainName}_{chainDict['extraComboHypos'][iTopo]}"
152 monTool.defineHistogram(histNameTag+
'OfAccepted', type=
'TH1F', path=
'EXPERT',
153 title=var+
" in accepted combinations; {}".
format(var),
154 xbins=allowed_obs[var][
'hist_nbins'],
155 xmin=allowed_obs[var][
'hist_min'],
156 xmax=allowed_obs[var][
'hist_max'])
157 monTool.defineHistogram(histNameTag+
'OfProcessed', type=
'TH1F', path=
'EXPERT',
158 title=var+
" in processed combinations; {}".
format(var),
159 xbins=allowed_obs[var][
'hist_nbins'],
160 xmin=allowed_obs[var][
'hist_min'],
161 xmax=allowed_obs[var][
'hist_max'])
162 log.debug(
"[TrigComboHypoToolFromDict] tool configured for hypo name: %s, topoInfo = %s", chainName, topoInfo)
163 log.debug(
"[TrigComboHypoToolFromDict] histName = %s", histNameTag)
165 if len(chainDict[
'extraComboHypos'])==1:
166 monTool.HistPath = f
'ComboHypo/{chainName}'
168 subDirNameTag = f
"{var}leg{i_legA:03d}leg{i_legB:03d}"
169 monTool.HistPath = f
'ComboHypo/{chainName}/detail_{subDirNameTag}'
174 "UseMinVec" : use_min,
175 "UseMaxVec" : use_max,
176 "LowerCutVec" : cut_min,
177 "UpperCutVec" : cut_max,
178 "LegAVec" : legInfo[0][
"HLTId"],
179 "LegBVec" : legInfo[1][
"HLTId"],
180 "IsLegA_METVec": legInfo[0][
"isMET"],
181 "IsLegB_METVec": legInfo[1][
"isMET"],
182 "MonTools" : monTool,
184 topoDefs.append(singleTopoDef)
187 log.debug(
"[TrigComboHypoToolFromDict] tool configured for hypo name: %s, topoInfo = %s", chainName, topoInfo)
188 log.debug(
"[TrigComboHypoToolFromDict] var = %s", singleTopoDef[
'Variables'])
189 log.debug(
"[TrigComboHypoToolFromDict] legA = %s", singleTopoDef[
'LegAVec'])
190 log.debug(
"[TrigComboHypoToolFromDict] legB = %s", singleTopoDef[
'LegBVec'])
192 log.debug(
"[TrigComboHypoToolFromDict] min = %10.3f", singleTopoDef[
'LowerCutVec'])
194 log.debug(
"[TrigComboHypoToolFromDict] max = %10.3f", singleTopoDef[
'UpperCutVec'])
199 toolProps = {k:[thedef[k]
for thedef
in topoDefs]
for k
in topoDefs[0]}
200 tool = CompFactory.TrigComboHypoTool(chainName, SkipLegCheck=skipLegCheck, **toolProps)