BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtVubdGamma.cc
Go to the documentation of this file.
1//-----------------------------------------------------------------------
2// File and Version Information:
3//
4// Copyright Information: See EvtGen/COPYRIGHT
5//
6//
7// Description:
8// 3 2 2
9// d Gamma / _ _ _2 mb _2 mb
10// ---------- = 12 Gamma | (1+x-z)(z-x-p ) -- W + (1-z+p ) -- W
11// _ 2 0 \ 2 1 2 2
12// dx dz dp 2
13// _ _ _2 mb 2 \
14// + [x(z-x)-p ] -- (W + 2mb W + mb W ) |
15// 4 3 4 5 /
16//
17// with
18// 2 E 2
19// l _2 p 2 v.p _
20// x = ------ , p = --- , z = ------ , x = 1-x
21// mb 2 mb
22// mb
23//
24// the triple differential decay rate according to
25// hep-ph/9905351 v2
26//
27// Environment:
28// Software developed for the BaBar Detector at the SLAC B-Factory.
29//
30// Author List:
31// Sven Menke
32//
33//-----------------------------------------------------------------------
34//-----------------------
35// This Class's Header --
36//-----------------------
37#include "EvtVubdGamma.hh"
39
40//---------------
41// C Headers --
42//---------------
43#include <math.h>
44
45extern "C" {
46double ddilog_( const double* );
47}
48//----------------
49// Constructors --
50//----------------
51
52EvtVubdGamma::EvtVubdGamma( const double& alphas ) {
53 _alphas = alphas;
54
55 // the range for the delta distribution in p2 is from _epsilon1 to
56 // _epsilon2. It was checked with the single differential formulae
57 // in the paper that these values are small enough to imitate p2 = 0
58 // for the regular terms.
59 // The ()* distributions, however need further treatment. In order to
60 // generate the correct spectrum in z a threshold need to be computed
61 // from the desired value of the coupling alphas. The idea is that
62 // for z=1 p2=0 is not allowed and therefore the part of dGamma proportional
63 // to delta(p2) should go to 0 for z->1.
64 // Using equation (3.1) and (3.2) it is possible to find the correct value
65 // for log(_epsilon3) from this requirement.
66
67 _epsilon1 = 1e-10;
68 _epsilon2 = 1e-5;
69 if ( alphas > 0 )
70 {
71 double lne3 = 9. / 16. - 2 * M_PI * M_PI / 3. + 6 * M_PI / 4 / alphas;
72 if ( lne3 > 0 ) lne3 = -7. / 4. - sqrt( lne3 );
73 else lne3 = -7. / 4.;
74 _epsilon3 = exp( lne3 );
75 }
76 else _epsilon3 = 1;
77}
78
79//--------------
80// Destructor --
81//--------------
82
84
85//-----------
86// Methods --
87//-----------
88
89double EvtVubdGamma::getdGdxdzdp( const double& x, const double& z, const double& p2 ) {
90 // check phase space
91
92 double xb = ( 1 - x );
93
94 if ( x < 0 || x > 1 || z < xb || z > ( 1 + xb ) ) return 0;
95
96 // not used
97 // double mx = (0>z-1?0:z-1);
98
99 double p2min = ( 0 > z - 1. ? 0 : z - 1. );
100 double p2max = ( 1. - x ) * ( z - 1. + x );
101
102 if ( p2 < p2min || p2 > p2max ) return 0;
103
104 // // check the phase space
105 // return 1.;
106
107 double dG;
108
109 if ( p2 > _epsilon1 && p2 < _epsilon2 )
110 {
111
112 double W1 = getW1delta( x, z );
113 double W4plus5 = getW4plus5delta( x, z );
114
115 dG = 12. * delta( p2, p2min, p2max ) *
116 ( ( 1. + xb - z ) * ( z - xb ) * W1 + xb * ( z - xb ) * ( W4plus5 ) );
117 }
118 else
119 {
120
121 double W1 = getW1nodelta( x, z, p2 );
122 double W2 = getW2nodelta( x, z, p2 );
123 double W3 = getW3nodelta( x, z, p2 );
124 double W4 = getW4nodelta( x, z, p2 );
125 double W5 = getW5nodelta( x, z, p2 );
126
127 dG = 12. * ( ( 1. + xb - z ) * ( z - xb - p2 ) * W1 + ( 1. - z + p2 ) * W2 +
128 ( xb * ( z - xb ) - p2 ) * ( W3 + W4 + W5 ) );
129 }
130 return dG;
131}
132
133double EvtVubdGamma::delta( const double& x, const double& xmin, const double& xmax ) {
134 if ( xmin > 0 || xmax < 0 ) return 0.;
135 if ( _epsilon1 < x && x < _epsilon2 ) return 1. / ( _epsilon2 - _epsilon1 );
136 return 0.0;
137}
138
139double EvtVubdGamma::getW1delta( const double& x, const double& z ) {
140 double mz = 1. - z;
141 // double p2min = (0>z-1.?0:z-1.);
142 // double p2max = (1.-x)*(z-1.+x);
143
144 double lz;
145 if ( z == 1 ) lz = -1.;
146 else lz = log( z ) / ( 1. - z );
147
148 // ddilog_(&z) is actually the dilog of (1-z) in maple,
149 // also in Neuberts paper the limit dilog(1) = pi^2/6 is used
150 // this corresponds to maple's dilog(0), so
151 // I take ddilog_(&mz) where mz=1-z in order to satisfy Neubert's definition
152 // and to compare with Maple the argument in maple should be (1-mz) ...
153
154 double dl = 4. * ddilog_( &mz ) + 4. * pow( M_PI, 2 ) / 3.;
155
156 double w = -( 8. * pow( log( z ), 2 ) - 10. * log( z ) + 2. * lz + dl + 5. ) +
157 ( 8. * log( z ) - 7. ) * log( _epsilon3 ) - 2. * pow( log( _epsilon3 ), 2 );
158
159 return ( 1. + w * _alphas / 3. / M_PI );
160}
161
162double EvtVubdGamma::getW1nodelta( const double& x, const double& z, const double& p2 ) {
163
164 double z2 = z * z;
165 double t2 = 1. - 4. * p2 / z2;
166 double t = sqrt( t2 );
167
168 double w = 0;
169 if ( p2 > _epsilon2 )
170 w += 4. / p2 * ( log( ( 1. + t ) / ( 1. - t ) ) / t + log( p2 / z2 ) ) + 1. -
171 ( 8. - z ) * ( 2. - z ) / z2 / t2 +
172 ( ( 2. - z ) / 2. / z + ( 8. - z ) * ( 2. - z ) / 2. / z2 / t2 ) *
173 log( ( 1. + t ) / ( 1. - t ) ) / t;
174 if ( p2 > _epsilon3 ) w += ( 8. * log( z ) - 7. ) / p2 - 4. * log( p2 ) / p2;
175
176 return w * _alphas / 3. / M_PI;
177}
178
179double EvtVubdGamma::getW2nodelta( const double& x, const double& z, const double& p2 ) {
180
181 double z2 = z * z;
182 double t2 = 1. - 4. * p2 / z2;
183 double t = sqrt( t2 );
184 double w11 = ( 32. - 8. * z + z2 ) / 4. / z / t2;
185
186 double w = 0;
187 if ( p2 > _epsilon2 )
188 w -= ( z * t2 / 8. + ( 4. - z ) / 4. + w11 / 2. ) * log( ( 1. + t ) / ( 1. - t ) ) / t;
189 if ( p2 > _epsilon2 ) w += ( 8. - z ) / 4. + w11;
190
191 return ( w * _alphas / 3. / M_PI );
192}
193
194double EvtVubdGamma::getW3nodelta( const double& x, const double& z, const double& p2 ) {
195 double z2 = z * z;
196 double t2 = 1. - 4. * p2 / z2;
197 double t4 = t2 * t2;
198 double t = sqrt( t2 );
199
200 double w = 0;
201
202 if ( p2 > _epsilon2 )
203 w += ( z * t2 / 16. + 5. * ( 4. - z ) / 16. - ( 64. + 56. * z - 7. * z2 ) / 16. / z / t2 +
204 3. * ( 12. - z ) / 16. / t4 ) *
205 log( ( 1. + t ) / ( 1. - t ) ) / t;
206 if ( p2 > _epsilon2 )
207 w += -( 8. - 3. * z ) / 8. + ( 32. + 22. * z - 3. * z2 ) / 4. / z / t2 -
208 3. * ( 12. - z ) / 8. / t4;
209
210 return ( w * _alphas / 3. / M_PI );
211}
212
213double EvtVubdGamma::getW4nodelta( const double& x, const double& z, const double& p2 ) {
214 double z2 = z * z;
215 double t2 = 1. - 4. * p2 / z2;
216 double t4 = t2 * t2;
217 double t = sqrt( t2 );
218
219 double w = 0;
220
221 if ( p2 > _epsilon2 )
222 w -= ( ( 8. - 3. * z ) / 4. / z - ( 22. - 3. * z ) / 2. / z / t2 +
223 3. * ( 12. - z ) / 4. / z / t4 ) *
224 log( ( 1. + t ) / ( 1. - t ) ) / t;
225 if ( p2 > _epsilon2 )
226 w += -1. - ( 32. - 5. * z ) / 2. / z / t2 + 3. * ( 12. - z ) / 2. / z / t4;
227
228 return w * _alphas / 3. / M_PI;
229}
230
231double EvtVubdGamma::getW4plus5delta( const double& x, const double& z ) {
232
233 double w = 0;
234
235 if ( z == 1 ) w = -2;
236 else w = 2. * log( z ) / ( 1. - z );
237
238 return ( w * _alphas / 3. / M_PI );
239}
240
241double EvtVubdGamma::getW5nodelta( const double& x, const double& z, const double& p2 ) {
242 double z2 = z * z;
243 double t2 = 1. - 4. * p2 / z2;
244 double t4 = t2 * t2;
245 double t = sqrt( t2 );
246
247 double w = 0;
248 if ( p2 > _epsilon2 )
249 w += ( 1. / 4. / z - ( 2. - z ) / 2. / z2 / t2 + 3. * ( 12. - z ) / 4. / z2 / t4 ) *
250 log( ( 1. + t ) / ( 1. - t ) ) / t;
251 if ( p2 > _epsilon2 ) w += -( 8. + z ) / 2. / z2 / t2 - 3. * ( 12. - z ) / 2. / z2 / t4;
252
253 return ( w * _alphas / 3. / M_PI );
254}
double p2[4]
Double_t x[10]
EvtComplex exp(const EvtComplex &c)
double w
double ddilog_(const double *)
double ddilog_(const double &sh)
#define M_PI
Definition TConstant.h:4
double delta(const double &x, const double &xmin, const double &xmax)
virtual ~EvtVubdGamma()
double getdGdxdzdp(const double &x, const double &z, const double &p2)
double getW2nodelta(const double &x, const double &z, const double &p2)
double getW1nodelta(const double &x, const double &z, const double &p2)
double getW1delta(const double &x, const double &z)
double getW4plus5delta(const double &x, const double &z)
double getW3nodelta(const double &x, const double &z, const double &p2)
double getW5nodelta(const double &x, const double &z, const double &p2)
double getW4nodelta(const double &x, const double &z, const double &p2)
EvtVubdGamma(const double &alphas)
int t()
Definition t.c:1