165 EvtParticle *xuhad(
nullptr ), *lepton(
nullptr ), *neutrino(
nullptr );
171 double mB, ml, xlow, xhigh, qplus;
175 const double lp2epsilon = -10;
199 while ( kplus >= xhigh || kplus <= xlow ||
201 kplus >= mB / 2 -
m_mb +
204 kplus = xlow + kplus * ( xhigh - xlow );
206 qplus = mB -
m_mb - kplus;
207 if ( ( mB - qplus ) / 2. <= ml )
215 p2 = pow( 10.0, lp2epsilon * p2 );
217 El = x * ( mB - qplus ) / 2;
218 if ( El > ml && El < mB / 2 ) {
219 Eh = z * ( mB - qplus ) / 2 + qplus;
220 if ( Eh > 0 && Eh < mB ) {
221 sh = p2 * pow( mB - qplus, 2 ) +
222 2 * qplus * ( Eh - qplus ) + qplus * qplus;
224 mB * mB + sh - 2 * mB * Eh > ml * ml ) {
232 <<
"EvtVub decay probability > 1 found: " << y
243 double m = sqrt( sh );
245 while ( j < m_nbins && m >
m_masses[j] )
272 sttmp = sqrt( 1 - ctH * ctH );
273 ptmp = sqrt( Eh * Eh - sh );
274 double pHB[4] = { Eh, ptmp * sttmp * cos( phH ), ptmp * sttmp * sin( phH ),
276 p4.
set( pHB[0], pHB[1], pHB[2], pHB[3] );
277 xuhad->init(
getDaug( 0 ), p4 );
293 xuhad->setLifetime( qplus / 10000. );
299 double pWB[4] = { mB - Eh, -pHB[1], -pHB[2], -pHB[3] };
304 double mW2 = mB * mB + sh - 2 * mB * Eh;
305 double beta = ptmp / pWB[0];
306 double gamma = pWB[0] / sqrt( mW2 );
310 ptmp = ( mW2 - ml * ml ) / 2 / sqrt( mW2 );
311 pLW[0] = sqrt( ml * ml + ptmp * ptmp );
313 double ctL = ( El - gamma * pLW[0] ) / beta / gamma / ptmp;
318 sttmp = sqrt( 1 - ctL * ctL );
321 double xW[3] = { -pWB[2], pWB[1], 0 };
323 double zW[3] = { pWB[1] / apWB, pWB[2] / apWB, pWB[3] / apWB };
325 double lx = sqrt( xW[0] * xW[0] + xW[1] * xW[1] );
326 for ( j = 0; j < 2; j++ )
330 double yW[3] = { -pWB[1] * pWB[3], -pWB[2] * pWB[3],
331 pWB[1] * pWB[1] + pWB[2] * pWB[2] };
332 double ly = sqrt( yW[0] * yW[0] + yW[1] * yW[1] + yW[2] * yW[2] );
333 for ( j = 0; j < 3; j++ )
339 for ( j = 0; j < 3; j++ )
340 pLW[j + 1] = sttmp * cos( phL ) * ptmp * xW[j] +
341 sttmp * sin( phL ) * ptmp * yW[j] + ctL * ptmp * zW[j];
346 double appLB = beta * gamma * pLW[0] + gamma * ctL * apLW;
348 ptmp = sqrt( El * El - ml * ml );
349 double ctLL = appLB / ptmp;
356 double pLB[4] = { El, 0, 0, 0 };
357 double pNB[4] = { pWB[0] - El, 0, 0, 0 };
359 for ( j = 1; j < 4; j++ ) {
360 pLB[j] = pLW[j] + ( ctLL * ptmp - ctL * apLW ) / apWB * pWB[j];
361 pNB[j] = pWB[j] - pLB[j];
364 p4.
set( pLB[0], pLB[1], pLB[2], pLB[3] );
365 lepton->init(
getDaug( 1 ), p4 );
367 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)