Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-06 08:11:28

0001 // This file is part of the Acts project.
0002 //
0003 // Copyright (C) 2017-2018 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 http://mozilla.org/MPL/2.0/.
0008 
0009 #include <boost/test/data/test_case.hpp>
0010 #include <boost/test/tools/output_test_stream.hpp>
0011 #include <boost/test/unit_test.hpp>
0012 
0013 #include "Acts/Definitions/Algebra.hpp"
0014 #include "Acts/Surfaces/BoundaryCheck.hpp"
0015 #include "Acts/Surfaces/DiscTrapezoidBounds.hpp"
0016 #include "Acts/Surfaces/SurfaceBounds.hpp"
0017 #include "Acts/Tests/CommonHelpers/FloatComparisons.hpp"
0018 
0019 #include <algorithm>
0020 #include <array>
0021 #include <stdexcept>
0022 #include <vector>
0023 
0024 namespace Acts {
0025 
0026 namespace Test {
0027 BOOST_AUTO_TEST_SUITE(Surfaces)
0028 
0029 /// Unit tests for DiscTrapezoidBounds constrcuctors
0030 BOOST_AUTO_TEST_CASE(DiscTrapezoidBoundsConstruction) {
0031   double minHalfX(1.0), maxHalfX(5.0), rMin(2.0), rMax(6.0), averagePhi(0.0),
0032       stereo(0.1);
0033   //
0034   /// Test construction with dimensions and default stereo
0035   BOOST_CHECK_EQUAL(
0036       DiscTrapezoidBounds(minHalfX, maxHalfX, rMin, rMax, averagePhi).type(),
0037       SurfaceBounds::eDiscTrapezoid);
0038   //
0039   /// Test construction with all dimensions
0040   BOOST_CHECK_EQUAL(
0041       DiscTrapezoidBounds(minHalfX, maxHalfX, rMin, rMax, averagePhi, stereo)
0042           .type(),
0043       SurfaceBounds::eDiscTrapezoid);
0044   //
0045   /// Copy constructor
0046   DiscTrapezoidBounds original(minHalfX, maxHalfX, rMin, rMax, averagePhi);
0047   DiscTrapezoidBounds copied(original);
0048   BOOST_CHECK_EQUAL(copied.type(), SurfaceBounds::eDiscTrapezoid);
0049 }
0050 
0051 // Streaning and recreation test
0052 BOOST_AUTO_TEST_CASE(DiscTrapezoidBoundsRecreation) {
0053   double minHalfX(1.0), maxHalfX(5.0), rMin(2.0), rMax(6.0), averagePhi(0.0),
0054       stereo(0.1);
0055 
0056   DiscTrapezoidBounds original(minHalfX, maxHalfX, rMin, rMax, averagePhi,
0057                                stereo);
0058   auto valvector = original.values();
0059   std::array<double, DiscTrapezoidBounds::eSize> values{};
0060   std::copy_n(valvector.begin(), DiscTrapezoidBounds::eSize, values.begin());
0061   DiscTrapezoidBounds recreated(values);
0062   BOOST_CHECK_EQUAL(recreated, original);
0063 }
0064 
0065 // Unit tests for AnnulusBounds exception throwing
0066 BOOST_AUTO_TEST_CASE(DiscTrapezoidBoundsExceptions) {
0067   double minHalfX(1.0), maxHalfX(5.0), rMin(2.0), rMax(6.0), averagePhi(0.0),
0068       stereo(0.1);
0069 
0070   // Exception for opening neg min half x < 0
0071   BOOST_CHECK_THROW(
0072       DiscTrapezoidBounds(-minHalfX, maxHalfX, rMin, rMax, averagePhi, stereo),
0073       std::logic_error);
0074 
0075   // Exception for opening neg max half x < 0
0076   BOOST_CHECK_THROW(
0077       DiscTrapezoidBounds(minHalfX, -maxHalfX, rMin, rMax, averagePhi, stereo),
0078       std::logic_error);
0079 
0080   // Exception for opening neg min and max half x < 0
0081   BOOST_CHECK_THROW(
0082       DiscTrapezoidBounds(-minHalfX, -maxHalfX, rMin, rMax, averagePhi, stereo),
0083       std::logic_error);
0084 
0085   // Exception for opening neg r min
0086   BOOST_CHECK_THROW(
0087       DiscTrapezoidBounds(minHalfX, maxHalfX, -rMin, rMax, averagePhi, stereo),
0088       std::logic_error);
0089 
0090   // Exception for opening neg r max
0091   BOOST_CHECK_THROW(
0092       DiscTrapezoidBounds(minHalfX, maxHalfX, rMin, -rMax, averagePhi, stereo),
0093       std::logic_error);
0094 
0095   // Exception for opening neg r min and r max
0096   BOOST_CHECK_THROW(
0097       DiscTrapezoidBounds(minHalfX, maxHalfX, -rMin, -rMax, averagePhi, stereo),
0098       std::logic_error);
0099 
0100   // Exception for out of bound average phi
0101   BOOST_CHECK_THROW(
0102       DiscTrapezoidBounds(minHalfX, maxHalfX, rMin, rMax, 4., stereo),
0103       std::logic_error);
0104 }
0105 
0106 /// Unit tests for DiscTrapezoidBounds properties
0107 BOOST_AUTO_TEST_CASE(DiscTrapezoidBoundsProperties) {
0108   double minHalfX(1.0), maxHalfX(5.0), rMin(2.0), rMax(6.0),
0109       averagePhi(0.0) /*, stereo(0.1)*/;
0110   /// Test clone
0111   DiscTrapezoidBounds DiscTrapezoidBoundsObject(minHalfX, maxHalfX, rMin, rMax,
0112                                                 averagePhi);
0113   //
0114   /// Test type() (redundant; already used in constructor confirmation)
0115   BOOST_CHECK_EQUAL(DiscTrapezoidBoundsObject.type(),
0116                     SurfaceBounds::eDiscTrapezoid);
0117   //
0118   /// Test distanceToBoundary
0119   Vector2 origin(0., 0.);
0120   Vector2 outside(30., 0.);
0121   Vector2 inSurface(2.5, 0.0);
0122   //
0123   /// Test dump
0124   boost::test_tools::output_test_stream dumpOuput;
0125   DiscTrapezoidBoundsObject.toStream(dumpOuput);
0126   BOOST_CHECK(dumpOuput.is_equal(
0127       "Acts::DiscTrapezoidBounds: (innerRadius, outerRadius, halfLengthXminR, "
0128       "halfLengthXmaxR, halfLengthY, halfPhiSector, averagePhi, rCenter, "
0129       "stereo) = "
0130       "(2.0000000, 6.0000000, 1.0000000, 5.0000000, 0.7922870, 0.9851108, "
0131       "0.0000000, 2.5243378, 0.0000000)"));
0132   //
0133   /// Test inside
0134   BOOST_CHECK(DiscTrapezoidBoundsObject.inside(inSurface, BoundaryCheck(true)));
0135   BOOST_CHECK(!DiscTrapezoidBoundsObject.inside(outside, BoundaryCheck(true)));
0136   //
0137   /// Test rMin
0138   CHECK_CLOSE_REL(DiscTrapezoidBoundsObject.rMin(), rMin, 1e-6);
0139   //
0140   /// Test rMax
0141   CHECK_CLOSE_REL(DiscTrapezoidBoundsObject.rMax(), rMax, 1e-6);
0142   //
0143   /// Test averagePhi
0144   CHECK_SMALL(DiscTrapezoidBoundsObject.get(DiscTrapezoidBounds::eAveragePhi),
0145               1e-9);
0146   //
0147   /// Test rCenter (redundant; not configurable)
0148   CHECK_CLOSE_REL(DiscTrapezoidBoundsObject.rCenter(), 2.524337798, 1e-6);
0149   //
0150   /// Test halfPhiSector (redundant; not configurable)
0151   CHECK_SMALL(DiscTrapezoidBoundsObject.stereo(), 1e-6);
0152   //
0153   /// Test minHalflengthX
0154   CHECK_CLOSE_REL(
0155       DiscTrapezoidBoundsObject.get(DiscTrapezoidBounds::eHalfLengthXminR),
0156       minHalfX, 1e-6);
0157   //
0158   /// Test maxHalflengthX
0159   CHECK_CLOSE_REL(
0160       DiscTrapezoidBoundsObject.get(DiscTrapezoidBounds::eHalfLengthXmaxR),
0161       maxHalfX, 1e-6);
0162   //
0163   /// Test halflengthY
0164   CHECK_CLOSE_REL(DiscTrapezoidBoundsObject.halfLengthY(), 0.792286991, 1e-6);
0165 }
0166 /// Unit test for testing DiscTrapezoidBounds assignment
0167 BOOST_AUTO_TEST_CASE(DiscTrapezoidBoundsAssignment) {
0168   double minHalfX(1.0), maxHalfX(5.0), rMin(2.0), rMax(6.0), averagePhi(0.0),
0169       stereo(0.1);
0170   DiscTrapezoidBounds DiscTrapezoidBoundsObject(minHalfX, maxHalfX, rMin, rMax,
0171                                                 averagePhi, stereo);
0172   // operator == not implemented in this class
0173   //
0174   /// Test assignment
0175   DiscTrapezoidBounds assignedDiscTrapezoidBoundsObject(2.1, 6.6, 3.4, 4.2, 0.3,
0176                                                         0.);
0177   assignedDiscTrapezoidBoundsObject = DiscTrapezoidBoundsObject;
0178   BOOST_CHECK_EQUAL(assignedDiscTrapezoidBoundsObject,
0179                     DiscTrapezoidBoundsObject);
0180 }
0181 
0182 BOOST_AUTO_TEST_SUITE_END()
0183 
0184 }  // namespace Test
0185 
0186 }  // namespace Acts