Root version 2.22/04 first public pre-relerase now available

Rene Brun (Rene.Brun@cern.ch)
Fri, 04 Jun 1999 13:45:16 +0000


Today, we are exposing the first public pre-release of Root version
2.22.
this version is stamped 2.22/04 and the main features are listed below.
For more details, see URLs:

http://root.cern.ch/root/News.html
http://root.cern.ch/root/Version222.html
http://root.cern.ch/root/html/examples/V2.22.txt.html

Rene Brun & Fons Rademakers

- New CINT 5.14.4:

- ==========>>IMPORTANT NEW FEATURE IN THE I/O SUBSYSTEM<<=============
TBuffer: WriteObject() now inserts a byte count in front of the buffer
and ReadObject() checks at the end of reading the byte count. If the
byte count is not correct the buffer is positioned at the location
specified by the byte count so that a next object in the same buffer
can still be correctly read. This new feature is very useful to detect
if a Streamer() is out of sync compared to the data on the file. Also
it will allow the system to skip data of an unkown class (class info
has been lost or shared lib is not loaded), but still correctly read
the other data.
ROOT FILES WRITTEN WITH BY THIS AND HIGHER (>= 2.22) VERSIONS OF OF
THE
SYSTEM CANNOT BE READ BY PREVIOUS (< 2.22) VERSIONS. PLEASE UPGRADE.

- rootcint: generate Streamer code for STL containers vector, list,
deque, map, set, multimap and multiset. It is now possible to do
automatic I/O for classes containing these containers.

- Several changes in class TH1
============================
- new member functions to return a random number distributed according
the contents of a histogram.
Axis_t GetRandom(); // for 1-d
void GetRandom2(Axis_t &x, Axis_t &y); //for 2-d
void GetRandom3(Axis_t &x, Axis_t &y, Axis_t &z); //for 3-d
For the 3 cases GetRandom computes the integral of the bins if not
yet done).
This integral (fIntegral) is normalized to 1 and a random number
returned following this integral.

- existing functions TH1::FillRandom(TF1*) and TH1::FillRandom(TH1*)
have been modified. TH1::FillRandom(TH1*) has been rewritten to use
the new TH1::GetRandom functions. The new function does not require
that the source and destination histogram have the same number of
bins or
bin limits. Statistics are also correctly filled.

- Changes in prototype for TH1::DrawCopy from
old: void DrawCopy(Option_t *option="");
new: TH1 *DrawCopy(Option_t *option="");

- Changes in TTree::MakeClass. The new version generates a skeleton
analysis function allowing a better performance when reading the tree.
In addition, to the list of leaf (variable) names, the new version
also
generates for each branch a member like:
TBranch *b_branchname;
In the analysis loop, one can call
b_branchname->GetEntry(entry) to read only the variables belonging
to this branch. The branch pointers are initialized in the Init
function.
Note that if b_branchname->GetEntry(entry) is invoked more than once
for the same entry, the subsequent calls return immediatly from
GetEntry.

- ==========>>>>WARNING Terminology change in TTree.<<=================
We now call "entry" what was called "event"
We have added the following functions
TTree::GetEntry
TChain::GetEntry
TBranch::GetEntry
These new functions behave like the old GetEvent functions.
We have left the old GetEvent functions for backward compatibility.
However, note that these old functions call the new functions
GetEntry.
We strongly encourage you to make the corresponding changes in your
code.

- New class in patch EG: TParticle. This new class replaces the old
class
TPrimary (left for compatibility).
The classes TGenerator, TVenus, TPythia changed to use the new class.
TGenerator::GetPrimaries has been renamed TGenerator::ImportParticles.

- New class TTabCom: very useful new class made by Christian Lacunza
<lacunza@cdfsg5.lbl.gov>. This class performs basic tab completion.
You should be able to hit [TAB] to complete a partially typed:

username
environment variable
preprocessor directive
pragma
filename (with a context-sensitive path)
public member function or data member
global variable, function, or class name

- IMPORT CHANGE for LINUX users. in $kumacs/globals and all makefiles
the options -fno-rtti -fno-exceptions have been removed.
When we moved from gcc to egcs1.0 about 1 year ago, we found out that
using the default compiler options was generating a huge overhead in
space in the object files. In particular the exceptions could generate
a few
tens of kilobytes of additional code compared to no-exceptions. We saw
many
cases of small and medium size classes (in fact the majority) for
which the
object file was more than double.
Because support for rtti and exceptions was supported by only a few
compilers at the time, we set by default the options above.
egcs1.1 is now generating a more compact code than its predecessor
and is quickly becoming the standard compiler on Linux.
We have compared a few weeks ago the overhead induced by each option
above and found the following result on the Root classes
-rtti overhead = 1.2 per cent (totally negligible)
-exceptions = 20 per cent
The overhead generated by the exceptions option is still not
negligible.
However, we have decided to compile Root with the default egcs
options.