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
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
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
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
148 from AthDeviceComps.AthDeviceCompsConfig import HostCopyToolCfg, HostMemoryResourceToolCfg
149
150
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
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
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
215 if doTruth:
216 addTruthClusterAssociations(
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
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