[ROOT] Official Release of ROOT Version 3.01

From: Rene Brun (Rene.Brun@cern.ch)
Date: Fri Jun 08 2001 - 15:44:58 MEST


Official Release of ROOT Version 3.01
               =====================================

The ROOT Team is pleased to announce the release of ROOT version 3.01.


Compared to the previous production release (v3.00/06) this new
version has major enhancements in the following areas:

  - Automatic schema evolution
  - Tree branches and Query mechanisms
  - An important new feature: Tree friendship
  - A long list of fixes and enhancements

This new version is fully backward compatible with the previous 
production version.

Binaries for all supported platforms are available at:
          http://root.cern.ch/root/Version301.html
We have added support for new compiler/OS combinations.

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

A new version of the UsersGuide in pdf and doc formats is available at:
          http://root.cern.ch/root/RootDoc.html

We would like to ask you to very attentively read the full list of new
features and enhancements described below. They will help you in making
a smooth transition to ROOT v3.01.


Next week, we will be attending the workshop at FNAL, see
         http://www-root.fnal.gov/root2001/
As a consequence, we will not be able to answer emails very frequently.

   Rene Brun and Fons Rademakers



Overview of the New Features, Enhancements, Classes and Fixes in ROOT v3.01
===========================================================================

For a more detailed list of enhancements, bug fixes, etc, see:
     http://root.cern.ch/root/html/examples/V3.01.txt.html





Automatic TROOT object creation
===============================

A TROOT object is now created automatically as soon as libCore is
loaded. It is therefore not needed anymore to explicitly create
in the main() program a TROOT object to initialize the system.


TTree, TBranchElement and new branch styles
===========================================

Add new static functions SetBranchStyle() and GetBranchStyle().

The old TTree::Branch() has been renamed TTree::BranchOld().
The new TTRee::Branch() is a dispatcher calling:
  - TTree::Bronch() if fgBranchStyle = 1
  - TTree::BranchOld() if fgBranchStyle = 0
The default is fgBranchStyle=1. The new branch style is managed
by the new class TBranchElement. This class supports more complex
class structures than the previous branches. Use the static function
TTree::SetBranchStyle(0) to use the old system.
See more documentation in the TTree::Branch() functions.

Add special case in TTree::Branch() when passing a TObject*.
Splitlevel=-1 will force a call to the class Streamer() method instead
of the more efficient WriteBuffer(). This option must be used for
classes that have special Streamer() methods incompatible with the
automatic Streamers generated by rootcint.

When TTree::GetEntry() or TBranch::GetEntry() are called twice on the
same entry the second call reads again the data from the buffers. In
the previous version, calling twice GetEntry() on the same entry was
a noop. However, this had several side-effects in case the objects in
memory were modified between the two calls.


TTree and TFolder
=================

The TTree constructor can now create automatically a branch
hierarchy from an existing folder structure when the first character
of the title starts with a "/"
Example;  TTree T("T","/Event/Hits");


TTree Friends (new class TFriendElement)
========================================

A TFriendElement TF describes a TTree object TF in a file.
When a TFriendElement TF is added to the the list of friends of an
existing TTree T, any variable from TF can be referenced in a
query of T.

A tree keeps a list of friends. In the context of a tree (or a chain),
friendship means unrestricted access to the friends data. In this way
it is much like adding another branch to the tree without taking the
risk of damaging the original tree. See extensive documentation in
TTree::AddFriend().


Processing Trees without the class library
==========================================

This is an important addition in this new version. It is possible to
process Trees (split or no-split mode) when the classes used in the
branches are missing. In this case, ROOT builds a "fake class". The
Tree query mechanism is then still able to search data members in
a complex hierarchy of objects. Objects in a TClonesArray may also
be processed when the class library is missing.


TTreeFormula: many extensions in the Tree query mechanism
=========================================================

