a Code for the Combination of Indirect and Direct Constraints on High Energy Physics Models Logo
MVgamma.cpp
Go to the documentation of this file.
1/*
2 * Copyright (C) 2014 HEPfit Collaboration
3 *
4 *
5 * For the licensing terms see doc/COPYING.
6 */
7
8#include "Flavour.h"
9#include "MVgamma.h"
10#include "StandardModel.h"
11#include "std_make_vector.h"
12#include "gslpp_function_adapter.h"
13#include "F_1.h"
14#include "F_2.h"
15#include "AmpDB2.h"
16#include <boost/bind/bind.hpp>
17#include <limits>
18#include <gsl/gsl_sf_zeta.h>
19#include <gsl/gsl_sf_gegenbauer.h>
20using namespace boost::placeholders;
21
22MVgamma::MVgamma(const StandardModel& SM_i, QCD::meson meson_i, QCD::meson vector_i)
23: SM(SM_i), myF_1(new F_1()), myF_2(new F_2())
24{
25 meson = meson_i;
26 vectorM = vector_i;
27 dispersion = false;
28 zExpansion = false;
29 FixedWCbtos = false;
30 MVll_DM_flag = false;
31 mJpsi = 3.0969;
32 mJ2 = mJpsi * mJpsi;
33 mPsi2S = 3.6861;
34 mPsi2S2 = mPsi2S * mPsi2S;
35 mD2 = 1.8648 * 1.8648;
36 SM.getFlavour().getDB2(0);
37 SM.getFlavour().getDB2(1);
38
39 w_GSL = gsl_integration_cquad_workspace_alloc (100);
40}
41
43{}
44
45std::vector<std::string> MVgamma::initializeMVgammaParameters()
46{
47 dispersion = SM.getFlavour().getFlagUseDispersionRelation();
48 zExpansion = SM.getFlavour().getFlagUsezExpansion();
49 FixedWCbtos = SM.getFlavour().getFlagFixedWCbtos();
50 MVll_DM_flag = SM.getFlavour().getFlagMVll_DM();
51
52#if NFPOLARBASIS_MVGAMMA
53 if (vectorM == StandardModel::PHI)
54 if (MVll_DM_flag) mVgammaParameters = make_vector<std::string>() <<
55 "a_0T1phi" << "a_1T1phi" << "a_2T1phi" << "MRT1" <<
56 "a_0fphi" << "a_1fphi" << "a_2fphi" << "MRf" <<
57 "a_0gphi" << "a_1gphi" << "a_2gphi" << "MRg" <<
58 "Chi1minus" << "Chi1plus" << "ChiTT" <<
59 "absh_p" << "absh_m" << "argh_p" << "argh_m" << "SU3_breaking_abs" << "SU3_breaking_arg"
60 << "Delta_C7_U";
61 else mVgammaParameters = make_vector<std::string>() <<
62 "a_0T1phi" << "a_0A1phi" << "a_0Vphi" <<
63 "absh_p" << "absh_m" << "argh_p" << "argh_m" << "SU3_breaking_abs" << "SU3_breaking_arg"
64 << "Delta_C7_U";
65 else if (vectorM == StandardModel::K_star || vectorM == StandardModel::K_star_P)
66 if (MVll_DM_flag) mVgammaParameters = make_vector<std::string>() <<
67 "a_0T1" << "a_1T1" << "a_2T1" << "MRT1" <<
68 "a_0f" << "a_1f" << "a_2f" << "MRf" <<
69 "a_0g" << "a_1g" << "a_2g" << "MRg" <<
70 "Chi1minus" << "Chi1plus" << "ChiTT" <<
71 "absh_p" << "absh_m" << "argh_p" << "argh_m"
72 << "Delta_C7_U";
73 else mVgammaParameters = make_vector<std::string>() << "a_0T1" << "a_0A1" << "a_0V" <<
74 "absh_p" << "absh_m" << "argh_p" << "argh_m"
75 << "Delta_C7_U";
76 else if (vectorM == StandardModel::RHO || vectorM == StandardModel::RHO_P)
77 mVgammaParameters = make_vector<std::string>() << "a_0T1rho" << "a_0A1rho" << "a_0Vrho" <<
78 "absh_p" << "absh_m" << "argh_p" << "argh_m"
79 << "Delta_C7_U";
80 else if (vectorM == StandardModel::OMEGA)
81 mVgammaParameters = make_vector<std::string>() << "a_0T1omega" << "a_0A1omega" << "a_0Vomega" <<
82 "absh_p" << "absh_m" << "argh_p" << "argh_m"
83 << "Delta_C7_U";
84#else
85 if (vectorM == StandardModel::PHI)
86 if (MVll_DM_flag) mVgammaParameters = make_vector<std::string>() <<
87 "a_0T1phi" << "a_1T1phi" << "a_2T1phi" << "MRT1" <<
88 "a_0fphi" << "a_1fphi" << "a_2fphi" << "MRf" <<
89 "a_0gphi" << "a_1gphi" << "a_2gphi" << "MRg" <<
90 "Chi1minus" << "Chi1plus" << "ChiTT" <<
91 "reh_p" << "reh_m" << "imh_p" << "imh_m" << "SU3_breaking_abs" << "SU3_breaking_arg"
92 << "Delta_C7_U";
93 else mVgammaParameters = make_vector<std::string>() <<
94 "a_0T1phi" << "a_0A1phi" << "a_0Vphi" <<
95 "reh_p" << "reh_m" << "imh_p" << "imh_m" << "SU3_breaking_abs" << "SU3_breaking_arg"
96 << "Delta_C7_U";
97 else if (vectorM == StandardModel::K_star || vectorM == StandardModel::K_star_P)
98 if (MVll_DM_flag) mVgammaParameters = make_vector<std::string>() <<
99 "a_0T1" << "a_1T1" << "a_2T1" << "MRT1" <<
100 "a_0f" << "a_1f" << "a_2f" << "MRf" <<
101 "a_0g" << "a_1g" << "a_2g" << "MRg" <<
102 "Chi1minus" << "Chi1plus" << "ChiTT" <<
103 "reh_p" << "reh_m" << "imh_p" << "imh_m"
104 << "Delta_C7_U";
105 else mVgammaParameters = make_vector<std::string>() <<
106 "a_0T1" << "a_0A1" << "a_0V" <<
107 "reh_p" << "reh_m" << "imh_p" << "imh_m"
108 << "Delta_C7_U";
109 else if (vectorM == StandardModel::RHO || vectorM == StandardModel::RHO_P)
110 mVgammaParameters = make_vector<std::string>() << "a_0T1rho" << "a_0A1rho" << "a_0Vrho" <<
111 "reh_p" << "reh_m" << "imh_p" << "imh_m"
112 << "Delta_C7_U";
113 else if (vectorM == StandardModel::OMEGA)
114 mVgammaParameters = make_vector<std::string>() << "a_0T1omega" << "a_0A1omega" << "a_0Vomega" <<
115 "reh_p" << "reh_m" << "imh_p" << "imh_m"
116 << "Delta_C7_U";
117#endif
118 else {
119 std::stringstream out;
120 out << vectorM;
121 throw std::runtime_error("MVgamma: vector " + out.str() + " not implemented");
122 }
123
124 if (dispersion) {
125 mVgammaParameters.clear();
126 if (vectorM == StandardModel::PHI)
127 if (MVll_DM_flag) mVgammaParameters = make_vector<std::string>() <<
128 "a_0T1phi" << "a_1T1phi" << "a_2T1phi" << "MRT1" <<
129 "a_0fphi" << "a_1fphi" << "a_2fphi" << "MRf" <<
130 "a_0gphi" << "a_1gphi" << "a_2gphi" << "MRg" <<
131 "Chi1minus" << "Chi1plus" << "ChiTT" <<
132 "r1_1" << "r2_1" << "deltaC9_1" << "phDC9_1" << "r1_2" << "r2_2" << "deltaC9_2" << "phDC9_2" << "SU3_breaking_abs" << "SU3_breaking_arg";
133 else mVgammaParameters = make_vector<std::string>() <<
134 "a_0T1phi" << "a_0A1phi" << "a_0Vphi" <<
135 "r1_1" << "r2_1" << "deltaC9_1" << "phDC9_1" << "r1_2" << "r2_2" << "deltaC9_2" << "phDC9_2" << "SU3_breaking_abs" << "SU3_breaking_arg";
136 else if (vectorM == StandardModel::K_star || vectorM == StandardModel::K_star_P)
137 if (MVll_DM_flag) mVgammaParameters = make_vector<std::string>() <<
138 "a_0T1" << "a_1T1" << "a_2T1" << "MRT1" <<
139 "a_0f" << "a_1f" << "a_2f" << "MRf" <<
140 "a_0g" << "a_1g" << "a_2g" << "MRg" <<
141 "Chi1minus" << "Chi1plus" << "ChiTT" <<
142 "r1_1" << "r2_1" << "deltaC9_1" << "phDC9_1" << "r1_2" << "r2_2" << "deltaC9_2" << "phDC9_2";
143 else mVgammaParameters = make_vector<std::string>() <<
144 "a_0T1" << "a_0A1" << "a_0V" <<
145 "r1_1" << "r2_1" << "deltaC9_1" << "phDC9_1" << "r1_2" << "r2_2" << "deltaC9_2" << "phDC9_2";
146 else if (vectorM == StandardModel::RHO || vectorM == StandardModel::RHO_P)
147 mVgammaParameters = make_vector<std::string>() << "a_0T1rho" << "a_0A1rho" << "a_0Vrho" <<
148 "r1_1" << "r2_1" << "deltaC9_1" << "phDC9_1" << "r1_2" << "r2_2" << "deltaC9_2" << "phDC9_2";
149 else if (vectorM == StandardModel::OMEGA)
150 mVgammaParameters = make_vector<std::string>() << "a_0T1omega" << "a_0A1omega" << "a_0Vomega" <<
151 "r1_1" << "r2_1" << "deltaC9_1" << "phDC9_1" << "r1_2" << "r2_2" << "deltaC9_2" << "phDC9_2";
152 else {
153 std::stringstream out;
154 out << vectorM;
155 throw std::runtime_error("MVgamma: vector " + out.str() + " not implemented");
156 }
157 }
158
159 if (zExpansion) {
160 mVgammaParameters.clear();
161 if (vectorM == StandardModel::PHI)
162 if (MVll_DM_flag) mVgammaParameters = make_vector<std::string>() <<
163 "a_0T1phi" << "a_1T1phi" << "a_2T1phi" << "MRT1"
164 << "a_0fphi" << "a_1fphi" << "a_2fphi" << "MRf"
165 << "a_0gphi" << "a_1gphi" << "a_2gphi" << "MRg"
166 << "Chi1minus" << "Chi1plus" << "ChiTT"
167 << "re_beta_1_0" << "re_beta_1_1" << "re_beta_1_2" << "re_beta_1_3" << "re_beta_1_4" << "re_beta_1_5" << "re_beta_1_6"
168 << "im_beta_1_0" << "im_beta_1_1" << "im_beta_1_2" << "im_beta_1_3" << "im_beta_1_4" << "im_beta_1_5" << "im_beta_1_6"
169 << "re_beta_2_0" << "re_beta_2_1" << "re_beta_2_2" << "re_beta_2_3" << "re_beta_2_4" << "re_beta_2_5" << "re_beta_2_6"
170 << "im_beta_2_0" << "im_beta_2_1" << "im_beta_2_2" << "im_beta_2_3" << "im_beta_2_4" << "im_beta_2_5" << "im_beta_2_6" << "SU3_breaking_abs" << "SU3_breaking_arg";
171 else mVgammaParameters = make_vector<std::string>() <<
172 "a_0T1phi" << "a_0A1phi" << "a_0Vphi"
173 << "re_beta_1_0" << "re_beta_1_1" << "re_beta_1_2" << "re_beta_1_3" << "re_beta_1_4" << "re_beta_1_5" << "re_beta_1_6"
174 << "im_beta_1_0" << "im_beta_1_1" << "im_beta_1_2" << "im_beta_1_3" << "im_beta_1_4" << "im_beta_1_5" << "im_beta_1_6"
175 << "re_beta_2_0" << "re_beta_2_1" << "re_beta_2_2" << "re_beta_2_3" << "re_beta_2_4" << "re_beta_2_5" << "re_beta_2_6"
176 << "im_beta_2_0" << "im_beta_2_1" << "im_beta_2_2" << "im_beta_2_3" << "im_beta_2_4" << "im_beta_2_5" << "im_beta_2_6" << "SU3_breaking_abs" << "SU3_breaking_arg";
177 else if (vectorM == StandardModel::K_star || vectorM == StandardModel::K_star_P)
178 if (MVll_DM_flag) mVgammaParameters = make_vector<std::string>() <<
179 "a_0T1" << "a_1T1" << "a_2T1" << "MRT1"
180 << "a_0f" << "a_1f" << "a_2f" << "MRf"
181 << "a_0g" << "a_1g" << "a_2g" << "MRg"
182 << "Chi1minus" << "Chi1plus" << "ChiTT"
183 << "re_beta_1_0" << "re_beta_1_1" << "re_beta_1_2" << "re_beta_1_3" << "re_beta_1_4" << "re_beta_1_5" << "re_beta_1_6"
184 << "im_beta_1_0" << "im_beta_1_1" << "im_beta_1_2" << "im_beta_1_3" << "im_beta_1_4" << "im_beta_1_5" << "im_beta_1_6"
185 << "re_beta_2_0" << "re_beta_2_1" << "re_beta_2_2" << "re_beta_2_3" << "re_beta_2_4" << "re_beta_2_5" << "re_beta_2_6"
186 << "im_beta_2_0" << "im_beta_2_1" << "im_beta_2_2" << "im_beta_2_3" << "im_beta_2_4" << "im_beta_2_5" << "im_beta_2_6";
187 else mVgammaParameters = make_vector<std::string>() <<
188 "a_0T1" << "a_0A1" << "a_0V"
189 << "re_beta_1_0" << "re_beta_1_1" << "re_beta_1_2" << "re_beta_1_3" << "re_beta_1_4" << "re_beta_1_5" << "re_beta_1_6"
190 << "im_beta_1_0" << "im_beta_1_1" << "im_beta_1_2" << "im_beta_1_3" << "im_beta_1_4" << "im_beta_1_5" << "im_beta_1_6"
191 << "re_beta_2_0" << "re_beta_2_1" << "re_beta_2_2" << "re_beta_2_3" << "re_beta_2_4" << "re_beta_2_5" << "re_beta_2_6"
192 << "im_beta_2_0" << "im_beta_2_1" << "im_beta_2_2" << "im_beta_2_3" << "im_beta_2_4" << "im_beta_2_5" << "im_beta_2_6";
193 else if (vectorM == StandardModel::RHO || vectorM == StandardModel::RHO_P)
194 mVgammaParameters = make_vector<std::string>() << "a_0T1rho" << "a_0A1rho" << "a_0Vrho"
195 << "re_beta_1_0" << "re_beta_1_1" << "re_beta_1_2" << "re_beta_1_3" << "re_beta_1_4" << "re_beta_1_5" << "re_beta_1_6"
196 << "im_beta_1_0" << "im_beta_1_1" << "im_beta_1_2" << "im_beta_1_3" << "im_beta_1_4" << "im_beta_1_5" << "im_beta_1_6"
197 << "re_beta_2_0" << "re_beta_2_1" << "re_beta_2_2" << "re_beta_2_3" << "re_beta_2_4" << "re_beta_2_5" << "re_beta_2_6"
198 << "im_beta_2_0" << "im_beta_2_1" << "im_beta_2_2" << "im_beta_2_3" << "im_beta_2_4" << "im_beta_2_5" << "im_beta_2_6";
199 else if (vectorM == StandardModel::OMEGA)
200 mVgammaParameters = make_vector<std::string>() << "a_0T1omega" << "a_0A1omega" << "a_0Vomega"
201 << "re_beta_1_0" << "re_beta_1_1" << "re_beta_1_2" << "re_beta_1_3" << "re_beta_1_4" << "re_beta_1_5" << "re_beta_1_6"
202 << "im_beta_1_0" << "im_beta_1_1" << "im_beta_1_2" << "im_beta_1_3" << "im_beta_1_4" << "im_beta_1_5" << "im_beta_1_6"
203 << "re_beta_2_0" << "re_beta_2_1" << "re_beta_2_2" << "re_beta_2_3" << "re_beta_2_4" << "re_beta_2_5" << "re_beta_2_6"
204 << "im_beta_2_0" << "im_beta_2_1" << "im_beta_2_2" << "im_beta_2_3" << "im_beta_2_4" << "im_beta_2_5" << "im_beta_2_6";
205 else {
206 std::stringstream out;
207 out << vectorM;
208 throw std::runtime_error("MVgamma: vector " + out.str() + " not implemented");
209 }
210 }
211
212 if (FixedWCbtos) mVgammaParameters.push_back("C7_SM" );
213
214 SM.initializeMeson(meson);
215 SM.initializeMeson(vectorM);
216 return mVgammaParameters;
217}
218
220{
221 if (!SM.getFlavour().getUpdateFlag(meson, vectorM, QCD::NOLEPTON)) return;
222
223 GF = SM.getGF();
224 ale = SM.getAle();
225 MM = SM.getMesons(meson).getMass();
226 MM2 = MM * MM;
227 MV = SM.getMesons(vectorM).getMass();
228 Mb = SM.getQuarks(QCD::BOTTOM).getMass(); // add the PS b mass
229 mb_pole = SM.Mbar2Mp(Mb, QCD::BOTTOM); /* Conversion to pole mass*/
230 mc_pole = SM.Mbar2Mp(SM.getQuarks(QCD::CHARM).getMass(), QCD::BOTTOM); /* Conversion to pole mass*/
231 Ms = SM.getQuarks(QCD::STRANGE).getMass();
232 MW = SM.Mw();
233 mu_b = SM.getMub();
234 mu_h = sqrt(mu_b * .5); // From Beneke Neubert
235 fB = SM.getMesons(meson).getDecayconst();
236 width = SM.getMesons(meson).computeWidth();
237 lambda = MM2 - pow(MV, 2.);
238 alpha_s_mub = SM.Als(mu_b, FULLNLO); /* Used for QCDF @ NLO */
239
240 t_p = pow(MM + MV, 2.);
241 t_m = pow(MM - MV, 2.);
242 z_DM = (sqrt(t_p) - sqrt(t_p - t_m)) / (sqrt(t_p) + sqrt(t_p - t_m));
243 rV = MV/MM;
244
245 switch (vectorM) {
247 if (MVll_DM_flag) {
248 a_0T1 = SM.getOptionalParameter("a_0T1");
249 a_1T1 = SM.getOptionalParameter("a_1T1");
250 a_2T1 = SM.getOptionalParameter("a_2T1");
251 MRT1_2 = SM.getOptionalParameter("MRT1")*SM.getOptionalParameter("MRT1");
252 a_0f = SM.getOptionalParameter("a_0f");
253 a_1f = SM.getOptionalParameter("a_1f");
254 a_2f = SM.getOptionalParameter("a_2f");
255 MRf_2 = SM.getOptionalParameter("MRf")*SM.getOptionalParameter("MRf");
256 a_0g = SM.getOptionalParameter("a_0g");
257 a_1g = SM.getOptionalParameter("a_1g");
258 a_2g = SM.getOptionalParameter("a_2g");
259 MRg_2 = SM.getOptionalParameter("MRg")*SM.getOptionalParameter("MRg");
260 Chi1minus = SM.getOptionalParameter("Chi1minus"); //0.000623174575;
261 Chi1plus = SM.getOptionalParameter("Chi1plus"); //0.000543940610;
262 ChiTT = SM.getOptionalParameter("ChiTT"); //0.0454644444;
263 }
264 else {
265 a_0T1 = SM.getOptionalParameter("a_0T1");
266 a_0A1 = SM.getOptionalParameter("a_0A1");
267 a_0V = SM.getOptionalParameter("a_0V");
268 }
269 lambda_t = SM.getCKM().computelamt_s();
270 lambda_u = SM.getCKM().computelamu_s();
271 spectator_charge = SM.getQuarks(QCD::DOWN).getCharge();
272 SU3_breaking = 1.;
273 break;
275 if (MVll_DM_flag) {
276 a_0T1 = SM.getOptionalParameter("a_0T1");
277 a_1T1 = SM.getOptionalParameter("a_1T1");
278 a_2T1 = SM.getOptionalParameter("a_2T1");
279 MRT1_2 = SM.getOptionalParameter("MRT1")*SM.getOptionalParameter("MRT1");
280 a_0f = SM.getOptionalParameter("a_0f");
281 a_1f = SM.getOptionalParameter("a_1f");
282 a_2f = SM.getOptionalParameter("a_2f");
283 MRf_2 = SM.getOptionalParameter("MRf")*SM.getOptionalParameter("MRf");
284 a_0g = SM.getOptionalParameter("a_0g");
285 a_1g = SM.getOptionalParameter("a_1g");
286 a_2g = SM.getOptionalParameter("a_2g");
287 MRg_2 = SM.getOptionalParameter("MRg")*SM.getOptionalParameter("MRg");
288 Chi1minus = SM.getOptionalParameter("Chi1minus"); //0.000623174575;
289 Chi1plus = SM.getOptionalParameter("Chi1plus"); //0.000543940610;
290 ChiTT = SM.getOptionalParameter("ChiTT"); //0.0454644444;
291 }
292 else {
293 a_0T1 = SM.getOptionalParameter("a_0T1");
294 a_0A1 = SM.getOptionalParameter("a_0A1");
295 a_0V = SM.getOptionalParameter("a_0V");
296 }
297 lambda_t = SM.getCKM().computelamt_s();
298 lambda_u = SM.getCKM().computelamu_s();
299 spectator_charge = SM.getQuarks(QCD::UP).getCharge();
300 SU3_breaking = 1.;
301 break;
303 if (MVll_DM_flag) {
304 a_0T1 = SM.getOptionalParameter("a_0T1phi");
305 a_1T1 = SM.getOptionalParameter("a_1T1phi");
306 a_2T1 = SM.getOptionalParameter("a_2T1phi");
307 MRT1_2 = SM.getOptionalParameter("MRT1")*SM.getOptionalParameter("MRT1");
308 a_0f = SM.getOptionalParameter("a_0fphi");
309 a_1f = SM.getOptionalParameter("a_1fphi");
310 a_2f = SM.getOptionalParameter("a_2fphi");
311 MRf_2 = SM.getOptionalParameter("MRf")*SM.getOptionalParameter("MRf");
312 a_0g = SM.getOptionalParameter("a_0gphi");
313 a_1g = SM.getOptionalParameter("a_1gphi");
314 a_2g = SM.getOptionalParameter("a_2gphi");
315 MRg_2 = SM.getOptionalParameter("MRg")*SM.getOptionalParameter("MRg");
316 Chi1minus = SM.getOptionalParameter("Chi1minus"); //0.000623174575;
317 Chi1plus = SM.getOptionalParameter("Chi1plus"); //0.000543940610;
318 ChiTT = SM.getOptionalParameter("ChiTT"); //0.0454644444;
319 }
320 else {
321 a_0T1 = SM.getOptionalParameter("a_0T1phi");
322 a_0A1 = SM.getOptionalParameter("a_0A1phi");
323 a_0V = SM.getOptionalParameter("a_0Vphi");
324 }
325 lambda_t = SM.getCKM().computelamt_s();
326 lambda_u = SM.getCKM().computelamu_s();
327 spectator_charge = SM.getQuarks(QCD::STRANGE).getCharge();
328 SU3_breaking = gslpp::complex(1. + SM.getOptionalParameter("SU3_breaking_abs"),
329 SM.getOptionalParameter("SU3_breaking_arg"), true);
330 break;
332 a_0T1 = SM.getOptionalParameter("a_0T1rho");
333 a_0A1 = SM.getOptionalParameter("a_0A1rho");
334 a_0V = SM.getOptionalParameter("a_0Vrho");
335 lambda_t = SM.getCKM().computelamt_d();
336 lambda_u = SM.getCKM().computelamu_d();
337 spectator_charge = SM.getQuarks(QCD::DOWN).getCharge();
338 SU3_breaking = 1.;
339 break;
341 a_0T1 = SM.getOptionalParameter("a_0T1rho");
342 a_0A1 = SM.getOptionalParameter("a_0A1rho");
343 a_0V = SM.getOptionalParameter("a_0Vrho");
344 lambda_t = SM.getCKM().computelamt_d();
345 lambda_u = SM.getCKM().computelamu_d();
346 spectator_charge = SM.getQuarks(QCD::UP).getCharge();
347 SU3_breaking = 1.;
348 break;
350 a_0T1 = SM.getOptionalParameter("a_0T1omega");
351 a_0A1 = SM.getOptionalParameter("a_0A1omega");
352 a_0V = SM.getOptionalParameter("a_0Vomega");
353 lambda_t = SM.getCKM().computelamt_d();
354 lambda_u = SM.getCKM().computelamu_d();
355 spectator_charge = SM.getQuarks(QCD::DOWN).getCharge();
356 SU3_breaking = 1.;
357 break;
358 default:
359 std::stringstream out;
360 out << vectorM;
361 throw std::runtime_error("MVgamma: vector " + out.str() + " not implemented");
362 }
363
364 fpara = SM.getMesons(vectorM).getDecayconst();
365 fperp = SM.getMesons(vectorM).getDecayconst_p();
366
367 double ms_over_mb = SM.Mrun(mu_b, SM.getQuarks(QCD::STRANGE).getMass_scale(),
368 SM.getQuarks(QCD::STRANGE).getMass(), QCD::STRANGE, FULLNNLO)
369 /SM.Mrun(mu_b, SM.getQuarks(QCD::BOTTOM).getMass_scale(),
370 SM.getQuarks(QCD::BOTTOM).getMass(), QCD::BOTTOM, FULLNNLO);
371
372 if (zExpansion) {
373 beta_1[0] = gslpp::complex(SM.getOptionalParameter("re_beta_1_0"), SM.getOptionalParameter("im_beta_1_0"), false);
374 beta_1[1] = gslpp::complex(SM.getOptionalParameter("re_beta_1_1"), SM.getOptionalParameter("im_beta_1_1"), false);
375 beta_1[2] = gslpp::complex(SM.getOptionalParameter("re_beta_1_2"), SM.getOptionalParameter("im_beta_1_2"), false);
376 beta_1[3] = gslpp::complex(SM.getOptionalParameter("re_beta_1_3"), SM.getOptionalParameter("im_beta_1_3"), false);
377 beta_1[4] = gslpp::complex(SM.getOptionalParameter("re_beta_1_4"), SM.getOptionalParameter("im_beta_1_4"), false);
378 beta_1[5] = gslpp::complex(SM.getOptionalParameter("re_beta_1_5"), SM.getOptionalParameter("im_beta_1_5"), false);
379 beta_1[6] = gslpp::complex(SM.getOptionalParameter("re_beta_1_6"), SM.getOptionalParameter("im_beta_1_6"), false);
380
381 beta_2[0] = gslpp::complex(SM.getOptionalParameter("re_beta_2_0"), SM.getOptionalParameter("im_beta_2_0"), false);
382 beta_2[1] = gslpp::complex(SM.getOptionalParameter("re_beta_2_1"), SM.getOptionalParameter("im_beta_2_1"), false);
383 beta_2[2] = gslpp::complex(SM.getOptionalParameter("re_beta_2_2"), SM.getOptionalParameter("im_beta_2_2"), false);
384 beta_2[3] = gslpp::complex(SM.getOptionalParameter("re_beta_2_3"), SM.getOptionalParameter("im_beta_2_3"), false);
385 beta_2[4] = gslpp::complex(SM.getOptionalParameter("re_beta_2_4"), SM.getOptionalParameter("im_beta_2_4"), false);
386 beta_2[5] = gslpp::complex(SM.getOptionalParameter("re_beta_2_5"), SM.getOptionalParameter("im_beta_2_5"), false);
387 beta_2[6] = gslpp::complex(SM.getOptionalParameter("re_beta_2_6"), SM.getOptionalParameter("im_beta_2_6"), false);
388
389 h[0] = h_lambda(0);
390 h[1] = h_lambda(1);
391 } else if (dispersion) {
392 //gslpp::complex DC7_1 = SM.getOptionalParameter("deltaC7_1")*exp(gslpp::complex::i()*SM.getOptionalParameter("phDC7_1"));
393 //gslpp::complex DC7_2 = SM.getOptionalParameter("deltaC7_2")*exp(gslpp::complex::i()*SM.getOptionalParameter("phDC7_2"));
394 //h[0] = (-(2.*Mb)/(MM*16.*M_PI*M_PI) * lambda/(2.*MM2) * T_1()*(DC7_2 - DC7_1)).abs();
395 //h[1] = (-(2.*Mb)/(MM*16.*M_PI*M_PI) * lambda/(2.*MM2) * T_1()*(DC7_2 + DC7_1)).abs();
396 r1_1 = SM.getOptionalParameter("r1_1");
397 r1_2 = SM.getOptionalParameter("r1_2");
398 r2_1 = SM.getOptionalParameter("r2_1");
399 r2_2 = SM.getOptionalParameter("r2_2");
400 deltaC9_1 = SM.getOptionalParameter("deltaC9_1");
401 deltaC9_2 = SM.getOptionalParameter("deltaC9_2");
402 exp_Phase_1 = exp(gslpp::complex::i()*SM.getOptionalParameter("phDC9_1"));
403 exp_Phase_2 = exp(gslpp::complex::i()*SM.getOptionalParameter("phDC9_2"));
404
405 h[0] = h_lambda(0);
406 h[1] = h_lambda(1);
407 } else {
408#if NFPOLARBASIS_MVGAMMA
409 h[0] = gslpp::complex(SM.getOptionalParameter("absh_p"), SM.getOptionalParameter("argh_p"), true); //h_plus
410 h[1] = gslpp::complex(SM.getOptionalParameter("absh_m"), SM.getOptionalParameter("argh_m"), true); //h_minus
411 h[1] *= 2. * (Mb / MM) / (16. * M_PI * M_PI) * (T_1() * lambda / MM2) ;
412 h[0] += ms_over_mb * h[1] ;
413
414 r1_1 = 0.;
415 r1_2 = 0.;
416 r2_1 = 0.;
417 r2_2 = 0.;
418 deltaC9_1 = 0.;
419 deltaC9_2 = 0.;
420 exp_Phase_1 = 0.;
421 exp_Phase_2 = 0.;
422
423 Delta_C7_U = SM.getOptionalParameter("Delta_C7_U");
424#else
425 h[0] = gslpp::complex(SM.getOptionalParameter("reh_p"), SM.getOptionalParameter("imh_p"), false); //h_plus
426 h[1] = gslpp::complex(SM.getOptionalParameter("reh_m"), SM.getOptionalParameter("imh_m"), false); //h_minus
427 h[1] *= 2. * (Mb / MM) / (16. * M_PI * M_PI) * (T_1() * lambda / MM2) ;
428 h[0] += ms_over_mb * h[1] ;
429
430 r1_1 = 0.;
431 r1_2 = 0.;
432 r2_1 = 0.;
433 r2_2 = 0.;
434 deltaC9_1 = 0.;
435 deltaC9_2 = 0.;
436 exp_Phase_1 = 0.;
437 exp_Phase_2 = 0.;
438
439 Delta_C7_U = SM.getOptionalParameter("Delta_C7_U");
440#endif
441 }
442
443#if UNIFIEDBTOS
444 allcoeff = SM.getFlavour().ComputeCoeffBMll(mu_b, QCD::MU); //check the mass scale, scheme fixed to NDR. QCD::MU does not make any difference to the WC necessary here.
445 allcoeffprime = SM.getFlavour().ComputeCoeffprimeBMll(mu_b, QCD::MU); //check the mass scale, scheme fixed to NDR. QCD::MU does not make any difference to the WC necessary here.
446
447 C_1 = (*(allcoeff[LO]))(0) + (*(allcoeff[NLO]))(0);
448 C_2 = (*(allcoeff[LO]))(1) + (*(allcoeff[NLO]))(1);
449 C_3 = (*(allcoeff[LO]))(2) + (*(allcoeff[NLO]))(2);
450 C_4 = (*(allcoeff[LO]))(3) + (*(allcoeff[NLO]))(3);
451 C_5 = (*(allcoeff[LO]))(4) + (*(allcoeff[NLO]))(4);
452 C_6 = (*(allcoeff[LO]))(5) + (*(allcoeff[NLO]))(5);
453 C_8 = (*(allcoeff[LO]))(7) + (*(allcoeff[NLO]))(7);
454
455 if (FixedWCbtos) {
456 allcoeff_noSM = SM.getFlavour().ComputeCoeffBMll(mu_b, StandardModel::NOLEPTON, true); //check the mass scale, scheme fixed to NDR
457 C_7 = SM.getOptionalParameter("C7_SM") + ((*(allcoeff_noSM[LO]))(6) + (*(allcoeff_noSM[NLO]))(6));
458 }
459 else C_7 = ((*(allcoeff[LO]))(6) + (*(allcoeff[NLO]))(6));
460 C_7p = ms_over_mb * ((*(allcoeffprime[LO]))(6) + (*(allcoeffprime[NLO]))(6));
461// C_7p -= ms_over_mb * C_7;
462 /* Done in the dirty way to remove from the effective basis since the effective C7p does not involve the non-primed C_1 to C_6.*/
463 C_7p += ms_over_mb * (-C_7 - 1. / 3. * C_3 - 4 / 9 * C_4 - 20. / 3. * C_5 - 80. / 9. * C_6);
464
465 if (!zExpansion && !dispersion) {
466 C_7 += Delta_C7_U;
467 }
468
469#else
470 allcoeff = SM.getFlavour().ComputeCoeffsgamma(mu_b);
471 allcoeffprime = SM.getFlavour().ComputeCoeffprimesgamma(mu_b);
472
473 C_1 = (*(allcoeff[LO]))(0) + (*(allcoeff[NLO]))(0);
474 C_2 = (*(allcoeff[LO]))(1) + (*(allcoeff[NLO]))(1);
475 C_3 = (*(allcoeff[LO]))(2) + (*(allcoeff[NLO]))(2);
476 C_4 = (*(allcoeff[LO]))(3) + (*(allcoeff[NLO]))(3);
477 C_5 = (*(allcoeff[LO]))(4) + (*(allcoeff[NLO]))(4);
478 C_6 = (*(allcoeff[LO]))(5) + (*(allcoeff[NLO]))(5);
479 C_8 = (*(allcoeff[LO]))(7) + (*(allcoeff[NLO]))(7);
480
481 if (FixedWCbtos) {
482 allcoeff_noSM = SM.getFlavour().ComputeCoeffsgamma(mu_b, true); //check the mass scale, scheme fixed to NDR
483 C_7 = SM.getOptionalParameter("C7_SM") + ((*(allcoeff_noSM[LO]))(6) + (*(allcoeff_noSM[NLO]))(6));
484 }
485 else C_7 = ((*(allcoeff[LO]))(6) + (*(allcoeff[NLO]))(6)););
486 C_7p = (*(allcoeffprime[LO]))(6) + (*(allcoeffprime[NLO]))(6);
487 /* Done in the dirty way to remove from the effective basis since the effective C7p does not involve the non-primed C_1 to C_6.*/
488 C_7p += -ms_over_mb * C_7 - 1. / 3. * C_3 - 4 / 9 * C_4 - 20. / 3. * C_5 - 80. / 9. * C_6;
489#endif
490 if (zExpansion) {
491 DC7_QCDF = 0.;
492 DC7_QCDF_bar = 0.;
493 T_perp_real = 0.;
494 T_perp_imag = 0.;
495 T_perp_bar_real = 0.;
496 T_perp_bar_imag = 0.;
497 } else {
498 DC7_QCDF = deltaC7_QCDF(false);
499 DC7_QCDF_bar = deltaC7_QCDF(true);
500
501 gsl_error_handler_t * old_handler = gsl_set_error_handler_off();
502
503 f_GSL = convertToGslFunction(bind(&MVgamma::getT_perp_integrand_real, &(*this), _1));
504 if (gsl_integration_cquad(&f_GSL, 0., 1., 1.e-2, 1.e-1, w_GSL, &average, &error, NULL) != 0) T_perp_real = std::numeric_limits<double>::quiet_NaN();
505 T_perp_real = average;
506
507 f_GSL = convertToGslFunction(bind(&MVgamma::getT_perp_integrand_imag, &(*this), _1));
508 if (gsl_integration_cquad(&f_GSL, 0., 1., 1.e-2, 1.e-1, w_GSL, &average, &error, NULL) != 0) T_perp_imag = std::numeric_limits<double>::quiet_NaN();
509 T_perp_imag = average;
510
511 f_GSL = convertToGslFunction(bind(&MVgamma::getT_perp_bar_integrand_real, &(*this), _1));
512 if (gsl_integration_cquad(&f_GSL, 0., 1., 1.e-2, 1.e-1, w_GSL, &average, &error, NULL) != 0) T_perp_bar_real = std::numeric_limits<double>::quiet_NaN();
513 T_perp_bar_real = average;
514
515 f_GSL = convertToGslFunction(bind(&MVgamma::getT_perp_bar_integrand_imag, &(*this), _1));
516 if (gsl_integration_cquad(&f_GSL, 0., 1., 1.e-2, 1.e-1, w_GSL, &average, &error, NULL) != 0) T_perp_bar_imag = std::numeric_limits<double>::quiet_NaN();
517 T_perp_bar_imag = average;
518
519 gsl_set_error_handler(old_handler);
520 }
521
522 s_p = 4. * mD2;
523 // s_0 = 4.;
524 s_0 = s_p - sqrt(s_p * (s_p - mPsi2S2));
525 Q2 = - Mb*Mb;
526 chiOPE = 0.000181;
527
528 SM.getFlavour().setUpdateFlag(meson, vectorM, QCD::NOLEPTON, false);
529
530}
531
532/*******************************************************************************
533 * Form Factor *
534 * ****************************************************************************/
535double MVgamma::phi_f(double MRf_2)
536{
537 double z = z_DM;
538 double z_M = (sqrt(t_p - MRf_2) - sqrt(t_p - t_m)) / (sqrt(t_p - MRf_2) + sqrt(t_p - t_m));
539
540 return 4.*rV/MM2*sqrt(2./3./Chi1plus/M_PI) * (1. + z)*pow(1. - z,1.5)/pow((1. + rV)*(1. - z)+2.*sqrt(rV)*(1. + z),4) * (z - z_M)/(1. - z_M*z);
541}
542
543double MVgamma::phi_g(double MRg_2)
544{
545 double z = z_DM;
546 double z_M = (sqrt(t_p - MRg_2) - sqrt(t_p - t_m)) / (sqrt(t_p - MRg_2) + sqrt(t_p - t_m));
547
548 return 16.*rV*rV*sqrt(2./3./Chi1minus/M_PI) * (1. + z)*(1. + z)*pow(1. - z,-0.5)/pow((1. + rV)*(1. - z)+2.*sqrt(rV)*(1. + z),4) * (z - z_M)/(1. - z_M*z);
549}
550
551double MVgamma::phi_T1(double MRT1_2)
552{
553 double z = z_DM;
554 double z_M = (sqrt(t_p - MRT1_2) - sqrt(t_p - t_m)) / (sqrt(t_p - MRT1_2) + sqrt(t_p - t_m));
555
556 return 32.*rV*rV/MM*sqrt(2./3./ChiTT/M_PI) * (1. + z)*(1. + z)*pow(1. - z,0.5)/pow((1. + rV)*(1. - z)+2.*sqrt(rV)*(1. + z),5) * (z - z_M)/(1. - z_M*z);
557}
558
559double MVgamma::f_DM(double a_0f, double a_1f, double a_2f, double MRf_2)
560{
561 return (a_0f + a_1f*z_DM + a_2f*z_DM*z_DM) / phi_f(MRf_2);
562}
563
564double MVgamma::g_DM(double a_0g, double a_1g, double a_2g, double MRg_2)
565{
566 return (a_0g + a_1g*z_DM + a_2g*z_DM*z_DM) / phi_g(MRg_2);
567}
568
569double MVgamma::T1_DM(double a_0T1, double a_1T1, double a_2T1, double MRT1_2)
570{
571 return (a_0T1 + a_1T1*z_DM + a_2T1*z_DM*z_DM) / phi_T1(MRT1_2);
572}
573
574double MVgamma::T_1()
575{
576 if (MVll_DM_flag) return T1_DM(a_0T1, a_1T1, a_2T1, MRT1_2);
577 else return a_0T1;
578}
579
580gslpp::complex MVgamma::deltaC7_QCDF(bool conjugate)
581{
582 double muh = mu_b/mb_pole;
583 double z = mc_pole*mc_pole/mb_pole/mb_pole;
584
585#if FULLNLOQCDF_MVGAMMA
586 gslpp::complex A_Seidel = 1./729. * (833. + 120.*gslpp::complex::i()*M_PI - 312. * log(mb_pole*mb_pole/mu_b/mu_b)); /* hep-ph/0403185v2.*/
587 gslpp::complex Fu_17 = -A_Seidel; /* sign different from hep-ph/0403185v2 but consistent with hep-ph/0412400 */
588 gslpp::complex Fu_27 = 6. * A_Seidel; /* sign different from hep-ph/0403185v2 but consistent with hep-ph/0412400 */
589#endif
590 gslpp::complex F_17 = myF_1->F_17re(muh, z, 0.00001, 20) + gslpp::complex::i() * myF_1->F_17im(muh, z, 0.00001, 20); /*q^2 = 0 gives nan. Independent of how small q^2 is. arXiv:0810.4077*/
591 gslpp::complex F_27 = myF_2->F_27re(muh, z, 0.00001, 20) + gslpp::complex::i() * myF_2->F_27im(muh, z, 0.00001, 20); /*q^2 = 0 gives nan. Independent of how small q^2 is. arXiv:0810.4077*/
592 gslpp::complex F_87 = (-4.*(33. + 24.*log(muh) + 6.*gslpp::complex::i()*M_PI - 2.*M_PI*M_PI))/27.;
593
594 if (!conjugate) {
595 gslpp::complex delta = C_1 * F_17 + C_2 * F_27;
596 gslpp::complex delta_t = C_8 * F_87 + delta;
597#if FULLNLOQCDF_MVGAMMA
598 gslpp::complex delta_u = delta + C_1 * Fu_17 + C_2 * Fu_27;
599 return -alpha_s_mub / (4. * M_PI) * (delta_t - lambda_u / lambda_t * delta_u);
600#else
601 return -alpha_s_mub / (4. * M_PI) * delta_t;
602#endif
603 } else {
604 gslpp::complex delta = C_1.conjugate() * F_17 + C_2.conjugate() * F_27;
605 gslpp::complex delta_t = C_8.conjugate() * F_87 + delta;
606#if FULLNLOQCDF_MVGAMMA
607 gslpp::complex delta_u = delta + C_1.conjugate() * Fu_17 + C_2.conjugate() * Fu_27;
608 return -alpha_s_mub / (4. * M_PI) * (delta_t - (lambda_u / lambda_t).conjugate() * delta_u);
609#else
610 return -alpha_s_mub / (4. * M_PI) * delta_t;
611#endif
612 }
613}
614
615gslpp::complex MVgamma::Cq34(bool conjugate)
616{
617 gslpp::complex T_t = C_3 + 4./3.*(C_4 + 12.*C_5 + 16.*C_6);
618 gslpp::complex T_u = 0.; /* 0 for K*0, phi*/
619 if (meson == QCD::B_P) T_u = -3.*C_2;
620 else if (vectorM == QCD::PHI) T_t = T_t + 6.*(C_3 + 10.*C_5);
621 else if (vectorM == QCD::RHO) T_u = 4./3.*C_1 + C_2;
622 else if (vectorM == QCD::OMEGA) {
623 T_u = -4./3.*C_1 + C_2;
624 T_t = T_t + 6.*2.*(C_3 + 10.*C_5);
625 }
626 if (!conjugate) return T_t + lambda_u / lambda_t * T_u;
627 else return T_t + (lambda_u / lambda_t).conjugate() * T_u;
628}
629
630gslpp::complex MVgamma::T_perp_WA_1()
631{
632 return -spectator_charge * 4./mb_pole * (C_3 + 4./3.*(C_4 + 3.*C_5 + 4.*C_6));
633}
634
635gslpp::complex MVgamma::T_perp_WA_2(bool conjugate)
636{
637 return spectator_charge * 2./mb_pole * Cq34(conjugate);
638}
639
640gslpp::complex MVgamma::L1(gslpp::complex x)
641{
642 if (x == 0.) return -(M_PI*M_PI/6.);
643 if (x == 1.) return 0.;
644 else return log((x-1.)/x)*log(1.-x) - (M_PI*M_PI/6.) + dilog(x/(x-1.));
645}
646
647double MVgamma::phi_V(double u)
648{
649 return 6.* u * (1. - u) * (1. + SM.getMesons(vectorM).getGegenalpha(0) * gsl_sf_gegenpoly_1(3./2., (2.*u - 1.)) + SM.getMesons(vectorM).getGegenalpha(1) * gsl_sf_gegenpoly_2(3./2., (2.*u - 1.)));
650}
651
652gslpp::complex MVgamma::t_perp(double u, double m)
653{
654 double ubar = 1. - u;
655 gslpp::complex x0 = sqrt(0.25 - (m*m - gslpp::complex::i()*1.e-10)/(ubar * MM2));
656 gslpp::complex xp = 0.5 + x0;
657 gslpp::complex xm = 0.5 - x0;
658
659 return 4./ubar * (1. + 2.*(m*m - gslpp::complex::i()*1.e-10)/(ubar*MM2) * (L1(xp) + L1(xm)));
660}
661
662gslpp::complex MVgamma::T_perp_plus_QSS(double u, bool conjugate)
663{
664 gslpp::complex t_perp_mc = t_perp(u, mc_pole);
665 double eu = 2./3.;
666#if FULLNLOQCDF_MVGAMMA
667 gslpp::complex t_perp_0 = t_perp(u, 0.);
668 double ed = -1./3.;
669 gslpp::complex T_t = (alpha_s_mub/(3.*M_PI))*MM/(2.*mb_pole)*(eu * t_perp_mc * (-C_1/6. + C_2 + 6.*C_6)
670 + ed * t_perp(u, mb_pole) * (C_3 - C_4/6. + 16.*C_5 + 10.*C_6/3. + 4.*mb_pole/MM*(-C_3 + C_4/6. - 4.*C_5 + 2.*C_6/3.))
671 + ed * t_perp_0 * (-C_3 + C_4/6. - 16.*C_5 + 8.*C_6/3.));
672
673 gslpp::complex T_u = ((alpha_s_mub/(3.*M_PI))*eu*MM/(2.*mb_pole)*(t_perp_mc - t_perp_0)*(C_2 - C_1/6.));
674 if (!conjugate) return T_t + lambda_u / lambda_t * T_u;
675 else return T_t + (lambda_u / lambda_t).conjugate() * T_u;
676#else
677 return (alpha_s_mub/(3.*M_PI))*MM/(2.*mb_pole)*(eu * t_perp_mc * (-C_1/6. + C_2 + 6.*C_6));
678#endif
679}
680
681gslpp::complex MVgamma::T_perp_plus_O8(double u)
682{
683 return -(alpha_s_mub/(3.*M_PI))*4.*(-1./3.)*C_8/u;
684}
685
686gslpp::complex MVgamma::T_perp(double u, bool conjugate)
687{
688 double N = M_PI*M_PI/3.*fB*fperp/MM;
689 gslpp::complex T_amp = N/SM.getMesons(meson).getLambdaM() * phi_V(u) * (T_perp_plus_O8(u) + T_perp_plus_QSS(u, conjugate));
690#if FULLNLOQCDF_MVGAMMA
691 double ubar = 1. - u;
692 T_amp += N * phi_V(u)/ubar * T_perp_WA_1() + N/SM.getMesons(meson).getLambdaM() * fpara/fperp * MV * T_perp_WA_2(conjugate);
693 /*last term proportional to T_perp_WA_2 is a constant but is included in the integral because u is integrated over the range [0,1]*/
694#endif
695 return T_amp;
696}
697
698gslpp::complex MVgamma::T_QCDF_minus(bool conjugate)
699{
700 if (!conjugate) return (T_perp_real + gslpp::complex::i() * T_perp_imag);
701 else return (T_perp_bar_real + gslpp::complex::i() * T_perp_bar_imag);
702}
703
704/*******************************************************************************
705 * Helicity amplitudes *
706 * ****************************************************************************/
707
708 gslpp::complex MVgamma::zh(double q2)
709{
710 return ( sqrt(s_p - q2) - sqrt(s_p - s_0)) / (sqrt(s_p - q2) + sqrt(s_p - s_0));
711}
712
713gslpp::complex MVgamma::P()
714{
715 gslpp::complex facmj2 = ( zh(0.) - zh(mJ2) ) / ( 1. - zh(0.)*zh(mJ2).conjugate() );
716 if(fabs(0. - mJ2)< 1.e-5) facmj2 = 1/(4.*(mJ2 - s_p));
717 gslpp::complex facmPsi2S2 = ( zh(0.) - zh(mPsi2S2) ) / ( 1. - zh(0.)*zh(mPsi2S2).conjugate() );
718 if(fabs(0. - mPsi2S2)< 1.e-5) facmPsi2S2 = 1/(4.*(mPsi2S2 - s_p));
719 // at the pole it returns directly the residue, i.e. Lim_{q2->mres2} P(q2)/(q2-mres2)
720 return facmj2*facmPsi2S2;
721}
722
723 gslpp::complex MVgamma::phi_1()
724{
725 return - sqrt( 2.*sqrt((4.*mD2-Q2)*(4.*mD2-s_0)) + 8.*mD2 - Q2 - s_0 ) / ( 2.*sqrt((4.*mD2-Q2)*(4.*mD2-s_0)) + 8.*mD2 + Q2*(zh(0.)-1.) - s_0*(zh(0.)+1.) ) ;
726}
727
728gslpp::complex MVgamma::phi_2()
729{
730 gslpp::complex zhm1_2 = (zh(0.)-1.)*(zh(0.)-1.);
731 gslpp::complex zhp1_2 = (zh(0.)+1.)*(zh(0.)+1.);
732
733 return sqrt( MM2*MM2*zhm1_2*zhm1_2 - 2.*MM2*zhm1_2*(-16.*mD2*zh(0.) + MV*MV*zhm1_2 + s_0*zhp1_2) + (16.*mD2*zh(0.) + MV*MV*zhm1_2 - s_0*zhp1_2)*(16.*mD2*zh(0.) + MV*MV*zhm1_2 - s_0*zhp1_2) );
734}
735
736gslpp::complex MVgamma::phi_3()
737{
738 return sqrt( 8.*mD2 + 4.*sqrt(4.*mD2*mD2 - mD2*s_0) - s_0 ) / ( -8.*mD2 - 4.*sqrt(4.*mD2*mD2 - mD2*s_0) + s_0*(zh(0.)+1.) ) ;
739}
740
741 gslpp::complex MVgamma::DeltaC9_zExpansion(int tran)
742{
743 gslpp::complex z = zh(0.);
744
745 gslpp::complex invpref = 4.*M_PI*sqrt(2.*(4.*mD2-s_0)/3./chiOPE)*sqrt(1+zh(0.)) * P();
746
747 if (tran == 1) { // parallel
748 invpref *= MM2*MM * pow(1.-z,3.5) * phi_1()*phi_1()*phi_1() * sqrt(phi_2()) * phi_3()*phi_3()*phi_3();
749
750 return 1./invpref * (beta_1[0] + beta_1[1]*z + beta_1[2]*z*z + beta_1[3]*z*z*z + beta_1[4]*z*z*z*z + beta_1[5]*z*z*z*z*z + beta_1[6]*z*z*z*z*z*z);
751 } else { // perpendicular
752 invpref *= MM2*MM * pow(1.-z,3.5) * phi_1()*phi_1()*phi_1() * sqrt(phi_2()) * phi_3()*phi_3()*phi_3();
753
754 return 1./invpref * (beta_2[0] + beta_2[1]*z + beta_2[2]*z*z + beta_2[3]*z*z*z + beta_2[4]*z*z*z*z + beta_2[5]*z*z*z*z*z + beta_2[6]*z*z*z*z*z*z);
755 }
756}
757
758gslpp::complex MVgamma::h_lambda(int hel)
759{
760 double A1;
761 double V;
762
763 if (MVll_DM_flag) {
764 A1 = f_DM(a_0f,a_1f,a_2f,MRf_2)/(MM+MV);
765 V = g_DM(a_0g,a_1g,a_2g,MRg_2)*(MM+MV)/2.;
766 } else {
767 A1 = a_0A1;
768 V = a_0V;
769 }
770
771 if (hel == 0) {
772 if (dispersion)
773 return SU3_breaking * ( -1./(MM2*16.*M_PI*M_PI) * (
774 ((MM+MV)*A1) / (2.*MM) * ((- r1_2 + deltaC9_2) / (1. + r2_2 / mJ2) )*exp_Phase_2
775 - lambda / (2.*MM*(MM+MV))*V * ((- r1_1 + deltaC9_1) / (1. + r2_1 / mJ2) )*exp_Phase_1 ) );
776 else if (zExpansion)
777 return (DeltaC9_zExpansion(1) - DeltaC9_zExpansion(2)) / sqrt(2.);
778 }
779 else if (hel == 1) {
780 if (dispersion)
781 return SU3_breaking * (-1./(MM2*16.*M_PI*M_PI) *
782 (((MM+MV)*A1) / (2.*MM) * ((- r1_2 + deltaC9_2) / (1. + r2_2 / mJ2) )*exp_Phase_2
783 + lambda / (2.*MM*(MM+MV))*V * ((- r1_1 + deltaC9_1) / (1. + r2_1 / mJ2) )*exp_Phase_1 ) );
784 else if (zExpansion)
785 return (DeltaC9_zExpansion(1) + DeltaC9_zExpansion(2)) / sqrt(2.);
786 }
787 else {
788 std::stringstream out;
789 out << hel;
790 throw std::runtime_error("MVgamma: hel " + out.str() + " not implemented, can only be 1 (+) or 2 (-)");
791 }
792}
793
794gslpp::complex MVgamma::H_V_m()
795{
796 return lambda_t * (((C_7 + DC7_QCDF) * T_1() + MM2/(MM2 - MV*MV) * T_QCDF_minus(false)) * lambda / MM2 - MM / (2. * Mb)*16. * M_PI * M_PI * h[1]);
797}
798
799gslpp::complex MVgamma::H_V_p()
800{
801 return lambda_t * (-C_7p * T_1() * lambda / MM2 - MM / (2. * Mb)*16. * M_PI * M_PI * h[0]);
802}
803
804gslpp::complex MVgamma::H_V_m_bar()
805{
806 return lambda_t.conjugate() * (((C_7 + DC7_QCDF_bar) * T_1() + MM2/(MM2 - MV*MV) * T_QCDF_minus(true)) * lambda / MM2 - MM / (2. * Mb)*16. * M_PI * M_PI * h[1]);
807}
808
809gslpp::complex MVgamma::H_V_p_bar()
810{
811 return lambda_t.conjugate() * (-C_7p * T_1() * lambda / MM2 - MM / (2. * Mb)*16. * M_PI * M_PI * h[0]);
812}
813
814/*******************************************************************************
815 * Observables *
816 * ****************************************************************************/
817
818
820: ThObservable(SM_i)
821{
822 meson = meson_i;
823 vectorM = vector_i;
824
826}
827
829{
830 QCD::meson meson_i = meson;
831 QCD::meson vector_i = vector;
832
833 SM.getFlavour().getMVgamma(meson_i, vector_i).updateParameters();
834
835 gslpp::complex HVm = SM.getFlavour().getMVgamma(meson_i, vector_i).H_V_m();
836 gslpp::complex HVm_bar = SM.getFlavour().getMVgamma(meson_i, vector_i).H_V_m_bar();
837 gslpp::complex HVp = SM.getFlavour().getMVgamma(meson_i, vector_i).H_V_p();
838 gslpp::complex HVp_bar = SM.getFlavour().getMVgamma(meson_i, vector_i).H_V_p_bar();
839
840 switch (vector_i) {
846 arg = SM.getFlavour().getDB2(0).getM21(FULLNLO).arg();
847 t_int = 1.;
848 break;
850 arg = SM.getFlavour().getDB2(1).getM21(FULLNLO).arg();
851 /* For correctly defined polarization the numerator should be H_V_p().conjugate()*H_V_p_bar() + H_V_m().conjugate()*H_V_m_bar(). Switched to keep consistency with K*ll.*/
852 /* See discussion around eq.53 in hep-ph/0510104*/
853 ADG = 2.*(exp(gslpp::complex::i()*arg)*(HVp.conjugate()*HVm_bar + HVm.conjugate()*HVp_bar)).real() / (HVp.abs2() + HVm.abs2() + HVp_bar.abs2() + HVm_bar.abs2());
855 t_int = (1. - ADG * ys)/(1. - ys*ys);
856 break;
857 default:
858 std::stringstream out;
859 out << vector_i;
860 throw std::runtime_error("MVgamma: vector " + out.str() + " not implemented");
861 }
862
863 double GF = SM.getGF();
864 double ale = SM.getAle();
865 double MM = SM.getMesons(meson_i).getMass();
866 double MM2 = MM * MM;
867 double Mb = SM.getQuarks(QCD::BOTTOM).getMass();
868 double MV = SM.getMesons(vector_i).getMass();
869 double width = SM.getMesons(meson_i).computeWidth();
870 double lambda = MM2 - pow(MV, 2.);
871
872
873 return ale * pow(GF * Mb / (4 * M_PI * M_PI), 2.) * MM * lambda / (4. * width) * (HVp.abs2() + HVm.abs2() + HVp_bar.abs2() + HVm_bar.abs2()) * t_int;
874}
875
877{
879}
880
881R_MVgamma::R_MVgamma(const StandardModel& SM_i, QCD::meson meson_1, QCD::meson vector_1, QCD::meson meson_2, QCD::meson vector_2)
882: BR_MVgamma(SM_i, meson_1, vector_1)
883{
884 meson1 = meson_1;
885 meson2 = meson_2;
886 vector1 = vector_1;
887 vector2 = vector_2;
888
891}
892
894{
896}
897
898D0p_MVgamma::D0p_MVgamma(const StandardModel& SM_i, QCD::meson meson_1, QCD::meson vector_1, QCD::meson meson_2, QCD::meson vector_2)
899: BR_MVgamma(SM_i, meson_1, vector_1)
900{
901 meson1 = meson_1;
902 meson2 = meson_2;
903 vector1 = vector_1;
904 vector2 = vector_2;
905
908}
909
911{
914}
915
917: ThObservable(SM_i)
918{
919 meson = meson_i;
920 vectorM = vector_i;
921
923}
924
926{
927 QCD::meson meson_i = meson;
928 QCD::meson vector_i = vector;
929
930 SM.getFlavour().getMVgamma(meson_i, vector_i).updateParameters();
931
932 gslpp::complex HVm = SM.getFlavour().getMVgamma(meson_i, vector_i).H_V_m();
933 gslpp::complex HVm_bar = SM.getFlavour().getMVgamma(meson_i, vector_i).H_V_m_bar();
934 gslpp::complex HVp = SM.getFlavour().getMVgamma(meson_i, vector_i).H_V_p();
935 gslpp::complex HVp_bar = SM.getFlavour().getMVgamma(meson_i, vector_i).H_V_p_bar();
936 double CC = ((HVp.abs2() + HVm.abs2() - HVp_bar.abs2() - HVm_bar.abs2())) / (HVp.abs2() + HVm.abs2() + HVp_bar.abs2() + HVm_bar.abs2());
937 return -CC;
938}
939
941{
943}
944
945DACP_MVgamma::DACP_MVgamma(const StandardModel& SM_i, QCD::meson meson_1, QCD::meson vector_1, QCD::meson meson_2, QCD::meson vector_2)
946: ACP_MVgamma(SM_i, meson_1, vector_1)
947{
948 meson1 = meson_1;
949 meson2 = meson_2;
950 vector1 = vector_1;
951 vector2 = vector_2;
952
955}
956
958{
960}
961
963: ThObservable(SM_i)
964{
965 meson = meson_i;
966 vectorM = vector_i;
967
969}
970
972{
974
975 gslpp::complex HVm = SM.getFlavour().getMVgamma(meson, vectorM).H_V_m();
976 gslpp::complex HVm_bar = SM.getFlavour().getMVgamma(meson, vectorM).H_V_m_bar();
977 gslpp::complex HVp = SM.getFlavour().getMVgamma(meson, vectorM).H_V_p();
978 gslpp::complex HVp_bar = SM.getFlavour().getMVgamma(meson, vectorM).H_V_p_bar();
979 /* REMEMBER: ACP = -C by definition in neutral B mesons.*/
980 double CC = ((HVp.abs2() + HVm.abs2() - HVp_bar.abs2() - HVm_bar.abs2())) / (HVp.abs2() + HVm.abs2() + HVp_bar.abs2() + HVm_bar.abs2());
981 if (meson == QCD::B_P) return -CC;
982 else return CC;
983
984}
985
987: ThObservable(SM_i)
988{
989 meson = meson_i;
990 vectorM = vector_i;
991
993}
994
996{
998
999 gslpp::complex HVm = SM.getFlavour().getMVgamma(meson, vectorM).H_V_m();
1000 gslpp::complex HVm_bar = SM.getFlavour().getMVgamma(meson, vectorM).H_V_m_bar();
1001 gslpp::complex HVp = SM.getFlavour().getMVgamma(meson, vectorM).H_V_p();
1002 gslpp::complex HVp_bar = SM.getFlavour().getMVgamma(meson, vectorM).H_V_p_bar();
1003
1004 switch (vectorM) {
1006 case StandardModel::RHO:
1007 arg = SM.getFlavour().getDB2(0).getM21(FULLNLO).arg();
1008 break;
1009 case StandardModel::PHI:
1010 arg = SM.getFlavour().getDB2(1).getM21(FULLNLO).arg();
1011 break;
1012 default:
1013 std::stringstream out;
1014 out << vectorM;
1015 throw std::runtime_error("MVgamma: vector " + out.str() + " not implemented");
1016 }
1017
1018 /* For correctly defined polarization the numerator should be H_V_p().conjugate()*H_V_p_bar() + H_V_m().conjugate()*H_V_m_bar(). Switched to keep consistency with K*ll.*/
1019 /* See discussion around eq.53 in hep-ph/0510104*/
1020 return 2.*(exp(gslpp::complex::i()*arg)*(HVp.conjugate()*HVm_bar + HVm.conjugate()*HVp_bar)).imag() / (HVp.abs2() + HVm.abs2() + HVp_bar.abs2() + HVm_bar.abs2());
1021}
1022
1024: ThObservable(SM_i)
1025{
1026 meson = meson_i;
1027 vectorM = vector_i;
1028
1030}
1031
1033{
1035
1036 gslpp::complex HVm = SM.getFlavour().getMVgamma(meson, vectorM).H_V_m();
1037 gslpp::complex HVm_bar = SM.getFlavour().getMVgamma(meson, vectorM).H_V_m_bar();
1038 gslpp::complex HVp = SM.getFlavour().getMVgamma(meson, vectorM).H_V_p();
1039 gslpp::complex HVp_bar = SM.getFlavour().getMVgamma(meson, vectorM).H_V_p_bar();
1040
1041 switch (vectorM) {
1043 arg = SM.getFlavour().getDB2(0).getM21(FULLNLO).arg();
1044 break;
1045 case StandardModel::PHI:
1046 arg = SM.getFlavour().getDB2(1).getM21(FULLNLO).arg();
1047 break;
1048 default:
1049 std::stringstream out;
1050 out << vectorM;
1051 throw std::runtime_error("MVgamma: vector " + out.str() + " not implemented");
1052 }
1053
1054 /* For correctly defined polarization the numerator should be H_V_p().conjugate()*H_V_p_bar() + H_V_m().conjugate()*H_V_m_bar(). Switched to keep consistency with K*ll.*/
1055 /* See discussion around eq.53 in hep-ph/0510104*/
1056 return 2.*(exp(gslpp::complex::i()*arg)*(HVp.conjugate()*HVm_bar + HVm.conjugate()*HVp_bar)).real() / (HVp.abs2() + HVm.abs2() + HVp_bar.abs2() + HVm_bar.abs2());
1057}
1058
1059DC7_1::DC7_1(const StandardModel& SM_i, QCD::meson meson_i, QCD::meson vector_i)
1060: ThObservable(SM_i)
1061{
1062 meson = meson_i;
1063 vectorM = vector_i;
1064
1066}
1067
1069{
1072}
1073
1074DC7_2::DC7_2(const StandardModel& SM_i, QCD::meson meson_i, QCD::meson vector_i)
1075: ThObservable(SM_i)
1076{
1077 meson = meson_i;
1078 vectorM = vector_i;
1079
1081}
1082
1084{
1087}
1088
1090: ThObservable(SM_i)
1091{
1092 meson = meson_i;
1093 vectorM = vector_i;
1094
1096}
1097
1099{
1101 return SM.getFlavour().getMVgamma(meson, vectorM).h[0].abs()/SM.getFlavour().getMVgamma(meson, vectorM).h[1].abs();
1102}
1103
1105: ThObservable(SM_i)
1106{
1107 meson = meson_i;
1108 vectorM = vector_i;
1109
1111}
1112
1114{
1117}
1118
1120: ThObservable(SM_i)
1121{
1122 meson = meson_i;
1123 vectorM = vector_i;
1124
1126}
1127
1129{
1132}
1133
1135: ThObservable(SM_i)
1136{
1137 meson = meson_i;
1138 vectorM = vector_i;
1139
1141}
1142
1144{
1147}
1148
1150: ThObservable(SM_i)
1151{
1152 meson = meson_i;
1153 vectorM = vector_i;
1154
1156}
1157
1159{
1162}
1163
1165: ThObservable(SM_i)
1166{
1167 meson = meson_i;
1168 vectorM = vector_i;
1169
1171}
1172
1174{
1177}
1178
1180: ThObservable(SM_i)
1181{
1182 meson = meson_i;
1183 vectorM = vector_i;
1184
1186}
1187
1189{
1192}
1193
1195: ThObservable(SM_i)
1196{
1197 meson = meson_i;
1198 vectorM = vector_i;
1199
1201}
1202
1204{
1206
1207 double MM = SM.getMesons(meson).getMass();
1208 double MM2 = MM * MM;
1209 double MV = SM.getMesons(vectorM).getMass();
1210 double T1 = SM.getFlavour().getMVgamma(meson, vectorM).T_1();
1211
1212 return ( SM.getFlavour().getMVgamma(meson, vectorM).DC7_QCDF + MM2/(MM2 - MV*MV) * SM.getFlavour().getMVgamma(meson, vectorM).T_QCDF_minus(false)/T1 ).abs();
1213}
1214
1216: ThObservable(SM_i)
1217{
1218 meson = meson_i;
1219 vectorM = vector_i;
1220
1222}
1223
1225{
1227
1228 double MM = SM.getMesons(meson).getMass();
1229 double MM2 = MM * MM;
1230 double MV = SM.getMesons(vectorM).getMass();
1231 double T1 = SM.getFlavour().getMVgamma(meson, vectorM).T_1();
1232
1233 return ( SM.getFlavour().getMVgamma(meson, vectorM).DC7_QCDF_bar + MM2/(MM2 - MV*MV) * SM.getFlavour().getMVgamma(meson, vectorM).T_QCDF_minus(true)/T1 ).abs();
1234}
1235
1237: ThObservable(SM_i)
1238{
1239 meson = meson_i;
1240 vectorM = vector_i;
1241
1243}
1244
1246{
1248
1249 double MM = SM.getMesons(meson).getMass();
1250 double MM2 = MM * MM;
1251 double MV = SM.getMesons(vectorM).getMass();
1252 double T1 = SM.getFlavour().getMVgamma(meson, vectorM).T_1();
1253
1254 return ( SM.getFlavour().getMVgamma(meson, vectorM).DC7_QCDF + MM2/(MM2 - MV*MV) * SM.getFlavour().getMVgamma(meson, vectorM).T_QCDF_minus(false)/T1 ).real();
1255}
1256
1258: ThObservable(SM_i)
1259{
1260 meson = meson_i;
1261 vectorM = vector_i;
1262
1264}
1265
1267{
1269
1270 double MM = SM.getMesons(meson).getMass();
1271 double MM2 = MM * MM;
1272 double MV = SM.getMesons(vectorM).getMass();
1273 double T1 = SM.getFlavour().getMVgamma(meson, vectorM).T_1();
1274
1275 return ( SM.getFlavour().getMVgamma(meson, vectorM).DC7_QCDF_bar + MM2/(MM2 - MV*MV) * SM.getFlavour().getMVgamma(meson, vectorM).T_QCDF_minus(true)/T1 ).real();
1276}
1277
1279: ThObservable(SM_i)
1280{
1281 meson = meson_i;
1282 vectorM = vector_i;
1283
1285}
1286
1288{
1290
1291 double MM = SM.getMesons(meson).getMass();
1292 double MM2 = MM * MM;
1293 double MV = SM.getMesons(vectorM).getMass();
1294 double T1 = SM.getFlavour().getMVgamma(meson, vectorM).T_1();
1295
1296 return ( SM.getFlavour().getMVgamma(meson, vectorM).DC7_QCDF + MM2/(MM2 - MV*MV) * SM.getFlavour().getMVgamma(meson, vectorM).T_QCDF_minus(false)/T1 ).imag();
1297}
1298
1300: ThObservable(SM_i)
1301{
1302 meson = meson_i;
1303 vectorM = vector_i;
1304
1306}
1307
1309{
1311
1312 double MM = SM.getMesons(meson).getMass();
1313 double MM2 = MM * MM;
1314 double MV = SM.getMesons(vectorM).getMass();
1315 double T1 = SM.getFlavour().getMVgamma(meson, vectorM).T_1();
1316
1317 return ( SM.getFlavour().getMVgamma(meson, vectorM).DC7_QCDF_bar + MM2/(MM2 - MV*MV) * SM.getFlavour().getMVgamma(meson, vectorM).T_QCDF_minus(true)/T1 ).imag();
1318}
@ LO
Definition: OrderScheme.h:34
@ NLO
Definition: OrderScheme.h:35
@ FULLNNLO
Definition: OrderScheme.h:39
@ FULLNLO
Definition: OrderScheme.h:38
A class for the parameter of CPV in decay.
Definition: MVgamma.h:661
double computeACP_MVgamma(QCD::meson meson, QCD::meson vector)
The parameter of CPV in .
Definition: MVgamma.cpp:925
ACP_MVgamma(const StandardModel &SM_i, QCD::meson meson_i, QCD::meson vector_i)
Constructor.
Definition: MVgamma.cpp:916
double computeThValue()
Definition: MVgamma.cpp:940
QCD::meson meson
Definition: MVgamma.h:681
QCD::meson vectorM
Definition: MVgamma.h:682
double arg
Definition: MVgamma.h:832
double computeThValue()
The parameter for CPV in .
Definition: MVgamma.cpp:1032
QCD::meson meson
Definition: MVgamma.h:830
QCD::meson vectorM
Definition: MVgamma.h:831
ADG_MVgamma(const StandardModel &SM_i, QCD::meson meson_i, QCD::meson vector_i)
Constructor.
Definition: MVgamma.cpp:1023
QCD::meson vectorM
Definition: MVgamma.h:968
QCD::meson meson
Definition: MVgamma.h:967
double computeThValue()
The in .
Definition: MVgamma.cpp:1113
AbsDC7_L(const StandardModel &SM_i, QCD::meson meson_i, QCD::meson vector_i)
Constructor.
Definition: MVgamma.cpp:1104
AbsDC7_QCDF_bar(const StandardModel &SM_i, QCD::meson meson_i, QCD::meson vector_i)
Constructor.
Definition: MVgamma.cpp:1215
QCD::meson meson
Definition: MVgamma.h:1211
QCD::meson vectorM
Definition: MVgamma.h:1212
double computeThValue()
The in .
Definition: MVgamma.cpp:1224
AbsDC7_QCDF(const StandardModel &SM_i, QCD::meson meson_i, QCD::meson vector_i)
Constructor.
Definition: MVgamma.cpp:1194
QCD::meson vectorM
Definition: MVgamma.h:1178
double computeThValue()
The in .
Definition: MVgamma.cpp:1203
QCD::meson meson
Definition: MVgamma.h:1177
QCD::meson vectorM
Definition: MVgamma.h:1004
double computeThValue()
The in .
Definition: MVgamma.cpp:1128
QCD::meson meson
Definition: MVgamma.h:1003
AbsDC7_R(const StandardModel &SM_i, QCD::meson meson_i, QCD::meson vector_i)
Constructor.
Definition: MVgamma.cpp:1119
gslpp::complex getM21(orders order)
The value of for mesons.
Definition: AmpDB2.h:51
A class for the in decay.
Definition: MVgamma.h:536
double arg
Definition: MVgamma.h:558
BR_MVgamma(const StandardModel &SM_i, QCD::meson meson_i, QCD::meson vector_i)
Constructor.
Definition: MVgamma.cpp:819
QCD::meson meson
Definition: MVgamma.h:556
double ys
Definition: MVgamma.h:560
double computeBR_MVgamma(QCD::meson meson, QCD::meson vector)
The in .
Definition: MVgamma.cpp:828
double computeThValue()
Definition: MVgamma.cpp:876
double t_int
Definition: MVgamma.h:561
double ADG
Definition: MVgamma.h:559
QCD::meson vectorM
Definition: MVgamma.h:557
double computeThValue()
The parameter of CPV in .
Definition: MVgamma.cpp:971
QCD::meson meson
Definition: MVgamma.h:759
QCD::meson vectorM
Definition: MVgamma.h:760
C_MVgamma(const StandardModel &SM_i, QCD::meson meson_i, QCD::meson vector_i)
Constructor.
Definition: MVgamma.cpp:962
QCD::meson meson2
Definition: MVgamma.h:641
double computeThValue()
The in .
Definition: MVgamma.cpp:910
QCD::meson vector1
Definition: MVgamma.h:642
QCD::meson meson1
Definition: MVgamma.h:640
QCD::meson vector2
Definition: MVgamma.h:643
D0p_MVgamma(const StandardModel &SM_i, QCD::meson meson_1, QCD::meson vector_1, QCD::meson meson_2, QCD::meson vector_2)
Constructor.
Definition: MVgamma.cpp:898
QCD::meson vector2
Definition: MVgamma.h:723
QCD::meson vector1
Definition: MVgamma.h:722
QCD::meson meson2
Definition: MVgamma.h:721
double computeThValue()
The in .
Definition: MVgamma.cpp:957
DACP_MVgamma(const StandardModel &SM_i, QCD::meson meson_1, QCD::meson vector_1, QCD::meson meson_2, QCD::meson vector_2)
Constructor.
Definition: MVgamma.cpp:945
QCD::meson meson1
Definition: MVgamma.h:720
QCD::meson vectorM
Definition: MVgamma.h:867
double computeThValue()
The in .
Definition: MVgamma.cpp:1068
DC7_1(const StandardModel &SM_i, QCD::meson meson_i, QCD::meson vector_i)
Constructor.
Definition: MVgamma.cpp:1059
QCD::meson meson
Definition: MVgamma.h:866
QCD::meson meson
Definition: MVgamma.h:902
DC7_2(const StandardModel &SM_i, QCD::meson meson_i, QCD::meson vector_i)
Constructor.
Definition: MVgamma.cpp:1074
QCD::meson vectorM
Definition: MVgamma.h:903
double computeThValue()
The in .
Definition: MVgamma.cpp:1083
Definition: F_1.h:15
Definition: F_2.h:15
AmpDB2 & getDB2(int BMeson_i, bool flag_fixmub=false, bool flag_RI=false) const
Returns a reference to the meson dependent object for processes.
Definition: Flavour.cpp:229
MVgamma & getMVgamma(QCD::meson meson_i, QCD::meson vector_i) const
Returns the initial and final state dependent object for .
Definition: Flavour.cpp:234
double computeThValue()
The in .
Definition: MVgamma.cpp:1173
QCD::meson meson
Definition: MVgamma.h:1107
ImDC7_L(const StandardModel &SM_i, QCD::meson meson_i, QCD::meson vector_i)
Constructor.
Definition: MVgamma.cpp:1164
QCD::meson vectorM
Definition: MVgamma.h:1108
QCD::meson meson
Definition: MVgamma.h:1347
double computeThValue()
The in .
Definition: MVgamma.cpp:1308
QCD::meson vectorM
Definition: MVgamma.h:1348
ImDC7_QCDF_bar(const StandardModel &SM_i, QCD::meson meson_i, QCD::meson vector_i)
Constructor.
Definition: MVgamma.cpp:1299
double computeThValue()
The in .
Definition: MVgamma.cpp:1287
ImDC7_QCDF(const StandardModel &SM_i, QCD::meson meson_i, QCD::meson vector_i)
Constructor.
Definition: MVgamma.cpp:1278
QCD::meson meson
Definition: MVgamma.h:1313
QCD::meson vectorM
Definition: MVgamma.h:1314
double computeThValue()
The in .
Definition: MVgamma.cpp:1188
QCD::meson vectorM
Definition: MVgamma.h:1144
ImDC7_R(const StandardModel &SM_i, QCD::meson meson_i, QCD::meson vector_i)
Constructor.
Definition: MVgamma.cpp:1179
QCD::meson meson
Definition: MVgamma.h:1143
double t_m
Definition: MVgamma.h:188
double t_p
Definition: MVgamma.h:187
double r2_1
Definition: MVgamma.h:199
double fperp
Definition: MVgamma.h:182
double mu_b
Definition: MVgamma.h:179
double r2_2
Definition: MVgamma.h:200
double z_DM
Definition: MVgamma.h:189
double Chi1plus
Definition: MVgamma.h:192
double Ms
Definition: MVgamma.h:185
gslpp::complex h[2]
Definition: MVgamma.h:196
double ChiTT
Definition: MVgamma.h:191
double Mb
Definition: MVgamma.h:176
double r1_1
Definition: MVgamma.h:197
void updateParameters()
The update parameter method for MVgamma.
Definition: MVgamma.cpp:219
double spectator_charge
Definition: MVgamma.h:207
virtual ~MVgamma()
Destructor.
Definition: MVgamma.cpp:42
double rV
Definition: MVgamma.h:190
double mc_pole
Definition: MVgamma.h:178
std::vector< std::string > initializeMVgammaParameters()
A method for initializing the parameters necessary for MVgamma.
Definition: MVgamma.cpp:45
double Chi1minus
Definition: MVgamma.h:193
gslpp::complex lambda_u
Definition: MVgamma.h:195
double mb_pole
Definition: MVgamma.h:177
double lambda
Definition: MVgamma.h:206
double ale
Definition: MVgamma.h:172
double deltaC9_2
Definition: MVgamma.h:202
double mu_h
Definition: MVgamma.h:180
double GF
Definition: MVgamma.h:171
gslpp::complex SU3_breaking
Definition: MVgamma.h:205
gslpp::complex exp_Phase_1
Definition: MVgamma.h:203
double deltaC9_1
Definition: MVgamma.h:201
gslpp::complex exp_Phase_2
Definition: MVgamma.h:204
double fB
Definition: MVgamma.h:184
double fpara
Definition: MVgamma.h:183
MVgamma(const StandardModel &SM_i, QCD::meson meson_i, QCD::meson vector_i)
Constructor.
Definition: MVgamma.cpp:22
double MM
Definition: MVgamma.h:173
double MM2
Definition: MVgamma.h:174
double MW
Definition: MVgamma.h:186
double width
Definition: MVgamma.h:181
double r1_2
Definition: MVgamma.h:198
gslpp::complex lambda_t
Definition: MVgamma.h:194
double MV
Definition: MVgamma.h:175
const double & getDgamma_gamma() const
Definition: Meson.h:411
double computeWidth() const
A method to compute the width of the meson from its lifetime.
Definition: Meson.cpp:521
const double & getMass() const
A get method to access the particle mass.
Definition: Particle.h:61
meson
An enum type for mesons.
Definition: QCD.h:336
@ OMEGA
Definition: QCD.h:355
@ PHI
Definition: QCD.h:348
@ K_star
Definition: QCD.h:349
@ B_P
Definition: QCD.h:345
@ K_star_P
Definition: QCD.h:350
@ RHO_P
Definition: QCD.h:354
@ RHO
Definition: QCD.h:353
@ B_S
Definition: QCD.h:346
const Meson & getMesons(const QCD::meson m) const
A get method to access a meson as an object of the type Meson.
Definition: QCD.h:526
@ 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
@ MU
Definition: QCD.h:314
@ NOLEPTON
Definition: QCD.h:317
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
R_MVgamma(const StandardModel &SM_i, QCD::meson meson_1, QCD::meson vector_1, QCD::meson meson_2, QCD::meson vector_2)
Constructor.
Definition: MVgamma.cpp:881
QCD::meson vector1
Definition: MVgamma.h:601
QCD::meson meson2
Definition: MVgamma.h:600
QCD::meson meson1
Definition: MVgamma.h:599
QCD::meson vector2
Definition: MVgamma.h:602
double computeThValue()
The in .
Definition: MVgamma.cpp:893
QCD::meson vectorM
Definition: MVgamma.h:1038
QCD::meson meson
Definition: MVgamma.h:1037
double computeThValue()
The in .
Definition: MVgamma.cpp:1143
ReDC7_L(const StandardModel &SM_i, QCD::meson meson_i, QCD::meson vector_i)
Constructor.
Definition: MVgamma.cpp:1134
QCD::meson vectorM
Definition: MVgamma.h:1280
ReDC7_QCDF_bar(const StandardModel &SM_i, QCD::meson meson_i, QCD::meson vector_i)
Constructor.
Definition: MVgamma.cpp:1257
QCD::meson meson
Definition: MVgamma.h:1279
double computeThValue()
The in .
Definition: MVgamma.cpp:1266
double computeThValue()
The in .
Definition: MVgamma.cpp:1245
QCD::meson meson
Definition: MVgamma.h:1245
QCD::meson vectorM
Definition: MVgamma.h:1246
ReDC7_QCDF(const StandardModel &SM_i, QCD::meson meson_i, QCD::meson vector_i)
Constructor.
Definition: MVgamma.cpp:1236
QCD::meson meson
Definition: MVgamma.h:1073
QCD::meson vectorM
Definition: MVgamma.h:1074
double computeThValue()
The in .
Definition: MVgamma.cpp:1158
ReDC7_R(const StandardModel &SM_i, QCD::meson meson_i, QCD::meson vector_i)
Constructor.
Definition: MVgamma.cpp:1149
QCD::meson vectorM
Definition: MVgamma.h:795
S_MVgamma(const StandardModel &SM_i, QCD::meson meson_i, QCD::meson vector_i)
Constructor.
Definition: MVgamma.cpp:986
double arg
Definition: MVgamma.h:796
double computeThValue()
The parameter for CPV in .
Definition: MVgamma.cpp:995
QCD::meson meson
Definition: MVgamma.h:794
A model class for the Standard Model.
const Flavour & getFlavour() const
const double getGF() const
A get method to retrieve the Fermi constant .
const double getAle() const
A get method to retrieve the fine-structure constant .
A class for a model prediction of an observable.
Definition: ThObservable.h:25
void setParametersForObservable(std::vector< std::string > parametersForObservable_i)
A set method to get the parameters for the specific observable.
Definition: ThObservable.h:109
const StandardModel & SM
A reference to an object of StandardMode class.
Definition: ThObservable.h:121
QCD::meson vectorM
Definition: MVgamma.h:934
hp0_hm0(const StandardModel &SM_i, QCD::meson meson_i, QCD::meson vector_i)
Constructor.
Definition: MVgamma.cpp:1089
double computeThValue()
The absolute value of the ratio in .
Definition: MVgamma.cpp:1098
QCD::meson meson
Definition: MVgamma.h:933