123123#include " RooGlobalFunc.h"
124124#include " RooConstVar.h"
125125#include " RooUniformBinning.h"
126+ #include " RooFitImplHelpers.h"
126127
127128#include " TClass.h"
128129#include " TComplex.h"
@@ -205,15 +206,6 @@ void RooFFTConvPdf_doFFT(int n, double *input1, double *input2, double *output)
205206
206207#endif
207208
208- class NaNPackingNormalizer {
209- public:
210- double getVal (RooAbsPdf const &pdf, double normVal)
211- {
212- double rawVal = pdf.getVal ();
213- return pdf.normalizeWithNaNPacking (rawVal, normVal);
214- };
215- };
216-
217209using std::endl, std::string, std::ostream;
218210
219211
@@ -718,8 +710,10 @@ std::vector<double> RooFFTConvPdf::scanPdf(RooRealVar &obs, RooAbsPdf &pdf, doub
718710 while (zeroBin<0 ) zeroBin+= N2 ;
719711
720712 // To mimic exactly the normalization code in RooAbsPdf::getValV()
721- NaNPackingNormalizer npn;
722-
713+ auto getVal = [](RooAbsPdf const &p, double normVal) {
714+ double rawVal = p.getVal ();
715+ return RooFit::Detail::normalizeWithNaNPacking (p, rawVal, normVal);
716+ };
723717
724718 // First scan hist into temp array
725719 std::vector<double > tmp (N2);
@@ -730,7 +724,7 @@ std::vector<double> RooFFTConvPdf::scanPdf(RooRealVar &obs, RooAbsPdf &pdf, doub
730724 // Sample entire extended range (N2 samples)
731725 for (k=0 ; k<N2 ; k++) {
732726 histX->setBin (k) ;
733- tmp[k] = npn. getVal (pdf, normVal);
727+ tmp[k] = getVal (pdf, normVal);
734728 }
735729 break ;
736730
@@ -739,16 +733,16 @@ std::vector<double> RooFFTConvPdf::scanPdf(RooRealVar &obs, RooAbsPdf &pdf, doub
739733 // bins with p.d.f. value at respective boundary
740734 {
741735 histX->setBin (0 ) ;
742- double val = npn. getVal (pdf, normVal);
736+ double val = getVal (pdf, normVal);
743737 for (k=0 ; k<Nbuf ; k++) {
744738 tmp[k] = val ;
745739 }
746740 for (k=0 ; k<N ; k++) {
747741 histX->setBin (k) ;
748- tmp[k+Nbuf] = npn. getVal (pdf, normVal);
742+ tmp[k+Nbuf] = getVal (pdf, normVal);
749743 }
750744 histX->setBin (N-1 ) ;
751- val = npn. getVal (pdf, normVal);
745+ val = getVal (pdf, normVal);
752746 for (k=0 ; k<Nbuf ; k++) {
753747 tmp[N+Nbuf+k] = val ;
754748 }
@@ -760,13 +754,13 @@ std::vector<double> RooFFTConvPdf::scanPdf(RooRealVar &obs, RooAbsPdf &pdf, doub
760754 // bins with mirror image of sampled range
761755 for (k=0 ; k<N ; k++) {
762756 histX->setBin (k) ;
763- tmp[k+Nbuf] = npn. getVal (pdf, normVal);
757+ tmp[k+Nbuf] = getVal (pdf, normVal);
764758 }
765759 for (k=1 ; k<=Nbuf ; k++) {
766760 histX->setBin (k) ;
767- tmp[Nbuf-k] = npn. getVal (pdf, normVal);
761+ tmp[Nbuf-k] = getVal (pdf, normVal);
768762 histX->setBin (N-k) ;
769- tmp[Nbuf+N+k-1 ] = npn. getVal (pdf, normVal);
763+ tmp[Nbuf+N+k-1 ] = getVal (pdf, normVal);
770764 }
771765 break ;
772766 }
0 commit comments