[ROOT] New ROOT documentation

From: GENTIT Francois-Xavier DAPNIA (GENTIT@dapnia.cea.fr)
Date: Mon Oct 23 2000 - 14:24:19 MEST


  To the authors of the new ROOT documentation,

   Thanks to René Brun, I had the chance to read a pre-release of the new
ROOT documentation and  here are my comments about it.
   First of all, it is clear that it is a huge improvment as compared to
what was available  before. Reading it, I have found that in the past I
missed plenty of interesting features. So  first of all , be insure that I
am very satisfied with this new documentation. If what follows  contains
more critics than compliments, it is not because I do not recognise that
giant step  forward, it is because criticism is a more efficient way of
getting things improved.

   So here are my comments, for every chapter :

   (1) - Chapter 1 Introduction.      : Ok keep it as it is.
   (2) - Chapter 2 Getting Started  : Ok keep it as it is.
   (3) - Chapter 3 A little C++     : It is a good idea to place such a
chapter here. On the  other hand, it is extremely difficult here to find the
right middle between too short  introduction and writing a book on C++. I
think you are too close to the first case. To my mind,  a user knowing
nothing about C++ will not understand what you mean by inheritance. A
definition  of "Stack" and "Heap" would also be useful. You use these
concepts without defining them. You  should also end this chapter with
recommended books on C++.
   (4) - Chapter 4 CINT the C++ Interpreter.      This chapter is very good
until you come to the  point of "compiling a script".  To my mind, ACLiC is
a very strange extension to ROOT. If you  have come to the point where your
script are becoming too slow to execute, it means ( at least to  my opinion
) that you have done the mistake of leaving in CINT things that you should
have  compiled and linked with ROOT. ACLiC looks to me as something for
people in a hurry, not having  time to do things properly. If I am wrong, it
means at least that this chapter was not clever  enough to make me
understand why. If I am right, I think that ACLiC should not be explained
here,  but in an appendix.
   (5) - Chapter 5 Extending ROOT with your code    This chapter is not
clear enough about the  following point : there are 2 ways of extending ROOT
with user classes :
    (A) - either one builds an entirely new ROOT, containing the user
classes in addition. This  requires a main program, which is not documented
in this chapter.
    (B) - either one builds a .so (or .dll) library, which has then to be
loaded through  gSystem.Load("xxx.so");
   I am not sure of what follows, but at least it is what I have experienced
with ROOT : Point  (B) is only working if one does not define global
variables. I have never succeeded in doing a  .so or .dll in case my code
contained global variables. If it is true, this chapter should  explain why.
If it is not true, there is something that I missed in the way to define
global  variables for which I found nothing in this chapter.
   (6) - Collection Classes                        To my opinion, it is the
chapter which  requires the biggest effort to improve. It contains too much
information about internal working  which is of interest only for those
interesting in understanding the code, and not enough  information about the
interest for the user to use collection classes. It should begin by an
explanation about why the "array" construct of C++ is not sufficient. It
should explain why ROOT  is so rich in different collection classes (for
instance, I confess that until now, I have only  used TObjArray, and that I
was hoping in reading this chapter that I would find interest in the
other collection classes, but it was not the case, except for the
TClonesArray class, for which unfortunatly many things remained unclear to
me, I come to this point later ).
  Points unclear to me :
   - for TList, why including a previous and a next pointer, since TIter
does the job ?
   - why not include the operator[] to all collection classes ?
   - for TCloneArray, it is said that they have fixed length, and in the
example given, they are  used for storing tracks, something which by no mean
has fixed length ! There are short tracks  and there are long tracks ! Does
it mean that one reserves always the memory for the longest  possible track
? it seems awful and surely I missed something.
   Besides of this, the chapter terminates abruptly and give no explanation
about THashList,  TOrdCollection ?
   (7) - Chapter 7 Histograms and Fitting  Excellent chapter. Perhaps should
be placed sooner ?
   (8) - Chapter 8 Input/Output            Excellent chapter.
   (9) - Chapter 9 Graphics and Interaction with the user: it is the best
chapter of the book.  Reading it, I profoundly regret to not having it with
me 2 years ago !
   (10)- Chapter 10 Trees                  An other excellent chapter. You
should emphasize much   more the remark at the end of page 195 : ROOT does
not support splitting an object that has  pointers as data members. I felt
several times into this and in that case, ROOT crashes wildly  without any
warning message.
   (..)  I have not yet read the last chapters

   To finish, some regrets or puzzles:
   - Why nothing about 3D ? Coming to this point, the status of ROOT about
3D to-day seems  strange : Why is it possible to do such a complicated thing
as moving in 3D an object like a  TGTRA and impossible to simply define such
simple objects like a 3d line ?
   - I was extremely surprised looking at the drawing of page 140. Here we
can see ROOT working  inside a MacIntosh window !!! Have you installed ROOT
on Mac without making any publicity about  that ???

          F.X. Gentit
          DAPNIA/SPP CEN Saclay
          tel : 01 69 08 30 38     fax : 01 69 08 64 28
          web : http://home.cern.ch/~gentit/



This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:35 MET