ROOT version 6.08/00 has been released on November 4, 2016.
For more information, see:
The following people have contributed to this new version:
David Abdurachmanov, CERN, CMS,
Adrian Bevan, Queen Mary University of London, ATLAS,
Attila Bagoly, GSoC,
Bertrand Bellenot, CERN/SFT,
Rene Brun, CERN/SFT,
Philippe Canal, Fermilab,
Andrew Carnes, University of Florida, CMS,
Cristina Cristescu, CERN/SFT,
Olivier Couet, CERN/SFT,
Gerri Ganis, CERN/SFT,
Paul Gessinger, CERN/SFT,
Andrei Gheata, CERN/SFT,
Luca Giommi, CERN/SFT,
Sergei Gleyzer, University of Florida, CMS
Christopher Jones, Fermilab, CMS,
Wim Lavrijsen, LBNL, PyRoot,
Sergey Linev, GSI, http,
Pere Mato, CERN/SFT,
Lorenzo Moneta, CERN/SFT,
Abhinav Moudgil, GSoC,
Axel Naumann, CERN/SFT,
Simon Pfreundschuh, GSoC, CERN/SFT,
Danilo Piparo, CERN/SFT,
Timur Pocheptsov, CERN/SFT,
Fons Rademakers, CERN/IT,
Paul Russo, Fermilab,
Enric Tejedor Saavedra, CERN/SFT,
George Troska, Dortmund Univ.,
Liza Sakellari, CERN/SFT,
Alex Saperstein, ANL,
Manuel Tobias Schiller, CERN/LHCb,
David Smith, CERN/IT,
Peter Speckmayer,
Tom Stevenson, Queen Mary University of London, ATLAS
Matevz Tadel, UCSD/CMS, Eve,
Peter van Gemmeren, ANL, ATLAS,
Xavier Valls, CERN/SFT,
Vassil Vassilev, Fermilab/CMS,
Stefan Wunsch, KIT, CMS
Omar Zapata, University of Antioquia, CERN/SFT.
ROOT prepares for cxx modules. One of the first requirements is its header files to be self-contained (section “Missing Includes”). ROOT header files were cleaned up from extra includes and the missing includes were added.
This could be considered as backward incompatibility (for good however). User code may need to add extra includes, which were previously resolved indirectly by including a ROOT header. For example:
Other improvements, which may cause compilation errors in third party code:
std::type_info
from Rtypeinfo.h, type_info
should be spelled std::type_info
.Also:
TPluginManager
was made thread-safe ROOT-7927.ROOT::TSeq<T>
. This template is inspired by the xrange built-in function of Python. See the example here.Add a new mode for TClass::SetCanSplit
(2) which indicates that this class and any derived class should not be split. This included a rework the mechanism checking the base classes. Instead of using InheritsFrom
, which lead in some cases, including the case where the class derived from an STL collection, to spurrious autoparsing (to look at the base class of the collection!), we use a custom walk through the tree of base classes that checks their value of fCanSplit
. This also has the side-effect of allowing the extension of the concept ‘base class that prevent its derived class from being split’ to any user class. This fixes ROOT-7972.
__ROOTCLING__
into the pch.ROOT::EnableImplicitMT(numthreads)
, ROOT::DisableImplicitMT
and ROOT::IsImplicitMTEnabled
. They can be used to enable, disable and check the status of the global implicit multi-threading in ROOT, respectively.MapReduce
method of TProcessExecutor
returns a pointer to a TObject
, the return value of MapReduce
is properly casted to the type returned by the map function.TThreadExecutor
implementing a MapReduce framework sharing TProcessExecutor
interface and based in tbb.TExecutor
defining the MapReduce interface for TProcessExecutor
and TThreadExecutor
, who inherit from it.TPool
signatures accepting collections as an argument with the exception of std::vector and initializer_lists.TThreadExecutor
functionality offering parallel reduction given a binary operator as a reduction function.TThreadedObject
which helps making objects thread private and merging them.TProcessExecutor
and TThreadExecutor
classes.ROOT::TSpinMutex
class, a spin mutex compliant with C++11 requirements.TTreeProcessor::Process
. TTProcessor::Process
allows to process the entries of a TTree in parallel. The user provides a function that receives one parameter, a TTreeReader, that can be used to iterate over a subrange of entries. Each subrange corresponds to a cluster in the TTree and is processed by a task, which can potentially be run in parallel with other tasks.ROOT::TRWSpinLock
, which is based on a ROOT::TSpinMutex
. TRWSpinLock
tries to make faster the scenario when readers come and go but there is no writer, while still preventing starvation of writers.std::unique_ptr
s and STL collections thereof.std::array
.std::tuple
. The dictionary for those is never auto generated and thus requires explicit request of the dictionary for each std::tuple class template instantiation used, like most other class templates.Resolve an issue when space is freed in a large ROOT
file and a TDirectory is updated and stored the lower (less than 2GB) freed portion of the file ROOT-8055.
//[fN]
commentTObject::SaveAs()
methodrootdrawtree
. It is based on the new class TSimpleAnalysis
.TTree::Fill()
. This fixes ROOT-8031.TTree::Draw
is used with at least tow variables ROOT-8196.goff
option one can use as many variables as needed. There no more limitation, like with the options para
and candle
.We added a cache specifically for the fast option of the TTreeCloner to significantly reduce the run-time when fast-cloning remote files to address ROOT-5078. It can be controlled from the TTreeCloner
, TTree::CopyEntries
or hadd
interfaces. The new cache is enabled by default, to update the size of the cache or disable it from TTreeCloner
use: TTreeCloner::SetCacheSize
. To do the same from TTree::CopyEntries
add to the option string “cachesize=SIZE”. To update the size of the cache or disable it from hadd
, use the command line option -cachesize SIZE
. SIZE
shouyld be given in number bytes and can be expressed in ‘human readable form’ (number followed by size unit like MB, MiB, GB or GiB, etc. or SIZE can be set zero to disable the cache.
TChain::LoadTree
so that the user call back routine is actually called for each input file even those containing TTree
objects with no entries.TTree::GetEntry
. The approach is based on creating a task per top-level branch in order to do the reading, unzipping and deserialisation in parallel. In addition, a getter and a setter methods are provided to check the status and enable/disable implicit multi-threading for that tree (see Parallelisation section for more information about implicit multi-threading).std::cin
(and other stream that can not be rewound) in TTree::ReadStream
. This fixes ROOT-7588.TTreeCloner::CopyStreamerInfos()
from causing an autoparse on an abstract base class.TGraphAsymmErrors
constructor directly from an ASCII file.TRandomGen<Engine>
which derives from TRandom
and integrate new random generator engines as TRandom classes.TRandomMixMax
- recommended MIXMAX generator with N=240TRandomMixMax17
- MIXMAX generator with smaller state (N=17) and faster seeding timeTRandomMixMax256
- old version of MIXMAX generator (N=256)TRandomMT64
- 64 bit Mersenenne Twister generator from the standard library (based on std::mt19937_64
). This generates 64 bit random numbers, while TRandom3
generates only 32 bit random numbers.TRandomRanlux48
- 48 bit Ranlux generator. Note that TRandom1
is a 24 bit generator.TMinuit
constructor ROOT-8217DataLoader
class that allows flexibility in variable and dataset selection.tmva/TMVAClassification.C
for using the new DNN.
Architecture=STANDARD
to select the earlier version.Architecture=CPU
to select the newer version for CPU, but designed also for GPU and optimized for speed and with multi-class support.Architecture=GPU
to select the newer GPU version. Requires configuration of ROOT with CUDA or OpenCL enabled.tmva/TMVACrossValidation
as an example).ROCCurve
class.TColor::SetPalette
, make sure the high quality palettes are defined only once taking care of transparency. Also CreateGradientColorTable
has been simplified.TColor
avoiding to call gROOT->GetColor()
. The normal constructor generated a big slow down when creating a Palette with CreateGradientColorTable
.CreateGradientColorTable
we do not need anymore to compute the highest color index.TGraphPainter
, when graphs are painted with lines, they are split into chunks of length fgMaxPointsPerLine
. This allows to paint line with an “infinite” number of points. In some case this “chunks painting” technic may create artefacts at the chunk’s boundaries. For instance when zooming deeply in a PDF file. To avoid this effect it might be necessary to increase the chunks’ size using the new function: TGraphPainter::SetMaxPointsPerLine(20000)
.TGaxis::PaintAxis()
may in some cases call strftime()
with invalid parameter causing a crash. This problem was reported here.Ease the setting of the appearance of joining lines for PostScript and PDF output. TPostScript::SetLineJoin
allowed to set the line joining style for PostScript files. But the setting this parameter implied to create a TPostScript
object. Now a TStyle
setting has been implemented and it is enough to do:
gStyle->SetLineJoinPS(2);
TASImage
When the first or last point of a wide line is exactly on the window limit the line is drawn vertically or horizontally. This problem was mentioned hereTLatex
text strings containing “\” (ie: rendered using TMathText
) produce an output in PDF et SVG files.TText
copy constructor as requested here. New example to check this fix.x2<1
(reported here).TSVG
has now the xml:space="preserve"
attribute in order to be editable later on using external softwares like “inkscape”. This improvement was suggested here.#tilde
position was too low.TPad::BuildLegend
to set the TLegend option (Georg Troska).TTeXDump
(reported here):
TTeXDump
as requested hereTColor::GetFreeColorIndex()
allows to make sure the new color is created with an unused color index.TLegend::SetHeader
the new option C
allows to center the title.New method ChangeLabel
in TGaxis
and TAxis
allowing to a fine tuning of individual labels attributes. All the attributes can be changed and even the label text itself. Example:
{
c1 = new TCanvas("c1","Examples of Gaxis",10,10,900,500);
c1->Range(-6,-0.1,6,0.1);
TGaxis *axis1 = new TGaxis(-5.5,0.,5.5,0.,0.0,100,510,"");
axis1->SetName("axis1");
axis1->SetTitle("Axis Title");
axis1->SetTitleSize(0.05);
axis1->SetTitleColor(kBlue);
axis1->SetTitleFont(42);
axis1->ChangeLabel(1,-1,-1,-1,2);
axis1->ChangeLabel(3,-1,0.);
axis1->ChangeLabel(5,30.,-1,0);
axis1->ChangeLabel(6,-1,-1,-1,3,-1,"6th label");
axis1->Draw();
}
Being available in TAxis
, this method allow to change a label on and histogram plot like:
hpx->Draw();
hpx->GetXaxis()->ChangeLabel(5,-1,-1,-1,kRed,-1,"Zero");
TAxisModLab
: a TAxis helper class used to store the modified labels.TPie
the format parameter set by SetPercentFormat
was ignored. (reported here)TEXT
: In case several histograms are drawn on top ot each other (using option SAME
), the text can be shifted using SetBarOffset()
. It specifies an offset for the text position in each cell, in percentage of the bin width.TGaxis::PaintAxis()
might caused a correctness problem in multithreaded context when handling optionTime with %F
. This was reported here. The fixed was suggested by Philippe Gras (philippe.gras@cea.fr).TGaxis::PaintAxis()
misplaced the x10
at the end of the axis for non vertical or horizontal axis here.
TH3
as 3D boxes, TMarker3DBox
ignored the max and min values specified by SetMaximum()
and SetMinimum()
.TMarker3DBox
when a box marker has a size equal to zero it is not painted. Painting it produced a dot with the X11 backend.TRatioPlot
implemented by Paul Gessinger . Class for displaying ratios, differences and fit residuals.TRatioPlot
has two constructors, one which accepts two histograms, and is responsible for setting up the calculation of ratios and differences. This calculation is in part delegated to TEfficiency
. A single option can be given as a parameter, that is used to determine which procedure is chosen. The remaining option string is then passed through to the calculation, if applicable.
Several examples illustrate how to use this class. See: $ROOTSYS/tutorials/hist/ratioplot?.C
TRatioPlot
);COL2 is a new rendering technique providing potential performance improvements compared to the standard COL option. The performance comparison of the COL2 to the COL option depends on the histogram and the size of the rendering region in the current pad. In general, a small (approx. less than 100 bins per axis), sparsely populated TH2 will render faster with the COL option.
However, for larger histograms (approx. more than 100 bins per axis) that are not sparse, the COL2 option will provide up to 20 times performance improvements. For example, a 1000x1000 bin TH2 that is not sparse will render an order of magnitude faster with the COL2 option.
The COL2 option will also scale its performance based on the size of the pixmap the histogram image is being rendered into. It also is much better optimized for sessions where the user is forwarding X11 windows through an ssh
connection.
For the most part, the COL2 and COLZ2 options are a drop in replacement to the COL and COLZ options. There is one major difference and that concerns the treatment of bins with zero content. The COL2 and COLZ2 options color these bins the color of zero.
This has been implemented by Jeromy Tompkins
A new module geom/vecgeom was introduced to give transparent access to VecGeom solid primitives. VecGeom is a high performance geometry package (link) providing SIMD vectorization for the CPU-intensive geometry algorithms used for geometry navigation. The module creates a new library libConverterVG.so depending on the VecGeom main library and loaded using the ROOT plug-in mechanism.
The main functionality provided by the new vecgeom module is to make a conversion in memory of all the shapes in a loaded TGeo geometry into a special adapter shape TGeoVGShape, redirecting all navigation calls to the corresponding VecGeom solid. The library loading and geometry conversion can be done with a single call TVirtualGeoConverter::Instance()->ConvertGeometry()
After the conversion is done, all existing TGeo functionality is available as for a native geometry, only that most of the converted solids provide better navigation performance, despite the overhead introduced by the new adapter shape.
Prerequisites: installation of VecGeom. The installation instructions are available at http://geant.web.cern.ch/content/installation Due to the fact that VecGeom provides for the moment static libraries and depends on ROOT, is is advised to compile first ROOT without VecGeom support, then compile VecGeom against this ROOT version, then re-configure ROOT to enable VecGeom and Vc support, using the flags -Dvc=ON -Dvecgeom=on
This has been implemented by Mihaela Gheata
TPgSQLStatement::SetBinary
to actually handle binary data (previous limited to ascii).Browser.ExpandDirectories
option (the default is yes
) has been added, allowing to prevent expanding the parent directory tree in the ROOT Browser (for example on nfs).Added a new configuration option to disable processing of the rootlogon[.py|C] macro in addition ro the -n option in the command arguments. To disable processing the rootlogon do the following before any other command that will trigger initialization:
>>> import ROOT
>>> ROOT.PyConfig.DisableRootLogon = True
>>> ...
For more details, like the complete change log, the documentation, and very detailed examples, see the JSROOT home page and the JSROOT project github page
treegetval.C
illustrating how to retrieve TTree
variables in arrays.root-config
does not suppress deprecation warnings (-Wno-deprecated-declarations) anymore. This means compilers will now diagnose the use of deprecated interfaces in user code.Released on December 2, 2016
Released on January 13, 2017
Released on March 2, 2017
TPad::WaitPrimitive
was not stoping the macro execution after each plot : ~ {.cpp} { TCanvas c1(“c1”); TFile f(“hsimple.root”); hpx->Draw(); gPad->WaitPrimitive(); hpxpy->Draw(); gPad->WaitPrimitive(); hprof->Draw(); ~ this was reported here.Changes will be part of the future 6.08/08