102def BkgElectronClassificationCfg(flags, name, **kwargs):
103 """Configure the background electron classification tool"""
104 acc = ComponentAccumulator()
105 from MCTruthClassifier.MCTruthClassifierConfig import DFCommonMCTruthClassifierCfg
106 kwargs.setdefault("MCTruthClassifierTool", acc.popToolsAndMerge(
107 DFCommonMCTruthClassifierCfg(flags)))
108 acc.setPrivateTools(CompFactory.DerivationFramework.BkgElectronClassification(name, **kwargs))
112# Standard + LRT electron collection merger
121def PhotonVertexSelectionWrapperCfg(
122 flags, name="PhotonVertexSelectionWrapper", **kwargs):
123 acc = ComponentAccumulator()
124 prefix = kwargs.pop("DecorationPrefix", "")
125 if prefix: prefix += "_"
126 kwargs.setdefault("pt", prefix + "pt")
127 kwargs.setdefault("eta", prefix + "eta")
128 kwargs.setdefault("phi", prefix + "phi")
129 kwargs.setdefault("sumPt", prefix + "sumPt")
130 kwargs.setdefault("sumPt2", prefix + "sumPt2")
132 if "PhotonPointingTool" not in kwargs:
133 from PhotonVertexSelection.PhotonVertexSelectionConfig import (
134 PhotonPointingToolCfg)
135 kwargs.setdefault("PhotonPointingTool", acc.popToolsAndMerge(
136 PhotonPointingToolCfg(flags)))
139 CompFactory.DerivationFramework.PhotonVertexSelectionWrapper(
144def PhotonVertexSelectionWrapperKernelCfg(
145 flags, name="PhotonVertexSelectionWrapperKernel", **kwargs):
146 acc = ComponentAccumulator()
148 augmentationTools = [
149 acc.addPublicTool(acc.popToolsAndMerge(PhotonVertexSelectionWrapperCfg(flags)))
151 kwargs.setdefault("AugmentationTools", augmentationTools)
154 CompFactory.DerivationFramework.DerivationKernel(name, **kwargs))
158def EGammaCookieCutClusterToolCfg(flags, name = 'EGCookieCutTool', **kwargs):
159 acc = ComponentAccumulator()
160 # needed for reading cells, do not rely on other config to do that
161 from LArGeoAlgsNV.LArGMConfig import LArGMCfg
162 acc.merge(LArGMCfg(flags))
163 from TileGeoModel.TileGMConfig import TileGMCfg
164 acc.merge(TileGMCfg(flags))
166 clusterKey = kwargs.setdefault("ClusterContainerName", "ForwardElectronCookieCutClusters")
167 kwargs.setdefault("ClusterContainerLinksName", clusterKey + "_links")
168 #These two properties need to be in sync
169 if kwargs["ClusterContainerLinksName"] != (clusterKey + "_links"):
170 raise AttributeError("ClusterContainerLinksName ({}) is not syncrhonised with ClusterContainerName ({})".format(kwargs["ClusterContainerLinksName"], clusterKey))
171 kwargs.setdefault('StoreCookedMoments', False)
172 kwargs.setdefault('StoreInputMoments', False)
173 kwargs.setdefault("SGKey_electrons", flags.Egamma.Keys.Output.ForwardElectrons)
175 "CENTER_X", "CENTER_Y", "CENTER_Z",
176 "SECOND_LAMBDA", "LATERAL", "LONGITUDINAL", "ENG_FRAC_MAX",
177 "SECOND_R", "CENTER_LAMBDA", "SECOND_ENG_DENS", "SIGNIFICANCE" ]
180 ROOT.xAOD.CaloCluster.CENTER_X, ROOT.xAOD.CaloCluster.CENTER_Y, ROOT.xAOD.CaloCluster.CENTER_Z,
181 ROOT.xAOD.CaloCluster.SECOND_LAMBDA, ROOT.xAOD.CaloCluster.LATERAL, ROOT.xAOD.CaloCluster.LONGITUDINAL, ROOT.xAOD.CaloCluster.ENG_FRAC_MAX,
182 ROOT.xAOD.CaloCluster.SECOND_R, ROOT.xAOD.CaloCluster.CENTER_LAMBDA, ROOT.xAOD.CaloCluster.SECOND_ENG_DENS, ROOT.xAOD.CaloCluster.SIGNIFICANCE ]
183 kwargs.setdefault("MomentNames", momentNames)
184 kwargs.setdefault("Moments", moments)
185 cookedMoments = [ "cookiecut" + moment for moment in momentNames] if kwargs['StoreCookedMoments'] else []
186 originalMoments = [ "original" + moment for moment in momentNames] if kwargs['StoreInputMoments'] else []
187 electronDecorations = [i for sublist in zip(cookedMoments, originalMoments) for i in sublist]
188 electronDecorations += ["cookiecutClusterLink"]
189 kwargs.setdefault("SGKey_electrons_decorations", electronDecorations)
191 from CaloTools.CaloNoiseCondAlgConfig import CaloNoiseCondAlgCfg
192 acc.merge(CaloNoiseCondAlgCfg(flags,"totalNoise"))
193 from CaloRec.CaloTopoClusterConfig import getTopoMoments
194 momentsMaker = acc.popToolsAndMerge(getTopoMoments(flags))
195 kwargs.setdefault("ClusterMomentMaker",[momentsMaker])
198 CompFactory.DerivationFramework.EGammaCookieCutClusterTool(
202def EGammaEnergyCalibrationWrapperCfg(
204 name="TransformerEnergyCalibration",
206 acc = ComponentAccumulator()
208 from egammaMVACalib.egammaMVACalibConfig import egammaTransformerSvcCfg
210 kwargs.setdefault("decoratorTransformerEnergy", "TransformerEnergy")
211 kwargs.setdefault("decoratorTransformerEnergyPhoton", "TransformerEnergy")
212 kwargs.setdefault("TransformerCalibSvc", acc.getPrimaryAndMerge(egammaTransformerSvcCfg(flags)))
214 acc.setPrivateTools(CompFactory.DerivationFramework.EGammaEnergyCalibrationWrapper(name, **kwargs))
218# ====================================================================
219# SHOWER SHAPE CORRECTIONS IN MC
220# The default tunes are set in
221# PhysicsAnalysis/ElectronPhotonID/EGammaVariableCorrection/python/EGammaVariableCorrectionConfig.py
222# AF3 is tuned to FullSim, so same FFs can be used for AF3 and FS
223# ====================================================================
225def ElectronFudgeAlgorithmCfg(flags, name="ElectronFudgeAlgorithm", **kwargs):
226 acc = ComponentAccumulator()
228 if "EGammaFudgeTool" not in kwargs:
229 from EGammaVariableCorrection.EGammaVariableCorrectionConfig import (
230 ElectronVariableCorrectionToolCfg)
231 ElectronVariableCorrectionTool = acc.popToolsAndMerge(
232 ElectronVariableCorrectionToolCfg(flags)
234 acc.addPublicTool(ElectronVariableCorrectionTool)
235 kwargs.setdefault("EGammaFudgeTool", ElectronVariableCorrectionTool)
237 kwargs.setdefault("Input", "Electrons")
238 kwargs.setdefault("Output", "FudgedElectrons")
240 acc.addEventAlgo(CompFactory.DerivationFramework.EGammaFudgeAlgorithm(name, **kwargs))
243def PhotonFudgeAlgorithmCfg(flags, name="PhotonFudgeAlgorithm", **kwargs):
244 acc = ComponentAccumulator()
246 if "EGammaFudgeTool" not in kwargs:
247 from EGammaVariableCorrection.EGammaVariableCorrectionConfig import (
248 PhotonVariableCorrectionToolCfg)
249 PhotonVariableCorrectionTool = acc.popToolsAndMerge(
250 PhotonVariableCorrectionToolCfg(flags)
252 acc.addPublicTool(PhotonVariableCorrectionTool)
253 kwargs.setdefault("EGammaFudgeTool", PhotonVariableCorrectionTool)
255 kwargs.setdefault("Input", "Photons")
256 kwargs.setdefault("Output", "FudgedPhotons")
258 acc.addEventAlgo(CompFactory.DerivationFramework.EGammaFudgeAlgorithm(name, **kwargs))
261def PhotonNFFudgeAlgorithmCfg(flags, name="PhotonNFFudgeAlgorithm", **kwargs):
262 acc = ComponentAccumulator()
264 if "EGammaFudgeTool" not in kwargs:
265 nFoldsNF = flags.Egamma.NFoldsNF if flags.hasFlag('Egamma.NFoldsNF') else None
266 from EGammaVariableCorrection.EGammaVariableCorrectionConfig import (
267 ElectronPhotonVariableNFCorrectionToolCfg)
268 PhotonVariableNFCorrectionTool = acc.popToolsAndMerge(
269 ElectronPhotonVariableNFCorrectionToolCfg(flags, nFolds=nFoldsNF)
271 acc.addPublicTool(PhotonVariableNFCorrectionTool)
272 kwargs.setdefault("EGammaFudgeTool", PhotonVariableNFCorrectionTool)
274 kwargs.setdefault("Input", "Photons")
275 kwargs.setdefault("Output", "NFFudgedPhotons")
277 acc.addEventAlgo(CompFactory.DerivationFramework.EGammaFudgeAlgorithm(name, **kwargs))