ROOT Version 2.24 Release Notes

//________________________________________________________________________
//
//::>          VERSION  2.24/05   16/05/2000 16.07.27
//
//
// 16/05/2000  16.03.14  by  Rene Brun
//
- This version should be the last version maintained with CMZ.
  Next version will be maintained by CVS.

- Modify TF1::IntegralMultiple. The maximum number of points maxpts
  has been increased to improve the result. Thanks Regis Terrier.
//
// 16/05/2000  12.04.12  by  Fons Rademakers
//
- THtml: fix in way pathnames of source files are found. If pathname
  contains a path (i.e. / (or  on win32)) then after prepending a
  source dir prefix this file is looked for. If not found the path
  is stripped off and the source search path is used (old behaviour).
//
// 16/05/2000  11.58.00  by  Masaharu Goto
//
* 5.14.38 5 May 2000
*-1306, ctor call for class object as static data member, t377.cxx, t380.cxx
* 1307, global namespace, using directive and function call, t382.h/cxx
* 1308, pointer to reference conversion bug fix, t383.cxx
* 1309, #pragma link C++ function A::B(); t384.h
* 1310, f(int (**)()); t385.h
* 1311, namespace{class{enum{}}} bug fix, t386.h
* 1312, N::A a; N::f(a); f(a); 3.4.2, t387.cxx, review needed
* 1313, #pragma link C++ function A::B(); with function template, t384.h
* 1314, Assume CINTSYSDIR from GetModuleFileName(),Win32
//
// 15/05/2000  23.20.31  by  Rene Brun
//
- Add a new parameter nentries to TChain::Add
      void TChain::Add(const char *name, Int_t nentries=-1)
  if nentries < 0, the file is connected and the tree header read in memory
  to get the number of entries.
  if (nentries >= 0, the file is not connected, nentries is assumed to be
  the number of entries in the file. In this case, no check is made that
  the file exists and the Tree existing in the file. This second mode
  is interesting in case the number of entries in the file is already stored
  in a run data base for example.

- Add a new branch constructor to TTree:
     Int_t Branch(TList *list, Int_t bufsize=32000);
   This new function creates one branch for each element in the list.
   Two cases are supported:
      list[i] is a TObject*: a TBranchObject is created with a branch name
                             being the name of the object.
      list[i] is a TClonesArray*: A TBranchClones is created.
      if list[i]->TestBit(TClonesArray::kNoSplit) is 1, the TClonesArray
      is not split.
      if list[i]->TestBit(TClonesArray::kForgetBits) is 1 and the TClonesArray
      is split, then no branches are created for the fBits and fUniqueID
      of the TObject part of the class referenced by the TClonesArray.
   The function returns the total number of branches created.

- Add a new member function in class TObjLink.
   TObject **GetObjectRef()
   The function returns the address of the object referenced by TObjLink.
   This new function was necessary for the implementation of the new TTree::Branch
   constructor described above.

- Modify TBranchClones constructor to add a new parameter splitlevel.
  Modify TTree::Branch for TClonesArray to not create branches for the TObject
  part (fBits and fUniqueID) if the splitlevel is > 1.

- Add new enum list in TClonesArray.h. The following options are defined:
   enum {
      kForgetBits    = BIT(0),    // Do not create branches for fBits, fUniqueID
      kNoSplit       = BIT(1)     // array not split by TTree::Branch
   };

- A few changes from Damir Buskulic and Jiri Masik for Linuxppc in
  rootd, root daemon, proofd and Makefile.linuxdeb2.

- Extend kMAXFOUND from 50 to 200 in TFormula.
  The previous value of 50 was a bit short when TFormula is used by TTreeFormula
  and many cuts are defined.

- Modify TTreePlayer::MakeClass to change the name of the variable for the loop
  index from j to jentry.

- Merge with Fons and Valery's versions
//
// 13/05/2000  18.56.36  by  Rene Brun
//
- Mods in TTreePlayer::MakeCode when generating the pointer name in case
  of a TBranchObject.
//
// 11/05/2000  16.11.27  by  Fons Rademakers
//
- TBranch: fEntryBuffer was not initialized.

- vvector: corrected a test case.
//
// 11/05/2000  07.20.41  by  Rene Brun
//
- protection added in TBranchClones constructor in case the Tree is created
  in memory (no file open) (thanks Gene Van Buren).

- Merge with Valery's version of May10.

- Add two fixes reported by Masa in CINT_Infunc.

- Add minor changes reported by Damir Buskiluc when compiling with gcc 2.05
  under ppcLinux.

- fix some problems with strings (backslask escaping ") in some strings
  in tutorials Ifit and Shared.
//
// 09/05/2000  19.40.35  by  Fons Rademakers
//
- tutorials/rootalias.C: use gSystem->GetName() to distinguish
  between unix and win32 (instead of cmz +IF conditionals).
//
// 08/05/2000  19.40.35  by  Fons Rademakers
//
- TGMimeTypes: fixed win32 case.

- TFormula: introduced #pragma for win32 case.

- TTUBE, TTUBS: #ifdef's cleaned up.
//
// 07/05/2000  17.11.56  by  Fons Rademakers
//
- New abstract class TInspectorImp. This interface class is used
  via the TGuiFactories to create and object inspector window. Currently
  this is only used for the Win32 implementation (the X11 version uses
  a normal TCanvas). The introduction was needed to remove the last
  Win32 graphics dependency from TWinNTSystem (to be able to build
  libCore.dll seperately from libWin32.dll). For the introduction of this
  class changes were made in: TObject, TSystem, TWinNTSystem, TGuiFactory,
  and TWin32GuiFactory.

- rootcint: fix for Win32.

- TGToolTip: corrected comments.

//________________________________________________________________________
//
//::>          VERSION  2.24/04   05/05/2000 14.08.29
//
//
// 05/05/2000  12.58.00  by  Masaharu Goto
//
* 5.14.36 9 Apr 2000
* -   , minor fix in VC++ and BC++ setup
* -   , turned on G__CONSTNESSFLAG
* 1293, bug fix to 1290, risk3, t364.cxx
* 1294, SetGlobalcomp() changed by Philippe Canal
* -   , G__STRUCTPVAR -> divided as 1.2 due to size reason
* -   , ifunc.c C++ comment error
* 1295, G__free_friendtag() problem only with rootcint,,
* 1296, static member in nested class, t370.cxx, risk3
* 1297, nested ClassDef,
* 1298, ImplFileLine support
*
* 5.14.37 29 Apr 2000
* 1299, overload matching for pointer to function, t373.cxx
* 1300, Check $LINES, $COLUMNS for G__more_pause(), risk1
* 1301, Bug fix for PHIL0, null fp, t372.h, risk3
* -   , DataMbr.h/cxx, errno -> errnum fix
* 1302, 1290 bug fix, infinit loop, t376.cxx
* 1303, bug fix from Philippe Canal,
* 1304, workaround for Philippe's problem, bad3.cxx, t377.cxx
* 1305, Win32, ifstream::open(), t375.cxx, bug fix
//
// 05/05/2000  09.42.44  by  Rene Brun
//
- Implement support for operator "*" in TCut. File Tree_LinkDef modified.
  Examples of use:
     Root > TCut c1 = "x<1"
     Root > TCut c2 = "y<0"
     Root > TCut c3 = c1&&c2
     Root > ntuple.Draw("x", c1)
     Root > ntuple.Draw("x", c1||"x>0")
     Root > ntuple.Draw("x", c1&&c2)
     Root > ntuple.Draw("x", "(x+y)"*(c1&&c2))

//________________________________________________________________________
//
//::>          VERSION  2.24/03   04/05/2000 08.40.02
//
//
// 04/05/2000  8.48.59  by  Rene Brun
//
- minor typos fixed.

- Rename global functions H() to R__H().
//
// 03/05/2000  08.13.47  by  Rene Brun
//
- Import latest version from Fons and implement a few changes from Philippe
in BASE_System and CINT_loadfile.

//
// 03/05/2000  01.35.47  by  Philippe Canal
//

- Addition of a new option for TSystem::CompileMacro and Change in
  Semantic of the '+' and '++' options for .L, .x and .X.

  Both .L MyFunc.C++ and .L MyFunc.C+ now keep the shared library at the
  end of the ROOT session.
  If the shared library already exist, .L MyFunc.C+ will only recompile it
  if the macro file is newer than the shared library.  However it does not
  detect whether any of the files included by the macro has been changed
  more recently than the shared library.

  .L MyFunc.C++ always recompiles the shared library.

  TSystem::CompileMacro(const char *filename, Option_t * opt)
  The second argument can now be any combination of the letter 'k' and 'f'
  with the following meaning:

     k : keep the shared library after the session end.
     f : force recompilation.
//
// 02/05/2000  19.15.59  by  Rene Brun
//
- Merge with latest versions from Philippe and valery.
//
// 02/05/2000  19.01.23  by  Philippe Canal
//
- The macro ClassDef and ClassImp have been upgraded to be able to handle
  classes inside namespaces and to handle nested classes (classes defined
  inside other classes).

  In order to use this upgrade, you just have to enclose your class inside
  a namespace and to make sure that the ClassImp macro is also used inside
  the same namespace:

  #include "TObject.h"
  namespace MyProject {
     class MyClass : public TObject {
     public:
        MyClass();
        int Loop();
        ClassDef( MyClass, 1 ) // This is a class inside a namespace
     };
  };

  And in the implementation file

  #include "MyClass.h"

  namespace MyProject {
    ClassImp( MyClass )

    MyClass::MyClass() {
      // Body of the constructor
    }

    int MyClass::Loop() {
      // Body of the Loop
    }
  };

  Once this is done, when refering in root to this class using a string
  (for example to define a TClonesArrays, a Branch in a Tree, or on the
  root prompt), you have to always use the fully qualified name.  There
  isn't yet an equivalent to 'using namespace MyProject;' for ROOT.
  For example to define a TClonesArray of MyClass objects:

        TClonesArray * o = new TClonesArray("MyProject::MyClass");

  IMPORTANT WARNING:

  This change is only transparent for classes for which a dictionary is
  produced!  If you need to use a class with ClassDef and ClassImp but do
  NOT want to generate a dictionary file for it, you HAVE TO use the macro
  ClassImp2 instead of ClassImp! In our example above you would write in
  the implementation file:

  #include "MyClass.h"
  namespace MyProject {
    ClassImp2(MyProject, MyClass )

    MyClass::MyClass() {
      // Body of the constructor
    }

    int MyClass::Loop() {
      // Body of the Loop
    }
  };

  If your classes do not belong to a namespace just omit the first
  argument:

  #include "MyClass_not_in_namespace.h"
  ClassImp2(,MyClass_not_in_namespace)
  MyClass_not_in_namespace::MyClass_not_in_namespace() {
    // Body of the constructor
  }

  int MyClass_not_in_namespace::Loop() {
    // Body of the Loop
  }
  IMPORTANT WARNING 2:

  ClassDef and ClassImp for namespaces and nested classes is
  NOT yet fully implemented for templated classes.
//
// 02/05/2000  08.40.13  by  Rene Brun
//
- Add a new static function to class TH1.
      static void AddDirectory(Bool_t add=kTRUE)
  By default (fAddDirectory = kTRUE), histograms are automatically added
  to the list of objects in memory.
  Note that an histogram can be removed from its support directory
  by calling h->SetDirectory(0) or h->SetDirectory(dir) to add it
  to the list of objects in the directory dir.

//
// 01/05/2000  22.08.01  by  Rene Brun
//
- Activate option DATE in TStyle:
  New data members, fDateX, fDateY and fAttDate.
  New member functions SetDateX, SetDateY, GetAttDate.
    void TStyle::SetOptDate(Int_t mode)
     if mode is non null, the current date/time will be printed in the canvas.
     The position of the date string can be controlled by:
        mode = 1 (default) date is printed in the bottom/left corner.
        mode = 2 date is printed in the bottom/right corner.
        mode = 3 date is printed in the top/right corner.
      The date position can also be controlled by:
        gStyle->SetDateX(x);  x in NDC
        gStyle->SetDateY(y);  y in NDC

      The date text attributes can be changed with:
        gStyle->GetAttDate()->SetTextFont(font=62);
        gStyle->GetAttDate()->SetTextSize(size=0.025);
        gStyle->GetAttDate()->SetTextAngle(angle=0);
        gStyle->GetAttDate()->SetTextAlign(align=11);
        gStyle->GetAttDate()->SetTextColor(color=1);

      The current date attributes can be obtained via:
        gStyle->GetAttDate()->GetTextxxxx();
      When the date option is active, a text object is created when the pad
      paint its list of primitives. The text object is named "DATE".
      The DATE attributes can also be edited interactively (position
       and attributes) via the normal context menu.

//
// 30/04/2000  10.16.21  by  Rene Brun
//
- Change name of variable errno to errn in DataMbr.h and in
  G__DataMemberInfo::ValidArrayIndex. errno is a reserved keyword.
  Problem was apparent with VC++ and AIX/xlC.

- Comment most ClassDef & ClassImp in WIN32 directory. A side-effect
  of the changes in the ClassDef/ClassImp macros forces the dictionary
  for all classes including these macros.
//
// 29/04/2000  12.37.58  by  Rene Brun
//
- Add new member functions in TGeometry and TNode to transform master
  to local coordinate system(thanks to Robert Hatcher).
  TGeometry/TNode provided Local2Master coordinate transformations, but not
  the reverse.  In case of some data of object positions in global coordinates
  but trying to build a truly hierarchical structure (thus the need for
  "placement" relative to local coordinates) this was an impediment.
     void TGeometry::Master2Local(Double_t *master, Double_t *local);
     void TGeometry::Master2Local(Float_t *master, Float_t *local);
     void TNode::Master2Local(Double_t *master, Double_t *local);
     void TNode::Master2Local(Float_t *master, Float_t *local);

- Add fix from Masa in CINT_ifunc.c to appear in CINT 5.14.37.
  This fix a problem with function overloading. the same code can now
  be used with the compiler or the interpreter when calling TF1 functions.

- Modify test program stress to take advantage of the changes in CINT_ifunc.

- Modify h2root to support boolean data types from Hbook. Instead of using
  unsigned integers, the new code uses unsigned chars.

- Modify print format in TTree::Show in case of a TLeafB. print up
  to 10 variables on the same line.

//
// 28/04/2000  18.17.48  by  Rene Brun
//
- Remove a limitation in THistPainter::PaintAxis preventing to set
  a negative number of divisions on the Y axis. A negative number of divisions
  may be specified to force a precise number of primary divisions on an axis.

- Implement support for regular expressions in TDirectory::Delete.
  One can now do gDirectory->Delete("foo*")

- Modify TROOT::ls to call TDirectory::ls

- in TCutG constructor, remove a possible TCutG with the same name
  in the list of special objects. stress7 can now be executed more than once.

- Add compiler option -Wp,-H10000 to the list of CINT compiler options
  for HP-UC CC compiler to prevent a limitation of CC when compiling CINT_var.

- Change tolerance in stress/stress16 from 10 bytes to 20 bytes.
//
// 28/04/2000  16.58.41  by  Fons Rademakers
//
- TGTextEntry: fix in SetFont() to correctly modify the graphics
  contexts. Before SetFont() changed the default GC used by many
  widgets.

- guitest.cxx: show example for TGTextEntry::SetFont.

- TROOT: use preprocessor symbols __DATE__ and __TIME__ to get
  the date/time of compilation instead of CMZ symbols in preparation
  of move to CVS.
//
// 27/04/2000  15.54.53  by  Rene Brun
//
- Modify test program stress/stress1 to be able to run it with CINT.

- Modify code generated by TTreePlayer::MakeClass to generate special code
  for TChains. Also generate new member function Cut.

- Changes in TH2, TH3, TProfile2D include files to avoid warning messages
  under AIX and HP-UX.

- Modify CINT function IFUNC to avoid a compiler problkem under AIX.
  the C function IFUNC contained a C++ style comment.

- Merge with Fons and Philippe's versions.
//
// 26/04/2000  12.15.54  by  Fons Rademakers
//
- TObjArray: IsEmpty() correctly returns kTRUE in case TObjArray
  is empty (idem for TClonesArray).

- rootcint: mods by Philippe for support of namespaces.

- Rtypes.h: mods in the ClassDef and ClassImp macros for namespace
  support.
//
// 25/04/2000  17.56.34  by  Rene Brun
//
- Merge with Philippe Canal's version.

- Implement support for branches with names ending with "."
  in TTree::MakeClass.
//
// 25/04/2000  15.13.17  by  Philippe Canal
//

  Phillippe implemented a way for the user to fill a tree directly from a
  TBuffer or TMessage;
  This only work for branches that contain a non-split object.
  Using this features makes the files non-readable by previous version of
  root (2.24/02 and below).

  To use this features, you need to have something like:

        TBuffer * pointerToMyBuffer;
        .....
        myBranch->SetBufferAddress( pointerToMyBuffer );

  And when myTree->Fill() is called, the data is copied from MyBuffer.
  The amount of data copied is determined either by the current offset of
  the buffer if it is not null or by the maximum size of the buffer.

  Here are three valid usages examples

  1.      TBuffer * buf = new TBuffer(TBuffer::kWrite, bufsize);
          branch->SetBufferAddress(buf);

        buf->Reset();
        buf->SetWriteMode();
        event->Streamer(*buf);
        buf->SetReadMode();

        tree->Fill();

  2.      TBuffer * buf = new TBuffer(TBuffer::kWrite, bufsize);
          branch->SetBufferAddress(buf);

        char * data;
        int nbyte = Copy_Data_From_Somewhere(data);
        buf->SetBuffer(data,nbytes);

        tree->Fill();

  3.    TMessage *mess;
        Int_t messlen;

        do {
           messlen = s->Recv(mess);
        } while ( messlen == 0 );

        branch->SetBufferAddress(mess);

        tree->Fill()

  The extra information needed to correctly read the file created using this
  features is stored at the end of each basket (using this features) just
  after the array containing the entries offset within the basket.

//
// 23/04/2000  22.30.47  by  Rene Brun
//
- Fix a problem in TBranchObject::SetAddress in case of a branchobject
  in split mode and the branch name is of the forme "name." and one of
  the sub branches members is a TClonesArray. The TClonesArray branch name
  was not correctly encoded. Solution was to use the same logic already
  used for other data member types.
  (thanks Christian Holm Christensen for reporting this problem)

- Sasha Vanyashin has reduced further the byte swapping overhead on linux
  by introducing asm routines bswapcpy32 and bswapcpy16 (similar to memcpy)
  in TBuffer.
//
// 21/04/2000  21.54.54  by  Rene Brun
//
- Fix a bug in TH2::FillRandom and TH3FillRandom. These functions were
  correct only in the case where the x range and the y range were identical.
  (thanks Laurent APHECETCHE).

- Implement support for histogram min/max in TLego::SurfaceFunction.
  With this change, one can now do TH1::Draw("surf") on a histogram
  where a min/max have been specified.

//
// 19/04/2000  18.32.19  by  Fons Rademakers
//
- TPad: fix in Print() so a pad can be saved to gif, before
  the complete canvas was always saved.

//
// 19/04/2000  11.24.25  by  Rene Brun
//
- In TBranchClones::GetEntry, add a statement to clear the TClonesArray
  before reading a new event. In case of split mode, the number of entries
  in the array was not updated (thanks Thorsten Glebe for reporting).

- Merge with Valery's version.
   This includes a protection in the THtml class and a new version
   of the STAR classes.
//
// 18/04/2000  17.45.49  by  Fons Rademakers
//
- Changes in several files related to the imminent move to CVS.
//
// 18/04/2000  10.36.20  by  Rene Brun
//
- Activate option to write a TClonesArray in non-split mode
  in TTree::Branch (TClonesArray flavour).

- Add a new tutorials tcl.C. This tutorial illustrate how to use a
  TClonesArray in various mode: split, no-split.
  The tutorials also shows how to run with the interpreter or
  the script compiler.
//
// 16/04/2000  23.08.00  by  Rene Brun
//
- Optimize code in TBasket, TBranch and TBuffer. Several functions declared
  non virtual.

- In  TRootBrowser::IconBoxAction Chdir has to been called after
  obj->Browse because Browse assume that the current directory is the
  one where to find the object while Chdir actually change the directory.
  (from Philippe Canal).

- New class TProfile2D (2-dim profile histograms).
  Same functionality as class TProfile for 1-dim histograms.

- Optimize TArrayC,S,I,F,L,D replacing implicit loop to set array
  elements to 0 by a call to memset.
//
// 15/04/2000  19.07.24  by  Rene Brun
//
- IMPORTANT ADDITION TO THE HISTOGRAMING PACKAGE
  ==============================================
  Two new global functions have been added to TH1.h
      TH1 *R__H(Int_t hid);
      TH1 *R__H(const char *hname);
   The first function R__H returns a pointer to a histogram with a name
   corresponding to the encoding of "h" and the integer hid.
   For example, if the histogram with name "h23" exists in the current
   directory (either memory or disk), R__H(23) returns a pointer to
   this histogram. if hid is a negative integer (eg -23), R__H(-23) returns
   a pointer to the histogram with name "h_23".
   The second function H returns a pointer to the histogram with name hname.
   eg: R__H("h23").
   The main advantage of these two functions is that they can be called
   anywhere in the user's code without using global pointers for each
   histogram.
   These two functions provide also an easier access to histograms converted
   from Hbook files.
   These functions have however a severe performance penalty.
   Using R__H(10)->Fill(x) is on average 6 times slower than h->Fill(x) !
   R__H(const char *hname) finds the address of the histogram hname in
   the hashlist of objects in memory corresponding to the current file.
   If no object is found in memory, hname is searched in the list of objects
   in the current directory on disk.
   R__H(Int_t hid) converts hid into hname and then proceeds like R__H(const char *hname).

//
// 15/04/2000  11.58.37  by  Philippe Canal
//
- Some files similar to those produced by h2root, can have simple
  type AND branches that contain more than one leaf and have no reason to
  contain a leaf with the same name.   Those files currently core dumps the
  TChain::Merge mechanism because the fill address of the new tree is not reset
  properly after a change of file.
//
// 14/04/2000  12.24.20  by  Rene Brun
//
- Rename functions in TPaveStats;
    GetFormatFit  -----> GetFitFormat
    GetFormatStat -----> GetStatFormat
    SetFormatFit  -----> SetFitFormat
    SetFormatStat -----> SetStatFormat
    The TPaveStats fFitFormat and fStatFormat are now initialized
    from the TStyle permanent parameters.

- New functions in TStyle:
       GetFitFormat, GetStatFormat, SetFitFormat, SetStatFormat

- Introduce a new function in TProfile:
    TH1D *TProfile::ProjectionX(const char* name="_px", const char *option="e")

    Similarly to TH2::ProjectionX, this new function fills the profile projection
    along X. It creates a TH1D histogram. if the option "e" is specified
    the histogram has the profile error bars.

- Add new static functions in TVirtualFitter:
    TVirtualFitter::SetMaxIterations(Int_t maxiter=5000);
    TVirtualFitter::SetPrecision(Double_t prec=1e-6);
    TVirtualFitter::GetMaxIterations();
    TVirtualFitter::GetPrecision();
    The SetPrecision function can be used to set a fit relative_precision.
    The default value for relative_precision is 1e-6.

- TH1::Fit and TGraph::Fit have been modified to take advantage of
  the new TVirtualFitter functions. Because TMinuit precision is an absolute
  precision, an estimation of the final sum of squares of residuals (sumw2)
  is computed in these two functions. The precision requested from TMinuit
  is sumw2*relative_precision. The new algorithm should give in general
  a better fit precision.

- Minor change in TBtInnerNode constructor to bypass a compiler bug
  with gcc2.95 (thanks Matthew D. Langston).
//
// 14/04/2000  11.48.54  by  Fons Rademakers
//
TExMap: implemented Streamer().
//
// 13/04/2000  19.19.49  by  Rene Brun
//
- Modify AA_ARCHS to add one line for solarisgcc.

- Modify TH1::Copy to set the TAxis parents.

- Add missing file basic.dat in $ROOTSYS/tutorials.

- Modify tutorial exec1.C. logic was broken since the changes in gPad.

- In RConfig.h, define __i486__ only if not already defined. This is to avoid
  a long list of warnings on Debian systems.

- Modify the comments in class TButton example. add missing backslash
  in front of ".

- Improvement in TTreePlayer::Scan (thanks Jiri Masik).
  When one scans a tree and interrupts it via q key and <CR>,
  the q is read by getchar but the <CR> remains unread in the stream.
  Any subsequent Scan scrolls two screens without prompting as the new
  getchar is reading the last <CR>.

//________________________________________________________________________
//
//::>          VERSION  2.24/02   07/04/2000 08.52.32
//
//
// 07/04/2000  08.45.56  by  Rene Brun
//
- Merge with Fons and Valery's latest versions.
//
// 06/04/2000  16.06.22  by  Fons Rademakers
//
- TDatime: new ctor taking a SQL compatible time string.

- TEnv: made most member functions virtual to allow overriding.
  Also a fix in GetValue() to correctly return negative integers.

- TStopWatch: made the new Counter() an const inline function.

- TRootEmbeddedCanvas: extension to allow the embedding of a custom,
  TCanvas derived, canvas. See ctor for extensive example.

- rootcint: small cleanup of Philippe's code.

- TRint: added a noLogo arg to ctor. Setting it to kTRUE will not
  print the standard logo. This allows for custom a logo in a TRint
  derived class.

- TGLBContainer: InsertEntry() now correctly inserts a new entry at the
  head of the list if the parameter afterID is set to -1. Fix by
  Reiner Rohlfs.

- TUnixSystem: in dtor reset signals to handlers that were active
  before the TUnixSystem object was created. This was needed in an
  app that also uses Oracle OCI. Fix provided by Fedor Ratnikov.

- TClonesArray: made several method virtual and made the data members
  protected. Denis Bertini (Hades/GSI).

- TObjArray: made the datamembers protected. Denis Bertini (Hades/GSI).

- importcint: updated CINT import macro for new STL includes.
//
// 06/04/2000  13.23.49  by  Valery Fine(fine@bnl.gov)
//
 - WinNTSystem::DirName - bug fixed (Thanks V.Onuchin)

 - ZIP inflate function Writedata: logic has been modified
//
// 05/04/2000  08.36.47  by  Rene Brun
//
- Fix a problem in TH2::ProfileY (thanks Gerco Onderwater).
  When creating a profile along the y-axis from a 2D histo, the number of bins
  in the profile are incorrect (as a matter of fact, the number of bins on the
  x-axis of the original 2d histo is used).

- Remove a memory leak in TCint::UpdateListOfTypes.
  The leak was apparent when running the THtml class.

- Implement new function "fmod" in TFormula and TTreeFormula.
  one can do: t.Draw("x","fmod(y,0.5)>0.2")

- Protection added in TLeafObject::GetMethodCall (thanks Philippe Canal).
  a TMethodCall was created by passing a null pointer as argument.  However
  the code from this constructor (and/or functions called from within) assumes
  an argument list.

//
// 04/04/2000  15.07.50  by  Rene Brun
//
- A small change in TPostScript::Initialize (Thanks Olivier Couet).
  When including ps or eps files in PowerPoint, some horizonthal lines
  were appearing in the picture. This problem is due to a bug in PowerPoint
  that does always closes all the open paths. To circumvent this problem,
  an additional "newpath" statement is now generated when opening
  a new picture.
//
// 03/04/2000  12.44.10  by  Rene Brun
//
- Add new tutorial gaxis.C

- Fix a problem in THistPainter::PaintInit in case of log scale along X.
  Must check that the selected last bin is not greater than the number of bins.
  Problem was apparent in case of variable bin size histograms.

- Merge with Valery's version. This version fixes a problem in TPGON::FillTableOfCoSin
  Protections in TWinNtSystem and TTabCom.

//________________________________________________________________________
//
//::>          VERSION  2.24/01   31/03/2000 12.19.07
//
//
// 31/03/2000  12.11.55  by  Rene Brun
//
- The following functions from the ZIP package have been renamed to avoid
  clashes between ROOT and external packages using modified versions of
  the original ZIP package. The old names are now prefixed with R__.
  (thanks to Ursula Berthon to help understanding the problem).
  This is the new list of the ZIP functions:
     R__ReadByte
     R__WriteData
     R__build_bl_tree
     R__build_tree
     R__compress_block
     R__fill_window
     R__flush_outbuf
     R__gen_bitlen
     R__gen_codes
     R__init_block
     R__longest_match
     R__pqdownheap
     R__scan_tree
     R__send_all_trees
     R__send_tree
     R__set_file_type

- Implement TEventList::SetName. TEventList is a TNamed.
  TNamed::SetName must be overloaded in TEventList because TEventList objects
  like TH1s and TTrees are inserted into a THashList. Changing the name
  of one of these objects implies recomputing the hashlist.

- Merge with Valery's version.
  Valery has introduced a new function TStopwatch::Counter counting
  the number of start/stops.
  Cleanup of STAR code to follow the ROOT coding style.
//
// 28/03/2000  12.39.19  by  Rene Brun
//
- Improve functions TPolyMarker3D::PaintH3 and TMarker3DBox::PaintH3
   to take into account the current axis ranges (set via TAxis::SetRange).

- minor change in tutorial graph.C. Add the statement c1->Modified() at
   the end of the macro.

- Slight modification (Philippe Canal) in the destructor for TClass to avoid
  accessing deleted memory.
  Sometime ago the TList destructor was changed from strictly not deleting
  the object it is holding to checking via GetObject()->TestBit(kCanDelete)
  if it should delete the object or not.  The consequence is that while
  deleting fAllPubMethod and fAllPubData, eventhough it was not deleting the
  object a second time, it was still accessing them.  Thus the deletion of
  these two list have to be done before the deletion of the objects in it.

- Modify TGraph::GetXaxis and GetYaxis to use TGraph::GetHistogram
  rather than fHistogram.

- Modify the globals kumac for KCC on SGI, removing --no-exceptions.
  same change in the makefile and root-config.

- Add new macro hadd.C in the list of tutorials. This macro can be used
  to merge histogram files.
//
// 23/03/2000  09.59.30  by  Rene Brun
//
- Minor change in root-config for HP-UX CC compiler. +Z option added
  in the list of compiler options.

- The following set of Bessel functions has been added in class TMath.
   origin from Nick van Eijndhoven and based on Numerical Recipes.

   Double_t BesselI(Int_t n,Double_t x);   // Compute integer order modified Bessel function I_n(x)
   Double_t BesselK(Int_t n,Double_t x);   // Compute integer order modified Bessel function K_n(x)
   Double_t BesselI0(Double_t x);          // Compute modified Bessel function I_0(x)
   Double_t BesselK0(Double_t x);          // Compute modified Bessel function K_0(x)
   Double_t BesselI1(Double_t x);          // Compute modified Bessel function I_1(x)
   Double_t BesselK1(Double_t x);          // Compute modified Bessel function K_1(x)

- Bug corrected in TH3::Project3D. When looping on the bins, the current
  value for the bin error was obtained after filling the bin. It should be
  obtained before filling the bin. (Thanks Angela Biselli for reporting).

//
// 21/03/2000  11.07.07  by  Rene Brun
//
- Modify TFile::Init to read the file title. The file title was written
  to the file but never read in when the file was reconnected.
//
// 20/03/2000  10.26.46  by  Rene Brun
//
- Fix code generation in TTreePlayer::MakeClass and MakeCode in case
   of variable length two dim arrays (Thanks Philippe Canal).

- Protection in TF1::GetRandom (when the parabola becomes flat).
  Thanks Federico Carminati.

- Add library -lnsl in installation of h2root, g2root for Linux.
  This is required on RH6.1 with the new version of CERNLIB.

- Add possibility to close a TCutG with a double click in TPad::createNewPolyLine

- Merge with valery's version including changes for TPadView3D (moved to BASE)

//
// 16/03/2000  08.11.07  by  Rene Brun
//
- In TMinuit destructor remove the TMinuit object from gROOT->GetListofSpecials().
   Also reset gMinuit=0 if gMinuit=this.

//
// 15/03/2000  16.55.10  by  Fons Rademakers
//
- TString: can now specify which character to strip in Strip().

- mmalloc, mfree, mmprivate: changed "struct list" to "struct mmlist"
  to avoid possible clash with STl list class (fix by pcanal).
//
// 11/03/2000  16.04.06  by  Rene Brun
//
- Changes in include Bytes.h to support an optimized byte swapping code
  on Linux machines (thanks to Sasha Vanyashin ).
  The Bytes.h uses asm macros from the #include <byteswap.h>
  This is a part of the GNU C library: /usr/include/byteswap.h and
  /usr/include/bits/byteswap.h. To get the most of the macros one has to use
  the compiler switches higher then i386 (e.g., -march=pentiumpro -mpentiumpro),
  since the default gcc copmpiler settings are just the i386.
  Because the byteswap.h is missing on many Linux systems, a copy of
  this include is provided in Byteswap.h

- Fix a problem in TMethodCall::ReturnType to take into account
  the Root data types Float_t, Int_t, etc in addition to the basic types.
   (thanks Gene Van Buren)

- New functionality added to class TLatex (Marthe Brun)
  #left(,  #right) to draw parenthesis with a size corresponding
  to the block between parenthesis.
  Support for Upper and Lower indices in front of a letter (useful for
  chemical elements). try for example {}_{3}^{7}Li.
  Use this new functions in tutorial latex.C.
  Better vertical aligment of Greek characters
//
// 10/03/2000  10.47.26  by  Philippe canal
//
- New version of rootcint. This new version is now able to automatically
  generate the Streamer functions for classes containing pointers to basic types
  in the following case.
  Int_t   fN;         //Number of array elements
  Int_t   *fType;     //[fN] array of fN integers
  Float_t *fX;        //[3*fN] array of 3*fN floats

- Extensions to TSystem such that the following will nicely work:
  root> .L stress.cxx
  root> stress(); // will interpret
  root> .L stress.cxx
  root> stress(); // will interpret a new version
  root> .L stress.cxx++
  root> stress(); // will execute compiled code
  root> .L stress.cxx++  // does not re-compiled if stress.cxx is NOT newer.
  root> stress(); // will execute new compiled code

//
// 08/03/2000  14.57.15  by  Rene Brun
//
- In TVirtualFitter destructor, reset fgFitter and fgMaxpar to 0.
  This is necessary in case a previous fitter was created with a number
  of parameters maxpar, then deleted and a new fitter created with
  less parameters. (case shown by Nicolas Produit)
//
// 07/03/2000  16.50.31  by  Rene Brun
//
- Modify CINT/libstrm deck header to add -KCC.
  Modify importcint to add -kCC when importing libstrm.

- Add comments in TNamed::SetName, TNamed::SetObject to mention that
   if an object is a member of a THashList, the THashList must be
   rehashed after the SetName.
   Comment also added to the THashList constructors.
//
// 06/03/2000  08.43.09  by  Rene Brun
//
- Update a wrong comment in tutorial Ifit (mnhelp("*") instead of mnhelp("*",0).
 (thanks Ben Kilminster).

- Modify test programs Tetris and hworld to replace references to gPad
  by TVirtualPad::Pad().

- Merge with Valery's new version. This new version includes several changes
   in the STAR classes + support for double-click on WindowsNT.
//
// 05/03/2000  16.11.09  by  Rene Brun
- Declare the TTree::Branch functions to be virtual (Fred Gray request).
//
//
// 04/03/2000  16.34.54  by  Rene Brun
//
- Fix a clipping problem in TGraph::PaintGraph in case of option Bar.
  Add SetBit(kClipFrame) in default TGraph constructor.
 (thanks Anton Fokin).
//
// 03/03/2000  19.02.17  by  Fons Rademakers
//
- TDatime: allow 100 - 199 as years (100 is returned by Linux's gmtime
  for the year 2000).

- TMatrix, TVector: print errors when two matrices or vectors are not
  compatible instead of silently doing nothing.

- TGSlider: fixed two case of && which should be & in DoDraw() for TGVSlider
  and TGHSlider. Found by Yun-Ha Shin.
//
// 02/03/2000  10.10.41  by  Rene Brun
//
- In TChain::SetBranchAddress and TChain::SetBranchStatus,
   set fTreeNumber = -1 to force TChain::LoadEntry to be executed
   at the next call to TChain::GetEntry. This statement is necessary
   in case a user calls one of these two functions after a first pass
   to the files in the chain. (thanks Goetz Gaycken)

- Add new function int() to TFormula::Analyze, TFormula::Eval
  and to TTreeFormula::Eval
//
// 01/03/2000  17.27.39  by  Rene Brun
//
- Important change in histogram classes
  =====================================
   - All histogram classes are derived from the base class TH1

                             TH1
                              ^
                              |
                              |
                              |
      -----------------------------------------------------
             |                |       |      |      |     |
             |                |      TH1C   TH1S   TH1F  TH1D
             |                |                           |
             |                |                           |
             |               TH2                        TProfile
             |                |
             |                |
             |                ------------------------------
             |                        |      |      |      |
             |                       TH2C   TH2S   TH2F   TH2D
             |
            TH3
             |
             |
             ------------------------------
                     |      |      |      |
                    TH3C   TH3S   TH3F   TH3D

   The TH*C classes also inherit from the array class TArrayC.
   The TH*S classes also inherit from the array class TArrayS.
   The TH*F classes also inherit from the array class TArrayF.
   The TH*D classes also inherit from the array class TArrayD.

   This change is backward compatible. Previous style histograms
   can be read by the new version.
//
// 29/02/2000  20.23.34  by  Fons Rademakers
//
- TVirtualPad: R__Pad() now static member TVirtualPad::Pad().
//
// 29/02/2000  08.35.28  by  Rene Brun
//
- Implement copy constructor of TParticle
//
// 28/02/2000  09.39.18  by  Rene Brun
//
- Add new classes TSpline, TSpline3 and TSpline5 (from Federico Carminati)
  Add new tutorial spline.C

- Implement a new TF1 constructor
   TF1::TF1(const char *name, Float_t xmin, Float_t xmax, Int_t npar)
   where name is the name of a preloaded CINT function

- New code in TBranchClones::Streamer to automatically create
  the TClonesArray if the support pointer contains a null address
   (thanks to Marian Ivanov).

- Merge with Valery's version:
     additions in TROOT::GetClass to take into account typedefed classes.
     new versions of STAR classes
//
// 23/02/2000  19.09.59  by  Rene Brun
//
- Rename C function mem_read to R__mem_read in the ZIP Bits.c file.
  This name clashes with a similar name in one library used by ISDC.
  Thanks Nicolas Produit for investigating.

- Many thanks to Marco van Leeuwen for reporting a problem with TGraph::Fit
  when fitting with a polynomial. The problem has been fixed in TGraph::LeastSquareFit.
  The last data point was ignored by this function computing the initial
  value of parameters.
//
//
// 22/02/2000  08.22.57  by  Rene Brun
//
- Protection added in TCanvas::RunAutoExec. The global gPad may be null
   in some cases (eg, when a TDialogCanvas object is deleted by a button
   inside the canvas itself).

-In TTreePlayer::DrawSelect, disable the bit kCanRebin for histograms
 (1-d, 2-d and 3-d) when the option "same" is specified.

- In TH1::GetStats, forgot to preset to 0 the last element of the array stats.
  This was given a problem on Alpha/Unix machines.

- Regenerate the G__Meta dictionary to remove new code generated by the
  new version of CINT. Correction reported to Masa.

- Several changes received from Valery Fine in the new STAR package and also in
  the Win32 GUI.

//
// 18/02/2000  17.47.15  by  Rene Brun
//
- A change in the functions TF1::Integral, also, TF2 and TF3.
  All parameters promoted from Float_t to Double_t.
   (thanks Rutger van der Eijk  )

- Thanks to Romain.Holzmann@gsi.de for fixing a problem in TTreeFormula.
  "I have noticed a problem when using a graphical cut TCutG in a TTree::Draw()
   selection in case the selection applies to a pair of variables (x:y) of which
   one at least is stored in a TClonesArray:
   Indeed, in the TTreePlayer::EntryLoop(...) method the flag SelectMultiple is
   not set properly in this case, so that only the first entry of the TClonesArray
   is tested and the result of fSelect->EvalInstance(0) is used for ALL entries
   of the array, i.e. either all x:y pairs are accepted or all are rejected!
   The problem seems to come from the TTreeFormula constructor which does not
   set TTreeFormula::fMultiplicity (?) for the case of a graphical cut."
//
// 17/02/2000  19.28.15  by  Masaharu Goto
//
- New CINT 5.14.31 7 Feb 2000 (previous version in ROOT was 5.14.25)
  5.14.26 8 Dec 1999
  1242, #pragma link C++ namespace, risk1, t298.h

  5.14.27 19 Dec 1999
  1243, #pragma link C++ defined_in tagname; risk1, t299.h
  1244, default template arg, get typenum at the first instantiation, risk2
  1245, prompt  newline escape, risk2, t301.cxx
  1246, p = new scope::ctor(); bug fix, risk2
  1247, gROOT->Macro("f.c") in loop, 1168 side effect, risk3
  1248, fix to 1219, 1225, pointer to function argument, risk2
  1249, f(void (*p)()=0); bug fix, risk 2, t307.h
  1250, 'explicit' support, risk4, t308.cxx,
  1251, compiled default ctor in bytecode loop, bug fix. risk2, t310.h/cxx
  -   , G__NOMATHLIB switch, risk1
  1252, 1.0 + obj; buf fix, risk1, t309.cxx
  1253, tempbuf display,
  1254, A& a=A(x); temp object lifetime bug fix, risk4, t312.cxx
  1255, UInt_t -1 display bug fix, risk2
 -1256, n=0;for(i=0;i<n;i++); bytecode, risk5, t313.cxx
    BUG FOUND, intprt_cint infinit loop, CINT simple.cxx
  1257, pragma link C++ class A*-; supported risk3, t315.h

  5.14.28 5 Jan 2000
 /1258, const and non-const member function override, risk3, t316.h
 /1259, constness flag for G__value
 /1260, func overload matching with object constness
   Note: constness checking is implemented by 1258-1260. There are several
        problems and this feature is not activated unless G__CONSTNESSFLAG
        is explicitly defined in platform/dependency file.
          - DLL/sharedlib binary incompatibility
          - STL container's const_iterator begin/end can not be compiled
  1261, #pragma include_noerr "f1" #on_error "f2"
  1262, A*** x; bug fix, risk3, t317.h

  5.14.29 17 Jan 2000
 -1263, 1240 fix, implicit conv + derived to base conv, t321.cxx, not done
  1264, more than 10 class object member , risk2, c:/src/err/MyDlg.cpp
  1265, operator-> support t323.cxx
  1266, void (*p2f)(int&); bug fix t326.cxx, t325.cxx
  1267, G__ClassInfo::New(int n); added, risk2
  1268, compiled exception catching, t332.h/.cxx, risk4

  5.14.30 30 Jan 2000
  1269, static member function flag missing, t333.h , risk2
  1270, exception in bytecode, t332.h/.cxx, risk5
  1271, auto loading of std header in DLL, t332.h/.cxx, risk4
  1272, #pragma link postprocess file action; t335.h/.cxx t335post.cxx, risk3

  5.14.31 7 Feb 2000
  1273, function only macro smart unloading, risk4, t336.cxx
           G__set_smartload() added
  1274, A f() { return B(); }, risi3, t338.cxx
  -   , auto_ptr added in stl/_memory, t340.cxx
  1275, template<class T> class A{template<class Y> A(Y& x){}};, risk2,t340.h
  -   , auto_ptr support, t343.cxx t342.cxx, t345.cxx
    1240 -> G__WORKAROUND000209_1
//
// 17/02/2000  18.40.43  by  Fons Rademakers
//
- Secure rootd deamon
  ===================
  Rootd now supports secure authentication by using the SRP package
  from Stanford (http://srp.stanford.edu/srp/). SRP, Secure Remote
  Passwords, uses a so called "asymmetric key exchange protocol"
  in which no passwords are ever send over the wire. To quickly
  read about the main features of SRP look at:
  http://jafar.stanford.edu/srp/advantages.html
  To build rootd with libsrp.a you've to do the following:
    - get the SRP source (ftp://srp.stanford.edu/pub/srp/srp-1.5.0.tar.gz)
    - get the gmp source (ftp://srp.stanford.edu/pub/srp/gmp-2.0.2.tar.gz)
      This is not needed when you are on a recent Linux machine where
      libgmp.so exists in /usr/lib.
    - Build the gmp and SRP libs (./configure;make;[make install])
    - Check the rootd Makefile and set the SRP variable to where you
      installed the SRP source.
    - Build rootd
    - Get the package ftp://root.cern.ch/root/srputils.tar.gz
    - Untar, check that the variable SRP is set correctly in the Makefile
      and make and make install. This produces the utilities rtconf,
      rpasswd and the library libSRPAuth.so.
    - To setup the SRP passwd file on the remote node do:
        - rtconf
          A key of 512 bit is good enough (creates the file
          $HOME/.srootdpass.conf)
        - rpasswd
          Give a passwd for rootd (creates the file $HOME/.srootdpass)
    - On the local site you need to get only libSRPAuth.so and put it
      in $ROOTSYS/lib.
    - Now when creating a TNetFile object via TFile::Open("root://....")
      libSRPAuth.so will be loaded if it exits and the secure login
      protocol will be used. Note that other rootd trafic is not encrypted.

- TRint, rootx: changed option -p (to popdown the slpash screen) to -splash
  to prevent any accidental usage.

- TCut: fixed behaviour of operator!().

- TROOT: added check in GetClass() for fClasses==0.

- Threads: updates in the thread package, but this is still work in progres.
//
// 17/02/2000  15.35.35  by  Rene Brun
//
- Add new install Makesolarisgcc (thanks Michal Lijowski).

- Minor changes in TGX11 (change Text_t to char) to make new Sun CC5 happy.
  Similar minor change in TView : Replace TMath::Atan(1) by its value.

- Modify TAttext to show function SetTextAngle in the context menu.

- Add new function TEventList::SetDelta.

- Change comment in TF1::Derivative.

- Minor change in TH1::GetBarOffset and GetBarWidth. Cast result to Float_t
  to avoid a warning with one compiler.

- In TTreePlayer::MakeClass, generate the code for the class destructor.
  Delete the current file in the destructor.

- One change in TCint (Win32 only).
//
// 14/02/2000  12.24.01  by  Rene Brun
//
- Add the following functions overridden TNamed::SetObject
   TH1::SetObject(const char *name, const char *title)
   TNode::SetObject(const char *name, const char *title)
   TTree::SetObject(const char *name, const char *title)
  Because instances of these 3 classes are automatically added to the current
  directory (a THashList), it is necessary to recompute the hashtable.
  This was already done by the SetName functions of these classes.
//________________________________________________________________________
//
//::>          VERSION  2.24/00   14/02/2000 10.13.26
//
//
// 01/02/2000  16.35.57  by  Rene Brun
//
- Add new attributes fTitleColor and fTitleFont in TAttAxis.
  Same in helper class TGaxis.
  The necessary changes to introduce the new attributes have been made in
  THistPainter::PaintAxis and in class TAxis3D.

- Protection added to TRotmatrix in case a TGeometry object dose not exist.
  When this is the case, a default TGeometry object is created.

- Changes in TTreePlayer::TakeEstimate to support option "goff" when
  generating 3-d histograms.



ROOT page - Class index - Top of the page

This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.