Skip to content

Commit 319894c

Browse files
committed
[RF] Fix RooCBShape integral near n = 1
1 parent 0a98da0 commit 319894c

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

roofit/roofitcore/inc/RooFit/Detail/MathFuncs.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -712,7 +712,9 @@ inline double cbShapeIntegral(double mMin, double mMax, double m0, double sigma,
712712
double b = r - absAlpha;
713713

714714
if (useLog) {
715-
result += a * std::pow(r, n - 1) * sig * (std::log(b - tmin) - std::log(b - tmax));
715+
double log_b_tmin = std::log(b - tmin);
716+
double log_b_tmax = std::log(b - tmax);
717+
result += a * std::pow(r, n - 1) * sig * (log_b_tmin - log_b_tmax + 0.5 * (1.0 - n) * (log_b_tmin * log_b_tmin - log_b_tmax * log_b_tmax));
716718
} else {
717719
result += a * sig / (1.0 - n) * (std::pow(r / (b - tmin), n - 1.0) - std::pow(r / (b - tmax), n - 1.0));
718720
}
@@ -723,7 +725,9 @@ inline double cbShapeIntegral(double mMin, double mMax, double m0, double sigma,
723725

724726
double term1 = 0.0;
725727
if (useLog) {
726-
term1 = a * std::pow(r, n - 1) * sig * (std::log(b - tmin) - std::log(r));
728+
double log_b_tmin = std::log(b - tmin);
729+
double log_r = std::log(r);
730+
term1 = a * std::pow(r, n - 1) * sig * (log_b_tmin - log_r + 0.5 * (1.0 - n) * (log_b_tmin * log_b_tmin - log_r * log_r));
727731
} else {
728732
term1 = a * sig / (1.0 - n) * (std::pow(r / (b - tmin), n - 1.0) - 1.0);
729733
}

0 commit comments

Comments
 (0)