ROOT logo
ROOT » Download » Release Notes

ROOT Version 5.32/00 Release Notes

ROOT version 5.32/00 has been released on Nov 29, 2011. In case you are upgrading from an old version, please read the releases notes of version 5.26, 5,28 and version 5.30 in addition to these notes.

The release of version 5.34 is scheduled for May 29, 2012.

For more information, see:

The following people have contributed to this new version:

Bertrand Bellenot, CERN/SFT,
Rene Brun, CERN/SFT,
Philippe Canal, FNAL,
Olivier Couet, CERN/SFT,
Kyle Cranmer, NYU/ATLAS, RooStats,
Sven Kreiss, NYU/ATLAS, RooStats,
Gena Kukartsev, CERN and FNAL/CMS,
Gerri Ganis, CERN/SFT,
Andrei Gheata, CERN/Alice,
Christian Gumpert, CERN and University Dresden/ATLAS, Math,
Wim Lavrijsen, LBNL, PyRoot,
Sergei Linev, GSI,
Lorenzo Moneta, CERN/SFT,
Axel Naumann, CERN/SFT,
Eddy Offermann, Renaissance,
Giovanni Petrucciani, UCSD/CMS, RooStats,
Fons Rademakers, CERN/SFT,
Paul Russo, FNAL,
Joerg Stelzer, DESY/Atlas, TMVA,
Alja Tadel, UCSD/CMS, Eve,
Matevz Tadel, UCSD/CMS, Eve,
Eckhard von Toerne, University Bonn, ATLAS, TMVA,
Wouter Verkerke, NIKHEF/Atlas, RooFit,

Build System



Core Libraries


New Thread Pool class

Thread library

Global Variables




I/O Libraries

LZMA Compression and compression Level setting

ROOT I/O now support the LZMA compression algorithm to compress data in addition to the ZLIB compression algorithm. LZMA compression typically results in smaller files, but takes more CPU time to compress data. To use the new feature, the external XZ package must be installed when ROOT is configured and built: Download 5.0.3 from here and make sure to configure with fPIC:
   ./configure CFLAGS='-fPIC'
Then the client C++ code must call routines to explicitly request LZMA compression.

ZLIB compression is still the default.

Setting the Compression Level and Algorithm
There are three equivalent ways to set the compression level and algorithm. For example, to set the compression to the LZMA algorithm and compression level 5.
  1. TFile f(filename, option, title);
    f.SetCompressionSettings(ROOT::CompressionSettings(ROOT::kLZMA, 5));
  2. TFile f(filename, option, title, ROOT::CompressionSettings(ROOT::kLZMA, 5));
  3. TFile f(filename, option, title);
These methods work for TFile, TBranch, TMessage, TSocket, and TBufferXML. The compression algorithm and level settings only affect compression of data after they have been set. TFile passes its settings to a TTree's branches only at the time the branches are created. This can be overidden by explicitly setting the level and algorithm for the branch. These classes also have the following methods to access the algorithm and level for compression.
Int_t GetCompressionAlgorithm() const;
Int_t GetCompressionLevel() const;
Int_t GetCompressionSettings() const;
If the compression level is set to 0, then no compression will be done. All of the currently supported algorithms allow the level to be set to any value from 1 to 9. The higher the level, the larger the compression factors will be (smaller compressed data size). The tradeoff is that for higher levels more CPU time is used for compression and possibly more memory. The ZLIB algorithm takes less CPU time during compression than the LZMA algorithm, but the LZMA algorithm usually delivers higher compression factors.

The header file core/zip/inc/Compression.h declares the function "CompressionSettings" and the enumeration for the algorithms. Currently the following selections can be made for the algorithm: kZLIB (1), kLZMA (2), kOldCompressionAlgo (3), and kUseGlobalSetting (0). The last option refers to an older interface used to control the algorithm that is maintained for backward compatibility. The following function is defined in core/zip/inc/Bits.h and it set the global variable.

R__SetZipMode(int algorithm);
If the algorithm is set to kUseGlobalSetting (0), the global variable controls the algorithm for compression operations. This is the default and the default value for the global variable is kZLIB.


gDirectory is now a thread local! The value of gDirectory and gFile are now all accessed via a static function of their respective class. The access is made transparent via a CPP macro.
Note: Whenever a thread has an associated TThread object, the value of gDirectory is now thread local, i.e. all modifications direct or indirect of gDirectory will not be seen by the other thread. In particular this means that several I/O operations (including TDirectory::Write) are thread safe (as long as all the required TClass and TStreamerInfo has been previously setup).
Note: This model does not support sharing TFile amongst threads (i.e. a TFile must be accessed from exactly one thread). This means that whenever a TFile's control is passed from a thread to another, the code must explicitly reset gDirectory to another value or there is a risk for this gDirectory to point to a stale pointer if the other thread deletes the TFile object. A TFile deletion will only affect the value of the local gDirectory and gFile.


Introduce TMemFile and update TFileMerger to support incremental merges.

Add new tutorials (net/treeClient.C + net/fastMergeServer.C) demonstrating how a TMemFile can be used to do parallel merge from many clients. (TMemFile still needs to be better integrated with TMessage and TSocket).

