ATLAS Offline Software
RecoSteering.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2 
3 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
4 from AthenaConfiguration.Enums import Format, MetadataCategory, HIMode
5 
6 def 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(
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(
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  # Set up PerfMon
301  acc.flagPerfmonDomain('PerfMon')
302  if flags.PerfMon.doFastMonMT or flags.PerfMon.doFullMonMT:
303  from PerfMonComps.PerfMonCompsConfig import PerfMonMTSvcCfg
304  acc.merge(PerfMonMTSvcCfg(flags))
305  log.info("---------- Configured PerfMon")
306 
307  return acc
308 
309 
311  acc = ComponentAccumulator()
312  if flags.Reco.PostProcessing.ThinNegativeClusters:
313  from ThinningUtils.ThinNegativeEnergyCaloClustersConfig import (
314  ThinNegativeEnergyCaloClustersCfg)
315  acc.merge(ThinNegativeEnergyCaloClustersCfg(flags))
316  if flags.Reco.PostProcessing.TRTAloneThinning:
317  from ThinningUtils.ThinTRTStandaloneConfig import (
318  ThinTRTStandaloneCfg)
319  acc.merge(ThinTRTStandaloneCfg(flags))
320  if flags.Reco.PostProcessing.InDetForwardTrackParticleThinning:
321  from ThinningUtils.ThinInDetForwardTrackParticlesConfig import (
322  ThinInDetForwardTrackParticlesCfg)
323  acc.merge(ThinInDetForwardTrackParticlesCfg(flags))
324  if flags.Reco.PostProcessing.GeantTruthThinning:
325  from ThinningUtils.ThinGeantTruthConfig import (
326  ThinGeantTruthCfg)
327  acc.merge(ThinGeantTruthCfg(flags))
328  pass
329 
330  if flags.Tracking.thinInDetClustersOnTrack:
331  from ThinningUtils.ThinInDetClustersConfig import (
332  ThinInDetClustersCfg)
333  acc.merge(ThinInDetClustersCfg(flags))
334 
335  if flags.Output.doWriteAOD and flags.Reco.HIMode in [HIMode.UPC, HIMode.HIP]:
336  from HIGlobal.RecordExtraInfoConfig import addMBTS, addSpacePoints
337  acc.merge(addMBTS(flags))
338  if flags.Reco.HIMode is HIMode.UPC:
339  acc.merge(addSpacePoints(flags))
340 
341  return acc
python.ThinGeantTruthConfig.ThinGeantTruthCfg
def ThinGeantTruthCfg(flags, name="ThinGeantTruthAlg", **kwargs)
Definition: ThinGeantTruthConfig.py:12
AFPRecConfig.AFPRecCfg
def AFPRecCfg(flags)
Definition: AFPRecConfig.py:61
AthenaPoolExample_WriteCond.outputStreamName
string outputStreamName
Definition: AthenaPoolExample_WriteCond.py:21
python.RecoSteering.RecoSteering
def RecoSteering(flags)
Definition: RecoSteering.py:6
python.CaloRecoConfig.CaloRecoCfg
def CaloRecoCfg(flags, clustersname=None)
Definition: CaloRecoConfig.py:9
TrackOverlayRecoConfig.TrackOverlayRecoCfg
def TrackOverlayRecoCfg(flags)
Definition: TrackOverlayRecoConfig.py:8
python.JetAnalysisCommon.ComponentAccumulator
ComponentAccumulator
Definition: JetAnalysisCommon.py:302
python.HGTD_RecoConfig.HGTD_RecoCfg
def HGTD_RecoCfg(flags)
Definition: HGTD_RecoConfig.py:5
python.BTagConfig.BTagRecoSplitCfg
def BTagRecoSplitCfg(flags, JetCollection=['AntiKt4EMPFlowJets'])
Definition: BTagConfig.py:125
LucidRecConfig.LucidRecCfg
def LucidRecCfg(flags)
Definition: LucidRecConfig.py:9
xAODTruthCnvConfig.GEN_AOD2xAODCfg
def GEN_AOD2xAODCfg(flags, name="GEN_AOD2xAOD", **kwargs)
Definition: xAODTruthCnvConfig.py:20
python.RecoSteering.RecoPostProcessingCfg
def RecoPostProcessingCfg(flags)
Definition: RecoSteering.py:310
CaloRingerAlgsConfig.CaloRingerSteeringCfg
def CaloRingerSteeringCfg(flags, name="CaloRingerSteering")
Definition: CaloRingerAlgsConfig.py:528
JiveXMLConfig.AlgoJiveXMLCfg
def AlgoJiveXMLCfg(flags, name="AlgoJiveXML", **kwargs)
Definition: JiveXMLConfig.py:18
python.ByteStreamConfig.ByteStreamReadCfg
def ByteStreamReadCfg(flags, type_names=None)
Definition: Event/ByteStreamCnvSvc/python/ByteStreamConfig.py:25
python.PerfMonCompsConfig.PerfMonMTSvcCfg
def PerfMonMTSvcCfg(flags, **kwargs)
A minimal new-style configuration for PerfMonMTSvc.
Definition: PerfMonCompsConfig.py:10
python.ZdcRecConfig.ZdcRecCfg
def ZdcRecCfg(flags)
Definition: ZdcRecConfig.py:626
python.egammaSteeringConfig.EGammaSteeringCfg
def EGammaSteeringCfg(flags, name="EGammaSteering")
Definition: egammaSteeringConfig.py:13
CaloExtensionBuilderAlgCfg.CaloExtensionBuilderCfg
def CaloExtensionBuilderCfg(flags)
Definition: CaloExtensionBuilderAlgCfg.py:35
python.JetRecoSteering.JetRecoSteeringCfg
def JetRecoSteeringCfg(flags)
Definition: JetRecoSteering.py:67
python.AthenaMonitoringCfg.AthenaMonitoringCfg
def AthenaMonitoringCfg(flags)
Definition: AthenaMonitoringCfg.py:7
python.TrkEventCnvToolsConfig.TrkEventCnvSuperToolCfg
def TrkEventCnvSuperToolCfg(flags, name='EventCnvSuperTool', **kwargs)
Definition: TrkEventCnvToolsConfig.py:51
METRecCfg.METCfg
def METCfg(inputFlags)
Definition: METRecCfg.py:4
TauConfig.TauReconstructionCfg
def TauReconstructionCfg(flags)
Definition: TauConfig.py:267
PFRun3Config.PFTauFELinkCfg
def PFTauFELinkCfg(inputFlags, **kwargs)
Definition: PFRun3Config.py:139
python.MainServicesConfig.MainServicesCfg
def MainServicesCfg(flags, LoopMgr='AthenaEventLoopMgr')
Definition: MainServicesConfig.py:312
RecordExtraInfoConfig.addSpacePoints
def addSpacePoints(flags)
Definition: RecordExtraInfoConfig.py:16
python.ThinInDetForwardTrackParticlesConfig.ThinInDetForwardTrackParticlesCfg
def ThinInDetForwardTrackParticlesCfg(flags, name="ThinInDetForwardTrackParticlesAlg", **kwargs)
Definition: ThinInDetForwardTrackParticlesConfig.py:11
python.JetRecoSteering.addTruthPileupJetsToOutputCfg
def addTruthPileupJetsToOutputCfg(flags, toAOD=True, toESD=True)
Definition: JetRecoSteering.py:7
IsolationSteeringConfig.IsolationSteeringCfg
def IsolationSteeringCfg(flags, name='IsolationSteering')
Definition: IsolationSteeringConfig.py:8
python.ThinInDetClustersConfig.ThinInDetClustersCfg
def ThinInDetClustersCfg(flags, name="ThinInDetClustersAlg", **kwargs)
Definition: ThinInDetClustersConfig.py:13
python.TrackRecoConfig.InDetTrackRecoCfg
def InDetTrackRecoCfg(flags)
Main ID tracking config #####################.
Definition: TrackRecoConfig.py:804
python.ThinNegativeEnergyCaloClustersConfig.ThinNegativeEnergyCaloClustersCfg
def ThinNegativeEnergyCaloClustersCfg(flags, name="ThinNegativeEnergyCaloClustersAlg", **kwargs)
Definition: ThinNegativeEnergyCaloClustersConfig.py:12
python.xAODEventInfoCnvConfig.EventInfoBeamSpotDecoratorAlgCfg
def EventInfoBeamSpotDecoratorAlgCfg(flags, name="EventInfoBeamSpotDecoratorAlg", eventInfoKey="EventInfo", **kwargs)
Definition: xAODEventInfoCnvConfig.py:137
python.TriggerRecoConfig.TriggerRecoCfg
def TriggerRecoCfg(flags)
Definition: TriggerRecoConfig.py:17
RecordExtraInfoConfig.addMBTS
def addMBTS(flags)
Definition: RecordExtraInfoConfig.py:33
python.TransformUtils.executeFromFragment
def executeFromFragment(fragment_string, flags, cfg=None)
Definition: Tools/PyJobTransforms/python/TransformUtils.py:6
python.OutputStreamConfig.addToAOD
def addToAOD(flags, itemOrList, **kwargs)
Definition: OutputStreamConfig.py:150
python.ThinTRTStandaloneConfig.ThinTRTStandaloneCfg
def ThinTRTStandaloneCfg(flags, name="ThinTRTStandaloneAlg", **kwargs)
Definition: ThinTRTStandaloneConfig.py:12
python.xAODEventInfoCnvConfig.EventInfoCnvAlgCfg
def EventInfoCnvAlgCfg(flags, name="EventInfoCnvAlg", inputKey="McEventInfo", outputKey="EventInfo", disableBeamSpot=False, **kwargs)
Definition: xAODEventInfoCnvConfig.py:11
InfileMetaDataConfig.SetupMetaDataForStreamCfg
def SetupMetaDataForStreamCfg(flags, streamName="", AcceptAlgs=None, createMetadata=None, propagateMetadataFromInput=True, *args, **kwargs)
Definition: InfileMetaDataConfig.py:222
python.PoolReadConfig.PoolReadCfg
def PoolReadCfg(flags)
Definition: PoolReadConfig.py:71
MuonReconstructionConfig.MuonReconstructionCfg
def MuonReconstructionCfg(flags)
Definition: MuonReconstructionConfig.py:139
python.HIRecConfig.HIRecCfg
def HIRecCfg(flags)
Definition: HIRecConfig.py:8
TrackParticleAssociationAlgsConfig.TrackParticleCellAssociationCfg
def TrackParticleCellAssociationCfg(flags)
Definition: TrackParticleAssociationAlgsConfig.py:78
PFCfg.PFGlobalFlowElementLinkingCfg
def PFGlobalFlowElementLinkingCfg(inputFlags, **kwargs)
Definition: PFCfg.py:472
MuonCombinedReconstructionConfig.MuonCombinedReconstructionCfg
def MuonCombinedReconstructionCfg(flags)
Definition: MuonCombinedReconstructionConfig.py:674
python.AthenaMonitoringCfg.AthenaMonitoringPostprocessingCfg
def AthenaMonitoringPostprocessingCfg(flags)
Definition: AthenaMonitoringCfg.py:169
PFCfg
Definition: PFCfg.py:1