# Releases notes for version 0.04

    +DECK,V0_04.
    *CMZ :  0.04/04 29/11/95  10.47.45  by  Rene Brun
    *-- Author :    Rene Brun   08/11/95
    //___________________________________________________________________________
    *
    //*::>          VERSION  0.04/04   29/11/95 10.47.45
    *
    //* 28/11/95  09.47.13  by  Rene Brun
    *
    - New directory Tutorials including all macros shown in the Web pages.

    - New macro $KUMACS/tutorials to export all macros T=MAC.

    - Mods in TRint::ProcessLine and cin_totext for special characters like |
      The OR symbol || can be used in selection expressions.

    - Change TFormula::Analyze to start numbering parameters at 0 instead of 1.
      New possibilities demonstrated in tutorial macro fillrandom.mac.

    - Change logic of TROOT::Reset. When a TDynamic is deleted, objects pointed
      by this dynamic may already have been deleted (in several pads for example).

    - Mods in H1 to avoid drawing twice.

    - THN::Draw copies the relevant attributes to its generated objects (1-D,
      2-D or 3-D). Option SAME operational.

    - new member function TNode::SetLineColor.

    - Protections introduced in several classes, in particular in the destructors
      to delete in the right order objects generated by THIS.
    *
    //* 27/11/95  18.49.39  by  Nenad Buncic
    *
    - New member function THtml::PackSignature. This will avoid multiple spaces
      in member function signature.

    - Small bug fixed in THtml::Convert, thanks to Fons.
    *
    //* 24/11/95  14.42.15  by  Nenad Buncic
    *
    - Change in the calling secvence for the THtml::Class2Html member function.
      Parametar Char_t *filename removed.

    - Instead of THtml::Make, from now we have a four different functions:
          - THtml::MakeAll ()
          - THtml::MakeClass (Char_t *className)
          - THtml::MakeIndex ()
          - THtml::MakeTree (Char_t *className)

    - Added new data member - const Char_t *fHtmlOutputDir

    - Improvements in the THtml::Make function. Aditional protection added.

    - THtml::GetHtmlFileName takes care of source files availability and
      this implies that other users can use THtml::Make without any
      restrictions.
      By default all unrecognised classes will be set to point to the URL
      specified by an environment variable Root.Html.Root. So far, valid
      ROOT URL is:

          Root.Html.Root: http://root.cern.ch/root/html

    - Thanks to Christian Bormann and Gunter Roland few bugs are fixed in
      the THtml class.

    *
    //* 23/11/95  08.35.22  by  Rene Brun
    *
    - Fix a problem in DICT in case data members are defined after
      member functions and the access mode changes to private or protected.

    - Implement option same for 2-D and 3-D plots in THN::Draw.
      This function recognizes now the THN attributes when plotting polymarkers.
      Example:
        Root > hn.SetMarkerColor(1)
        Root > hn.Draw(x:y)
        Root > hn.SetMarkerColor(2)
        Root > hn.Draw(x:y,x*x+y*y<1,same)
        Root > hn.SetMarkerColor(4)
        Root > hn.Draw(x:y,x*x+y*y<0.5,same)

    - Fix several problems in the destructors of TGeometry, TMaterial, TNode and TShape.
      Objects were not removed from the possible supporting lists.

    - Protection in TList::FindLink in case one has to iterate over deleted objects.

    - Introduce new TGlobal gHtml in TROOT constructor.
    *
    //* 22/11/95  16.42.31  by  Nenad Buncic
    *
    - Added global gHtml in $Html.
      gHtml is a dynamic created in TRint.

    - THtml::WriteHtmlFooter supports user defined home page. Link must
      be defined in .rootrc file (see TEnv).

      Example:
         Root.Html.HomePage: http://hpna49-1.cern.ch/user/Clever
    *
    *
    //* 22/11/95  09.02.58  by  Rene Brun
    *
    - Merge all TH1 files hfit, hmath, hpaint, htable with h1.

    - Optimize the computation of errors for profile histograms in case
      the number of entries in one bin is 1 or the sum of weights in one bin
      is less than 1.

    - Remove spurious backslashes in TClass::EscapeChars(Text_t *text).

    *
    //* 21/11/95  20.40.43  by  Fons Rademakers
    *
    - Added comments for all classes in CONT.

    - Class TObjArray: AddLast() behaves as expected, adding object to last
      empty slot, not to last slot in array.
    *
    *
    //* 21/11/95  17.53.51  by  Nenad Buncic
    *
    - Bug fixed in the member function THtml::Class2Html. Data member names
      containing a characters other than a valid C++ name characters (i.e
      fRmin[3] or **fDir), are treated correctly.

    - Improvements in the THtml::ExpandKeywords member function. From now
      on arrays are recognized in the class data members. It means that if
      we have something like a fNames[i].Sizeof() there will be no problems
      any more. A HTML link will be set correctly.

    - Solved problem with the 'ambiguous method' warrning.

    //___________________________________________________________________________
    *
    //*::>          VERSION  0.04/03   21/11/95 09.38.00
    *
    //* 21/11/95  09.25.16  by  Nenad Buncic
    *
    - So far, THtml class have been described very shortly (in fact, not at all).
      Now, when work is almost done, here is the few words about class and usage.

     Configuration:
     -------------

       The output directory could be specified using the Root.Html.OutputDir
     environment variable (default value: "html/"). Also it is necessary to
     define Root.Html.SourceDir to point to directories containing .C and .h
     files (see: TEnv).

           Examples:
                    Root.Html.OutputDir: html
                    Root.Html.SourceDir: src:include:.:/usr/user/source

       During the conversion, THtml will look for the certain number of
     user defined strings, i.e. author's name, copyright note, etc.
     This could be defined with following environment variables:

           Root.Html.Author        (default: "//*-- Author :")
           Root.Html.LastUpdate    (default: "//*CMZ :")
           Root.Html.Copyright     (default: "// Copyright")

     Coding rules:
     ------------

       A class description block, which must be placed before the first
     member function, have a following form:

           //_____________________________________________________________
           // A description of the class starts with the line above, and
           // will take a place here !
           //

       The environment variable Root.Html.Description (see: TEnv) contents
     a delimiter string (default value: //_________________). Also a plain
     plain C++ comments are supported  (it means that delimiter line could
     be something like this //////////////////////////////// as well).

       Everything until the first non-commented line is considered as a
     valid class description block.

       A member function description block starts immediately after '{'
     and looks like this:

           void TWorld::HelloWorldFunc (Char_t *text)
           {
           // This will be a short description of the
           // TWorld member function

              helloWorld.Print(text);
           }

       Like in a class description block, everything until the first
     non-commented line is considered as a valid member function
     description block.

     Environment variables:
     ---------------------

       Root.Html.OutputDir     (default: "html/")
       Root.Html.SourceDir     (default: "src/")

       Root.Html.Author        (default: "//*-- Author :")
       Root.Html.LastUpdate    (default: "//*CMZ :")
       Root.Html.Copyright     (default: "// Copyright")
       Root.Html.Description   (default: "//____________________")

     Usage:
     -----

         Root> THtml html               // creates object 'html'
         Root> html.Make                // invoke make for all classes

               or

         Root> html.Make(TClass)        // create HTML files for that class only

               or

         Root> html.Make(index)         // creates index files only

    *
    //* 20/11/95  19.30.06  by  Fons Rademakers
    *
    - Added comments for all classes in BASE.

    - Changed the first letter of all exported names of the getline file to
      uppercase. This to avoid conflicts with the version in packlib.

    - Class TROOT: new resource defined: Root.ObjectStat. By default it is
      turned on and causes the TObjectTable to be filled. Setting
      Root.ObjectStat to false turns off the recording of objects in the
      object table.

    - Class TSystem: changed UnLoad() to Unload().

    - Class TUnixSystem: changed UnLoad() to Unload() and UnixDynUnLoad()
      to UnixDynUnload(). Don't automatically add .sl to names not ending
      in .sl. Only add .sl when there is no . in the name.

    - New compile flag: NOSTATS. Setting NOSTATS on the compiler directive
      (CC -DNOSTATS -c ....) removes completely all memory checking and
      memory statistic gathering from TStorage and remove the TObjectTable
      call from the TObject ctor and dtor. This flag can also be set in $Rconfig.

    - Class MBaseWindow: fix in Show() member. Shows now also iconified windows
      (i.e. pops the windows up).

    - Clas TMenuWindow: added protection to not create a menubar twice when
      calling Show() again.
    //___________________________________________________________________________
    *
    //*::>          VERSION  0.04/02   17/11/95 18.53.56
    *
    *
    //* 17/11/95  18.53.56  by  Rene Brun
    *
    - TROOT::Reset(dynamic) is a new function to reset all dynamics
      starting (possibly excluding) dynamic itself.
      For example :
        Root > gROOT.Reset(wh)
        will reset all dynamics and objects pointed by dynamics created
        after the object named wh. If wh is teh name of a canvas, the canvas
        will be correctly closed.

    - Update the TWbox and TNamed destructors to also reset any possible
      dynamic object pointing to the destructed object.

    - Documented many classes (class description).
      See the wonderful list of classes on the Web.
    *
    //* 17/11/95  00.54.26  by  Fons Rademakers
    *
    - New class TGuiFactory: this is an ABC that provides a protocol for the
      concrete GUI factory classes. A GUI factory is an object that produces
      GUI components. The style (Motif, Mac, Windows) of components depends
      on the concrete factory class. Based on the Factory pattern.

    - New class TMotifGuiFactory: this class creates Motif GUI components.

    - New class TCanvasImp: ABC defining a GUI system independent canvas window.
      Based on the Bridge pattern.

    - New class TMotifCanvas: concrete class inheriting from TCanvasImp.
      Creates Motif version of canvas window.

    - New class TBrowserImp: ABC defining a GUI system independent browser window.

    - New class TMotifBrowser: concrete class inheriting from TBrowserImp.
      Creates Motif version of browser window.

    - Class TROOT: create a TMotifGuiFactory (or TMacGuiFactory).

    - Class TCanvas: new members IsBatch() and SetBatch(). Test batch drawing
      mode and set batch mode. Introduced the IsBatch() test in a number of
      classes.

    - Class TF1, TF2, TF3: introduced the typedef:
         typedef Double_t (TF1::*Function_t)(Double_t *,Double_t *);
      and changed a number of calling sequences to use Function_t as argument.

    - Class TObject: introduced new system flag: kZombie. New member functions:
      MakeZombie() and IsZombie(). MakeZombie() can be used in ctor's in case
      the ctor failed in one way or another. E.g.: TFile f(bb.root), where
      bb.root does not exist. In this case f will be marked as a zombie object.
      Using IsZombie() one can test the state of the object and delete it when
      it is a zombie. Efficient exception handling should make this obsolete.

    - Class TFile: in case the file to be opened does not exist the object
      is marked as a zombie object.
    *
    //* 15/11/95  12.29.26  by  Rene Brun
    *
    - Implement new member function TROOT::FindObjectClassName(name).
      This function scans all the lists of ROOT objects, including global variables
      and dynamics for an object with name name.
      If successfull, it returns the name of the corresponding class.
      This function is used by the THtml parser.

    - Rename dynamic variables ROOT and GXW to gROOT and gGXW.

    - Implement two new member functions in TClass:
      GetDataMember(name) returns a pointer to the data member object with name.
      GetBaseDataMember(name) returns a pointer to the class itself or one of
      its base classes containing data member name.

    - Remove opening of file2.root in TRint::TRint
      Connect this file in your rintlogon.mac if you wish.
    *
    //*::>          VERSION  0.04/01   13/11/95 18.23.08
    *
    //* 13/11/95  18.22.17  by  Rene Brun
    *
    - Fix several problems in DICT.
        With a declaration like  TString  &String() { return fString; }
        Dict generated:
            *(TString*)gUI[0] =p.tp->&String();
        In the corrected version, it is:
            *(TString*)gUI[0] =p.tp->String();

        Missing argument names caused problems. Fixed

        A statement like    const Int_t fData;
        was not correctly parsed by dict/readh.
        The data type returned was const instead of Int_t.

        A member function declared with a void generated wrong code. Fixed

    - Implement FillRandom for 1-D, 2-D and 3-D histograms. The new TH1::Fillrandom
      is totally rewritten. It is also faster. The new function invokes the
      new TH1::LocateBinary member function to perform a binary search of a value
      in a sorted array.

    - TFormula has been documented with new diagrams generated by Nicolas.
      These diagrams appear when browsing on the WEB the functions Analyze, EvalPar
      and Compile.

    - Instead of one function TFormula::Eval with two different signatures,
      a new function EvalPar has been implemented. As a consequence, Eval(x,y,z)
      may now be called with the missing parameters y and z.
      This change implied changes in the TH1, TF1, TF2 and THN classes.

    - In TH1::HTable, change the normalization factor from 50 to 500 for the
      number of points generated in one cell of a scatter plot.
    *
    //* 13/11/95  15.45.32  by  Fons Rademakers
    *
    - New class TObjString: this is a simple class inheriting from TObject
      which contains a single TString. This allows strings to be added to
      containers.

    - New class TMap: this class implements an associative array ((key,value)
      pairs) using a THashTable for efficient retrieval (therefore insertion
      order is not maintained). Both key and value must inherit from TObject.

    - Class TBrowser: uses a TMap in TBrowserNode to keep an association between
      the object's name and the object itself.
    *
    //* 09/11/95  22.40.35  by  Rene Brun
    *
    - Insert comments in many classes (H, G and Minuit)

    - Protect format in TH1::PaintStat in case of more than 1000000 entries.

    - Small mods in TClass::Draw. Do not erase functions in second inheritance.
      Change text color from black to blue.
    *
    //* 08/11/95  18.39.36  by  Rene Brun
    *
    - Correct bug in TPostScript::Text.
      A comment finishing with a backslash was destroying the next line !!!!!

    - Change in TPad::Clear. In case of PostScript issue a NewPage
      only when the currentpad is equal to the current canvas.
    *
    //*::>          VERSION  0.04/00   08/11/95 15.02.21
    *
    //* 08/11/95  08.07.14  by  Rene Brun
    *
    - Many small bug fixes:
      Drawing an histogram with 100 channels, only 99 channels shown.
      Problem in ROOT::GetType affecting the HTML class.
      PaveText OK again to ReadFile.

    - Fix bug in TRint::ProcessLine. Remove trailing blanks in command line.

    - Fix bug in TROOT::GetType(Text_t *name). If name="interface", then
      GetType was finding int as a valid type!

    - Inconsistency in several functions to superimpose on top of the existing
      picture. One must use now the option SAME and not simply S.

    - TH1::GetSum member function renamed to GetSumOfWeigths to avoid a clash
      with TArray::GetSum.

    - New function TH1::Eval(TF1 *f1, Option_t *option).
      Eval computes the value of the function f1 at the center of the histogram bins.
      If option "A" is specified, Eval add the function value to the current
      bin content.

    - Protections in several places when running in batch mode.

    - Canvas virtual size fixed to 712x950 for batch (used by Html).

    - Document nearly all histogram classes.

    - Mods in TH1::Fit. By default when a bin has a null error, the error is assumed
      to be equal to the function value for that bin.

    - Mods in TRint::AnalyzeLeft to authorize statements like
        THtml html
      as equivalent to:
        THtml html()

    - Fix problem in program dict. Change Uint_t, Ushort_t, Ulong_t to
                                          UInt_t, UShort_t, ULong_t
      (thanks to Christian Bormann).

    - Protected member functions are now kept by dict to generate the UI routines
      and the member functions definition.
    *
    //* 07/11/95  17.01.11  by  Fons Rademakers
    *
    - Class TClass: fixed bug in offset calculation for this in case of
      multiple inheritance.

    - Class TObject: added abstract Browse() method.

    - Class TROOT: added Browse() method. Added UpdateDisplay() method which
      updates all canvases and not only the current canvas.

    - New class TBrowser: browse the ROOT system. First version, many things
      still missing.

    - New patch WIDGETS: contains the Motif IconBox widget used by TBrowser.

    - Class TCanvas: fixed a number of problems related to having two canvases
      open at the same time (event handling and drawing got mixed up between
      the different canvases).
    *
    //* 02/11/95  12.11.02  by  Rene Brun
    *
    - Fix a serious problem with PostScript.
      Implement new member function NewPage. NewPage is called by TPad::Clear.
      With this change, it is now possible to have several consecutive pictures
      on the same PostScript file.

    - Implement New member function TClass::Draw.
      This new function draws the complete inheritance tree for a class,
      including multiple inheritance for the base classes.
      The list of data members and methods for each class is drawn.
      Overloaded functions are shown with a different color.

    - Change dimensions in $READH to reduce the size of the DICT executable module.

    - Minor changes in dict and drawtree.

    - Include copyright notice in several decks.
    *
    //* 01/11/95  15.31.37  by  Nenad Buncic
    *
    -  Found & fixed bug in TView::ExecuteRotateView().

    -  Changes in x3d. New include file 'X3DBuffer.h' which contains structures
    for data exchange between ROOT and x3d. This makes changes in following
    files:
                 PolyLine3D.h, PolyMarker3D.h, Shape.h, x3d.h
                 Pad.C, Node.C, H3.C

      Also, old put-object-in-center logic have been installed again. It seems
    like a last change in this part.
    *
    //* 27/10/95  18.56.18  by  Fons Rademakers
    *
    - Class TApplication: new static member CreateApplication() that creates
      a gTheApplication if it does not yet exist.

    - Class MBaseWindow: call TApplication::CreatApplication before trying to
      create a window. This ensures that a TApplication is active before
      opening the first Motif window.

    - Class RWindow: window positioning arguments are now respected.
    *
    //* 27/10/95  00.12.49  by  Fons Rademakers
    *
    - $Color: moved EColor enum into $Gtypes.

    - Class TMath: introduced Nint(). Nint() returns the nearest integer. When
      fraction is 0.5 it rounds to the nearest even number.

    - Class TView: when moving on top of a TView show the rotation cursor.
      Set correctly color and linestyle for rotating cube.

    - Class TH1 and TText: modified the move cursor in ExecuteEvent().

    - Class GXW: return correctly the window geometry (based on the window
      and not the double buffer window, which may be larger).

    - Class TRWindow: installed a resize action to track ConfigureNotify events
      on the scrolledwindow. When these events happens resize the canvas
      accordingly. Unless fAutoFit=kFALSE.
    *
    //* 25/10/95  12.01.24  by  Rene Brun
    *
    - New classes TH3 and TF3.
      TH3 is a 3-D histogram. It supports two constructors, one with fix bin sizes
      and the other with all axis with variable bin sizes.
      a TH3 object is filled with member function Fill3(x,y,z,w).
      TH3 has the derived classes TH3C,TH3S,TH3F,TH3D.
      All operations except graphics are supported on TH3 objects.
      The TF3 class is the 3-D formula implementation. It is used by TH3
      for fitting operations.

    - Implement logic to draw axis titles.
      Mods in TGaxis::PaintAxis
      New member functions SetXTitle, SetYTitle and SetZTitle in TH1 class.
      Example:
        Root > h101.SetXTitle(GeV/C)
        Root > h101.SetYTitle("Number of events per GeV")
        Root > h200.SetXTitle(GeV/C)
        Root > h200.SetYTitle("Rapidity")
        Root > h200.SetZTitle("Number of events per GeV")

    - New DECK,HMATH introduced in H directory.
      HMATH contains new member functions Add and Divide for the histogram classes.
      These member functions recompute the contents and the errors.
      If an histogram has an existing function, this function is ignored
      in the operation.
      In case of a division, it is recommended to invoke the existing function Sumw2
      before making the division if one wants to compute errors correctly.
      Example:
         h104.Sumw2
         h104.Divide(h101,h102)
      TH1::Add(TH1 *h1)   Add histogram h1 to this histogram
          this = this + h1
      TH1::Add(TH1 *h1, TH1 *h2, Float_t c1, Float_t c2)
         Replace contents of this histogram by the addition of h1 and h2
         this = c1*h1 + c2*h2
      TH1::Divide(TH1 *h1)   Divide this histogram by h1
         this = this/h1
      TH1::Divide(TH1 *h1, TH1 *h2, Float_t c1, Float_t c2, Option_t *option)
         Replace contents of this histogram by the division of h1 by h2*-*-*
         this = c1*h1/(c2*h2)
         If option B is given, binomial errors are computed.

    - Additions in program DICT.
      So far if the class name was followed by the '+' character, then the I/O
      routines FillBuffer, ReadBuffer and Sizeof were automatically generated
      in the dictionary code.
      With the new version, if the + sign is followed by an additional string,
      this string will be appended to the ReadBuffer member function
      assuming a valid C++ line.
      This new feature is useful when additional actions are required after
      reading an object from a file. The string can be a call to a class member function.

    - Add the possibility to pass a class pointer as an argument to member functions.
      This required several mods in RINT.

    - Mods in classes DAtaMember, MethodArg, Root, Class and also in
      include files $CIN, $COUT, $SPRINTF to support the above change.

    - New member function TROOT::ProcessLine(Text_t *command).
      This member function is a direct interface to the same function in TRint,
      but it copies the parameter command before invoking TRint::ProcessLine.

    - Class ELLipse. Implemented DistancetoPrimitive.

    - Many changes in class TPaveText.

    - New version of UTILS/TOROOT (the Geant to ROOT conversion program)
    *
    //* 22/10/95  10.48.11  by  Fons Rademakers
    *
    - Class TClassTable: removed const from static member Next(). Static members,
      of course, can not be const since they have no associated object. HP CC
      did not complain. It was fatal for g++.

    - $Rconfig: introduced sun case.

    - Classes THelpPane, TRadioSubMenu and TSubMenu: ifdef's in case old Motif
      does not support tear-off menu's (old Motif 1.1 still found on new
      SunOS machines).

    - Class TH1: another fix in ExecuteEvent(). When changing the bin value this
      could also trigger a pad range change. Therefore execute PaintInit() in
      ExecuteEvent() and Recalculate the range before redrawing the pad.

    - Class TGXW: Set the window bit gravity to NorthWestGravity. This prevents
      X from clearing the bitmap incase it is resized. The default behaviour
      (of clearing the resized window) was causing a white flash in
      TObject::Inspect().

    - Deck Getline: introduced a description for the new routines I introduced
      some time ago.

    - Class TCanvas: fix in Resize(). Don't repaint and flush the canvas after
      a resize. This caused the many screen flashes in TObject::Inspect().
      The screen update after a canvas resize is now the duty of the caller
      of Resize().

    - Class TWbox: fix in PaintFrame(). Set the FillStyle correctly (i.e.
      to solid) before drawing the frame.

    - Class TLink: fixed ExecuteEvent() to track mousemotion events. On links
      the cursor becomes a pointing finger.
    *
    //* 21/10/95  16.38.08  by  Fons Rademakers
    *
    - Class TCanvas: fixed member Update(). Update now all modified pads, not
      only the currenlty selected one. This fixes the problem with the demos
      macro.

    - Class TH1: fix in ExecuteEvent(). In case an axis has been dragged
      recalculate the pad range before doing any other pad painting. The pad
      range change might cause the system to create a new pad pixmap (due
      to small rounding errors) and in that case the already drawn pad background
      color would get lost. Also ExecuteEvent() now tracks mousemotion events
      and will change the cursor according to its position in the histogram:
      pointer on bins and double horizontal and vertical arrows on the y and x
      axes, respectively.

    - Class TLine: fixed ExecuteEvent() to track mousemotion events. On the
      line end points the cursor will become a pointer and on the other parts
      of the line it will be a 4-way arrow indicating that the line can be moved.

    - Class TText: fixed ExecuteEvent() to track mousemotion events and to
      correctly grab and drag text.

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