a Code for the Combination of Indirect and Direct Constraints on High Energy Physics Models Logo
EWSMcache.cpp
Go to the documentation of this file.
1/*
2 * Copyright (C) 2012 HEPfit Collaboration
3 *
4 *
5 * For the licensing terms see doc/COPYING.
6 */
7
8#include <cstdlib>
9#include <iostream>
10#include <iomanip>
11#include <stdexcept>
12#include <gsl/gsl_sf.h>
13#include "EWSMcache.h"
14
16: SM(SM_i), PV(true)
17{
18 FlagDebug = false;
19 FlagCacheInEWSMcache = true; // use caches in the current class
20 //FlagCacheInEWSMcache = false;// do not use caches in the current class (for test)
21
22 log2 = log(2.0);
23
24 /* zeta functions */
25 zeta2 = gsl_sf_zeta_int(2);
26 zeta3 = gsl_sf_zeta_int(3);
27 zeta4 = gsl_sf_zeta_int(4);
28 zeta5 = gsl_sf_zeta_int(5);
29
30 /* Constants for three-loop contribution */
31 double Cl2_Pi_3 = Clausen.Cl2(M_PI / 3.0);
32 S2 = 4.0 / 9.0 / sqrt(3.0) * Cl2_Pi_3;
33 D3 = 6.0 * zeta3 - 15.0 / 4.0 * zeta4 - 6.0 * Cl2_Pi_3*Cl2_Pi_3;
34 B4 = -1.76280008707377;
35 //double Li4_1_2 = ??;
36 //B4 = 16.0*Li4_1_2 - 4.0*zeta2*log2*log2 + 2.0/3.0*pow(log2,4.0) - 13.0/2.0*zeta4;
37
38 // Initializations of the cache
39 for (int i = 0; i < 12; ++i) {
40 mf_atMz_cache[i] = 0.0;
41 for (int j = 0; j < StandardModel::NumSMParamsForEWPO; ++j)
42 mf_atMz_params_cache[i][j] = 0.0;
43 }
44}
45
46
48
49double EWSMcache::mf(const Particle f, const double mu, const orders order) const
50{
51 if (f.is("TOP"))
52 return SM.getMtpole(); // the pole mass
53 else if (f.is("BOTTOM") && !FlagDebug) {
54 /* These codes are slow and not effective. */
55 //if (mu == SM.getMz()) {
56 // if (FlagCacheInEWSMcache && order == FULLNNLO)
57 // if (SM.checkSMparams(mf_atMz_params_cache[f.getIndex()]))
58 // return mf_atMz_cache[f.getIndex()];
59 // mf_atMz_cache[f.getIndex()] = SM.Mrun(mu, f.getMass_scale(), f.getMass(), order);
60 // return mf_atMz_cache[f.getIndex()];
61 //}
62 return SM.Mrun(mu, f.getMass_scale(), f.getMass(), QCD::BOTTOM, order);
63 } else if (f.is("CHARM") && !FlagDebug) {
64 return SM.Mrun(mu, f.getMass_scale(), f.getMass(), QCD::CHARM, order);
65 } else if (f.is("STRANGE") && !FlagDebug) {
66 return SM.Mrun(mu, f.getMass_scale(), f.getMass(), QCD::STRANGE, order);
67 } else if (f.is("UP") && !FlagDebug) {
68 return SM.Mrun(mu, f.getMass_scale(), f.getMass(), QCD::UP, order);
69 } else if (f.is("DOWN") && !FlagDebug) {
70 return SM.Mrun(mu, f.getMass_scale(), f.getMass(), QCD::DOWN, order);
71 } else
72 return f.getMass();
73}
74
75
77
79{
80 int NumPar = 2;
81 double params[] = {SM.getMz(), mf(SM.getLeptons(SM.ELECTRON))};
82
83 if (CacheCheck(logMZtoME_cache, NumPar, params))
84 return logMZtoME_cache[NumPar];
85 else {
86 double newResult = log(SM.getMz() / mf(SM.getLeptons(SM.ELECTRON)));
87 newCacheForDouble(logMZtoME_cache, NumPar, params, newResult);
88 return newResult;
89 }
90}
91
93{
94 int NumPar = 2;
95 double params[] = {SM.getMz(), mf(SM.getLeptons(SM.MU))};
96
97 if (CacheCheck(logMZtoMMU_cache, NumPar, params))
98 return logMZtoMMU_cache[NumPar];
99 else {
100 double newResult = log(SM.getMz() / mf(SM.getLeptons(SM.MU)));
101 newCacheForDouble(logMZtoMMU_cache, NumPar, params, newResult);
102 return newResult;
103 }
104}
105
107{
108 int NumPar = 2;
109 double params[] = {SM.getMz(), mf(SM.getLeptons(SM.TAU))};
110
111 if (CacheCheck(logMZtoMTAU_cache, NumPar, params))
112 return logMZtoMTAU_cache[NumPar];
113 else {
114 double newResult = log(SM.getMz() / mf(SM.getLeptons(SM.TAU)));
115 newCacheForDouble(logMZtoMTAU_cache, NumPar, params, newResult);
116 return newResult;
117 }
118}
119
121{
122 int NumPar = 2;
123 double params[] = {SM.getMz(), SM.getMtpole()};
124
125 if (CacheCheck(logMZtoMTOP_cache, NumPar, params))
126 return logMZtoMTOP_cache[NumPar];
127 else {
128 double newResult = log(SM.getMz() / SM.getMtpole());
129 newCacheForDouble(logMZtoMTOP_cache, NumPar, params, newResult);
130 return newResult;
131 }
132}
133
135{
136 int NumPar = 2;
137 double params[] = {SM.getMtpole(), SM.getMHl()};
138
139 if (CacheCheck(logMTOPtoMH_cache, NumPar, params))
140 return logMTOPtoMH_cache[NumPar];
141 else {
142 double newResult = log(SM.getMtpole() / SM.getMHl());
143 newCacheForDouble(logMTOPtoMH_cache, NumPar, params, newResult);
144 return newResult;
145 }
146}
147
148double EWSMcache::log_cW2(const double Mw_i) const
149{
150 int NumPar = 2;
151 double params[] = {SM.getMz(), Mw_i};
152
153 if (CacheCheck(log_cW2_cache, NumPar, params))
154 return log_cW2_cache[NumPar];
155 else {
156 double newResult = log(SM.cW2(Mw_i));
157 newCacheForDouble(log_cW2_cache, NumPar, params, newResult);
158 return newResult;
159 }
160}
161
162double EWSMcache::Li2_MW2toMTOP2(const double Mw_i) const
163{
164 int NumPar = 2;
165 double params[] = {Mw_i, SM.getMtpole()};
166
167 if (CacheCheck(Li2_MW2toMTOP2_cache, NumPar, params))
168 return Li2_MW2toMTOP2_cache[NumPar];
169 else {
170 double newResult = PolyLog.Li2(Mw_i * Mw_i / SM.getMtpole() / SM.getMtpole()).real();
171 newCacheForDouble(Li2_MW2toMTOP2_cache, NumPar, params, newResult);
172 return newResult;
173 }
174}
175
176double EWSMcache::Li3_MW2toMTOP2(const double Mw_i) const
177{
178 int NumPar = 2;
179 double params[] = {Mw_i, SM.getMtpole()};
180
181 if (CacheCheck(Li3_MW2toMTOP2_cache, NumPar, params))
182 return Li3_MW2toMTOP2_cache[NumPar];
183 else {
184 double newResult = PolyLog.Li3(Mw_i * Mw_i / SM.getMtpole() / SM.getMtpole());
185 newCacheForDouble(Li3_MW2toMTOP2_cache, NumPar, params, newResult);
186 return newResult;
187 }
188}
189
190double EWSMcache::Li3_for_F1(const double Mw_i) const
191{
192 int NumPar = 2;
193 double params[] = {Mw_i, SM.getMtpole()};
194
195 if (CacheCheck(Li3_for_F1_cache, NumPar, params))
196 return Li3_for_F1_cache[NumPar];
197 else {
198 double tmp = Mw_i * Mw_i / SM.getMtpole() / SM.getMtpole();
199 double newResult = PolyLog.Li3(-tmp / (1.0 - tmp));
200 newCacheForDouble(Li3_for_F1_cache, NumPar, params, newResult);
201 return newResult;
202 }
203}
204
205double EWSMcache::A0_Mz2_Mw2(const double Mw_i) const
206{
207 int NumPar = 2;
208 double params[] = {SM.getMz(), Mw_i};
209
210 if (CacheCheck(A0_Mz2_Mw2_cache, NumPar, params))
211 return A0_Mz2_Mw2_cache[NumPar];
212 else {
213 double newResult = PV.A0(SM.getMz() * SM.getMz(), Mw_i * Mw_i);
214 newCacheForDouble(A0_Mz2_Mw2_cache, NumPar, params, newResult);
215 return newResult;
216 }
217}
218
220{
221 int NumPar = 2;
222 double params[] = {SM.getMz(), SM.getMHl()};
223
224 if (CacheCheck(A0_Mz2_mh2_cache, NumPar, params))
225 return A0_Mz2_mh2_cache[NumPar];
226 else {
227 double newResult = PV.A0(SM.getMz() * SM.getMz(), SM.getMHl() * SM.getMHl());
228 newCacheForDouble(A0_Mz2_mh2_cache, NumPar, params, newResult);
229 return newResult;
230 }
231}
232
233double EWSMcache::A0_Mw2_Mz2(const double Mw_i) const
234{
235 int NumPar = 2;
236 double params[] = {Mw_i, SM.getMz()};
237
238 if (CacheCheck(A0_Mw2_Mz2_cache, NumPar, params))
239 return A0_Mw2_Mz2_cache[NumPar];
240 else {
241 double newResult = PV.A0(Mw_i*Mw_i, SM.getMz() * SM.getMz());
242 newCacheForDouble(A0_Mw2_Mz2_cache, NumPar, params, newResult);
243 return newResult;
244 }
245}
246
247double EWSMcache::A0_Mw2_mh2(const double Mw_i) const
248{
249 int NumPar = 2;
250 double params[] = {Mw_i, SM.getMHl()};
251
252 if (CacheCheck(A0_Mw2_mh2_cache, NumPar, params))
253 return A0_Mw2_mh2_cache[NumPar];
254 else {
255 double newResult = PV.A0(Mw_i*Mw_i, SM.getMHl() * SM.getMHl());
256 newCacheForDouble(A0_Mw2_mh2_cache, NumPar, params, newResult);
257 return newResult;
258 }
259}
260
262{
263 int NumPar = 1;
264 double params[] = {SM.getMz()};
265
266 if (CacheCheck(A0_Mz2_Mz2_cache, NumPar, params))
267 return A0_Mz2_Mz2_cache[NumPar];
268 else {
269 double newResult = PV.A0(SM.getMz() * SM.getMz(), SM.getMz() * SM.getMz());
270 newCacheForDouble(A0_Mz2_Mz2_cache, NumPar, params, newResult);
271 return newResult;
272 }
273}
274
275double EWSMcache::A0_Mw2_Mw2(const double Mw_i) const
276{
277 int NumPar = 1;
278 double params[] = {Mw_i};
279
280 if (CacheCheck(A0_Mw2_Mw2_cache, NumPar, params))
281 return A0_Mw2_Mw2_cache[NumPar];
282 else {
283 double newResult = PV.A0(Mw_i*Mw_i, Mw_i * Mw_i);
284 newCacheForDouble(A0_Mw2_Mw2_cache, NumPar, params, newResult);
285 return newResult;
286 }
287}
288
289gslpp::complex EWSMcache::B0_Mz2_Mw2_mh2_Mw2(const double Mw_i) const
290{
291 int NumPar = 3;
292 double params[] = {SM.getMz(), Mw_i, SM.getMHl()};
293
294 if (CacheCheck(B0_Mz2_Mw2_mh2_Mw2_cache, NumPar, params))
295 return gslpp::complex(B0_Mz2_Mw2_mh2_Mw2_cache[NumPar],
296 B0_Mz2_Mw2_mh2_Mw2_cache[NumPar + 1], false);
297 else {
298 gslpp::complex newResult = PV.B0(SM.getMz() * SM.getMz(), Mw_i*Mw_i, SM.getMHl() * SM.getMHl(), Mw_i * Mw_i);
299 newCacheForComplex(B0_Mz2_Mw2_mh2_Mw2_cache, NumPar, params, newResult);
300 return newResult;
301 }
302}
303
304gslpp::complex EWSMcache::B0_Mz2_0_mh2_Mw2(const double Mw_i) const
305{
306 int NumPar = 3;
307 double params[] = {SM.getMz(), SM.getMHl(), Mw_i};
308
309 if (CacheCheck(B0_Mz2_0_mh2_Mw2_cache, NumPar, params))
310 return gslpp::complex(B0_Mz2_0_mh2_Mw2_cache[NumPar],
311 B0_Mz2_0_mh2_Mw2_cache[NumPar + 1], false);
312 else {
313 gslpp::complex newResult = PV.B0(SM.getMz() * SM.getMz(), 0.0, SM.getMHl() * SM.getMHl(), Mw_i * Mw_i);
314 newCacheForComplex(B0_Mz2_0_mh2_Mw2_cache, NumPar, params, newResult);
315 return newResult;
316 }
317}
318
319gslpp::complex EWSMcache::B0_Mw2_Mz2_Mt2_Mt2(const double Mw_i) const
320{
321 int NumPar = 3;
322 double params[] = {Mw_i, SM.getMz(), SM.getMtpole()};
323
324 if (CacheCheck(B0_Mw2_Mz2_Mt2_Mt2_cache, NumPar, params))
325 return gslpp::complex(B0_Mw2_Mz2_Mt2_Mt2_cache[NumPar],
326 B0_Mw2_Mz2_Mt2_Mt2_cache[NumPar + 1], false);
327 else {
328 gslpp::complex newResult = PV.B0(Mw_i*Mw_i, SM.getMz() * SM.getMz(), SM.getMtpole() * SM.getMtpole(), SM.getMtpole() * SM.getMtpole());
329 newCacheForComplex(B0_Mw2_Mz2_Mt2_Mt2_cache, NumPar, params, newResult);
330 return newResult;
331 }
332}
333
334gslpp::complex EWSMcache::B0_Mz2_Mz2_Mw2_Mw2(const double Mw_i) const
335{
336 int NumPar = 2;
337 double params[] = {SM.getMz(), Mw_i};
338
339 if (CacheCheck(B0_Mz2_Mz2_Mw2_Mw2_cache, NumPar, params))
340 return gslpp::complex(B0_Mz2_Mz2_Mw2_Mw2_cache[NumPar],
341 B0_Mz2_Mz2_Mw2_Mw2_cache[NumPar + 1], false);
342 else {
343 gslpp::complex newResult = PV.B0(SM.getMz() * SM.getMz(), SM.getMz() * SM.getMz(), Mw_i*Mw_i, Mw_i * Mw_i);
344 newCacheForComplex(B0_Mz2_Mz2_Mw2_Mw2_cache, NumPar, params, newResult);
345 return newResult;
346 }
347}
348
349gslpp::complex EWSMcache::B0_Mz2_Mz2_mh2_Mz2() const
350{
351 int NumPar = 2;
352 double params[] = {SM.getMz(), SM.getMHl()};
353
354 if (CacheCheck(B0_Mz2_Mz2_mh2_Mz2_cache, NumPar, params))
355 return gslpp::complex(B0_Mz2_Mz2_mh2_Mz2_cache[NumPar],
356 B0_Mz2_Mz2_mh2_Mz2_cache[NumPar + 1], false);
357 else {
358 gslpp::complex newResult = PV.B0(SM.getMz() * SM.getMz(), SM.getMz() * SM.getMz(), SM.getMHl() * SM.getMHl(), SM.getMz() * SM.getMz());
359 newCacheForComplex(B0_Mz2_Mz2_mh2_Mz2_cache, NumPar, params, newResult);
360 return newResult;
361 }
362}
363
364gslpp::complex EWSMcache::B0_Mz2_Mw2_Mz2_Mw2(const double Mw_i) const
365{
366 int NumPar = 2;
367 double params[] = {SM.getMz(), Mw_i};
368
369 if (CacheCheck(B0_Mz2_Mw2_Mz2_Mw2_cache, NumPar, params))
370 return gslpp::complex(B0_Mz2_Mw2_Mz2_Mw2_cache[NumPar],
371 B0_Mz2_Mw2_Mz2_Mw2_cache[NumPar + 1], false);
372 else {
373 gslpp::complex newResult = PV.B0(SM.getMz() * SM.getMz(), Mw_i*Mw_i, SM.getMz() * SM.getMz(), Mw_i * Mw_i);
374 newCacheForComplex(B0_Mz2_Mw2_Mz2_Mw2_cache, NumPar, params, newResult);
375 return newResult;
376 }
377}
378
379gslpp::complex EWSMcache::B0_Mz2_Mw2_0_Mw2(const double Mw_i) const
380{
381 int NumPar = 2;
382 double params[] = {SM.getMz(), Mw_i};
383
384 if (CacheCheck(B0_Mz2_Mw2_0_Mw2_cache, NumPar, params))
385 return gslpp::complex(B0_Mz2_Mw2_0_Mw2_cache[NumPar],
386 B0_Mz2_Mw2_0_Mw2_cache[NumPar + 1], false);
387 else {
388 gslpp::complex newResult = PV.B0(SM.getMz() * SM.getMz(), Mw_i*Mw_i, 0.0, Mw_i * Mw_i);
389 newCacheForComplex(B0_Mz2_Mw2_0_Mw2_cache, NumPar, params, newResult);
390 return newResult;
391 }
392}
393
394gslpp::complex EWSMcache::B0_Mz2_0_Mz2_Mw2(const double Mw_i) const
395{
396 int NumPar = 2;
397 double params[] = {SM.getMz(), Mw_i};
398
399 if (CacheCheck(B0_Mz2_0_Mz2_Mw2_cache, NumPar, params))
400 return gslpp::complex(B0_Mz2_0_Mz2_Mw2_cache[NumPar],
401 B0_Mz2_0_Mz2_Mw2_cache[NumPar + 1], false);
402 else {
403 gslpp::complex newResult = PV.B0(SM.getMz() * SM.getMz(), 0.0, SM.getMz() * SM.getMz(), Mw_i * Mw_i);
404 newCacheForComplex(B0_Mz2_0_Mz2_Mw2_cache, NumPar, params, newResult);
405 return newResult;
406 }
407}
408
409gslpp::complex EWSMcache::B0_Mz2_0_0_Mw2(const double Mw_i) const
410{
411 int NumPar = 2;
412 double params[] = {SM.getMz(), Mw_i};
413
414 if (CacheCheck(B0_Mz2_0_0_Mw2_cache, NumPar, params))
415 return gslpp::complex(B0_Mz2_0_0_Mw2_cache[NumPar],
416 B0_Mz2_0_0_Mw2_cache[NumPar + 1], false);
417 else {
418 gslpp::complex newResult = PV.B0(SM.getMz() * SM.getMz(), 0.0, 0.0, Mw_i * Mw_i);
419 newCacheForComplex(B0_Mz2_0_0_Mw2_cache, NumPar, params, newResult);
420 return newResult;
421 }
422}
423
424gslpp::complex EWSMcache::B0_Mw2_Mz2_Mw2_Mw2(const double Mw_i) const
425{
426 int NumPar = 2;
427 double params[] = {Mw_i, SM.getMz()};
428
429 if (CacheCheck(B0_Mw2_Mz2_Mw2_Mw2_cache, NumPar, params))
430 return gslpp::complex(B0_Mw2_Mz2_Mw2_Mw2_cache[NumPar],
431 B0_Mw2_Mz2_Mw2_Mw2_cache[NumPar + 1], false);
432 else {
433 gslpp::complex newResult = PV.B0(Mw_i*Mw_i, SM.getMz() * SM.getMz(), Mw_i*Mw_i, Mw_i * Mw_i);
434 newCacheForComplex(B0_Mw2_Mz2_Mw2_Mw2_cache, NumPar, params, newResult);
435 return newResult;
436 }
437}
438
439gslpp::complex EWSMcache::B0_Mw2_Mw2_Mz2_Mw2(const double Mw_i) const
440{
441 int NumPar = 2;
442 double params[] = {Mw_i, SM.getMz()};
443
444 if (CacheCheck(B0_Mw2_Mw2_Mz2_Mw2_cache, NumPar, params))
445 return gslpp::complex(B0_Mw2_Mw2_Mz2_Mw2_cache[NumPar],
446 B0_Mw2_Mw2_Mz2_Mw2_cache[NumPar + 1], false);
447 else {
448 gslpp::complex newResult = PV.B0(Mw_i*Mw_i, Mw_i*Mw_i, SM.getMz() * SM.getMz(), Mw_i * Mw_i);
449 newCacheForComplex(B0_Mw2_Mw2_Mz2_Mw2_cache, NumPar, params, newResult);
450 return newResult;
451 }
452}
453
454gslpp::complex EWSMcache::B0_Mw2_Mw2_mh2_Mw2(const double Mw_i) const
455{
456 int NumPar = 2;
457 double params[] = {Mw_i, SM.getMHl()};
458
459 if (CacheCheck(B0_Mw2_Mw2_mh2_Mw2_cache, NumPar, params))
460 return gslpp::complex(B0_Mw2_Mw2_mh2_Mw2_cache[NumPar],
461 B0_Mw2_Mw2_mh2_Mw2_cache[NumPar + 1], false);
462 else {
463 gslpp::complex newResult = PV.B0(Mw_i*Mw_i, Mw_i*Mw_i, SM.getMHl() * SM.getMHl(), Mw_i * Mw_i);
464 newCacheForComplex(B0_Mw2_Mw2_mh2_Mw2_cache, NumPar, params, newResult);
465 return newResult;
466 }
467}
468
469gslpp::complex EWSMcache::B0_Mw2_Mw2_0_Mw2(const double Mw_i) const
470{
471 int NumPar = 1;
472 double params[] = {Mw_i};
473
474 if (CacheCheck(B0_Mw2_Mw2_0_Mw2_cache, NumPar, params))
475 return gslpp::complex(B0_Mw2_Mw2_0_Mw2_cache[NumPar],
476 B0_Mw2_Mw2_0_Mw2_cache[NumPar + 1], false);
477 else {
478 gslpp::complex newResult = PV.B0(Mw_i*Mw_i, Mw_i*Mw_i, 0.0, Mw_i * Mw_i);
479 newCacheForComplex(B0_Mw2_Mw2_0_Mw2_cache, NumPar, params, newResult);
480 return newResult;
481 }
482}
483
484gslpp::complex EWSMcache::B0_Mz2_Mz2_mf2_mf2(const Particle f) const
485{
486 int NumPar = 2;
487 double params[] = {SM.getMz(), mf(f, SM.getMz())};
488 int ind = f.getIndex();
489 if (CacheCheck(B0_Mz2_Mz2_mf2_mf2_cache[ind], NumPar, params))
490 return gslpp::complex(B0_Mz2_Mz2_mf2_mf2_cache[ind][NumPar],
491 B0_Mz2_Mz2_mf2_mf2_cache[ind][NumPar + 1], false);
492 else {
493 gslpp::complex newResult = PV.B0(SM.getMz() * SM.getMz(), SM.getMz() * SM.getMz(), mf2(f, SM.getMz()), mf2(f, SM.getMz()));
494 newCacheForComplex(B0_Mz2_Mz2_mf2_mf2_cache[ind], NumPar, params, newResult);
495 return newResult;
496 }
497}
498
499gslpp::complex EWSMcache::B0p_Mz2_0_mh2_Mw2(const double Mw_i) const
500{
501 int NumPar = 3;
502 double params[] = {SM.getMz(), SM.getMHl(), Mw_i};
503
504 if (CacheCheck(B0p_Mz2_0_mh2_Mw2_cache, NumPar, params))
505 return gslpp::complex(B0p_Mz2_0_mh2_Mw2_cache[NumPar],
506 B0p_Mz2_0_mh2_Mw2_cache[NumPar + 1], false);
507 else {
508 gslpp::complex newResult = PV.B0p(SM.getMz() * SM.getMz(), 0.0, SM.getMHl() * SM.getMHl(), Mw_i * Mw_i);
509 newCacheForComplex(B0p_Mz2_0_mh2_Mw2_cache, NumPar, params, newResult);
510 return newResult;
511 }
512}
513
514gslpp::complex EWSMcache::B0p_Mz2_Mz2_mh2_Mz2() const
515{
516 int NumPar = 2;
517 double params[] = {SM.getMz(), SM.getMHl()};
518
519 if (CacheCheck(B0p_Mz2_Mz2_mh2_Mz2_cache, NumPar, params))
520 return gslpp::complex(B0p_Mz2_Mz2_mh2_Mz2_cache[NumPar],
521 B0p_Mz2_Mz2_mh2_Mz2_cache[NumPar + 1], false);
522 else {
523 gslpp::complex newResult = PV.B0p(SM.getMz() * SM.getMz(), SM.getMz() * SM.getMz(), SM.getMHl() * SM.getMHl(), SM.getMz() * SM.getMz());
524 newCacheForComplex(B0p_Mz2_Mz2_mh2_Mz2_cache, NumPar, params, newResult);
525 return newResult;
526 }
527}
528
529gslpp::complex EWSMcache::B0p_Mz2_0_Mz2_Mw2(const double Mw_i) const
530{
531 int NumPar = 2;
532 double params[] = {SM.getMz(), Mw_i};
533
534 if (CacheCheck(B0p_Mz2_0_Mz2_Mw2_cache, NumPar, params))
535 return gslpp::complex(B0p_Mz2_0_Mz2_Mw2_cache[NumPar],
536 B0p_Mz2_0_Mz2_Mw2_cache[NumPar + 1], false);
537 else {
538 gslpp::complex newResult = PV.B0p(SM.getMz() * SM.getMz(), 0.0, SM.getMz() * SM.getMz(), Mw_i * Mw_i);
539 newCacheForComplex(B0p_Mz2_0_Mz2_Mw2_cache, NumPar, params, newResult);
540 return newResult;
541 }
542}
543
544gslpp::complex EWSMcache::B0p_Mz2_Mz2_Mw2_Mw2(const double Mw_i) const
545{
546 int NumPar = 2;
547 double params[] = {SM.getMz(), Mw_i};
548
549 if (CacheCheck(B0p_Mz2_Mz2_Mw2_Mw2_cache, NumPar, params))
550 return gslpp::complex(B0p_Mz2_Mz2_Mw2_Mw2_cache[NumPar],
551 B0p_Mz2_Mz2_Mw2_Mw2_cache[NumPar + 1], false);
552 else {
553 gslpp::complex newResult = PV.B0p(SM.getMz() * SM.getMz(), SM.getMz() * SM.getMz(), Mw_i*Mw_i, Mw_i * Mw_i);
554 newCacheForComplex(B0p_Mz2_Mz2_Mw2_Mw2_cache, NumPar, params, newResult);
555 return newResult;
556 }
557}
558
559gslpp::complex EWSMcache::B0p_Mw2_Mw2_Mz2_Mw2(const double Mw_i) const
560{
561 int NumPar = 2;
562 double params[] = {Mw_i, SM.getMz()};
563
564 if (CacheCheck(B0p_Mw2_Mw2_Mz2_Mw2_cache, NumPar, params))
565 return gslpp::complex(B0p_Mw2_Mw2_Mz2_Mw2_cache[NumPar],
566 B0p_Mw2_Mw2_Mz2_Mw2_cache[NumPar + 1], false);
567 else {
568 gslpp::complex newResult = PV.B0p(Mw_i*Mw_i, Mw_i*Mw_i, SM.getMz() * SM.getMz(), Mw_i * Mw_i);
569 newCacheForComplex(B0p_Mw2_Mw2_Mz2_Mw2_cache, NumPar, params, newResult);
570 return newResult;
571 }
572}
573
574gslpp::complex EWSMcache::B0p_Mw2_Mw2_mh2_Mw2(const double Mw_i) const
575{
576 int NumPar = 2;
577 double params[] = {Mw_i, SM.getMHl()};
578
579 if (CacheCheck(B0p_Mw2_Mw2_mh2_Mw2_cache, NumPar, params))
580 return gslpp::complex(B0p_Mw2_Mw2_mh2_Mw2_cache[NumPar],
581 B0p_Mw2_Mw2_mh2_Mw2_cache[NumPar + 1], false);
582 else {
583 gslpp::complex newResult = PV.B0p(Mw_i*Mw_i, Mw_i*Mw_i, SM.getMHl() * SM.getMHl(), Mw_i * Mw_i);
584 newCacheForComplex(B0p_Mw2_Mw2_mh2_Mw2_cache, NumPar, params, newResult);
585 return newResult;
586 }
587}
588
589gslpp::complex EWSMcache::B0p_Mw2_Mw2_0_Mw2(const double Mw_i) const
590{
591 int NumPar = 1;
592 double params[] = {Mw_i};
593
594 if (CacheCheck(B0p_Mw2_Mw2_0_Mw2_cache, NumPar, params))
595 return gslpp::complex(B0p_Mw2_Mw2_0_Mw2_cache[NumPar],
596 B0p_Mw2_Mw2_0_Mw2_cache[NumPar + 1], false);
597 else {
598 gslpp::complex newResult = PV.B0p(Mw_i*Mw_i, Mw_i*Mw_i, 0.0, Mw_i * Mw_i);
599 newCacheForComplex(B0p_Mw2_Mw2_0_Mw2_cache, NumPar, params, newResult);
600 return newResult;
601 }
602}
603
604gslpp::complex EWSMcache::B0p_Mz2_Mz2_mf2_mf2(const Particle f) const
605{
606 int NumPar = 2;
607 double params[] = {SM.getMz(), mf(f, SM.getMz())};
608 int ind = f.getIndex();
609 if (CacheCheck(B0p_Mz2_Mz2_mf2_mf2_cache[ind], NumPar, params))
610 return gslpp::complex(B0p_Mz2_Mz2_mf2_mf2_cache[ind][NumPar],
611 B0p_Mz2_Mz2_mf2_mf2_cache[ind][NumPar + 1], false);
612 else {
613 gslpp::complex newResult = PV.B0p(SM.getMz() * SM.getMz(), SM.getMz() * SM.getMz(), mf2(f, SM.getMz()), mf2(f, SM.getMz()));
614 newCacheForComplex(B0p_Mz2_Mz2_mf2_mf2_cache[ind], NumPar, params, newResult);
615 return newResult;
616 }
617}
618
619gslpp::complex EWSMcache::B1_Mz2_0_mf2_mfprime2(const int gen) const
620{
621 int NumPar = 3;
622 double mymf, mymfprime;
623 double Mz = SM.getMz();
624 if (gen < 3) {
625 mymf = mf(SM.getLeptons((QCD::lepton) (2 * gen)), Mz);
626 mymfprime = mf(SM.getLeptons((QCD::lepton) (2 * gen + 1)), Mz);
627 } else {
628 int genq = gen - 3;
629 mymf = mf(SM.getQuarks((QCD::quark) (2 * genq)), Mz);
630 mymfprime = mf(SM.getQuarks((QCD::quark) (2 * genq + 1)), Mz);
631 }
632 double params[] = {Mz, mymf, mymfprime};
633
634 if (CacheCheck(B1_Mz2_0_mf2_mfprime2_cache[gen], NumPar, params))
635 return gslpp::complex(B1_Mz2_0_mf2_mfprime2_cache[gen][NumPar],
636 B1_Mz2_0_mf2_mfprime2_cache[gen][NumPar + 1], false);
637 else {
638 double mf2 = mymf*mymf;
639 double mfprime2 = mymfprime*mymfprime;
640 gslpp::complex newResult = PV.B1(Mz * Mz, 0.0, mf2, mfprime2);
641 newCacheForComplex(B1_Mz2_0_mf2_mfprime2_cache[gen], NumPar, params, newResult);
642 return newResult;
643 }
644}
645
646gslpp::complex EWSMcache::B1_Mz2_0_mfprime2_mf2(const int gen) const
647{
648 int NumPar = 3;
649 double mymf, mymfprime;
650 double Mz = SM.getMz();
651 if (gen < 3) {
652 mymf = mf(SM.getLeptons((QCD::lepton) (2 * gen)), Mz);
653 mymfprime = mf(SM.getLeptons((QCD::lepton) (2 * gen + 1)), Mz);
654 } else {
655 int genq = gen - 3;
656 mymf = mf(SM.getQuarks((QCD::quark) (2 * genq)), Mz);
657 mymfprime = mf(SM.getQuarks((QCD::quark) (2 * genq + 1)), Mz);
658 }
659 double params[] = {Mz, mymf, mymfprime};
660
661 if (CacheCheck(B1_Mz2_0_mfprime2_mf2_cache[gen], NumPar, params))
662 return gslpp::complex(B1_Mz2_0_mfprime2_mf2_cache[gen][NumPar],
663 B1_Mz2_0_mfprime2_mf2_cache[gen][NumPar + 1], false);
664 else {
665 double mf2 = mymf*mymf;
666 double mfprime2 = mymfprime*mymfprime;
667 gslpp::complex newResult = PV.B1(Mz * Mz, 0.0, mfprime2, mf2);
668 newCacheForComplex(B1_Mz2_0_mfprime2_mf2_cache[gen], NumPar, params, newResult);
669 return newResult;
670 }
671}
672
673gslpp::complex EWSMcache::B1_Mz2_Mw2_mf2_mfprime2(const int gen, const double Mw_i) const
674{
675 int NumPar = 4;
676 double mymf, mymfprime;
677 double Mz = SM.getMz();
678 if (gen < 3) {
679 mymf = mf(SM.getLeptons((QCD::lepton) (2 * gen)), Mz);
680 mymfprime = mf(SM.getLeptons((QCD::lepton) (2 * gen + 1)), Mz);
681 } else {
682 int genq = gen - 3;
683 mymf = mf(SM.getQuarks((QCD::quark) (2 * genq)), Mz);
684 mymfprime = mf(SM.getQuarks((QCD::quark) (2 * genq + 1)), Mz);
685 }
686 double params[] = {Mz, Mw_i, mymf, mymfprime};
687
688 if (CacheCheck(B1_Mz2_Mw2_mf2_mfprime2_cache[gen], NumPar, params))
689 return gslpp::complex(B1_Mz2_Mw2_mf2_mfprime2_cache[gen][NumPar],
690 B1_Mz2_Mw2_mf2_mfprime2_cache[gen][NumPar + 1], false);
691 else {
692 double mf2 = mymf*mymf;
693 double mfprime2 = mymfprime*mymfprime;
694 gslpp::complex newResult = PV.B1(Mz * Mz, Mw_i*Mw_i, mf2, mfprime2);
695 newCacheForComplex(B1_Mz2_Mw2_mf2_mfprime2_cache[gen], NumPar, params, newResult);
696 return newResult;
697 }
698}
699
700gslpp::complex EWSMcache::B1_Mz2_Mw2_mfprime2_mf2(const int gen, const double Mw_i) const
701{
702 int NumPar = 4;
703 double mymf, mymfprime;
704 double Mz = SM.getMz();
705 if (gen < 3) {
706 mymf = mf(SM.getLeptons((QCD::lepton) (2 * gen)), Mz);
707 mymfprime = mf(SM.getLeptons((QCD::lepton) (2 * gen + 1)), Mz);
708 } else {
709 int genq = gen - 3;
710 mymf = mf(SM.getQuarks((QCD::quark) (2 * genq)), Mz);
711 mymfprime = mf(SM.getQuarks((QCD::quark) (2 * genq + 1)), Mz);
712 }
713 double params[] = {Mz, Mw_i, mymf, mymfprime};
714
715 if (CacheCheck(B1_Mz2_Mw2_mfprime2_mf2_cache[gen], NumPar, params))
716 return gslpp::complex(B1_Mz2_Mw2_mfprime2_mf2_cache[gen][NumPar],
717 B1_Mz2_Mw2_mfprime2_mf2_cache[gen][NumPar + 1], false);
718 else {
719 double mf2 = mymf*mymf;
720 double mfprime2 = mymfprime*mymfprime;
721 gslpp::complex newResult = PV.B1(Mz * Mz, Mw_i*Mw_i, mfprime2, mf2);
722 newCacheForComplex(B1_Mz2_Mw2_mfprime2_mf2_cache[gen], NumPar, params, newResult);
723 return newResult;
724 }
725}
726
727gslpp::complex EWSMcache::B1p_Mw2_Mw2_mf2_mfprime2(const int gen, const double Mw_i) const
728{
729 int NumPar = 3;
730 double mymf, mymfprime;
731 double Mz = SM.getMz();
732 if (gen < 3) {
733 mymf = mf(SM.getLeptons((QCD::lepton) (2 * gen)), Mz);
734 mymfprime = mf(SM.getLeptons((QCD::lepton) (2 * gen + 1)), Mz);
735 } else {
736 int genq = gen - 3;
737 mymf = mf(SM.getQuarks((QCD::quark) (2 * genq)), Mz);
738 mymfprime = mf(SM.getQuarks((QCD::quark) (2 * genq + 1)), Mz);
739 }
740 double params[] = {Mw_i, mymf, mymfprime};
741
742 if (CacheCheck(B1p_Mw2_Mw2_mf2_mfprime2_cache[gen], NumPar, params))
743 return gslpp::complex(B1p_Mw2_Mw2_mf2_mfprime2_cache[gen][NumPar],
744 B1p_Mw2_Mw2_mf2_mfprime2_cache[gen][NumPar + 1], false);
745 else {
746 double mf2 = mymf*mymf;
747 double mfprime2 = mymfprime*mymfprime;
748 gslpp::complex newResult = PV.B1p(Mw_i*Mw_i, Mw_i*Mw_i, mf2, mfprime2);
749 newCacheForComplex(B1p_Mw2_Mw2_mf2_mfprime2_cache[gen], NumPar, params, newResult);
750 return newResult;
751 }
752}
753
754gslpp::complex EWSMcache::B1p_Mw2_Mw2_mfprime2_mf2(const int gen, const double Mw_i) const
755{
756 int NumPar = 3;
757 double mymf, mymfprime;
758 double Mz = SM.getMz();
759 if (gen < 3) {
760 mymf = mf(SM.getLeptons((QCD::lepton) (2 * gen)), Mz);
761 mymfprime = mf(SM.getLeptons((QCD::lepton) (2 * gen + 1)), Mz);
762 } else {
763 int genq = gen - 3;
764 mymf = mf(SM.getQuarks((QCD::quark) (2 * genq)), Mz);
765 mymfprime = mf(SM.getQuarks((QCD::quark) (2 * genq + 1)), Mz);
766 }
767 double params[] = {Mw_i, mymf, mymfprime};
768
769 if (CacheCheck(B1p_Mw2_Mw2_mfprime2_mf2_cache[gen], NumPar, params))
770 return gslpp::complex(B1p_Mw2_Mw2_mfprime2_mf2_cache[gen][NumPar],
771 B1p_Mw2_Mw2_mfprime2_mf2_cache[gen][NumPar + 1], false);
772 else {
773 double mf2 = mymf*mymf;
774 double mfprime2 = mymfprime*mymfprime;
775 gslpp::complex newResult = PV.B1p(Mw_i*Mw_i, Mw_i*Mw_i, mfprime2, mf2);
776 newCacheForComplex(B1p_Mw2_Mw2_mfprime2_mf2_cache[gen], NumPar, params, newResult);
777 return newResult;
778 }
779}
780
781gslpp::complex EWSMcache::Bf_Mz2_Mz2_mf2_mf2(const Particle f) const
782{
783 int NumPar = 2;
784 double params[] = {SM.getMz(), mf(f, SM.getMz())};
785 int ind = f.getIndex();
786 if (CacheCheck(Bf_Mz2_Mz2_mf2_mf2_cache[ind], NumPar, params))
787 return gslpp::complex(Bf_Mz2_Mz2_mf2_mf2_cache[ind][NumPar],
788 Bf_Mz2_Mz2_mf2_mf2_cache[ind][NumPar + 1], false);
789 else {
790 gslpp::complex newResult = PV.Bf(SM.getMz() * SM.getMz(), SM.getMz() * SM.getMz(), mf2(f, SM.getMz()), mf2(f, SM.getMz()));
791 newCacheForComplex(Bf_Mz2_Mz2_mf2_mf2_cache[ind], NumPar, params, newResult);
792 return newResult;
793 }
794}
795
796gslpp::complex EWSMcache::Bf_Mz2_0_mf2_mf2(const Particle f) const
797{
798 int NumPar = 2;
799 double params[] = {SM.getMz(), mf(f, SM.getMz())};
800 if (params[1] == 0.0)
801 throw std::runtime_error("Error in EWSMcache::Bf_Mz_0_mf_mf()");
802 int ind = f.getIndex();
803 if (CacheCheck(Bf_Mz2_0_mf2_mf2_cache[ind], NumPar, params))
804 return gslpp::complex(Bf_Mz2_0_mf2_mf2_cache[ind][NumPar],
805 Bf_Mz2_0_mf2_mf2_cache[ind][NumPar + 1], false);
806 else {
807 gslpp::complex newResult = PV.Bf(SM.getMz() * SM.getMz(), 0.0, mf2(f, SM.getMz()), mf2(f, SM.getMz()));
808 newCacheForComplex(Bf_Mz2_0_mf2_mf2_cache[ind], NumPar, params, newResult);
809 return newResult;
810 }
811}
812
813gslpp::complex EWSMcache::Bf_Mz2_Mw2_mfprime2_mf2(const int gen, const double Mw_i) const
814{
815 int NumPar = 4;
816 double mymf, mymfprime;
817 double Mz = SM.getMz();
818 if (gen < 3) {
819 mymf = mf(SM.getLeptons((QCD::lepton) (2 * gen)), Mz);
820 mymfprime = mf(SM.getLeptons((QCD::lepton) (2 * gen + 1)), Mz);
821 } else {
822 int genq = gen - 3;
823 mymf = mf(SM.getQuarks((QCD::quark) (2 * genq)), Mz);
824 mymfprime = mf(SM.getQuarks((QCD::quark) (2 * genq + 1)), Mz);
825 }
826 double params[] = {Mz, Mw_i, mymf, mymfprime};
827 if (CacheCheck(Bf_Mz2_Mw2_mfprime2_mf2_cache[gen], NumPar, params))
828 return gslpp::complex(Bf_Mz2_Mw2_mfprime2_mf2_cache[gen][NumPar],
829 Bf_Mz2_Mw2_mfprime2_mf2_cache[gen][NumPar + 1], false);
830 else {
831 double mf2 = mymf*mymf;
832 double mfprime2 = mymfprime*mymfprime;
833 gslpp::complex newResult = PV.Bf(Mz * Mz, Mw_i*Mw_i, mfprime2, mf2);
834 newCacheForComplex(Bf_Mz2_Mw2_mfprime2_mf2_cache[gen], NumPar, params, newResult);
835 return newResult;
836 }
837}
838
839gslpp::complex EWSMcache::Bf_Mz2_0_mfprime2_mf2(const int gen) const
840{
841 int NumPar = 3;
842 double mymf, mymfprime;
843 double Mz = SM.getMz();
844 if (gen < 3) {
845 mymf = mf(SM.getLeptons((QCD::lepton) (2 * gen)), Mz);
846 mymfprime = mf(SM.getLeptons((QCD::lepton) (2 * gen + 1)), Mz);
847 } else {
848 int genq = gen - 3;
849 mymf = mf(SM.getQuarks((QCD::quark) (2 * genq)), Mz);
850 mymfprime = mf(SM.getQuarks((QCD::quark) (2 * genq + 1)), Mz);
851 }
852 double params[] = {Mz, mymf, mymfprime};
853
854 if (CacheCheck(Bf_Mz2_0_mfprime2_mf2_cache[gen], NumPar, params))
855 return gslpp::complex(Bf_Mz2_0_mfprime2_mf2_cache[gen][NumPar],
856 Bf_Mz2_0_mfprime2_mf2_cache[gen][NumPar + 1], false);
857 else {
858 double mf2 = mymf*mymf;
859 double mfprime2 = mymfprime*mymfprime;
860 gslpp::complex newResult = PV.Bf(Mz * Mz, 0.0, mfprime2, mf2);
861 newCacheForComplex(Bf_Mz2_0_mfprime2_mf2_cache[gen], NumPar, params, newResult);
862 return newResult;
863 }
864}
865
866gslpp::complex EWSMcache::Bf_Mw2_Mw2_mfprime2_mf2(const int gen, const double Mw_i) const
867{
868 int NumPar = 3;
869 double mymf, mymfprime;
870 double Mz = SM.getMz();
871 if (gen < 3) {
872 mymf = mf(SM.getLeptons((QCD::lepton) (2 * gen)), Mz);
873 mymfprime = mf(SM.getLeptons((QCD::lepton) (2 * gen + 1)), Mz);
874 } else {
875 int genq = gen - 3;
876 mymf = mf(SM.getQuarks((QCD::quark) (2 * genq)), Mz);
877 mymfprime = mf(SM.getQuarks((QCD::quark) (2 * genq + 1)), Mz);
878 }
879 double params[] = {Mw_i, mymf, mymfprime};
880
881 if (CacheCheck(Bf_Mw2_Mw2_mfprime2_mf2_cache[gen], NumPar, params))
882 return gslpp::complex(Bf_Mw2_Mw2_mfprime2_mf2_cache[gen][NumPar],
883 Bf_Mw2_Mw2_mfprime2_mf2_cache[gen][NumPar + 1], false);
884 else {
885 double mf2 = mymf*mymf;
886 double mfprime2 = mymfprime*mymfprime;
887 gslpp::complex newResult = PV.Bf(Mw_i*Mw_i, Mw_i*Mw_i, mfprime2, mf2);
888 newCacheForComplex(Bf_Mw2_Mw2_mfprime2_mf2_cache[gen], NumPar, params, newResult);
889 return newResult;
890 }
891}
892
893gslpp::complex EWSMcache::Bfp_Mz2_Mz2_mf2_mf2(const Particle f) const
894{
895 int NumPar = 2;
896 double params[] = {SM.getMz(), mf(f, SM.getMz())};
897 int ind = f.getIndex();
898 if (CacheCheck(Bfp_Mz2_Mz2_mf2_mf2_cache[ind], NumPar, params))
899 return gslpp::complex(Bfp_Mz2_Mz2_mf2_mf2_cache[ind][NumPar],
900 Bfp_Mz2_Mz2_mf2_mf2_cache[ind][NumPar + 1], false);
901 else {
902 gslpp::complex newResult = PV.Bfp(SM.getMz() * SM.getMz(), SM.getMz() * SM.getMz(), mf2(f, SM.getMz()), mf2(f, SM.getMz()));
903 newCacheForComplex(Bfp_Mz2_Mz2_mf2_mf2_cache[ind], NumPar, params, newResult);
904 return newResult;
905 }
906}
907
908gslpp::complex EWSMcache::Bfp_Mw2_Mw2_mfprime2_mf2(const int gen, const double Mw_i) const
909{
910 int NumPar = 3;
911 double mymf, mymfprime;
912 double Mz = SM.getMz();
913 if (gen < 3) {
914 mymf = mf(SM.getLeptons((QCD::lepton) (2 * gen)), Mz);
915 mymfprime = mf(SM.getLeptons((QCD::lepton) (2 * gen + 1)), Mz);
916 } else {
917 int genq = gen - 3;
918 mymf = mf(SM.getQuarks((QCD::quark) (2 * genq)), Mz);
919 mymfprime = mf(SM.getQuarks((QCD::quark) (2 * genq + 1)), Mz);
920 }
921 double params[] = {Mw_i, mymf, mymfprime};
922
923 if (CacheCheck(Bfp_Mw2_Mw2_mfprime2_mf2_cache[gen], NumPar, params))
924 return gslpp::complex(Bfp_Mw2_Mw2_mfprime2_mf2_cache[gen][NumPar],
925 Bfp_Mw2_Mw2_mfprime2_mf2_cache[gen][NumPar + 1], false);
926 else {
927 double mf2 = mymf*mymf;
928 double mfprime2 = mymfprime*mymfprime;
929 gslpp::complex newResult = PV.Bfp(Mw_i*Mw_i, Mw_i*Mw_i, mfprime2, mf2);
930 newCacheForComplex(Bfp_Mw2_Mw2_mfprime2_mf2_cache[gen], NumPar, params, newResult);
931 return newResult;
932 }
933}
934
935gslpp::complex EWSMcache::C0_Mz2_Mw2_Mt2_Mw2(const double Mw_i) const
936{
937 int NumPar = 3;
938 double params[] = {SM.getMz(), Mw_i, SM.getMtpole()};
939
940 if (CacheCheck(C0_Mz2_Mw2_Mt2_Mw2_cache, NumPar, params))
941 return gslpp::complex(C0_Mz2_Mw2_Mt2_Mw2_cache[NumPar],
942 C0_Mz2_Mw2_Mt2_Mw2_cache[NumPar + 1], false);
943 else {
944 gslpp::complex newResult = PV.C0(SM.getMz() * SM.getMz(), Mw_i*Mw_i, SM.getMtpole() * SM.getMtpole(), Mw_i * Mw_i);
945 newCacheForComplex(C0_Mz2_Mw2_Mt2_Mw2_cache, NumPar, params, newResult);
946 return newResult;
947 }
948}
949
950gslpp::complex EWSMcache::C0_Mz2_Mt2_Mw2_Mt2(const double Mw_i) const
951{
952 int NumPar = 3;
953 double params[] = {SM.getMz(), SM.getMtpole(), Mw_i};
954
955 if (CacheCheck(C0_Mz2_Mt2_Mw2_Mt2_cache, NumPar, params))
956 return gslpp::complex(C0_Mz2_Mt2_Mw2_Mt2_cache[NumPar],
957 C0_Mz2_Mt2_Mw2_Mt2_cache[NumPar + 1], false);
958 else {
959 gslpp::complex newResult = PV.C0(SM.getMz() * SM.getMz(), SM.getMtpole() * SM.getMtpole(), Mw_i*Mw_i, SM.getMtpole() * SM.getMtpole());
960 newCacheForComplex(C0_Mz2_Mt2_Mw2_Mt2_cache, NumPar, params, newResult);
961 return newResult;
962 }
963}
964
965gslpp::complex EWSMcache::C0_Mz2_0_Mw2_0(const double Mw_i) const
966{
967 int NumPar = 2;
968 double params[] = {SM.getMz(), Mw_i};
969
970 if (CacheCheck(C0_Mz2_0_Mw2_0_cache, NumPar, params))
971 return gslpp::complex(C0_Mz2_0_Mw2_0_cache[NumPar],
972 C0_Mz2_0_Mw2_0_cache[NumPar + 1], false);
973 else {
974 gslpp::complex newResult = PV.C0(SM.getMz() * SM.getMz(), 0.0, Mw_i*Mw_i, 0.0);
975 newCacheForComplex(C0_Mz2_0_Mw2_0_cache, NumPar, params, newResult);
976 return newResult;
977 }
978}
979
980gslpp::complex EWSMcache::C0_Mz2_Mw2_0_Mw2(const double Mw_i) const
981{
982 int NumPar = 2;
983 double params[] = {SM.getMz(), Mw_i};
984
985 if (CacheCheck(C0_Mz2_Mw2_0_Mw2_cache, NumPar, params))
986 return gslpp::complex(C0_Mz2_Mw2_0_Mw2_cache[NumPar],
987 C0_Mz2_Mw2_0_Mw2_cache[NumPar + 1], false);
988 else {
989 gslpp::complex newResult = PV.C0(SM.getMz() * SM.getMz(), Mw_i*Mw_i, 0.0, Mw_i * Mw_i);
990 newCacheForComplex(C0_Mz2_Mw2_0_Mw2_cache, NumPar, params, newResult);
991 return newResult;
992 }
993}
994
995gslpp::complex EWSMcache::C0_Mw2_Mw2_0_Mz2(const double Mw_i) const
996{
997 int NumPar = 2;
998 double params[] = {Mw_i, SM.getMz()};
999
1000 if (CacheCheck(C0_Mw2_Mw2_0_Mz2_cache, NumPar, params))
1001 return gslpp::complex(C0_Mw2_Mw2_0_Mz2_cache[NumPar],
1002 C0_Mw2_Mw2_0_Mz2_cache[NumPar + 1], false);
1003 else {
1004 gslpp::complex newResult = PV.C0(Mw_i*Mw_i, Mw_i*Mw_i, 0.0, SM.getMz() * SM.getMz());
1005 newCacheForComplex(C0_Mw2_Mw2_0_Mz2_cache, NumPar, params, newResult);
1006 return newResult;
1007 }
1008}
1009
1010gslpp::complex EWSMcache::C0_Mw2_0_Mz2_0(const double Mw_i) const
1011{
1012 int NumPar = 2;
1013 double params[] = {Mw_i, SM.getMz()};
1014
1015 if (CacheCheck(C0_Mw2_0_Mz2_0_cache, NumPar, params))
1016 return gslpp::complex(C0_Mw2_0_Mz2_0_cache[NumPar],
1017 C0_Mw2_0_Mz2_0_cache[NumPar + 1], false);
1018 else {
1019 gslpp::complex newResult = PV.C0(Mw_i*Mw_i, 0.0, SM.getMz() * SM.getMz(), 0.0);
1020 newCacheForComplex(C0_Mw2_0_Mz2_0_cache, NumPar, params, newResult);
1021 return newResult;
1022 }
1023}
1024
1025gslpp::complex EWSMcache::C0_Mz2_0_Mz2_0() const
1026{
1027 int NumPar = 1;
1028 double params[] = {SM.getMz()};
1029
1030 if (CacheCheck(C0_Mz2_0_Mz2_0_cache, NumPar, params))
1031 return gslpp::complex(C0_Mz2_0_Mz2_0_cache[NumPar],
1032 C0_Mz2_0_Mz2_0_cache[NumPar + 1], false);
1033 else {
1034 gslpp::complex newResult = PV.C0(SM.getMz() * SM.getMz(), 0.0, SM.getMz() * SM.getMz(), 0.0);
1035 newCacheForComplex(C0_Mz2_0_Mz2_0_cache, NumPar, params, newResult);
1036 return newResult;
1037 }
1038}
1039
1040
1041
1042
double Cl2(const double phi) const
The Clausen function of index 2, .
double Li2_MW2toMTOP2_cache[3]
A cache of .
Definition: EWSMcache.h:917
gslpp::complex B1_Mz2_Mw2_mf2_mfprime2(const int gen, const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:673
double B0p_Mz2_Mz2_Mw2_Mw2_cache[4]
A cache of a PV function.
Definition: EWSMcache.h:958
double B1_Mz2_0_mf2_mfprime2_cache[6][5]
A cache of a PV function.
Definition: EWSMcache.h:964
double B1p_Mw2_Mw2_mfprime2_mf2_cache[6][5]
A cache of a PV function.
Definition: EWSMcache.h:970
double logMZtoMTAU_cache[3]
A cache of .
Definition: EWSMcache.h:911
double B0p_Mw2_Mw2_0_Mw2_cache[3]
A cache of a PV function.
Definition: EWSMcache.h:961
double A0_Mz2_Mw2_cache[3]
A cache of a PV function.
Definition: EWSMcache.h:922
gslpp::complex C0_Mw2_0_Mz2_0(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:1010
double B1p_Mw2_Mw2_mf2_mfprime2_cache[6][5]
A cache of a PV function.
Definition: EWSMcache.h:969
double A0_Mw2_Mz2_cache[3]
A cache of a PV function.
Definition: EWSMcache.h:924
double logMTOPtoMH() const
A cache method.
Definition: EWSMcache.cpp:134
double zeta2
The constant .
Definition: EWSMcache.h:893
double A0_Mz2_Mz2_cache[2]
A cache of a PV function.
Definition: EWSMcache.h:926
double log_cW2_cache[3]
A cache of .
Definition: EWSMcache.h:914
gslpp::complex B0_Mw2_Mw2_Mz2_Mw2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:439
gslpp::complex B1p_Mw2_Mw2_mf2_mfprime2(const int gen, const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:727
EWSMcache(const StandardModel &SM_i)
Constructor.
Definition: EWSMcache.cpp:15
double B0p_Mw2_Mw2_mh2_Mw2_cache[4]
A cache of a PV function.
Definition: EWSMcache.h:960
gslpp::complex B0p_Mz2_Mz2_Mw2_Mw2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:544
double B0_Mz2_0_0_Mw2_cache[4]
A cache of a PV function.
Definition: EWSMcache.h:948
double B0_Mw2_Mz2_Mt2_Mt2_cache[5]
A cache of a PV function.
Definition: EWSMcache.h:942
const ClausenFunctions Clausen
An object of type ClausenFunctions.
Definition: EWSMcache.h:889
bool FlagDebug
A flag for debugging (false by default).
Definition: EWSMcache.h:884
double Bfp_Mz2_Mz2_mf2_mf2_cache[12][4]
A cache of a PV function.
Definition: EWSMcache.h:978
gslpp::complex Bf_Mz2_0_mf2_mf2(const Particle f) const
A cache method.
Definition: EWSMcache.cpp:796
double Li3_for_F1_cache[3]
A cache of .
Definition: EWSMcache.h:919
double B0_Mz2_Mw2_0_Mw2_cache[4]
A cache of a PV function.
Definition: EWSMcache.h:946
double A0_Mz2_mh2() const
A cache method.
Definition: EWSMcache.cpp:219
gslpp::complex Bf_Mw2_Mw2_mfprime2_mf2(const int gen, const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:866
gslpp::complex B1_Mz2_0_mf2_mfprime2(const int gen) const
A cache method.
Definition: EWSMcache.cpp:619
gslpp::complex B0p_Mz2_0_mh2_Mw2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:499
double Bf_Mz2_0_mf2_mf2_cache[12][4]
A cache of a PV function.
Definition: EWSMcache.h:973
double zeta3
The constant .
Definition: EWSMcache.h:894
double A0_Mw2_mh2_cache[3]
A cache of a PV function.
Definition: EWSMcache.h:925
double B0p_Mw2_Mw2_Mz2_Mw2_cache[4]
A cache of a PV function.
Definition: EWSMcache.h:959
double Li2_MW2toMTOP2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:162
double logMZtoMTOP_cache[3]
A cache of .
Definition: EWSMcache.h:912
double log_cW2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:148
double logMTOPtoMH_cache[3]
A cache of .
Definition: EWSMcache.h:913
double logMZtoMTAU() const
A cache method.
Definition: EWSMcache.cpp:106
gslpp::complex B0_Mw2_Mz2_Mt2_Mt2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:319
double C0_Mz2_Mw2_Mt2_Mw2_cache[5]
A cache of a PV function.
Definition: EWSMcache.h:981
double B0_Mz2_Mw2_Mz2_Mw2_cache[4]
A cache of a PV function.
Definition: EWSMcache.h:945
double B0p_Mz2_Mz2_mf2_mf2_cache[12][4]
A cache of a PV function.
Definition: EWSMcache.h:962
double Bf_Mz2_Mz2_mf2_mf2_cache[12][4]
A cache of a PV function.
Definition: EWSMcache.h:972
double B0p_Mz2_0_Mz2_Mw2_cache[4]
A cache of a PV function.
Definition: EWSMcache.h:957
gslpp::complex B0_Mz2_Mw2_0_Mw2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:379
gslpp::complex B0_Mz2_0_0_Mw2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:409
gslpp::complex B1p_Mw2_Mw2_mfprime2_mf2(const int gen, const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:754
double C0_Mz2_0_Mw2_0_cache[4]
A cache of a PV function.
Definition: EWSMcache.h:983
double logMZtoME() const
A cache method.
Definition: EWSMcache.cpp:78
double zeta4
The constant .
Definition: EWSMcache.h:895
gslpp::complex B0_Mz2_Mz2_mf2_mf2(const Particle f) const
A cache method.
Definition: EWSMcache.cpp:484
double B0_Mw2_Mz2_Mw2_Mw2_cache[4]
A cache of a PV function.
Definition: EWSMcache.h:949
double logMZtoMMU() const
A cache method.
Definition: EWSMcache.cpp:92
double zeta5
The constant .
Definition: EWSMcache.h:896
gslpp::complex C0_Mz2_0_Mz2_0() const
A cache method.
Definition: EWSMcache.cpp:1025
const Polylogarithms PolyLog
An object of type Polylogarithms.
Definition: EWSMcache.h:890
gslpp::complex B0_Mw2_Mw2_mh2_Mw2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:454
bool CacheCheck(const double cache[], const int NumPar, const double params[]) const
A check method for caching.
Definition: EWSMcache.h:1008
double B0_Mz2_Mz2_mh2_Mz2_cache[4]
A cache of a PV function.
Definition: EWSMcache.h:944
gslpp::complex Bfp_Mw2_Mw2_mfprime2_mf2(const int gen, const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:908
double A0_Mz2_Mw2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:205
double B0_Mz2_0_mh2_Mw2_cache[5]
A cache of a PV function.
Definition: EWSMcache.h:941
gslpp::complex B0p_Mz2_0_Mz2_Mw2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:529
gslpp::complex B0p_Mz2_Mz2_mh2_Mz2() const
A cache method.
Definition: EWSMcache.cpp:514
double A0_Mz2_Mz2() const
A cache method.
Definition: EWSMcache.cpp:261
gslpp::complex B0_Mz2_Mw2_Mz2_Mw2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:364
gslpp::complex C0_Mz2_Mw2_0_Mw2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:980
const PVfunctions PV
An object of type PVfunctions.
Definition: EWSMcache.h:888
double C0_Mw2_Mw2_0_Mz2_cache[4]
A cache of a PV function.
Definition: EWSMcache.h:985
gslpp::complex B1_Mz2_Mw2_mfprime2_mf2(const int gen, const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:700
double B0_Mw2_Mw2_0_Mw2_cache[3]
A cache of a PV function.
Definition: EWSMcache.h:952
gslpp::complex C0_Mz2_0_Mw2_0(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:965
double C0_Mz2_0_Mz2_0_cache[3]
A cache of a PV function.
Definition: EWSMcache.h:987
gslpp::complex B0p_Mw2_Mw2_Mz2_Mw2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:559
gslpp::complex Bfp_Mz2_Mz2_mf2_mf2(const Particle f) const
A cache method.
Definition: EWSMcache.cpp:893
gslpp::complex B0p_Mw2_Mw2_mh2_Mw2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:574
void newCacheForDouble(double cache[], const int NumPar, const double params[], const double newResult) const
A method to update a cache of the parameters and the quantity under consideration.
Definition: EWSMcache.h:1033
double Bf_Mz2_0_mfprime2_mf2_cache[6][5]
A cache of a PV function.
Definition: EWSMcache.h:975
gslpp::complex B0p_Mz2_Mz2_mf2_mf2(const Particle f) const
A cache method.
Definition: EWSMcache.cpp:604
double mf_atMz_params_cache[12][StandardModel::NumSMParamsForEWPO]
A cache array of a set of SM parameters, used together with mf_atMz_cache.
Definition: EWSMcache.h:932
double Li3_MW2toMTOP2_cache[3]
A cache of .
Definition: EWSMcache.h:918
double C0_Mz2_Mt2_Mw2_Mt2_cache[5]
A cache of a PV function.
Definition: EWSMcache.h:982
double logMZtoMMU_cache[3]
A cache of .
Definition: EWSMcache.h:910
double B1_Mz2_0_mfprime2_mf2_cache[6][5]
A cache of a PV function.
Definition: EWSMcache.h:965
double B0_Mz2_Mz2_Mw2_Mw2_cache[4]
A cache of a PV function.
Definition: EWSMcache.h:943
double A0_Mz2_mh2_cache[3]
A cache of a PV function.
Definition: EWSMcache.h:923
double B0_Mw2_Mw2_mh2_Mw2_cache[4]
A cache of a PV function.
Definition: EWSMcache.h:951
double logMZtoMTOP() const
A cache method.
Definition: EWSMcache.cpp:120
gslpp::complex C0_Mz2_Mt2_Mw2_Mt2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:950
gslpp::complex Bf_Mz2_Mw2_mfprime2_mf2(const int gen, const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:813
gslpp::complex B0_Mz2_0_mh2_Mw2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:304
double B0_Mz2_Mz2_mf2_mf2_cache[12][4]
A cache of a PV function.
Definition: EWSMcache.h:953
double B1_Mz2_Mw2_mf2_mfprime2_cache[6][6]
A cache of a PV function.
Definition: EWSMcache.h:966
double B0_Mz2_Mw2_mh2_Mw2_cache[5]
A cache of a PV function.
Definition: EWSMcache.h:940
double log2
The constant .
Definition: EWSMcache.h:900
double A0_Mw2_Mw2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:275
gslpp::complex B0_Mz2_Mw2_mh2_Mw2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:289
gslpp::complex C0_Mz2_Mw2_Mt2_Mw2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:935
double B0p_Mz2_0_mh2_Mw2_cache[5]
A cache of a PV function.
Definition: EWSMcache.h:955
double logMZtoME_cache[3]
A cache of .
Definition: EWSMcache.h:909
double C0_Mw2_0_Mz2_0_cache[4]
A cache of a PV function.
Definition: EWSMcache.h:986
double mf2(const Particle f, const double mu=0.0, const orders order=FULLNNLO) const
The mass squared of an SM fermion.
Definition: EWSMcache.h:257
gslpp::complex B0_Mz2_Mz2_Mw2_Mw2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:334
double B0_Mz2_0_Mz2_Mw2_cache[4]
A cache of a PV function.
Definition: EWSMcache.h:947
void newCacheForComplex(double cache[], const int NumPar, const double params[], const gslpp::complex newResult) const
A method to update a cache of the parameters and the quantity under consideration.
Definition: EWSMcache.h:1058
gslpp::complex B0_Mw2_Mz2_Mw2_Mw2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:424
double S2
The constant .
Definition: EWSMcache.h:897
double Li3_for_F1(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:190
double C0_Mz2_Mw2_0_Mw2_cache[4]
A cache of a PV function.
Definition: EWSMcache.h:984
double mf(const Particle f, const double mu=0.0, const orders order=FULLNNLO) const
The mass of an SM fermion.
Definition: EWSMcache.cpp:49
gslpp::complex B0_Mz2_Mz2_mh2_Mz2() const
A cache method.
Definition: EWSMcache.cpp:349
gslpp::complex C0_Mw2_Mw2_0_Mz2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:995
double B1_Mz2_Mw2_mfprime2_mf2_cache[6][6]
A cache of a PV function.
Definition: EWSMcache.h:967
double Li3_MW2toMTOP2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:176
double D3
The constant .
Definition: EWSMcache.h:898
double B0p_Mz2_Mz2_mh2_Mz2_cache[4]
A cache of a PV function.
Definition: EWSMcache.h:956
double B4
The constant .
Definition: EWSMcache.h:899
double Bfp_Mw2_Mw2_mfprime2_mf2_cache[6][5]
A cache of a PV function.
Definition: EWSMcache.h:979
double Bf_Mw2_Mw2_mfprime2_mf2_cache[6][5]
A cache of a PV function.
Definition: EWSMcache.h:976
double A0_Mw2_mh2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:247
bool FlagCacheInEWSMcache
A flag for caching (true by default).
Definition: EWSMcache.h:885
gslpp::complex Bf_Mz2_Mz2_mf2_mf2(const Particle f) const
A cache method.
Definition: EWSMcache.cpp:781
double A0_Mw2_Mw2_cache[2]
A cache of a PV function.
Definition: EWSMcache.h:927
gslpp::complex Bf_Mz2_0_mfprime2_mf2(const int gen) const
A cache method.
Definition: EWSMcache.cpp:839
gslpp::complex B1_Mz2_0_mfprime2_mf2(const int gen) const
A cache method.
Definition: EWSMcache.cpp:646
gslpp::complex B0_Mw2_Mw2_0_Mw2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:469
double Bf_Mz2_Mw2_mfprime2_mf2_cache[6][6]
A cache of a PV function.
Definition: EWSMcache.h:974
double B0_Mw2_Mw2_Mz2_Mw2_cache[4]
A cache of a PV function.
Definition: EWSMcache.h:950
const StandardModel & SM
A reference to an object of type StandardModel.
Definition: EWSMcache.h:887
gslpp::complex B0_Mz2_0_Mz2_Mw2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:394
double mf_atMz_cache[12]
A cache of the fermion masses at .
Definition: EWSMcache.h:933
gslpp::complex B0p_Mw2_Mw2_0_Mw2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:589
double A0_Mw2_Mz2(const double Mw_i) const
A cache method.
Definition: EWSMcache.cpp:233
gslpp::complex B1(const double mu2, const double p2, const double m02, const double m12) const
.
gslpp::complex B0(const double mu2, const double p2, const double m02, const double m12) const
.
Definition: PVfunctions.cpp:41
gslpp::complex B0p(const double muIR2, const double p2, const double m02, const double m12) const
.
gslpp::complex Bfp(const double mu2, const double p2, const double m02, const double m12) const
.
gslpp::complex Bf(const double mu2, const double p2, const double m02, const double m12) const
.
double A0(const double mu2, const double m2) const
.
Definition: PVfunctions.cpp:23
gslpp::complex C0(const double p2, const double m02, const double m12, const double m22) const
.
gslpp::complex B1p(const double mu2, const double p2, const double m02, const double m12) const
.
A class for particles.
Definition: Particle.h:26
bool is(std::string name_i) const
Definition: Particle.cpp:23
double getMass_scale() const
A get method to access the scale at which the particle mass is defined.
Definition: Particle.h:133
const double & getMass() const
A get method to access the particle mass.
Definition: Particle.h:61
int getIndex() const
Definition: Particle.h:160
double Li3(const double x) const
The trilogarithm .
gslpp::complex Li2(const double x) const
The dilogarithm with a real argument, .
const double Mrun(const double mu, const double m, const quark q, const orders order=FULLNNLO) const
Computes a running quark mass from .
Definition: QCD.cpp:1353
quark
An enum type for quarks.
Definition: QCD.h:323
@ UP
Definition: QCD.h:324
@ BOTTOM
Definition: QCD.h:329
@ DOWN
Definition: QCD.h:325
@ STRANGE
Definition: QCD.h:327
@ CHARM
Definition: QCD.h:326
const double getMtpole() const
A get method to access the pole mass of the top quark.
Definition: QCD.h:600
lepton
An enum type for leptons.
Definition: QCD.h:310
@ MU
Definition: QCD.h:314
@ ELECTRON
Definition: QCD.h:312
@ TAU
Definition: QCD.h:316
const Particle & getQuarks(const QCD::quark q) const
A get method to access a quark as an object of the type Particle.
Definition: QCD.h:536
A model class for the Standard Model.
const Particle & getLeptons(const QCD::lepton p) const
A get method to retrieve the member object of a lepton.
const double getMz() const
A get method to access the mass of the boson .
virtual const double getMHl() const
A get method to retrieve the Higgs mass .
virtual const double cW2(const double Mw_i) const
The square of the cosine of the weak mixing angle in the on-shell scheme, denoted as .
static const int NumSMParamsForEWPO
The number of the SM parameters that are relevant to the EW precision observables.
orders
An enum type for orders in QCD.
Definition: OrderScheme.h:33