ATLAS Offline Software
Loading...
Searching...
No Matches
TracccTritonClientConfig.py
Go to the documentation of this file.
2# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3#
4from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
5from AthenaConfiguration.ComponentFactory import CompFactory
6
7writeOutput = True
8doTruth = True
9
10
11def TracccTritonToolCfg(flags, name="TracccTritonTool", **kwargs):
12 """Set up a TracccTritonTool tool and return"""
13
14 from AthTritonComps.TritonToolConfig import TritonToolCfg
15
16 acc = ComponentAccumulator()
17
18 kwargs.setdefault("TritonTool", acc.popToolsAndMerge(
19 TritonToolCfg(flags, flags.Tracking.Traccc.Triton.model,
20 url=flags.Tracking.Traccc.Triton.url,
21 port=flags.Tracking.Traccc.Triton.port,
22 ssl=(flags.Tracking.Traccc.Triton.port == 443))))
23
24 acc.setPrivateTools(CompFactory.TracccTritonTool(name, **kwargs))
25 return acc
26
27
28def addTruthClusterAssociations(acc, flags, prefix="", pixelKey=None, stripKey=None):
29 from ActsConfig.ActsTruthConfig import (
30 ActsPixelClusterToTruthAssociationAlgCfg,
31 ActsStripClusterToTruthAssociationAlgCfg,
32 ActsTruthParticleHitCountAlgCfg,
33 )
34 acc.merge(ActsPixelClusterToTruthAssociationAlgCfg(
35 flags,
36 name=f"{prefix}PixelClusterToTruthAssociationAlg",
37 InputTruthParticleLinks="xAODTruthLinks",
38 AssociationMapOut=f"{prefix}PixelClustersToTruthParticles",
39 Measurements=pixelKey,
40 ))
41 acc.merge(ActsStripClusterToTruthAssociationAlgCfg(
42 flags,
43 name=f"{prefix}StripClusterToTruthAssociationAlg",
44 InputTruthParticleLinks="xAODTruthLinks",
45 AssociationMapOut=f"{prefix}StripClustersToTruthParticles",
46 Measurements=stripKey,
47 ))
48 acc.merge(ActsTruthParticleHitCountAlgCfg(
49 flags,
50 name=f"{prefix}TruthParticleHitCountAlg",
51 MeasurementAssocKeys=[f"{prefix}PixelClustersToTruthParticles",
52 f"{prefix}StripClustersToTruthParticles"],
53 TruthParticleHitCountsOut=f"{prefix}TruthParticleHitCounts",
54 ))
55 return acc
56
57
58def addTrackTruthDecorations(acc, flags, prefix, tracks_key):
59
60 from ActsConfig.ActsTruthConfig import (
61 ActsTrackToTruthAssociationAlgCfg,
62 ActsTrackFindingValidationAlgCfg,
63 ActsTrackParticleTruthDecorationAlgCfg,
64 )
65
66 # Track to truth association
67 acc.merge(ActsTrackToTruthAssociationAlgCfg(
68 flags,
69 name=f"{prefix}TrackToTruthAssociationAlg",
70 PixelClustersToTruthAssociationMap=f"{prefix}PixelClustersToTruthParticles",
71 StripClustersToTruthAssociationMap=f"{prefix}StripClustersToTruthParticles",
72 ACTSTracksLocation=tracks_key,
73 AssociationMapOut=f"{tracks_key}ToTruthParticleAssociation",
74 ))
75
76 # Validation
77 acc.merge(ActsTrackFindingValidationAlgCfg(
78 flags,
79 name=f"{prefix}TrackFindingValidationAlg",
80 TrackToTruthAssociationMap=f"{tracks_key}ToTruthParticleAssociation",
81 TruthParticleHitCounts=f"{prefix}TruthParticleHitCounts",
82 ))
83
84 # Decoration
85 acc.merge(ActsTrackParticleTruthDecorationAlgCfg(
86 flags,
87 name=f"{prefix}TrackParticleTruthDecorationAlg",
88 TrackToTruthAssociationMaps=[
89 f"{tracks_key}ToTruthParticleAssociation"],
90 TrackParticleContainerName=f"{prefix}TrackParticles",
91 TruthParticleHitCounts=f"{prefix}TruthParticleHitCounts",
92 ComputeTrackRecoEfficiency=True,
93 ))
94
95 return acc
96
97
98def TritonTracccTrackMakerCfg(flags, name="TritonTracccTrackMaker", **kwargs):
99 """Set up traccc-as-a-service tracking: the cells of each event are sent
100 to the server, and the traccc collections it returns are converted with
101 the same algorithms as the local device chain"""
102 acc = ComponentAccumulator()
103
104 prefix = "Traccc"
105 track_container_name = f'{prefix}Tracks'
106 track_particles_name = f"{prefix}TrackParticles"
107
108 # Keys of the traccc collections returned by the server, and of their conversions.
109 cells_key = "TracccCells"
110 measurements_key = "TracccTritonMeasurements"
111 clusters_key = "TracccTritonClusters"
112 traccc_tracks_key = "TracccTritonTracks"
113 pixel_key = f"{prefix}PixelClusters"
114 strip_key = f"{prefix}StripClusters"
115 meas_to_pixel_sp_key = f"{prefix}MeasToPixelSP"
116 meas_to_strip_cl_key = f"{prefix}MeasToStripCl"
117
118 from ActsConfig.ActsGeometryConfig import ActsTrackingGeometrySvcCfg
119 acc.merge(ActsTrackingGeometrySvcCfg(flags))
120
121 # Pixel and strip geometry
122 from PixelGeoModelXml.ITkPixelGeoModelConfig import ITkPixelReadoutGeometryCfg
123 acc.merge(ITkPixelReadoutGeometryCfg(flags))
124 from StripGeoModelXml.ITkStripGeoModelConfig import ITkStripReadoutGeometryCfg
125 acc.merge(ITkStripReadoutGeometryCfg(flags))
126
127 try:
128 if flags.Tracking.ActiveConfig.extension != "Acts":
129 raise RuntimeError(f"wrong tracking pass: {flags.Tracking.ActiveConfig.extension}")
130 except AttributeError:
131 flags = flags.cloneAndReplace("Tracking.ActiveConfig",
132 "Tracking.ITkActsPass")
133
134 # Traccc detector description needed by the conversions
135 geo_id_mapping_name = "TracccGeometryIdMapping"
136 host_detector_name = "TracccHostDetectorGeometry"
137 from ActsGPUGeometry.ActsGPUGeometryConfig import DeviceDetectorDescriptionCondAlgCfg
138 acc.merge(DeviceDetectorDescriptionCondAlgCfg(flags,
139 HostConditionsObjectName="TracccHostCondConfig",
140 HostDigitizationObjectName="TracccHostDigitizationConfig",
141 DeviceConditionsObjectName="TracccDeviceCondConfig",
142 DeviceDigitizationObjectName="TracccDeviceDigitizationConfig",
143 GeoIdMappingObjectName=geo_id_mapping_name,
144 HostDetectorName=host_detector_name,
145 ))
146
147 # All traccc collections on the client live in host memory
148 from AthDeviceComps.AthDeviceCompsConfig import HostCopyToolCfg, HostMemoryResourceToolCfg
149
150 # Convert the Pixel/Strip RDOs into traccc cells
151 from ActsGPUEventCnv.ActsGPUEventCnvConfig import RDOtoTracccCellConverterAlgCfg
152 copies_tool = CompFactory.AthDevice.CopiesAdaptorTool(
153 "TracccCellsHostCopiesTool",
154 HostCopyTool=acc.popToolsAndMerge(HostCopyToolCfg(flags)),
155 DeviceCopyTool=acc.popToolsAndMerge(HostCopyToolCfg(flags)))
156 acc.merge(RDOtoTracccCellConverterAlgCfg(flags,
157 HostMR=acc.popToolsAndMerge(HostMemoryResourceToolCfg(flags)),
158 DeviceMR=acc.popToolsAndMerge(HostMemoryResourceToolCfg(flags)),
159 CopiesTool=copies_tool,
160 TracccCells=cells_key))
161
162 # Send the cells to the server, record what it returns
163 kwargs.setdefault("TracccTritonTool", acc.popToolsAndMerge(TracccTritonToolCfg(flags)))
164 kwargs.setdefault("HostMR", acc.popToolsAndMerge(HostMemoryResourceToolCfg(flags)))
165 kwargs.setdefault("TracccCells", cells_key)
166 kwargs.setdefault("OutputTracccMeasurements", measurements_key)
167 kwargs.setdefault("OutputTracccClusters", clusters_key)
168 kwargs.setdefault("OutputTracccTracks", traccc_tracks_key)
169 acc.addEventAlgo(CompFactory.TritonTracccTrackMaker(name, **kwargs))
170
171 # From here on, exactly as in the local device chain
172 from ActsGPUEventCnv.ActsGPUEventCnvConfig import (
173 TracccMeasurementConverterAlgCfg,
174 TracccTrackConverterAlgCfg,
175 )
176 acc.merge(TracccMeasurementConverterAlgCfg(flags,
177 name=f"{prefix}TritonMeasurementConverterAlg",
178 HostMR=acc.popToolsAndMerge(HostMemoryResourceToolCfg(flags)),
179 CopyProviderTool=acc.popToolsAndMerge(HostCopyToolCfg(flags)),
180 InputMeasurements=measurements_key,
181 InputClusters=clusters_key,
182 InputCells=cells_key,
183 ConvertClustersWithCells=doTruth,
184 GeoIdMapping=geo_id_mapping_name,
185 OutputPixelClusters=pixel_key,
186 OutputPixelSpacePoints=f"{prefix}PixelSpacePoints",
187 OutputMeasToPixelSP=meas_to_pixel_sp_key,
188 OutputMeasToStripCl=meas_to_strip_cl_key,
189 OutputStripClusters=strip_key,
190 ))
191
192 acc.merge(TracccTrackConverterAlgCfg(flags,
193 name=f"{prefix}TritonTrackConverterAlg",
194 HostMR=acc.popToolsAndMerge(HostMemoryResourceToolCfg(flags)),
195 CopyProviderTool=acc.popToolsAndMerge(HostCopyToolCfg(flags)),
196 HostDetectorName=host_detector_name,
197 InputPixelClusters=pixel_key,
198 InputStripClusters=strip_key,
199 InputMeasToPixelSP=meas_to_pixel_sp_key,
200 InputMeasToStripCl=meas_to_strip_cl_key,
201 InputTracks=traccc_tracks_key,
202 OutputTracks=track_container_name,
203 ))
204
205
207
208 from ActsConfig.ActsEventCnvConfig import ActsTrackToTrackParticleCnvAlgCfg
209 acc.merge(ActsTrackToTrackParticleCnvAlgCfg(flags,
210 name=f"{prefix}TrackToTrackParticleCnvAlg",
211 ACTSTracksLocation=[track_container_name],
212 TrackParticlesOutKey=track_particles_name))
213
214 # if doTruth:
215 if doTruth:
217 acc, flags, prefix=prefix, pixelKey=pixel_key, stripKey=strip_key)
218 addTrackTruthDecorations(acc, flags, prefix, track_container_name)
219
220
221 if writeOutput:
222
223 # Adding the output to the AOD file
224 inputList = []
225
226 inputList.append("xAOD::TruthParticleContainer#*")
227 inputList.append("xAOD::TruthParticleAuxContainer#*")
228 inputList.append("xAOD::TrackJacobianContainer#*")
229 inputList.append("xAOD::TrackJacobianAuxContainer#*")
230 inputList.append("xAOD::TrackMeasurementContainer#*")
231 inputList.append("xAOD::TrackMeasurementAuxContainer#*")
232 inputList.append("xAOD::TrackSurfaceContainer#*")
233 inputList.append("xAOD::TrackSurfaceAuxContainer#*")
234 inputList.append("xAOD::TrackParticleContainer#*")
235 inputList.append("xAOD::TrackParticleAuxContainer#*")
236
237 if doTruth:
238 inputList.append(f"xAOD::PixelClusterContainer#{pixel_key}")
239 inputList.append(f"xAOD::StripClusterContainer#{strip_key}")
240 inputList.append(f"xAOD::PixelClusterAuxContainer#{pixel_key}Aux.")
241 inputList.append(f"xAOD::StripClusterAuxContainer#{strip_key}Aux.")
242 else:
243 inputList.append("xAOD::PixelClusterContainer#*")
244 inputList.append("xAOD::StripClusterContainer#*")
245 inputList.append("xAOD::PixelClusterAuxContainer#*")
246 inputList.append("xAOD::StripClusterAuxContainer#*")
247
248 from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
249 acc.merge(OutputStreamCfg(flags, 'AOD', ItemList=inputList))
250
251 return acc
TritonTracccTrackMakerCfg(flags, name="TritonTracccTrackMaker", **kwargs)
addTruthClusterAssociations(acc, flags, prefix="", pixelKey=None, stripKey=None)
addTrackTruthDecorations(acc, flags, prefix, tracks_key)
TracccTritonToolCfg(flags, name="TracccTritonTool", **kwargs)