ATLAS Offline Software
EGammaToolsConfig.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2 
3 # ==============================================================================
4 # Provides configs for the tools used for e-gamma decorations used in DAOD
5 # building
6 # ==============================================================================
7 
8 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
9 from AthenaConfiguration.ComponentFactory import CompFactory
10 
11 
12 # PhotonsDirectionTool
13 def PhotonsDirectionToolCfg(flags, name, **kwargs):
14  """Configure the PhotonsDirectionTool"""
15  acc = ComponentAccumulator()
16  acc.setPrivateTools(CompFactory.DerivationFramework.PhotonsDirectionTool(name, **kwargs))
17  return acc
18 
19 
20 # E-gamma selection tool wrapper
21 def EGSelectionToolWrapperCfg(flags, name, **kwargs):
22  """Configure the E-gamma selection tool wrapper"""
23  acc = ComponentAccumulator()
24  sgName = kwargs.pop("StoreGateEntryName", "")
25  if not sgName:
26  raise AttributeError("StoreGateEntryName not set")
27  kwargs.setdefault("decoratorPass", sgName)
28  kwargs.setdefault("decoratorIsEM", sgName + "IsEMValue")
29  acc.setPrivateTools(CompFactory.DerivationFramework.EGSelectionToolWrapper(name, **kwargs))
30  return acc
31 
32 
33 # Electron likelihood tool wrapper
34 def EGElectronLikelihoodToolWrapperCfg(flags, name, **kwargs):
35  """Configure the electron likelihood tool wrapper"""
36  acc = ComponentAccumulator()
37  sgName = kwargs.pop("StoreGateEntryName", "")
38  containerName = kwargs.setdefault("ContainerName", "")
39  if not sgName:
40  raise AttributeError("StoreGateEntryName not set")
41  if not containerName:
42  raise AttributeError("ContainerName empty string")
43  storeTResult = kwargs.setdefault("StoreTResult", False)
44  storeMultipleOutputs = kwargs.setdefault("StoreMultipleOutputs", False)
45  sgMultipleNames = kwargs.pop("StoreGateEntryMultipleNames", [])
46  # Write decoration handle keys
47  kwargs.setdefault("decoratorPass", sgName)
48  kwargs.setdefault("decoratorIsEM", sgName + "IsEMValue")
49  kwargs.setdefault("decoratorResult", sgName + "Result" if storeTResult else "")
50  kwargs.setdefault("decoratorMultipleOutputs", [containerName + "." + n for n in sgMultipleNames] if storeMultipleOutputs else [])
51  # FIXME Would ideally do this, but currently this syntax overwrites the parent container key
52  #kwargs.setdefault("decoratorMultipleOutputs", sgMultipleNames if storeMultipleOutputs else [])
53  acc.setPrivateTools(CompFactory.DerivationFramework.EGElectronLikelihoodToolWrapper(name, **kwargs))
54  return acc
55 
56 
57 # Photon cleaning tool wrapper
58 def EGPhotonCleaningWrapperCfg(flags, name, **kwargs):
59  """Configure the photon cleaning tool wrapper"""
60  acc = ComponentAccumulator()
61  sgName = kwargs.pop("StoreGateEntryName", "DFCommonPhotonsCleaning")
62  # Write decoration handle keys
63  kwargs.setdefault("decoratorPass", sgName)
64  kwargs.setdefault("decoratorPassDelayed", sgName + "NoTime")
65  acc.setPrivateTools(CompFactory.DerivationFramework.EGPhotonCleaningWrapper(name, **kwargs))
66  return acc
67 
68 
69 # Electron ambiguity tool
70 def EGElectronAmbiguityToolCfg(flags, name, **kwargs):
71  """Configure the electron ambiguity tool"""
72  acc = ComponentAccumulator()
73  EGElectronAmbiguityTool = CompFactory.DerivationFramework.EGElectronAmbiguityTool
74  acc.setPrivateTools(EGElectronAmbiguityTool(name, **kwargs))
75  return acc
76 
77 
78 # Background electron classification tool
79 def BkgElectronClassificationCfg(flags, name, **kwargs):
80  """Configure the background electron classification tool"""
81  acc = ComponentAccumulator()
82  from MCTruthClassifier.MCTruthClassifierConfig import DFCommonMCTruthClassifierCfg
83  kwargs.setdefault("MCTruthClassifierTool", acc.popToolsAndMerge(
85  acc.setPrivateTools(CompFactory.DerivationFramework.BkgElectronClassification(name, **kwargs))
86  return acc
87 
88 
89 # Standard + LRT electron collection merger
90 def ElectronMergerCfg(flags, name, **kwargs): # TODO Remove as, no clients??
91  """Configure the track particle merger tool"""
92  acc = ComponentAccumulator()
93  ElectronMerger = CompFactory.DerivationFramework.ElectronMergerTool
94  acc.setPrivateTools(ElectronMerger(name, **kwargs))
95  return acc
96 
97 
99  flags, name="PhotonVertexSelectionWrapper", **kwargs):
100  acc = ComponentAccumulator()
101  prefix = kwargs.pop("DecorationPrefix", "")
102  if prefix: prefix += "_"
103  kwargs.setdefault("pt", prefix + "pt")
104  kwargs.setdefault("eta", prefix + "eta")
105  kwargs.setdefault("phi", prefix + "phi")
106  kwargs.setdefault("sumPt", prefix + "sumPt")
107  kwargs.setdefault("sumPt2", prefix + "sumPt2")
108 
109  if "PhotonPointingTool" not in kwargs:
110  from PhotonVertexSelection.PhotonVertexSelectionConfig import (
111  PhotonPointingToolCfg)
112  kwargs.setdefault("PhotonPointingTool", acc.popToolsAndMerge(
113  PhotonPointingToolCfg(flags)))
114 
115  acc.setPrivateTools(
116  CompFactory.DerivationFramework.PhotonVertexSelectionWrapper(
117  name, **kwargs))
118  return acc
119 
120 
122  flags, name="PhotonVertexSelectionWrapperKernel", **kwargs):
123  acc = ComponentAccumulator()
124 
125  augmentationTools = [
126  acc.addPublicTool(acc.popToolsAndMerge(PhotonVertexSelectionWrapperCfg(flags)))
127  ]
128  kwargs.setdefault("AugmentationTools", augmentationTools)
129 
130  acc.addEventAlgo(
131  CompFactory.DerivationFramework.DerivationKernel(name, **kwargs))
132  return acc
133 
134 
135 def EGammaCookieCutClusterToolCfg(flags, name = 'EGCookieCutTool', **kwargs):
136  acc = ComponentAccumulator()
137  # needed for reading cells, do not rely on other config to do that
138  from LArGeoAlgsNV.LArGMConfig import LArGMCfg
139  acc.merge(LArGMCfg(flags))
140  from TileGeoModel.TileGMConfig import TileGMCfg
141  acc.merge(TileGMCfg(flags))
142 
143  clusterKey = kwargs.setdefault("ClusterContainerName", "ForwardElectronCookieCutClusters")
144  kwargs.setdefault("ClusterContainerLinksName", clusterKey + "_links")
145  #These two properties need to be in sync
146  if kwargs["ClusterContainerLinksName"] != (clusterKey + "_links"):
147  raise AttributeError("ClusterContainerLinksName ({}) is not syncrhonised with ClusterContainerName ({})".format(kwargs["ClusterContainerLinksName"], clusterKey))
148  kwargs.setdefault('StoreCookedMoments', False)
149  kwargs.setdefault('StoreInputMoments', False)
150  electronKey = kwargs.setdefault("SGKey_electrons", flags.Egamma.Keys.Output.ForwardElectrons)
151  # TODO Need to keep this in sync with EGammaCookieCutClusterTool::m_vecMName (make into a property?)
152  momentNames = ["SECOND_LAMBDA", "LATERAL", "LONGITUDINAL", "ENG_FRAC_MAX",
153  "SECOND_R", "CENTER_LAMBDA", "SECOND_ENG_DENS", "SIGNIFICANCE"]
154  cookedMoments = [ "cookiecut" + moment for moment in momentNames] if kwargs['StoreCookedMoments'] else []
155  originalMoments = [ "original" + moment for moment in momentNames] if kwargs['StoreInputMoments'] else []
156  electronDecorations = [i for sublist in zip(cookedMoments, originalMoments) for i in sublist]
157  electronDecorations += ["cookiecutClusterLink"]
158  kwargs.setdefault("SGKey_electrons_decorations", [electronKey + "." + decor for decor in electronDecorations])
159  # FIXME The line above can be simplified once SG::WriteDecorHandleKeyArray is updated.
160 
161  from CaloTools.CaloNoiseCondAlgConfig import CaloNoiseCondAlgCfg
162  acc.merge(CaloNoiseCondAlgCfg(flags,"totalNoise"))
163  from CaloRec.CaloTopoClusterConfig import getTopoMoments
164  momentsMaker = acc.popToolsAndMerge(getTopoMoments(flags))
165  kwargs.setdefault("ClusterMomentMaker",[momentsMaker])
166 
167  acc.setPrivateTools(
168  CompFactory.DerivationFramework.EGammaCookieCutClusterTool(
169  name, **kwargs))
170  return acc
python.JetAnalysisCommon.ComponentAccumulator
ComponentAccumulator
Definition: JetAnalysisCommon.py:342
vtune_athena.format
format
Definition: vtune_athena.py:14
MCTruthClassifierConfig.DFCommonMCTruthClassifierCfg
def DFCommonMCTruthClassifierCfg(flags, name="DFCommonMCTruthClassifier", **kwargs)
Definition: MCTruthClassifier/python/MCTruthClassifierConfig.py:56
python.EGammaToolsConfig.EGSelectionToolWrapperCfg
def EGSelectionToolWrapperCfg(flags, name, **kwargs)
Definition: EGammaToolsConfig.py:21
python.EGammaToolsConfig.ElectronMergerCfg
def ElectronMergerCfg(flags, name, **kwargs)
Definition: EGammaToolsConfig.py:90
PhotonVertexSelectionConfig.PhotonPointingToolCfg
def PhotonPointingToolCfg(flags, name="PhotonPointingTool", **kwargs)
Definition: PhotonVertexSelectionConfig.py:7
python.EGammaToolsConfig.EGElectronAmbiguityToolCfg
def EGElectronAmbiguityToolCfg(flags, name, **kwargs)
Definition: EGammaToolsConfig.py:70
python.CaloNoiseCondAlgConfig.CaloNoiseCondAlgCfg
def CaloNoiseCondAlgCfg(flags, noisetype="totalNoise")
Definition: CaloNoiseCondAlgConfig.py:11
python.EGammaToolsConfig.EGammaCookieCutClusterToolCfg
def EGammaCookieCutClusterToolCfg(flags, name='EGCookieCutTool', **kwargs)
Definition: EGammaToolsConfig.py:135
python.EGammaToolsConfig.EGPhotonCleaningWrapperCfg
def EGPhotonCleaningWrapperCfg(flags, name, **kwargs)
Definition: EGammaToolsConfig.py:58
LArGMConfig.LArGMCfg
def LArGMCfg(flags)
Definition: LArGMConfig.py:8
python.EGammaToolsConfig.EGElectronLikelihoodToolWrapperCfg
def EGElectronLikelihoodToolWrapperCfg(flags, name, **kwargs)
Definition: EGammaToolsConfig.py:34
python.EGammaToolsConfig.BkgElectronClassificationCfg
def BkgElectronClassificationCfg(flags, name, **kwargs)
Definition: EGammaToolsConfig.py:79
python.EGammaToolsConfig.PhotonVertexSelectionWrapperCfg
def PhotonVertexSelectionWrapperCfg(flags, name="PhotonVertexSelectionWrapper", **kwargs)
Definition: EGammaToolsConfig.py:98
python.EGammaToolsConfig.PhotonsDirectionToolCfg
def PhotonsDirectionToolCfg(flags, name, **kwargs)
Definition: EGammaToolsConfig.py:13
python.CaloTopoClusterConfig.getTopoMoments
def getTopoMoments(flags)
Definition: CaloTopoClusterConfig.py:96
python.EGammaToolsConfig.PhotonVertexSelectionWrapperKernelCfg
def PhotonVertexSelectionWrapperKernelCfg(flags, name="PhotonVertexSelectionWrapperKernel", **kwargs)
Definition: EGammaToolsConfig.py:121
TileGMConfig.TileGMCfg
def TileGMCfg(flags)
Definition: TileGMConfig.py:7