File indexing completed on 2026-07-26 08:21:58
0001
0002
0003
0004
0005
0006
0007
0008 #pragma once
0009
0010
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
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
0048 using bound_track_parameters_collection_types =
0049 collection_types<bound_track_parameters<>>;
0050
0051
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
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
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
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 }