1 """ComponentAccumulator configuration for MT pileup digitization
3 Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
5 from AthenaConfiguration.ComponentAccumulator
import ComponentAccumulator
6 from AthenaConfiguration.ComponentFactory
import CompFactory
7 from AthenaConfiguration.Enums
import ProductionStep
8 from AthenaPoolCnvSvc.PoolReadConfig
import PoolReadCfg
9 from SGComps.AddressRemappingConfig
import InputRenameCfg
10 from DigitizationConfig.RunDependentConfig
import (
15 from DigitizationConfig.PileUpConfig
import (
16 LowPtMinBiasEventSelectorCfg,
17 HighPtMinBiasEventSelectorCfg,
18 CavernEventSelectorCfg,
19 BeamGasEventSelectorCfg,
20 BeamHaloEventSelectorCfg,
28 from hashlib
import blake2b
31 "Given number of bkg needed (on average) per BC, returns number to load per batch"
36 boundaries = np.array([1.74752840e-03, 4.03701726e-03, 7.74263683e-03, 1.23284674e-02,
37 1.78864953e-02, 2.36448941e-02, 3.12571585e-02, 3.76493581e-02,
38 4.53487851e-02, 5.46227722e-02, 6.57933225e-02, 7.92482898e-02,
39 8.69749003e-02, 9.54548457e-02, 1.04761575e-01, 1.14975700e-01,
40 1.26185688e-01, 1.38488637e-01, 1.51991108e-01, 1.66810054e-01,
41 1.83073828e-01, 2.00923300e-01, 2.20513074e-01, 2.42012826e-01,
42 2.65608778e-01, 2.91505306e-01, 3.19926714e-01, 3.51119173e-01,
43 3.85352859e-01, 4.22924287e-01, 4.64158883e-01, 5.09413801e-01,
44 5.59081018e-01, 6.13590727e-01, 6.73415066e-01, 7.39072203e-01,
45 8.11130831e-01, 8.90215085e-01, 9.77009957e-01, 1.07226722e+00,
46 1.17681195e+00, 1.29154967e+00, 1.41747416e+00, 1.55567614e+00,
47 1.70735265e+00, 1.87381742e+00, 2.05651231e+00, 2.25701972e+00,
48 2.47707636e+00, 2.71858824e+00, 2.98364724e+00, 3.27454916e+00,
49 3.59381366e+00, 3.94420606e+00, 4.32876128e+00, 4.75081016e+00,
50 5.21400829e+00, 5.72236766e+00, 6.28029144e+00, 6.89261210e+00,
51 7.56463328e+00, 8.30217568e+00, 9.11162756e+00, 1.00000000e+01])
52 n_to_load = np.array([ 3., 4., 5., 6., 7., 8., 9., 10., 11., 12., 13.,
53 14., 15., 16., 17., 18., 19., 20., 21., 22., 23., 24.,
54 26., 27., 29., 31., 33., 35., 37., 39., 42., 44., 47.,
55 51., 54., 58., 62., 66., 71., 76., 81., 88., 94., 101.,
56 109., 117., 126., 136., 147., 158., 171., 185., 200., 216., 234.,
57 253., 275., 298., 323., 350., 380., 413., 448., 487.])
59 return int(ceil(1.224 * nPerBC * 39))
60 return int(n_to_load[np.searchsorted(boundaries, nPerBC, side=
'right')])
72 acc.merge(
InputRenameCfg(
"xAOD::EventInfo",
"EventInfo",
"HSEventInfo"))
73 acc.merge(
InputRenameCfg(
"xAOD::EventAuxInfo",
"EventInfoAux.",
"HSEventInfoAux."))
75 acc.merge(
InputRenameCfg(
"McEventCollection",
"TruthEvent",
"HSTruthEvent"))
76 acc.merge(
InputRenameCfg(
"TrackRecordCollection",
"MuonEntryLayer",
"HSMuonEntryLayer"))
83 int.from_bytes(blake2b(name.encode(), digest_size=8).digest(),
'big')
84 + flags.Digitization.RandomSeedOffset
90 n_evt = flags.Exec.MaxEvents
91 skip = flags.Exec.SkipEvents
94 kwargs.setdefault(
"OnDemandMB",
True)
95 if kind == PUBkgKind.LOWPT:
97 kwargs.setdefault(
"SkippedHSEvents", skip)
98 kwargs.setdefault(
"MBBatchSize", 10000)
99 kwargs.setdefault(
"NSimultaneousBatches", 1)
100 kwargs.setdefault(
"HSBatchSize", 128)
101 kwargs.setdefault(
"AvgMBPerBunch", flags.Digitization.PU.NumberOfLowPtMinBias)
102 evt_per_batch = kwargs[
"HSBatchSize"]
103 actualNHSEventsPerBatch = (
104 (skip // evt_per_batch) * [0]
105 + (skip % evt_per_batch != 0) * [evt_per_batch - (skip % evt_per_batch)]
106 + (n_evt // evt_per_batch) * [evt_per_batch]
107 + (n_evt % evt_per_batch != 0) * [n_evt % evt_per_batch]
109 kwargs[
"actualNHSEventsPerBatch"] = actualNHSEventsPerBatch
111 "BkgEventSelector", acc.getService(
"LowPtMinBiasEventSelector")
113 elif kind == PUBkgKind.HIGHPT:
115 kwargs.setdefault(
"SkippedHSEvents", skip)
116 kwargs.setdefault(
"AvgMBPerBunch", flags.Digitization.PU.NumberOfHighPtMinBias)
118 "BkgEventSelector", acc.getService(
"HighPtMinBiasEventSelector")
120 elif kind == PUBkgKind.CAVERN:
122 kwargs.setdefault(
"SkippedHSEvents", skip)
123 kwargs.setdefault(
"AvgMBPerBunch", flags.Digitization.PU.NumberOfCavern)
124 kwargs.setdefault(
"UsePoisson",
False)
125 kwargs.setdefault(
"UseBeamInt",
False)
126 kwargs.setdefault(
"UseBeamLumi",
False)
127 kwargs.setdefault(
"BkgEventSelector", acc.getService(
"CavernEventSelector"))
128 elif kind == PUBkgKind.BEAMGAS:
130 kwargs.setdefault(
"SkippedHSEvents", skip)
131 kwargs.setdefault(
"AvgMBPerBunch", flags.Digitization.PU.NumberOfBeamGas)
132 kwargs.setdefault(
"UseBeamInt",
True)
133 kwargs.setdefault(
"UseBeamLumi",
False)
134 kwargs.setdefault(
"BkgEventSelector", acc.getService(
"BeamGasEventSelector"))
135 elif kind == PUBkgKind.BEAMHALO:
137 kwargs.setdefault(
"SkippedHSEvents", skip)
138 kwargs.setdefault(
"AvgMBPerBunch", flags.Digitization.PU.NumberOfBeamHalo)
139 kwargs.setdefault(
"UseBeamInt",
True)
140 kwargs.setdefault(
"UseBeamLumi",
False)
141 kwargs.setdefault(
"BkgEventSelector", acc.getService(
"BeamHaloEventSelector"))
143 if kind == PUBkgKind.LOWPT:
144 acc.addService(CompFactory.BatchedMinbiasSvc(name, **kwargs), primary=
True)
146 acc.addService(CompFactory.OnDemandMinbiasSvc(name, **kwargs), primary=
True)
151 from BeamSpotConditions.BeamSpotConditionsConfig
import BeamSpotCondAlgCfg
153 acc.addService(CompFactory.SkipEventIdxSvc(
"SkipEventIdxSvc"))
154 kwargs.setdefault(
"Cardinality", flags.Concurrency.NumThreads)
157 not flags.Digitization.DoXingByXingPileUp
158 ),
"PileUpMTAlg does not support XingByXing pile-up!"
163 if flags.Digitization.PU.BeamIntensityPattern:
164 if flags.Digitization.PU.SignalPatternForSteppingCache:
167 kwargs.setdefault(
"BeamIntSvc", acc.getService(
"StepArrayBM"))
168 elif flags.Digitization.PU.FixedT0BunchCrossing:
171 kwargs.setdefault(
"BeamIntSvc", acc.getService(
"FixedArrayBM"))
175 kwargs.setdefault(
"BeamIntSvc", acc.getService(
"ArrayBM"))
177 kwargs.setdefault(
"SkippedHSEvents", flags.Exec.SkipEvents)
178 kwargs.setdefault(
"BCSpacing", flags.Digitization.PU.BunchSpacing)
179 kwargs.setdefault(
"EarliestDeltaBC", flags.Digitization.PU.InitialBunchCrossing)
180 kwargs.setdefault(
"LatestDeltaBC", flags.Digitization.PU.FinalBunchCrossing)
181 if flags.Input.RunAndLumiOverrideList:
183 kwargs.setdefault(
"BeamLumiSvc", acc.getService(
"LumiProfileSvc"))
187 kwargs.setdefault(
"BeamLumiSvc", acc.getService(
"NoProfileSvc"))
188 kwargs.setdefault(
"AverageMu", flags.Digitization.PU.NumberOfCollisions)
191 assert not flags.Input.SecondaryFiles, (
192 "Found ConfigFlags.Input.SecondaryFiles = %r; "
193 "double event selection is not supported "
194 "by PileUpMTAlg" % (
not flags.Input.SecondaryFiles)
209 if flags.Digitization.PU.LowPtMinBiasInputCols:
210 svc = acc.getPrimaryAndMerge(
212 flags, name=
"LowPtMinBiasSvc", kind=PUBkgKind.LOWPT, **mbKwargs
215 kwargs.setdefault(
"LowPtMinbiasSvc", svc)
218 flags.Digitization.PU.NumberOfLowPtMinBias
219 / flags.Digitization.PU.NumberOfCollisions,
221 if flags.Digitization.PU.HighPtMinBiasInputCols:
222 svc = acc.getPrimaryAndMerge(
224 flags, name=
"HighPtMinBiasSvc", kind=PUBkgKind.HIGHPT, **mbKwargs
227 kwargs.setdefault(
"HighPtMinbiasSvc", svc)
230 flags.Digitization.PU.NumberOfHighPtMinBias
231 / flags.Digitization.PU.NumberOfCollisions,
233 if flags.Digitization.PU.CavernInputCols:
234 svc = acc.getPrimaryAndMerge(
236 flags, name=
"CavernMinBiasSvc", kind=PUBkgKind.CAVERN, **mbKwargs
239 kwargs.setdefault(
"CavernMinbiasSvc", svc)
240 kwargs.setdefault(
"NumCavern", flags.Digitization.PU.NumberOfCavern)
241 if flags.Digitization.PU.BeamGasInputCols:
242 svc = acc.getPrimaryAndMerge(
244 flags, name=
"BeamGasMinBiasSvc", kind=PUBkgKind.BEAMGAS, **mbKwargs
247 kwargs.setdefault(
"BeamGasMinbiasSvc", svc)
248 kwargs.setdefault(
"NumBeamGas", flags.Digitization.PU.NumberOfBeamGas)
249 if flags.Digitization.PU.BeamHaloInputCols:
250 svc = acc.getPrimaryAndMerge(
252 flags, name=
"BeamHaloMinBiasSvc", kind=PUBkgKind.BEAMHALO, **mbKwargs
255 kwargs.setdefault(
"BeamHaloMinbiasSvc", svc)
256 kwargs.setdefault(
"NumBeamHalo", flags.Digitization.PU.NumberOfBeamHalo)
257 presampling = flags.Common.ProductionStep == ProductionStep.PileUpPresampling
259 kwargs.setdefault(
"EventInfoKey", flags.Overlay.BkgPrefix +
"EventInfo")
261 kwargs.setdefault(
"EventInfoKey",
"EventInfo")
264 CompFactory.PileUpMTAlg(flags.Digitization.DigiSteeringConf, **kwargs)
268 if flags.Output.doWriteRDO:
269 from OutputStreamAthenaPool.OutputStreamConfig
import OutputStreamCfg
276 "xAOD::EventInfoContainer#PileUpEventInfo",
277 "xAOD::EventInfoAuxContainer#PileUpEventInfo*",