ROOT Version 2.22 Release Notes

//________________________________________________________________________
//
//::>          VERSION  2.22/10   28/07/99 10.25.01
//
//
// 28/07/1999  10.16.26  by  Rene Brun
//
- Solve a rounding problem in TGraph::PaintGrapHist. Sometimes, the last
  bin of an histogram was not completly drawn. Thanks Philippe Canal
  and Christian Lacunza for reporting.

- The TF1, TF2 and TF3 constructors set the member fNdim in case
  TFormula is not invoked. (Thanks Eddy Offermann for reporting).

- Improvements in TPostScript for fill areas with special patterns
   (fillstyle >3000). Many thanks to Olivier Couet for implementing
   this new logic.

- Minor changes in stress to cope with the new TPostScript changes.

- Modify MakeDepend (opengl -->ttf) Thanks to Damir Buskulic.
//
// 23/07/1999  14.42.49  by  Fons Rademakers
//
- TRFIOFile: correct handling of symbolic links to RFIO files.
  Also added missing dtor which correctly calls Close().

- GIFDecode: fixed some typo's.

- TClass: make sure in CreateClass() that the dictionary is always
  created on the heap and not in a mapped file.

- TMapFile: removed special dictionary allocation case (now in TClass).

- TF1: use Error() instead of Printf().

- New CINT 5.14.10 by Masa Goto:
  1140, virtual base class instantiation in ctor
  1141, typedef long long int __quad_t; bug fix
//
// 19/07/1999  11.48.23  by  Fons Rademakers
//
- Make-macros: added libstrm case for alphaegcs.
  Updated compiledata.h (by Philippe).

- Makelib: added the missing $EXTRA field for several platforms.

- TSystem: script compiler knows now about object extension (by Philippe).

- TMath: inline Atan2 implemented without multiple returns for old
  HP CC compiler.

- New CINT 5.14.9 by Masa Goto:
  Fixes some serious defect in resolving overloaded member functions with
  default arguments.
  -   , G__VARIABLEFPOS, linenum added
  1138, #pragma link, undefined symbol warning
  -   , disable 1083, class A{const char *str; const int N=5;};
  1139, G__type2string, invalid tagnum protection
  -   , 1137 fixed
  G__PTR2MEMFUNC, t195.cxx, pointer to member function support
//________________________________________________________________________
//
//::>          VERSION  2.22/09   13/07/99 19.08.41
//
//
// 13/07/1999  18.38.25  by  Fons Rademakers
//
- TContextMenu: new member functions to also handle TToggle actions.
  For example, toggling log scale in the pad will now result in
  an instant refresh of the screen.

- TRootContextMenu: calls the new TContextMenu methods.
//
// 13/07/1999  18.49.08  by  Rene Brun
//
- Minor format change in TTree::Show when printing TLeafC or TLeafB values.

- Modify logic in TH1::PaintInit and TH1::TableInit in case one draws
  an histogram/table in log scale and the origine is negative.

- in TPave constructor, set the option to "brNDC" in case it is given
  as "NDC" only.

- Update Makelib and Makefile.alphaegcs. Makefile.alphaegcs was the old
  makefile for gcc.
//
// 12/07/1999  22.03.04  by  Rene Brun
//
- New code in TTreeFormula::PrintValue. This function is called by TTree::Scan.
  In case of leaves of type TLeafB, print value of leave as an array
  of chars as it was already the case for leaves of type TLeafC.

- Minor change of logic in class TH1 when invoking TH1::PaintStat.
  The test on the kNoStats bit is now done in the calling function instead
  of TH1::PaintStat. This solves a problem when this function is called
  by the TGraph class. With this change, fit parameters appear again
  when a TGraph object is drawn and gStyle->SetOptFit is active.
  Thanks Nick van Eijndhoven for reporting the problem.

- Thanks to Philippe Canal for a nice suggestion. Add "canvas->Show()"
  to the interpreted command to show/edit attributes and also
  the Fitpanel and Drawpanel. With this change, when the attribute canvas
  is selected (eg, attline), the attribute canvas is automatically popped
  in case it was hidden by some window. The corresponding functions have been
  modified accordingly:
     TAttLine::SetLineAttributes()
     TAttFill::SetLineAttributes()
     TAttMarker::SetLineAttributes()
     TAttText::SetLineAttributes()
     TGraph::FitPanel()
     TH1::DrawPanel()
     TH1::FitPanel()

- Modify TPad::PaintModified. In case the canvas/pad fill style is 0,
  TPad::PaintModified should not be called when in Postscript mode.
  The result was OK but the Postscript file generated was bigger.
  Thanks Mathieu de Naurois for reporting.

- Some changes in constants in TDatabasePDG (Thanks Danielle Picard).

- in TColor::SetRGB, the dark & light colors are set for systems
  with more than 8 color planes. For 8 color planes display, the dark
  and light rgb are set to 0.3 and 0.8 respectively.
  This simple change helps a bit on old displays when running Root
  together with Netscape.
//
// 11/07/1999  12.27.54  by  Fons Rademakers
//
- New CINT 5.14.8 by Masa Goto:
  5.14.8 4 Jul 1999
  1132, cout << c*1./d << endl; bug fix
  PHIL2, inode checking in #pragma defined_in
  1133, -u [undeffile] improved with #pragma link off
  1134, int const a; bug fix
  1135, static var access in include file, static func is still not implemented
  1136, script compiler shl.c modification 2
  1137, function parameter match improvement for default constructor
//
// 11/07/1999  08.58.15  by  Rene Brun
//
- Protection added in TPad::DrawClassObject in case the dictionary
  for a base class is not available.
