Unexpected result with RooFFTConvPDF after ROOT 6.32

Dear experts,

I am using the RooFFTConvPdf to describe the detector resolution.
I found that the fit could easily converge with the root before v6.32.00.
But diverge for the v6.32.00.
Given the log

RooAbsMinimizerFcn: Minimized function has error status.
Returning maximum FCN so far (-inf) to force MIGRAD to back out of this region. Error log follows.
Parameter values: 	c0=-0.491664	mean=5800	n_CombBkg=358	n_argus=305.5	nsig=100	sigma=8.09227
RooAddPdf::model[ nsig * sigpdf_over_sigpdf_Int[mass] + n_CombBkg * CombBkg_over_CombBkg_Int[mass] + n_argus * Part_Rec_Bkg_over_Part_Rec_Bkg_Int[mass] ]
     getLogVal() top-level p.d.f evaluates to NaN @ !refCoefNorm=(mass = 5800), !pdfs=(sigpdf_over_sigpdf_Int[mass] = 0.0492992,CombBkg_over_CombBkg_Int[mass] = 0,Part_Rec_Bkg_over_Part_Rec_Bkg_Int[mass] = 7.66857e-19), !coefficients=(nsig = 100 +/- 0,n_CombBkg = 358 +/- 0,n_argus = 305.5 +/- 0)
     getLogVal() top-level p.d.f evaluates to NaN @ !refCoefNorm=(mass = 5800), !pdfs=(sigpdf_over_sigpdf_Int[mass] = 0.0492992,CombBkg_over_CombBkg_Int[mass] = 0,Part_Rec_Bkg_over_Part_Rec_Bkg_Int[mass] = 7.66857e-19), !coefficients=(nsig = 100 +/- 0,n_CombBkg = 358 +/- 0,n_argus = 305.5 +/- 0)
     getLogVal() top-level p.d.f evaluates to NaN @ !refCoefNorm=(mass = 5800), !pdfs=(sigpdf_over_sigpdf_Int[mass] = 0.0492992,CombBkg_over_CombBkg_Int[mass] = 0,Part_Rec_Bkg_over_Part_Rec_Bkg_Int[mass] = 7.66857e-19), !coefficients=(nsig = 100 +/- 0,n_CombBkg = 358 +/- 0,n_argus = 305.5 +/- 0)
     getLogVal() top-level p.d.f evaluates to NaN @ !refCoefNorm=(mass = 5800), !pdfs=(sigpdf_over_sigpdf_Int[mass] = 0.0492992,CombBkg_over_CombBkg_Int[mass] = 0,Part_Rec_Bkg_over_Part_Rec_Bkg_Int[mass] = 7.66857e-19), !coefficients=(nsig = 100 +/- 0,n_CombBkg = 358 +/- 0,n_argus = 305.5 +/- 0)
     getLogVal() top-level p.d.f evaluates to NaN @ !refCoefNorm=(mass = 5800), !pdfs=(sigpdf_over_sigpdf_Int[mass] = 0.0492992,CombBkg_over_CombBkg_Int[mass] = 0,Part_Rec_Bkg_over_Part_Rec_Bkg_Int[mass] = 7.66857e-19), !coefficients=(nsig = 100 +/- 0,n_CombBkg = 358 +/- 0,n_argus = 305.5 +/- 0)
     getLogVal() top-level p.d.f evaluates to NaN @ !refCoefNorm=(mass = 5800), !pdfs=(sigpdf_over_sigpdf_Int[mass] = 0.0492992,CombBkg_over_CombBkg_Int[mass] = 0,Part_Rec_Bkg_over_Part_Rec_Bkg_Int[mass] = 7.66857e-19), !coefficients=(nsig = 100 +/- 0,n_CombBkg = 358 +/- 0,n_argus = 305.5 +/- 0)
     getLogVal() top-level p.d.f evaluates to NaN @ !refCoefNorm=(mass = 5800), !pdfs=(sigpdf_over_sigpdf_Int[mass] = 0.0492992,CombBkg_over_CombBkg_Int[mass] = 0,Part_Rec_Bkg_over_Part_Rec_Bkg_Int[mass] = 7.66857e-19), !coefficients=(nsig = 100 +/- 0,n_CombBkg = 358 +/- 0,n_argus = 305.5 +/- 0)
     getLogVal() top-level p.d.f evaluates to NaN @ !refCoefNorm=(mass = 5800), !pdfs=(sigpdf_over_sigpdf_Int[mass] = 0.0492992,CombBkg_over_CombBkg_Int[mass] = 0,Part_Rec_Bkg_over_Part_Rec_Bkg_Int[mass] = 7.66857e-19), !coefficients=(nsig = 100 +/- 0,n_CombBkg = 358 +/- 0,n_argus = 305.5 +/- 0)
     getLogVal() top-level p.d.f evaluates to NaN @ !refCoefNorm=(mass = 5800), !pdfs=(sigpdf_over_sigpdf_Int[mass] = 0.0492992,CombBkg_over_CombBkg_Int[mass] = 0,Part_Rec_Bkg_over_Part_Rec_Bkg_Int[mass] = 7.66857e-19), !coefficients=(nsig = 100 +/- 0,n_CombBkg = 358 +/- 0,n_argus = 305.5 +/- 0)
     getLogVal() top-level p.d.f evaluates to NaN @ !refCoefNorm=(mass = 5800), !pdfs=(sigpdf_over_sigpdf_Int[mass] = 0.0492992,CombBkg_over_CombBkg_Int[mass] = 0,Part_Rec_Bkg_over_Part_Rec_Bkg_Int[mass] = 7.66857e-19), !coefficients=(nsig = 100 +/- 0,n_CombBkg = 358 +/- 0,n_argus = 305.5 +/- 0)
     getLogVal() top-level p.d.f evaluates to NaN @ !refCoefNorm=(mass = 5800), !pdfs=(sigpdf_over_sigpdf_Int[mass] = 0.0492992,CombBkg_over_CombBkg_Int[mass] = 0,Part_Rec_Bkg_over_Part_Rec_Bkg_Int[mass] = 7.66857e-19), !coefficients=(nsig = 100 +/- 0,n_CombBkg = 358 +/- 0,n_argus = 305.5 +/- 0)
     getLogVal() top-level p.d.f evaluates to NaN @ !refCoefNorm=(mass = 5800), !pdfs=(sigpdf_over_sigpdf_Int[mass] = 0.0492992,CombBkg_over_CombBkg_Int[mass] = 0,Part_Rec_Bkg_over_Part_Rec_Bkg_Int[mass] = 7.66857e-19), !coefficients=(nsig = 100 +/- 0,n_CombBkg = 358 +/- 0,n_argus = 305.5 +/- 0)
    ... (remaining 18 messages suppressed)

