10def DerivationTrackIsoCfg(flags,**jwarg):
11
12 mlog = logging.getLogger('DerivationTrackIsoConfig')
13 mlog.info('Starting track isolation for derivation')
14
15 acc = ComponentAccumulator()
16
17 from xAODPrimitives.xAODIso import xAODIso as isoPar
18
19 ptcone_list = [ [ isoPar.ptcone40, isoPar.ptcone30, isoPar.ptcone20 ] ]
20 trkcor_list = [ [ isoPar.coreTrackPtr ] ]
21
22 if 'object_types' not in jwarg:
23 object_types = ("Electrons", "Photons", "Muons")
24 else:
25 object_types = jwarg['object_types']
26
27 if 'WP' not in jwarg:
28 WP = 'Nonprompt_All_MaxWeight'
29 else:
30 WP = jwarg['WP']
31
32
33 from TrackVertexAssociationTool.TrackVertexAssociationToolConfig import isoTTVAToolCfg
34 ttvaCA = acc.popToolsAndMerge(
35 isoTTVAToolCfg(flags, WorkingPoint = WP))
36
37 postfix = ''
38 if 'postfix' in jwarg:
39 postfix = jwarg['postfix']
40
41 if 'ptCuts' not in jwarg:
42 ptCuts = (500, 1000)
43 else:
44 ptCuts = jwarg['ptCuts']
45
46 do_egamma = any(x in object_types for x in ("Electrons", "Photons"))
47
48 mlog.info('will isolate objects '+" ".join(object_types)+' with TTVA WP = '+WP)
49
50 for track_pt in ptCuts:
51 for loose_cone in (True, False):
52 if loose_cone and not do_egamma:
53
54 continue
55
56 cone_str = "LooseCone" if loose_cone else ""
57
58
59 name = f"{WP}TTVA{cone_str}_pt{track_pt}"
60
61
62 kwargs = {}
63 if "Electrons" in object_types:
64 kwargs["ElIsoTypes"] = ptcone_list
65 kwargs["ElCorTypes"] = trkcor_list
66 kwargs["ElCorTypesExtra"] = [[]]
67 kwargs["CustomConfigurationNameEl"] = name
68 if "Electrons" in object_types and "LRT" in postfix:
69 kwargs["ElectronCollectionContainerName"] = "LRTElectrons"
70 if "Photons" in object_types:
71 kwargs["PhIsoTypes"] = ptcone_list
72 kwargs["PhCorTypes"] = trkcor_list
73 kwargs["PhCorTypesExtra"] = [[]]
74 kwargs["CustomConfigurationNamePh"] = name
75 if "Muons" in object_types and not loose_cone:
76 kwargs["MuIsoTypes"] = ptcone_list
77 kwargs["MuCorTypes"] = trkcor_list
78 kwargs["MuCorTypesExtra"] = [[]]
79 kwargs["CustomConfigurationNameMu"] = name
80 if "Muons" in object_types and not loose_cone and "LRT" in postfix:
81 kwargs["MuonCollectionContainerName"] = "MuonsLRT"
82
83
84 toolkwargs = {}
85
86 if 'WP' in jwarg:
87 toolkwargs['TTVATool'] = ttvaCA
88
89
90 from InDetConfig.InDetTrackSelectionToolConfig import (
91 isoTrackSelectionToolCfg )
92 toolkwargs['TrackSelectionTool'] = acc.popToolsAndMerge(
93 isoTrackSelectionToolCfg(flags, minPt = track_pt))
94
95 if loose_cone:
96 toolkwargs['CoreTrackEtaRange'] = 0.01
97
98 from IsolationAlgs.IsoToolsConfig import TrackIsolationToolCfg
99 kwargs['TrackIsolationTool'] = acc.popToolsAndMerge(
100 TrackIsolationToolCfg(flags,**toolkwargs))
101
102
103 kwargs['name'] = f"IsolationBuilder{WP}{cone_str}{track_pt}{postfix}"
104 acc.addEventAlgo(CompFactory.IsolationBuilder(**kwargs))
105
106 return acc
107