14 #include <gsl/gsl_sf.h>
15 #include <boost/bind.hpp>
17 #include <TFitResult.h>
20 : mySM(SM_i), myF_1(new
F_1()), myF_2(new
F_2()),
22 fplus_lat_cache(3, 0.),
54 deltaTparpupdated = 0;
55 deltaTparmupdated = 0;
57 w_sigma = gsl_integration_cquad_workspace_alloc(100);
58 w_delta = gsl_integration_cquad_workspace_alloc(100);
59 w_DTPPR = gsl_integration_cquad_workspace_alloc(100);
61 acc_Re_deltaC7_QCDF = gsl_interp_accel_alloc();
62 acc_Im_deltaC7_QCDF = gsl_interp_accel_alloc();
63 acc_Re_deltaC9_QCDF = gsl_interp_accel_alloc();
64 acc_Im_deltaC9_QCDF = gsl_interp_accel_alloc();
66 spline_Re_deltaC7_QCDF = gsl_spline_alloc(gsl_interp_cspline, GSL_INTERP_DIM_DC);
67 spline_Im_deltaC7_QCDF = gsl_spline_alloc(gsl_interp_cspline, GSL_INTERP_DIM_DC);
68 spline_Re_deltaC9_QCDF = gsl_spline_alloc(gsl_interp_cspline, GSL_INTERP_DIM_DC);
69 spline_Im_deltaC9_QCDF = gsl_spline_alloc(gsl_interp_cspline, GSL_INTERP_DIM_DC);
84 <<
"b_0_fplus" <<
"b_1_fplus" <<
"b_2_fplus" <<
"m_fit_fplus_lat"
85 <<
"b_0_fT" <<
"b_1_fT" <<
"b_2_fT" <<
"m_fit_fT_lat"
86 <<
"b_0_f0" <<
"b_1_f0" <<
"b_2_f0" <<
"m_fit_f0_lat"
88 <<
"r_1_fplus" <<
"r_2_fplus" <<
"m_fit2_fplus" <<
"r_1_fT" <<
"r_2_fT" <<
"m_fit2_fT" <<
"r_2_f0" <<
"m_fit2_f0"
90 <<
"absh_0_MP" <<
"argh_0_MP" <<
"absh_1_MP" <<
"argh_1_MP" <<
"absh_2_MP" <<
"argh_2_MP";
94 <<
"b_0_fplus" <<
"b_1_fplus" <<
"b_2_fplus" <<
"m_fit_fplus_lat"
95 <<
"b_0_fT" <<
"b_1_fT" <<
"b_2_fT" <<
"m_fit_fT_lat"
96 <<
"b_0_f0" <<
"b_1_f0" <<
"b_2_f0" <<
"m_fit_f0_lat"
98 <<
"r_1_fplus" <<
"r_2_fplus" <<
"m_fit2_fplus" <<
"r_1_fT" <<
"r_2_fT" <<
"m_fit2_fT" <<
"r_2_f0" <<
"m_fit2_f0"
100 <<
"reh_0_MP" <<
"imh_0_MP" <<
"reh_1_MP" <<
"imh_1_MP" <<
"reh_2_MP" <<
"imh_2_MP";
103 std::stringstream out;
105 throw std::runtime_error(
"MPll: pseudoscalar " + out.str() +
" not implemented");
112 <<
"b_0_fplus" <<
"b_1_fplus" <<
"b_2_fplus" <<
"m_fit_fplus_lat"
113 <<
"b_0_fT" <<
"b_1_fT" <<
"b_2_fT" <<
"m_fit_fT_lat"
114 <<
"b_0_f0" <<
"b_1_f0" <<
"b_2_f0" <<
"m_fit_f0_lat"
116 <<
"r_1_fplus" <<
"r_2_fplus" <<
"m_fit2_fplus" <<
"r_1_fT" <<
"r_2_fT" <<
"m_fit2_fT" <<
"r_2_f0" <<
"m_fit2_f0"
118 <<
"r1_BK" <<
"r2_BK" <<
"deltaC9_BK" <<
"phDC9_BK";
127 void MPll::updateParameters()
185 std::stringstream out;
187 throw std::runtime_error(
"MPll: pseudoscalar " + out.str() +
" not implemented");
191 #if NFPOLARBASIS_MPLL
224 C_1 = (*(allcoeff[
LO]))(0) + (*(allcoeff[
NLO]))(0);
225 C_1L_bar = (*(allcoeff[
LO]))(0) / 2.;
226 C_2 = ((*(allcoeff[
LO]))(1) + (*(allcoeff[
NLO]))(1));
227 C_2L_bar = (*(allcoeff[
LO]))(1) - (*(allcoeff[
LO]))(0) / 6.;
228 C_3 = ((*(allcoeff[
LO]))(2) + (*(allcoeff[
NLO]))(2));
229 C_4 = (*(allcoeff[
LO]))(3) + (*(allcoeff[
NLO]))(3);
230 C_5 = ((*(allcoeff[
LO]))(4) + (*(allcoeff[
NLO]))(4));
231 C_6 = ((*(allcoeff[
LO]))(5) + (*(allcoeff[
NLO]))(5));
232 C_8 = ((*(allcoeff[
LO]))(7) + (*(allcoeff[
NLO]))(7));
233 C_8L = (*(allcoeff[
LO]))(7);
234 C_S = MW /
Mb * ((*(allcoeff[
LO]))(10) + (*(allcoeff[
NLO]))(10));
235 C_P = MW /
Mb * ((*(allcoeff[
LO]))(11) + (*(allcoeff[
NLO]))(11));
236 C_9p = (*(allcoeffprime[
LO]))(8) + (*(allcoeffprime[
NLO]))(8);
237 C_10p = (*(allcoeffprime[
LO]))(9) + (*(allcoeffprime[
NLO]))(9);
238 C_Sp = MW /
Mb * ((*(allcoeffprime[
LO]))(10) + (*(allcoeffprime[
NLO]))(10));
239 C_Pp = MW /
Mb * ((*(allcoeffprime[
LO]))(11) + (*(allcoeffprime[
NLO]))(11));
247 C_7 = ((*(allcoeff[
LO]))(6) + (*(allcoeff[
NLO]))(6));
248 C_9 = ((*(allcoeff[
LO]))(8) + (*(allcoeff[
NLO]))(8));
249 C_10 = ((*(allcoeff[
LO]))(9) + (*(allcoeff[
NLO]))(9));
251 C_7p = MsoMb * ((*(allcoeffprime[
LO]))(6) + (*(allcoeffprime[
NLO]))(6));
252 C_7p -= MsoMb * (C_7 + 1. / 3. *
C_3 + 4 / 9 *
C_4 + 20. / 3. * C_5 + 80. / 9. * C_6);
256 C_1Lh_bar = (*(allcoeffh[
LO]))(0) / 2.;
257 C_2Lh_bar = (*(allcoeffh[
LO]))(1) - (*(allcoeff[
LO]))(0) / 6.;
258 C_8Lh = (*(allcoeffh[
LO]))(7);
263 H_0_WC = (
C_3 + 4. / 3. *
C_4 + 16. * C_5 + 64. / 3. * C_6);
264 H_c_WC = (4. / 3. * C_1 + C_2 + 6. *
C_3 + 60. * C_5);
265 H_b_WC = (7. *
C_3 + 4. / 3. *
C_4 + 76. * C_5 + 64. / 3. * C_6);
266 fournineth = 4. / 9.;
272 logMc =
log(Mc2 / mu_b2);
273 logMb =
log(Mb2 / mu_b2);
278 NN = ((4. *
GF *
MM *
ale * lambda_t) / (
sqrt(2.)*4. * M_PI)).abs2();
287 twoMM2_MMpMP = twoMM2 * (
MM +
MP);
288 twoMM_MbpMs = twoMM * (
Mb +
Ms);
289 S_L_pre = -(MM2mMP2 / twoMM_MbpMs) * (1 + MsoMb) / (1 - MsoMb);
291 twoMboMM = 2 *
Mb /
MM;
292 sixteenM_PI2 = 16. * M_PI*M_PI;
293 ninetysixM_PI3MM3 = 96. * M_PI * M_PI * M_PI *
MM *
MM*
MM;
300 M_PI2osix = M_PI * M_PI / 6.;
302 sixMMoMb = 6. *
MM /
Mb;
304 deltaT_0 = alpha_s_mub * MboMM / 4. / M_PI;
309 F87_1 = (4. / 3. * M_PI * M_PI - 40. / 3.);
310 F87_2 = (32. / 9. * M_PI * M_PI - 316. / 9.);
311 F87_3 = (200. / 27. * M_PI * M_PI - 658. / 9.);
313 F89_0 = 104. / 9. - 32. / 27. * M_PI * M_PI;
314 F89_1 = 1184. / 27. - 40. / 9. * M_PI * M_PI;
315 F89_2 = (-32. / 3. * M_PI * M_PI + 14212. / 135.);
316 F89_3 = (-560. / 27. * M_PI * M_PI + 193444. / 945.);
322 F29_3 = (-32. / 25515. + 64. / 2835. / Mc2 * Mb2 / Mc2 * Mb2 / Mc2 * Mb2) *
log(
mu_b /
Mb) + (-12.113 + 8.1251 *
gslpp::complex::i());
335 std::map<std::pair<double, double>,
unsigned int >::iterator it;
337 if (I0_updated == 0)
for (it = sigma0Cached.begin(); it != sigma0Cached.end(); ++it) it->second = 0;
338 if (I2_updated == 0)
for (it = sigma2Cached.begin(); it != sigma2Cached.end(); ++it) it->second = 0;
340 if (I0_updated == 0)
for (it = delta0Cached.begin(); it != delta0Cached.end(); ++it) it->second = 0;
341 if (I2_updated == 0)
for (it = delta2Cached.begin(); it != delta2Cached.end(); ++it) it->second = 0;
343 std::map<double, unsigned int >::iterator iti;
344 if (deltaTparpupdated == 0)
for (iti = deltaTparpCached.begin(); iti != deltaTparpCached.end(); ++iti) iti->second = 0;
345 if (deltaTparmupdated == 0)
for (iti = deltaTparmCached.begin(); iti != deltaTparmCached.end(); ++iti) iti->second = 0;
347 if (deltaTparpupdated * deltaTparmupdated == 0)
for (it = I1Cached.begin(); it != I1Cached.end(); ++it) it->second = 0;
361 void MPll::checkCache()
364 if (
MM == k2_cache(0) &&
MP == k2_cache(1)) {
373 if (b_0_fplus == fplus_lat_cache(0) && b_1_fplus == fplus_lat_cache(1) && b_2_fplus == fplus_lat_cache(2)) {
374 fplus_lat_updated = 1;
376 fplus_lat_updated = 0;
377 fplus_lat_cache(0) = b_0_fplus;
378 fplus_lat_cache(1) = b_1_fplus;
379 fplus_lat_cache(2) = b_2_fplus;
382 if (b_0_fT == fT_lat_cache(0) && b_1_fT == fT_lat_cache(1) && b_2_fT == fT_lat_cache(2)) {
386 fT_lat_cache(0) = b_0_fT;
387 fT_lat_cache(1) = b_1_fT;
388 fT_lat_cache(2) = b_2_fT;
391 if (b_0_f0 == f0_lat_cache(0) && b_1_f0 == f0_lat_cache(1) && b_2_f0 == f0_lat_cache(2)) {
395 f0_lat_cache(0) = b_0_f0;
396 f0_lat_cache(1) = b_1_f0;
397 f0_lat_cache(2) = b_2_f0;
400 if (r_1_fplus == fplus_cache(0) && r_2_fplus == fplus_cache(1)) {
404 fplus_cache(0) = r_1_fplus;
405 fplus_cache(1) = r_2_fplus;
408 if (r_1_fT == fT_cache(0) && r_2_fT == fT_cache(1)) {
412 fT_cache(0) = r_1_fT;
413 fT_cache(1) = r_2_fT;
416 if (r_2_f0 == f0_cache) {
423 if (
Mlep == beta_cache) {
430 lambda_updated = k2_updated;
431 F_updated = lambda_updated * beta_updated;
434 VL_updated = k2_updated * fplus_lat_updated;
436 VL_updated = k2_updated * fplus_updated;
440 TL_updated = k2_updated * fT_lat_updated;
442 TL_updated = k2_updated * fT_updated;
445 if (
Mb == SL_cache(0) &&
Ms == SL_cache(1)) {
447 SL_updated = k2_updated * f0_lat_updated;
449 SL_updated = k2_updated * f0_updated;
457 if (
GF == N_cache(0) &&
ale == N_cache(1) &&
MM == N_cache(2) && lambda_t == Nc_cache) {
467 if (C_1 == C_1_cache) {
474 if (C_2 == C_2_cache) {
481 if (
C_3 == C_3_cache) {
488 if (
C_4 == C_4_cache) {
495 if (C_5 == C_5_cache) {
502 if (C_6 == C_6_cache) {
509 if (C_7 == C_7_cache) {
516 if (C_9 == C_9_cache) {
523 if (C_10 == C_10_cache) {
530 if (C_S == C_S_cache) {
537 if (C_P == C_P_cache) {
544 if (C_7p == C_7p_cache) {
551 if (C_9p == C_9p_cache) {
558 if (C_10p == C_10p_cache) {
565 if (C_Sp == C_Sp_cache) {
572 if (C_Pp == C_Pp_cache) {
579 if (C_2Lh_bar == C_2Lh_cache) {
583 C_2Lh_cache = C_2Lh_bar;
586 if (C_8Lh == C_8Lh_cache) {
593 if (
Mb == Ycache(0) &&
Mc == Ycache(1)) {
594 Yupdated = C_1_updated * C_2_updated * C_3_updated * C_4_updated * C_5_updated * C_6_updated;
602 if (
MM == H_V0cache(0) &&
Mb == H_V0cache(1) &&
h_0 == H_V0Ccache[0] && h_1 == H_V0Ccache[1] && h_2 == H_V0Ccache[2]) {
603 H_V0updated = N_updated * C_9_updated * Yupdated * VL_updated * C_9p_updated * C_7_updated * TL_updated * C_7p_updated;
613 if (
MM == H_V0cache(0) &&
Mb == H_V0cache(1) && r_1 == H_V0Ccache_dispersion[0] && r_2 == H_V0Ccache_dispersion[1] && Delta_C9 == H_V0Ccache_dispersion[2] && exp_Phase == H_V0Ccache_dispersion[3]) {
614 H_V0updated = N_updated * C_9_updated * Yupdated * VL_updated * C_9p_updated * C_7_updated * TL_updated * C_7p_updated;
619 H_V0Ccache_dispersion[0] = r_1;
620 H_V0Ccache_dispersion[1] = r_2;
621 H_V0Ccache_dispersion[2] = Delta_C9;
622 H_V0Ccache_dispersion[3] = exp_Phase;
626 H_A0updated = N_updated * C_10_updated * VL_updated * C_10p_updated;
628 if (
Mb == H_Scache(0) && MW == H_Scache(1)) {
629 H_Supdated = N_updated * C_S_updated * SL_updated * C_Sp_updated;
636 if (
Mb == H_P_cache(0) && MW == H_P_cache(1) &&
Mlep == H_P_cache(2) &&
Ms == H_P_cache(3)) {
637 H_P_updated = N_updated * C_P_updated * SL_updated * C_Pp_updated * SL_updated * C_10_updated * C_10p_updated;
646 if (
MM == T_cache(0) &&
Mb == T_cache(1) &&
Mc == T_cache(2) &&
658 deltaTparpupdated = C_2Lh_updated * T_updated;
659 deltaTparmupdated = C_2Lh_updated * C_8Lh_updated * T_updated;
661 I0_updated = F_updated * H_V0updated * H_A0updated * H_P_updated * beta_updated * H_Supdated * deltaTparmupdated;
662 I2_updated = F_updated * beta_updated * H_V0updated * H_A0updated * deltaTparmupdated;
663 I8_updated = F_updated * beta_updated * H_Supdated * H_V0updated * deltaTparmupdated;
670 double MPll::LCSR_fit1(
double q2,
double r_1,
double r_2,
double m_fit2)
672 return r_1 / (1. - q2 / m_fit2) + r_2 /
pow((1. - q2 / m_fit2), 2.);
676 double MPll::LCSR_fit2(
double q2,
double r_2,
double m_fit2)
678 return r_2 / (1. - q2 / m_fit2);
691 double MPll::LATTICE_fit1(
double q2,
double b_0,
double b_1,
double b_2,
double m_fit2)
694 double z3 =
zeta(q2) * z2;
696 return 1. / (1. - q2 / m_fit2) * (b_0 + b_1 * (
zeta(q2) - 1. / 3. * z3) + b_2 * (z2 + 2. / 3. * z3));
700 double MPll::LATTICE_fit2(
double q2,
double b_0,
double b_1,
double b_2,
double m_fit2)
702 return 1. / (1. - q2 / m_fit2) * (b_0 + b_1 *
zeta(q2) + b_2 *
zeta(q2) *
zeta(q2));
705 double MPll::f_plus(
double q2)
708 return LATTICE_fit1(q2, b_0_fplus, b_1_fplus, b_2_fplus, m_fit2_fplus_lat);
710 return LCSR_fit1(q2, r_1_fplus, r_2_fplus, m_fit2_fplus);
714 double MPll::f_T(
double q2)
717 return LATTICE_fit1(q2, b_0_fT, b_1_fT, b_2_fT, m_fit2_fT_lat);
719 return LCSR_fit1(q2, r_1_fT, r_2_fT, m_fit2_fT);
723 double MPll::f_0(
double q2)
726 return LATTICE_fit2(q2, b_0_f0, b_1_f0, b_2_f0, m_fit2_f0_lat);
728 return LCSR_fit2(q2, r_2_f0, m_fit2_f0);
742 double MPll::S_L(
double q2)
744 return S_L_pre * f_0(q2);
753 std::pair<double, double > uq2 = std::make_pair(u, q2);
755 if (I1Cached[uq2] == 0) {
761 L1xp =
log(1. - 1. / xp) *
log(1. - xp) - M_PI2osix +
dilog(xp / (xp - 1.));
762 L1xm =
log(1. - 1. / xm) *
log(1. - xm) - M_PI2osix +
dilog(xm / (xm - 1.));
763 L1yp =
log(1. - 1. / yp) *
log(1. - yp) - M_PI2osix +
dilog(yp / (yp - 1.));
764 L1ym =
log(1. - 1. / ym) *
log(1. - ym) - M_PI2osix +
dilog(ym / (ym - 1.));
766 cacheI1[uq2] = 1. + twoMc2 / ubar / (MM2 - q2)*(L1xp + L1xm - L1yp - L1ym);
775 Ee = (MM2 - q2) / twoMM;
782 gslpp::complex tpar = twoMM / Ee / ubar * I1(u, q2) + (ubar * MM2 + u * q2) / Ee / Ee / ubar / ubar * (B01 - B00);
788 double ubar = 1. - u;
790 + sixMMoMb * H_c(ubar * MM2 + u * q2,
mu_h *
mu_h) * C_2Lh_bar);
793 double MPll::Integrand_ReTparplus(
double up)
796 return ((Tparplus(u, tmpq2)*6. * u * (1. - u)*
797 (1 + threeGegen0 * (2. * u - 1)
801 double MPll::Integrand_ImTparplus(
double up)
804 return ((Tparplus(u, tmpq2)*6. * u * (1. - u)*
805 (1 + threeGegen0 * (2. * u - 1)
809 double MPll::Integrand_ReTparminus(
double up)
815 return ((Tparminus(u, tmpq2)*6. * u * (1. - u)*
816 (1 + threeGegen0 * (2. * u - 1)
817 + threeGegen1otwo * ((10. * u - 5.)*(2. * u - 1.) - 1.))) / Lambdamin).real();
820 double MPll::Integrand_ImTparminus(
double up)
826 return ((Tparminus(u, tmpq2)*6. * u * (1. - u)*
827 (1 + threeGegen0 * (2. * u - 1)
828 + threeGegen1otwo * ((10. * u - 5.)*(2. * u - 1.) - 1.))) / Lambdamin).imag();
831 double MPll::Integrand_ImTpar_pm(
double up)
833 return Integrand_ImTparplus(up) + Integrand_ImTparminus(up);
836 double MPll::Integrand_ReTpar_pm(
double up)
838 return Integrand_ReTparplus(up) + Integrand_ReTparminus(up);
849 return (-1424. / 729. + 16. / 243. * i * M_PI + 64. / 27. * Lc)*Lm - 16. / 243. * Lm * Ls + (16. / 1215. - 32. / 135. / Mc2 * Mb2) * Lm * s
850 + (4. / 2835. - 8. / 315. / Mc2 * Mb2 / Mc2 * Mb2) * Lm * s2 + (16. / 76545. - 32. / 8505 / Mc2 * Mb2 / Mc2 * Mb2 / Mc2 * Mb2) * Lm * s * s2 - 256. / 243. * Lm * Lm
851 + (-11.65 + 0.18223 * i + (-24.709 - 0.13474 * i) * s + (-43.588 - 0.4738 * i) * s2 + (-86.22 - 1.3542 * i) * s * s2
852 + (-0.080959 - 0.051864 * i + (-0.036585 + 0.024753 * i) * s + (-0.021692 + 0.036925 * i) * s2 + (0.013282 + 0.052023 * i) * s * s2) * Ls);
861 return F27_0 + F27_1 * s + F27_2 * s2 + F27_3 * s * s2 + F27_L1_1 * Ls * s + F27_L1_2 * Ls * s2 + F27_L1_3 * Ls * s * s2;
870 return F29_0 + F29_L1 * Ls + F29_1 * s + F29_2 * s2 + F29_3 * s * s2 + F29_L1_1 * Ls * s + F29_L1_2 * Ls * s2 + F29_L1_3 * Ls * s2 *s;
877 return F87_0 + F87_1 * s + F87_2 * s2 + F87_3 * s * s2 - 0.888889 *
log(s)*(1. + s + s2 + s * s2);
880 double MPll::F89(
double q2)
884 return F89_0 + F89_1 * s + F89_2 * s2 + F89_3 * s * s2 + 1.77778 *
log(s)*(1. + s + s2 + s * s2);
889 return -(C_2L_bar * F27(q2) + C_8L * F87(q2) +
MM / 2. /
Mb *
890 (C_2L_bar * F29(q2) + 2. * C_1L_bar * (F19(q2) + F29(q2) / 6.) + C_8L * F89(q2)));
899 if (deltaTparpCached[q2] == 0) {
902 if (gsl_integration_cquad(&DTPPR, 0., 1., 1.e-2, 1.e-1, w_DTPPR, &avaDTPPR, &errDTPPR, NULL) != 0)
return std::numeric_limits<double>::quiet_NaN();
903 double ReTppint = avaDTPPR;
906 if (gsl_integration_cquad(&DTPPR, 0., 1., 1.e-2, 1.e-1, w_DTPPR, &avaDTPPR, &errDTPPR, NULL) != 0)
return std::numeric_limits<double>::quiet_NaN();
907 double ImTppint = avaDTPPR;
910 deltaTparpCached[q2] = 1;
915 return deltaT_0 * Cpar(q2) + deltaT_1par * cacheDeltaTparp[q2] / f_plus(q2);
918 double MPll::reDC9fit(
double* x,
double* p)
920 return p[0] / x[0] + p[1] + p[2] * x[0] + p[3] * x[0] * x[0] + p[4] * x[0] * x[0] * x[0] + p[5] * x[0] * x[0] * x[0] * x[0] + p[6] * x[0] * x[0] * x[0] * x[0] * x[0];
923 double MPll::imDC9fit(
double* x,
double* p)
925 return p[0] / x[0] + p[1] + p[2] * x[0] + p[3] * x[0] * x[0] + p[4] * x[0] * x[0] * x[0] + p[5] * x[0] * x[0] * x[0] * x[0] + p[6] * x[0] * x[0] * x[0] * x[0] * x[0] + p[7] * x[0] * x[0] * x[0] * x[0] * x[0] * x[0];
930 void MPll::fit_DeltaC9_mumu()
933 for (
double i = 0.1; i < MPllSWITCH; i += 0.4) {
935 myq2.push_back(q2tmp);
936 ReDeltaC9.push_back((deltaTpar(q2tmp)).real());
937 ImDeltaC9.push_back((deltaTpar(q2tmp)).imag());
940 for (
double i = MPllSWITCH; i < 8.2; i += 0.4) {
942 myq2.push_back(q2tmp);
943 ReDeltaC9.push_back(q2tmp * (deltaTpar(q2tmp)).real());
944 ImDeltaC9.push_back(q2tmp * (deltaTpar(q2tmp)).imag());
948 gr1 = TGraph(dim, myq2.data(), ReDeltaC9.data());
949 gr2 = TGraph(dim, myq2.data(), ImDeltaC9.data());
951 reffit = TF1(
"reffit",
this, &MPll::reDC9fit, 0, 8.1, 7,
"MPll",
"reDC9fit");
952 imffit = TF1(
"imffit",
this, &MPll::imDC9fit, 0, 8.1, 8,
"MPll",
"imDC9fit");
954 refres = gr1.Fit(&reffit,
"SQN0+rob=0.99");
955 imfres = gr2.Fit(&imffit,
"SQN0+rob=0.99");
964 if (q2 < MPllSWITCH)
return (reDC9fit(&q2, const_cast<double *> (refres->GetParams()))
965 +
gslpp::complex::i() * imDC9fit(&q2, const_cast<double *> (imfres->GetParams())));
966 else return (reDC9fit(&q2, const_cast<double *> (refres->GetParams()))
967 +
gslpp::complex::i() * imDC9fit(&q2, const_cast<double *> (imfres->GetParams()))) / q2;
973 return deltaTpar(q2);
979 if (spline)
return gsl_spline_eval(spline_Re_deltaC7_QCDF, q2, acc_Re_deltaC7_QCDF);
992 gslpp::complex F_87 = F87_0 + F87_1 * sh + F87_2 * sh2 + F87_3 * sh * sh2 - 8. / 9. *
log(sh) * (sh + sh2 + sh * sh2);
998 return -alpha_s_mub / (4. * M_PI) * (delta_t );
1004 if (spline)
return gsl_spline_eval(spline_Re_deltaC9_QCDF, q2, acc_Re_deltaC9_QCDF);
1017 gslpp::complex F_89 = (F89_0 + F89_1 * sh + F89_2 * sh2 + F89_3 * sh * sh2 + 16. / 9. *
log(sh) * (1. + sh + sh2 + sh * sh2));
1023 return -alpha_s_mub / (4. * M_PI) * (delta_t );
1026 void MPll::spline_QCDF_func()
1028 int dim_DC = GSL_INTERP_DIM_DC;
1030 double interval_DC = (9.9 - min) / ((
double) dim_DC);
1031 double q2_spline_DC[dim_DC];
1032 double fq2_Re_deltaC7_QCDF[dim_DC], fq2_Im_deltaC7_QCDF[dim_DC], fq2_Re_deltaC9_QCDF[dim_DC], fq2_Im_deltaC9_QCDF[dim_DC];
1034 for (
int i = 0; i < dim_DC; i++) {
1035 q2_spline_DC[i] = min + (double) i*interval_DC;
1036 fq2_Re_deltaC7_QCDF[i] = deltaC7_QCDF(q2_spline_DC[i],
false).
real();
1037 fq2_Im_deltaC7_QCDF[i] = deltaC7_QCDF(q2_spline_DC[i],
false).imag();
1038 fq2_Re_deltaC9_QCDF[i] = deltaC9_QCDF(q2_spline_DC[i],
false).real();
1039 fq2_Im_deltaC9_QCDF[i] = deltaC9_QCDF(q2_spline_DC[i],
false).imag();
1043 gsl_spline_init(spline_Re_deltaC7_QCDF, q2_spline_DC, fq2_Re_deltaC7_QCDF, dim_DC);
1044 gsl_spline_init(spline_Im_deltaC7_QCDF, q2_spline_DC, fq2_Im_deltaC7_QCDF, dim_DC);
1045 gsl_spline_init(spline_Re_deltaC9_QCDF, q2_spline_DC, fq2_Re_deltaC9_QCDF, dim_DC);
1046 gsl_spline_init(spline_Im_deltaC9_QCDF, q2_spline_DC, fq2_Im_deltaC9_QCDF, dim_DC);
1056 double x = fourMc2 / q2;
1059 if (x > 1.) par =
sqrt(x - 1.) * atan(1. /
sqrt(x - 1.));
1060 else par =
sqrt(1. - x) * (
log((1. +
sqrt(1. - x)) /
sqrt(x)) - ihalfMPI);
1061 return -fournineth * (
log(Mc2 / mu2) - twothird - x) - fournineth * (2. + x) * par;
1066 double x = fourMb2 / q2;
1069 if (x > 1.) par =
sqrt(x - 1.) * atan(1. /
sqrt(x - 1.));
1070 else par =
sqrt(1. - x) * (
log((1. +
sqrt(1. - x)) /
sqrt(x)) - ihalfMPI);
1072 return -fournineth * (
log(Mb2 / mu2) - twothird - x) - fournineth * (2. + x) * par;
1077 return (H_0_pre - fournineth *
log(q2 / mu_b2));
1082 return -half * H_0(q2) * H_0_WC + H_c(q2, mu_b2) * H_c_WC - half * H_b(q2, mu_b2) * H_b_WC;
1087 if (q2 < 4. *
Mc *
Mc)
1088 return -8. / 9. *
log(
Mc /
Mb) + 8. / 27. + 16. / 9. *
Mc *
Mc / q2 - 4. / 9. * (2. + 4. *
Mc *
Mc / q2) * (
sqrt(4. *
Mc *
Mc / q2 - 1.) * atan(1. /
sqrt(4. *
Mc *
Mc / q2 - 1.)));
1095 return ((Delta_C9 + r_1 * q2 /
mJ2) / (1. - r_2 * q2 /
mJ2) - (3. * (-0.267) + 1.117) *
funct_g(q2))*exp_Phase;
1102 return (twoMboMM *
h_0 * T_L(q2) + h_1 * q2 / MM2 * V_L(q2)) / sixteenM_PI2 + h_2 * q2 * q2;
1104 return -q2 / (MM2 * sixteenM_PI2) * V_L(q2) *
DeltaC9_KD(q2);
1110 return -((C_9 + deltaC9_QCDF(q2, SPLINE) + Y(q2) - etaP *
pow(-1, angmomP) * C_9p) * V_L(q2) + MM2 / q2 * (twoMboMM * (C_7 + deltaC7_QCDF(q2, SPLINE) - etaP *
pow(-1, angmomP) * C_7p) * T_L(q2) - sixteenM_PI2 *
h_lambda(q2)));
1115 return (-C_10 + etaP *
pow(-1, angmomP) * C_10p) *V_L(q2);
1120 return MboMW * (C_S - etaP *
pow(-1, angmomP) * C_Sp) * S_L(q2);
1125 return ( MboMW * (C_P - etaP *
pow(-1, angmomP) * C_Pp) + twoMlepMb / q2 * (C_10 * (1. + etaP *
pow(-1, angmomP) * MsoMb) - C_10p * (etaP *
pow(-1, angmomP) + MsoMb))) * S_L(q2);
1131 double MPll::k2(
double q2)
1133 return (MM4 + q2 * q2 + MP4 - twoMP2 * q2 - twoMM2 * (q2 + MP2)) / fourMM2;
1136 double MPll::beta(
double q2)
1138 return sqrt(1. - 4. * Mlep2 / q2);
1141 double MPll::beta2(
double q2)
1143 return 1. - 4. * Mlep2 / q2;
1146 double MPll::lambda(
double q2)
1148 return 4. * MM2 * k2(q2);
1151 double MPll::F(
double q2)
1153 return sqrt(lambda(q2)) * beta(q2) * q2 / (ninetysixM_PI3MM3);
1156 double MPll::I_1c(
double q2)
1162 double MPll::I_2c(
double q2)
1164 return -F(q2) * beta2(q2) / 2. * (
H_V(q2).
abs2() +
H_A(q2).
abs2());
1167 double MPll::I_6c(
double q2)
1172 double MPll::Delta(
int i,
double q2)
1182 std::pair<double, double > qbin = std::make_pair(q_min, q_max);
1184 old_handler = gsl_set_error_handler_off();
1188 if (sigma0Cached[qbin] == 0) {
1190 if (gsl_integration_cquad(&FS, q_min, q_max, 1.e-2, 1.e-1, w_sigma, &avaSigma, &errSigma, NULL) != 0)
return std::numeric_limits<double>::quiet_NaN();
1191 cacheSigma0[qbin] = NN*avaSigma;
1192 sigma0Cached[qbin] = 1;
1194 return cacheSigma0[qbin];
1197 if (sigma2Cached[qbin] == 0) {
1199 if (gsl_integration_cquad(&FS, q_min, q_max, 1.e-2, 1.e-1, w_sigma, &avaSigma, &errSigma, NULL) != 0)
return std::numeric_limits<double>::quiet_NaN();
1200 cacheSigma2[qbin] = NN*avaSigma;
1201 sigma2Cached[qbin] = 1;
1203 return cacheSigma2[qbin];
1206 std::stringstream out;
1208 throw std::runtime_error(
"MPll::integrateSigma: index " + out.str() +
" not implemented");
1211 gsl_set_error_handler(old_handler);
1221 return getSigma1c(q_2);
1224 return getSigma2c(q_2);
1227 return getSigma6c(q_2);
1230 std::stringstream out;
1232 throw std::runtime_error(
"MPll::getSigma: index " + out.str() +
" not implemented");
1240 std::pair<double, double > qbin = std::make_pair(q_min, q_max);
1242 old_handler = gsl_set_error_handler_off();
1246 if (delta0Cached[qbin] == 0) {
1248 if (gsl_integration_cquad(&FD, q_min, q_max, 1.e-2, 1.e-1, w_delta, &avaDelta, &errDelta, NULL) != 0)
return std::numeric_limits<double>::quiet_NaN();
1249 cacheDelta0[qbin] = NN*avaDelta;
1250 delta0Cached[qbin] = 1;
1252 return cacheDelta0[qbin];
1255 if (delta2Cached[qbin] == 0) {
1257 if (gsl_integration_cquad(&FD, q_min, q_max, 1.e-2, 1.e-1, w_delta, &avaDelta, &errDelta, NULL) != 0)
return std::numeric_limits<double>::quiet_NaN();
1258 cacheDelta2[qbin] = NN*avaDelta;
1259 delta2Cached[qbin] = 1;
1261 return cacheDelta2[qbin];
1264 std::stringstream out;
1266 throw std::runtime_error(
"MPll::integrateDelta: index " + out.str() +
" not implemented");
1269 gsl_set_error_handler(old_handler);