File indexing completed on 2025-09-15 08:15:06
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/Geometry/GeometryContext.hpp"
0013 #include "Acts/MagneticField/ConstantBField.hpp"
0014 #include "Acts/MagneticField/MagneticFieldContext.hpp"
0015 #include "Acts/Propagator/EigenStepper.hpp"
0016 #include "Acts/Propagator/Propagator.hpp"
0017 #include "Acts/Propagator/RiddersPropagator.hpp"
0018
0019 #include "PropagationDatasets.hpp"
0020 #include "PropagationTests.hpp"
0021
0022 namespace {
0023
0024 namespace ds = ActsTests::PropagationDatasets;
0025 using namespace Acts::UnitLiterals;
0026
0027 using MagneticField = Acts::ConstantBField;
0028 using Stepper = Acts::EigenStepper<>;
0029 using Propagator = Acts::Propagator<Stepper>;
0030 using RiddersPropagator = Acts::RiddersPropagator<Propagator>;
0031
0032
0033 constexpr auto epsPos = 1_um;
0034 constexpr auto epsDir = 0.125_mrad;
0035 constexpr auto epsMom = 1_eV;
0036
0037 constexpr auto epsCov = 0.025;
0038
0039 const Acts::GeometryContext geoCtx;
0040 const Acts::MagneticFieldContext magCtx;
0041
0042 inline Propagator makePropagator(double bz) {
0043 auto magField = std::make_shared<MagneticField>(Acts::Vector3(0.0, 0.0, bz));
0044 Stepper stepper(std::move(magField));
0045 return Propagator(std::move(stepper));
0046 }
0047
0048 inline RiddersPropagator makeRiddersPropagator(double bz) {
0049 return RiddersPropagator(makePropagator(bz));
0050 }
0051
0052 }
0053
0054 BOOST_AUTO_TEST_SUITE(PropagationEigenConstant)
0055
0056
0057
0058 BOOST_DATA_TEST_CASE(ForwardBackward,
0059 ds::phi* ds::thetaWithoutBeam* ds::absMomentum*
0060 ds::chargeNonZero* ds::pathLength* ds::magneticField,
0061 phi, theta, p, q, s, bz) {
0062 runForwardBackwardTest(makePropagator(bz), geoCtx, magCtx,
0063 makeParametersCurvilinear(phi, theta, p, q), s, epsPos,
0064 epsDir, epsMom);
0065 }
0066
0067
0068
0069
0070 BOOST_DATA_TEST_CASE(ToCylinderAlongZ,
0071 ds::phi* ds::thetaWithoutBeam* ds::absMomentum*
0072 ds::chargeNonZero* ds::pathLength* ds::magneticField,
0073 phi, theta, p, q, s, bz) {
0074 runToSurfaceTest(makePropagator(bz), geoCtx, magCtx,
0075 makeParametersCurvilinear(phi, theta, p, q), s,
0076 ZCylinderSurfaceBuilder(), epsPos, epsDir, epsMom);
0077 }
0078
0079 BOOST_DATA_TEST_CASE(ToDisc,
0080 ds::phi* ds::thetaWithoutBeam* ds::absMomentum*
0081 ds::chargeNonZero* ds::pathLength* ds::magneticField,
0082 phi, theta, p, q, s, bz) {
0083 runToSurfaceTest(makePropagator(bz), geoCtx, magCtx,
0084 makeParametersCurvilinear(phi, theta, p, q), s,
0085 DiscSurfaceBuilder(), epsPos, epsDir, epsMom);
0086 }
0087
0088 BOOST_DATA_TEST_CASE(ToPlane,
0089 ds::phi* ds::thetaWithoutBeam* ds::absMomentum*
0090 ds::chargeNonZero* ds::pathLength* ds::magneticField,
0091 phi, theta, p, q, s, bz) {
0092 runToSurfaceTest(makePropagator(bz), geoCtx, magCtx,
0093 makeParametersCurvilinear(phi, theta, p, q), s,
0094 PlaneSurfaceBuilder(), epsPos, epsDir, epsMom);
0095 }
0096
0097
0098 BOOST_DATA_TEST_CASE(ToStrawAlongZ,
0099 ds::phi* ds::thetaWithoutBeam* ds::absMomentum*
0100 ds::chargeNonZero* ds::pathLength* ds::magneticField,
0101 phi, theta, p, q, s, bz) {
0102 runToSurfaceTest(makePropagator(bz), geoCtx, magCtx,
0103 makeParametersCurvilinear(phi, theta, p, q), s,
0104 ZStrawSurfaceBuilder(), epsPos, epsDir, epsMom);
0105 }
0106
0107
0108
0109 BOOST_DATA_TEST_CASE(CovarianceCurvilinear,
0110 ds::phi* ds::thetaWithoutBeam* ds::absMomentum*
0111 ds::chargeNonZero* ds::pathLength* ds::magneticField,
0112 phi, theta, p, q, s, bz) {
0113 runForwardComparisonTest(
0114 makePropagator(bz), makeRiddersPropagator(bz), geoCtx, magCtx,
0115 makeParametersCurvilinearWithCovariance(phi, theta, p, q), s, epsPos,
0116 epsDir, epsMom, epsCov);
0117 }
0118
0119 BOOST_DATA_TEST_CASE(
0120 CovarianceToCylinderAlongZ,
0121 ds::phiWithoutAmbiguity* ds::thetaWithoutBeam* ds::absMomentum*
0122 ds::chargeNonZero* ds::pathLength* ds::magneticField,
0123 phi, theta, p, q, s, bz) {
0124 runToSurfaceComparisonTest(
0125 makePropagator(bz), makeRiddersPropagator(bz), geoCtx, magCtx,
0126 makeParametersCurvilinearWithCovariance(phi, theta, p, q), s,
0127 ZCylinderSurfaceBuilder(), epsPos, epsDir, epsMom, epsCov);
0128 }
0129
0130 BOOST_DATA_TEST_CASE(CovarianceToDisc,
0131 ds::phi* ds::thetaWithoutBeam* ds::absMomentum*
0132 ds::chargeNonZero* ds::pathLength* ds::magneticField,
0133 phi, theta, p, q, s, bz) {
0134 runToSurfaceComparisonTest(
0135 makePropagator(bz), makeRiddersPropagator(bz), geoCtx, magCtx,
0136 makeParametersCurvilinearWithCovariance(phi, theta, p, q), s,
0137 DiscSurfaceBuilder(), epsPos, epsDir, epsMom, epsCov);
0138 }
0139
0140 BOOST_DATA_TEST_CASE(CovarianceToPlane,
0141 ds::phi* ds::thetaWithoutBeam* ds::absMomentum*
0142 ds::chargeNonZero* ds::pathLength* ds::magneticField,
0143 phi, theta, p, q, s, bz) {
0144 runToSurfaceComparisonTest(
0145 makePropagator(bz), makeRiddersPropagator(bz), geoCtx, magCtx,
0146 makeParametersCurvilinearWithCovariance(phi, theta, p, q), s,
0147 PlaneSurfaceBuilder(), epsPos, epsDir, epsMom, epsCov);
0148 }
0149
0150 BOOST_DATA_TEST_CASE(CovarianceToStrawAlongZ,
0151 ds::phi* ds::thetaWithoutBeam* ds::absMomentum*
0152 ds::chargeNonZero* ds::pathLength* ds::magneticField,
0153 phi, theta, p, q, s, bz) {
0154
0155
0156 runToSurfaceComparisonTest(
0157 makePropagator(bz), makeRiddersPropagator(bz), geoCtx, magCtx,
0158 makeParametersCurvilinearWithCovariance(phi, theta, p, q), s,
0159 ZStrawSurfaceBuilder(), epsPos, epsDir, epsMom, 0.125);
0160 }
0161
0162 BOOST_AUTO_TEST_SUITE_END()