Back to home page

Project CMSSW displayed by LXR

 
 

    


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   // reduce to [-pi,pi]
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 }  // namespace cms::alpakatools
0034 
0035 #endif