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.DoXingByXingPileUp",
False)
50 flags.addFlag(
"Digitization.DoCaloNoise",
lambda prevFlags:
not prevFlags.Common.isOverlay)
52 flags.addFlag(
"Digitization.EnableCaloHSTruthRecoInputs",
False)
54 flags.addFlag(
"Digitization.HighGainFCal",
False)
56 flags.addFlag(
"Digitization.HighGainEMECIW",
True)
58 flags.addFlag(
"Digitization.PileUp",
59 lambda prevFlags:
GetFileMD(prevFlags.Input.Files).
get(
"pileUp",
"False") !=
"False")
61 flags.addFlag(
"Digitization.UseUpdatedTGCConditions",
False)
63 flags.addFlag(
"Digitization.EnableTruth",
True)
65 flags.addFlag(
"Digitization.AddCaloDigi",
False)
67 flags.addFlag(
"Digitization.AddCaloDigiThinned",
False)
69 flags.addFlag(
"Digitization.RandomSeedOffset", 0)
71 flags.addFlag(
"Digitization.ExtraInputs", [(
"xAOD::EventInfo",
"EventInfo")])
73 flags.addFlag(
"Digitization.InputBeamSigmaZ", -1)
76 flags.addFlag(
"Digitization.PixelPlanarRadiationDamageSimulationType",
77 PixelRadiationDamageSimulationType.NoRadiationDamage, type=PixelRadiationDamageSimulationType)
79 flags.addFlag(
"Digitization.Pixel3DRadiationDamageSimulationType",
80 PixelRadiationDamageSimulationType.NoRadiationDamage, type=PixelRadiationDamageSimulationType)
84 flags.addFlag(
"Digitization.PU.BunchStructureConfig",
"")
86 flags.addFlag(
"Digitization.PU.ProfileConfig",
"")
88 flags.addFlag(
"Digitization.PU.CustomProfile",
"")
90 flags.addFlag(
"Digitization.PU.ForceSequentialEventNumbers",
91 lambda prevFlags: prevFlags.Common.ProductionStep == ProductionStep.PileUpPresampling)
93 flags.addFlag(
"Digitization.PU.BeamHaloInputCols", [])
95 flags.addFlag(
"Digitization.PU.BeamIntensityPattern",
98 flags.addFlag(
"Digitization.PU.BeamGasInputCols", [])
101 flags.addFlag(
"Digitization.PU.BunchSpacing",
102 lambda prevFlags: prevFlags.Beam.BunchSpacing)
104 flags.addFlag(
"Digitization.PU.InitialBunchCrossing", -32)
105 flags.addFlag(
"Digitization.PU.FinalBunchCrossing", 6)
107 flags.addFlag(
"Digitization.PU.CavernIgnoresBeamInt",
False)
109 flags.addFlag(
"Digitization.PU.CavernInputCols", [])
111 flags.addFlag(
"Digitization.PU.FixedT0BunchCrossing", 0)
114 flags.addFlag(
"Digitization.PU.HighPtMinBiasInputCols", [])
116 flags.addFlag(
"Digitization.PU.HighPtMinBiasInputColOffset", 0)
119 flags.addFlag(
"Digitization.PU.LowPtMinBiasInputCols", [])
121 flags.addFlag(
"Digitization.PU.NumberOfLowPtMinBias", 0.0)
123 flags.addFlag(
"Digitization.PU.NumberOfHighPtMinBias", 0.0)
125 flags.addFlag(
"Digitization.PU.NumberOfBeamGas", 0.0)
127 flags.addFlag(
"Digitization.PU.NumberOfBeamHalo", 0.0)
129 flags.addFlag(
"Digitization.PU.NumberOfCollisions", 0.0)
131 flags.addFlag(
"Digitization.PU.NumberOfCavern", 0.0)
133 flags.addFlag(
"Digitization.PU.SignalPatternForSteppingCache", [])
135 flags.addFlag(
"Digitization.DoFastDigi", [])
137 flags.addFlag(
"Digitization.ReadParametersFromDB",
lambda prevFlags : prevFlags.Common.ProductionStep
in [ProductionStep.Digitization, ProductionStep.PileUpPresampling, ProductionStep.Overlay, ProductionStep.FastChain])
139 flags.addFlag(
"Digitization.TRT.HeavyIonHT",
False)
144 """Fill digitization configuration flags from run arguments."""
146 if hasattr(runArgs,
"DataRunNumber"):
147 flags.Input.ConditionsRunNumber = runArgs.DataRunNumber
150 if hasattr(runArgs,
"jobNumber"):
151 flags.Input.JobNumber = runArgs.jobNumber
153 if hasattr(runArgs,
"PileUpPresampling"):
154 flags.Common.ProductionStep = ProductionStep.PileUpPresampling
155 elif flags.Common.ProductionStep == ProductionStep.Default:
156 flags.Common.ProductionStep = ProductionStep.Digitization
158 if hasattr(runArgs,
"doAllNoise"):
159 flags.Digitization.DoInnerDetectorNoise = runArgs.doAllNoise
160 flags.Digitization.DoCaloNoise = runArgs.doAllNoise
162 if hasattr(runArgs,
"AddCaloDigi"):
163 flags.Digitization.AddCaloDigi = runArgs.AddCaloDigi
165 if hasattr(runArgs,
"digiSeedOffset1")
or hasattr(runArgs,
"digiSeedOffset2"):
166 flags.Digitization.RandomSeedOffset = 0
167 if hasattr(runArgs,
"digiSeedOffset1"):
168 flags.Digitization.RandomSeedOffset +=
int(runArgs.digiSeedOffset1)
169 if hasattr(runArgs,
"digiSeedOffset2"):
170 flags.Digitization.RandomSeedOffset +=
int(runArgs.digiSeedOffset2)
172 flags.Digitization.RandomSeedOffset = 3
174 if hasattr(runArgs,
"digiSteeringConf"):
175 flags.Digitization.DigiSteeringConf = runArgs.digiSteeringConf +
"PileUpToolsAlg"
183 """Fill pile-up digitization configuration flags from run arguments."""
184 if hasattr(runArgs,
"numberOfLowPtMinBias"):
185 flags.Digitization.PU.NumberOfLowPtMinBias = runArgs.numberOfLowPtMinBias
187 if hasattr(runArgs,
"numberOfHighPtMinBias"):
188 flags.Digitization.PU.NumberOfHighPtMinBias = runArgs.numberOfHighPtMinBias
190 if hasattr(runArgs,
"numberOfBeamHalo"):
191 flags.Digitization.PU.NumberOfBeamHalo = runArgs.numberOfBeamHalo
193 if hasattr(runArgs,
"numberOfBeamGas"):
194 flags.Digitization.PU.NumberOfBeamGas = runArgs.numberOfBeamGas
196 if hasattr(runArgs,
"numberOfCavernBkg"):
197 flags.Digitization.PU.NumberOfCavern = runArgs.numberOfCavernBkg
199 if hasattr(runArgs,
"bunchSpacing"):
200 flags.Digitization.PU.BunchSpacing = runArgs.bunchSpacing
202 if hasattr(runArgs,
"pileupInitialBunch"):
203 flags.Digitization.PU.InitialBunchCrossing = runArgs.pileupInitialBunch
205 if hasattr(runArgs,
"pileupFinalBunch"):
206 flags.Digitization.PU.FinalBunchCrossing = runArgs.pileupFinalBunch
209 if flags.Digitization.PU.InitialBunchCrossing > flags.Digitization.PU.FinalBunchCrossing:
210 raise ValueError(
"Initial bunch crossing should not be larger than the final one")
212 if hasattr(runArgs,
"inputLowPtMinbiasHitsFile"):
213 from RunDependentSimComps.PileUpUtils
import generateBackgroundInputCollections
214 flags.Digitization.PU.LowPtMinBiasInputCols = \
216 flags.Digitization.PU.NumberOfLowPtMinBias,
True)
218 if hasattr(runArgs,
"inputHighPtMinbiasHitsFile"):
219 from RunDependentSimComps.PileUpUtils
import getInputCollectionOffset, generateBackgroundInputCollections
220 if flags.Digitization.PU.HighPtMinBiasInputColOffset < 0:
222 flags.Digitization.PU.HighPtMinBiasInputColOffset =
getInputCollectionOffset(flags, runArgs.inputHighPtMinbiasHitsFile)
224 flags.Digitization.PU.HighPtMinBiasInputCols = \
226 flags.Digitization.PU.NumberOfHighPtMinBias,
True)
228 if hasattr(runArgs,
"inputCavernHitsFile"):
229 from RunDependentSimComps.PileUpUtils
import generateBackgroundInputCollections
230 flags.Digitization.PU.CavernInputCols = \
232 flags.Digitization.PU.NumberOfCavern,
True)
234 if hasattr(runArgs,
"inputBeamHaloHitsFile"):
235 from RunDependentSimComps.PileUpUtils
import generateBackgroundInputCollections
236 flags.Digitization.PU.BeamHaloInputCols = \
238 flags.Digitization.PU.NumberOfBeamHalo,
True)
240 if hasattr(runArgs,
"inputBeamGasHitsFile"):
241 from RunDependentSimComps.PileUpUtils
import generateBackgroundInputCollections
242 flags.Digitization.PU.BeamGasInputCols = \
244 flags.Digitization.PU.NumberOfBeamGas,
True)
251 """Setup common digitization flags."""
253 if (hasattr(runArgs,
"inputLowPtMinbiasHitsFile")
254 or hasattr(runArgs,
"inputHighPtMinbiasHitsFile")
255 or hasattr(runArgs,
"inputCavernHitsFile")
256 or hasattr(runArgs,
"inputBeamHaloHitsFile")
257 or hasattr(runArgs,
"inputBeamGasHitsFile")):
258 flags.Digitization.PileUp =
True
260 if flags.Digitization.PileUp:
261 flags.Input.OverrideRunNumber =
True
263 if flags.Concurrency.NumThreads > 0:
264 flags.Digitization.DoXingByXingPileUp =
False
266 flags.Digitization.DoXingByXingPileUp =
True
268 flags.Input.OverrideRunNumber = flags.Input.ConditionsRunNumber > 0