TF2 Integral with Minuit2 error

Hi all,
I’m currently trying to minimize a function whose return value is the result of TF2::Integral().
After several calls of the target function, it gives the following ERROR:

Error in <ROOT::Math::AdaptiveIntegratorMultiDim::DoIntegral()>: Logic error: idvax0 < 1!

The Code is something like this:

double func(const double *x){
...
TF2 *f...;
...
return  f->Integral(a1,b1,a2,b2);
}

ROOT::Math::Minimizer *miniChi = ROOT::Math::Factory::CreateMinimizer("Minuit2","Migrad");
ROOT::Math::Functor f(&func, NumOfPar );
miniChi->SetFunction(f);
...
miniChi->Minimize()
...

I found that in the source file of TF2::Integral(), there is a statement of:

...
if (idvax0 < 1) {
          // Can happen for overflows / degenerate floats.
          idvax0 = 1;
          ::Error("AdaptiveIntegratorMultiDim::DoIntegral()", "Logic error: idvax0 < 1!");
       }
...

I don’t really understand the overflow/degenerate floats error here.
Is it because TF2::Integral() is using the data type of float while the function need better precision such as a variable of double type? Any idea?

Cheers!

Jinnan


ROOT Version: 6.18.00
Platform: Ubuntu 18.04.01
Compiler: gcc 7.4.0


@moneta, perhaps you can help here please?

Thank you,
Oksana.

Thank you for your reply.
I perhaps found a “solution” :
I changed the minimizer varialble function by :

miniChi->SetLimitedVariable();

to

miniChi->SetVariable();

No more overflow/degenerate floats problem, but still don’t know why.

Cheers,
Jinnan

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.