|
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. 63 int Nf, int res_swch, int ias, double Egamma_min, 64 double CKM_A, double CKM_lambda, 65 double CKM_barrho, double CKM_bareta ) 76 double M1 = parent-> mass(); 92 double Relambda_qu, Imlambda_qu; 97 if ( charge1 == 0 || charge2 == 0 ) { 99 << "\n\n The function EvtbsTollGammaAmp::CalcAmp(...)" 100 << "\n Error in the leptonic charge getting!" 101 << "\n charge1 =" << charge1 102 << "\n charge2 =" << charge2 << "\n charge gamma =" 104 << "\n number of daughters =" << parent-> getNDaug() << std::endl; 111 lepPlus = ( charge1 > charge2 ) 114 lepMinus = ( charge1 < charge2 ) 126 if ( charge1 > charge2 ) { 139 double q2 = q. mass2(); 140 double p2 = p. mass2(); 141 double t = p_minus_p_1. mass2(); 142 double u = p_minus_p_2. mass2(); 145 double pk = 0.5 * ( p2 - q2 ); 146 double p1k = 0.5 * ( pow( ml, 2.0 ) - u ); 147 double p2k = 0.5 * ( pow( ml, 2.0 ) - t ); 149 double hatq2 = q2 / ( M1 * M1 ); 150 double Egam = 0.5 * M1 * 172 Vtq = unit1 * ( 1.0 - 0.5 * pow( CKM_lambda, 2.0 ) ) + 173 pow( CKM_lambda, 2.0 ) * 174 ( CKM_barrho * unit1 + CKM_bareta * uniti ) / 175 sqrt( 1.0 - pow( CKM_lambda, 2.0 ) ); 176 Vtq = -CKM_A * pow( CKM_lambda, 2.0 ) * Vtq; 178 Vuq = CKM_lambda * unit1; 180 Vcq = unit1 - 0.5 * pow( CKM_lambda, 2.0 ) - 181 0.125 * pow( CKM_lambda, 4.0 ) * ( 1.0 + 4.0 * pow( CKM_A, 2.0 ) ); 189 Vtq = unit1 - ( 1.0 - 0.5 * pow( CKM_lambda, 2.0 ) ) * 190 ( CKM_barrho * unit1 + CKM_bareta * uniti ) / 191 sqrt( 1.0 - pow( CKM_lambda, 2.0 ) ); 192 Vtq = CKM_A * pow( CKM_lambda, 3.0 ) * Vtq; 194 Vuq = unit1 * ( 1.0 - 0.5 * pow( CKM_lambda, 2.0 ) - 195 0.125 * pow( CKM_lambda, 4.0 ) ); 199 0.5 * pow( CKM_A, 2.0 ) * pow( CKM_lambda, 5.0 ) * 200 ( 1.0 - 2.0 * ( CKM_barrho * unit1 + CKM_bareta * uniti ) / 201 sqrt( 1.0 - pow( CKM_lambda, 2.0 ) ) ) ); 206 << "\n\n The function EvtbsTollGammaAmp::CalcAmp(..// 4-momentum of ell^+.)" 207 << "\n Error in the model set!" 208 << " mq = " << mq << std::endl; 212 Vtb = unit1 * ( 1.0 - 0.5 * pow( CKM_A * CKM_lambda * CKM_lambda, 214 Vub = CKM_A * pow( CKM_lambda, 3.0 ) * 215 ( CKM_barrho * unit1 - CKM_bareta * uniti ) / 216 sqrt( 1.0 - pow( CKM_lambda, 2.0 ) ); 217 Vcb = unit1 * CKM_A * pow( CKM_lambda, 2.0 ); 219 CKM_factor = conj( Vtq ) * Vtb; 221 lambda_qu = conj( Vuq ) * Vub / 223 Relambda_qu = real( lambda_qu ); 224 Imlambda_qu = imag( lambda_qu ); 226 lambda_qc = conj( Vcq ) * Vcb / 235 if ( Egam < Egamma_min || ( res_swch == 1 && q2 >= 9.199 && q2 <= 15.333 ) ) { 240 c9eff_b2q = unit1 * 0.0; 241 c9eff_barb2barq = unit1 * 0.0; 244 c1 = WilsCoeff-> C1( mu, Mw, Nf, ias ); 245 c2 = WilsCoeff-> C2( mu, Mw, Nf, ias ); 246 a1 = unit1 * ( c1 + c2 / 3.0 ); 247 c7gam = WilsCoeff-> GetC7Eff( mu, Mw, mt, Nf, ias ); 248 c9eff_b2q = WilsCoeff-> GetC9Eff( 0, res_swch, ias, Nf, q2, mb, mq, mc, mu, 249 mt, Mw, ml, Relambda_qu, Imlambda_qu ); 250 c9eff_barb2barq = WilsCoeff-> GetC9Eff( 1, res_swch, ias, Nf, q2, mb, mq, 251 mc, mu, mt, Mw, ml, Relambda_qu, 262 if ( Egam < Egamma_min || ( res_swch == 1 && q2 >= 9.199 && q2 <= 15.333 ) ) { 266 Fta_b2q = unit1 * 0.0; 267 Fta_barb2barq = unit1 * 0.0; 268 Ftv_b2q = unit1 * 0.0; 269 Ftv_barb2barq = unit1 * 0.0; 273 << "\n\n The function EvtbsTollGammaAmp::CalcAmp(...)" 274 << "\n Leptonic decay constant fb is not uninitialized in this function!" 275 << " fb = " << fb << std::endl; 281 a1, lambda_qu, lambda_qc, Fv, Fa, Ftv_b2q, 286 a1, lambda_qu, lambda_qc, Fv, Fa, 287 Ftv_barb2barq, Fta_barb2barq ); 336 EvtComplex a_b2q, a_barb2barq, b_b2q, b_barb2barq, e_b2q, e_barb2barq, 340 a_b2q = c9eff_b2q * Fv + 2.0 * c7gam * Ftv_b2q * mb * M1 / q2; 341 a_barb2barq = c9eff_barb2barq * Fv + 342 2.0 * c7gam * Ftv_barb2barq * mb * M1 / q2; 344 b_b2q = ( c9eff_b2q * Fa + 2.0 * c7gam * Fta_b2q * mb * M1 / q2 ) * pk / 346 b_barb2barq = ( c9eff_barb2barq * Fa + 347 2.0 * c7gam * Fta_barb2barq * mb * M1 / q2 ) * 353 f_b2q = c10a * Fa * pk / ( M1 * M1 ); 357 brammT = 0.5 * c10a * ml * fb * 358 ( 1.0 / p2k + 1.0 / p1k ); 381 static EvtIdSet bmesons( "anti-B0", "anti-B_s0" ); 382 static EvtIdSet bbarmesons( "B0", "B_s0" ); 386 if ( bmesons. contains( parentID ) ) { 435 for ( i = 0; i < 2; i++ ) { 440 E1 = T1.cont2( epsG ); 441 E2 = T2.cont2( epsG ); 442 E3 = ( epsG * hatp ) * brammS; 445 if ( Egam < Egamma_min || 446 ( res_swch == 1 && q2 >= 9.199 && q2 <= 15.333 ) ) { 447 CKM_factor = 0.0 * unit1; 453 ( lvc11 * E1 + lac11 * E2 + uniti * lsc11 * E3 + 454 uniti * ( ( ltc11.cont2( hatp ) ) * epsG ) * 463 ( lvc12 * E1 + lac12 * E2 + uniti * lsc12 * E3 + 464 uniti * ( ( ltc12. cont2( hatp ) ) * epsG ) * 473 ( lvc21 * E1 + lac21 * E2 + uniti * lsc21 * E3 + 474 uniti * ( ( ltc21. cont2( hatp ) ) * epsG ) * 483 ( lvc22 * E1 + lac22 * E2 + uniti * lsc22 * E3 + 484 uniti * ( ( ltc22. cont2( hatp ) ) * epsG ) * 492 if ( bbarmesons. contains( parentID ) ) { 496 T1 = -a_barb2barq * unit1 * 500 T2 = -e_barb2barq * unit1 * 542 for ( i = 0; i < 2; i++ ) { 545 E1 = T1.cont2( barepsG ); 546 E2 = T2.cont2( barepsG ); 547 E3 = ( barepsG * hatp ) * brammS; 550 if ( Egam < Egamma_min || 551 ( res_swch == 1 && q2 >= 9.199 && q2 <= 15.333 ) ) { 552 CKM_factor = 0.0 * unit1; 558 ( lvc11 * E1 + lac11 * E2 + uniti * lsc11 * E3 + 559 uniti * ( ( ltc11.cont2( hatp ) ) * epsG ) * brammT ) ); 563 ( lvc12 * E1 + lac12 * E2 + uniti * lsc12 * E3 + 564 uniti * ( ( ltc12. cont2( hatp ) ) * epsG ) * brammT ) ); 568 ( lvc21 * E1 + lac21 * E2 + uniti * lsc21 * E3 + 569 uniti * ( ( ltc21. cont2( hatp ) ) * epsG ) * brammT ) ); 573 ( lvc22 * E1 + lac22 * E2 + uniti * lsc22 * E3 + 574 uniti * ( ( ltc22. cont2( hatp ) ) * epsG ) * brammT ) ); 579 << "\n\n The function Evtbs2llGammaAmp::CalcAmp(...)" 580 << "\n Wrong B-meson number" << std::endl; 602 double mu, int Nf, int res_swch, int ias, 603 double Egamma_min, double CKM_A, 604 double CKM_lambda, double CKM_barrho, 607 double maxfoundprob = -100.0; 616 std::string( "omega" ) ) ); 629 double list_of_max_q2_points[5]; 630 list_of_max_q2_points[0] = pow( 2.0 * ml, 2.0 ); 631 list_of_max_q2_points[1] = pow( Mrho, 2.0 ); 632 list_of_max_q2_points[2] = pow( Momega, 2.0 ); 633 list_of_max_q2_points[3] = pow( Mphi, 2.0 ); 634 list_of_max_q2_points[4] = 635 pow( M1, 2.0 ) - 2.0 * M1 * Egamma_min; 648 if ( Egamma_min > Mrho ) { 650 << "\n\n In the function EvtbsTollGammaAmp::CalcScalarMaxProb(...)" 651 << "\n Bad photon energy cut: Egamma_min > M_rho0 in the rest frame of B-meson." 652 << "\n Mrho = " << Mrho << "\n Egamma_min = " << Egamma_min 657 if ( Egamma_min <= 0 ) { 659 << "\n\n In the function EvtbsTollGammaAmp::CalcScalarMaxProb(...)" 660 << "\n Bad photon energy cut: Egamma_min <= 0 in the rest frame of B-meson." 661 << "\n Egamma_min = " << Egamma_min << std::endl; 665 if ( res_swch == 0 || res_swch == 1 ) { 667 for ( i_list = 0; i_list <= 4; i_list++ ) { 675 s = list_of_max_q2_points[i_list]; 677 t_plus = pow( M1, 2.0 ) + 2.0 * pow( ml, 2.0 ) - s; 678 t_plus = t_plus + sqrt( 1.0 - 4.0 * pow( ml, 2.0 ) / s ) * 679 ( pow( M1, 2.0 ) - s ); 682 t_minus = pow( M1, 2.0 ) + 2.0 * pow( ml, 2.0 ) - s; 683 t_minus = t_minus - sqrt( 1.0 - 4.0 * pow( ml, 2.0 ) / s ) * 684 ( pow( M1, 2.0 ) - s ); 687 if ( fabs( t_plus - t_minus ) < 0.000001 ) 691 double dt = ( t_plus - t_minus ) / ( ( double)max_ijk ); 692 if ( fabs( dt ) < 0.00001 ) 697 << "\n\n In the function EvtbsTollGammaAmp::CalcScalarMaxProb(...)" 698 << "\n dt = " << dt << " < 0." 699 << "\n s = " << s << "\n t_plus = " << t_plus 700 << "\n t_minus = " << t_minus << "\n M1 = " << M1 701 << "\n ml = " << ml << std::endl; 705 for ( ijk = 0; ijk <= max_ijk; ijk++ ) { 706 t_for_s = t_minus + dt * ( (double)ijk ); 710 Eg = ( pow( M1, 2.0 ) - s ) / ( 2.0 * M1 ); 711 El2 = ( s + t_for_s - pow( ml, 2.0 ) ) / 715 modl2 = sqrt( pow( El2, 2.0 ) - pow( ml, 2.0 ) ); 718 cosBellminus = ( pow( ml, 2.0 ) + 2.0 * Eg * El2 - t_for_s ) / 719 ( 2.0 * Eg * modl2 ); 721 if ( ( fabs( cosBellminus ) > 1.0 ) && 722 ( fabs( cosBellminus ) <= 1.0001 ) ) { 724 << "\n Debug in the function EvtbsTollGammaAmp::CalcMaxProb(...):" 725 << "\n cos(theta) = " << cosBellminus << std::endl; 726 cosBellminus = cosBellminus / fabs( cosBellminus ); 728 if ( fabs( cosBellminus ) > 1.0001 ) { 730 << "\n\n In the function EvtbsTollGammaAmp::CalcMaxProb(...)" 731 << "\n |cos(theta)| = " << fabs( cosBellminus ) << " > 1" 732 << "\n s = " << s << "\n t_for_s = " << t_for_s 733 << "\n t_plus = " << t_plus << "\n t_minus = " << t_minus 734 << "\n dt = " << dt << "\n Eg = " << Eg 735 << "\n El2 = " << El2 << "\n modl2 = " << modl2 736 << "\n ml = " << ml << std::endl; 741 p. set( M1, 0.0, 0.0, 0.0 ); 742 k. set( Eg, Eg, 0.0, 0.0 ); 743 p2. set( El2, modl2 * cosBellminus, 744 -modl2 * sqrt( 1.0 - pow( cosBellminus, 2.0 ) ), 0.0 ); 753 scalar_part-> init( parnum, p ); 759 listdaug[0] = photnum; 764 amp. init( parnum, 3, listdaug ); 770 gamm = root_part-> getDaug( 0 ); 771 lep1 = root_part-> getDaug( 1 ); 772 lep2 = root_part-> getDaug( 2 ); 778 gamm-> init( photnum, k ); 779 lep1-> init( l1num, p1 ); 780 lep2-> init( l2num, p2 ); 787 CalcAmp( root_part, amp, formFactors, WilsCoeff, mu, Nf, 788 res_swch, ias, Egamma_min, CKM_A, CKM_lambda, 789 CKM_barrho, CKM_bareta ); 794 if ( nikmax > maxfoundprob ) { 795 maxfoundprob = nikmax; 797 << "\n maxfoundprob ( s =" << s << ", t = " << t_for_s 798 << " ) = " << maxfoundprob << "\n ijk =" << ijk 813 << "\n\n In the function EvtbsTollVectorAmpNew::CalcMaxProb(...)" 814 << "\n Unexpected value of the variable res_swch !!!" 815 << "\n res_swch = " << res_swch << std::endl; 819 if ( maxfoundprob <= 0.0 ) { 821 << "\n\n In the function EvtbsTollVectorAmpNew::CalcMaxProb(...)" 822 << "\n maxfoundprob = " << maxfoundprob << " <0 or =0!" 823 << "\n res_swch = " << res_swch << std::endl; 827 maxfoundprob *= 1.01; 852 l = pow( a, 2.0 ) + pow( b, 2.0 ) + pow( c, 2.0 ) - 2.0 * a * b - 853 2.0 * a * c - 2.0 * b * c;
EvtTensor3C directProd(const EvtVector3C &c1, const EvtVector3C &c2)
void CalcAmp(EvtParticle *parent, EvtAmp &, Evtbs2llGammaFF *formFactors, EvtbTosllWilsCoeffNLO *WilsCoeff, double mu, int Nf, int res_swch, int ias, double Egamma_min, double CKM_A, double CKM_lambda, double CKM_barrho, double CKM_bareta)
EvtTensor4C EvtLeptonTCurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
static const EvtTensor4C & g()
EvtComplex GetC7Eff(double mu, double Mw, double mt, int Nf, int ias)
double lambda(double a, double b, double c)
EvtTensor4C dual(const EvtTensor4C &t2)
std::ostream & EvtGenReport(EvtGenSeverity severity, const char *facility=0)
virtual void init(EvtId part_n, const EvtVector4R &p4)=0
Evt3Rank3C conj(const Evt3Rank3C &t2)
virtual void getPhotonFF(int, double, EvtId, double, double, double, double, EvtComplex, EvtComplex, EvtComplex, EvtComplex, EvtComplex &, EvtComplex &, EvtComplex &, EvtComplex &)
EvtVector4C cont2(const EvtVector4C &v4) const
double CalcMaxProb(EvtId parnum, EvtId photnum, EvtId l1num, EvtId l2num, Evtbs2llGammaFF *formFactors, EvtbTosllWilsCoeffNLO *WilsCoeff, double mu, int Nf, int res_swch, int ias, double Egamma_min, double CKM_A, double CKM_lambda, double CKM_barrho, double CKM_bareta)
static double getMeanMass(EvtId i)
int getSpinStates() const
virtual EvtVector4C epsParentPhoton(int i)
void makeDaughters(unsigned int ndaug, EvtId *id)
void set(int i, double d)
EvtSpinDensity getSpinDensity()
virtual EvtDiracSpinor spParent(int) const
EvtVector4C EvtLeptonACurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
void vertex(const EvtComplex &)
double C2(double mu, double Mw, int Nf, int ias)
EvtComplex GetC9Eff(int decay_id, int res_swch, int ias, int Nf, double q2, double m2, double md, double mc, double mu, double mt, double Mw, double ml, double Relambda_qu, double Imlambda_qu)
EvtComplex GetC10Eff(double mt, double Mw)
static EvtId getId(const std::string &name)
const EvtVector4R & getP4() const
double imag(const EvtComplex &c)
void init(EvtId part_n, double e, double px, double py, double pz)
double C1(double mu, double Mw, int Nf, int ias)
void setDiagonalSpinDensity()
EvtParticle * getDaug(int i)
EvtVector4C EvtLeptonVCurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
int contains(const EvtId id)
EvtComplex EvtLeptonSCurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
EvtVector4R getP4Restframe() const
void init(EvtId p, int ndaug, EvtId *daug)
double real(const EvtComplex &c)
virtual double getQuarkMass(int)
double normalizedProb(const EvtSpinDensity &d)
|