ROOT Version 4.04/02 Release Notes

A new production version ROOT 4.04/02 has been released May 1, 2005.

Binaries for all supported platforms are available at:
Versions for AFS have also been updated. See the list of supported platforms:

For more information, see:

The following people have contributed to this new version:
Ilka Antcheva,
Maarten Ballintijn,
Bertrand Bellenot,
Marek Biskup,
Rene Brun,
Philippe Canal,
Olivier Couet,
Valeri Fine,
Gero Flucke,
Markus Frank,
Gerri Ganis,
Andrei Gheata,
Mihaela Gheata,
Masaharu Goto,
Kris Gulbrandsen,
Anna Kreshuk,
Wim Lavrijsen,
Sergei Linev,
Jose Lo,
Richard Maunder,
Axel Naumann,
Eddy Offermann,
Valeriy Onuchin,
Timur Pocheptsov,
Fons Rademakers,
Otto Schaile



Interface to the Dcache system

From Tigran Mkrtchyan: support for large files is now available in dcap. Make use of it in TDCacheFile. This needs the latest dcache.tgz file from


Collection classes

Introduce GetEntries for all ROOT collections classes. Insure that TClonesArray always returns the correct value (this was sometime not the case when re-streaming of TClonesArray object)


Allow up to 65535 distinct processIds in a single file. Previously the actual limit was 255. (High number of processIds in a file can be reached when skimmed a series of files)



Fix a few problems related to the splitting of collections (including preventing the attempt of splitting a collection nested inside another collection)



XML Parser

A new module that allows parsing XML files using libxml2.


Is an abstract class which interfaces with libxml2.


It parses XML files using the SAX (Simple API for XML) interface. It emits signals for specific events, like: StartDocument, EndDocument, StartElement, EndElement, Characters, CDataBlock, Comment, Warning, Error and Fatal.

The new tutorial SAXHandler.C shows how to parse an XML file using the TSAXParser.

PyROOT improvements

The core of PyROOT has been refactored, in order to maximize internal sharing of code (to make maintenance easier) and to minimize call layers while creating better abstractions (for performance). In the process, the code has been combed through, to adhere much closer to the ROOT coding conventions. Several new tutorial files have been added as further tests.

C++ language features

Improved function overloading, added access to global functions, private methods (names are mangled, though), class static data read access, and global built-ins. Added python method doc strings, and a C++ exception to report python errors.

ROOT/CINT interoperability

CINT access to python classes has significantly improved: python instances can now cross interpreter borders and CINT can instantiate python objects. Access to their members is restricted to methods only, though, and return values are limited to built-ins and types that have an associated TClass.

Command line arguments are now passed on to the TApplication instance. The proper syntax for that is "python <args>", such that it is clear to python that the <args> are for the script, not for itself.


PROOF and TChain::Draw

PROOF, Histograms and Graphs

PROOF session startup refactoring

PROOF sessions are now created using the plugin manager. This makes it easy to implement new types of PROOF sessions. So far four types have been implemented. The selection is made by specifying the type as part of config file argument, e.g
The following table lists the tags and the meaning of the config parameter:

Tag PROOF type Config parameter
condor Condor session If present used as name of config file. Only "condorslave" entries are used, otherwise query Condor for list of hosts
sm Super Master Name of config file, "submaster" entries are used
peac PEAC Session Config parameter is internal PEAC connect string, never specified by user directly
* or absent Standard session Name of config file. If absent the default is used

PROOF Multi Level Master

The original three tier model (client,master,slaves) has been extended to support a generalized N-tier model. The client still talks to a master, but there can be extra layers of masters between that master and the slaves doing the actual work. The original symmetry between the client/master and master/slave was further enhanced to allow this configuration. The configuration file sytax was extended to supprort this model. The new entry is
submaster <hostname> [image=<imagename>] [port=<portnumber>]

A multi level master setup can be used to isolate the processing from the latency on wide area networks when running slaves on multiple sites. It also allows separation into different domains "(mass storage domaina") to avoid accessing files across sites. An extra (optional) parameter was added to the TDSet::Add() method.

A multi level master configuration can also be used to improve scalability in very large clusters as it parallizes the functionality of the master.

An example test configuration to run a super master, two masters and four slaves on a single workstation, is as follows:

File ~/.proof_mlm.conf:

   master localhost
   submaster localhost config=proof_sub1.conf msd=sub
   submaster localhost config=proof_sub2.conf msd=sub
