1 """Define methods to construct configured overlay copy algorithms
3 Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
6 from AthenaConfiguration.ComponentAccumulator
import ComponentAccumulator
7 from AthenaConfiguration.ComponentFactory
import CompFactory
8 from AthenaConfiguration.Enums
import ProductionStep
12 """Return a ComponentAccumulator for the CaloCalibrationHitContainer copying"""
15 kwargs.setdefault(
"collectionName", collectionName)
16 kwargs.setdefault(
"SignalInputKey", flags.Overlay.SigPrefix + collectionName)
17 kwargs.setdefault(
"OutputKey", collectionName)
19 from SGComps.SGInputLoaderConfig
import SGInputLoaderCfg
20 acc.merge(
SGInputLoaderCfg(flags, [f
'CaloCalibrationHitContainer#{kwargs["SignalInputKey"]}']))
23 acc.addEventAlgo(CompFactory.CopyCaloCalibrationHitContainer(name + collectionName, **kwargs))
26 from SGComps.AddressRemappingConfig
import AddressRemappingCfg
28 f
"CaloCalibrationHitContainer#{collectionName}->{flags.Overlay.SigPrefix}{collectionName}"
32 if flags.Output.doWriteRDO:
33 from OutputStreamAthenaPool.OutputStreamConfig
import OutputStreamCfg
35 f
"CaloCalibrationHitContainer#{collectionName}"
39 if flags.Output.doWriteRDO_SGNL:
40 from OutputStreamAthenaPool.OutputStreamConfig
import OutputStreamCfg
42 f
"CaloCalibrationHitContainer#{flags.Overlay.SigPrefix}{collectionName}"
49 """Return a ComponentAccumulator for the pile-up jets copying"""
52 if "OutputKey" not in kwargs
or "BkgInputKey" not in kwargs:
53 raise RuntimeError(
"'OutputKey' and 'BkgInputKey' need to be defined")
55 from SGComps.SGInputLoaderConfig
import SGInputLoaderCfg
56 acc.merge(
SGInputLoaderCfg(flags, [f
'xAOD::JetContainer#{kwargs["BkgInputKey"]}']))
59 acc.addEventAlgo(CompFactory.CopyJetTruthInfo(name, **kwargs))
62 if flags.Output.doWriteRDO:
63 from OutputStreamAthenaPool.OutputStreamConfig
import OutputStreamCfg
65 f
'xAOD::JetContainer#{kwargs["OutputKey"]}',
66 f
'xAOD::AuxContainerBase!#{kwargs["OutputKey"]}Aux.-constituentLinks.-constituentWeights',
73 """Return a ComponentAccumulator for the in-time pile-up jets copying"""
74 kwargs.setdefault(
"BkgInputKey", f
"{flags.Overlay.BkgPrefix}InTimeAntiKt4TruthJets")
75 kwargs.setdefault(
"OutputKey",
"InTimeAntiKt4TruthJets")
81 """Return a ComponentAccumulator for the out-of-time pile-up jets copying"""
82 kwargs.setdefault(
"BkgInputKey", f
"{flags.Overlay.BkgPrefix}OutOfTimeAntiKt4TruthJets")
83 kwargs.setdefault(
"OutputKey",
"OutOfTimeAntiKt4TruthJets")
89 """Return a ComponentAccumulator for the in-time pile-up jets copying"""
90 kwargs.setdefault(
"BkgInputKey", f
"{flags.Overlay.BkgPrefix}InTimeAntiKt6TruthJets")
91 kwargs.setdefault(
"OutputKey",
"InTimeAntiKt6TruthJets")
97 """Return a ComponentAccumulator for the out-of-time pile-up jets copying"""
98 kwargs.setdefault(
"BkgInputKey", f
"{flags.Overlay.BkgPrefix}OutOfTimeAntiKt6TruthJets")
99 kwargs.setdefault(
"OutputKey",
"OutOfTimeAntiKt6TruthJets")
105 """Return a ComponentAccumulator for the CopyJetTruthInfo algorithms"""
107 if flags.Overlay.DataOverlay:
110 allowedContainers = [
111 f
"{flags.Overlay.BkgPrefix}InTimeAntiKt4TruthJets",
112 f
"{flags.Overlay.BkgPrefix}OutOfTimeAntiKt4TruthJets",
113 f
"{flags.Overlay.BkgPrefix}InTimeAntiKt6TruthJets",
114 f
"{flags.Overlay.BkgPrefix}OutOfTimeAntiKt6TruthJets"
116 availableContainers = []
119 for container
in allowedContainers:
120 if container
in flags.Input.Collections:
121 availableContainers.append(container)
122 if allowedContainers[0]
in availableContainers:
124 if allowedContainers[1]
in availableContainers:
126 if allowedContainers[2]
in availableContainers:
128 if allowedContainers[3]
in availableContainers:
134 """Return a ComponentAccumulator for the in-time pile-up jets copying"""
136 if flags.Overlay.DataOverlay:
139 requiredContainer = f
"{flags.Overlay.BkgPrefix}TruthPileupParticles"
142 if requiredContainer
in flags.Input.Collections:
143 kwargs.setdefault(
"BkgInputKey", requiredContainer)
144 kwargs.setdefault(
"OutputKey",
"TruthPileupParticles")
146 from SGComps.SGInputLoaderConfig
import SGInputLoaderCfg
147 acc.merge(
SGInputLoaderCfg(flags, [f
'xAOD::TruthParticleContainer#{kwargs["BkgInputKey"]}']))
150 acc.addEventAlgo(CompFactory.CopyPileupParticleTruthInfo(name, **kwargs))
152 if flags.Output.doWriteRDO:
153 from OutputStreamAthenaPool.OutputStreamConfig
import OutputStreamCfg
155 "xAOD::TruthParticleContainer#TruthPileupParticles",
156 "xAOD::TruthParticleAuxContainer#TruthPileupParticlesAux."
162 """Return a ComponentAccumulator for the CopyMcEventCollection algorithm"""
165 kwargs.setdefault(
"RemoveBkgHardScatterTruth",
True)
168 if flags.Overlay.DataOverlay:
170 kwargs.setdefault(
"BkgInputKey",
"")
172 kwargs.setdefault(
"BkgInputKey", f
"{flags.Overlay.BkgPrefix}TruthEvent")
173 inputs.append(f
'McEventCollection#{kwargs["BkgInputKey"]}')
175 kwargs.setdefault(
"SignalInputKey", f
"{flags.Overlay.SigPrefix}TruthEvent")
176 if flags.Common.ProductionStep
is not ProductionStep.FastChain:
177 inputs.append(f
'McEventCollection#{kwargs["SignalInputKey"]}')
179 if flags.Sim.DoFullChain
and flags.Common.isOverlay:
180 kwargs.setdefault(
"OutputKey",
"BeamTruthEvent")
182 kwargs.setdefault(
"OutputKey",
"TruthEvent")
184 from SGComps.SGInputLoaderConfig
import SGInputLoaderCfg
188 acc.addEventAlgo(CompFactory.CopyMcEventCollection(name, **kwargs))
191 from SGComps.AddressRemappingConfig
import AddressRemappingCfg
193 f
"McEventCollection#TruthEvent->{flags.Overlay.SigPrefix}TruthEvent"
197 if flags.Output.doWriteRDO:
198 from OutputStreamAthenaPool.OutputStreamConfig
import OutputStreamCfg
200 "McEventCollection#TruthEvent"
204 if flags.Output.doWriteRDO_SGNL:
205 from OutputStreamAthenaPool.OutputStreamConfig
import OutputStreamCfg
207 f
"McEventCollection#{flags.Overlay.SigPrefix}TruthEvent"
214 """Return a ComponentAccumulator for the CopyPixelClusterContainer algorithm"""
217 kwargs.setdefault(
"InputKey",
"PixelClusters")
218 kwargs.setdefault(
"OutputKey", flags.Overlay.BkgPrefix+
"PixelClusters")
219 kwargs.setdefault(
"ExtraInputs", {(
'InDetDD::SiDetectorElementCollection',
'ConditionStore+PixelDetectorElementCollection')})
221 if kwargs[
"InputKey"]
in flags.Input.Collections:
222 from SGComps.SGInputLoaderConfig
import SGInputLoaderCfg
223 acc.merge(
SGInputLoaderCfg(flags, [f
'InDet::PixelClusterContainer#{kwargs["InputKey"]}']))
225 alg = CompFactory.CopyPixelClusterContainer(
"CopyPixelClusterContainer", **kwargs)
226 acc.addEventAlgo(alg)
231 """Return a ComponentAccumulator for the CopyPixelClusterContainer algorithm"""
234 kwargs.setdefault(
"InputKey",
"ITkPixelClusters")
235 kwargs.setdefault(
"OutputKey", flags.Overlay.BkgPrefix+
"ITkPixelClusters")
236 kwargs.setdefault(
"ExtraInputs", [(
'InDetDD::SiDetectorElementCollection',
'ConditionStore+ITkPixelDetectorElementCollection')])
238 if kwargs[
"InputKey"]
in flags.Input.Collections:
239 from SGComps.SGInputLoaderConfig
import SGInputLoaderCfg
240 acc.merge(
SGInputLoaderCfg(flags, [f
'InDet::PixelClusterContainer#{kwargs["InputKey"]}']))
242 alg = CompFactory.CopyPixelClusterContainer(
"CopyPixelClusterContainer", **kwargs)
243 acc.addEventAlgo(alg)
248 """Return a ComponentAccumulator for the CopySCT_ClusterContainer algorithm"""
251 kwargs.setdefault(
"InputKey",
"SCT_Clusters")
252 kwargs.setdefault(
"OutputKey", flags.Overlay.BkgPrefix+
"SCT_Clusters")
253 kwargs.setdefault(
"ExtraInputs", {(
'InDetDD::SiDetectorElementCollection',
'ConditionStore+SCT_DetectorElementCollection')})
255 if kwargs[
"InputKey"]
in flags.Input.Collections:
256 from SGComps.SGInputLoaderConfig
import SGInputLoaderCfg
257 acc.merge(
SGInputLoaderCfg(flags, [f
'InDet::SCT_ClusterContainer#{kwargs["InputKey"]}']))
259 alg = CompFactory.CopySCT_ClusterContainer(
"CopySCT_ClusterContainer", **kwargs)
260 acc.addEventAlgo(alg)
265 """Return a ComponentAccumulator for the CopySCT_ClusterContainer algorithm"""
268 kwargs.setdefault(
"InputKey",
"ITkStripClusters")
269 kwargs.setdefault(
"OutputKey", flags.Overlay.BkgPrefix+
"ITkStripClusters")
270 kwargs.setdefault(
"ExtraInputs", [(
'InDetDD::SiDetectorElementCollection',
'ConditionStore+ITkStripDetectorElementCollection')])
272 if kwargs[
"InputKey"]
in flags.Input.Collections:
273 from SGComps.SGInputLoaderConfig
import SGInputLoaderCfg
274 acc.merge(
SGInputLoaderCfg(flags, [f
'InDet::SCT_ClusterContainer#{kwargs["InputKey"]}']))
276 alg = CompFactory.CopySCT_ClusterContainer(
"CopySCT_ClusterContainer", **kwargs)
277 acc.addEventAlgo(alg)
282 """Return a ComponentAccumulator for the CopyTRT_DriftCircleContainer algorithm"""
285 kwargs.setdefault(
"InputKey",
"TRT_DriftCircles")
286 kwargs.setdefault(
"OutputKey", flags.Overlay.BkgPrefix+
"TRT_DriftCircles")
287 kwargs.setdefault(
"ExtraInputs", {(
'InDetDD::TRT_DetElementContainer' ,
'ConditionStore+TRT_DetElementContainer')})
289 if kwargs[
"InputKey"]
in flags.Input.Collections:
290 from SGComps.SGInputLoaderConfig
import SGInputLoaderCfg
291 acc.merge(
SGInputLoaderCfg(flags, [f
'InDet::TRT_DriftCircleContainer#{kwargs["InputKey"]}']))
293 alg = CompFactory.CopyTRT_DriftCircleContainer(
"CopyTRT_DriftCircleContainer", **kwargs)
294 acc.addEventAlgo(alg)
300 """Return a ComponentAccumulator for the TrackCollection copying"""
303 kwargs.setdefault(
"OutputKey", flags.Overlay.BkgPrefix + collectionName)
304 kwargs.setdefault(
"InputKey", collectionName)
306 if flags.Detector.GeometryPixel:
307 extra_inputs.add((
'InDetDD::SiDetectorElementCollection',
'ConditionStore+PixelDetectorElementCollection'))
308 if flags.Detector.GeometrySCT:
309 extra_inputs.add((
'InDetDD::SiDetectorElementCollection',
'ConditionStore+SCT_DetectorElementCollection'))
310 if flags.Detector.GeometryTRT:
311 extra_inputs.add((
'InDetDD::TRT_DetElementContainer' ,
'ConditionStore+TRT_DetElementContainer' ))
312 if flags.Detector.GeometryITkPixel:
313 extra_inputs.add((
'InDetDD::SiDetectorElementCollection' ,
'ConditionStore+ITkPixelDetectorElementCollection' ))
314 if flags.Detector.GeometryITkStrip:
315 extra_inputs.add((
'InDetDD::SiDetectorElementCollection' ,
'ConditionStore+ITkStripDetectorElementCollection' ))
317 kwargs.setdefault(
"ExtraInputs", extra_inputs)
319 if kwargs[
"InputKey"]
in flags.Input.Collections:
320 from SGComps.SGInputLoaderConfig
import SGInputLoaderCfg
321 acc.merge(
SGInputLoaderCfg(flags, [f
'TrackCollection#{kwargs["InputKey"]}']))
323 alg = CompFactory.CopyTrackCollection(
"CopyTrackCollection"+collectionName, **kwargs)
324 acc.addEventAlgo(alg)
326 if flags.Output.doWriteRDO:
327 from OutputStreamAthenaPool.OutputStreamConfig
import OutputStreamCfg
329 "TrackCollection#" + flags.Overlay.BkgPrefix+collectionName]))
335 """Return a ComponentAccumulator for the DetailedTrackTruthCollection copying"""
338 kwargs.setdefault(
"OutputKey", flags.Overlay.BkgPrefix + collectionName)
339 kwargs.setdefault(
"InputKey", collectionName)
341 alg = CompFactory.CopyDetailedTrackTruthCollection(
"CopyDetailedTrackTruthCollection"+collectionName)
342 acc.addEventAlgo(alg)
344 if flags.Output.doWriteRDO:
345 from OutputStreamAthenaPool.OutputStreamConfig
import OutputStreamCfg
347 "DetailedTrackTruthCollection#" + flags.Overlay.BkgPrefix+collectionName
354 """Return a ComponentAccumulator for the PRD_MultiTruthCollection copying"""
357 kwargs.setdefault(
"OutputKey", flags.Overlay.BkgPrefix + collectionName)
358 kwargs.setdefault(
"InputKey", collectionName)
360 alg = CompFactory.CopyPRD_MultiTruthCollection(
"CopyPRD_MultiTruthCollection"+collectionName)
361 acc.addEventAlgo(alg)
363 if flags.Output.doWriteRDO:
364 from OutputStreamAthenaPool.OutputStreamConfig
import OutputStreamCfg
366 "PRD_MultiTruthCollection#" + flags.Overlay.BkgPrefix+collectionName
373 """Return a ComponentAccumulator for the TrackRecordCollection copying"""
376 kwargs.setdefault(
"collectionName", collectionName)
377 kwargs.setdefault(
"SignalInputKey", flags.Overlay.SigPrefix + collectionName)
378 kwargs.setdefault(
"OutputKey", collectionName)
379 kwargs.setdefault(
"ExtraInputs", flags.Overlay.ExtraInputs)
381 if flags.Common.ProductionStep
is not ProductionStep.FastChain:
382 from SGComps.SGInputLoaderConfig
import SGInputLoaderCfg
383 acc.merge(
SGInputLoaderCfg(flags, [f
'TrackRecordCollection#{kwargs["SignalInputKey"]}']))
386 from SGComps.AddressRemappingConfig
import AddressRemappingCfg
388 f
"TrackRecordCollection#{collectionName}->{flags.Overlay.SigPrefix}{collectionName}"
392 acc.addEventAlgo(CompFactory.CopyTrackRecordCollection(name + collectionName, **kwargs))
395 if flags.Output.doWriteRDO:
396 from OutputStreamAthenaPool.OutputStreamConfig
import OutputStreamCfg
398 f
"TrackRecordCollection#{collectionName}"
402 if flags.Output.doWriteRDO_SGNL:
403 from OutputStreamAthenaPool.OutputStreamConfig
import OutputStreamCfg
405 f
"TrackRecordCollection#{flags.Overlay.SigPrefix}{collectionName}"
412 """Return overlay configuration for the CopyCalibrationHitContainer algorithms"""
415 kwargs.setdefault(
"ExtraInputs", flags.Overlay.ExtraInputs)
417 allowedContainers = [
418 "LArCalibrationHitActive",
"LArCalibrationHitDeadMaterial",
"LArCalibrationHitInactive"
419 "TileCalibrationCellHitCnt",
"TileCalibrationDMHitCnt",
420 "TileCalibHitActiveCell",
"TileCalibHitInactiveCell",
"TileCalibHitDeadMaterial",
422 availableContainers = []
425 for container
in allowedContainers:
426 if (flags.Overlay.ByteStream
and container
in flags.Input.Collections) \
427 or (
not flags.Overlay.ByteStream
and container
in flags.Input.SecondaryCollections):
428 availableContainers.append(container)
430 for container
in availableContainers:
437 """Return overlay configuration for the CopyPixelClusterContainer algorithm"""
440 if flags.Output.doWriteRDO:
441 from OutputStreamAthenaPool.OutputStreamConfig
import OutputStreamCfg
443 "InDet::PixelClusterContainer#Bkg_PixelClusters"
449 """Return overlay configuration for the CopyITkPixelClusterContainer algorithm"""
451 if flags.Output.doWriteRDO:
452 from OutputStreamAthenaPool.OutputStreamConfig
import OutputStreamCfg
454 "InDet::PixelClusterContainer#Bkg_ITkPixelClusters"
460 """Return overlay configuration for the CopySCT_ClusterContainer algorithm"""
463 if flags.Output.doWriteRDO:
464 from OutputStreamAthenaPool.OutputStreamConfig
import OutputStreamCfg
466 "InDet::SCT_ClusterContainer#Bkg_SCT_Clusters"
472 """Return overlay configuration for the CopySCT_ClusterContainer algorithm"""
475 if flags.Output.doWriteRDO:
476 from OutputStreamAthenaPool.OutputStreamConfig
import OutputStreamCfg
478 "InDet::SCT_ClusterContainer#Bkg_ITkStripClusters"
484 """Return overlay configuration for the CopyTRT_DriftCircleContainer algorithm"""
487 if flags.Output.doWriteRDO:
488 from OutputStreamAthenaPool.OutputStreamConfig
import OutputStreamCfg
490 "InDet::TRT_DriftCircleContainer#Bkg_TRT_DriftCircles"]))
496 """Return overlay configuration for the TrackRecordCollection algorithms"""
500 allowedContainers = [
505 availableContainers = []
508 if flags.Common.ProductionStep == ProductionStep.FastChain:
509 availableContainers = allowedContainers
511 hardScatterInputCollections = flags.Input.Collections
if flags.Overlay.ByteStream
else flags.Input.SecondaryCollections
512 for container
in allowedContainers:
513 if container
in hardScatterInputCollections:
514 availableContainers.append(container)
516 for container
in availableContainers:
523 """ Return overlay configuration for copying tracks"""
527 allowedContainers = [
528 "CombinedInDetTracks",
529 "DisappearingTracks",
530 "ResolvedForwardTracks",
531 "ExtendedLargeD0Tracks"
534 availableContainers = []
536 if flags.Common.ProductionStep == ProductionStep.FastChain:
537 availableContainers = allowedContainers
539 hardScatterInputCollections = flags.Input.Collections
540 for container
in allowedContainers:
541 if container
in hardScatterInputCollections:
542 availableContainers.append(container)
543 for container
in availableContainers:
549 """ Return overlay configuration for copying tracks"""
553 allowedContainers = [
555 "ResolvedConversionTracks"
557 availableContainers = []
559 if flags.Common.ProductionStep == ProductionStep.FastChain:
560 availableContainers = allowedContainers
562 hardScatterInputCollections = flags.Input.Collections
563 for container
in allowedContainers:
564 if container
in hardScatterInputCollections:
565 availableContainers.append(container)
566 for container
in availableContainers:
572 """ Return overlay configuration for copying detailed track truth"""
576 allowedContainers = [
577 "DisappearingTracksDetailedTruth",
578 "ResolvedForwardTracksDetailedTruth",
579 "CombinedInDetTracksDetailedTruth",
580 "ExtendedLargeD0TracksDetailedTruth"
583 availableContainers = []
586 if flags.Common.ProductionStep == ProductionStep.FastChain:
587 availableContainers = allowedContainers
589 hardScatterInputCollections = flags.Input.Collections
590 for container
in allowedContainers:
591 if container
in hardScatterInputCollections:
592 availableContainers.append(container)
594 for container
in availableContainers:
601 """ Return overlay configuration for copying detailed track truth"""
605 allowedContainers = [
607 "PRD_MultiTruthPixel",
611 availableContainers = []
614 if flags.Common.ProductionStep == ProductionStep.FastChain:
615 availableContainers = allowedContainers
617 hardScatterInputCollections = flags.Input.Collections
618 for container
in allowedContainers:
619 if container
in hardScatterInputCollections:
620 availableContainers.append(container)
622 for container
in availableContainers:
629 if flags.Output.doWriteRDO:
630 from OutputStreamAthenaPool.OutputStreamConfig
import OutputStreamCfg
631 acc.merge(
OutputStreamCfg(flags,
"RDO", ItemList=[f
"xAOD::VertexContainer#{flags.Overlay.BkgPrefix}PrimaryVertices",
632 f
'xAOD::VertexAuxContainer#{flags.Overlay.BkgPrefix}PrimaryVerticesAux.x.y.z']))