ATLAS Offline Software
Loading...
Searching...
No Matches
python.ITkActsDeviceTrackRecoConfig Namespace Reference

Classes

class  DataLocation

Functions

 ITkActsDeviceTrackRecoCfg (flags, *, previousExtension=None)

Function Documentation

◆ ITkActsDeviceTrackRecoCfg()

ITkActsDeviceTrackRecoCfg ( flags,
* ,
previousExtension = None )

Definition at line 11 of file ITkActsDeviceTrackRecoConfig.py.

11def ITkActsDeviceTrackRecoCfg(flags, *, previousExtension=None):
12 acc = ComponentAccumulator()
13
14 # Bring up shared device infrastructure once, upfront
15 print(f"Setting up GPU algorithms with {flags.Device.Backend.value} backend")
16
17 # Setup traccc detector description objects — loads all device detector description data into detStore
18 acc.merge(JSONDeviceDetectorDescriptionProviderSvcCfg(flags,
19 HostConditionsObjectName="TracccHostCondConfig",
20 HostDigitizationObjectName="TracccHostDigitizationConfig",
21 DeviceConditionsObjectName="TracccDeviceCondConfig",
22 DeviceDigitizationObjectName="TracccDeviceDigitizationConfig",
23 ))
24
25 # --- Clusterization ---
26 if flags.Acts.Device.doClusterization:
27
28 #TODO: remove this once MC is fixed
29 if not flags.Tracking.doPixelDigitalClustering:
30 raise ValueError("clusterization on device is not compatible "
31 "with analog clustering at the moment due to incorrent "
32 "ToT values for Pixel hits in the simulation data.")
33
34 # Create RoI for secondary passes (e.g. LargeD0) to reuse
35 from ActsConfig.ActsRegionsOfInterestConfig import ActsRegionsOfInterestCreatorAlgCfg
36 acc.merge(ActsRegionsOfInterestCreatorAlgCfg(flags,
37 name=f"{flags.Tracking.ActiveConfig.extension}RegionsOfInterestCreatorAlg"))
38
39 print("Performing clusterization on device")
40
41 # setup RDO converter
42 if flags.Acts.EDM.PhaseII :
43 from ActsConfig.ActsPhaseIIRawDataEdmConfig import (
44 PhaseIIPixelRawDataContainerCfg,
45 PhaseIIStripRawDataContainerCfg,
46 )
47 acc.merge(PhaseIIPixelRawDataContainerCfg(flags))
48 acc.merge(PhaseIIStripRawDataContainerCfg(flags))
49 from ActsGPUEventCnv.ActsGPUEventCnvConfig import PhaseIIRDOtoTracccCellConverterAlgCfg
50 acc.merge(PhaseIIRDOtoTracccCellConverterAlgCfg(flags,
51 TracccCells = "TracccCellCollection",
52 ))
53 else:
54 from ActsGPUEventCnv.ActsGPUEventCnvConfig import RDOtoTracccCellConverterAlgCfg
55 acc.merge(RDOtoTracccCellConverterAlgCfg(flags,
56 TracccCells = "TracccCellCollection",
57 ))
58
59 # setup traccc clusterization
60 from ActsGPUDataPreparation.ActsGPUDataPreparationConfig import DeviceClusterizationAlgCfg
61 acc.merge(DeviceClusterizationAlgCfg(flags,
62 InputTracccCells="TracccCellCollection",
63 OutputTracccMeasurements="TracccMeasurementCollection",
64 OutputTracccClusters="TracccClusterCollection",
65 RetrieveClusterCells=flags.Tracking.doTruth,
66 previousExtension=previousExtension))
67 clustersLocation = DataLocation.DEVICE
68
69 else:
70 from InDetConfig.ITkActsDataPreparationConfig import ITkActsDataPreparationCfg
71 acc.merge(ITkActsDataPreparationCfg(flags, previousExtension=previousExtension))
72 clustersLocation = DataLocation.HOST
73
74 # --- Seeding ---
75 if flags.Acts.Device.doSeeding:
76
77 if clustersLocation is not DataLocation.DEVICE:
78 raise ValueError("Device seeding requires device clusterization "
79 "(flags.Acts.Device.doClusterization=True): it reads the "
80 "traccc measurement collection straight out of device memory "
81 "and there is currently no host->device measurement converter.")
82
83 # Pixel space point formation on device
84 from ActsGPUDataPreparation.ActsGPUDataPreparationConfig import DeviceSPFormationAlgCfg
85 acc.merge(DeviceSPFormationAlgCfg(flags,
86 name="DeviceSPFormationAlg",
87 InputTracccMeasurements="TracccMeasurementCollection",
88 OutputTracccPixelSpacepoints="TracccPixelSpacepointCollection"))
89
90 from ActsConfig.ActsConfigFlags import SeedingStrategy
91
92 print(f"Performing seeding on device with seeding strategy set to {flags.Acts.SeedingStrategy}")
93 if flags.Acts.SeedingStrategy==SeedingStrategy.Gbts or flags.Acts.SeedingStrategy==SeedingStrategy.GbtsFtf:
94 from ActsGPUPatternRecognition.ActsGPUPatternRecognitionConfig import DeviceGBTSSeedingAlgCfg
95 acc.merge(DeviceGBTSSeedingAlgCfg(flags,
96 name="DeviceGBTSSeedingAlg",
97 InputTracccPixelSpacepoints="TracccPixelSpacepointCollection",
98 InputTracccMeasurements="TracccMeasurementCollection",
99 OutputTracccPixelSeeds="TracccPixelSeedCollection"))
100 else:
101 from ActsGPUPatternRecognition.ActsGPUPatternRecognitionConfig import DeviceTripletSeedingAlgCfg
102 acc.merge(DeviceTripletSeedingAlgCfg(flags,
103 name="DeviceTripletSeedingAlg",
104 InputTracccPixelSpacepoints="TracccPixelSpacepointCollection",
105 OutputTracccPixelSeeds="TracccPixelSeedCollection"))
106
107 seedsLocation = DataLocation.DEVICE
108
109 else:
110
111 # If clusterization was on device, need to copy them to host first
112 # and schedule space point formation
113 if clustersLocation is DataLocation.DEVICE:
114 from ActsGPUEventCnv.ActsGPUEventCnvConfig import TracccMeasurementConverterAlgCfg
115 acc.merge(TracccMeasurementConverterAlgCfg(flags,
116 InputMeasurements="TracccMeasurementCollection",
117 InputClusters="TracccClusterCollection",
118 InputCells="TracccCellCollection",
119 ConvertClustersWithCells = flags.Tracking.doTruth,
120 OutputPixelSpacePoints="ITkPixelSpacePoints",
121 OutputPixelClusters="ITkPixelClusters",
122 OutputStripClusters="ITkStripClusters"
123 ))
124
125 from ActsConfig.ActsSpacePointFormationConfig import ActsStripSpacePointFormationAlgCfg
126 acc.merge(ActsStripSpacePointFormationAlgCfg(flags,
127 name=f"{flags.Tracking.ActiveConfig.extension}StripSpacePointFormationAlg",
128 StripClusters="ITkStripClusters",
129 StripSpacePoints="ITkStripSpacePoints",
130 StripOverlapSpacePoints="ITkStripOverlapSpacePoints"))
131
132 clustersLocation = DataLocation.HOST
133
134 # Truth (as configured in ITkActsDataPreparationCfg)
135 # this truth must only be done if you do PRD and SpacePointformation
136 # If you only do the latter (== running on ESD) then the needed input (simdata)
137 # is not in ESD but the resulting truth (clustertruth) is already there ...
138 if flags.Tracking.doTruth:
139 from ActsConfig.ActsTruthConfig import ActsTruthAssociationAlgCfg, ActsTruthParticleHitCountAlgCfg
140 acc.merge(ActsTruthAssociationAlgCfg(flags))
141 acc.merge(ActsTruthParticleHitCountAlgCfg(flags))
142
143 from ActsConfig.ActsSeedingConfig import ActsSeedingCfg
144 acc.merge(ActsSeedingCfg(flags))
145 seedsLocation = DataLocation.HOST
146
147
148 # --- Track Reconstruction ---
149 if flags.Acts.Device.doTrackReconstruction:
150
151 raise ValueError("Unsupported operation, we do not have this step on device yet")
152
153 else:
154
155 # If clusterization was on device, need to copy the measurements to host first
156 if clustersLocation is DataLocation.DEVICE:
157 from ActsGPUEventCnv.ActsGPUEventCnvConfig import TracccMeasurementConverterAlgCfg
158 acc.merge(TracccMeasurementConverterAlgCfg(flags,
159 InputMeasurements="TracccMeasurementCollection",
160 InputClusters="TracccClusterCollection",
161 InputCells="TracccCellCollection",
162 ConvertClustersWithCells = flags.Tracking.doTruth,
163 OutputPixelClusters="ITkPixelClusters",
164 OutputPixelSpacePoints="ITkPixelSpacePoints",
165 OutputMeasToPixelSP="ITkTracccMeasToPixelSP",
166 OutputStripClusters="ITkStripClusters"
167 ))
168 from ActsConfig.ActsSpacePointFormationConfig import ActsStripSpacePointFormationAlgCfg
169 acc.merge(ActsStripSpacePointFormationAlgCfg(flags,
170 name=f"{flags.Tracking.ActiveConfig.extension}StripSpacePointFormationAlg",
171 StripClusters="ITkStripClusters",
172 StripSpacePoints="ITkStripSpacePoints",
173 StripOverlapSpacePoints="ITkStripOverlapSpacePoints"))
174 clustersLocation = DataLocation.HOST
175
176 if seedsLocation is DataLocation.DEVICE:
177 from ActsGPUEventCnv.ActsGPUEventCnvConfig import TracccSeedConverterAlgCfg
178
179 acc.merge(TracccSeedConverterAlgCfg(flags,
180 name="TracccSeedConverterAlg",
181 InputSpacepointsDevice="TracccPixelSpacepointCollection",
182 InputSpacepoints="ITkPixelSpacePoints",
183 InputMeasToPixelSP="ITkTracccMeasToPixelSP",
184 InputSeeds="TracccPixelSeedCollection",
185 OutputSeeds=f'{flags.Tracking.ActiveConfig.extension}PixelSeeds'))
186 seedsLocation = DataLocation.HOST
187
188
189 # CKF
190 from ActsConfig.ActsTrackFindingConfig import ActsTrackFindingCfg
191 acc.merge(ActsTrackFindingCfg(flags))
192
193 # Ambiguity Resolution
194 if flags.Acts.doAmbiguityResolution:
195 from ActsConfig.ActsTrackFindingConfig import ActsAmbiguityResolutionCfg
196 acc.merge(ActsAmbiguityResolutionCfg(flags))
197
198
199 # PRD association
200 from ActsConfig.ActsPrdAssociationConfig import ActsPrdAssociationAlgCfg
201 acc.merge(ActsPrdAssociationAlgCfg(flags,
202 name = f'{flags.Tracking.ActiveConfig.extension}PrdAssociationAlg',
203 previousActsExtension = previousExtension))
204
205 # Truth
206 if flags.Tracking.doTruth:
207
208 # schedule association of measurements to truth particles
209 from ActsConfig.ActsTruthConfig import ActsTruthAssociationAlgCfg, ActsTruthParticleHitCountAlgCfg
210 acc.merge(ActsTruthAssociationAlgCfg(flags))
211 acc.merge(ActsTruthParticleHitCountAlgCfg(flags))
212 if flags.Acts.doTruthInspection:
213 from ActsConfig.ActsInspectTruthContentConfig import ActsInspectTruthContentAlgCfg
214 acc.merge(ActsInspectTruthContentAlgCfg(flags))
215
216 # Run truth on CKF tracks
217 # This is only necessary if we are asking for these tracks to be persistified with the
218 # - flag: Tracking.ActiveConfig.storeSiSPSeededTracks set to True OR
219 # - flag: flags.Acts.doAmbiguityResolution set to False
220 if flags.Tracking.ActiveConfig.storeSiSPSeededTracks or not flags.Acts.doAmbiguityResolution:
221 from ActsConfig.ActsTruthConfig import ActsTrackToTruthAssociationAlgCfg, ActsTrackFindingValidationAlgCfg
222 acts_tracks = f"{flags.Tracking.ActiveConfig.extension}Tracks"
223 acc.merge(ActsTrackToTruthAssociationAlgCfg(flags,
224 name = f"{acts_tracks}TrackToTruthAssociationAlg",
225 ACTSTracksLocation = acts_tracks,
226 AssociationMapOut = f"{acts_tracks}ToTruthParticleAssociation"))
227
228 acc.merge(ActsTrackFindingValidationAlgCfg(flags,
229 name = f"{acts_tracks}TrackFindingValidationAlg",
230 TrackToTruthAssociationMap = f"{acts_tracks}ToTruthParticleAssociation"))
231
232 # Run truth on the tracks from ambiguity resolution. This is only necessary if
233 # - flag: flags.Acts.doAmbiguityResolution set to True
234 if flags.Acts.doAmbiguityResolution:
235 acts_tracks = f"{flags.Tracking.ActiveConfig.extension}ResolvedTracks"
236 from ActsConfig.ActsTruthConfig import ActsTrackToTruthAssociationAlgCfg, ActsTrackFindingValidationAlgCfg
237 acc.merge(ActsTrackToTruthAssociationAlgCfg(flags,
238 name = f"{acts_tracks}TrackToTruthAssociationAlg",
239 ACTSTracksLocation = acts_tracks,
240 AssociationMapOut = f"{acts_tracks}ToTruthParticleAssociation"))
241
242 acc.merge(ActsTrackFindingValidationAlgCfg(flags,
243 name = f"{acts_tracks}TrackFindingValidationAlg",
244 TrackToTruthAssociationMap = f"{acts_tracks}ToTruthParticleAssociation"))
245
246 return acc
void print(char *figname, TCanvas *c1)