From b0132b40e80a258029ee2e62c8341000afa62e50 Mon Sep 17 00:00:00 2001 From: JasMehta08 Date: Sun, 17 Aug 2025 09:17:15 +0530 Subject: [PATCH] RooFit: Fix plotOn normalization for extended PDFs Signed-off-by: JasMehta08 --- roofit/roofitcore/src/RooAbsPdf.cxx | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/roofit/roofitcore/src/RooAbsPdf.cxx b/roofit/roofitcore/src/RooAbsPdf.cxx index 5503207ad0a0d..1cd9151f166a8 100644 --- a/roofit/roofitcore/src/RooAbsPdf.cxx +++ b/roofit/roofitcore/src/RooAbsPdf.cxx @@ -2146,7 +2146,21 @@ RooPlot* RooAbsPdf::plotOn(RooPlot* frame, RooLinkedList& cmdList) const scaleFactor *= rangeNevt/nExpected ; } else { - scaleFactor *= frame->getFitRangeNEvt()/nExpected ; + // First, check if the PDF *can* be extended. + if (this->canBeExtended()) { + // If it can, get the expected events. + const double nExp = expectedEvents(frame->getNormVars()); + if (nExp > 0) { + // If the prediction is valid, use it for normalization. + scaleFactor *= nExp / nExpected; + } else { + // If prediction is not valid (e.g. 0), fall back to data. + scaleFactor *= frame->getFitRangeNEvt() / nExpected; + } + } else { + // If the PDF can't be extended, just use the data. + scaleFactor *= frame->getFitRangeNEvt() / nExpected; + } } } else if (stype==RelativeExpected) { scaleFactor *= nExpected ;