|
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. 72 double mu, int Nf, int res_swch, int ias, 73 double CKM_A, double CKM_lambda, 74 double CKM_barrho, double CKM_bareta ) 90 double q2 = q. mass2(); 92 double M1 = parent-> mass(); 106 double Relambda_qu, Imlambda_qu; 139 iddaught == EvtPDL::getId( std::string( "anti-K'_10" ) ) ) ) { 142 Vtq = unit1 * ( 1.0 - 0.5 * pow( CKM_lambda, 2.0 ) ) + 143 pow( CKM_lambda, 2.0 ) * 144 ( CKM_barrho * unit1 + CKM_bareta * uniti ) / 145 sqrt( 1.0 - pow( CKM_lambda, 2.0 ) ); 146 Vtq = -CKM_A * pow( CKM_lambda, 2.0 ) * Vtq; 148 Vuq = CKM_lambda * unit1; 169 Vtq = unit1 - ( 1.0 - 0.5 * pow( CKM_lambda, 2.0 ) ) * 170 ( CKM_barrho * unit1 + CKM_bareta * uniti ) / 171 sqrt( 1.0 - pow( CKM_lambda, 2.0 ) ); 172 Vtq = CKM_A * pow( CKM_lambda, 3.0 ) * Vtq; 174 Vuq = unit1 * ( 1.0 - 0.5 * pow( CKM_lambda, 2.0 ) - 175 0.125 * pow( CKM_lambda, 4.0 ) ); 180 << "\n\n The function EvtbTosllVectorAmpNew::CalcAmp(...)" 181 << "\n Error in the model set!" 182 << " ms = " << ms << std::endl; 186 Vtb = unit1 * ( 1.0 - 0.5 * pow( CKM_A * CKM_lambda * CKM_lambda, 188 Vub = CKM_A * pow( CKM_lambda, 3.0 ) * 189 ( CKM_barrho * unit1 - CKM_bareta * uniti ) / 190 sqrt( 1.0 - pow( CKM_lambda, 2.0 ) ); 192 CKM_factor = conj( Vtq ) * Vtb; 194 lambda_qu = conj( Vuq ) * Vub / 196 Relambda_qu = real( lambda_qu ); 197 Imlambda_qu = imag( lambda_qu ); 199 double a1, a2, a0, v, t1, t2, t3; 203 q2, a1, a2, a0, v, t1, t2, t3 ); 209 ms, mc, mu, mt, Mw, ml, 210 Relambda_qu, Imlambda_qu ); 212 mb, ms, mc, mu, mt, Mw, ml, 213 Relambda_qu, Imlambda_qu ); 271 double hats = q2 / pow( M1, 2 ); 272 double hatM2 = M2 / M1; 273 double hatmb = mb / M1; 274 double hatms = ms / M1; 279 EvtComplex a_b2q, a_barb2barq, b_b2q, b_barb2barq, c_b2q, c_barb2barq, e, f, 282 a_b2q = 2.0 * c9eff_b2q * v / ( 1.0 + hatM2 ) + 283 4.0 * ( hatmb + hatms ) * c7gam * t1 / hats; 284 a_barb2barq = 2.0 * c9eff_barb2barq * v / ( 1.0 + hatM2 ) + 285 4.0 * ( hatmb + hatms ) * c7gam * t1 / hats; 287 b_b2q = ( c9eff_b2q * a1 + 288 2.0 * ( hatmb - hatms ) * ( 1.0 - hatM2 ) * c7gam * t2 / hats ) * 290 b_barb2barq = ( c9eff_barb2barq * a1 + 2.0 * ( hatmb - hatms ) * 291 ( 1.0 - hatM2 ) * c7gam * t2 / 295 c_b2q = ( c9eff_b2q * ( 1.0 - hatM2 ) * a2 + 296 2.0 * ( hatmb - hatms ) * ( 1.0 - pow( hatM2, 2 ) ) * c7gam * t2 / 298 2.0 * ( hatmb - hatms ) * c7gam * t3 ) / 299 ( 1 - pow( hatM2, 2 ) ); 301 c_barb2barq = ( c9eff_barb2barq * ( 1.0 - hatM2 ) * a2 + 302 2.0 * ( hatmb - hatms ) * ( 1.0 - pow( hatM2, 2 ) ) * 304 2.0 * ( hatmb - hatms ) * c7gam * t3 ) / 305 ( 1 - pow( hatM2, 2 ) ); 307 e = 2.0 * c10a * v / ( 1 + hatM2 ); 309 f = ( 1.0 + hatM2 ) * c10a * a1; 311 g = c10a * a2 / ( 1 + hatM2 ); 313 h = ( ( 1.0 + hatM2 ) * a1 - ( 1.0 - hatM2 ) * a2 - 2.0 * hatM2 * a0 ) * 335 lepPlus = ( charge1 > charge2 ) ? parent-> getDaug( 1 ) : parent-> getDaug( 2 ); 336 lepMinus = ( charge1 < charge2 ) ? parent-> getDaug( 1 ) 352 EvtIdSet bmesons( "B-", "anti-B0", "anti-B_s0", "B_c-" ); 353 EvtIdSet bbarmesons( "B+", "B0", "B_s0", "B_c+" ); 357 if ( bmesons. contains( parentID ) ) { 390 for ( i = 0; i < 3; i++ ) { 396 amp. vertex( i, 0, 0, CKM_factor * ( lvc11 * E1 + lac11 * E2 ) ); 397 amp. vertex( i, 0, 1, CKM_factor * ( lvc12 * E1 + lac12 * E2 ) ); 398 amp. vertex( i, 1, 0, CKM_factor * ( lvc21 * E1 + lac21 * E2 ) ); 399 amp. vertex( i, 1, 1, CKM_factor * ( lvc22 * E1 + lac22 * E2 ) ); 403 if ( bbarmesons. contains( parentID ) ) { 407 T1 = a_barb2barq * unit1 * 410 c_barb2barq * uniti * 439 for ( i = 0; i < 3; i++ ) { 446 conj( CKM_factor ) * ( lvc11 * E3 + lac11 * E4 ) ); 448 conj( CKM_factor ) * ( lvc12 * E3 + lac12 * E4 ) ); 450 conj( CKM_factor ) * ( lvc21 * E3 + lac21 * E4 ) ); 452 conj( CKM_factor ) * ( lvc22 * E3 + lac22 * E4 ) ); 457 << "\n\n The function EvtbTosllVectorAmpNew::CalcAmp(...)" 458 << "\n Wrong B-meson number" << std::endl; 496 int Nf, int res_swch, int ias, double CKM_A, double CKM_lambda, 497 double CKM_barrho, double CKM_bareta ) 499 double maxfoundprob = -100.0; 506 if ( res_swch == 0 ) { 508 double s_min, t_for_s; 509 s_min = 4.0 * pow( ml, 2.0 ); 511 ( pow( M1, 2.0 ) + pow( M2, 2.0 ) - 2.0 * pow( ml, 2.0 ) ); 514 EV = ( pow( M1, 2.0 ) + pow( M2, 2.0 ) - s_min ) / 516 El2 = ( s_min + t_for_s - pow( M2, 2.0 ) - pow( ml, 2.0 ) ) / 520 modV = sqrt( pow( EV, 2.0 ) - pow( M2, 2.0 ) ); 521 modl2 = sqrt( pow( El2, 2.0 ) - pow( ml, 2.0 ) ); 524 cosVellminus = ( pow( M2, 2.0 ) + pow( ml, 2.0 ) + 2.0 * EV * El2 - 526 ( 2.0 * modV * modl2 ); 527 if ( ( fabs( cosVellminus ) > 1.0 ) && 528 ( fabs( cosVellminus ) <= 1.0001 ) ) { 533 cosVellminus = cosVellminus / fabs( cosVellminus ); 535 if ( ( modV <= 0.000001 ) || ( modl2 <= 0.000001 ) ) { 536 cosVellminus = cosVellminus / fabs( cosVellminus ); 538 << "\n Debug in the function EvtbTosllVectorAmpNew::CalcMaxProb(...):" 539 << "\n modV = " << modV << "\n modl2 = " << modl2 540 << "\n cos(theta) = " << cosVellminus 541 << "\n t_for_s = " << t_for_s << "\n s_min = " << s_min 542 << "\n EV = " << EV << "\n El2 = " << El2 543 << "\n M2 = " << M2 << "\n ml = " << ml 546 if ( fabs( cosVellminus ) > 1.0001 ) { 548 << "\n\n In the function EvtbTosllVectorAmpNew::CalcMaxProb(...)" 549 << "\n |cos(theta)| = " << fabs( cosVellminus ) << " > 1" 550 << "\n s_min = " << s_min << "\n t_for_s = " << t_for_s 551 << "\n EV = " << EV << "\n El2 = " << El2 552 << "\n modV = " << modV << "\n modl2 = " << modl2 553 << "\n M2 = " << M2 << "\n ml = " << ml << std::endl; 558 p1. set( M1, 0.0, 0.0, 0.0 ); 559 p2. set( EV, modV, 0.0, 0.0 ); 560 k2. set( El2, modl2 * cosVellminus, 561 -modl2 * sqrt( 1.0 - pow( cosVellminus, 2.0 ) ), 0.0 ); 597 scalar_part-> init( parnum, p1 ); 603 listdaug[0] = mesnum; 608 amp. init( parnum, 3, listdaug ); 614 vect = root_part-> getDaug( 0 ); 615 lep1 = root_part-> getDaug( 1 ); 616 lep2 = root_part-> getDaug( 2 ); 622 vect-> init( mesnum, p2 ); 623 lep1-> init( l1num, k1 ); 624 lep2-> init( l2num, k2 ); 631 CalcAmp( root_part, amp, formFactors, WilsCoeff, mu, Nf, res_swch, ias, 632 CKM_A, CKM_lambda, CKM_barrho, CKM_bareta ); 645 if ( res_swch == 1 ) { 647 double t_plus, t_minus; 651 s = pow( 3.09688, 2.0 ); 653 t_plus = pow( M1, 2.0 ) + pow( M2, 2.0 ) + 2.0 * pow( ml, 2.0 ) - s; 654 t_plus = t_plus + sqrt( 1.0 - 4.0 * pow( ml, 2.0 ) / s ) * 655 sqrt( lambda( s, pow( M1, 2.0 ), pow( M2, 2.0 ) ) ); 658 t_minus = pow( M1, 2.0 ) + pow( M2, 2.0 ) + 2.0 * pow( ml, 2.0 ) - s; 660 sqrt( 1.0 - 4.0 * pow( ml, 2.0 ) / s ) * 661 sqrt( lambda( s, pow( M1, 2.0 ), pow( M2, 2.0 ) ) ); 664 dt = ( t_plus - t_minus ) / 1000.0; 667 for ( k = 0; k <= 1000; k++ ) { 668 t_for_s = t_plus - dt * ( (double)k ); 670 if ( ( t_for_s < t_minus ) && ( t_for_s >= ( 0.9999 * t_minus ) ) ) { 673 if ( t_for_s < ( 0.9999 * t_minus ) ) { 675 << "\n\n In the function EvtbTosllVectorAmpNew::CalcMaxProb(...)" 676 << "\n t_for_s = " << t_for_s << " < t_minus = " << t_minus 678 << "\n t_plus = " << t_plus << "\n dt = " << dt 679 << "\n k = " << k << "\n s = " << s 680 << "\n M1 = " << M1 << "\n M2 = " << M2 681 << "\n ml = " << ml << std::endl; 687 EV = ( pow( M1, 2.0 ) + pow( M2, 2.0 ) - s ) / 689 El2 = ( s + t_for_s - pow( M2, 2.0 ) - pow( ml, 2.0 ) ) / 693 modV = sqrt( pow( EV, 2.0 ) - pow( M2, 2.0 ) ); 694 modl2 = sqrt( pow( El2, 2.0 ) - pow( ml, 2.0 ) ); 697 cosVellminus = ( pow( M2, 2.0 ) + pow( ml, 2.0 ) + 2.0 * EV * El2 - 699 ( 2.0 * modV * modl2 ); 700 if ( ( fabs( cosVellminus ) > 1.0 ) && 701 ( fabs( cosVellminus ) <= 1.0001 ) ) { 706 cosVellminus = cosVellminus / fabs( cosVellminus ); 708 if ( ( modV <= 0.000001 ) || ( modl2 <= 0.000001 ) ) { 709 cosVellminus = cosVellminus / fabs( cosVellminus ); 711 << "\n Debug in the function EvtbTosllVectorAmpNew::CalcMaxProb(...):" 712 << "\n modV = " << modV << "\n modl2 = " << modl2 713 << "\n cos(theta) = " << cosVellminus 714 << "\n s = " << s << "\n t_for_s = " << t_for_s 715 << "\n t_plus = " << t_plus 716 << "\n t_minus = " << t_minus << "\n dt = " << dt 717 << "\n EV = " << EV << "\n El2 = " << El2 718 << "\n M2 = " << M2 << "\n ml = " << ml 721 if ( fabs( cosVellminus ) > 1.0001 ) { 723 << "\n\n In the function EvtbTosllVectorAmpNew::CalcMaxProb(...)" 724 << "\n |cos(theta)| = " << fabs( cosVellminus ) << " > 1" 725 << "\n s = " << s << "\n t_for_s = " << t_for_s 726 << "\n EV = " << EV << "\n El2 = " << El2 727 << "\n modV = " << modV << "\n modl2 = " << modl2 728 << "\n M2 = " << M2 << "\n ml = " << ml 734 p1. set( M1, 0.0, 0.0, 0.0 ); 735 p2. set( EV, modV, 0.0, 0.0 ); 736 k2. set( El2, modl2 * cosVellminus, 737 -modl2 * sqrt( 1.0 - pow( cosVellminus, 2.0 ) ), 0.0 ); 773 scalar_part-> init( parnum, p1 ); 779 listdaug[0] = mesnum; 784 amp. init( parnum, 3, listdaug ); 790 vect = root_part-> getDaug( 0 ); 791 lep1 = root_part-> getDaug( 1 ); 792 lep2 = root_part-> getDaug( 2 ); 798 vect-> init( mesnum, p2 ); 799 lep1-> init( l1num, k1 ); 800 lep2-> init( l2num, k2 ); 807 CalcAmp( root_part, amp, formFactors, WilsCoeff, mu, Nf, res_swch, 808 ias, CKM_A, CKM_lambda, CKM_barrho, CKM_bareta ); 813 if ( nikmax > maxfoundprob ) { 814 maxfoundprob = nikmax; 817 << "\n maxfoundprob ( s =" << s << ", t = " << t_for_s 818 << " ) = " << maxfoundprob << "\n k =" << katmax 832 if ( maxfoundprob <= 0.0 ) { 834 << "\n\n In the function EvtbTosllVectorAmpNew::CalcMaxProb(...)" 835 << "\n maxfoundprob = " << maxfoundprob << " <0 or =0!" 836 << "\n res_swch = " << res_swch << std::endl; 841 << "\n maxfoundprob (...) = " << maxfoundprob << std::endl; 843 maxfoundprob *= 1.01; 868 l = pow( a, 2.0 ) + pow( b, 2.0 ) + pow( c, 2.0 ) - 2.0 * a * b - 869 2.0 * a * c - 2.0 * b * c; EvtTensor3C directProd(const EvtVector3C &c1, const EvtVector3C &c2)
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 const EvtTensor4C & g()
EvtComplex GetC7Eff(double mu, double Mw, double mt, int Nf, int ias)
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)
EvtVector4C cont2(const EvtVector4C &v4) const
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)
virtual EvtVector4C epsParent(int i) const
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
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)
virtual void getVectorFF(EvtId, EvtId, double, double &, double &, double &, double &, double &, double &, double &)
void setDiagonalSpinDensity()
EvtParticle * getDaug(int i)
EvtVector4C EvtLeptonVCurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
int contains(const EvtId id)
EvtVector4R getP4Restframe() const
double lambda(double a, double b, double c) override
void init(EvtId p, int ndaug, EvtId *daug)
double real(const EvtComplex &c)
double normalizedProb(const EvtSpinDensity &d)
|