3 from TrigHLTJetHypo.FastReductionAlgToolFactory
import toolfactory
7 from TrigHLTJetHypo.scenario_ht
import scenario_ht
8 from TrigHLTJetHypo.scenario_dipz
import scenario_dipz
9 from TrigHLTJetHypo.scenario_htdipz
import scenario_htdipz
10 from TrigHLTJetHypo.scenario_dijet
import scenario_dijet
11 from TrigHLTJetHypo.scenario_fbdjnoshared
import scenario_fbdjnoshared
12 from TrigHLTJetHypo.scenario_fbdjshared
import scenario_fbdjshared
13 from TrigHLTJetHypo.scenario_simple
import scenario_simple
15 from TrigHLTJetHypo.prefilter_mask
import prefilter_mask
16 from TrigHLTJetHypo.prefilter_ptrange
import prefilter_ptrange
17 from TrigHLTJetHypo.prefilter_maxmult
import prefilter_maxmult
18 from TrigHLTJetHypo.prefilter_clean
import prefilter_clean
20 from TrigHLTJetHypo.hypoToolDisplay
import hypoToolDisplay
24 from TrigHLTJetHypo.makeConditionFilterConfigurer
import (
25 makeConditionFilterConfigurer,
28 from TrigHLTJetHypo.make_repeatedCondConfigurer
import (
30 make_repeatedCondCfgFromParams,
33 from DecisionHandling.TrigCompositeUtils
import isLegId, getLegIndexInt
35 from AthenaCommon.Logging
import logging
40 logger = logging.getLogger( __name__)
41 logger.setLevel(DEBUG)
45 'DJMASS200j20' :
'DIJET20j12ptXX200djmass',
46 'DJMASS350j20' :
'DIJET20j12ptXX350djmass',
47 'DJMASS300j35' :
'DIJET35j12ptXX300djmass',
48 'DJMASS500j35' :
'DIJET35j12ptXX500djmass',
49 'DJMASS700j35' :
'DIJET35j12ptXX700djmass',
50 'DJMASS1000j35' :
'DIJET35j12ptXX1000djmass',
51 'DJMASS700j40' :
'DIJET40j12ptXX700djmass',
52 'DJMASS700j50x0eta240' :
'DIJET50j12ptXX0j12eta240XX700djmass',
53 'DJMASS700j80x0eta240' :
'DIJET80j12ptXX0j12eta240XX700djmass',
54 'DJMASS900j50' :
'DIJET50j12ptXX900djmass',
55 'DJMASS1000j50' :
'DIJET50j12ptXX1000djmass',
56 'DJMASS1000j50dphi240' :
'DIJET50j12ptXX1000djmassXXdjdphi240',
57 'DJMASS900j50dphi240' :
'DIJET50j12ptXX900djmassXXdjdphi240',
58 'DJMASS1000j50dphi200x400deta' :
'DIJET50j12ptXX1000djmassXXdjdphi200XX400djdeta',
59 'DJMASS900j50dphi200x400deta' :
'DIJET50j12ptXX900djmassXXdjdphi200XX400djdeta',
60 'DJMASS1000j50dphi260x200deta' :
'DIJET50j12ptXX1000djmassXXdjdphi260XX200djdeta',
61 'DJMASS900j50dphi260x200deta' :
'DIJET50j12ptXX900djmassXXdjdphi260XX200djdeta',
62 'DJMASS1000j30dphi260x200deta' :
'DIJET30j12ptXX1000djmassXXdjdphi260XX200djdeta',
63 'DJMASS900j30dphi260x200deta' :
'DIJET30j12ptXX900djmassXXdjdphi260XX200djdeta',
64 'DJMASS1000j50x200deta' :
'DIJET50j12ptXX1000djmassXX200djdeta',
65 'DJMASS900j50x200deta' :
'DIJET50j12ptXX900djmassXX200djdeta',
67 'DJMASS1000j50dphi260' :
'DIJET50j12ptXX1000djmassXXdjdphi260',
68 'DJMASS900j50dphi260' :
'DIJET50j12ptXX900djmassXXdjdphi260',
73 """make a repeated condition configurer for the fast reduction
74 root node. This will will have a single accapt all internal node."""
78 conditionMakers = [toolclass(**args)]
83 conditionMakers=conditionMakers)
88 """the parameter object passed in is built in the modules handling
89 scenarios. It contains the information needed to build the
90 configuration AlgTool that intialiases a hypo helper AlgTool"""
94 assert len(params.repcondargs) == len(params.filterparam_inds)
95 assert len(params.filterparam_inds) >= len(params.filterparams)
99 for ra
in params.repcondargs:
104 filtConditionMakers = []
105 filtConditionMakerInds = [-1]
107 for ra_ind
in params.filterparam_inds:
109 ra = params.filterparams[ra_ind]
111 filtConditionMakerInds.append(len(filtConditionMakers)-1)
113 filtConditionMakerInds.append(-1)
115 toolclass, name =
toolfactory(
'HelperToolConfigTool')
117 vals = {
'name': name,
118 'conditionMakers': repcondobjs,
119 'filterMakers': filtConditionMakers,
120 'filterMakerInds': filtConditionMakerInds,
121 'treeVector': params.treevec,
122 'leafVector': params.leafvec,
125 return toolclass(**vals)
129 """Obtain the paramters needed to build an AlgTool
130 to initialise a jet hypo HelperAlgTool"""
140 return helperconfigobjs
144 """Obtain the paramters needed to build an AlgTool
145 to initialise a jet hypo HelperAlgTool"""
155 return helperconfigobjs
158 """Obtain the paramters needed to build an AlgTool
159 to initialise a jet hypo HelperAlgTool"""
163 helper_params =
scenario_ht(scenario, chainPartInd)
169 return helperconfigobjs
172 """Obtain the paramters needed to build an AlgTool
173 to initialise a jet hypo HelperAlgTool"""
183 return helperconfigobjs
186 """Obtain the paramters needed to build an AlgTool
187 to initialise a jet hypo HelperAlgTool"""
197 return helperconfigobjs
201 """Obtain the paramters needed to build an AlgTool
202 to initialise a jet hypo HelperAlgTool"""
212 return helperconfigobjs
216 """Obtain the paramters needed to build an AlgTool
217 to initialise a jet hypo HelperAlgTool"""
227 return helperconfigobjs
231 """Maker a list of helper tool config tool for a non-simple scenario.
232 Note: a non-simple scenario will produce more than HelperToolConfigTool
233 if jet sharing among Conditions is required."""
236 if scenario
in aliasesDict.keys(): scenario = aliasesDict[scenario]
240 'HTZ': process_htdipz,
242 'DIJET': process_dijet,
243 'FBDJSHARED': process_fbdjshared,
244 'FBDJNOSHARED': process_fbdjnoshared,
248 pattern =
r'^(?P<stub>[A-Z]+)'
249 rgx = re.compile(pattern)
250 m = rgx.match(scenario)
251 assert m
is not None,
'No scenario stub was found'
252 groupdict = m.groupdict()
253 assert groupdict[
'stub']
in router,
'scenario stub ({}) not recognized'.
format(groupdict[
'stub'])
255 return router[groupdict[
'stub']](scenario, chainPartInd)
259 """Create HelperToolConfigTool instances. Each instance
260 configures a FastReduction tree. Chain parts with the 'simple' scenario
261 are used to form a single HelperToolConfigTool. The information
262 may be spread over a number of chain parts.
264 There is at most one chain part with a non-simple scenario.
265 This may give rise to > 1 HelperToolConfigTool instance - as this
266 is how jet sharing among Conditions is handled.
268 If there are both simple and non-simple scenarios, there will be
269 n HelperToolConfigTool instances, where n >=2: one for the simple
270 scenario chain parts, and n-1 for the non-simple scenario.
273 chain_parts = chain_dict[
'chainParts']
275 simple_chainparts = [
276 cp
for cp
in chain_parts
if cp[
'hypoScenario'] ==
'simple']
277 simple_cpis = [cp[
'chainPartIndex']
for cp
in simple_chainparts]
282 assert simple_cpis ==
sorted(simple_cpis),
"disordered chain parts"
283 assert simple_cpis[-1] - simple_cpis[0] == len(simple_cpis) - 1,
"nonsequential chainParts"
284 helperToolConfigTools = []
289 if simple_chainparts:
291 assert simple_chainparts[-1][
'tboundary'] ==
''
294 for cp
in simple_chainparts:
296 if cp[
'tboundary'] ==
'SHARED':
304 scenario_chainparts =[
305 cp
for cp
in chain_parts
if cp[
'hypoScenario'] !=
'simple']
307 if scenario_chainparts:
308 for scenario_chainpart
in scenario_chainparts:
312 assert scenario_chainpart[
'threshold'] ==
'0'
314 scenario = scenario_chainpart[
'hypoScenario']
320 chainPartInd = scenario_chainpart[
'chainPartIndex']
325 return helperToolConfigTools
329 """Set up the prefilters fo the chain."""
332 chain_parts = [cp
for cp
in chain_dict[
'chainParts']
if
333 cp[
'signature'] ==
'Jet' and 'prefilters' in cp]
335 [pf_strings.extend(cp[
'prefilters'])
for cp
in chain_parts]
345 'MASK': prefilter_mask,
346 'PTRANGE': prefilter_ptrange,
347 'MAXMULT': prefilter_maxmult,
348 'CLEAN': prefilter_clean,
351 pattern =
r'(?P<stub>[A-Z]*)'
352 rgx = re.compile(pattern)
355 for pf_string
in pf_strings:
357 m = rgx.match(pf_string)
358 assert m
is not None,
'No prefilter stub was found'
359 groupdict = m.groupdict()
360 assert groupdict[
'stub']
in prefilter_router,
'prefilter stub ({}) not recognized'.
format(groupdict[
'stub'])
361 filters.append(prefilter_router[groupdict[
'stub']](pf_string))
369 if isLegId(chain_dict[
'chainName']):
372 end_index = start_index + len(chain_dict[
'chainParts'])
374 return start_index, end_index
382 fn = chain_dict[
'chainName'] +
'_chaindict.log'
383 from pprint
import pprint
384 with open(fn,
'w')
as fh:
385 pprint(chain_dict, fh)
393 args = {
'name': name,
394 'HypoConfigurers': helperToolConfigTools,
395 'prefilterMakers': prefilterMakers
398 helper_tool = toolclass(**args)
404 args = {
'name': chain_dict[
'chainName'],
406 'visit_debug': visit_debug,
407 'helper_tool': helper_tool,
408 'chain_name': chain_dict[
'chainName'],
409 'startLabelIndex': startLabelIndex,
410 'endLabelIndex': endLabelIndex,
413 hypo_tool = toolclass(**args)
414 hypo_tool.visit_debug = visit_debug
422 if __name__ ==
'__main__':
424 'L1item':
'L1_EM22VHI',
425 'alignmentGroups': [
'Egamma',
'JetMET',
'JetMET'],
426 'chainCounter': 1451,
427 'chainMultiplicities': [1, 2, 2],
428 'chainName':
'leg001_HLT_g25_medium_2j35_pf_ftf_0eta490_bdl1r77_2j35_pf_ftf_0eta490_L1EM22VHI',
429 'chainNameHash': 4053501929,
430 'chainParts': [{
'L1threshold':
'FSNOSEED',
432 'alignmentGroup':
'JetMET',
440 'chainPartName':
'2j35_pf_ftf_0eta490_bdl1r77',
441 'clusterCalib':
'em',
444 'etaRange':
'0eta490',
447 'hypoScenario':
'simple',
449 'jetCalib':
'default',
456 'sigFolder': [
'Bjet'],
465 'trkpresel':
'nopresel'},
466 {
'L1threshold':
'FSNOSEED',
468 'alignmentGroup':
'JetMET',
476 'chainPartName':
'2j35_pf_ftf_0eta490',
477 'clusterCalib':
'em',
480 'etaRange':
'0eta490',
483 'hypoScenario':
'simple',
485 'jetCalib':
'default',
492 'sigFolder': [
'Jet'],
501 'trkpresel':
'nopresel'}],
502 'eventBuildType':
'',
503 'extraComboHypos': [],
504 'groups': [
'Support:Legacy',
'RATE:EgammaBjet',
'BW:BJet'],
507 'mergingStrategy':
'auto',
510 'sigDicts': {
'Bjet': [
'Bjet'],
'Egamma': [
'Photon'],
'Jet': [
'Jet']},
513 'signatures': [
'Photon',
'Bjet',
'Jet'],
517 'topoStartFrom':
False}