ROOT Version 6.20 Release Notes

2020-04-01

Introduction

ROOT version 6.20/00 was released on February 26, 2020.

For more information, see:

http://root.cern

The following people have contributed to this new version:

Kim Albertsson, CERN/ATLAS,
Guilherme Amadio, CERN/SFT,
Bertrand Bellenot, CERN/SFT,
Iliana Betsou, CERN/SFT,
Jakob Blomer, CERN/SFT,
Brian Bockelman, Nebraska,
Rene Brun, CERN/SFT,
Philippe Canal, FNAL,
Javier Cervantes Villanueva, CERN/SFT,
Olivier Couet, CERN/SFT,
Alexandra Dobrescu, CERN/SFT,
Giulio Eulisse, CERN/ALICE,
Johannes Hentrich,
Massimiliano Galli, CERN/SFT and Unibo,
Gerri Ganis, CERN/SFT,
Andrei Gheata, CERN/SFT,
Hadrien Grasland, CNRS,
Enrico Guiraud, CERN/SFT,
Stephan Hageboeck, CERN/SFT,
Desislava Kalaydjieva, CERN/SFT,
Jan Knedlik, GSI,
Philip Leindecker, CERN/SFT,
Sergey Linev, GSI,
Alfonso Luis Castano Marin, UMU,
Pere Mato, CERN/SFT,
Emmanouil Michalainas, AUTh,
Lorenzo Moneta, CERN/SFT,
Alja Mrak-Tadel, UCSD/CMS,
Axel Naumann, CERN/SFT,
Joana Niermann, CERN-SFT,
Vincenzo Eduardo Padulano, Bicocca/SFT,
Danilo Piparo, CERN/SFT,
Fons Rademakers, CERN/SFT,
Otto Schaile, Uni-Muenchen,
Henry Schreiner, Princeton,
Oksana Shadura, Nebraska,
Simon Spies, GSI,
Matevz Tadel, UCSD/CMS,
Yuka Takahashi, Princeton and CERN/SFT,
Enric Tejedor Saavedra, CERN/SFT,
Vassil Vassilev, Princeton/CMS,
Wouter Verkerke, NIKHEF/ATLAS,
Stefan Wunsch, CERN/SFT,
Luca Zampieri, CERN-SFT,
Zhe Zhang, Nebraska

General

Splash screen

The venerable splash screen is now disabled by default to make ROOT’s startup faster. Many users already use root -l to start ROOT, but this also hides the useful text banner with version information along with the splash screen. With this new default, starting up ROOT as just root will show only the text banner instead of the splash screen. The splash screen can still be seen with root -a or in TBrowser by opening Browser Help → About ROOT.

Deprecation and Removal

Core Libraries

I/O Libraries

Compression algorithms

TTree Libraries

RDataFrame

Histogram Libraries

Math Libraries

RooFit Libraries

Fast function evaluation and vectorisation

A BatchMode for faster unbinned fits has been added. By loading data more efficiently, unbinned likelihood computations can run about 3x faster if the PDFs support it. To enable it, use

pdf.fitTo(data, RooFit::BatchMode());

Most unbinned PDFs that are shipped with RooFit have been updated to support this mode.

In addition, if ROOT is compiled for a specific architecture, SIMD instructions can be used in PDF computations. This requires ROOT to be compiled with -march=native or e.g. -mavx2 if the hardware supports it. For maximal performance, ROOT should also be configured with -Dvdt=ON. VDT is a library of fast math functions, which will automatically be used in RooFit when available. Depending on the compiler, on the instruction set supported by the CPU and on what kind of PDFs are used, PDF evaluations will speed up 5x to 16x. For details see CHEP 2019.

New RooFormulaVar / RooGenericPdf

RooFormula has been updated to use ROOT’s TFormula. This means that expressions passed to RooFormulaVar / RooGenericPdf are compiled with -O2 optimisation level before they are evaluated. For complicated functions, this might improve the speed of the computation. Further, functions that are known to the interpreter can be used in the expression passed to a PDF. The following macro e.g. prints the expected result 5.4:

  double func(double x, double a) {
    return a*x*x + 1.;
  }

  void testRooFormulaWithClingFunction() {
    RooRealVar x("x", "x", 2, -10, 10);
    RooRealVar a("a", "a", 1.1, -10, 10);

    RooGenericPdf pdf("pdfWithExternalFunc", "func(x, a)", {a, x});
    std::cout << pdf.getVal() << std::endl;
  }

New PDFs added to RooFit

RooStats / HistFactory

2D Graphics Libraries

3D Graphics Libraries

Technology preview release of EVE-7: a server-client implementation of TEve for ROOT-7.

Language Bindings

Jupyter Notebook Integration

JavaScript ROOT

%jsroot on

Tutorials

Class Reference Guide

Build, Configuration and Testing Infrastructure

The following builtins have been updated:

PyROOT

Current PyROOT

Experimental PyROOT

TMVA

Bugs and Issues fixed in this release

Release 6.20/02

Released on March 15, 2020

Bugs and Issues fixed in this release

Release 6.20/04

Released on April 1, 2020

Bugs and Issues fixed in this release

Release 6.20/06

Released on June 10, 2020

Bugs and Issues fixed in this release

HEAD of the v6-20-00-patches branch

These changes will be part of a future 6.20/08.

TTree

    struct FloatInt {
       float f;
       int x;
    };

and

   int x = 1;
   FloatInt s{2.1, 3};
   TTree t("t", "t");
   t.Branch("i", &i); // Create a top level branch named "i" and a sub-branch name "x"
   t.Branch("x", &x);

the old version of t.GetBranch("x") was return the i.x sub-branch while the new version return the x top level branch.

chain->LoadTree(0);
chain->SetBranchAdress(branch_name, &address);

now TChain will also check the addresses in the case:

chain->SetBranchAdress(branch_name, &address);
chain->LoadTree(0);
// Not setting the top level branch address.
chain->SetBranchAdress(sub_branch_name, &address);
chain->GetEntry(0);

Resulted in the address set to be forgotten. Note that a work-around was:

// Not setting the top level branch address.
chain->GetEntry(0);
chain->SetBranchAdress(sub_branch_name, &address);

But also the address needed to (in most cases) also be set again after each new tree was loaded.

Note that, the following:

chain->SetBranchAdress(sub_branch_name, &address);
chain->SetBranchAdress(top_level_branch_name, &other_address);
chain->GetEntry(0);

will result (as one would expect) with the first SetBranchAddress being ignored/over-ridden.