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
Evtbs2llGammaFFMNT.cpp
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
22
24#include "EvtGenBase/EvtId.hh"
25#include "EvtGenBase/EvtPDL.hh"
29
30#include <cmath>
31#include <cstdlib>
32
36
37/* *
38 * decay_id = 0 for b \bar q -> l^+ l^- \gamma transitions *
39 * 1 for q \bar b -> l^+ l^- \gamma transitions; *
40 * fb - leptonic decay constant of the B_q - meson; *
41 * mb - the mass of the b-quark; *
42 * mq - the mass of the light quark (d or s); *
43 * c7gam - Wilson coefficient C_{7\gamma}; *
44 * a1 = c1 + c2/3.0 - linear combination of the Wils. Coeff.; *
45 * lambda_qu = V^*_{uq}*V_{ub}/V^*_{tq}*V_{tb}, where q={d,s}; *
46 * lambda_qc = V^*_{cq}*V_{cb}/V^*_{tq}*V_{tb}, where q={d,s}. *
47 * */
48void Evtbs2llGammaFFMNT::getPhotonFF( int decay_id, double fb, EvtId parent,
49 double q2, double M1, double mb,
50 double mq, EvtComplex c7gam, EvtComplex a1,
51 EvtComplex lambda_qu, EvtComplex lambda_qc,
52 EvtComplex& Fv, EvtComplex& Fa,
53 EvtComplex& Ftv, EvtComplex& Fta )
54{
55 EvtComplex unit1( 1.0, 0.0 ); // real unit
56 EvtComplex uniti( 0.0, 1.0 ); // imaginary unit
57 EvtComplex unit0( 0.0, 0.0 ); // complex zero unit
58
59 // characteristics of resonances rho, omega, phi
60 double M_res[] = { 0.7758, 0.78259, 1.019456 }; // particle masses, Gev
61 double Gamma[] = { 0.1503, 0.00849, 0.00426 }; // particle widthes, Gev
62
63 double f_lept[] = { 5.04, 17.1, -13.2 }; // decay constants f_i
64 double g_plus[] = { 0.27, -0.27, -0.38 }; // and form-factors g+(0)
65 g_plus[0] = g_plus[0] / sqrt( 2.0 ); // by D.Melikhov, N.Nikitin, K.Toms,
66 g_plus[1] = g_plus[1] / sqrt( 2.0 ); // Phys.At.Nucl. 68, p.1842 (2005)
67
68 double hatq2 = q2 / pow( M1, 2 );
69 // E - photon energy in the B-meson rest frame
70 double E = 0.5 * M1 * ( 1 - hatq2 );
71
72 // parametrs for form-factors Fv, Ftv, Fa, Fta
73 //(by D.Melikhov, N.Nikitin, K.Toms, Yad. Fiz. 62, No 11)
74 double beta[] = { 0.28, 0.30, 0.26, 0.33 }; // beta, Gev^(-1)
75 double Delta[] = { 0.04, 0.04, 0.30, 0.30 }; // Delta, Gev
76
77 // form-factors
78 EvtComplex Ftvq0, Ftaq0, Ftv00, Fta00;
79 Fv = unit1 * beta[0] * fb * M1 / ( Delta[0] + E ); // Fv(q^2)
80 Ftvq0 = unit1 * beta[1] * fb * M1 / ( Delta[1] + E ); // Ftv(q^2,0)
81 Fa = unit1 * beta[2] * fb * M1 / ( Delta[2] + E ); // Fa(q^2)
82 Ftaq0 = unit1 * beta[3] * fb * M1 / ( Delta[3] + E ); // Fta(q^2,0)
83 Ftv00 = unit1 * beta[1] * fb * M1 / ( Delta[1] + 0.5 * M1 ); // Ftv(0,0)
84 Fta00 = unit1 * beta[3] * fb * M1 / ( Delta[3] + 0.5 * M1 ); // Fta(0,0)
85 EvtComplex Ftv_WA( 0.0, 0.0 ); // the weak annihilation contribution
86
87 // Resonant contribution to the form-factors Ftv(0,q^2) and Fta(0,q^2)
88 EvtComplex ResSum( 0.0, 0.0 );
89
90 if ( parent == EvtPDL::getId( std::string( "B_s0" ) ) ||
91 parent == EvtPDL::getId( std::string( "anti-B_s0" ) ) ) {
92 // only \phi-resonant contribution to the Bs-decays
93 ResSum = 2.0 * g_plus[2] * q2 /
94 ( f_lept[2] * ( unit1 * ( q2 - pow( M_res[2], 2 ) ) +
95 uniti * M_res[2] * Gamma[2] ) );
96 }
97 if ( parent == EvtPDL::getId( std::string( "B_d0" ) ) ||
98 parent == EvtPDL::getId( std::string( "anti-B_d0" ) ) ) {
99 // \rho- and \omega-resonant contribution to the Bd-decays
100 for ( int i = 0; i < 2; i++ ) {
101 ResSum = ResSum +
102 2.0 * g_plus[i] * q2 /
103 ( f_lept[i] * ( unit1 * ( q2 - pow( M_res[i], 2 ) ) +
104 uniti * M_res[i] * Gamma[i] ) );
105 }
106 }
107
108 EvtComplex Ftv0q = Ftv00 - ResSum; // form-factor Ftv(0,q^2)
109 EvtComplex Fta0q = Fta00 - ResSum; // form-factor Fta(0,q^2)
110
111 // Ftv(q^2,q^2) = Ftv(q^2,0)+Ftv(0,q^2)
112 Ftv = Ftvq0 + Ftv0q;
113 // Fta(q^2,q^2) = Fta(q^2,0)+Fta(0,q^2)
114 Fta = Ftaq0 + Fta0q;
115
116 // Weak annihilation
117 if ( abs( c7gam ) < 0.0000001 ) {
118 EvtGenReport( EVTGEN_ERROR, "EvtGen" )
119 << "\n\n The function Evtbs2llGammaFFMNT::getPhotonFF"
120 << "\n Error: the Wilson coefficient C7gamma = 0!"
121 << " c7gam = " << c7gam << std::endl;
122 ::abort();
123 }
124 if ( mb < 0.001 ) {
125 EvtGenReport( EVTGEN_ERROR, "EvtGen" )
126 << "\n\n The function Evtbs2llGammaFFMNT::getPhotonFF"
127 << " mb = " << mb << " << 5 GeV!" << std::endl;
128 ::abort();
129 }
130
131 switch ( decay_id ) {
132 /* b \bar q -> l^+ l^- \gamma transitions */
133 case 0:
134 Ftv_WA = ( 16.0 / 3.0 ) * ( lambda_qu + lambda_qc ) *
135 ( a1 / c7gam ) * ( fb / mb );
136 Ftv = ( 1.0 + mq / mb ) * Ftv - Ftv_WA;
137 Fta = ( 1.0 - mq / mb ) * Fta;
138 //Fv = Fv;
139 //Fa = Fa;
140 break;
141 /* q \bar b -> l^+ l^- \gamma transitions */
142 case 1:
143 Ftv_WA = ( 16.0 / 3.0 ) * conj( lambda_qu + lambda_qc ) *
144 ( a1 / c7gam ) * ( fb / mb );
145 Ftv = ( 1.0 + mq / mb ) * Ftv + Ftv_WA;
146 Fta = ( 1.0 - mq / mb ) * Fta; // The change of the sign
147 //Fv = Fv; // is included in the
148 //Fa = Fa; // amplitudes definition!
149
150 break;
151 };
152}
153
154// Getting the quark mass (in GeV) using to the dispersion quark model
155// of D.Melikhov, B.Stech, PRD62, 014006 (2000).
156//
157// i=1 => return m_u;
158// i=2 => return m_d;
159// i=3 => return m_s;
160// i=4 => return m_c;
161// i=5 => return m_b;
163{
164 double qm = 0.0;
165
166 switch ( i ) {
167 case 1:
168 qm = 0.23; // m_u
169 break;
170 case 2:
171 qm = 0.23; // m_d = m_u
172 break;
173 case 3:
174 qm = 0.35; // m_s
175 break;
176 case 4:
177 qm = 1.45; // m_c
178 break;
179 case 5:
180 qm = 4.85; // m_b
181 break;
182 default:
183 EvtGenReport( EVTGEN_ERROR, "EvtGen" )
184 << "In the function EvtbTosllMSFF::getQuarkMass \n"
185 << "the parametr i not equal 1, 2, 3, 4 or 5! \n"
186 << "i =" << i << std::endl;
187 ::abort();
188 }
189
190 return qm;
191}
EvtComplex conj(const EvtComplex &c)
double abs(const EvtComplex &c)
const double a1
std::ostream & EvtGenReport(EvtGenSeverity severity, const char *facility=nullptr)
Definition EvtReport.cpp:32
@ EVTGEN_ERROR
Definition EvtReport.hh:49
Definition EvtId.hh:27
static EvtId getId(const std::string &name)
Definition EvtPDL.cpp:283
double getQuarkMass(int i) override
void getPhotonFF(int decay_id, double fb, EvtId parent, double q2, double M1, double mb, double mq, EvtComplex c7gam, EvtComplex a1, EvtComplex lambda_qu, EvtComplex lambda_qc, EvtComplex &Fv, EvtComplex &Fa, EvtComplex &Ftv, EvtComplex &Fta) override