ROOT Version 6.34 Release Notes

2024-11

Important note about this development release

6.34 is a short term support cycle not meant to be used for data taking. It will be superseded by the 6.36 cycle, which is foreseen to start with 6.36.00 in the second quarter of 2025. Patch releases of the 6.36 cycle will be provided until June 30th 2025.

Introduction

The development ROOT version 6.34.00 is scheduled for release at the end of November 2024.

For more information, see:

http://root.cern

The following people have contributed to this new version:

Guilherme Amadio, CERN/IT,
Bertrand Bellenot, CERN/EP-SFT,
Jakob Blomer, CERN/EP-SFT,
Patrick Bos, Netherlands eScience Center,
Rene Brun,
Carsten Burgard, DESY
Will Buttinger, RAL,
Philippe Canal, FNAL,
Jolly Chen, CERN/EP-SFT,
Olivier Couet, CERN/EP-SFT,
Marta Czurylo, CERN/EP-SFT,
Monica Dessole, CERN/EP-SFT,
Adrian Duesselberg, TU Munchen,
Mattias Ellert, Uppsala University,
Gerri Ganis, CERN/EP-SFT,
Florine de Geus, CERN/University of Twente,
Andrei Gheata, CERN/EP-SFT,
Enrico Guiraud,
Stephan Hageboeck, CERN/EP-SFT,
Jonas Hahnfeld, CERN/Goethe University Frankfurt,
Fernando Hueso Gonzalez, University of Valencia,
Attila Krasznahorkay, CERN/EP-ADP-OS,
Wim Lavrijsen, LBL,
Aaron Jomy, CERN/EP-SFT,
Ida Kaspary, Imperial College,
Valerii Kholoimov, National University of Kyiv/IRIS-HEP,
Sergey Linev, GSI,
Javier Lopez-Gomez,
Pere Mato, CERN/EP-SFT,
Andrea Maria Ola Mejicanos, Berea College,
Alaettin Serhan Mete, Argonne,
Thomas Madlener, DESY,
Vedant Mehra, GSOC,
Lorenzo Moneta, CERN/EP-SFT,
Alja Mrak Tadel, UCSD/CMS,
Axel Naumann, CERN/EP-SFT,
Ianna Osborne, Princeton University,
Vincenzo Eduardo Padulano, CERN/EP-SFT,
Giacomo Parolini, CERN/EP-SFT,
Danilo Piparo, CERN/EP-SFT,
Kristupas Pranckietis, Vilnius University,
Fons Rademakers, CERN/IT,
Jonas Rembser, CERN/EP-SFT,
Andrea Rizzi, University of Pisa,
Andre Sailer, CERN/EP-SFT,
Nopphakorn Subsa-Ard, KMUTT,
Pavlo Svirin, National Technical University of Ukraine,
Robin Syring, Leibniz University Hannover, CERN/EP-SFT,
Maciej Szymanski, Argonne,
Christian Tacke, Darmstadt University,
Matevz Tadel, UCSD/CMS,
Alvaro Tolosa Delgado, CERN/RCS-PRJ-FC,
Devajith Valaparambil Sreeramaswamy, CERN/EP-SFT,
Peter Van Gemmeren, Argonne,
Vassil Vassilev, Princeton/CMS,
Wouter Verkerke, NIKHEF/ATLAS,
Stefan Wunsch

Removal and Deprecation

The following interfaces have been removed:

The following interfaces are deprecated and will be removed in future releases:

Core Libraries

I/O Libraries

RNTuple Libraries

TTree Libraries

RDataFrame

Histogram Libraries

Upgrade TUnfold to version 17.9

The TUnfold package inside ROOT is upgraded from version 17.6 to version 17.9.

Math Libraries

Minuit2

RooFit Libraries

Error handling in MultiProcess-enabled fits

The MultiProcess-based fitting stack now handles errors during fits. Error signaling in (legacy) RooFit happens through two mechanisms: logEvalError calls and RooNaNPacker-enhanced NaN doubles. Both are now implemented and working for MultiProcess-based fits as well. See this PR for more details. This enables the latest ATLAS Higgs combination fits to complete successfully, and also other fits that encounter NaN values or other expected errors.

Miscellaneous

Deprecations

TMVA SOFIE

The support for new ONNX operators has been included in the SOFIE ONNX parser and in RModel in order to generate inference code for new types of models. The full list of currently supported operators is available here

The list of operators added for this release is the following: - Constant and ConstantOfShape - If - Range - ReduceSum - Split - Tile - TopK

In addition support in RModel has been added to generate the code with dynamic input shape parameter, such as the batch size. These input shape parameters can be specified at run time when evaluating the model. Since not all ONNX operators in SOFIE support yet dynamic input parameters, it is possible to initialize a parsed dynamic model with fixed values. For this, a new member function, RModel::Initialize(const std::map<std::string,size_t> & inputParams, bool verbose = false) has been added. The RModel class has been extended to support sub-graph (needed for operator If), dynamic tensors and constant tensors (for example those defined by the operator Constant).

Graphics Backends

Web-based TWebCanvas

Support “haxis” draw option for histograms, allows superposition of several histograms drawn on the same pad with horizontal ty axis. Add tutorials\webcanv\haxis.cxx macro demonstrating new feature.

Support “frame” draw option for several primitives like TBox, TLine, TLatex. This enforce clipping of such objects by frame border. Provide demo in tutorials\webcanv\inframe.cxx macro

Provide batch mode for image production with headless browser. In such mode data for several canvases collected together (in batch) and then N images are produced with single invocation of the web browser (chrome or firefox). For instance after TWebCanvas::BatchImageMode(100) next 99 calls to TCanvas::SaveAs(filename) method will not lead to image files creation. But with following call all 100 images will be produced together. Alternatively one can use TCanvas::SaveAll() static method which allows to create images for several canvases at once.

