ROOT Version 5.17/08 Development Notes


ROOT version 5.17/08 has been released December 13, 2007. This will be the last development version for 5.17. We release it before Christmas to give a chance to the major collaborations to test their frameworks in the coming few weeks. Our plan is to make a production release 5.18 on January 16. Between now and the production release in January, no new developments will be introduced, only possible bug fixes. We encourage the maximum number of people to test this version 5.17/08 and report potential problems to us as soon as possible. In case you are upgrading from version 5.14, please read the releases notes of version 5.16 in addition to these notes.

Binaries for all supported platforms are available at:

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

For more information, see:

      http://root.cern.ch

The following people have contributed to this new version:
Roel Aaij,
Ilka Antcheva,
Silvia Arcelli,
Bertrand Bellenot,
Rene Brun,
Philippe Canal,
Olivier Couet,
Bastien Dallapiazza,
Frank Filthaut,
Valeri Fine,
Leo Franco,
Gerri Ganis,
Andrei Gheata,
Mihaela Gheata,
Andreas Hoecker,
Jan Iwaszkiewicz,
Anna Kreshuk,
Wim Lavrijsen,
Sergei Linev,
Diego Marcos-Segura,
Lorenzo Moneta,
Axel Naumann,
Valeriy Onuchin,
Timur Pocheptsov,
Fons Rademakers,
Paul Russo,
Magdalena Slawinska,
Peter Speckmayer,
Joerg Stelzer,
Scott Snyder,
Alja Tadel,
Matevz Tadel,
Zoltan Torzsok,
Wouter Verkerke,
Helge Voss


ROOT Robutsness

This release has undergone an extensive, formalized testing procedure, using tools like valgrind and purify, regression tests, and timing studies. As a byproduct, the new file $ROOTSYS/etc/valgrind-root.supp removes irrelevant (and often distracting) parts of valgrind's reports. This is also useful when running valgrind on a program that uses ROOT. It can be used running valgrind -v --suppressions=$ROOTSYS/etc/valgrind-root.supp myprog.

Core


I/O

        root [] n = new TNamed("myname","my title");
        root [] n->Write()
        Error in <TROOT::WriteTObject>: The current directory (Rint) is not
        associated with a file. The object (myname) has not been written.
        root [2] gDirectory = 0;
        root [3] n->Write();
        Error in <TNamed::Write>: The current directory (gDirectory) is null. The
        object (myname) has not been written.
             Int_t         fN;
             Double32_t   *fArr;  //[fN][-10,10,16]

Important Note about Class Versions

This version introduces support for transitioning classes from the mode where no class version is specified (and the checksum is always used for lookup) and a mode where the user specifies an explicit version number for the class (Allow for simplier, clearer data model evolution). The class version can be specified in 3 different ways:
  1. Use rootcint and add a ClassDef macro in the class declaration:
    	class MyClass {
               ...
               ClassDef(MyClass,10);
           };
    
  2. Use rootcint and add a RootClassVersion macro in the class source file:
    	RootClassVersion(MyClass,10);
    
  3. Use genreflex and specify a ClassVersion property in the selection.xml :
           <class name="MyClass" ClassVersion="10"/>
    
Those 3 solutions set the class version of MyClass's TClass object to 10.

In order to avoid a clash between this class version (and any future class versions) and the class versions given by default to the non-versioned layout of the class, you MUST set this class version to a number that is greater than the number of distinct non-versioned layout. Otherwise you may see warning messages like:

Warning in TStreamerInfo::BuildCheck: 
   The class MyClass transitioned from not having a specified class version
   to having a specified class version (the current class version is 2).
   However too many different non-versioned layouts of the class have been
   loaded so far.  This prevent the proper reading of objects written with
   the class layout version 3, in particular from the file:
   myclass3.root.
Addition Details:

