Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-07-26 08:21:58

0001 /** TRACCC library, part of the ACTS project (R&D line)
0002  *
0003  * (c) 2021-2024 CERN for the benefit of the ACTS project
0004  *
0005  * Mozilla Public License Version 2.0
0006  */
0007 
0008 #pragma once
0009 
0010 // traccc include
0011 #include "traccc/definitions/common.hpp"
0012 #include "traccc/definitions/math.hpp"
0013 #include "traccc/definitions/primitives.hpp"
0014 #include "traccc/definitions/qualifiers.hpp"
0015 #include "traccc/definitions/track_parametrization.hpp"
0016 #include "traccc/edm/container.hpp"
0017 #include "traccc/utils/logging.hpp"
0018 #include "traccc/utils/trigonometric_helpers.hpp"
0019 
0020 // detray include(s).
0021 #include <detray/tracks/tracks.hpp>
0022 
0023 namespace traccc {
0024 
0025 template <detray::concepts::algebra algebra_t = traccc::default_algebra>
0026 using free_track_parameters = detray::free_track_parameters<algebra_t>;
0027 
0028 template <detray::concepts::algebra algebra_t = traccc::default_algebra>
0029 using bound_track_parameters = detray::bound_track_parameters<algebra_t>;
0030 
0031 template <detray::concepts::algebra algebra_t = traccc::default_algebra>
0032 using bound_parameters_vector = detray::bound_parameters_vector<algebra_t>;
0033 
0034 template <detray::concepts::algebra algebra_t = traccc::default_algebra>
0035 using free_vector = typename free_track_parameters<algebra_t>::vector_type;
0036 
0037 template <detray::concepts::algebra algebra_t = traccc::default_algebra>
0038 using bound_vector = typename bound_parameters_vector<algebra_t>::vector_type;
0039 
0040 template <detray::concepts::algebra algebra_t = traccc::default_algebra>
0041 using bound_covariance =
0042     typename bound_track_parameters<algebra_t>::covariance_type;
0043 
0044 template <detray::concepts::algebra algebra_t = traccc::default_algebra>
0045 using bound_matrix = detray::bound_matrix<algebra_t>;
0046 
0047 /// Declare all track_parameters collection types
0048 using bound_track_parameters_collection_types =
0049     collection_types<bound_track_parameters<>>;
0050 
0051 // Wrap the phi of a track parameter vector to [-pi,pi]
0052 template <detray::concepts::algebra algebra_t>
0053 TRACCC_HOST_DEVICE constexpr bool normalize_angles(
0054     bound_vector<algebra_t>& vec) {
0055   traccc::scalar phi;
0056   traccc::scalar theta;
0057 
0058   const traccc::scalar in_theta{getter::element(vec, e_bound_theta, 0)};
0059   if (math::fmod(in_theta, 2.f * constant<traccc::scalar>::pi) == 0.f ||
0060       in_theta == 0.f) {
0061     TRACCC_WARNING_HOST_DEVICE("Hit theta pole before normalization: %f",
0062                                in_theta);
0063     return false;
0064   }
0065 
0066   std::tie(phi, theta) =
0067       detail::wrap_phi_theta(getter::element(vec, e_bound_phi, 0), in_theta);
0068 
0069   if (theta <= 0.f || theta >= 2.f * constant<traccc::scalar>::pi) {
0070     TRACCC_WARNING_HOST_DEVICE("Hit theta pole after normalization: %f", theta);
0071     return false;
0072   }
0073 
0074   // Assertions of the detray bound track parameters
0075   assert(math::fabs(phi) <= constant<traccc::scalar>::pi);
0076   assert(theta <= constant<traccc::scalar>::pi);
0077 
0078   getter::element(vec, e_bound_phi, 0) = phi;
0079   getter::element(vec, e_bound_theta, 0) = theta;
0080 
0081   return true;
0082 }
0083 
0084 // Wrap the phi of bound track parameters to [-pi,pi]
0085 template <detray::concepts::algebra algebra_t>
0086 TRACCC_HOST_DEVICE constexpr bool normalize_angles(
0087     bound_parameters_vector<algebra_t>& param_vec) {
0088   return normalize_angles<algebra_t>(param_vec.vector());
0089 }
0090 
0091 /// Covariance inflation used for track fitting
0092 template <detray::concepts::algebra algebra_t>
0093 TRACCC_HOST_DEVICE inline void inflate_covariance(
0094     bound_track_parameters<algebra_t>& param, const traccc::scalar inf_fac) {
0095   auto& cov = param.covariance();
0096   for (unsigned int i = 0; i < e_bound_size; i++) {
0097     for (unsigned int j = 0; j < e_bound_size; j++) {
0098       if (i == j) {
0099         getter::element(cov, i, i) *= inf_fac;
0100       } else {
0101         getter::element(cov, i, j) = 0.f;
0102       }
0103     }
0104   }
0105 }
0106 
0107 }  // namespace traccc