ATLAS Offline Software
Loading...
Searching...
No Matches
EGammaLRTConfig.py
Go to the documentation of this file.
1# Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
2
3# ********************************************************************
4# EGammaLRTConfig.py
5# Configures all tools needed for LRT e-gamma object selection and sets
6# up the kernel algorithms so the results can be accessed/written to
7# the DAODs. Copied and modified from EGammaCommonConfig.py.
8# Component accumulator version.
9# ********************************************************************
10
11from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
12from AthenaConfiguration.ComponentFactory import CompFactory
13
14
15def EGammaLRTCfg(flags):
16 """Main config method for LRT e-gamma decorations"""
17
18 acc = ComponentAccumulator()
19
20 # ====================================================================
21 # DISPLACED ELECTRON LH SELECTORS
22 # see Reconstruction/egamma/egammaTools/python/EMPIDBuilderBase.py
23 # on how to configure the selectors
24 # ====================================================================
25 # Setting conf file not supported. These are currently setup in the
26 # LLP1.py config TODO: implement common ID in egamma tools
27
28 # ====================================================================
29 # ELECTRON CHARGE SELECTION
30 # ====================================================================
31 if not hasattr(acc, "ElectronChargeIDSelectorLoose"):
32 if flags.Derivation.Egamma.addECIDS:
33 from ElectronPhotonSelectorTools.AsgElectronChargeIDSelectorToolConfig import (
34 AsgElectronChargeIDSelectorToolCfg,
35 )
36
37 ElectronChargeIDSelector = acc.popToolsAndMerge(
38 AsgElectronChargeIDSelectorToolCfg(
39 flags, name="ElectronChargeIDSelectorLoose"
40 )
41 )
42 ElectronChargeIDSelector.primaryVertexContainer = "PrimaryVertices"
43 ElectronChargeIDSelector.TrainingFile = (
44 "ElectronPhotonSelectorTools/ChargeID/"
45 + "ECIDS_20180731rel21Summer2018.root"
46 )
47 acc.addPublicTool(ElectronChargeIDSelector)
48
49 # ====================================================================
50 # AUGMENTATION TOOLS
51 # ====================================================================
52 from DerivationFrameworkEGamma.EGammaToolsConfig import (
53 EGElectronLikelihoodToolWrapperCfg,
54 )
55
56 # decorate electrons with the output of LH very loose
57 # TODO same as above, update with central ID
58
59 # decorate electrons with the output of ECIDS
60 if flags.Derivation.Egamma.addECIDS:
61 LRTElectronPassECIDS = acc.addPublicTool(acc.popToolsAndMerge(
62 EGElectronLikelihoodToolWrapperCfg(
63 flags,
64 name="LRTElectronPassECIDS",
65 EGammaElectronLikelihoodTool=ElectronChargeIDSelector,
66 CutType="",
67 StoreGateEntryName="DFCommonElectronsECIDS",
68 ContainerName="LRTElectrons",
69 StoreTResult=True,
70 )
71 ))
72
73 # decorate some electrons with an additional ambiguity flag
74 # against internal and early material conversion
75 from DerivationFrameworkEGamma.EGammaToolsConfig import EGElectronAmbiguityToolCfg
76
77 LRTElectronAmbiguity = acc.addPublicTool(acc.popToolsAndMerge(
78 EGElectronAmbiguityToolCfg(
79 flags,
80 name="LRTElectronAdditionnalAmbiguity",
81 idCut="DFCommonElectronsLHLooseNoPix",
82 ContainerName="LRTElectrons",
83 isMC=flags.Input.isMC,
84 )
85 ))
86
87 # list of all the decorators so far
88 LRTEGAugmentationTools = [LRTElectronAmbiguity]
89 if flags.Derivation.Egamma.addECIDS:
90 LRTEGAugmentationTools.extend([LRTElectronPassECIDS])
91
92 # ==================================================
93 # Calo cell recovery tool
94 if flags.Derivation.Egamma.addMissingCellInfo:
95 from DerivationFrameworkCalo.DerivationFrameworkCaloConfig import EgammaCoreCellRecoveryCfg
96
97 CoreCellRecoveryTool = acc.addPublicTool(acc.popToolsAndMerge(
98 EgammaCoreCellRecoveryCfg(flags,
99 name = "LRTCoreCellRecoveryTool",
100 SGKey_photons = "",
101 SGKey_electrons = "LRTElectrons")
102 ))
103 LRTEGAugmentationTools.append(CoreCellRecoveryTool)
104
105 # ==================================================
106 # Truth Related tools
107 if flags.Input.isMC:
108 # Decorate Electron with bkg electron type/origin
109 from DerivationFrameworkEGamma.EGammaToolsConfig import (
110 BkgElectronClassificationCfg,
111 )
112
113 BkgLRTElectronClassificationTool = acc.addPublicTool(acc.popToolsAndMerge(
114 BkgElectronClassificationCfg(
115 flags,
116 name="BkgLRTElectronClassificationTool",
117 ElectronContainerName="LRTElectrons"
118 )
119 ))
120 LRTEGAugmentationTools.append(BkgLRTElectronClassificationTool)
121
122 # =======================================
123 # CREATE THE DERIVATION KERNEL ALGORITHM
124 # =======================================
125
126 acc.addEventAlgo(
127 CompFactory.DerivationFramework.CommonAugmentation(
128 "EGammaLRTKernel", AugmentationTools=LRTEGAugmentationTools
129 )
130 )
131
132 # =======================================
133 # ADD TOOLS : custom electron, photon and muon track isolation
134 # =======================================
135 from IsolationAlgs.DerivationTrackIsoConfig import DerivationTrackIsoCfg
136
137 acc.merge(
138 DerivationTrackIsoCfg(
139 flags, object_types=("Electrons", "Muons"), postfix="LRT"
140 )
141 )
142
143 if not hasattr(acc, "LRTElectronCaloIsolationBuilder"):
144 from IsolationAlgs.IsolationSteeringDerivConfig import (
145 LRTElectronIsolationSteeringDerivCfg,
146 )
147
148 acc.merge(LRTElectronIsolationSteeringDerivCfg(flags))
149
150 from IsolationAlgs.IsolationBuilderConfig import egIsolationCfg
151
152 acc.merge(
153 egIsolationCfg(
154 flags,
155 name="electronIsolationLRT",
156 # Avoid overlap with the previously-configured IsolationBuilder.
157 noCalo=True,
158 ElectronCollectionContainerName="LRTElectrons",
159 )
160 )
161
162 return acc