-
Notifications
You must be signed in to change notification settings - Fork 1.5k
hesse fails after calling getVal on nll #7659
Copy link
Copy link
Closed
Labels
Description
Describe the bug
RooMinimizer::hesse() fails to find the correct hesse matrix if getVal has been used on the nll after minimize()
Expected behavior
The hesse matrix should be independent of the number of calls to getVal()
To Reproduce
Run this script on the attached workspace.
void test(){
using namespace RooFit;
TFile* infile = TFile::Open("workspace.root","READ");
RooWorkspace * ws = (RooWorkspace*)(infile->Get("Test"));
RooAbsData* data = ws->data("asimovData");
RooAbsPdf* pdf = ws->pdf("simPdf");
RooAbsReal* nll = pdf->createNLL(*data,NumCPU(1,3),Constrain(ws->argSet("norm_bkg,gamma_stat_CR_bin_0,gamma_stat_SR_bin_0,gamma_stat_SR_bin_1,gamma_stat_SR_bin_2,gamma_stat_SR_bin_3,gamma_stat_SR_bin_4,gamma_stat_SR_bin_5,gamma_stat_SR_bin_6,gamma_stat_SR_bin_7,gamma_stat_SR_bin_8,gamma_stat_SR_bin_9,gamma_stat_SR_bin_10,norm_bkg,gamma_stat_CR_bin_0,gamma_stat_SR_bin_0,gamma_stat_SR_bin_1,gamma_stat_SR_bin_2,gamma_stat_SR_bin_3,gamma_stat_SR_bin_4,gamma_stat_SR_bin_5,gamma_stat_SR_bin_6,gamma_stat_SR_bin_7,gamma_stat_SR_bin_8,gamma_stat_SR_bin_9,gamma_stat_SR_bin_10")),GlobalObservables(ws->argSet("nominalLumi,nom_gamma_stat_CR_bin_0,nom_gamma_stat_SR_bin_0,nom_gamma_stat_SR_bin_1,nom_gamma_stat_SR_bin_2,nom_gamma_stat_SR_bin_3,nom_gamma_stat_SR_bin_4,nom_gamma_stat_SR_bin_5,nom_gamma_stat_SR_bin_6,nom_gamma_stat_SR_bin_7,nom_gamma_stat_SR_bin_8,nom_gamma_stat_SR_bin_9,nom_gamma_stat_SR_bin_10,nominalLumi,nom_gamma_stat_CR_bin_0,nom_gamma_stat_SR_bin_0,nom_gamma_stat_SR_bin_1,nom_gamma_stat_SR_bin_2,nom_gamma_stat_SR_bin_3,nom_gamma_stat_SR_bin_4,nom_gamma_stat_SR_bin_5,nom_gamma_stat_SR_bin_6,nom_gamma_stat_SR_bin_7,nom_gamma_stat_SR_bin_8,nom_gamma_stat_SR_bin_9,nom_gamma_stat_SR_bin_10")));
std::cout << "starting point : " << nll->getVal() << std::endl;
RooArgSet params(*nll->getParameters((RooArgSet*)0));
params.Print("v");
gErrorIgnoreLevel = 0;
ROOT::Minuit2::MnPrint::ClearFilter();
ROOT::Math::MinimizerOptions::SetDefaultPrintLevel(2);
RooMinimizer mini(*nll);
mini.setMaxFunctionCalls(10000);
mini.setMaxIterations(175000);
mini.setPrintLevel(2);
mini.optimizeConst(1);
mini.setMinimizerType("Minuit2");
mini.setEvalErrorWall(1);
mini.setOffsetting(1);
mini.setPrintEvalErrors(5);
mini.setVerbose(0);
mini.setProfile(1);
mini.setStrategy(2);
mini.setEps(0.001);
std::cout << "starting minimization" << std::endl;
mini.minimize("Minuit2","Migrad");
// the call to nll->getVal() here seems to break it
std::cout << "nll val at minimum is " << nll->getVal() << std::endl;
mini.hesse();
}
Reactions are currently unavailable