QCDLoop
One-loop scalar Feynman integrals
maths.h
1 //
2 // QCDLoop 2016
3 //
4 // Authors: Stefano Carrazza: stefano.carrazza@cern.ch
5 // Keith Ellis: keith.ellis@durham.ac.uk
6 // Giulia Zanderighi: giulia.zanderighi@cern.ch
7 
8 #pragma once
9 
10 #include "types.h"
11 
16 namespace ql
17 {
18  // Logarithms
19  inline double Log(double const& x) { return std::log(x); }
20  inline qdouble Log(qdouble const& x) { return logq(x); }
21  inline complex Log(complex const& x) { return std::log(x); }
22  inline qcomplex Log(qcomplex const& x) { return clogq(x); }
23 
24  // Power
25  inline double Pow(double const& x, int const& a) { return std::pow(x, a); }
26  inline qdouble Pow(qdouble const& x, int const& a) { return powq(x,a); }
27  inline complex Pow(complex const& x, int const& a) { return std::pow(x,a); }
28  inline qcomplex Pow(qcomplex const& x, int const& a){ return cpowq(x,a); }
29 
30  // Root
31  inline double Sqrt(double const& x) { return std::sqrt(x); }
32  inline qdouble Sqrt(qdouble const& x) { return sqrtq(x); }
33  inline complex Sqrt(complex const& x) { return std::sqrt(x); }
34  inline qcomplex Sqrt(qcomplex const& x){ return csqrtq(x); }
35 
36  // Absolute value
37  inline double Abs(double const& x) { return std::fabs(x); }
38  inline qdouble Abs(qdouble const& x) { return fabsq(x);}
39  inline double Abs(complex const& x) { return std::fabs(x);}
40  inline qdouble Abs(qcomplex const& x) { return cabsq(x); }
41 
42  // Complex tools, imag, real and conj.
43  inline double Imag(double const& x) { UNUSED(x); return 0; }
44  inline qdouble Imag(qdouble const& x) { UNUSED(x); return 0.0q; }
45  inline double Imag(complex const& x) { return x.imag(); }
46  inline qdouble Imag(qcomplex const& x){ return cimagq(x);}
47 
48  inline double Real(double const& x) { return x; }
49  inline qdouble Real(qdouble const& x) { return x; }
50  inline double Real(complex const& x) { return x.real(); }
51  inline qdouble Real(qcomplex const& x) { return crealq(x); }
52 
53  inline complex Conjg(complex const& x) { return std::conj(x); }
54  inline qcomplex Conjg(qcomplex const& x){ return conjq(x); }
55 
56  // Comparison and sign operations
57  inline int Sign(double const& x) { return (double(0) < x) - (x < double(0)); }
58  inline int Sign(qdouble const& x){ return (qdouble(0) < x) -(x < qdouble(0));}
59 
60  inline double Max(double const& a, double const& b)
61  {
62  if (Abs(a) > Abs(b)) return a;
63  else return b;
64  }
65  inline qdouble Max(qdouble const& a, qdouble const& b)
66  {
67  if (Abs(a) > Abs(b)) return a;
68  else return b;
69  }
70  inline complex Max(complex const& a, complex const& b)
71  {
72  if (Abs(a) > Abs(b)) return a;
73  else return b;
74  }
75  inline qcomplex Max(qcomplex const& a, qcomplex const& b)
76  {
77  if (Abs(a) > Abs(b)) return a;
78  else return b;
79  }
80 
81  inline double Min(double const& a, double const& b)
82  {
83  if (Abs(a) > Abs(b)) return b;
84  else return a;
85  }
86  inline qdouble Min(qdouble const& a, qdouble const& b)
87  {
88  if (Abs(a) > Abs(b)) return b;
89  else return a;
90  }
91  inline complex Min(complex const& a, complex const& b)
92  {
93  if (Abs(a) > Abs(b)) return b;
94  else return a;
95  }
96  inline qcomplex Min(qcomplex const& a, qcomplex const& b)
97  {
98  if (Abs(a) > Abs(b)) return b;
99  else return a;
100  }
101 
102  // Heaviside function
103  inline double Htheta(double const& x) { return 0.5*(1+Sign(x)); }
104  inline qdouble Htheta(qdouble const& x){ return 0.5q*(1.0q+Sign(x));}
105 }
Definition: box.cc:14