16#ifndef ALICEO2_COMMON_MATH_UTILS_
17#define ALICEO2_COMMON_MATH_UTILS_
32 return detail::to02Pi<float>(phi);
35GPUdi() double to02Pid(
double phi)
37 return detail::to02Pi<double>(phi);
42 detail::bringTo02Pi<float>(phi);
47 detail::bringTo02Pi<double>(phi);
52 return detail::toPMPiGen<float>(phi);
57 return detail::toPMPiGen<double>(phi);
62 detail::bringToPMPiGen<float>(phi);
67 detail::bringToPMPiGen<double>(phi);
72 return detail::to02PiGen<float>(phi);
77 return detail::to02PiGen<double>(phi);
82 detail::bringTo02PiGen<float>(phi);
87 detail::bringTo02PiGen<double>(phi);
92 return detail::toPMPi<float>(phi);
97 return detail::toPMPi<double>(phi);
102 return detail::bringToPMPi<float>(phi);
107 return detail::bringToPMPi<double>(phi);
112 detail::sincos<float>(ang,
s,
c);
115GPUdi()
void sincosd(
double ang,
double&
s,
double&
c)
117 detail::sincos<double>(ang,
s,
c);
141#ifndef GPUCA_GPUCODE_DEVICE
152GPUdi()
std::tuple<
float,
float> sincos(
float ang)
154 return detail::sincos<float>(ang);
157GPUdi()
std::tuple<
double,
double> sincosd(
double ang)
159 return detail::sincos<double>(ang);
174 detail::rotateZ<float>(xy,
alpha);
179 detail::rotateZ<double>(xy,
alpha);
185 return detail::angle2Sector<float>(phi);
190 return detail::angle2Sector<double>(phi);
195 return detail::sector2Angle<float>(sect);
200 return detail::sector2Angle<double>(sect);
205 return detail::angle2Alpha<float>(phi);
210 return detail::angle2Alpha<double>(phi);
215 return detail::fastATan2<float>(
y,
x);
218GPUhdi() double fastATan2d(
double y,
double x)
220 return detail::fastATan2<double>(
y,
x);
226 return detail::min<T>(
x,
y);
229GPUhdi() double mind(const
double x, const
double y)
231 return detail::min<double>(
x,
y);
237 return detail::max<T>(
x,
y);
240GPUhdi() double maxd(const
double x, const
double y)
242 return detail::max<double>(
x,
y);
247 return detail::sqrt<float>(
x);
252 return detail::sqrt<double>(
x);
257 return detail::abs<float>(
x);
262 return detail::abs<double>(
x);
265GPUdi() float asin(
float x)
267 return detail::asin<float>(
x);
270GPUdi() double asind(
double x)
272 return detail::asin<double>(
x);
275GPUdi() float atan(
float x)
277 return detail::atan<float>(
x);
280GPUdi() double atand(
double x)
282 return detail::atan<double>(
x);
285GPUdi() float atan2(
float y,
float x)
287 return detail::atan2<float>(
y,
x);
290GPUdi() double atan2d(
double y,
double x)
292 return detail::atan2<double>(
y,
x);
297 return detail::sin<float>(
x);
300GPUdi() double sind(
double x)
302 return detail::sin<double>(
x);
307 return detail::cos<float>(
x);
310GPUdi() double cosd(
double x)
312 return detail::cos<double>(
x);
317 return detail::tan<float>(
x);
320GPUdi() double tand(
double x)
322 return detail::tan<double>(
x);
327 return detail::twoPi<float>();
330GPUdi() double twoPid()
332 return detail::twoPi<double>();
337 return detail::pi<float>();
342 return detail::pi<double>();
347 return detail::nint<float>(
x);
352 return detail::nint<double>(
x);
355GPUdi() bool finite(
float x)
357 return detail::finite<float>(
x);
360GPUdi() bool finited(
double x)
362 return detail::finite<double>(
x);
365GPUdi() unsigned
int clz(
unsigned int val)
367 return detail::clz(
val);
370GPUdi() unsigned
int popcount(
unsigned int val)
372 return detail::popcount(
val);
377 return detail::log<float>(
x);
380GPUdi() double logd(
double x)
382 return detail::log<double>(
x);
385using detail::StatAccumulator;
389using detail::truncateFloatFraction;
GLfloat GLfloat GLfloat alpha
typedef void(APIENTRYP PFNGLCULLFACEPROC)(GLenum mode)
int numberOfBitsSet(uint32_t x)
constexpr uint32_t bit2Mask(T v)
void bringToPMPiGen(float &phi)
double angle2Alphad(double phi)
GPUdi() float to02Pi(float phi)
std::tuple< double, double > rotateZd(double xL, double yL, double snAlp, double csAlp)
std::tuple< double, double > rotateZInvd(double xG, double yG, double snAlp, double csAlp)
float float float float snAlp
void bringTo02PiGend(double &phi)
float float float float float csAlp
float angle2Alpha(float phi)
int angle2Sector(float phi)
void bringTo02PiGen(float &phi)
void bringToPMPid(double &phi)
double sector2Angled(int sect)
void bringToPMPiGend(double &phi)
float toPMPiGen(float phi)
float to02PiGen(float phi)
std::tuple< float, float > rotateZ(float xL, float yL, float snAlp, float csAlp)
GPUhdi() float fastATan2(float y
std::tuple< float, float > rotateZInv(float xG, float yG, float snAlp, float csAlp)
double to02PiGend(double phi)
float sector2Angle(int sect)
double toPMPiGend(double phi)
double toPMPid(double phi)
void bringToPMPi(float &phi)
int angle2Sectord(double phi)
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
Defining DataPointCompositeObject explicitly as copiable.