ATLAS Offline Software
Loading...
Searching...
No Matches
IsolationSelectionConfig.py
Go to the documentation of this file.
1# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2
3from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
4from AthenaConfiguration.ComponentFactory import CompFactory
5
6def IsolationSelectionToolCfg(flags, name="IsolationSelectionTool", **kwargs):
7 acc = ComponentAccumulator()
8 acc.setPrivateTools(CompFactory.CP.IsolationSelectionTool(name, **kwargs))
9 return acc
10
11def MuonPhysValIsolationSelCfg(flags, **kwargs):
12 return IsolationSelectionToolCfg(flags,MuonWP="PflowTight_FixedRad")
13
14def IsoCloseByCorrectionToolCfg(flags, name="IsoCloseByCorrectionTool", ttva_wp = "", **kwargs):
15 acc = ComponentAccumulator()
16 kwargs.setdefault("IsolationSelectionTool", acc.popToolsAndMerge(MuonPhysValIsolationSelCfg(flags)))
17 from InDetConfig.InDetTrackSelectionToolConfig import isoTrackSelectionToolCfg
18 kwargs.setdefault("TrackSelectionTool", acc.popToolsAndMerge(isoTrackSelectionToolCfg(flags, minPt=500)) )
19 if len(ttva_wp):
20 from TrackVertexAssociationTool.TrackVertexAssociationToolConfig import isoTTVAToolCfg
21 kwargs.setdefault("TTVASelectionTool", acc.popToolsAndMerge(isoTTVAToolCfg(flags, WorkingPoint = ttva_wp)))
22 from TrackToCalo.TrackToCaloConfig import ParticleCaloExtensionToolCfg
23 kwargs.setdefault("ParticleCaloExtensionTool", acc.popToolsAndMerge(ParticleCaloExtensionToolCfg(flags)))
24 the_tool = CompFactory.CP.IsolationCloseByCorrectionTool(name, **kwargs)
25 acc.setPrivateTools(the_tool)
26 return acc
27
28
29def IsoCloseByCorrSkimmingAlgCfg(flags, suff = "", name="IsoCloseByCorrSkimmingAlg", ttva_wp = 'Nonprompt_All_MaxWeight', **kwargs):
30 result = ComponentAccumulator()
31 from ElectronPhotonSelectorTools.AsgElectronLikelihoodToolsConfig import AsgElectronLikelihoodToolCfg
32 from ElectronPhotonSelectorTools.ElectronLikelihoodToolMapping import electronLHmenu
33 from ElectronPhotonSelectorTools.LikelihoodEnums import LikeEnum
34 from AthenaConfiguration.Enums import LHCPeriod
35 kwargs.setdefault("ElectronSelectionTool", result.popToolsAndMerge(AsgElectronLikelihoodToolCfg(flags,
36 name= "ElectronSelTool",
37 quality = LikeEnum.VeryLoose,
38 menu=electronLHmenu.offlineMC21 if flags.GeoModel.Run >= LHCPeriod.Run3 else electronLHmenu.offlineMC20)))
39
40 from MuonSelectorTools.MuonSelectorToolsConfig import MuonSelectionToolCfg
41 kwargs.setdefault("MuonSelectionTool", result.popToolsAndMerge(MuonSelectionToolCfg(flags,
42 MaxEta=2.7,
43 DisablePtCuts=True,
44 MuQuality=2,
45 )))
46 kwargs.setdefault("IsoCloseByCorrectionTool", result.popToolsAndMerge(IsoCloseByCorrectionToolCfg(flags)))
47
48
50 kwargs.setdefault("PhotContainer", "")
51 the_alg = CompFactory.CP.IsoCloseByCorrectionTrkSelAlg(name+ttva_wp+suff, **kwargs)
52 result.addEventAlgo(the_alg, primary = True)
53 return result
54
55def IsoCloseByCorrAlgCfg(flags, name="IsoCloseByCorrAlg", suff = "", isPhysLite = False, containerNames = [ "Muons", "Electrons", "Photons"], useSelTools = False, isoDecSuffix = "CloseByCorr", caloDecSuffix = "", hasLRT = False, **kwargs):
56
57 result = ComponentAccumulator()
58
59 # Configure the CloseBy isolation correction alg - only need two WPs each for all iso variables
60 elIsoWPs = [ "Loose_VarRad", "TightTrackOnly_FixedRad" ]
61 muIsoWPs = [ "PflowLoose_VarRad", "Loose_VarRad" ]
62 phIsoWPs = [ "FixedCutLoose", "TightCaloOnly" ]
63
64 isoTool = result.popToolsAndMerge( IsolationSelectionToolCfg( flags,
65 ElectronWPVec = elIsoWPs,
66 MuonWPVec = muIsoWPs,
67 PhotonWPVec = phIsoWPs))
68 # Set suffix for writing corrected isolation values
69 selectionDecorator = "isoSelIsOK" + suff
70 kwargs.setdefault("IsoCloseByCorrectionTool",
71 result.popToolsAndMerge(IsoCloseByCorrectionToolCfg(flags,
72 IsolationSelectionTool = isoTool,
73 SelectionDecorator = selectionDecorator,
74 IsoDecSuffix = isoDecSuffix,
75 CaloDecSuffix = caloDecSuffix,
76 EleContainers = [ x for x in containerNames if x.find("Ele") != -1],
77 MuoContainers = [ x for x in containerNames if x.find("Muo") != -1],
78 PhoContainers = [ x for x in containerNames if x.find("Pho") != -1])))
79
80 # Need muon selection tool to apply Loose - no pt cuts
81 from MuonSelectorTools.MuonSelectorToolsConfig import MuonSelectionToolCfg
82 kwargs.setdefault("MuonSelectionTool", result.popToolsAndMerge(MuonSelectionToolCfg(flags,
83 MaxEta = 2.7,
84 DisablePtCuts = True,
85 MuQuality = 2,
86 UseLRT = hasLRT,
87 )))
88
89 # Define selectors for electron and photon - different for LLP1 as compared to PHYS and PHYSLITE
90 kwargs.setdefault("PhotSelectionKey", "Photons.DFCommonPhotonsIsEMLoose")
91 if hasLRT:
92 kwargs.setdefault("ElecSelectionKey", "Electrons.DFCommonElectronsLHVeryLooseNoPix")
93 else:
94 kwargs.setdefault("ElecSelectionKey", "Electrons.DFCommonElectronsLHVeryLoose")
95
96 # Set selection for muons, electrons and photons to contribute to overlap
97 kwargs.setdefault("ParticleContainerKeys", containerNames)
98
99 # No default pt cuts for the moment
100 kwargs.setdefault("MinElecPt", 0.)
101 kwargs.setdefault("MinMuonPt", 0.)
102 kwargs.setdefault("MinPhotPt", 0.)
103
104
105 the_alg = CompFactory.CP.IsoCloseByCorrectionAlg(name + suff,
106 SelectionDecorator = selectionDecorator,
107 **kwargs)
108 result.addEventAlgo(the_alg)
109 return result
110
111def IsoCloseByCaloDecorCfg(flags, name="IsoCloseByCaloDecor", suff = "", containers =[], **kwargs):
112 result = ComponentAccumulator()
113
115 kwargs.setdefault("IsoCloseByCorrectionTool", result.popToolsAndMerge(
117 CaloCorrectionModel = -1
118 )))
119 for cont in containers:
120 result.addEventAlgo(CompFactory.CP.IsoCloseByCaloDecorAlg(name = name + cont + suff,
121 PrimaryContainer = cont,
122 **kwargs))
123 return result
124
125def TestIsoCloseByCorrectionCfg(flags, name="TestIsoCloseByAlg", suff = "", **kwargs):
126 result = ComponentAccumulator()
127 from ElectronPhotonSelectorTools.AsgElectronLikelihoodToolsConfig import AsgElectronLikelihoodToolCfg
128 from ElectronPhotonSelectorTools.ElectronLikelihoodToolMapping import electronLHmenu
129 from ElectronPhotonSelectorTools.LikelihoodEnums import LikeEnum
130 from AthenaConfiguration.Enums import LHCPeriod
131 kwargs.setdefault("ElectronSelectionTool", result.popToolsAndMerge(AsgElectronLikelihoodToolCfg(flags,
132 name= "ElectronSelTool",
133 quality = LikeEnum.VeryLoose,
134 menu=electronLHmenu.offlineMC21 if flags.GeoModel.Run >= LHCPeriod.Run3 else electronLHmenu.offlineMC20)))
135
136 from MuonSelectorTools.MuonSelectorToolsConfig import MuonSelectionToolCfg
137 kwargs.setdefault("MuonSelectionTool", result.popToolsAndMerge(MuonSelectionToolCfg(flags,
138 MaxEta=2.7,
139 DisablePtCuts=True,
140 MuQuality=2,
141 )))
142 the_alg = CompFactory.CP.TestIsolationCloseByCorrAlg(name + suff, **kwargs)
143 result.addEventAlgo(the_alg, primary = True)
144 return result
145
146def IsoCloseByAlgsCfg(flags, suff = "", isPhysLite = False, containerNames = [ "Muons", "Electrons", "Photons"], stream_name="", ttva_wp = "Nonprompt_All_MaxWeight", useSelTools = False, isoDecSuffix = "CloseByCorr", caloDecSuffix = "", hasLRT = False):
147
148 # Add in two ways to do IsoCloseBy correction:
149 # - use IsoCloseByCorrAlg to modify the <iso_value>s for close by lepton/photon.
150 # These can be used directly reading a derivation.
151 # - Also add in extra information to run IsolationCloseByTool on the derivation
152 # For closeByIso correction, only one way is needed. The other way can be a cross check.
153 # The second way will be eventually deprecated and is not used for PhysLite to minimize the
154 # information on PhysLite.
155 acc = ComponentAccumulator()
156
157 # REMOVING THE FOLLOWING UNTIL THE CLASH BETWEEN THESE ALGS AND THE CLOSEBY CORRECTION IS FIXED
158 # ## Temporarily comment out for parent/child augmentation tests
159 # # Add additional information to derivation output to be able to run IsoCloseByCorrectionTool on it
160 # if not isPhysLite:
161 # from IsolationSelection.IsolationSelectionConfig import IsoCloseByCorrSkimmingAlgCfg, IsoCloseByCaloDecorCfg
162 # ### Add the tracks that potentially pollute the isolation cones of others to the collection.
163 # ### Question: Is the list of recommended TTVA working points used for isolation available somewhere?
164 # acc.merge(IsoCloseByCorrSkimmingAlgCfg(flags, suff = suff, ttva_wp = "Nonprompt_All_MaxWeight",
165 # OutputStream = stream_name))
166
167 # ### Associate the close-by pflow objects and the calorimeter clusters
168 # acc.merge(IsoCloseByCaloDecorCfg(flags, suff = suff,
169 # containers = containerNames ))
170
171 # Setup the isolation close-by correction algorithm sequence to correct the isolation of near-by el, mu, ph
172 from IsolationSelection.IsolationSelectionConfig import IsoCloseByCorrAlgCfg
173 acc.merge(IsoCloseByCorrAlgCfg(flags, suff = suff, isPhysLite = isPhysLite, containerNames = containerNames, useSelTools = useSelTools, isoDecSuffix = isoDecSuffix, caloDecSuffix = caloDecSuffix, hasLRT = hasLRT))
174 return acc
175
176def setupIsoCloseBySlimmingVariables(slimmingHelper, isLLP1 = False):
177
178
180 iso_corr_vars = [ "IsoCloseByCorr_assocClustEta", "IsoCloseByCorr_assocClustPhi", "IsoCloseByCorr_assocClustEnergy",
181 "IsoCloseByCorr_assocClustDecor", "IsoCloseByCorr_assocPflowEta", "IsoCloseByCorr_assocPflowPhi", "IsoCloseByCorr_assocPflowEnergy",
182 "IsoCloseByCorr_assocPflowDecor"]
183
184 if isLLP1:
185 slimmingHelper.ExtraVariables += ["Electrons."+(".".join(iso_corr_vars)),
186 "LRTElectrons."+(".".join(iso_corr_vars)),
187 "Muons."+(".".join(iso_corr_vars)),
188 "MuonsLRT."+(".".join(iso_corr_vars)) ]
189 else:
190 slimmingHelper.ExtraVariables += ["Electrons."+(".".join(iso_corr_vars)),
191 "Muons."+(".".join(iso_corr_vars)) ]
IsoCloseByAlgsCfg(flags, suff="", isPhysLite=False, containerNames=["Muons", "Electrons", "Photons"], stream_name="", ttva_wp="Nonprompt_All_MaxWeight", useSelTools=False, isoDecSuffix="CloseByCorr", caloDecSuffix="", hasLRT=False)
setupIsoCloseBySlimmingVariables(slimmingHelper, isLLP1=False)
IsoCloseByCorrectionToolCfg(flags, name="IsoCloseByCorrectionTool", ttva_wp="", **kwargs)
TestIsoCloseByCorrectionCfg(flags, name="TestIsoCloseByAlg", suff="", **kwargs)
IsoCloseByCorrSkimmingAlgCfg(flags, suff="", name="IsoCloseByCorrSkimmingAlg", ttva_wp='Nonprompt_All_MaxWeight', **kwargs)
IsoCloseByCaloDecorCfg(flags, name="IsoCloseByCaloDecor", suff="", containers=[], **kwargs)
IsoCloseByCorrAlgCfg(flags, name="IsoCloseByCorrAlg", suff="", isPhysLite=False, containerNames=["Muons", "Electrons", "Photons"], useSelTools=False, isoDecSuffix="CloseByCorr", caloDecSuffix="", hasLRT=False, **kwargs)
MuonPhysValIsolationSelCfg(flags, **kwargs)
IsolationSelectionToolCfg(flags, name="IsolationSelectionTool", **kwargs)