evtgen is hosted by Hepforge, IPPP Durham
EvtGen  2.0.0
Monte Carlo generator of particle decays, in particular the weak decays of heavy flavour particles such as B mesons.
EvtBtoXsgammaKagan.hh
Go to the documentation of this file.
1 
2 /***********************************************************************
3 * Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
4 * *
5 * This file is part of EvtGen. *
6 * *
7 * EvtGen is free software: you can redistribute it and/or modify *
8 * it under the terms of the GNU General Public License as published by *
9 * the Free Software Foundation, either version 3 of the License, or *
10 * (at your option) any later version. *
11 * *
12 * EvtGen is distributed in the hope that it will be useful, *
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15 * GNU General Public License for more details. *
16 * *
17 * You should have received a copy of the GNU General Public License *
18 * along with EvtGen. If not, see <https://www.gnu.org/licenses/>. *
19 ***********************************************************************/
20 
21 #ifndef EVTBTOXSGAMMAKAGAN_HH
22 #define EVTBTOXSGAMMAKAGAN_HH
23 
25 
26 #include <vector>
27 
28 // Description:
29 // Implimentation of the Kagan-Neubert model for non-resonant
30 // B->Xs,gamma decays.
31 // Description:
32 // Routine to perform two-body non-resonant B->Xs,gamma decays.
33 // The X_s mass spectrum generated is based on the Kagan-Neubert model.
34 // See hep-ph/9805303 for the model details and input parameters.
35 //
36 // The input parameters are 1:fermi_model, 2:mB, 3:mb, 4:mu, 5:lam1,
37 // 6:delta, 7:z, 8:nIntervalS, 9:nIntervalmH. Choosing fermi_model=1
38 // uses an exponential shape function, fermi_model=2 uses a gaussian
39 // shape function and fermi_model=3 a roman shape function. The complete mass
40 // spectrum for a given set of input parameters is calculated from
41 // scratch in bins of nIntervalmH. The s22, s27 and s28 coefficients are calculated
42 // in bins of nIntervalS. As the program includes lots of integration, the
43 // theoretical hadronic mass spectra is computed for the first time
44 // the init method is called. Then, all the other times (eg if we want to decay a B0
45 // as well as an anti-B0) the vector mass info stored the first time is used again.
46 
48  public:
49  void init( int, double* ) override;
50 
51  void computeHadronicMass( int, double* );
52 
54 
55  double GetMass( int code ) override;
56 
57  double CalcAlphaS( double );
58 
59  void CalcWilsonCoeffs();
60  void CalcDelta();
61  double Fz( double );
62 
63  private:
64  //Input parameters
65  double _mb;
66  double _mB;
67  double _delta;
68  double _nIntervalS;
69  double _nIntervalmH;
70  double _lambdabar;
71  double _lam1;
72  double _mHmin;
73  double _mHmax;
74  //Other parameters
75  double _r7;
76  double _gam77;
77  double _gam27;
78  double _gam87;
79  double _beta0;
80  double _beta1;
81  double _alphasmZ;
82  double _mZ;
83  double _z;
84  double _fz;
85  double _lam2;
86  double _kappabar;
87  double _rer2;
88  double _rer8;
89  double _kSLemmu;
90  double _mW;
91  double _mt;
92  double _ms;
93  double _mu;
94 
95  double _c2mu;
96  double _c70mu;
97  double _c80mu;
98  double _c71mu;
99  double _c7emmu;
100 
101  double _cDeltatot;
102 
103  double _alpha;
104  double _alphasmW;
105  double _alphasmt;
106  double _alphasmu;
107  double _alphasmubar;
108  double _etamu;
109 
110  std::vector<double> _mHVect;
111 
112  static double ReG( double );
113  static double ImG( double );
114  static double s77( double );
115  static double s88( double, double, double );
116  static double s78( double );
117  static double s22Func( double var, const std::vector<double>& coeffs );
118  static double s27Func( double var, const std::vector<double>& coeffs );
119 
120  static double Delta( double, double );
121  static double DeltaFermiFunc( double, const std::vector<double>& coeffs1,
122  const std::vector<double>& coeffs2,
123  const std::vector<double>& coeffs3 );
124  static double s77FermiFunc( double, const std::vector<double>& coeffs1,
125  const std::vector<double>& coeffs2 );
126  static double s88FermiFunc( double, const std::vector<double>& coeffs1,
127  const std::vector<double>& coeffs2,
128  const std::vector<double>& coeffs3 );
129  static double s78FermiFunc( double, const std::vector<double>& coeffs1,
130  const std::vector<double>& coeffs2 );
131  static double s22FermiFunc( double, std::vector<double>& coeffs );
132  static double s27FermiFunc( double, std::vector<double>& coeffs );
133  static double s28FermiFunc( double, std::vector<double>& coeffs );
134  static double GetArrayVal( double, double, double, double,
135  std::vector<double> );
136  static double sFermiFunc( double, const std::vector<double>& coeffs1,
137  const std::vector<double>& coeffs2,
138  const std::vector<double>& coeffs3,
139  const std::vector<double>& coeffs4 );
140  static double FermiFunc( double, const std::vector<double>& coeffs );
141  static double diLogFunc( double );
142  static double diLogMathematica( double );
143  std::vector<double> massHad, brHad;
144  static double intervalMH;
145  static bool bbprod;
146 };
147 
148 #endif
void computeHadronicMass(int, double *)
static double s77(double)
static double s77FermiFunc(double, const std::vector< double > &coeffs1, const std::vector< double > &coeffs2)
std::vector< double > _mHVect
static double s78FermiFunc(double, const std::vector< double > &coeffs1, const std::vector< double > &coeffs2)
static double s28FermiFunc(double, std::vector< double > &coeffs)
static double Delta(double, double)
static double s78(double)
static double diLogFunc(double)
static double sFermiFunc(double, const std::vector< double > &coeffs1, const std::vector< double > &coeffs2, const std::vector< double > &coeffs3, const std::vector< double > &coeffs4)
static double ReG(double)
void init(int, double *) override
static double DeltaFermiFunc(double, const std::vector< double > &coeffs1, const std::vector< double > &coeffs2, const std::vector< double > &coeffs3)
static double FermiFunc(double, const std::vector< double > &coeffs)
double GetMass(int code) override
static double s88(double, double, double)
static double diLogMathematica(double)
static double s22Func(double var, const std::vector< double > &coeffs)
static double s27Func(double var, const std::vector< double > &coeffs)
static double ImG(double)
static double GetArrayVal(double, double, double, double, std::vector< double >)
static double s88FermiFunc(double, const std::vector< double > &coeffs1, const std::vector< double > &coeffs2, const std::vector< double > &coeffs3)
std::vector< double > massHad
static double s27FermiFunc(double, std::vector< double > &coeffs)
static double s22FermiFunc(double, std::vector< double > &coeffs)
std::vector< double > brHad