85 const double xlow = 0;
86 const double xhigh =
m_mBB;
87 const int aSize = 10000;
91 for (
int i = 0; i < aSize; i++ ) {
92 double what = xlow + (double)( i + 0.5 ) / ( (double)aSize ) *
99 for (
size_t i = 0; i <
m_pf.size(); i++ ) {
119 ( 11.0 / 9.0 *
m_CF + 79.0 / 54.0 *
m_CA ) * nf * nf;
121 m_zeta3 = 1.0 + 1 / 8.0 + 1 / 27.0 + 1 / 64.0;
127 ( ( 245.0 / 24.0 - 67.0 / 54.0 * M_PI * M_PI +
128 +11.0 / 180.0 * pow( M_PI, 4 ) + 11.0 / 6.0 *
m_zeta3 ) *
130 +( -209.0 / 108.0 + 5.0 / 27.0 * M_PI * M_PI -
133 ( -55.0 / 24.0 + 2 *
m_zeta3 ) *
m_CF * nf - nf * nf / 27.0 );
137 ( ( 3.0 / 16.0 - M_PI * M_PI / 4.0 + 3 *
m_zeta3 ) *
m_CF +
138 ( 1549.0 / 432.0 + 7.0 / 48.0 * M_PI * M_PI - 11.0 / 4.0 *
m_zeta3 ) *
140 ( 125.0 / 216.0 + M_PI * M_PI / 24.0 ) * nf );
151 pow(
Gamma( 0.5 + 0.5 *
m_b ), 2 ) -
194 EvtParticle *xuhad(
nullptr ), *lepton(
nullptr ), *neutrino(
nullptr );
196 double Pp, Pm, Pl, pdf, EX, sh, ml, mpi, ratemax;
199 double xhigh, xlow, what;
205 neutrino = Bmeson->
getDaug( 2 );
215 while ( what > xhigh || what < xlow ) {
217 what = xlow + what * ( xhigh - xlow );
231 EX = 0.5 * ( Pm + Pp );
232 El = 0.5 * (
m_mBB - Pl );
240 if ( ( Pp > 0 ) && ( Pp <= Pl ) && ( Pl <= Pm ) && ( Pm <
m_mBB ) &&
241 ( El > ml ) && ( sh > 4 * mpi * mpi ) ) {
243 pdf =
rate3( Pp, Pl, Pm );
245 if ( pdf >= testRan )
266 sttmp = sqrt( 1 - ctH * ctH );
267 ptmp = sqrt( EX * EX - sh );
268 double pHB[4] = { EX, ptmp * sttmp * cos( phH ), ptmp * sttmp * sin( phH ),
270 p4.
set( pHB[0], pHB[1], pHB[2], pHB[3] );
271 xuhad->init(
getDaug( 0 ), p4 );
273 bool _storeWhat(
true );
285 xuhad->setLifetime( what / 10000. );
291 double pWB[4] = {
m_mBB - EX, -pHB[1], -pHB[2], -pHB[3] };
297 double beta = ptmp / pWB[0];
298 double gamma = pWB[0] / sqrt( mW2 );
302 ptmp = ( mW2 - ml * ml ) / 2 / sqrt( mW2 );
303 pLW[0] = sqrt( ml * ml + ptmp * ptmp );
305 double ctL = ( El - gamma * pLW[0] ) / beta / gamma / ptmp;
310 sttmp = sqrt( 1 - ctL * ctL );
313 double xW[3] = { -pWB[2], pWB[1], 0 };
315 double zW[3] = { pWB[1] / apWB, pWB[2] / apWB, pWB[3] / apWB };
317 double lx = sqrt( xW[0] * xW[0] + xW[1] * xW[1] );
318 for ( j = 0; j < 2; j++ )
322 double yW[3] = { -pWB[1] * pWB[3], -pWB[2] * pWB[3],
323 pWB[1] * pWB[1] + pWB[2] * pWB[2] };
324 double ly = sqrt( yW[0] * yW[0] + yW[1] * yW[1] + yW[2] * yW[2] );
325 for ( j = 0; j < 3; j++ )
331 for ( j = 0; j < 3; j++ )
332 pLW[j + 1] = sttmp * cos( phL ) * ptmp * xW[j] +
333 sttmp * sin( phL ) * ptmp * yW[j] + ctL * ptmp * zW[j];
339 double appLB = beta * gamma * pLW[0] + gamma * ctL * apLW;
341 ptmp = sqrt( El * El - ml * ml );
342 double ctLL = appLB / ptmp;
349 double pLB[4] = { El, 0, 0, 0 };
350 double pNB[4] = { pWB[0] - El, 0, 0, 0 };
352 for ( j = 1; j < 4; j++ ) {
353 pLB[j] = pLW[j] + ( ctLL * ptmp - ctL * apLW ) / apWB * pWB[j];
354 pNB[j] = pWB[j] - pLB[j];
357 p4.
set( pLB[0], pLB[1], pLB[2], pLB[3] );
358 lepton->init(
getDaug( 1 ), p4 );
360 p4.
set( pNB[0], pNB[1], pNB[2], pNB[3] );
382 if ( doneJS * done1 * done2 * done3 == 0.0 ) {
393 double answer = factor * ( (
m_mBB + Pl - Pp - Pm ) * ( Pm - Pl ) * f1 +
394 2 * ( Pl - Pp ) * ( Pm - Pl ) * f2 +
395 (
m_mBB - Pm ) * ( Pm - Pp ) * f3 );
400 double mubar,
double doneJS,
double done1 )
402 std::vector<double> vars( 12 );
405 for (
int j = 2; j < 12; j++ ) {
409 double y = ( Pm - Pp ) / (
m_mBB - Pp );
410 double ah =
m_CF *
alphas( muh, vars ) / 4 / M_PI;
411 double ai =
m_CF *
alphas( mui, vars ) / 4 / M_PI;
412 double abar =
m_CF *
alphas( mubar, vars ) / 4 / M_PI;
415 double t1 = -4 * ai / ( Pp -
m_Lbar ) *
416 ( 2 * log( ( Pp -
m_Lbar ) / mui ) + 1 );
417 double t2 = 1 +
dU1nlo( muh, mui ) +
anlo( muh, mui ) * log( y );
418 double t3 = -4.0 * pow( log( y *
m_mb / muh ), 2 ) +
419 10.0 * log( y *
m_mb / muh ) - 4.0 * log( y ) -
420 2.0 * log( y ) / ( 1 - y ) - 4.0 *
PolyLog( 2, 1 - y ) -
421 M_PI * M_PI / 6.0 - 12.0;
422 double t4 = 2 * pow( log( y *
m_mb * Pp / ( mui * mui ) ), 2 ) -
423 3 * log( y *
m_mb * Pp / ( mui * mui ) ) + 7 - M_PI * M_PI;
425 double t5 = -
wS( Pp ) + 2 *
t( Pp ) +
426 ( 1.0 / y - 1.0 ) * (
u( Pp ) -
v( Pp ) );
427 double t6 = -( lambda1 + 3.0 *
m_lambda2 ) / 3.0 +
428 1.0 / pow( y, 2 ) * ( 4.0 / 3.0 * lambda1 - 2.0 *
m_lambda2 );
430 double shapePp =
Shat( Pp, vars );
432 double answer = ( t2 + ah * t3 + ai * t4 ) * shapePp + ai * doneJS +
437 answer = answer + t1;
442 double mubar,
double done3 )
444 std::vector<double> vars( 12 );
447 for (
int j = 2; j < 12; j++ ) {
451 double y = ( Pm - Pp ) / (
m_mBB - Pp );
453 double ah =
m_CF *
alphas( muh, vars ) / 4 / M_PI;
454 double abar =
m_CF *
alphas( mubar, vars ) / 4 / M_PI;
456 double t6 = -
wS( Pp ) - 2 *
t( Pp ) + 1.0 / y * (
t( Pp ) +
v( Pp ) );
457 double t7 = 1 / pow( y, 2 ) * ( 2.0 / 3.0 * lambda1 + 4.0 *
m_lambda2 ) -
458 1 / y * ( 2.0 / 3.0 * lambda1 + 3.0 / 2.0 *
m_lambda2 );
460 double shapePp =
Shat( Pp, vars );
462 double answer = ah * log( y ) / ( 1 - y ) * shapePp +
470 double mubar,
double done2 )
472 std::vector<double> vars( 12 );
475 for (
int j = 2; j < 12; j++ ) {
479 double y = ( Pm - Pp ) / (
m_mBB - Pp );
481 double abar =
m_CF *
alphas( mubar, vars ) / 4 / M_PI;
483 double t7 = 1.0 / pow( y, 2 ) * ( -2.0 / 3.0 * lambda1 +
m_lambda2 );
485 double shapePp =
Shat( Pp, vars );
487 double answer = 1.0 / ( Pm - Pp ) *
m_flag2 * 0.5 * y * abar * done2 +
494 std::vector<double> vars( 12 );
497 for (
int j = 2; j < 12; j++ ) {
501 double lowerlim = 0.001 * Pp;
502 double upperlim = ( 1.0 - 0.001 ) * Pp;
506 return integ.
evaluate( lowerlim, upperlim );
511 std::vector<double> vars( 12 );
514 for (
int j = 2; j < 12; j++ ) {
518 double lowerlim = 0.001 * Pp;
519 double upperlim = ( 1.0 - 0.001 ) * Pp;
523 return integ.
evaluate( lowerlim, upperlim );
528 std::vector<double> vars( 12 );
531 for (
int j = 2; j < 12; j++ ) {
535 double lowerlim = 0.001 * Pp;
536 double upperlim = ( 1.0 - 0.001 ) * Pp;
540 return integ.
evaluate( lowerlim, upperlim );
545 std::vector<double> vars( 12 );
548 for (
int j = 2; j < 12; j++ ) {
552 double lowerlim = 0.001 * Pp;
553 double upperlim = ( 1.0 - 0.001 ) * Pp;
557 return integ.
evaluate( lowerlim, upperlim );
562 return Shat( what, vars ) *
g1( what, vars );
567 return Shat( what, vars ) *
g2( what, vars );
572 return Shat( what, vars ) *
g3( what, vars );
579 double mui = vars[2];
580 double mBB = vars[5];
582 double y = ( Pm - Pp ) / ( mBB - Pp );
584 return 1 / ( Pp - what ) * (
Shat( what, vars ) -
Shat( Pp, vars ) ) *
585 ( 4 * log( y * mb * ( Pp - what ) / ( mui * mui ) ) - 3 );
592 double mBB = vars[5];
593 double y = ( Pm - Pp ) / ( mBB - Pp );
594 double x = ( Pp - w ) / ( mBB - Pp );
596 double q1 = ( 1 + x ) * ( 1 + x ) * y * ( x + y );
597 double q2 = y * ( -9 + 10 * y ) + x * x * ( -12.0 + 13.0 * y ) +
598 2 * x * ( -8.0 + 6 * y + 3 * y * y );
599 double q3 = 4 / x * log( y + y / x );
600 double q4 = 3.0 * pow( x, 4 ) * ( -2.0 + y ) - 2 * pow( y, 3 ) -
601 4 * pow( x, 3 ) * ( 2.0 + y ) - 2 * x * y * y * ( 4 + y ) -
602 x * x * y * ( 12 + 4 * y + y * y );
603 double q5 = log( 1 + y / x );
605 double answer = q2 / q1 - q3 - 2 * q4 * q5 / ( q1 * y * x );
613 double mBB = vars[5];
614 double y = ( Pm - Pp ) / ( mBB - Pp );
615 double x = ( Pp - w ) / ( mBB - Pp );
617 double q1 = ( 1 + x ) * ( 1 + x ) * pow( y, 3 ) * ( x + y );
618 double q2 = 10.0 * pow( x, 4 ) + y * y +
619 3.0 * pow( x, 2 ) * y * ( 10.0 + y ) +
620 pow( x, 3 ) * ( 12.0 + 19.0 * y ) +
621 x * y * ( 8.0 + 4.0 * y + y * y );
622 double q3 = 5 * pow( x, 4 ) + 2.0 * y * y +
623 6.0 * pow( x, 3 ) * ( 1.0 + 2.0 * y ) +
624 4.0 * x * y * ( 1 + 2.0 * y ) + x * x * y * ( 18.0 + 5.0 * y );
625 double q4 = log( 1 + y / x );
627 double answer = 2.0 / q1 * ( y * q2 - 2 * x * q3 * q4 );
635 double mBB = vars[5];
636 double y = ( Pm - Pp ) / ( mBB - Pp );
637 double x = ( Pp - w ) / ( mBB - Pp );
639 double q1 = ( 1 + x ) * ( 1 + x ) * pow( y, 3 ) * ( x + y );
640 double q2 = 2.0 * pow( y, 3 ) * ( -11.0 + 2.0 * y ) -
641 10.0 * pow( x, 4 ) * ( 6 - 6 * y + y * y ) +
642 x * y * y * ( -94.0 + 29.0 * y + 2.0 * y * y ) +
643 2.0 * x * x * y * ( -72.0 + 18.0 * y + 13.0 * y * y ) -
644 x * x * x * ( 72.0 + 42.0 * y - 70.0 * y * y + 3.0 * y * y * y );
645 double q3 = -6.0 * x * ( -5.0 + y ) * pow( y, 3 ) + 4 * pow( y, 4 ) +
646 5 * pow( x, 5 ) * ( 6 - 6 * y + y * y ) -
647 4 * x * x * y * y * ( -20.0 + 6 * y + y * y ) +
648 pow( x, 3 ) * y * ( 90.0 - 10.0 * y - 28.0 * y * y + y * y * y ) +
649 pow( x, 4 ) * ( 36.0 + 36.0 * y - 50.0 * y * y + 4 * y * y * y );
650 double q4 = log( 1 + y / x );
652 double answer = q2 / q1 + 2 / q1 / y * q3 * q4;
658 double mui = vars[2];
660 double Lambda = vars[4];
661 double wzero = vars[7];
662 int itype = (int)vars[11];
668 double Lambar = ( Lambda / b ) *
669 (
Gamma( 1 + b ) -
Gamma( 1 + b, b * wzero / Lambda ) ) /
670 (
Gamma( b ) -
Gamma( b, b * wzero / Lambda ) );
671 double muf = wzero - Lambar;
672 double mupisq = 3 * pow( Lambda, 2 ) / pow( b, 2 ) *
674 Gamma( 2 + b, b * wzero / Lambda ) ) /
675 (
Gamma( b ) -
Gamma( b, b * wzero / Lambda ) ) -
677 norm =
Mzero( muf, mui, mupisq, vars ) *
Gamma( b ) /
678 (
Gamma( b ) -
Gamma( b, b * wzero / Lambda ) );
679 shape = pow( b, b ) / Lambda /
Gamma( b ) * pow( w / Lambda, b - 1 ) *
680 exp( -b * w / Lambda );
684 double dcoef = pow(
Gamma( 0.5 * ( 1 + b ) ) /
Gamma( 0.5 * b ), 2 );
685 double t1 = wzero * wzero * dcoef / ( Lambda * Lambda );
687 Lambda * (
Gamma( 0.5 * ( 1 + b ) ) -
Gamma( 0.5 * ( 1 + b ), t1 ) ) /
688 pow( dcoef, 0.5 ) / (
Gamma( 0.5 * b ) -
Gamma( 0.5 * b, t1 ) );
689 double muf = wzero - Lambar;
690 double mupisq = 3 * Lambda * Lambda *
691 (
Gamma( 1 + 0.5 * b ) -
Gamma( 1 + 0.5 * b, t1 ) ) /
692 dcoef / (
Gamma( 0.5 * b ) -
Gamma( 0.5 * b, t1 ) ) -
694 norm =
Mzero( muf, mui, mupisq, vars ) *
Gamma( 0.5 * b ) /
696 Gamma( 0.5 * b, wzero * wzero * dcoef / ( Lambda * Lambda ) ) );
697 shape = 2 * pow( dcoef, 0.5 * b ) / Lambda /
Gamma( 0.5 * b ) *
698 pow( w / Lambda, b - 1 ) *
699 exp( -dcoef * w * w / ( Lambda * Lambda ) );
702 double answer = norm * shape;
707 const std::vector<double>& vars )
709 double CF = 4.0 / 3.0;
710 double amu = CF *
alphas( mu, vars ) / M_PI;
712 amu * ( pow( log( muf / mu ), 2 ) + log( muf / mu ) +
713 M_PI * M_PI / 24.0 ) +
714 amu * ( log( muf / mu ) - 0.5 ) * mupisq / ( 3 * muf * muf );
791 double factor = 0.5 * mom2 * pow( bval / Lbar, 3 );
792 double answer = factor *
exp( -bval * x ) *
793 ( 1 - 2 * bval * x + 0.5 * bval * bval * x * x );
800 double normBIK = ( 4 - M_PI ) * M_PI * M_PI / 8 / ( 2 - M_PI ) / aval + 1;
801 double z = 3 * M_PI * w / 8 / Lbar;
802 double q = M_PI * M_PI * 2 * pow( M_PI * aval, 0.5 ) *
exp( -aval * z * z ) /
803 ( 4 * M_PI - 8 ) * ( 1 - 2 * pow( aval / M_PI, 0.5 ) * z ) +
804 8 / pow( 1 + z * z, 4 ) *
805 ( z * log( z ) + 0.5 * z * ( 1 + z * z ) -
806 M_PI / 4 * ( 1 - z * z ) );
807 double answer = q / normBIK;
816 double q1 = ( ah - ai ) / ( 4 * M_PI *
m_beta0 );
835 double epsilon = 0.0;
836 double answer = pow(
m_mb / muh, -2 *
aGamma( muh, mui, epsilon ) ) *
837 exp( 2 *
Sfun( muh, mui, epsilon ) -
838 2 *
agp( muh, mui, epsilon ) );
854 ( -1.0 + 1.0 / r + log( r ) );
863 ( 1 - r + log( r ) ) );
876 ( -0.5 * pow( 1 - r, 2 ) * w1 + w2 * ( 1 - r ) * log( r ) +
877 w3 * ( 1 - r + r * log( r ) ) );
886 epsilon * (
a2 -
a1 ) / ( 8.0 * M_PI ) *
897 epsilon * (
a2 -
a1 ) / ( 8.0 * M_PI ) *
905 return -2.0 *
aGamma( muh, mui, 0 );
913 double answer = ( ah - ai ) / ( 8.0 * M_PI ) *
924 double beta0 = vars[8];
925 double beta1 = vars[9];
926 double beta2 = vars[10];
928 double Lambda4 = 0.298791;
929 double lg = 2 * log( mu / Lambda4 );
930 double answer = 4 * M_PI / ( beta0 * lg ) *
931 ( 1 - beta1 * log( lg ) / ( beta0 * beta0 * lg ) +
932 beta1 * beta1 / ( beta0 * beta0 * beta0 * beta0 * lg * lg ) *
933 ( ( log( lg ) - 0.5 ) * ( log( lg ) - 0.5 ) -
934 5.0 / 4.0 + beta2 * beta0 / ( beta1 * beta1 ) ) );
941 cout <<
"Error in EvtVubBLNP: 2nd argument to PolyLog is >= 1." << endl;
944 for (
int k = 1; k < 101; k++ ) {
945 sum = sum + pow( z, k ) / pow( k,
v );
955 double v = lgamma( z );
967 LogGamma = lgamma( a );
968 if ( x < ( a + 1.0 ) )
969 return gamser( a, x, LogGamma );
971 return 1.0 -
gammcf( a, x, LogGamma );
984 for ( n = 1; n <
ITMAX; n++ ) {
988 if ( fabs( del ) < fabs( sum ) *
EPS )
989 return sum *
exp( -x + a * log( x ) - LogGamma );
1001 double an, b, c, d, del, h;
1008 for ( i = 1; i <
ITMAX; i++ ) {
1009 an = -i * ( i - a );
1012 if ( fabs( d ) <
FPMIN )
1015 if ( fabs( c ) <
FPMIN )
1020 if ( fabs( del - 1.0 ) <
EPS )
1021 return exp( -x + a * log( x ) - LogGamma ) * h;
1031 double oOverBins = 1.0 / ( float(
m_pf.size() ) );
1033 int nBinsAbove =
m_pf.size();
1036 while ( nBinsAbove > nBinsBelow + 1 ) {
1037 middle = ( nBinsAbove + nBinsBelow + 1 ) >> 1;
1038 if ( ranNum >=
m_pf[middle] ) {
1039 nBinsBelow = middle;
1041 nBinsAbove = middle;
1045 double bSize =
m_pf[nBinsAbove] -
m_pf[nBinsBelow];
1052 return ( nBinsBelow + .5 ) * oOverBins;
1055 double bFract = ( ranNum -
m_pf[nBinsBelow] ) / bSize;
1057 return ( nBinsBelow + bFract ) * oOverBins;
EvtComplex exp(const EvtComplex &c)
double getArg(unsigned int j)
EvtId getDaug(int i) const
void checkNDaug(int d1, int d2=-1)
void checkNArg(int a1, int a2=-1, int a3=-1, int a4=-1)
const EvtId * getDaugs() const
double evaluate(double lower, double upper) const
double getSFBLNP(const double &what)
virtual void init(EvtId part_n, const EvtVector4R &p4)=0
double initializePhaseSpace(size_t numdaughter, const EvtId *daughters, bool forceResetMasses=false, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)
EvtParticle * getDaug(const int i)
void set(int i, double d)
double S0(double a1, double r)
double aGamma(double mu1, double mu2, double epsilon)
double F3(double Pp, double Pm, double muh, double mui, double mubar, double done2)
double Sfun(double mu1, double mu2, double epsilon)
double U1lo(double muh, double mui)
double S2(double a1, double r)
double anlo(double muh, double mui)
double S1(double a1, double r)
double PolyLog(double v, double z)
double rate3(double Pp, double Pl, double Pm)
static double Int2(double what, const std::vector< double > &vars)
static double alphas(double mu, const std::vector< double > &vars)
double myfunction(double w, double Lbar, double mom2)
double myfunctionBIK(double w, double Lbar, double mom2)
double agp(double mu1, double mu2, double epsilon)
double dU1nlo(double muh, double mui)
std::string getName() const override
static double Mzero(double muf, double mu, double mupisq, const std::vector< double > &vars)
double Done1(double Pp, double Pm, double mui)
static double Gamma(double z)
static double Shat(double w, const std::vector< double > &vars)
std::vector< double > m_pf
static double g2(double w, const std::vector< double > &vars)
double F1(double Pp, double Pm, double muh, double mui, double mubar, double doneJS, double done1)
EvtDecayBase * clone() const override
double F2(double Pp, double Pm, double muh, double mui, double mubar, double done3)
static double gammcf(double a, double x, double LogGamma)
static double Int1(double what, const std::vector< double > &vars)
void initProbMax() override
void decay(EvtParticle *Bmeson) override
static double gamser(double a, double x, double LogGamma)
static double IntJS(double what, const std::vector< double > &vars)
static double g3(double w, const std::vector< double > &vars)
double Done2(double Pp, double Pm, double mui)
double DoneJS(double Pp, double Pm, double mui)
static double Int3(double what, const std::vector< double > &vars)
static double g1(double w, const std::vector< double > &vars)
double Done3(double Pp, double Pm, double mui)
double alo(double muh, double mui)
std::vector< double > m_gvars