The new TMemFile class support the TFile interface but only store the information in memory. This version is limited to 32MB.

   TMessage mess;
   transient = new TMemFile("hsimple.memroot",scratch,length);
will copy the content of 'scratch' into the in-memory buffer created by/for the TMemFile.
   TMemFile *file = new TMemFile("hsimple.memroot","RECREATE");
Will create an empty in-memory of (currently fixed) size 32MB.
Will reset the objects in the TDirectory list of objects so that they are ready for more data accumulations (i.e. returns the data to 0 but keep the customizations).



Introduce the class TParallelMergingFile part of the net package. This class connect ot a parallel merge server and upload its content every time Write is called on the file object. After the upload the object of classes with a ResetAfterMerge function are reset.
A TParallelMergingFile is created whether a ?pmerge option is passed to TFile::Open as part of the file name. For example:
    TFile::Open("mergedClient.root?pmerge","RECREATE"); // For now contact localhost:1095
tutorials/net/treeClient.C and fastMergeServer.C: update to follow the change in interfaces Introduce the tutorials parallelMergerClient.C and the temporary tutorials parallelMergerServer.C to demonstrate the parallel merging (with parallelMergerServer.C being the prototype of the upcoming parallel merger server executable).


Networking Libraries

New TSSLSocket class

The new TSSLSocket class wraps a TSocket with SSL encryption. This class is used to provide support for reading TWebFiles over https.

New TUDPSocket class

The new TUDPSocket uses UDP as protocol where TSocket uses TCP. This class can be used to talk to UDP servers.


Starting with this version (5.32/00) Xrootd is no longer distributed with ROOT. The package is still needed to build the modules 'netx', 'proofx' and 'proofd' and must be provided as external. Xrootd can be downloaded from the main web site and its installation is straightforward. A script to automatize the installation process is provided at build/unix/ ; scripts to set-up the environment at bin/ and bin/setxrd.csh . Note that the Xrootd team has dropped support for Windows, so the Xrootd-related components of ROOT will only be built on Unices (Linux, Solaris, MacOsX). See also this page.

SQL Libraries

Tree Libraries

TEntryListArray: a list of entries and subentries in a TTree or TChain

TEntryListArray is an extension of TEntryList, used to hold selected entries and subentries (sublists) for when the user has a TTree with containers (vectors, arrays, ...). End_Html
Usage with TTree::Draw to select entries and subentries
  1. To fill a list elist :
         tree->Draw(">> elist", "x > 0", "entrylistarray"); 
  2. To use a list to select entries and subentries:
Its main purpose is to improve the performance of a code that needs to apply complex cuts on TTree::Draw multiple times. After the first call above to TTree::Draw, a TEntryListArray is created and filled with the entries and the indices of the arrays that satisfied the selection cut (x > 0). In the subsequent calls to TTree::Draw, only these entries / subentries are used to fill histograms.
About the class
The class derives from TEntryList and can be used basically in the same way. This same class is used to keep entries and subentries, so there are two types of TEntryListArray's:
  1. The ones that only hold subentries
    • fEntry is set to the entry# for which the subentries correspond
    • fSubLists must be 0
  2. The ones that hold entries and eventually lists with subentries in fSubLists.
    • fEntry = -1 for those
    • If there are no sublists for a given entry, all the subentries will be used in the selection
Additions with respect to TEntryList
  1. Data members:
    • fSubLists: a container to hold the sublists
    • fEntry: the entry number if the list is used to hold subentries
    • fLastSubListQueried and fSubListIter: a pointer to the last sublist queried and an iterator to resume the loop from the last sublist queried (to speed up selection and insertion in TTree::Draw)
  2. Public methods:
    • Contains, Enter and Remove with subentry as argument
    • GetSubListForEntry: to return the sublist corresponding to the given entry
  3. Protected methods:
    • AddEntriesAndSubLists: called by Add when adding two TEntryList arrays with sublists
    • ConvertToTEntryListArray: convert TEntryList to TEntryListArray
    • RemoveSubList: to remove the given sublist
    • RemoveSubListForEntry: to remove the sublist corresponding to the given entry
    • SetEntry: to get / set a sublist for the given entry

Others changes

PROOF System

NB: Starting with version 5.32/00, Xrootd is not dostributed anylonger with ROOT but has become an external package. If not avaibable the PROOF modules 'proofx' and 'proofd' will not be built. The PROOF core modules, however, are built. Namely, PROOF-Lite will be available even when Xrootd is not.

New functionality



Histogram Libraries



TProfile2D and TProfile3D













Python/Ruby Bindings

Math Libraries




Fitter classes

RooFit Package

RooFit 3.50 has undergone a substantial amount of core engineering to improve computational efficiency and improve algorithmic likelihood optimizations. The expected increases in execution speed range from roughly 20% (for problems that were already implemented in a close-to optimal form) to more than 2000% for certain type of problems. Below is a summary of the changes made. All of these changes are transparent to end-use cases

RooStats Package


RooStats Utils

HypotestInverter and HypoTestInverterResult


Test Statistics classes

TMVA Package

Geometry Libraries

MonteCarlo Libraries

GUI Libraries






2D Graphics Libraries







iOS module

3D Graphics Libraries

Misc Packages


ROOT page - Class index - Top of the page - Valid XHTML 1.0 Transitional