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
EvtBGLFF.cpp
Go to the documentation of this file.
1
2/***********************************************************************
3* Copyright 1998-2021 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/EvtId.hh"
24#include "EvtGenBase/EvtPDL.hh"
26
27#include <cmath>
28#include <cstdlib>
29
30// BGL (N=3) for scalar meson i.e. B->Dlv (l=e,mu,tau)
31EvtBGLFF::EvtBGLFF( double bglap_0, double bglap_1, double bglap_2,
32 double bglap_3, double bgla0_0, double bgla0_1,
33 double bgla0_2, double bgla0_3 ) :
34 m_ap_0( bglap_0 ),
35 m_ap_1( bglap_1 ),
36 m_ap_2( bglap_2 ),
37 m_ap_3( bglap_3 ),
38 m_a0_0( bgla0_0 ),
39 m_a0_1( bgla0_1 ),
40 m_a0_2( bgla0_2 ),
41 m_a0_3( bgla0_3 )
42{
43}
44
45// BGL for vector meson i.e. B->D*lv (l=e,mu), and should not be used to taus.
46EvtBGLFF::EvtBGLFF( double bgla_0, double bgla_1, double bglb_0, double bglb_1,
47 double bglc_1, double bglc_2 ) :
48 m_a_0( bgla_0 ),
49 m_a_1( bgla_1 ),
50 m_b_0( bglb_0 ),
51 m_b_1( bglb_1 ),
52 m_c_1( bglc_1 ),
53 m_c_2( bglc_2 )
54{
55}
56
57// Use dispersion relation parametrization from
58// C.G.Boyd, B.Grinstein, R.F.Lebed, Phys. Rev. Lett. 74,4603(1995)
59// and
60// R.Glattauer, etc. (Belle) Phys. Rev. D 93,032006 (2016)
61void EvtBGLFF::getscalarff( EvtId parent, EvtId, double t, double mass,
62 double* fp, double* f0 )
63{
64 const double mb = EvtPDL::getMeanMass( parent );
65 const double r = mass / mb;
66 const double w = ( ( mb * mb ) + ( mass * mass ) - t ) / ( 2.0 * mb * mass );
67 const double z = ( std::sqrt( w + 1.0 ) - sqrt( 2. ) ) /
68 ( std::sqrt( w + 1.0 ) + std::sqrt( 2. ) );
69 const double p_i = 1.0;
70
71 const double phi_sub = ( 1.0 + r ) * ( 1.0 - z ) +
72 2.0 * std::sqrt( r ) * ( 1.0 + z );
73 const double g_sub = ( 4.0 * r ) / std::pow( 1.0 + r, 2 );
74 const double phi_p = 1.1213 * std::pow( 1.0 + z, 2. ) * sqrt( 1.0 - z ) *
75 std::pow( phi_sub, -5 );
76 const double phi_0 = 0.5299 * ( 1.0 + z ) * std::pow( 1.0 - z, 1.5 ) *
77 std::pow( phi_sub, -4 );
78
79 *fp = g_sub * ( m_ap_0 + m_ap_1 * z + m_ap_2 * z * z + m_ap_3 * z * z * z ) /
80 ( p_i * phi_p );
81 *f0 = g_sub * ( m_a0_0 + m_a0_1 * z + m_a0_2 * z * z + m_a0_3 * z * z * z ) /
82 ( p_i * phi_0 );
83
84 return;
85}
86
87// Use z expansion parametrization from
88// C.G.Boyd, B.Grinstein and R.F.Lebed, Phys. Rev. D 56,6895(1997)
89// and
90// B.Grinstein, A.Kobach, Phys. Lett. B 771(2017)359-364
91void EvtBGLFF::getvectorff( EvtId parent, EvtId, double t, double mass,
92 double* a1f, double* a2f, double* vf, double* a0f )
93{
94 double mb = EvtPDL::getMeanMass( parent );
95 double w = ( ( mb * mb ) + ( mass * mass ) - t ) / ( 2. * mb * mass );
96
97 // Form factors have a general form, with parameters passed in
98 // from the arguments.
99
100 const double r = mass / mb;
101 const double z = ( std::sqrt( w + 1. ) - std::sqrt( 2. ) ) /
102 ( std::sqrt( w + 1 ) + std::sqrt( 2. ) );
103 const double rstar = ( 2. * std::sqrt( mb * mass ) ) / ( mb + mass );
104 constexpr double chiT_plus33 = 5.28e-4;
105 constexpr double chiT_minus33 = 3.07e-4;
106 constexpr double n_i = 2.6;
107 constexpr double axialvector_poles[4]{ 6.730, 6.736, 7.135, 7.142 };
108 constexpr double vector_poles[4]{ 6.337, 6.899, 7.012, 7.280 };
109
110 const double c_0 = ( mb - mass ) / mb * std::sqrt( 0.5 ) /
111 ( 1.0 + r + 2. * std::sqrt( r ) ) * m_b_0;
112
113 const double phi_g = std::sqrt( 256. * n_i / ( 3. * M_PI * chiT_plus33 ) ) *
114 r * r * ( 1. + z ) * ( 1. + z ) / std::sqrt( 1. - z ) /
115 std::pow( ( 1. + r ) * ( 1. - z ) +
116 2. * std::sqrt( r ) * ( 1. + z ),
117 4. );
118 const double phi_f =
119 1. / ( mb * mb ) * std::sqrt( 16. * n_i / ( 3. * M_PI * chiT_minus33 ) ) *
120 r * ( 1. + z ) * std::pow( 1. - z, 1.5 ) /
121 std::pow( ( 1. + r ) * ( 1. - z ) + 2. * std::sqrt( r ) * ( 1. + z ), 4. );
122 const double phi_F1 =
123 1. / ( mb * mb * mb ) *
124 std::sqrt( 8. * n_i / ( 3. * M_PI * chiT_minus33 ) ) * r * ( 1. + z ) *
125 std::pow( 1. - z, 2.5 ) /
126 std::pow( ( 1. + r ) * ( 1. - z ) + 2 * std::sqrt( r ) * ( 1. + z ), 5. );
127
128 double p_g = 1.;
129 double p_f = 1.;
130 const double term3 = std::sqrt( ( mb + mass ) * ( mb + mass ) -
131 ( mb - mass ) * ( mb - mass ) );
132
133 for ( int i = 0; i < 4; i++ ) {
134 const double term1 = std::sqrt( ( mb + mass ) * ( mb + mass ) -
135 vector_poles[i] * vector_poles[i] );
136 const double term2 = std::sqrt( ( mb + mass ) * ( mb + mass ) -
137 axialvector_poles[i] *
138 axialvector_poles[i] );
139 const double z_p1 = ( term1 - term3 ) / ( term1 + term3 );
140 p_g = p_g * ( z - z_p1 ) / ( 1 - z * z_p1 );
141 const double z_p2 = ( term2 - term3 ) / ( term2 + term3 );
142 p_f = p_f * ( z - z_p2 ) / ( 1 - z * z_p2 );
143 }
144
145 const double g = 1. / p_g / phi_g * ( m_a_0 + m_a_1 * z );
146 const double f = 1. / p_f / phi_f * ( m_b_0 + m_b_1 * z );
147 const double F1 = 1. / p_f / phi_F1 * ( c_0 + m_c_1 * z + m_c_2 * z * z );
148
149 const double ha1 = f / std::sqrt( mb * mass ) / ( 1. + w );
150 const double r1 = ( w + 1. ) * mb * mass * g / f;
151 const double r2 = ( w - r ) / ( w - 1.0 ) - F1 / mb / ( w - 1.0 ) / f;
152
153 *a1f = ( w + 1. ) / 2. * rstar * ha1;
154 *a2f = ( r2 / rstar ) * ha1;
155 *vf = ( r1 / rstar ) * ha1;
156 *a0f = 0; // a0f is related to B->D* tau nu decay.
157 // The class should not be used for taus, due to the lack of fitted parameters in a0f amplitude.
158
159 return;
160}
161
162void EvtBGLFF::gettensorff( EvtId, EvtId, double, double, double*, double*,
163 double*, double* )
164{
165 EvtGenReport( EVTGEN_ERROR, "EvtGen" )
166 << "Not implemented :gettensorff in EvtBGLFF.\n";
167 ::abort();
168}
169
170void EvtBGLFF::getbaryonff( EvtId, EvtId, double, double, double*, double*,
171 double*, double* )
172{
173 EvtGenReport( EVTGEN_ERROR, "EvtGen" )
174 << "Not implemented :getbayronff in EvtBGLFF.\n";
175 ::abort();
176}
177
178void EvtBGLFF::getdiracff( EvtId, EvtId, double, double, double*, double*,
179 double*, double*, double*, double* )
180{
181 EvtGenReport( EVTGEN_ERROR, "EvtGen" )
182 << "Not implemented :getdiracff in EvtBGLFF.\n";
183 ::abort();
184}
185
186void EvtBGLFF::getraritaff( EvtId, EvtId, double, double, double*, double*,
187 double*, double*, double*, double*, double*, double* )
188{
189 EvtGenReport( EVTGEN_ERROR, "EvtGen" )
190 << "Not implemented :getraritaff in EvtBGLFF.\n";
191 ::abort();
192}
std::ostream & EvtGenReport(EvtGenSeverity severity, const char *facility=nullptr)
Definition EvtReport.cpp:32
@ EVTGEN_ERROR
Definition EvtReport.hh:49
double m_c_1
Definition EvtBGLFF.hh:134
double m_ap_0
Definition EvtBGLFF.hh:96
double m_ap_3
Definition EvtBGLFF.hh:105
double m_b_0
Definition EvtBGLFF.hh:128
void getdiracff(EvtId, EvtId, double, double, double *, double *, double *, double *, double *, double *) override
Definition EvtBGLFF.cpp:178
double m_a0_2
Definition EvtBGLFF.hh:114
double m_a0_3
Definition EvtBGLFF.hh:117
double m_ap_2
Definition EvtBGLFF.hh:102
EvtBGLFF(double bglap_0, double bglap_1, double bglap_2, double bglap_3, double bgla0_0, double bgla0_1, double bgla0_2, double bgla0_3)
Definition EvtBGLFF.cpp:31
double m_c_2
Definition EvtBGLFF.hh:137
double m_b_1
Definition EvtBGLFF.hh:131
void gettensorff(EvtId, EvtId, double, double, double *, double *, double *, double *) override
Definition EvtBGLFF.cpp:162
void getbaryonff(EvtId, EvtId, double, double, double *, double *, double *, double *) override
Definition EvtBGLFF.cpp:170
double m_a0_1
Definition EvtBGLFF.hh:111
void getvectorff(EvtId parent, EvtId daught, double t, double mass, double *a1f, double *a2f, double *vf, double *a0f) override
Definition EvtBGLFF.cpp:91
double m_a0_0
Definition EvtBGLFF.hh:108
void getraritaff(EvtId, EvtId, double, double, double *, double *, double *, double *, double *, double *, double *, double *) override
Definition EvtBGLFF.cpp:186
void getscalarff(EvtId parent, EvtId daught, double t, double mass, double *fp, double *f0) override
Definition EvtBGLFF.cpp:61
double m_a_0
Definition EvtBGLFF.hh:122
double m_ap_1
Definition EvtBGLFF.hh:99
double m_a_1
Definition EvtBGLFF.hh:125
Definition EvtId.hh:27
static double getMeanMass(EvtId i)
Definition EvtPDL.cpp:306