Skip to content

Commit 42f69ae

Browse files
committed
[RF] Fix RooCBShape integral near n = 1
1 parent 7f96d74 commit 42f69ae

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

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

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -712,7 +712,10 @@ 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 *
718+
(log_b_tmin - log_b_tmax + 0.5 * (1.0 - n) * (log_b_tmin * log_b_tmin - log_b_tmax * log_b_tmax));
716719
} else {
717720
result += a * sig / (1.0 - n) * (std::pow(r / (b - tmin), n - 1.0) - std::pow(r / (b - tmax), n - 1.0));
718721
}
@@ -723,7 +726,10 @@ inline double cbShapeIntegral(double mMin, double mMax, double m0, double sigma,
723726

724727
double term1 = 0.0;
725728
if (useLog) {
726-
term1 = a * std::pow(r, n - 1) * sig * (std::log(b - tmin) - std::log(r));
729+
double log_b_tmin = std::log(b - tmin);
730+
double log_r = std::log(r);
731+
term1 = a * std::pow(r, n - 1) * sig *
732+
(log_b_tmin - log_r + 0.5 * (1.0 - n) * (log_b_tmin * log_b_tmin - log_r * log_r));
727733
} else {
728734
term1 = a * sig / (1.0 - n) * (std::pow(r / (b - tmin), n - 1.0) - 1.0);
729735
}

0 commit comments

Comments
 (0)