Support multi-page PDF file creation with web-based canvas using svg2pdf.js library. Both with native and web-baed graphics one can do now:

c1->SaveAs("file.pdf[")
c2->SaveAs("file.pdf+")
c3->SaveAs("file.pdf+")
c4->SaveAs("file.pdf]")

Or same can be achieved with:

TCanvas::SaveAll({c1, c2, c3, c4}, "file.pdf");

2D Graphics Libraries

3D Graphics Libraries

REve

Geometry Libraries

The geometry package is now optional and activated by default in the CMake configuration. To disable it, use the -Dgeometry=OFF CMake option.

Web-based GUIs

Adjust rootssh script to be usable on MacOS. Fixing problem to start more than one web widget on remote node.

Fix rootbrowse script to be able properly use it with all kinds of web widgets. Provide --web=<type> argument as for regular root executable.

Update openui5 library to version 1.128.0. Requires use of modern web-browsers, skipping IE support.

Python Interface

Typesafe TTree::SetBranchAddress() for array inputs

If you call TTree::SetBranchAddress with NumPy array or array.array inputs, ROOT will now check if the array type matches with the column type. If it doesn’t, SetBranchAddress() will return a negative status code and print an error. Take for example this code snippet:

arr = array.array(typecode, "d")
status = t.SetBranchAddress("name", arr)
print("Status = %s" % (status, ))

If the branch type is also double (like the type of the array indicated by "d"), the call to SetBranchAddress() would succeed with status code zero. If the type doesn’t match, you now get a clear error instead of garbage values.

Error in <TTree::SetBranchAddress>: The pointer type given "Double_t" (8) does not correspond to the type needed "Float_t" (5) by the branch: a
Status = -2

Deprecation of TPython::Eval()

The TPython::Eval() method is deprecated and scheduled for removal in ROOT 6.36. Its implementation was fragile, and the same functionality can be achieved with TPython::Exec(), using a C++ variable that is known to the ROOT interpreter for crossing over from Python to C++.

Example:

// Before, with TPython::Eval()
std::string stringVal = static_cast<const char*>(TPython::Eval("'done'"));
std::cout << stringVal << std::endl;

// Now, with TPython::Exec(). You can set `_anyresult` to whatever std::any you want.
// It will be swapped into the return variable in the end.

std::any result;
TPython::Exec("_anyresult = ROOT.std.make_any['std::string']('done')", &result);
std::cout << std::any_cast<std::string>(result) << std::endl;

JavaScript ROOT

Upgrade to JSROOT 7.8.0 with following new features and fixes:

  1. Let use custom time zone for time display, support ‘&utc’ and ‘&cet’ in URL parameters
  2. Support gStyle.fLegendFillStyle
  3. Let change histogram min/max values via context menu
  4. Support Z-scale zooming with TScatter
  5. Implement “haxis” draw option for histogram to draw only axes for hbar
  6. Implement “axisg” and “haxisg” to draw axes with grids
  7. Support TH1 marker, text and line drawing superimposed with “haxis”
  8. Support TBox, TLatex, TLine, TMarker drawing on “frame”, support drawing on swapped axes
  9. Implement TProfile and TProfile2D projections https://github.com/root-project/root/issues/15851
  10. Draw total histogram from TEfficiency when draw option starts with ‘b’
  11. Let redraw TEfficiency, THStack and TMultiGraph with different draw options via hist context menu
  12. Support ‘pads’ draw options for TMultiGraph, support context menu for it
  13. Let drop objects on sub-pads
  14. Properly loads ES6 modules for web canvas
  15. Improve performance of TH3/RH3 drawing by using THREE.InstancedMesh
  16. Implement batch mode with ‘&batch’ URL parameter to create SVG/PNG images with default GUI
  17. Adjust node.js implementation to produce identical output with normal browser
  18. Create necessary infrastructure for testing with ‘puppeteer’
  19. Support injection of ES6 modules via ‘&inject=path.mjs’
  20. Using importmap for ‘jsroot’ in all major HTML files and in demos
  21. Implement settings.CutAxisLabels flag to remove labels which may exceed graphical range
  22. Let disable usage of TAxis custom labels via context menu
  23. Let configure default draw options via context menu, preserved in the local storage
  24. Let save canvas as JSON file from context menu, object as JSON from inspector
  25. Upgrade three.js r162 -> r168, use r162 only in node.js because of “gl” module
  26. Create unified svg2pdf/jspdf ES6 modules, integrate in jsroot builds
  27. Let create multi-page PDF document - in TWebCanvas batch mode
  28. Let add in latex external links via #url[link]{label} syntax - including jsPDF support
  29. Support TAttMarker style with line width bigger than 1
  30. Provide link to ROOT class documentation from context menus
  31. Implement axis labels and title rotations on lego plots
  32. Internals - upgrade to eslint 9
  33. Internals - do not select pad (aka gPad) for objects drawing, always use assigned pad painter
  34. Fix - properly save zoomed ranges in drawingJSON()
  35. Fix - properly redraw TMultiGraph
  36. Fix - show empty bin in TProfile2D if it has entries #316
  37. Fix - unzooming on log scale was extending range forever
  38. Fix - display empty hist bin if fSumw2 not zero
  39. Fix - geometry display on android devices

JSROOT is now used as default display in jupyter.

Tutorials

Class Reference Guide

Build, Configuration and Testing Infrastructure

The following builtins have been updated:

Bugs and Issues fixed in this release

More than 160 items were addressed for this release. The full list is: