]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TEvtGen/EvtGenModels/EvtVubdGamma.cxx
adding task for subtracting background after jet finding, used for all clustering...
[u/mrichter/AliRoot.git] / TEvtGen / EvtGenModels / EvtVubdGamma.cxx
CommitLineData
da0e9ce3 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 "EvtGenBase/EvtPatches.hh"
38#include "EvtGenBase/EvtConst.hh"
39#include "EvtGenModels/EvtVubdGamma.hh"
40#include "EvtGenBase/EvtDiLog.hh"
41
42//---------------
43// C Headers --
44//---------------
45#include <math.h>
46
47//----------------
48// Constructors --
49//----------------
50
51EvtVubdGamma::EvtVubdGamma(const double &alphas)
52{
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 double lne3 = 9./16.-2*EvtConst::pi*EvtConst::pi/3.+6*EvtConst::pi/4/alphas; if ( lne3 > 0 )
71 lne3 = -7./4. - sqrt(lne3);
72 else
73 lne3 = -7./4.;
74 _epsilon3 = exp(lne3);
75 }
76 else
77 _epsilon3 = 1;
78}
79
80//--------------
81// Destructor --
82//--------------
83
84EvtVubdGamma::~EvtVubdGamma( )
85{
86}
87
88//-----------
89// Methods --
90//-----------
91
92double EvtVubdGamma::getdGdxdzdp(const double &x, const double &z, const double &p2)
93{
94 // check phase space
95
96 double xb = (1-x);
97
98 if ( x < 0 || x > 1 || z < xb || z > (1+xb) )
99 return 0;
100
101 double p2min = (0>z-1.?0:z-1.);
102 double p2max = (1.-x)*(z-1.+x);
103
104 if (p2 < p2min || p2 > p2max)
105 return 0;
106
107 // // check the phase space
108 // return 1.;
109
110 double dG;
111
112 if ( p2 >_epsilon1 && p2< _epsilon2) {
113
114 double W1 = getW1delta(x,z);
115 double W4plus5 = getW4plus5delta(x,z);
116
117 dG = 12. * delta(p2,p2min,p2max) * ((1.+xb-z) * (z-xb) * W1
118 + xb*(z-xb) * (W4plus5));
119 }
120 else {
121
122 double W1 = getW1nodelta(x,z,p2);
123 double W2 = getW2nodelta(x,z,p2);
124 double W3 = getW3nodelta(x,z,p2);
125 double W4 = getW4nodelta(x,z,p2);
126 double W5 = getW5nodelta(x,z,p2);
127
128 dG = 12. * ((1.+xb-z) * (z-xb-p2) * W1
129 + (1.-z+p2) * W2
130 + (xb*(z-xb)-p2) * (W3+W4+W5));
131 }
132 return dG;
133}
134
135double EvtVubdGamma::delta(const double &x, const double &xmin, const double &xmax)
136{
137 if ( xmin > 0 || xmax < 0 ) return 0.;
138 if ( _epsilon1 < x && x < _epsilon2 ) return 1./(_epsilon2-_epsilon1);
139 return 0.0;
140}
141
142double EvtVubdGamma::getW1delta(const double &, const double &z)
143{
144 double mz = 1.-z;
145
146 double lz;
147 if (z == 1) lz = -1.;
148 else lz = log(z)/(1.-z);
149
150 // ddilog_(&z) is actually the dilog of (1-z) in maple,
151 // also in Neuberts paper the limit dilog(1) = pi^2/6 is used
152 // this corresponds to maple's dilog(0), so
153 // I take ddilog_(&mz) where mz=1-z in order to satisfy Neubert's definition
154 // and to compare with Maple the argument in maple should be (1-mz) ...
155
156 double dl = 4.*EvtDiLog::DiLog(mz) + 4.*pow(EvtConst::pi,2)/3.;
157
158 double w = -(8.*pow(log(z),2) - 10.*log(z) + 2.*lz + dl + 5.)
159 + (8.*log(z)-7.)*log(_epsilon3) - 2.*pow(log(_epsilon3),2);
160
161 return (1. + w*_alphas/3./EvtConst::pi);
162}
163
164double EvtVubdGamma::getW1nodelta(const double &, const double &z, const double &p2)
165{
166
167 double z2 = z*z;
168 double t2 = 1.-4.*p2/z2;
169 double t = sqrt(t2);
170
171 double w = 0;
172 if ( p2 > _epsilon2 )
173 w += 4./p2*(log((1.+t)/(1.-t))/t + log(p2/z2))
174 + 1. - (8.-z)*(2.-z)/z2/t2
175 + ((2.-z)/2./z+(8.-z)*(2.-z)/2./z2/t2)*log((1.+t)/(1.-t))/t;
176 if ( p2 > _epsilon3 )
177 w += (8.*log(z)-7.)/p2 - 4.*log(p2)/p2;
178
179 return w*_alphas/3./EvtConst::pi;
180}
181
182double EvtVubdGamma::getW2nodelta(const double &, const double &z, const double &p2)
183{
184
185 double z2 = z*z;
186 double t2 = 1.-4.*p2/z2;
187 double t = sqrt(t2);
188 double w11 = (32.-8.*z+z2)/4./z/t2;
189
190 double w = 0;
191 if ( p2 > _epsilon2 )
192 w -= (z*t2/8. + (4.-z)/4. + w11/2.)*log((1.+t)/(1.-t))/t;
193 if ( p2 > _epsilon2 )
194 w += (8.-z)/4. + w11;
195
196 return (w*_alphas/3./EvtConst::pi);
197}
198
199double EvtVubdGamma::getW3nodelta(const double &, const double &z, const double &p2)
200{
201 double z2 = z*z;
202 double t2 = 1.-4.*p2/z2;
203 double t4 = t2*t2;
204 double t = sqrt(t2);
205
206 double w = 0;
207
208 if ( p2 > _epsilon2 )
209 w += (z*t2/16. + 5.*(4.-z)/16. - (64.+56.*z-7.*z2)/16./z/t2
210 + 3.*(12.-z)/16./t4) * log((1.+t)/(1.-t))/t;
211 if ( p2 > _epsilon2 )
212 w += -(8.-3.*z)/8. + (32.+22.*z-3.*z2)/4./z/t2 - 3.*(12.-z)/8./t4;
213
214 return (w*_alphas/3./EvtConst::pi);
215}
216
217double EvtVubdGamma::getW4nodelta(const double &, const double &z, const double &p2)
218{
219 double z2 = z*z;
220 double t2 = 1.-4.*p2/z2;
221 double t4 = t2*t2;
222 double t = sqrt(t2);
223
224 double w = 0;
225
226 if ( p2 > _epsilon2 )
227 w -= ((8.-3.*z)/4./z - (22.-3.*z)/2./z/t2 + 3.*(12.-z)/4./z/t4)
228 * log((1.+t)/(1.-t))/t;
229 if ( p2 > _epsilon2 )
230 w += -1. - (32.-5.*z)/2./z/t2 + 3.*(12.-z)/2./z/t4 ;
231
232 return w*_alphas/3./EvtConst::pi;
233}
234
235double EvtVubdGamma::getW4plus5delta(const double &, const double &z)
236{
237
238 double w = 0;
239
240 if ( z == 1 )
241 w = -2;
242 else
243 w = 2.*log(z)/(1.-z);
244
245 return (w*_alphas/3./EvtConst::pi);
246}
247
248double EvtVubdGamma::getW5nodelta(const double &, const double &z, const double &p2)
249{
250 double z2 = z*z;
251 double t2 = 1.-4.*p2/z2;
252 double t4 = t2*t2;
253 double t = sqrt(t2);
254
255 double w = 0;
256 if ( p2 > _epsilon2 )
257 w += (1./4./z - (2.-z)/2./z2/t2 + 3.*(12.-z)/4./z2/t4)
258 * log((1.+t)/(1.-t))/t;
259 if ( p2 > _epsilon2 )
260 w += -(8.+z)/2./z2/t2 - 3.*(12.-z)/2./z2/t4;
261
262 return (w*_alphas/3./EvtConst::pi);
263
264}
265
266
267