ROOT Version 6.12 Release Notes

2017-12-12

Introduction

ROOT version 6.12/04 has been released on 2017-12-13. This is the first release in the 6.12 series.

For more information, see:

http://root.cern.ch

The following people have contributed to this new version:

Kim Albertsson, CERN,
Guilherme Amadio, CERN/SFT,
Bertrand Bellenot, CERN/SFT,
Brian Bockelman, UNL,
Rene Brun, CERN/SFT,
Philippe Canal, FNAL,
David Clark, ANL (SULI),
Olivier Couet, CERN/SFT,
Gerri Ganis, CERN/SFT,
Andrei Gheata, CERN/SFT,
Enrico Guiraud, CERN/SFT,
Raphael Isemann, Chalmers Univ. of Tech.,
Sergey Linev, GSI,
Timur Pocheptsov, CERN/SFT,
Pere Mato, CERN/SFT,
Lorenzo Moneta, CERN/SFT,
Axel Naumann, CERN/SFT,
Simon Pfreundschuh,
Danilo Piparo, CERN/SFT,
Fons Rademakers, CERN/SFT,
Enric Tejedor Saavedra, CERN/SFT,
Oksana Shadura, UNL,
Arthur Tsang, CERN/SFT,
Peter van Gemmeren, ANL,
Vassil Vassilev, Princeton Univ./CMS,
Xavier Valls Pla, CERN/UJI,
Wouter Verkerke, NIKHEF/Atlas, RooFit,
Stefan Wunsch, KIT,
Omar Zapata

6.12/00 was skipped; 6.12/02 had a fatal issue in a fundamental component and was never published.

General News

This release now supports building with C++17 enabled using either libstdc++ or libc++. This requires Clang >= 5.0, or GCC >= 7.3.0. At the date of this release, GCC 7.2.0 still does not provide full support to compile ROOT with C++17.

Removed interfaces

The following interfaces have been removed, after deprecation in v6.10.

Core Libraries

   ROOT::CallRecursiveRemoveIfNeeded(*this)

Otherwise, when RecursiveRemove is called (by ~TObject or example) for this type of object, the transversal of THashList and THashTable containers will will have to be done without call Hash (and hence be linear rather than logarithmic complexity). You will also see warnings like

   Error in <ROOT::Internal::TCheckHashRecursiveRemoveConsistency::CheckRecursiveRemove>: The class SomeName overrides TObject::Hash but does not call TROOT::RecursiveRemove in its destructor.
   for(auto bcl : TRangeDynCast<TBaseClass>( * cl->GetListOfBases() )) {
     if (!bcl) continue;
     ... use bcl as a TBaseClass*
   }
   for(auto bcl : TRangeDynCast<TBaseClass>( cl->GetListOfBases() )) {
      if (!bcl) continue;
      ... use bcl as a TBaseClass*
   }

Thread safety

Resolved the race conditions inherent to the use of the RecursiveRemove mechanism.

  collection->UseRWLock();

all operations on the collection will take the read or write lock when needed, currently they shared the global lock (ROOT::gCoreMutex).

Interpreter

I/O Libraries

auto h1 = key->ReadObject<TH1>

after which h1 will either be null if the key contains something that is not a TH1 (or derived class) or will be set to the address of the histogram read from the file. - Add the ability to store the ‘same’ object several time (assumingly with different data) in a single buffer. Instead of

  while(...) {
     TObjArray arr;
     ... update the content of "arr"
     buffer << arr;
  }

which would only really stream the array at the first iteration because it will be detected has having the same address and thus assumed to be the same object. We can now do:

  while(...) {
     TObjArray arr;
     ... update the content of "arr"
     buffer.WriteObject(&arr, kFALSE);
  }

where the last argument of WriteObject tells the buffer do not remember this object’s address and to always stream it. This feature is also available via WriteObjectAny.

TTree Libraries

+Since we loop over all the branches for each new entry all the baskets for a cluster are consecutive in the file.

TDataFrame

New features

auto myHisto = myTdf.Histo1D({"histName", "histTitle", 64, 0, 128}, "myColumn");

or c++ auto myHistoCustomBinning = myTdf.Histo1D({"histName", "histTitle", 64, binEdges}, "myColumn"); Models can be created as stand alone objects: c++ TDF::TH1DModel myModel {"histName", "histTitle", 64, binEdges}; auto myHistoCustomBinning = myTdf.Histo1D(myModel, "myColumn"); - pyROOT users can now easily specify parameters for the TDF histograms and profiles thanks to the newly introduced tuple-initialization python myHisto = myTdf.Histo1D(('histName', 'histTitle', 64, 0, 128), 'myColumn') - Add support for friend trees and chains. Just add the friends before passing the tree/chain to TDataFrame’s constructor and refer to friend branches as usual.

Fixes

Other changes

Histogram Libraries

Math Libraries

RooFit Libraries

TMVA Library

2D Graphics Libraries

    h->GetXaxis()->SetMaxDigits(6);

3D Graphics Libraries

Geometry Libraries

Database Libraries

Networking Libraries

GUI Libraries

Montecarlo Libraries

Parallelism

Language Bindings

JavaScript ROOT

Upgrade JSROOT to v5.3.1. Following new features implemented:

Bugfixes: - Show TH2 projections also when tooltip is disabled - use z_handle to format Z-axis labels - Support labels on TH3 Z axis - TH1 zooming in 3D mode - Suppress empty {} in TLatex - Add several math symbols for TLatex - Font kind 1 is italic times roman - Do not let expand parent item in hierarchy - Use correct painter to check range - Change proper axis attributes in context menu - Correctly show axis labels on 3D plot - Correctly handle circle (marker kind 24) as marker kind - Correct circle drawing with coordinates rounding - TLatex #frac and #splitline, adjust vertical position - Workaround for y range when fMinimum==fMaximum!=-1111 - Correct tooltips for graph with marker drawing - Support pow(x,n) function in formula - Use pad.fFillColor for frame when fFrameFillColor==0 - Correctly identify horizontal TGaxis with reverse scale - Correctly handle negative line width in exclusion - Tooltips handling for TF1 - Potential mix-up in marker attributes handling - Unzomming of log scale https://root-forum.cern.ch/t/25889 - Ignore not-supported options in TMultiGraph https://root-forum.cern.ch/t/25888 - Correctly use fGridColor from TStyle - Prevent error when TPaveText includes TLine or TBox in list of lines - Bin errors calculations in TProfile - Correctly handle new TF1 parameter coding convention (jsroot#132) - Check if pad name can be used as element id (jsroot#133) - Adjust title position for vertical axis with fTitleOffset==0

Tutorials

Command line tools

Class Reference Guide

Build, Configuration and Testing Infrastructure

This is the last release with the configure/make-based build system. It will be removed; please migrate to the CMake-based build system.

Bugs and Issues fixed in this release

Release 6.12/06

Released on February 9, 2018

Core Libraries

Bugs and Issues fixed in this release

HEAD of the v6-12-00-patches branch

These changes will be part of the future 6.12/08

I/O Libraries

Tree Libraries

for(auto e = 0; e < tree->GetEntries(); ++e) { // loop over entries.
  for(auto branch : branchCollection) {
    ... Make change to the data associated with the branch ...
    branch->BackFill();
  }
}

Since we loop over all the branches for each new entry all the baskets for a cluster are consecutive in the file.

Miscellanea