ROOT Version 6.08 Release Notes

2016-11-04

Introduction

ROOT version 6.08/00 has been released on November 4, 2016.

For more information, see:

http://root.cern

The following people have contributed to this new version:

David Abdurachmanov, CERN, CMS,
Adrian Bevan, Queen Mary University of London, ATLAS,
Attila Bagoly, GSoC,
Bertrand Bellenot, CERN/SFT,
Rene Brun, CERN/SFT,
Philippe Canal, Fermilab,
Andrew Carnes, University of Florida, CMS,
Cristina Cristescu, CERN/SFT,
Olivier Couet, CERN/SFT,
Gerri Ganis, CERN/SFT,
Paul Gessinger, CERN/SFT,
Andrei Gheata, CERN/SFT,
Luca Giommi, CERN/SFT,
Sergei Gleyzer, University of Florida, CMS
Christopher Jones, Fermilab, CMS,
Wim Lavrijsen, LBNL, PyRoot,
Sergey Linev, GSI, http,
Pere Mato, CERN/SFT,
Lorenzo Moneta, CERN/SFT,
Abhinav Moudgil, GSoC,
Axel Naumann, CERN/SFT,
Simon Pfreundschuh, GSoC, CERN/SFT,
Danilo Piparo, CERN/SFT,
Timur Pocheptsov, CERN/SFT,
Fons Rademakers, CERN/IT,
Paul Russo, Fermilab,
Enric Tejedor Saavedra, CERN/SFT,
George Troska, Dortmund Univ.,
Liza Sakellari, CERN/SFT,
Alex Saperstein, ANL,
Manuel Tobias Schiller, CERN/LHCb,
David Smith, CERN/IT,
Peter Speckmayer,
Tom Stevenson, Queen Mary University of London, ATLAS
Matevz Tadel, UCSD/CMS, Eve,
Peter van Gemmeren, ANL, ATLAS,
Xavier Valls, CERN/SFT,
Vassil Vassilev, Fermilab/CMS,
Stefan Wunsch, KIT, CMS
Omar Zapata, University of Antioquia, CERN/SFT.

General

Core Libraries

ROOT prepares for cxx modules. One of the first requirements is its header files to be self-contained (section “Missing Includes”). ROOT header files were cleaned up from extra includes and the missing includes were added.

This could be considered as backward incompatibility (for good however). User code may need to add extra includes, which were previously resolved indirectly by including a ROOT header. For example:

Other improvements, which may cause compilation errors in third party code:

Also:

Containers

Meta Library

Add a new mode for TClass::SetCanSplit (2) which indicates that this class and any derived class should not be split. This included a rework the mechanism checking the base classes. Instead of using InheritsFrom, which lead in some cases, including the case where the class derived from an STL collection, to spurrious autoparsing (to look at the base class of the collection!), we use a custom walk through the tree of base classes that checks their value of fCanSplit. This also has the side-effect of allowing the extension of the concept ‘base class that prevent its derived class from being split’ to any user class. This fixes [ROOT-7972].

Dictionaries

Interpreter Library

Parallelism

I/O Libraries

TTree Libraries

Fast Cloning