The TTreeFormula class has the following many new features:

 - Support for the TTree new style of branches

 - Support for drilling into un-split branches by
   specifying data members. This works even when the
   shared library defining the user classes is absent:
      myTree->Draw("fH.fXaxis.fXmax")

 - Support for using the return value of method calls:
      myTree->Draw("event.GetHistogram().GetXaxis().GetXmax()")
      myTree->Draw("event.fH.GetXaxis().fXmax");

 - Enhance support of nested arrays, including variables
   length arrays inside a TClonesArrays.

 - Add support for the shift operators (<< and >>).  Since
   >> is also used to explicitly name the histogram to be used,
   it needs to be disambiguated with parenthesis when used as
   a shift operator:
      myTree->Draw("fValid<<2");
      myTree->Draw("(fValid>>2)");

 - Enhance array support when using TBrowser.
   Double clicking on a leaf which is an array now properly
   histograms all the elements of the array.

 - Support the usage of another variable as array index:
      myTree->Draw("clone1.a1:clone2.a2[2]");
      myTree->Draw("clone1.a1:clone2.a2[clone1.b1]");
      myTree->Draw("clone1.a1","clone2.a2[clone1.b1]>0");

 - Enhance the ability to omit some portion of the leaf name.
   The following three statements are equivalent, whether the
   event branch is split or not:
      myTree->Draw("fPx");
      myTree->Draw("fTracks.fPx");
      myTree->Draw("event.fTracks.fPx");


TStreamerInfo
=============

Several modifications to take into account complex topologies like:
 - opening a file before loading the shared lib with the classes
 - reading objects without the shared library
 - complex class structures with multiple inheritance
 - members deriving from abstract classes
 - base classes with no data members

Many changes to support the new TTree branch style and the extended
support for complex classes in TClonesArray.

Add support for classes generated by TTree::MakeClass().


TClonesArray
============

Several modifications to support the new branch style.
Classes in TClonesArray may contain variable length items and
pointers to other objects.


TLatex
======

Several minor improvements for special characters or when the text
is placed in narrow pads.


TAxis
=====

The functions DrawClone(), Delete(), SetDrawOption() are not
visible in the context menu. In the default constructor, the
default number of bins is 1 instead of 0.


TH1
===

The default constructor may be called by the user. Several protections
added in this case.


TH1::Fit(), TGraph::Fit()
=========================

Take into account fixed parameters when computing the number of
degrees of freedom.


TChain
======

Remove the limitation that the file name must contain the string
".root". However, ".root" is necessary only in case one wants to
specify a Tree in a subdirectory of a ROOT file with e.g., the format:

        //machine/file_name.root/subdir/tree_name


TTreePlayer
===========

Special binning procedure for variables of type integer.
Force bin sizes to be integer.


TF1 constructors and TFormula
=============================

Thanks to John Odonnell to implement support for recursive
functions definitions. For example, the following macro now
works correctly:
   {
      TF1 *fcos = new TF1 ("fcos", "[0]*cos(x)", 0., 10.);
      fcos->SetParNames( "cos");
      fcos->SetParameter( 0, 1.1);

      TF1 *fsin = new TF1 ("fsin", "[0]*sin(x)", 0., 10.);
      fsin->SetParNames( "sin");
      fsin->SetParameter( 0, 2.1);

      TF1 *fsincos = new TF1 ("fsc", "fcos+fsin");

      TF1 *fs2 = new TF1 ("fs2", "fsc+fsc");
   }


TCanvas and TStyle
==================

Support for fonts specified in pixel precision also in sub-pads
and also for histogram title and stat boxes. New TStyle methods:
TStyle::SetTitleFontSize(), TStyle::SetStatFontSize(),
TStyle::GetTitleFontSize(), TStyle::GetStatFontSize().


TCanvas embedding in Qt
=======================

Some changes by Denis Bertini that will allow a TCanvas to be
embedded in a Qt driven GUI.


Fixed important memory leak in TCanvas
======================================

Fixed long standing memory leak related to updating canvases and
pads in a loop. This problem was especially a problem for monitoring
programs that were continuously updating canvases as for every update
about 800 bytes were leaked. The problem was due to the stacking of
GraphicsExpose and NoExpose X11 events that were never handled.


