ROOT Version 5.10/00 Release Notes
ROOT version 5.10/00 has been released February 28, 2006.
Binaries for all supported platforms are available at:
http://root.cern.ch/root/Version510.html
Versions for AFS have also been updated. See the list of supported platforms:
http://root.cern.ch/root/AFS.html
For more information, see:
http://root.cern.ch
The following people have contributed to this new version:
Ilka Antcheva,
Maarten Ballintijn,
Bertrand Bellenot,
Walter Brown,
Rene Brun,
Philippe Canal,
Olivier Couet,
Christophe Delaere,
Valeri Fine,
Mark Fishler,
Markus Frank,
Gerri Ganis,
Andrei Gheata,
Mihaela Gheata,
Masaharu Goto,
Andy Hanushevsky,
Christian Holm Christensen,
Anna Kreshuk,
Wim Lavrijsen,
Sergei Linev,
Pere Mato,
Richard Maunder,
Lorenzo Moneta,
Axel Naumann,
Eddy Offermann,
Valeriy Onuchin,
Timur Pocheptsov,
Fons Rademakers,
Stefan Roiser,
Paul Russo.
Core
We improved the class autoloader's support of templated classes.
TTree and I/O
- For the XML and SQL output, enhanced support for TClonesArray, streamlined the implementation and layed the ground work to support custom streamers.
- We extended support for operator new in the dictionaries (add support for new array with placement). We implemented a proper 'destructor' for 'emulated objects'.
- We fixed TTree::Draw of std::maps (in the case it contains a pointer and in the case of emulated maps) and fixed several parsing fix in SetAddress.
I/O thread safety
- We reduced reliance on gFile/gDirectory in the ROOT I/O inner code so that only the first level routine (directly called by user code) access gFile and gDirectory. This improves thread-safety.
- We enhanced the STL container streaming code to make it thread-safe.
- Implemented autoloading for TRefs
from multiple processes for the same TTree, e.g. for a
TTree containing
TRefs and a
TBranchRef that gets more branches
containing TRefs added later.
- TBranchRef does not auto-load an already loaded
entry, protecting objects modified in memory.
These changes are backward and forward compatible.
GUI
New Triple Slider Widgets
The new TGTripleHSlider and TGTripleVSlider classes inherit from the double slider widgets and allow easy selection
of a range and a pointer value. The pointer position can be constrained into
the selected range or can be relative to it.
New tutorial Slider3Demo.C - demonstrates triple slider functionality.
TGListBox
Re-implemented the old behavior of selecting several items by clicking the
left-mouse button on the first one, moving the mouse and releasing the
button on the last one.
Qt Layer
Added the enforcement of the Qt-ROOT layer for Qt-applications to eliminate
the need of having .rootrc with 'Gui.Backend qt'. If a Qt application
was started by users, the 'Gui.Backend native' is treated as 'Gui.Backend qt'.
Embedding ROOT in External Applications
Implemented several modifications in TGWin32 and gdk layer that allow to embed
a TCanvas in external applications. It is now possible to create an application
using toolkits as QT and FOX, or MFC, and to embed a ROOT canvas in only a few
steps.
*** IMPORTANT: Do not call TApplication::Run() ***
* In the application constructor or in main(), create a TApplication
// create an instance of TApplication
gMyRootApp = new TApplication("My ROOT Application", &argc, argv);
// tell application to return from run
gMyRootApp->SetReturnFromRun(true);
* Create a timer to process Root events, i.e:
void MyWindow::OnRefreshTimer() {
// Process Root events when a timer message is received
gApplication->StartIdleing();
gSystem->InnerLoop();
gApplication->StopIdleing();
}
* Get the id of the window where you want to embed the TCanvas :
void MyWindow::Create() {
// Add this window to TVirtualX list of windows; in return get its TVirtualX identifier
int wid = gVirtualX->AddWindow((ULong_t)getid(), getWidth(), getHeight());
// Create a new TCanvas, specifying this window\x{2019}s id as parent
fCanvas = new TCanvas("fCanvas", getWidth(), getHeight(), wid);
}
* Forward messages to the Canvas, i.e:
void MyWindow::OnPaint() {
// Handle Paint events
if (fCanvas) fCanvas->Update();
}
void MyWindow::OnSize() {
// Handle Resize events
if (fCanvas) fCanvas->Resize();
}
void MyWindow::OnMouseMove() {
// Handle Mouse move events
if (!fCanvas) return;
if (ev->state & LEFTBUTTONMASK)
fCanvas->HandleInput(kButton1Motion, ev->win_x, ev->win_y);
else
fCanvas->HandleInput(kMouseMotion, ev->win_x, ev->win_y);
}
void MyWindow::OnLMouseDown() {
// Handle Mouse Left button down event
if (fCanvas) fCanvas->HandleInput(kButton1Down, ev->x, ev->y);
}
Qt & ROOT
FOX & ROOT
MFC & ROOT
OpenGL
This release is the last one from Richard Maunder contibuted too.
Many thanks to him for his work with the GL viewer and the impressive
improvements in the past few months.
- Code cleanup, tidying, remove obsolete code, comments improvements.
- Fix some visual glitches with manipulator and clip drawing in wireframe and outline styles.
- Fix outline drawing - blackwire frame is half of opacity of diffuse colors.
- Now outline on back faces - so get a proper outline round any clipped edge.
- Fix silly timeout calc error.
- Improve clipping in GL viewer. Now show back (inner) faces when clipped,
with two sided lighting. Not as good as proper CSG op to cap clipped
solids - but looks better than them being invisible.
- Implement manipulators (translate/scale/rotate) for all shapes in
viewer (previously only clip shapes could use them).
Behaviour:
- Single selection in viewer - either a normal / clip shape or none.
Current manipulator is attached (and shown) when attached to selection.
- Normal viewer shapes are selected using Shift+Left Mouse button (and
have bounding box drawn).
- Clip shapes are shown/selected by checking 'Show/Edit' option on
the Scene/Clipping tab of the GUI.
- Any exisiting (normal/clip) selection is cleared when making new
choice.
- (Transparent) clip shapes cannot be selected (picked) directly in the
viewer - normal shape override this.
Rotation properties of shapes are not reflected in GUI currently.
- gl2ps is now used to render in PostScript the GL part of TPads (GL in pad).
na49view.C can be tried as example.
- TF3 can be drawn using GL in Pad. See examples gltf3.C and glsurfaces.C
- Performance improvements:
- Shape can indicate LOD support by axis. For tubes TGLCylinder only X+
Y supported. Calc LOD hint based on larger projection of Z faces of
bounding box, avoiding excessive LOD for long tubes.
- Only test time limited draws every 50 objects to avoid excessive
timing costs.
- All drawables now implement SuportsLOD() method to test if they can
respond to LOD (tesselation) quality hint. If not the somewhat costly
projection size calculation can be skipped.
- SupportLOD() means low level OpenGL display caching can be enabled
for all shapes (previously only spheres). For shapes which don't support
LOD we create single cache entry using shape ID and kUnsupportedLOD
flag.
Draw times reduced - varries from 10% (Mesa software only GL - no proper
display lists) to about 250% on fast GL card with decent on card memory.
Basic 2D primitives
TLatex
- New example showing the TLatex mathematical symbols.
- #hbar is now available
- Help improvements: some special characters were not described.
TEllipse
- Paint() now uses the FillStyle to control wether or not a filled area
should be painted. It used wrongly the FillColor before.
- PaintEllipse didn't use its inpout parameters to paint the ellipse but
directly the class data members. This prevent to use this method directly.
TPave
- Fix a few problems reported by Thomas Bretz
- fCornerRadius not handled in TPave::Copy
- TPave::GetCornerRadius not const
- TPave::GetBorderSize not const
TGaxis
- New methods SetTitleFont and SetTitleColor to be consistent with TAxis.
- Complete TAttAxis::SetNdivisions help
Histograms, graph and functions drawing
- New options X+ and Y+ to paint the X axis on top of the plot
(default is bottom) and the Y axis on the right of the plot
(Default is left).
- Option FB and BB were not recognize with option ISO
- Improve help of the option "text"
- THStack. The modification done in Revision 1.13 to paint the top of a THStack with
the right color was not working properly in certain cases when there was
more than 3 histograms in the stack: specifically if in a given bin only
one of the histograms is non-empty, then the top of that bin was wrongly
colored with the color of the lowest element of the stack.
This patch fixes this problem. This problem could be seen with the
following example:
void test_lego_stack () {
TH2F * h1 = new TH2F("h1","h1",5,0,6,5,-4,4);
TH2F * h2 = new TH2F("h2","h1",5,0,6,5,-4,4);
TH2F * h3 = new TH2F("h3","h1",5,0,6,5,-4,4);
TH2F * h4 = new TH2F("h4","h1",5,0,6,5,-4,4);
TH2F * h5 = new TH2F("h5","h1",5,0,6,5,-4,4);
h1->SetFillColor(1); // grey
h2->SetFillColor(2); // red
h3->SetFillColor(3); // green
h4->SetFillColor(4); // blue
h5->SetFillColor(5); // yellow
h2->Fill(2,0,11);
h3->Fill(3,0,12);
h4->Fill(4,0,13);
h5->Fill(5,0,14);
THStack * hs = new THStack("hs","test of stack");
hs->Add(h1);
hs->Add(h2);
hs->Add(h3);
hs->Add(h4);
hs->Add(h5);
hs->Draw("lego1");
}
- The statistics parameters names can now be changed thanks to settings
in the file $ROOTSYS/etc/system.rootrc. The default values are the
following:
Hist.Stats.Entries Entries
Hist.Stats.Mean Mean
Hist.Stats.MeanX Mean x
Hist.Stats.MeanY Mean y
Hist.Stats.RMS RMS
Hist.Stats.RMSX RMS x
Hist.Stats.RMSY RMS y
Hist.Stats.Underflow Underflow
Hist.Stats.Overflow Overflow
Hist.Stats.Integral Integral
Hist.Stats.Skewness Skewness
Hist.Stats.SkewnessX Skewness x
Hist.Stats.SkewnessY Skewness y
Hist.Stats.Kurtosis Kurtosis
Hist.Stats.KurtosisX Kurtosis x
Hist.Stats.KurtosisY Kurtosis y
- Errors painting (ThistPainter::PaintErrors): Option E1 painted vertical edge bars for empty bins.
Pad drawing
- Automatically call TPad::Modified when calling some functions like
TPad::SetLogx,y,z, TPad::SetGrid, SetTheta, SetPhi
- New TStyle attribute: HistTopMargin. It defines the margin value between
the top of the histogram and the pad borber. It can be "set" and "get" with
SetHistTopMargin() and GetHistTopMargin(). The default value is 0.05.
Graphics Device Interface
PROOF enhancements
- Implementation of the new method TVirtualProof::Open(...) to start PROOF
sessions (TProof::Open() will also work correctly due to the autoloader
facility). TROOT::Proof() is still available but its usage is deprecated.
- fix de-synchronization problem in TXSocket occasionally causing session
hanging at startup.
- fix race condition in XrdProofdProtocol occasionally causing failures
during concurrent session creation.
- fix definition of the worker host name in TSlave/TXSlave causing
TSlave::GetName() to return the full URL instead of the name.
New features in the Geometry classes
- New class TGeoIterator providing 2 iteration modes for the geometry hierarchy of a
volume:
TGeoIterator next(pMyVolume);
// reusable for other volume:
next.Reset(pMyOtherVolume);
// iteration of all the branch:
next.SetType(0); // default
// iteration of daughter nodes of the current volume:
next.SetType(1);
TGeoNode *node;
while ((node = next())) do_something;
// global matrix for the current node during iteration:
TGeoMatrix *global = next.GetCurrentMatrix();
// path of the current node during iteration:
TString path;
next.GetPath(path);
- Class TGeoOverlap restructured: derived classes TGeoNodeOverlap and TGeoExtrusion
removed and base class became non-abstract.
- Fixes in the overlap checker.
- Overlap checking checks now also assemblies of volumes (TGeoVolumeAssembly)
- Possibility to change existing volumes in a closed geometry with assemblies:
TGeoVolumeAssembly *pMyNewVolume =
TGeoVolumeAssembly::MakeAssemblyFromVolume(pMyOriginalVolume);
gGeoManager->ReplaceVolume(pMyOriginalVolume, pMyNewVolume);
The feature is very useful for replacing virtual containers from an existing
geometry. It can be used (for particle transport) only if the tracking medium
(TGeoMedium) of the replaced volume is the same as the one of the one this is
positioned into.
- Possibility to safely remove an existing node of a volume (if the geometry is
closed or not)
pMyVolume->RemoveNode(TGeoNode *node);
Fitting enhancements and bug fixes
- A bug was fixed in TH1::Fit when the function was called with the option "I".
- In TlinearFitter bug fixes in the robust fitting and the FixParameter function. Before the
array of fixed parameters was not allocated properly and the formula evaluation
part of the robust fitting didn't accord with the last changes in the SetFormula
function.
- Bug fixed in the TH1::Chi2Test function - it used to produce wrong results because of a
needless division by 2 in the TMath::Prob function call.
MathCore
In addition to some bug fixes in the Rotation and Boost classes, this release contains:
- new free functions ROOT::Math::VectorUtil::Boost , BoostX, BoostY and BoostZ to apply boosts to LorentzVector's directly without using the boost classes;
- changes in the coordinate classes to ensure that the phi angle is always defined between [-PI,PI]
More detailed description of the current release can be found at this
location.
MathMore
Added to the special functions the confluent hypergeometric function of the second kind, U(a,b,z). See here for the function definition. Reference documentation of mathmore for this release can be found at this
location.
Minuit2
No major changes for this release, only some minor bug fixes. More
information on Minuit2, the new C++ version of MINUIT, can be found on
the MINUIT Web Site and reference documentation at this location.
SMatrix
Add the support for the symmetric matrices thanks to Juan Palacios.
The SMatrix class has been internally modified by introducing a generic
storage class, which is a template parameter of the matrix class. Two
different implementation of the matrix storage exist, the standard (ROOT::Math::MatRepStd), which is the default one and the symmetric one (ROOT::Math::MatRepSym),
which contains only the N*(N+1)/2 independent elements of a NxN
symmetric matrix. For better performances the offset of the indexes for
symmetric matrices are pre-calculated for symmetric matrices up to size
6x6. The optmized Cramer inversion algorithm for symmetric matrices up
to size 6x6 has been also implemented.
Further modifications in the SMatrix package are:
- return a flag in the SMatrix::Inverse method to flag when the inversion failed
- add a constructor for Identity matrix, to be used like:
- SMatrix<double,3,3> I = SMatrixIdentity();
- rename the function ROOT::Math::Product to ROOT::Math::Similarity. Implement also a Similarity product between a symmetric matrix and a normal matrix
- change the template syntax for the Sub methods of the SMatrix and SVector classes as requested by LHCb
Reference documentation of the SMatrix package can be found at this location.
Reflex
- Fixed problem with inheritance information for classes with default
template parameters when propagating the information to the CINT data
structures (Thx to snyder@fnal.gov for reporting and providing a patch)
- Added the possibility to produce rootmap files for reflex dictionaries.
This will allow seemless loading of reflex dictionary information into CINT
without the need for explicit loading of reflex dictionaries. The genreflex
options are "--rootmap=" and "--rootmap-lib=". being the "rootmap" file to
be generated. the dictionary library containing the reflection information.
- new member function Member::IsArtificial() checking for members which are
artificially injected during the dictionary source code generation.
- fixed bug #2496 Array of std::maps crashes on write.
- fixed bug #14269 problem in parsing xml file for classes with added test
case.
Cintex
- Better handling of C++ exceptions
- Added Cintex into the rootmap file. So explicit loading of Cintex is not
needed anymore via CINT
- Functions returning complex objects by value and throwing exception were
inducing double memory deletes
- Fixed improper handling of functions returning void*
- Fixed bug #14685 overview: Catch SEAL exceptions from PyCintex
New tutorials
- gltf3.C
- glsurfaces.C
- fit2dHist.C
- glViewerLOD.C
- peaks2.C
- Slider3Demo.C
- latex5.C
ROOT page - Class index - Top of the page