a Code for the Combination of Indirect and Direct Constraints on High Energy Physics Models Logo
Mll.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2018 HEPfit Collaboration
3  *
4  *
5  * For the licensing terms see doc/COPYING.
6  */
7 
8 #include "Mll.h"
9 #include "StandardModel.h"
10 #include "HeffDB1.h"
11 
12 Mll::Mll(const StandardModel& SM_i, int obsFlag, QCD::meson meson_i, QCD::lepton lep_i)
13 : ThObservable(SM_i)
14 {
15  meson = meson_i;
16  lep = lep_i;
17  if (obsFlag > 0 and obsFlag < 5) obs = obsFlag;
18  else throw std::runtime_error("obsFlag in Bsmumu(myFlavour, obsFlag) called from ThFactory::ThFactory() can only be 1 (BR) or 2 (BRbar) or 3 (Amumu) or 4 (Smumu)");
21  if (FixedWCbtos) setParametersForObservable({ "C10_SM" });
22 };
23 
25 {
27  double FBs = SM.getMesons(meson).getDecayconst();
28 
29 // double coupling = SM.getGF() * SM.getGF() * SM.Mw() * SM.Mw() /M_PI /M_PI ; /* Double GF for including EW corrections*/
30  double coupling = SM.getGF() * SM.getAle() / 4. / M_PI; /* Single GF for excluding EW corrections*/
31 
32 // double PRF = pow(coupling, 2.) / M_PI /8. / SM.getMesons(meson).computeWidth() * pow(FBs, 2.) * pow(mlep, 2.) * mBs * beta; /* Double GF for including EW corrections*/
33  double PRF = pow(coupling, 2.) / M_PI / SM.getMesons(meson).computeWidth() * pow(FBs, 2.) * pow(mlep, 2.) * mBs * beta; /* Single GF for excluding EW corrections*/
34  timeInt = (1. + Amumu * ys) / (1. - ys * ys); // Note modification in form due to algorithm
35 
36  if (obs == 1) return( PRF * ampSq);
37  if (obs == 2) return( PRF * ampSq * timeInt);
38  if (obs == 3) return( Amumu );
39  if (obs == 4) return( Smumu );
40 
41  throw std::runtime_error("Bsmumu::computeThValue(): Observable type not defined. Can be only any of (1,2,3,4)");
42  return (EXIT_FAILURE);
43 }
44 
45 void Mll::computeObs(orders order, orders_qed order_qed)
46 {
47  double mu = SM.getMub();
48 
51  mW = SM.Mw();
53  if (meson == QCD::B_S) {
56  ys = SM.getMesons(meson).getDgamma_gamma()/2.; // For now. To be explicitly calculated.
57  } else if (meson == QCD::B_D) {
60  ys = 0.;
61  }
62  chiral = pow(mBs, 2.) / 2. / mlep * mb / (mb + ms);
63  beta = sqrt(1. - pow(2. * mlep / mBs, 2.));
64  computeAmpSq(order, order_qed, mu);
65  Amumu = (absP * absP * cos(2. * argP - phiNP) - absS * absS * cos(2. * argS - phiNP)) / (absP * absP + absS * absS);
66  Smumu = (absP * absP * sin(2. * argP - phiNP) - absS * absS * sin(2. * argS - phiNP)) / (absP * absP + absS * absS);
67 }
68 
70 {
72  return(Amumu);
73 }
74 
76 {
78  return(Smumu);
79 }
80 
81 void Mll::computeAmpSq(orders order, orders_qed order_qed, double mu)
82 {
83  if (SM.getFlavour().getHDB1().getCoeffsmumu().getOrder() < order % 3){
84  std::stringstream out;
85  out << order;
86  throw std::runtime_error("Bsmumu::computeAmpSq(): required cofficient of "
87  "order " + out.str() + " not computed");
88  }
89  /* Temporary usage of MVll class here below */
90 // gslpp::vector<gslpp::complex> ** allcoeffmumu; /* Double GF for including EW corrections*/
91 // if (meson == QCD::B_S) allcoeffmumu = SM.getFlavour().ComputeCoeffsmumu(mu, NDR); /* Double GF for including EW corrections*/
92 // if (meson == QCD::B_D) allcoeffmumu = SM.getFlavour().ComputeCoeffdmumu(mu, NDR); /* Double GF for including EW corrections*/
93 
94  allcoeff = SM.getFlavour().ComputeCoeffBMll(mu, lep); /* Single GF for excluding EW corrections*/
95  allcoeffprime = SM.getFlavour().ComputeCoeffprimeBMll(mu, lep); /* Single GF for excluding EW corrections*/
96 
97 // double alsmu = SM.Als(mu, FULLNNLO, true)/4./M_PI; /* tilde */ /* Double GF for including EW corrections*/
98 // double alemu = SM.Ale(mu, FULLNNLO)/4./M_PI; /* tilde */ /* Double GF for including EW corrections*/
99 
100 // double sw = sqrt( (M_PI * SM.getAle() ) / ( sqrt(2.) * SM.getGF() * SM.Mw() * SM.Mw()) ); /* Spurious sw */
101 
102  C_10p = (*(allcoeffprime[LO]))(9) + (*(allcoeffprime[NLO]))(9);
103  C_S = (*(allcoeff[LO]))(10) + (*(allcoeff[NLO]))(10);
104  C_Sp = (*(allcoeffprime[LO]))(10) + (*(allcoeffprime[NLO]))(10);
105  C_P = (*(allcoeff[LO]))(11) + (*(allcoeff[NLO]))(11);
106  C_Pp = (*(allcoeffprime[LO]))(11) + (*(allcoeffprime[NLO]))(11);
107 
108  if (FixedWCbtos) {
109  allcoeff_noSM = SM.getFlavour().ComputeCoeffBMll(mu, lep, true); /* Single GF for excluding EW corrections*/
110  C_10 = SM.getOptionalParameter("C10_SM") + ((*(allcoeff_noSM[LO]))(9) + (*(allcoeff_noSM[NLO]))(9));
111  }
112  else C_10 = ((*(allcoeff[LO]))(9) + (*(allcoeff[NLO]))(9));
113 
114  if ((order == FULLNLO) && (order_qed == FULLNLO_QED)) {
115 
116  switch (order_qed) {
117  case FULLNLO_QED:
118  {
119  /* Implementation to be corrected and updated with new EVO: At present better to use MVll!*/ /* Double GF for including EW corrections*/
120  // gslpp::complex C10_SM = (*(allcoeffmumu[LO]))(7) /alemu + (*(allcoeffmumu[NLO]))(7) * alsmu/alemu
121  // + (*(allcoeffmumu[NNLO]))(7) * alsmu * alsmu/alemu + (*(allcoeffmumu[LO_QED ]))(7) /alsmu
122  // + (*(allcoeffmumu[NLO_QED11]))(7) + (*(allcoeffmumu[NLO_QED02]))(7) * alemu /alsmu /alsmu
123  // + (*(allcoeffmumu[NLO_QED21]))(7) * alsmu
124  // + (*(allcoeffmumu[NLO_QED12]))(7) * alemu /alsmu+ (*(allcoeffmumu[NLO_QED22]))(7) * alemu;
125 
126  /* Temporary usage of MVll result */
127  // std::cout << " C10_SM " << C10_SM << std::endl;
128  // gslpp::complex C10_SM_plus_NP = CKM_factor * sw * sw * ((*(allcoeff[LO]))(9) + (*(allcoeff[NLO]))(9));
129  // std::cout << " C10_SM_plus_NP " << C10_SM_plus_NP / sw / sw / CKM_factor << std::endl;
130 
131  // gslpp::complex CC_P = C10_SM; /* Double GF for including EW corrections*/
132  // gslpp::complex CC_P = CKM_factor * sw * sw * ( C_10 - C_10p + mBs*mBs / ( 2.*mlep*(mb+ms) ) * (C_P - C_Pp) ); /* Spurious sw */
133  gslpp::complex CC_P = CKM_factor * (C_10 - C_10p + mBs * mBs / (2. * mlep * (mb + ms)) * (C_P - C_Pp)); /* Single GF for excluding EW corrections*/
134 
135  absP = CC_P.abs(); //contains only SM contributions (P, P', S, S' not added)
136  argP = CC_P.arg();
137 
138  // gslpp::complex CC_S = CKM_factor * sw * sw * ( beta * mBs*mBs / ( 2.*mlep*(mb+ms) ) * (C_S - C_Sp) ); /* Spurious sw */
139  gslpp::complex CC_S = CKM_factor * (beta * mBs * mBs / (2. * mlep * (mb + ms)) * (C_S - C_Sp)); /* Single GF for excluding EW corrections*/
140 
141  absS = CC_S.abs();
142  argS = CC_S.arg();
143 
144  phiNP = 0.;
145 
146  ampSq = absP * absP + absS * absS;
147 
148  }
149  break;
150  default:
151  std::stringstream out;
152  out << order;
153  throw std::runtime_error("Bsmumu::computeAmpSq(): order " + out.str() + " not implemented");
154  }
155  }
156 
157 }
158 
159 
Mll::mb
double mb
Definition: Mll.h:56
gslpp::cos
complex cos(const complex &z)
Definition: gslpp_complex.cpp:429
Mll::Smumu
double Smumu
Definition: Mll.h:65
Mll.h
QCD::BOTTOM
Definition: QCD.h:329
Mll::mlep
double mlep
Definition: Mll.h:55
Mll::Mll
Mll(const StandardModel &SM_i, int obsFlag, QCD::meson meson_i, QCD::lepton lep_i)
Definition: Mll.cpp:12
ThObservable::setParametersForObservable
void setParametersForObservable(std::vector< std::string > parametersForObservable_i)
A set method to get the parameters for the specific observable.
Definition: ThObservable.h:109
QCD::B_S
Definition: QCD.h:345
Mll::allcoeff_noSM
gslpp::vector< gslpp::complex > ** allcoeff_noSM
Definition: Mll.h:79
Mll::lep
QCD::lepton lep
Definition: Mll.h:48
HeffDB1::getCoeffsmumu
WilsonCoefficient getCoeffsmumu() const
Definition: HeffDB1.h:157
Mll::argS
double argS
Definition: Mll.h:62
CKM::computelamt_s
gslpp::complex computelamt_s() const
The product of the CKM elements .
Definition: CKM.cpp:136
Mll::ampSq
double ampSq
Definition: Mll.h:63
gslpp::sin
complex sin(const complex &z)
Definition: gslpp_complex.cpp:420
QCD::initializeMeson
void initializeMeson(QCD::meson meson_i) const
A method to initialize a meson.
Definition: QCD.cpp:236
FULLNLO_QED
Definition: OrderScheme.h:56
LO
Definition: OrderScheme.h:33
StandardModel.h
gslpp::complex
A class for defining operations on and functions of complex numbers.
Definition: gslpp_complex.h:35
Mll::obs
int obs
Definition: Mll.h:68
Mll::allcoeffprime
gslpp::vector< gslpp::complex > ** allcoeffprime
Definition: Mll.h:78
Mll::computeObs
void computeObs(orders order, orders_qed order_qed)
Definition: Mll.cpp:45
StandardModel
A model class for the Standard Model.
Definition: StandardModel.h:474
Mll::absP
double absP
Definition: Mll.h:59
Mll::C_10p
gslpp::complex C_10p
Definition: Mll.h:70
Meson::computeWidth
double computeWidth() const
A method to compute the width of the meson from its lifetime.
Definition: Meson.cpp:479
Mll::ys
double ys
Definition: Mll.h:50
Mll::chiral
double chiral
Definition: Mll.h:58
WilsonTemplate::getOrder
orders getOrder() const
Definition: WilsonTemplate.h:65
Particle::getMass
const double & getMass() const
A get method to access the particle mass.
Definition: Particle.h:61
Mll::mW
double mW
Definition: Mll.h:54
Mll::argP
double argP
Definition: Mll.h:60
Mll::meson
QCD::meson meson
Definition: Mll.h:49
gslpp::complex::abs
double abs() const
Definition: gslpp_complex.cpp:81
QCD::meson
meson
An enum type for mesons.
Definition: QCD.h:336
gslpp::complex::arg
double arg() const
Definition: gslpp_complex.cpp:76
gslpp::pow
complex pow(const complex &z1, const complex &z2)
Definition: gslpp_complex.cpp:395
Mll::computeAmpSq
void computeAmpSq(orders order, orders_qed order_qed, double mu)
Definition: Mll.cpp:81
StandardModel::getGF
double getGF() const
A get method to retrieve the Fermi constant .
Definition: StandardModel.h:736
gslpp::sqrt
complex sqrt(const complex &z)
Definition: gslpp_complex.cpp:385
HeffDB1.h
QCD::getMesons
Meson getMesons(const QCD::meson m) const
A get method to access a meson as an object of the type Meson.
Definition: QCD.h:524
Mll::FixedWCbtos
bool FixedWCbtos
Definition: Mll.h:75
Meson::getDecayconst
const double & getDecayconst() const
A get method for the decay constant of the meson.
Definition: Meson.h:360
CKM::computelamt_d
gslpp::complex computelamt_d() const
The product of the CKM elements .
Definition: CKM.cpp:120
Mll::phiNP
double phiNP
Definition: Mll.h:66
QCD::getQuarks
Particle getQuarks(const QCD::quark q) const
A get method to access a quark as an object of the type Particle.
Definition: QCD.h:534
Mll::absS
double absS
Definition: Mll.h:61
orders_qed
orders_qed
An enum type for orders in electroweak.
Definition: OrderScheme.h:47
ThObservable::SM
const StandardModel & SM
A reference to an object of StandardMode class.
Definition: ThObservable.h:121
Mll::C_Sp
gslpp::complex C_Sp
Definition: Mll.h:72
StandardModel::getFlavour
const Flavour & getFlavour() const
Definition: StandardModel.h:1006
Mll::mBs
double mBs
Definition: Mll.h:53
Mll::timeInt
double timeInt
Definition: Mll.h:67
Mll::C_S
gslpp::complex C_S
Definition: Mll.h:71
Mll::CKM_factor
gslpp::complex CKM_factor
Definition: Mll.h:51
orders
orders
An enum type for orders in QCD.
Definition: OrderScheme.h:31
Mll::C_P
gslpp::complex C_P
Definition: Mll.h:73
Mll::C_Pp
gslpp::complex C_Pp
Definition: Mll.h:74
Mll::computeSmumu
double computeSmumu(orders order)
Definition: Mll.cpp:75
Mll::Amumu
double Amumu
Definition: Mll.h:64
Flavour::ComputeCoeffBMll
gslpp::vector< gslpp::complex > ** ComputeCoeffBMll(double mu, QCD::lepton lepton, bool noSM=false, schemes scheme=NDR) const
Computes the Wilson coefficient for the process .
Definition: Flavour.cpp:113
ThObservable
A class for a model prediction of an observable.
Definition: ThObservable.h:25
QCD::getMub
double getMub() const
A get method to access the threshold between five- and four-flavour theory in GeV.
Definition: QCD.h:570
QCD::STRANGE
Definition: QCD.h:327
QCD::getOptionalParameter
double getOptionalParameter(std::string name) const
A method to get parameters that are specific to only one set of observables.
Definition: QCD.h:448
Mll::ms
double ms
Definition: Mll.h:57
QCD::B_D
Definition: QCD.h:343
Flavour::ComputeCoeffprimeBMll
gslpp::vector< gslpp::complex > ** ComputeCoeffprimeBMll(double mu, QCD::lepton lepton, schemes scheme=NDR) const
Computes the chirality flipped Wilson coefficient for the process .
Definition: Flavour.cpp:118
NLO
Definition: OrderScheme.h:34
Meson::getDgamma_gamma
const double & getDgamma_gamma() const
Definition: Meson.h:411
StandardModel::Mw
virtual double Mw() const
The SM prediction for the -boson mass in the on-shell scheme, .
Definition: StandardModel.cpp:944
Mll::computeThValue
double computeThValue()
hep-ph/9512380v2
Definition: Mll.cpp:24
QCD::DOWN
Definition: QCD.h:325
FULLNLO
Definition: OrderScheme.h:37
StandardModel::getAle
double getAle() const
A get method to retrieve the fine-structure constant .
Definition: StandardModel.h:745
Mll::computeAmumu
double computeAmumu(orders order)
Definition: Mll.cpp:69
Mll::C_10
gslpp::complex C_10
Definition: Mll.h:69
Flavour::getFlagFixedWCbtos
bool getFlagFixedWCbtos() const
Definition: Flavour.h:252
StandardModel::getCKM
CKM getCKM() const
A get method to retrieve the member object of type CKM.
Definition: StandardModel.h:876
Mll::allcoeff
gslpp::vector< gslpp::complex > ** allcoeff
Definition: Mll.h:77
Flavour::getHDB1
HeffDB1 & getHDB1() const
The member that returns an object of the class HeffDB1.
Definition: Flavour.cpp:48
QCD::lepton
lepton
An enum type for leptons.
Definition: QCD.h:310
Mll::beta
double beta
Definition: Mll.h:52
StandardModel::getLeptons
Particle getLeptons(const QCD::lepton p) const
A get method to retrieve the member object of a lepton.
Definition: StandardModel.h:709