When loading a file containing a non-versioned layout of a class, this layout is assigned the next 'free' number in the list of StreamerInfo. In particular this means that if many files with non-versioned layout of the class are loaded before the loading of a library containing a versioned class layout, the slot reserved for this version layout may already be occupied and you will get the following error message:

   The class MyClass transitioned from not having a specified class version
   to having a specified class version (the current class version is 2).
   However too many different non-versioned layouts of the class have
   already been loaded so far.  To work around this problem you can
   load fewer 'old' file in the same ROOT session or load the C++ library
   describing the class MyClass before opening the files or increase the
   version number of the class for example ClassDef(MyClass,3).
   Do not try to write objects with the current class definition,
   the files might not be readable.
Also if many files with non-versioned layout of the class are read before a file with a versioned layout (and this number is too low), you may get the following error message:
Warning in TStreamerInfo::BuildCheck: 
   The class MyClass transitioned from not having a specified class version
   to having a specified class version (the current class version is 2).
   However too many different non-versioned layouts of the class have been
   loaded so far.  This prevent the proper reading of objects written with
   the class layout version 3, in particular from the file:
   myclass3.root.

SQL

XROOTD plugin

Dcache Plugin:



Hist

THnSparse: An efficient Multi Dimensionnal Histogram class

The new abstract class THnSparse with its incarnations THnSparseF, THnSparseD, THnSparseC, etc, allows to histogram data in an arbitrary number of dimensions. A traditional ("naive") approach using n-dimensional arrays like for TH1-TH3 for dimensions higher than 3 is not viable due to its memory needs. Instead a sparse algorithm with very high fill and read bandwidth is used, where only bins with entries are stored in memory. The macro tutorials/hist/sparsehist.C compares the performance of array and sparse implementations. THnSparse aims in offering the same functionality as TH1-TH3; the most important interfaces are already available. Visualization of this histogram can currently be done using a temporary tree as shown in tutorials/tree/drawsparse.C.

New default values for Projection, Profile, Smooth

