ROOT Version 5.22/00 Release Notes
ROOT version 5.22/00 has been released on December 18, 2008.
In case you are upgrading from an old version, please read the releases notes
of version 5.16, 5.18 and version 5.20 in addition to these notes.
- 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
- SQL - database interfaces
- TMVA - multivariate analysis tools
- Trees - ROOT's unique container class and related utilities
Binaries for all supported platforms are available at:
http://root.cern.ch/root/Version521.html
Versions for AFS have also been updated. See the list of supported
platforms:
http://root.cern.ch/Welcome.html
For more information, see:
http://root.cern.ch
The following people have contributed to this new version:
Ilka Antcheva,
Jean-François Bastien,
Bertrand Bellenot,
Rene Brun,
Philippe Canal,
Olivier Couet,
Kyle Cranmer,
Valeri Fine,
Fabrizio Furano,
Leo Franco,
Gerri Ganis,
Andrei Gheata,
Mihaela Gheata,
David Gonzalez Maline,
Andreas Hoecker,
Jan Iwaszkiewicz,
Lukasz Janyst,
Anna Kreshuk,
Wim Lavrijsen,
Josef Leydold,
Sergei Linev,
Anar Manafov,
Diego Marcos-Segura,
Lorenzo Moneta,
Axel Naumann,
Eddy Offermann,
Timur Pocheptsov,
Fons Rademakers,
Paul Russo,
Gregory Schott,
Stefan Schmitt,
Alja Tadel,
Matevz Tadel,
Wouter Verkerke,
Hady Zalek
Igor Smirnov
Core
Collections
- Improve the output of the call to Print for ROOT Collections. In TCollection replace Print() methods:
virtual void Print(Option_t *wildcard="") const;
virtual void Print(Option_t *wildcard, Option_t *option) const;
with
virtual void Print(Option_t *option="") const;
virtual void Print(Option_t *option, Int_t recurse) const;
virtual void Print(Option_t *option, const char* wildcard,
Int_t recurse=1) const;
virtual void Print(Option_t *option, TPRegexp& regexp,
Int_t recurse=1) const;
Introduce three new protected methods used to print out collection details.
These are called from the Print() methods and make overriding of what
is printed for a collection / entries easier.
virtual void PrintCollectionHeader(Option_t* option) const;
virtual const char* GetCollectionEntryName(TObject* entry) const;
virtual void PrintCollectionEntry(TObject* entry, Option_t* option,
Int_t recurse) const;
- Improve performance of reading TExMap object (50 times faster) using an updated,
slightly larger (16%) on file format for the TExMap object.
ACLiC
Meta
- Insure that the TClass list of methods is refreshed when new functions are added to the dictionary.
TStyle
- In TStyle::Reset, the Frame
Fill Color default value did not match the TFrame
Fill Color default value.
TSystem
- DirName now properly handle
repeated '/'; this allow mkdir("a/b//c",true); to succeed.
- Extended the support for UNIX sockets on a generic path
I/O
- Fix the order of creation of the TStreamerInfo during the opening of a ROOT file to insure that the CollectionProxy are properly setup.
- Fix problem: "recover warning when opening an empty file
created with TXNetFile" which was due to a bad check in TFile::Recover
(line TFile.cxx:1561) where the inheritance from TFile should be checked
instead of requiring the name to be TFile.
- In TBranch::File, in the case of importing the data directly from
an external TBuffer, remove 80 char limit on reading the class name
- Re-enable support for the
rootrc configuration Root.ZipMode.
Data Model Evolution
First step in the implemantation of the infrastructure for the new Data Model Evolution Scheme.
This Data Model Evolution is brought to your courtesy of BNL/STAR/ATLAS/Fermi/Cern
Current Capabilities
- Assign values to transient data members
- Rename classes
- Rename data members
- Change the shape of the data structures or convert one class
- structure to another
- Change the meaning of data members
- Ability to access the TBuffer directly when needed
- Ensure that the objects in collections are handled in the same
way as the ones stored separately
- Supported in object-wise, member-wise and split modes.
Coming soon
- Make things operational also in bare ROOT mode
- Ability to transform data before writing
- Support for changing the class type of nested object in a split
branch
- Support for access to onfile version of nested objects from
within the parent rule
LinkDef rule syntax
Setting a transient member:
#pragma read sourceClass="ACache" targetClass="ACache" source=""
version="[1-]" target="zcalc" \
code="{ zcalc = false; }"
Setting a new member from 2 removed members:
#pragma read sourceClass="ACache" targetClass="ACache"
source="int x; int y; char c" version="[8]" target="z" \
code="{ z = onfile.x*1000 + onfile.y*10; }"
Renaming a class:
#pragma read sourceClass="ACache" version="[8]"
targetClass="Axis" \
source="int x; int y;" target="z" \
code="{ z = onfile.x*1000 + onfile.y*
#pragma read sourceClass="ACache" version="[9]"
targetClass="Axis";
See the long form documentation
Selection XML syntax
<read sourceClass="ACache" targetClass="ACache" source=""
version="[1-]" target="zcalc">
<![CDATA[
{ zcalc = false; }
]]></read>
NET release notes
XROOTD
- Fixes:
-
Fix race condition that would disable connections
SQL
Tree
Fixed support for vector<bool> and vector<string>
Added support for top level object that do not inherit from TObject _AND_ have a custom streamer (like std::string and TString);
Tree Viewer
- In TParallelCoordVar the "average marker" for candle plots was not painted at
the right place in case of horizontal view.
- Protection added in:
TParallelCoord::TParallelCoord(TTree* tree, Long64_t nentries)
in case nentries > tree->GetEstimate()
in such case a warning is printed and fNentries is set to
tree->GetEstimate()
instead of nentries.
PROOF release notes
PROOF
- New functionality
- PROOF-Lite
- 2-tier
realization of PROOF intended for multi-core machines; the client
starts directly the workers; no daemon is required. To start a session
just use TProof::Open("") or TProof::Open("lite"). From there on
everything should be as in normal PROOF. To start a standard PROOF
session (i.e. via daemons) on the localhost use
TProof::Open("localhost").
- XrdProofd plug-in
- Possibility to define the list worker directly in the
xrootd config file (new directive xpd.worker, see Wiki reference pages)
- Support for automatic reconnections in the case xrootd
is restarted
- Dedicated admin area (under xrd.admin/.xproof.port) to
keep information about active and terminated sessions, and active
clients. This is used to reguraly check the client and session
activity, to cleanup orphalin sessions and to shutdown inactive client
connections.
- domain + level control of printout message
- Dynamic "per-query" scheduling
- Dynamic worker startup. It can be enabled by the cluster
administrator with the 'xpd.putrc Proof.DynamicStartup 1' directive
in the config file. The effect is that a session starts only on
the master. When a query is submitted (call to TProof::Process),
the session master contacts the scheduler.
In response it receives a list of workers and starts the worker
processes. The environment is copied from the master to the workers.
It consist of: the include and library paths, the set of enabled
packages as well as the macros loaded by the user.
- Flexible and fault-tolerant workers
- A packet resubmitting mechanism. When a worker dies all the
packets that it processed are resubmitted.
- Added the possibility to handle dynamically removed workers and partly processed
packets (when a worker is stopped while processing a packet it finishes
the current event and the rest of the packet is reassigned to another workers).
It's done by a new method TPacketizerAdaptive::AddProcessed(TSlave *sl,
TProofProgressStatus *st, TList **) and TPacketizerAdaptive::ReassignPacket.
- Add
possibility to display the memory footprint on workers and master as a
function of the entry processed (workers) or of the merging step
(master). A new button has been added to the PROOF dialog box to
retrieve and display the memory usage. On the workers about 100
measurements are recorded by default; this number can be changed with'proof->SetParameter("PROOF_MemLogFreq", memlogfreq)';
- Improvements:
- More
complete set of tests in test/stressProof . To run with PROOF-Lite pass
the argument 'lite' as master URL, e.g. './stressProof lite'.
- Possibility
to control on the client via rc variable the location of the sandbox,
package directory, cache and dataset directory (the latters two only
for PROOF-Lite); the variable names are 'Proof.Sandbox', 'Proof.PackageDir', 'Proof.CacheDir' and 'Proof.DataSetDir'. The default location of the sandbox has been changed from "~/proof" to "~/.proof" to avoid interferences with possible users' working areas.
- XrdProofd plug-in
- Overall refactorization for easier
maintainance and improved solidity
- Improved format of printout messages: all information
messages contain now the tag 'xpd-I' and all error messages the
tag 'xpd-E', so that they can easily be grepped out from the
log file.
- Log sending
-
Implement selective sending of logs from workers to master to avoid duplicating
too many text lines on the master log. Logs are now sent only after Exec, Print
requests and in case an error (level >= kError) occured. Of course, the full
logs can always be retrieved via TProofMgr::GetSessionLogs
- Log retrieval:
- for 'grep' operations, use the system 'grep' command
via 'popen'
instead of a handmade filtering; this implies that the full grep
functionality is now available
- set the default number of displayed lines to 100
instead of 10
- Improve diagnostic in case of worker death: clients will
now
receive a message containing the low level reason for the failure and a
hint for getting more information
- In
TProofOutputFile, support the "<user>" and "<group>"
placeholders in the output file name to automatically re-direct the
output to an area specific to the logged user.
- Addition of a new class TProofProgressStatus, which is used to keep
the query progress stauts in all the TProofPlayer objects and in the
TPacketizerAdaptive. It is also send in kPROOF_GETPACKET and
kPROOF_STOPPROCESS messages.
- The class TPacketizerProgressive is removed.
- Changing the protocol version to 19: TProofProgressStatus used in
kPROOF_STOPPROCESS and kPROOF_GETNEXTPACKET messages in Master - worker communication
- Fixes
- Invalidate the TProofMgr when the physical connection is
closed; avoids
crashing when trying to get the logs after a failure.
- Fix a memory leak in log retrieval (the TProofLog object
was never
deleted)
- Add protections for the cases the manager cannot be
initialized
- Fix a race condition possibly affecting the handling of
workers death
- Avoid duplicating worker logs in the master log file
unless
when explicitely needed by the request (Exec(...), Print(...)) or when
an error occured
- Fix
problem with the determination and transmission of the name of the
object to be processed. The problem appeared when processing files
containing >1 trees in changing order.
- Fix problem with TProof::Load loading the macro to one worker only per machine
- Fix wrong return code preventing the correct propagation of the full ClearPackage to workers
- Fix a problem causing the whole query to stop even in the case a worker was terminated gently with SIGTERM.
-
Fix a problem triggering full re-build of a package upon change of a
single file; the version info file was wrongly reset; this should
happen only after a re-build.
- Make sure that in case multiple TProofOutputFile are present, each get merged correctly
- Fix problem in TProofServLogHandler::Notify due to bad usage of Form(...).
Histogram package
Modify implementation of the Fit function in the histograms and data classes to use a new common implementation, defined in the file HFitImpl.cxx. This file provides the implementation of the function used for bin fitting of the data objects of the histogram package, TH1's, TGraph, TMultiGraph, TGraph2D, and un-binned maximum likelihood fit for TTree data (used by the TTree::UnbinnedFit method).
HFitInterface.h
Header file defining functions in the namespace ROOT::Fit providing functions required for fitting the data objects of the histogram package. These functions are used for example from other libraries like the FitPanel or the TTreePlayer for performing the fits.
-
ROOT::Fit::FitObject: function for fitting the data objects. Requires the user to pass in addition to a pointer to the object, the fit options (via the FOption class and not a string), the minimizer options and the fit data range.
-
ROOT::Fit::FillData: function for filling the fit data from the histogram data objects. Used for fitting an histogram using the ROOT::Fit::Fitter class.
-
ROOT::Fit::UnBinFit:: function for fitting an unbinned data sets, for example obtained from TTree data.
using the fit data.
TBackCompFitter
New class providing a backward compatible implementation of the
TVirtualFitter using the new fitting class. It is wrapping the functionality of
the ROOT::Math::Fitter and it
can be used to retrieve the fit information (result and
configuration) via the
TVirtualFitter API from FitConfig and FitResult. A static instance of this class
is created after calling the histograms and graph Fit methods in order to retrieve the full fit information after having fit. This gives full backward compatibility functionality in fitting.
This class in addition to the TVirtualFitter provides the following funcitonality:
- access direct to references to ROOT::Fit::FitResult and ROOT::FitConfig objects via the member functions TBackCompFitter::GetFitResult() and TBackCompFitter::GetFitConfig()
- Possibility to set the fit the fit function directly as a function pointer to a muldi-dimensional function interface instead of using the TMinuit FCN style API.
- New methods for making in a easy way contour , with TBackCompFitter::Contour, and scan plots of the objective function, with TBackCompFitter::Scan. Both Scan and Contour takes as input a TGraph which on exit will be filled with the scanned or contour points.
TH1
-
Re-implement TH1::Fit using the functions defined in HFitImpl.cxx.
- Add new function TH1::Interpolate to approximate the value via linear interpolation. Implementation from Any Mastbaum.
- Fixed a bug in rebinning in a new variable bin histogram.
- Fixed a bug in copy constructor of histograms
- define now kNstat as an enumeration in the TH1 class, to avoid using wrong values for this constant variable. This fixes a previous bug in TProfile3D
TH2
- Share a common implementation for (FitSlicesX,FitSclicesY) and (ProfileX, ProfileY) using a common protected method.
- Add possibility to be used in the FitPanel (add a TH2::FitPanel() method).
- Add also here the new function TH2::Interpolate.
- fix a bug in the resulting statistics in TH2::ProjectionX(Y) when all range was used
- fix a bug in getting the right axis and limits in TH2::ProfileX(Y)
TH3
- Add new option "NUF" and "NOF" in TH3::Project to have excluded the underflow/overflow (they are included by default).
- Add option "UF" and "OF" in TH3::ProjectProfile to include the underflow/overflow. By default they are now excluded while in the previous version they were included. This is consistent with the projection from a TH2.
-
Fixed a bug in TH3::Project reported by Marco Van Leeuwen in setting the bin error in the projected histogram when a range was set in the projected axis.
- Add possibility to be used in the FitPanel (add a TH3::FitPanel() method).
TProfile
- Fix a bug in TProfile::Rebin. The underflow and overflow were not properly taken into account
TProfile3D
- Fix a bug in the copy constructor and assignment operator
THnSparse
fix a bug in SetBinError
fix in THnSParse::Rebin
fix error calculation in Multiply
TGraph
-
Change the API of TGraph::GetPoint from
void TGraph::GetPoint(Int_t i, Double_t &x, Double_t &y) const
to
Int_t TGraph::GetPoint(Int_t i, Double_t &x, Double_t &y) const
The function returns -1 in case of an invalid request or the
point number otherwise.
- Re-implement TGraph::Fit using the functions defined in HFitImpl.cxx.
TGraph2D
- Re-implement TGraph2D::Fit using the functions defined in HFitImpl.cxx.
- Add possibility to be used in the FitPanel (add a TGraph2D::FitPanel() method).
TMultiGraph
- Re-implement TMultiGraph::Fit using the functions defined in
HFitImpl.cxx.
- Add possibility to be used in the FitPanel (add a
TMultiGraph::FitPanel() method).
- Protection added in Draw(): "Cannot draw empty TMultiGraph".
TGraphPainter
- When a histogram was drawn in a larger frame than its limits (using the
option "SAME"), the `outside' vertical lines for the first and last bins
were not drawn. The macro below demonstrates the problem:
{
TH1D h("h", "h", 10., 0., 1.);
h.SetBinContent(1, 1.);
h.SetBinContent(3, 1.);
h.SetBinContent(10, 1.);
h.SetFillColor(1001);
h.SetFillColor(kOrange-2);
h.SetLineColor(kBlack);
TCanvas canvas("canvas");
frame = canvas.DrawFrame(-1., 0., 2., 2.);
h.Draw("SAME");
}
TPaletteAxis
- New method Int_t TPaletteAxis::GetBinColor(Int_t i, Int_t j) to
return the color index of the bin (i,j).
This funtion should be used after an histogram has been plotted with the
option COL or COLZ like in the following example:
h2->Draw("COLZ");
gPad->Update();
TPaletteAxis *palette =
(TPaletteAxis*)h2->GetListOfFunctions()->FindObject("palette");
Int_t ci = palette->GetBinColor(20,15);
Then it is possible to retrieve the RGB components in the following way:
TColor *c = gROOT->GetColor(ci);
float x,y,z;
c->GetRGB(x,y,z);
TFormula
-
Fixed a bug in TFormula::GetExprFormula. Now the correct formula is returned for expressions based on CINT type functions.
TF1
-
Fixed a bug in the calculation of the integral of multi-dimensional interpreted functions. The method TF1::operator() (const double *x, const double *p) calls now TF1::InitArgs in the case of CINT functions.
- Fixed a bug in using the TF1::GetMinimum(), TF1::GetMaximum(), TF1::GetMinimumX, TF1::GetMaximumX, TF1::GetX with default arguments.
- Fixed a bug when copying functions obtained from member functions of interpreted classes
THStack
-
In THStack::Paint() replace
fHistogram->Paint("axissame"); by
gPad->RedrawAxis(); in order to fix the bug described here:
https://savannah.cern.ch/bugs/?41423 .
The simple following macro was enough to show the problem:
{
TH1D h("h", "h", 10., 0., 1.); h.Fill(.5);
THStack s("s", "s"); s.Add(&h);
TCanvas canvas("canvas");
frame = canvas.DrawFrame(-1., 0., 2., 2.);
frame.SetLabelSize(0.05, "XY");
frame.Draw(); s.Draw("same");
}
- Make the data member fHistogram persistent in order to save the
axis attributes which may have been changed during a root session (like,
for instance, the axis titles).
- When a THStack is drawn with the option "pads", the number of lines is
now optimized to make sure there is no empty line.
TUnfold
-
Introduces this new class for solving inverse problems:
data histograms with Gaussian errors are decomposed into
several template distributions ("generator level" bins).
The result are new normalisation constants for the template
distributions (the unfolded "generator level" distribution).
The solution can be tuned by properly adjusting the
regularisation parameter tau. A standard method, the L-curve scan is
implemented to help finding a good choice of this parameter.
- Two example tutorials are included to show the usage of this class: tutorials/math/testUnfiold1.C and tutorials/math/testUnfiold2.C
FitPanel
Add a new revised version of the Fit Panel with the following functionality:
- Add support now for fitting, in addition to the TH1 and TGraph
also for TH2, TH3, TMultiGraph and TGraph2D and TTree (with un-binned
fits)
- Add possibility to select the data object directly from the Fit
panel. The Fit Panel can also be open directly from the TCanvas menu
(under Tools)
- Improve the function selection by having the possibility to
support user defined function, predefined functions and functions
used before for fitting.
- Allow the opening of the parameter dialog in case of linear
fitter. This is needed for example for fixing some of the
parameters
- Improve minimization panel by adding some extra methods, like
combined for a combined migrad-simplex minimization (option
"MINIMIZE" in Minuit).
- Improve the slider by adding a numeric entry.
- Add the Advanced Graphics dialog, that allows the user to perform
Contour and Scan operation on the last fit.
- Fix various bugs in setting the fit model function and in
setting the parameters (values, limits, etc..)
Here is how the fit panel is now:

These are the currently support methods for the new Advance Graphics dialog:

CINT
Reflex
- GCCXML 0.9 is now fully supported.
- GCCXML 0.6 is no longer supported.
- genreflex can now generate dictionaries for classes deriving (directly or indirectly) from TObject or any other class using the ClassDef(classname, version) macro.
- Member::Invoke() and Object::Invoke() now expect the return value's buffer as an argument. This fixes memory leaks caused by the Reflex function wrappers and invalidation of results.
- Search path for GCCXML is now --gccxmlpath= specified to genreflex, ROOT configured with --with-gccxml, gccxml in $PATH; then abort
Cintex
- Support SELinux (e.g. on SLC5).
MATLAB
A MATLAB/ROOT interface has been developped by Johannes Kissel.
It is a data interface for reading and writing ROOT files from within MATLAB
just as you do with MATLAB files. For more information, see this announcement at the ROOT Forum.
PyROOT
Support for python 2.6 has been added. Older versions will compile fine, but will
have problems when using the buffer interface for C arrays.
For user convenience, code was added to load a custom rootlogon.py/.C, if available.
This code is loaded on first use of the ROOT module, and the python rootlogon.py is
loaded as a module.
The language was improved by added a _creates property to all MethodProxy methods.
By setting this value to True, objects returned by such methods will be owned (and
reference counted) by the python interpreter.
By default, the Clone() and DrawClone() methods will have _create equal to True.
Math Libraries
MathCore
- TKDTree: new class for representing a kd-tree (a k-dimensional tree). See the TKDTree class documentation for a detailed description of the method.
- TMath: change slightly the signature of TMath::Sort(n,x,w). Now the type of the index array (w) and the type of the size (n) have to be the same. Before the type of (n) was not templated and was a Long64_t, therefore, due to automatic compiler conversion one could instantiate for example a TMath::Sort by having as unsigned int for the size for the array and int for the array. Now this is not possible anymore and one must pass the same type. This is now consistent with other similar TMath functions. Now in the CINT dictionary contains also the instantiations for both cases of Long64_t and Int_t for the size (and index array) types.
-
Fixed a bug in the ROOT::Math::landau_pdf function. Now it evaluates to the correct normalized distribution when the scale factor is different than 1.
- TVirtualFitter: move TVirtualFitter from base to mathcore. Setting the minimizer parameters is done via the new class ROOT::Math::MinimizerOptions. Fixed also a bug in the TVirtualFitter destructor, which was preventing the deletion of the static instance and causing in same cases memory leaks.
- ROOT::Math::MinimizerOptions: new class keeping the minimizer control parameters, minimizer name and algorithms. Static values of the parameter exist and can be set and retrieved via corresponding static methods.
- Fitting Classes: improve in general all classes in view of using them in the histogram and graph fitting routines. Few bugs have been as well fixed (see the cvs log for details). The fitter class are used now to implement the Fit funcitonality of the Hist library.
The Fitter has been changed to retain a pointer to the Minimizer and Objective function of the last fit. The objective funciton depends on a reference to the data and the model function, therefore the objective function pointer is valid as far the data and the model function are mantained alive.
MathCore
- Fixed a bug in setting the VEGAS integration mode in the GSLMCIntegrator class.
Fumili
- Add implementation of Minimizer interface using TFumili.
Minuit
-
In TMinuitMinimizer: do not delete the contained TMinuit reference, but maintain it alive, and accessible outside as gMinuit. It can then be used after fitting, for example for drawing contour plots. Add also support for Scan and Contour plots.
-
TLinearMinimizer: add support for robust fitting
Minuit2
- Add support to perform parallel minimization using a thread for each gradient calculation with openMP. In the ROOT environment the Minuit2 library can be build using openMP ( -fopenmp compilation flag for gcc) if the environment variables USE_PARALLEL_MINUIT2 and USE_OPENMP are set.
In the Minuit2 standalone built libraries (using autoconf) support for openMP is automatically enabled, whenever the compiler supports it (for example for gcc version >= 4.2). Some small changes have been applied in Minuit2 to make it thread safe. For example, when transforming from internal to external values, the parameter values are not cached anymore in MnUserTransformation class.
- DavidonErrorUpdator: add an additional check to avoid a division by zero.
- In Minuit2Minimizer fill the status information according to the minimizer result
- Add Scan and Contour methods in the Minuit2Minimizer class
GenVector
- Change the way the exception are thrown in the package (class GenVector_exception). Now, the GenVector_exception class is created only when the throwing of exception is enabled. This avoids the allocation of an un-needed std::string. This problem was observed in CMS when converting from 4D-vectors based on mass to standard (x,y,z,t) vectors, when the mass is zero. In this case, a numerical error creates artificially small negative masses returned by the (x,y,z,t) vector. Eventually a protection could be added when calculating M2(), to avoid negative values due to numerical rounding.
- Fix a problem in the assignment operator of the ROOT::Math::PxPyPzM4D class. Avoid having nan when converting for example from PxPyPzME4D to PxPyPzM4D when the mass is negative.
- Throw always exception in the non-supported setters (i.e. SetPt on a PxPyPzEVector) methods, which are generated only for the CINT dictionary. These methods flag a compiled-error when running in C++ mode.
SMatrix
- Change implementation of the SMatrix::Invert and SMatrix::Inverse methods. Now the optimized method based on the Cramer rule is used only for matrix up to sizes 2x2. The standard methods based on LU (for ordinary square matrix) or Bunch-Kaufman factorization (for square matrix) are used. The factorization method, although slower for small size matrices, they suffer much less from numerical precision problems.
- New methods SMatrix::Invert and SMatrix::InverseFast are added for using the Cramer rule for up to matrix of sizes 5x5. This method has exactly the same implementation as the Invert and Inverse of the previous ROOT version.
Physics
-
TLorentzVector:Change in the implementation of the function SetPtEtaPhi and SetPtEtaPhiM the algorithm to calculate z from pt and eta. Use now, as in the GenVector package, the expression z = pt * sinh(eta) instead of using the tangent and the arc-tangent. This is is more efficient and avoids a problem found on 64 bit machines when eta=0. by Dariusz Miskowiec.
Unuran
- New version (1.3) from Josef Leydold fixing some warnings on Windows Visual Studio 9.
RooFit
New tutorial macros available
A completely new set of 70(!) tutorial macros is now available in $ROOTSYS/tutorials/roofit
These macros are divided in several subjects and are all referenced as iluustrations of concepts explained in the forthcoming edition on RooFit Users Manual.
All macros are extensively documented and each is fully functional standalone. The accompanying update
of the Manual is expected mid-September.
BASIC FUNCTIONALITY
- rf101_basics.C - Fitting, plotting, toy data generation on one-dimensional p.d.f
- rf102_dataimport.C - Importing data from ROOT TTrees and THx histograms
- rf103_interprfuncs.C - Interpreted functions and p.d.f.s
- rf104_classfactory.C - The class factory for functions and p.d.f.s
- rf105_funcbinding.C - Demonstration of binding ROOT Math functions as RooFit functions and pdfs
- rf106_plotdecoration.C - Adding boxes with parameters, statistics to RooPlots.
- rf107_plotstyles.C - Demonstration of various plotting styles of data, functions
- rf108_plotbinning.C - Plotting unbinned data with alternate and variable binnings
- rf109_chi2residpull.C - Calculating chi^2 from histograms and curves in RooPlots,
- rf110_normintegration.C - Examples on normalization & integration of p.d.f.s, construction of cumulative distribution functions.
- rf111_numintconfig.C - Configuration and customization of how numeric (partial) integrals
ADDITION AND CONVOLUTION
- rf201_composite.C - Composite p.d.f with signal and background component
- rf202_extendedmlfit.C - Setting up an extended maximum likelihood fit
- rf203_ranges.C - Fitting and plotting in sub ranges
- rf204_extrangefit.C - Extended maximum likelihood fit with alternate range definition
- rf205_compplot.C - Options for plotting components of composite p.d.f.s.
- rf206_treevistools.C - Tools for visualization of RooAbsArg expression trees
- rf207_comptools.C - Tools and utilities for manipulation of composite objects
- rf208_convolution.C - One-dimensional numeric convolution
- rf209_anaconv.C - Decay function p.d.fs with optional B physics
MULTIDIMENSIONAL MODELS
- rf301_composition.C - Multi-dimensional p.d.f.s through composition, e.g. substituting a p.d.f parameter with a function that depends on other observables
- rf302_utilfuncs.C - Utility functions classes available for use in tailoring
- rf303_conditional.C - Use of tailored p.d.f as conditional p.d.fs.s
- rf304_uncorrprod.C - Simple uncorrelated multi-dimensional p.d.f.s
- rf305_condcorrprod.C - Multi-dimensional p.d.f.s with conditional p.d.fs in product
- rf306_condpereventerrors.C - Complete example with use of conditional p.d.f. with per-event errors
- rf307_fullpereventerrors.C -Complete example with use of full p.d.f. with per-event errors
- rf308_normintegration2d.C - Examples on normalization of p.d.f.s in more than one dimension
- rf309_ndimplot.C - Making 2 and 3 dimensional plots of p.d.f.s and datasets
- rf310_sliceplot.C -Projecting p.d.f and data slices in discrete observables
- rf311_rangeplot.C -Projecting p.d.f and data ranges in continuous observables
- rf312_multirangefit.C - Performing fits in multiple (disjoint) ranges in one or more dimensions
- rf313_paramranges.C - Working with parameterized ranges to define non-rectangular regions
- rf314_paramfitrange.C - Working with parameterized ranges in a fit.
- rf315_projectpdf.C - Marginizalization of multi-dimensional p.d.f.s through integration
- rf316_llratioplot.C - Using the likelihood ratio techique to construct a signal enhanced 1-D projection of a multi-dimensional p.d.f.
DATA AND CATEGORIES
- rf401_importttreethx.C -Overview of advanced option for importing data from ROOT TTree and THx histograms
- rf402_datahandling.C - Tools for manipulation of (un)binned datasets
- rf403_weightedevts.C - Using weights in unbinned datasets
- rf404_categories.C - Working with RooCategory objects to describe discrete variables
- rf405_realtocatfuncs.C - Demonstration of real-->discrete mapping functions
- rf406_cattocatfuncs.C - Demonstration of discrete-->discrete (invertable) functions
- rf407_latextables.C - Latex printing of lists and sets of RooArgSets
ORGANIZATION AND SIMULTANEOUS FITS
- rf501_simultaneouspdf.C - Using simultaneous p.d.f.s to describe simultaneous fits to multiple datasets
- rf502_wspacewrite.C - Creating and writing a workspace
- rf503_wspaceread.C - Reading and using a workspace
- rf504_simwstool.C - Using RooSimWSTool to construct a simultaneous p.d.f that is built of variations of an input p.d.f
- rf505_asciicfg.C - Reading and writing ASCII configuration files
- rf506_msgservice.C - Tuning and customizing the RooFit message logging facility
- rf507_debugtools.C - Using the RooFit memory tracing debug tool
- rf508_listsetmanip.C - RooArgSet and RooArgList tools and tricks
LIKELIHOOD AND MINIMIZATION
- rf601_intminuit.C - Interactive minimization with MINUIT
- rf602_chi2fit.C - Setting up a binning chi^2 fit
- rf603_multicpu.C - Setting up a multi-core parallelized unbinned maximum likelihood fit
- rf604_constraints.C - Fitting with constraints
- rf605_profilell.C - Working with the profile likelihood estimator
- rf606_nllerrorhandling.C - Understanding and customizing error handling in likelihood evaluations
- rf607_fitresult.C - Demonstration of options of the RooFitResult class
SPECIAL PDFS
- rf701_efficiencyfit.C - Unbinned maximum likelihood fit of an efficiency eff(x) function
- rf702_efficiencyfit_2D.C - Unbinned maximum likelihood fit of an efficiency eff(x) function to
- rf703_effpdfprod.C - Using a product of an (acceptance) efficiency and a p.d.f as p.d.f.
- rf704_amplitudefit.C - Using a p.d.f defined by a sum of real-valued amplitude components
- rf705_linearmorph.C - Linear interpolation between p.d.f shapes using the 'Alex Read' algorithm
- rf706_histpdf.C - Histogram based p.d.f.s and functions
- rf707_kernelestimation.C - Using non-parametric (multi-dimensional) kernel estimation p.d.f.s
- rf708_bphysics.C - Special decay pdf for B physics with mixing and/or CP violation
VALIDATION AND MC STUDIES
- rf801_mcstudy.C - A Toy Monte Carlo study that perform cycles of event generation and fittting
- rf802_mcstudy_addons.C - RooMCStudy: using separate fit and generator models, using the chi^2 calculator model
- rf803_mcstudy_addons2.C - RooMCStudy: Using the randomizer and profile likelihood add-on models
- rf804_mcstudy_constr.C - Using RooMCStudy on models with constrains
Miscellaneous small improvements
A very large number of small fixes and interface improvements have been made in the context of the systematic review of all methods for the new tutorial macros and updated Users Manual.
Listed below are the most significant functionality upgrades that were introduced in the process.
- Runtime binding of C++ functions - You can now trivially bind at run time any C++ functions as a RooFit function or p.d.f. objects, e.g. RooAbsReal* erfx = bindFunction("erfx",TMath::erf,x). See rf105_funcbinding.C for details
- Runtime binding of TFx functions - You can now trivially bind at run time any ROOT TFx function as a RooFit function or p.d.f. objects, e.g. RooAbsReal* myFunc = bindFunction(myTF1,x). See rf105_funcbinding.C for details
- RooAbsReal - The handling of -log(L) evaluation errors in plotting is now explicitly controllable, just like in fitting. See rf606_nllerrorhandling.C for details
- RooDataHist - Add new named argument constructor that can collate multiple ROOT THn histgrams into a n+1 dimensional RooDataHist
- RooDataSet - Add new named argument constructor that can collate multiple input RooDataSets into a n+1 dimensional RooDataSet.
Add createHistogram() method for simplified plotting
- RooFitResult - Add new method correlationHist() that returns a labeled TH2 with the contents of the fit correlation matrix
- RooFFTConvPdf - Automatically put sampling windows of 'resolution model' p.d.f. centered around zero, even if fit range of convolution observable does not bracket zero. Improve internal effeciency
- RooAbsData - Add ability to plot efficiency distribution with correct binomial errors given a RooRealVar and a RooCategory category observable encoding distribution and accept/reject state respectively. See rf701_efficiencyfit.C for details
- RooAbsPdf - Included extended ML term by default in fit if p.d.f is extendable. You can still use Extended() to override default behavior. Do not run MINOS by default anymore if no fit options are provided.
- RooProfileLL - Add option to always start minimization from global minimimum (takes more time, but improves reproducibility). Can now profile multi-core paralellized likelihoods as well.
- RooRealSumPdf - Enable plotting of component p.d.f.s using same scheme as RooAddPdf, i.e. just use the Components() specified in plotOn().
- RooExpensiveObjectCache - New cache manager for sharing and storing of expensive components cached by operator p.d.f.s
- RooMCStudy - Add Silence() argument to constructor to request minimal verbosity during running
- RooMinuit - Improve contour() method to return RooPlots rather than drawing TGraphs straight on a canvas
- RooWorkspace - Add private expensive object cache to workspace
- RooBinningCategory - New real-to-category function that maps values of input RooRealVar to categories with labels that correspond to bins of input RooRealVar. See rf405_realtocatfuncs.C for details
RooStats
This is a new package introduced in this version for statistical tools built on top of RooFit. It is a joint effort between the LHC experiments and the ROOT team (see the RooStats Wiki page).
This version contains the interfaces for performing the statistical calculations and dealing with the obtained results and concrete classes implementing the statistical methods.
All the classes and functions in RooStats are provided in the namespace RooStats.
RooStats interfaces
- ConfInterval: interface for describing a confidence interval.
- IntervalCalculator: interface for a statistical tool producing confidence intervals (class ConfInterval).
- HypoTestResult: interface for representing results of a hypothesis test
- HypoTestCalculator: interface for a statistical tool performing an hypothesis test.
- CombinedCalculator: interface for a statistical tool which can produce both hypothesis test results and confidence intervals.
RooStats concrete classes
The concrete classes describing statistical tools implementing the above interfaces are:
- ProfileLikelihoodCalculator: it is an implementation of a CombinedCalculator using the profile likelihood ratio as a test statistics. After configuring the calculator, one only needs to ask GetHypoTest() (which will return a HypoTestResult pointer) or GetInterval() (which will return an ConfInterval pointer).
- LikelihoodInterval: concrete implementation of a ConfInterval interface. It implements connected N-dimensional intervals based on the contour of a likelihood ratio. The boundary of the interval is equivalent to a MINUIT/MINOS contour about the maximum likelihood estimator.
- HybridCalculator: Hypothesis test calculator using a Bayesian-frequentist hybrid method (often called in HEP as CLs method). This class extends the functionality of the TLimit class by taking advantage of the RooFit package. The result of the calculator is returned as an HybridResult pointer. HybridResult implements the HypoTestResult interface. The class HybridPlot allows for a graphical representation of a HybridResult.
Additional classes or functions provided by RooStats are:
- NumberCountingUtils: a collection of number counting statistical utilities
- NumberCountingPdfFactory: a factory for building
the PDF and the data for a number counting combination and adding them in a RooWorkspace.
- SPlot: implementation of the SPlot statistical tool to unfold data distributions and based on RooFit. This class uses the same statistical algorithm used in the class TSPlot, but in addition it provides the possibility to model the input distributions using RooFit model classes. This class can then be used in combination of a RooFit maximum likelihood fit.
RooStats tutorials macros
Tutorials are provided in the tutorials/roostats directory:
- rs100_numbercounting.C: an example of a combination of two searches using number counting with background uncertainty.
- rs102_hypotestwithshapes.C: example of usage of ProfileLikleihoodCalculator to do a hypothesis test of the background-only and signal+background hypotheses.
- rs201_hybridcalculator.C: example how to use the HybridCalculator.
TMVA
This version corresponds to TMVA version 3.9.5.
-
New
reference page for configuration options
The
page is automatically generated for each new release. Next to
the classifiers also exist information links for hints to
improve the classifier performance (click on the "i"
button). Many thanks to Zhiyi Liu (Fraser U) for suggesting
this.
-
Methods:
-
BDT: New Decision Tree Pruning algorithm: Cost
Complexity Pruning a la CART. Written by Doug Schouten
(Fraser U.). It replaces the old CostComplexity and
CostComplexity2 algorithms.
-
BDT: New no splitting option (choosable with
NCuts<0) that finds best split point by first sorting the
events for each variable and then looping through all
events, placing the cuts always in the middle between two
of the sorted events, and finding the true possible
maximum separation gain in the training sample by cutting
on this variable.
-
BDT, AdaBoost The beta parameter is now an
option (default is 1).
-
BDT: The node purity at which a node is
classified as signal (respective background node) for
determining the error fraction in the pruning became a
parameter that can be set via the option NodePurityLimit
(default is 0.5).
-
Dataset preparation:
-
First implementation of a new preprocessing method: transformation of the
variables first into a Gaussian distribution, then performing a decorrelation of
the "Gaussianised" variables. The transformation is again done by default such that
(by default) the signal distributions become Gaussian and are decorrelated. Note
that simultaneous Gaussianisation and decorrelation of signal and background is
only possible (and done) for methods, such as Likelihood, which test both hypotheses.
-
Bug fixes:
-
Fix in Expected error pruning: Rather than multiplying both sides, the error on
the node and the sub-tree, with the prune strength, now only the expected error
of the sub-tree is scaled.
-
Fix in FDA parsing of the input formula. There were problems when treating
more than 10 parameters (thanks to Hugh Skottowe for reporting this).
-
Calculation of "Separation": fixed bin-shift and
normalisation bugs. Thanks to Dag Gillberg (Fraser U) for
spotting these.
-
Fixed problem in "SetSignal(Background)WeightExpression":
signal (background weight expressions not existing in the
background (signal) tree led to an abort of the tree
reading ("Bad numerical expression"). Thanks to Alfio
Rizzo (Brussels) for pointing this out.
-
Fixed problem when specifying train and test tree
explicitly. Some code was forgotten in the background
part, creating incompatibilities. Thanks to Zhiyi Liu
(Fraser U) for reporting this.
Geometry
Improvement of the standard overlap checker. The previous method was checking points on the visual mesh of volume shape against all possible overlapping partners.
The new method checks more points (currently 1000, in future configurable) on the volume outline or surface. This minimizes the number of non-detectable overlap
configurations.
The interface to activate the new checking method is the same as before:
gGeoManager->CheckOverlaps(ovlp);
where ovlp is the overlap tolerance (default 0.01 cm)
An example of overlap that was not detected before but is now:
MonteCarlo
GUI
New Classes: TRecorder TGRecorder
TRecorder classes provide interface for recording and replaying events in ROOT.
Recorded events are:
Commands typed by user in command line (e.g. 'new TCanvas')
GUI events (mouse movement, button clicks, ...)
All the recorded events from one session are stored in one TFile and can be replayed again anytime.
Modifications in TRootCanvas menu:
Renamed 'Inspect' menu title to 'Tools'
Added 'Event Recorder' menu entry
Here is a screenshot of TGRecorder (GUI interface of the recorder):
New Class: TGPack
New Container class for vertical and horizontal grouping of frames.
It enforces a predictable resizing behaviour on children.
For an example of how to use it, see tutorials/eve/pack.C.
TRootBrowser
- Make the default url for the HTML plugin of TRootBrowser configurable via rootrc.
TGTab
- Added a 'Close Tab' icon in TGTabElement, allowing to close a tab element, and emitting a CloseTab(Int_t id) signal. The icon is active only on the actually activated tab.
- Implement CloseTab slot usage in TRootBrowser and in TGRootIDE.
TGTextEditor
- Allow to execute a macro without having to save it first.
TGSplitFrame
- Added a new signal method Docked(TGFrame*) to notify when a embedded frame has been docked.
- Added a new signal method Undocked(TGFrame*) to notify when a embedded frame has been undocked.
- Added a new getter method GetUndocked() returning a pointer on undocked frame, if any.
TGToolTip
- Added new constructor with global x, y position.
If neither fWindow nor fPad are set use global fX, fY that was passed from outside.
TGSplitter
- Added option to handle frame resizing externally.
TGView
- Added a protection against possible negative scroll values.
TGTextView
- Fix bottom line not being properly updated while scrolling.
- Solve a problem with vertical slider (avoid negative value when scrolling).
TGTextEdit
- Fix blinking cursor on some platforms/compilers
TGTextEntry
- Added optional parameter 'Bool_t emit' to TGTextEntry::SetText(const char* text, Bool_t emit = kTRUE);
- Made the same extension in sub-class TGNumberEntryField.
TGCompositeFrame
- Added new method virtual TGFrameElement* FindFrameElement(TGFrame *f) const; and use it in several TGCompositeFrame methods to simplify the code.
GUIHTML
TGHtml
- Implemented HTML <select> with TGListBox/TGCombobox and emit InputSelected(const char *name, const char *val) when changing selection.
TGHtmlBrowser
- Added the possibility to save current html page in a local file.
Graphical Output
PDF
- The PDF file produced by the following macro was not readable by Acrobat
reader:
{
TCanvas* can = new TCanvas("can");
double margin = 1e-10;
can->Divide(2, 2, margin, margin);
TH1D* hist = new TH1D("hist" , "", 1, 0, 1);
hist->Draw();
can->SaveAs("can.pdf");
}
because Acrobat does not work when a PDF file contains reals with
exponents, which is the cavse with the file "can.pdf". This problem is
now fixed. Note that "can.pdf" could be read by "ghostview" and printed.
- PDF file now use the fonts encoding WinAnsiEncoding. This allows
to print any characters with accent etc.. like on the screen. An similar
modification was done in the previous release for PostScript.
SVG
- Some SVG viewer need a more complete header: "width" and
"height" attributes
in the svg tag and a "xml" tag to start the file.
(Found by Hubert Degaudenzi <Hubert.Degaudenzi@cern.ch>)
PostScript
- Since the new font endocing (June release) the hyphen was longer than
before. Now fixed.
- When drawn with an angle, the "tilde" character as an acceent was not
correctly placed in a PostScript file. For instance:
{
TCanvas *c1 = new TCanvas("c1", "c1",15,49,700,530);
TLatex *tex1 = new TLatex(0.5,0.5,"#tilde{C}");
tex1->SetTextSize(0.2);
tex1->SetTextAngle(90);
tex1->Draw();
c1->Print("tilde.ps");
}
TASImage / libAfterImage
- Synchronizing libAfterImage with Sasha'a latest version.
- TASImage::Merge (const TImage im, const char op, Int_t x, Int_t y)
with x and/or y not equal 0 did not clip the overlayed picture correctly.
- Make sure a rectangle drawn will TAsimage::DrawRectangle appears
after calling gPad->Modified().
- Images can be saved (canvas->Print) from within threads.
Miscellaneous
TColor
TLatex
TLatex in now centered vertically like TText. When centered vertically, TLatex
was not aligned on the control box. Some additionnal tiny adjustment of one
pixel was also needed in order to look better when the text is enclosed in a box
like in TPaveText.
TPaveText
The vertical text aligment is now done using the text alignment attributes
instead of the trick used before. Histograms' titles are look much better
centered vertically after this modification.
TGraph
TGraph::DrawPanel is now implemented.
TGraphErrors
The drawing option "[]" has been change to "||". The new
option "[]" is the same as "||" except that some ticks are
drawn at the end of the horizontal and vertical lines at the end of the error
bars. This new way of drawing the option "[]" shows better to which error
bar the additional tick marks belong. The following example, which has been
provided by Thomas Ullrich , shows it clearly.
TGraphPolargram.cxx
An extra empty canvas was created each time a TGraphPolar was painted
in "Not Editable" mode.
TPad
Improvments in TPad::BuildLegend: If the pad contains some
TMultiGraph or THStack the individual graphs or histograms
in them are automatically added to the TLegend produced by
TPad::BuildLegend.
TGaxis
When drawn with the option
X+ or Y+ the histogram axis were wrong in
case of alphanumeric labels. The tick marks were in the right
place but the labels were not.
OpenGL
- Add support for showing tooltips for objects shown in
TGLViewer. See TGLEventHandler::TriggerTooltip(const
char* text) and RemoveTooltip(). Usage example is in
class TEveViewerList.
- Add new overlay element TGLCameraOverlay that allows to
display: a) coordinate axes for orthographic mode; b) intersection of
center of screen with a given plane.
- Add suport for fading in/out of the viewer contents.
- Many improvements in text and axis rendering for orthographic
view markup.
- In TGLSceneBase add data-member Bool_t
fSelectable allowing one to preventing any of its elements to be
selected. Useful when given scene is used as background to help guid
the eye.
Eve
- Added support for internal window management. Windows can be
arranged in horizontal/vertical stacks, tabs and main windows.
The containers and individaul windows can be moved to arbitrary
window-slot.
See classes TEveWindow and TEveWindowManager.
See tutorial tutorials/eve/test_windows.C.
- TEveQuadSet -- Add flag 'Bool_t fAntiFlick'. If on (now the
default) it causes each quad to be also rendered as a pixel, thus
preventing it from disappearing when zoomed away.
This is needed for visualization of small quads, e.g. silicon
detectors digits.
- TEveCalo classes -- Add support for automatic rebinning
of 3D views (only supported for 2D views before). In 2D mode support
automatic determination of the cell color based on the most energetic
contribution from available calo slices.
Add support for enumerative registration of calorimeter towers. Before
one had to provide THStack as input. See TEveCaloDataVec
class.
- TEveTrackList -- Generalized API for finding of momentum
limits.
- TEveTrackPropagator now supports propagation of charged
particles in arbitrary / external magnetic field. Propagation can be
done with the helix-stepper or with the Runge-Kutta method.
New abstract interface to magnetic field TEveMagField to get
field vector at given position. Implement two interfaces:
TEveMagFieldConst for constant magnetic field and
TEveMagFieldDuo (two constant magnetic fields, chosen by
cylindrical radius).
See examples in tutorials/eve/track.C.
- TEvePointSetArray -- Added underflow and overflow bins.
- Many improvements in text and axis rendering for axes in
non-linear projections and for the dedicated lego view.
- New tutorial tutorials/eve/lineset_test.py showing how
tu run Eve from python.
Misc
ROOT page -
Class index -
Top of the page -