using namespace RooFit; RooMsgService::instance().getStream(1).removeTopic(Minimization); RooMsgService::instance().getStream(1).removeTopic(Fitting); RooRealVar x("x", "x", -10, 10); RooRealVar mu("mu", "mu", 0.0, -10, 10); RooRealVar sigma("sigma", "sigma", 1.0, 0.1, 2.0); RooGaussian gauss("gauss", "gauss", x, mu, sigma); RooRealVar mu_obs("mu_obs", "mu_obs", 1.0, -10, 10); mu_obs.setConstant(); RooGaussian constraint("constraint", "constraint", mu_obs, mu, 0.1); RooProdPdf model("model", "model", {gauss, constraint}); std::unique_ptr dataGlob{model.generate({mu_obs}, 1)}; double mu_obs_orig_val = mu_obs.getVal(); RooArgSet{mu_obs}.assign(*dataGlob->get(0)); std::unique_ptr data{model.generate({x}, 50)}; data->setGlobalObservables({mu_obs}); mu_obs.setVal(mu_obs_orig_val); RooArgSet modelParameters; model.getParameters(data->get(), modelParameters); RooArgSet origParameters; modelParameters.snapshot(origParameters); using FitRes = std::unique_ptr; std::cout << "1. model.fitTo(*data, GlobalObservables(mu_obs))\n"; std::cout << "------------------------------------------------\n"; FitRes res1{model.fitTo(*data, GlobalObservables(mu_obs), PrintLevel(-1), Save())}; res1->Print(); modelParameters.assign(origParameters); std::cout << "2. model.fitTo(*data)\n"; std::cout << "---------------------\n"; FitRes res2{model.fitTo(*data, PrintLevel(-1), Save())}; res2->Print(); modelParameters.assign(origParameters); std::cout << "3. model.fitTo(*data, GlobalObservables(mu_obs), GlobalObservablesSource(\"model\"))\n"; std::cout << "------------------------------------------------\n"; FitRes res3{model.fitTo(*data, GlobalObservables(mu_obs), GlobalObservablesSource("model"), PrintLevel(-1), Save())}; res3->Print(); modelParameters.assign(origParameters); %jsroot on gROOT->GetListOfCanvases()->Draw()