File indexing completed on 2025-01-27 02:50:14
0001 #ifndef HeterogeneousCore_AlpakaMath_deltaPhi_h
0002 #define HeterogeneousCore_AlpakaMath_deltaPhi_h
0003
0004 #include <alpaka/alpaka.hpp>
0005
0006 namespace cms::alpakatools {
0007
0008
0009 template <typename TAcc, std::floating_point T>
0010 ALPAKA_FN_HOST_ACC inline T reducePhiRange(TAcc const& acc, T x) {
0011 constexpr T o2pi = T{1.} / (T{2.} * std::numbers::pi_v<T>);
0012 if (alpaka::math::abs(acc, x) <= std::numbers::pi_v<T>)
0013 return x;
0014 T n = alpaka::math::round(acc, x * o2pi);
0015 return x - n * T{2.} * std::numbers::pi_v<T>;
0016 }
0017
0018 template <typename TAcc, typename T>
0019 ALPAKA_FN_HOST_ACC inline T phi(TAcc const& acc, T x, T y) {
0020 return reducePhiRange(acc, std::numbers::pi_v<T> + alpaka::math::atan2(acc, -y, -x));
0021 }
0022
0023 template <typename TAcc, typename T>
0024 ALPAKA_FN_HOST_ACC inline T deltaPhi(TAcc const& acc, T x1, T y1, T x2, T y2) {
0025 return reducePhiRange(acc, alpaka::math::atan2(acc, -y2, -x2) - alpaka::math::atan2(acc, -y1, -x1));
0026 }
0027
0028 template <typename TAcc, typename T>
0029 ALPAKA_FN_HOST_ACC inline T deltaPhi(TAcc const& acc, T phi1, T phi2) {
0030 return reducePhiRange(acc, phi1 - phi2);
0031 }
0032
0033 }
0034
0035 #endif