Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-11-04 09:23:51

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   MaterialUpdateStage pre = MaterialUpdateStage::PreUpdate;
0093   MaterialUpdateStage full = MaterialUpdateStage::FullUpdate;
0094   MaterialUpdateStage post = MaterialUpdateStage::PostUpdate;
0095 
0096   // (a) Forward factor material test
0097   BOOST_CHECK_EQUAL(hsmfwd.factor(fDir, full), 1.);
0098   BOOST_CHECK_EQUAL(hsmfwd.factor(fDir, pre), 0.);
0099   BOOST_CHECK_EQUAL(hsmfwd.factor(fDir, post), 1.);
0100 
0101   BOOST_CHECK_EQUAL(hsmfwd.factor(bDir, full), 1.);
0102   BOOST_CHECK_EQUAL(hsmfwd.factor(bDir, pre), 1.);
0103   BOOST_CHECK_EQUAL(hsmfwd.factor(bDir, post), 0.);
0104 
0105   auto matFwdFull = hsmfwd.materialSlab(Vector3{0., 0., 0.}, fDir, full);
0106   auto matBwdFull = hsmfwd.materialSlab(Vector3{0., 0., 0.}, bDir, full);
0107 
0108   auto matFwdPost = hsmfwd.materialSlab(Vector3{0., 0., 0.}, fDir, post);
0109   auto matBwdPost = hsmfwd.materialSlab(Vector3{0., 0., 0.}, bDir, post);
0110 
0111   auto matFwdPre = hsmfwd.materialSlab(Vector3{0., 0., 0.}, fDir, pre);
0112   auto matBwdPre = hsmfwd.materialSlab(Vector3{0., 0., 0.}, bDir, pre);
0113 
0114   BOOST_CHECK_EQUAL(mat, matFwdFull);
0115   BOOST_CHECK_EQUAL(mat, matBwdFull);
0116 
0117   BOOST_CHECK_EQUAL(mat, matFwdPost);
0118   BOOST_CHECK_EQUAL(vacuum, matBwdPost);
0119 
0120   BOOST_CHECK_EQUAL(vacuum, matFwdPre);
0121   BOOST_CHECK_EQUAL(mat, matBwdPre);
0122 
0123   // (b) Split factor material test
0124   BOOST_CHECK_EQUAL(hsmhalf.factor(fDir, full), 1.);
0125   CHECK_CLOSE_REL(hsmhalf.factor(fDir, pre), 0.5, 1e-6);
0126   CHECK_CLOSE_REL(hsmhalf.factor(fDir, post), 0.5, 1e-6);
0127 
0128   BOOST_CHECK_EQUAL(hsmhalf.factor(bDir, full), 1.);
0129   CHECK_CLOSE_REL(hsmhalf.factor(bDir, pre), 0.5, 1e-6);
0130   CHECK_CLOSE_REL(hsmhalf.factor(bDir, post), 0.5, 1e-6);
0131 
0132   matFwdFull = hsmhalf.materialSlab(Vector3{0., 0., 0.}, fDir, full);
0133   matBwdFull = hsmhalf.materialSlab(Vector3{0., 0., 0.}, bDir, full);
0134 
0135   matFwdPost = hsmhalf.materialSlab(Vector3{0., 0., 0.}, fDir, post);
0136   matBwdPost = hsmhalf.materialSlab(Vector3{0., 0., 0.}, bDir, post);
0137 
0138   matFwdPre = hsmhalf.materialSlab(Vector3{0., 0., 0.}, fDir, pre);
0139   matBwdPre = hsmhalf.materialSlab(Vector3{0., 0., 0.}, bDir, pre);
0140 
0141   BOOST_CHECK_EQUAL(mat, matFwdFull);
0142   BOOST_CHECK_EQUAL(mat, matBwdFull);
0143 
0144   BOOST_CHECK_EQUAL(matHalf, matFwdPost);
0145   BOOST_CHECK_EQUAL(matHalf, matBwdPost);
0146 
0147   BOOST_CHECK_EQUAL(matHalf, matFwdPre);
0148   BOOST_CHECK_EQUAL(matHalf, matBwdPre);
0149 
0150   // c) Forward factor material test
0151   BOOST_CHECK_EQUAL(hsmbwd.factor(fDir, full), 1.);
0152   BOOST_CHECK_EQUAL(hsmbwd.factor(fDir, pre), 1.);
0153   BOOST_CHECK_EQUAL(hsmbwd.factor(fDir, post), 0.);
0154 
0155   BOOST_CHECK_EQUAL(hsmbwd.factor(bDir, full), 1.);
0156   BOOST_CHECK_EQUAL(hsmbwd.factor(bDir, pre), 0.);
0157   BOOST_CHECK_EQUAL(hsmbwd.factor(bDir, post), 1.);
0158 
0159   matFwdFull = hsmbwd.materialSlab(Vector3{0., 0., 0.}, fDir, full);
0160   matBwdFull = hsmbwd.materialSlab(Vector3{0., 0., 0.}, bDir, full);
0161 
0162   matFwdPost = hsmbwd.materialSlab(Vector3{0., 0., 0.}, fDir, post);
0163   matBwdPost = hsmbwd.materialSlab(Vector3{0., 0., 0.}, bDir, post);
0164 
0165   matFwdPre = hsmbwd.materialSlab(Vector3{0., 0., 0.}, fDir, pre);
0166   matBwdPre = hsmbwd.materialSlab(Vector3{0., 0., 0.}, bDir, pre);
0167 
0168   BOOST_CHECK_EQUAL(mat, matFwdFull);
0169   BOOST_CHECK_EQUAL(mat, matBwdFull);
0170 
0171   BOOST_CHECK_EQUAL(vacuum, matFwdPost);
0172   BOOST_CHECK_EQUAL(mat, matBwdPost);
0173 
0174   BOOST_CHECK_EQUAL(mat, matFwdPre);
0175   BOOST_CHECK_EQUAL(vacuum, matBwdPre);
0176 }
0177 
0178 BOOST_AUTO_TEST_SUITE_END()
0179 
0180 }  // namespace ActsTests