fast pQCD calculations for hadron-induced processes
CRunDec.h
1 /*
2  CRunDec.h
3 
4  Header file for CRunDec.cpp
5 
6  Author: Barbara Schmidt
7 */
8 
9 /*
10 License:
11 
12 CRunDec is free software: you can redistribute it and/or modify
13 it under the terms of the GNU General Public License as published by
14 the Free Software Foundation, either version 3 of the License, or
15 (at your option) any later version.
16 
17 This program is distributed in the hope that it will be useful,
18 but WITHOUT ANY WARRANTY; without even the implied warranty of
19 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 GNU General Public License for more details.
21 
22 You should have received a copy of the GNU General Public License
23 along with this program. If not, see <http://www.gnu.org/licenses/>.
24 */
25 
26 
27 #ifndef CRUNDEC_H_
28 #define CRUNDEC_H_
29 
30 // Default return statement:
31 #define RETURN return(0);
32 // The following might be useful for Windows:
33 //#define RETURN system("PAUSE"); exit(1);
34 
35 
36 //
37 // K. Rabbertz, 20.10.2012:
38 // Commented out in original version from 13.08.2012
39 // for use within fastNLOReader
40 //
41 // Numerical values for input parameters:
42 /* #define asMz 0.1183 */
43 /* #define Mz 91.18 */
44 /* #define Mt 173.2 */
45 /* #define Mb 4.8 */
46 /* #define Mc 1.5 */
47 /* #define muc 1.279 */
48 /* #define mub 4.163 */
49 /* #define Mtau 1.777 */
50 
51 // Struct for triple {nf, Mth, Muth}:
52 struct TriplenfMmu{
53  int nf;
54  double Mth;
55  double muth;
56 };
57 
58 struct AsmMS{
59  double Asexact;
60  double mMSexact;
61 };
62 
63 // class declaration of CRunDec:
64 class CRunDec
65 {
66  private:
67  // DB/KR Moved initialization to CRunDec.cc to avoid compile problem on Mac
68  // reported by H. Prosper
69  // Aux. constants for implicit Runhe-Kutta-Procedure:
70  static const double a2, a3, a4, a5, a6;
71 
72  // Some constants:
73  static const double cf,ca,tr,B4,A4,A5,Zeta2,Zeta3,Zeta4,Zeta5;
74 
75  static const double b21, b31, b32, b41, b42, b43;
76  static const double b51, b52, b53, b54;
77  static const double b61, b62, b63;
78  static const double b64, b65;
79 
80  static const double c1, c2, c3, c4, c5;
81  static const double c6;
82 
83  static const double dc1, dc2, dc3;
84  static const double dc4, dc5, dc6;
85 
86  // Coefficients for diff. equations:
87  double Beta[4], B[4], Gamma[4], C[4], Nf;
88 
89  // Define constants (if not already done with constructor):
90  void SetConstants(int n);
91 
92  // R.h.s. of diff. equations:
93  friend double fSetdydx(CRunDec S,double x, double A,int nl);
94 
95  friend double fSetdydxa1(CRunDec S,double x, double A);
96  friend double fSetdydxM1(CRunDec S,double A, double M);
97 
98  friend double fSetdydxa2(CRunDec S,double x, double A);
99  friend double fSetdydxM2(CRunDec S,double A, double M);
100 
101  friend double fSetdydxa3(CRunDec S,double x, double A);
102  friend double fSetdydxM3(CRunDec S,double A, double M);
103 
104  friend double fSetdydxa4(CRunDec S,double x, double A);
105  friend double fSetdydxM4(CRunDec S,double A, double M);
106 
107  // Additional aux. functions:
108  int Abbruch(void);
109  double fSetAsL(double Lambda, double Mu, int nl, double AlphaS);
110  double fSetcx(double x, int nl);
111  double fOsFromMs1(double mu, double M);
112  double fOsFromMs2(double mu, double M, double nl);
113  double fOsFromMs3(double mu, double M, double nl);
114  double fMsFromOs1(double mu, double M);
115  double fMsFromOs2(double mu, double M, double nl);
116  double fMsFromOs3(double mu, double M, double nl);
117  double fZmM(double n);
118  double fZmInvM(double n);
119  double fDelta(double mOS,double mq[]);
120  double fMsFromRi1(void);
121  double fMsFromRi2(void);
122  double fMsFromRi3(void);
123  double fMumFromOs1(void);
124  double fMumFromOs2(void);
125  double fMumFromOs3(void);
126  double fRiFromMs(double alpha, double nl);
127  double fMsFromRi(double alpha, double nl);
128  double fHelpmOS2mMSit(double MS,double mOS, double mq[], double asmu,
129  double mu, int nl);
130  double fas5to6os(double alpha,double mass, double mu,double nlq, double nl);
131  double fas6to5os(double alpha,double mass, double mu,double nlq, double nl);
132  double fmq5to6os(double A,double mass,double mu,double nlq,double nl);
133  double fmq6to5os(double A,double mass,double mu,double nlq,double nl);
134 
135  double fRungeKuttaImpl(double &x, double y,double &htry, int nl,
136  double (*f)(CRunDec, double ,double, int));
137  double fRKSchritt(double x,double y,double h,int nl,double &yerr,
138  double (*f)(CRunDec, double ,double));
139 
140  public:
141  // constructor:
142  CRunDec();
143  CRunDec(int);
144 
145  // Arrays and structs to store data:
146  double mq[4];
147  TriplenfMmu nfMmu[4];
148  AsmMS AM;
149 
150  // Function to obtain current number of active flavours:
151  int GetNf();
152  // Function to set number of active flavours:
153  void SetNf(int nf);
154 
155  // Functions for the running of alpha_s:
156  double LamExpl(double asmu, double mu, int nloops);
157  double LamImpl(double asmu, double mu,int nloops);
158  double AlphasLam(double Lambda, double mu, int nloops);
159  double AlphasExact(double asmu0, double mu0, double mu1, int nloops);
160 
161  // Funktions for the runnung of mq and the
162  // various mass definitions:
163  double mMS2mMS(double mu0, double asmu0, double asmu1, int nloops);
164  double mMS2mOS(double MS, double mq[4], double asmu, double mu, int nloops);
165  double mOS2mMS(double mOS, double mq[], double asmu, double mu, int nloops);
166  double mMS2mSI(double mMS, double asmu, double mu, int nloops);
167  double mRI2mMS(double mRI, double asmu, int nloops);
168  double mMS2mRGI(double mMS, double asmu, int nloops);
169  double mRGI2mMS(double mRGI, double asmu, int nloops);
170  double mOS2mSI(double mOS, double mq[], double asM, int nloops);
171  double mOS2mMSrun(double mOS, double mq[], double asmu, double mu, int nloops);
172  double mMS2mOSrun(double mMS, double mq[], double asmu, double mu, int nloops);
173  double mMS2mRI(double mMS, double asmu, int nloops);
174  double mOS2mMSit(double mOS, double mq[], double asmu, double mu, int nloops);
175  double mMS2mRGImod(double mMS, double asmu, int nloops);
176  // Solve coupled differential equations for alpha_s and mq:
177  AsmMS AsmMSrunexact(double mmu, double asmu0, double mu0, double mu1,
178  int nloops);
179 
180  // Decoupling relations:
181  double DecAsDownOS(double asmu, double massth, double muth, int nloops);
182  double DecAsUpOS(double asmu, double massth, double muth, int nloops);
183  double DecMqUpOS(double mq, double asmu, double massth, double muth, int nloops);
184  double DecMqDownOS(double mq, double asmu, double massth, double muth, int nloops);
185 
186  // Running and decoupling:
187  double AlL2AlH(double asl,double mu1,TriplenfMmu decpar[],double mu2, int nloops);
188  double AlH2AlL(double ash,double mu1,TriplenfMmu decpar[],double mu2, int nloops);
189  double mL2mH(double mql,double asl,double mu1,TriplenfMmu decpar[],double mu2,
190  int nloops);
191  double mH2mL(double mqh,double ash,double mu1,TriplenfMmu decpar[],double mu2,
192  int nloops);
193 
194  // Overload functions:
195  double LamExpl(double asmu, double mu, int nf, int nloops);
196  double LamImpl(double asmu, double mu,int nf,int nloops);
197  double AlphasLam(double Lambda, double mu,int nf, int nloops);
198  double AlphasExact(double asmu0, double mu0, double mu1, int nf,int nloops);
199  double mMS2mMS(double mu0, double asmu1, double asmu0,int nf, int nloops);
200  AsmMS AsmMSrunexact(double mmu, double asmu0, double mu0, double mu1,
201  int nf, int nloops);
202  double mMS2mOS(double MS, double mq[], double asmu, double mu,int nf, int nloops);
203  double mOS2mMS(double mOS, double mq[], double asmu, double mu,int nf,int nloops);
204  double mMS2mSI(double mMS, double asmu, double mu,int nf, int nloops);
205  double mRI2mMS(double mRI, double asmu,int nf, int nloops);
206  double mMS2mRGI(double mMS, double asmu,int nf, int nloops);
207  double mRGI2mMS(double mRGI, double asmu,int nf, int nloops);
208  double mOS2mSI(double mOS, double mq[], double asM,int nf, int nloops);
209  double mOS2mMSrun(double mOS, double mq[], double asmu, double mu,int nf,
210  int nloops);
211  double mMS2mOSrun(double mMS, double mq[], double asmu, double mu,int nf,
212  int nloops);
213  double mMS2mRI(double mMS, double asmu,int nf, int nloops);
214  double mOS2mMSit(double mOS, double mq[],double asmu,double mu,int nf,int nloops);
215  double mMS2mRGImod(double mMS, double asmu,int nf, int nloops);
216  double DecAsDownOS(double asmu, double massth, double muth,int nf, int nloops);
217  double DecAsUpOS(double asmu, double massth, double muth, int nf, int nloops);
218  double DecMqUpOS(double mq, double asmu, double massth, double muth, int nf,
219  int nloops);
220  double DecMqDownOS(double mq, double asmu, double massth, double muth,int nf,
221  int nloops);
222 
223 };
224 
225 #endif
Definition: CRunDec.h:58
Definition: CRunDec.h:64
Definition: CRunDec.h:52