|
EvtGen
2.0.0
Monte Carlo generator of particle decays, in particular the weak decays of heavy flavour particles such as B mesons.
|
Go to the documentation of this file. 55 double q2 = ( q. mass2() ); 57 double f1v, f1a, f2v, f2a; 61 q2, m_meson, &f1v, &f1a, &f2v, &f2a ); 64 p4b. set( parent-> mass(), 0.0, 0.0, 0.0 ); 155 if ( l_num == EM || l_num == MUM || l_num == TAUM ) { 161 if ( l_num == EP || l_num == MUP || l_num == TAUP ) { 168 << "Wrong lepton number" << endl; 172 amp. vertex( 0, 0, 0, l1. cont( temp_00_term1 + temp_00_term2 ) ); 173 amp. vertex( 0, 0, 1, l2. cont( temp_00_term1 + temp_00_term2 ) ); 175 amp. vertex( 0, 1, 0, l1. cont( temp_01_term1 + temp_01_term2 ) ); 176 amp. vertex( 0, 1, 1, l2. cont( temp_01_term1 + temp_01_term2 ) ); 178 amp. vertex( 1, 0, 0, l1. cont( temp_10_term1 + temp_10_term2 ) ); 179 amp. vertex( 1, 0, 1, l2. cont( temp_10_term1 + temp_10_term2 ) ); 181 amp. vertex( 1, 1, 0, l1. cont( temp_11_term1 + temp_11_term2 ) ); 182 amp. vertex( 1, 1, 1, l2. cont( temp_11_term1 + temp_11_term2 ) ); 222 dirac_part-> init( parent, p_init ); 231 listdaug[0] = baryon; 232 listdaug[1] = lepton; 233 listdaug[2] = nudaug; 235 amp. init( parent, 3, listdaug ); 238 daughter = root_part-> getDaug( 0 ); 240 trino = root_part-> getDaug( 2 ); 254 double m = root_part-> mass(); 259 double q2, elepton, plepton; 261 double erho, prho, costl; 263 double maxfoundprob = 0.0; 267 for ( massiter = 0; massiter < 3; massiter++ ) { 271 if ( massiter == 1 ) { 274 if ( massiter == 2 ) { 278 q2max = ( m - mass[0] ) * ( m - mass[0] ); 282 for ( i = 0; i < 25; i++ ) { 283 q2 = ( ( i + 0.5 ) * q2max ) / 25.0; 285 erho = ( m * m + mass[0] * mass[0] - q2 ) / ( 2.0 * m ); 287 prho = sqrt( erho * erho - mass[0] * mass[0] ); 289 p4baryon. set( erho, 0.0, 0.0, -1.0 * prho ); 290 p4w. set( m - erho, 0.0, 0.0, prho ); 293 elepton = ( q2 + mass[1] * mass[1] ) / ( 2.0 * sqrt( q2 ) ); 294 plepton = sqrt( elepton * elepton - mass[1] * mass[1] ); 298 for ( j = 0; j < 3; j++ ) { 299 costl = 0.99 * ( j - 1.0 ); 303 p4lepton. set( elepton, 0.0, plepton * sqrt( 1.0 - costl * costl ), 305 p4nu. set( plepton, 0.0, 306 -1.0 * plepton * sqrt( 1.0 - costl * costl ), 307 -1.0 * plepton * costl ); 309 EvtVector4R boost( ( m - erho ), 0.0, 0.0, 1.0 * prho ); 310 p4lepton = boostTo( p4lepton, boost ); 315 daughter-> init( baryon, p4baryon ); 316 lep-> init( lepton, p4lepton ); 317 trino-> init( nudaug, p4nu ); 319 CalcAmp( root_part, amp, FormFactors, r00, r01, r10, r11 ); 333 double a = probctl[1]; 334 double b = 0.5 * ( probctl[2] - probctl[0] ); 335 double c = 0.5 * ( probctl[2] + probctl[0] ) - probctl[1]; 338 if ( probctl[1] > prob ) 340 if ( probctl[2] > prob ) 343 if ( fabs( c ) > 1e-20 ) { 344 double ctlx = -0.5 * b / c; 345 if ( fabs( ctlx ) < 1.0 ) { 346 double probtmp = a + b * ctlx + c * ctlx * ctlx; 347 if ( probtmp > prob ) 357 if ( prob > maxfoundprob ) { 400 rho. set( 0, 0, r00 ); 401 rho. set( 0, 1, r01 ); 403 rho. set( 1, 0, r10 ); 404 rho. set( 1, 1, r11 ); 407 double pmag = vector4P. d3mag(); 408 double cosTheta = vector4P. get( 3 ) / pmag; 410 double theta = acos( cosTheta ); 411 double phi = atan2( vector4P. get( 2 ), vector4P. get( 1 ) ); 418 p4b. set( parent-> mass(), 0.0, 0.0, 0.0 ); 426 double q2 = q. mass2(); 438 double f1, f2, f3, g1, g2, g3; 439 FormFactors-> getdiracff( par_num, bar_num, q2, baryonmass, &f1, &f2, 440 &f3, &g1, &g2, &g3 ); 442 const double form_fact[6] = {f1, f2, f3, g1, g2, g3}; 447 if ( l_num == EM || l_num == MUM || l_num == TAUM ) { 453 } else if ( l_num == EP || l_num == MUP || l_num == TAUP ) { 475 if ( ( par_num == LAMB && bar_num == LAMCP ) || 476 ( par_num == LAMBB && bar_num == LAMCM ) ) { 478 if ( bar_num == LAMCP ) 480 else if ( bar_num == LAMCM ) 484 parent-> sp( 0 ), p4b, p4daught, form_fact, 487 parent-> sp( 1 ), p4b, p4daught, form_fact, 490 parent-> sp( 0 ), p4b, p4daught, form_fact, 493 parent-> sp( 1 ), p4b, p4daught, form_fact, 498 else if ( ( par_num == LAMB && bar_num == LAMC1P ) || 499 ( par_num == LAMBB && bar_num == LAMC1M ) ) { 501 if ( bar_num == LAMC1P ) 503 else if ( bar_num == LAMC1M ) 508 p4b, p4daught, form_fact, pflag ); 511 p4b, p4daught, form_fact, pflag ); 514 p4b, p4daught, form_fact, pflag ); 517 p4b, p4daught, form_fact, pflag ); 523 << "Dirac semilep. baryon current " 524 << "not implemented for this decay sequence." << std::endl; 528 amp. vertex( 0, 0, 0, l1 * b11 ); 529 amp. vertex( 0, 0, 1, l2 * b11 ); 531 amp. vertex( 1, 0, 0, l1 * b21 ); 532 amp. vertex( 1, 0, 1, l2 * b21 ); 534 amp. vertex( 0, 1, 0, l1 * b12 ); 535 amp. vertex( 0, 1, 1, l2 * b12 ); 537 amp. vertex( 1, 1, 0, l1 * b22 ); 538 amp. vertex( 1, 1, 1, l2 * b22 ); 547 double f1, f2, f3, f4, g1, g2, g3, g4; 548 FormFactors-> getraritaff( par_num, bar_num, q2, baryonmass, &f1, &f2, 549 &f3, &f4, &g1, &g2, &g3, &g4 ); 551 const double form_fact[8] = {f1, f2, f3, f4, g1, g2, g3, g4}; 555 EvtVector4C b11, b12, b21, b22, b13, b23, b14, b24, l1, l2; 558 if ( l_num == EM || l_num == MUM || l_num == TAUM ) { 564 } else if ( l_num == EP || l_num == MUP || l_num == TAUP ) { 581 if ( par_num == LAMB && bar_num == LAMC2P ) { 584 } else if ( par_num == LAMBB && bar_num == LAMC2M ) { 589 << "Rarita-Schwinger semilep. baryon current " 590 << "not implemented for this decay sequence." << std::endl; 596 parent-> sp( 0 ), p4b, p4daught, 599 parent-> sp( 1 ), p4b, p4daught, 603 parent-> sp( 0 ), p4b, p4daught, 606 parent-> sp( 1 ), p4b, p4daught, 610 parent-> sp( 0 ), p4b, p4daught, 613 parent-> sp( 1 ), p4b, p4daught, 617 parent-> sp( 0 ), p4b, p4daught, 620 parent-> sp( 1 ), p4b, p4daught, 623 amp. vertex( 0, 0, 0, l1 * b11 ); 624 amp. vertex( 0, 0, 1, l2 * b11 ); 626 amp. vertex( 1, 0, 0, l1 * b21 ); 627 amp. vertex( 1, 0, 1, l2 * b21 ); 629 amp. vertex( 0, 1, 0, l1 * b12 ); 630 amp. vertex( 0, 1, 1, l2 * b12 ); 632 amp. vertex( 1, 1, 0, l1 * b22 ); 633 amp. vertex( 1, 1, 1, l2 * b22 ); 635 amp. vertex( 0, 2, 0, l1 * b13 ); 636 amp. vertex( 0, 2, 1, l2 * b13 ); 638 amp. vertex( 1, 2, 0, l1 * b23 ); 639 amp. vertex( 1, 2, 1, l2 * b23 ); 641 amp. vertex( 0, 3, 0, l1 * b14 ); 642 amp. vertex( 0, 3, 1, l2 * b14 ); 644 amp. vertex( 1, 3, 0, l1 * b24 ); 645 amp. vertex( 1, 3, 1, l2 * b24 ); 674 else if ( pflag == 3 ) { 703 EvtVector4C current = ( ff[0] * t[0] + ff[1] * t[1] + ff[2] * t[2] - 704 ff[3] * t[3] - ff[4] * t[4] - ff[5] * t[5] ); 734 id. setdiag( 1.0, 1.0, 1.0, 1.0 ); 737 for ( int i = 0; i < 4; i++ ) { 742 for ( int i = 0; i < 4; i++ ) { 753 ( parent / parent. mass() ); 758 ( daught / daught. mass() ); 761 t[3] = cg0 * ( id.cont2( v1 ) ); 771 ( parent / parent. mass() ); 777 ( daught / daught. mass() ); 780 t[7] = cg5 * ( id.cont2( v2 ) ); 783 EvtVector4C current = ( ff[0] * t[0] + ff[1] * t[1] + ff[2] * t[2] + 784 ff[3] * t[3] - ff[4] * t[4] - ff[5] * t[5] - 785 ff[6] * t[6] - ff[7] * t[7] );
EvtVector4C EvtBaryonVACurrent(const EvtDiracSpinor &Bf, const EvtDiracSpinor &Bi, EvtVector4R parent, EvtVector4R daught, const double *ff, int pflag)
virtual EvtRaritaSchwinger spRSParent(int) const
void setdiag(double t00, double t11, double t22, double t33)
double CalcMaxProb(EvtId parent, EvtId meson, EvtId lepton, EvtId nudaug, EvtSemiLeptonicFF *FormFactors, EvtComplex r00, EvtComplex r01, EvtComplex r10, EvtComplex r11)
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
void CalcAmp(EvtParticle *parent, EvtAmp &, EvtSemiLeptonicFF *FormFactors) override
virtual EvtDiracSpinor sp(int) const
static EvtSpinType::spintype getSpinType(EvtId i)
EvtVector4R getP4Lab() const
void set(int, const EvtComplex &)
static const EvtGammaMatrix & g0()
EvtComplex EvtLeptonPCurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
std::ostream & EvtGenReport(EvtGenSeverity severity, const char *facility=0)
virtual void init(EvtId part_n, const EvtVector4R &p4)=0
void set_spinor(int i, const EvtComplex &sp)
int getSpinStates() const
void makeDaughters(unsigned int ndaug, EvtId *id)
void set(int i, double d)
EvtRaritaSchwinger boostTo(const EvtRaritaSchwinger &rs, const EvtVector4R p4)
void init(EvtId part_n, const EvtVector4R &p4) override
EvtSpinDensity getSpinDensity()
virtual EvtDiracSpinor spParent(int) const
EvtVector4C EvtLeptonACurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
void vertex(const EvtComplex &)
static const EvtGammaMatrix & g1()
EvtVector4C EvtBaryonVARaritaCurrent(const EvtRaritaSchwinger &Bf_vect, const EvtDiracSpinor &Bi, EvtVector4R parent, EvtVector4R daught, const double *ff, int pflag)
static double getMinMass(EvtId i)
static EvtId getId(const std::string &name)
const EvtVector4R & getP4() const
static const EvtGammaMatrix & g2()
void setSpinDensityForwardHelicityBasis(const EvtSpinDensity &rho)
static double getWidth(EvtId i)
static const EvtGammaMatrix & g3()
virtual EvtDiracSpinor spParentNeutrino() const
EvtVector4C EvtLeptonVACurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
void setDiagonalSpinDensity()
EvtParticle * getDaug(int i)
EvtVector4C getVector(int i) const
EvtVector4C EvtLeptonVCurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
void set(int i, int j, const EvtComplex &rhoij)
EvtDiracSpinor getSpinor(int i) const
EvtComplex cont(const EvtVector4C &v4) const
static double getMass(EvtId i)
EvtComplex EvtLeptonSCurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
void init(EvtId p, int ndaug, EvtId *daug)
static const EvtGammaMatrix & g5()
virtual void getbaryonff(EvtId parent, EvtId daught, double t, double m_meson, double *f1v, double *f1a, double *f2v, double *f2a)=0
static double getMaxMass(EvtId i)
virtual void getdiracff(EvtId parent, EvtId daught, double q2, double mass, double *f1, double *f2, double *f3, double *g1, double *g2, double *g3)=0
double normalizedProb(const EvtSpinDensity &d)
|