Double_t RooIpatia2__LnBK(double ni, double x) { Double_t nu = TMath::Abs(ni); if ( x < 1.e-06 && nu > 0.) return RooIpatia2__low_x_LnBK(nu,x); if ( x < 1.e-04 && nu > 0. && nu < 55.) return RooIpatia2__low_x_LnBK(nu,x); if ( x < 0.1 && nu >= 55.) return RooIpatia2__low_x_LnBK(nu,x); return gsl_sf_bessel_lnKnu(nu, x); //return TMath::Log(ROOT::Math::cyl_bessel_k(nu, x)); }
Double_t RooGeneralizedHyperbolic__LnBK(double ni, double x) { Double_t nu = abs(ni); if ( x < 1e-06 && nu > 0) return RooGeneralizedHyperbolic__low_x_LnBK(nu,x); if ( x < 1e-04 && nu > 0 && nu < 55) return RooGeneralizedHyperbolic__low_x_LnBK(nu,x); if ( x < 0.1 && nu >= 55) return RooGeneralizedHyperbolic__low_x_LnBK(nu,x); return gsl_sf_bessel_lnKnu(nu, x); //return ROOT::Math::cyl_bessel_k(nu, x); }
void Egig(const int n,const double* p, const double* a, const double* b, double* Eg , double* Eig , double* Elogg ) { #ifdef _OPENMP int nP = omp_get_num_procs(); #else int nP = 1; #endif int thread = 0; int i; double sqrt_ab; double log_Kp, log_Kp1; double eps = 1e-7;//fabs(p[i] ) *1.4901e-08; #ifdef _OPENMP omp_set_num_threads(nP); #endif #pragma omp parallel private(i, sqrt_ab, log_Kp,log_Kp1) shared(a,b,p,Eg, Eig,Elogg) { #pragma omp for for(int i = 0; i < n; i++) { sqrt_ab = sqrt(a[i] * b[i]); log_Kp = gsl_sf_bessel_lnKnu(fabs(p[i]) , sqrt_ab); if(Eg){ log_Kp1 = gsl_sf_bessel_lnKnu( fabs( p[i] + 1), sqrt_ab); Eg[i] = exp( (log(b[i]) - log(a[i])) / 2 + log_Kp1 -log_Kp); } if(Eig) { log_Kp1 = gsl_sf_bessel_lnKnu(fabs( p[i] - 1), sqrt_ab); Eig[i] = exp( ( - log(b[i]) + log(a[i])) / 2 + log_Kp1 -log_Kp); } if(Elogg){ log_Kp1 = gsl_sf_bessel_lnKnu(fabs( p[i] + eps), sqrt_ab); Elogg[i] = (log(b[i] ) -log(a[i])) /2; Elogg[i] += (exp(log_Kp1 -log_Kp ) - 1) / eps; } } } }