Numeric algorithm tuning: configuration and customization of how MC sampling algorithms on specific pdfs are executed
Author: Wouter Verkerke
This notebook tutorial was automatically generated with ROOTBOOK-izer from the macro found in the ROOT repository on Wednesday, April 17, 2024 at 11:20 AM.
%%cpp -d
#include "RooRealVar.h"
#include "RooDataSet.h"
#include "RooChebychev.h"
#include "TCanvas.h"
#include "TAxis.h"
#include "RooPlot.h"
#include "RooNumGenConfig.h"
#include "RooArgSet.h"
#include <iomanip>
using namespace RooFit;
Example pdf for use below
RooRealVar x("x", "x", 0, 10);
RooChebychev model("model", "model", x, RooArgList(0, 0.5, -0.1));
Change global strategy for 1D sampling problems without conditional observable (1st false) and without discrete observable (2nd false) from RooFoamGenerator, ( an interface to the TFoam MC generator with adaptive subdivisioning strategy ) to RooAcceptReject, a plain accept/reject sampling algorithm [ RooFit default before ROOT 5.23/04 ]
RooAbsPdf::defaultGeneratorConfig()->method1D(false, false).setLabel("RooAcceptReject");
[#0] ERROR:InputArguments -- Trying to set invalid state label 'RooAcceptReject' for category method1D
Generate 10Kevt using RooAcceptReject
std::unique_ptr<RooDataSet> data_ar{model.generate(x, 10000, Verbose(true))};
data_ar->Print();
--- RooGenContext --- Using PDF RooChebychev::model[ x=x coefList=(0,0.5,-0.1) ] Use PDF generator for () Use MC sampling generator RooFoamGenerator for (x) RooDataSet::modelData[x] = 10000 entries
Another possibility: associate custom MC sampling configuration as default for object 'model' The true argument will install a clone of the default configuration as specialized configuration for this model if none existed so far
model.specialGeneratorConfig(true)->method1D(false, false).setLabel("RooFoamGenerator");
Adjust maximum number of steps of RooIntegrator1D in the global default configuration
RooAbsPdf::defaultGeneratorConfig()->getConfigSection("RooAcceptReject").setRealValue("nTrial1D", 2000);
Example of how to change the parameters of a numeric integrator (Each config section is a RooArgSet with RooRealVars holding real-valued parameters and RooCategories holding parameters with a finite set of options)
model.specialGeneratorConfig()->getConfigSection("RooFoamGenerator").setRealValue("chatLevel", 1);
Generate 10Kevt using RooFoamGenerator (FOAM verbosity increased with above chatLevel adjustment for illustration purposes)
std::unique_ptr<RooDataSet> data_foam{model.generate(x, 10000, Verbose())};
data_foam->Print();
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F F F **************************************** F F ****** TFoam::Initialize ****** F F **************************************** F F TFOAM F F Version = 1.02M = Release date: 2005.04.10 F F kDim = 1 = Dimension of the hyper-cubical space F F nCells = 30 = Requested number of Cells (half of them active) F F nSampl = 200 = No of MC events in exploration of a cell F F nBin = 8 = No of bins in histograms, MC exploration of cell F F EvPerBin = 25 = Maximum No effective_events/bin, MC exploration F F OptDrive = 2 = Type of Driver =1,2 for Sigma,WtMax F F OptRej = 1 = MC rejection on/off for OptRej=0,1 F F MaxWtRej = 1.1 = Maximum wt in rejection for wt=1 evts F F F FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 11 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F F F *** TFoam::Initialize FINISHED!!! *** F F nCalls = 5800 = Total number of function calls F F XPrime = 0.10992972 = Primary total integral F F XDiver = 0.010000374 = Driver total integral F F mcResult = 0.099929343 = Estimate of the true MC Integral F F F FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF --- RooGenContext --- Using PDF RooChebychev::model[ x=x coefList=(0,0.5,-0.1) ] Use PDF generator for () Use MC sampling generator RooFoamGenerator for (x) RooDataSet::modelData[x] = 10000 entries