Many default values for bin numbers were inconsistent. Now all histogram classes follow these rules: If your code explicitly specify the default values, e.g. because you change a parameter behind the first / lastbin, you will need to change the bin numbers, e.g. to h2->FitSlicesX(f2,0,-1,1,"qln"); You will not notice this change if you did not specify the default bin numbers (e.g. h2->ProjectionX(); or of you specified non-default values (e.g. h2->ProfileX("xprof");).

Tree

        Long64_t TBranch::GetTotBytes(Option_t *option) const
           // Return total number of bytes in the branch (excluding current buffer)
           // if option ="*" includes all sub-branches of this branch too
       
        Long64_t TBranch::GetZipBytes(Option_t *option) const
           // Return total number of zip bytes in the branch
           // if option ="*" includes all sub-branches of this branch too

Meta


Cint


THtml

Searching of reference guide now uses the relative URL, i.e. it respects the version. Simplified the library depedencies, always write the "last changed" field, show proper #include paths (i.e. only remove "include" for ROOT, not the full directory). Added static LoadAllLibs() that will load all libraries with a rootmap. Improve appearance of pages in TGHtml by hiding the tool box if no javascript. Implement multi-threaded MakeAll(), which doesn't work yet for "Begin_Macro" / "Begin_Latex" due to a TCanvas limitation. Fix for ROOT's new ViewVC. Increase font size of pre-blocks. Make sure return / member types are not wrapped.




XROOTD



PROOF


TBinomialEfficiencyFitter


MathCore

MathCore contains now the majority of the statistical functions. They statistical functions are all defined in the header file Math/DistFunc.h. The special function in the heqader file Math/SpecFunc.h. When running CINT it is not needed anymore to load the MathCore (or MathMore ) library when invoking a mathematical functions defined in these header file. The library is loaded automatically by including the header file. For example :

root> #include <Math/DistFunc.h>            // load automatically libMathCore.so 
root> ROOT::Math::chisquared_cdf_c(11,10)  // to get chisquare probability (equivalent to TMath::Prob)

In detail, the changes for this realease are:

Further changes in MathCore are:

A new test has been added in $ROOTSYS/test, stressMathCore testing mathematical functions, physics vectors and matrices including I/O.

More detailed description of the current MathCore release (and the other Math liibraries) can be found at this location.



MathMore

This new release contains:

A new test has been added in $ROOTSYS/test, stressMathMore testing numerical integration, derivation and root finding algorithm

More detailed description of the current MathMore release can be found at this location.

 



SMatrix



Minuit2



ROOFIT

New features in 5.17/02

New features in 5.17/04 (RooFit 2.20)

In addition the following fixes and improvements have been made

New features in 5.17/06 (RooFit 2.23)



TMVA

The following list contains the changes since ROOT release 5.16/00 Remark: We are developing a new, more flexible TMVA design, which supports the boosting and combination of arbitrary base classifiers. While this code is ready, there was not enough time to perform all the test its robustness, and we were reluctant to put it into this production release of ROOT. It will follow in one of the next development releases.

Eve

Eve - Event Visualization Environment - is a new module in ROOT, based on experiment-independant part of the ALICE event display developed in cooperation between ALICE offline project and ROOT during the last two years. It has been used in ALICE for more than a year to perform high-level event visualization, debugging of simulation and reconstruction code as well as for raw-data visualization.

Eve is built on top of ROOT's GUI, GL and GED infrastructure and delivers the following main features:



GUI



Spider Plots

The new class TSpider allows to produce spider plots from a TTree.

A spider view is a handsome way to visualize a set of data stored in a TTree. It draws as many polar axes as selected data members. For each of them, it draws on the axis the position of the present event between the min and max of the data member.

TTreeViewer allows to scan a TTree using a spider view. Via the SPIDER button. See new tutorial $ROOTSYS/tutorials/tree/spider.C.

Spider Plot

Parallel Coordinates Plots

A set of new classes implement the Parallel Coordinates graphs and Candle stick charts:

TParallelCoord

The multidimensional system of Parallel coordinates is a common way of studying high-dimensional geometry and visualizing multivariate problems. To show a set of points in an n-dimensional space, a backdrop is drawn consisting of n parallel lines. A point in n-dimensional space is represented as a polyline with vertices on the parallel axes; the position of the vertex on the i-th axis corresponds to the i-th coordinate of the point. See new tutorial $ROOTSYS/tutorials/tree/parallelcoord.C.

Parallel Coordinates
This tool comes with a rather large gui in the editor. It is necessary to use this editor in order to explore a data set, as explained below.

Reduce cluttering:

The main issue for parallel coordinates is the very high cluttering of the output when dealing with large data set. Two techniques have been implemented to bypass that so far:

Candle chart

TParallelCoord can also be used to display a candle chart. In that mode, every variable is drawn in the same scale. The candle chart can be combined with the parallel coordinates mode, drawing the candle sticks over the axes.

Parallel Coordinates with Candle Chart

TParallelCoordVar

Class containing a variable for the TParallelCoord. Appears as an axis on the pad.

Options can be defined each axis separatly using the right mouse click. These options can be applied to every axes using the editor.

TParallelCoordRange

A TParallelCoordRange is a range used for parallel coordinates plots. It defines a range owned by a selection on an axis.

TParallelCoorSelect

A TParallelCoordSelect is a specialised TList to hold TParallelCoordRanges used by TParallelCoord.

Selections of specific entries can be defined over the data set using parallel coordinates. With that representation, a selection is an ensemble of ranges defined on the axes. Ranges defined on the same axis are conjugated with OR (an entry must be in one or the other ranges to be selected). Ranges on different axes are are conjugated with AND (an entry must be in all the ranges to be selected). Several selections can be defined with different colors. It is possible to generate an entry list from a given selection and apply it to the tree using the editor ("Apply to tree" button).

TParallelCoordEditor

This is the TParallelCoord editor. It brings tools to explore datas using parallel coordinates. The main tools are:
TParallelCoord Editor

Quality Assurance (QA) / stressGraphics

stressGraphics.cxx has been extended to test almost all graphics primitives. This work is still on going.

stressGraphics has now 38 tests each of them testing one particular graphics primitive or graphics feature.

stressGraphics is meant to be run in batch mode.

The procedure:

For each test, stressGraphics does the following:
  1. Run the test and generate the corresponding PS file.
  2. Compare the size of the PS file with a reference size stored in the file stressGraphics.ref. An error is allowed because some tests use random numbers and also the size may depend on which machine the test runs. The error for each test is also stored in stressGraphics.ref.
  3. The .C file corresponding to the test is generated (SavePrimitives).
  4. The PS file is generated form the .C file obtained.

For points 2) and 4) the test is considered as OK if the PS file size correspond to the file size stored in stressGraphics.ref (within the error) otherwise the test is marked as FAILED.

