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
12Mll::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){
22 std::vector<std::string> pars;
23 pars.push_back("C10_SM");
25 }
26};
27
29{
31 double FBs = SM.getMesons(meson).getDecayconst();
32
33// double coupling = SM.getGF() * SM.getGF() * SM.Mw() * SM.Mw() /M_PI /M_PI ; /* Double GF for including EW corrections*/
34 double coupling = SM.getGF() * SM.getAle() / 4. / M_PI; /* Single GF for excluding EW corrections*/
35
36// 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*/
37 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*/
38 timeInt = (1. + Amumu * ys) / (1. - ys * ys); // Note modification in form due to algorithm
39
40 if (obs == 1) return( PRF * ampSq);
41 if (obs == 2) return( PRF * ampSq * timeInt);
42 if (obs == 3) return( Amumu );
43 if (obs == 4) return( Smumu );
44
45 throw std::runtime_error("Bsmumu::computeThValue(): Observable type not defined. Can be only any of (1,2,3,4)");
46 return (EXIT_FAILURE);
47}
48
49void Mll::computeObs(orders order, orders_qed order_qed)
50{
51 double mu = SM.getMub();
52
55 mW = SM.Mw();
57 if (meson == QCD::B_S) {
61 } else if (meson == QCD::B_D) {
64 ys = 0.;
65 }
66 chiral = pow(mBs, 2.) / 2. / mlep * mb / (mb + ms);
67 beta = sqrt(1. - pow(2. * mlep / mBs, 2.));
68 computeAmpSq(order, order_qed, mu);
69 Amumu = (absP * absP * cos(2. * argP - phiNP) - absS * absS * cos(2. * argS - phiNP)) / (absP * absP + absS * absS);
70 Smumu = (absP * absP * sin(2. * argP - phiNP) - absS * absS * sin(2. * argS - phiNP)) / (absP * absP + absS * absS);
71}
72
74{
76 return(Amumu);
77}
78
80{
82 return(Smumu);
83}
84
85void Mll::computeAmpSq(orders order, orders_qed order_qed, double mu)
86{
87 if (SM.getFlavour().getHDB1().getCoeffsmumu().getOrder() < order % 3){
88 std::stringstream out;
89 out << order;
90 throw std::runtime_error("Bsmumu::computeAmpSq(): required cofficient of "
91 "order " + out.str() + " not computed");
92 }
93 /* Temporary usage of MVll class here below */
94// gslpp::vector<gslpp::complex> ** allcoeffmumu; /* Double GF for including EW corrections*/
95// if (meson == QCD::B_S) allcoeffmumu = SM.getFlavour().ComputeCoeffsmumu(mu, NDR); /* Double GF for including EW corrections*/
96// if (meson == QCD::B_D) allcoeffmumu = SM.getFlavour().ComputeCoeffdmumu(mu, NDR); /* Double GF for including EW corrections*/
97
98 allcoeff = SM.getFlavour().ComputeCoeffBMll(mu, lep); /* Single GF for excluding EW corrections*/
99 allcoeffprime = SM.getFlavour().ComputeCoeffprimeBMll(mu, lep); /* Single GF for excluding EW corrections*/
100
101// double alsmu = SM.Als(mu, FULLNNLO, true)/4./M_PI; /* tilde */ /* Double GF for including EW corrections*/
102// double alemu = SM.Ale(mu, FULLNNLO)/4./M_PI; /* tilde */ /* Double GF for including EW corrections*/
103
104// double sw = sqrt( (M_PI * SM.getAle() ) / ( sqrt(2.) * SM.getGF() * SM.Mw() * SM.Mw()) ); /* Spurious sw */
105
106 C_10p = (*(allcoeffprime[LO]))(9) + (*(allcoeffprime[NLO]))(9);
107 C_S = (*(allcoeff[LO]))(10) + (*(allcoeff[NLO]))(10);
108 C_Sp = (*(allcoeffprime[LO]))(10) + (*(allcoeffprime[NLO]))(10);
109 C_P = (*(allcoeff[LO]))(11) + (*(allcoeff[NLO]))(11);
110 C_Pp = (*(allcoeffprime[LO]))(11) + (*(allcoeffprime[NLO]))(11);
111
112 if (FixedWCbtos) {
113 allcoeff_noSM = SM.getFlavour().ComputeCoeffBMll(mu, lep, true); /* Single GF for excluding EW corrections*/
114 C_10 = SM.getOptionalParameter("C10_SM") + ((*(allcoeff_noSM[LO]))(9) + (*(allcoeff_noSM[NLO]))(9));
115 }
116 else C_10 = ((*(allcoeff[LO]))(9) + (*(allcoeff[NLO]))(9));
117
118 if ((order == FULLNLO) && (order_qed == FULLNLO_QED)) {
119
120 switch (order_qed) {
121 case FULLNLO_QED:
122 {
123 /* Implementation to be corrected and updated with new EVO: At present better to use MVll!*/ /* Double GF for including EW corrections*/
124 // gslpp::complex C10_SM = (*(allcoeffmumu[LO]))(7) /alemu + (*(allcoeffmumu[NLO]))(7) * alsmu/alemu
125 // + (*(allcoeffmumu[NNLO]))(7) * alsmu * alsmu/alemu + (*(allcoeffmumu[LO_QED ]))(7) /alsmu
126 // + (*(allcoeffmumu[NLO_QED11]))(7) + (*(allcoeffmumu[NLO_QED02]))(7) * alemu /alsmu /alsmu
127 // + (*(allcoeffmumu[NLO_QED21]))(7) * alsmu
128 // + (*(allcoeffmumu[NLO_QED12]))(7) * alemu /alsmu+ (*(allcoeffmumu[NLO_QED22]))(7) * alemu;
129
130 /* Temporary usage of MVll result */
131 // std::cout << " C10_SM " << C10_SM << std::endl;
132 // gslpp::complex C10_SM_plus_NP = CKM_factor * sw * sw * ((*(allcoeff[LO]))(9) + (*(allcoeff[NLO]))(9));
133 // std::cout << " C10_SM_plus_NP " << C10_SM_plus_NP / sw / sw / CKM_factor << std::endl;
134
135 // gslpp::complex CC_P = C10_SM; /* Double GF for including EW corrections*/
136 // gslpp::complex CC_P = CKM_factor * sw * sw * ( C_10 - C_10p + mBs*mBs / ( 2.*mlep*(mb+ms) ) * (C_P - C_Pp) ); /* Spurious sw */
137 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*/
138
139 absP = CC_P.abs(); //contains only SM contributions (P, P', S, S' not added)
140 argP = CC_P.arg();
141
142 // gslpp::complex CC_S = CKM_factor * sw * sw * ( beta * mBs*mBs / ( 2.*mlep*(mb+ms) ) * (C_S - C_Sp) ); /* Spurious sw */
143 gslpp::complex CC_S = CKM_factor * (beta * mBs * mBs / (2. * mlep * (mb + ms)) * (C_S - C_Sp)); /* Single GF for excluding EW corrections*/
144
145 absS = CC_S.abs();
146 argS = CC_S.arg();
147
148 phiNP = 0.;
149
150 ampSq = absP * absP + absS * absS;
151
152 }
153 break;
154 default:
155 std::stringstream out;
156 out << order;
157 throw std::runtime_error("Bsmumu::computeAmpSq(): order " + out.str() + " not implemented");
158 }
159 }
160
161}
162
163
@ LO
Definition: OrderScheme.h:34
@ NLO
Definition: OrderScheme.h:35
@ FULLNLO
Definition: OrderScheme.h:38
@ FULLNLO_QED
Definition: OrderScheme.h:64
const gslpp::complex computelamt_s() const
The product of the CKM elements .
Definition: CKM.cpp:174
const gslpp::complex computelamt_d() const
The product of the CKM elements .
Definition: CKM.cpp:158
bool getFlagFixedWCbtos() const
Definition: Flavour.h:352
HeffDB1 & getHDB1() const
The member that returns an object of the class HeffDB1.
Definition: Flavour.cpp:96
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:204
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:194
WilsonCoefficient getCoeffsmumu() const
Definition: HeffDB1.h:176
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 & getDecayconst() const
A get method for the decay constant of the meson.
Definition: Meson.h:360
QCD::lepton lep
Definition: Mll.h:48
gslpp::complex C_Pp
Definition: Mll.h:74
gslpp::vector< gslpp::complex > ** allcoeff_noSM
Definition: Mll.h:79
double computeAmumu(orders order)
Definition: Mll.cpp:73
double absP
Definition: Mll.h:59
gslpp::complex C_10
Definition: Mll.h:69
Mll(const StandardModel &SM_i, int obsFlag, QCD::meson meson_i, QCD::lepton lep_i)
Definition: Mll.cpp:12
gslpp::vector< gslpp::complex > ** allcoeff
Definition: Mll.h:77
double Amumu
Definition: Mll.h:64
double mBs
Definition: Mll.h:53
double ys
Definition: Mll.h:50
double timeInt
Definition: Mll.h:67
double mlep
Definition: Mll.h:55
double beta
Definition: Mll.h:52
bool FixedWCbtos
Definition: Mll.h:75
gslpp::complex C_Sp
Definition: Mll.h:72
gslpp::vector< gslpp::complex > ** allcoeffprime
Definition: Mll.h:78
double computeSmumu(orders order)
Definition: Mll.cpp:79
int obs
Definition: Mll.h:68
QCD::meson meson
Definition: Mll.h:49
gslpp::complex C_P
Definition: Mll.h:73
double Smumu
Definition: Mll.h:65
double mb
Definition: Mll.h:56
void computeObs(orders order, orders_qed order_qed)
Definition: Mll.cpp:49
double absS
Definition: Mll.h:61
double mW
Definition: Mll.h:54
gslpp::complex C_S
Definition: Mll.h:71
gslpp::complex CKM_factor
Definition: Mll.h:51
double ms
Definition: Mll.h:57
double phiNP
Definition: Mll.h:66
gslpp::complex C_10p
Definition: Mll.h:70
double ampSq
Definition: Mll.h:63
double argP
Definition: Mll.h:60
double chiral
Definition: Mll.h:58
void computeAmpSq(orders order, orders_qed order_qed, double mu)
Definition: Mll.cpp:85
double argS
Definition: Mll.h:62
double computeThValue()
hep-ph/9512380v2
Definition: Mll.cpp:28
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
@ B_D
Definition: QCD.h:344
@ B_S
Definition: QCD.h:346
const double getOptionalParameter(std::string name) const
A method to get parameters that are specific to only one set of observables.
Definition: QCD.h:450
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
@ BOTTOM
Definition: QCD.h:329
@ DOWN
Definition: QCD.h:325
@ STRANGE
Definition: QCD.h:327
lepton
An enum type for leptons.
Definition: QCD.h:310
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
void initializeMeson(QCD::meson meson_i) const
A method to initialize a meson.
Definition: QCD.cpp:280
const double getMub() const
A get method to access the threshold between five- and four-flavour theory in GeV.
Definition: QCD.h:582
A model class for the Standard Model.
const Particle & getLeptons(const QCD::lepton p) const
A get method to retrieve the member object of a lepton.
const CKM & getCKM() const
A get method to retrieve the member object of type CKM.
virtual const double Mw() const
The SM prediction for the -boson mass in the on-shell scheme, .
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
orders getOrder() const
orders
An enum type for orders in QCD.
Definition: OrderScheme.h:33
orders_qed
An enum type for orders in electroweak.
Definition: OrderScheme.h:56