Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-04-05 07:46:23

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/Definitions/Common.hpp"
0013 #include "Acts/Definitions/Direction.hpp"
0014 #include "Acts/Material/HomogeneousSurfaceMaterial.hpp"
0015 #include "Acts/Material/Material.hpp"
0016 #include "Acts/Material/MaterialSlab.hpp"
0017 #include "ActsTests/CommonHelpers/FloatComparisons.hpp"
0018 
0019 #include <utility>
0020 
0021 using namespace Acts;
0022 
0023 namespace ActsTests {
0024 
0025 BOOST_AUTO_TEST_SUITE(MaterialSuite)
0026 
0027 /// Test the constructors
0028 BOOST_AUTO_TEST_CASE(HomogeneousSurfaceMaterial_construction_test) {
0029   // construct the material properties from arguments
0030   Material mat = Material::fromMolarDensity(1., 2., 3., 4., 5.);
0031   MaterialSlab mp(mat, 0.1);
0032 
0033   // Constructor from arguments
0034   HomogeneousSurfaceMaterial hsm(mp, 1.);
0035   // Copy constructor
0036   HomogeneousSurfaceMaterial hsmCopy(hsm);
0037   // Test equality of the copy
0038   BOOST_CHECK_EQUAL(hsm, hsmCopy);
0039   // Copy move constructor
0040   HomogeneousSurfaceMaterial hsmCopyMoved(std::move(hsmCopy));
0041   // Test equality of the copy
0042   BOOST_CHECK_EQUAL(hsm, hsmCopyMoved);
0043   // Assignment constructor
0044   HomogeneousSurfaceMaterial hsmAssigned = hsm;
0045   // Test equality of the assignment
0046   BOOST_CHECK_EQUAL(hsm, hsmAssigned);
0047   // Assignment move constructor
0048   HomogeneousSurfaceMaterial hsmAssignedMoved(std::move(hsmAssigned));
0049   // Test equality of the copy
0050   BOOST_CHECK_EQUAL(hsm, hsmAssignedMoved);
0051 }
0052 
0053 // Test the Scaling
0054 BOOST_AUTO_TEST_CASE(HomogeneousSurfaceMaterial_scaling_test) {
0055   MaterialSlab mat(Material::fromMolarDensity(1., 2., 3., 4., 5.), 0.1);
0056   MaterialSlab matHalf = mat;
0057   matHalf.scaleThickness(0.5);
0058 
0059   HomogeneousSurfaceMaterial hsm(mat, 1.);
0060   hsm.scale(0.5);
0061 
0062   auto matBin = hsm.materialSlab(Vector3(0., 0., 0.));
0063 
0064   BOOST_CHECK_EQUAL(matBin, matHalf);
0065   BOOST_CHECK_NE(matBin, mat);
0066 }
0067 
0068 // Test the Access
0069 BOOST_AUTO_TEST_CASE(HomogeneousSurfaceMaterial_access_test) {
0070   // construct the material properties from arguments
0071   MaterialSlab mat(Material::fromMolarDensity(1., 2., 3., 4., 5.), 0.1);
0072   MaterialSlab matHalf = mat;
0073   matHalf.scaleThickness(0.5);
0074 
0075   MaterialSlab vacuum = MaterialSlab::Nothing();
0076 
0077   // Constructor from arguments
0078   HomogeneousSurfaceMaterial hsmfwd(mat, 1.);
0079   HomogeneousSurfaceMaterial hsmhalf(mat, 0.5);
0080   HomogeneousSurfaceMaterial hsmbwd(mat, 0.);
0081 
0082   auto mat2d = hsmfwd.materialSlab(Vector2{0., 0.});
0083   auto mat3d = hsmfwd.materialSlab(Vector3{0., 0., 0.});
0084 
0085   // Test equality of the copy
0086   BOOST_CHECK_EQUAL(mat, mat2d);
0087   BOOST_CHECK_EQUAL(mat, mat3d);
0088 
0089   Direction fDir = Direction::Forward();
0090   Direction bDir = Direction::Backward();
0091 
0092   const MaterialUpdateMode none = MaterialUpdateMode::NoUpdate;
0093   const MaterialUpdateMode pre = MaterialUpdateMode::PreUpdate;
0094   const MaterialUpdateMode post = MaterialUpdateMode::PostUpdate;
0095   const MaterialUpdateMode full = MaterialUpdateMode::FullUpdate;
0096 
0097   // (a) Forward factor material test
0098   BOOST_CHECK_EQUAL(hsmfwd.factor(fDir, none), 0.);
0099   BOOST_CHECK_EQUAL(hsmfwd.factor(fDir, pre), 0.);
0100   BOOST_CHECK_EQUAL(hsmfwd.factor(fDir, post), 1.);
0101   BOOST_CHECK_EQUAL(hsmfwd.factor(fDir, full), 1.);
0102 
0103   BOOST_CHECK_EQUAL(hsmfwd.factor(fDir, none), 0.);
0104   BOOST_CHECK_EQUAL(hsmfwd.factor(bDir, pre), 1.);
0105   BOOST_CHECK_EQUAL(hsmfwd.factor(bDir, post), 0.);
0106   BOOST_CHECK_EQUAL(hsmfwd.factor(bDir, full), 1.);
0107 
0108   auto matFwdPre = hsmfwd.materialSlab(Vector3{0., 0., 0.}, fDir, pre);
0109   auto matBwdPre = hsmfwd.materialSlab(Vector3{0., 0., 0.}, bDir, pre);
0110 
0111   auto matFwdPost = hsmfwd.materialSlab(Vector3{0., 0., 0.}, fDir, post);
0112   auto matBwdPost = hsmfwd.materialSlab(Vector3{0., 0., 0.}, bDir, post);
0113 
0114   auto matFwdFull = hsmfwd.materialSlab(Vector3{0., 0., 0.}, fDir, full);
0115   auto matBwdFull = hsmfwd.materialSlab(Vector3{0., 0., 0.}, bDir, full);
0116 
0117   BOOST_CHECK_EQUAL(mat, matFwdFull);
0118   BOOST_CHECK_EQUAL(mat, matBwdFull);
0119 
0120   BOOST_CHECK_EQUAL(mat, matFwdPost);
0121   BOOST_CHECK_EQUAL(vacuum, matBwdPost);
0122 
0123   BOOST_CHECK_EQUAL(vacuum, matFwdPre);
0124   BOOST_CHECK_EQUAL(mat, matBwdPre);
0125 
0126   // (b) Split factor material test
0127   CHECK_CLOSE_REL(hsmhalf.factor(fDir, pre), 0.5, 1e-6);
0128   CHECK_CLOSE_REL(hsmhalf.factor(fDir, post), 0.5, 1e-6);
0129   BOOST_CHECK_EQUAL(hsmhalf.factor(fDir, full), 1.);
0130 
0131   CHECK_CLOSE_REL(hsmhalf.factor(bDir, pre), 0.5, 1e-6);
0132   CHECK_CLOSE_REL(hsmhalf.factor(bDir, post), 0.5, 1e-6);
0133   BOOST_CHECK_EQUAL(hsmhalf.factor(bDir, full), 1.);
0134 
0135   matFwdPre = hsmhalf.materialSlab(Vector3{0., 0., 0.}, fDir, pre);
0136   matBwdPre = hsmhalf.materialSlab(Vector3{0., 0., 0.}, bDir, pre);
0137 
0138   matFwdPost = hsmhalf.materialSlab(Vector3{0., 0., 0.}, fDir, post);
0139   matBwdPost = hsmhalf.materialSlab(Vector3{0., 0., 0.}, bDir, post);
0140 
0141   matFwdFull = hsmhalf.materialSlab(Vector3{0., 0., 0.}, fDir, full);
0142   matBwdFull = hsmhalf.materialSlab(Vector3{0., 0., 0.}, bDir, full);
0143 
0144   BOOST_CHECK_EQUAL(matHalf, matFwdPre);
0145   BOOST_CHECK_EQUAL(matHalf, matBwdPre);
0146 
0147   BOOST_CHECK_EQUAL(matHalf, matFwdPost);
0148   BOOST_CHECK_EQUAL(matHalf, matBwdPost);
0149 
0150   BOOST_CHECK_EQUAL(mat, matFwdFull);
0151   BOOST_CHECK_EQUAL(mat, matBwdFull);
0152 
0153   // c) Forward factor material test
0154   BOOST_CHECK_EQUAL(hsmbwd.factor(fDir, pre), 1.);
0155   BOOST_CHECK_EQUAL(hsmbwd.factor(fDir, post), 0.);
0156   BOOST_CHECK_EQUAL(hsmbwd.factor(fDir, full), 1.);
0157 
0158   BOOST_CHECK_EQUAL(hsmbwd.factor(bDir, pre), 0.);
0159   BOOST_CHECK_EQUAL(hsmbwd.factor(bDir, post), 1.);
0160   BOOST_CHECK_EQUAL(hsmbwd.factor(bDir, full), 1.);
0161 
0162   matFwdPre = hsmbwd.materialSlab(Vector3{0., 0., 0.}, fDir, pre);
0163   matBwdPre = hsmbwd.materialSlab(Vector3{0., 0., 0.}, bDir, pre);
0164 
0165   matFwdPost = hsmbwd.materialSlab(Vector3{0., 0., 0.}, fDir, post);
0166   matBwdPost = hsmbwd.materialSlab(Vector3{0., 0., 0.}, bDir, post);
0167 
0168   matFwdFull = hsmbwd.materialSlab(Vector3{0., 0., 0.}, fDir, full);
0169   matBwdFull = hsmbwd.materialSlab(Vector3{0., 0., 0.}, bDir, full);
0170 
0171   BOOST_CHECK_EQUAL(mat, matFwdPre);
0172   BOOST_CHECK_EQUAL(vacuum, matBwdPre);
0173 
0174   BOOST_CHECK_EQUAL(vacuum, matFwdPost);
0175   BOOST_CHECK_EQUAL(mat, matBwdPost);
0176 
0177   BOOST_CHECK_EQUAL(mat, matFwdFull);
0178   BOOST_CHECK_EQUAL(mat, matBwdFull);
0179 }
0180 
0181 BOOST_AUTO_TEST_SUITE_END()
0182 
0183 }  // namespace ActsTests