Back to home page

EIC code displayed by LXR

 
 

    


Warning, file /acts/Tests/UnitTests/Core/Material/HomogeneousSurfaceMaterialTests.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

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();
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 
0084   // Test equality of the copy
0085   BOOST_CHECK_EQUAL(mat, mat2d);
0086 
0087   Direction fDir = Direction::Forward();
0088   Direction bDir = Direction::Backward();
0089 
0090   const MaterialUpdateMode none = MaterialUpdateMode::NoUpdate;
0091   const MaterialUpdateMode pre = MaterialUpdateMode::PreUpdate;
0092   const MaterialUpdateMode post = MaterialUpdateMode::PostUpdate;
0093   const MaterialUpdateMode full = MaterialUpdateMode::FullUpdate;
0094 
0095   // (a) Forward factor material test
0096   BOOST_CHECK_EQUAL(hsmfwd.factor(fDir, none), 0.);
0097   BOOST_CHECK_EQUAL(hsmfwd.factor(fDir, pre), 0.);
0098   BOOST_CHECK_EQUAL(hsmfwd.factor(fDir, post), 1.);
0099   BOOST_CHECK_EQUAL(hsmfwd.factor(fDir, full), 1.);
0100 
0101   BOOST_CHECK_EQUAL(hsmfwd.factor(fDir, none), 0.);
0102   BOOST_CHECK_EQUAL(hsmfwd.factor(bDir, pre), 1.);
0103   BOOST_CHECK_EQUAL(hsmfwd.factor(bDir, post), 0.);
0104   BOOST_CHECK_EQUAL(hsmfwd.factor(bDir, full), 1.);
0105 
0106   auto matFwdPre = hsmfwd.materialSlab(Vector2{0., 0.}, fDir, pre);
0107   auto matBwdPre = hsmfwd.materialSlab(Vector2{0., 0.}, bDir, pre);
0108 
0109   auto matFwdPost = hsmfwd.materialSlab(Vector2{0., 0.}, fDir, post);
0110   auto matBwdPost = hsmfwd.materialSlab(Vector2{0., 0.}, bDir, post);
0111 
0112   auto matFwdFull = hsmfwd.materialSlab(Vector2{0., 0.}, fDir, full);
0113   auto matBwdFull = hsmfwd.materialSlab(Vector2{0., 0.}, bDir, full);
0114 
0115   BOOST_CHECK_EQUAL(mat, matFwdFull);
0116   BOOST_CHECK_EQUAL(mat, matBwdFull);
0117 
0118   BOOST_CHECK_EQUAL(mat, matFwdPost);
0119   BOOST_CHECK_EQUAL(vacuum, matBwdPost);
0120 
0121   BOOST_CHECK_EQUAL(vacuum, matFwdPre);
0122   BOOST_CHECK_EQUAL(mat, matBwdPre);
0123 
0124   // (b) Split factor material test
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   BOOST_CHECK_EQUAL(hsmhalf.factor(fDir, full), 1.);
0128 
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   BOOST_CHECK_EQUAL(hsmhalf.factor(bDir, full), 1.);
0132 
0133   matFwdPre = hsmhalf.materialSlab(Vector2{0., 0.}, fDir, pre);
0134   matBwdPre = hsmhalf.materialSlab(Vector2{0., 0.}, bDir, pre);
0135 
0136   matFwdPost = hsmhalf.materialSlab(Vector2{0., 0.}, fDir, post);
0137   matBwdPost = hsmhalf.materialSlab(Vector2{0., 0.}, bDir, post);
0138 
0139   matFwdFull = hsmhalf.materialSlab(Vector2{0., 0.}, fDir, full);
0140   matBwdFull = hsmhalf.materialSlab(Vector2{0., 0.}, bDir, full);
0141 
0142   BOOST_CHECK_EQUAL(matHalf, matFwdPre);
0143   BOOST_CHECK_EQUAL(matHalf, matBwdPre);
0144 
0145   BOOST_CHECK_EQUAL(matHalf, matFwdPost);
0146   BOOST_CHECK_EQUAL(matHalf, matBwdPost);
0147 
0148   BOOST_CHECK_EQUAL(mat, matFwdFull);
0149   BOOST_CHECK_EQUAL(mat, matBwdFull);
0150 
0151   // c) Forward factor material test
0152   BOOST_CHECK_EQUAL(hsmbwd.factor(fDir, pre), 1.);
0153   BOOST_CHECK_EQUAL(hsmbwd.factor(fDir, post), 0.);
0154   BOOST_CHECK_EQUAL(hsmbwd.factor(fDir, full), 1.);
0155 
0156   BOOST_CHECK_EQUAL(hsmbwd.factor(bDir, pre), 0.);
0157   BOOST_CHECK_EQUAL(hsmbwd.factor(bDir, post), 1.);
0158   BOOST_CHECK_EQUAL(hsmbwd.factor(bDir, full), 1.);
0159 
0160   matFwdPre = hsmbwd.materialSlab(Vector2{0., 0.}, fDir, pre);
0161   matBwdPre = hsmbwd.materialSlab(Vector2{0., 0.}, bDir, pre);
0162 
0163   matFwdPost = hsmbwd.materialSlab(Vector2{0., 0.}, fDir, post);
0164   matBwdPost = hsmbwd.materialSlab(Vector2{0., 0.}, bDir, post);
0165 
0166   matFwdFull = hsmbwd.materialSlab(Vector2{0., 0.}, fDir, full);
0167   matBwdFull = hsmbwd.materialSlab(Vector2{0., 0.}, bDir, full);
0168 
0169   BOOST_CHECK_EQUAL(mat, matFwdPre);
0170   BOOST_CHECK_EQUAL(vacuum, matBwdPre);
0171 
0172   BOOST_CHECK_EQUAL(vacuum, matFwdPost);
0173   BOOST_CHECK_EQUAL(mat, matBwdPost);
0174 
0175   BOOST_CHECK_EQUAL(mat, matFwdFull);
0176   BOOST_CHECK_EQUAL(mat, matBwdFull);
0177 }
0178 
0179 BOOST_AUTO_TEST_SUITE_END()
0180 
0181 }  // namespace ActsTests