@@ -37,6 +37,7 @@ full_chain_algorithm::full_chain_algorithm(
3737 const spacepoint_grid_config& grid_config,
3838 const seedfilter_config& filter_config,
3939 const finding_algorithm::config_type& finding_config,
40+ const ambiguity_solving_algorithm::config_type& resolution_config,
4041 const fitting_algorithm::config_type& fitting_config,
4142 const silicon_detector_description::host& det_descr,
4243 const magnetic_field& field, host_detector* detector,
@@ -73,13 +74,17 @@ full_chain_algorithm::full_chain_algorithm(
7374 logger->cloneWithSuffix (" TrackParEstAlg" )),
7475 m_finding(finding_config, {m_cached_device_mr, &m_cached_pinned_host_mr},
7576 m_copy, m_stream, logger->cloneWithSuffix (" TrackFindingAlg" )),
77+ m_ambiguity_solving(
78+ resolution_config, {m_cached_device_mr, &m_cached_pinned_host_mr},
79+ m_copy, m_stream, logger->cloneWithSuffix (" AmbiguityResolutionAlg" )),
7680 m_fitting(fitting_config, {m_cached_device_mr, &m_cached_pinned_host_mr},
7781 m_copy, m_stream, logger->cloneWithSuffix (" TrackFittingAlg" )),
7882 m_clustering_config(clustering_config),
7983 m_finder_config(finder_config),
8084 m_grid_config(grid_config),
8185 m_filter_config(filter_config),
8286 m_finding_config(finding_config),
87+ m_resolution_config(resolution_config),
8388 m_fitting_config(fitting_config) {
8489
8590 // Tell the user what device is being used.
@@ -134,6 +139,10 @@ full_chain_algorithm::full_chain_algorithm(const full_chain_algorithm& parent)
134139 m_finding(parent.m_finding_config,
135140 {m_cached_device_mr, &m_cached_pinned_host_mr}, m_copy,
136141 m_stream, parent.logger().cloneWithSuffix(" TrackFindingAlg" )),
142+ m_ambiguity_solving(
143+ parent.m_resolution_config,
144+ {m_cached_device_mr, &m_cached_pinned_host_mr}, m_copy, m_stream,
145+ parent.logger().cloneWithSuffix(" AmbiguityResolutionAlg" )),
137146 m_fitting(parent.m_fitting_config,
138147 {m_cached_device_mr, &m_cached_pinned_host_mr}, m_copy,
139148 m_stream, parent.logger().cloneWithSuffix(" TrackFittingAlg" )),
@@ -142,6 +151,7 @@ full_chain_algorithm::full_chain_algorithm(const full_chain_algorithm& parent)
142151 m_grid_config(parent.m_grid_config),
143152 m_filter_config(parent.m_filter_config),
144153 m_finding_config(parent.m_finding_config),
154+ m_resolution_config(parent.m_resolution_config),
145155 m_fitting_config(parent.m_fitting_config) {
146156
147157 // Copy the detector (description) to the device.
@@ -180,9 +190,15 @@ full_chain_algorithm::output_type full_chain_algorithm::operator()(
180190 const finding_algorithm::output_type track_candidates =
181191 m_finding (m_device_detector, m_field, measurements, track_params);
182192
193+ // Run the ambiguity solver (asynchronously).
194+ const ambiguity_solving_algorithm::output_type
195+ resolved_track_candidates =
196+ m_ambiguity_solving ({track_candidates, measurements});
197+
183198 // Run the track fitting (asynchronously).
184- const fitting_algorithm::output_type track_states = m_fitting (
185- m_device_detector, m_field, {track_candidates, measurements});
199+ const fitting_algorithm::output_type track_states =
200+ m_fitting (m_device_detector, m_field,
201+ {resolved_track_candidates, measurements});
186202
187203 // Copy a limited amount of result data back to the host.
188204 const auto host_tracks =
0 commit comments