File indexing completed on 2026-07-26 08:22:15
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include "traccc/examples/cpu/full_chain_algorithm.hpp"
0010
0011 namespace traccc {
0012
0013 full_chain_algorithm::full_chain_algorithm(
0014 vecmem::memory_resource& mr, const clustering_algorithm::config_type&,
0015 const seedfinder_config& finder_config,
0016 const spacepoint_grid_config& grid_config,
0017 const seedfilter_config& filter_config,
0018 const gbts_seedfinder_config& gbts_config,
0019 const track_params_estimation_config& track_params_estimation_config,
0020 const finding_algorithm::config_type& finding_config,
0021 const fitting_algorithm::config_type& fitting_config,
0022 const detector_design_description::host& det_descr,
0023 const detector_conditions_description::host& det_cond,
0024 const magnetic_field& field, const host_detector* detector,
0025 std::unique_ptr<const traccc::Logger> logger, const bool useGBTS)
0026 : messaging(logger->clone()),
0027 m_mr(mr),
0028 m_copy{std::make_unique<vecmem::copy>()},
0029 m_field_vec{0.f, 0.f, finder_config.bFieldInZ},
0030 m_field(field),
0031 m_det_descr(det_descr),
0032 m_det_cond(det_cond),
0033 m_detector(detector),
0034 m_clusterization(mr, logger->cloneWithSuffix("ClusteringAlg")),
0035 m_spacepoint_formation(mr, logger->cloneWithSuffix("SpFormationAlg")),
0036 m_seeding(finder_config, grid_config, filter_config, mr,
0037 logger->cloneWithSuffix("SeedingAlg")),
0038 m_track_parameter_estimation(track_params_estimation_config, mr,
0039 logger->cloneWithSuffix("TrackParamEstAlg")),
0040 m_finding(finding_config, mr, logger->cloneWithSuffix("TrackFindingAlg")),
0041 m_fitting(fitting_config, mr, *m_copy,
0042 logger->cloneWithSuffix("TrackFittingAlg")),
0043 m_finder_config(finder_config),
0044 m_grid_config(grid_config),
0045 m_filter_config(filter_config),
0046 m_gbts_config(gbts_config),
0047 m_track_params_estimation_config(track_params_estimation_config),
0048 m_finding_config(finding_config),
0049 m_fitting_config(fitting_config),
0050 usingGBTS(useGBTS) {
0051 if (usingGBTS) {
0052 std::cout << "GBTS not implemented for CPU, this will run with triplet "
0053 "seeding"
0054 << std::endl;
0055 }
0056 }
0057
0058 full_chain_algorithm::output_type full_chain_algorithm::operator()(
0059 const edm::silicon_cell_collection::host& cells) const {
0060
0061 const detector_design_description::const_data det_descr_data =
0062 vecmem::get_data(m_det_descr.get());
0063 const detector_conditions_description::const_data det_cond_data =
0064 vecmem::get_data(m_det_cond.get());
0065
0066 auto cells_data = vecmem::get_data(cells);
0067 const clustering_algorithm::output_type measurements =
0068 m_clusterization(cells_data, det_descr_data, det_cond_data);
0069
0070
0071 if (m_detector != nullptr) {
0072
0073 const edm::measurement_collection::const_data measurements_view =
0074 vecmem::get_data(measurements);
0075 const spacepoint_formation_algorithm::output_type spacepoints =
0076 m_spacepoint_formation(*m_detector, measurements_view);
0077 const edm::spacepoint_collection::const_data spacepoints_data =
0078 vecmem::get_data(spacepoints);
0079 const host::seeding_algorithm::output_type seeds =
0080 m_seeding(spacepoints_data);
0081 const edm::seed_collection::const_data seeds_data = vecmem::get_data(seeds);
0082 const host::track_params_estimation::output_type track_params =
0083 m_track_parameter_estimation(measurements_view, spacepoints_data,
0084 seeds_data, m_field_vec);
0085 const bound_track_parameters_collection_types::const_view
0086 track_params_view = vecmem::get_data(track_params);
0087
0088
0089 const finding_algorithm::output_type track_candidates =
0090 m_finding(*m_detector, m_field, measurements_view, track_params_view);
0091
0092
0093 return m_fitting(*m_detector, m_field,
0094 edm::track_container<default_algebra>::const_data(
0095 track_candidates))
0096 .tracks;
0097 }
0098
0099 else {
0100
0101 return output_type{m_mr.get()};
0102 }
0103 }
0104
0105 bound_track_parameters_collection_types::host full_chain_algorithm::seeding(
0106 const edm::silicon_cell_collection::host& cells) const {
0107
0108 const detector_design_description::const_data det_descr_data =
0109 vecmem::get_data(m_det_descr.get());
0110 const detector_conditions_description::const_data det_cond_data =
0111 vecmem::get_data(m_det_cond.get());
0112
0113 auto cells_data = vecmem::get_data(cells);
0114 const clustering_algorithm::output_type measurements =
0115 m_clusterization(cells_data, det_descr_data, det_cond_data);
0116
0117
0118 if (m_detector != nullptr) {
0119
0120 const edm::measurement_collection::const_data measurements_view =
0121 vecmem::get_data(measurements);
0122 const spacepoint_formation_algorithm::output_type spacepoints =
0123 m_spacepoint_formation(*m_detector, measurements_view);
0124 const edm::spacepoint_collection::const_data spacepoints_data =
0125 vecmem::get_data(spacepoints);
0126 const host::seeding_algorithm::output_type seeds =
0127 m_seeding(spacepoints_data);
0128 const edm::seed_collection::const_data seeds_data = vecmem::get_data(seeds);
0129 return m_track_parameter_estimation(measurements_view, spacepoints_data,
0130 seeds_data, m_field_vec);
0131 }
0132
0133 else {
0134
0135 return {};
0136 }
0137 }
0138
0139 }