184 {
185
187
188 EvtParticle* xhadron = p->
getDaug( 0 );
189 EvtParticle* leptonp = p->
getDaug( 1 );
190 EvtParticle* leptonn = p->
getDaug( 2 );
191
193
195
196 double mB = p->
mass();
198 double pb;
199
200 int im = 0;
201 static int nmsg = 0;
202 double xhadronMass = -999.0;
203
204 EvtVector4R p4xhadron;
205 EvtVector4R p4leptonp;
206 EvtVector4R p4leptonn;
207
208
209
210
211
212
213
214
215 while ( xhadronMass < _mxmin )
216 {
217 im++;
218
219
220
221
222
223
224
225
226 double mb = 0.0;
227
228 double xbox, ybox;
229
230 while ( mb <= 0.0 )
231 {
232 pb = _calcprob->FermiMomentum( _pf );
233
234
235 mb = mB * mB + _mq * _mq - 2.0 * mB * sqrt( pb * pb + _mq * _mq );
236 }
237 mb = sqrt( mb );
238
239
240
241
242
244 double smin = 4.0 *
ml *
ml;
245 double smax = ( mb - _ms ) * ( mb - _ms );
246
248 {
251 if ( ybox < _calcprob->dGdsProb( mb, _ms,
ml, xbox ) ) {
s = xbox; }
252 }
253
254
255
256
257
258
259
260 EvtVector4R p4sdilep[2];
261
262 double msdilep[2];
263 msdilep[0] = _ms;
264 msdilep[1] = sqrt(
s );
265
267
268
269
270 EvtVector4R p4ll[2];
271
272 double mll[2];
275
276 double tmp = 0.0;
277
278 while ( tmp == 0.0 )
279 {
280
281
283
284
285
286 p4ll[0] =
boostTo( p4ll[0], p4sdilep[1] );
287 p4ll[1] =
boostTo( p4ll[1], p4sdilep[1] );
288
289
290
291 EvtVector4R p4slp = p4sdilep[0] + p4ll[0];
292 EvtVector4R p4sln = p4sdilep[0] + p4ll[1];
293
295
297
298 double prob = _calcprob->dGdsdupProb( mb, _ms,
ml,
s, u );
299 if ( prob > _dGdsdupProbMax && nmsg < 20 )
300 {
302 << "d2gdsdup GT d2gdsdup_max:" << prob << " " << _dGdsdupProbMax
303 <<
" for s = " <<
s <<
" u = " << u <<
" mb = " << mb << endl;
304 nmsg++;
305 }
306 if ( ybox < prob )
307 {
308 tmp = 1.0;
309
310
311 }
312 }
313
314
315
318 double sinth = sqrt( 1.0 - costh * costh );
319
320
321
322 EvtVector4R p4b( sqrt( mb * mb + pb * pb ), pb * sinth *
sin( phi ),
323 pb * sinth *
cos( phi ), pb * costh );
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341 EvtVector4R p4s =
boostTo( p4sdilep[0], p4b );
342 p4leptonp =
boostTo( p4ll[0], p4b );
343 p4leptonn =
boostTo( p4ll[1], p4b );
344
345
346
347 EvtVector4R p4q( sqrt( pb * pb + _mq * _mq ), -p4b.get( 1 ), -p4b.get( 2 ),
348 -p4b.get( 3 ) );
349
350
351
352 p4xhadron = p4s + p4q;
353 xhadronMass = p4xhadron.
mass();
354
355
356 }
357
358
359
361
362
363
365 {
368 }
369
370
371
372 else
373 {
376 }
377
378 return;
379}
character *LEPTONflag integer iresonances real zeta5 real adp3 real large_3 real zeta5 common params adp3 common switch large_3 common lepton LEPTONflag common RESFIT IRESON common RES iresonances common alpgmu era0 common physparams ERMW common leptomass ml
EvtDiracSpinor boostTo(const EvtDiracSpinor &sp, const EvtVector4R p4)
ostream & report(Severity severity, const char *facility)
double sin(const BesAngle a)
double cos(const BesAngle a)
static const double twoPi
static void findMasses(EvtParticle *p, int ndaugs, EvtId daugs[10], double masses[10])
static double PhaseSpace(int ndaug, double mass[30], EvtVector4R p4[30], double mp)
static EvtId getId(const std::string &name)
void makeDaughters(int ndaug, EvtId *id)
virtual void init(EvtId part_n, const EvtVector4R &p4)=0
EvtParticle * getDaug(int i)