TCanvas order of initialisation
==============================

When running with threads, the thread running the canvas may run
faster than the main thread. The order of initialisation in the
canvas constructor has been modified.


TDialogCanvas
=============

Warning, new version may be incompatible. The SetEditable flag is
not set in the default constructor. If you have a class deriving from
TDialogCanvas and containing TButtons, note that you must call
SetEditable(kTRUE) before adding buttons, then call SetEditable(kFALSE).


TObject::Draw
=============

When a pad is declared not editable (TPad::SetEditable()) the Draw
function refuses to add the object to the pad list of primitives.


TPad::Clear
============

When a pad is declared not editable (TPad::SetEditable())
the Clear() function does not erase the pad.


Color handling
==============

On true color displays (normally all displays with > 8 bit planes)
color values are now calculated instead of queried from the X server.
This reduces ROOT startup time over a 64KB ISDN line from 30 to 10
seconds. Also the limit of 1000 color has been removed.


X3D
===

Corrected color rendering for all true color devices. Also stereo view
mode works now on these displays.


Integration of OpenInventor
===========================

OpenInventor can now be used embedded in the ROOT GUI to view
3D scenes. After installing OpenInventor (which requires the
setting of the environment variable IVROOT) build ROOT again
and you will get the OpenIventor interface when selecting the
OpenGL option in TCanvas.


TGTableLayout
=============

New GUI TGTableLayout manager by Brett Viren.
The TGTableLayout manager places child frames in a table. It uses
TGTableLayoutHints (not TGLayoutHints). See TGTableLayoutHints
for how to use these. This manager works like TGMatrixLayout with
the addition that:
   - Child frames can span more than one column/row.
   - Child frames can resize with the frame.
   - Column and row sizes are not fixed nor (optionally) homogeneous.
   - The number of columns and rows must be fully specified.
See also the test program $ROOTSYS/test/guiviewer.cxx.


TThread
=======

Several changes in the initialization procedure. New Thread constructor
to connect to an existing running thread. By Mathieu de Naurois.


TSystem
=======

New methods ResetSignal() and IgnoreSignal() to reset specific
signals to their default or to ignore them. Both methods can
toggle their state.


TDatime
=======

New method Set(UInt_t) which takes the result of time() or
of TDatime::Conver().


New tutorials
=============

The following new tutorials have been added:

 - tasks.C: This tutorial illustrates the use of the class TTask.
   It dynamically compiles and links a set of TTask classes
   in the new file MyTasks.cxx
 - tree1.C: show how to write/read a simple Tree
 - tree2.C: a Tree from variables or C-structs
 - tree3.C: show a Tree with friends
 - tree4.C: process a tree with objects of the class Event.
 - tv3.C: a Tree with TVector3 objects
 - fitcont.C: illustrating how to get a contour from TMinuit in
   graphical form
 - shapesAnim.C: illustrates how to animate a geometry picture.
 - fit2.C: illustrates how to fit a 2-D histogram.


Test programs and benchmarks
============================

Use the new Tree branch style. Renormalized benchmarks.


rootcint
========

Several improvements, in particular for STL maps.


h2root
======

Implement a new value option for the parameter tolower.
if tolower = 1, variable names are converted to lower case,
first character converted to upper case, if tolower = 2, variable
names are converted to lower case.


Makefile targets for building RedHat and Debian packages
========================================================

Christian Holm Christensen contributed scripts to automatically package ROOT
binaries in the RedHat rpm and Debian pkg format.


MacOS X
=======

A port to MacOS X provided by Keisuke Fujii and Ben Cowan.


iPAQ
====

A port to the Compaq iPAQ handheld (32 MB RAM, 16 MB flash).
Kind of a curiosity, running ROOT on a 320x160 pixel handheld,
but more importantly a proof of concept that the system is still
lean and mean enough so it can run in such a limited environment.



This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:50:49 MET