# ROOT Version 2.20 Release Notes

    //________________________________________________________________________
    //
    //::>          VERSION  2.20/00   27/11/98 15.33.28
    //
    //
    // 26/11/1998  16.51.11  by  Rene Brun
    //
    - Implement ZOOM on axis. Implement TAxis::ExecuteEvent.
      To zoom along an axis, click with the left mouse button at the position
      where you want to start zooming and release the button where you
      want to end zooming.
      If the button is released outside the axis range, unzooming is applied
      in the corresponding proportions.
      Note that the mouse may be released outside the pad or even canvas range
      if one wants to unzoom by a large factor.
      Zoom is effective for all kind of plots in 1, 2 or 3-D.

    - A simple modification in TDirectory::ReadKeys adding IMPORTANT functionality
      to Root in general (thanks Philippe Canal for the suggestion).
      It is interesting to call this function in the following situation.
      Assume another process1 is connecting this directory in Update mode
        -Process1 is adding/updating objects in this directory
        -You want to see the latest status from process1.
      Example Process1:
        obj1.Write();
        obj2.Write();
        gDirectory->SaveSelf();

      Example Process2
        gDirectory->ReadKeys();
        obj1->Draw();

      This is an efficient way (without opening/closing files) to view
      the latest updates of a file being modified by another process
      as it is typically the case in a data acquisition system.

    - Protect TH1::Draw when trying to draw a temporary histogram already
      existing in the pad. This solves problems like:
        ntuple->Draw("px"); // this generates temporary histogram htemp
        htemp->Draw(); // in old code, this statement was deleting htemp

    - Fix a problem in TTree::DefinedVariable affecting the behaviour
      of TTree::Draw when mixing queries involving arrays with indices
      smaller than 10 and indices greater than 10.
      (thanks Ludger Janauschek for reporting this problem).

    - Protect TNtuple::Streamer when reading very old Root files (written
       before January 97). Old TNtuples had one single branch.
    //
    // 23/11/1998  18.04.39  by  Fons Rademakers
    //
    - TTF fonts fully implemented. The TTF handling part in ROOT
      is implemented in class TGX11TTF which inherits from TGX11
      and only overrides a few text routines (like DrawText()).
      The loading of the FreeType $ROOTSYS/ttf/libttf.so and the ROOT
      libGX11TTF.so is only triggered when you've installed the
      TTF package in you $ROOTSYS directory. Installing this
      package will create the sub-directory ttf/ containing the lib,
      include and fonts directories. The binary ttf package can be
      downloaded for each platform from the ROOT web site. Of course
      source is also available.

      The FreeType libttf.so "only" contains functions to create a
      pixmap (for anti-aliasing) or bitmap of a certain character,
      for a certain font at a certain size. In the ROOT TGX11TTF class
      all higher level logic, like font caching, character caching,
      string composition, background transparency, color allocation
      for smoothing, etc., etc. is handled.
    //
    // 22/11/1998  16.56.54  by  Rene Brun
    //
    - Implement the following new functions in class TMath:
        Double_t TMath::Erf(Double_t x)
        Double_t TMath::Erfc(Double_t x)
        Double_t TMath::Gamma(Double_t z)
        Double_t TMath::Gamma(Double_t a,Double_t x)
        Double_t TMath::GamCf(Double_t a,Double_t x)
        Double_t TMath::GamSer(Double_t a,Double_t x)
        Double_t TMath::LnGamma(Double_t z)
        Double_t TMath::Prob(Double_t chi2,Int_t ndf)

      These new functions have been adapted to the Root coding style
      from original functions implemented by Nick Van Eijndhoven based
      on the book "Numerical recipees". See class TMath for more details.

    - Correct comments in TH1::SetBins (thanks Philippe Kanal).

    - Fix a problem in TChain::Merge in case the TTree does not reference
      any objects, but only simple structures as for example in TTrees
      generated by h2root (thanks Patrice Lebrun for reporting).

    - Add SGI/EGCS and ALPHA/EGCS in $kumacs/globals and test/Makefile.
      (thanks to Pasha Murat).
    //
    // 14/11/1998  18.27.14  by  Rene Brun
    //
    - Changes in TCanvas::Streamer to support write/read of a canvas
      from a Root file when running in batch mode.
      The Canvas parameters were not correcly saved in the file due to a
      side-effect of TCanvas::GetTopX that modifies the members
      fWindowWidth and fWindowHeight.
      Also fBatch must be set equal to gROOT->IsBatch in Streamer read mode.
    //
    // 13/11/1998  18.47.45  by  Fons Rademakers
    //
    - TGX11: fix in RequestString and RequestLocator to not turn off
      mouse motion and keyboard event. This caused the canvas to stop
      handling mouse motion events after using the editor to edit
      text strings.

    - TPad: fix in PaintBox when drawing pattern backgrounds. Regression
      was introduced during implementation of transparency in the same
      routine.

    - TMatrix: in ResizeTo don't use ReAlloc that verifies previous size
      because in some cases we don't know any more the previous size
      (like after a small reduction in size when there is no realloc done).
    //
    // 12/11/1998  20.14.39  by  Fons Rademakers
    //
    - TRint: new method SetPrompt(). Using this method you can change
      the standard root[] prompt. Like:
      root [0] ((TRint*)gROOT->GetApplication())->SetPrompt("aap> ")
      aap>

    - TList: new method Remove(TobjLink lnk*). If the lnk is known objects
      can be removed without makeing a linear search first. This method
      was also added to THashList.

    - TCanvas: create a default TApplication object in case it does not
      yet exist at the time the first canvas is created. This guarantees
      that certain service performed by TApplication have been performed
      (like the allocation of the color table).
    //
    // 12/11/1998  13.52.35  by  Rene Brun
    //
    - Extend size of internal TMinuit arrays (dimension kMAXDIM increased to 100).

    - Modify $kumacs/vhtml macro.
      Add new macro $kumacs/vhtmldev generating automatically the html file
      describing the current Changelog.

    //
    // 10/11/1998  19.15.04  by  Fons Rademakers
    //
    - THashList: corrected a case where in Delete() and Clear() objects
      could be deleted twice. Involves also small change in THashTable
      and TList.

    - TDirectory: added some garbage collector clauses for extra protection
      during cleanup.

    - Started integration of TrueType library for X11. We use the TT render
      engine from http://www.freetype.org/. The TT renderer will be used via
      the class TGX11TTF. This class inherits from TGX11 and overrides only
      the TGX11 text render functions. This class will be in its own shared
      library. When this library is loaded it replaces the current gGXW (iff
      it points to a TGX11 object) with a pointer to a TGX11TTF object.
      From that moment on all fonts will be rendered using TT fonts. See
      here the beauty of OO, C++ and dynamic linking.

    - TGX11: made several text related method virtual. See above.

    - TGXW: added the method HasTTFonts(), returns kTRUE if TGX11TTF is
      loaded and active.

    - TAttText: add case for TT fonts.

    - TDataMember: create getter and setter interpreter call func environment
      only when needed and not in the ctor. Save a lot of space.

    - TRootGLViewer: handle expose event, like for TRootCanvas and
      TRootEmbeddedCanvas.

    - TClonesArray: cleanup TObjectTable when deleting or shrinking (i.e.
      recuperating space) a clones array. Before TObjecTable could contain
      invalid entries after the deletion of a clones array.
    //
    // 11/11/1998  17.11.49  by  Rene Brun
    //
    - Implement the following new functions in class TMath:
        TMath::Gaus(Double_t x, Double_t mean=0, Double_t sigma=1)
        TMath::Landau(Double_t x, Double_t mean=0, Double_t sigma=1)
      The Landau function is a C++ implementation of the function DENLAN
      in CERNLIB (G110).

    - Implement new function TRandom::Landau.
      This function returns a random number following a Landau distribution.

    - new keywords "landau", "xlandau", "ylandau", "xylandau" in TFormula.
      One can create functions using inline formula referencing these keywords.
      Example:
         TF1 f1("f1","landau",-5,25);
         f1.SetParameters(100,0,1);
         f1.Draw();

    - Modify TH1::Fit to automatically initialize parameters
      for a landau fit.
      Example:
         TH1F h1("h1","test landau",100,-5,25);
         h1.Fillrandom("f1");
         h1.Fit("landau");

    - New button "landau" in TFitPanel.

    - Modify tutorial hsum.C to show an example of TRandom::Landau.

    - Implement support for both Alpha/Unix CXX version 5 and 6 in
      $kumacs/globals and test/Makefile.

    - Fix a problem in TTreeFormula::GetNdata. When fNodes[i] < 0
       there is no need to compute a pointer to the leaf i.
       This problem was appearing in TTreeFormula when called
       by TTree::Scan. Thanks to Mike Beddo for reporting.

    - In TCutG::SavePrimitive, add a few more statements to the generated
      code when saving a TCutG:
        -Reference to the original Tree
        -Setting of the VarX and VarY expressions.
    //
    // 10/11/1998  18.16.18  by  Rene Brun
    //
    - Modify TH1::FitSlicesY and TH1::FitSlicesZ to save the initial
      parameters settings and reinitialize the fitting function with
      the saved parameters before each new slice fit.

    - Modify TH1::Build to not delete a previous histogram with the same name
      as the histogram being created. The old histogram is simply removed
      from the list of objects in the current directory.
    //
    // 09/11/1998  18.46.02  by  Rene Brun
    //
    - Change most functions of TMinuit to be virtual. This gives the
      possibility to derive a class from TMinuit.

    - Merge with Valery's version and Fons's version.

    - Extensions in test suite "stress". stress tested on all machines.
      Implementation of new ROOTMARKS.

    - Optimization in TGaxis::PaintAxis. In case of log axis, the algorithm
      positioning the power of 10 exponent in case of logarithmic axis
      has been improved.

    - Mods in TH1::UseCurrentStyle. Additional attributes are taken into account.
      In particular, axis attributes.
    //
    // 08/11/1998  12.35.34  by  Rene Brun
    //
    - Some changes in data member declarations in classes TFile, TSlave
      TNetFile and TProof.
      Data members counting I/O transactions are now declared Double_t
      instead of UInt_t. This
      in the corresponding classes.
      Root server ROOTD also changed accordingly.
    //
    // 05/11/1998  18.57.57  by  Rene Brun
    //
    - Modify TClass::BuildRealData and TTree::Branch to set the Zombie
      flag for the temporary object created to build the dictionary.
      A user can test (IsZombie()) in the object destructor.

    - Modify program test/Event, adding a new static function Reset.
      This function is called by the stress program.

    - Update deck makemklinux in install directory (thanks Damir Buskulic).

    - Update $kumacs/global flags for Alpha/CXX. CXX version 6 is now the default.
      Same in test/Makefile.
    //
    // 05/11/1998  16.13.26  by  Rene Brun
    //
    - Add a new test program called "stress" in test directory.
      This program can be compiled with the native compiler or interpreted.
      To compile it, do:
           make stress
           stress  to run it
      To run with the interpreter, cd to $ROOTSYS/test
        Root > .x stress.cxx(100)
      The program stress is a collection of test programs executed sequentially
      and testing most of the facets of the Root system.
      The execution of stress ranges from a few tens of seconds on fast systems
      to a few minutes. The execution time is used as a benchmark.
      We expect to add more test programs to the stress test suite.

    - The introduction of "stress" has required changes in test/Makefile
      and test/MakefileWin32.

    - Fix a problem in TTree::Draw (AIX and SGI only).
      In case of a command like:  tree->Draw(">>eventlist","x,0")
      the internal variable varexp was not correctly initialized.

    - Due to a bug in VisualC++ for the mathematical operator pow
      replace all references to TMath::Power(x,2).
      This solves in particular a long standing problem in TH1::GetRMS
      under Windows.

    - In test program vmatrix, replace long by double in TMath::Power.
    //
    // 05/11/1998  15.09.36  by  Fons Rademakers
    //
    - TCanvas: GetWindowTopX() and GetWindowTopY() now return the exact
      position of the canvas on the screen. A TCanvas can now be restored
      on the same position as when it was saved.
    //
    // 04/11/1998  18.06.20  by  Rene Brun
    //
    - Fix a bug in TEventList::Add. The first time a new list was added to
      an existing list, the size fSize and the current number of elements fN
      were not set.

    - Add additional comments in the documentation of classes TCutG and
      TEventList explaining how to get a pointer to these objects.

    - Modify TH1::PaintTitle and TH1::PaintStat to use gStyle->GetTextFont()
      when drawing the title and stats TPaveText. The font 62 was hardwired.

    - Fix a problem in TFormula::Streamer (read part).
      The array fExpr was created with zero length in case fNoper=0.
      This case could appear when a TF1 object referencing an interpreted
      CINT function was saved into a file and read again. The effect
      was only visible later in the TFormula destructor and only under HP-UX 9.
    //
    // 04/11/1998  16.45.20  by  Fons Rademakers
    //
    - TGX11: fixed WriteGIF. Works now also on X servers with more than
      8 planes. Only the used colors in the image are put in the colormap
      (used to be the full colormap, therefore > 8 planes did not work).
      If there are more than 256 colors used in the image than we should
      use the GIFquantize() routine to reduce the colormap. The routine
      is there, only has to be interfaced. The routine ImgPickPalette()
      in X11_imgpickpalette() has been removed and replaced by
      TGX11::ImgPickPalette().
    //
    // 03/11/1998  08.40.24  by  Rene Brun
    //
    - Fix a precision problem in TLego.
      Instead of testing on 0, test on kEpsil. On Linux with gcc optimized,
      the side effect was to generate large Postscript files when the Lego/Surf
      options were used.
    //
    // 02/11/1998  18.20.17  by  Fons Rademakers
    //
    - TRootEmbeddedCanvas: forgot to update after changing TRootCanvas
      and TGX11. Handles now also expose events for X servers without
      backing store.

    - TPad: override SetFillStyle() to map style 0 to 4000 (transparancy).
      This allows setting of transparent mode via TAttFillDialog as can
      be done for non-pad boxes (like TPaves, etc.).
    //
    // 01/11/1998  18.56.47  by  Fons Rademakers
    //
    - TPad: implemented transparent pads. A pad is made transparent by
      setting its fill style (using SetFillStyle()) in the range 4000-4100.
      Where 4000 is fully transparent and 4100 fully opaque. All magic
      is done in the method PaintBox() using the new (private) methods
      CopyBackgroundPixmaps() and CopyBackgroundPixmap(). Transparent pads
      need to always be updated if anything in the canvas is changed
      or moved. This is handled in PaintModified().

    - TAttFill: new method IsTransparent(). Returns true is fill style is
      in the range 4000-4100.

    - TCanvas: fixed bug showing on X servers without backing store.
      After closing of a TCanvas the FeedBackMode() was not set false
      and therefore the X drawing mode in GX11 could remain in kInvert
      mode instead of being reset to kCopy. This results in a wrong
      refresh of the remaining canvases.

    - TRootCanvas: added in the Options menu the items "Move Opaque" and
      "Resize Opaque". Also corrected default setting of the check marks
      of some option menu items.
    //
    // 02/11/1998  10.14.28  by  Rene Brun
    //
    - Protection in TDirectory destructor when called from the TROOT destructor.

    - Minor change in TF1::Fit to call SET PRINT before SET ERR.
      When working in Quiet mode, no messages are printed.

    - Minor change in TFile::Write. Do not print anymore the message
           TFile Writing ...
      To get the message, set the global gDebug to 1.

    - Modify comments in TFormula constructor.
    //