Back to home page

EIC code displayed by LXR

 
 

    


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

0001 /** TRACCC library, part of the ACTS project (R&D line)
0002  *
0003  * (c) 2025 CERN for the benefit of the ACTS project
0004  *
0005  * Mozilla Public License Version 2.0
0006  */
0007 
0008 #pragma once
0009 
0010 // Project include(s).
0011 #include "traccc/edm/track_parameters.hpp"
0012 #include "traccc/utils/logging.hpp"
0013 
0014 namespace traccc::details {
0015 
0016 /// Check the covariance matirx and try to make it positive semi-definite
0017 ///
0018 /// @param[out] cov  covariance matrix
0019 /// @param[in] min_var variance threshold below which to flag an error
0020 template <detray::concepts::algebra algebra_t>
0021 TRACCC_HOST_DEVICE constexpr bool regularize_covariance(
0022     traccc::bound_matrix<algebra_t>& cov,
0023     const detray::dscalar<algebra_t> min_var) {
0024   if (getter::element(cov, 0, 0) < min_var ||
0025       getter::element(cov, 1, 1) < min_var ||
0026       getter::element(cov, 2, 2) < min_var ||
0027       getter::element(cov, 3, 3) < min_var ||
0028       getter::element(cov, 4, 4) < min_var ||
0029       getter::element(cov, 5, 5) < min_var) {
0030     TRACCC_ERROR_HOST_DEVICE("Negative variance");
0031     return false;
0032   } else if (getter::element(cov, 0, 0) < 0.f ||
0033              getter::element(cov, 1, 1) < 0.f ||
0034              getter::element(cov, 2, 2) < 0.f ||
0035              getter::element(cov, 3, 3) < 0.f ||
0036              getter::element(cov, 4, 4) < 0.f ||
0037              getter::element(cov, 5, 5) < 0.f) {
0038     TRACCC_WARNING_HOST_DEVICE("Negative variance: Regularize...");
0039   }
0040 
0041   getter::element(cov, 0, 0) = math::fabs(getter::element(cov, 0, 0));
0042   getter::element(cov, 1, 1) = math::fabs(getter::element(cov, 1, 1));
0043   getter::element(cov, 2, 2) = math::fabs(getter::element(cov, 2, 2));
0044   getter::element(cov, 3, 3) = math::fabs(getter::element(cov, 3, 3));
0045   getter::element(cov, 4, 4) = math::fabs(getter::element(cov, 4, 4));
0046   getter::element(cov, 5, 5) = math::fabs(getter::element(cov, 5, 5));
0047 
0048   return true;
0049 }
0050 
0051 }  // namespace traccc::details