When a test FAILED all the generated PS and .C files are kept for further investigation otherwise (if the test is OK) they are removed.

stressGraphics should be run as standalone compiled (option -g -O2) program and also in the CINT context:

$ ./stressGraphics

root [0] .L stressGraphics.cxx
root [1] stressGraphics()     

root [0] .x stressGraphics.cxx

This procedure allowed to find several problems in particular uninitialized variables and memory leaks. It will be extended in order to make ROOT graphics more robust.

Miscellaneous

TLatex

TBox::Draw

The option 'l' is now available for PostScript also.

TSelectorDraw

Take into account the title offsets in x,y when generating a TH3.

TGraph, TGraphErrors, TGraphAsymmErrors, TGraphBentErrors and TMultiGraph

The SavePrimitive mechanism did not work properly. In particular it was not possible to save various kind of graphs in several multigraph in the same macro. Also in case of TGraph the generated macro was wrong (Add() was missing).

In TGraphBentErrors the signatures of the two SetPointError methods were incomplete. The shift values in the various directions were missing. To preserve the backward compatibility, the missing parameters have been added with default value = 0. The new signature is now used in SavePrimitive which allows a correct saving of the TGraphBentErrors.

TGraph::Draw

Implement the following changes:

TH2::Draw

When painted with option TEXT the empty bins were drawn also ("0" appeared).

TH1::Draw

TGraph2D

TSpline

DistancetoPimitive and ExecuteEvent are now implemented.

Axis painting

In some case the labels "-0" was generated. This problem was visible with the following commands:
   TH2D *s = new TH2D("s","",10,0,100,10,-9e-4,5e-4);
   s->Draw();

TGaxis

Some attributes were not saved by SavePrimitive(): TitleSize, TitleColor, TitleFont. Now they are.

TWbox

The dark and bright colors are now taken from TColor.

TPie

(Guido Volpi)

TASImage

(Valeriy Onuchin)

TPad

TColor

TGraphPolar

New option to not draw the polar labels.

TLegend, TPaveStats, TPaveText.cxx

Make sure the right font is used when the text size is computed in the Paint() methods. (Oleksandr Grebenyuk) The following macro demonstrated the problem:
   {
      TCanvas *c1 = new TCanvas("c1", "c1",521,150,700,590);
      c1->Range(0,0,1,1);

      TPaveText *pt;
      TText     *text;

      pt   = new TPaveText(0.1106322,0.6004274,0.8448276,0.9764957,"br");
      text = pt->AddText("Calculate from helvetica bold");
      text = pt->AddText("Display with helvetica bold");
      pt->Draw();

      pt   = new TPaveText(0.112069,0.1325301,0.8477011,0.5562249,"br");
      pt->SetTextFont(22);
      text = pt->AddText("Calculate from helvetica bold");
      text = pt->AddText("Display with times bold");
      pt->Draw();

      TLine *line = new TLine(0.8132184,0.9558233,0.8132184,0.2309237);
      line->SetLineColor(2);   line->Draw();
      line = new TLine(0.783046,0.5140562,0.783046,0.2309237);
      line->SetLineColor(2);   line->Draw();
      TArrow *arrow = new TArrow(0.783046,0.2610442,0.8146552,0.2610442,0.02,"<|>");
      arrow->SetFillColor(2);   arrow->SetFillStyle(1001);
      arrow->SetLineColor(2);   arrow->Draw();
   }

