8 #include "StandardModel.h"
12 inline static double pow2(
double x) {
return pow(x,2); }
26 const int AlphaStrong::NITER = 10;
29 const double AlphaStrong::MC = 1.5;
30 const double AlphaStrong::MB = 4.8;
31 const double AlphaStrong::MZ = 91.188;
35 const double AlphaStrong::SAFETYMARGIN1 = 1.07;
36 const double AlphaStrong::SAFETYMARGIN2 = 1.33;
44 void AlphaStrong::init(
double valueIn,
int orderIn) {
48 order = std::max( 0, std::min( 2, orderIn ) );
52 Lambda3Save = Lambda4Save = Lambda5Save = scale2Min = 0.;
55 }
else if (order == 1) {
56 Lambda5Save = MZ * exp( -6. * M_PI / (23. * valueRef) );
57 Lambda4Save = Lambda5Save * pow(MB/Lambda5Save, 2./25.);
58 Lambda3Save = Lambda4Save * pow(MC/Lambda4Save, 2./27.);
59 scale2Min = pow2(SAFETYMARGIN1 * Lambda3Save);
63 double b15 = 348. / 529.;
64 double b14 = 462. / 625.;
65 double b13 = 64. / 81.;
66 double b25 = 224687. / 242208.;
67 double b24 = 548575. / 426888.;
68 double b23 = 938709. / 663552.;
69 double logScale, loglogScale, correction, valueIter;
72 Lambda5Save = MZ * exp( -6. * M_PI / (23. * valueRef) );
73 for (
int iter = 0; iter < NITER; ++iter) {
74 logScale = 2. * log(MZ/Lambda5Save);
75 loglogScale = log(logScale);
76 correction = 1. - b15 * loglogScale / logScale
77 + pow2(b15 / logScale) * (pow2(loglogScale - 0.5) + b25 - 1.25);
78 valueIter = valueRef / correction;
79 Lambda5Save = MZ * exp( -6. * M_PI / (23. * valueIter) );
83 double logScaleB = 2. * log(MB/Lambda5Save);
84 double loglogScaleB = log(logScaleB);
85 double valueB = 12. * M_PI / (23. * logScaleB)
86 * (1. - b15 * loglogScaleB / logScaleB
87 + pow2(b15 / logScaleB) * (pow2(loglogScaleB - 0.5) + b25- 1.25) );
88 Lambda4Save = Lambda5Save;
89 for (
int iter = 0; iter < NITER; ++iter) {
90 logScale = 2. * log(MB/Lambda4Save);
91 loglogScale = log(logScale);
92 correction = 1. - b14 * loglogScale / logScale
93 + pow2(b14 / logScale) * (pow2(loglogScale - 0.5) + b24 - 1.25);
94 valueIter = valueB / correction;
95 Lambda4Save = MB * exp( -6. * M_PI / (25. * valueIter) );
99 double logScaleC = 2. * log(MC/Lambda4Save);
100 double loglogScaleC = log(logScaleC);
101 double valueC = 12. * M_PI / (25. * logScaleC)
102 * (1. - b14 * loglogScaleC / logScaleC
103 + pow2(b14 / logScaleC) * (pow2(loglogScaleC - 0.5) + b24 - 1.25) );
104 Lambda3Save = Lambda4Save;
105 for (
int iter = 0; iter < NITER; ++iter) {
106 logScale = 2. * log(MC/Lambda3Save);
107 loglogScale = log(logScale);
108 correction = 1. - b13 * loglogScale / logScale
109 + pow2(b13 / logScale) * (pow2(loglogScale - 0.5) + b23 - 1.25);
110 valueIter = valueC / correction;
111 Lambda3Save = MC * exp( -6. * M_PI / (27. * valueIter) );
113 scale2Min = pow2(SAFETYMARGIN2 * Lambda3Save);
119 Lambda3Save2 = pow2(Lambda3Save);
120 Lambda4Save2 = pow2(Lambda4Save);
121 Lambda5Save2 = pow2(Lambda5Save);
132 double AlphaStrong::alphaS(
double scale2)
const {
135 if (!isInit)
return 0.;
136 if (scale2 < scale2Min) scale2 = scale2Min;
139 if (scale2 == scale2Now && (order < 2 || lastCallToFull))
return valueNow;
141 lastCallToFull =
true;
148 }
else if (order == 1) {
150 valueNow = 12. * M_PI / (23. * log(scale2/Lambda5Save2));
151 else if (scale2 > mc2)
152 valueNow = 12. * M_PI / (25. * log(scale2/Lambda4Save2));
153 else valueNow = 12. * M_PI / (27. * log(scale2/Lambda3Save2));
157 double Lambda2, b0, b1, b2;
159 Lambda2 = Lambda5Save2;
162 b2 = 224687. / 242208.;
163 }
else if (scale2 > mc2) {
164 Lambda2 = Lambda4Save2;
167 b2 = 548575. / 426888.;
169 Lambda2 = Lambda3Save2;
172 b2 = 938709. / 663552.;
174 double logScale = log(scale2/Lambda2);
175 double loglogScale = log(logScale);
176 valueNow = 12. * M_PI / (b0 * logScale)
177 * ( 1. - b1 * loglogScale / logScale
178 + pow2(b1 / logScale) * (pow2(loglogScale - 0.5) + b2 - 1.25) );
191 double AlphaStrong::alphaS1Ord(
double scale2) {
194 if (!isInit)
return 0.;
195 if (scale2 < scale2Min) scale2 = scale2Min;
198 if (scale2 == scale2Now && (order < 2 || !lastCallToFull))
return valueNow;
200 lastCallToFull =
false;
209 valueNow = 12. * M_PI / (23. * log(scale2/Lambda5Save2));
210 else if (scale2 > mc2)
211 valueNow = 12. * M_PI / (25. * log(scale2/Lambda4Save2));
212 else valueNow = 12. * M_PI / (27. * log(scale2/Lambda3Save2));
224 double AlphaStrong::alphaS2OrdCorr(
double scale2) {
227 if (!isInit)
return 1.;
228 if (scale2 < scale2Min) scale2 = scale2Min;
231 if (order < 2)
return 1.;
234 double Lambda2, b0, b1, b2;
236 Lambda2 = Lambda5Save2;
239 b2 = 224687. / 242208.;
240 }
else if (scale2 > mc2) {
241 Lambda2 = Lambda4Save2;
244 b2 = 548575. / 426888.;
246 Lambda2 = Lambda3Save2;
249 b2 = 938709. / 663552.;
251 double logScale = log(scale2/Lambda2);
252 double loglogScale = log(logScale);
253 return ( 1. - b1 * loglogScale / logScale
254 + pow2(b1 / logScale) * (pow2(loglogScale - 0.5) + b2 - 1.25) );