3 """ Instantiate more custom track isolation in derivation
6 from AthenaCommon.Logging
import logging
7 from AthenaConfiguration.ComponentAccumulator
import ComponentAccumulator
8 from AthenaConfiguration.ComponentFactory
import CompFactory
12 mlog = logging.getLogger(
'DerivationTrackIsoConfig')
13 mlog.info(
'Starting track isolation for derivation')
17 from xAODPrimitives.xAODIso
import xAODIso
as isoPar
19 ptcone_list = [ [ isoPar.ptcone40, isoPar.ptcone30, isoPar.ptcone20 ] ]
20 trkcor_list = [ [ isoPar.coreTrackPtr ] ]
22 if 'object_types' not in jwarg:
23 object_types = (
"Electrons",
"Photons",
"Muons")
25 object_types = jwarg[
'object_types']
28 WP =
'Nonprompt_All_MaxWeight'
33 from TrackVertexAssociationTool.TrackVertexAssociationToolConfig
import isoTTVAToolCfg
34 ttvaCA = acc.popToolsAndMerge(
38 if 'postfix' in jwarg:
39 postfix = jwarg[
'postfix']
41 if 'ptCuts' not in jwarg:
44 ptCuts = jwarg[
'ptCuts']
46 do_egamma = any(x
in object_types
for x
in (
"Electrons",
"Photons"))
48 mlog.info(
'will isolate objects '+
" ".
join(object_types)+
' with TTVA WP = '+WP)
50 for track_pt
in ptCuts:
51 for loose_cone
in (
True,
False):
52 if loose_cone
and not do_egamma:
56 cone_str =
"LooseCone" if loose_cone
else ""
59 name = f
"{WP}TTVA{cone_str}_pt{track_pt}"
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"
87 toolkwargs[
'TTVATool'] = ttvaCA
90 from InDetConfig.InDetTrackSelectionToolConfig
import (
91 isoTrackSelectionToolCfg )
92 toolkwargs[
'TrackSelectionTool'] = acc.popToolsAndMerge(
96 toolkwargs[
'CoreTrackEtaRange'] = 0.01
98 from IsolationAlgs.IsoToolsConfig
import TrackIsolationToolCfg
99 kwargs[
'TrackIsolationTool'] = acc.popToolsAndMerge(
103 kwargs[
'name'] = f
"IsolationBuilder{WP}{cone_str}{track_pt}{postfix}"
104 acc.addEventAlgo(CompFactory.IsolationBuilder(**kwargs))
111 for track_pt
in 500, 1000:
112 for cone_str
in "",
"LooseCone":
113 name = f
"{WP}TTVA{cone_str}_pt{track_pt}"
114 iso_vars += [
"ptconeCorrBitset_"+name,
115 "ptconecoreTrackPtrCorrection_"+name ]
116 for cone_size
in 20, 30, 40:
117 for var_str
in "",
"var":
118 iso_vars.append(f
"pt{var_str}cone{cone_size}_{name}")
121 if __name__ ==
"__main__":
122 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
123 from AthenaConfiguration.ComponentAccumulator
import printProperties
124 from AthenaConfiguration.TestDefaults
import defaultTestFiles
125 from AthenaConfiguration.MainServicesConfig
import MainServicesCfg
127 flags.Input.Files = defaultTestFiles.RDO_RUN2
128 flags.Output.doWriteESD =
True
129 flags.Output.doWriteAOD =
True
132 mlog = logging.getLogger(
"derivationTrackIsolationConfigTest")
133 mlog.info(
"Configuring derivation track isolation: ")
138 for par
in (
'500',
'1000',
'LooseCone1000'):
139 print(
'------ Config for ',par,
' ----------')
140 name =
"IsolationBuilderNonprompt_All_MaxWeight"+par
142 acc.getEventAlgo(name),