Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-04-17 07:59:04

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 #include "Acts/Definitions/Algebra.hpp"
0012 #include "Acts/Utilities/AxisDefinitions.hpp"
0013 #include "Acts/Utilities/Enumerate.hpp"
0014 #include "Acts/Utilities/GridAccessHelpers.hpp"
0015 
0016 #include <algorithm>
0017 #include <array>
0018 
0019 namespace Acts {
0020 
0021 /// @brief  This is an index grid based navigation state updator, it uses
0022 /// an extractor type and a filler type to handle the navigation state
0023 ///
0024 /// @note a transform is applied `p3l = transform * p3` in order to allow
0025 /// shifted, transformed grids
0026 ///
0027 /// It can be used for volumes, surfaces at convenience
0028 ///
0029 /// @tparam navigation_type distinguishes between internal and external navigation
0030 /// @tparam grid_t is the type of the grid
0031 /// @tparam extractor_type is the helper to extract the object
0032 /// @tparam filler_type is the helper to fill the object into the nState
0033 template <typename grid_t>
0034 class IndexGridNavigation {
0035  public:
0036   /// Broadcast the grid type
0037   using grid_type = grid_t;
0038 
0039   /// The grid where the indices are stored
0040   grid_type grid;
0041 
0042   /// These are the cast parameters - copied from constructor
0043   std::array<AxisDirection, grid_type::DIM> casts{};
0044 
0045   /// A transform to be applied to the position
0046   Transform3 transform = Transform3::Identity();
0047 
0048   /// @brief  Constructor for a grid based surface attacher
0049   /// @param igrid the grid that is moved into this attacher
0050   /// @param icasts is the cast values array
0051   /// @param itr a transform applied to the global position
0052   IndexGridNavigation(grid_type&& igrid,
0053                       const std::array<AxisDirection, grid_type::DIM>& icasts,
0054                       const Transform3& itr = Transform3::Identity())
0055       : grid(std::move(igrid)), casts(icasts), transform(itr) {}
0056 
0057   IndexGridNavigation() = delete;
0058 };
0059 
0060 }  // namespace Acts