Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-05-27 07:23:58

0001 // This file is part of the ACTS project.
0002 //
0003 // Copyright (C) 2016 CERN for the benefit of the ACTS project
0004 //
0005 // This Source Code Form is subject to the terms of the Mozilla Public
0006 // License, v. 2.0. If a copy of the MPL was not distributed with this
0007 // file, You can obtain one at https://mozilla.org/MPL/2.0/.
0008 
0009 #pragma once
0010 
0011 // Project include(s)
0012 #include "detray/definitions/algebra.hpp"
0013 #include "detray/utils/concepts.hpp"
0014 
0015 namespace detray {
0016 
0017 /// Components of a bound track parameters vector.
0018 ///
0019 enum bound_indices : unsigned int {
0020   // Local position on the reference surface.
0021   // This is intentionally named different from the position components in
0022   // the other data vectors, to clarify that this is defined on a surface
0023   // while the others are defined in free space.
0024   e_bound_loc0 = 0u,
0025   e_bound_loc1 = 1u,
0026   // Direction angles
0027   e_bound_phi = 2u,
0028   e_bound_theta = 3u,
0029   // Global inverse-momentum-like parameter, i.e. q/p or 1/p
0030   // The naming is inconsistent for the case of neutral track parameters where
0031   // the value is interpreted as 1/p not as q/p. This is intentional to avoid
0032   // having multiple aliases for the same element and for lack of an
0033   // acceptable
0034   // common name.
0035   e_bound_qoverp = 4u,
0036   e_bound_time = 5u,
0037   // Last uninitialized value contains the total number of components
0038   e_bound_size,
0039 };
0040 
0041 /// Components of a free track parameters vector.
0042 ///
0043 /// To be used to access components by named indices instead of just numbers.
0044 /// This must be a regular `enum` and not a scoped `enum class` to allow
0045 /// implicit conversion to an integer. The enum value are thus visible directly
0046 /// in `namespace Acts` and are prefixed to avoid naming collisions.
0047 enum free_indices : unsigned int {
0048   // Spatial position
0049   // The spatial position components must be stored as one continuous block.
0050   e_free_pos0 = 0u,
0051   e_free_pos1 = e_free_pos0 + 1u,
0052   e_free_pos2 = e_free_pos0 + 2u,
0053   // Time
0054   e_free_time = 3u,
0055   // (Unit) direction
0056   // The direction components must be stored as one continuous block.
0057   e_free_dir0 = 4u,
0058   e_free_dir1 = e_free_dir0 + 1u,
0059   e_free_dir2 = e_free_dir0 + 2u,
0060   // Global inverse-momentum-like parameter, i.e. q/p or 1/p
0061   // See BoundIndices for further information
0062   e_free_qoverp = 7u,
0063   // Last uninitialized value contains the total number of components
0064   e_free_size,
0065 };
0066 
0067 /// Vector type for free track parametrization
0068 template <concepts::algebra algebra_t>
0069 using free_vector = dmatrix<algebra_t, e_free_size, 1>;
0070 
0071 /// Covariance matrix type for free track parametrization
0072 template <concepts::algebra algebra_t>
0073 using free_matrix = dmatrix<algebra_t, e_free_size, e_free_size>;
0074 
0075 /// Vector type for bound track parametrization
0076 template <concepts::algebra algebra_t>
0077 using bound_vector = dmatrix<algebra_t, e_bound_size, 1>;
0078 
0079 /// Covariance matrix type for bound track parametrization
0080 template <concepts::algebra algebra_t>
0081 using bound_matrix = dmatrix<algebra_t, e_bound_size, e_bound_size>;
0082 
0083 /// Mapping from bound to free track parameters.
0084 template <concepts::algebra algebra_t>
0085 using bound_to_free_matrix = dmatrix<algebra_t, e_free_size, e_bound_size>;
0086 
0087 /// Submatrix for bound to free Jacobians for d(x,y,z) or d(nx, ny, nz) over
0088 /// d(l0, l1) or d(phi, theta)
0089 template <concepts::algebra algebra_t>
0090 using bound_to_free_jacobian_submatrix = dmatrix<algebra_t, 3, 2>;
0091 
0092 /// Mapping from free to bound track parameters.
0093 template <concepts::algebra algebra_t>
0094 using free_to_bound_matrix = dmatrix<algebra_t, e_bound_size, e_free_size>;
0095 
0096 /// Submatrix for free to bound Jacobians d(l0, l1) or d(phi, theta) over
0097 /// d(x,y,z) or d(nx, ny, nz)
0098 template <concepts::algebra algebra_t>
0099 using free_to_bound_jacobian_submatrix = dmatrix<algebra_t, 2, 3>;
0100 
0101 /// Mapping from free to path
0102 template <concepts::algebra algebra_t>
0103 using free_to_path_matrix = dmatrix<algebra_t, 1, e_free_size>;
0104 
0105 /// Mapping from path to free
0106 template <concepts::algebra algebra_t>
0107 using path_to_free_matrix = dmatrix<algebra_t, e_free_size, 1>;
0108 
0109 }  // namespace detray