ATLAS Offline Software
Loading...
Searching...
No Matches
runGSFCaloFromESD.py
Go to the documentation of this file.
1# Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
2
3# authors:
4# Asim Mohammed Aslam <asim.mohammed.aslam@cern.ch>
5# Fernando Monticelli <Fernando.Monticelli@cern.ch>
6# Jean-Baptiste De Vivie <devivie@lpsc.in2p3.fr>
7# Christos Anastopoulos <Christos.Anastopoulos@cern.ch>
8# Raphael Julien Haberle <raphael.julien.haberle@cern.ch>
9
10# Simple script to run the
11# GSF + EMCal refit tool from ESD
12#
13# python runGSFCaloFromESD.py
14# or
15# python -m egammaConfig.runGSFCaloFromESD
16
17import sys
18
19
20def _run(args):
21 from AthenaConfiguration.AllConfigFlags import initConfigFlags
22 from AthenaConfiguration.TestDefaults import defaultTestFiles
23 from AthenaConfiguration.Enums import ProductionStep
24
25 flags = initConfigFlags()
26
27 # Input
28 flags.Exec.MaxEvents = args.maxEvents
29 flags.Input.Files = args.inputFileList or defaultTestFiles.ESD_RUN3_MC
30 flags.Input.isMC = True
31
32 # Reconstruction setup
33 flags.Common.ProductionStep = ProductionStep.Reconstruction
34
35 # Disable detectors we do not need
36 flags.Detector.GeometryMuon = False
37 flags.Detector.EnableAFP = False
38 flags.Detector.EnableLucid = False
39 flags.Detector.EnableZDC = False
40
41 # Output
42 flags.Output.AODFileName = args.outputAODFile
43
44 # Setup detector flags
45 from AthenaConfiguration.DetectorConfigFlags import setupDetectorFlags
46 setupDetectorFlags(
47 flags,
48 None,
49 use_metadata=True,
50 toggle_geometry=True,
51 keep_beampipe=True,
52 )
53
54 flags.lock()
55
56 # Main services
57 from AthenaConfiguration.MainServicesConfig import MainServicesCfg
58
59 acc = MainServicesCfg(flags)
60
61 # Geometry and input reading
62 from AtlasGeoModel.GeoModelConfig import GeoModelCfg
63 from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
64
65 acc.merge(GeoModelCfg(flags))
66 acc.merge(PoolReadCfg(flags))
67
68 if flags.Detector.EnablePixel:
69 from PixelGeoModel.PixelGeoModelConfig import PixelReadoutGeometryCfg
70
71 acc.merge(PixelReadoutGeometryCfg(flags))
72
73 if flags.Detector.EnableSCT:
74 from SCT_GeoModel.SCT_GeoModelConfig import SCT_ReadoutGeometryCfg
75
76 acc.merge(SCT_ReadoutGeometryCfg(flags))
77
78 if flags.Detector.EnableTRT:
79 from TRT_GeoModel.TRT_GeoModelConfig import TRT_ReadoutGeometryCfg
80
81 acc.merge(TRT_ReadoutGeometryCfg(flags))
82
83 if flags.Detector.EnableLAr:
84 from LArBadChannelTool.LArBadChannelConfig import LArBadFebCfg
85
86 acc.merge(LArBadFebCfg(flags))
87
88 # Special message service configuration
89 from DigitizationConfig.DigitizationSteering import DigitizationMessageSvcCfg
90
91 acc.merge(DigitizationMessageSvcCfg(flags))
92
93 # Needed to read pre-Run-3 data with Trk objects
94 from TrkEventCnvTools.TrkEventCnvToolsConfig import TrkEventCnvSuperToolCfg
95
96 acc.merge(TrkEventCnvSuperToolCfg(flags))
97
98 # GSF + EMCal augmentation
99
100 from DerivationFrameworkEGamma.EGammaGSFCalo import EGammaGSFCaloToolsCfg
101
102 GSFCaloTool = acc.popToolsAndMerge(
103 EGammaGSFCaloToolsCfg(flags, "GSFCaloImprovement")
104 )
105 acc.addPublicTool(GSFCaloTool)
106
107 from AthenaConfiguration.ComponentFactory import CompFactory
108
109 acc.addEventAlgo(
110 CompFactory.DerivationFramework.DerivationKernel(
111 "GSFRefitAlgo",
112 AugmentationTools=[GSFCaloTool],
113 SkimmingTools=None,
114 ThinningTools=None,
115 )
116 )
117
118 # Standard egamma output
119 from AthenaConfiguration.Utils import setupLoggingLevels
120
121 setupLoggingLevels(flags, acc)
122
123 # Output collections + keep original collections
124
125 ItemList = [
126 "xAOD::ElectronContainer#Electrons",
127 "xAOD::ElectronAuxContainer#Electrons"
128 f"Aux.{flags.Egamma.Keys.Output.ElectronsSuppAOD}",
129 "xAOD::TrackParticleContainer#GSFTrackParticles",
130 "xAOD::TrackParticleAuxContainer#GSFTrackParticles"
131 f"Aux.{flags.Egamma.Keys.Output.GSFTrackParticlesSuppAOD}",
132 "xAOD::TrackParticleContainer#GSFCaloContainer",
133 "xAOD::TrackParticleAuxContainer#GSFCaloContainer"
134 f"Aux.{flags.Egamma.Keys.Output.GSFTrackParticlesSuppAOD}",
135 "TrackCollection#Tracks",
136 "TrackCollection#GSFTracks"
137 ]
138
139 from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
140 from AthenaConfiguration.Enums import MetadataCategory
141 from xAODMetaDataCnv.InfileMetaDataConfig import SetupMetaDataForStreamCfg
142
143 stream_name = "AOD_GSFRefit"
144
145 acc.merge(
146 OutputStreamCfg(
147 flags,
148 stream_name,
149 ItemList=ItemList,
150 AcceptAlgs=["GSFRefitAlgo"],
151 )
152 )
153
154 acc.merge(
155 SetupMetaDataForStreamCfg(
156 flags,
157 stream_name,
158 AcceptAlgs=["GSFRefitAlgo"],
159 createMetadata=[
160 MetadataCategory.CutFlowMetaData,
161 MetadataCategory.FileMetaData,
162 MetadataCategory.EventStreamInfo,
163 ],
164 )
165 )
166
167 acc.printConfig(
168 withDetails=True,
169 summariseProps=True,
170 onlyComponents=[],
171 printDefaults=True,
172 )
173
174 # Run it
175 statusCode = acc.run()
176 return statusCode
177
178
179if __name__ == "__main__":
180 statusCode = None
181
182 from argparse import ArgumentParser
183
184 parser = ArgumentParser("egammaFromESD")
185
186 parser.add_argument(
187 "-m",
188 "--maxEvents",
189 default=20,
190 type=int,
191 help="The number of events to run. -1 runs all events.",
192 )
193
194 parser.add_argument(
195 "-i",
196 "--inputFileList",
197 nargs="*",
198 help="List of input ESD files.",
199 )
200
201 parser.add_argument(
202 "-o",
203 "--outputAODFile",
204 default="myAOD.pool.root",
205 help="Output AOD file name.",
206 )
207
208 args = parser.parse_args()
209
210 status_code = _run(args)
211 assert status_code is not None, "Issue while running"
212 sys.exit(not status_code.isSuccess())