MVgamma.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2014 HEPfit Collaboration
3  * All rights reserved.
4  *
5  * For the licensing terms see doc/COPYING.
6  */
7 
8 #include "Flavour.h"
9 #include "MVgamma.h"
10 #include <gsl/gsl_sf_zeta.h>
11 
13 {
14  if (SM.ModelName().compare("StandardModel") != 0 && SM.ModelName().compare("FlavourWilsonCoefficient") != 0) std::cout << "\nWARNING: B to V gamma not implemented in: " + SM.ModelName() + " model, returning Standard Model value.\n" << std::endl;
15  meson = meson_i;
16  vectorM = vector_i;
17 }
18 
20 {
21 }
22 
24 {
25  GF = SM.getGF();
26  ale = SM.getAle();
28  MM2 = MM * MM;
30  Mb = SM.getQuarks(QCD::BOTTOM).getMass(); // add the PS b mass
33  MW = SM.Mw();
35  mu_b = SM.getMub();
36  mu_h = sqrt(mu_b * .5); // From Beneke Neubert
38  lambda = MM2 - pow(MV, 2.);
39 
40  switch (vectorM) {
42  a_0T1 = SM.geta_0T1();
43 
44  break;
45  case StandardModel::PHI:
46  a_0T1 = SM.geta_0T1phi();
47 
48  break;
49  default:
50  std::stringstream out;
51  out << vectorM;
52  throw std::runtime_error("MVgamma: vector " + out.str() + " not implemented");
53  }
54 
55 
56  h[0] = SM.geth_p(); //h_plus
57  h[1] = SM.geth_m(); //h_minus
58 
59  allcoeff = SM.getMyFlavour()->ComputeCoeffBMll(mu_b); //check the mass scale, scheme fixed to NDR
60  allcoeffprime = SM.getMyFlavour()->ComputeCoeffprimeBMll(mu_b); //check the mass scale, scheme fixed to NDR
61 
62  C_7 = (*(allcoeff[LO]))(6) + (*(allcoeff[NLO]))(6);
63  C_7p = (*(allcoeffprime[LO]))(6) + (*(allcoeffprime[NLO]))(6);
64  C_2 = (*(allcoeff[LO]))(1);
65  C_8 = (*(allcoeff[LO]))(7);
66 
67  allcoeffh = SM.getMyFlavour()->ComputeCoeffBMll(mu_h); //check the mass scale, scheme fixed to NDR
68 
69  C_2h = (*(allcoeffh[LO]))(1);
70  C_8h = (*(allcoeffh[LO]))(7);
71 
72 }
73 
74 /*******************************************************************************
75  * Form Factor *
76  * ****************************************************************************/
77 double MVgamma::T_1()
78 {
79  return ( a_0T1);
80 }
81 
82 /*
83  * QCDF alpha_s corrections
84  */
86 {
87  double logs = log(s);
88  double M2 = M_PI*M_PI;
89  double M3 = M_PI * M_PI*M_PI;
90 
91  return -104. / 27. * log(mu_b / Mb) - 833. / 162. - 20. * gslpp::complex::i() * M_PI / 27. +
92  8. * M2 / 9. * pow(s, 1.5) + 2. / 9. * (48. + 30. * gslpp::complex::i() * M_PI -
93  5. * M2 - 2. * gslpp::complex::i() * M3 - 36. * gsl_sf_zeta(3.)+
94  (36. + 6. * gslpp::complex::i() * M_PI - 9. * M2) * logs + (3. + 6. *
95  gslpp::complex::i() * M_PI) * logs * logs + logs * logs * logs) * s + 2. / 9. * (
96  18. + 2. * M2 - 2. * gslpp::complex::i() * M3 + (12. - 6. * M2) * logs + 6. *
97  gslpp::complex::i() * M_PI * logs * logs + logs * logs * logs) * s * s + 1. / 27. * (-9. + 112. *
98  gslpp::complex::i() * M_PI - 14. * M2 + (182. - 48. * gslpp::complex::i() * M_PI) * logs -
99  126. * logs * logs) * s * s*s;
100 }
101 
103 {
104  return 8. / 3. * log(mu_b / Mb) + 11. / 3. - 2. / 9. * M_PI * M_PI + 2. / 3. * gslpp::complex::i() * M_PI;
105 }
106 
108 {
109  gslpp::complex c0, c1, c2;
110 
111  c0 = 1.05171 + 1.02281 + gslpp::complex::i()*2.75305;
112  c1 = 1.41919 + 0.413974 - gslpp::complex::i()*1.85404;
113  c2 = 0.269769 - 1.73577 - gslpp::complex::i()*1.50017;
114 
115  return -2. * M_PI * M_PI / 9. * SM.getMesons(meson).getDecayconst() *
117  (c0 + c1 * SM.getMesons(vectorM).getGegenalpha(0) + c2 * SM.getMesons(vectorM).getGegenalpha(1));
118 }
119 
121 {
122  return 4. * M_PI * M_PI / 9. * SM.getMesons(meson).getDecayconst() *
124  (3. - 3. * SM.getMesons(vectorM).getGegenalpha(0) + 3. * SM.getMesons(vectorM).getGegenalpha(1));
125 }
126 
127 /*******************************************************************************
128  * Helicity amplitudes *
129  * ****************************************************************************/
131 {
132  double s = Mc * Mc / Mb / Mb;
133  return lambda_t * ((C_7 + SM.Als(mu_b) / 3. / M_PI * (C_2 * G1(s) + C_8 * G8())
134  + SM.Als(mu_h) / 3. / M_PI * (C_2h * H1(s) + C_8h * H8())) * T_1()
135  * lambda / MM2 - MM / (2 * Mb)*16 * M_PI * M_PI * h[1]);
136 }
137 
139 {
140  return lambda_t * (-C_7p * T_1() * lambda / MM2 - MM / (2 * Mb)*16 * M_PI * M_PI * h[0]);
141 }
142 
144 {
145  double s = Mc * Mc / Mb / Mb;
146  return lambda_t.conjugate() * ((C_7 + SM.Als(mu_b) / 3. / M_PI * (C_2 * G1(s) + C_8 * G8())
147  + SM.Als(mu_h) / 3. / M_PI * (C_2h * H1(s) + C_8h * H8())) * T_1() * lambda / MM2 - MM / (2 * Mb)*16 * M_PI * M_PI * h[1]);
148 }
149 
151 {
152  return lambda_t.conjugate() * (-C_7p * T_1() * lambda / MM2 - MM / (2 * Mb)*16 * M_PI * M_PI * h[0]);
153 }
154 
155 /*******************************************************************************
156  * Observables *
157  * ****************************************************************************/
158 
159 
161 : MVgamma(SM_i, meson_i, vector_i)
162 {
163  meson = meson_i;
164  vectorM = vector_i;
165 }
166 
168 {
170 
171  return ale * pow(GF * Mb / (4 * M_PI * M_PI), 2.) * MM * lambda / (4. * width) * (H_V_p().abs2() + H_V_m().abs2() + H_V_p_bar().abs2() + H_V_m_bar().abs2());
172 }
173 
174 ACP_MVgamma::ACP_MVgamma(const StandardModel& SM_i, StandardModel::meson meson_i, StandardModel::meson vector_i) : MVgamma(SM_i, meson_i, vector_i)
175 {
176  meson = meson_i;
177  vectorM = vector_i;
178 }
179 
181 {
183 
184  return ((H_V_p().abs2() + H_V_m().abs2() - H_V_p_bar().abs2() - H_V_m_bar().abs2())) / (H_V_p().abs2() + H_V_m().abs2() + H_V_p_bar().abs2() + H_V_m_bar().abs2());
185 }
186 
188 : MVgamma(SM_i, meson_i, vector_i)
189 {
190  meson = meson_i;
191  vectorM = vector_i;
192 }
193 
195 {
197  return ( (8. * M_PI * M_PI * MM2 * MM) / (lambda * Mb * T_1())*(h[1] - h[0])).abs();
198 }
199 
201 : MVgamma(SM_i, meson_i, vector_i)
202 {
203  meson = meson_i;
204  vectorM = vector_i;
205 }
206 
208 {
210  return ( (8. * M_PI * M_PI * MM2 * MM) / (lambda * Mb * T_1())*(h[1] + h[0])).abs();
211 }
void updateParameters()
The update parameter method for MVgamma.
Definition: MVgamma.cpp:23
double computeThValue()
The in .
Definition: MVgamma.cpp:167
double abs2() const
gslpp::vector< gslpp::complex > ** ComputeCoeffBMll(double mu, schemes scheme=NDR)
Computes the Wilson coefficient for the process .
Definition: Flavour.h:176
StandardModel::meson meson
Definition: MVgamma.h:214
BR_MVgamma(const StandardModel &SM_i, StandardModel::meson meson_i, StandardModel::meson vector_i)
Constructor.
Definition: MVgamma.cpp:160
StandardModel::meson vectorM
Definition: MVgamma.h:215
DC7_1(const StandardModel &SM_i, StandardModel::meson meson_i, StandardModel::meson vector_i)
Constructor.
Definition: MVgamma.cpp:187
double GF
Definition: MVgamma.h:50
double Mc
Definition: MVgamma.h:56
virtual ~MVgamma()
Destructor.
Definition: MVgamma.cpp:19
double getMub() const
A get method to access the threshold between five- and four-flavour theory in GeV.
Definition: QCD.h:905
double Ms
Definition: MVgamma.h:60
complex conjugate() const
gslpp::vector< gslpp::complex > ** allcoeff
Definition: MVgamma.h:71
gslpp::complex H_V_p()
The helicity amplitude .
Definition: MVgamma.cpp:138
gslpp::complex C_2h
Definition: MVgamma.h:79
double mu_h
Definition: MVgamma.h:58
complex pow(const complex &z1, const complex &z2)
MVgamma(const StandardModel &SM_i, StandardModel::meson meson_i, StandardModel::meson vector_i)
Constructor.
Definition: MVgamma.cpp:12
double Mb
Definition: MVgamma.h:55
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...
Definition: QCD.cpp:1004
meson
An enum type for mesons.
Definition: QCD.h:713
A class for a model prediction of an observable.
Definition: ThObservable.h:22
static const complex & i()
gslpp::complex G1(double s)
Correction in eq. (42) of .
Definition: MVgamma.cpp:85
double width
Definition: MVgamma.h:59
const double & getDecayconst() const
A get method for the decay constant of the meson.
Definition: Meson.h:74
A model class for the Standard Model.
const double & getLambdaM() const
Definition: Meson.h:110
gslpp::complex H_V_p_bar()
The helicity amplitude .
Definition: MVgamma.cpp:150
Meson getMesons(const meson m) const
A get method to access a meson as an object of the type Meson.
Definition: QCD.h:859
double computeThValue()
The in .
Definition: MVgamma.cpp:180
virtual double Mw() const
The SM prediction for the -boson mass in the on-shell scheme, .
double computeWidth() const
A method to compute the width of the meson from its lifetime.
Definition: Meson.cpp:25
DC7_2(const StandardModel &SM_i, StandardModel::meson meson_i, StandardModel::meson vector_i)
Constructor.
Definition: MVgamma.cpp:200
double mu_b
Definition: MVgamma.h:57
double T_1()
The transverse form factor .
Definition: MVgamma.cpp:77
gslpp::complex H8()
Correction in eq. (42) of .
Definition: MVgamma.cpp:120
StandardModel::meson meson
Definition: MVgamma.h:177
StandardModel::meson meson
Definition: MVgamma.h:250
gslpp::vector< gslpp::complex > ** allcoeffh
Definition: MVgamma.h:72
double getGF() const
A get method to retrieve the Fermi constant .
gslpp::complex G8()
Correction in eq. (42) of .
Definition: MVgamma.cpp:102
Definition: OrderScheme.h:33
gslpp::complex C_8
Definition: MVgamma.h:78
gslpp::complex H_V_m()
The helicity amplitude .
Definition: MVgamma.cpp:130
double computeThValue()
The in .
Definition: MVgamma.cpp:207
StandardModel::meson vectorM
Definition: MVgamma.h:141
gslpp::vector< gslpp::complex > ** allcoeffprime
Definition: MVgamma.h:73
Flavour * getMyFlavour() const
Particle getQuarks(const quark q) const
A get method to access a quark as an object of the type Particle.
Definition: QCD.h:869
const double & getGegenalpha(int i) const
Definition: Meson.h:94
gslpp::vector< gslpp::complex > ** ComputeCoeffprimeBMll(double mu, schemes scheme=NDR)
Computes the chirality flipped Wilson coefficient for the process .
Definition: Flavour.h:187
double geta_0T1phi() const
Definition: QCD.h:1520
gslpp::complex computelamt_s() const
The product of the CKM elements .
double getAle() const
A get method to retrieve the fine-structure constant .
StandardModel::meson meson
Definition: MVgamma.h:286
Definition: QCD.h:722
double ale
Definition: MVgamma.h:51
gslpp::complex H1(double s)
Correction in eq. (42) of .
Definition: MVgamma.cpp:107
const double & getMass() const
A get method to access the particle mass.
Definition: Particle.h:61
double MM2
Definition: MVgamma.h:53
const StandardModel & SM
A reference to an object of StandardMode class.
Definition: ThObservable.h:99
StandardModel::meson meson
Definition: MVgamma.h:140
double a_0T1
Definition: MVgamma.h:66
gslpp::complex h[2]
Definition: MVgamma.h:63
StandardModel::meson vectorM
Definition: MVgamma.h:287
double computeThValue()
The in .
Definition: MVgamma.cpp:194
complex log(const complex &z)
gslpp::complex C_2
Definition: MVgamma.h:77
gslpp::complex H_V_m_bar()
The helicity amplitude .
Definition: MVgamma.cpp:143
A class for the decay.
Definition: MVgamma.h:30
double MV
Definition: MVgamma.h:54
gslpp::complex C_8h
Definition: MVgamma.h:80
gslpp::complex C_7p
Definition: MVgamma.h:76
gslpp::complex geth_p() const
Definition: QCD.h:1088
StandardModel::meson vectorM
Definition: MVgamma.h:178
ACP_MVgamma(const StandardModel &SM_i, StandardModel::meson meson_i, StandardModel::meson vector_i)
Constructor.
Definition: MVgamma.cpp:174
gslpp::complex lambda_t
Definition: MVgamma.h:62
A class for defining operations on and functions of complex numbers.
Definition: gslpp_complex.h:35
std::string ModelName() const
A method to fetch the name of the model.
Definition: Model.h:56
double MW
Definition: MVgamma.h:61
StandardModel::meson vectorM
Definition: MVgamma.h:251
gslpp::complex geth_m() const
Definition: QCD.h:1096
double lambda
Definition: MVgamma.h:64
double MM
Definition: MVgamma.h:52
gslpp::complex C_7
Definition: MVgamma.h:75
double geta_0T1() const
Definition: QCD.h:1296
complex sqrt(const complex &z)