TPostScript

In the PS files the page numbers are now written between ().

TF1

After zooming and unzooming on a plot containning several TF1 drawn with the option SAME, the functions might be truncated. This problem was visible with the following macro:
   TF1* f[6];
   double fg(double *x, double *p) {return sin((*p)*(*x));}
   void test_zoom() {
      for (int i=0;i<6;++i) {
         f[i]=new TF1(Form("f%d",i),fg, 0,2, 1);
         f[i]->SetParameter(0,i+1);
         f[i]->SetLineColor(i+1);
         f[i]->Draw(i?"same":"");
      }
      f[0]->GetXaxis()->SetRangeUser(.1,.3);
      gPad->Update();
      f[0]->GetXaxis()->UnZoom();
      gPad->Modified();
   }

TH1 titles

SetTitle now allows to have ";" (semicolon) in the histogram title and in the axis title. "#;" is a control character allowing to define the title and the axis title at the same time. To put a ";" in the titles, it is now enough to write ";" or "#semicolon".

TGX11 (low level X11 pilot)

In TGX11::SetMarkerType replace the statement
          gMarker.xy[i] = xy[i];
with the lines
          gMarker.xy[i].x = xy[i].x;
          gMarker.xy[i].x = xy[i].y;
to bypass a bug in gcc4.2 with a wrong inlining of a copy constructor. (found by Christian Hom)

OpenGL

TVirtualViewer3D

Add function virtual void ObjectPaint(TObject*, Option_t*).

TGLScenePad

Implement virtual TVirtualViewer3D::ObjectPaint().

TGLCamera - TGLPerspectiveCamera - TGLOrthoCamera

Introduce two transformation matrices to clearly define movement of camera around the center point. The first transformation matrix fCamBase defines the coordinate system placed at the camera center point with camera up-vector as the third base vector. The second transformation matrix fCamTrans defines the camera transformation relative to fCamBase.

Implement a common Truck(), Rotate() and Dolly() function for orthographic and perspective camera.

Implement an option to define camera center point externally. Center can also be determined via picking.

TGLMatrix

Add new functions to get/set the base vectors directly.

TGLUtil

Add member UInt_t fgDefaultDrawQuality.

TGLRect

Bug fixed in Diagonal(), integer calculation overflowed.

TGLViewer

Make interface to draw camera center point. Add option to disable/enable depth test when drawing axis guides.

TGLViewerEditor

Add GUI to manipulate camera center and to disable/enable depth test when drawing axis guides.

TGLClipSetEditor

Change layout of labeled number entries.

TGLLightSet

Fix positioning of front light. White-space consolidation.

TGLLightSet

Fix positioning of front light. White-space consolidation.

TGLLightSetEditor

Put GUI for the 6 lights in two columns.

Tutorial glViewerExercise.C

Follow-up on changes in TGLCamera. Enable rotation on orthographic camera.

Tutorial glViewerLOD.C

Workaround for cint bug with switch statements.

TGLLegoPainter, TGLPlotPainter, etc ..

Fix the problem reported here: http://root.cern.ch/phpBB2/viewtopic.php?t=5595

Pyroot

Added the TPyDispatcher class that allows for easy programming of callbacks from CINT into python, for the benefit of GUIs. For example (a more complete example is included as tutorials/pyroot/gui_ex.py):

# create callback function
def MyFunction():
   print 'MyFunction was called!'

# instantiate dispatcher object
disp = ROOT.TPyDispatcher( MyFunction )

# upon clicking SomeButtonWidget, 'MyFunction' will now be called
SomeButtonWidget.Connect( 'Clicked()', "TPyDispatcher", disp, 'Dispatch()' )

A limited API, usable from both C++ and CINT, is made available through the TPython class. In particular, the two functions:

void* ObjectProxy_AsVoidPtr( PyObject* pyobject );
PyObject* ObjectProxy_FromVoidPtr( void* addr, const char* classname );
allow conversion from and to PyROOT bound objects.

New Tutorials



ROOT page - Class index - Top of the page