We added a cache specifically for the fast option of the TTreeCloner to significantly reduce the run-time when fast-cloning remote files to address [ROOT-5078]. It can be controlled from the TTreeCloner, TTree::CopyEntries or hadd interfaces. The new cache is enabled by default, to update the size of the cache or disable it from TTreeCloner use: TTreeCloner::SetCacheSize. To do the same from TTree::CopyEntries add to the option string “cachesize=SIZE”. To update the size of the cache or disable it from hadd, use the command line option -cachesize SIZE. SIZE shouyld be given in number bytes and can be expressed in ‘human readable form’ (number followed by size unit like MB, MiB, GB or GiB, etc. or SIZE can be set zero to disable the cache.

Other Changes

Histogram Libraries

Math Libraries

TMVA Libraries

2D Graphics Libraries

  gStyle->SetLineJoinPS(2);

Also this setting is now active for PDF output. This enhancement was triggered by this forum question. * Make sure the palette axis title is correct after a histogram cloning. This problem was mentioned here. * TASImage When the first or last point of a wide line is exactly on the window limit the line is drawn vertically or horizontally. This problem was mentioned here * Make sure that TLatex text strings containing “\” (ie: rendered using TMathText) produce an output in PDF et SVG files. * In TLatex, with the Cocoa backend on Mac the Angstroem characters did not render correctly. This problem was mentioned here * New version of libpng (1.2.55) as requested here. * Enhancement of the CANDLE drawing option (implemented by Georg Troska georg.troska@tu-dortmund.de). This option has been completely rewritten and offers a wide range of possibilities. See the THistPainter reference guide for all the details and examples. * Fix TText copy constructor as requested here. New example to check this fix. * SVG boxes were not correct when x2<1 (reported here). * In TASImage there was no protection against graphics being drawn outside the assigned memory. That may generate some crashes like described here. * In TASImage: transparent rectangles did not work when png files were created in batch mode. * In TASImage: implement transparent text for png files created in batch mode. * TCanvas title was not set correctly when a TCanvas was read from a TFile. (reported here). * The text generated by TSVG has now the xml:space="preserve" attribute in order to be editable later on using external softwares like “inkscape”. This improvement was suggested here. * In TLatex with the Cocoa backend on Mac the #tilde position was too low. * New optional parameter “option” in TPad::BuildLegend to set the TLegend option (Georg Troska). * TCandle: a new candle plot painter class. It is now used in THistPainter and THStack to paint candle plots (Georg Troska). * Fix two issues with the fill patterns in TTeXDump (reported here): - The pattern number 3 was not implemented. - Filled area drawn with pattern where surrounded by a solid line. * Support custom line styles in TTeXDump as requested here * TColor::GetFreeColorIndex() allows to make sure the new color is created with an unused color index. * In TLegend::SetHeader the new option C allows to center the title. * New method ChangeLabel in TGaxis and TAxisallowing to a fine tuning of individual labels attributes. All the attributes can be changed and even the label text itself. Example:

  {
     c1 = new TCanvas("c1","Examples of Gaxis",10,10,900,500);
     c1->Range(-6,-0.1,6,0.1);
     TGaxis *axis1 = new TGaxis(-5.5,0.,5.5,0.,0.0,100,510,"");
     axis1->SetName("axis1");
     axis1->SetTitle("Axis Title");
     axis1->SetTitleSize(0.05);
     axis1->SetTitleColor(kBlue);
     axis1->SetTitleFont(42);
     axis1->ChangeLabel(1,-1,-1,-1,2);
     axis1->ChangeLabel(3,-1,0.);
     axis1->ChangeLabel(5,30.,-1,0);
     axis1->ChangeLabel(6,-1,-1,-1,3,-1,"6th label");
     axis1->Draw();
  }

Being available in TAxis, this method allow to change a label on and histogram plot like:

   hpx->Draw();
   hpx->GetXaxis()->ChangeLabel(5,-1,-1,-1,kRed,-1,"Zero");

3D Graphics Libraries

New histogram drawing options

COL2

COL2 is a new rendering technique providing potential performance improvements compared to the standard COL option. The performance comparison of the COL2 to the COL option depends on the histogram and the size of the rendering region in the current pad. In general, a small (approx. less than 100 bins per axis), sparsely populated TH2 will render faster with the COL option.

However, for larger histograms (approx. more than 100 bins per axis) that are not sparse, the COL2 option will provide up to 20 times performance improvements. For example, a 1000x1000 bin TH2 that is not sparse will render an order of magnitude faster with the COL2 option.

The COL2 option will also scale its performance based on the size of the pixmap the histogram image is being rendered into. It also is much better optimized for sessions where the user is forwarding X11 windows through an ssh connection.

For the most part, the COL2 and COLZ2 options are a drop in replacement to the COL and COLZ options. There is one major difference and that concerns the treatment of bins with zero content. The COL2 and COLZ2 options color these bins the color of zero.

This has been implemented by Jeromy Tompkins Tompkins@nscl.msu.edu

Geometry Libraries

A new module geom/vecgeom was introduced to give transparent access to VecGeom solid primitives. VecGeom is a high performance geometry package (link) providing SIMD vectorization for the CPU-intensive geometry algorithms used for geometry navigation. The module creates a new library libConverterVG.so depending on the VecGeom main library and loaded using the ROOT plug-in mechanism.

The main functionality provided by the new vecgeom module is to make a conversion in memory of all the shapes in a loaded TGeo geometry into a special adapter shape TGeoVGShape, redirecting all navigation calls to the corresponding VecGeom solid. The library loading and geometry conversion can be done with a single call TVirtualGeoConverter::Instance()->ConvertGeometry()

After the conversion is done, all existing TGeo functionality is available as for a native geometry, only that most of the converted solids provide better navigation performance, despite the overhead introduced by the new adapter shape.

Prerequisites: installation of VecGeom. The installation instructions are available at http://geant.web.cern.ch/content/installation Due to the fact that VecGeom provides for the moment static libraries and depends on ROOT, is is advised to compile first ROOT without VecGeom support, then compile VecGeom against this ROOT version, then re-configure ROOT to enable VecGeom and Vc support, using the flags -Dvc=ON -Dvecgeom=on

This has been implemented by Mihaela Gheata Mihaela.Gheata@cern.ch

Database Libraries

Networking Libraries

GUI Libraries

Language Bindings

PyROOT

Notebook integration

JavaScript ROOT

For more details, like the complete change log, the documentation, and very detailed examples, see the JSROOT home page and the JSROOT project github page

Tutorials

Build, Configuration and Testing Infrastructure

Release 6.08/02

Released on December 2, 2016

Interpreter

I/O

Bugs fixed in this release

Release 6.08/04

Released on January 13, 2017

TTree

Bugs fixed in this release

Release 6.08/06

Released on March 2, 2017

Interpreter

Core

I/O

TTree

Math

Graphics

{
   TCanvas c1("c1");
   TFile f("hsimple.root");
   hpx->Draw();        gPad->WaitPrimitive();
   hpxpy->Draw();      gPad->WaitPrimitive();
   hprof->Draw();

this was reported here.

Bugs fixed in this release

HEAD of the v6-08-00-patches branch

Changes will be part of the future 6.08/08

Core

I/O Libraries

TTree Libraries