EvtGen 2.2.0
Monte Carlo generator of particle decays, in particular the weak decays of heavy flavour particles such as B mesons.
Loading...
Searching...
No Matches
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 m_mb;
66 double m_mB;
67 double m_delta;
71 double m_lam1;
72 double m_mHmin;
73 double m_mHmax;
74 //Other parameters
75 double m_r7;
76 double m_gam77;
77 double m_gam27;
78 double m_gam87;
79 double m_beta0;
80 double m_beta1;
81 double m_alphasmZ;
82 double m_mZ;
83 double m_z;
84 double m_fz;
85 double m_lam2;
86 double m_kappabar;
87 double m_rer2;
88 double m_rer8;
89 double m_kSLemmu;
90 double m_mW;
91 double m_mt;
92 double m_ms;
93 double m_mu;
94
95 double m_c2mu;
96 double m_c70mu;
97 double m_c80mu;
98 double m_c71mu;
99 double m_c7emmu;
100
102
103 double m_alpha;
108 double m_etamu;
109
110 std::vector<double> m_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> m_massHad, m_brHad;
144 static double m_intervalMH;
145 static bool m_bbprod;
146};
147
148#endif
static double s77(double)
static double ImG(double)
static double s27FermiFunc(double, std::vector< double > &coeffs)
static double ReG(double)
static double DeltaFermiFunc(double, const std::vector< double > &coeffs1, const std::vector< double > &coeffs2, const std::vector< double > &coeffs3)
static double s77FermiFunc(double, const std::vector< double > &coeffs1, const std::vector< double > &coeffs2)
static double s78FermiFunc(double, const std::vector< double > &coeffs1, const std::vector< double > &coeffs2)
static double s27Func(double var, const std::vector< double > &coeffs)
static double s88(double, double, double)
static double s78(double)
double GetMass(int code) override
static double GetArrayVal(double, double, double, double, std::vector< double >)
std::vector< double > m_brHad
void init(int, double *) override
static double FermiFunc(double, const std::vector< double > &coeffs)
static double s22Func(double var, const std::vector< double > &coeffs)
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 diLogMathematica(double)
static double s28FermiFunc(double, std::vector< double > &coeffs)
void computeHadronicMass(int, double *)
static double diLogFunc(double)
static double s22FermiFunc(double, std::vector< double > &coeffs)
std::vector< double > m_mHVect
std::vector< double > m_massHad
static double Delta(double, double)
static double s88FermiFunc(double, const std::vector< double > &coeffs1, const std::vector< double > &coeffs2, const std::vector< double > &coeffs3)