|
9 | 9 | #include <RooFitHS3/JSONIO.h> |
10 | 10 | #include <RooFitHS3/RooJSONFactoryWSTool.h> |
11 | 11 |
|
12 | | -#include <RooFit/Detail/NormalizationHelpers.h> |
13 | | -#include <RooDataHist.h> |
14 | | -#include <RooWorkspace.h> |
15 | 12 | #include <RooArgSet.h> |
16 | | -#include <RooSimultaneous.h> |
17 | | -#include <RooRealSumPdf.h> |
18 | | -#include <RooRealVar.h> |
19 | | -#include <RooHelpers.h> |
| 13 | +#include <RooDataHist.h> |
| 14 | +#include <RooEvaluatorWrapper.h> |
| 15 | +#include <RooFit/Detail/NormalizationHelpers.h> |
| 16 | +#include <RooFit/Evaluator.h> |
20 | 17 | #include <RooFitResult.h> |
| 18 | +#include <RooHelpers.h> |
| 19 | +#include <RooMinimizer.h> |
21 | 20 | #include <RooPlot.h> |
22 | | -#include <RooFit/Evaluator.h> |
| 21 | +#include <RooRealSumPdf.h> |
| 22 | +#include <RooRealVar.h> |
| 23 | +#include <RooSimultaneous.h> |
| 24 | +#include <RooWorkspace.h> |
23 | 25 |
|
24 | 26 | #include <TROOT.h> |
25 | 27 | #include <TFile.h> |
@@ -618,9 +620,21 @@ TEST_P(HFFixtureFit, Fit) |
618 | 620 | } |
619 | 621 |
|
620 | 622 | using namespace RooFit; |
621 | | - std::unique_ptr<RooFitResult> fitResult{simPdf->fitTo(*data, evalBackend, Optimize(constTermOptimization), |
622 | | - GlobalObservables(*mc->GetGlobalObservables()), Save(), |
623 | | - PrintLevel(verbose ? 1 : -1))}; |
| 623 | + std::unique_ptr<RooAbsReal> nll{simPdf->createNLL(*data, evalBackend, Optimize(constTermOptimization), |
| 624 | + GlobalObservables(*mc->GetGlobalObservables()))}; |
| 625 | + RooMinimizer::Config cfg; |
| 626 | + if (evalBackend == RooFit::EvalBackend::Codegen()) { |
| 627 | + // Make sure we use both analytical gradient and Hessian |
| 628 | + static_cast<RooFit::Experimental::RooEvaluatorWrapper &>(*nll).generateGradient(); |
| 629 | + static_cast<RooFit::Experimental::RooEvaluatorWrapper &>(*nll).generateHessian(); |
| 630 | + cfg.useGradient = true; |
| 631 | + cfg.useHessian = true; |
| 632 | + } |
| 633 | + RooMinimizer minim{*nll, cfg}; |
| 634 | + minim.setPrintLevel(verbose ? 1 : -1); |
| 635 | + minim.minimize("Minuit2", "Migrad"); |
| 636 | + minim.hesse(); |
| 637 | + std::unique_ptr<RooFitResult> fitResult{minim.save()}; |
624 | 638 | ASSERT_NE(fitResult, nullptr); |
625 | 639 | if (verbose) |
626 | 640 | fitResult->Print("v"); |
|
0 commit comments