ATLAS Offline Software
Loading...
Searching...
No Matches
ActsPostIncludes.py
Go to the documentation of this file.
1# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2
3from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
4
5def PersistifyActsEDMCfg(flags) -> ComponentAccumulator:
6 acc = ComponentAccumulator()
7
8 toAOD = []
9
10 if flags.Acts.EDM.PersistifyClusters or flags.Acts.EDM.PersistifySpacePoints:
11 pixel_cluster_shortlist = ['-pixelClusterLink']
12 strip_cluster_shortlist = ['-sctClusterLink']
13
14 pixel_cluster_variables = '.'.join(pixel_cluster_shortlist)
15 strip_cluster_variables = '.'.join(strip_cluster_shortlist)
16
17 toAOD += ['xAOD::PixelClusterContainer#ITkPixelClusters',
18 'xAOD::PixelClusterAuxContainer#ITkPixelClustersAux.' + pixel_cluster_variables,
19 'xAOD::StripClusterContainer#ITkStripClusters',
20 'xAOD::StripClusterAuxContainer#ITkStripClustersAux.' + strip_cluster_variables]
21
22 if flags.Reco.EnableHGTDExtension:
23 hgtd_cluster_shortlist = ['-hgtdClusterLink']
24
25 hgtd_cluster_variables = '.'.join(hgtd_cluster_shortlist)
26
27 toAOD += ['xAOD::HGTDClusterContainer#HGTD_Clusters',
28 'xAOD::HGTDClusterAuxContainer#HGTD_ClustersAux.' + hgtd_cluster_variables]
29
30 if flags.Acts.doITkConversion:
31 toAOD += ['xAOD::StripClusterContainer#ITkConversionStripClusters',
32 'xAOD::StripClusterAuxContainer#ITkConversionStripClustersAux.' + strip_cluster_variables]
33
34 if flags.Acts.EDM.PersistifySpacePoints:
35 pixel_spacepoint_shortlist = ['-measurements',
36 '-pixelSpacePointLink']
37 strip_spacepoint_shortlist = ['topHalfStripLength',
38 'bottomHalfStripLength',
39 'topStripDirection',
40 'bottomStripDirection',
41 'stripCenterDistance',
42 'topStripCenter',
43 'measurementLink']
44
45 pixel_spacepoint_variables = '.'.join(pixel_spacepoint_shortlist)
46 strip_spacepoint_variables = '.'.join(strip_spacepoint_shortlist)
47
48 toAOD += ['xAOD::SpacePointContainer#ITkPixelSpacePoints',
49 'xAOD::SpacePointAuxContainer#ITkPixelSpacePointsAux.' + pixel_spacepoint_variables,
50 'xAOD::SpacePointContainer#ITkStripSpacePoints',
51 'xAOD::SpacePointAuxContainer#ITkStripSpacePointsAux.' + strip_spacepoint_variables,
52 'xAOD::SpacePointContainer#ITkStripOverlapSpacePoints',
53 'xAOD::SpacePointAuxContainer#ITkStripOverlapSpacePointsAux.' + strip_spacepoint_variables]
54
55 if flags.Acts.EDM.PersistifyTracks:
56 trackPrefixes = ['Acts', 'ActsResolved',
57 'ActsLargeRadius', 'ActsLargeRadiusResolved',
58 'ActsConversion', 'ActsConversionResolved',
59 'ActsHeavyIon', 'ActsHeavyIonResolved']
60 for prefix in trackPrefixes:
61 toAOD += [f"xAOD::TrackSummaryContainer#{prefix}TrackSummary",
62 f"xAOD::TrackSummaryAuxContainer#{prefix}TrackSummaryAux.",
63 f"xAOD::TrackStateContainer#{prefix}TrackStates",
64 f"xAOD::TrackStateAuxContainer#{prefix}TrackStatesAux.-uncalibratedMeasurement",
65 f"xAOD::TrackParametersContainer#{prefix}TrackParameters",
66 f"xAOD::TrackParametersAuxContainer#{prefix}TrackParametersAux.",
67 f"xAOD::TrackJacobianContainer#{prefix}TrackJacobians",
68 f"xAOD::TrackJacobianAuxContainer#{prefix}TrackJacobiansAux.",
69 f"xAOD::TrackMeasurementContainer#{prefix}TrackMeasurements",
70 f"xAOD::TrackMeasurementAuxContainer#{prefix}TrackMeasurementsAux.",
71 f"xAOD::TrackSurfaceContainer#{prefix}TrackStateSurfaces",
72 f"xAOD::TrackSurfaceAuxContainer#{prefix}TrackStateSurfacesAux.",
73 f"xAOD::TrackSurfaceContainer#{prefix}TrackSurfaces",
74 f"xAOD::TrackSurfaceAuxContainer#{prefix}TrackSurfacesAux."]
75
76 # add track particles created by the Acts TrackToTrackParticleCnvAlg to the AOD
77 trackCnvPrefixes = ["Acts"]
78 trackparticles_shortlist = [] if flags.Acts.EDM.PersistifyTracks else ['-actsTrack']
79 trackparticles_variables = ".".join(trackparticles_shortlist)
80 for prefix in trackCnvPrefixes:
81 toAOD += [f"xAOD::TrackParticleContainer#InDet{prefix}TrackParticles",
82 f"xAOD::TrackParticleAuxContainer#InDet{prefix}TrackParticlesAux." + trackparticles_variables]
83
84 # If there is nothing to persistify, returns an empty CA
85 if len(toAOD) == 0:
86 return acc
87
88 from OutputStreamAthenaPool.OutputStreamConfig import addToAOD
89 acc.merge(addToAOD(flags, toAOD))
90 return acc
91
92def ACTSClusterPostInclude(flags) -> ComponentAccumulator:
93 # Schedule ACTS Data Preparation and Measurement persistification
94 # This is used for technical efficiencies studies of tracking pipelines
95 if flags.Tracking.PRDInfo.KeepOnlyOnTrackMeasurements:
96 raise ValueError("The ACTSClusterPostInclude is to be used for technical efficiency computation, however the " \
97 f"config flag 'Tracking.PRDInfo.KeepOnlyOnTrackMeasurements' is set to {flags.Tracking.PRDInfo.KeepOnlyOnTrackMeasurements}, " \
98 "which is incompatible with this purpose")
99
100 acc = ComponentAccumulator()
101
102 # Schedule Full Scan RoI
103 from ActsConfig.ActsRegionsOfInterestConfig import ActsMainRegionsOfInterestCreatorAlgCfg
104 acc.merge(ActsMainRegionsOfInterestCreatorAlgCfg(flags,
105 name = "ActsOfflineRegionsOfInterestCreatorAlg",
106 RoIs = "ActsOfflineRegionOfInterest"))
107
108 # Cluster formation
109 # This includes Pixel and Strip
110 clusteringKwargs = dict()
111 clusteringKwargs["PixelClusterizationAlg.name"] = "ActsOfflinePixelClusterizationAlg"
112 clusteringKwargs["PixelClusterizationAlg.ClustersKey"] = "ITkOfflinePixelClusters"
113 clusteringKwargs["StripClusterizationAlg.name"] = "ActsOfflineStripClusterizationAlg"
114 clusteringKwargs["StripClusterizationAlg.ClustersKey"] = "ITkOfflineStripClusters"
115 from ActsConfig.ActsClusterizationConfig import ActsMainClusterizationCfg
116 acc.merge(ActsMainClusterizationCfg(flags,
117 RoIs = "ActsOfflineRegionOfInterest",
118 processHGTD = False,
119 **clusteringKwargs))
120
121 # Attach truth to clusters
122 if flags.Tracking.doTruth:
123 truthAssociationKwargs = dict()
124 truthAssociationKwargs["PixelClusterToTruthAssociationAlg.name"] = "ActsOfflinePixelClusterToTruthAssociationAlg"
125 truthAssociationKwargs["PixelClusterToTruthAssociationAlg.Measurements"] = "ITkOfflinePixelClusters"
126 truthAssociationKwargs["PixelClusterToTruthAssociationAlg.AssociationMapOut"] = "ITkOfflinePixelClustersToTruthParticles"
127 truthAssociationKwargs["StripClusterToTruthAssociationAlg.name"] = "ActsOfflineStripClusterToTruthAssociationAlg"
128 truthAssociationKwargs["StripClusterToTruthAssociationAlg.Measurements"] = "ITkOfflineStripClusters"
129 truthAssociationKwargs["StripClusterToTruthAssociationAlg.AssociationMapOut"] = "ITkOfflineStripClustersToTruthParticles"
130
131 from ActsConfig.ActsTruthConfig import ActsTruthAssociationAlgCfg, ActsTruthParticleHitCountAlgCfg
132 acc.merge(ActsTruthAssociationAlgCfg(flags,
133 **truthAssociationKwargs))
134 acc.merge(ActsTruthParticleHitCountAlgCfg(flags,
135 name = "ActsOfflineTruthParticleHitCountAlg",
136 PixelClustersToTruthAssociationMap = "ITkOfflinePixelClustersToTruthParticles",
137 StripClustersToTruthAssociationMap = "ITkOfflineStripClustersToTruthParticles",
138 TruthParticleHitCountsOut = "OfflineTruthParticleHitCounts"))
139
140 from InDetConfig.InDetPrepRawDataToxAODConfig import TruthParticleIndexDecoratorAlgCfg
141 acc.merge( TruthParticleIndexDecoratorAlgCfg(flags) )
142
143 from ActsConfig.ActsObjectDecorationConfig import ActsPixelClusterTruthDecoratorAlgCfg,ActsStripClusterTruthDecoratorAlgCfg
144 acc.merge(ActsPixelClusterTruthDecoratorAlgCfg(flags,
145 name = "ActsOfflinePixelClusterTruthDecoratorAlgCfg",
146 ClusterContainer = "ITkOfflinePixelClusters",
147 AssociationMapOut = "ITkOfflinePixelClustersToTruthParticles",
148 MeasurementContainer = "ITkPixelMeasurements_offl"))
149 acc.merge(ActsStripClusterTruthDecoratorAlgCfg(flags,
150 name = "ActsOfflineStripClusterTruthDecoratorAlgCfg",
151 ClusterContainer = "ITkOfflineStripClusters",
152 AssociationMapOut = "ITkOfflineStripClustersToTruthParticles",
153 MeasurementContainer = "ITkStripMeasurements_offl"))
154
155
156 toAOD = [
157 'xAOD::TrackMeasurementValidationContainer#ITkPixelMeasurements_offl',
158 'xAOD::TrackMeasurementValidationAuxContainer#ITkPixelMeasurements_offlAux.',
159 'xAOD::TrackMeasurementValidationContainer#ITkStripMeasurements_offl',
160 'xAOD::TrackMeasurementValidationAuxContainer#ITkStripMeasurements_offlAux.'
161 ]
162
163 from OutputStreamAthenaPool.OutputStreamConfig import addToAOD
164 acc.merge( addToAOD( flags, toAOD ) )
165
166 return acc
ComponentAccumulator ACTSClusterPostInclude(flags)
ComponentAccumulator PersistifyActsEDMCfg(flags)