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