Programmatically check fit success

What is the recommended way to ensure that a fit was successful? That is, I want to ensure it converged and its error matrix is positive-definite. Details below.


RooFitResult::status returns the MINUIT status code, but there is a bug that means I am getting status=0 even if the covariance matrix was forced positive-definite. (See below)

RooFitResult::covQual seems like a possible workaround, but I cannot find documentation for the codes (apparently a common problem).

I can extract the error matrix using RooFitResult::covarianceMatrix or correlationMatrix, but I haven’t found a built-in method to determine whether it’s positive definite, much less whether it was forced positive definite.


Regarding the above bug in RooFitResult::status, I have fit results where RooFitResult::status()==0 and RooFit::Print says that the covariance matrix was forced positive-definite. An old forum answer says that this should not happen, that the status should be 1 in this case, so this seems to be a bug. That said, the codes are not well documented, so perhaps I’ve missed something.

Dear @mwilkins ,

Thanks for reaching out to us! I will let @jonas or @moneta help you on this one.

Cheers,
Vincenzo