77def BkgElectronClassificationCfg(flags, name, **kwargs):
78 """Configure the background electron classification tool"""
79 acc = ComponentAccumulator()
80 from MCTruthClassifier.MCTruthClassifierConfig import DFCommonMCTruthClassifierCfg
81 kwargs.setdefault("MCTruthClassifierTool", acc.popToolsAndMerge(
82 DFCommonMCTruthClassifierCfg(flags)))
83 acc.setPrivateTools(CompFactory.DerivationFramework.BkgElectronClassification(name, **kwargs))
87# Standard + LRT electron collection merger
96def PhotonVertexSelectionWrapperCfg(
97 flags, name="PhotonVertexSelectionWrapper", **kwargs):
98 acc = ComponentAccumulator()
99 prefix = kwargs.pop("DecorationPrefix", "")
100 if prefix: prefix += "_"
101 kwargs.setdefault("pt", prefix + "pt")
102 kwargs.setdefault("eta", prefix + "eta")
103 kwargs.setdefault("phi", prefix + "phi")
104 kwargs.setdefault("sumPt", prefix + "sumPt")
105 kwargs.setdefault("sumPt2", prefix + "sumPt2")
107 if "PhotonPointingTool" not in kwargs:
108 from PhotonVertexSelection.PhotonVertexSelectionConfig import (
109 PhotonPointingToolCfg)
110 kwargs.setdefault("PhotonPointingTool", acc.popToolsAndMerge(
111 PhotonPointingToolCfg(flags)))
114 CompFactory.DerivationFramework.PhotonVertexSelectionWrapper(
119def PhotonVertexSelectionWrapperKernelCfg(
120 flags, name="PhotonVertexSelectionWrapperKernel", **kwargs):
121 acc = ComponentAccumulator()
123 augmentationTools = [
124 acc.addPublicTool(acc.popToolsAndMerge(PhotonVertexSelectionWrapperCfg(flags)))
126 kwargs.setdefault("AugmentationTools", augmentationTools)
129 CompFactory.DerivationFramework.DerivationKernel(name, **kwargs))
133def EGammaCookieCutClusterToolCfg(flags, name = 'EGCookieCutTool', **kwargs):
134 acc = ComponentAccumulator()
135 # needed for reading cells, do not rely on other config to do that
136 from LArGeoAlgsNV.LArGMConfig import LArGMCfg
137 acc.merge(LArGMCfg(flags))
138 from TileGeoModel.TileGMConfig import TileGMCfg
139 acc.merge(TileGMCfg(flags))
141 clusterKey = kwargs.setdefault("ClusterContainerName", "ForwardElectronCookieCutClusters")
142 kwargs.setdefault("ClusterContainerLinksName", clusterKey + "_links")
143 #These two properties need to be in sync
144 if kwargs["ClusterContainerLinksName"] != (clusterKey + "_links"):
145 raise AttributeError("ClusterContainerLinksName ({}) is not syncrhonised with ClusterContainerName ({})".format(kwargs["ClusterContainerLinksName"], clusterKey))
146 kwargs.setdefault('StoreCookedMoments', False)
147 kwargs.setdefault('StoreInputMoments', False)
148 kwargs.setdefault("SGKey_electrons", flags.Egamma.Keys.Output.ForwardElectrons)
150 "CENTER_X", "CENTER_Y", "CENTER_Z",
151 "SECOND_LAMBDA", "LATERAL", "LONGITUDINAL", "ENG_FRAC_MAX",
152 "SECOND_R", "CENTER_LAMBDA", "SECOND_ENG_DENS", "SIGNIFICANCE" ]
155 ROOT.xAOD.CaloCluster.CENTER_X, ROOT.xAOD.CaloCluster.CENTER_Y, ROOT.xAOD.CaloCluster.CENTER_Z,
156 ROOT.xAOD.CaloCluster.SECOND_LAMBDA, ROOT.xAOD.CaloCluster.LATERAL, ROOT.xAOD.CaloCluster.LONGITUDINAL, ROOT.xAOD.CaloCluster.ENG_FRAC_MAX,
157 ROOT.xAOD.CaloCluster.SECOND_R, ROOT.xAOD.CaloCluster.CENTER_LAMBDA, ROOT.xAOD.CaloCluster.SECOND_ENG_DENS, ROOT.xAOD.CaloCluster.SIGNIFICANCE ]
158 kwargs.setdefault("MomentNames", momentNames)
159 kwargs.setdefault("Moments", moments)
160 cookedMoments = [ "cookiecut" + moment for moment in momentNames] if kwargs['StoreCookedMoments'] else []
161 originalMoments = [ "original" + moment for moment in momentNames] if kwargs['StoreInputMoments'] else []
162 electronDecorations = [i for sublist in zip(cookedMoments, originalMoments) for i in sublist]
163 electronDecorations += ["cookiecutClusterLink"]
164 kwargs.setdefault("SGKey_electrons_decorations", electronDecorations)
166 from CaloTools.CaloNoiseCondAlgConfig import CaloNoiseCondAlgCfg
167 acc.merge(CaloNoiseCondAlgCfg(flags,"totalNoise"))
168 from CaloRec.CaloTopoClusterConfig import getTopoMoments
169 momentsMaker = acc.popToolsAndMerge(getTopoMoments(flags))
170 kwargs.setdefault("ClusterMomentMaker",[momentsMaker])
173 CompFactory.DerivationFramework.EGammaCookieCutClusterTool(