ATLAS Offline Software
Loading...
Searching...
No Matches
DigitizationSteering.py
Go to the documentation of this file.
1#!/usr/bin/env python
2"""Main steering for the digitization jobs
3
4Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
5"""
6
7from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
8from AthenaConfiguration.ComponentFactory import CompFactory
9from AthenaConfiguration.Enums import ProductionStep
10from AthenaConfiguration.DetectorConfigFlags import getEnabledDetectors
11from AthenaConfiguration.MainServicesConfig import MainServicesCfg
12from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
13from DigitizationConfig.DigitizationParametersConfig import writeDigitizationMetadata
14from RunDependentSimComps.PileUpUtils import pileupInputCollections
15
16from AthenaCommon.Logging import logging
17logDigiSteering = logging.getLogger('DigitizationSteering')
18
20 try:
21 from AthenaPython.PyAthena import HepMC3 # noqa: F401
22 HepMCVersion=3
23 except ImportError:
24 HepMCVersion=2
25 return HepMCVersion
26
27
29 """Configure main digitization services"""
30 if flags.Digitization.PileUp:
31 if flags.Concurrency.NumThreads > 0:
32 logDigiSteering.info("DigitizationMainServicesCfg: Attempting to run pile-up digitization AthenaMT using %s threads!", str(flags.Concurrency.NumThreads))
33 logDigiSteering.info("DigitizationMainServicesCfg: Using new PileUpMT code.")
34 # raise RuntimeError("DigitizationSteering.DigitizationMainServicesCfg: Running pile-up digitization with AthenaMT is not supported. Please update your configuration.")
35 from DigitizationConfig.PileUpMTConfig import PileUpMTAlgCfg
36 acc = MainServicesCfg(flags)
37 acc.merge(PileUpMTAlgCfg(flags))
38 else:
39 from DigitizationConfig.PileUpConfig import PileUpEventLoopMgrCfg
40 acc = MainServicesCfg(flags, LoopMgr="PileUpEventLoopMgr")
41 acc.merge(PileUpEventLoopMgrCfg(flags))
42 else:
43 acc = MainServicesCfg(flags)
44
45 acc.merge(PoolReadCfg(flags))
46
47 return acc
48
49
51 # Construct main services
53
54 acc.merge(DigitizationMainContentCfg(flags))
55
56 return acc
57
59
60 acc = ComponentAccumulator()
61
62 acc.merge(writeDigitizationMetadata(flags))
63
64 if not flags.Digitization.PileUp:
65 # Old EventInfo conversion
66 if "EventInfo" not in flags.Input.Collections:
67 from xAODEventInfoCnv.xAODEventInfoCnvConfig import EventInfoCnvAlgCfg
68 acc.merge(EventInfoCnvAlgCfg(flags,
69 inputKey="McEventInfo",
70 outputKey="Input_EventInfo"))
71
72 from xAODEventInfoCnv.xAODEventInfoCnvConfig import EventInfoUpdateFromContextAlgCfg
73 acc.merge(EventInfoUpdateFromContextAlgCfg(flags))
74
75 # Decorate pile-up values
76 from DigitizationConfig.PileUpConfig import NoPileUpMuWriterCfg
77 acc.merge(NoPileUpMuWriterCfg(flags))
78
79 # Signal-only truth information
80 if flags.Digitization.PileUp:
81 if HepMCVersion() == 3:
82 from MCTruthSimAlgs.MCTruthSimAlgsConfig import SimpleMergeMcEventCollCfg as MergeMcEventCollCfg
83 from MCTruthSimAlgs.MCTruthSimAlgsConfig import InTimeOnlySimpleMergeMcEventCollCfg as InTimeOnlyMergeMcEventCollCfg
84 from MCTruthSimAlgs.MCTruthSimAlgsConfig import SignalOnlySimpleMergeMcEventCollCfg as SignalOnlyMergeMcEventCollCfg
85 else:
86 from MCTruthSimAlgs.MCTruthSimAlgsConfig import MergeMcEventCollCfg
87 from MCTruthSimAlgs.MCTruthSimAlgsConfig import InTimeOnlyMcEventCollCfg as InTimeOnlyMergeMcEventCollCfg
88 from MCTruthSimAlgs.MCTruthSimAlgsConfig import SignalOnlyMcEventCollCfg as SignalOnlyMergeMcEventCollCfg
89 from MCTruthSimAlgs.MCTruthSimAlgsConfig import (
90 MergeAntiKt4TruthJetsCfg,
91 MergeAntiKt6TruthJetsCfg,
92 MergeTruthParticlesCfg,
93 MergeMuonEntryLayerCfg,
94 MergeCalibHitsCfg,
95 MergeHijingParsCfg,
96 )
97 if flags.Common.ProductionStep is not ProductionStep.FastChain and getEnabledDetectors(flags):
98 if flags.Digitization.DigiSteeringConf=="StandardPileUpToolsAlg":
99 acc.merge(MergeMcEventCollCfg(flags))
100 elif flags.Digitization.DigiSteeringConf=="StandardInTimeOnlyTruthPileUpToolsAlg":
101 acc.merge(InTimeOnlyMergeMcEventCollCfg(flags))
102 else:
103 acc.merge(SignalOnlyMergeMcEventCollCfg(flags))
104 if flags.Digitization.EnableTruth:
105 puCollections = pileupInputCollections(flags.Digitization.PU.LowPtMinBiasInputCols)
106 if "AntiKt4TruthJets" in puCollections:
107 acc.merge(MergeAntiKt4TruthJetsCfg(flags))
108 if "AntiKt6TruthJets" in puCollections:
109 acc.merge(MergeAntiKt6TruthJetsCfg(flags))
110 if "TruthPileupParticles" in puCollections:
111 acc.merge(MergeTruthParticlesCfg(flags))
112 acc.merge(MergeMuonEntryLayerCfg(flags))
113 acc.merge(MergeCalibHitsCfg(flags))
114 if 'Hijing_event_params' in pileupInputCollections(flags.Digitization.PU.CavernInputCols):
115 acc.merge(MergeHijingParsCfg(flags))
116
117
118 from DigitizationConfig.TruthDigitizationOutputConfig import TruthDigitizationOutputCfg
119 acc.merge(TruthDigitizationOutputCfg(flags))
120
121 # Beam spot reweighting
122 if flags.Common.ProductionStep != ProductionStep.PileUpPresampling and flags.Digitization.InputBeamSigmaZ > 0:
123 from BeamEffects.BeamEffectsAlgConfig import BeamSpotReweightingAlgCfg
124 acc.merge(BeamSpotReweightingAlgCfg(flags))
125
126 # Inner Detector
127 if flags.Detector.EnableBCM:
128 from BCM_Digitization.BCM_DigitizationConfig import BCM_DigitizationCfg
129 acc.merge(BCM_DigitizationCfg(flags))
130 if flags.Detector.EnablePixel:
131 from PixelDigitization.PixelDigitizationConfig import PixelDigitizationCfg
132 acc.merge(PixelDigitizationCfg(flags))
133 if flags.Detector.EnableSCT:
134 from SCT_Digitization.SCT_DigitizationConfig import SCT_DigitizationCfg
135 acc.merge(SCT_DigitizationCfg(flags))
136 if flags.Detector.EnableTRT:
137 from TRT_Digitization.TRT_DigitizationConfig import TRT_DigitizationCfg
138 acc.merge(TRT_DigitizationCfg(flags))
139
140 # ITk
141 if flags.Detector.EnableITkPixel:
142 from PixelDigitization.ITkPixelDigitizationConfig import ITkPixelDigitizationCfg
143 acc.merge(ITkPixelDigitizationCfg(flags))
144 if flags.Detector.EnableITkStrip:
145 from StripDigitization.StripDigitizationConfig import ITkStripDigitizationCfg
146 acc.merge(ITkStripDigitizationCfg(flags))
147 if flags.Detector.EnablePLR:
148 from PixelDigitization.PLR_DigitizationConfig import PLR_DigitizationCfg
149 acc.merge(PLR_DigitizationCfg(flags))
150
151 # HGTD
152 if flags.Detector.EnableHGTD:
153 from HGTD_Digitization.HGTD_DigitizationConfig import HGTD_DigitizationCfg
154 acc.merge(HGTD_DigitizationCfg(flags))
155
156 # Calorimeter
157 if flags.Detector.EnableLAr:
158 from LArDigitization.LArDigitizationConfig import LArTriggerDigitizationCfg
159 acc.merge(LArTriggerDigitizationCfg(flags))
160 if flags.Detector.EnableTile:
161 from TileSimAlgs.TileDigitizationConfig import TileDigitizationCfg, TileTriggerDigitizationCfg
162 acc.merge(TileDigitizationCfg(flags))
163 acc.merge(TileTriggerDigitizationCfg(flags))
164
165 # Muon Spectrometer
166 if flags.Detector.EnableMDT:
167 from MuonConfig.MDT_DigitizationConfig import MDT_DigitizationDigitToRDOCfg
168 acc.merge(MDT_DigitizationDigitToRDOCfg(flags))
169 if flags.Detector.EnableTGC:
170 from MuonConfig.TGC_DigitizationConfig import TGC_DigitizationDigitToRDOCfg
171 acc.merge(TGC_DigitizationDigitToRDOCfg(flags))
172 if flags.Detector.EnableRPC:
173 from MuonConfig.RPC_DigitizationConfig import RPC_DigitizationDigitToRDOCfg
174 acc.merge(RPC_DigitizationDigitToRDOCfg(flags))
175 if flags.Detector.EnableCSC:
176 from MuonConfig.CSC_DigitizationConfig import CSC_DigitizationDigitToRDOCfg
177 acc.merge(CSC_DigitizationDigitToRDOCfg(flags))
178 if flags.Detector.EnablesTGC:
179 from MuonConfig.sTGC_DigitizationConfig import sTGC_DigitizationDigitToRDOCfg
180 acc.merge(sTGC_DigitizationDigitToRDOCfg(flags))
181 if flags.Detector.EnableMM:
182 from MuonConfig.MM_DigitizationConfig import MM_DigitizationDigitToRDOCfg
183 acc.merge(MM_DigitizationDigitToRDOCfg(flags))
184
185 # LUCID
186 if flags.Detector.EnableLucid:
187 from LUCID_Digitization.LUCID_DigitizationConfig import LUCID_DigitizationCfg
188 acc.merge(LUCID_DigitizationCfg(flags))
189
190 # AFP
191 if flags.Detector.EnableAFP:
192 from AFP_Digitization.AFP_DigitizationConfig import AFP_DigitizationCfg
193 acc.merge(AFP_DigitizationCfg(flags))
194
195 # ALFA
196 if flags.Detector.EnableALFA:
197 from ALFA_Digitization.ALFA_DigitizationConfig import ALFA_DigitizationCfg
198 acc.merge(ALFA_DigitizationCfg(flags))
199
200 # ZDC
201 if flags.Detector.EnableZDC:
202 from ZDC_SimuDigitization.ZDC_SimuDigitizationConfig import ZDC_DigitizationCfg
203 acc.merge(ZDC_DigitizationCfg(flags))
204
205 # Add in-file MetaData
206 from xAODMetaDataCnv.InfileMetaDataConfig import SetupMetaDataForStreamCfg
207 acc.merge(SetupMetaDataForStreamCfg(flags, "RDO"))
208
209 return acc
210
211
213 """MessageSvc for digitization and overlay"""
214 MessageSvc = CompFactory.MessageSvc
215 acc = ComponentAccumulator()
216 acc.addService(MessageSvc(setError=["HepMcParticleLink"]))
217 return acc
218
219
221 """Testing digitization post-include"""
222 # dump config
223 configName = "DigiPUConfigCA" if flags.Digitization.PileUp else "DigiConfigCA"
224 from AthenaConfiguration.MainServicesConfig import JobOptionsDumpCfg
225 acc.merge(JobOptionsDumpCfg(flags, fileName=f"{configName}.txt"))
226
227 # dump pickle
228 with open(f"{configName}.pkl", "wb") as f:
229 acc.store(f)