|
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. 52 if ( ( nArg ) > 12 || ( nArg > 1 && nArg < 10 ) || nArg == 11 ) { 54 << "EvtBtoXsgamma generator model " 55 << "EvtBtoXsgammaKagan expected " 56 << "either 1(default config) or " 57 << "10 (default mass range) or " 58 << "12 (user range) arguments but found: " << nArg << endl; 60 << "Will terminate execution!" << endl; 72 double mHminLimit = 0.6373; 73 double mHmaxLimit = 4.5; 80 << "Minimum hadronic mass exceeds maximum " << endl; 82 << "Will terminate execution!" << endl; 85 if ( _mHmin < mHminLimit ) { 87 << "Minimum hadronic mass below K pi threshold" << endl; 89 << "Resetting to K pi threshold" << endl; 92 if ( _mHmax > mHmaxLimit ) { 94 << "Maximum hadronic mass above 4.5 GeV/c^2" << endl; 96 << "Resetting to 4.5 GeV/c^2" << endl; 107 massHad = {0, 0.0625995, 0.125199, 0.187798, 0.250398, 0.312997, 108 0.375597, 0.438196, 0.500796, 0.563395, 0.625995, 0.688594, 109 0.751194, 0.813793, 0.876392, 0.938992, 1.00159, 1.06419, 110 1.12679, 1.18939, 1.25199, 1.31459, 1.37719, 1.43979, 111 1.50239, 1.56499, 1.62759, 1.69019, 1.75278, 1.81538, 112 1.87798, 1.94058, 2.00318, 2.06578, 2.12838, 2.19098, 113 2.25358, 2.31618, 2.37878, 2.44138, 2.50398, 2.56658, 114 2.62918, 2.69178, 2.75438, 2.81698, 2.87958, 2.94217, 115 3.00477, 3.06737, 3.12997, 3.19257, 3.25517, 3.31777, 116 3.38037, 3.44297, 3.50557, 3.56817, 3.63077, 3.69337, 117 3.75597, 3.81857, 3.88117, 3.94377, 4.00637, 4.06896, 118 4.13156, 4.19416, 4.25676, 4.31936, 4.38196, 4.44456, 119 4.50716, 4.56976, 4.63236, 4.69496, 4.75756, 4.82016, 120 4.88276, 4.94536, 5.00796}; 121 brHad = {0, 1.03244e-09, 3.0239e-08, 1.99815e-07, 7.29392e-07, 122 1.93129e-06, 4.17806e-06, 7.86021e-06, 1.33421e-05, 2.09196e-05, 123 3.07815e-05, 4.29854e-05, 5.74406e-05, 7.3906e-05, 9.2003e-05, 124 0.000111223, 0.000130977, 0.000150618, 0.000169483, 0.000186934, 125 0.000202392, 0.000215366, 0.000225491, 0.000232496, 0.000236274, 126 0.000236835, 0.000234313, 0.000228942, 0.000221042, 0.000210994, 127 0.000199215, 0.000186137, 0.000172194, 0.000157775, 0.000143255, 128 0.000128952, 0.000115133, 0.000102012, 8.97451e-05, 7.84384e-05, 129 6.81519e-05, 5.89048e-05, 5.06851e-05, 4.34515e-05, 3.71506e-05, 130 3.1702e-05, 2.70124e-05, 2.30588e-05, 1.96951e-05, 1.68596e-05, 131 1.44909e-05, 1.25102e-05, 1.08596e-05, 9.48476e-06, 8.34013e-06, 132 7.38477e-06, 6.58627e-06, 5.91541e-06, 5.35022e-06, 4.87047e-06, 133 4.46249e-06, 4.11032e-06, 3.80543e-06, 3.54051e-06, 3.30967e-06, 134 3.10848e-06, 2.93254e-06, 2.78369e-06, 2.65823e-06, 2.55747e-06, 135 2.51068e-06, 2.57179e-06, 2.74684e-06, 3.02719e-06, 3.41182e-06, 136 3.91387e-06, 4.56248e-06, 5.40862e-06, 6.53915e-06, 8.10867e-06, 147 int fermiFunction = (int)args[1]; 156 std::vector<double> mHVect( int( _nIntervalmH + 1.0 ) ); 165 << "EvtBtoXsgammaKagan: calculating new hadronic mass spectra. This takes a while..." 181 _rer2 = -4.092 + 12.78 * ( sqrt( _z ) - .29 ); 192 double eGammaMin = 0.5 * _mB * ( 1. - _delta ); 193 double eGammaMax = 0.5 * _mB; 194 double yMin = 2. * eGammaMin / _mB; 195 double yMax = 2. * eGammaMax / _mB; 196 double _CKMrat = 0.976; 213 std::vector<double> s22Coeffs( int( _nIntervalS + 1.0 ) ); 214 std::vector<double> s27Coeffs( int( _nIntervalS + 1.0 ) ); 215 std::vector<double> s28Coeffs( int( _nIntervalS + 1.0 ) ); 220 std::vector<double> sCoeffs( 1 ); 234 s22Coeffs[i] = ( 16. / 27. ) * mys22Simp. evaluate( 1.0e-20, yp ); 235 s27Coeffs[i] = ( -8. / 9. ) * _z * mys27Simp.evaluate( 1.0e-20, yp ); 236 s28Coeffs[i] = -s27Coeffs[i] / 3.; 242 std::vector<double> FermiCoeffs( 6 ); 243 std::vector<double> varCoeffs( 3 ); 244 std::vector<double> DeltaCoeffs( 1 ); 245 std::vector<double> s88Coeffs( 2 ); 246 std::vector<double> sInitCoeffs( 3 ); 258 sInitCoeffs[1] = yMin; 259 sInitCoeffs[2] = yMax; 261 FermiCoeffs[0] = fermiFunction; 262 FermiCoeffs[1] = 0.0; 263 FermiCoeffs[2] = 0.0; 264 FermiCoeffs[3] = 0.0; 265 FermiCoeffs[4] = 0.0; 266 FermiCoeffs[5] = 0.0; 269 std::vector<double> gammaCoeffs( 6 ); 270 gammaCoeffs[0] = 76.18009172947146; 271 gammaCoeffs[1] = -86.50532032941677; 272 gammaCoeffs[2] = 24.01409824083091; 273 gammaCoeffs[3] = -1.231739572450155; 274 gammaCoeffs[4] = 0.1208650973866179e-2; 275 gammaCoeffs[5] = -0.5395239384953e-5; 279 if ( fermiFunction == 1 ) { 282 FermiCoeffs[3] = _lam1; 283 FermiCoeffs[4] = 1.0; 285 auto myNormFunc = std::make_unique<EvtItgPtrFunction>( 288 std::make_unique<EvtItgSimpsonIntegrator>( *myNormFunc, 1.0e-4, 40 ); 289 FermiCoeffs[4] = myNormSimp->normalisation(); 291 } else if ( fermiFunction == 2 ) { 299 FermiCoeffs[4] = 1.0; 301 auto myNormFunc = std::make_unique<EvtItgPtrFunction>( 305 std::make_unique<EvtItgSimpsonIntegrator>( *myNormFunc, 1.0e-4, 40 ); 306 FermiCoeffs[4] = myNormSimp->normalisation(); 308 } else if ( fermiFunction == 3 ) { 311 FermiCoeffs[1] = _mB; 312 FermiCoeffs[2] = _mb; 313 FermiCoeffs[3] = rho; 315 FermiCoeffs[5] = 1.0; 317 auto myNormFunc = std::make_unique<EvtItgPtrFunction>( 321 std::make_unique<EvtItgSimpsonIntegrator>( *myNormFunc, 1.0e-4, 40 ); 322 FermiCoeffs[5] = myNormSimp->normalisation(); 328 varCoeffs, DeltaCoeffs}; 331 varCoeffs, s88Coeffs}; 333 FermiCoeffs, varCoeffs}; 335 FermiCoeffs, varCoeffs}; 338 varCoeffs, sInitCoeffs, 342 varCoeffs, sInitCoeffs, 346 varCoeffs, sInitCoeffs, 359 double mHmin = sqrt( _mB * _mB - 2. * _mB * eGammaMax ); 360 double mHmax = sqrt( _mB * _mB - 2. * _mB * eGammaMin ); 367 double ymH = 1. - ( ( mH * mH ) / ( _mB * _mB ) ); 370 myDeltaFermiFunc.setCoeff( 2, 2, ymH ); 371 mys77FermiFunc.setCoeff( 2, 2, ymH ); 372 mys88FermiFunc.setCoeff( 2, 2, ymH ); 373 mys78FermiFunc.setCoeff( 2, 2, ymH ); 374 mys22FermiFunc.setCoeff( 2, 2, ymH ); 375 mys27FermiFunc.setCoeff( 2, 2, ymH ); 376 mys28FermiFunc.setCoeff( 2, 2, ymH ); 380 double deltaResult = myDeltaFermiSimp.evaluate( ( _mB * ymH - _mb ), 382 double s77Result = mys77FermiSimp.evaluate( ( _mB * ymH - _mb ), 384 double s88Result = mys88FermiSimp.evaluate( ( _mB * ymH - _mb ), 386 double s78Result = mys78FermiSimp.evaluate( ( _mB * ymH - _mb ), 388 double s22Result = mys22FermiSimp.evaluate( ( _mB * ymH - _mb ), 390 double s27Result = mys27FermiSimp.evaluate( ( _mB * ymH - _mb ), 392 mys28FermiSimp.evaluate( ( _mB * ymH - _mb ), _mB - _mb ); 398 ( s77Result * pow( _c70mu, 2. ) + 403 mHVect[i] = 2. * ( mH / ( _mB * _mB ) ) * 0.105 * Nsl * py; 406 brHad[i] = 2. * ( mH / ( _mB * _mB ) ) * 0.105 * Nsl * py; 421 double xbox( 0 ), ybox( 0 ); 422 double boxheight( 0 ); 423 double trueHeight( 0 ); 424 double boxwidth = max - min; 427 for ( int i = 0; i < int( intervalMH + 1.0 ); i++ ) { 428 if ( brHad[i] > boxheight ) 429 boxheight = brHad[i]; 431 while ( ( mass > max ) || ( mass < min ) ) { 436 for ( int i = 1; i < int( intervalMH + 1.0 ); ++i ) { 437 if ( ( massHad[i] >= xbox ) && ( 0.0 == trueHeight ) ) { 443 if ( ybox > trueHeight ) { 456 ( log( _mZ / scale ) ); 466 ( 12. / 23. ) * ( ( 253. / 18. ) - ( 116. / 23. ) ) * 469 double xt = pow( mtatmw, 2. ) / pow( _mW, 2. ); 474 double c7mWsm = ( ( 3. * pow( xt, 3. ) - 2. * pow( xt, 2. ) ) / 475 ( 4. * pow( ( xt - 1. ), 4. ) ) ) * 477 ( ( -8. * pow( xt, 3. ) - 5. * pow( xt, 2. ) + 7. * xt ) / 478 ( 24. * pow( ( xt - 1. ), 3. ) ) ); 480 double c8mWsm = ( ( -3. * pow( xt, 2. ) ) / ( 4. * pow( ( xt - 1. ), 4. ) ) ) * 482 ( ( -pow( xt, 3. ) + 5. * pow( xt, 2. ) + 2. * xt ) / 483 ( 8. * pow( ( xt - 1. ), 3. ) ) ); 485 double c7constmu = ( 626126. / 272277. ) * pow( _etamu, ( 14. / 23. ) ) - 486 ( 56281. / 51730. ) * pow( _etamu, ( 16. / 23. ) ) - 487 ( 3. / 7. ) * pow( _etamu, ( 6. / 23. ) ) - 488 ( 1. / 14. ) * pow( _etamu, ( -12. / 23. ) ) - 489 .6494 * pow( _etamu, .4086 ) - 490 .038 * pow( _etamu, -.423 ) - 491 .0186 * pow( _etamu, -.8994 ) - 492 .0057 * pow( _etamu, .1456 ); 496 ( pow( _etamu, ( 14. / 23. ) ) - pow( _etamu, ( 16. / 23. ) ) ) * 500 double c8constmu = ( 313063. / 363036. ) * pow( _etamu, ( 14. / 23. ) ) - 501 .9135 * pow( _etamu, .4086 ) + 502 .0873 * pow( _etamu, -.423 ) - 503 .0571 * pow( _etamu, -.8994 ) + 504 .0209 * pow( _etamu, .1456 ); 506 _c80mu = c8mWsm * pow( _etamu, ( 14. / 23. ) ) + c8constmu; 521 ( ( -16. * pow( xt, 4. ) - 122. * pow( xt, 3. ) + 80. * pow( xt, 2. ) - 523 ( 9. * pow( ( xt - 1. ), 4. ) ) * li2 + 524 ( 6. * pow( xt, 4. ) + 46. * pow( xt, 3. ) - 28. * pow( xt, 2. ) ) / 525 ( 3. * pow( ( xt - 1. ), 5. ) ) * pow( log( xt ), 2. ) + 526 ( -102. * pow( xt, 5. ) - 588. * pow( xt, 4. ) - 527 2262. * pow( xt, 3. ) + 3244. * pow( xt, 2. ) - 1364. * xt + 208. ) / 528 ( 81. * pow( ( xt - 1 ), 5. ) ) * log( xt ) + 529 ( 1646. * pow( xt, 4. ) + 12205. * pow( xt, 3. ) - 530 10740. * pow( xt, 2. ) + 2509. * xt - 436. ) / 531 ( 486. * pow( ( xt - 1 ), 4. ) ) ); 534 ( ( -4. * pow( xt, 4. ) + 40. * pow( xt, 3. ) + 41. * pow( xt, 2. ) + xt ) / 535 ( 6. * pow( ( xt - 1. ), 4. ) ) * li2 + 536 ( -17. * pow( xt, 3. ) - 31. * pow( xt, 2. ) ) / 537 ( 2. * pow( ( xt - 1. ), 5. ) ) * pow( log( xt ), 2. ) + 538 ( -210. * pow( xt, 5. ) + 1086. * pow( xt, 4. ) + 539 4893. * pow( xt, 3. ) + 2857. * pow( xt, 2. ) - 1994. * xt + 280. ) / 540 ( 216. * pow( ( xt - 1 ), 5. ) ) * log( xt ) + 541 ( 737. * pow( xt, 4. ) - 14102. * pow( xt, 3. ) - 542 28209. * pow( xt, 2. ) + 610. * xt - 508. ) / 543 ( 1296. * pow( ( xt - 1 ), 4. ) ) ); 545 double E1 = ( xt * ( 18. - 11. * xt - pow( xt, 2. ) ) / 546 ( 12. * pow( ( 1. - xt ), 3. ) ) + 547 pow( xt, 2. ) * ( 15. - 16. * xt + 4. * pow( xt, 2. ) ) / 548 ( 6. * pow( ( 1. - xt ), 4. ) ) * log( xt ) - 549 2. / 3. * log( xt ) ); 551 double e1 = 4661194. / 816831.; 552 double e2 = -8516. / 2217.; 560 double f1 = -17.3023; 589 ( ( ( 297664. / 14283. * pow( _etamu, ( 16. / 23. ) ) - 590 7164416. / 357075. * pow( _etamu, ( 14. / 23. ) ) + 591 256868. / 14283. * pow( _etamu, ( 37. / 23. ) ) - 592 6698884. / 357075. * pow( _etamu, ( 39. / 23. ) ) ) * 595 ( pow( _etamu, ( 39. / 23. ) ) - pow( _etamu, ( 16. / 23. ) ) ) * 600 ( pow( _etamu, ( 16. / 23. ) ) * c7mWsm1 + 602 ( pow( _etamu, ( 14. / 23. ) ) - 603 pow( _etamu, ( 16. / 23. ) ) ) * 608 40. / 69. * pow( _etamu, ( -7. / 23. ) ) + 609 88. / 575. * pow( _etamu, ( 16. / 23. ) ) ) * 611 ( -32. / 575. * pow( _etamu, ( -9. / 23. ) ) + 612 32. / 1449. * pow( _etamu, ( -7. / 23. ) ) + 613 640. / 1449. * pow( _etamu, ( 14. / 23. ) ) - 614 704. / 1725. * pow( _etamu, ( 16. / 23. ) ) ) * 616 190. / 8073. * pow( _etamu, ( -35. / 23. ) ) - 617 359. / 3105. * pow( _etamu, ( -17. / 23. ) ) + 618 4276. / 121095. * pow( _etamu, ( -12. / 23. ) ) + 619 350531. / 1009125. * pow( _etamu, ( -9. / 23. ) ) + 620 2. / 4347. * pow( _etamu, ( -7. / 23. ) ) - 621 5956. / 15525. * pow( _etamu, ( 6. / 23. ) ) + 622 38380. / 169533. * pow( _etamu, ( 14. / 23. ) ) - 623 748. / 8625. * pow( _etamu, ( 16. / 23. ) ) ); 635 double cDelta77 = ( 1. + 638 ( ( pow( ( 1. - _z ), 4. ) / _fz ) - 1. ) * 663 return ( -4. * ( alphasMu / ( 3. * EvtConst::pi * ( 1. - y ) ) ) * 664 ( log( 1. - y ) + 7. / 4. ) * 666 ( pow( log( 1. - y ), 2 ) + ( 7. / 2. ) * log( 1. - y ) ) ) ); 675 return ( ( 1. / 3. ) * 676 ( 7. + y - 2. * pow( y, 2 ) - 2. * ( 1. + y ) * log( 1. - y ) ) ); 685 return ( ( 1. / 27. ) * ( ( 2. * ( 2. - 2. * y + pow( y, 2 ) ) / y ) * 686 ( log( 1. - y ) + 2. * log( mb / ms ) ) - 687 2. * pow( y, 2 ) - y - 8. * ( ( 1. - y ) / y ) ) ); 696 return ( ( 8. / 9. ) * ( ( ( 1. - y ) / y ) * log( 1. - y ) + 1. + 697 ( pow( y, 2 ) / 4. ) ) ); 703 return -2. * pow( atan( sqrt( y / ( 4. - y ) ) ), 2. ); 705 return 2. * ( pow( log( ( sqrt( y ) + sqrt( y - 4. ) ) / 2. ), 2. ) ) - 715 return ( -2. * EvtConst::pi * log( ( sqrt( y ) + sqrt( y - 4. ) ) / 2. ) ); 723 ( ( pow( coeffs[0], 2. ) / pow( y, 2. ) ) * 724 ( pow( ReG( y / coeffs[0] ), 2. ) + 725 pow( ImG( y / coeffs[0] ), 2. ) ) + 726 ( coeffs[0] / y ) * ReG( y / coeffs[0] ) + ( 1. / 4. ) ); 732 return ( ReG( y / coeffs[0] ) + y / ( 2. * coeffs[0] ) ); 736 const std::vector<double>& coeffs1, 737 const std::vector<double>& coeffs2, 738 const std::vector<double>& coeffs3 ) 743 return FermiFunc( y, coeffs1 ) * ( coeffs2[0] / ( coeffs2[1] + y ) ) * 744 Delta( ( coeffs2[0] * coeffs2[2] ) / ( coeffs2[1] + y ), coeffs3[0] ); 748 const std::vector<double>& coeffs1, 749 const std::vector<double>& coeffs2 ) 753 return FermiFunc( y, coeffs1 ) * ( coeffs2[0] / ( coeffs2[1] + y ) ) * 754 s77( ( coeffs2[0] * coeffs2[2] ) / ( coeffs2[1] + y ) ); 758 const std::vector<double>& coeffs1, 759 const std::vector<double>& coeffs2, 760 const std::vector<double>& coeffs3 ) 764 return FermiFunc( y, coeffs1 ) * ( coeffs2[0] / ( coeffs2[1] + y ) ) * 765 s88( ( coeffs2[0] * coeffs2[2] ) / ( coeffs2[1] + y ), coeffs3[0], 770 const std::vector<double>& coeffs1, 771 const std::vector<double>& coeffs2 ) 775 return FermiFunc( y, coeffs1 ) * ( coeffs2[0] / ( coeffs2[1] + y ) ) * 776 s78( ( coeffs2[0] * coeffs2[2] ) / ( coeffs2[1] + y ) ); 780 const std::vector<double>& coeffs1, 781 const std::vector<double>& coeffs2, 782 const std::vector<double>& coeffs3, 783 const std::vector<double>& coeffs4 ) 788 return FermiFunc( y, coeffs1 ) * ( coeffs2[0] / ( coeffs2[1] + y ) ) * 789 GetArrayVal( coeffs2[0] * coeffs2[2] / ( coeffs2[1] + y ), 790 coeffs3[0], coeffs3[1], coeffs3[2], coeffs4 ); 795 return ( 1. - 8. * z + 8. * pow( z, 3. ) - pow( z, 4. ) - 796 12. * pow( z, 2. ) * log( z ) ); 800 double xMax, std::vector<double> array ) 802 double dx = ( xMax - xMin ) / nInterval; 803 int bin1 = int( ( ( xp - xMin ) / ( xMax - xMin ) ) * nInterval ); 805 double x1 = double( bin1 ) * dx + xMin; 813 } else if ( xp < x1 ) { 823 if ( bin1 == ( int)nInterval ) { 824 bin2 = (int)nInterval; 825 bin1 = (int)nInterval - 1; 826 x1 = double( bin1 ) * dx + xMin; 829 double x2 = double( bin2 ) * dx + xMin; 830 double y1 = array[bin1]; 832 double y2 = array[bin2]; 833 double m = ( y2 - y1 ) / ( x2 - x1 ); 834 double c = y1 - m * x1; 835 double result = m * xp + c; 843 if ( int( coeffs[0] ) == 1 ) 845 if ( int( coeffs[0] ) == 2 ) 847 if ( int( coeffs[0] ) == 3 ) 854 return -log( fabs( 1. - y ) ) / y; 860 for ( int i = 1; i < 1000; 862 li2 += pow( y, i ) / ( i * i ); double CalcAlphaS(double)
void computeHadronicMass(int, double *)
static double FermiRomanFunc(double, std::vector< double > const &coeffs)
static double s77(double)
static double Gamma(double, const std::vector< double > &coeffs)
static double s77FermiFunc(double, const std::vector< double > &coeffs1, const std::vector< double > &coeffs2)
static double s78FermiFunc(double, const std::vector< double > &coeffs1, const std::vector< double > &coeffs2)
static double Delta(double, double)
static double s78(double)
std::ostream & EvtGenReport(EvtGenSeverity severity, const char *facility=0)
static double diLogFunc(double)
static double sFermiFunc(double, const std::vector< double > &coeffs1, const std::vector< double > &coeffs2, const std::vector< double > &coeffs3, const std::vector< double > &coeffs4)
static double FermiRomanFuncRoot(double, double)
static double FermiGaussFunc(double, std::vector< double > const &coeffs)
static double FermiGaussFuncRoot(double, double, double, std::vector< double > &coeffs)
void getDefaultHadronicMass()
static double ReG(double)
void init(int, double *) override
static double DeltaFermiFunc(double, const std::vector< double > &coeffs1, const std::vector< double > &coeffs2, const std::vector< double > &coeffs3)
static double FermiExpFunc(double var, const std::vector< double > &coeffs)
double evaluate(double lower, double upper) const
static double FermiFunc(double, const std::vector< double > &coeffs)
double GetMass(int code) override
static double s88(double, double, double)
static double diLogMathematica(double)
static double s22Func(double var, const std::vector< double > &coeffs)
EvtComplex exp(const EvtComplex &c)
static double s27Func(double var, const std::vector< double > &coeffs)
static double ImG(double)
static double GetArrayVal(double, double, double, double, std::vector< double >)
static double s88FermiFunc(double, const std::vector< double > &coeffs1, const std::vector< double > &coeffs2, const std::vector< double > &coeffs3)
std::vector< double > massHad
std::vector< double > brHad
|