ROOT Version 5.34/04 Release Notes
ROOT version 5.32/00 has been released on November 29, 2011.
In case you are upgrading from an old version, please read the releases notes
of version 5.26, 5,28 and version 5.30 in addition to these notes.
The release of version 5.34 is scheduled for May 30, 2012.
- Bindings - packages related to the interplay with other programming languages (Python, Ruby)
- Cint - the C++ interpreter
- Core - the basic ROOT functionality
- Geometry - building, representing and drawing geometrical objects
- 2D Graphics - ROOT's two dimensional graphics interface
- 3D Graphics - ROOT's three dimensional graphics interface
- Graphical User Interface - from basic GUI elements to ROOT's own, complete dialogs
- Histograming - counting values, spectra, and drawing them
- HTML - the documentation generator
- Input/Ouput - storing and reading data
- Mathemathics - everything one can use to calculate: minimizers, matrixes, FFT, and much more
- Miscellaneous - things that didn't make it into the other groups: table
- Monte Carlo - monte carlo and physics simulation interfaces
- Networking - network-related parts, e.g. protocols and authentication interfaces
- PROOF - parallel ROOT facility
- RooFit - a fitting library
- RooStats - a collection of statistical tools
- SQL - database interfaces
- TMVA - multivariate analysis tools
- Trees - ROOT's unique container class and related utilities
- Tutorials - ROOT's Tutorials
For more information, see:
http://root.cern.ch
The following people have contributed to this new version:
Bertrand Bellenot, CERN/SFT,
Rene Brun, CERN/SFT,
Philippe Canal, FNAL,
Olivier Couet, CERN/SFT,
Kyle Cranmer, NYU, RooStats,
Gerri Ganis, CERN/SFT,
Andrei Gheata, CERN/Alice,
Wim Lavrijsen, LBNL, PyRoot,
Lorenzo Moneta, CERN/SFT,
Axel Naumann, CERN/SFT,
Fons Rademakers, CERN/SFT,
Paul Russo, FNAL,
Joerg Stelzer, DESY/Atlas, TMVA,
Alja Tadel, UCSD/CMS, Eve,
Matevz Tadel, UCSD/CMS, Eve,
Eckhard von Toerne, University Bonn, ATLAS, TMVA,
Wouter Verkerke, NIKHEF/Atlas, RooFit,
Core Libraries
ROOT Error Handlers
There is a new rootrc variable which allows to control the
installation of the ROOT error handlers. By default the handlers
are activated:
Root.ErrorHandlers: 1
but setting the value to 0 result in no error handlers being installed
and the originals remaining in place. This can be useful if ROOT is used in
conjunction with other frameworks that already installed their own handlers.
TString
TString::Hash() and thus also TMath::Hash() now use MurmurHash3_x64_128
from http://code.google.com/p/smhasher/ which is public domain.
To accelerate the hash in the case of pointers even further, pointers (and same-sized texts) are hashed using a simple bitwise xor.
This dramatically increases the hash performance for long texts, and still by a factor 5 for pointers.
The pointer case is most visible for certain I/O operations (TExMap).
TColor
Add the method SetAlpha() to set the alpha value (transparency
level) for an existing color.
TStyle
The default font set by gStyle->SetLegendFont() was ignored.
TUnixSystem
- Simplify Setenv coding.
- Implement Unsetenv using the system function unsetenv.
I/O Libraries
TFileCacheRead
- Support for multiple TFileCacheRead per TFile.
Multiple TFileCacheRead per TFile are supported by augmenting the existing TFile::SetCacheRead() function with an optional TObject* argument specifying the owner (i.e. tree) of the cache. This function will assign a TFileCacheRead to a TFile for the given TTree. A cache can be removed by setting the pointer TFileCacheRead to 0.
Similarly, in TFile::GetCacheRead() an optional TObject* argument was added to obtain the TFileCacheRead from a TFile.
In addition to the unassigned TFileCacheRead pointer, TFile will maintain a map of tree specific cache pointers.
Backward compatibility in both functions is handled by making the TObject* argument optional. If it is not specified in the TFile::SetCacheRead() call, only the unassigned TFileCacheRead pointer is updated, otherwise the map and the unassigned cache are updated. In TFile::GetCacheRead(), if an owner is not specified or doesn't exist in the file's cache map, the unassigned cache is returned, unless it is 0 and there is exactly one entry in the cache map.
Distinguish counter for bytes read and read calls for learning phase.
TFileMerger
- Improve efficiency of TFileMerger when merging a single file by doing a TFile::Cp rather than a load/write of the objects.
- In TFileMerger and hadd when objects can not be merged do not overwrite the last object in the set with the first!
- Renable warning about not being able to merge objects in TFileMerger and hadd.
- Fix hadd problem where the incremental merging fails if the TTree are stored in sub-directories.
- Improve the code used for forward compatibility (record the type as TDirectory even-though the class is now TDirectoryFile) by delaying the switching of the class name until it is written (to the buffer). This avoids problem where a TKey is created (by TFile::mkdir) and then immediately used for reading (this happens in the incremental file merger).
Networking Libraries
SQL Libraries
Tree Libraries
Performance
- Automatic support for multiple TTreeCache per TFile.
Multiple TTreeCache per TFile for reading are supported by using the existing TTree::SetCacheSize(Long64_t) interface.
In addition, a TTreeCache for a TTree can be added using TFile::SetCacheRead(TFileCacheRead*, TObject*), where the second (optional) argument is a pointer to the TTree. The cache can be removed by setting the pointer to 0. In that case the user will have to take ownership for the cache.
Similarily, a pointer to the TTreeCache for a TTree can be obtained using TFile::GetCacheRead(TObject*).
- In TBuffer::Expand, when shrinking the buffer do not shrink below the size of the
data already accumulated in the buffer (i. no less than the value of TBuffer::Length).
In TBranch::SetBasketSize, instead of using the hard minimum of 100, use
100 + the length of the branch name (as 100 is too small to hold the
basket's key information for any branch name larger than 30 characters).
Reading form text file
Reworked
TTree::ReadStream and
TTree::ReadFile mainly to fix delimited reading of string columns:
- TLeaf::ReadValue now takes an optional delimiter argument that is ignored for all but TLeafC. Here, input stops when reading this character, instead of at the first whitespace.
Use that in TTree::ReadStream() to delimit reading of TLeafC.
- TTree::ReadStream now tokenizes the row itself, and passes a stringstream containing nothing but the current column to TLeaf::ReadValue.
- Separate concepts of number of input line (for communication with user) and number of good lines (as returned).
- Fix windows files leaving '\n' in branch names when reading them from the file.
- Add error message for TLeaf::ReadValue(), i.e. if ReadValue() is called on a derived class that doesn't implement it.
- Updated and clarified the documentation
TEntryList
- Add new methods to find the base location of files and to modify it.
This allows to relocate the entry-lists to be able to use them of a
system where the files have a different absolute path.
The most relevant new methods are:
- TEntryList::Scan(const char *fn)
Shows the root common paths for the files of the TEntryLists in 'fn'
TEntryList::Relocate(const char *fn, const char *newroot,
const char *oldroot = 0, const char *enlnm = 0)
Relocates all paths starting with 'oldroot' to 'newroot' for the
entry-list 'enlnm' in file 'fn'.
- Remove 'protocol+server' from file tagging and matching, i.e. use
only filepath+anchor; in this way a list is valid even after re-staging
of the dataset files, which typically changes the end-point data servers.
- Entry-lists created with the full path should still be matched correctly.
Miscellaneous
- Repaired the behavior of TTreeCache when the TTree has a dramatic dynamic range with a lots of very small entriesat the beginning and very large entries at the end, the size in bytes of the cluster for the later entries will be very large (because of the cluster size in entries is large!). TTreeCache::FillBuffer was always attempting to load complete clusters not matter the
size (even with the size was larger than 2GB!).
This patch resolves the issue by limiting the amount of memory used to:
- The requested size if more than one cluster fits in the cache.
- Twice the requested size if at least one basket per branch fits in the cache.
- Four time the requested size in the case where the cache can not even hold one basket per branch.
The filling will restart at the next cluster boundary in the case a) and will
restart at the maximum of entry number read in the cache in the case b) and c).
Baskets that are below this boundary and did not fit in the cache will be read
individually.
- Repaired the basket flushing frequency when the TTree has already more than one cluster size.
- Repaired binning of string histogram generated by TTree::Draw.
- Many bug fixes and fix for issues discovery by Coverity, see change log for more details.
- In TTree::MakeProxy add proper support for top level stl collection of objects and for stl collection of objects that are 'empty' in the file (and thus we know nothing about its content).
- Avoid deficiency in hadd when the resulting TTree is longer than the AutoSave length *and* the TFileMerger needs to handle the input files in more than one pass for example when there is more than 1000 input files or the -n option is passed to hadd.
- Fix support for emulated class that derived from an abstract class.
This can happen when reading a file containing an ancient
class layout where the derived class is no longer provided in the
compiled code but the abstract base class is still provided.
It also happens when using schema evolution rules on a class derived
from an abstract base class (in which case the system introduce
implicitly an emulated class deriving from the same base classes
as the evolved from class). To fix the issue, we introduce the TClass::GetStreamerInfoAbstractEmulated
which will return a StreamerInfo representing an emulated version of the
class even if it is loaded.
PROOF System
- Added functionality
- Added interface to simplify the creation of the performance
tree: two new methods TProof::SetPerfTree("<file>") and
TProof::SavePerfTree("<file>", "<queryref>") allow set
and/or save the information to a given file path. The perfomance tree
settim=ngs are diabled after each query, so they need to be enabled
each time. See also Creating
and saving the performance tree.
- Add support for a command line test run of 'proofserv'; this is
useful to test that the environment is setup correctly.
- In TProofBench::DrawCPU, add possibility to extract of a couple
of numbers supposed to give an idea of the computing specs of the
cluster being benchmarked. These are the maximum rate for the standard
CPU intensive task and the normalized, per worker, rate. Both are
expressed in RNGPS (RaNdom Generation Per Second). See also Getting
the performance specs .
- Add class TProofPerfAnalysis collecting a set of tools to
analyse the performance tree. See Analysing
the performance tree .
- Add support for selector-by-object processing in PROOF. The
selector object, created and configured locally by the user, is added
to the input list and recuperated from there on the worker machines for
processing. Any input list setting in the selector itself is not
streamed but temporarly moved to then standard input list, so that user
can use the selector input list as container of processing information
if they find convenient to do so. Process(...) methods with the file
name argument replaced by 'TSelector *' have introduced where
relevant (TProof, TProofPlayer and their derivatives, TDSet).
- Add the possibility to force submerging at node level, i.e. one
submerger per physical machine. In this way the network traffic can be
minimized, for example when merging large output files. The new feature
is enabled by setting the Int_t parameter 'PROOF_MergersByHost' (or the
directive 'Proof.MergersByHost') to a non-null value.
- Simplify enabling of basic feedback. In TProof::Process, add
support for switches "fb=name1,name2,name3,... " or
"feedback=name1,name2,name3,... " in the option field. This enables
feedback for the specified objects, creating a TDrawFeedback object
attached to the session. Feedback for the specified objects is disabled
at the end of the query and the created TDrawFeedback is destroyed. The
special name 'stats' enables the three feedback histograms required by
a dedicated new class TStatsFeedback, and uses a TStatsFeedback instead
of TDrawFeedback to display the feedback.
- Improvements
- Add to TProofMgr two static functions to upload files. These
functions are both called UploadFiles and differ in the first argument,
which is used to pass the files to be uploaded. These can be given as a
list (of TFileInfo or TObjString), a directory or specified in a text
file. See Uploading
data files to a PROOF cluster .
- Add support for paralell dataset verification. This is
implemented via a dedicated TSelector (TSelVerifyDataSet) which is run
over the list of files in the dataset via TPacketizerFile. The file
order is preserved using the recently introduced index in TFileInfo.
- In TProofOutputFile, add switch to control the way histograms
are merged by TFileMerger, i.e. one-by-one or all-in-one-go. The
default is one-by-one which requires much less memory. Merging in
one-go (the previous default) can be activated by passing 'H' in the
constructor options.
- In ProofBench, add possibility to change the location of the
generated files via the third argument of TProofBench::MakeDataSet.
- Several optimizations in the low level PROOF event loop
(TProofPlayer::Process), allowing to reduce dramatically the
overhead introduced by the operations PROOF needs to perform during the
event loop. A measurement of the overhead can be obtained from a very
light computational task, for example, generating one random number and
filling one histogram; executing this task within a PROOF-Lite session
with 1 worker now takes only 1.8 times the time required by a straight
loop in the parent ROOT session; the same number before was about 13.
- In TDrawFeedback::Feedback, call method Draw() of objects not
identified as TH1 derivation. This allows user-defined objects
implementing Draw to be displayed via this utility class.
- In TProof::LoadPackageOnClient, do not create a symlink
'pack_name' to the package dir, but add directly the package dir to the
include path. This solves the longstanding annoying problem of failure
when a directory or file with the name of the package did already exist
in the local working directory.
- Fixes
- Fix merging issue affecting automatic dataset creation when
only one worker is active.
- Fix the realtime reported by TProof::GetRealTime() for masters
(it was overwritten with the ones coming from workers).
- Fix serious problem with TProof::Load: additional files were
not copied in the master sandbox but left in the cache. A workaround
for backward compatibility has also been implemented.
- Fix a problem preventing actions requiring access to worker
nodes (log file retrieval, reset) to work on workers where the username
is different from the one o the master, e.g. PoD on gLite.
- Fix issue with the specification of the working directory
template in 'xpd.multiuser'.
Histogram Libraries
THn, THnBase, THNSparse
- The new, non-sparse n-dimensional histogram THn has been introduced.
It follows the same interfaces as THnSparse, and thus also implements THnF THnD THnC THnS THnI THnL.
NOTE: the memory usage of this class increases with the number of bins, i.e. exponentially with the number of dimensions!
A 5-dimensional THnD with 100 bins per dimension uses more than 80GB of RAM!
Better use THnSparse if only a small fraction of the bins are filled.
- Most algorithms are now implemented in THnBase, the new common base class of THnSparse and THn.
If a function does not care about the actual storage format on in incoming objects it might as well reference a THnBase.
- The bins of THn are held by objects of the new type TNDArray: an n-dimensional array with lazy allocation (only when a bin is set) that implements an operator [].
- THn and THnSparse can be created from histograms and from each other, allowing for easy conversion. There is currently no support for drawing a THnBase-derived object; project it into a TH1/2/3 first.
THistPainter
-
When 1D histograms are painted with the options TEXT and BAR simultaneously, the text for
each bin is placed taking into account the bar offset and bar width attributes. Previously,
when several histogram were drawn that way, the texts overlapped.
-
When a TF1 was clipped vertically, horizotal lines appeared at the maximum and minimum
when the function was draw with a line width greater than 1.
The follwoing macro reproduces the problem:
{
TCanvas *c1=new TCanvas("c1", "A canvas", 10,0, 800, 600);
c1->SetLogy();
histo_dummy=c1->DrawFrame(0,1e-4,27,10);
TF1 gaussian_func("gaussian_func","gaus",0,25.4);
gaussian_func.SetLineColor(kRed);
gaussian_func.SetParameters(1e-2,10,3);
gaussian_func.Draw("same");
}
-
When two histograms where painted on top of each other with the option BOX (the
2nd one with BOX,SAME) the plot was wrong if the minimum of the first histogram
was not zero.
-
Take into account the absolute value of the histogram's minimum to compute the
maximal boxes' size when an histogram is drawn with the option BOX.
-
Add support for drawing the asymmetric errors for the TH1 and TH2
-
The fit function was not drawn in the correct range when a fitted 2D histogram was painted
with the option lego or surf.
-
With option TEXT, do not draw the bins with 0 content for 1D
histograms to be consistent with the 2D histograms case.
Example:
root [0] TH1D * histo = new TH1D ("histo","",20,-5.,5.) ;
root [1] histo->FillRandom("gaus",1000) ;
root [2] histo->Draw("hist,text") ;
TAxis
-
A time axis defined with the GMT option, saved into a root file in a
given time zone, was different when displayed in an other time zone.
The time zone offset in which the axis was created is now saved with
the time axis offset allowing to make the right adjustments when
the axis is displayed in an other time zone.
TGraph2DPainter
-
Because of the range along the Z axis, the following macro produced a wrong plot.
The markers' colors did not match the palette and some of them were not clipped.
{
Double_t x[10] = {1.,2.,3.,4.,5.,6.,7.,8.,9.,10.};
Double_t y[10] = {.4,.5,.1,.3,.8,.4,.5,.6,.2,.1};
Double_t z[10] = {1.,2.,3.,4.,5.,6.,7.3,8.,9.,10.};
TGraph2D *gr = new TGraph2D("graph2d","graph2d",10,x,y,z);
gr->SetMarkerStyle(20);
gr->SetMaximum(7.5);
gr->SetMinimum(2.5);
gr->Draw("zpcol");
}
TMultiGraph
- A new option 3D allows to draw the graphs in a 3D space. See the
following example:
{
c1 = new TCanvas("c1","multigraph L3",200,10,700,500);
c1->SetFrameFillColor(30);
TMultiGraph *mg = new TMultiGraph();
TGraph *gr1 = new TGraph(); gr1->SetLineColor(kBlue);
TGraph *gr2 = new TGraph(); gr2->SetLineColor(kRed);
TGraph *gr3 = new TGraph(); gr3->SetLineColor(kGreen);
TGraph *gr4 = new TGraph(); gr4->SetLineColor(kOrange);
Double_t dx = 6.28/100;
Double_t x = -3.14;
for (int i=0; i<=100; i++) {
x = x+dx;
gr1->SetPoint(i,x,2.*TMath::Sin(x));
gr2->SetPoint(i,x,TMath::Cos(x));
gr3->SetPoint(i,x,TMath::Cos(x*x));
gr4->SetPoint(i,x,TMath::Cos(x*x*x));
}
mg->Add(gr4); gr4->SetTitle("Cos(x*x*x)"); gr4->SetLineWidth(3);
mg->Add(gr3); gr3->SetTitle("Cos(x*x)") ; gr3->SetLineWidth(3);
mg->Add(gr2); gr2->SetTitle("Cos(x)") ; gr2->SetLineWidth(3);
mg->Add(gr1); gr1->SetTitle("2*Sin(x)") ; gr1->SetLineWidth(3);
mg->Draw("a fb l3d");
}

