Warning, file /acts/Core/include/Acts/Utilities/AngleHelpers.hpp was not indexed
or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001
0002
0003
0004
0005
0006
0007
0008
0009 #pragma once
0010
0011 #include <cmath>
0012 #include <numbers>
0013
0014 namespace Acts::AngleHelpers {
0015
0016 template <typename Scalar>
0017 struct EtaThetaConversionTraits {};
0018
0019
0020
0021
0022 template <>
0023 struct EtaThetaConversionTraits<float> {
0024
0025 static constexpr float minTheta = 1e-6f;
0026
0027 static constexpr float maxTheta = std::numbers::pi_v<float> - minTheta;
0028
0029
0030 static constexpr float maxEta = 80.0f;
0031
0032 static constexpr float minEta = -maxEta;
0033 };
0034
0035
0036
0037
0038 template <>
0039 struct EtaThetaConversionTraits<double> {
0040
0041 static constexpr double minTheta = 1e-12;
0042
0043 static constexpr double maxTheta = std::numbers::pi - minTheta;
0044
0045
0046 static constexpr double maxEta = 700.0;
0047
0048 static constexpr double minEta = -maxEta;
0049 };
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059 template <typename Scalar>
0060 Scalar etaFromTheta(Scalar theta) {
0061 if (theta <= EtaThetaConversionTraits<Scalar>::minTheta) {
0062 return std::numeric_limits<Scalar>::infinity();
0063 }
0064 if (theta >= EtaThetaConversionTraits<Scalar>::maxTheta) {
0065 return -std::numeric_limits<Scalar>::infinity();
0066 }
0067
0068 return -std::log(std::tan(theta / 2));
0069 }
0070
0071
0072
0073
0074
0075
0076
0077
0078
0079 template <typename Scalar>
0080 Scalar thetaFromEta(Scalar eta) {
0081 if (eta <= EtaThetaConversionTraits<Scalar>::minEta) {
0082 return std::numbers::pi_v<Scalar>;
0083 }
0084 if (eta >= EtaThetaConversionTraits<Scalar>::maxEta) {
0085 return 0;
0086 }
0087
0088 return 2 * std::atan(std::exp(-eta));
0089 }
0090
0091 }