ROOT Version 6.36 Release Notes

2025-05

Introduction

ROOT version 6.36.00 is scheduled for release at the end of May 2025.

For more information, see:

http://root.cern

The following people have contributed to this new version:

Bertrand Bellenot, CERN/EP-SFT,
Jakob Blomer, CERN/EP-SFT,
Philippe Canal, FNAL,
Olivier Couet, CERN/EP-SFT,
Marta Czurylo, CERN/EP-SFT,
Mattias Ellert, Uppsala University,
Florine de Geus, CERN/EP-SFT and University of Twente,
Jonas Hahnfeld, CERN/EP-SFT and Goethe University Frankfurt,
Fernando Hueso Gonzalez, CSIC/University of Valencia,
Stephan Hageboeck, CERN,
Sergey Linev, GSI Darmstadt,
Enrico Lusiani, INFN Padova,
Alberto Mecca, University of Turin,
Lorenzo Moneta, CERN/EP-SFT,
Mark Owen, University of Glasgow,
Vincenzo Eduardo Padulano, CERN/EP-SFT,
Giacomo Parolini, CERN/EP-SFT,
Danilo Piparo, CERN/EP-SFT,
Jonas Rembser, CERN/EP-SFT,
Manuel Tobias Schiller, University of Glasgow,
Surya Somayyajula, UMass Amherst,
Petr Stepanov, @petrstepanov,
Silia Taider, CERN/EP-SFT,
Dongliang Zhang, University of Science and Technology of China

Deprecation and Removal

Python Interface

UHI

RDataFrame

Distributed RDataFrame

The distributed RDataFrame (ROOT.RDF.Distributed) is now out of the experimental namespace. We recommend that users switch to using the new version as soon as possible. Note the following changes between the old and the new code:

# Old version - not recommended:
# This will still work in 6.36 but will raise a warning
connection = ... # your distributed Dask client or SparkContext
RDataFrame = ROOT.RDF.Experimental.Distributed.[Backend].RDataFrame
df = RDataFrame(..., [daskclient,sparkcontext] = connection)
# New version - recommended
connection = ... # your distributed Dask client or SparkContext
df = ROOT.RDataFrame(..., executor = connection)

In case of using the old version, with Experimental keyword, a warning will be raised. In ROOT 6.38, the Experimental name will be removed completely and using it will result in an exception.

A set of new features is now available to the distributed RDataFrame users:

RooFit

Breaking function signature changes

Fix for RooAbsReal::createHistogram() with extended pdfs

There was a problem with RooAbsReal::createHistogram() when using it to get histograms with predicted yields for extended pdfs. The Scale(bool) argument was always set internally to false in case createHistogram() was called on an extended pdf. There was no way for the user to override that. This meant that one could not get yield histograms that were correctly scaled by the bin volumes using that function. This release changes that behavior, meaning the Scale(bool) command argument is now respected for extended pdfs.

I/O

RNTuple

Tutorials and Code Examples

Core

Histograms

Math

RooFit / HistFactory

An important bottleneck in HistFactory was removed when many histograms are used to construct a measurement.

Performance improvements in Minuit2 for the case of parameters with limits

For variable parameters with limits, Minuit2 applies trigonometric transformations into an internal space for the minimization. This can be a significant bottleneck for highly-optimized function, to the point that this is also mentioned in section 1.3.1 of the old MINUIT user’s guide. One prominent case of highly-optimized functions are RooFit likelihoods, which are heavily caching intermediate results to make numeric gradients and Hessians as efficient as possible. This meant that e.g. for HistFactory likelihoods, a significant fraction of the gradients and Hessians evaluation time was spent in the parameter transformations. To alleviate this bottleneck, Minuit2 is now also caching the result of the trigonometric transformations, only recomputing them if a parameters value was changed. As a result, the time spent in in parameter transformations when minimizing RooFit likelihoods and evaluating the Hessian becomes negligible.

Graphics

JavaScript ROOT

ROOT 6.36 will use JSROOT 7.9 release series. It includes following important changes:

Jupyter lab

Use JSROOT 7.9.0 as fallback version.

Build, Configuration and Testing Infrastructure

New build options for dependiencies of image processing

ROOT supports image processing via libAfterImage, which can be enabled with the asimage build option. A few more options were added to make ROOT builds more reproducible and to avoid builtin dependencies:

With default build option values, there is no difference in behavior compared to previous ROOT versions. The real benefit of the new options becomes apparent in builds with fail-on-missing=ON, because then the build will fail if any of the dependencies is not found.

Items addressed

For this release, the following items have been addressed: