%%cpp -d #include "RooRealVar.h" #include "RooDataSet.h" #include "RooGaussian.h" #include "RooProdPdf.h" #include "RooAddPdf.h" #include "RooMinimizer.h" #include "RooFitResult.h" #include "RooPlot.h" #include "TCanvas.h" #include "TAxis.h" #include "TH1.h" using namespace RooFit; RooRealVar x("x", "x", -20, 20); RooRealVar mean("mean", "mean of g1 and g2", 0); RooRealVar sigma_g1("sigma_g1", "width of g1", 3); RooGaussian g1("g1", "g1", x, mean, sigma_g1); RooRealVar sigma_g2("sigma_g2", "width of g2", 4, 3.0, 6.0); RooGaussian g2("g2", "g2", x, mean, sigma_g2); RooRealVar frac("frac", "frac", 0.5, 0.0, 1.0); RooAddPdf model("model", "model", RooArgList(g1, g2), frac); std::unique_ptr data{model.generate(x, 1000)}; std::unique_ptr nll{model.createNLL(*data)}; RooMinimizer m(*nll); m.setVerbose(true); m.migrad(); std::unique_ptr{model.getParameters(x)}->Print("s"); m.setVerbose(false); m.hesse(); sigma_g2.Print(); m.minos(sigma_g2); sigma_g2.Print(); std::unique_ptr fitResult{m.save()}; RooPlot *frame = m.contour(frac, sigma_g2, 1, 2, 3); frame->SetTitle("Minuit contour plot"); fitResult->Print("v"); mean = 0.3; m.migrad(); m.hesse(); frac.Print(); sigma_g2.setConstant(true); m.migrad(); m.hesse(); frac.Print(); new TCanvas("rf601_intminuit", "rf601_intminuit", 600, 600); gPad->SetLeftMargin(0.15); frame->GetYaxis()->SetTitleOffset(1.4); frame->Draw(); %jsroot on gROOT->GetListOfCanvases()->Draw()