CMS 3D CMS Logo

PhiInterval.h
Go to the documentation of this file.
1 #ifndef GeometryVector_PhiInterval_H
2 #define GeometryVector_PhiInterval_H
5 
6 class PhiInterval {
7 public:
8  PhiInterval(float phi1, float phi2) {
9  phi2 = proxim(phi2, phi1);
10  constexpr float c1 = 2. * M_PI;
11  if (phi2 < phi1)
12  phi2 += c1;
13  auto dphi = 0.5f * (phi2 - phi1);
14  auto phi = phi1 + dphi;
15  x = std::cos(phi);
16  y = std::sin(phi);
17  dcos = std::cos(dphi);
18  }
19 
20  PhiInterval(float ix, float iy, float dphi) {
21  auto norm = 1.f / std::sqrt(ix * ix + iy * iy);
22  x = ix * norm;
23  y = iy * norm;
24  dcos = std::cos(dphi);
25  }
26 
27  template <typename T>
28  bool inside(Basic3DVector<T> const& v) const {
29  return inside(v.x(), v.y());
30  }
31 
32  bool inside(float ix, float iy) const { return ix * x + iy * y > dcos * std::sqrt(ix * ix + iy * iy); }
33 
34 private:
35  float x, y;
36  float dcos;
37 };
38 
39 #endif
float dcos
Definition: PhiInterval.h:36
bool inside(Basic3DVector< T > const &v) const
Definition: PhiInterval.h:28
PhiInterval(float ix, float iy, float dphi)
Definition: PhiInterval.h:20
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
constexpr T proxim(T b, T a)
Definition: normalizedPhi.h:14
T sqrt(T t)
Definition: SSEVec.h:19
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
#define M_PI
ALPAKA_FN_ACC ALPAKA_FN_INLINE uint32_t ix(uint32_t id)
PhiInterval(float phi1, float phi2)
Definition: PhiInterval.h:8
ALPAKA_FN_ACC ALPAKA_FN_INLINE uint32_t iy(uint32_t id)
bool inside(float ix, float iy) const
Definition: PhiInterval.h:32