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.Support I/O of std::unique_ptr
s and STL collections
thereof.
Support I/O of std::array
.
Support I/O of 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.
Custom streamers need to #include TBuffer.h explicitly (see section Core Libraries)
Check and flag short reads as errors in the xroot plugins. This fixes [ROOT-3341].
Added support for AWS temporary security credentials to TS3WebFile by allowing the security token to be given.
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.DataLoader
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.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:->SetLineJoinPS(2); gStyle
Also this setting is now active for PDF output. This enhancement was
triggered by this
forum question. * Make sure the palette axis title is correct after
a histogram cloning. This problem was mentioned here. *
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 here * Make
sure that TLatex
text strings containing “\” (ie: rendered
using TMathText
) produce an output in PDF et SVG files. *
In TLatex, with the Cocoa backend on Mac the Angstroem characters did
not render correctly. This problem was mentioned here
* New version of libpng (1.2.55) as requested here. *
Enhancement of the CANDLE drawing option (implemented by Georg Troska
georg.troska@tu-dortmund.de). This option has been completely rewritten
and offers a wide range of possibilities. See the THistPainter reference
guide for all the details and examples. * Fix TText
copy
constructor as requested here. New
example to check this fix. * SVG boxes were not correct when
x2<1
(reported here). * In
TASImage there was no protection against graphics being drawn outside
the assigned memory. That may generate some crashes like described here. * In
TASImage: transparent rectangles did not work when png files were
created in batch mode. * In TASImage: implement transparent text for png
files created in batch mode. * TCanvas title was not set correctly when
a TCanvas was read from a TFile. (reported here).
* The text generated by 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. * In
TLatex with the Cocoa backend on Mac the #tilde
position
was too low. * New optional parameter “option” in
TPad::BuildLegend
to set the TLegend option (Georg Troska).
* TCandle: a new candle plot painter class. It is now used in
THistPainter and THStack to paint candle plots (Georg Troska). * Fix two
issues with the fill patterns in TTeXDump
(reported here): - The
pattern number 3 was not implemented. - Filled area drawn with pattern
where surrounded by a solid line. * Support custom line styles in
TTeXDump
as requested here *
TColor::GetFreeColorIndex()
allows to make sure the new
color is created with an unused color index. * In
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:
{
= new TCanvas("c1","Examples of Gaxis",10,10,900,500);
c1 ->Range(-6,-0.1,6,0.1);
c1*axis1 = new TGaxis(-5.5,0.,5.5,0.,0.0,100,510,"");
TGaxis ->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();
axis1}
Being available in TAxis
, this method allow to change a
label on and histogram plot like:
->Draw();
hpx->GetXaxis()->ChangeLabel(5,-1,-1,-1,kRed,-1,"Zero"); hpx
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.When painting a TH3
as 3D boxes,
TMarker3DBox
ignored the max and min values specified by
SetMaximum()
and SetMinimum()
.
In TMarker3DBox
when a box marker has a size equal
to zero it is not painted. Painting it produced a dot with the X11
backend.
New class TRatioPlot
implemented by Paul Gessinger
hello@paulgessinger.com. 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
New option “I” allowing to draw TGraph with invisible axis (used
by 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 Tompkins@nscl.msu.edu
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 Mihaela.Gheata@cern.ch
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).>>> 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
TMinuit
constructor
[ROOT-8217]TPad::WaitPrimitive
was not
stoping the macro execution after each plot :{
("c1");
TCanvas c1("hsimple.root");
TFile f->Draw(); gPad->WaitPrimitive();
hpx->Draw(); gPad->WaitPrimitive();
hpxpy->Draw(); hprof
this was reported here.
TTree::Draw()
observed when a branch that contains a large TClonesArray where each
element contains another small vector container.