164 EvtParticle *xuhad(
nullptr ), *lepton(
nullptr ), *neutrino(
nullptr );
170 double mB, ml, xlow, xhigh, qplus;
176 const double lp2epsilon = -10;
200 while ( kplus >= xhigh || kplus <= xlow ||
202 kplus >= mB / 2 -
m_mb +
205 kplus = xlow + kplus * ( xhigh - xlow );
207 qplus = mB -
m_mb - kplus;
208 if ( ( mB - qplus ) / 2. <= ml )
216 p2 = pow( 10, lp2epsilon * p2 );
218 El = x * ( mB - qplus ) / 2;
219 if ( El > ml && El < mB / 2 ) {
220 Eh = z * ( mB - qplus ) / 2 + qplus;
221 if ( Eh > 0 && Eh < mB ) {
222 sh = p2 * pow( mB - qplus, 2 ) +
223 2 * qplus * ( Eh - qplus ) + qplus * qplus;
225 mB * mB + sh - 2 * mB * Eh > ml * ml ) {
233 <<
"EvtVubHybrid decay probability > 1 found: "
244 q2 = mB * mB + sh - 2 * mB * Eh;
276 sttmp = sqrt( 1 - ctH * ctH );
277 ptmp = sqrt( Eh * Eh - sh );
278 double pHB[4] = { Eh, ptmp * sttmp * cos( phH ), ptmp * sttmp * sin( phH ),
280 p4.
set( pHB[0], pHB[1], pHB[2], pHB[3] );
281 xuhad->init(
getDaug( 0 ), p4 );
297 xuhad->setLifetime( qplus / 10000. );
303 double pWB[4] = { mB - Eh, -pHB[1], -pHB[2], -pHB[3] };
308 double mW2 = mB * mB + sh - 2 * mB * Eh;
309 double beta = ptmp / pWB[0];
310 double gamma = pWB[0] / sqrt( mW2 );
314 ptmp = ( mW2 - ml * ml ) / 2 / sqrt( mW2 );
315 pLW[0] = sqrt( ml * ml + ptmp * ptmp );
317 double ctL = ( El - gamma * pLW[0] ) / beta / gamma / ptmp;
322 sttmp = sqrt( 1 - ctL * ctL );
325 double xW[3] = { -pWB[2], pWB[1], 0 };
327 double zW[3] = { pWB[1] / apWB, pWB[2] / apWB, pWB[3] / apWB };
329 double lx = sqrt( xW[0] * xW[0] + xW[1] * xW[1] );
330 for ( j = 0; j < 2; j++ )
334 double yW[3] = { -pWB[1] * pWB[3], -pWB[2] * pWB[3],
335 pWB[1] * pWB[1] + pWB[2] * pWB[2] };
336 double ly = sqrt( yW[0] * yW[0] + yW[1] * yW[1] + yW[2] * yW[2] );
337 for ( j = 0; j < 3; j++ )
343 for ( j = 0; j < 3; j++ )
344 pLW[j + 1] = sttmp * cos( phL ) * ptmp * xW[j] +
345 sttmp * sin( phL ) * ptmp * yW[j] + ctL * ptmp * zW[j];
353 double appLB = beta * gamma * pLW[0] + gamma * ctL * apLW;
355 ptmp = sqrt( El * El - ml * ml );
356 double ctLL = appLB / ptmp;
363 double pLB[4] = { El, 0, 0, 0 };
364 double pNB[4] = { pWB[0] - El, 0, 0, 0 };
366 for ( j = 1; j < 4; j++ ) {
367 pLB[j] = pLW[j] + ( ctLL * ptmp - ctL * apLW ) / apWB * pWB[j];
368 pNB[j] = pWB[j] - pLB[j];
371 p4.
set( pLB[0], pLB[1], pLB[2], pLB[3] );
372 lepton->init(
getDaug( 1 ), p4 );
374 p4.
set( pNB[0], pNB[1], pNB[2], pNB[3] );
virtual void init(EvtId part_n, const EvtVector4R &p4)=0
double initializePhaseSpace(size_t numdaughter, const EvtId *daughters, bool forceResetMasses=false, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)
EvtParticle * getDaug(const int i)