|
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. 71 double mu, int Nf, int res_swch, int ias, 72 double CKM_A, double CKM_lambda, 73 double CKM_barrho, double CKM_bareta ) 89 double q2 = q. mass2(); 91 double M1 = parent-> mass(); 105 double Relambda_qu, Imlambda_qu; 133 Vtq = unit1 * ( 1.0 - 0.5 * pow( CKM_lambda, 2.0 ) ) + 134 pow( CKM_lambda, 2.0 ) * 135 ( CKM_barrho * unit1 + CKM_bareta * uniti ) / 136 sqrt( 1.0 - pow( CKM_lambda, 2.0 ) ); 137 Vtq = -CKM_A * pow( CKM_lambda, 2.0 ) * Vtq; 139 Vuq = CKM_lambda * unit1; 167 Vtq = unit1 - ( 1.0 - 0.5 * pow( CKM_lambda, 2.0 ) ) * 168 ( CKM_barrho * unit1 + CKM_bareta * uniti ) / 169 sqrt( 1.0 - pow( CKM_lambda, 2.0 ) ); 170 Vtq = CKM_A * pow( CKM_lambda, 3.0 ) * Vtq; 172 Vuq = unit1 * ( 1.0 - 0.5 * pow( CKM_lambda, 2.0 ) - 173 0.125 * pow( CKM_lambda, 4.0 ) ); 178 << "\n\n The function EvtbTosllScalarAmpNew::CalcAmp(...)" 179 << "\n Error in the model set!" 180 << " ms = " << ms << std::endl; 184 Vtb = unit1 * ( 1.0 - 0.5 * pow( CKM_A * CKM_lambda * CKM_lambda, 186 Vub = CKM_A * pow( CKM_lambda, 3.0 ) * 187 ( CKM_barrho * unit1 - CKM_bareta * uniti ) / 188 sqrt( 1.0 - pow( CKM_lambda, 2.0 ) ); 190 CKM_factor = conj( Vtq ) * Vtb; 192 lambda_qu = conj( Vuq ) * Vub / 194 Relambda_qu = real( lambda_qu ); 195 Imlambda_qu = imag( lambda_qu ); 207 ms, mc, mu, mt, Mw, ml, 208 Relambda_qu, Imlambda_qu ); 210 mb, ms, mc, mu, mt, Mw, ml, 211 Relambda_qu, Imlambda_qu ); 269 double hats = q2 / pow( M1, 2 ); 270 double hatM2 = M2 / M1; 271 double hatmb = mb / M1; 272 double hatms = ms / M1; 275 EvtComplex a_b2q, a_barb2barq, b_b2q, b_barb2barq, c, d; 277 a_b2q = c9eff_b2q * fp - 278 2.0 * c7gam * ( hatmb + hatms ) * ft / ( 1.0 + hatM2 ); 279 a_barb2barq = c9eff_barb2barq * fp - 280 2.0 * c7gam * ( hatmb + hatms ) * ft / ( 1.0 + hatM2 ); 282 b_b2q = ( c9eff_b2q * ( f0 - fp ) + 283 2.0 * c7gam * ( hatmb + hatms ) * ft / ( 1.0 + hatM2 ) ) * 284 ( 1 - pow( hatM2, 2.0 ) ) / hats; 285 b_barb2barq = ( c9eff_barb2barq * ( f0 - fp ) + 286 2.0 * c7gam * ( hatmb + hatms ) * ft / ( 1.0 + hatM2 ) ) * 287 ( 1 - pow( hatM2, 2.0 ) ) / hats; 291 d = c10a * ( 1.0 - pow( hatM2, 2 ) ) * ( f0 - fp ) / hats; 300 lepPlus = ( charge1 > charge2 ) ? parent-> getDaug( 1 ) : parent-> getDaug( 2 ); 301 lepMinus = ( charge1 < charge2 ) ? parent-> getDaug( 1 ) 313 EvtIdSet bmesons( "B-", "anti-B0", "anti-B_s0", "B_c-" ); 314 EvtIdSet bbarmesons( "B+", "B0", "B_s0", "B_c+" ); 318 if ( bmesons. contains( parentID ) ) { 322 T1 = a_b2q * hatP + b_b2q * hatq; 324 T2 = c * hatP + d * hatq; 344 amp. vertex( 0, 0, CKM_factor * ( lvc11 * T1 + lac11 * T2 ) ); 345 amp. vertex( 0, 1, CKM_factor * ( lvc12 * T1 + lac12 * T2 ) ); 346 amp. vertex( 1, 0, CKM_factor * ( lvc21 * T1 + lac21 * T2 ) ); 347 amp. vertex( 1, 1, CKM_factor * ( lvc22 * T1 + lac22 * T2 ) ); 350 if ( bbarmesons. contains( parentID ) ) { 354 T1 = a_barb2barq * hatP + b_barb2barq * hatq; 355 T2 = c * hatP + d * hatq; 375 amp. vertex( 0, 0, conj( CKM_factor ) * ( lvc11 * T1 + lac11 * T2 ) ); 376 amp. vertex( 0, 1, conj( CKM_factor ) * ( lvc12 * T1 + lac12 * T2 ) ); 377 amp. vertex( 1, 0, conj( CKM_factor ) * ( lvc21 * T1 + lac21 * T2 ) ); 378 amp. vertex( 1, 1, conj( CKM_factor ) * ( lvc22 * T1 + lac22 * T2 ) ); 383 << "\n\n The function EvtbTosllScalarAmpNew::CalcAmp(...)" 384 << "\n Wrong B-meson number" << std::endl; 403 int Nf, int res_swch, int ias, double CKM_A, double CKM_lambda, 404 double CKM_barrho, double CKM_bareta ) 406 double maxfoundprob = -100.0; 412 if ( res_swch == 0 ) { 415 double t_plus, t_minus; 420 s_min = 4.0 * pow( ml, 2.0 ); 421 s_max = pow( ( M1 - M2 ), 2.0 ); 424 ds = ( s_max - s_min ) / ( ( double)max_j ); 427 << "\n\n In the function EvtbTosllScalarAmpNew::CalcScalarMaxProb(...)" 428 << "\n ds = " << ds << " < 0." 429 << "\n s_min = " << s_min << "\n s_max = " << s_max 430 << "\n M1 = " << M1 << "\n M2 = " << M2 431 << "\n ml = " << ml << std::endl; 437 for ( j = max_j / 3; j < max_j; j++ ) { 438 s = s_min + ds * ( (double)j ); 440 t_plus = pow( M1, 2.0 ) + pow( M2, 2.0 ) + 2.0 * pow( ml, 2.0 ) - s; 442 sqrt( 1.0 - 4.0 * pow( ml, 2.0 ) / s ) * 443 sqrt( lambda( s, pow( M1, 2.0 ), pow( M2, 2.0 ) ) ); 446 t_minus = pow( M1, 2.0 ) + pow( M2, 2.0 ) + 2.0 * pow( ml, 2.0 ) - s; 448 sqrt( 1.0 - 4.0 * pow( ml, 2.0 ) / s ) * 449 sqrt( lambda( s, pow( M1, 2.0 ), pow( M2, 2.0 ) ) ); 453 dt = ( t_plus - t_minus ) / ( ( double)max_k ); 454 if ( fabs( dt ) < 0.00001 ) 457 if ( dt <= ( -0.00001 ) ) { 459 << "\n\n In the function EvtbTosllScalarAmpNew::CalcScalarMaxProb(...)" 460 << "\n dt = " << dt << " < 0." 461 << "\n s = " << s << "\n s_min = " << s_min 462 << "\n s_max = " << s_max << "\n ds = " << ds 463 << "\n j = " << j << "\n t_plus = " << t_plus 464 << "\n t_minus = " << t_minus << "\n M1 = " << M1 465 << "\n M2 = " << M2 << "\n ml = " << ml 471 for ( k = 0; k < max_k; k++ ) { 472 t_for_s = t_minus + dt * ( (double)k ); 474 if ( ( t_for_s > t_plus ) && ( t_for_s <= ( 1.0001 * t_plus ) ) ) { 477 if ( t_for_s > ( 1.0001 * t_plus ) ) { 479 << "\n\n In the function EvtbTosllScalarAmpNew::CalcScalarMaxProb(...)" 480 << "\n t_for_s = " << t_for_s 481 << " > t_plus = " << t_plus << " ! " 482 << "\n t_minus = " << t_minus << "\n dt = " << dt 483 << "\n k = " << k << "\n s = " << s 484 << "\n M1 = " << M1 << "\n M2 = " << M2 485 << "\n ml = " << ml << std::endl; 491 EV = ( pow( M1, 2.0 ) + pow( M2, 2.0 ) - s ) / 496 El1 = ( pow( M1, 2.0 ) + pow( ml, 2.0 ) - t_for_s ) / 499 El1 = 1.0000001 * ml; 501 El2 = ( s + t_for_s - pow( M2, 2.0 ) - pow( ml, 2.0 ) ) / 504 El2 = 1.0000001 * ml; 508 modV = sqrt( pow( EV, 2.0 ) - pow( M2, 2.0 ) ); 509 modl2 = sqrt( pow( El2, 2.0 ) - pow( ml, 2.0 ) ); 512 cosVellminus = ( pow( M2, 2.0 ) + pow( ml, 2.0 ) + 513 2.0 * EV * El2 - t_for_s ) / 514 ( 2.0 * modV * modl2 ); 515 if ( ( fabs( cosVellminus ) > 1.0 ) && 516 ( fabs( cosVellminus ) <= 1.0001 ) ) { 521 cosVellminus = cosVellminus / fabs( cosVellminus ); 523 if ( ( modV <= 0.000001 ) || ( modl2 <= 0.000001 ) ) { 524 cosVellminus = cosVellminus / fabs( cosVellminus ); 543 if ( fabs( cosVellminus ) > 1.0001 ) { 545 << "\n\n In the function EvtbTosllScalarAmpNew::CalcMaxProb(...)" 546 << "\n |cos(theta)| = " << fabs( cosVellminus ) << " > 1" 547 << "\n s = " << s << "\n t_for_s = " << t_for_s 548 << "\n s_min = " << s_min << "\n s_max = " << s_max 549 << "\n t_plus = " << t_plus << "\n t_minus = " << t_minus 550 << "\n dt = " << dt << "\n EV = " << EV 551 << "\n El2 = " << El2 << "\n modV = " << modV 552 << "\n modl2 = " << modl2 << "\n M2 = " << M2 553 << "\n ml = " << ml << std::endl; 557 double sin2Vellminus = 1.0 - pow( cosVellminus, 2.0 ); 558 if ( ( sin2Vellminus < 0.0 ) && ( sin2Vellminus >= -0.0001 ) ) { 561 if ( sin2Vellminus <= -0.0001 ) { 563 << "\n\n In the function EvtbTosllScalarAmpNew::CalcMaxProb(...)" 564 << "\n cos^2(theta) = " << sin2Vellminus << " < -0.001" 565 << "\n s = " << s << "\n t_for_s = " << t_for_s 566 << "\n s_min = " << s_min << "\n s_max = " << s_max 567 << "\n t_plus = " << t_plus << "\n t_minus = " << t_minus 568 << "\n dt = " << dt << "\n EV = " << EV 569 << "\n El2 = " << El2 << "\n modV = " << modV 570 << "\n modl2 = " << modl2 << "\n M2 = " << M2 571 << "\n ml = " << ml << std::endl; 576 p1. set( M1, 0.0, 0.0, 0.0 ); 577 p2. set( EV, modV, 0.0, 0.0 ); 578 k2. set( El2, modl2 * cosVellminus, 579 -modl2 * sqrt( sin2Vellminus ), 0.0 ); 611 scalar_part-> init( parnum, p1 ); 617 listdaug[0] = mesnum; 622 amp. init( parnum, 3, listdaug ); 628 vect = root_part-> getDaug( 0 ); 629 lep1 = root_part-> getDaug( 1 ); 630 lep2 = root_part-> getDaug( 2 ); 651 vect-> init( mesnum, p2 ); 652 lep1-> init( l1num, k1 ); 653 lep2-> init( l2num, k2 ); 666 CalcAmp( root_part, amp, formFactors, WilsCoeff, mu, Nf, res_swch, 667 ias, CKM_A, CKM_lambda, CKM_barrho, CKM_bareta ); 672 if ( nikmax > maxfoundprob ) { 673 maxfoundprob = nikmax; 695 if ( res_swch == 1 ) { 697 double t_plus, t_minus; 701 s = pow( 3.09688, 2.0 ); 703 t_plus = pow( M1, 2.0 ) + pow( M2, 2.0 ) + 2.0 * pow( ml, 2.0 ) - s; 704 t_plus = t_plus + sqrt( 1.0 - 4.0 * pow( ml, 2.0 ) / s ) * 705 sqrt( lambda( s, pow( M1, 2.0 ), pow( M2, 2.0 ) ) ); 708 t_minus = pow( M1, 2.0 ) + pow( M2, 2.0 ) + 2.0 * pow( ml, 2.0 ) - s; 710 sqrt( 1.0 - 4.0 * pow( ml, 2.0 ) / s ) * 711 sqrt( lambda( s, pow( M1, 2.0 ), pow( M2, 2.0 ) ) ); 714 dt = ( t_plus - t_minus ) / 1000.0; 717 for ( k = 0; k < 1000; k++ ) { 718 t_for_s = t_minus + dt * ( (double)k ); 720 if ( ( t_for_s > t_plus ) && ( t_for_s <= ( 1.0001 * t_plus ) ) ) { 723 if ( t_for_s > ( 1.0001 * t_plus ) ) { 725 << "\n\n In the function EvtbTosllScalarAmpNew::CalcMaxProb(...)" 726 << "\n t_for_s = " << t_for_s << " > t_plus = " << t_plus 728 << "\n t_minus = " << t_minus << "\n dt = " << dt 729 << "\n k = " << k << "\n s = " << s 730 << "\n M1 = " << M1 << "\n M2 = " << M2 731 << "\n ml = " << ml << std::endl; 737 EV = ( pow( M1, 2.0 ) + pow( M2, 2.0 ) - s ) / 739 El2 = ( s + t_for_s - pow( M2, 2.0 ) - pow( ml, 2.0 ) ) / 743 modV = sqrt( pow( EV, 2.0 ) - pow( M2, 2.0 ) ); 744 modl2 = sqrt( pow( El2, 2.0 ) - pow( ml, 2.0 ) ); 747 cosVellminus = ( pow( M2, 2.0 ) + pow( ml, 2.0 ) + 2.0 * EV * El2 - 749 ( 2.0 * modV * modl2 ); 750 if ( ( fabs( cosVellminus ) > 1.0 ) && 751 ( fabs( cosVellminus ) <= 1.0001 ) ) { 756 cosVellminus = cosVellminus / fabs( cosVellminus ); 758 if ( ( modV <= 0.000001 ) || ( modl2 <= 0.000001 ) ) { 759 cosVellminus = cosVellminus / fabs( cosVellminus ); 776 if ( fabs( cosVellminus ) > 1.0001 ) { 778 << "\n\n In the function EvtbTosllScalarAmpNew::CalcMaxProb(...)" 779 << "\n |cos(theta)| = " << fabs( cosVellminus ) << " > 1" 780 << "\n s = " << s << "\n t_for_s = " << t_for_s 781 << "\n t_plus = " << t_plus << "\n t_minus = " << t_minus 782 << "\n dt = " << dt << "\n EV = " << EV 783 << "\n El2 = " << El2 << "\n modV = " << modV 784 << "\n modl2 = " << modl2 << "\n M2 = " << M2 785 << "\n ml = " << ml << std::endl; 789 double sin2Vellminus = 1.0 - pow( cosVellminus, 2.0 ); 790 if ( ( sin2Vellminus < 0.0 ) && ( sin2Vellminus >= -0.0001 ) ) { 793 if ( sin2Vellminus <= -0.0001 ) { 795 << "\n\n In the function EvtbTosllScalarAmpNew::CalcMaxProb(...)" 796 << "\n cos^2(theta) = " << sin2Vellminus << " < -0.001" 797 << "\n s = " << s << "\n t_for_s = " << t_for_s 798 << "\n t_plus = " << t_plus << "\n t_minus = " << t_minus 799 << "\n dt = " << dt << "\n EV = " << EV 800 << "\n El2 = " << El2 << "\n modV = " << modV 801 << "\n modl2 = " << modl2 << "\n M2 = " << M2 802 << "\n ml = " << ml << std::endl; 807 p1. set( M1, 0.0, 0.0, 0.0 ); 808 p2. set( EV, modV, 0.0, 0.0 ); 809 k2. set( El2, modl2 * cosVellminus, -modl2 * sqrt( sin2Vellminus ), 842 scalar_part-> init( parnum, p1 ); 848 listdaug[0] = mesnum; 853 amp. init( parnum, 3, listdaug ); 859 vect = root_part-> getDaug( 0 ); 860 lep1 = root_part-> getDaug( 1 ); 861 lep2 = root_part-> getDaug( 2 ); 867 vect-> init( mesnum, p2 ); 868 lep1-> init( l1num, k1 ); 869 lep2-> init( l2num, k2 ); 876 CalcAmp( root_part, amp, formFactors, WilsCoeff, mu, Nf, res_swch, 877 ias, CKM_A, CKM_lambda, CKM_barrho, CKM_bareta ); 882 if ( nikmax > maxfoundprob ) { 883 maxfoundprob = nikmax; 901 if ( maxfoundprob <= 0.0 ) { 903 << "\n\n In the function EvtbTosllScalarAmpNew::CalcMaxProb(...)" 904 << "\n maxfoundprob = " << maxfoundprob << " <0 or =0!" 905 << "\n res_swch = " << res_swch << std::endl; 910 << "\n maxfoundprob (...) = " << maxfoundprob << std::endl; 912 maxfoundprob *= 1.01; 934 l = pow( a, 2.0 ) + pow( b, 2.0 ) + pow( c, 2.0 ) - 2.0 * a * b - 935 2.0 * a * c - 2.0 * b * c;
EvtComplex GetC7Eff(double mu, double Mw, double mt, int Nf, int ias)
virtual void getScalarFF(EvtId, EvtId, double, double &, double &, double &)
std::ostream & EvtGenReport(EvtGenSeverity severity, const char *facility=0)
virtual void init(EvtId part_n, const EvtVector4R &p4)=0
Evt3Rank3C conj(const Evt3Rank3C &t2)
void CalcAmp(EvtParticle *parent, EvtAmp &, EvtbTosllFFNew *formFactors, EvtbTosllWilsCoeffNLO *WilsCoeff, double mu, int Nf, int res_swch, int ias, double CKM_A, double CKM_lambda, double CKM_barrho, double CKM_bareta) override
static double getMeanMass(EvtId i)
int getSpinStates() const
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 &)
virtual double getQuarkMass(int)
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)
double lambda(double a, double b, double c) override
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)
void setDiagonalSpinDensity()
EvtParticle * getDaug(int i)
EvtVector4C EvtLeptonVCurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
int contains(const EvtId id)
EvtVector4R getP4Restframe() const
void init(EvtId p, int ndaug, EvtId *daug)
double real(const EvtComplex &c)
double normalizedProb(const EvtSpinDensity &d)
double CalcMaxProb(EvtId parnum, EvtId mesnum, EvtId l1num, EvtId l2num, EvtbTosllFFNew *formFactors, EvtbTosllWilsCoeffNLO *WilsCoeff, double mu, int Nf, int res_swch, int ias, double CKM_A, double CKM_lambda, double CKM_barrho, double CKM_bareta) override
|