fast pQCD calculations for hadron-induced processes
fastNLOInterpolBase.h
1 // Author: Daniel Britzger
2 // DESY, 28/06/2013
3 
4 #ifndef __fastNLOInterpolBase__
5 #define __fastNLOInterpolBase__
6 
7 
8 #include "speaker.h"
9 #include <string>
10 #include <vector>
11 #include <cmath>
12 #include <utility>
13 
14 namespace fastNLOGrid {
15  enum GridType {
16  kLinear = 0, // linear grid
17  kLog10 = 1, // log10 grid
18  kLogLog025 = 2, // loglog grid (only valid for mu-grids)
19  kLogLog = 3, // loglog grid (only valid for mu-grids)
20  kSqrtLog10 = 4, // sqrt(logarithmic) grid (only valid for x-grids)
21  k3rdrtLog10 = 5, // log(x)^(1/3) (3rd root) (only valid for x-grids)
22  k4thrtLog10 = 6 // log(x)^(1/4) (4th root) (only valid for x-grids)
23  };
24 }
25 
26 
28 
29 public:
30 
31  fastNLOInterpolBase(double min, double max, int nMinNodes);
32  virtual ~fastNLOInterpolBase(void);
33 
34  const std::vector<std::pair<int,double> >& GetNodeValues(double val);
35  std::vector<std::pair<int,double> >* GetNodeValuesPtr(double val);
36 
37  void MakeGrids(fastNLOGrid::GridType type, int nNodes);
38  void MakeGridsWithNNodesPerMagnitude(fastNLOGrid::GridType type, int nNodes);
39  void RemoveLastNode();
40 
41  void PrintGrid();
42  const std::vector<double>& GetGrid() const { return fgrid;}
43  const std::vector<double>* GetGridPtr() const { return &fgrid;}
44  const std::vector<double>& GetHGrid() const { return fHgrid;}
45  double GetDelta(double);
46  bool CheckX(double&);
47 
48  static fastNLOGrid::GridType TranslateGridType(std::string in);
49 
50 protected:
51 
52  void SetGrid(std::vector<double> grid);
53  void SetHGrid(std::vector<double> grid);
54  void MakeGrids(double min, double max, int nNodes);
55  std::vector<double> MakeGridFromHGrid(std::vector<double> g);
56  std::vector<double> MakeLinearGrid(double min, double max, int nNodes);
57 
58  //virtual std::vector<std::pair<int,double> > CalcNodeValues(double val) = 0;
59  virtual void CalcNodeValues(std::vector<std::pair<int,double> >& nodes, double val) = 0;
60 
61  int FindLargestPossibleNode(double);
62 
63  inline double Function_loglog025( double mu ){
64  // function H(mu) = log(log( mu / 0.25 ))
65  return log(log(mu/0.25));}
66  inline double Function_loglog025_inv( double mu ){
67  // inverse of function H(mu) = log(log( mu / 0.25 ))
68  return 0.25*exp(exp(mu));}
69  inline double Function_loglog( double mu ){
70  // function H(mu) = log(log( mu ))
71  return log(log(mu));}
72  inline double Function_loglog_inv( double mu ){
73  // inverse of function H(mu) = log(log( mu ))
74  return exp(exp(mu));}
75  inline double Function_x( double mu ){
76  // function H(mu) = x
77  return mu;}
78  inline double Function_x_inv( double mu ){
79  // inverse of function H(mu) = x;
80  return mu;}
81  inline double Function_log10( double x ){return log10(x);}
82  inline double Function_log10_inv( double x ){return pow(10,x);}
83  inline double Function_sqrtlog10( double x ){return -sqrt(-log10(x));}
84  inline double Function_sqrtlog10_inv( double x ){return pow(10,-pow(x,2));}
85  inline double Function_3rdrtlog10( double mu ){return -pow(fabs(log10(mu)),1./3.);}
86  inline double Function_3rdrtlog10_inv( double mu ){return pow(10,-pow(fabs(mu),3));}
87  inline double Function_4thrtlog10( double mu ){return -pow(fabs(log10(mu)),0.25);}
88  inline double Function_4thrtlog10_inv( double mu ){return pow(10,-pow(mu,4));}
89 
90  std::vector<double> HGrid_loglog025_inv(std::vector<double> grid);
91  std::vector<double> HGrid_loglog_inv(std::vector<double> grid);
92  std::vector<double> HGrid_log10_inv(std::vector<double> grid);
93  std::vector<double> HGrid_sqrtlog10_inv(std::vector<double> grid);
94  std::vector<double> HGrid_4thrtlog10_inv(std::vector<double> grid);
95  std::vector<double> HGrid_3rdrtlog10_inv(std::vector<double> grid);
96  int GetNMod() const {return fnmod;}
97  double GetHx(double);
98 
99 protected:
100  std::vector<std::pair<int,double> > fNodes;
101 
102  int fNMinNodes;
103  double fvalmin;
104  double fvalmax;
105  double fLastVal;
106  bool fLastGridPointWasRemoved; // odd boolean to agree with original code;
107  fastNLOGrid::GridType fdm; // distance measure
108  std::vector<double> fgrid;
109  std::vector<double> fHgrid;
110  int fnmod ; // variable for final nodes. Has to be filled by inherited algorithm
111 
112 };
113 
114 #endif
Definition: speaker.h:96
Definition: fastNLOInterpolBase.h:14
Definition: fastNLOInterpolBase.h:27