File indexing completed on 2026-07-26 08:21:59
0001
0002
0003
0004
0005
0006
0007
0008 #pragma once
0009
0010
0011 #include "traccc/edm/track_parameters.hpp"
0012 #include "traccc/utils/logging.hpp"
0013
0014 namespace traccc::details {
0015
0016
0017
0018
0019
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 }