Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-11-17 08:55:03

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/Geometry/ApproachDescriptor.hpp"
0013 #include "Acts/Geometry/GenericApproachDescriptor.hpp"
0014 #include "Acts/Geometry/GeometryContext.hpp"
0015 #include "Acts/Geometry/Layer.hpp"
0016 #include "Acts/Surfaces/PlaneSurface.hpp"
0017 #include "Acts/Surfaces/RectangleBounds.hpp"
0018 #include "Acts/Surfaces/Surface.hpp"
0019 #include "Acts/Surfaces/SurfaceArray.hpp"
0020 
0021 #include <cmath>
0022 #include <memory>
0023 #include <utility>
0024 #include <vector>
0025 
0026 #include "../Surfaces/SurfaceStub.hpp"
0027 #include "LayerStub.hpp"
0028 
0029 using namespace Acts;
0030 
0031 GeometryContext tgContext = GeometryContext();
0032 
0033 namespace ActsTests {
0034 
0035 BOOST_AUTO_TEST_SUITE(Layers)
0036 
0037 /// Unit test for creating compliant/non-compliant Layer object
0038 BOOST_AUTO_TEST_CASE(LayerConstruction) {
0039   // Descendant Layer objects also inherit from Surface objects, which
0040   // delete the default constructor
0041   //
0042   /// Minimum possible construction (default constructor is deleted)
0043   LayerStub minallyConstructed(nullptr);
0044   BOOST_CHECK(minallyConstructed.constructedOk());
0045   /// Need an approach descriptor for the next level of complexity:
0046   std::vector<std::shared_ptr<const Surface>> aSurfaces{
0047       Surface::makeShared<SurfaceStub>(), Surface::makeShared<SurfaceStub>()};
0048   std::unique_ptr<ApproachDescriptor> ad(
0049       new GenericApproachDescriptor(aSurfaces));
0050   const double thickness(1.0);
0051   LayerStub approachDescriptorConstructed(nullptr, thickness, std::move(ad));
0052   /// Construction with (minimal) approach descriptor
0053   BOOST_CHECK(approachDescriptorConstructed.constructedOk());
0054   // Copy construction is deleted
0055 }
0056 
0057 /// Unit test for testing Layer properties
0058 BOOST_AUTO_TEST_CASE(LayerProperties) {
0059   // Make a dummy layer to play with
0060   // bounds object, rectangle type
0061   auto rBounds = std::make_shared<const RectangleBounds>(1., 1.);
0062   /// Constructor
0063   const std::vector<std::shared_ptr<const Surface>> aSurfaces{
0064       Surface::makeShared<PlaneSurface>(Transform3::Identity(), rBounds),
0065       Surface::makeShared<PlaneSurface>(Transform3::Identity(), rBounds)};
0066   std::unique_ptr<ApproachDescriptor> ad(
0067       new GenericApproachDescriptor(aSurfaces));
0068   auto adPtr = ad.get();
0069   const double thickness(1.0);
0070   LayerStub layerStub(nullptr, thickness, std::move(ad));
0071   //
0072   /// surfaceArray()
0073   BOOST_CHECK_EQUAL(layerStub.surfaceArray(), nullptr);
0074   /// thickness()
0075   BOOST_CHECK_EQUAL(layerStub.thickness(), thickness);
0076   // onLayer() is templated; can't find implementation!
0077   /// isOnLayer() (delegates to the Surface 'isOnSurface()')
0078   const Vector3 pos{0.0, 0.0, 0.0};
0079   const Vector3 pos2{100., 100., std::nan("")};
0080   BOOST_CHECK(layerStub.isOnLayer(tgContext, pos));
0081   // this should fail, but globalToLocal has hard-coded return values, so it
0082   // succeeds
0083   BOOST_CHECK(layerStub.isOnLayer(tgContext, pos2));
0084   /// approachDescriptor(), retrieved as a pointer.
0085   BOOST_CHECK_EQUAL(layerStub.approachDescriptor(), adPtr);
0086   const Vector3 gpos{0., 0., 1.0};
0087   const Vector3 direction{0., 0., -1.};
0088   /// nextLayer()
0089   BOOST_CHECK(!(layerStub.nextLayer(tgContext, gpos, direction)));
0090   /// trackingVolume()
0091   BOOST_CHECK(!layerStub.trackingVolume());
0092   // BOOST_TEST_CHECKPOINT("Before ending test");
0093   // deletion results in "memory access violation at address: 0x00000071: no
0094   // mapping at fault address"
0095   // delete abstractVolumePtr;
0096   /// layerType()
0097   BOOST_CHECK_EQUAL(layerStub.layerType(), LayerType::passive);
0098 }
0099 
0100 BOOST_AUTO_TEST_SUITE_END()
0101 
0102 }  // namespace ActsTests