Warning in <Minuit2>: MnHesse 2nd derivative zero for parameter c0 ; MnHesse fails and will return diagonal matrix
Info in <Minuit2>: MnHesse Done after 10.2978 ms
Warning in <Minuit2>: Minuit2Minimizer::Hesse Hesse failed - matrix is full but not positive defined
Warning in <Minuit2>: Minuit2Minimizer::Hesse 3
[#0] ERROR:Minimization -- RooMinimizer::calculateHessErrors() Error when calculating Hessian
[#0] ERROR:Minimization -- RooMinimizer: all function calls during minimization gave invalid NLL values!
[#1] INFO:Minimization -- RooAbsMinimizerFcn::setOptimizeConst: deactivating const optimization


  RooFitResult: minimized FCN value: 1.98025e-13, estimated distance to minimum: 6.06841e-16
                covariance matrix quality: Not calculated at all
                Status : MINIMIZE=-1 HESSE=302 

When I am looking at the ROOT Version 6.32 Release Notes , it said

I f you experience unexpected problems related to the likelihood evaluation, you can revert back to the old backend by passing RooFit::EvalBackend("legacy") to RooAbsPdf::fitTo() or RooAbsPdf::createNLL().

By adding the argument RooFit::EvalBackend("legacy"), the proble was fixed.
And the fit result agree with different root version.
Is that under the expectation?

Here is the working example, I think it could be reproduced.
MWE_argus.C (4.1 KB)

  • platform: AlmaLinux9
  • root version: 6.30.08 and 6.32.00 from LCG in cvmfs

Many thanks.

Hi Kyu,

Thanks for sharing with the community this example. We are looking into it and will come back to you (@jonas)

Cheers,
D

Sorry that I made a mistake in the attachment before.
The argus_m0 should be 5800 - 135, not 5800, 135. The attached code is updated now.

The problem seems minor in this work example, but much terrible when I am doing for the real data. I can not even got a resonable fit result.
I am sorrry I can not put the plot and code for the real data case.
But it have the same structure on the PDF construction and it shows similar log to this working example.

Best regards,
Kunpeng

Thanks Kyu, your constraints are perfectly reasonable, no worries. A reproducer with fake data should be enough.

Cheers,
D