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 PixelClustersToTruthAssociationMap=f"{prefix}PixelClustersToTruthParticles",
52 StripClustersToTruthAssociationMap=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 a TrackMaker algorithm and return it"""
100 acc = ComponentAccumulator()
101
102 prefix = "Traccc"
103 track_container_name = f'{prefix}Tracks'
104 track_particles_name = f"{prefix}TrackParticles"
105
106 # Configure the TracccTritonTool
107 kwargs.setdefault("TracccTritonTool", acc.popToolsAndMerge(TracccTritonToolCfg(flags)))
108
109 from ActsConfig.ActsGeometryConfig import ActsTrackingGeometrySvcCfg
110 kwargs.setdefault("TrackingGeometrySvc", acc.getPrimaryAndMerge(ActsTrackingGeometrySvcCfg(flags)))
111
112 # Pixel and strip geometry
113 from PixelGeoModelXml.ITkPixelGeoModelConfig import ITkPixelReadoutGeometryCfg
114 acc.merge(ITkPixelReadoutGeometryCfg(flags))
115 from StripGeoModelXml.ITkStripGeoModelConfig import ITkStripReadoutGeometryCfg
116 acc.merge(ITkStripReadoutGeometryCfg(flags))
117
118 try:
119 if flags.Tracking.ActiveConfig.extension != "Acts":
120 raise RuntimeError(f"wrong tracking pass: {flags.Tracking.ActiveConfig.extension}")
121 except AttributeError:
122 flags = flags.cloneAndReplace("Tracking.ActiveConfig",
123 "Tracking.ITkActsPass")
124
125 # Traccc device detector description needed for the below conversions
126 from ActsGPUGeometry.ActsGPUGeometryConfig import JSONDeviceDetectorDescriptionProviderSvcCfg
127 acc.merge(JSONDeviceDetectorDescriptionProviderSvcCfg(flags,
128 HostConditionsObjectName="TracccHostCondConfig",
129 HostDigitizationObjectName="TracccHostDigitizationConfig",
130 DeviceConditionsObjectName="TracccDeviceCondConfig",
131 DeviceDigitizationObjectName="TracccDeviceDigitizationConfig",
132 ))
133
134 # Convert the Pixel/Strip RDOs into traccc cells
135 from ActsGPUEventCnv.ActsGPUEventCnvConfig import RDOtoTracccCellConverterAlgCfg
136 from AthDeviceComps.AthDeviceCompsConfig import HostCopyToolCfg, HostMemoryResourceToolCfg
137
138 host_mr_for_converter = acc.popToolsAndMerge(HostMemoryResourceToolCfg(flags))
139 device_mr_for_converter = acc.popToolsAndMerge(HostMemoryResourceToolCfg(flags))
140 copies_tool = CompFactory.AthDevice.CopiesAdaptorTool(
141 "TracccCellsHostCopiesTool",
142 HostCopyTool=acc.popToolsAndMerge(HostCopyToolCfg(flags)),
143 DeviceCopyTool=acc.popToolsAndMerge(HostCopyToolCfg(flags)))
144
145 acc.merge(RDOtoTracccCellConverterAlgCfg(flags,
146 HostMR=host_mr_for_converter,
147 DeviceMR=device_mr_for_converter,
148 CopiesTool=copies_tool))
149
150 kwargs.setdefault("TracccCells", "TracccCells")
151
152 # Main tracking alg
153 acc.addEventAlgo(CompFactory.TritonTracccTrackMaker(name, doTruth=doTruth, **kwargs))
154
155
157
158 from ActsConfig.ActsEventCnvConfig import ActsTrackToTrackParticleCnvAlgCfg
159 acc.merge(ActsTrackToTrackParticleCnvAlgCfg(flags,
160 name=f"{prefix}TrackToTrackParticleCnvAlg",
161 ACTSTracksLocation=[track_container_name],
162 TrackParticlesOutKey=track_particles_name))
163
164
165 pixel_key = "xAODPixelClustersFromInDetCluster"
166 strip_key = "xAODStripClustersFromInDetCluster"
167
168 # if doTruth:
169 if doTruth:
171 acc, flags, prefix=prefix, pixelKey=pixel_key, stripKey=strip_key)
172 addTrackTruthDecorations(acc, flags, prefix, track_container_name)
173
174
175 if writeOutput:
176
177 # Adding the output to the AOD file
178 inputList = []
179
180 inputList.append("xAOD::TruthParticleContainer#*")
181 inputList.append("xAOD::TruthParticleAuxContainer#*")
182 inputList.append("xAOD::TrackJacobianContainer#*")
183 inputList.append("xAOD::TrackJacobianAuxContainer#*")
184 inputList.append("xAOD::TrackMeasurementContainer#*")
185 inputList.append("xAOD::TrackMeasurementAuxContainer#*")
186 inputList.append("xAOD::TrackSurfaceContainer#*")
187 inputList.append("xAOD::TrackSurfaceAuxContainer#*")
188 inputList.append("xAOD::TrackParticleContainer#*")
189 inputList.append("xAOD::TrackParticleAuxContainer#*")
190
191 if doTruth:
192 inputList.append("xAOD::PixelClusterContainer#xAODPixelClustersFromInDetCluster")
193 inputList.append("xAOD::StripClusterContainer#xAODStripClustersFromInDetCluster")
194 inputList.append("xAOD::PixelClusterAuxContainer#xAODPixelClustersFromInDetClusterAux.")
195 inputList.append("xAOD::StripClusterAuxContainer#xAODStripClustersFromInDetClusterAux.")
196 else:
197 inputList.append("xAOD::PixelClusterContainer#*")
198 inputList.append("xAOD::StripClusterContainer#*")
199 inputList.append("xAOD::PixelClusterAuxContainer#*")
200 inputList.append("xAOD::StripClusterAuxContainer#*")
201
202 from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
203 acc.merge(OutputStreamCfg(flags, 'AOD', ItemList=inputList))
204
205 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)