TH1
-
A canvas saved in a .C file generated wrong code if it contained
an histogram drawn with the option COLZ.
-
Add the support for asymmetric errors, by adding the methods TH1::GetBinErrorLow(ibin) and
TH1::GetBinErrorUp(ibin).
- Add possibility to use different bin error types with TH1::SetBinErrorOption(type). The type of errors which one can set are:
- TH1::kNormal: this are the default errors (symmetric) based on the normal approximation. Bin error = sqrt(N).
In case of a weighted histogram (non-integer bin content), the normal approximation is always used
- TH1::kPoisson: in this case the lower and upper error are defined by the 68% classical (frequentist) Poisson interval for N counts
(Garwood Poisson interval).
- TH1::kPoisson2: as above but in this case a 95% (2-sigma) Poisson interval is used.
- Change all the TH1::Add, TH1::Divide, TH1::Multiply, methods and those in the derived classes (e.g. in TProfile classes) to return a boolean. The boolean is set to false in case the method fails (e.g when the histograms are not consistent,
they have different bins)
- Add in TH1::Add a check for the labels. If the histogram axes to be added have same bin labels no warning is produced
CINT
Python/Ruby Bindings
Math Libraries
RooFit Package
TMVA Package
Geometry Libraries
MonteCarlo Libraries
VMC
-
Update of the VMC interfaces for multi-threading:
TVirtualMC and TVirtualMCApplication instances are now declared thread local.
-
Removed deprecated functions from TVirtualMC:
// Return parameters for material specified by material number imat
// Deprecated - replaced with GetMaterial()
virtual void Gfmate(Int_t imat, char *name, Float_t &a, Float_t &z,
Float_t &dens, Float_t &radl, Float_t &absl,
Float_t *ubuf, Int_t &nbuf) = 0;
// Return parameters for material specified by material number imat
// (in double precision)
// Deprecated - replaced with GetMaterial()
virtual void Gfmate(Int_t imat, char *name, Double_t &a, Double_t &z,
Double_t &dens, Double_t &radl, Double_t &absl,
Double_t *ubuf, Int_t &nbuf) = 0;
// Check the parameters of a tracking medium
// Deprecated
virtual void Gckmat(Int_t imed, char *name) = 0;
GUI Libraries
TGTextButton
TRootBrowser
- Use the ProcessedConfigure signal to be notified when an embedded frame change its layout, to properly call Layout() on its parent frame, to automatically display the change (for example, showing the EventStatusBar of a TCanvas embedded in a TBrowser was only appearing after manually resizing the window)
TGFileBrowser
TGFSComboBox
- Fix a problem when the current directory is similar to $ROOTSYS, for example with $ROOTSYS being /home/user/root and $PWD being /home/user/rootdev, only "dev" was displayed, stripping off $ROOTSYS
- Properly handle backslashes as directory separators on Windows
TGFileDialog
- Change the file name only if the selected entry is not a directory (as reported on the forum)
TGMsgBox
- Implemented "Enter" and "Escape" key handling in TGMsgBox (used as Ok and Cancel buttons, if they are there)
TGTextEntry
- Several issues with text selection and combination of cursor position and text alignment in text entries have been solved
TRootCanvas
- A check has been added for the case where the canvas is embedded (e.g. in the browser), then the layout of the main frame has to be re-applied when showing/hiding the editor
- Stay in the current (working) directory when using "File -> Save as..." from a canvas or from a text editor (as the file dialog changes the current directory)
TFitParametersDialog
- Implemented keyboard navigation (tab and shift+tab) between the different number entry fields of the dialog
TFitEditor
- Layout improvements and removed useless text in message box
TTreeViewer
- Fixed a problem with array names (e.g. fVertex[]) as reported on the forum)
TGWin32
- Fixed several resource leaks (including GDI & USER objects)
2D Graphics Libraries
TPDF
-
The table of content entries were not correct if there was and extra option
before "Title:".
-
After a title was once set, this title will be used for all following
additions to the PDF file, instead of "Page ###".
-
Better sizes matching with the screen output for markers 6 and 7 (dots).
-
Implement the transparency in PDF files. To make a graphics object transparent
it is enough to set its color to a transparent one. The color transparency
is defined via its alpha component. The alpha value varies from 0. to 1.
0. makes an object fully transparent, and 1. makes it fully opaque. To set the
alpha value of an existing color it is enough to do:
TColor *col26 = gROOT->GetColor(26);
col26->SetAlpha(0.01);
A new color can be created transparent the following way:
Int_t ci = 1756;
TColor *color = new TColor(ci, 0.1, 0.2, 0.3, 0.5); // alpha = 0.5
An example of tranparency usage with parallel coordinates can be found
in $ROOTSYS/tutorials/tree/parallelcoordtrans.C
TSVG
-
Implement the transparency in SVG files (cf TPDF).
TLegend
-
The option E, to draw the error bar on a legend entry, does not need
anymore the option L to be active. It is now possible to draw the error
bar only using the option E alone. The combination of the options E and L
still works as before.
-
The text attributes were not properly initialized by the default
constructor.
TLatex
TPad
-
New method DivideSquare a canvas in to n sub-pads. The number of sub-pads
along the X and Y axis are computed according to the square root of n.
Example:
void divsquare(int w, int h, int n)
{
TCanvas *c = new TCanvas ("c","c",0,0,w,h);
c->DivideSquare(n);
for (int i=1; i<=n; i++) {
c->cd(i);
gPad->DrawFrame(0,0,1,1);
}
}
- TPad::Print always use TImageDump to print gif, png and jpeg files, in
interactive and batch mode (previously it was used in the batch case only).
This allows to generate output transparent colors in these formats even in
interactive mode. The generation of gif, png and jpeg files from the
graphics window in interactive mode is kept for OpenGL canvases.
TGaxis and TAxis
- The time axis behavior should now be correct along time zone and summer
saving time. A fix has been done with the of Philippe Gras (CEA Saclay.
IRFU/SEDI) and Julian Sitarek (IFAE). Time axis transported from a time
zone to an other in a ROOT file are correct too. A new example test have
been introduced to test the time axis (timeonaxis3.C)
New graphical back-end for MacOSX
TGCocoa/TGQuartz classes are the implementation of TVirtualX based on Cocoa and Quartz 2D.
They let to use ROOT's GUI and graphics on MacOS X without installing X11.app and also give an access to Apple's native
graphics and GUI frameworks. Window management, event loop, event dispatching, etc. are implemented on top of Cocoa.
Graphics (GUI rendering and non-GUI) is done by Quartz 2D (Core Grapchis).
An example of a TCanvas with a THStack object, transparency, anti-aliasing, gradient fill, shadows:
ROOT must be configured with
--enable-cocoa parameter to use Cocoa back-end instead of X11 version.
Please note, this is still a work in progress.
3D Graphics Libraries
EVE
Misc Packages
Tutorials
- The new tutorial timeonaxis3.C test the time axis.
- New version of cernbluid.C allowing to turn off the printouts.
ROOT page -
Class index -
Top of the page -