1 """Construct ConfigFlags for Digitization
3 Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
5 from AthenaConfiguration.AutoConfigFlags
import GetFileMD
6 from AthenaConfiguration.AthConfigFlags
import AthConfigFlags
7 from AthenaConfiguration.Enums
import ProductionStep
8 from SimulationConfig.SimEnums
import PixelRadiationDamageSimulationType
12 """Return a valid value for Digitization.BeamIntensity, which
13 matches the specified constBunchSpacing
15 if type(constBunchSpacing)
is not int:
16 raise TypeError(
"constBunchSpacing must be int, "
17 "not %s" %
type(constBunchSpacing).__name__)
18 if constBunchSpacing % 25 != 0:
19 raise ValueError(
"constBunchSpacing must be a multiple of 25, "
20 "not %s" % constBunchSpacing)
23 if constBunchSpacing == 25:
28 nBunches = (constBunchSpacing//25) - 2
29 pattern += nBunches*[0.0]
34 """Return an AthConfigFlags object with required flags"""
35 flags = AthConfigFlags()
38 def _checkDigiSteeringConf(prevFlags):
39 digiSteeringConf =
"StandardPileUpToolsAlg"
40 if prevFlags.Input.Files:
41 digiSteeringConf =
GetFileMD(prevFlags.Input.Files).
get(
"digiSteeringConf",
"StandardPileUpToolsAlg")
42 return digiSteeringConf
44 flags.addFlag(
"Digitization.DigiSteeringConf", _checkDigiSteeringConf)
46 flags.addFlag(
"Digitization.DoInnerDetectorNoise",
lambda prevFlags:
not prevFlags.Common.isOverlay)
48 flags.addFlag(
"Digitization.DoITkPixelDetectorNoise",
lambda prevFlags: prevFlags.Digitization.DoInnerDetectorNoise)
50 flags.addFlag(
"Digitization.DoITkStripDetectorNoise",
lambda prevFlags: prevFlags.Digitization.DoInnerDetectorNoise)
52 flags.addFlag(
"Digitization.DoXingByXingPileUp",
False)
54 flags.addFlag(
"Digitization.DoCaloNoise",
lambda prevFlags:
not prevFlags.Common.isOverlay)
56 flags.addFlag(
"Digitization.EnableCaloHSTruthRecoInputs",
False)
58 flags.addFlag(
"Digitization.HighGainFCal",
False)
60 flags.addFlag(
"Digitization.HighGainEMECIW",
True)
62 flags.addFlag(
"Digitization.PileUp",
63 lambda prevFlags:
GetFileMD(prevFlags.Input.Files).
get(
"pileUp",
"False") !=
"False")
65 flags.addFlag(
"Digitization.UseUpdatedTGCConditions",
False)
67 flags.addFlag(
"Digitization.EnableTruth",
True)
69 flags.addFlag(
"Digitization.AddCaloDigi",
False)
71 flags.addFlag(
"Digitization.AddCaloDigiThinned",
False)
73 flags.addFlag(
"Digitization.RandomSeedOffset", 0)
75 flags.addFlag(
"Digitization.ExtraInputs", [(
"xAOD::EventInfo",
"EventInfo")])
77 flags.addFlag(
"Digitization.InputBeamSigmaZ", -1)
80 flags.addFlag(
"Digitization.PixelPlanarRadiationDamageSimulationType",
81 PixelRadiationDamageSimulationType.NoRadiationDamage, type=PixelRadiationDamageSimulationType)
83 flags.addFlag(
"Digitization.Pixel3DRadiationDamageSimulationType",
84 PixelRadiationDamageSimulationType.NoRadiationDamage, type=PixelRadiationDamageSimulationType)
88 flags.addFlag(
"Digitization.DigitizeITk3Das3D",
False)
92 flags.addFlag(
"Digitization.PU.BunchStructureConfig",
"")
94 flags.addFlag(
"Digitization.PU.ProfileConfig",
"")
96 flags.addFlag(
"Digitization.PU.CustomProfile",
"")
98 flags.addFlag(
"Digitization.PU.ForceSequentialEventNumbers",
99 lambda prevFlags: prevFlags.Common.ProductionStep == ProductionStep.PileUpPresampling)
101 flags.addFlag(
"Digitization.PU.BeamHaloInputCols", [])
103 flags.addFlag(
"Digitization.PU.BeamIntensityPattern",
106 flags.addFlag(
"Digitization.PU.BeamGasInputCols", [])
109 flags.addFlag(
"Digitization.PU.BunchSpacing",
110 lambda prevFlags: prevFlags.Beam.BunchSpacing)
112 flags.addFlag(
"Digitization.PU.InitialBunchCrossing", -32)
113 flags.addFlag(
"Digitization.PU.FinalBunchCrossing", 6)
115 flags.addFlag(
"Digitization.PU.CavernIgnoresBeamInt",
False)
117 flags.addFlag(
"Digitization.PU.CavernInputCols", [])
119 flags.addFlag(
"Digitization.PU.FixedT0BunchCrossing", 0)
122 flags.addFlag(
"Digitization.PU.HighPtMinBiasInputCols", [])
124 flags.addFlag(
"Digitization.PU.HighPtMinBiasInputColOffset", 0)
127 flags.addFlag(
"Digitization.PU.LowPtMinBiasInputCols", [])
129 flags.addFlag(
"Digitization.PU.NumberOfLowPtMinBias", 0.0)
131 flags.addFlag(
"Digitization.PU.NumberOfHighPtMinBias", 0.0)
133 flags.addFlag(
"Digitization.PU.NumberOfBeamGas", 0.0)
135 flags.addFlag(
"Digitization.PU.NumberOfBeamHalo", 0.0)
137 flags.addFlag(
"Digitization.PU.NumberOfCollisions", 0.0)
139 flags.addFlag(
"Digitization.PU.NumberOfCavern", 0.0)
141 flags.addFlag(
"Digitization.PU.SignalPatternForSteppingCache", [])
143 flags.addFlag(
"Digitization.DoFastDigi", [])
145 flags.addFlag(
"Digitization.ReadParametersFromDB",
lambda prevFlags : prevFlags.Common.ProductionStep
in [ProductionStep.Digitization, ProductionStep.PileUpPresampling, ProductionStep.Overlay, ProductionStep.FastChain])
147 flags.addFlag(
"Digitization.TRT.HeavyIonHT",
False)
152 """Fill digitization configuration flags from run arguments."""
154 if hasattr(runArgs,
"DataRunNumber"):
155 flags.Input.ConditionsRunNumber = runArgs.DataRunNumber
158 if hasattr(runArgs,
"jobNumber"):
159 flags.Input.JobNumber = runArgs.jobNumber
161 if hasattr(runArgs,
"PileUpPresampling"):
162 flags.Common.ProductionStep = ProductionStep.PileUpPresampling
163 elif flags.Common.ProductionStep == ProductionStep.Default:
164 flags.Common.ProductionStep = ProductionStep.Digitization
166 if hasattr(runArgs,
"doAllNoise"):
167 flags.Digitization.DoInnerDetectorNoise = runArgs.doAllNoise
168 flags.Digitization.DoCaloNoise = runArgs.doAllNoise
170 if hasattr(runArgs,
"AddCaloDigi"):
171 flags.Digitization.AddCaloDigi = runArgs.AddCaloDigi
173 if hasattr(runArgs,
"digiSeedOffset1")
or hasattr(runArgs,
"digiSeedOffset2"):
174 flags.Digitization.RandomSeedOffset = 0
175 if hasattr(runArgs,
"digiSeedOffset1"):
176 flags.Digitization.RandomSeedOffset +=
int(runArgs.digiSeedOffset1)
177 if hasattr(runArgs,
"digiSeedOffset2"):
178 flags.Digitization.RandomSeedOffset +=
int(runArgs.digiSeedOffset2)
180 flags.Digitization.RandomSeedOffset = 3
182 if hasattr(runArgs,
"digiSteeringConf"):
183 flags.Digitization.DigiSteeringConf = runArgs.digiSteeringConf +
"PileUpToolsAlg"
191 """Fill pile-up digitization configuration flags from run arguments."""
192 if hasattr(runArgs,
"numberOfLowPtMinBias"):
193 flags.Digitization.PU.NumberOfLowPtMinBias = runArgs.numberOfLowPtMinBias
195 if hasattr(runArgs,
"numberOfHighPtMinBias"):
196 flags.Digitization.PU.NumberOfHighPtMinBias = runArgs.numberOfHighPtMinBias
198 if hasattr(runArgs,
"numberOfBeamHalo"):
199 flags.Digitization.PU.NumberOfBeamHalo = runArgs.numberOfBeamHalo
201 if hasattr(runArgs,
"numberOfBeamGas"):
202 flags.Digitization.PU.NumberOfBeamGas = runArgs.numberOfBeamGas
204 if hasattr(runArgs,
"numberOfCavernBkg"):
205 flags.Digitization.PU.NumberOfCavern = runArgs.numberOfCavernBkg
207 if hasattr(runArgs,
"bunchSpacing"):
208 flags.Digitization.PU.BunchSpacing = runArgs.bunchSpacing
210 if hasattr(runArgs,
"pileupInitialBunch"):
211 flags.Digitization.PU.InitialBunchCrossing = runArgs.pileupInitialBunch
213 if hasattr(runArgs,
"pileupFinalBunch"):
214 flags.Digitization.PU.FinalBunchCrossing = runArgs.pileupFinalBunch
217 if flags.Digitization.PU.InitialBunchCrossing > flags.Digitization.PU.FinalBunchCrossing:
218 raise ValueError(
"Initial bunch crossing should not be larger than the final one")
220 if hasattr(runArgs,
"inputLowPtMinbiasHitsFile"):
221 from RunDependentSimComps.PileUpUtils
import generateBackgroundInputCollections
222 flags.Digitization.PU.LowPtMinBiasInputCols = \
224 flags.Digitization.PU.NumberOfLowPtMinBias,
True)
226 if hasattr(runArgs,
"inputHighPtMinbiasHitsFile"):
227 from RunDependentSimComps.PileUpUtils
import getInputCollectionOffset, generateBackgroundInputCollections
228 if flags.Digitization.PU.HighPtMinBiasInputColOffset < 0:
230 flags.Digitization.PU.HighPtMinBiasInputColOffset =
getInputCollectionOffset(flags, runArgs.inputHighPtMinbiasHitsFile)
232 flags.Digitization.PU.HighPtMinBiasInputCols = \
234 flags.Digitization.PU.NumberOfHighPtMinBias,
True)
236 if hasattr(runArgs,
"inputCavernHitsFile"):
237 from RunDependentSimComps.PileUpUtils
import generateBackgroundInputCollections
238 flags.Digitization.PU.CavernInputCols = \
240 flags.Digitization.PU.NumberOfCavern,
True)
242 if hasattr(runArgs,
"inputBeamHaloHitsFile"):
243 from RunDependentSimComps.PileUpUtils
import generateBackgroundInputCollections
244 flags.Digitization.PU.BeamHaloInputCols = \
246 flags.Digitization.PU.NumberOfBeamHalo,
True)
248 if hasattr(runArgs,
"inputBeamGasHitsFile"):
249 from RunDependentSimComps.PileUpUtils
import generateBackgroundInputCollections
250 flags.Digitization.PU.BeamGasInputCols = \
252 flags.Digitization.PU.NumberOfBeamGas,
True)
259 """Setup common digitization flags."""
261 if (hasattr(runArgs,
"inputLowPtMinbiasHitsFile")
262 or hasattr(runArgs,
"inputHighPtMinbiasHitsFile")
263 or hasattr(runArgs,
"inputCavernHitsFile")
264 or hasattr(runArgs,
"inputBeamHaloHitsFile")
265 or hasattr(runArgs,
"inputBeamGasHitsFile")):
266 flags.Digitization.PileUp =
True
268 if flags.Digitization.PileUp:
269 flags.Input.OverrideRunNumber =
True
271 if flags.Concurrency.NumThreads > 0:
272 flags.Digitization.DoXingByXingPileUp =
False
274 flags.Digitization.DoXingByXingPileUp =
True
276 flags.Input.OverrideRunNumber = flags.Input.ConditionsRunNumber > 0