File indexing completed on 2025-08-06 08:11:38
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include <boost/test/data/test_case.hpp>
0010 #include <boost/test/unit_test.hpp>
0011
0012 #include "Acts/Definitions/Algebra.hpp"
0013 #include "Acts/Definitions/Tolerance.hpp"
0014 #include "Acts/Geometry/GeometryContext.hpp"
0015 #include "Acts/Surfaces/PlaneSurface.hpp"
0016 #include "Acts/Surfaces/Surface.hpp"
0017 #include "Acts/Tests/CommonHelpers/FloatComparisons.hpp"
0018 #include "ActsFatras/Digitization/PlanarSurfaceDrift.hpp"
0019
0020 #include <array>
0021 #include <memory>
0022
0023 namespace bdata = boost::unit_test::data;
0024
0025 namespace ActsFatras {
0026
0027 BOOST_AUTO_TEST_SUITE(Digitization)
0028
0029 BOOST_AUTO_TEST_CASE(PlanarSurfaceDrift) {
0030 Acts::GeometryContext geoCtx;
0031
0032 ActsFatras::PlanarSurfaceDrift psd;
0033
0034 Acts::Vector3 cPosition = Acts::Vector3(10., 50., 12.);
0035 Acts::Vector3 cNormal = Acts::Vector3(1., 1., 1.).normalized();
0036
0037 auto planeSurface =
0038 Acts::Surface::makeShared<Acts::PlaneSurface>(cPosition, cNormal);
0039
0040 double depletion = 0.250;
0041
0042
0043 Acts::Vector3 noDrift(0., 0., 0.);
0044 Acts::Vector3 holeDrift = Acts::Vector3(0.5, 0., 1.).normalized();
0045 Acts::Vector3 chargeDrift = Acts::Vector3(0.5, 0., -1.).normalized();
0046
0047
0048
0049
0050 auto noDriftSegment = psd.toReadout(geoCtx, *planeSurface, depletion,
0051 cPosition, cNormal, noDrift);
0052
0053 CHECK_CLOSE_ABS(noDriftSegment[0].x(), 0., Acts::s_epsilon);
0054 CHECK_CLOSE_ABS(noDriftSegment[0].y(), 0., Acts::s_epsilon);
0055 CHECK_CLOSE_ABS(noDriftSegment[1].x(), 0., Acts::s_epsilon);
0056 CHECK_CLOSE_ABS(noDriftSegment[1].y(), 0., Acts::s_epsilon);
0057
0058 Acts::Vector3 particleDir = Acts::Vector3(2., 1., 1.).normalized();
0059
0060
0061
0062
0063 noDriftSegment = psd.toReadout(geoCtx, *planeSurface, depletion, cPosition,
0064 particleDir, noDrift);
0065
0066 CHECK_CLOSE_ABS(noDriftSegment[0].x(), -noDriftSegment[1].x(),
0067 Acts::s_epsilon);
0068 CHECK_CLOSE_ABS(noDriftSegment[0].y(), -noDriftSegment[1].y(),
0069 Acts::s_epsilon);
0070
0071
0072
0073
0074
0075
0076
0077 auto driftedSegment = psd.toReadout(geoCtx, *planeSurface, depletion,
0078 cPosition, particleDir, holeDrift);
0079
0080 BOOST_CHECK(std::abs(driftedSegment[0].x() - driftedSegment[1].x()) >
0081 Acts::s_epsilon);
0082 BOOST_CHECK(std::abs(driftedSegment[0].y() - driftedSegment[1].y()) >
0083 Acts::s_epsilon);
0084 CHECK_CLOSE_ABS(noDriftSegment[1].x(), driftedSegment[1].x(),
0085 Acts::s_epsilon);
0086 CHECK_CLOSE_ABS(noDriftSegment[1].y(), driftedSegment[1].y(),
0087 Acts::s_epsilon);
0088 BOOST_CHECK(std::abs(driftedSegment[0].x() - noDriftSegment[0].x()) >
0089 Acts::s_epsilon);
0090 CHECK_CLOSE_ABS(driftedSegment[0].y(), noDriftSegment[0].y(),
0091 Acts::s_epsilon);
0092
0093
0094
0095
0096
0097
0098
0099 driftedSegment = psd.toReadout(geoCtx, *planeSurface, depletion, cPosition,
0100 particleDir, chargeDrift);
0101
0102 BOOST_CHECK(std::abs(driftedSegment[0].x() - driftedSegment[1].x()) >
0103 Acts::s_epsilon);
0104 BOOST_CHECK(std::abs(driftedSegment[0].y() - driftedSegment[1].y()) >
0105 Acts::s_epsilon);
0106 CHECK_CLOSE_ABS(noDriftSegment[0].x(), driftedSegment[0].x(),
0107 Acts::s_epsilon);
0108 CHECK_CLOSE_ABS(noDriftSegment[0].y(), driftedSegment[0].y(),
0109 Acts::s_epsilon);
0110 BOOST_CHECK(std::abs(driftedSegment[1].x() - noDriftSegment[1].x()) >
0111 Acts::s_epsilon);
0112 CHECK_CLOSE_ABS(driftedSegment[1].y(), noDriftSegment[1].y(),
0113 Acts::s_epsilon);
0114 }
0115
0116 BOOST_AUTO_TEST_SUITE_END()
0117
0118 }