ATLAS Offline Software
RecoSteering.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2024 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:
38  # AOD2xAOD Truth conversion
39  from xAODTruthCnv.xAODTruthCnvConfig import GEN_AOD2xAODCfg
40  acc.merge(GEN_AOD2xAODCfg(flags))
41  log.info("---------- Configured AODtoxAOD Truth Conversion")
42 
43  # We always want to write pileup truth jets to AOD,
44  # irrespective of whether we write jets to AOD in general
45  # This is because we cannot rebuild jets from pileup truth
46  # particles from the AOD
47  from JetRecConfig.JetRecoSteering import addTruthPileupJetsToOutputCfg
48  acc.merge(addTruthPileupJetsToOutputCfg(flags))
49  log.info("---------- Configured Truth pileup jet writing")
50 
51  # trigger
52  acc.flagPerfmonDomain('Trigger')
53  if flags.Reco.EnableTrigger:
54  from TriggerJobOpts.TriggerRecoConfig import TriggerRecoCfg
55  acc.merge(TriggerRecoCfg(flags))
56  log.info("---------- Configured trigger data decoding")
57 
58  # calorimeter
59  acc.flagPerfmonDomain('Calo')
60  if flags.Detector.EnableCalo:
61  from CaloRec.CaloRecoConfig import CaloRecoCfg
62  acc.merge(CaloRecoCfg(flags))
63  log.info("---------- Configured calorimeter reconstruction")
64 
65  # ID / ITk
66  acc.flagPerfmonDomain('ID')
67  if flags.Reco.EnableTracking:
68  if flags.Reco.EnableTrackOverlay:
69  from TrackOverlayRec.TrackOverlayRecoConfig import TrackOverlayRecoCfg
70  acc.merge(TrackOverlayRecoCfg(flags))
71  else:
72  from InDetConfig.TrackRecoConfig import InDetTrackRecoCfg
73  acc.merge(InDetTrackRecoCfg(flags))
74 
75  log.info("---------- Configured tracking")
76 
77  # HI
78  acc.flagPerfmonDomain('HI')
79  if flags.Reco.EnableHI:
80  from HIRecConfig.HIRecConfig import HIRecCfg
81  acc.merge(HIRecCfg(flags))
82  log.info("---------- Configured Heavy Ion reconstruction")
83 
84  # HGTD
85  acc.flagPerfmonDomain('HGTD')
86  if flags.Reco.EnableHGTDExtension:
87  from HGTD_Config.HGTD_RecoConfig import HGTD_RecoCfg
88  acc.merge(HGTD_RecoCfg(flags))
89  log.info("---------- Configured HGTD track extension")
90 
91  # Muon
92  acc.flagPerfmonDomain('Muon')
93  if flags.Detector.EnableMuon:
94  from MuonConfig.MuonReconstructionConfig import MuonReconstructionCfg
95  acc.merge(MuonReconstructionCfg(flags))
96  log.info("---------- Configured muon tracking")
97 
98  # EGamma
99  acc.flagPerfmonDomain('EGamma')
100  if flags.Reco.EnableEgamma:
101  from egammaConfig.egammaSteeringConfig import EGammaSteeringCfg
102  acc.merge(EGammaSteeringCfg(flags))
103  log.info("---------- Configured e/gamma")
104 
105  # Caching of CaloExtension for downstream
106  # Combined Performance algorithms.
107  acc.flagPerfmonDomain('CaloExtension')
108  if flags.Reco.EnableCaloExtension:
109  from TrackToCalo.CaloExtensionBuilderAlgCfg import (
110  CaloExtensionBuilderCfg)
111  acc.merge(CaloExtensionBuilderCfg(flags))
112  log.info("---------- Configured track calorimeter extension builder")
113 
114  # Muon Combined
115  acc.flagPerfmonDomain('CombinedMuon')
116  if flags.Reco.EnableCombinedMuon:
117  from MuonCombinedConfig.MuonCombinedReconstructionConfig import (
118  MuonCombinedReconstructionCfg)
119  acc.merge(MuonCombinedReconstructionCfg(flags))
120  log.info("---------- Configured combined muon reconstruction")
121 
122  # TrackParticleCellAssociation
123  # add cells crossed by high pt ID tracks
124  acc.flagPerfmonDomain('TrackCellAssociation')
125  if flags.Reco.EnableTrackCellAssociation:
126  from TrackParticleAssociationAlgs.TrackParticleAssociationAlgsConfig import (
127  TrackParticleCellAssociationCfg)
128  acc.merge(TrackParticleCellAssociationCfg(flags))
129  log.info("---------- Configured track particle-cell association")
130 
131  # PFlow
132  acc.flagPerfmonDomain('PFlow')
133  if flags.Reco.EnablePFlow:
134  from eflowRec.PFRun3Config import PFCfg
135  acc.merge(PFCfg(flags))
136  log.info("---------- Configured particle flow")
137 
138  # EGamma and CombinedMuon isolation
139  acc.flagPerfmonDomain('Isolation')
140  if flags.Reco.EnableIsolation:
141  from IsolationAlgs.IsolationSteeringConfig import IsolationSteeringCfg
142  acc.merge(IsolationSteeringCfg(flags))
143  log.info("---------- Configured isolation")
144 
145  # jets
146  acc.flagPerfmonDomain('Jets')
147  if flags.Reco.EnableJet:
148  from JetRecConfig.JetRecoSteering import JetRecoSteeringCfg
149  acc.merge(JetRecoSteeringCfg(flags))
150  log.info("---------- Configured Jets")
151 
152  # btagging
153  acc.flagPerfmonDomain('FTag')
154  if flags.Reco.EnableBTagging:
155  from BTagging.BTagConfig import BTagRecoSplitCfg
156  acc.merge(BTagRecoSplitCfg(flags))
157  log.info("---------- Configured btagging")
158 
159  # Tau
160  acc.flagPerfmonDomain('Tau')
161  if flags.Reco.EnableTau:
162  from tauRec.TauConfig import TauReconstructionCfg
163  acc.merge(TauReconstructionCfg(flags))
164  log.info("---------- Configured tau reconstruction")
165  # PFlow tau links
166  if flags.Reco.EnablePFlow:
167  from eflowRec.PFRun3Config import PFTauFELinkCfg
168  acc.merge(PFTauFELinkCfg(flags))
169  log.info("---------- Configured particle flow tau FE linking")
170 
171  acc.flagPerfmonDomain('Jets')
172  if flags.Reco.EnableGlobalFELinking:
173  # We also need to build links between the newly
174  # created jet constituents (GlobalFE)
175  # and electrons,photons,muons and taus
176  from eflowRec.PFCfg import PFGlobalFlowElementLinkingCfg
177  acc.merge(PFGlobalFlowElementLinkingCfg(flags))
178  log.info("---------- Configured particle flow global linking")
179 
180  # MET
181  acc.flagPerfmonDomain('MET')
182  if flags.Reco.EnableMet:
183  from METReconstruction.METRecCfg import METCfg
184  acc.merge(METCfg(flags))
185  log.info("---------- Configured MET")
186 
187  # Calo Rings
188  acc.flagPerfmonDomain('CaloRings')
189  if flags.Reco.EnableCaloRinger:
190  from CaloRingerAlgs.CaloRingerAlgsConfig import CaloRingerSteeringCfg
191  acc.merge(CaloRingerSteeringCfg(flags))
192  log.info("---------- Configured Calo Rings")
193 
194  # AFP
195  acc.flagPerfmonDomain('AFP')
196  if flags.Detector.EnableAFP:
197  from ForwardRec.AFPRecConfig import AFPRecCfg
198  acc.merge(AFPRecCfg(flags))
199  log.info("---------- Configured AFP reconstruction")
200 
201  # Lucid
202  acc.flagPerfmonDomain('Lucid')
203  if flags.Detector.EnableLucid:
204  from ForwardRec.LucidRecConfig import LucidRecCfg
205  acc.merge(LucidRecCfg(flags))
206  log.info("---------- Configured Lucid reconstruction")
207 
208  # ZDC
209  acc.flagPerfmonDomain('ZDC')
210  if flags.Reco.EnableZDC:
211  from ZdcRec.ZdcRecConfig import ZdcRecCfg
212  acc.merge(ZdcRecCfg(flags))
213  log.info("---------- Configured ZDC reconstruction")
214 
215  # Monitoring
216  acc.flagPerfmonDomain('DQM')
217  if flags.DQ.doMonitoring:
218  from AthenaMonitoring.AthenaMonitoringCfg import (
219  AthenaMonitoringCfg, AthenaMonitoringPostprocessingCfg)
220  acc.merge(AthenaMonitoringCfg(flags))
221  if flags.DQ.doPostProcessing:
222  acc.merge(AthenaMonitoringPostprocessingCfg(flags))
223  log.info("---------- Configured DQ monitoring")
224 
225  # Setup the final post-processing
226  acc.flagPerfmonDomain('PostProcessing')
227  if flags.Reco.EnablePostProcessing:
228  acc.merge(RecoPostProcessingCfg(flags))
229  log.info("---------- Configured post-processing")
230 
231  # setup output
232  acc.flagPerfmonDomain('IO')
233  from xAODMetaDataCnv.InfileMetaDataConfig import SetupMetaDataForStreamCfg
234  from OutputStreamAthenaPool.OutputStreamConfig import outputStreamName
235 
236  if flags.Output.doWriteESD:
237  # Needed for Trk::Tracks TPCnv
238  from TrkEventCnvTools.TrkEventCnvToolsConfig import (
239  TrkEventCnvSuperToolCfg)
240  acc.merge(TrkEventCnvSuperToolCfg(flags))
241  # Needed for MetaData
242  acc.merge(
244  flags,
245  "ESD",
246  createMetadata=[
247  MetadataCategory.ByteStreamMetaData,
248  MetadataCategory.LumiBlockMetaData,
249  MetadataCategory.TruthMetaData,
250  MetadataCategory.IOVMetaData,
251  ],
252  )
253  )
254  log.info("ESD ItemList: %s", acc.getEventAlgo(
255  outputStreamName("ESD")).ItemList)
256  log.info("ESD MetadataItemList: %s", acc.getEventAlgo(
257  outputStreamName("ESD")).MetadataItemList)
258  log.info("---------- Configured ESD writing")
259 
260  if flags.Output.doWriteAOD:
261  # Needed for MetaData
262  acc.merge(
264  flags,
265  "AOD",
266  createMetadata=[
267  MetadataCategory.ByteStreamMetaData,
268  MetadataCategory.LumiBlockMetaData,
269  MetadataCategory.TruthMetaData,
270  MetadataCategory.IOVMetaData,
271  ],
272  )
273  )
274  log.info("AOD ItemList: %s", acc.getEventAlgo(
275  outputStreamName("AOD")).ItemList)
276  log.info("AOD MetadataItemList: %s", acc.getEventAlgo(
277  outputStreamName("AOD")).MetadataItemList)
278  log.info("---------- Configured AOD writing")
279 
280  if flags.Output.doJiveXML:
281  from JiveXML.JiveXMLConfig import AlgoJiveXMLCfg
282  acc.merge(AlgoJiveXMLCfg(flags))
283  log.info("---------- Configured JiveXML writing")
284 
285  # Set up PerfMon
286  acc.flagPerfmonDomain('PerfMon')
287  if flags.PerfMon.doFastMonMT or flags.PerfMon.doFullMonMT:
288  from PerfMonComps.PerfMonCompsConfig import PerfMonMTSvcCfg
289  acc.merge(PerfMonMTSvcCfg(flags))
290  log.info("---------- Configured PerfMon")
291 
292  return acc
293 
294 
296  acc = ComponentAccumulator()
297  if flags.Reco.PostProcessing.ThinNegativeClusters:
298  from ThinningUtils.ThinNegativeEnergyCaloClustersConfig import (
299  ThinNegativeEnergyCaloClustersCfg)
300  acc.merge(ThinNegativeEnergyCaloClustersCfg(flags))
301  if flags.Reco.PostProcessing.TRTAloneThinning:
302  from ThinningUtils.ThinTRTStandaloneConfig import (
303  ThinTRTStandaloneCfg)
304  acc.merge(ThinTRTStandaloneCfg(flags))
305  if flags.Reco.PostProcessing.InDetForwardTrackParticleThinning:
306  from ThinningUtils.ThinInDetForwardTrackParticlesConfig import (
307  ThinInDetForwardTrackParticlesCfg)
308  acc.merge(ThinInDetForwardTrackParticlesCfg(flags))
309  if flags.Reco.PostProcessing.GeantTruthThinning:
310  from ThinningUtils.ThinGeantTruthConfig import (
311  ThinGeantTruthCfg)
312  acc.merge(ThinGeantTruthCfg(flags))
313  pass
314 
315  if flags.Output.doWriteAOD and flags.Reco.HIMode in [HIMode.UPC, HIMode.HIP]:
316  from HIGlobal.RecordExtraInfoConfig import addMBTS, addSpacePoints
317  acc.merge(addMBTS(flags))
318  if flags.Reco.HIMode is HIMode.UPC:
319  acc.merge(addSpacePoints(flags))
320 
321  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
LucidRecConfig.LucidRecCfg
def LucidRecCfg(flags)
Definition: LucidRecConfig.py:9
xAODTruthCnvConfig.GEN_AOD2xAODCfg
def GEN_AOD2xAODCfg(flags, name="GEN_AOD2xAOD", **kwargs)
Definition: xAODTruthCnvConfig.py:15
python.RecoSteering.RecoPostProcessingCfg
def RecoPostProcessingCfg(flags)
Definition: RecoSteering.py:295
CaloRingerAlgsConfig.CaloRingerSteeringCfg
def CaloRingerSteeringCfg(flags, name="CaloRingerSteering")
Definition: CaloRingerAlgsConfig.py:356
python.MuonReconstructionConfig.MuonReconstructionCfg
def MuonReconstructionCfg(flags)
Definition: MuonReconstructionConfig.py:142
JiveXMLConfig.AlgoJiveXMLCfg
def AlgoJiveXMLCfg(flags, name="AlgoJiveXML", **kwargs)
Definition: JiveXMLConfig.py:107
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:281
python.egammaSteeringConfig.EGammaSteeringCfg
def EGammaSteeringCfg(flags, name="EGammaSteering")
Definition: egammaSteeringConfig.py:15
CaloExtensionBuilderAlgCfg.CaloExtensionBuilderCfg
def CaloExtensionBuilderCfg(flags)
Definition: CaloExtensionBuilderAlgCfg.py:35
python.JetRecoSteering.JetRecoSteeringCfg
def JetRecoSteeringCfg(flags)
Definition: JetRecoSteering.py:63
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:7
TauConfig.TauReconstructionCfg
def TauReconstructionCfg(flags)
Definition: TauConfig.py:261
PFRun3Config.PFTauFELinkCfg
def PFTauFELinkCfg(inputFlags, **kwargs)
Definition: PFRun3Config.py:132
python.MainServicesConfig.MainServicesCfg
def MainServicesCfg(flags, LoopMgr='AthenaEventLoopMgr')
Definition: MainServicesConfig.py:256
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:10
python.BTagConfig.BTagRecoSplitCfg
def BTagRecoSplitCfg(inputFlags, JetCollection=['AntiKt4EMTopo', 'AntiKt4EMPFlow'])
Definition: BTagConfig.py:133
python.TrackRecoConfig.InDetTrackRecoCfg
def InDetTrackRecoCfg(flags)
Main ID tracking config #####################.
Definition: TrackRecoConfig.py:777
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:139
python.TriggerRecoConfig.TriggerRecoCfg
def TriggerRecoCfg(flags)
Definition: TriggerRecoConfig.py:17
RecordExtraInfoConfig.addMBTS
def addMBTS(flags)
Definition: RecordExtraInfoConfig.py:33
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:216
python.PoolReadConfig.PoolReadCfg
def PoolReadCfg(flags)
Definition: PoolReadConfig.py:69
python.HIRecConfig.HIRecCfg
def HIRecCfg(flags)
Definition: HIRecConfig.py:8
TrackParticleAssociationAlgsConfig.TrackParticleCellAssociationCfg
def TrackParticleCellAssociationCfg(flags)
Definition: TrackParticleAssociationAlgsConfig.py:78
python.MuonCombinedReconstructionConfig.MuonCombinedReconstructionCfg
def MuonCombinedReconstructionCfg(flags)
Definition: MuonCombinedReconstructionConfig.py:674
PFCfg.PFGlobalFlowElementLinkingCfg
def PFGlobalFlowElementLinkingCfg(inputFlags, **kwargs)
Definition: PFCfg.py:455
python.AthenaMonitoringCfg.AthenaMonitoringPostprocessingCfg
def AthenaMonitoringPostprocessingCfg(flags)
Definition: AthenaMonitoringCfg.py:164
PFCfg
Definition: PFCfg.py:1