ROOT Version 5.10/00 Release Notes

ROOT version 5.10/00 has been released February 28, 2006.

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,
Walter Brown,
Rene Brun,
Philippe Canal,
Olivier Couet,
Christophe Delaere,
Valeri Fine,
Mark Fishler,
Markus Frank,
Gerri Ganis,
Andrei Gheata,
Mihaela Gheata,
Masaharu Goto,
Andy Hanushevsky,
Christian Holm Christensen,
Anna Kreshuk,
Wim Lavrijsen,
Sergei Linev,
Pere Mato,
Richard Maunder,
Lorenzo Moneta,
Axel Naumann,
Eddy Offermann,
Valeriy Onuchin,
Timur Pocheptsov,
Fons Rademakers,
Stefan Roiser,
Paul Russo.


We improved the class autoloader's support of templated classes.

TTree and I/O

I/O thread safety

TRef / TBranchRef / TRefTable Autoloading Enhancements

These changes are backward and forward compatible.


New Triple Slider Widgets

  • The new TGTripleHSlider and TGTripleVSlider classes inherit from the double slider widgets and allow easy selection of a range and a pointer value. The pointer position can be constrained into the selected range or can be relative to it.


  • New tutorial Slider3Demo.C - demonstrates triple slider functionality.



    Re-implemented the old behavior of selecting several items by clicking the left-mouse button on the first one, moving the mouse and releasing the button on the last one.

    Qt Layer

    Added the enforcement of the Qt-ROOT layer for Qt-applications to eliminate the need of having .rootrc with 'Gui.Backend qt'. If a Qt application was started by users, the 'Gui.Backend native' is treated as 'Gui.Backend qt'.

    Embedding ROOT in External Applications

    Implemented several modifications in TGWin32 and gdk layer that allow to embed a TCanvas in external applications. It is now possible to create an application using toolkits as QT and FOX, or MFC, and to embed a ROOT canvas in only a few steps.
       *** IMPORTANT: Do not call TApplication::Run() ***
    * In the application constructor or in main(), create a TApplication 
       // create an instance of TApplication
       gMyRootApp = new TApplication("My ROOT Application", &argc, argv);
       // tell application to return from run
    * Create a timer to process Root events, i.e:
       void MyWindow::OnRefreshTimer() {
          // Process Root events when a timer message is received
    * Get the id of the window where you want to embed the TCanvas :
       void MyWindow::Create() {
          // Add this window to TVirtualX list of windows; in return get its TVirtualX identifier
          int wid = gVirtualX->AddWindow((ULong_t)getid(), getWidth(), getHeight());
          // Create a new TCanvas, specifying this window\x{2019}s id as parent
          fCanvas = new TCanvas("fCanvas", getWidth(), getHeight(), wid);
    * Forward messages to the Canvas, i.e:
       void MyWindow::OnPaint() {
          // Handle Paint events
          if (fCanvas) fCanvas->Update();
       void MyWindow::OnSize() {
          // Handle Resize events
          if (fCanvas) fCanvas->Resize();
       void MyWindow::OnMouseMove() {
          // Handle Mouse move events
          if (!fCanvas) return;
          if (ev->state & LEFTBUTTONMASK)
             fCanvas->HandleInput(kButton1Motion, ev->win_x, ev->win_y);
             fCanvas->HandleInput(kMouseMotion, ev->win_x, ev->win_y);
       void MyWindow::OnLMouseDown() {
          // Handle Mouse Left button down event
          if (fCanvas) fCanvas->HandleInput(kButton1Down, ev->x, ev->y);

    Qt & ROOT


    FOX & ROOT


    MFC & ROOT



    This release is the last one from Richard Maunder contibuted too. Many thanks to him for his work with the GL viewer and the impressive improvements in the past few months.

    Basic 2D primitives





    Histograms, graph and functions drawing

    Pad drawing

    Graphics Device Interface

    PROOF enhancements

    New features in the Geometry classes

    1. New class TGeoIterator providing 2 iteration modes for the geometry hierarchy of a volume:
        TGeoIterator next(pMyVolume);
        // reusable for other volume:
        // iteration of all the branch:
        next.SetType(0); // default
        // iteration of daughter nodes of the current volume:
        TGeoNode *node;
        while ((node = next())) do_something;
        // global matrix for the current node during iteration:
        TGeoMatrix *global = next.GetCurrentMatrix();
        // path of the current node during iteration:
        TString path;
    2. Class TGeoOverlap restructured: derived classes TGeoNodeOverlap and TGeoExtrusion removed and base class became non-abstract.
      • Fixes in the overlap checker.
      • Overlap checking checks now also assemblies of volumes (TGeoVolumeAssembly)
    3. Possibility to change existing volumes in a closed geometry with assemblies:
        TGeoVolumeAssembly *pMyNewVolume =
        gGeoManager->ReplaceVolume(pMyOriginalVolume, pMyNewVolume);
      The feature is very useful for replacing virtual containers from an existing geometry. It can be used (for particle transport) only if the tracking medium (TGeoMedium) of the replaced volume is the same as the one of the one this is positioned into.
    4. Possibility to safely remove an existing node of a volume (if the geometry is closed or not)
        pMyVolume->RemoveNode(TGeoNode *node);

    Fitting enhancements and bug fixes


    In addition to some bug fixes in the Rotation and Boost classes, this release contains:

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


    Added to the special functions the confluent hypergeometric function of the second kind, U(a,b,z). See here for the function definition. Reference documentation of mathmore for this release can be found at this location.


    No major changes for this release, only some minor bug fixes. More information on Minuit2, the new C++ version of MINUIT, can be found on the MINUIT Web Site and reference documentation at this location.



    Add the support for the symmetric matrices thanks to Juan Palacios. The SMatrix class has been internally modified by introducing a generic storage class, which is a template parameter of the matrix class. Two different implementation of the matrix storage exist, the standard (ROOT::Math::MatRepStd), which is the default one and the symmetric one (ROOT::Math::MatRepSym), which contains only the N*(N+1)/2 independent elements of a NxN symmetric matrix. For better performances the offset of the indexes for symmetric matrices are pre-calculated for symmetric matrices up to size 6x6. The optmized Cramer inversion algorithm for symmetric matrices up to size 6x6 has been also implemented.

    Further modifications in the SMatrix package are:

    Reference documentation of the SMatrix package can be found at this location.




    New tutorials

    ROOT page - Class index - Top of the page