Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-07-26 08:22:15

0001 /** TRACCC library, part of the ACTS project (R&D line)
0002  *
0003  * (c) 2022-2026 CERN for the benefit of the ACTS project
0004  *
0005  * Mozilla Public License Version 2.0
0006  */
0007 
0008 // Local include(s).
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   // Create a data object for the detector description.
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   // Run the clusterization.
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   // If we have a Detray detector, run the seeding track finding and fitting.
0071   if (m_detector != nullptr) {
0072     // Run the seed-finding.
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     // Run the track finding.
0089     const finding_algorithm::output_type track_candidates =
0090         m_finding(*m_detector, m_field, measurements_view, track_params_view);
0091 
0092     // Run the track fitting, and return its results.
0093     return m_fitting(*m_detector, m_field,
0094                      edm::track_container<default_algebra>::const_data(
0095                          track_candidates))
0096         .tracks;
0097   }
0098   // If not, just return an empty object.
0099   else {
0100     // Return an empty object.
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   // Create a data object for the detector description.
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   // Run the clusterization.
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   // If we have a Detray detector, run the seeding track finding and fitting.
0118   if (m_detector != nullptr) {
0119     // Run the seed-finding.
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   // If not, just return an empty object.
0133   else {
0134     // Return an empty object.
0135     return {};
0136   }
0137 }
0138 
0139 }  // namespace traccc