54 double q2 = ( q.
mass2() );
56 double f1v, f1a, f2v, f2a;
60 q2, m_meson, &f1v, &f1a, &f2v, &f2a );
63 p4b.
set( parent->
mass(), 0.0, 0.0, 0.0 );
154 if ( l_num == EM || l_num == MUM || l_num == TAUM ) {
160 if ( l_num == EP || l_num == MUP || l_num == TAUP ) {
167 <<
"Wrong lepton number" << endl;
171 amp.
vertex( 0, 0, 0, l1.
cont( temp_00_term1 + temp_00_term2 ) );
172 amp.
vertex( 0, 0, 1, l2.
cont( temp_00_term1 + temp_00_term2 ) );
174 amp.
vertex( 0, 1, 0, l1.
cont( temp_01_term1 + temp_01_term2 ) );
175 amp.
vertex( 0, 1, 1, l2.
cont( temp_01_term1 + temp_01_term2 ) );
177 amp.
vertex( 1, 0, 0, l1.
cont( temp_10_term1 + temp_10_term2 ) );
178 amp.
vertex( 1, 0, 1, l2.
cont( temp_10_term1 + temp_10_term2 ) );
180 amp.
vertex( 1, 1, 0, l1.
cont( temp_11_term1 + temp_11_term2 ) );
181 amp.
vertex( 1, 1, 1, l2.
cont( temp_11_term1 + temp_11_term2 ) );
221 dirac_part->
init( parent, p_init );
230 listdaug[0] = baryon;
231 listdaug[1] = lepton;
232 listdaug[2] = nudaug;
234 amp.
init( parent, 3, listdaug );
237 daughter = root_part->
getDaug( 0 );
239 trino = root_part->
getDaug( 2 );
253 double m = root_part->
mass();
258 double q2, elepton, plepton;
260 double erho, prho, costl;
262 double maxfoundprob = 0.0;
266 for ( massiter = 0; massiter < 3; massiter++ ) {
270 if ( massiter == 1 ) {
273 if ( massiter == 2 ) {
277 q2max = ( m - mass[0] ) * ( m - mass[0] );
281 for ( i = 0; i < 25; i++ ) {
282 q2 = ( ( i + 0.5 ) * q2max ) / 25.0;
284 erho = ( m * m + mass[0] * mass[0] - q2 ) / ( 2.0 * m );
286 prho = sqrt( erho * erho - mass[0] * mass[0] );
288 p4baryon.
set( erho, 0.0, 0.0, -1.0 * prho );
289 p4w.
set( m - erho, 0.0, 0.0, prho );
292 elepton = ( q2 + mass[1] * mass[1] ) / ( 2.0 * sqrt( q2 ) );
293 plepton = sqrt( elepton * elepton - mass[1] * mass[1] );
297 for ( j = 0; j < 3; j++ ) {
298 costl = 0.99 * ( j - 1.0 );
302 p4lepton.
set( elepton, 0.0, plepton * sqrt( 1.0 - costl * costl ),
304 p4nu.
set( plepton, 0.0,
305 -1.0 * plepton * sqrt( 1.0 - costl * costl ),
306 -1.0 * plepton * costl );
308 EvtVector4R boost( ( m - erho ), 0.0, 0.0, 1.0 * prho );
309 p4lepton =
boostTo( p4lepton, boost );
314 daughter->
init( baryon, p4baryon );
315 lep->
init( lepton, p4lepton );
316 trino->
init( nudaug, p4nu );
318 CalcAmp( root_part, amp, FormFactors, r00, r01, r10, r11 );
332 double a = probctl[1];
333 double b = 0.5 * ( probctl[2] - probctl[0] );
334 double c = 0.5 * ( probctl[2] + probctl[0] ) - probctl[1];
337 if ( probctl[1] > prob )
339 if ( probctl[2] > prob )
342 if ( fabs( c ) > 1e-20 ) {
343 double ctlx = -0.5 * b / c;
344 if ( fabs( ctlx ) < 1.0 ) {
345 double probtmp = a + b * ctlx + c * ctlx * ctlx;
346 if ( probtmp > prob )
356 if ( prob > maxfoundprob ) {
399 rho.
set( 0, 0, r00 );
400 rho.
set( 0, 1, r01 );
402 rho.
set( 1, 0, r10 );
403 rho.
set( 1, 1, r11 );
406 double pmag = vector4P.
d3mag();
407 double cosTheta = pmag > 0.0 ? vector4P.
get( 3 ) / pmag : 0.0;
409 double theta = acos( cosTheta );
410 double phi = atan2( vector4P.
get( 2 ), vector4P.
get( 1 ) );
417 p4b.
set( parent->
mass(), 0.0, 0.0, 0.0 );
425 double q2 = q.
mass2();
437 double f1, f2, f3, g1, g2, g3;
438 FormFactors->
getdiracff( par_num, bar_num, q2, baryonmass, &f1, &f2,
439 &f3, &g1, &g2, &g3 );
441 const double form_fact[6] = { f1, f2, f3, g1, g2, g3 };
446 if ( l_num == EM || l_num == MUM || l_num == TAUM ) {
452 }
else if ( l_num == EP || l_num == MUP || l_num == TAUP ) {
474 if ( ( par_num == LAMB && bar_num == LAMCP ) ||
475 ( par_num == LAMBB && bar_num == LAMCM ) ) {
477 if ( bar_num == LAMCP )
479 else if ( bar_num == LAMCM )
483 parent->
sp( 0 ), p4b, p4daught, form_fact,
486 parent->
sp( 1 ), p4b, p4daught, form_fact,
489 parent->
sp( 0 ), p4b, p4daught, form_fact,
492 parent->
sp( 1 ), p4b, p4daught, form_fact,
497 else if ( ( par_num == LAMB && bar_num == LAMC1P ) ||
498 ( par_num == LAMBB && bar_num == LAMC1M ) ) {
500 if ( bar_num == LAMC1P )
502 else if ( bar_num == LAMC1M )
507 p4b, p4daught, form_fact, pflag );
510 p4b, p4daught, form_fact, pflag );
513 p4b, p4daught, form_fact, pflag );
516 p4b, p4daught, form_fact, pflag );
522 <<
"Dirac semilep. baryon current "
523 <<
"not implemented for this decay sequence." << std::endl;
527 amp.
vertex( 0, 0, 0, l1 * b11 );
528 amp.
vertex( 0, 0, 1, l2 * b11 );
530 amp.
vertex( 1, 0, 0, l1 * b21 );
531 amp.
vertex( 1, 0, 1, l2 * b21 );
533 amp.
vertex( 0, 1, 0, l1 * b12 );
534 amp.
vertex( 0, 1, 1, l2 * b12 );
536 amp.
vertex( 1, 1, 0, l1 * b22 );
537 amp.
vertex( 1, 1, 1, l2 * b22 );
546 double f1, f2, f3, f4, g1, g2, g3, g4;
547 FormFactors->
getraritaff( par_num, bar_num, q2, baryonmass, &f1, &f2,
548 &f3, &f4, &g1, &g2, &g3, &g4 );
550 const double form_fact[8] = { f1, f2, f3, f4, g1, g2, g3, g4 };
552 EvtVector4C b11, b12, b21, b22, b13, b23, b14, b24, l1, l2;
555 if ( l_num == EM || l_num == MUM || l_num == TAUM ) {
561 }
else if ( l_num == EP || l_num == MUP || l_num == TAUP ) {
578 if ( par_num == LAMB && bar_num == LAMC2P ) {
581 }
else if ( par_num == LAMBB && bar_num == LAMC2M ) {
586 <<
"Rarita-Schwinger semilep. baryon current "
587 <<
"not implemented for this decay sequence." << std::endl;
593 parent->
sp( 0 ), p4b, p4daught,
596 parent->
sp( 1 ), p4b, p4daught,
600 parent->
sp( 0 ), p4b, p4daught,
603 parent->
sp( 1 ), p4b, p4daught,
607 parent->
sp( 0 ), p4b, p4daught,
610 parent->
sp( 1 ), p4b, p4daught,
614 parent->
sp( 0 ), p4b, p4daught,
617 parent->
sp( 1 ), p4b, p4daught,
620 amp.
vertex( 0, 0, 0, l1 * b11 );
621 amp.
vertex( 0, 0, 1, l2 * b11 );
623 amp.
vertex( 1, 0, 0, l1 * b21 );
624 amp.
vertex( 1, 0, 1, l2 * b21 );
626 amp.
vertex( 0, 1, 0, l1 * b12 );
627 amp.
vertex( 0, 1, 1, l2 * b12 );
629 amp.
vertex( 1, 1, 0, l1 * b22 );
630 amp.
vertex( 1, 1, 1, l2 * b22 );
632 amp.
vertex( 0, 2, 0, l1 * b13 );
633 amp.
vertex( 0, 2, 1, l2 * b13 );
635 amp.
vertex( 1, 2, 0, l1 * b23 );
636 amp.
vertex( 1, 2, 1, l2 * b23 );
638 amp.
vertex( 0, 3, 0, l1 * b14 );
639 amp.
vertex( 0, 3, 1, l2 * b14 );
641 amp.
vertex( 1, 3, 0, l1 * b24 );
642 amp.
vertex( 1, 3, 1, l2 * b24 );
671 else if ( pflag == 3 ) {
700 EvtVector4C current = ( ff[0] * t[0] + ff[1] * t[1] + ff[2] * t[2] -
701 ff[3] * t[3] - ff[4] * t[4] - ff[5] * t[5] );
731 id.
setdiag( 1.0, 1.0, 1.0, 1.0 );
734 for (
int i = 0; i < 4; i++ ) {
739 for (
int i = 0; i < 4; i++ ) {
750 ( parent / parent.
mass() );
755 ( daught / daught.
mass() );
758 t[3] = cg0 * (
id.cont2( v1 ) );
768 ( parent / parent.
mass() );
774 ( daught / daught.
mass() );
777 t[7] = cg5 * (
id.cont2( v2 ) );
780 EvtVector4C current = ( ff[0] * t[0] + ff[1] * t[1] + ff[2] * t[2] +
781 ff[3] * t[3] - ff[4] * t[4] - ff[5] * t[5] -
782 ff[6] * t[6] - ff[7] * t[7] );
EvtVector4C EvtLeptonVACurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
EvtVector4C EvtLeptonACurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
EvtComplex EvtLeptonSCurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
EvtVector4C EvtLeptonVCurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
EvtComplex EvtLeptonPCurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
EvtRaritaSchwinger boostTo(const EvtRaritaSchwinger &rs, const EvtVector4R p4)
std::ostream & EvtGenReport(EvtGenSeverity severity, const char *facility=nullptr)
void vertex(const EvtComplex &)
EvtSpinDensity getSpinDensity() const
void init(EvtId p, int ndaug, const EvtId *daug)
void init(EvtId part_n, const EvtVector4R &p4) override
void set_spinor(int i, const EvtComplex &sp)
static const EvtGammaMatrix & g0()
static const EvtGammaMatrix & g2()
static const EvtGammaMatrix & g1()
static const EvtGammaMatrix & g3()
static const EvtGammaMatrix & g5()
static double getWidth(EvtId i)
static EvtSpinType::spintype getSpinType(EvtId i)
static double getMaxMass(EvtId i)
static double getMass(EvtId i)
static double getMinMass(EvtId i)
static EvtId getId(const std::string &name)
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
int getSpinStates() const
void setDiagonalSpinDensity()
const EvtVector4R & getP4() const
EvtParticle * getDaug(const int i)
virtual EvtDiracSpinor sp(int) const
EvtVector4R getP4Lab() const
void makeDaughters(size_t ndaug, const EvtId *id)
EvtDiracSpinor getSpinor(int i) const
EvtVector4C getVector(int i) const
double CalcMaxProb(EvtId parent, EvtId meson, EvtId lepton, EvtId nudaug, EvtSemiLeptonicFF *FormFactors, EvtComplex r00, EvtComplex r01, EvtComplex r10, EvtComplex r11)
EvtVector4C EvtBaryonVACurrent(const EvtDiracSpinor &Bf, const EvtDiracSpinor &Bi, EvtVector4R parent, EvtVector4R daught, const double *ff, int pflag)
void CalcAmp(EvtParticle *parent, EvtAmp &, EvtSemiLeptonicFF *FormFactors) override
EvtVector4C EvtBaryonVARaritaCurrent(const EvtRaritaSchwinger &Bf_vect, const EvtDiracSpinor &Bi, EvtVector4R parent, EvtVector4R daught, const double *ff, int pflag)
virtual void getraritaff(EvtId parent, EvtId daught, double q2, double mass, double *f1, double *f2, double *f3, double *f4, double *g1, double *g2, double *g3, double *g4)=0
virtual void getdiracff(EvtId parent, EvtId daught, double q2, double mass, double *f1, double *f2, double *f3, double *g1, double *g2, double *g3)=0
virtual void getbaryonff(EvtId parent, EvtId daught, double t, double m_meson, double *f1v, double *f1a, double *f2v, double *f2a)=0
double normalizedProb(const EvtSpinDensity &d)
void set(int i, int j, const EvtComplex &rhoij)
void setdiag(double t00, double t11, double t22, double t33)
void set(int, const EvtComplex &)
EvtComplex cont(const EvtVector4C &v4) const
void set(int i, double d)