ROOT version 4.01/02 Release Notes

The ROOT Team is pleased to announce the first development release of ROOT version 4.01/02.

This new, backward compatible, version has major enhancements described below.

Binaries for all supported platforms are available at:

      http://root.cern.ch/root/Version401.html
Versions for AFS have also been updated. See the list of supported platforms:
      http://root.cern.ch/root/AFS.html

For more information, see:

      http://root.cern.ch
Ilka Antcheva,
Maarten Ballintijn,
Bertrand Bellenot,
Rene Brun,
Philippe Canal,
Olivier Couet,
Valeri Fine,
Gerri Ganis,
Andrei Gheata,
Mihaela Gheata,
Masaharu Goto,
Carsten Hof,
Anna Kreshuk,
Eddy Offermann,
Valeriy Onuchin,
Timur Pocheptsov,
Fons Rademakers

New Features in the Input/Output System

Support for large Tree/TChain with more than 2 billion entries.

The implementation of this new feature has required changes in many places. Trees produced by this new version cannot be read by old ROOT versions. The new version can digest old ROOT files. Note that when creating a Tree, the default maximum size for a Tree is set to 1.9 GBytes. You can change this default value by calling:
        TTree::SetMaxTreeSize(Long64_t maxsize)

xrootd

xrootd, eXtended ROOT daemon. coded by Andy Hanushevsky of SLAC working for the BaBar collaboration. The xrootd will in the neat future replace the current rootd. xrootd has been written with very large scale in mind (many users, many files, redundancy, fail-safe, fall-over, load balancing, etc., etc.).

New TTree Features

Trees with circular buffers

Implement a first version of circular buffers for memory resident Trees.
      void TTree::SetCircular(Long64_t maxEntries)
where maxEntries is the maximum number of entries to be kept in the buffers. When the number of entries exceeds this value, the first entries in the Tree are deleted and the buffers used again. The implementation minimizes memory operations by swapping basket pointers and only shifting the data in the new first buffer. An example of a script using a circular buffer is shown below
	
	void circular() {
	     gROOT->cd(); //make sure that the Tree is memory resident
	     TTree *T = new TTree("T","test circular buffers");
	     TRandom r;
	     Float_t px,py,pz;
	     Double_t random;
	     UShort_t i;
	     T->Branch("px",&px,"px/F");
	     T->Branch("py",&py,"px/F");
	     T->Branch("pz",&pz,"px/F");
	     T->Branch("random",&random,"random/D");
	     T->Branch("i",&i,"i/s");
	     T->SetCircular(20000);
	     for (i = 0; i < 65000; i++) {
	        r.Rannor(px,py);
	        pz = px*px + py*py;
	        random = r.Rndm();
	        T->Fill();
	     }
	     T->Print();
	}

Tree Friend Indices

The new class TTreeIndex replaces the previous TTree index code.

The class derives from the abstract interface TVirtualIndex. It provides the same functionality as the previous code, but in addition, it supports more complex cases.

When a Tree friend has a TTreeIndex (created as before via TTree::BuildIndex), the friend tree and the parent Tree do not need to have the same serial numbers. The friend tree may have less or more events.

When getting an entry in the parent tree, the corresponding entry in the friend will be computed via the index. Note that to support this new feature, the parent Tree does not need an index. Only the friend Tree must have an index. See comments in the TTreeIndex constructor.

TTree::BuildIndex() may be used with a major-name only.

New method TTree::BranchRef and new classes TBranchRef, TRefTable

Improvements in TTree::Scan

add the ability to format the output of TTree::Scan. The option parameter can now contains the following customization:
	       colsize=ss
	          Where 'ss' will be used as the default size for all the column
	          If this options is not specified, the default column size is 9
	       precision=pp
	          Where 'pp' will be used as the default 'precision' for the
	          printing format.
	       col=xxx
	          Where 'xxx' is colon (:) delimited list of printing format for
	          each column if no format is specified for a column, the default is
	          used.
	    For example:
	      tree->Scan("a:b:c","","colsize=30 precision=3 col=::20.10");
	    Will print 3 columns, the first 2 columns will be 30 characters long,
	    the third columns will be 20 characters long.  The
	    for the columns (assuming they are numbers) will be respectively:
	      %30.3g %30.3g %20.10g
  

New class TVirtualCollectionProxy

An important step toward the implementation of the member-wise saving of STL containers. Mainly, the code does not require anymore the collection proxy to be able to provide a C-style array of pointer to its content. This avoid the problems of having to iterate twice through some collection and/or to have to keep in memory a version of this array. Concretely this also mean that the I/O routine will now be able to recurse through stl containers. Technically, this is done by templating TStreamerInfo::ReadBuffer and TStreamerInfo::WriteBufferAux (as well as the ReadBufferSkip And ReadBufferConv) so that you can use it directly with a char** or with a TVirtualCollection (to which we added an operator [] and removed the method GetPtrArray). In addition, we added 2 new method to TVirtualCollectionProxy: PushProxy and PopProxy that will allow to keep some state on where we are in the iteration for a collection when we recurse. (This is required for a reasonable implementation of the TVirtualCollection for std::list). Also (in an unrelated fix) we update TTreePlayer::Scan to properly display the columns when they are more expressions in the request than leaves in the tree.

