File indexing completed on 2025-01-18 09:12:49
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include <boost/test/unit_test.hpp>
0010
0011 #include "Acts/Definitions/Algebra.hpp"
0012 #include "Acts/Surfaces/detail/AlignmentHelper.hpp"
0013 #include "Acts/Tests/CommonHelpers/FloatComparisons.hpp"
0014
0015 #include <algorithm>
0016 #include <cmath>
0017 #include <numbers>
0018 #include <utility>
0019
0020 namespace Acts::Test {
0021
0022
0023
0024 BOOST_AUTO_TEST_CASE(alignment_helper_test) {
0025
0026
0027 const double alpha = std::numbers::pi;
0028 const double beta = 0.;
0029 const double gamma = std::numbers::pi / 2.;
0030
0031 AngleAxis3 rotX(alpha, Vector3(1., 0., 0.));
0032
0033 AngleAxis3 rotY(beta, Vector3(0., 1., 0.));
0034
0035 AngleAxis3 rotZ(gamma, Vector3(0., 0., 1.));
0036 double sz = std::sin(gamma);
0037 double cz = std::cos(gamma);
0038 double sy = std::sin(beta);
0039 double cy = std::cos(beta);
0040 double sx = std::sin(alpha);
0041 double cx = std::cos(alpha);
0042
0043
0044
0045
0046
0047
0048 RotationMatrix3 expRot = RotationMatrix3::Zero();
0049 expRot.col(0) = Vector3(cz * cy, cy * sz, -sy);
0050 expRot.col(1) =
0051 Vector3(cz * sy * sx - cx * sz, cz * cx + sz * sy * sx, cy * sx);
0052 expRot.col(2) =
0053 Vector3(sz * sx + cz * cx * sy, cx * sz * sy - cz * sx, cy * cx);
0054
0055
0056 RotationMatrix3 expRotToXAxis = RotationMatrix3::Zero();
0057 expRotToXAxis.col(0) = expRot * Vector3(0, 0, 0);
0058 expRotToXAxis.col(1) = expRot * Vector3(0, 0, -1);
0059 expRotToXAxis.col(2) = expRot * Vector3(0, 1, 0);
0060
0061
0062 RotationMatrix3 expRotToYAxis = RotationMatrix3::Zero();
0063 expRotToYAxis.col(0) = expRot * Vector3(0, 0, 1);
0064 expRotToYAxis.col(1) = expRot * Vector3(0, 0, 0);
0065 expRotToYAxis.col(2) = expRot * Vector3(-1, 0, 0);
0066
0067
0068 RotationMatrix3 expRotToZAxis = RotationMatrix3::Zero();
0069 expRotToZAxis.col(0) = expRot * Vector3(0, -1, 0);
0070 expRotToZAxis.col(1) = expRot * Vector3(1, 0, 0);
0071 expRotToZAxis.col(2) = expRot * Vector3(0, 0, 0);
0072
0073
0074 Translation3 translation(Vector3(0., 0., 0.));
0075 Transform3 transform(translation);
0076
0077 transform *= rotZ;
0078 transform *= rotY;
0079 transform *= rotX;
0080
0081 const auto rotation = transform.rotation();
0082
0083
0084 CHECK_CLOSE_ABS(rotation, expRot, 1e-15);
0085
0086
0087
0088 const auto& [rotToLocalXAxis, rotToLocalYAxis, rotToLocalZAxis] =
0089 detail::rotationToLocalAxesDerivative(rotation);
0090
0091
0092 CHECK_CLOSE_ABS(rotToLocalXAxis, expRotToXAxis, 1e-15);
0093
0094
0095 CHECK_CLOSE_ABS(rotToLocalYAxis, expRotToYAxis, 1e-15);
0096
0097
0098 CHECK_CLOSE_ABS(rotToLocalZAxis, expRotToZAxis, 1e-15);
0099
0100
0101 RotationMatrix3 iRotation = RotationMatrix3::Identity();
0102
0103
0104
0105 const auto& [irotToLocalXAxis, irotToLocalYAxis, irotToLocalZAxis] =
0106 detail::rotationToLocalAxesDerivative(iRotation);
0107
0108
0109 expRotToXAxis << 0, 0, 0, 0, 0, 1, 0, -1, 0;
0110 expRotToYAxis << 0, 0, -1, 0, 0, 0, 1, 0, 0;
0111 expRotToZAxis << 0, 1, 0, -1, 0, 0, 0, 0, 0;
0112
0113
0114 CHECK_CLOSE_ABS(irotToLocalXAxis, expRotToXAxis, 1e-15);
0115
0116
0117 CHECK_CLOSE_ABS(irotToLocalYAxis, expRotToYAxis, 1e-15);
0118
0119
0120 CHECK_CLOSE_ABS(irotToLocalZAxis, expRotToZAxis, 1e-15);
0121 }
0122 }