Bsmumu.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2012 SusyFit Collaboration
3  * All rights reserved.
4  *
5  * For the licensing terms see doc/COPYING.
6  */
7 
8 #include "Bsmumu.h"
9 
10 Bsmumu::Bsmumu(const StandardModel& SM_i, int obsFlag)
11 : ThObservable(SM_i),
12  evolbsmm(8, NDR, NNLO, NLO_ewt4, SM)
13 {
14  if (obsFlag > 0 and obsFlag < 5) obs = obsFlag;
15  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)");
16 };
17 
19 {
21  double FBs = SM.getMesons(QCD::B_S).getDecayconst();
22 
23  double coupling = SM.getGF() * SM.getGF() * SM.Mw() * SM.Mw() /M_PI /M_PI ;
24 
25  double PRF = pow(coupling, 2.) / M_PI /8. / SM.getMesons(QCD::B_S).computeWidth() * pow(FBs, 2.) * pow(mmu, 2.) * mBs * beta;
26  double ys = SM.getMesons(QCD::B_S).getDgamma_gamma()/2.; // For now. To be explicitly calculated.
27  timeInt = (1. + Amumu * ys) / (1. - ys * ys); // Note modification in form due to algorithm
28 
29  if (obs == 1) return( PRF * ampSq);
30  if (obs == 2) return( PRF * ampSq * timeInt);
31  if (obs == 3) return( Amumu );
32  if (obs == 4) return( Smumu );
33 
34  throw std::runtime_error("Bsmumu::computeThValue(): Observable type not defined. Can be only any of (1,2,3,4)");
35  return (EXIT_FAILURE);
36 }
37 
38 void Bsmumu::computeObs(orders order, orders_ew order_ew)
39 {
40  double mu = SM.getMub();
41 
46  chiral = pow(mBs, 2.) / 2. / mmu * mb / (mb + ms);
47  beta = sqrt(1. - pow(2. * mmu / mBs, 2.));
48  computeAmpSq(order, order_ew, mu);
49  Amumu = (absP * absP * cos(2. * argP - phiNP) - absS * absS * cos(2. * argS - phiNP)) / (absP * absP + absS * absS);
50  Smumu = (absP * absP * sin(2. * argP - phiNP) - absS * absS * sin(2. * argS - phiNP)) / (absP * absP + absS * absS);
51 }
52 
54 {
56  return(Amumu);
57 }
58 
60 {
62  return(Smumu);
63 }
64 
65 void Bsmumu::computeAmpSq(orders order, orders_ew order_ew, double mu)
66 {
67  if (SM.getMyFlavour()->getHDB1().getCoeffsmumu().getOrder() < order % 3){
68  std::stringstream out;
69  out << order;
70  throw std::runtime_error("Bsmumu::computeAmpSq(): required cofficient of "
71  "order " + out.str() + " not computed");
72  }
74 
75  double alsmu = evolbsmm.alphatilde_s(mu);
76  double alemu = evolbsmm.alphatilde_e(mu);
77 
78  if((order == FULLNLO) && (order_ew == FULLNLO_ew)){
79 
80  switch(order_ew) {
81  case FULLNLO_ew:
82  {
83  gslpp::complex CC = (*(allcoeff[LO]))(7) /alemu + (*(allcoeff[NLO]))(7) * alsmu/alemu
84  + (*(allcoeff[NNLO]))(7) * alsmu * alsmu/alemu + (*(allcoeff[LO_ew ]))(7) /alsmu
85  + (*(allcoeff[NLO_ew]))(7) + (*(allcoeff[NLO_ewt1]))(7) * alemu /alsmu /alsmu
86  + (*(allcoeff[NLO_ewt2]))(7) * alsmu
87  + (*(allcoeff[NLO_ewt3]))(7) * alemu /alsmu+ (*(allcoeff[NLO_ewt4]))(7) * alemu;
88  absP = CC.abs(); //contains only SM contributions (P, P', S, S' not added)
89  argP = CC.arg();
90 
91  absS = 0.;
92  argS = 0.;
93 
94  phiNP = 0.;
95 
96  ampSq = absP * absP ;
97 
98  }
99  break;
100  default:
101  std::stringstream out;
102  out << order;
103  throw std::runtime_error("Bsmumu::computeAmpSq(): order " + out.str() + " not implemented");;
104  }
105  }
106 
107 }
complex cos(const complex &z)
double alphatilde_e(double mu)
Definition: EvolBsmm.cpp:1120
const HeffDB1 & getHDB1() const
The member that returns an object of the class HeffDB1.
Definition: Flavour.h:68
double ms
Definition: Bsmumu.h:51
Particle getLeptons(const StandardModel::lepton p) const
A get method to retrieve the member object of a lepton.
double getMub() const
A get method to access the threshold between five- and four-flavour theory in GeV.
Definition: QCD.h:905
double Smumu
Definition: Bsmumu.h:59
double computeSmumu(orders order)
Definition: Bsmumu.cpp:59
orders
An enum type for orders in QCD.
Definition: OrderScheme.h:31
complex pow(const complex &z1, const complex &z2)
double chiral
Definition: Bsmumu.h:52
const double & getDgamma_gamma() const
Definition: Meson.h:124
double phiNP
Definition: Bsmumu.h:60
A class for a model prediction of an observable.
Definition: ThObservable.h:22
double Amumu
Definition: Bsmumu.h:58
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.
double absS
Definition: Bsmumu.h:55
double mBs
Definition: Bsmumu.h:48
double computeThValue()
hep-ph/9512380v2
Definition: Bsmumu.cpp:18
Meson getMesons(const meson m) const
A get method to access a meson as an object of the type Meson.
Definition: QCD.h:859
EvolBsmm evolbsmm
Definition: Bsmumu.h:63
virtual double Mw() const
The SM prediction for the -boson mass in the on-shell scheme, .
orders_ew
An enum type for orders in electroweak.
Definition: OrderScheme.h:45
Bsmumu(const StandardModel &SM_i, int obsFlag)
Definition: Bsmumu.cpp:10
void computeAmpSq(orders order, orders_ew order_ew, double mu)
Definition: Bsmumu.cpp:65
double computeWidth() const
A method to compute the width of the meson from its lifetime.
Definition: Meson.cpp:25
double getGF() const
A get method to retrieve the Fermi constant .
int obs
Definition: Bsmumu.h:62
double argP
Definition: Bsmumu.h:54
Definition: OrderScheme.h:33
double computeAmumu(orders order)
Definition: Bsmumu.cpp:53
double mb
Definition: Bsmumu.h:50
Flavour * getMyFlavour() const
Definition: QCD.h:721
double mmu
Definition: Bsmumu.h:49
Particle getQuarks(const quark q) const
A get method to access a quark as an object of the type Particle.
Definition: QCD.h:869
gslpp::vector< gslpp::complex > ** ComputeCoeffsmumu(double mu, schemes scheme=NDR)
Computes the Wilson coefficient for the process .
Definition: Flavour.h:113
double timeInt
Definition: Bsmumu.h:61
double abs() const
const double & getMass() const
A get method to access the particle mass.
Definition: Particle.h:61
const StandardModel & SM
A reference to an object of StandardMode class.
Definition: ThObservable.h:99
WilsonCoefficient getCoeffsmumu() const
Definition: HeffDB1.h:148
double beta
Definition: Bsmumu.h:47
double ampSq
Definition: Bsmumu.h:57
orders getOrder() const
void computeObs(orders order, orders_ew order_ew)
Definition: Bsmumu.cpp:38
double arg() const
A class for defining operations on and functions of complex numbers.
Definition: gslpp_complex.h:35
complex sin(const complex &z)
double alphatilde_s(double mu)
Definition: EvolBsmm.cpp:1160
double argS
Definition: Bsmumu.h:56
double absP
Definition: Bsmumu.h:53
complex sqrt(const complex &z)