File indexing completed on 2026-09-13 08:18:59
0001
0002
0003
0004
0005
0006
0007
0008
0009 #pragma once
0010
0011 #include "Acts/Definitions/Algebra.hpp"
0012 #include "Acts/Utilities/VectorHelpers.hpp"
0013
0014 #include <array>
0015 #include <stdexcept>
0016 #include <utility>
0017
0018 namespace Acts::GridAccessHelpers {
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032 template <typename grid_type, typename cast_container>
0033 typename grid_type::point_t castPosition(const Vector3& position,
0034 const cast_container& globalCasts) {
0035
0036 return [&]<std::size_t... idx>(std::index_sequence<idx...> ) {
0037 return typename grid_type::point_t{
0038 VectorHelpers::cast(position, globalCasts[idx])...};
0039 }(std::make_integer_sequence<std::size_t, grid_type::DIM>{});
0040 }
0041
0042
0043
0044
0045
0046
0047
0048
0049 template <typename Array, typename local_indices, std::size_t... idx>
0050 void fillLocal(const Vector2& lposition, const local_indices& laccess,
0051 Array& ra, std::index_sequence<idx...> ) {
0052 ((ra[idx] = lposition[laccess[idx]]), ...);
0053 }
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064 template <typename grid_type, typename local_indices>
0065 typename grid_type::point_t accessLocal(const Vector2& lposition,
0066 const local_indices& laccess) {
0067 if constexpr (grid_type::DIM > 2u) {
0068 throw std::invalid_argument(
0069 "GridAccessHelper: only 1-D and 2-D grids are possible for local "
0070 "access.");
0071 }
0072
0073 typename grid_type::point_t accessed{};
0074 fillLocal(lposition, laccess, accessed,
0075 std::make_integer_sequence<std::size_t, grid_type::DIM>{});
0076 return accessed;
0077 }
0078
0079 }