Introduction

ROOT version 6.10/00 has been released on 13 June 2017

For more information, see http://root.cern.ch

The following people have contributed to this new version:

David Abdurachmanov, Kim Albertsson, Guilherme Amadio, Whitney Armstrong, Attila Bagoly, Benjamin Bannier, Wolf Behrenhoff, Bertrand Bellenot, Georgios Bitzes, Brian Bockelman, Will Breaden, Philippe Canal, Santiago Castro, Sylvain Corlay, Olivier Couet, Sergey Divakov, Mattias Ellert, Giulio Eulisse, Gerardo Ganis, Andrei Gheata, Luca Giommi, Konstantin Gizdov, Enrico Guiraud, John Harvey, Ivana Hrivnacova, Filip Ilic, Raphael Isemann, Thomas James, Chris Jones, David Lange, Wim Lavrijsen, Lawrence Lee J, Sergey Linev, Olli Lupton, Spencer Lyon, Shahzad Malik, Maurizio Martinelli, Pere Mato, Lorenzo Moneta, Abhinav Moudgil, Frederich Munch, Jan Musinsky, Axel Naumann, Ajith Pandel, Simon Pfreundschuh, Danilo Piparo, Timur Pocheptsov, Dmitry Polukhin, Fons Rademakers, Martin Ritter, Heshy Roskes, Maarten Scholl, Paul Seyfert, Karl Smith, Martin Storø Nyflott, Matevz Tadel, Enric Tejedor, Diego Torres, Sebastian Uhl, Xavier Valls, Peter Van Gemeren, Vassil Vassilev, Andreas Weiden, Sandro Wenzel, Stefan Wunsch, Omar Zapata, Zhe Zhang, Roman Zulak

Removed interfaces

The following interfaces have been removed, after deprecation in v6.08.

CINT remnants, dysfunctional for ROOT 6

Interpreter

Core Libraries

TObjString to TString

TObjString::GetString() now returns a const TString& to the TString inside the TObjString, instead of copying it. This is to prevent very common misunderstanding of the interface.

In several cases, the misunderstanding of the interface caused invalid memory accesses to the already destructed temporary TString returned by GetString(), e.g. objStr->GetString().Data(). This will be fixed automatically by the new return type.

In rare cases, the caller expected GetString() to return a (non-const) reference to the embedded TString, e.g. objString->GetString().ReplaceAll("a", "b"); // WRONG! This will now fail to compile, instead of not doing what the author of the code expected. Please fix that code by using the TObjString::String() interface, which returns a non-const TString&: objString->String().ReplaceAll("a", "b");.

In extremely rare cases, this change breaks a valid use where the temporary TString was modified and then captured in a new TString object before the destruction of the temporary: TString str = objStr->GetString().ReplaceAll("a", "b");. In these rare cases, please use the new function CopyString() which clearly indicates that it involves a temporary.

Histogram Libraries

``{.cpp} // Create a chain of histograms calledh`. THnChain chain(“h”);

// Add files containing histograms h to chain. chain->AddFile(“file1.root”);

chain->GetXaxis(1)->SetRangeUser(0.1, 0.2);

TH1* projection = chain->Projection(0) ```

TProfile2Poly

Addition of TProfile2Poly class. It is analogous to TH2D/TProfile2D except it allows the creation of profiles of histograms that have polygonal bins. Just for a quick recap some of the functionality includes:

Two tutorials outlining the use of the added class can be found at: * root/tutorials/hist/tprofile2polyRealistic.C * root/tutorials/hist/tprofile2polyRealisticModuleError.C

Other features added in the Hist Library

Math Libraries

MathCore

GenVector

TMatrix

TMVA

RooStats

TTree Libraries

TDataFrame

2D Graphics Libraries

New box option for 3D histograms

New box option for 3D histograms

New markers

New markers

New box option for 3D histograms

New box option for 3D histograms

3D Graphics Libraries

Geometry

Dictionaries

I/O Libraries

Parallelism

TBufferMerger is a class to facilitate writing data in parallel from multiple threads, while writing to a single output file. Its purpose is similar to TParallelMergingFile, but instead of using processes that connect to a network socket, TBufferMerger uses threads that each write to a TBufferMergerFile, which in turn push data into a queue managed by the TBufferMerger. An excerpt of the tutorial is shown below. ```{.cpp} // Create the TBufferMerger TBufferMerger merger(“mp103_fillNtuple.root”);

// Define what each worker will do auto work_function = & { auto f = merger.GetFile(); TNtuple ntrand(“ntrand”, “Random Numbers”, “r”); fill(ntrand, nEventsPerWorker); ntrand.Write(); f->Write(); }; ``` - Global reorganization of the new multi-process / multi-thread code: the part of TProcessExecutor dedicated to TTree processing is moved to a new class TTreeProcessorMP, located under tree/treeplayer and included in the libTreePlayer library. Methods ‘ProcTree’ have been renamed to ‘Process’, following TTreeProcessorMT. - Full support for TSelector processing and TEntryList has been added to TTreeProcessorMP, with new related tutorials (multicore/{mp104_processH1,mp105_processEntryList}.C) and roottests (root/multicore/tProcessExecutorH1Test.cpp).

PyROOT

JavaScript ROOT

JSROOT upgraded from 4.6.0 to 5.1.2. The major changes:

Tutorials

New tutorials have been added: - TDataFrame tutorials to exercise the different use cases - Annotation on a 3D plot using 3D plylines - Palette coloring for graphs - CandlePlot tutorials to exercise different options - Multicore tutorials for multi-threaded and multi-process

Build, Configuration and Testing Infrastructure

include_directories(${CMAKE_SOURCE_DIR} \({ROOT_INCLUDE_DIRS}) add_definitions(\){ROOT_CXX_FLAGS})

ROOT_GENERATE_DICTIONARY(G__Event Event.h LINKDEF EventLinkDef.h)

add_library(Event SHARED Event.cxx G__Event.cxx) target_link_libraries(Event ROOT::Hist ROOT::Tree)

add_executable(Main MainEvent.cxx) target_link_libraries(Main Event) ``- Added optionbuiltin_all` to enable all the built in options. - For rootcling_stage1 (formerly known as rootcling_tmp), the package structure was changed to enable homogeneous visibility settings across object files. See core/README for an overview. - Several non-public headers are not copied into include/ anymore; they reside in the PACKAGE/res/ subdirectory in the source tree. - The IMT switch is set to on by default. - A new library is now created, libImt. It contains all classes which depend on TBB. Those classes were previously part of libThread. As a consequence rootcling/genreflex do not depend anymore from TBB even in presence of imt builds. - Refactoring of several math tests to avoid exact comparisons of floating point numbers

Bugs fixed in this release

Release 6.10/02

ROOT version 6.10/02 has been released on 6 July 2017

TTree Libraries

TDataFrame

Build system

Graphics

Bugs and Issues fixed in this release

Release 6.10/04

Released on July 28, 2017

Bugs and Issues fixed in this release

Release 6.10/06

Released on September 19, 2017

Bugs and Issues fixed in this release

Release 6.10/08

Core Libraries

I/O Libraries

Bugs and Issues fixed in this release

HEAD of the v6-10-00-patches branch

These changes will be part of the future 6.10/10