14 #include <gsl/gsl_errno.h>
15 #include <gsl/gsl_math.h>
16 #include <gsl/gsl_roots.h>
17 #include <gsl/gsl_sf.h>
19 #include <Math/WrappedTF1.h>
20 #include <Math/BrentRootFinder.h>
25 "mup",
"mdown",
"mcharm",
"mstrange",
"mtop",
"mbottom",
27 "MK0",
"MKp",
"MD",
"MBd",
"MBp",
"MBs",
"MKstar",
"Mphi",
28 "tKl",
"tKp",
"tBd",
"tBp",
"tBs",
"tKstar",
"tphi",
30 "FK",
"FD",
"FBs",
"FBsoFBd",
"FKstar",
"FKstarp",
"Fphi",
31 "BK1",
"BK2",
"BK3",
"BK4",
"BK5",
"BKscale",
"BKscheme",
32 "BD1",
"BD2",
"BD3",
"BD4",
"BD5",
"BDscale",
"BDscheme",
34 "BBs1",
"BBs2",
"BBs3",
"BBs4",
"BBs5",
"BBsscale",
"BBsscheme",
35 "BK(1/2)1",
"BK(1/2)2",
"BK(1/2)3",
"BK(1/2)4",
"BK(1/2)5",
36 "BK(1/2)6",
"BK(1/2)7",
"BK(1/2)8",
"BK(1/2)9",
"BK(1/2)10",
37 "BK(3/2)1",
"BK(3/2)2",
"BK(3/2)3",
"BK(3/2)4",
"BK(3/2)5",
38 "BK(3/2)6",
"BK(3/2)7",
"BK(3/2)8",
"BK(3/2)9",
"BK(3/2)10",
39 "BKd_scale",
"BKd_scheme",
40 "ReA2_Kd",
"ReA0_Kd",
"Omega_eta_etap",
41 "Br_Kp_P0enu",
"Br_Kp_munu",
"Br_B_Xcenu",
"DeltaP_cu",
"IB_Kl",
"IB_Kp",
42 "a_0V",
"a_1V",
"a_2V",
"MRV",
"a_0A0",
"a_1A0",
"a_2A0",
"MRA0",
"a_0A1",
"a_1A1",
"a_2A1",
"MRA1",
"a_0A12",
"a_1A12",
"a_2A12",
"MRA12",
43 "a_0T1",
"a_1T1",
"a_2T1",
"MRT1",
"a_0T2",
"a_1T2",
"a_2T2",
"MRT2",
"a_0T23",
"a_1T23",
"a_2T23",
"MRT23",
44 "a_0Vphi",
"a_1Vphi",
"a_2Vphi",
"MRVphi",
"a_0A0phi",
"a_1A0phi",
"a_2A0phi",
"MRA0phi",
"a_0A1phi",
"a_1A1phi",
"a_2A1phi",
"MRA1phi",
"a_0A12phi",
"a_1A12phi",
"a_2A12phi",
45 "MRA12phi",
"a_0T1phi",
"a_1T1phi",
"a_2T1phi",
"MRT1phi",
"a_0T2phi",
"a_1T2phi",
"a_2T2phi",
"MRT2phi",
"a_0T23phi",
"a_1T23phi",
"a_2T23phi",
"MRT23phi",
46 "absh_0",
"absh_p",
"absh_m",
"argh_0",
"argh_p",
"argh_m",
47 "absh_0_1",
"absh_p_1",
"absh_m_1",
"argh_0_1",
"argh_p_1",
"argh_m_1",
48 "absh_0_2",
"absh_p_2",
"absh_m_2",
"argh_0_2",
"argh_p_2",
"argh_m_2",
49 "r_1_fplus",
"r_2_fplus",
"m_fit2_fplus",
"r_1_fT",
"r_2_fT",
"m_fit2_fT",
"r_2_f0",
"m_fit2_f0",
50 "absh_0_MP",
"argh_0_MP",
"absh_0_1_MP",
"argh_0_1_MP",
51 "bsgamma_E0",
"BLNPcorr",
"Gambino_mukin",
"Gambino_BRsem",
"Gambino_Mbkin",
"Gambino_Mcatmuc",
"Gambino_mupi2",
"Gambino_rhoD3",
"Gambino_muG2",
"Gambino_rhoLS3",
52 "lambdaB",
"alpha1kst",
"alpha2kst"
57 : BBs(5), BBd(5), BD(5), BK(5), BKd1(10), BKd3(10)
60 CF = Nc / 2. - 1. / (2. * Nc);
62 quarks[
UP] =
Particle(
"UP", 0., 2., 0., 2. / 3., .5);
64 quarks[
TOP] =
Particle(
"TOP", 0., 0., 0., 2. / 3., .5);
65 quarks[
DOWN] =
Particle(
"DOWN", 0., 2., 0., -1. / 3., -.5);
68 zeta2 = gsl_sf_zeta_int(2);
69 zeta3 = gsl_sf_zeta_int(3);
70 for (
int i = 0; i < CacheSize; i++) {
71 for (
int j = 0; j < 8; j++)
73 for (
int j = 0; j < 4; j++)
74 logLambda5_cache[j][i] = 0.;
75 for (
int j = 0; j < 10; j++)
76 mrun_cache[j][i] = 0.;
77 for (
int j = 0; j < 5; j++)
78 mp2mbar_cache[j][i] = 0.;
81 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"AlsM", boost::cref(AlsM)));
82 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"MAls", boost::cref(MAls)));
83 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"mup", boost::cref(quarks[
UP].getMass())));
84 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"mdown", boost::cref(quarks[
DOWN].getMass())));
85 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"mcharm", boost::cref(quarks[
CHARM].getMass())));
86 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"mstrange", boost::cref(quarks[
STRANGE].getMass())));
87 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"mtop", boost::cref(mtpole)));
88 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"mbottom", boost::cref(quarks[
BOTTOM].getMass())));
89 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"muc", boost::cref(muc)));
90 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"mub", boost::cref(mub)));
91 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"mut", boost::cref(mut)));
92 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"MK0", boost::cref(mesons[
K_0].getMass())));
93 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"MKp", boost::cref(mesons[
K_P].getMass())));
94 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"MD", boost::cref(mesons[
D_0].getMass())));
95 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"MBd", boost::cref(mesons[
B_D].getMass())));
96 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"MBp", boost::cref(mesons[
B_P].getMass())));
97 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"MBs", boost::cref(mesons[
B_S].getMass())));
98 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"MKstar", boost::cref(mesons[
K_star].getMass())));
99 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"Mphi", boost::cref(mesons[
PHI].getMass())));
100 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"tKl", boost::cref(mesons[
K_0].getWidth())));
101 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"tKp", boost::cref(mesons[
K_P].getWidth())));
102 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"tBd", boost::cref(mesons[
B_D].getWidth())));
103 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"tBp", boost::cref(mesons[
B_P].getWidth())));
104 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"tBs", boost::cref(mesons[
B_S].getWidth())));
105 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"DGs_Gs", boost::cref(mesons[
B_S].getDgamma_gamma())));
106 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"tKstar", boost::cref(mesons[
K_star].getWidth())));
107 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"tphi", boost::cref(mesons[
PHI].getWidth())));
108 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"FK", boost::cref(mesons[
K_0].getDecayconst())));
109 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"FD", boost::cref(mesons[
D_0].getDecayconst())));
110 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"FBs", boost::cref(mesons[
B_S].getDecayconst())));
111 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"FKstar", boost::cref(mesons[
K_star].getDecayconst())));
112 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"FKstarp", boost::cref(FKstarp)));
113 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"Fphi", boost::cref(mesons[
PHI].getDecayconst())));
114 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"FBsoFBd", boost::cref(FBsoFBd)));
115 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"BK1", boost::cref(BK.getBpars()(0))));
116 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"BK2", boost::cref(BK.getBpars()(1))));
117 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"BK3", boost::cref(BK.getBpars()(2))));
118 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"BK4", boost::cref(BK.getBpars()(3))));
119 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"BK5", boost::cref(BK.getBpars()(4))));
120 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"BKscale", boost::cref(BK.getMu())));
121 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"BD1", boost::cref(BD.getBpars()(0))));
122 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"BD2", boost::cref(BD.getBpars()(1))));
123 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"BD3", boost::cref(BD.getBpars()(2))));
124 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"BD4", boost::cref(BD.getBpars()(3))));
125 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"BD5", boost::cref(BD.getBpars()(4))));
126 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"BDscale", boost::cref(BD.getMu())));
127 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"BBsoBBd", boost::cref(BBsoBBd)));
128 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"BBs1", boost::cref(BBs.getBpars()(0))));
129 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"BBs2", boost::cref(BBs.getBpars()(1))));
130 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"BBs3", boost::cref(BBs.getBpars()(2))));
131 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"BBs4", boost::cref(BBs.getBpars()(3))));
132 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"BBs5", boost::cref(BBs.getBpars()(4))));
133 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"BBsscale", boost::cref(BBs.getMu())));
134 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"BK(1/2)1", boost::cref(BKd1.getBpars()(0))));
135 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"BK(1/2)2", boost::cref(BKd1.getBpars()(1))));
136 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"BK(1/2)3", boost::cref(BKd1.getBpars()(2))));
137 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"BK(1/2)4", boost::cref(BKd1.getBpars()(3))));
138 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"BK(1/2)5", boost::cref(BKd1.getBpars()(4))));
139 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"BK(1/2)6", boost::cref(BKd1.getBpars()(5))));
140 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"BK(1/2)7", boost::cref(BKd1.getBpars()(6))));
141 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"BK(1/2)8", boost::cref(BKd1.getBpars()(7))));
142 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"BK(1/2)9", boost::cref(BKd1.getBpars()(8))));
143 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"BK(1/2)10", boost::cref(BKd1.getBpars()(9))));
144 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"BK(3/2)1", boost::cref(BKd3.getBpars()(0))));
145 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"BK(3/2)2", boost::cref(BKd3.getBpars()(1))));
146 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"BK(3/2)3", boost::cref(BKd3.getBpars()(2))));
147 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"BK(3/2)4", boost::cref(BKd3.getBpars()(3))));
148 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"BK(3/2)5", boost::cref(BKd3.getBpars()(4))));
149 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"BK(3/2)6", boost::cref(BKd3.getBpars()(5))));
150 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"BK(3/2)7", boost::cref(BKd3.getBpars()(6))));
151 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"BK(3/2)8", boost::cref(BKd3.getBpars()(7))));
152 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"BK(3/2)9", boost::cref(BKd3.getBpars()(8))));
153 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"BK(3/2)10", boost::cref(BKd3.getBpars()(9))));
154 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"BKd_scale", boost::cref(BKd1.getMu())));
155 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"ReA2_Kd", boost::cref(ReA2_Kd)));
156 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"ReA0_Kd", boost::cref(ReA0_Kd)));
157 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"Omega_eta_etap", boost::cref(Omega_eta_etap)));
158 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"Br_Kp_P0enu", boost::cref(Br_Kp_P0enu)));
159 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"Br_Kp_munu", boost::cref(Br_Kp_munu)));
160 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"Br_B_Xcenu", boost::cref(Br_B_Xcenu)));
161 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"DeltaP_cu", boost::cref(DeltaP_cu)));
162 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"IB_Kl", boost::cref(IB_Kl)));
163 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"IB_Kp", boost::cref(IB_Kp)));
164 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"absh_0", boost::cref(absh_0)));
165 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"absh_p", boost::cref(absh_p)));
166 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"absh_m", boost::cref(absh_m)));
167 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"argh_0", boost::cref(argh_0)));
168 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"argh_p", boost::cref(argh_p)));
169 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"argh_m", boost::cref(argh_m)));
170 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"absh_0_1", boost::cref(absh_0_1)));
171 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"absh_p_1", boost::cref(absh_p_1)));
172 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"absh_m_1", boost::cref(absh_m_1)));
173 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"argh_0_1", boost::cref(argh_0_1)));
174 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"argh_p_1", boost::cref(argh_p_1)));
175 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"argh_m_1", boost::cref(argh_m_1)));
176 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"absh_0_2", boost::cref(absh_0_2)));
177 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"absh_p_2", boost::cref(absh_p_2)));
178 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"absh_m_2", boost::cref(absh_m_2)));
179 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"argh_0_2", boost::cref(argh_0_2)));
180 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"argh_p_2", boost::cref(argh_p_2)));
181 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"argh_m_2", boost::cref(argh_m_2)));
182 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"absh_0_MP", boost::cref(absh_0_MP)));
183 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"argh_0_MP", boost::cref(argh_0_MP)));
184 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"absh_0_1_MP", boost::cref(absh_0_1_MP)));
185 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"argh_0_1_MP", boost::cref(argh_0_1_MP)));
186 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"a_0V", boost::cref(a_0V)));
187 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"a_1V", boost::cref(a_1V)));
188 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"a_2V", boost::cref(a_2V)));
189 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"MRV", boost::cref(MRV)));
190 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"a_0A0", boost::cref(a_0A0)));
191 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"a_1A0", boost::cref(a_1A0)));
192 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"a_2A0", boost::cref(a_2A0)));
193 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"MRA0", boost::cref(MRA0)));
194 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"a_0A1", boost::cref(a_0A1)));
195 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"a_1A1", boost::cref(a_1A1)));
196 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"a_2A1", boost::cref(a_2A1)));
197 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"MRA1", boost::cref(MRA1)));
198 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"a_0A12", boost::cref(a_0A12)));
199 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"a_1A12", boost::cref(a_1A12)));
200 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"a_2A12", boost::cref(a_2A12)));
201 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"MRA12", boost::cref(MRA12)));
202 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"a_0T1", boost::cref(a_0T1)));
203 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"a_1T1", boost::cref(a_1T1)));
204 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"a_2T1", boost::cref(a_2T1)));
205 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"MRT1", boost::cref(MRT1)));
206 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"a_0T2", boost::cref(a_0T2)));
207 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"a_1T2", boost::cref(a_1T2)));
208 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"a_2T2", boost::cref(a_2T2)));
209 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"MRT2", boost::cref(MRT2)));
210 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"a_0T23", boost::cref(a_0T23)));
211 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"a_1T23", boost::cref(a_1T23)));
212 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"a_2T23", boost::cref(a_2T23)));
213 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"MRT23", boost::cref(MRT23)));
214 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"a_0Vphi", boost::cref(a_0Vphi)));
215 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"a_1Vphi", boost::cref(a_1Vphi)));
216 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"a_2Vphi", boost::cref(a_2Vphi)));
217 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"MRVphi", boost::cref(MRVphi)));
218 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"a_0A0phi", boost::cref(a_0A0phi)));
219 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"a_1A0phi", boost::cref(a_1A0phi)));
220 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"a_2A0phi", boost::cref(a_2A0phi)));
221 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"MRA0phi", boost::cref(MRA0phi)));
222 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"a_0A1phi", boost::cref(a_0A1phi)));
223 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"a_1A1phi", boost::cref(a_1A1phi)));
224 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"a_2A1phi", boost::cref(a_2A1phi)));
225 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"MRA1phi", boost::cref(MRA1phi)));
226 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"a_0A12phi", boost::cref(a_0A12phi)));
227 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"a_1A12phi", boost::cref(a_1A12phi)));
228 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"a_2A12phi", boost::cref(a_2A12phi)));
229 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"MRA12phi", boost::cref(MRA12phi)));
230 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"a_0T1phi", boost::cref(a_0T1phi)));
231 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"a_1T1phi", boost::cref(a_1T1phi)));
232 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"a_2T1phi", boost::cref(a_2T1phi)));
233 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"MRT1phi", boost::cref(MRT1phi)));
234 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"a_0T2phi", boost::cref(a_0T2phi)));
235 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"a_1T2phi", boost::cref(a_1T2phi)));
236 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"a_2T2phi", boost::cref(a_2T2phi)));
237 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"MRT2phi", boost::cref(MRT2phi)));
238 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"a_0T23phi", boost::cref(a_0T23phi)));
239 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"a_1T23phi", boost::cref(a_1T23phi)));
240 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"a_2T23phi", boost::cref(a_2T23phi)));
241 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"MRT23phi", boost::cref(MRT23phi)));
242 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"r_1_fplus", boost::cref(r_1_fplus)));
243 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"r_2_fplus", boost::cref(r_2_fplus)));
244 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"m_fit2_fplus", boost::cref(m_fit2_fplus)));
245 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"r_1_fT", boost::cref(r_1_fT)));
246 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"r_2_fT", boost::cref(r_2_fT)));
247 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"m_fit2_fT", boost::cref(m_fit2_fT)));
248 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"r_2_f0", boost::cref(r_2_f0)));
249 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"m_fit2_f0", boost::cref(m_fit2_f0)));
250 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"bsgamma_E0", boost::cref(bsgamma_E0)));
251 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"BLNPcorr", boost::cref(BLNPcorr)));
252 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"Gambino_mukin", boost::cref(Gambino_mukin)));
253 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"Gambino_BRsem", boost::cref(Gambino_BRsem)));
254 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"Gambino_Mbkin", boost::cref(Gambino_Mbkin)));
255 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"Gambino_Mcatmuc", boost::cref(Gambino_Mcatmuc)));
256 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"Gambino_mupi2", boost::cref(Gambino_mupi2)));
257 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"Gambino_rhoD3", boost::cref(Gambino_rhoD3)));
258 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"Gambino_muG2", boost::cref(Gambino_muG2)));
259 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"Gambino_rhoLS3", boost::cref(Gambino_rhoLS3)));
260 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"lambdaB", boost::cref(mesons[
B_D].getLambdaM())));
261 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"alpha1kst", boost::cref(mesons[
K_star].getGegenalpha(0))));
262 ModelParamMap.insert(std::pair<std::string, boost::reference_wrapper<const double> >(
"alpha2kst", boost::cref(mesons[
K_star].getGegenalpha(1))));
264 unknownParameterWarning =
true;
281 throw std::runtime_error(
orderToString(order) +
" is not implemented in QCD::orderToString().");
287 bool QCD::Init(
const std::map<std::string, double>& DPars)
290 if (!check)
return (check);
292 unknownParameterWarning =
false;
313 for (std::map<std::string, double>::const_iterator it = DPars.begin(); it != DPars.end(); it++)
326 mesons[
B_D].setDecayconst(mesons[
B_S].getDecayconst() / FBsoFBd);
328 BBd.setBpars(0, BBs.getBpars()(0) / BBsoBBd);
331 quarks[
TOP].setMass_scale(quarks[
TOP].getMass());
349 if (name.compare(
"AlsM") == 0) {
354 }
else if (name.compare(
"MAls") == 0) {
359 }
else if (name.compare(
"mup") == 0) {
361 quarks[
UP].setMass(value);
363 }
else if (name.compare(
"mdown") == 0) {
365 quarks[
DOWN].setMass(value);
367 }
else if (name.compare(
"mcharm") == 0) {
368 quarks[
CHARM].setMass(value);
369 quarks[
CHARM].setMass_scale(value);
371 }
else if (name.compare(
"mstrange") == 0) {
373 quarks[
STRANGE].setMass(value);
375 }
else if (name.compare(
"mtop") == 0) {
379 }
else if (name.compare(
"mbottom") == 0) {
380 quarks[
BOTTOM].setMass(value);
381 quarks[
BOTTOM].setMass_scale(value);
383 }
else if (name.compare(
"muc") == 0)
385 else if (name.compare(
"mub") == 0)
387 else if (name.compare(
"mut") == 0)
389 else if (name.compare(
"MK0") == 0)
390 mesons[
K_0].setMass(value);
391 else if (name.compare(
"MKp") == 0)
392 mesons[
K_P].setMass(value);
393 else if (name.compare(
"MD") == 0)
394 mesons[
D_0].setMass(value);
395 else if (name.compare(
"MBd") == 0)
396 mesons[
B_D].setMass(value);
397 else if (name.compare(
"MBp") == 0)
398 mesons[
B_P].setMass(value);
399 else if (name.compare(
"MBs") == 0)
400 mesons[
B_S].setMass(value);
401 else if (name.compare(
"MKstar") == 0)
402 mesons[
K_star].setMass(value);
403 else if (name.compare(
"Mphi") == 0)
404 mesons[
PHI].setMass(value);
405 else if (name.compare(
"tKl") == 0)
406 mesons[
K_0].setLifetime(value);
407 else if (name.compare(
"tKp") == 0)
408 mesons[
K_P].setLifetime(value);
409 else if (name.compare(
"tBd") == 0)
410 mesons[
B_D].setLifetime(value);
411 else if (name.compare(
"tBp") == 0)
412 mesons[
B_P].setLifetime(value);
413 else if (name.compare(
"tBs") == 0)
414 mesons[
B_S].setLifetime(value);
415 else if (name.compare(
"DGs_Gs") == 0)
416 mesons[
B_S].setDgamma_gamma(value);
417 else if (name.compare(
"tKstar") == 0)
418 mesons[
K_star].setLifetime(value);
419 else if (name.compare(
"tphi") == 0)
420 mesons[
PHI].setLifetime(value);
425 else if (name.compare(
"FK") == 0)
426 mesons[
K_0].setDecayconst(value);
427 else if (name.compare(
"FD") == 0)
428 mesons[
D_0].setDecayconst(value);
429 else if (name.compare(
"FKstar") == 0)
430 mesons[
K_star].setDecayconst(value);
431 else if (name.compare(
"FKstarp") == 0)
433 else if (name.compare(
"Fphi") == 0)
434 mesons[
PHI].setDecayconst(value);
435 else if (name.compare(
"FBs") == 0) {
436 mesons[
B_S].setDecayconst(value);
438 }
else if (name.compare(
"FBsoFBd") == 0) {
441 }
else if (name.compare(
"BK1") == 0) {
442 BK.setBpars(0, value);
444 }
else if (name.compare(
"BK2") == 0) {
445 BK.setBpars(1, value);
447 }
else if (name.compare(
"BK3") == 0) {
448 BK.setBpars(2, value);
450 }
else if (name.compare(
"BK4") == 0) {
451 BK.setBpars(3, value);
453 }
else if (name.compare(
"BK5") == 0) {
454 BK.setBpars(4, value);
456 }
else if (name.compare(
"BKscale") == 0) {
459 }
else if (name.compare(
"BKscheme") == 0)
461 else if (name.compare(
"BD1") == 0) {
462 BD.setBpars(0, value);
464 }
else if (name.compare(
"BD2") == 0) {
465 BD.setBpars(1, value);
467 }
else if (name.compare(
"BD3") == 0) {
468 BD.setBpars(2, value);
470 }
else if (name.compare(
"BD4") == 0) {
471 BD.setBpars(3, value);
473 }
else if (name.compare(
"BD5") == 0) {
474 BD.setBpars(4, value);
476 }
else if (name.compare(
"BDscale") == 0) {
479 }
else if (name.compare(
"BDscheme") == 0)
481 else if (name.compare(
"BBsoBBd") == 0) {
484 }
else if (name.compare(
"BBs1") == 0) {
485 BBs.setBpars(0, value);
488 }
else if (name.compare(
"BBs2") == 0) {
489 BBd.setBpars(1, value);
490 BBs.setBpars(1, value);
493 }
else if (name.compare(
"BBs3") == 0) {
494 BBd.setBpars(2, value);
495 BBs.setBpars(2, value);
498 }
else if (name.compare(
"BBs4") == 0) {
499 BBd.setBpars(3, value);
500 BBs.setBpars(3, value);
503 }
else if (name.compare(
"BBs5") == 0) {
504 BBd.setBpars(4, value);
505 BBs.setBpars(4, value);
508 }
else if (name.compare(
"BBsscale") == 0) {
513 }
else if (name.compare(
"BBsscheme") == 0) {
514 BBd.setScheme((
schemes) value);
515 BBs.setScheme((
schemes) value);
516 }
else if (name.compare(
"BK(1/2)1") == 0) {
517 BKd1.setBpars(0, value);
519 }
else if (name.compare(
"BK(1/2)2") == 0) {
520 BKd1.setBpars(1, value);
522 }
else if (name.compare(
"BK(1/2)3") == 0) {
523 BKd1.setBpars(2, value);
525 }
else if (name.compare(
"BK(1/2)4") == 0) {
526 BKd1.setBpars(3, value);
528 }
else if (name.compare(
"BK(1/2)5") == 0) {
529 BKd1.setBpars(4, value);
531 }
else if (name.compare(
"BK(1/2)6") == 0){
532 BKd1.setBpars(5, value);
534 }
else if (name.compare(
"BK(1/2)7") == 0){
535 BKd1.setBpars(6, value);
537 }
else if (name.compare(
"BK(1/2)8") == 0) {
538 BKd1.setBpars(7, value);
540 }
else if (name.compare(
"BK(1/2)9") == 0) {
541 BKd1.setBpars(8, value);
543 }
else if (name.compare(
"BK(1/2)10") == 0) {
544 BKd1.setBpars(9, value);
546 }
else if (name.compare(
"BK(3/2)1") == 0) {
547 BKd3.setBpars(0, value);
549 }
else if (name.compare(
"BK(3/2)2") == 0) {
550 BKd3.setBpars(1, value);
552 }
else if (name.compare(
"BK(3/2)3") == 0) {
553 BKd3.setBpars(2, value);
555 }
else if (name.compare(
"BK(3/2)4") == 0) {
556 BKd3.setBpars(3, value);
558 }
else if (name.compare(
"BK(3/2)5") == 0) {
559 BKd3.setBpars(4, value);
561 }
else if (name.compare(
"BK(3/2)6") == 0) {
562 BKd3.setBpars(5, value);
564 }
else if (name.compare(
"BK(3/2)7") == 0) {
565 BKd3.setBpars(6, value);
567 }
else if (name.compare(
"BK(3/2)8") == 0) {
568 BKd3.setBpars(7, value);
570 }
else if (name.compare(
"BK(3/2)9") == 0) {
571 BKd3.setBpars(8, value);
573 }
else if (name.compare(
"BK(3/2)10") == 0) {
574 BKd3.setBpars(9, value);
576 }
else if (name.compare(
"BKd_scale") == 0) {
580 }
else if (name.compare(
"BKd_scheme") == 0) {
581 BKd1.setScheme((
schemes) value);
582 BKd3.setScheme((
schemes) value);
583 }
else if (name.compare(
"ReA0_Kd") == 0)
585 else if (name.compare(
"ReA2_Kd") == 0)
587 else if (name.compare(
"Omega_eta_etap") == 0)
588 Omega_eta_etap = value;
589 else if (name.compare(
"Br_Kp_P0enu") == 0)
591 else if (name.compare(
"Br_Kp_munu") == 0)
593 else if (name.compare(
"Br_B_Xcenu") == 0)
595 else if (name.compare(
"DeltaP_cu") == 0)
597 else if (name.compare(
"IB_Kl") == 0)
599 else if (name.compare(
"IB_Kp") == 0)
601 else if (name.compare(
"absh_0") == 0)
603 else if (name.compare(
"absh_p") == 0)
605 else if (name.compare(
"absh_m") == 0)
607 else if (name.compare(
"argh_0") == 0)
609 else if (name.compare(
"argh_p") == 0)
611 else if (name.compare(
"argh_m") == 0)
613 else if (name.compare(
"absh_0_1") == 0)
615 else if (name.compare(
"absh_p_1") == 0)
617 else if (name.compare(
"absh_m_1") == 0)
619 else if (name.compare(
"argh_0_1") == 0)
621 else if (name.compare(
"argh_p_1") == 0)
623 else if (name.compare(
"argh_m_1") == 0)
625 else if (name.compare(
"absh_0_2") == 0)
627 else if (name.compare(
"absh_p_2") == 0)
629 else if (name.compare(
"absh_m_2") == 0)
631 else if (name.compare(
"argh_0_2") == 0)
633 else if (name.compare(
"argh_p_2") == 0)
635 else if (name.compare(
"argh_m_2") == 0)
637 else if (name.compare(
"absh_0_MP") == 0)
639 else if (name.compare(
"argh_0_MP") == 0)
641 else if (name.compare(
"absh_0_1_MP") == 0)
643 else if (name.compare(
"argh_0_1_MP") == 0)
645 else if (name.compare(
"a_0V") == 0)
647 else if (name.compare(
"a_1V") == 0)
649 else if (name.compare(
"a_2V") == 0)
651 else if (name.compare(
"MRV") == 0)
653 else if (name.compare(
"a_0A0") == 0)
655 else if (name.compare(
"a_1A0") == 0)
657 else if (name.compare(
"a_2A0") == 0)
659 else if (name.compare(
"MRA0") == 0)
661 else if (name.compare(
"a_0A1") == 0)
663 else if (name.compare(
"a_1A1") == 0)
665 else if (name.compare(
"a_2A1") == 0)
667 else if (name.compare(
"MRA1") == 0)
669 else if (name.compare(
"a_0A12") == 0)
671 else if (name.compare(
"a_1A12") == 0)
673 else if (name.compare(
"a_2A12") == 0)
675 else if (name.compare(
"MRA12") == 0)
677 else if (name.compare(
"a_0T1") == 0)
679 else if (name.compare(
"a_1T1") == 0)
681 else if (name.compare(
"a_2T1") == 0)
683 else if (name.compare(
"MRT1") == 0)
685 else if (name.compare(
"a_0T2") == 0)
687 else if (name.compare(
"a_1T2") == 0)
689 else if (name.compare(
"a_2T2") == 0)
691 else if (name.compare(
"MRT2") == 0)
693 else if (name.compare(
"a_0T23") == 0)
695 else if (name.compare(
"a_1T23") == 0)
697 else if (name.compare(
"a_2T23") == 0)
699 else if (name.compare(
"MRT23") == 0)
701 else if (name.compare(
"a_0Vphi") == 0)
703 else if (name.compare(
"a_1Vphi") == 0)
705 else if (name.compare(
"a_2Vphi") == 0)
707 else if (name.compare(
"MRVphi") == 0)
709 else if (name.compare(
"a_0A0phi") == 0)
711 else if (name.compare(
"a_1A0phi") == 0)
713 else if (name.compare(
"a_2A0phi") == 0)
715 else if (name.compare(
"MRA0phi") == 0)
717 else if (name.compare(
"a_0A1phi") == 0)
719 else if (name.compare(
"a_1A1phi") == 0)
721 else if (name.compare(
"a_2A1phi") == 0)
723 else if (name.compare(
"MRA1phi") == 0)
725 else if (name.compare(
"a_0A12phi") == 0)
727 else if (name.compare(
"a_1A12phi") == 0)
729 else if (name.compare(
"a_2A12phi") == 0)
731 else if (name.compare(
"MRA12phi") == 0)
733 else if (name.compare(
"a_0T1phi") == 0)
735 else if (name.compare(
"a_1T1phi") == 0)
737 else if (name.compare(
"a_2T1phi") == 0)
739 else if (name.compare(
"MRT1phi") == 0)
741 else if (name.compare(
"a_0T2phi") == 0)
743 else if (name.compare(
"a_1T2phi") == 0)
745 else if (name.compare(
"a_2T2phi") == 0)
747 else if (name.compare(
"MRT2phi") == 0)
749 else if (name.compare(
"a_0T23phi") == 0)
751 else if (name.compare(
"a_1T23phi") == 0)
753 else if (name.compare(
"a_2T23phi") == 0)
755 else if (name.compare(
"MRT23phi") == 0)
757 else if (name.compare(
"r_1_fplus") == 0)
759 else if (name.compare(
"r_2_fplus") == 0)
761 else if (name.compare(
"m_fit2_fplus") == 0)
762 m_fit2_fplus = value;
763 else if (name.compare(
"r_1_fT") == 0)
765 else if (name.compare(
"r_2_fT") == 0)
767 else if (name.compare(
"m_fit2_fT") == 0)
769 else if (name.compare(
"r_2_f0") == 0)
771 else if (name.compare(
"m_fit2_f0") == 0)
773 else if (name.compare(
"bsgamma_E0") == 0)
775 else if (name.compare(
"BLNPcorr") == 0)
777 else if (name.compare(
"Gambino_mukin") == 0)
778 Gambino_mukin = value;
779 else if (name.compare(
"Gambino_BRsem") == 0)
780 Gambino_BRsem = value;
781 else if (name.compare(
"Gambino_Mbkin") == 0)
782 Gambino_Mbkin = value;
783 else if (name.compare(
"Gambino_Mcatmuc") == 0)
784 Gambino_Mcatmuc = value;
785 else if (name.compare(
"Gambino_mupi2") == 0)
786 Gambino_mupi2 = value;
787 else if (name.compare(
"Gambino_rhoD3") == 0)
788 Gambino_rhoD3 = value;
789 else if (name.compare(
"Gambino_muG2") == 0)
790 Gambino_muG2 = value;
791 else if (name.compare(
"Gambino_rhoLS3") == 0)
792 Gambino_rhoLS3 = value;
793 else if (name.compare(
"lambdaB") == 0)
794 mesons[
B_D].setLambdaM(value);
795 else if (name.compare(
"alpha1kst") == 0)
796 mesons[
K_star].setGegenalpha(0,value);
797 else if (name.compare(
"alpha2kst") == 0)
798 mesons[
K_star].setGegenalpha(1,value);
800 if (unknownParameterWarning)
801 std::cout <<
"WARNING: unknown parameter " << name <<
" in model initialization" << std::endl;
807 if (DPars.find(
QCDvars[i]) == DPars.end()) {
808 std::cout <<
"missing mandatory QCD parameter " <<
QCDvars[i] << std::endl;
818 std::cout <<
"WARNING: wrong name or value for ModelFlag " << name << std::endl;
824 std::cout <<
"WARNING: wrong name or value for ModelFlag " << name << std::endl;
837 if (!(mut > mub && mub > muc))
838 throw std::runtime_error(
"inverted thresholds in QCD::Thresholds()!");
841 case 0:
return (1.0E10);
842 case 1:
return (mut);
843 case 2:
return (mub);
844 case 3:
return (muc);
845 default:
return (0.);
852 for (i = 4; i >= 0; i--)
855 throw std::runtime_error(
"Error in QCD::AboveTh()");
861 for (i = 0; i < 5; i++)
864 throw std::runtime_error(
"Error in QCD::BelowTh()");
870 for (i = 1; i < 5; i++)
872 return (7. - (
double) i);
874 throw std::runtime_error(
"Error in QCD::Nf()");
877 void QCD::CacheShift(
double cache[][CacheSize],
int n)
const
880 for (i = CacheSize - 1; i > 0; i--)
881 for (j = 0; j < n; j++)
882 cache[j][i] = cache[j][i - 1];
889 return ( (11. * Nc - 2. * nf) / 3.);
894 return ( 34. / 3. * Nc * Nc - 10. / 3. * Nc * nf - 2. * CF * nf);
899 return ( 2857. / 54. * Nc * Nc * Nc + CF * CF * nf - 205. / 18. * CF * Nc * nf
900 - 1415. / 54. * Nc * Nc * nf + 11. / 9. * CF * nf * nf + 79. / 54. * Nc * nf * nf);
908 throw std::runtime_error(
"Error in QCD::AlsWithInit().");
910 double v = 1. -
Beta0(nf) * alsi / 2. / M_PI *
log(mu_i / mu);
915 return (alsi / v * (1. -
Beta1(nf) /
Beta0(nf) * alsi / 4. / M_PI *
log(v) / v));
917 return (alsi / v * (-
Beta1(nf) /
Beta0(nf) * alsi / 4. / M_PI *
log(v) / v));
919 throw std::runtime_error(
orderToString(order) +
" is not implemented in QCD::Als(mu,alsi,mi,order).");
925 double v = 1. -
Beta0(4.) * AlsM / 2. / M_PI *
log(MAls / mu);
926 return (AlsM / v * (1. -
Beta1(4.) /
Beta0(4.) * AlsM / 4. / M_PI *
log(v) / v));
929 double QCD::Alstilde5(
const double mu)
const
932 double alphatilde_e =
alphaMz()/4./M_PI;
933 double alphatilde_s = AlsM/4./M_PI;
936 double B00S =
Beta0(nf), B10S =
Beta1(nf), B20S =
Beta2(nf), B30S = gsl_sf_zeta_int(3) * 352864./81. - 598391./1458,
937 B01S = -22./9., B11S = -308./27., B02S = 4945./243.;
939 double B00E = 80./9., B01E = 176./9., B10E = 464./27.;
941 double B10soB00s = B10S / B00S;
942 double B01soB00e = B01S/B00E;
944 double vs= 1. + 2. * B00S * alphatilde_s *
log(mu/ mu_0);
945 double ve= 1. - 2. * B00E * alphatilde_e *
log(mu/ mu_0);
946 double ps= B00S * alphatilde_s /(B00S * alphatilde_s + B00E * alphatilde_e);
948 double logve =
log(ve);
949 double logvs =
log(vs);
950 double logeos =
log(ve/vs);
951 double logsoe =
log(vs/ve);
952 double asovs = alphatilde_s/vs;
953 double aeove = alphatilde_e/ve;
957 result = asovs -
pow(asovs, 2) * (logvs * B10soB00s - logve * B01soB00e)
958 +
pow(asovs, 3) * ((1. - vs) * B20S / B00S + B10soB00s * B10soB00s * (logvs * logvs - logvs
959 + vs - 1.) + B01soB00e * B01soB00e * logve * logve + (-2. * logvs * logve
960 + ps * ve * logve) * B01S * B10S/(B00E * B00S))
961 +
pow(asovs, 4) * (0.5 * B30S *(1. - vs * vs)/ B00S + ((2. * vs - 3.) * logvs + vs * vs
962 - vs) * B20S * B10soB00s /(B00S) + B10soB00s * B10soB00s * B10soB00s * (-
pow(logvs,3)
963 + 5. *
pow(logvs,2) / 2. + 2. * (1. - vs) * logvs - (vs - 1.) * (vs - 1.)* 0.5))
964 +
pow(asovs, 2) * (aeove) * ((ve - 1.) * B02S / B00E
965 + ps * ve * logeos * B11S /B00S +(logve - ve + 1.) * B01soB00e * B10E/(B00S)
966 + logvs * ve * ps * B01S * B10soB00s/(B00S) +(logsoe * ve * ps - logvs) * B01soB00e * B01E/( B00S));
977 double b0 =
Beta0(nf);
979 double alsLO = 4. * M_PI / b0L;
980 if (order ==
LO)
return alsLO;
983 double b1 =
Beta1(nf);
984 double log_L =
log(L);
985 double alsNLO = 4. * M_PI / b0L * (-b1 * log_L / b0 / b0L);
986 if (order ==
NLO)
return alsNLO;
987 if (order ==
FULLNLO)
return (alsLO + alsNLO);
990 double b2 =
Beta2(nf);
991 double alsNNLO = 4. * M_PI / b0L * (1. / b0L / b0L
992 * (b1 * b1 / b0 / b0 * (log_L * log_L - log_L - 1.) + b2 / b0));
993 if (order ==
NNLO)
return alsNNLO;
994 if (order ==
FULLNNLO)
return (alsLO + alsNLO + alsNNLO);
996 throw std::runtime_error(
orderToString(order) +
" is not implemented in QCD::AlsWithLambda().");
1007 for (i = 0; i < CacheSize; ++i)
1008 if ((mu == als_cache[0][i]) && ((
double) order == als_cache[1][i]) &&
1009 (AlsM == als_cache[2][i]) && (MAls == als_cache[3][i]) &&
1010 (mut == als_cache[4][i]) && (mub == als_cache[5][i]) &&
1011 (muc == als_cache[6][i]))
1012 return als_cache[7][i];
1014 double nfmu =
Nf(mu), nfz =
Nf(MAls), mu_thre1, mu_thre2, Als_tmp, mf;
1023 else if (nfmu > nfz) {
1025 throw std::runtime_error(
"NLO is not implemented in QCD::Als(mu,order).");
1026 if (nfmu == nfz + 1.) {
1031 Als_tmp = (1. + Als_tmp / M_PI *
log(mu_thre1 / mf) / 3.) * Als_tmp;
1035 throw std::runtime_error(
"Error in QCD::Als(mu,order)");
1038 throw std::runtime_error(
"NLO is not implemented in QCD::Als(mu,order).");
1039 if (nfmu == nfz - 1.) {
1044 Als_tmp = (1. - Als_tmp / M_PI *
log(mu_thre1 / mf) / 3.) * Als_tmp;
1047 }
else if (nfmu == nfz - 2.) {
1050 Als_tmp =
Als(mu_thre1 +
MEPS, order);
1053 Als_tmp = (1. - Als_tmp / M_PI *
log(mu_thre1 / mf) / 3.) * Als_tmp;
1058 Als_tmp = (1. - Als_tmp / M_PI *
log(mu_thre2 / mf) / 3.) * Als_tmp;
1062 throw std::runtime_error(
"Error in QCD::Als(mu,order)");
1071 throw std::runtime_error(
orderToString(order) +
" is not implemented in QCD::Als(mu,order).");
1074 CacheShift(als_cache, 8);
1075 als_cache[0][0] = mu;
1076 als_cache[1][0] = (double) order;
1077 als_cache[2][0] = AlsM;
1078 als_cache[3][0] = MAls;
1079 als_cache[4][0] = mut;
1080 als_cache[5][0] = mub;
1081 als_cache[6][0] = muc;
1082 als_cache[7][0] = als;
1087 double QCD::ZeroNf6NLO(
double *logLambda6,
double *logLambda5_in)
const
1093 double QCD::ZeroNf5(
double *logLambda5,
double *order)
const
1098 double QCD::ZeroNf4NLO(
double *logLambda4,
double *logLambda5_in)
const
1104 double QCD::ZeroNf3NLO(
double *logLambda3,
double *logLambda4_in)
const
1110 double QCD::logLambda5(
orders order)
const
1115 for (
int i = 0; i < CacheSize; ++i)
1116 if ((AlsM == logLambda5_cache[0][i])
1117 && (MAls == logLambda5_cache[1][i])
1118 && ((
double) order == logLambda5_cache[2][i]))
1119 return logLambda5_cache[3][i];
1121 CacheShift(logLambda5_cache, 4);
1122 logLambda5_cache[0][0] = AlsM;
1123 logLambda5_cache[1][0] = MAls;
1124 logLambda5_cache[2][0] = (double) order;
1127 logLambda5_cache[3][0] =
log(MAls) - 2. * M_PI /
Beta0(5.) / AlsM;
1129 double xmin = -4., xmax = -0.2;
1130 TF1 f = TF1(
"f",
this, &QCD::ZeroNf5, xmin, xmax, 1,
"QCD",
"zeroNf5");
1132 ROOT::Math::WrappedTF1 wf1(f);
1133 double ledouble = (double) order;
1134 wf1.SetParameters(&ledouble);
1136 ROOT::Math::BrentRootFinder brf;
1137 brf.SetFunction(wf1, xmin, xmax);
1139 if (brf.Solve()) logLambda5_cache[3][0] = brf.Root();
1141 throw std::runtime_error(
"Error in QCD::logLambda5()");
1143 return ( logLambda5_cache[3][0]);
1146 double QCD::logLambdaNLO(
const double nfNEW,
const double nfORG,
1147 const double logLambdaORG)
const
1149 for (
int i = 0; i < CacheSize; ++i)
1150 if ((AlsM == logLambdaNLO_cache[0][i])
1151 && (MAls == logLambdaNLO_cache[1][i])
1152 && (mut == logLambdaNLO_cache[2][i])
1153 && (mub == logLambdaNLO_cache[3][i])
1154 && (muc == logLambdaNLO_cache[4][i])
1155 && (nfNEW == logLambdaNLO_cache[5][i])
1156 && (nfORG == logLambdaNLO_cache[6][i])
1157 && (logLambdaORG == logLambdaNLO_cache[7][i]))
1158 return logLambdaNLO_cache[8][i];
1160 CacheShift(logLambdaNLO_cache, 9);
1161 logLambdaNLO_cache[0][0] = AlsM;
1162 logLambdaNLO_cache[1][0] = MAls;
1163 logLambdaNLO_cache[2][0] = mut;
1164 logLambdaNLO_cache[3][0] = mub;
1165 logLambdaNLO_cache[4][0] = muc;
1166 logLambdaNLO_cache[5][0] = nfNEW;
1167 logLambdaNLO_cache[6][0] = nfORG;
1168 logLambdaNLO_cache[7][0] = logLambdaORG;
1170 double xmin = -4., xmax = -0.2;
1173 if (nfNEW == 6. && nfORG == 5.) {
1174 f = TF1(
"f",
this, &QCD::ZeroNf6NLO, xmin, xmax, 1,
"QCD",
"zeroNf6NLO");
1175 }
else if (nfNEW == 4. && nfORG == 5.) {
1176 f = TF1(
"f",
this, &QCD::ZeroNf4NLO, xmin, xmax, 1,
"QCD",
"zeroNf4NLO");
1177 }
else if (nfNEW == 3. && nfORG == 4.) {
1178 f = TF1(
"f",
this, &QCD::ZeroNf3NLO, xmin, xmax, 1,
"QCD",
"zeroNf3NLO");
1180 throw std::runtime_error(
"Error in QCD::logLambdaNLO()");
1182 ROOT::Math::WrappedTF1 wf1(f);
1183 wf1.SetParameters(&logLambdaORG);
1185 ROOT::Math::BrentRootFinder brf;
1186 brf.SetFunction(wf1, xmin, xmax);
1188 if (brf.Solve()) logLambdaNLO_cache[8][0] = brf.Root();
1190 throw std::runtime_error(
"Error in QCD::logLambdaNLO()");
1192 return ( logLambdaNLO_cache[8][0]);
1196 const double nfNEW,
const double nfORG,
1197 const double logLambdaORG,
orders order)
const
1199 if (fabs(nfNEW - nfORG) != 1.)
1200 throw std::runtime_error(
"Error in QCD::logLambda()");
1210 return logLambdaNLO(nfNEW, nfORG, logLambdaORG);
1212 double logMuMatching =
log(muMatching);
1213 double L = 2. * (logMuMatching - logLambdaORG);
1214 double rNEW = 0.0, rORG = 0.0, log_mu2_mf2 = 0.0, log_L = 0.0;
1215 double C1 = 0.0, C2 = 0.0;
1216 double logLambdaNEW;
1219 logLambdaNEW = 1. / 2. /
Beta0(nfNEW)
1220 *(
Beta0(nfNEW) -
Beta0(nfORG)) * L + logLambdaORG;
1226 log_mu2_mf2 = 2. * (logMuMatching -
log(mf));
1229 C1 = 2. / 3. * log_mu2_mf2;
1231 C1 = -2. / 3. * log_mu2_mf2;
1232 logLambdaNEW += 1. / 2. /
Beta0(nfNEW)
1233 *((rNEW - rORG) * log_L
1239 if (nfNEW == 5. && nfORG == 6.)
1240 C2 = -16. * (log_mu2_mf2 * log_mu2_mf2 / 36. - 19. / 24. * log_mu2_mf2 - 7. / 24.);
1241 else if (nfNEW == 6. && nfORG == 5.)
1242 C2 = -16. * (log_mu2_mf2 * log_mu2_mf2 / 36. + 19. / 24. * log_mu2_mf2 + 7. / 24.);
1245 C2 = -16. * (log_mu2_mf2 * log_mu2_mf2 / 36. - 19. / 24. * log_mu2_mf2 + 11. / 72.);
1247 C2 = -16. * (log_mu2_mf2 * log_mu2_mf2 / 36. + 19. / 24. * log_mu2_mf2 - 11. / 72.);
1249 logLambdaNEW += 1. / 2. /
Beta0(nfNEW) /
Beta0(nfORG) / L
1250 * (rORG * (rNEW - rORG) * log_L + rNEW * rNEW - rORG * rORG
1252 + rNEW * C1 - C1 * C1 - C2);
1255 return logLambdaNEW;
1263 double muMatching, mf, logLambdaORG, logLambdaNEW;
1265 return logLambda5(order);
1266 else if (nf == 6.) {
1270 return logLambda(muMatching, mf, 6., 5., logLambda5(order), order);
1271 }
else if (nf == 4. || nf == 3.) {
1274 logLambdaORG = logLambda5(order);
1275 logLambdaNEW =
logLambda(muMatching, mf, 4., 5., logLambdaORG, order);
1279 logLambdaORG = logLambdaNEW;
1280 logLambdaNEW =
logLambda(muMatching, mf, 3., 4., logLambdaORG, order);
1282 return logLambdaNEW;
1284 throw std::runtime_error(
"Error in QCD::logLambda()");
1289 double QCD::Gamma0(
const double nf)
const
1294 double QCD::Gamma1(
const double nf)
const
1296 return ( CF * (3. * CF + 97. / 3. * Nc - 10. / 3. * nf));
1299 double QCD::Gamma2(
const double nf)
const
1301 return ( 129. * CF * CF * CF - 129. / 2. * CF * CF * Nc + 11413. / 54. * CF * Nc * Nc
1302 + CF * CF * nf * (-46. + 48. * zeta3) + CF * Nc * nf * (-556. / 27. - 48. * zeta3)
1303 - 70. / 27. * CF * nf * nf);
1306 double QCD::threCorrForMass(
const double nf_f,
const double nf_i)
const
1308 if (fabs(nf_f - nf_i) != 1.)
1309 throw std::runtime_error(
"Error in QCD::threCorrForMass()");
1311 double mu_threshold, mf, log_mu2_mf2;
1315 mf = quarks[
TOP].getMass();
1316 }
else if (nf_f == 5.) {
1318 mf = quarks[
BOTTOM].getMass();
1319 }
else if (nf_f == 4.) {
1321 mf = quarks[
CHARM].getMass();
1323 throw std::runtime_error(
"Error in QCD::threCorrForMass()");
1324 log_mu2_mf2 = 2. *
log(mu_threshold / mf);
1326 *(-log_mu2_mf2 * log_mu2_mf2 / 12. + 5. / 36. * log_mu2_mf2 - 89. / 432.));
1330 mf = quarks[
TOP].getMass();
1331 }
else if (nf_i == 5.) {
1333 mf = quarks[
BOTTOM].getMass();
1334 }
else if (nf_i == 4.) {
1336 mf = quarks[
CHARM].getMass();
1338 throw std::runtime_error(
"Error in QCD::threCorrForMass()");
1339 log_mu2_mf2 = 2. *
log(mu_threshold / mf);
1341 *(log_mu2_mf2 * log_mu2_mf2 / 12. - 5. / 36. * log_mu2_mf2 + 89. / 432.));
1345 double QCD::Mrun(
const double mu,
const double m,
const orders order)
const
1347 return Mrun(mu, m, m, order);
1350 double QCD::Mrun(
const double mu_f,
const double mu_i,
const double m,
1351 const orders order)
const
1357 for (i = 0; i < CacheSize; ++i) {
1358 if ((mu_f == mrun_cache[0][i]) && (mu_i == mrun_cache[1][i]) &&
1359 (m == mrun_cache[2][i]) && ((
double) order == mrun_cache[3][i]) &&
1360 (AlsM == mrun_cache[4][i]) && (MAls == mrun_cache[5][i]) &&
1361 (mut == mrun_cache[6][i]) && (mub == mrun_cache[7][i]) &&
1362 (muc == mrun_cache[8][i]))
1363 return mrun_cache[9][i];
1366 double nfi =
Nf(mu_i), nff =
Nf(mu_f);
1367 double mu_threshold, mu_threshold2, mu_threshold3, mrun;
1369 mrun = MrunTMP(mu_f, mu_i, m, order);
1370 else if (nff > nfi) {
1371 if (order ==
NLO || order ==
NNLO)
1372 throw std::runtime_error(
orderToString(order) +
" is not implemented in QCD::Mrun(mu_f,mu_i,m,order)");
1374 mrun = MrunTMP(mu_threshold -
MEPS, mu_i, m, order);
1376 mrun *= threCorrForMass(nfi + 1., nfi);
1377 if (nff == nfi + 1.) {
1378 mrun = MrunTMP(mu_f, mu_threshold +
MEPS, mrun, order);
1379 }
else if (nff == nfi + 2.) {
1380 mu_threshold2 =
BelowTh(mu_f);
1381 mrun = MrunTMP(mu_threshold2 -
MEPS, mu_threshold +
MEPS, mrun, order);
1383 mrun *= threCorrForMass(nff, nfi + 1.);
1384 mrun = MrunTMP(mu_f, mu_threshold2 +
MEPS, mrun, order);
1385 }
else if (nff == nfi + 3.) {
1386 mu_threshold2 =
AboveTh(mu_threshold);
1387 mrun = MrunTMP(mu_threshold2 -
MEPS, mu_threshold +
MEPS, mrun, order);
1389 mrun *= threCorrForMass(nfi + 2., nfi + 1.);
1390 mu_threshold3 =
BelowTh(mu_f);
1391 mrun = MrunTMP(mu_threshold3 -
MEPS, mu_threshold2 +
MEPS, mrun, order);
1393 mrun *= threCorrForMass(nff, nfi + 2.);
1394 mrun = MrunTMP(mu_f, mu_threshold3 +
MEPS, mrun, order);
1396 throw std::runtime_error(
"Error in QCD::Mrun(mu_f,mu_i,m,order)");
1398 if (order ==
NLO || order ==
NNLO)
1399 throw std::runtime_error(
orderToString(order) +
" is not implemented in QCD::Mrun(mu_f,mu_i,m,order)");
1401 mrun = MrunTMP(mu_threshold +
MEPS, mu_i, m, order);
1403 mrun *= threCorrForMass(nfi - 1., nfi);
1404 if (nff == nfi - 1.)
1405 mrun = MrunTMP(mu_f, mu_threshold -
MEPS, mrun, order);
1406 else if (nff == nfi - 2.) {
1407 mu_threshold2 =
AboveTh(mu_f);
1408 mrun = MrunTMP(mu_threshold2 +
MEPS, mu_threshold -
MEPS, mrun, order);
1410 mrun *= threCorrForMass(nff, nfi - 1.);
1411 mrun = MrunTMP(mu_f, mu_threshold2 -
MEPS, mrun, order);
1413 throw std::runtime_error(
"Error in QCD::Mrun(mu_f,mu_i,m,order)");
1417 std::stringstream out;
1418 out <<
"QCD::Mrun(): A quark mass becomes tachyonic in QCD::Mrun("
1419 << mu_f <<
", " << mu_i <<
", " << m <<
", " <<
orderToString(order) <<
")"
1421 <<
" Als(" << mu_i <<
", " <<
orderToString(order) <<
")/(4pi)="
1422 <<
Als(mu_i, order) / (4. * M_PI) << std::endl
1423 <<
" Als(" << mu_f <<
", " <<
orderToString(order) <<
")/(4pi)="
1424 <<
Als(mu_f, order) / (4. * M_PI);
1425 throw std::runtime_error(out.str());
1428 CacheShift(mrun_cache, 10);
1429 mrun_cache[0][0] = mu_f;
1430 mrun_cache[1][0] = mu_i;
1431 mrun_cache[2][0] = m;
1432 mrun_cache[3][0] = (double) order;
1433 mrun_cache[4][0] = AlsM;
1434 mrun_cache[5][0] = MAls;
1435 mrun_cache[6][0] = mut;
1436 mrun_cache[7][0] = mub;
1437 mrun_cache[8][0] = muc;
1438 mrun_cache[9][0] = mrun;
1443 double QCD::MrunTMP(
const double mu_f,
const double mu_i,
const double m,
1444 const orders order)
const
1446 double nf =
Nf(mu_f);
1448 throw std::runtime_error(
"Error in QCD::MrunTMP().");
1452 if (order ==
LO) orderForAls =
LO;
1455 double ai =
Als(mu_i, orderForAls) / (4. * M_PI);
1456 double af =
Als(mu_f, orderForAls) / (4. * M_PI);
1459 double b0 =
Beta0(nf), g0 = Gamma0(nf);
1460 double mLO = m *
pow(af / ai, g0 / (2. * b0));
1461 if (order ==
LO)
return mLO;
1464 double b1 =
Beta1(nf), g1 = Gamma1(nf);
1465 double A1 = g1 / (2. * b0) - b1 * g0 / (2. * b0 * b0);
1466 double mNLO = mLO * A1 * (af - ai);
1467 if (order ==
NLO)
return mNLO;
1468 if (order ==
FULLNLO)
return (mLO + mNLO);
1471 double b2 =
Beta2(nf), g2 = Gamma2(nf);
1472 double A2 = b1 * b1 * g0 / (2. * b0 * b0 * b0) - b2 * g0 / (2. * b0 * b0) - b1 * g1 / (2. * b0 * b0) + g2 / (2. * b0);
1473 double mNNLO = mLO * (A1 * A1 / 2. * (af - ai)*(af - ai) + A2 / 2. * (af * af - ai * ai));
1474 if (order ==
NNLO)
return mNNLO;
1475 if (order ==
FULLNNLO)
return (mLO + mNLO + mNNLO);
1477 throw std::runtime_error(
orderToString(order) +
" is not implemented in QCD::MrunTMP()");
1480 double QCD::Mrun4(
const double mu_f,
const double mu_i,
const double m)
const
1485 double ai =
Als4(mu_i) / (4. * M_PI);
1486 double af =
Als4(mu_f) / (4. * M_PI);
1489 double b0 =
Beta0(nf), g0 = Gamma0(nf);
1490 double mLO = m *
pow(af / ai, g0 / (2. * b0));
1493 double b1 =
Beta1(nf), g1 = Gamma1(nf);
1494 double A1 = g1 / (2. * b0) - b1 * g0 / (2. * b0 * b0);
1495 double mNLO = mLO * A1 * (af - ai);
1496 return (mLO + mNLO);
1502 double QCD::Mbar2Mp(
const double mbar,
const orders order)
const
1506 if (order ==
LO)
return MpLO;
1512 double a =
Als(mbar +
MEPS, orderForAls) / M_PI;
1515 double MpNLO = mbar * 4. / 3. * a;
1516 if (order ==
NLO)
return MpNLO;
1517 if (order ==
FULLNLO)
return (MpLO + MpNLO);
1522 throw std::runtime_error(
"QCD::Mbar2Mp() can convert only top and bottom masses");
1523 else if (mbar < 50.) {
1527 x = (quarks[
STRANGE].getMass() + quarks[
CHARM].getMass()) / mbar;
1532 x = (quarks[
STRANGE].getMass() + quarks[
CHARM].getMass()
1533 + quarks[
BOTTOM].getMass()) / mbar;
1535 double Delta = M_PI * M_PI / 8. * x - 0.597 * x * x + 0.230 * x * x*x;
1536 double MpNNLO = mbar * (307. / 32. + 2. * zeta2 + 2. / 3. * zeta2 *
log(2.0) - zeta3 / 6.
1537 - nl / 3. * (zeta2 + 71. / 48.) + 4. / 3. * Delta) * a*a;
1538 if (order ==
NNLO)
return MpNNLO;
1539 if (order ==
FULLNNLO)
return (MpLO + MpNLO + MpNNLO);
1541 throw std::runtime_error(
orderToString(order) +
" is not implemented in QCD::Mbar2Mp().");
1544 double QCD::Mp2MbarTMP(
double *mu,
double *params)
const
1546 double mp = params[0];
1548 return (mp - Mbar2Mp(*mu, order));
1551 double QCD::Mp2Mbar(
const double mp,
const orders order)
const
1553 if (order ==
NLO || order ==
NNLO)
1554 throw std::runtime_error(
orderToString(order) +
" is not implemented in QCD::Mp2Mbar().");
1557 double ms = quarks[
STRANGE].getMass(), mc = quarks[
CHARM].getMass();
1558 double alsmp =
Als(mp, order);
1559 for (i = 0; i < CacheSize; ++i)
1560 if (alsmp == mp2mbar_cache[0][i] && ms == mp2mbar_cache[1][i] &&
1561 mc == mp2mbar_cache[2][i] && (
double) order == mp2mbar_cache[3][i])
1562 return mp2mbar_cache[4][i];
1564 CacheShift(mp2mbar_cache, 5);
1565 mp2mbar_cache[0][0] = alsmp;
1566 mp2mbar_cache[1][0] = ms;
1567 mp2mbar_cache[2][0] = mc;
1568 mp2mbar_cache[3][0] = (double) order;
1570 TF1 f(
"f",
this, &QCD::Mp2MbarTMP, mp / 2., 2. * mp, 2,
"QCD",
"mp2mbara");
1572 ROOT::Math::WrappedTF1 wf1(f);
1575 params[1] = (double) order;
1576 wf1.SetParameters(params);
1578 ROOT::Math::BrentRootFinder brf;
1580 brf.SetFunction(wf1, .7 * mp, 1.3 * mp);
1582 mp2mbar_cache[4][0] = brf.Root();
1584 throw std::runtime_error(
"error in QCD::mp2mbar");
1586 return (mp2mbar_cache[4][0]);
1589 double QCD::MS2DRqmass(
const double MSbar)
const
1591 return (MSbar / (1. +
Als(MSbar,
FULLNLO) / 4. / M_PI * CF));
1594 double QCD::MS2DRqmass(
const double MSscale,
const double MSbar)
const
1596 return (MSbar / (1. +
Als(MSscale,
FULLNLO) / 4. / M_PI * CF));
double logLambda(const double nf, orders order) const
Computes with nf flavours in GeV.
static const int NQCDvars
The number of model parameters in QCD.
double Beta1(const double nf) const
The coefficient for a certain number of flavours .
double AlsWithLambda(const double mu, const orders order) const
Computes the running strong coupling in the scheme with the use of .
orders
An enum type for orders in QCD.
complex pow(const complex &z1, const complex &z2)
virtual bool PostUpdate()
The post-update method for QCD.
virtual bool Update(const std::map< std::string, double > &DPars)
The update method for QCD.
virtual bool setFlagStr(const std::string name, const std::string value)
A method to set a flag of QCD.
double Als(const double mu, const orders order=FULLNLO) const
Computes the running strong coupling in the scheme. In the cases of LO, NLO and FULLNNLO...
bool UpdateError
A boolean set to false if update is successful.
virtual bool setFlag(const std::string name, const bool value)
A method to set a flag of QCD.
virtual bool CheckFlags() const
A method to check the sanity of the set of model flags.
schemes
An enum type for regularization schemes.
double BelowTh(const double mu) const
The active flavour threshold below the scale as defined in QCD::Thresholds().
double AboveTh(const double mu) const
The active flavour threshold above the scale as defined in QCD::Thresholds().
virtual bool PreUpdate()
The pre-update method for QCD.
virtual bool CheckParameters(const std::map< std::string, double > &DPars)
A method to check if all the mandatory parameters for StandardModel have been provided in model initi...
virtual double alphaMz() const =0
Particle getQuarks(const quark q) const
A get method to access a quark as an object of the type Particle.
double AlsWithInit(const double mu, const double alsi, const double mu_i, const orders order) const
Computes the running strong coupling from in the scheme, where it is forbidden to across a flavour...
const double & getMass() const
A get method to access the particle mass.
complex log(const complex &z)
virtual bool Init(const std::map< std::string, double > &DPars)
Initializes the QCD parameters found in the argument.
double Nf(const double mu) const
The number of active flavour at scale .
std::string orderToString(const orders order) const
Converts an object of the enum type "orders" to the corresponding string.
A class for defining operations on and functions of complex numbers.
double Beta0(const double nf) const
The coefficient for a certain number of flavours .
static const std::string QCDvars[NQCDvars]
An array containing the labels under which all QCD parameters are stored in a vector of ModelParamete...
double Als4(const double mu) const
The value of at any scale with the number of flavours .
std::map< std::string, boost::reference_wrapper< const double > > ModelParamMap
double Beta2(const double nf) const
The coefficient for a certain number of flavours .
double Thresholds(const int i) const
For accessing the active flavour threshold scales.
virtual void setParameter(const std::string name, const double &value)=0
A method to set the value of a parameter of the model.