Releases notes for version 0.03
Releases notes for version 0.03
+DECK,V0_03.
*CMZ : 0.03/12 19/10/95 12.12.06 by Rene Brun
*-- Author : Rene Brun 14/08/95
//___________________________________________________________________________
*
//* 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.
*
//* 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.
*
*
//*::> VERSION 0.03/12 19/10/95 12.12.06
*
//* 19/10/95 11.50.20 by Rene Brun
*
- New class TActionList.
An action list is a list of commands to be executed sequentially
from the graphical user interface.
When an action list is executed (Run()), a "Next Pad button" appears
in the botton right corner of the canvas. When this button is clicked,
the next action in the action list is executed.
- Add Data member fApplication in $ROOT
and member functions GetApplication and SetApplication
- Modified the TRint constructor to set the application
- Modified $Rint to make public ProcessLine and ProcessFile
These two functions are called from the new ActionList class.
- New class TArrow.
Define an arrow between points x1,y1 and x2,y2 (see constructor)
the arrowsize is in percentage of the pad height.
Opening angle between the two sides of the arrow is fAngle (default=60 degrees)
Various arrow formats can be selected via the option in the Draw function.
option = ">" -------->
option = "<" <--------
option = "<>" <------->
option = "<|>" <|-----|> arrow defined by a triangle
If FillColor == 0 draw open triangle
else draw full triangle with fillcolor
The arrow class inherits from TLine.
The arrow edges can be moved (like for line) with the left mouse button.
- New cmz directory HTML.
New macro DICT_HTML to generate the html dictionary.
New include $Html and dummy implementation Html.
The THtml class has the functionality to automatically generate the HTML
files for the class description using the information in memory and
the implementation source directory.
*
//* 19/10/95 01.38.53 by Fons Rademakers
*
- Class TCanvas:
- the current pad is now highlighted. The highlight color can be set with
SetHighLightColor(color). The default highlight color is red. This
default can be changed in the .rootrc file via the resource:
".Canvas.HighLightColor".
- TPad's, TWbox'es and TBox'es can now be moved in opaque mode. This
option can be set with MoveOpaque(set). The default is off. This default
can be changed in the .rootrc file via the resource:
".Canvas.MoveOpaque". The ExecuteEvent() members of TPad and TBox were
modified.
- Fixed the Update() and Flush() members.
- Removed $editor from $canvas. Had to add $editor to a number of
other decks. In general try to avoid including includes in includes.
Includes are not needed when only a pointer to an object is used in
a class definition (a forward class declaration is enough). Try to
avoid using inlines that use a member of a referenced object since
this requires the include of that class to be included.
NOTE: cmz could generate around all #include's the lines:
#ifdef ROOT_xxxx
#endif
This would be very nice because in that case we don't have to worry
about putting these lines around all includes.
- When a TCanvas is deleted it is taken out of the TROOT canvas list.
- Class TPad: fix in Delete(), make sure that off screen pixmap of
canvas gets deleted.
- Class TBox: boxes, wboxes and paves can now be moved. Also they can
be selected when their parent is a canvas.
- Class TSelectPad and TEditor: removed spurious gCurrentCanvas->Update()
calls. The Update() is now performed correctly in HandleInput() of
TCanvas.
- Class TFile: when a file is deleted it is taken out of the TROOT file list.
- Class TRint: check if the logon and logoff macros are readable before
trying to executed them.
*
//* 17/10/95 01.38.53 by Fons Rademakers
*
- Compiled ROOT using g++. Fixed a number of type problems and some more
serious TString printing problems in TMinuit.
- Purified the th test program.
*
//* 16/10/95 18.36.18 by Rene Brun
*
- Added new utility root2html in the utils directory.
root2html converts the include files into html documents.
New macro root_html in $KUMACS.
- Modify the utils macro to generate the bind_root2html file
- Added definition of alias "html" in cmzlogon.kumac.
- New class TPaveLabel. A Pavelabel is a TPave with a label centered in the Pave
TPaveLabel inherits from TPave and TAttText.
The label size is automatically adjusted to the size of the pave.
- New classes TEllipse, TArc and TPave
TArc inherits from TEllipse.
An Ellipse has a Phimin and Phimax and may be rotated with an angle theta.
A TPave inherits from TBox.
- Mods in TRint. Replace gCurrentCanvas by obj->Canvas().
- Reintroduce the correct version of View (Fons correct DrawCube + Nenad fixes).
- Mods in Line, Pad, Wbox to print the derived class name in .ls() and .Print().
*
*::> VERSION 0.03/11 13/10/95 19.11.47
*
//* 13/10/95 18.32.58 by Rene Brun
*
- Modify all graphics primitives and TPad to support "Batch" graphics.
Graphics primitives include a statement like:
if (gCurrentCanvas->GetRWindow())
gGXW->dosomething
In case of batch, GetRWindow returns a null pointer.
- Implement new member functions in Pad:
PaintLine3D
PaintPolyLineNDC
PaintPolyLine3D
PaintText
PaintTextNDC
- Currently the "Batch" style is selected by creating a Canvas with no name:
Example
Root > TCanvas batch("")
- In case of "batch" the PostScript file must be explicitly open
Root > ps.Open(file.ps)
Root > something.Draw
Root > ps.Close
- Note that in case of a "batch" canvas, one can still invoke x3d.
Root > TCanvas batch("")
Root > na49.Draw
Root > batch.x3d
*
//* 13/10/95 18.31.58 by Nenad Buncic
*
Changes in TShape. New function PaintShape(), which now takes care of
painting in a pad.
All shapes are modified. New function SetPoints() give us a possibility
to use Paint() more efficiently, and more OO.
IMPORTANT: Filenames of all shapes are changed to follow
our simple rule ('filename MUST be same as a name of the
corresponding class'). This means that some filenames are
changed in uppercase.
*
//* 13/10/95 18.30.45 by Fons Rademakers
*
- New member function TRWindow::HandleEnter()
It changes the gCurrentCanvas to the canvas of the pointed window.
- Change PrintLogo
*
//*::> VERSION 0.03/10 12/10/95 17.27.10
*
//* 12/10/95 17.20.20 by Nenad Buncic
*
- All shapes modified to get output on pads.
- Change in X3D to center the object.
- Space used by X3D is now released.
*
//* 12/10/95 12.03.41 by Rene Brun
*
- Introduce new Member function TRint::PrintLogo
Rint prints ROOT version number as well as the date of compilation.
- Important changes in Canvas and RWindow.
The user should not call TRWIndow anymore.
The RWindow object is now automatically called by the TCanvas constructors.
The old style sequence like:
Root > TRWindow win1("Histogram Window",10,10,700,500)
Root > win1->Show
Root > TCanvas *wh=win1->Canvas
Root > wh.SetName(wh)
should be replaced by :
Root > TCanvas wh(wh,"Histogram Window",10,10,700,500)
or
Root > TCanvas wh(wh,"Histogram Window",1)
which is the same as: TCanvas wh(wh,"Histogram Window",10,10,700,500)
or
Root > TCanvas wh(wh)
which is the same as: TCanvas wh(wh,wh,10,10,700,500)
- Bug fixed in Pad::Delete.
If pad=currentcanvas do not delete pixmaps and do not rest mother
- Fix problem in Htable. Do not clear pad anymore. Pad is already cleared
by TH1::Draw
- Inspector again operational (top->Down only for the time being).
*
//* 12/10/95 02.21.30 by Fons Rademakers
*
- New class TStopwatch. This class implements a wall clock and cpu timer.
It provides Start(), Stop(), RealTime(), CpuTime() and Print() member
functions. TStopwatch replaces the ad-hoc timed() function.
- Removed timed() function (see above).
- Functions rannor, rndm and ishft: remove trailing _ and made independent
of $f2c.
- Class TCollection: removed unecessary include.
*
//* 10/10/95 19.11.40 by Fons Rademakers
*
- New class TBtree. This class implements a refined btree algorithm as
described in Knuth volume 3. This class uses the utility classes:
TBtNode, TBtInnerNode, TBtLeafNode and TBtItem. Only TBtree is exported to
the interactive interface.
- New class TBtreeIter to iterate over a TBTree.
*
//* 10/10/95 10.39.36 by Rene Brun
*
- Fixed a problem in H1 and Hpaint.
TH1::Draw looks for option "same"
If this option is not given, The Pad is cleared, the object is added
to the Currentpad list. The subpads corresponding to title and stats
follow the main hsitogram pad.
This solves a major problem when repainting or printing with PostScript.
Member functions DrawCopy modified accordingly.
*
//* 08/10/95 14.07.50 by Fons Rademakers
*
- Getline: can now read from input file (<file) and from pipe.
- Class TRint:
- also in command mode << can be used to display messages.
- comments can now be added behind commands: h101.Draw //draw histo
*
//* 07/10/95 18.09.46 by Fons Rademakers
*
- Class TFile: can now also open file with option RECREATE. This option
overwrites on already existing file (allowed options are NEW, CREATE,
RECREATE, UPDATE and READ. NEW and CREATE have same effect). Options
are case insensitive.
- Class TPad:
- cursor shapes are now consistent with the position and the
action is also the one according to the cursor shape.
- rubberband line is now 2 pixels wide. This enhances the visibility.
- using mouse button 2 one can now pop pad's to the foreground.
- Class TSelectPad: can now move (again?) TSelectPad's. Change in
TBox::ExecuteEvent().
- Massimo's TPolyMarker3D problem was due to a wrong compiler option
used while compiling his code. ROOT is always compiled using option
+a1 (using ANSI C float/double promotion behaviour) while Massimo
compiled using the default (+a0) which resulted in K&R behaviour
of float to double promotion. The result was that his routine was
always passing doubles to TPolyMarker3D::SetPoint, which expected
floats. Option +a1 is preferred since automatic float to double
promotion is a quite expensive operation.
Therefore *** ALWAYS USE COMPILER OPTION +a1 ***.
- Class TH1: histograms were added at the begining of the display list,
this caused problems with option SAME. Now histograms are, correctly,
added to the end of the list.
*
//* 05/10/95 17.42.42 by Rene Brun
*
- Change the TGeometry class. TList items replaced by the new THashList.
This makes a considerable speed improvment.
- Reverse the order to search for objects in TRint.
Look first for TDynamics before any other TLists.
*
//* 05/10/95 11.38.24 by Fons Rademakers
*
- Error: introduced macro Check which prints a warning if the condition is
false.
- Class ObjectTable: use TIter instead of TListIter.
- Class Root: in header use TSeqCollection instead of TList. This allows
us to change in the implementation the collection class to whatever
TSeqCollection we like (e.g. TList, TOrderedList, TOrdCollection, TObjArray,
THashList) without having to change the header file.
- New class THashList. THashList is a hybrid class inheriting from TList
and adding a THashTable for fast lookup. While filling the THashList
the TList as well as the THashTable are filled. When seaching for an
object the hash table is used.
- Class TPad: fixed recursive drawing of pads and canvas because the canvas
was added to the primitive list of the gCurrentPad which caused an
endless loop when drawing the canvas. Also the reparenting of pads
works now as it should. p1.cd; p2.Draw will resize p2 and draw it in
p1 (assuming it was first drawn into another pad).
- Class TStorage: change in format of statistics table.
- Classes TView and TLego: changed rad to kRad and made it a constant.
*
*
//* 03/10/95 23.17.27 by Rene Brun
*
- New classes TMaterial and TMixture.
TMixture inherits from TMaterial.
- TShape, TGeometry and TNode modified to reference TMaterial.
- New data member fBomb and new member functions GetBomb and SetBomb
in TGeometry.
fBomb is the bomb factor to get nice exploded views of the geometry.
To use it (assuming na49 is the gCurrentGeometry):
na49.SetBomb(1.5) (default is 1.3)
na49.Draw(x3d)
- SetVisibility added in TNode as well as SetFillColor.
node.SetVisibility sets the visibility for all nodes below node.
Same for colors.
- New Member function DrawOnly in TNode. This new function is useful
to visualize a subtree of a geometry. Visibility attributes are
set automatically.
*
//* 03/10/95 16.32.27 by Nenad Buncic
*
- Shapes PCON and PGON optimized in the interface to x3d.
*
//* 29/09/95 18.36.45 by Rene Brun
*
- New class THProfile (Profile histograms).
Complete implementation including fitting.
This new class inherits directly from TH1D.
- Implement new member function Sumw2() in the TH1 classes.
This member function activates the storage of the sum of squares of weights
at filling time.
*
//* 29/09/95 18.16.22 by Nenad Buncic
*
- New classes TPCON and TPGON implemented.
With these new shapes, ROOT supports now the full list of GEANT shapes.
We can now display the full versions of NA49, ATLAS, PHOBOS, OPAL, etc.
*
//* 29/09/95 18.13.48 by Fons Rademakers
*
- Class TSysEvtHandler: renamed Signals_t to ESignals since it is an enum.
- Class THashTable: new option in ctor allows for automatic rehashing
once the collision rate exceeds a certain level.
- Class TGeometry: added gCurrentGeometry in Geometry.h and removed the
extern gCurrentGeometry declaration from a number of files.
- Class TOrdCollection: forgot forward declaration for TOrdCollectionIter
(trapped by g++).
- Class TEnv: fix bug in a Printf (TString was printed instead of
TString::Data()).
- Class TUnixSystem: fixed bug in ExpandPathName, now dynamic loading
and unloading work again.
*
//* 28/09/95 08.19.46 by Rene Brun
*
- Important change in the management of Dynamics.
In previous versions, Root looked only in the CurrentDirectory
(memory and file) before looking in the Dynamics list.
With this new version, the automatic search has been extended to
all kinds of Root objects in the list supported by the TROOT object.
A new member function FindObject has been added for this purpose
in the Root class.
This function looks in the following order in the ROOT lists:
- Current Directory in memory
- Current Directory on file
- List of files
- List of functions
- List of geometries
- List of canvases
- List of styles
- List of shapes in current geometry
- When listing directories, change in format.
The new version shows the Class name instead of the ClassID.
- Similar change in the TNamed::ls
- Minor changes in the TNode class.
- The conversion program from Geant to Root has been added in the list
of utilities in utils directory.(see toroot)
To use this conversion program, make first a small shared library;
f77 -c +ppu +z toroot.f
ld -b -o toroot.sl toroot.o
then run any interactive version of Geant, for example:
gexam3 - w 0
read 4
stop
Geant > rz/file 21 na49.geom i
Geant > call toroot.csl('na49.mac')
Geant > exit
this short interactive Geant session will convert an existing Geant RZ file
(above called na49.geom) into a Root macro na49.mac.
To generate the Geometry structure within Root, do:
Root > exec na49.mac
Root > na49.Draw
Root > wh.x3d (this invokes the 3-d Root viewver)
Root > TFile gna49(na49.root,NEW) //open a new root file
Root > na49.Write //Write the na49 geometry structure
Root > gna49.Write //Write all keys (in this case only one)
Note: all keys are also written on closing of the file, gna49.Close or
when the program exits, Root closes all open files correctly.
Once this file has been written, in a subsequent session, simply do:
Root > TFile gna49(na49.root)
Root > na49.Draw
*
//* 27/09/95 19.26.26 by Fons Rademakers
*
- New class THashTable. THashTable can store all objects that inherit from
TObject. The hash table is implemented as a list of TList's.
By default the table has 17 slots, but in the constructor one can specify
any initial size. Using the objects Hash() function a slot is found
and the object is added to the TList at that slot. During filling or
once the hash table has been filled one can obtain the hash collision
rate via AverageCollisions() which returns the number of objects per
slot vs. the number of occupied slots. If this number become much larger
than 1 one can Rehash() the table. Rehash() creates a new THashTable with
at least as many slots as there are objects in the table and fills the
new table with the objects from the old table.
- New class THashTableIter to iterate over a THashTable.
- Class TNamed: Hash() is overridden and returns a hash value based on
fName.
- Number of fixes in TObjArray and TOrdCollection related with the dtor.
- Class TROOT: the dynamics TList is changed to a THashTable.
- Class TRint: small fix related with the introduction of the THashTable
(removed some dead code).
*
//* 26/09/95 13.33.03 by Rene Brun
*
- Many changes in Geometry, Shape and RotMatrix classes.
I/O for geometry now operational.
- New versions of BRIK,etc (all shapes classes).
- The Canvas constructor defines additional colors (200+) used by x3d.
- Implement The TF1 and TF2 constructors with compiled functions.
*
//* 26/09/95 12.33.39 by Fons Rademakers
*
- New class TEnv. TEnv handles startup config files. The config files
have a format similar to the .Xdefaults files. By default ROOT reads the
file .rootrc in the global ROOT directory, designated by $ROOTDIR, in the
user's home directory and in the local working directory. The local .rootrc
overrides identical names in the user file and the user file overrides
names in the global file. The default values can be accessed via the
global gEnv pointer that is initialized in the TROOT ctor.
New values can be defined at run time using SetValue() and saved using
Save(). Using Print() one gets a listing of all currently defined
defaults.
The file format is:
<SystemName>.<RootName|ProgName>.<name>[(type)]: <value>
Where <SystemName> is either, Unix, Mac or Dos (anything from MS),
<RootName> the root name as given in the TROOT ctor,
<ProgName> the current program name and
<name> is the resource name, with optionally a type specification.
E.g.:
Unix.rint.Root.DynamicPath: .:~/rootlibs:$ROOTDIR/lib
Rint.Root.Debug: FALSE
TH.Root.Debug: YES
*.Root.MemStat: 1
Rint.Logon: rintlogon.mac
<SystemName> and <ProgName> or <RootName> may be the wildcard "*".
A # in the first column starts comment line.
Currently the following resources are defined: //
Root.Debug (bool) (*)
Root.MemStat (int) (*)
Root.MemStat.size (int) (*)
Root.MemStat.cnt (int) (*)
Root.DynamicPath (string)
Rint.Logon (string)
Rint.Logoff (string)
(*) work only with the RootName since no ProgName is available at
time of initialization.
Note that the .rootrc config files contain the config for all ROOT
based applications.
- Introduced the GNU Demangle routines in patch C. The cplus_demangle()
routine can demangle GNU as well as ARM style mangled names.
Thanks to this routine we can see the correct C++ names when doing, e.g.
gSystem.ListSymbols(func).
*
//* 22/09/95 08.03.35 by Rene Brun
*
- New Classes TShape, TRotmatrix, TNode and TNodeDiv.
The TShape class is the base class for all geometry shapes BRIK, TRD1, etc..
This class has the functionality of the JVOLUM structure in GEANT.
The TNode class is the main geometry constructor. A node can contain
another node. A node references an existing shape and an existing
rotation matrix.
This class has member functions to create a new geometry, to draw and print
nodes (including all the nested nodes). When going down in the geometry
tree the global gTranslation and gRotMatrix arrays are automatically
updated as being the sum of all translations and the product of all rotations.
A member function Local2Master transforms a point in the local node system
into coordinates in the master reference system.
The Draw and Paint functions provide an automatic interface to X3D.
The TNodeDiv class is the equivalent of TNode for divided objects.
- Implemented a program (Fortran) to translate a GEANT geometry file with
all its attributes and functionality into a ROOT file and macro (C++ code).
- Some additional utilities in the Histogram and Ntuple classes.
*
//* 21/09/95 19.13.58 by Nenad Buncic
*
- Changes in Pad: All X3D dependent statements are moved to X3D itself.
- Changes in X3D: New functions: AllocateX3DBuffer(), FillX3DBuffer(),
MakePolygonArray(). These are our preprocessor functions
to X3D, for now.
- New classes: TObject3D and TShape. And also new shapes - TBRIK, TTRD1,
TTRD2, TTRAP, TTUBE, TTUBS, TCONE, TCONS, TPARA, TGTRA,
TPGON, TPCON.
*
//* 21/09/95 16.35.39 by Fons Rademakers
*
- New class TSystem. This is an abstract base class providing an
machine independent interface to general OS features. For each new OS
one should make a derived class from TSystem. Among others, TSystem
provides functions for loading, listing and unloading dynamic
libraries. Once a dynamic library is connected the ctor's for the
global variables are called and once unloaded the dtor's are called.
Using this scheme classes are automatically know in the interpreter
and no relinking of the application is anymore necessary.
To make the loading work correctly you have to define the environment
variable ROOTDIR. The dynamic loader looks, currently, in the path
".:$ROOTDIR/lib" for dynamic libraries.
- New class TUnixSystem. This is the concrete class implementing the
interface to the Unix OS. TUnixSystem inherits from TSystem.
- New class TSysEvtHandler. This is an ABC providing an interface for
system event handlers.
- New class TFileHandler. This class handles events on file descriptors.
Once an event handler is installed it gets called whenever an event
occurs on its file descritor. To install a TFileHandler use
TSystem::AddFileHandler.
- New class TSignalHandler. This class handles signals. The Notify() member
is called whenever the specified signal is intercepted. To install a
TSignalHandler use TSystem::AddSignalHandler.
- $RConfig: added also a dtor to the _ClassInit_ macro. This dtor is mainly
necessary when a dynamic library is unloaded, because in that case it
makes sure that the class definition is removed from the gClassTable,
the gROOT->fClasses and from the fDirect direct access class table.
- Class MethodArg: strip blanks from defval in ctor.
- Exception handling macros introduced in $Exception and Exception.
Using these macros one can simulate the coming C++ try, catch and throw
exception handling features. Usage:
TRY {
something
} CATCH(n) {
handle error
} ENDTRY;
also is provided RETRY which cause the re-execution of the routine
in which tree the exception occured. This is useful in case of an eventloop,
when after an exception the eventloop has to be entered again.
RETRY {
eventloop();
} ENDTRY;
To jump to the CATCH or RETRY block use the function Throw().
- Class TH1: made some empty function abstract (using AbstractMethod()).
- RMain: removed the my_argc stuff for the scat.sl. Use gSystem->Load(scat)
to load the lib.
- TApplication: member Run() now uses the RETRY, ENDTRY exception handling
mechanism.
*
//* 15/09/95 11.59.07 by Rene Brun
*
- Add new Member functions in TH1 classes
TAxis *GetXaxis() returns pointer to X axis structure
TAxis *GetYaxis() returns pointer to Y axis structure
TAxis *GetZaxis() returns pointer to Z axis structure
see Help TAxis to see list of functions
for example :
TAxis *x = h200.GetXaxis()
x->GetNbins()
void SetCellContent(Int_t binx, Int_t biny, Double_t content)
to set the content of a 2-D at binx and biny.
Note that binx = 0 is the underflow bin in X (same for y)
//___________________________________________________________________________
*
//*::> VERSION 0.03/09 14/09/95 18.15.24
*
//* 14/09/95 18.27.59 by Rene Brun
*
- Files root.cmz and rae.cmz have been merged in root.cmz.
The previous RAE decks are now in root/rae directory
and /rae/include in //root/incrae.
- By default the installation macro creates $ROOTLIB/root.slib
and the following individual smaller libraries:
base.sl corresponds to subdirectory base
clib.sl "" c
cont.sl cont
dict.sl dict
func.sl func
graf.sl g
graf3d.sl g3d
hist.sl h
minuit.sl minuit
postscript.sl postscript
rae.sl rae
rintlib.sl rint
x11.sl x11
x3d.sl x3d
- This scheme speeds-up considerably the linking phase.
- Installation procedures in $KUMACS have been modified to reflect the above
changes.
- New aliases MAKE and LIBS created by cmzlogon.kumac
Executing MAKE in a subdirectory will recompile all decks in the subdir
out of date and will also regenerate the corresponding shared library.
Executing MAKE in the top directory will recompile all out of date decks
as well as the corresponding shared libraries.
- The bind_rint procedure in cmzlogon.kumac has been modified:
The sequence $ROOTLIB/root.sl $ROOTLIB/rae.sl is replaced by $ROOTLIB/*.sl
*
//* 14/09/95 18.27.59 by Fons Rademakers
*
- TObject: new member function IsSortable(). This function should be
overriden by classes that implement the Compare() function. These
classes can then be sorted by TOrdCollection, TObjArray and TSortedList.
- New class TOrdCollection. This collection implements list semantics using
an array. The table is automatically expanded when getting full, or shrunk
when objects are removed. It uses much less space than TList but inserting
elements might involve copying many elements in the array to open up the
empty slot. When the stored objects implement the Compare() function
the collection can also be sorted and elements can then efficiently
be found using the BinarySearch() function.
- New class TOrdCollectionIter to iterate over TOrdCollection.
- New class TSortedList. In this list objects can only be added using the
Add() function (AddLast(), AddFirst(), etc. will call Add() to preserve
the sorting order). Elements can be stored in ascending or descending order.
TListIter is also used to iterate over a TSortedList.
*
//* 13/09/95 15.27.59 by Rene Brun
*
- Add new member function Is3D() in TObject and TObject3D
*
//* 13/09/95 13.31.50 by Rene Brun
*
- Implement logic in THN::Draw to draw expressions of original ntuple variables.
- Examples of commands:
Root > hn.Draw
Root > hn.Draw(y)
Root > hn.Draw(z+8)
Root > hn.Draw(z:y)
Root > hn.Draw(z:y,z>2)
Root > hn.Draw(0.01*z:y,z>2)
Root > hn.Draw(cos(z):sin(y):z)
Root > hn.Draw(cos(z):sin(y):z,"","",5000)
Root > p2.x3d
Root > hn.Draw(cos(z):sin(y):z)
Root > hn.Draw(cos(z):sin(y):z)
Root > hn.Draw(cos(z))
Root > hn.Draw(cos(z),x*y*z)
Root > hn.Draw(cos(z),x*y)
Root > hn.Draw(cos(z),x)
Root > hn.Draw(cos(z),1)
Root > hn.Draw(cos(z),2)
Root > hn.Draw(log(z))
Root > hn.Draw(log10(z))
Root > hn.Draw(log10(z)+cos(y))
Root > hn.Draw(log10(z)+cos(y),"",e1)
Root > hn.Draw(log10(x))
Root > hn.Draw(log10(abs(x)))
Root > hn.Draw(log10(abs(x+y)))
Root > hn.Draw(log10(abs(x+y+3.78*log10(z))))
*
//* 13/09/95 13.08.07 by Nenad Buncic
*
- New base class TObject3D. This class is a base class for all 3-D primitives.
- Change classids for all existing 3-D primitives starting at 300+..
- Optimize number of lines to draw a 3-D polymarker.
- New function X3DCleanUp in all 3-D primitives to free allocated memory.
The pad.x3d makes two passes on all 3-d primitives.
A first pass to evaluate the size (or an approximation of the size)
of the points, segments and lines.
A second pass to fill the x3d structure.
//___________________________________________________________________________
*
//*::> VERSION 0.03/08 12/09/95 11.12.30
*
//* 12/09/95 08.49.39 by Rene Brun
*
- Speed-up Ntuple processing. A direct access table (to be replaced by ObjArray)
points directly to each ntuple buffer.
- 1-D, 2-D and 3-D projections of Ntuples implemented.
- Class PolyMarker completly rewritten. Used by THN::Draw.
- Fix bug in Dynamic in case a non-existing member function is invoked.
- Several changes in Minuit to compile under VisualC++ (V.Fine)
- References to include strings.h removed (not available on PCs).
- Replace math.h by RMath.h and the corresponding calls in several classes.
- Bug fixed in TH1::Copy1 (members fMaximum & fMinimum were not copied).
*
//* 12/09/95 08.49.39 by Nenad Buncic
*
- Many changes in PAD, X3d and Polymarker3D.
- X3d supports now polylines and polymarkers.
Currently, only one type of 3-D polymarker is supported (3 lines).
*
//* 12/09/95 00.18.49 by Fons Rademakers
*
- New class TObjArray. This class manages an array of objects. Main feature:
via the operator[] one can access the array elements in a natural way.
For usage see the test program /user/rdm/root/tarray.cc (later in root.cmz).
Arrays can be sorted (objects need to override in that case their Compare()
member) via Sort() and elements can be quickly found using the member
BinarySearch().
- New class TObjArrayIter. TObjArrayIter inherits from TIterator. TObjArrayIter
is an iterator for the TObjArray class.
- TList: moved a number of members down to the base classes TCollection and
TSeqCollection.
- Base classes ported to the MAC using the MetroWerks CodeWarrior compiler.
This compiler supports already the proposed ANSI C++ I/O library.
- TFile: via preprocessor flag ANSILIB supports now ANSI C++ I/O.
New member functions:
- Bool_t IsOpen()
- void Seek(Long_t offset, ERelativeTo pos = kBeg)
- Bool_t Read(char *buf, int len)
- Bool_t Write(const char *buf, int len)
- void Flush() const
Changed a number of decks to use these new TFile members.
- Put cin_to, cout_from and sprintf_from prototypes in $Cin, $Cout and $Sprintf
keeps.
- TObject: IndentLevel() and gDirLevel (as fgDirLevel) static in TObject.
Removed all extern declarations of these functions.
- TList: Fixed some nasty bugs in Delete() (see comments in that routine).
NOTE: that all classes that are stored in lists in TROOT should remove
themselves from these lists in their dtor's (see next item).
- TStyles: dtor now removes style from gROOT->GetListOfStyles().
//___________________________________________________________________________
*
//*::> VERSION 0.03/07 06/09/95 15.35.22
*
//* ---------> News from Rene Brun
- All decks renamed to UpperCase convention.
- dict changed to generate automatically a Class_ReadObject static function.
the line c->DefineCallBack(Class_ReadObject) is also added in the Dictionary.
- The Readback mechanism is now automatic thanks to the change in dict.
- Routines HClasses and GClasses do not contain anymore the calls
to the class DefineBack function.
- The function ROOT::GetClassByID has been changed.
if the pointer to the class fDirect[classid] = 0, the dictionary is
automatically built via GetDict.
- All the above changes are reflected in many ROOT classes.
In particular the statements such as AppenDirectory or AppenPad
previously in the ReadBack functions have been moved to the base classes
for the corresponding functions (TH1 for histograms, TLine, TBox and Text).
- The Write member functions previously in TH1 are now obsolete and replaced
by the TNamed::Write. That means that all classes inheriting from TNamed
can write automatically an object to the CurrentDirectory.
- The calls to the constructors for TFormula, TF1 and TF2 have been modified
to include the name of the function as the first parameter.
TFormula(const char *name,const char *expression)
TF1(const char *name,const char *formula, Float_t xmin, Float_t xmax)
TF2(const char *name,const char *formula, Float_t xmin, Float_t xmax, Float_t ymin, Float_t ymax)
Example:
Root > p2.cd
Root > TF1 k1(k1,expo+gaus+gaus,0,5)
Root > k1.SetParNames(Constant,Slope,Cgauss1,Mean1,Sigma1,Cgauss2,Mean2,Sigma2)
Root > k1.SetParameters(5,-1,90,1.5,0.3,20,3.5,0.2)
Root > TH1F hr(hr,"Test of FillRandom",100,0,5)
Root > hr.SetMarkerStyle(21)
Root > hr.FillRandom(k1)
Root > hr.Fit(k1,"v",e1p)
//* ---------> News from Nenad Buncic
- Changes in View. PadRange of current pad is now by default
set to (-1,-1,1,1). Also, bug fixed in the SetOutlineToCube().
- Changes in Pad. Method x3d() has been completely redefined, because
'x3d' package is now linkable with ROOT, so there is no need for
file data exchange between them.
- New include $x3d
- New directory X3D including the full x3d package (see below).
To use the x3d package once you have entered 3-D primitives in a pad, do:
pad.x3d
This will automatically create a new window where x3d operates.
*-* x3d: wireframe viewer and animator for X Window System
======================================================
Author: Mark Spychalla spy@castlab.engr.wisc.edu
x3d allows you to view wireframe images. When the image is loaded
you may control its movement with the left mouse button. Hold down
the left button and move the mouse vertically to rotate the image
about the X axis and horizontally to rotate about the X axis.
**** x3d QUICK HELP **************************************
QUIT q Q MOVE OBJECT DOWN u U
TOGGLE CONTROLS STYLE o O MOVE OBJECT UP i I
TOGGLE STEREO DISPLAY s S MOVE OBJECT RIGHT h H
TOGGLE BLUE STEREO VIEW d D MOVE OBJECT BACKWARD j J
TOGGLE DOUBLE BUFFER f F MOVE OBJECT FOREWARD k K
TOGGLE HELP MENU m M MOVE OBJECT LEFT l L
ROTATE ABOUT X x X a A AUTOROTATE ABOUT X 1 2 3
ROTATE ABOUT Y y Y b B AUTOROTATE ABOUT Y 4 5 6
ROTATE ABOUT Z z Z c C AUTOROTATE ABOUT Z 7 8 9
ADJUST FOCUS [ ] { } HIDDEN LINE MODE e E
WIREFRAME MODE w W HIDDEN SURFACE MODE r R
POINTER MOVEMENT WITH LEFT BUTTON :
ROTATE OBJECT ABOUT X Vertical
ROTATE OBJECT ABOUT Z Horizontal
*
//*::> VERSION 0.03/06 04/09/95 10.45.06
*
- Several new features are available in the class TFormula:
The TFormula constructor automatically adds the new Formula to
the List of functions in gROOT.
An already defined Formula can be referenced in a new formula.
However, remember to give a name to your formula before using it again.
Example of use with the derived class TF1:
TF1 k1("sin(x)/x",0,10)
k1.SetName(k1)
k1.Draw
TF1 k2("0.1*x + k1",0,10)
k2.SetName(k2)
k2.Draw("cs") //superimpose new function on top of previous picture
Comparisons operators are also supported (&&, ||, ==, <=, >=, !)
Examples:
sin(x*(x<0.5 || x>1))
If the result of a comparison is TRUE, the result is 1, otherwise 0.
- New class THN introduced (Memory-resident Row-Wise ntuples).
Only skeleton is available.
Example:
THN *hn = new THN("hn","My first Ntuple","x:y:z:Fons:Rene:Nenad")
hn->Draw("sqrt(x)","Fons > Rene && Nenad=1")
hn->Print()
hn->Project("h1","y","x**2+y**2>1") //where h1 is the name of a TH1F
A memory resident row wise ntuple is a linked list of buffers holding
tuples (x1,x2,x3,x4,..xn) consecutively.
Buffers of size bufsize are created. When the buffer is full, a new
buffer is linked to the previous buffer
varlist contains the names of the ntuple variables in the format
"name1:name2:name3:....:namen"
The only data type supported is Float_t
- New Member Function FillRandom(char *fname, Int_t ntimes) is TH1 classes.
The distribution contained in the function fname (TF1) is integrated
over the channel contents.
It is normalized to 1.
Getting one random number implies:
- Generating a random number between 0 and 1 (say r1)
- Look in which bin in the normalized integral r1 corresponds to
- Fill histogram channel
ntimes random numbers are generated
- Fitting now implemented for 1-D and 2-D distributions
Try the following macro for a 1-D fit:
Root > TF1 k1(expo+gaus+gaus,0,5)
Root > k1.SetName(k1)
Root > k1.SetParName(0,Constant)
Root > k1.SetParName(1,Slope)
Root > k1.SetParName(2,Cgauss1)
Root > k1.SetParName(3,Mean1)
Root > k1.SetParName(4,Sigma1)
Root > k1.SetParName(5,Cgauss2)
Root > k1.SetParName(6,Mean2)
Root > k1.SetParName(7,Sigma2)
Root > k1.SetParameter(0,5)
Root > k1.SetParameter(1,-1)
Root > k1.SetParameter(2,90)
Root > k1.SetParameter(3,1.5)
Root > k1.SetParameter(4,0.3)
Root > k1.SetParameter(5,20)
Root > k1.SetParameter(6,3.5)
Root > k1.SetParameter(7,0.2)
Root > TH1F hr(hr,"Test of FillRandom",100,0,5)
Root > hr.SetMarkerStyle(21)
Root > hr.FillRandom(k1)
Root > hr.Fit(k1,"",e1p)
Try the following macro for a 2-D fit. Here h200 is in file2.root
Root > <<This macro will take some time to execute
Root > <<It computes a 2-D function with 9 parameters (sum of products of 2 gaussians)
Root > <<It fills a 2-D histogram from this theoretical distribution (5000 entries)
Root > <<Then Minimization process to compute the best 9 coefficients
Root > <<============================================================
Root > <<At the end, the scatter plot is shown with the superimposed fit
Root > TF2 f200(xygaus+xygaus,-4,4,-4,4)
Root > f200.SetName(f200)
Root > f200.SetParameter(0,10)
Root > f200.SetParameter(1,-2)
Root > f200.SetParameter(2,0.05)
Root > f200.SetParameter(3,-2)
Root > f200.SetParameter(4,0.05)
Root > f200.SetParameter(5,20)
Root > f200.SetParameter(6,2)
Root > f200.SetParameter(7,0.05)
Root > f200.SetParameter(8,2)
Root > f200.SetParameter(9,0.05)
Root > f200.SetLineWidth(2)
Root > p2.Clear
Root > h200.Fit(f200)
Root > f200.Draw(scont1)
- Changes in View. Now, allows user defined outline (instead of rotating rube).
Removed: method - void DrawCube()
Added: data member - TList fOutline
method - void SetOutlineToCube()
Changed: method ExecuteRotateView() - call to DrawCube() replaced
by call to fOutline.Paint
- Changes in Pad. Added support for 'x3d' package.
Added: method - void x3d(char * option)
*
//* 02/09/95 11.16.04 by Fons Rademakers
*
- TReference: class and all its uses have been removed. TReference has
been obsoleted by the new TList class. The functionality of TReference
to store in addition to the TObject* also an (drawing) option has
been emulated by allowing TList's to also store optionally an option.
- TList now support the additional storing of an option with each list
member. This is done via the new TObjOptLink class, that inherits from
TObjLink, which stores the TString option.
New member functions which allow the storage of an option:
Add(TObject *obj, const Option_t *opt)
AddFirst(TObject *obj, const Option_t *opt)
AddLast(TObject *obj, const Option_t *opt)
New member functions which give access to the TList's TObjLink entries:
FirstLink()
LastLink()
There are now basically four ways to iterate over a TList (in order
of preference, if not forced by other constraints):
1) Using the ForEach macro:
GetListOfPrimitives()->ForEach(TObject,Paint)(option);
2) Using the TList iterator TListIter (via the auxiliary class TIter)
TIter next(GetListOfPrimitives());
while (TObject *obj = next())
obj->Draw(next.GetOption());
3) Using the TObjLink list entries (that wrap the TObject*)
TObjLink *lnk = GetListOfPrimitives()->FirstLink();
while (lnk) {
lnk->GetObject()->Draw(lnk->GetOption());
lnk = lnk->Next();
}
4) Using the TList's After() and Before() member functions
TFree *idcur = this;
while (idcur) {
...
...
idcur = (TFree*)GetListOfFree()->After(idcur);
}
Methods 2, 3 and 4 can also easily iterate backwards using either
a backward TIter (using argument kIterBackward) or by using
LastLink() and lnk->Prev() or by using the Before() member.
- Global edits:
- removed all GetFirst...() functions. They were not used anymore
and can be emulated using, e.g. GetListOfPrimitives()->First()
- renamed all GetHead...() functions to GetListOf...(), this increases
a lot the clearity of the code. Search in your code for GetHead
and change to GetListOf (exception, the original GetHead() is changed
to GetList()).
Therefore do in your old code:
1) global edit: GetHead -> GetListOf
2) GetListOf( -> GetList(
*
//* 25/08/95 16.18.25 by Fons Rademakers
*
Introduced the new TList class. This class allows TObjects to be stored
in a doubly-linked list without the need for TObject to have fPrevious and
fNext links. TObjects entered in a TList are wrapped by a TObjLink object
which provides the fNext and fPrev links.
- TObject
Removed data fields:
fParent
fNext
fPrevious
fgEachExec
Removed member functions:
AppendEntry()
AppendDirectory()
AppendPad()
PrependEntry()
InsertEntry()
DeleteEntry()
FindObject()
GetListParent()
GetNext()
GetPrevious()
GetParent()
SetNext()
SetPrevious()
SetParent()
ForEach()
- TList provides the following new member functions:
AddLast() (was AppendObj())
AddBefore() (was InsertObjBefore())
AddAfter() (was InsertObjAfter())
AddFirst() (was PrependObj())
Remove() (was DeleteObj())
First() (was FirstEntry())
Last() (was LastEntry())
ForEach (was ForEachObj) -- macro
Semenatics for Clear and Delete of lists has changed.
Clear() means to remove all objects from the list without touching the
objects themselves (function RemoveAll() is equal to Clear()).
Delete() means to remove all objects from the list and to delete the objects
themselves (except when the objects are not on the heap).
To loop over a TList use the TIter auxiliary class (defined in $Collection).
See the code for examples. TIter overloads operator() to hand the next
list element back.
- TLego, introduced typedef's for the Surface, Drawface and Lego functions.
- All GetFirst...() functions can be removed because they are not used
anymore.
- All GetHead...() should be renamed to GetListOf...(), e.g. GetHeadClass()
should be GetListOfClass(). This will make the code more readable.
//___________________________________________________________________________
*
//*::> VERSION 0.03/05 24/08/95 16.15.35
*
- New classes TF1 and TF2. TF1 is a 1-Dim function (TFormula with a range).
TF2 is a 2-D function with a range in x and y.
To Try the new TF1 and TF2 classes, try, for example:
Root > exec hist1.mac
Root > p2.cd
Root > TF1 k1(sin(x)/x,0,10)
Root > k1.Draw
Root > k1.Draw(lego1) (here point to pad p2 and rotate)
Root > TF2 k2(sin(x)*cos(y),-2,2,-2,2)
Root > k2.Draw (k2 is drawn by default as a contour plot)
Root > k2.Draw(lego1)
Root > TF1 k3(gaus,-3,3)
Root > k3.SetName(blabla)
Root > k3.SetParameter(0,100)
Root > k3.SetParameter(1,0)
Root > k3.SetParameter(2,1)
Root > h101.Fit(blabla) (This command will only work in the coming version)
Root > k3.Print
Root >
- New member functions added to the H1 class to support fitting.
Very preliminary implementation of the TH1::Fit member function.
- New DECK HFIT added in directory H.
- New classes PolyLine3D and PolyMarker3D added by Nenad Buncic.
- The TLego class has been split into TView and TLego.
- Changes in Pad. The fLego pointer is replaced by fView.
The TView class is used to specify the 3-D viewing parameters in one pad.
Before adding 3-D primitives to a pad, a TView must be created.
Note that Lego automatically creates a View.
The Rotating Cube function can be used to interactively rotate any 3-D
objects in a pad when a TView exist.
- Several small bugs fixed in the interpreter RINT. The problem with
nested parenthesis is solved.
//___________________________________________________________________________
*
//*::> VERSION 0.03/04 21/08/95 18.08.31
*
- New class TFormula (see TFormula constructor) for definition
and functionality.
- Global Edit on ClassDefs: Added T in front of each class name.
- New version of Dictionary. With this new version, there is no need now
to call explicitely the Class::Dictionary() member function. This call
happens automatically at run time. This has the advantage to speed up
the initialisation process and consumes less space in memory.
Only classes really used have their dictionary loaded.
- Several changes in basic service classes such as TString.
- Cleanup of ClassIDs. There were several clashes.
- Two new TDynamic objects have been added (gObjectTable and gClassTable).
gObjectTable.Print shows the list of all active class objects.
gClassTable.Print shows the list of classes with some statistics.
- New directory FUNC containing the new class TFunction.
New include $Function.
- New static functions Printf and Strip in class TString.
//___________________________________________________________________________
*
//*::> VERSION 0.03/03 17/08/95 17.03.19
*
- New Classes TMinuit and TMinuitOld introduced in new directory minuit
(see features of this class in the DECK,Minuit header).
- A statement like loop 3 exec junk.mac is now authorized.
//___________________________________________________________________________
*
//*::> VERSION 0.03/02 14/08/95 16.19.29
*
Minor changes due to a bad stamping of the first version
//___________________________________________________________________________
*
//*::> VERSION 0.03/01 14/08/95 14.57.08
*
New features:
- Introduced the ABC TCollection. TCollection inherits from TObject and
provides a generic interface to all collection classes.
The TCollection header defines also the ForEachObj macro, which uses
the TIter iterator wrapper class. The TIter iterator behaviour depends
on the collection given to the TIter constructor.
- Introduced the ABS TIterator. TIterator provides the generic interface
for all collection iterators.
- Changed TListHead to TList. TList inherits from TCollection. TList
is a double linked list which can contain TObject's.
- Introduced TListIter. TListIter inherits from TIterator. TListIter
is an iterator for the TList and TSortedList classes.
- The ClassID's are:
TCollection 150
TList 151
TSortedList 152
TIterator 160
TIter 161
TListIter 162
- Changes in TObject:
Added:
Bool_t IsEqual(TObject *obj)
Int_t Compare(TObject *obj)
UInt_t Hash()
Changed:
GetObject() -> FindObject()
GetParent() -> GetListParent()
ParentEntry() -> GetParent()
PreviousEntry() -> GetPrevious()
NextEntry() -> GetNext()
- Changes in TList (formerly TListHead):
Added:
void AppendObj(TObject *obj)
void InsertObjBefore(TObject *before, TObject *obj)
void InsertObjAfter(TObject *after, TObject *obj)
void PrependObj(TObject *obj)
void DeleteObj(TObject *obj)
TObject *FindObject(const Text_t *name) const
TObject *FindObject(TObject *obj) const;
TIterator *MakeIterator(Bool_t dir = kIterForward) const;
Changed:
GetNEntry() -> GetSize() (now in TCollection)
- Changes in TClass:
Added:
Bool_t InheritsFrom(const TClass *cl);
Bool_t InheritsFrom(const Text_t *cl);
Changed:
GetFirstInherit() -> GetFirstBase()
GetHeadInherit() -> GetHeadbase()
GetInheritedClass() -> GetBaseClass()
- Changes in TInherit:
Renamed class TInherit to TBaseClass, because it contains base
classes and not inherited classes.
=================================================================
TObjectTable:
- TObjectTable inherits from TObject. TObjectTable keeps track of all
active objects.
- There is only one TObjectTable in the program. This table can be
accessed via the global gObjectTable.
TClass:
- Added (used by TObjectTable):
UInt_t GetInstanceCount()
UInt_t GetHeapInstanceCount()
Int_t Size()
=================================================================
New features:
- Introduced class TStorage which encapsulates the heap memory management.
TStorage has no data members and no ctor and dtor. It only provides a
namespace for the memory management functions.
TStorage provides a.o.:
- Overloaded versions of the global new and delete operators.
- Object allocator setting heap flag for use by TObject (machine independent,
instead of the heapEND method).
- Memory usage monitoring and statistics routines (can be de-activated
using #ifdef's).
- Extensive debugging facilities which detect memory overwrites and
other illegal activities (can also be de-activated using #ifdef's).
- Introduced error reporting and handling routines (decks $Error and Error)
accepting printf style formatting arguments (variable number of arguments).
The error handling facility is available via inheritance from TObject and
as stand-alone routines.
- Introduced class TMath which encapsulates most math routines and provides
overloaded versions (no templates), for almost all builtin data type, of
routines like: min, max, abs, etc. Also this class has no data members,
it only provides a namespace for the math functions.
Instead of using <math.h>, use TMath.
- Introduced class TString and supporting classes TRefCnt, TRegexp and pattern
matching routines (in deck Match). Removed TRstring and modified all decks
using TRstring to use TString. In the process made many classes to accept
"const char *" instead of "char *". We should use this additional type
safety feature of C++ more often. Retrofitting the code with "const"
is a pain (ripple effect). To avoid problems with include file searches
on the Macintosh the name of the String KEEP is RString (generates include
file "RString.h").
Extensions to existing classes:
TObject:
- Overloaded new and delete using TStorage.
- Changed size of fBits to UInt_t.
- Introduced bit handling routines: SetBit, ResetBit, TestBit and InvertBit.
- Introduced bit constants and mask for system and user bits. Currently
there is space for 8 system bits and 24 user bits.
System bits are: kIsOnHeap (set when TObject on heap)
kNotDeleted (set when TObject created and unset
when deleted, allows error generation
in case TObject gets deleted twice)
- Added error handling routines: Warning, Error, SysError and Fatal.
Each error routine adds the class name to the location (i.e. name
of member function in which error occured). When a Fatal occurs
the system calls abort().
- Moved GetObject from TNamed to TObject (otherwise TCanvas'es and TPad's
could not be found).
TROOT:
- Removed Error() from TROOT and use now instead the new routines from
TObject.
- Made operator new() protected. This has the effect that no TROOT objects
can be allocated from the heap. The TROOT object has to be a global on
the stack, which ensures that TROOT's destructor is automatically called
at the end of the program. The TROOT destructor closes all open files
and free's system resources, like forked processes, shared libraries,
open network connections and shared memory. Now there is no change that
a user forgets to explicitely delete the TROOT object.
- TROOT now inherits from TDirectory instead of TSortable. TROOT is actually
a directory that contains all in-memory directories. Can now also use
ROOT->cd().
- Replaced all void* by appropriate class*'s. Whenever there is a cast
we should be suspicious.
TClass:
- The TClass constructor has new arguments specifying the declaration
file name (.h file) the implementation file name (.cc) and the line
numbers in both files where the declaration and implementation starts.
- New member function AddInstance keeps track of the number of object
instances per class.
Dict:
- Handles member functions with variable number of arguments, ... (ellipses
specifier), by ignoring these functions.
- In case operator new() is protected or private no UI functions using
new() are generated.
- Members returning a reference return a void (could not cast the
void * return type to a reference).
- Member arguments of a local class typedef or enum type get now correctly
the "T<class>::" specifier prepended.
- Adds for classes that contain the macro ClassDef the member function IsA()
(which is contained in the ClassDef macro).
Removed <math.h> from many decks.
Changed "LinkHead" to "ListHead" (global edit in car file).
Changed "ROOT" to "gROOT" (global edit in car file).
Changed "Sizeof()" to "Sizeof() const" (global edit in car file). Since "const"
is part of the function signature all Sizeof() members need to be const,
otherwise the overridding does not work correctly.
=================================================================
Directory $KUMACS contains new utility macros:
draw_class invoked by alias class
draw_doc "" doc
draw_tree '' tree
The Patch, Utils has been restructured to merge all Fortran utilities
used to parse the C++ header files into one single deck REAH.
REAH is called by drawclass, drawdoc, drawtree and dict.
*
*
[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.