//
// 10/07/1999  21.42.51  by  Rene Brun
//
- In several functions where the canvas attribute panels or Fitpanel are called
  via the interpreter, declare the type of object being instantiated.
  eg,  attfill = new TAttFillCanvas(..
  is changed to:
      TAttFillCanvas *attfill = new TAttFillCanvas(..
  because with CINT's new feature " set automatic variable allocation mode '0' "
  errors are reported.
  Classes modified are TH1, TF1, TGraph, TAttText, TAttFill, TAttLine, TAttMarker.
  Thanks Christian Lacunza for reporting this problem.

- in TApplication::InitializeColors, rename color 12 to be "grey12"
  instead of "grey13". Thanks Christian Lacunza.

- A few changes in the Physics vector classes to implement the decisions
  taken at the CERN/FNAL video-conference between the CLHEP/ZOOM and ROOT
  development teams(new code from Peter Malzacher). Thanks to all involved:
  Mark Fishler, Peter Malzacher, Pasha Murat, Philippe Canal.

- Protection added to TBranch::GetBasket. When a Root file is corrupted
  (disk quota, AFS quota/buffer problem, overwrite), the new code
  detects this case and reports a message indicating the address
  of the possible overwritten area.

- Fix a bug in TPolyMarker3D::SetPolyMarker and TPolyLine3D::SetPolyLine.
  The maximum of the loop index must be fN instead of 3*fN
  Thanks Federico Carminati for reporting.
//
// 09/07/1999  10.47.43  by  Rene Brun
//
- The axis "UnZoom" interactive facility now works in case of a pad
  containing several histograms.

- in class TLorentzVector, change name of embedded class HepLorentzRotation_row
  to TLorentzRotationRow to be conform to the Root naming scheme.

- Change default compiler optimisation level from -g or -g1 to -O
  in the makefiles for hp-ux.

- in Makedepend file, replace all hardwired pathnames for ttf and opengl
  by $ROOTSYS/opengl and $ROOTSYS/ttf.
  Thanks Dmitri  Litvintsev for reporting.

- Protect TPad::PaintModified in case gPad=0 at the entry of the function.
  This case may happen in the following situation:
     TCancas xxx;
     xxx.Update();
  Thanks to John Zweizig for reporting the problem.
//
// 08/07/1999  18.48.48  by  Rene Brun
//
- Add a protection in TPad::RecursiveRemove. When the object being deleted
  is the object currently selected, the fSelected member in the Canvas
  must be reset. The situation may happen in very complex situations
  when clicking very rapidly and repetitively on a pad being dynamically
  updated (histograms filled in a loop + timer).
  Thanks Patrick Decowski for reporting.

- New feature in TPad::Print. A canvas saved into a root file can be
  printed on Postscript directly without drawing on the screen. eg,
     Root > TFile f("c1.root");
     Root > c1.Print("c1.ps");

- Remove an inconsistent line in TVector3.h (extern TVector3..)
  generating a clash when Root and CLHEP were used together.
  Thanks Pasha Murat for reporting.
//________________________________________________________________________
//
//::>          VERSION  2.22/08   07/07/99 18.53.13
//
//
// 07/07/1999  18.36.37  by  Rene Brun
//
- Modify prototype for TParticle::GetPolarisation.
      void  GetPolarisation(TVector3 &v);

- Fix a minor problem in TRootCanvas::HandleContainerCrossing
  affecting TPaveText::InsertText. With this fix, the TPaveText context menu
  item "InsertText" can be used again to insert a text at the mouse position
  in a TPaveText object.

- Modify TH1::PaintStat2 to not draw the stats box when the kNoStats bit
  is set. This bit is automatically set in TTree::Draw when drawing
  the default TH2F created to set the frame range.

- Modify tutorial hsum.C to invoke c1->RedrawAxis at the end of the macro.

- Modify tutorial zdemo to invoke TPad::DrawFrame instead of creating
  an empty TH2F (2 places).

- Protection in TTree destructor when the Tree is deleted from a TFile
  close or destructor.

- New functions in TMath to return the index of the maximum or minimum
  of an array.
    Int_t  LocMin(Int_t n, Short_t *a);
    Int_t  LocMin(Int_t n, Int_t *a);
    Int_t  LocMin(Int_t n, Float_t *a);
    Int_t  LocMin(Int_t n, Double_t *a);
    Int_t  LocMax(Int_t n, Short_t *a);
    Int_t  LocMax(Int_t n, Int_t *a);
    Int_t  LocMax(Int_t n, Float_t *a);
    Int_t  LocMax(Int_t n, Double_t *a);
//
// 07/07/1999  11.56.40  by  Fons Rademakers
//
- TBuffer: use TExMap when writing instead of TMap. Use hash based on
  object's memory address to determine uniqueness (TObject::Hash()). In
  previous versions the uniqueness was determined by the derived class'
  Hash() method, which, for example, for TNamed's was the hash of the
  name.

- Make-macro: fixed name of RFIO dictionary file.

- TGX11: declared XPoint as struct to CINT.
//________________________________________________________________________
//
//::>          VERSION  2.22/07   06/07/99 09.04.33
//
//
// 05/07/1999  17.44.39  by  Fons Rademakers
//
- All container iterators: have now copy ctor and assigment operators.

- TIter: has now copy ctor and assignment operator.
  Both the copy ctor and assignment operator use the assigment operator
  of the container iterators (see above).
//
// 05/07/1999  17.08.22  by  Rene Brun
//
- Modify TH1::PaintStat and TH1::PaintStat2 to draw the statistics box
  even in the case where nentries=0.
  Because TGraph objects are drawn via TH1::Paint, the temporary histogram
  created in TGraph::PaintGraph has its bit kNoStats set to not draw
  the stats box.

- Several corrections in class TAttParticle.

- Modify signature for TVirtualPad::DrawFrame and TPad::DrawFrame.
  The new function returns a TH1F* instead of being void.

- Modify tutorial gerrors2 to use TPad::DrawFrame instead of a TH2F.

- Add new dictionary G__Graf3 including TStyle TView, TF1,2,3
  This minimizes the size of the Graf1 dictionary.
  Create new script cint_g3 and G3_LinkDef.
  Modify cint_all, cint_g1, cint_g2, G1_LinkDef, G2_Linkdef and makemacros.

- New version of TPythia::ImportParticles (TClonesArray *particles).
  The new version fill the array particles with TParticle objects
  instead of TMCParticle. (Thanks Federico Carminati).

- Modify script makecompiledata (windowsNT case).

- Fix a problem in TGraphAsymErrors destructor. Due to a typo, the array
  fElow was deleted twice.

- A few changes in TPostScript::DefineFillPatterns necessary to handle
  fill patterns 3000 and above. (Thanks Jorg Rieling for reporting).

- Introduce new versions of classes TThread, TPosixCondition
  (from Marc ).
  //
// 02/07/1999  14.13.30  by  Rene Brun
//
- In TPad::Print, automatically update current canvas before generating
  a gif file.

- Merge with latest Philippe Canal versions of the following classes;
   TCint, TInterpreter, TSystem.

- Implement a few changes by Peter Malzacher in the physics vector classes.

- A few changes in TAttParticle.

//
// 02/07/1999  13.07.07  by  Fons Rademakers
//
- TObjArray: fix in BinarySearch() in case array contains empty slots.

- TParticle: fix GetPDG() (by Christian Lacunza).

- New CINT 5.14.7 by Masa Goto:
  5.14.7 26 Jun 1999
  1126, undefined type in function argument. Warning message
  1127, B b(new A(123,3.14)); bug fix
  1128, float(x); type conversion operator bug fix
  1129, cout << x; type conversion operator with operator overloading bug fix
        Still having problem with t182.cxx with bytecode. Need to fix this.
  1130, print(float f); print(x); implicit type conv
  -   , floating accuracy expression %.17g -> %.17e, integral literal bug fix
  1131, cout << this << endl; bug fix
//
// 01/07/1999  16.56.44  by  Rene Brun
//
- New versions of TDatabasePDG and TParticlePDG from Federico Carminati.

- a few changes in the comments in TCanvas (with #ifdefs for R__THREAD)
  to generate a better html documentation.

- Protection introduced in TGraph::ExecuteEvent in case multiple double clicks
  on the same point.

- Fix a problem in TH1::Rebin. Last bin was not correctly taken into account.
  (Thanks Chris Jillings for reporting).
//
// 30/06/1999  10.36.53  by  Fons Rademakers
//
- TROOT, TTree, TBasket: fix some uninitialized variables
  (found thanks to Purify).

- WidgetMessageTypes.h: new include containing enum with
  all "official" widget messages. Formerly part of TGWidget.h.

- TDatime: new ctor taking UInt_t. Default
  ctor to avoid calling the TDatime::Set() in the default TDatime
  ctor. Default TKey ctor is only called when reading a TKey and
  in that case the TDatime is read from file and there is no
  need to first have it set (which may be potentially expensive
  since it call localtime()).

- TRFIOFile: call rfio_unlink() instead of gSystem->Unlink() to
  delete an RFIO file. Option "RECREATE" should work now.
//
// 30/06/1999  17.50.46  by  Rene Brun
//
- Modify TBranch constructor and TBranch::Reset to always preset to 0
  the internal tables fBasketEntry and fBasketSeek.

- Modify TTree::MakeClass to generate code that can be compiled
  by the normal compiler as well as interpreted by CINT.
  Add comments in the generated implementation file to explain how
  to use the genearted code.

- Add a new function TBasket::ReadBasketBuffers(char *buf).
  This function is called by TBranch::GetBasket in case the length
  of the corresponding buffer is less than the temporary space (1000 bytes)
  used to read the TBasket header. This avoids reading twice the buffer
  in case of very small buffers.

- Fix a problem in TGraph::PaintGraph. In case of a logy scale
  and option "bar", the graph was not correctly clipped along y.
  (Thanks Rainer Cee for reporting).
//
// 28/06/1999  00.32.19  by  Rene Brun
//
- Add a new set of colors (51->100) in class TApplication.
  These new colors fill a spectrum ranging from violet to red.

- In TStyle::SetPalette(int ncolors, int *colors=0)
  support a new option.
  When calling SetPalette(0), the default palette is set.
  When calling SetPalette(1), a new color palette is defined
  using the 50 colors 51->100.
  This palette 1 should be used to produce contour, lego, surface plots.
  Thanks to Thomas Ulrich and Jon Gans from the STAR collaboration.

- Modify TH1::PaintSurface and TH1::PaintLego to take into account
  the new color palette 1.

- In the TColor constructor, do not create the associate dark/light
  colors when the color number is > 50.

- Protect TH1::PaintScatterPlot in case of logz scale. (thanks Otto Schaile)

- Correct un unfortunate typo in the description of the TF1 doc.
  (thanks Mark Fishler).

- In TPad::GetFrame, add a protection in case a user has deleted an existing
  TFrame with the mouse (Thans Philippe Canal).

//________________________________________________________________________
//
//::>          VERSION  2.22/06   23/06/99 08.36.20
//
//
// 23/06/1999  08.34.13  by  Rene Brun
//
- Modifications in new class TParticle (thanks Federico Carminati).
  Corresponding changes in TGenerator.

- Note that this new class TParticle uses the new set of PDG classes
  in patch EG. These PDG classes are still under development.
//
// 23/06/1999  08.31.08  by  Peter Malzacher <malzache@fnal.gov>
//
- some improvements in the new CLHEP imported class TLorentzVector
//
// 22/06/1999  19.15.42  by  Fons Rademakers
//
- TUrl: fixed illegal changing of const char*.

- TSystem: exposed enum EAccessMode to CINT.

- TSystem, TROOT, TCint: applied mods of Philippe Canal for the
  script compiler.
//
// 22/06/1999  10.18.25  by  Philippe Canal (pcanal@fnal.gov)
//
- Script Compiler
  ===============
  This new ROOT facility facilitates the use of an external compiler to
  'interpret' a C++ root macro (script).  The external compiler will
  be called to create a shared library that is automatically loaded.

  The interface is simple and extend the use of the .X, .x and .L cint commands.
  For any of this command if '++' is appended to the name of the script file,
  the script compiler is invoked.  For example:

        .X myFunc.C++(arg1,arg2)

  will compile the file myFunc.C, load the resulting shared library and
  invoke the function myFunc(arg1,arg2).  (As as reminder if the ++ is
  dropped, the cint interpreter is used to parse and execute the script).

  The script compiler cannot currently digest any C++ code that does contain
  a 'main' function or the redefinition of any ROOT global variables (like
  TROOT).  For the script to be both understandable by cint (via .X myFunc.C )
  and by the script compiler (via .X myFunc.C++ ) follow the following
  rules (some of these made be relaxed at a latter date):

    - contain all needed include files surronded by #ifndef __CINT__
    - contain forward declaration for all classes used in function declaration
          (this need to be visible by cint)
    - If the script has a supporting header file, for example defining some
          extra classes, the header has to be in the same directory as the
          script in order for its content to be available directly from
          the command prompt.

  For example:

  // This is a ROOT Script myScript.C
  // that just draw and fit and histogram

  #ifndef __CINT__
  #include "TH1.h"
  #endif

  class TH1;

  void myScript( TH1* h, const char * formula ) {
    h->Draw();
    h->Fit(formula);
  }


  The script compiler is set to use the same compiler and compiler flags
  as ROOT.  This can be modified using the following new methods in the
  TSystem class: Get/SetIncludePath, Get/SetMakeSharedLib and
  Get/SetMakeExe.  Typically only the include should need to be modified.
  For example:

    gSystem->SetIncludePath("-I$ROOTSYS/include -I$HOME/mypackage/include");

  For more details refer to the documentation of TSystem::CompileMacro and
  TSystem::SetMakeSharedLib.
//
// 21/06/1999  12.44.18  by  Rene Brun
//
- New version of class TParticle from Federico Carminati.
  (see header file for new definition).

- Optimisation of TTree::MakeClass. The maximum dimension of arrays
  is now defined via const Int kMaxxxx variables intead of constants.

- Give more digits when printing in TF2::GetObjectInfo.
//
// 19/06/1999  10.49.06  by  Rene Brun
//
- Integrate the new Physics vectors classes adapted to Root
  by Peter Malzacher.
  In particular, the existing classes TParticle and TGenerator
  had to be slightly modified to cope with the new interface
  of TLorentzVector.

- Modify scripts cint_physics, Physics_linkDef, Makemacros and
  MakeDepend to add the new CLHEP classes.
//
// 19/06/1999  10.31.45  by  Peter Malzacher
//
- Import CLHEP Physics vectors classes into ROOT
  ==============================================
  The following classes have been imported from CLHEP.
   - TVector3
   - TLorentzVector
   - TRotation
   - TLorentzRotation

   Note that the classes TVector3 and TLorentVector have a few
   backward incompatibilities with the previous clases with the same name.

   Add a new test program in $ROOTSYS/test/TestVectors.cxx
   To run it, one can use the new feature of Root to invoke
   the compiler and linker dynamically.
   Root > .X TestVectors.cxx++  // with the compiler
   Root > .X TestVectors.cxx    // with the interpreter

//
// 18/06/1999  16.09.49  by  Rene Brun
//
- New functionality added to class TTree
  ======================================
  void TTree::BuildIndex(const char *majorname, const char *minorname)
    Build an index table using the leaves with name: major & minor name
    The index is built in the following way:
       A pass on all entries is made using TTree::Draw
       var1 = majorname
       var2 = minorname
       sel  = majorname +minorname*1e-9
       The standard result from TTree::Draw is stored in fV1, fV2 and fW
       Thew array fW is sorted into fIndex
     Once the index is computed, one can retrieve one entry via
       TTree:GetEntryWithIndex(majornumber, minornumber)
    Example:
     tree.BuildIndex("Run","Event"); //creates an index using leaves Run and Event
     tree.GetEntryWithIndex(1234,56789); //reads entry corresponding to
                                           Run=1234 and Event=56789

    Note that once the index is built, it can be saved with the TTree object
    with tree.Write(); //if the file has been open in "update" mode.
    The most convenient place to create the index is at the end of
    the filling process just before saving the Tree header.

    Note that this function can also be applied to a TChain.

   Int_t TTree::GetEntryWithIndex(Int_t major, Int_t minor)
    Return entry  corresponding to major and minor number
    For example:
        Int_t run   = 1234;
        Int_t event = 345;
        Int_t serial= tree.GetEntryNumberWithIndex(run,event);
       now the variable serial is in the range [0,nentries] and one can do
       tree.GetEntry(serial);

    Int_t TTree::GetEntryNumberWithIndex(Int_t major, Int_t minor)
     Return entry number corresponding to major and minor number
//
// 18/06/1999  09.15.35  by  Rene Brun
//
- Minor changes in TH1 class to replace objects TAxis xaxis,yaxis,xaxis
  by pointers.

- Modify default constructor for class TDatabasePDG to support I/O.
  With the old form, one could not read this object from a file.

- Fix problem in the TMath::Sort functions. The convention for the
  index values start at 0 instead of 1. The result was Ok when sorting
  in decreasing order, but not when sorting in increasing order.

- No more optional parameters in one TF1 constructor.
   TF1(const char *name, void *fcn, Float_t xmin, Float_t xmax, Int_t npar);

- Fix a problem in TBasket::Streamer. In case a TTree was created and
  saved in a file with 0 entries, it was not possible to continue
  to fill the Tree in a subsequent job when one of the branches contained
  variable length data per entry.
  Thanks Alexander Inyakin for reporting the problem).

- In CINT_Physics chnage the name G__PHYSICS to G__Physics.

- minor changes in test programs stress, hsimple and stress such that
  these programs can be executed:
    - in batch with the standard Makefile & compiler
    - via the interpreter (eg .x hsimple.cxx)
    - via the interpreter calling the compiler (eg .x hsimple.cxx++)

- Add new functionality in TH1::GetMean, TH1::GetRMS. In case these
  functions are called on a histogram never filled via TH1::Fill
  the statistics quantities are computed using the bin contents.
//________________________________________________________________________
//
//::>          VERSION  2.22/05   15/06/99 17.34.57
//
//
// 15/06/1999  17.29.26  by  Rene Brun
//
- Improvement in TGraph::PaintGraph when drawing a graph in log scale
  and the dynamic range in x or/and y is > 10000.

- Modify TF1::Streamer to invoke TF1::Save in case of interpreted/compiled
  functions (fType > 0). Take into account the possibility for this
  object to be written/read/written in multiple cycles.
//
// 15/06/1999  15.35.58  by  Fons Rademakers
//
- AA_CREDITS: new file containing list of people who contributed to ROOT.
  List is still being assembled (we should have started sooner), so if you
  are not yet on don't worry yet.

- GLOBALS: make sure the the CXXOPT '-c' is the last in the string. The
  macro makecompiledata depends on it.

- New macro makecompiledata: this macro generated the compiledata.h file
  which provides sensible default compiler options. compiledata.h is used
  by the new interface to the native compiler for automatic script compilation.
  Outside of CMZ compiledata.h is generated by the Makefile.

- TTabCom: provide a private copy ctor. Also initialized fpFiles and
  fpSysIncFiles in ctor.

- TCint: fix in TypeName() to correctly handle function pointer type names.
  This fixes the bug: Error in <TDataMember::TDataMember>: basic data
  type (*)(Double_t*, Double_t*) not found in list of basic types

- rootcint: prevent __MAKECINT__ to be defined as macro in the dictionaries.

- TGListBox: new method GetSelectedEntries(TList *entries). Thanks R.Rohlfs.
//
// 14/06/1999  17.24.17  by  Rene Brun
//
- Include changes from Philippe Canal in the following decks.
     TSystem, TApplication, TCint.
  The new code from Philippe together with the new version of CINT 5.14.6
  adds a very interesting new feature to ROOT/CINT.
  The purpose of this addition is to allow the user to use an external
  compiler to create a shared library from its C++ macro (scripts).
  Currently in order to execute a script, a user has to type at the root prompt
   .X myfunc.C(arg1,arg2)

  We propose to allow him to type:

   .X myfunc.C++(arg1,arg2)

  In which case an external compiler will be called to create a shared
  library.  This shared library will then be loaded and the function
  myfunc will be called with the two arguments. Of course the ++ notation
  will also be supported in similar way for .x and .L.
  The current implementation is still a prototype. It requires a special
  setup macro to be executed before using this service.
  For more details, see comments in TSystem::CompileMacro.

- Changes in TTree::MakeClass to compute the pointer to the top level branch
  in case of a TBranchObject and to set its dummy address.

- Changes in TBranchObject::SetAddress. In case add contains the invalid
  adress=-1, the special bit kWarn is set. This bit is used to inform
  TBranchObject::GetEntry that this branch address is not set and let
  GetEntry invoke the GetEntry function of its sub branches.
  This case happens in case of a class generated by TTree::MakeClass.

- Minor changes in headers of the following classes:
  TLeafB, TLeafC, TLeafD, TLeafF, TLeafI, TLeafS, TSpectrum
  Declare several data members non persistent (! as first character
  in comment field).

- Minor change in GlKernel by Valery fine (Win32 version only).
//
// 10/06/1999  18.46.21  by  Fons Rademakers
//
- TMessage: take care of byte length offset when reading, by moving
  fBuffer 4 bytes backward, in this way the recorded offsets match again.

- TGTab: take width of all tabs into account in DefaultSize() (by R.v.d.Eijk).

- TGListTreeItem: new member SetPictures(), to change the icons used for the
  tree item in open and closed state (by L. Aphecetche).
//
// 09/06/1999  14.49.50  by  Rene Brun
//
- New function TH1::GetStats(Stat_t *stats).
  This new function returns or/and compute the following quantities.
    stats[0] = sumw
    stats[1] = sumw2
    stats[2] = sumwx
    stats[3] = sumwx2
    stats[4] = sumwy   if 2-d or 3-d
    stats[5] = sumwy2
    stats[6] = sumwz   if 3-d
    stats[7] = sumwz2
    The array stats must be correctly dimensionned in the calling program.
  If no axis-subrange is specified (via TAxis::SetRange), the array stats
  is simply a copy of the statistics quantities computed at filling time.
  If a sub-range is specified, the function recomputes these quantities
  from the bin contents in the current axis range.

- New functionality added to TH1::GetMean and TH1::GetRMS.
  The new implementation invokes TH1::GetStats.

- TH1::PainStat and TH1::PaintStat2 modified to take into account
  the new functionality from TH1::GetMean and GetRMS.
  When a subset of an histogram is drawn, the statistics box
  reports the mean/rms for the current bin range only. These values are
  recomputed from the actual bin contents. If the full range is displayed,
  the mean and rms values are obtained from the precise values computed
  at filling time.
//
// 08/06/1999  17.56.19  by  Fons Rademakers
//
- rootcint: cast to TObject* when writing array of TH* (was already done
  for simple TH*'s).

- root-config: new utility in $ROOTSYS/bin/root-config. This little script
  returns the set of ROOT libs and ROOT compile flags. Instead of hard coding
  in Makefiles the long list of ROOT libs, just use root-config. For example
  see $ROOTSYS/test/Makefile, where it is used like:
     ROOTCFLAGS    = $(shell root-config --cflags)
     ROOTLIBS      = $(shell root-config --libs)
     ROOTGLIBS     = $(shell root-config --glibs)
  Using this utility you are protected in case the name, number, location
  of the ROOT libs changes. Idea of root-config came from gtk-config.

- TGTab: fixed RemoveTab(). Should work fine now without memory leaks.
  Added also new member GetNumberOfTabs(). See $ROOTSYS/test/guitest.cxx
  on how this is used.
//
// 07/06/1999  16.04.25  by  Rene Brun
//
 New feature in TF1.
 In case of precompiled TF1 functions, Root, by definition, cannot save the
 precompiled function on the file. However, it is possible to tabulate
 the function and save the table together with the function.
 This table was already automatically computed/filled during a TF1::Fit.
 TF1::Streamer has been modified to save the tabulated function as soon as
 one writes such a function on a file.

- Correction in TGraph::PaintGraph affecting the following case.
  A TGraph is created with positive y values. The user calls
  graph->SetMinimum(negativeValue). The minimum was set to 0
  instead of the specified user minimum.
  Thanks Henry Sutter for reporting.

- Add gStyle->DetFrameBorderMode(0) in the definition of "Plain" style
  in TROOT constructor. Non-setting the frame border to 0 produced
  a thin red line in the top/left lines of the frame on EPS files.
//
// 06/06/1999  11.38.41  by  Fons Rademakers
//
- TRint: now always load iostream. Please remove any
  "#include <iostream>" statements from your rootlogon.C.

- TGTab: added RemoveTab(Int_t idx).

- TFile: updated comments for RFIO in ::Open().

- TGFrame: added virtual dtor for TGFrame (reported by R. v.d. Eijk).

- TSystem: tentatively added "try {} catch(...){}" clause in Run().
  Will be enabled when compiling with -DR__EH, still off by default.
//
// 04/06/1999  13.12.53  by  Rene Brun
//
- Protect TFile::Init (can be called by TNetFile and TWebFile) in case
  tye file is connected and content is bad.

- Changes in TWebFile::Init. Set file descriptor fD to -2.
  With the previous value fD=-1, TFile::isOpen was false when called
  from TWebFile destructor. (thanks valery for reporting the problem).
//________________________________________________________________________
//
//::>          VERSION  2.22/04   03/06/99 19.13.54
//
//
// 03/06/1999  16.47.19  by  Rene Brun
//
- Several unused functions removed from TH1.

- Small change in TTUBE::Paint (Thanks Andreas Morsch). The radial lines
  are not drawn anymore when drawing in a pad.

- Modify TSpectrum to include a default constructor. The code generated
  without the default constructor for the dictionary was given problems on
  alphas with cxx6.

- minor changes in CINT functions Class and Type to remove a compilation
  warning on hp-ux and alpha.
//
// 02/06/1999  09.25.31  by  Rene Brun
//
- Protection in TPad::Paint in case fPrimitives = 0.
  This case can happen is a user by mistake has invoked the default pad
  constructor.
//
// 01/06/1999  12.21.34  by  Fons Rademakers
//
- Make-macros: fix for PostScript.

- TTabCom: new version from Christian Lacunza. Automatically substitutes
  . for -> and vice versa.

- TApplication: handle now: ".x test.C (101)" (notice space between .C and ()).

- TObject, TObjectTable: use advanced TMath::Hash() as hash function.

- TClass: added protection in ListAllPublicMethods() and ListAllPublicMembers().
  Noticed when doing: root [0] istream::[TAB]

- New CINT 5.14.3 and 5.14.4:
  5.14.3  9 May 1999
  1097, automatic variable turn on/off
  1098, special character allowed as project and dllid for makecint
  -   , include/bool.h  -DTRUE, -DFALSE  problem fixed
  1099, .hh .hxx. hpp extension allowed
  1100, template comment
  -   , STL header files vector.h -> _vector.h
  1101, non-static member func call->error, Not activated:dictionary problem
  -   , .X t141.cxx ("abc",123)  bug fix
  1102, .X error recovery bug fix
  1103, f(int x) { const int N=x*2; }
  -   , operator overloading floating accuracy %.12e -> %.17g
  1104, f(scope::cls& x=scope::cls()) fix for makecint, not yet for interpreter
  1105, .X f.C( sin(1.23) )  bug fix
  5.14.4 22 May 1999
  -   , 1093 improved for makecint/rootcint
  1106, G__tagdefining reset bug fix
  1107, G__tagdefining questionable restore fixed ???
  1108, La (reLoadAll) command
  1109, (enum A::)0 bug fix
  1110, default parameter evaluation
  -   , G__getmakeinfo() API added
//
// 01/06/1999  08.10.26  by  Rene Brun
//
- Fix a problem in TTreeFormula::EvalInstance.
  A wrong value was returned in case of
     tree->draw("var","2")
  Following the fix, the new version returns a weight=2 for each entry.
  (thanks Patrice Lebrun for reporting)

- Implement TChain::GetMinimum and TChain::GetMaximum.
  These two new functions redefine the corresponding TTree functions.
  They loop on all files in the TChain to return respectively the minimum
  and maximum for a given variable.

- Implement new function TAxis::UnZoom.
  This new function as well as the existing TAxis::SetRange are both
  visible in the TAxis pop-up menu.

- Tutorial basic.C rewritten to use ifstream.

- Minor changes from Valery integrated in TShape and TPoints3DABC.
//
//________________________________________________________________________
//
//::>          VERSION  2.22/03   31/05/99 19.12.56
//
//
// 31/05/1999  16.23.57  by  Rene Brun
//
- 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.

- Changes in TPad::PaintText and TPad::PaintTextNDC.
  Text is now always clipped at the pad boundaries. In the previous version,
  Text drawn outside the pad was visible with Postscript.

- Modify TH1x::DrawCopy functions to invoke Clone instead of Copy.
  The new version of DrawCopy is able to copy the fit part of a TH1.

- Modify TGX11::SetFillColor to set the member fFillColor.
  fFillColor is used by TGXW::GetFillColor.

- Modify TH1::PaintBoxes to restore TGXW::SetFillColor after each box.

- Add new function in class TGenerator:
   Int_t ImportParticles(TClonesArray *particles, Option_t *option).

- Correction in TPostScript::Text. The greek characters chi and eta
  were inverted.

- Move inline definition of TMath::Hash to implementation to avoid
  including string.h in TMath.h
//________________________________________________________________________
//
//::>          VERSION  2.22/02   28/05/99 18.55.03
//
//
// 28/05/1999  15.26.42  by  Fons Rademakers
//
- ==========>>IMPORTANT NEW FEATURE<<=============
  TBuffer: WriteObject()/WriteClass() now write the buffer offset
  into the output buffer instead of the map index. This allows the reading
  of classes and objects inside skipped objects (skipped because their
  shared libs are not available/loaded at reading time).
  This change is fully backward compatible.

- TExMap: new Map container which can use an external hash value to
  store the (key,value) pair. The pairs are two longs (so can also
  contain object addresses). Used in TBuffer.

- TMath: added method Hash(const void *, int). This hash function is
  provided by V.Perev and provides very good hashing.

- TMapFile: added protection in case more than one map file is open
  and one of them gets closed. Also added ifdef for GLIBC 2.1 (RH6).
  Corrected "fix" of 22/04/1999  22.13.54, StrDup() space was not
  allocated in mapped file.

- TDirectory: add protection against recursive remove in dtor (like
  is done in Close()).

- TArray, TMessage: changed call to TBuffer::MapObject(0) to
  TBuffer::MapInit().

- TString: added warning in case one tries to do I/O of a string longer
  than 255 characters.

- TObjectTable: added protection in Remove().

- TList: added protection in case GetName() returns 0 in FindObject().

- TGX11: handle dashed lines in DrawLine(), like in DrawPolyLine().

- TGX11TTF: for negative X-bearing to 0 (left upper corner of W was
  otherwise wrapped to right upper side in pixmap).

- hclient.C: fix in hclient.C tutorial (hpx was not declared).

- rootcint: some more code for handling STL containers.
//
// 28/05/1999  14.22.05  by  Rene Brun
//
- Add new class TSpectrum
  =========================
  This class contains advanced spectra processing functions.
    - 1-d & 2-d background estimation
    - 1-d & 2-d deconvolution
    - 1-d & 2-d peak search

   The original functions in C were written by:
      Miroslav Morhac
      Institute of Physics
      Slovak Academy of Sciences
      Dubravska cesta 9, 842 28 BRATISLAVA
      SLOVAKIA
   For more information, see the class documentation.

- Add new member fWeight in class TParticle and corresponding Get/Set.
(Thanks to Andreas Morsch for the suggestion).
//
// 27/05/1999  18.09.18  by  Rene Brun
//
- TMath::ATan2(y,x) was returning PI/2 instead of -PI/2 if (y <0, x==0)
 (Thanks Bjorn Nilsen for reporting).
//
// 26/05/1999  09.42.29  by  Rene Brun
//
- Add comments in the ClassDef statement of the following classes:
   - TTabCom
   - TVector2
   - TVector3
   - TParticlePDG
   - TLorentzVector
  Corresponding dictionaries regenerated.
//
// 25/05/1999  09.56.26  by  Rene Brun
//
- Correct documentation for the list of markers in TAttMarker.
  Rebuild markers.gif file. Update Web site.
   (Thanks Ulrich Jost for notifying).
//
// 21/05/1999  18.13.23  by  Rene Brun
//
- Optimize TPostScript::Text for a better evaluation of the text size
  in function of the page aspect ratio.

- Implement function TMarker3DBox::ExecuteEvent. TMarker3DBox objects
   can now be rotated in a pad.
  A protection added in TMarker3DBox::Paint to not call PaintGLPoints
  if OpenGL not selected.

- Changes statements in TabCom like assert(plist) to assert(plist != 0).
  This to prevent a compiler error with KCC under Alpha.

- Changes in TLine::executeEvent and TTextExecuteEvent to support picking
  in case of a TLine or TText object defined in NDC.

- Implement option "all" in TPolyLine3D::Print and TPolyMarker3D::Print
  TPolyLine3D::Streamer was not restoring correctly fLastPoint.

- Change logic in TPolyLine3D::SetPolyLine and TPolymarker3D::SetPolyMarker.

//________________________________________________________________________
//
//::>          VERSION  2.22/01   20/05/99 16.53.54
//
//
// 20/05/1999  16.36.57  by  Rene Brun
//
- README deck in root.cmz file updated to reflect the current
  installation procedure. A copy of the CMZ installation procedure
  has been added to the Web site.

- Fix a memory leak problem in TMatrix::Invert.
  Thanks Roy Lee rlee@physics.harvard.edu for reporting.

- decks CINT_EG and EG_LinkDef updated to include new class TParticle.

- 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.

- New member function TAxis::CenterTitle. This function is visible
  from the axis context menu. By default, the axis title is right adjusted
  on the axis. This function can be called (or via the mouse) to draw
  the title at the center of the axis.
   Patch   //ROOT/INCLUDE

- TBasket header file modified to increase class version id to 2.
  TBasket::Streamer modified to write/read only the part of the current
  buffer filled with useful data. The previous version wrote the full
  buffer. This change generates slightly smaller files in case of Trees
  with many branches and large buffer sizes.
  TBasket::WriteBuffer modified. In some very special cases, it was found
  that the size of the "compressed" buffer could be larger than the
  uncompressed buffer (this in case of byte data types).
  When this happens, the buffer is written in uncompressed mode.
  The message generated in the above case was:
     mmzip: output buffer too small for in-memory compression
  With this modification, users should not see this message anymore.

- Several changes in class TH1
  ============================
  - a new data member "Double_t *fIntegral"
    fIntegral is a pointer to an array containing the integral bin by bin
    of the histogram. This array is filled by the new function TH1::ComputeIntegral.

  - 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 9if 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="");

  - New option in TH1::Eval
       If option "R" is specified, the function is evaluated only
       for the bins included in the function range.
       If option "A" is specified, the value of the function is added to the
       existing bin contents
       If option "S" is specified, the value of the function is used to
       generate an integer value, distributed according to the Poisson
       distribution, with f1 as the mean.
       Many thanks to Gerco Onderwater <onderwat@nialas.npl.uiuc.edu>
       for suggesting/implementing the new option "S".

   - New argument in TH1::FitSlicesX,Y,Z:
     void TH1::FitSlicesX(TF1 *f1, Int_t binmin, Int_t binmax, Int_t cut, Option_t *option)
     void TH1::FitSlicesY(TF1 *f1, Int_t binmin, Int_t binmax, Int_t cut, Option_t *option)
     void TH1::FitSlicesZ(TF1 *f1, Int_t binminx, Int_t binmaxx, Int_t binminy, Int_t binmaxy, Int_t cut, Option_t *option)
     The new argument option (default="QNR") can be used to change the fit options.
        "Q" means Quiet mode
        "N" means do not show the result of the fit
        "R" means fit the function in the specified function range

   - TH1::PaintLego and TH1::PaintSurface modified. The last color level
     was not correctly filled.

   - new option "I" supported in TH1::PaintStat. When this option is set,
     the "stats" box shows the integral of bins.
     This option can be activated by TStyle::SetOptStat.

   - TH1::PaintStat uses the new options in TStyle::SetStatFont
     and TStyle::SetStatStyle. The stats box can be made transparent
     with gStyle->SetStatStyle(0).

   - TH1::PaintTitle uses the new options in TStyle::SetTitleFont.


- Changes in class TLine
  new function:
     TLine *DrawLineNDC(Coord_t x1, Coord_t y1,Coord_t x2, Coord_t y2);
    This new function can be used to draw a line in Normalized Device Coordinates.
  the prototype of the existing function DrawLine has been changed to:
    TLine *DrawLine(Coord_t x1, Coord_t y1,Coord_t x2, Coord_t y2);

- Several changes in class TStyle
  ===============================
  3 new data members:
     Style_t       fStatFont;          //font style of Stats PaveLabel
     Style_t       fStatStyle;         //fill area style of Stats PaveLabel
     Style_t       fTitleFont;         //font style of Title PaveLabel
  with corresponding new Getters and setters:
     Style_t          GetStatFont()  {return fStatFont;}
     Style_t          GetStatStyle()  {return fStatStyle;}
     Style_t          GetTitleFont()  {return fTitleFont;} //return histogram title font
     void             SetStatStyle(Style_t style=1001) {fStatStyle=style;}
     void             SetStatFont(Style_t font=62) {fStatFont=font;}
     void             SetTitleFont(Style_t font=62)      {fTitleFont=font;}

- Changes in class TText
  new function:
     TText   *DrawTextNDC(Coord_t x, Coord_t y, const Text_t *text);
    This new function can be used to draw a text in Normalized Device Coordinates.
  the prototype of the existing function DrawText has been changed to:
     TText   *DrawText(Coord_t x, Coord_t y, const Text_t *text);

- Several changes in class TTree
  ==============================
  The old data members:
     Int_t         fMaxEventLoop;    //Maximum number of events to process
     Int_t         fReadEvent;       //Number of the event being processed
  have been renamed:
     Int_t         fMaxEntryLoop;    //Maximum number of entries to process
     Int_t         fReadEntry;       //Number of the entry being processed

  The previous functions or function arguments:
     virtual void      EstimateLimits(Int_t estimate, Int_t nevents=1000000000, Int_t firstevent=0);
     virtual void      EventLoop(Int_t &action, TObject *obj, Int_t nevents=1000000000, Int_t firstevent=0, Option_t *option="");
     virtual Int_t     GetEventNumber(Int_t event);
     virtual Int_t     GetMaxEventLoop() {return fMaxEventLoop;}
     virtual void      GetNextPacket(TSlave *sl, Int_t &nevents, Stat_t &firstevent, Stat_t &processed);
     virtual Int_t     GetReadEvent() {return fReadEvent;}
     virtual Int_t     LoadTree(Int_t event);
     virtual void      Loop(Option_t *option="",Int_t nevents=1000000000, Int_t firstevent=0); // *MENU*
     virtual void      SetEstimate(Int_t nevents=10000);
     virtual void      SetMaxEventLoop(Int_t maxev=1000000000) {fMaxEventLoop = maxev;} // *MENU*
     virtual void      Show(Int_t event=-1);
  have been renamed:
     virtual void      EstimateLimits(Int_t estimate, Int_t nentries=1000000000, Int_t firstentry=0);
     virtual void      EntryLoop(Int_t &action, TObject *obj, Int_t nentries=1000000000, Int_t firstentry=0, Option_t *option="");
     virtual Int_t     GetEntryNumber(Int_t entry);
     virtual Int_t     GetMaxEntryLoop() {return fMaxEntryLoop;}
     virtual void      GetNextPacket(TSlave *sl, Int_t &nentries, Stat_t &firstentry, Stat_t &processed);
     virtual Int_t     GetReadEntry() {return fReadEntry;}
     virtual Int_t     LoadTree(Int_t entry);
     virtual void      Loop(Option_t *option="",Int_t nentries=1000000000, Int_t firstentry=0); // *MENU*
     virtual void      SetEstimate(Int_t nentries=10000);
     virtual void      SetMaxEntryLoop(Int_t maxev=1000000000) {fMaxEntryLoop = maxev;} // *MENU*
     virtual void      Show(Int_t entry=-1);

  The old TTree::GetEvent has been kept for compatibility. Its new definition is:
     Int_t     GetEvent(Int_t entry=0, Int_t getall=0) {return GetEntry(entry,getall);}
  We STRONGLY recommend our users to edit their code to replace
     TTree::GetEvent by TTree::GetEntry.


- Several changes in class TMath:
  ==============================
  TMath::LnGamma moved from private to public.
  bug fix in TMath::Nint.
  TMath::Gaus returns the value of a gaussian normalized to 1.


- Bug fixed in TEllipse::Paint (thanks Bryce Moffat).

- class TGaxis modified to support the new option CenterTitle.


- modification in TPad in WIN32 specific code when creating
  a new text or Pavelabel with the graphics editor.
  The old version was creating a temporary variable "TPad *p" that could clash
  with an existing user variable with the same name.
  (thanks Nick van Eijndhoven)

- Protection in TTreeViewer::ExecuteDraw in case of long selection
  expressions. Thanks Walter F.J. Mueller" <mueller@axp602.gsi.de>

- A few fixes in TPolyMarker3D (X3D case )

- Inconsistency in TSPHE::Streamer fixed (thanks Rutger van der Eijk)
  A TSPHE stored in a ROOT file isn't correctly retrieved from the file.
  This results in not drawing the TSPHE.
  Caused by:
  The reason for not drawing the TSPHE is that fNz isn't set by the streamer
  function (which causes TSPHE::Paint(...) to return before 'drawing' anything).

- Protection added in TBranch::SetAddress. This functions resets the
  internal state variable fReadEntry. damir Buskulic reported
  an example where he was doing:
    branch->GetEvent(2)
    branch->setAddress(new address)
    branch->GetEvent(2); //same event as before
  In this case the new event was not restored.

- Protection added in TBranchClones constructor in case a TClonesArray
  references a class with an unknown data type.

- Philippe Canal adds new functionality in TLeaf::GetLeafCounter.
  A multi-dimensionnal array notation can be specified in TTree::Draw.

- A very nasty bug fixed in function X3D function DrawSegments.
  The old test:
   if(remainder)
      XDrawSegments(display, win, gc, &segs[index], remainder);
  has been replaced by:
   if(remainder > 0)
      XDrawSegments(display, win, gc, &segs[index], remainder);
  Drawing a TPolyMarker3D with only two points was generating a case
  with remainder = -1.
//
// 12/05/1999  16.23.14  by  Fons Rademakers
//
- TTabCom: .class layout was changed -> fixed parsing.

- GButton: handle correctly "crossing events" over buttons with a
  pressed mouse button. Reported by Glen Salo.

- TString: fix Chop() in case of empty string.
//
// 10/05/1999  17.29.14  by  Fons Rademakers
//
- 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, e.g.:

     class stl1 : public TObject {

     typedef vector<TObjString*> Vec;  //example of typedef (not required)

     private:
        string              fStr;
        vector<TString>     fSVec;
        Vec                 fSOVec;
        vector<Float_t>     fFVec;
        list<TNamed>        fNList;
        ...
     };

- rootcint: correct Streamer now for multi-dimensional arrays, e.g:
     class aap : public TObject {
     private:
        TNamed   fName[2][3];
        ...
     };

- New CINT 5.14.1 and 5.14.2:
  5.14.1  30 Apr 1999
  1078, -Q quiet option for cint not to print prompt.
  PHIL0, ROOT class comment off of Dictionary
  1079, G__display_proto() display also base class member function
  1080, char *s; s->Data() error detection
  1081, G__scrupto() crash prevention
  1082, void*& argument to compiled function, bug fix

  5.14.2  4 May 1999
  1083, const data member in class handled as static const
  1084, non-const static data member initialization in class def, warning
  1085, 'class' command displays class/struct/union/namespace
  -   , G__dasm() uninitialized instruction protection
  1086, G__EOFfgetc() does not exit, call G__genericerror instead.
  1087, class A { }  missing ';' error detection
  -   , G__calc_internal() for not rewinding dictionary
  1088, reference member dictionary generation allowed
  1089, automatic variable , warning -> error
  1090, -I,envvar option
  1091, ROOT macro static variable prohibited
  1092, (a+b.data()).data() bug fix
  1093, A *p= new A; bug fix
  1094, undo rewind implementation
 x1095, compiled class redeclaration, object deletion order
  1096, T b; T a=b; precompiled class bytecode bug fix
  -   , G__assign_error message
//
// 10/05/1999  13.13.41  by  Valery Fine(fine@mail.cern.ch)
//
- TString:  fix in ReplaceAll
//
// 30/04/1999  12.32.15  by  Fons Rademakers
//
- rootcint: handle correclty pathnames in dictionary file name, e.g.:
    rootcint -f /tmp/aapDict.cxx -c Aap.h
  works now correctly.

- TMath: fixed Nint(Float_t) and Nint(Double_t) for negative values.

- TApplication: now check if TT fonts can be found in Root.TTFontPath
  before trying to load the TTF libs. Before only the existence of
  $ROOTSYS/ttf/fonts was checked.

- New CINT 5.13.98:
  5.13.98 24 Apr 1999 ,  1073 disabled
  -   , G__pp_undef() #undef 'g' command bug fix
  -   , 1062, 1063 implemented but turned off by macro defined in G__ci.h
  1073, EXPERIMENTAL! class object instantiation in bytecode function
  1074, Api.cxx delete interpreted object
  1075, G__Lderived declared if only necessary
  -   , G__more_pause() COLUMN enhancement
  1076, function overloading and class inheritance scan order changed, err det
  1077, class to fundamental type conv in func arg, bug fix
//
// 29/04/1999  18.25.40  by  Fons Rademakers
//
- TMap: provide GetName() in the TAssoc helper class. This GetName()
  returns the name of the key. This fixes TMap::FindObject(const char*).
  Exported TAssoc to the interpreter.

- TTabCom: make enum EContext_t public. Some compilers don't like a private
  enum as return type (even if they are private them selves). Renamed
  resource TabCom.fignore -> TabCom.FileIgnore and added example in .rootrc.

- Getline: fix in putenv of the LINES and COLUMNS variables.

- Makefile.sgi64egcs: added flag -DIRIX64 to CXXFLAGS.
//
// 28/04/1999  13.08.51  by  Fons Rademakers
//
- TSystem: fix in DirName(). When path is /tmp it returns correctly /.

- TClass: fixed GetListOfAllPublicMethods(). Don't return any duplicates.

- TTabCom: use tmpnam() to get unique temp files and don't use anymore
  the templated error printing function.

- Make-macros: fixed typo: METAADS -> METADS.
//
// 27/04/1999  19.10.21  by  Fons Rademakers
//
- 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

  Also, something like gWhatever->Func([TAB] will print the appropriate
  list of prototypes.

  This class is used via a hook function by the Getline package and it
  is activated by the interactive application class TRint.

  It is an large piece of code (+/- 2000 lines). Thanks Christian.

- Getline: several new features provided by Christian Lacunza.
     M-F/M-B : Move cursor forward/backward one word.
     M-D     : Delete the word under the cursor.
     ^SPC    : Set mark.
     ^W      : Kill from mark to point.
     ^X      : Exchange mark and point.

- TClass: two new methods to get all public methods and members of a
  class (including its base classes).
     TList        *GetListOfAllPublicMethods();
     TList        *GetListOfAllPublicDataMembers();

- TCanvas: small fix concerning popdown of tooltips (again). Now it really
  seems to be ok.

- pause: delete correctly temp files even when G__process_cmd is recursively.

//
// 26/04/1999  16.50.59  by  Rene Brun
//
- ==========>>>>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.

  This change of terminology has implied massive editing in the source code.
  All terms "event" have been replaced by "entry"

- 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.
//
// 26/04/1999  12.26.50  by  Fons Rademakers
//
- TMapFile: in method Add() the name argument now overrides the objects
  given name.

- Globals and Makefiles: for aCC disable warning 823 (warning about cpp
  concatenation can be ignored).

- rootcint and TBuffer: can now generate Streamer()'s containing a byte
  count. This complements the default byte count facility for pointers to
  objects. The byte count streamer are generated for those classes that
  have the + option specified in their #pragma line. For the time being
  this option is not the default. Example:

      #pragma link C++ class AliEvent+;

   The Streamer() in that case looks something like this:

   UInt_t R__s, R__c;
   if (R__b.IsReading()) {
      Version_t R__v = R__b.ReadVersion(&R__s, &R__c); if (R__v) { }
      ...
      ...
      R__b.CheckByteCount(R__s, R__c, Noot::IsA());
   } else {
      R__c = R__b.WriteVersion(Noot::IsA(), kTRUE);
      ...
      ...
      R__b.SetByteCount(R__c, kTRUE);
   }

  In the writing part we see that WriteVersion() returns the offset where
  in the output stream the byte count should be placed (just before the
  version number). SetByteCount() writes the byte count at the reserved
  location. In the read part ReadVersion() returns the offset of the
  current position in the input buffer (R__s) and the expected byte count
  (R__c). After reading all data members CheckByteCount() is called to
  check if the current input buffer position is where the start and byte
  count expect it to be. If not an error is printed and the input buffer
  is positioned according to the byte count. This allows the system to
  correctly read the next object in the stream.

  The byte count version of the Streamer() can read files generated by the
  standard (non byte count) Streamer(). Also, a standard Streamer() can
  read files produced with a byte count Streamer(). This allows total
  flexibility.

- CINT (Api, pause, newlink, var): several mods in CINT passed to Masa.
//
// 24/04/1999  23.15.57  by  Fons Rademakers
//
- TString: fix in EndsWith().

- rootcint: remove multiple reference to user's header file from dictionary.
  In this case headers that are not protected against multiple inclusion
  don't break dictionary compilation.

- ==========>>IMPORTANT NEW FEATURE<<=============
  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. This feature works for all objects written via a pointer,
  see for example this write part of a streamer:

   if (R__b.IsReading()) {
      Version_t R__v = R__b.ReadVersion(); if (R__v) { }
      TObject::Streamer(R__b);
      R__b >> fNoot1;             // byte count is checked
      fNoot2.Streamer(R__b);      // no byte count
   } else {
      R__b.WriteVersion(Aap::IsA());
      TObject::Streamer(R__b);
      R__b << fNoot1;             // bytecount written via WriteObject()
      fNoot2.Streamer(R__b);      // no byte count
   }

  The byte count facility adds an overhead of 4 bytes per object.
  Of course this feature does not break backwards compatibility, i.e. all files
  generated without byte count can still be read with this new version.

  **** IMPORTANT NOTICE ****
  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.
  *****************

- TClass: Load() prints error when class is not found or could not be loaded.
//
// 23/04/1999  17.12.58  by  Fons Rademakers
//
- TCint: fixed memory leak in UpdateListOfGlobalFunctions().

- proofd: correct calling sequence of send() and recv() for
  Solaris.

- Globals: added special cases for SunOS 5.6 and IRIX 6.2.
  To compile for SunOS 5.6 add SUNOS56 to SEL flag of cmzlogon.kumac.
  To compile for IRIX 6.2  add IRIX62  to SEL flag of cmzlogon.kumac.

- TString: three new member functions:
   Bool_t  BeginsWith(const char *pat,    ECaseCompare cmp = kExact) const;
   Bool_t  BeginsWith(const TString& pat, ECaseCompare cmp = kExact) const;
   Bool_t  EndsWith(const char *pat,      ECaseCompare cmp = kExact) const;

- TRint: only treat command line arguments ending in ".root" as ROOT
  files that will be connected at startup. Before I only checked if
  the argument contained ".root", which obviously could clash with
  other argument strings.

- New CINT 5.13.97. Masa has been working like mad!
  Mods for version 5.13.96 and 5.13.97:
  5.13.96 11 Apr 1999
  1045, map.h load/unload bug fix G__tagdefining reset in scrupto
  1046, struct.c map.h reloading error fixed
  1047, tmplt.c search for typedef for default template parameter
  1048, pause.c 'class vector<int,allocator<int> >' bug fix
  -   , G__overloadopr() buffer length
  -   , HP-UX aCC makecint.c newlink.c modification for include trick
  -   , include > tmp redirection bug fix
  1049, TString* a("abc") syntax checking
  1050, (string)??? error check
  1051, #include<stdio.h>
  1052, typedef new bug fix
  1053, G__shl_load() G__setup_tagtable order change
  1054, namespace compilation
  1055, Internal error: G__type2string() ??? removed

  5.13.97 18 Apr 1999
  -   , 1006 side effect fix
  Scott Snyder's contribution
  -   , KCC warning removed
  1056, A<int, int>  space in template argument bug fix
  1057, namespace foo{class X{};}struct bar{using namespace foo;class Y{X x;};};
  1058, initialization of G__using_namespace member
  1059, Looking up enum in namespace
  1060, using namespace directives in global scope
 ?1061, spaces in macro arguments (8)
 -1062, imporovements for 'variable' macros,  not implemented completely (9)
 -1063, More CRLF problems, not implemented yet , (10)
  1064, Parsing problem of A::B & X() {}
  1065, (c1+c2).disp() bug fix
  1066, G__clearfilebusy()
  1067, security_recover
  1068, return mem=local;
  1069, f(1)[2] bug fix
  1070, int a[10]; *a=3; bug fix
  1071, delete (float*)l; bug fix
//
// 23/04/1999  08.33.32  by  Rene Brun
//
- Protect TTree::Draw when no entries in the Tree or no entries
  in the generated histogram.

- Add Warnings in TTree::Branch and TBranchClones constructor in case
  of a data member that cannot be processed in split mode.

- Function TMath::LnGamma promoted from private to public.

- Modify $kumacs/globals to add the compiler option -DSGI_REL=62
  for SGI KAI compiler. Without this option, rootd cannot be compiled.

- Minor mods in TParticlePDG and TDatabasePDG (Pasha Murat).
//
// 22/04/1999  22.13.54  by  Fons Rademakers
//
- TMapFile: make sure that the TClass object that can be created by
  a call to TObject::ClassName() is allocated on the heap and not
  in shared memory.
//
// 21/04/1999  20.00.43  by  Fons Rademakers
//
- CINT: import stl and prec_stl directories in CMZ. These directories
  needed for STL support are now part of the distribution.

- Getline: change the LINES and COLUMNS shell environment variables
  after the term window has been resized.

- TCanvas: re-applied the fix made 10/03/1999 19.36.02 to properly
  pop-down tooltips when the mouse leaves the canvas.

- TRint: call TCint::RewindDictionary() to clean up partially executed macro
  environment in case user hits ctrl-c in middle of macro.

- TUnixSystem: call TCint::RewindDictionary() to clean up partially
  executed macro in case of a segv, bus error, illegal instruction or
  floating exception. Also cleanup command line input buffer in these cases
  so that hitting return will not cause the same buggy macro to re-execute.
  This should considerably reduce the number of times you will have to
  leave and re-start root after a macro error.
//
// 19/04/1999  18.38.14  by  Fons Rademakers
//
- THashTable: fix in Rehash() in case the gObjectTable is not used don't
  check validity of pointers.

- TDirectory: fkey and fList are now initialized with THashLists(100,4).
  Previously auto rehash level of 1 was used, but THashList sets this to 0
  if level < 2.
//
// 19/04/1999  09.23.32  by  Rene Brun
//
- Import changes by Valery in the G3D classes. These changes include:
   - a fix in TPARA (mismatch degress/radians)
   - an additional test when computing the rangeView parameter in all classes.

- Modification by Pasha Murat in TDataBasePDG. Variable cleaner must
  be declared static.
//
// 16/04/1999  17.51.45  by  Fons Rademakers
//
- TFile, TNetFile, TRFIOFile: changed the signature of Flush() (not const
  anymore. Also the protected SysXxxx() methods are not const anymore.

- TRFIOFile: fixed writting case (could only read before). Also optimized
  the number of rfio_lseek() calls.

- TKey: delete TFree object whose gap exactly matches a new key. Previousely
  this TFree was leaked.

- TObject: in Write(.., kOverwrite) mode delete the overwritten TKey.
  Previously this key was leaked.

- TDirectory, TFile: fixed potential TKey leak.

- rootcint: put a clearer message in case a custom Streamer() is assumed.

- Makefile.linuxegcs: use g77 instead of fort77.
//
//________________________________________________________________________
//
//::>          VERSION  2.22/00   09/04/99 18.10.52
//
//
// 09/04/1999  18.08.35  by  Rene Brun
//
- g2root modified to correctly convert shapes TRAP and PARA. In the previous
  version, angles were left in radians instead of being converted to degrees.
  (thanks fJean-Pierre Ernenwein for reporting)

- Thanks to Yasuhiro SHIRASAKI for reporting a small problem in h2root.
  In case of 2-d histograms, under/overflow bins were not converted
  from hbook to root.

- Thanks to Chris Jillings for reporting a problem when an interpreted
  function is referenced by multiple TF1. The bug was in a CINT function
  called by the Root class TMethodCall called by TF1.

- Several minor changes and additions in classes TLorenztVector, TVector2
  and TVector3.

- Change TGX11 to authorize up to 1000 colors (instead of 256).

- Optimisation in TROOT. The list of colors is now a TObjArray instead
  of a TList. This speedups considerably applications defining/managing
  their own color palette. TROOT::GetColor is much faster.

- Change in BASE1-LinkDef to export global gErrorIgnoreLevel. This variable
  is now visible from the interpreter and can be used to set the Error level.

- Thanks to Valery Fine for reporting a mismatch in the class TCONS.
  There was a parameter inversion in the constructor.

- Change all DrawCopy functions to return a pointer to the new object
  created by this function. The functions affected are:

    class TF1
         virtual TF1     *DrawCopy(Option_t *option="");
    class TF2
         virtual TF1     *DrawCopy(Option_t *option="");
    class TH1, TH1C,S,F,D
          virtual TH1    *DrawCopy(Option_t *option="");
          virtual TH1    *DrawCopy(Option_t *option="");
          virtual TH1    *DrawCopy(Option_t *option="");
          virtual TH1    *DrawCopy(Option_t *option="");
          virtual TH1    *DrawCopy(Option_t *option="");
    class TH2C,S,F,D
         virtual TH1    *DrawCopy(Option_t *option="");
         virtual TH1    *DrawCopy(Option_t *option="");
         virtual TH1    *DrawCopy(Option_t *option="");
         virtual TH1    *DrawCopy(Option_t *option="");
    class TPROFILE
          virtual TH1    *DrawCopy(Option_t *option="");
  Note that the return type is always the base class. You must cast
  to the real type.

- In classes TAttFill, TAttLine, TAttText, TAttMarker, TAttPad a semi-colon
  has been added as a terminator string when invoking the attribute canvas
  via the interpreter. This automatically removes a print generated by CINT
  when these commands were invoked. (Thanks Christian Lacunza).

- Members fSelected and fSelectedPad initialized in the TCanvas constructor.
  (thanks Pasha Murat for reporting).

- Remove print statement in TNode constructor printing a message every 1000
  invokations.

- Changes in TH1::FillN to take into account variable bin size histograms.

- In TClass::GetMenuItems, add a protection in case a pointer to a baseclass
  is null (Valery).

- in TTree::Draw, the fEstimate parameter is automatically set to the number
  of entries in the tree if this number is smaller than 100000.
  The previous default value was always 10000.

- in TTree::GetEvent, return when the event is >= fEntries.
  (thanks for reporting this subtle case).

- in TLeafI::Import add a protection in case one element in a TClonesArray
  has a null pointer. Also TLeafC, TLeafS, TLeafF and TLeafD have the same
  protection. Thanks Thomas Hadig for reporting.

- Thanks Damir Buskulic for providing the makefile for LinuxPPC.
//
// 29/03/1999  20.28.35  by  Fons Rademakers
//
- getline: fixed problem with history file being cleared after 100
  commands.

- Updated a number of Makefile's to correctly build the fortran based
  conversion tools h2root and g2root.

- Install: now also build rootd, proofd and proofserv.

- TMonitor: fix case of Select() with timeout. Remove timer from
  timer list after timeout (one shot only timer).

- TObject: in Delete() call gInterpreter->DeleteGlobal(this); to
  tell CINT that object cannot be used anymore.

- Rtypes.h and rootcint: mods by Stefan Kluth to handle templated
  classes. This is an important first step to full template and STL
  support. Thanks Stefan.


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.