Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-11-14 09:33:54

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 #include <boost/test/unit_test.hpp>
0010 
0011 #include "Acts/Definitions/Algebra.hpp"
0012 #include "Acts/Utilities/Grid.hpp"
0013 #include "Acts/Utilities/GridAccessHelpers.hpp"
0014 #include "Acts/Utilities/GridAxisGenerators.hpp"
0015 
0016 using namespace Acts;
0017 
0018 namespace ActsTests {
0019 
0020 BOOST_AUTO_TEST_SUITE(UtilitiesSuite)
0021 
0022 BOOST_AUTO_TEST_CASE(Grid1DAccess) {
0023   GridAxisGenerators::EqBound eqBound{{0., 10.}, 10};
0024   using GridType = GridAxisGenerators::EqBound::grid_type<std::size_t>;
0025   using PointType = GridType::point_t;
0026   auto grid = GridType(eqBound());
0027 
0028   for (std::size_t i = 0; i < 10; ++i) {
0029     grid.atPosition(PointType{i + 0.5}) = i;
0030   }
0031 
0032   // Local access
0033   std::vector<std::size_t> fAccessor = {0u};
0034   std::vector<std::size_t> sAccessor = {1u};
0035 
0036   Vector2 lPosition{3.5, 6.5};
0037   auto flAccess =
0038       GridAccessHelpers::accessLocal<GridType>(lPosition, fAccessor);
0039   auto slAccess =
0040       GridAccessHelpers::accessLocal<GridType>(lPosition, sAccessor);
0041 
0042   // This should take out local 1D either first or second
0043   BOOST_CHECK_EQUAL(grid.atPosition(flAccess), 3u);
0044   BOOST_CHECK_EQUAL(grid.atPosition(slAccess), 6u);
0045 
0046   // Global access
0047   Vector3 gPosition{0.5, 3.5, 6.5};
0048   std::vector<AxisDirection> fCast = {AxisDirection::AxisX};
0049   std::vector<AxisDirection> sCast = {AxisDirection::AxisY};
0050   std::vector<AxisDirection> tCast = {AxisDirection::AxisZ};
0051 
0052   auto fgAccess = GridAccessHelpers::castPosition<GridType>(gPosition, fCast);
0053   auto sgAccess = GridAccessHelpers::castPosition<GridType>(gPosition, sCast);
0054   auto tgAccess = GridAccessHelpers::castPosition<GridType>(gPosition, tCast);
0055   BOOST_CHECK_EQUAL(grid.atPosition(fgAccess), 0u);
0056   BOOST_CHECK_EQUAL(grid.atPosition(sgAccess), 3u);
0057   BOOST_CHECK_EQUAL(grid.atPosition(tgAccess), 6u);
0058 }
0059 
0060 BOOST_AUTO_TEST_CASE(Grid2DAccess) {
0061   GridAxisGenerators::EqBoundEqBound eqeqBound{{0., 10.}, 10, {0., 10.}, 10};
0062   using GridType = GridAxisGenerators::EqBoundEqBound::grid_type<std::size_t>;
0063   using PointType = GridType::point_t;
0064   auto grid = GridType(eqeqBound());
0065   for (std::size_t j = 0; j < 10u; ++j) {
0066     for (std::size_t i = 0; i < 10u; ++i) {
0067       grid.atPosition(PointType{i + 0.5, j + 0.5}) = j * 100 + i;
0068     }
0069   }
0070 
0071   // Local access
0072   std::vector<std::size_t> fAccessor = {0u, 1u};
0073   Vector2 lPosition{3.5, 6.5};
0074   auto flAccess =
0075       GridAccessHelpers::accessLocal<GridType>(lPosition, fAccessor);
0076   BOOST_CHECK_EQUAL(grid.atPosition(flAccess), 603u);
0077 
0078   // Global access
0079   Vector3 gPosition{0.5, 3.5, 6.5};
0080   std::vector<AxisDirection> fCast = {AxisDirection::AxisX,
0081                                       AxisDirection::AxisY};
0082   auto fgAccess = GridAccessHelpers::castPosition<GridType>(gPosition, fCast);
0083   BOOST_CHECK_EQUAL(grid.atPosition(fgAccess), 300u);
0084 }
0085 
0086 BOOST_AUTO_TEST_SUITE_END()
0087 
0088 }  // namespace ActsTests