RooFit

New infrastructure for toy MC studies

A new class RooStudyManager has been added that is intended to replace the present RooMCStudy framework for toy MC studies on the time scale of ROOT release 5.26.

The present RooMCStudy is a small monolithic driver to execute 'generate-and-fit' style MC studies for a given pdf. It provides some room for customization, through modules inheriting from RooAbsMCStudyModule that can modify the standard behavior, but its design limits the amount of flexibility.

In the new RooStudyManager design, the functionality of RooMCStudy has been split into two classes: class RooStudyManager which manages the logistics of running repetitive studies and class RooGenFitStudy which implements the functionality of the 'generate-and-fit'-style study of RooMCStudy. The new design has two big advantages:

  1. Complete freedom in the design of studies, either by tailoring the behavior of RooGenFitStudy or by using another study module that inherits from RooAbsStudy, and the data that they return.
  2. More flexibility in the mode of execution. The new study manager can execute all study modules inlines, as was done in RooMCStudy), but also parallelized through PROOF (at present only PROOF-lite is support, as well as in batch
The code fragment below illustrates the use of the new study manager
  // Create workspace with p.d.f
  RooWorkspace* ww = new RooWorkspace("ww") ;
  ww->factory("Gaussian::g(x[-10,10],mean[-10,10],sigma[3,0.1,10])") ;

  RooGenFitStudy gfs ;
  gfs.setGenConfig("g","x",NumEvents(1000)) ;
  gfs.setFitConfig("g","x",PrintLevel(-1)) ;

  RooStudyManager mgr(*ww,gfs) ;

  mgr.run(1000) ; // execute 1000 toys inline
  mgr.runProof(10000,"") ; // execute 10000 toys through PROOF-lite

  gfs.summaryData()->Print() ;

Workspace and factory improvements

The workspace class RooWorkspace has been augmented with several new features

Improvements to functions and pdfs

Miscellaneous improvements data classes

Miscellaneous improvements other

RooStats

Major Changes in LimitCalculator and HypoTestCalculator

The RooStats calculator interfaces have been changed to use the ModelConfig class. All the setter methods with the parameter lists, pdf instances and name have been removed from the interfaces. The SetWorkspace(RooWorkspace & ) has also been removed, while a SetModel(const ModelConfig &) function is introduced.
Users are supposed to pass all the model information using the ModelConfig class and not anymore the RooWorkspace. Setters method via pdf instances and parameter lists have been mantained in the derived classes, like the ProfileLikelihoodCalculator or the HybridCalculator, but those passing a string for the name of the pdf have been removed.
All the calculator classes do not keep anymore a pointer to the workspace, but they have pointers to the pdf, data and parameters required to run the calculator. These pointers are managed outside by the users or an external RooWorkspace. They can be passed either directly to the classes, for example via the constructor, or by using the ModelConfig class. The ModelConfig class acts as an interface to the Workspace in order to load and store all the needed information.

BayesianCalculator

New class for calculating Bayesian interval using numerical integration. It Implements the IntervalCalculator interface and returns as result a SimpleInterval. Works currently only for one-dimensional problems.

HypoTestInvertor

New class for performing an hypothesis test inversion by scanning the result of the HybridCalculator to compute an upper limit. The class implements the IntervalCalculator interface.

Improvements and Bug fixes

Various improvements and fixes have been applied also to all the other classes, like ProfileLikelihoodCalculator, HybridCalculator, MCMCCalculator and NeymanConstruction