ATLAS Offline Software
Loading...
Searching...
No Matches
RecoSteering.py
Go to the documentation of this file.
1# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2
3from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
4from AthenaConfiguration.Enums import Format, MetadataCategory, HIMode
5
6def RecoSteering(flags):
7 """
8 Generates configuration of the reconstructions
9 """
10 from AthenaCommon.Logging import logging
11 log = logging.getLogger("RecoSteering")
12 from AthenaConfiguration.MainServicesConfig import MainServicesCfg
13 acc = MainServicesCfg(flags)
14
15 # setup input
16 acc.flagPerfmonDomain('IO')
17 if flags.Input.Format is Format.BS:
18 from ByteStreamCnvSvc.ByteStreamConfig import ByteStreamReadCfg
19 acc.merge(ByteStreamReadCfg(flags))
20 # Decorate EventInfo obj with Beam Spot information
21 if flags.Reco.EnableBeamSpotDecoration:
22 from xAODEventInfoCnv.xAODEventInfoCnvConfig import (
23 EventInfoBeamSpotDecoratorAlgCfg)
24 acc.merge(EventInfoBeamSpotDecoratorAlgCfg(flags))
25 log.info("---------- Configured BS reading")
26 else:
27 from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
28 acc.merge(PoolReadCfg(flags))
29 # Check if running on legacy inputs
30 if "EventInfo" not in flags.Input.Collections:
31 from xAODEventInfoCnv.xAODEventInfoCnvConfig import (
32 EventInfoCnvAlgCfg)
33 acc.merge(EventInfoCnvAlgCfg(flags))
34 log.info("---------- Configured POOL reading")
35
36 acc.flagPerfmonDomain('Truth')
37 if flags.Input.isMC or flags.Overlay.DataOverlay:
38 # AOD2xAOD Truth conversion
39 if flags.Output.doGEN_AOD2xAOD:
40 from xAODTruthCnv.xAODTruthCnvConfig import GEN_AOD2xAODCfg
41 acc.merge(GEN_AOD2xAODCfg(flags))
42 log.info("---------- Configured AODtoxAOD Truth Conversion")
43 # copy background vertex collection to AOD
44 if flags.Overlay.DataOverlay:
45 from OutputStreamAthenaPool.OutputStreamConfig import addToAOD
46 acc.merge(addToAOD(flags, [f'xAOD::VertexContainer#{flags.Overlay.BkgPrefix}PrimaryVertices',
47 f'xAOD::VertexAuxContainer#{flags.Overlay.BkgPrefix}PrimaryVerticesAux.x.y.z']))
48
49 # We always want to write pileup truth jets to AOD,
50 # irrespective of whether we write jets to AOD in general
51 # This is because we cannot rebuild jets from pileup truth
52 # particles from the AOD
53 # but truth jets are not available for DataOverlay
54 if not flags.Overlay.DataOverlay:
55 from JetRecConfig.JetRecoSteering import addTruthPileupJetsToOutputCfg
56 acc.merge(addTruthPileupJetsToOutputCfg(flags))
57 log.info("---------- Configured Truth pileup jet writing")
58
59 # trigger
60 acc.flagPerfmonDomain('Trigger')
61 if flags.Reco.EnableTrigger:
62 from TriggerJobOpts.TriggerRecoConfig import TriggerRecoCfg
63 acc.merge(TriggerRecoCfg(flags))
64 log.info("---------- Configured trigger data decoding")
65
66 # calorimeter
67 acc.flagPerfmonDomain('Calo')
68 if flags.Detector.EnableCalo:
69 from CaloRec.CaloRecoConfig import CaloRecoCfg
70 acc.merge(CaloRecoCfg(flags))
71 log.info("---------- Configured calorimeter reconstruction")
72
73 # ID / ITk
74 acc.flagPerfmonDomain('ID')
75 if flags.Reco.EnableTracking:
76 if flags.Reco.EnableTrackOverlay:
77 from TrackOverlayRec.TrackOverlayRecoConfig import TrackOverlayRecoCfg
78 acc.merge(TrackOverlayRecoCfg(flags))
79 else:
80 from InDetConfig.TrackRecoConfig import InDetTrackRecoCfg
81 acc.merge(InDetTrackRecoCfg(flags))
82
83 log.info("---------- Configured tracking")
84
85 # HI
86 acc.flagPerfmonDomain('HI')
87 if flags.Reco.EnableHI:
88 from HIRecConfig.HIRecConfig import HIRecCfg
89 acc.merge(HIRecCfg(flags))
90 log.info("---------- Configured Heavy Ion reconstruction")
91
92 # HGTD
93 acc.flagPerfmonDomain('HGTD')
94 if flags.Reco.EnableHGTDExtension:
95 from HGTD_Config.HGTD_RecoConfig import HGTD_RecoCfg
96 acc.merge(HGTD_RecoCfg(flags))
97 log.info("---------- Configured HGTD track extension")
98
99 # Muon
100 acc.flagPerfmonDomain('Muon')
101 if flags.Detector.EnableMuon:
102 from MuonConfig.MuonReconstructionConfig import MuonReconstructionCfg
103 acc.merge(MuonReconstructionCfg(flags))
104 log.info("---------- Configured muon tracking")
105
106 # EGamma
107 acc.flagPerfmonDomain('EGamma')
108 if flags.Reco.EnableEgamma:
109 from egammaConfig.egammaSteeringConfig import EGammaSteeringCfg
110 acc.merge(EGammaSteeringCfg(flags))
111 log.info("---------- Configured e/gamma")
112
113 # Caching of CaloExtension for downstream
114 # Combined Performance algorithms.
115 acc.flagPerfmonDomain('CaloExtension')
116 if flags.Reco.EnableCaloExtension:
117 from TrackToCalo.CaloExtensionBuilderAlgCfg import (
118 CaloExtensionBuilderCfg)
119 acc.merge(CaloExtensionBuilderCfg(flags))
120 log.info("---------- Configured track calorimeter extension builder")
121
122 # Muon Combined
123 acc.flagPerfmonDomain('CombinedMuon')
124 if flags.Reco.EnableCombinedMuon:
125 from MuonCombinedConfig.MuonCombinedReconstructionConfig import (
126 MuonCombinedReconstructionCfg)
127 acc.merge(MuonCombinedReconstructionCfg(flags))
128 log.info("---------- Configured combined muon reconstruction")
129
130 # TrackParticleCellAssociation
131 # add cells crossed by high pt ID tracks
132 acc.flagPerfmonDomain('TrackCellAssociation')
133 if flags.Reco.EnableTrackCellAssociation:
134 from TrackParticleAssociationAlgs.TrackParticleAssociationAlgsConfig import (
135 TrackParticleCellAssociationCfg)
136 acc.merge(TrackParticleCellAssociationCfg(flags))
137 log.info("---------- Configured track particle-cell association")
138
139 # PFlow
140 acc.flagPerfmonDomain('PFlow')
141 if flags.Reco.EnablePFlow:
142 from eflowRec.PFRun3Config import PFCfg
143 acc.merge(PFCfg(flags))
144 log.info("---------- Configured particle flow")
145
146 # EGamma and CombinedMuon isolation
147 acc.flagPerfmonDomain('Isolation')
148 if flags.Reco.EnableIsolation:
149 from IsolationAlgs.IsolationSteeringConfig import IsolationSteeringCfg
150 acc.merge(IsolationSteeringCfg(flags))
151 log.info("---------- Configured isolation")
152
153 # jets
154 acc.flagPerfmonDomain('Jets')
155 if flags.Reco.EnableJet:
156 from JetRecConfig.JetRecoSteering import JetRecoSteeringCfg
157 acc.merge(JetRecoSteeringCfg(flags))
158 log.info("---------- Configured Jets")
159
160 # btagging
161 acc.flagPerfmonDomain('FTag')
162 if flags.Reco.EnableBTagging:
163 from BTagging.BTagConfig import BTagRecoSplitCfg
164 acc.merge(BTagRecoSplitCfg(flags))
165 log.info("---------- Configured btagging")
166
167 # Tau
168 acc.flagPerfmonDomain('Tau')
169 if flags.Reco.EnableTau:
170 from tauRec.TauConfig import TauReconstructionCfg
171 acc.merge(TauReconstructionCfg(flags))
172 log.info("---------- Configured tau reconstruction")
173 # PFlow tau links
174 if flags.Reco.EnablePFlow:
175 from eflowRec.PFRun3Config import PFTauFELinkCfg
176 acc.merge(PFTauFELinkCfg(flags))
177 log.info("---------- Configured particle flow tau FE linking")
178
179 acc.flagPerfmonDomain('Jets')
180 if flags.Reco.EnableGlobalFELinking:
181 # We also need to build links between the newly
182 # created jet constituents (GlobalFE)
183 # and electrons,photons,muons and taus
184 from eflowRec.PFCfg import PFGlobalFlowElementLinkingCfg
185 acc.merge(PFGlobalFlowElementLinkingCfg(flags))
186 log.info("---------- Configured particle flow global linking")
187
188 # MET
189 acc.flagPerfmonDomain('MET')
190 if flags.Reco.EnableMet:
191 from METReconstruction.METRecCfg import METCfg
192 acc.merge(METCfg(flags))
193 log.info("---------- Configured MET")
194
195 # Calo Rings
196 acc.flagPerfmonDomain('CaloRings')
197 if flags.Reco.EnableCaloRinger:
198 from CaloRingerAlgs.CaloRingerAlgsConfig import CaloRingerSteeringCfg
199 acc.merge(CaloRingerSteeringCfg(flags))
200 log.info("---------- Configured Calo Rings")
201
202 # AFP
203 acc.flagPerfmonDomain('AFP')
204 if flags.Detector.EnableAFP:
205 from ForwardRec.AFPRecConfig import AFPRecCfg
206 acc.merge(AFPRecCfg(flags))
207 log.info("---------- Configured AFP reconstruction")
208
209 # Lucid
210 acc.flagPerfmonDomain('Lucid')
211 if flags.Detector.EnableLucid:
212 from ForwardRec.LucidRecConfig import LucidRecCfg
213 acc.merge(LucidRecCfg(flags))
214 log.info("---------- Configured Lucid reconstruction")
215
216 # ZDC
217 acc.flagPerfmonDomain('ZDC')
218 if flags.Reco.EnableZDC:
219 from ZdcRec.ZdcRecConfig import ZdcRecCfg
220 acc.merge(ZdcRecCfg(flags))
221 log.info("---------- Configured ZDC reconstruction")
222
223 # Monitoring
224 acc.flagPerfmonDomain('DQM')
225 if flags.DQ.doMonitoring:
226 from AthenaMonitoring.AthenaMonitoringCfg import (
227 AthenaMonitoringCfg, AthenaMonitoringPostprocessingCfg)
228 acc.merge(AthenaMonitoringCfg(flags))
229 if flags.DQ.doPostProcessing:
230 acc.merge(AthenaMonitoringPostprocessingCfg(flags))
231 log.info("---------- Configured DQ monitoring")
232
233 # Setup the final post-processing
234 acc.flagPerfmonDomain('PostProcessing')
235 if flags.Reco.EnablePostProcessing:
236 acc.merge(RecoPostProcessingCfg(flags))
237 log.info("---------- Configured post-processing")
238
239 # Setup data overlay reconstruction
240 if flags.Overlay.DataOverlay:
241 # Override conditions for data overlay
242 if flags.Overlay.DataOverlayConditions:
243 from PyJobTransforms.TransformUtils import executeFromFragment
244 executeFromFragment(flags.Overlay.DataOverlayConditions, flags, acc)
245
246 # setup output
247 acc.flagPerfmonDomain('IO')
248 from xAODMetaDataCnv.InfileMetaDataConfig import SetupMetaDataForStreamCfg
249 from OutputStreamAthenaPool.OutputStreamConfig import outputStreamName
250
251 if flags.Output.doWriteESD:
252 # Needed for Trk::Tracks TPCnv
253 from TrkEventCnvTools.TrkEventCnvToolsConfig import (
254 TrkEventCnvSuperToolCfg)
255 acc.merge(TrkEventCnvSuperToolCfg(flags))
256 # Needed for MetaData
257 acc.merge(
258 SetupMetaDataForStreamCfg(
259 flags,
260 "ESD",
261 createMetadata=[
262 MetadataCategory.ByteStreamMetaData,
263 MetadataCategory.LumiBlockMetaData,
264 MetadataCategory.TruthMetaData,
265 MetadataCategory.IOVMetaData,
266 ],
267 )
268 )
269 log.info("ESD ItemList: %s", acc.getEventAlgo(
270 outputStreamName("ESD")).ItemList)
271 log.info("ESD MetadataItemList: %s", acc.getEventAlgo(
272 outputStreamName("ESD")).MetadataItemList)
273 log.info("---------- Configured ESD writing")
274
275 if flags.Output.doWriteAOD:
276 # Needed for MetaData
277 acc.merge(
278 SetupMetaDataForStreamCfg(
279 flags,
280 "AOD",
281 createMetadata=[
282 MetadataCategory.ByteStreamMetaData,
283 MetadataCategory.LumiBlockMetaData,
284 MetadataCategory.TruthMetaData,
285 MetadataCategory.IOVMetaData,
286 ],
287 )
288 )
289 log.info("AOD ItemList: %s", acc.getEventAlgo(
290 outputStreamName("AOD")).ItemList)
291 log.info("AOD MetadataItemList: %s", acc.getEventAlgo(
292 outputStreamName("AOD")).MetadataItemList)
293 log.info("---------- Configured AOD writing")
294
295 if flags.Output.doJiveXML:
296 from JiveXML.JiveXMLConfig import AlgoJiveXMLCfg
297 acc.merge(AlgoJiveXMLCfg(flags))
298 log.info("---------- Configured JiveXML writing")
299
300 return acc
301
302
304 acc = ComponentAccumulator()
305 if flags.Reco.PostProcessing.ThinNegativeClusters:
306 from ThinningUtils.ThinNegativeEnergyCaloClustersConfig import (
307 ThinNegativeEnergyCaloClustersCfg)
308 acc.merge(ThinNegativeEnergyCaloClustersCfg(flags))
309 if flags.Reco.PostProcessing.TRTAloneThinning:
310 from ThinningUtils.ThinTRTStandaloneConfig import (
311 ThinTRTStandaloneCfg)
312 acc.merge(ThinTRTStandaloneCfg(flags))
313 if flags.Reco.PostProcessing.InDetForwardTrackParticleThinning:
314 from ThinningUtils.ThinInDetForwardTrackParticlesConfig import (
315 ThinInDetForwardTrackParticlesCfg)
316 acc.merge(ThinInDetForwardTrackParticlesCfg(flags))
317 if flags.Reco.PostProcessing.GeantTruthThinning:
318 from ThinningUtils.ThinGeantTruthConfig import (
319 ThinGeantTruthCfg)
320 acc.merge(ThinGeantTruthCfg(flags))
321 pass
322
323 if flags.Tracking.thinInDetClustersOnTrack:
324 from ThinningUtils.ThinInDetClustersConfig import (
325 ThinInDetClustersCfg)
326 acc.merge(ThinInDetClustersCfg(flags))
327
328 if flags.Output.doWriteAOD and flags.Reco.HIMode in [HIMode.UPC, HIMode.HIP]:
329 from HIGlobal.RecordExtraInfoConfig import addMBTS, addSpacePoints
330 acc.merge(addMBTS(flags))
331 if flags.Reco.HIMode is HIMode.UPC:
332 acc.merge(addSpacePoints(flags))
333
334 return acc
Definition PFCfg.py:1