TGraph, TH1 and TH2 Graphics editors

. The Editors for changing the attributes of TGraph, TH1/TH2 and the rebinning of TH1/TH2 via the GUI have been implemented. Functionalities of the THEditors in detail:

New GUI MDI classes

new MDI (Multiple Document Interface) GUI classes. Ported from xclass 95. To see how this works and for example code see $ROOTSYS/tutorials/mditest.C.

The GUI Builder: new class TGuiBuilder

ROOT GUI Builder principles

You can start the builder from the canvas Inspect menu. With the GUI builder, we try to make the next step from WYSIWYG to embedded editing concept - WYSIWYE ("what you see is what you edit"). The ROOT GUI Builder allows modifying real GUI objects. For example, one can edit the existing GUI application $ROOTSYS/tutorials/guitest.C. GUI components can be added to a design area from a widget palette, or can be borrowed from another application. One can drag and and drop TCanvas's menu bar into the application. GUI objects can be resized and dragged, copied and pasted. ROOT GUI Builder allows changing the layout, snap to grid, change object's layout order via the GUI Builder toolbar, or by options in the right-click context menus. A final design can be immediatly tested and used, or saved as a C++ macro. For example, it's possible to rearrange buttons in control bar, add separators etc. and continue to use a new fancy control bar in the application. The following is a short description of the GUI Builder actions and key shortcuts: o Press Ctrl-Double-Click to start/stop edit mode o Press Double-Click to activate quick edit action (defined in root.mimes)

Selection, grabbing, dropping

It is possible to select, drag any frame and drop it to any frame

Key shortcuts

   o Del       - delete selected frame
   o Shift-Del - crop action
   o Ctrl-X    - cut action
   o Ctrl-C    - copy action
   o Ctrl-V    - paste action
   o Ctrl-R    - replace action
   o Ctrl-L    - compact layout
   o Ctrl-B    - break layout
   o Ctrl-H    - switch horizontal-vertical layout
   o Ctrl-G    - switch on/off grid
   o Ctrl-S    - save action
   o Ctrl-O    - open and execute a ROOT macro file.  GUI components created 
                 after macro execution will be emebedded to currently edited 
                 design area.   
   o Ctrl-N    - create new main frame

New Graphics 3-D classes TBuffer3D, TVirtualViewer3D and TViewrOpenGL

The 3-D graphics system has been redesigned to show more homogeneity between the various packages and the graphics drivers. A new OpenGL viewer has been created. It can be activated from the View menu of the canvas. See the Help button in the viewer.

Classes TH1, TH2

New Rebin methods for 2-d histograms

	
	- TH2 *TH2::RebinX(Int_t ngroup, const char *newname) 
	- TH2 *TH2::RebinY(Int_t ngroup, const char *newname)
	- TH2 *TH2::Rebin2D(Int_t nxgroup, Int_t nygroup, const char *newname):

TH1::SetBuffer enhancements

Upgrade the histogram buffer algorithm such that it can be used in a coming version of the rebinner of the TH1,2 editors. When the histogram buffer is active (TH1::SetBuffer has been called), the buffer is kept alive as long as the number of entries can be accomodated by the buffer. When calling the Draw/Paint functions, the histogram is reset and refilled from the buffer. The buffer is also preserved by the I/O operations.

Better Error calculation in TH1::Divide

Improve the calculation of errors in TH1::Divide with the binomial option. In the previous algorithm, when the bin contents of the two histograms were equal, the resulting error was null. In the new algorithm, the method used in TGraphAsymmErrors::BayesDivide is used to make a better error estimation.

New features in TF1

The expression "gaus" is a substitute for
     [0]*exp(-0.5*((x-[1])/[2])**2)
To obtain a standard normalized gaussian, use "gausn" instead of "gaus". The expression "gausn" is a substitute for
     [0]*exp(-0.5*((x-[1])/[2])**2)/sqrt(2*pi*[2])
The "gaus" and "gausn" functions use now TMath::Gaus.

TMath enhancements

Improvements in ACLIC

Implements autoloading for ACLiC. Essentially this means that a script that can be interpreted thanks to the fact that ROOT automatically loads dependent library, can now also be loaded via ACLiC (without the user explicitly loading the dependent library).

We added a new option to rootcint --lib-list-prefi=xxx. When used, it tells rootcint to read a list of rootmap files in xxx.in and output in xxx.out a list of libraries where the symbols in the header files can be found.

Also to keep track of the dependencies, the library produced by ACLiC are now explictly linked to all the libraries loaded in ROOT at the time (which now included the result of autoloading). This allow the resulting library to be also loaded in a new session (with the user loading any other library).

class TApplication: Exiting from ROOT

The user can finally exit ROOT even if the system is crashing within the CINT clean-up routines. Namely, we now support:
       .qqqqq (or .QQQQQ) calls gSystem->Exit
       .qqqqqqq (or .QQQQQQQ) calls gSystem->Abort
This matches the corresponding CINT options:
        qqqqq     : exit process immediately
        qqqqqqq   : abort process

PyROOT improvements

A long list of improvements from Wim Lavrijsen

New tutorials



ROOT page - Class index - Top of the page