224 dirac_part->
init( parent, p_init );
233 listdaug[0] = baryon;
234 listdaug[1] = lepton;
235 listdaug[2] = nudaug;
237 amp.
init( parent, 3, listdaug );
240 daughter = root_part->
getDaug( 0 );
242 trino = root_part->
getDaug( 2 );
256 double m = root_part->
mass();
261 double q2, elepton, plepton;
263 double erho, prho, costl;
265 double maxfoundprob = 0.0;
269 for ( massiter = 0; massiter < 3; massiter++ ) {
273 if ( massiter == 1 ) {
276 if ( massiter == 2 ) {
280 q2max = ( m - mass[0] ) * ( m - mass[0] );
284 for ( i = 0; i < 25; i++ ) {
285 q2 = ( ( i + 0.5 ) * q2max ) / 25.0;
287 erho = ( m * m + mass[0] * mass[0] - q2 ) / ( 2.0 * m );
289 prho = sqrt( erho * erho - mass[0] * mass[0] );
291 p4baryon.
set( erho, 0.0, 0.0, -1.0 * prho );
292 p4w.
set( m - erho, 0.0, 0.0, prho );
295 elepton = ( q2 + mass[1] * mass[1] ) / ( 2.0 * sqrt( q2 ) );
296 plepton = sqrt( elepton * elepton - mass[1] * mass[1] );
300 for ( j = 0; j < 3; j++ ) {
301 costl = 0.99 * ( j - 1.0 );
305 p4lepton.
set( elepton, 0.0, plepton * sqrt( 1.0 - costl * costl ),
307 p4nu.
set( plepton, 0.0,
308 -1.0 * plepton * sqrt( 1.0 - costl * costl ),
309 -1.0 * plepton * costl );
311 EvtVector4R boost( ( m - erho ), 0.0, 0.0, 1.0 * prho );
312 p4lepton =
boostTo( p4lepton, boost );
317 daughter->
init( baryon, p4baryon );
318 lep->
init( lepton, p4lepton );
319 trino->
init( nudaug, p4nu );
321 CalcAmp( root_part, amp, FormFactors, r00, r01, r10, r11 );
335 double a = probctl[1];
336 double b = 0.5 * ( probctl[2] - probctl[0] );
337 double c = 0.5 * ( probctl[2] + probctl[0] ) - probctl[1];
340 if ( probctl[1] > prob )
342 if ( probctl[2] > prob )
345 if ( fabs( c ) > 1e-20 ) {
346 double ctlx = -0.5 * b / c;
347 if ( fabs( ctlx ) < 1.0 ) {
348 double probtmp = a + b * ctlx + c * ctlx * ctlx;
349 if ( probtmp > prob )
359 if ( prob > maxfoundprob ) {
421 rho.
set( 0, 0, r00 );
422 rho.
set( 0, 1, r01 );
424 rho.
set( 1, 0, r10 );
425 rho.
set( 1, 1, r11 );
428 double pmag = vector4P.
d3mag();
429 double cosTheta = pmag > 0.0 ? vector4P.
get( 3 ) / pmag : 1.0;
431 double theta = acos( cosTheta );
432 double phi = atan2( vector4P.
get( 2 ), vector4P.
get( 1 ) );
439 p4b.
set( parent->
mass(), 0.0, 0.0, 0.0 );
447 double q2 = q.
mass2();
459 double f1, f2, f3, g1, g2, g3;
460 FormFactors->
getdiracff( par_num, bar_num, q2, baryonmass, &f1, &f2,
461 &f3, &g1, &g2, &g3 );
463 const double form_fact[6] = { f1, f2, f3, g1, g2, g3 };
468 if ( l_num == EM || l_num == MUM || l_num == TAUM ) {
474 }
else if ( l_num == EP || l_num == MUP || l_num == TAUP ) {
496 if ( ( par_num == LAMB && bar_num == LAMCP ) ||
497 ( par_num == LAMBB && bar_num == LAMCM ) ||
498 ( par_num == LAMB && bar_num == PRO ) ||
499 ( par_num == LAMBB && bar_num == PROB ) ||
500 ( par_num == LAMB && bar_num == N1440 ) ||
501 ( par_num == LAMBB && bar_num == N1440B ) ||
502 ( par_num == LAMB && bar_num == N1710 ) ||
503 ( par_num == LAMBB && bar_num == N1710B )
507 if ( bar_num == LAMCP || bar_num == PRO || bar_num == N1440 ||
510 else if ( bar_num == LAMCM || bar_num == PROB ||
511 bar_num == N1440B || bar_num == N1710B )
515 parent->
sp( 0 ), p4b, p4daught, form_fact,
518 parent->
sp( 1 ), p4b, p4daught, form_fact,
521 parent->
sp( 0 ), p4b, p4daught, form_fact,
524 parent->
sp( 1 ), p4b, p4daught, form_fact,
529 else if ( ( par_num == LAMB && bar_num == LAMC1P ) ||
530 ( par_num == LAMBB && bar_num == LAMC1M ) ||
531 ( par_num == LAMB && bar_num == N1535 ) ||
532 ( par_num == LAMBB && bar_num == N1535B ) ||
533 ( par_num == LAMB && bar_num == N1650 ) ||
534 ( par_num == LAMBB && bar_num == N1650B ) ) {
536 if ( bar_num == LAMC1P || bar_num == N1535 || bar_num == N1650 )
538 else if ( bar_num == LAMC1M || bar_num == N1535B || bar_num == N1650B )
543 p4b, p4daught, form_fact, pflag );
546 p4b, p4daught, form_fact, pflag );
549 p4b, p4daught, form_fact, pflag );
552 p4b, p4daught, form_fact, pflag );
558 <<
"Dirac semilep. baryon current "
559 <<
"not implemented for this decay sequence." << std::endl;
563 amp.
vertex( 0, 0, 0, l1 * b11 );
564 amp.
vertex( 0, 0, 1, l2 * b11 );
566 amp.
vertex( 1, 0, 0, l1 * b21 );
567 amp.
vertex( 1, 0, 1, l2 * b21 );
569 amp.
vertex( 0, 1, 0, l1 * b12 );
570 amp.
vertex( 0, 1, 1, l2 * b12 );
572 amp.
vertex( 1, 1, 0, l1 * b22 );
573 amp.
vertex( 1, 1, 1, l2 * b22 );
582 double f1, f2, f3, f4, g1, g2, g3, g4;
583 FormFactors->
getraritaff( par_num, bar_num, q2, baryonmass, &f1, &f2,
584 &f3, &f4, &g1, &g2, &g3, &g4 );
586 const double form_fact[8] = { f1, f2, f3, f4, g1, g2, g3, g4 };
588 EvtVector4C b11, b12, b21, b22, b13, b23, b14, b24, l1, l2;
591 if ( l_num == EM || l_num == MUM || l_num == TAUM ) {
597 }
else if ( l_num == EP || l_num == MUP || l_num == TAUP ) {
614 if ( ( par_num == LAMB && bar_num == LAMC2P ) ||
615 ( par_num == LAMB && bar_num == N1720 ) ||
616 ( par_num == LAMB && bar_num == N1520 ) ||
617 ( par_num == LAMB && bar_num == N1700 ) ||
618 ( par_num == LAMB && bar_num == N1875 ) ||
619 ( par_num == LAMB && bar_num == N1900 ) ) {
622 }
else if ( ( par_num == LAMBB && bar_num == LAMC2M ) ||
623 ( par_num == LAMBB && bar_num == N1520B ) ||
624 ( par_num == LAMBB && bar_num == N1700B ) ||
625 ( par_num == LAMBB && bar_num == N1875B ) ) {
630 else if ( ( par_num == LAMBB && bar_num == N1720B ) ||
631 ( par_num == LAMBB && bar_num == N1900B ) ) {
635 <<
"Rarita-Schwinger semilep. baryon current "
636 <<
"not implemented for this decay sequence." << std::endl;
642 parent->
sp( 0 ), p4b, p4daught,
645 parent->
sp( 1 ), p4b, p4daught,
649 parent->
sp( 0 ), p4b, p4daught,
652 parent->
sp( 1 ), p4b, p4daught,
656 parent->
sp( 0 ), p4b, p4daught,
659 parent->
sp( 1 ), p4b, p4daught,
663 parent->
sp( 0 ), p4b, p4daught,
666 parent->
sp( 1 ), p4b, p4daught,
669 amp.
vertex( 0, 0, 0, l1 * b11 );
670 amp.
vertex( 0, 0, 1, l2 * b11 );
672 amp.
vertex( 1, 0, 0, l1 * b21 );
673 amp.
vertex( 1, 0, 1, l2 * b21 );
675 amp.
vertex( 0, 1, 0, l1 * b12 );
676 amp.
vertex( 0, 1, 1, l2 * b12 );
678 amp.
vertex( 1, 1, 0, l1 * b22 );
679 amp.
vertex( 1, 1, 1, l2 * b22 );
681 amp.
vertex( 0, 2, 0, l1 * b13 );
682 amp.
vertex( 0, 2, 1, l2 * b13 );
684 amp.
vertex( 1, 2, 0, l1 * b23 );
685 amp.
vertex( 1, 2, 1, l2 * b23 );
687 amp.
vertex( 0, 3, 0, l1 * b14 );
688 amp.
vertex( 0, 3, 1, l2 * b14 );
690 amp.
vertex( 1, 3, 0, l1 * b24 );
691 amp.
vertex( 1, 3, 1, l2 * b24 );
void init(EvtId part_n, const EvtVector4R &p4) override
void setSpinDensityForwardHelicityBasis(const EvtSpinDensity &rho)
virtual void init(EvtId part_n, const EvtVector4R &p4)=0
virtual EvtRaritaSchwinger spRSParent(int) const
virtual EvtDiracSpinor spParentNeutrino() const
virtual EvtDiracSpinor spParent(int) const
const EvtVector4R & getP4() const
EvtParticle * getDaug(const int i)
virtual EvtDiracSpinor sp(int) const
void makeDaughters(size_t ndaug, const EvtId *id)