248def PileUpEventLoopMgrCfg(flags, name="PileUpEventLoopMgr", **kwargs):
249 acc = BeamSpotFixerAlgCfg(flags)
250
251
252 kwargs.setdefault("XingByXing", flags.Digitization.DoXingByXingPileUp)
253
254 if flags.Digitization.PU.BeamIntensityPattern:
255 if flags.Digitization.PU.SignalPatternForSteppingCache:
256
257 kwargs.setdefault("BeamInt", acc.getPrimaryAndMerge(StepArrayBMCfg(flags)))
258 elif flags.Digitization.PU.FixedT0BunchCrossing:
259
260 kwargs.setdefault("BeamInt", acc.getPrimaryAndMerge(FixedArrayBMCfg(flags)))
261 else:
262
263 kwargs.setdefault("BeamInt", acc.getPrimaryAndMerge(ArrayBMCfg(flags)))
264
265
266 assert not flags.Input.SecondaryFiles, ("Found ConfigFlags.Input.SecondaryFiles = %r; "
267 "double event selection is not supported "
268 "by PileUpEventLoopMgr" % (not flags.Input.SecondaryFiles))
269 acc.merge(PoolReadCfg(flags))
270 kwargs.setdefault("OrigSelector", acc.getService("EventSelector"))
271 BackgroundCaches = []
272
273 if flags.Digitization.PU.LowPtMinBiasInputCols:
274 BackgroundCaches += [acc.popToolsAndMerge(LowPtMinBiasCacheCfg(flags))]
275 if flags.Digitization.PU.HighPtMinBiasInputCols:
276 BackgroundCaches += [acc.popToolsAndMerge(HighPtMinBiasCacheCfg(flags))]
277 if flags.Digitization.PU.CavernInputCols:
278 BackgroundCaches += [acc.popToolsAndMerge(CavernCacheCfg(flags))]
279 if flags.Digitization.PU.BeamGasInputCols:
280 BackgroundCaches += [acc.popToolsAndMerge(BeamGasCacheCfg(flags))]
281 if flags.Digitization.PU.BeamHaloInputCols:
282 BackgroundCaches += [acc.popToolsAndMerge(BeamHaloCacheCfg(flags))]
283 kwargs.setdefault("bkgCaches", BackgroundCaches)
284
285 kwargs.setdefault("XingFrequency", flags.Digitization.PU.BunchSpacing)
286
287 kwargs.setdefault("firstXing", flags.Digitization.PU.InitialBunchCrossing)
288 kwargs.setdefault("lastXing", flags.Digitization.PU.FinalBunchCrossing)
289
290 if flags.Input.RunAndLumiOverrideList:
291 kwargs.setdefault("MaxMinBiasCollPerXing", maxNevtsPerXing(flags))
292 kwargs.setdefault("BeamLuminosity", acc.getPrimaryAndMerge(LumiProfileSvcCfg(flags)))
293 else:
294 kwargs.setdefault("MaxMinBiasCollPerXing", flags.Digitization.PU.NumberOfCollisions)
295 kwargs.setdefault("BeamLuminosity", acc.getPrimaryAndMerge(NoProfileSvcCfg(flags)))
296
297 from AthenaKernel.EventIdOverrideConfig import EvtIdModifierSvcCfg
298 kwargs.setdefault("EvtIdModifierSvc", acc.getPrimaryAndMerge(EvtIdModifierSvcCfg(flags)))
299 kwargs.setdefault("EventInfoName", "Input_EventInfo")
300
301
302
303
304 if flags.Input.MCChannelNumber > 0:
305 kwargs.setdefault("MCChannelNumber", flags.Input.MCChannelNumber)
306
307
308 if flags.Output.doWriteRDO:
309 from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
310 acc.merge(OutputStreamCfg(flags, "RDO", ItemList=[
311 "xAOD::EventInfoContainer#PileUpEventInfo",
312 "xAOD::EventInfoAuxContainer#PileUpEventInfo*",
313 ]))
314
315 acc.addService(CompFactory.PileUpEventLoopMgr(name, **kwargs))
316 return acc
317
318