9 #include <TLorentzVector.h>
10 #include <generators/treps/UtrepsB.h>
15 UtrepsB::UtrepsB(
void) :
TrepsB()
19 void UtrepsB::initg(
void)
21 B2DEBUG(20,
" UtrepsB initg Pmodel " << TrepsB::pmodel);
23 if (TrepsB::pmodel == 251) {
28 static double data001[21] = { 20., 15., 9., 8., 8., 7., 5.3, 5.2, 5.2, 5.2, 5.2, 4., 3., 2., 2., 2., 2., 2., 1., 0., 0. };
29 static double data201[21] = { 1., 5., 5, 5., 4., 4., 4., 4., 3., 3., 3., 2., 1., 1., 1., 1., 0., 0., 0., 1., 1. };
30 static double data221[21] = { 1., 5., 5., 6., 7., 7.18, 6.68, 6.27, 5.91, 5.61, 5., 5., 4., 3., 2., 2., 2., 1., 0., 0., 0. };
31 b00 =
Interps(0.3, 2.3, 20, data001);
32 b20 =
Interps(0.3, 2.3, 20, data201);
33 b22 =
Interps(0.3, 2.3, 20, data221);
36 if (TrepsB::pmodel == 252) {
38 static double data002[15] = { 2., 2., 2., 2., 2., 2., 3., 4., 4.5, 5., 5., 5., 4.5, 4.5, 4.3 };
39 static double data202[15] = { 1., 2., 3., 4., 5., 5., 5., 5., 5., 5., 5., 4., 3.0, 2.2, 1. };
40 static double data222[15] = { 0., 0., 0., 0., 0., 0., -1., -3., -3., -3., -3., -4., -3.5, -3., -2.5 };
41 b00 =
Interps(1.0, 2.4, 14, data002);
42 b20 =
Interps(1.0, 2.4, 14, data202);
43 b22 =
Interps(1.0, 2.4, 14, data222);
46 if (TrepsB::pmodel == 253) {
48 static double data003[9] = { 2.3, 2.3, 7.26, 7.94, 8.53, 7.38, 3.25, 1.98, 2.30};
49 static double data203[9] = { 9.63, 9.63, 10.73, 8.02, 6.18, 3.37, 0.63, 0.10, 0.66};
50 static double data223[9] = { 1.48, 1.48, -4.62, -6.12, -6.78, -5.35, -1.82, -1.02, -1.63};
51 b00 =
Interps(2.05, 2.85, 8, data003);
52 b20 =
Interps(2.05, 2.85, 8, data203);
53 b22 =
Interps(2.05, 2.85, 8, data223);
60 double UtrepsB::d2func(
double y)
const
62 return 1. / (9. + 3.*y * y + y * y * y * y);
65 double UtrepsB::qfunc(
double y,
double mm)
const
67 return sqrt(0.25 * y - mm * mm);
71 double UtrepsB::tpform(
double _q2,
double _w)
const
73 double dis = 1. / pow((1.0 + _q2 / (_w * _w)), 2);
74 if (TrepsB::fmodel == 1) {
76 dis = 1. / pow((1.0 + _q2 / (0.77 * 0.77)), 2);
78 if (TrepsB::fmodel == 2) {
80 dis = 1. / pow((1.0 + _q2 / (3.097 * 3.097)), 2);
88 double UtrepsB::tpangd(
double _z,
double _w)
99 if (TrepsB::pmodel == 201) {
101 dcs = 3.*zz * zz - 1.;
105 if (TrepsB::pmodel == 202) {
107 dcs = pow(1. - zz * zz, 2);
111 if (TrepsB::pmodel == 251) {
114 double gtot = 0.1859;
117 double ggg = 2.62e-6;
118 double phas = 22.8 / 180.*3.14159;
121 double v00 = 0., v20 = 0., v22 = 0. ;
124 v00 = v20 = v22 = 0.0 ;
125 }
else if (ww < 2.3) {
126 v00 = b00.get_val(ww);
127 v20 = b20.get_val(ww);
128 v22 = b22.get_val(ww);
137 double gf = pow(qfunc(ww * ww, mm) / qfunc(mr * mr, mm), 5) *
138 d2func(qfunc(ww * ww, mm) * sr) / d2func(qfunc(mr * mr, mm) * sr);
139 std::complex<double> imagu(0.0, 1.0);
140 std::complex<double> rbr = sqrt(40.*3.14159 * mr / ww * ggg * gtot * br) * gf /
141 ((-ww * ww + mr * mr) - imagu * mr * gtot * gf) *
143 rbr = (cos(phas) + imagu * sin(phas)) * rbr;
145 dcs2 = pow(v00 + v20 * sqrt(5.) * 0.5 * (3.*zz * zz - 1.), 2) +
146 (v22 * v22 + 2.*v22 * rbr.real() + pow(std::abs(rbr), 2)) *
147 15. / 8.*pow(1. - zz * zz, 2)
148 + speak * 0.25 * gtot0 * gtot0 / (pow(ww - mr0, 2) + 0.25 * gtot0 * gtot0);
150 if (abs(zz) < 0.8) dcs2 = 263. / pow(ww, 6) / pow(1. - zz * zz, 2);
151 else dcs2 = 263. / pow(ww, 6) / pow(1. - 0.8 * 0.8, 2);
156 if (TrepsB::pmodel == 252) {
159 double gtot = 0.0814;
162 double ggg = 0.081e-6;
163 double gtotfa = 0.13;
165 double s00 = 0., s20 = 0., s22 = 0. ;
168 s00 = s20 = s22 = 0.0 ;
169 }
else if (ww < 2.4) {
170 s00 = b00.get_val(ww);
171 s20 = b20.get_val(ww);
172 s22 = b22.get_val(ww);
181 double gf = pow(qfunc(ww * ww, mm) / qfunc(mr * mr, mm), 5) *
182 d2func(qfunc(ww * ww, mm) * sr) / d2func(qfunc(mr * mr, mm) * sr);
183 std::complex<double> imagu(0.0, 1.0);
184 std::complex<double> rbr = sqrt(40.*3.14159 * mr / ww * ggg * gtot * br) * gf /
185 ((-ww * ww + mr * mr) - imagu * mr * gtot * gf) *
188 dcs2 = s00 + s20 * pow(sqrt(5.) * 0.5 * (3.*zz * zz - 1.), 2) +
189 (s22 + pow(std::abs(rbr), 2)
190 + speak * 0.25 * gtotfa * gtotfa / (pow(ww - mrfa, 2) + 0.25 * gtotfa * gtotfa)) *
191 15. / 8.*pow(1. - zz * zz, 2) ;
193 if (abs(zz) < 0.8) dcs2 = 241. / pow(ww, 6) / pow(1. - zz * zz, 2);
194 else dcs2 = 241. / pow(ww, 6) / pow(1. - 0.8 * 0.8, 2);
199 if (TrepsB::pmodel == 253) {
201 double s00 = 0., s20 = 0., s22 = 0. ;
204 s00 = b00.get_val(ww);
205 s20 = b20.get_val(ww);
206 s22 = b22.get_val(ww);
209 s00 = b00.get_val(ww0) * pow(ww0 / ww, 12);
210 s20 = b20.get_val(ww0) * pow(ww0 / ww, 12);
211 s22 = b22.get_val(ww0) * pow(ww0 / ww, 12);
218 double gggbr ; gggbr = 0.00152 * 0.000005;
220 double sigr = 8.*3.14159 * mr / ww * gggbr * gtot / (pow(mr * mr - ww * ww, 2) + mr * mr * gtot * gtot)
224 dcs2 = s00 + sigr + s20 * (5. / 4.) * pow(3.*zz * zz - 1, 2) + s22 * (15. / 8.) * pow(1. - zz * zz, 2);
234 int UtrepsB::tpuser(TLorentzVector _pe, TLorentzVector _pp,
241 B2DEBUG(20,
" _pe(" << _pe.Px() <<
"," << _pe.Py() <<
"," << _pe.Pz() <<
") and "
242 <<
" _pp(" << _pp.Px() <<
"," << _pp.Py() <<
"," << _pp.Pz() <<
") are given but not used");
249 if (_npart == 3 && TrepsB::pmodel >= 301 && TrepsB::pmodel <= 399) {
251 int index1 = 0, index2 = 1, index3 = 2;
252 double z, m12, zp, phip, zs, phis, phi0;
254 tpkin3(part, index1, index2, index3, z, m12, zp,
255 phip, zs, phis, phi0);
257 double u = sqrt(1. - z * z);
258 double up = sqrt(1. - zp * zp);
259 double us = sqrt(1. - zs * zs);
261 double wei = 0., weimax = 0.;
265 if (TrepsB::pmodel == 301) {
270 if (TrepsB::pmodel == 302) {
272 wei = z * z * u * u * up * up * pow(sin(phip), 2);
275 if (TrepsB::pmodel == 303) {
277 wei = u * u * (u * u * zp * zp + z * z * up * up - 2.*u * z * up * zp * cos(phip));
280 if (TrepsB::pmodel == 304) {
282 wei = pow(3.*zs * zs - 1., 2);
285 if (TrepsB::pmodel == 305) {
287 wei = u * u * up * up * zp * zp * pow(sin(phip), 2);
290 if (TrepsB::pmodel == 306) {
292 wei = up * up * (z * z * up * up + u * u * zp * zp - 2.*z * u * zp * up * cos(phip));
295 if (TrepsB::pmodel == 307) {
297 wei = pow(3.*zp * zp - 1., 2);
300 if (TrepsB::pmodel == 308) {
302 wei = z * zp - 0.5 * u * up * cos(phip);
305 if (TrepsB::pmodel == 309) {
307 wei = pow(3.*zs * zs - 1., 2);
311 if (TrepsB::pmodel == 331) {
313 wei = u * u * (1. - us * us * pow(cos(phis), 2));
316 if (TrepsB::pmodel == 332) {
318 wei = u * u * (1. + z * z * zs * zs - u * u * us * us * pow(cos(phis), 2));
321 if (TrepsB::pmodel == 333) {
326 if (TrepsB::pmodel == 334) {
331 if (TrepsB::pmodel == 335) {
333 wei = (9.*z * z * z * z - 12.*z * z + 5.) / 24.*(1. + zs * zs)
334 + 0.75 * z * z * (1. - z * z) * (1. - zs * zs) + 0.5 * z * u * zs * us * (-3.*z * z + 2.) * cos(phis)
335 + 0.125 * (1. - z * z) * (3.*z * z - 1.) * (1. - zs * zs) * cos(2.*phis);
336 weimax = 13. / 12. + 0.75 + 1.0 + 0.25;
338 if (TrepsB::pmodel == 336) {
340 wei = 0.125 * pow(1. + z * z, 2) * (1. + zs * zs)
341 + 0.25 * (1. - z * z * z * z) * (1. - zs * zs) - 0.5 * z * u * zs * us * (1. + z * z) * cos(phis)
342 + 0.125 * (1. - z * z * z * z) * (1. - zs * zs) * cos(2.*phis);
345 if (weimax * gRandom->Uniform() > wei) iret = 0;
347 B2DEBUG(20,
" $$ 3B $$ " << wei <<
" " << iret);
351 if (_npart == 4 && TrepsB::pmodel >= 401 && TrepsB::pmodel <= 499) {
353 int index1 = 0, index2 = 1, index3 = 2, index4 = 3;
354 double z, m12, zp, phip, zs, phis, m34, zpp, phipp, zss, phiss, phi0;
357 index1, index2, index3, index4, z, m12, zp,
358 phip, zs, phis, m34, zpp, phipp, zss, phiss, phi0) ;
Abstract base class for different kinds of events.