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