File ~/.proof_sub1.conf:
   master localhost
   slave localhost
   slave localhost
File ~/.proof_sub2.conf is identical to ~/.proof_sub1.conf.

Now to run with this configuration start PROOF like this:


PROOF parallel slave startup

The slave startup in the master has now been parallelized using threads. To enable this mode set:
   Proof.ParallelStartup: yes
in the [system].rootrc file on the node where the master runs. In case many tens or hundreds of slaves need to be started this feature greatly reduces startup time.

Stopping or canceling queries

PROOF queries can now be gracefully interrupted. Using the Stop button on the progress dialog one stops the query and the Terminate() of the selector will be run as if the query had finished normally. Using the Cancel button one can cancel the query, no results are reported back in this case. Hitting ctrl-c during a query is like hitting the Cancel button.

Other new PROOF features and bug fixes

A substantial number of bugs was fixed and new features were added:


A new package was introduced that implements a native RPC interface to Clarens. The Clarens Grid-Enabled Web Services Framework is an open source, secure, high-performance "portal" for ubiquitous access to data and computational resources provided by computing grids. If Clarens is installed this package is automatically selected by the configure script.

Geometry package

Virtual Monte Carlo

TVectorF, TVectorD, TMatrixF, TMatrixD

Histogram classes

New class TLinearFitter

Linear fitter is used to fit a set of data points with a linear combination of specified functions. Note, that "linear" in the name stands only for the model dependency on parameters, the specified functions can be nonlinear. The general form of this kind of model is
          y(x) = a[0] + a[1]*f[1](x)+...a[n]*f[n](x)
Functions f[i] are fixed functions of x. For example, fitting with a polynomial is linear fitting in this sense.
The fit is performed using the Normal Equations method with Cholesky decomposition. The linear fitter is considerably faster than general non-linear fitters and doesn't require setting the initial values of parameters.
Fitting can be performed either through TH1::Fit(), TGraph::Fit() or TGraph2D::Fit() functions, or using the linear fitter directly (the only way if case of more than 3 dimensions).
Formula syntax for linear fitting:
Further details can be found in the class description.

see also the new tutorials fitLinear.C and fitLinear2.C.

class TMultiGraph

A new function TMultiGraph::Fit has been implemented.
see new tutorial fitMultiGraph.C.

New package TFoam

Authors: S. Jadach and P.Sawicki
 Institute of Nuclear Physics, Cracow, Poland
What is FOAM for?
  • Suppose you want to generate randomly points (vectors) according to an arbitrary probability distribution in n dimensions, for which you supply your own subprogram. FOAM can do it for you! Even if your distributions has quite strong peaks and is discontinuous!
  • FOAM generates random points with weight one or with variable weight.
  • FOAM is capable to integrate using efficient "adaptive" MC method. (The distribution does not need to be normalized to one.) for more info, see class TFoam documentation

    see also the new tutorials foam_demo.C, oam_kanwa.C and foam_demopers.C.

    New functions in TMath


    3D Viewers (X3d, OpenGL)

    Many internal changes to TVirtualViewer3D, TBuffer3D and geometry classes (geom and g3d libs). Largely visible for external users - will support performance improvements for OpenGL viewer in future.

    OpenGL viewer now rebuilds when pad contents change. x3d has to be re-invoked.

    Known issue: Spawning an external x3d or OpenGL viewer results in pad not being drawn until external viewer is closed down and pad clicked in.

    Graphical toolbar

    Text drawing

    Histograms and graphs drawing



    A large set of vector graphics methods (lines, polygons, texts etc.) was implemented for TImage/TASImage class. A new class TImageDump derived from TVirtualPS was introduced. This class uses TASImage object as backend. That allows to save canvas/pad into GIF, JPEG, PNG,XPM, TIFF, etc files in batch mode (without any X display). The quality and speed of producing images are pretty well. Example:
             $ root -b
             root [0] .x hsimple.C
             root [1] c1->Print("c1.gif");

    TGraph2D and Delaunay triangulation:

    New Line Styles:

    Default Settings:


    Fill Area Hatches:



    Text drawing:





    Only active branches are shown.


    Automatically launched from the histogram context menu.

    GUI classes

    Graphics Editor

    Qt Improvements


    Other Improvements

    New tutorials

    ROOT page - Class index - Top of the page