|
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. 39 const double sq2 = sqrt( 2.0 ); 255 const EvtComplex hm = term11 * term12 * term13 + term21 * term22 * term23 + 256 term31 * term32 * term33 + term41 * term42 * term43; 278 double DMtime = 0.5 * deltaMs * time; 279 double mt = exp( -DGtime ); 280 double pt = exp( +DGtime ); 281 double cDMt = cos( DMtime ); 282 double sDMt = sin( DMtime ); 286 EvtComplex gplus = 0.5 * ( mt * termplus + pt * terminus ); 287 EvtComplex gminus = 0.5 * ( mt * termplus - pt * terminus ); 293 if ( other_b == BSB ) { 329 double mass[10] = { MJpsi, mKK, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; 330 double Kmass[10] = { MKp, MKm, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; 331 double muMass[10] = { Mmu, Mmu, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; 349 for ( int k = 0; k <= 3; k++ ) { 350 thisparticle = p-> getDaug( k ); 354 muplus = thisparticle; 358 muminus = thisparticle; 362 Kplus = thisparticle; 366 Kminus = thisparticle; 375 double p4KK_mass2 = p4KK. mass2(); 376 double p4KK_mass = p4KK.mass(); 377 double p4Bs_mass2 = p4Bs. mass2(); 378 double p4Bs_mass = p4Bs. mass(); 381 double p3Kp_KK_CMS = sqrt( ( p4KK_mass2 - pow( MKp + MKm, 2 ) ) * 382 ( p4KK_mass2 - pow( MKp - MKm, 2 ) ) ) / 386 double p3Jpsi_KK_CMS = sqrt( ( p4Bs_mass2 - pow( p4KK_mass + MJpsi, 2 ) ) * 387 ( p4Bs_mass2 - pow( p4KK_mass - MJpsi, 2 ) ) ) / 410 double X_KK_1 = X_J( 1, p3Kp_KK_CMS, 0 ); 411 double X_KK_2 = X_J( 2, p3Kp_KK_CMS, 0 ); 412 double X_NR_Jpsi_1 = X_J( 1, p3Jpsi_KK_CMS, 1 ); 413 double X_f0_Jpsi_1 = X_J( 1, p3Jpsi_KK_CMS, 1 ); 414 double X_phi_Jpsi_0 = 1.0; 415 double X_f2p_Jpsi_1 = X_J( 1, p3Jpsi_KK_CMS, 1 ); 418 double f_PHSP = sqrt( p3Jpsi_KK_CMS * p3Kp_KK_CMS ); 419 double f_BMF_NR = p3Jpsi_KK_CMS; 420 double f_BMF_f0 = p3Jpsi_KK_CMS; 421 double f_BMF_phi = p3Kp_KK_CMS; 422 double f_BMF_f2p = p3Kp_KK_CMS * p3Kp_KK_CMS * p3Jpsi_KK_CMS; 446 EvtComplex Amp_p_NR = P_NR * X_KK_0 * X_NR_Jpsi_1 * f_BMF_NR * mp_hS_NR; 450 EvtComplex Amp_p_f0 = F_f0 * X_KK_0 * X_f0_Jpsi_1 * f_BMF_f0 * mp_h_f0; 456 EvtComplex Amp_p_phi = BW_phi * X_KK_1 * X_phi_Jpsi_0 * f_BMF_phi * 457 ( mp_h0_phi + mp_hp_phi + mp_hm_phi ); 463 EvtComplex Amp_p_f2p = BW_f2p * X_KK_2 * X_f2p_Jpsi_1 * f_BMF_f2p * 464 ( mp_h0_f2p + mp_hp_f2p + mp_hm_f2p ); 471 EvtComplex Amp_m_NR = P_NR * X_KK_0 * X_NR_Jpsi_1 * f_BMF_NR * mm_hS_NR; 475 EvtComplex Amp_m_f0 = F_f0 * X_KK_0 * X_f0_Jpsi_1 * f_BMF_f0 * mm_h_f0; 481 EvtComplex Amp_m_phi = BW_phi * X_KK_1 * X_phi_Jpsi_0 * f_BMF_phi * 482 ( mm_h0_phi + mm_hp_phi + mm_hm_phi ); 488 EvtComplex Amp_m_f2p = BW_f2p * X_KK_2 * X_f2p_Jpsi_1 * f_BMF_f2p * 489 ( mm_h0_f2p + mm_hp_f2p + mm_hm_f2p ); 493 ( Amp_p_NR + Amp_p_f0 + Amp_p_phi + Amp_p_f2p ); 495 ( Amp_m_NR + Amp_m_f0 + Amp_m_phi + Amp_m_f2p ); 498 vertex( 0, 1, Amp_tot_plus ); 499 vertex( 1, 0, Amp_tot_minus ); 506 double rho_sq = 1.0 - ( 4.0 * m0 * m0 / ( m * m ) ); 509 if ( rho_sq > 0.0 ) { 521 double gpipi = 0.167; 522 double gKK = 3.05 * gpipi; 529 EvtComplex Flatte_0 = 1.0 / ( m0 * m0 - m * m - I * m0 * w ); 536 const double m, const int J, 537 const double q0, const double q ) const 539 double X_J_q0_sq = pow( X_J( J, q0, 0 ), 2 ); 540 double X_J_q_sq = pow( X_J( J, q, 0 ), 2 ); 542 double Gamma = Gamma0 * pow( q / q0, 2 * J + 1 ) * ( m0 / m ) * 543 ( X_J_q_sq / X_J_q0_sq ); 545 return 1.0 / ( m0 * m0 - m * m - I * m0 * Gamma ); 550 const int JB, const double q0, const double M_KK_ll, 551 const double M_KK_ul, const int fcntype ) const 554 double bin_width = ( M_KK_ul - M_KK_ll ) / static_cast<double>( bins ); 556 double sumMKpKm2 = pow( MKp + MKm, 2 ); 557 double diffMKpKm2 = pow( MKp - MKm, 2 ); 558 double MBs2 = pow( MBs, 2 ); 560 for ( int i = 0; i < bins; i++ ) { 561 double M_KK_i = M_KK_ll + static_cast<double>( i ) * bin_width; 562 double M_KK_f = M_KK_ll + static_cast<double>( i + 1 ) * bin_width; 563 double M_KK_i_sq = M_KK_i * M_KK_i; 564 double M_KK_f_sq = M_KK_f * M_KK_f; 566 double p3Kp_KK_CMS_i = sqrt( ( M_KK_i_sq - sumMKpKm2 ) * 567 ( M_KK_i_sq - diffMKpKm2 ) ) / 569 double p3Kp_KK_CMS_f = sqrt( ( M_KK_f_sq - sumMKpKm2 ) * 570 ( M_KK_f_sq - diffMKpKm2 ) ) / 573 double p3Jpsi_Bs_CMS_i = sqrt( ( MBs2 - pow( M_KK_i + MJpsi, 2 ) ) * 574 ( MBs2 - pow( M_KK_i - MJpsi, 2 ) ) ) / 576 double p3Jpsi_Bs_CMS_f = sqrt( ( MBs2 - pow( M_KK_f + MJpsi, 2 ) ) * 577 ( MBs2 - pow( M_KK_f - MJpsi, 2 ) ) ) / 580 double f_PHSP_i = sqrt( p3Kp_KK_CMS_i * p3Jpsi_Bs_CMS_i ); 581 double f_PHSP_f = sqrt( p3Kp_KK_CMS_f * p3Jpsi_Bs_CMS_f ); 583 double f_MBF_KK_i = pow( p3Kp_KK_CMS_i, JR ); 584 double f_MBF_KK_f = pow( p3Kp_KK_CMS_f, JR ); 586 double f_MBF_Bs_i = pow( p3Jpsi_Bs_CMS_i, JB ); 587 double f_MBF_Bs_f = pow( p3Jpsi_Bs_CMS_f, JB ); 589 double X_JR_i = X_J( JR, p3Kp_KK_CMS_i, 0 ); 590 double X_JR_f = X_J( JR, p3Kp_KK_CMS_f, 0 ); 592 double X_JB_i = X_J( JB, p3Jpsi_Bs_CMS_i, 1 ); 593 double X_JB_f = X_J( JB, p3Jpsi_Bs_CMS_f, 1 ); 595 EvtComplex fcn_i( 1.0, 0.0 ), fcn_f( 1.0, 0.0 ); 597 if ( fcntype == 1 ) { 598 fcn_i = Flatte( m0, M_KK_i ); 599 fcn_f = Flatte( m0, M_KK_f ); 601 } else if ( fcntype == 2 ) { 602 fcn_i = Breit_Wigner( Gamma0, m0, M_KK_i, JR, q0, p3Kp_KK_CMS_i ); 603 fcn_f = Breit_Wigner( Gamma0, m0, M_KK_f, JR, q0, p3Kp_KK_CMS_f ); 606 EvtComplex a_i = f_PHSP_i * f_MBF_KK_i * f_MBF_Bs_i * X_JR_i * X_JB_i * 609 EvtComplex a_f = f_PHSP_f * f_MBF_KK_f * f_MBF_Bs_f * X_JR_f * X_JB_f * 613 integral += 0.5 * bin_width * ( a_i * a_st_i + a_f * a_st_f ); 616 return sqrt( abs2( integral ) ); 626 } else if ( isB == 1 ) { 630 double zsq = pow( r_BW * q, 2 ); 635 X_J = sqrt( 1.0 / ( 1.0 + zsq ) ); 636 } else if ( J == 2 ) { 637 X_J = sqrt( 1.0 / ( zsq * zsq + 3.0 * zsq + 9.0 ) ); 645 const double theta ) const 652 const double cK, const double cL, 653 const double chi ) const 655 double thetaL = acos( cL ); 656 double thetaK = acos( cK ); 661 out *= Wignerd( 1, l, alpha, thetaL ) * Wignerd( J, -l, 0, thetaK ); 669 const double lambda_abs, const double Amp, 670 const double phis, const int eta ) const 673 double qphis = q * phis; 674 amp_time *= ( gplus + eta * pow( lambda_abs, -1.0 * q ) * 675 EvtComplex( cos( qphis ), sin( qphis ) ) * gminus );
EvtComplex GetRho(const double m0, const double m) const
void setAttribute(std::string attName, int attValue)
EvtComplex Flatte(const double m0, const double m) const
EvtComplex AmpTime(const int q, const EvtComplex &gplus, const EvtComplex &gminus, const double delta, const double lambda_abs, const double Amp, const double phis, const int eta) const
double Integral(const double Gamma0, const double m0, const int JR, const int JB, const double q0, const double M_KK_ll, const double M_KK_ul, const int fcntype) const
double lambda_phi_perp_abs
double EvtDecayAngleChi(const EvtVector4R &, const EvtVector4R &, const EvtVector4R &, const EvtVector4R &, const EvtVector4R &)
EvtParticle * getParent() const
double getArg(unsigned int j)
void decay(EvtParticle *p) override
std::string getName() override
void initProbMax() override
virtual void init(EvtId part_n, const EvtVector4R &p4)=0
double Wignerd(int J, int l, int alpha, double theta) const
Evt3Rank3C conj(const Evt3Rank3C &t2)
static double getMeanMass(EvtId i)
double abs2(const EvtComplex &c)
void makeDaughters(unsigned int ndaug, EvtId *id)
EvtRaritaSchwinger boostTo(const EvtRaritaSchwinger &rs, const EvtVector4R p4)
void OtherB(EvtParticle *p, double &t, EvtId &otherb)
void setLifetime(double tau)
double lambda_f2p_par_abs
void setProbMax(double prbmx)
double X_J(const int J, const double q, const int isB) const
EvtDecayBase * clone() override
double lambda_f2p_perp_abs
EvtId getParentId() const
void vertex(const EvtComplex &)
void checkNDaug(int d1, int d2=-1)
void checkSpinParent(EvtSpinType::spintype sp)
void checkNArg(int a1, int a2=-1, int a3=-1, int a4=-1)
static EvtId getId(const std::string &name)
void checkSpinDaughter(int d1, EvtSpinType::spintype sp)
static double PhaseSpace(int ndaug, double mass[30], EvtVector4R p4[30], double mp)
static double getWidth(EvtId i)
double EvtDecayAngle(const EvtVector4R &, const EvtVector4R &, const EvtVector4R &)
EvtComplex exp(const EvtComplex &c)
static EvtCPUtil * getInstance()
double lambda_phi_par_abs
EvtParticle * getDaug(int i)
static double getMass(EvtId i)
static double d(int j, int m1, int m2, double theta)
EvtComplex AngularDist(int J, int l, int alpha, double cK, double cL, double chi) const
EvtComplex Breit_Wigner(const double Gamma0, const double m0, const double m, const int J, const double q0, const double q) const
EvtId getDaug(int i) const
|