complex LoopToolsWrapper::PV_B00(const double mu2, const double p2, const double m02, const double m12) const { setmudim(mu2); std::complex<double> B00val = B00(p2, m02, m12); return complex( B00val.real(), B00val.imag(), false ); }
TSIL_COMPLEX B0x (TSIL_REAL X, TSIL_COMPLEX S, TSIL_REAL QQ) { if (TSIL_FABS (X) < TSIL_TOL) return B00(S,QQ); if (TSIL_CABS (S) < TSIL_TOL) return (1.0L - TSIL_LOG (X/QQ)); if (TSIL_CABS (1.0L - S/X) < 10.0L*TSIL_TOL) return 2.0L - TSIL_LOG(X/QQ); S = AddIeps(S); return 2.0L + ((X - S)*TSIL_CLOG((X - S)/QQ) - X*TSIL_LOG(X/QQ))/S; }
TSIL_COMPLEX B (TSIL_REAL X, TSIL_REAL Y, TSIL_COMPLEX S, TSIL_REAL QQ) { TSIL_REAL temp; TSIL_COMPLEX sqDeltaSXY, lnbarX, lnbarY; if (TSIL_FABS (X) < TSIL_FABS (Y)) {temp = Y; Y = X; X = temp;} if (TSIL_FABS (X) < TSIL_TOL) return B00(S,QQ); if (TSIL_FABS (Y) < TSIL_TOL) return B0x(X,S,QQ); if (TSIL_CABS (S) < TSIL_TOL) { if (TSIL_FABS (1.0L - Y/X) > 0.0L) return (1.0L + (Y*TSIL_LOG(Y/QQ) - X*TSIL_LOG(X/QQ))/(X-Y)); else return (-TSIL_LOG (X/QQ)); } S = AddIeps(S); sqDeltaSXY = TSIL_CSQRT(Delta(S, X, Y)); lnbarX = TSIL_LOG (X/QQ); lnbarY = TSIL_LOG (Y/QQ); /* Following avoids roundoff error for very negative s. */ if ((TSIL_CREAL(S) < -10.0L*(X+Y)) && (TSIL_CIMAG(S) < TSIL_TOL)) { return (2.0L - 0.5L * (lnbarX + lnbarY) + (sqDeltaSXY * TSIL_CLOG(0.5L*(X + Y - S + sqDeltaSXY)/Y) + 0.5L * (Y - X - sqDeltaSXY) * (lnbarX - lnbarY))/S); } return (2.0L - 0.5L * (lnbarX + lnbarY) + (-sqDeltaSXY * TSIL_CLOG(0.5L*(X + Y - S - sqDeltaSXY)/X) + 0.5L * (Y - X - sqDeltaSXY) * (lnbarX - lnbarY))/S); }
std::complex<double> H0(T p2, T m2a, T m2b, double scl2) { return 4.0*B00(p2, m2a, m2b, scl2) + G0(p2, m2a, m2b, scl2); }
std::complex<double> B22(T p2, T m2a, T m2b, double scl2) { return B00(p2, m2a, m2b, scl2) - A0(m2a, scl2)/4.0 - A0(m2b, scl2)/4.0; }