Organisation and simultaneous fits: reading and writing ASCII configuration files
Author: Wouter Verkerke
This notebook tutorial was automatically generated with ROOTBOOK-izer from the macro found in the ROOT repository on Tuesday, March 19, 2024 at 07:16 PM.
%%cpp -d
#include "RooRealVar.h"
#include "RooDataSet.h"
#include "RooGaussian.h"
#include "RooPolynomial.h"
#include "RooAddPdf.h"
#include "TCanvas.h"
#include "TAxis.h"
#include "RooPlot.h"
using namespace RooFit;
Construct gauss(x,m,s)
RooRealVar x("x", "x", -10, 10);
RooRealVar m("m", "m", 0, -10, 10);
RooRealVar s("s", "s", 1, -10, 10);
RooGaussian gauss("g", "g", x, m, s);
[#0] WARNING:InputArguments -- The parameter 's' with range [-10, 10] of the RooGaussian 'g' exceeds the safe range of (0, inf). Advise to limit its range.
Construct poly(x,p0)
RooRealVar p0("p0", "p0", 0.01, 0., 1.);
RooPolynomial poly("p", "p", x, p0);
Construct model = fgauss(x) + (1-f)poly(x)
RooRealVar f("f", "f", 0.5, 0., 1.);
RooAddPdf model("model", "model", RooArgSet(gauss, poly), f);
std::unique_ptr<RooDataSet> d{model.generate(x, 1000)};
model.fitTo(*d, PrintLevel(-1));
[#1] INFO:Fitting -- RooAbsPdf::fitTo(model) fixing normalization set for coefficient determination to observables in data [#1] INFO:Fitting -- using CPU computation library compiled with -mavx2 [#1] INFO:Fitting -- RooAddition::defaultErrorLevel(nll_model_modelData) Summation contains a RooNLLVar, using its error level [#1] INFO:Minimization -- RooAbsMinimizerFcn::setOptimizeConst: activating const optimization [#1] INFO:Minimization -- RooAbsMinimizerFcn::setOptimizeConst: deactivating const optimization
Obtain set of parameters
std::unique_ptr<RooArgSet> params{model.getParameters(x)};
Write parameters to file
params->writeToFile("rf505_asciicfg_example.txt");
TString dir1 = gROOT->GetTutorialDir() ;
dir1.Append("/roofit/rf505_asciicfg.txt") ;
TString dir2 = "rf505_asciicfg_example.txt";
Read parameters from file
params->readFromFile(dir2);
params->Print("v");
1) 0x7f5234014000 RooRealVar:: f = 0.50733 +/- 0.020971 L(0 - 1) "f" 2) 0x7f52344e63e8 RooRealVar:: m = 0.0064018 +/- 0.053686 L(-10 - 10) "m" 3) 0x7f523401c000 RooRealVar:: p0 = 0.0073509 +/- 0.0078312 L(0 - 1) "p0" 4) 0x7f52344e67d0 RooRealVar:: s = 0.96516 +/- 0.047052 L(-10 - 10) "s"
Read parameters from section 'Section2' of file
params->readFromFile(dir1, 0, "Section2");
params->Print("v");
[#1] INFO:InputArguments -- RooArgSet::readFromStream(parameters): processing include file rf505_asciicfg_example.txt 1) 0x7f5234014000 RooRealVar:: f = 0.45 +/- 0.03 L(0 - 1) "f" 2) 0x7f52344e63e8 RooRealVar:: m = 0.025 +/- 0.02 L(-10 - 10) "m" 3) 0x7f523401c000 RooRealVar:: p0 = 0.0022 +/- 0.0001 L(0 - 1) "p0" 4) 0x7f52344e67d0 RooRealVar:: s = 0.98 +/- 0.03 L(-10 - 10) "s"
Read parameters from section 'Section3' of file. Mark all variables that were processed with the "READ" attribute
params->readFromFile(dir1, "READ", "Section3");
[#1] INFO:InputArguments -- RooArgSet::readFromStream(parameters): processing include file rf505_asciicfg_example.txt
Print the list of parameters that were not read from Section3
cout << "The following parameters of the were _not_ read from Section3: "
<< (*params->selectByAttrib("READ", false)) << endl;
The following parameters of the were _not_ read from Section3: (p0,s)
Read parameters from section 'Section4' of file, which contains 'include file' statement of rf505_asciicfg_example.txt so that we effective read the same
params->readFromFile(dir1, 0, "Section4");
params->Print("v");
[#1] INFO:InputArguments -- RooArgSet::readFromStream(parameters): processing include file rf505_asciicfg_example.txt 1) 0x7f5234014000 RooRealVar:: f = 0.372 C L(0 - 1) "f" 2) 0x7f52344e63e8 RooRealVar:: m = 0.195 C L(-10 - 10) "m" 3) 0x7f523401c000 RooRealVar:: p0 = 0.0022 +/- 0.0001 L(0 - 1) "p0" 4) 0x7f52344e67d0 RooRealVar:: s = 0.98 +/- 0.03 L(-10 - 10) "s"