ROOT version 6.28/00 was released on February 03, 2023.
For more information, see:
The following people have contributed to this new version:
Guilherme Amadio, CERN/SFT,
Rahul Balasubramanian, NIKHEF/ATLAS,
Bertrand Bellenot, CERN/SFT,
Jakob Blomer, CERN/SFT,
Patrick Bos, Netherlands eScience Center,
Rene Brun, CERN/SFT,
Carsten D. Burgard, TU Dortmund University/ATLAS,
Artem Busorgin,
Will Buttinger, RAL/ATLAS,
Philippe Canal, FNAL,
Olivier Couet, CERN/SFT,
Michel De Cian, EPFL/LHCb,
Hans Dembinski, TU Dortmund,
Simeon Ehrig, HZDR,
Mattias Ellert, Uppsala University,
Matthew Feickert, UW Madison/ATLAS,
Markus Frank, CERN/LHCb,
Oliver Freyermuth, U Bonn,
Gerri Ganis, CERN/SFT,
Andrei Gheata, CERN/SFT,
Sayandeep Ghosh, Jadavpur U Calcutta,
Konstantin Gizdov, University of Edinburgh/LHCb,
Max Goblirsch, CERN/ATLAS,
Stefan Gränitz,
Enrico Guiraud, CERN/SFT,
Stephan Hageboeck, CERN/IT,
Jonas Hahnfeld, CERN/SFT,
Ahmat Mahamat Hamdan, CERN/SFT,
Fernando Hueso-González, University of Valencia,
Pawan Johnson, Indian Institute of Technology Kharagpur,
Subham Jyoti, ITER Bhubaneswar,
Ivan Kabadzhov, CERN/SFT,
Baidyanath Kundu, Princeton/SFT,
Giovanna Lazzari Miotto, CERN/SFT,
Yueh-Shun Li, National Central U Taiwan/CMS,
Sergey Linev, GSI,
Jerry Ling, Harvard University,
Javier Lopez-Gomez, CERN/SFT,
Enrico Lusiani, INFN/CMS,
Julia Mathe, CERN/SFT,
Pere Mato, CERN/SFT,
Lorenzo Moneta, CERN/SFT,
Nicolas Morange, CNRS/ATLAS,
Alja Mrak Tadel, UCSD/CMS,
Axel Naumann, CERN/SFT,
Duncan Ogilvie,
Hanna Olvhammar, CERN/SFT,
Vincenzo Eduardo Padulano, CERN/SFT and UPV,
Tapasweni Pathak,
Danilo Piparo, CERN/SFT,
David Poulton, Wits/SFT,
Fons Rademakers, CERN/SFT,
Jonas Rembser, CERN/SFT,
Mathias Schmitt,
Neel Shah, VJTI,
Petr Stepanov, Catholic University of America,
Enric Tejedor Saavedra, CERN/SFT,
Neel Shah, GSOC,
Sanjiban Sengupta, CERN/SFT,
Harshal Shende, GSOC,
Garima Singh, Princeton/SFT,
Surya Somayyajula, UW Madison,
Matevz Tadel, UCSD/CMS,
Vassil Vassilev, Princeton/CMS,
Andrii Verbytskyi, MPP Munich/ATLAS,
Wouter Verkerke, NIKHEF/ATLAS,
Frank Winklmeier, U Oregon/ATLAS,
Zef Wolffs, NIKHEF/ATLAS,
Jun Zhang
ROOT::Experimental::TBufferMerger
and ROOT::Experimental::TBufferMergerFile
are removed. Please use their non-experimental counterparts ROOT::TBufferMerger
and ROOT::TBufferMergerFile
instead.ROOT::RVec::shrink_to_fit()
has now been removed after deprecation; it is not needed.ROOT::RVec::emplace()
has now been removed after deprecation; please use ROOT::RVec::insert()
instead.ROOT::Detail::RDF::RActionImpl<Helper>::GetDataBlockCallback()
is removed; please use GetSampleCallback()
instead.RooHashTable
, RooNameSet
, RooSetPair
, and RooList
are removed. Please use STL container classes instead, like std::unordered_map
, std::set
, and std::vector
.RooFit::FitOptions(const char*)
command to steer RooAbsPdf::fitTo() with an option string was removed. This way of configuring the fit was deprecated since at least since ROOT 5.02. Subsequently, the RooMinimizer::fit(const char*)
function and the RooMCStudy constructor that takes an option string were removed as well.RooAbsData::createHistogram
that takes integer parameters for the bin numbers is now deprecated and will be removed in ROOT 6.30. This was done to avoid confusion with inconsistent behavior when compared to other createHistogram
overloads. Please use the verson of createHistogram
that takes RooFit command arguments.RooAbsData::valid()
method to cache valid entries in the variable range was removed. It was not implemented in RooDataSet, so it never worked as intended. Related to it was the RooDataHist::cacheValidEntries()
function, which is removed as well. The preferred way to reduce RooFit datasets to subranges is RooAbsData::reduce().RooStats::HistFactory::EstimateSummary
class is removed, including the functions that use it. The information that it was meant to store is managed by the RooStats::HistFactory::Measurement
object since many years.RooSuperCategory::MakeIterator()
function that was deprecated since 6.22 is now removed. Please use range-based loops to iterate over the category states.HybridCalculatorOriginal
and HypoTestInverterOriginal
classes in RooStats that were deprecated for a very long time aleady are removed. Please use HybridCalculator
and HypoTestInverter
.RooSimPdfBuilder
that was deprecated in ROOT 5.20 and replaced by the RooSimWSTool
is removed.MakeNumpyDataFrame
, MakeCsvDataFrame
, MakeArrowDataFrame
, MakeNTupleDataFrame
and MakeSqliteDataFrame
are now deprecated in favor of FromNumpy
, FromCSV
, FromArrow
, FromRNTuple
and FromSqlite
respectively.TDirectory::EncodeNameCycle()
is deprecated; it cannot be used safely. Use name + ';' + std::to_string(cycle)
instead.
alien
has been removed.The build options gfal
, gsl_shared
, jemalloc
, monalisa
, pyroot_legacy
, tcmalloc
, and xproofd
have been deprecated. Please complain with root-dev@cern.ch should you still need one!
This version adds the new rootreadspeed
CLI tool. This tool can be used to help identify bottlenecks in analysis runtimes, by providing time and throughput measurements when reading ROOT files via file systems or XRootD. More detailed information can be found in the tool’s help information.
To see help information, install and source a recent enough version of ROOT, and run the command rootreadspeed --help
in your terminal.
$ rootreadspeed --files <local-folder>/File1.root xrootd://<url-folder>/File2.root --trees Events --all-branches --threads 8
llvm and clang have been upgraded to version 13. C++20 support will be provided as part of this release (not yet available for 6.28/00). cling has been upgraded to use llvm’s new just-in-time compilation engive ORCv2.
Cling checks pointer validity now only in interactive mode, improving performance for jitted code in batch systems.
This version of ROOT adds an LLVM JIT event listener to create perf map files during runtime. This allows profiling of interpreted/JITted code generated by cling. Instead of function addresses, the perf data will contain full function names. In addition, stack frame pointers are enabled in JITted code, so full stack traces can be generated. Debugging is aided by switching off optimisations and adding frame pointers for better stack traces. However, since both have a runtime cost, they are disabled by default. Similar to LD_DEBUG
and LD_PROFILE
for ld.so
, the environment variables CLING_DEBUG=1
and/or CLING_PROFILE=1
can be set to enable debugging and/or profiling.
std
namespace is now diagnosed. Specifically, given that ROOT injects using namespace std
directive, all the names in the std
namespace become available in the global scope. However, in some circumstances users inadvertently introduce a declaration that conflicts with a name in std
making references to the former declaration result in ambiguous lookup. A fairly common case is trying to declare a global variable named data
which conflict with std::data
[C++17]. See ROOT-5971 for a discussion. As of v6.28, such declarations result inroot [] int data;
ROOT_prompt_0:1:1: warning: 'data' shadows a declaration with the same name in the 'std' namespace; use '::data' to reference this declaration
int data;
^
root [] .help edit
TFile
by TTreeProcessorMT
.A new cross-protocol redirection has been added to allow files on EOS mounts to be opened by TFile::Open
via XRootD protocol rather than via FUSE when that is possible. The redirection uses the eos.url.xroot
extended file attribute that is present on files in EOS. The attribute can be viewed with getfattr -n eos.url.xroot [file]
on the command line. When the URL passed into TFile::Open
is a for a file on an EOS mount, the extended attribute is used to attempt the redirection to XRootD protocol. If the redirection fails, the file is opened using the plain file path as before. This feature is controlled by the pre-existing configuration option TFile.CrossProtocolRedirects
and is enabled by default. It can be disabled by setting TFile.CrossProtocolRedirects
to 0
in rootrc
.
ROOT’s experimental successor of TTree has seen many updates during the last few months. Specifically, v6.28 includes the following changes:
Complete support for big-endian architectures (PR #10402).
Support for std::pair<T1, T2>
and std::tuple<Ts...>
fields
Support for C array fields whose type is of the form T[N]
. Note that only single-dimension arrays are currently supported.
RNTupleReader
or RDataFrame
object can be created from a TFile
instance as followsauto f = TFile::Open("data.root");
auto ntpl = f->Get<ROOT::Experimental::RNTuple>("Events");
auto reader = ROOT::Experimental::RNTupleReader::Open(ntpl);
// or for RDataFrame
auto rdf = ROOT::Experimental::MakeNTupleDataFrame(ntpl);
If buffered write is enabled, vector writes are used where possible. In particular, this yields important improvements in storage backends leveraging parallel writes, e.g. in object storages.
Large read/write throughput improvements in the experimental Intel DAOS backend.
RNTupleWriter::Fill()
now returns the number of uncompressed bytes written, which is align with TTree behavior.
Support for user-defined classes that behave as a collection via the TVirtualCollectionProxy
interface. Fields created via RFieldBase::Create()
automatically detect the presence of a collection proxy at run-time. However, if RField<T>
(T
being a class) is used instead, the trait IsCollectionProxy<T>
must be set for the given type (see PR #11525 for details). Note that associative collections are not yet supported.
Some internal support for per field post-read callbacks. This functionality will be presented in upcoming releases through custom I/O rules.
Please, report any issues regarding the abovementioned features should you encounter them. RNTuple is still experimental and is scheduled to become production grade in 2024. Thus, we appreciate feedback and suggestions for improvement.
GraphAsymmErrors
action that fills a TGraphAsymmErrors object.RDatasetSpec
as an experimental class to specify the input dataset to an RDataFrame.RDatasetSpec
. The metadata of each sample can then be retrieved during the execution by calling DefinePerSample
.SaveGraph
, where previously cling
was getting wrong static initialization.Graph
action (that fills a TGraph object) to properly handle containers and non-container types.RCsvDS
class now allows users to specify column types, and can properly read empty entries of csv files.Display
operation would not show the correct amount of entries requested by the user if called together with other operations (PR).Stats
results with VariationsFor
is now supported.MakeCsvDataFrame
is now FromCSV
. The old wording is still available but deprecated.Sum
s and Mean
s of single-precision floating point values has been greatly improved by employing Kahan summations.Vary
and VariationsFor
operations) in distributed mode.Snapshot
) is purposely made lazy by the user, distributed RDataFrame now respects this and avoids triggering the computations right away.Histo*D
actions is now required in distributed mode. See the relative PR for more discussion.npartitions
argument is not set by the user, the default number of tasks created by a distributed RDataFrame is equal to the number of cores specified by the user when connecting to the cluster.std::exception
and derived) are now correctly propagated from the processes of the computing nodes to the user side.dask
version required to support distributed RDataFrame is 2022.8.1, since a series of critical bugs present before that version were hindering the normal execution of the tool. Consequently, the minimum Python version needed to include distributed RDataFrame in the ROOT build is Python 3.8. More information in the relative github issue.Stats
and StdDev
operations are now available in distributed mode.GetColumnNames
operation is now available in distributed mode.TGraph::SavesAs()
for .csv, .tsv and .txt for text output separated by comma, tab, and space, respectively.TGraph2DAsymmErrors
to create TGraph2D with asymmetric errors. TLorentzVector
can now convert to ROOT::Math::PxPyPzEVector
.Some improvements and small fixes to the internal object memory management have been applied to the ROOT::Fit::Fitter
class.
GSLMultiFit
class.TLinearMinimizer
class).Support for providing the second derivatives (Hessian matrix) from the model function is added to the Fitter
class and the corresponding function interfaces. The functionality it is then propagated in the implementation of the FitMethod
classes and it is also added to the Minimizer
classes for providing a user computed Hessian of the objective functions to the minimizers. Only Minuit2 (see below) has the capabilities of using this external Hessian.
The GradFunctor
class has been improved by providing a new constructor taking an std::function
implementing the full gradient calculations instead of the single partial derivative.
The specialized methods for least-square/likelihood functions such as Fumili, Fumili2 and GSLMultiFit have been improved in case of binned likelihood fits, where a better approximation is used than before. This makes these method work better (conerging with less number of function calls) for these types of fits.
The support for using an External Hessian calculator has been added. The external Hessian can be used for both the initial seeding, using only the diagonal part, if the strategy is equal to 1 (the default value) and in MnHesse
, after the minimization, to compute the covariance and correlation matrices.
The print log of Minuit2 has been improved, especially when printing vector and matrices with large number of parameters (when the print level = 3).
The ROOT::Math::KahanSum
class was slightly modified:
operator-=
and operator+=
on a KahanSum
were not symmetric, leading to slight bit-wise inaccuracies. In fits, where such operations are done a lot of times (e.g. through the offsetting mechanism in RooFit which subtracts a constant KahanSum
term after each likelihood evaluation), this can add up to significant numerical divergence. An improved algorithm was implemented, based on an algorithm for combining Kahan sums and carry terms (Tian et al. 2012). (PR #11940)T
and implicit type T
constructor in KahanSum
made it hard to debug KahanSum
, because it is easy to overlook implicit conversions in code, especially in lines where the type of the return value is auto
. These auto-conversions were removed. Where necessary, they should be replaced with an explicit construction or explicit conversion to double via Sum()
. (PR #11941)operator==
and operator!=
were added.The usage of TRef
in the TFoamCell
class has ben replaced with array indices. This avoids, when generating a large number of toys requiring a re-initialization of TFoam
an increase in the memory usage caused by TRef
.
In previous releases, the default minimizer type that RooFit used was hardcoded to be the original Minuit
, while RooStats used the default minimizer specified by ROOT::Math::MinimizerOptions::DefaultMinimizerType()
. Now it is possible to centrally define the global minimizer for all RooFit libraries via ROOT::Math::MinimizerOptions::SetDefaultMinimizer()
, or alternatively in the .rootrc
file by adding for example Root.Fitter: Minuit2
to select Minuit2.
std::string
in RooFit interfacesThe following lesser-used RooFit functions now return a std::string
instead of a const char*
, potentially requiring the update of your code:
Before v6.28, it was ensured that no RooArgSet
and RooDataSet
objects on the heap were located at an address that had already been used for an instance of the same class before. With v6.28, this is not guaranteed anymore. Hence, if your code uses pointer comparisons to uniquely identify RooArgSet or RooDataSet instances, please consider using the new RooArgSet::uniqueId()
or RooAbsData::uniqueId()
.
In a binned likelihood fit, it is possible to skip the PDF normalization when the unnormalized binned PDF can be interpreted directly in terms of event yields. This is now done by default for HistFactory models, which results in great speedups for binned fits with many channels. Some RooFit users like ATLAS were already using this for a long time.
To disable this optimization when using the hist2workspace
executable, add the -disable_binned_fit_optimization
command line argument. Directly in C++, you can also set the binnedFitOptimization
to false
in the HistFactory configuration as follows:
If your compiler doesn’t support aggregate initialization with designators, you need to create and edit the configuration struct explicitely:
RooStats::HistFactory::HistoToWorkspaceFactoryFast::Configuration hfCfg;
hfCfg.binnedFitOptimization = false;
RooStats::HistFactory::MakeModelAndMeasurementFast(measurement, hfCfg);
Copy assignment for RooAbsArgs was implemented in an unexpected and inconsistent way. While one would expect that the copy assignment is copying the object, it said in the documentation of RooAbsArg::operator=
that it will “assign all boolean and string properties of the original bject. Transient properties and client-server links are not assigned.” This contradicted with the implementation, where the server links were actually copied too. Furthermore, in RooAbsRealLValue
, the assigment operator was overloaded by a function that only assigns the value of another RooAbsReal
.
With all these inconsistencies, it was deemed safer to disable copy assignment of RooAbsArgs from now on.
This experimental new feature utilises the technology from ROOT’s familiar TBrowser
in order to create an interface for graphically exploring and visualizing the content of a workspace, as well as perform basic fitting operations with the models and datasets.
The original HistoToWorkspaceFactory
produced models that consisted of a Poisson term for each bin. In this “number counting form” the dataset has one row and the collumns corresponded to the number of events for each bin. This led to severe performance problems in statistical tools that generated pseudo-experiments and evaluated likelihood ratio test statistics.
Nowadays, everyone uses the faster HistoToWorkspaceFactoryFast
implementation that produces a model in the “standard form” where the dataset has one row for each event, and the column corresponds to the value of the observable in the histogram.
Therefore, the original HistoToWorkspaceFactory
is now removed to avoid confusion and maintainance burden.
As printed out by the HistFactory in a warning message for a long time already, setting the Const
attribute to the <NormFactor>
tag is deprecated and it will be ignored. Instead, add <ParamSetting Const="True"> myparam </ParamSetting>
to your top-level XML’s <Measurement>
entry.
This deprecation implied that the constant parameter flag in the RooStats:HistFactory::NormFactor
class had no effect as well. To avoid ambiguity in the future, the possibility to set and retrieve this flag with NormFactor::SetConst()
and NormFactor::GetConst()
was removed, as well as the Sample::AddNormFactor(std::string Name, double Val, double Low, double High, bool Const)
overload. Also, the aforementioned deprecation warning is not printed anymore.
RooAbsMinimizerFcn
and RooMinimizerFcn
from the public interfaceThe RooAbsMinimizerFcn
class and its implementation RooMinimizerFcn
were removed from the public interface. These classes are implementation details of the RooMinimizer and should not be used in your code. In the unlikely case that this causes any problem for you, please open a GitHub issue requesting to extend the RooMinimizer by the needed functionality.
RooAbsBinning
interface for bin index lookupsThe RooAbsBinning
interface for bin index lookups was changed to enable vectorized implementations. Instead of having the override RooAbsBinning::binNumber()
, the binning implementations now have to override the RooAbsBinning::binNumbers()
function to evaluate the bin indices of multiple values in one function call.
RooAbsRealLValue::inRange()
So far, the RooAbsRealLValue::inRange()
function used the following undocumented convention to check whether a value x
is in the range with limits a
and b
: test if [x - eps * x, x + eps * x]
overlaps with [a, b]
, where the parameter eps
is defined as max(epsRel * x, epsAbs)
.
The values of the relative and absolute epsilons were inconsistent among the overloads:
epsRel = 1e-8, epsAbs = 0
epsRel = 0, epsAbs = 1e-6
epsRel = 0, epsAbs = 1e-6
With this release, the default absolute and relative epsilon is zero to avoid confusion. You can change them with RooNumber::setRangeEpsRel(epsRel)
and RooNumber::setRangeEpsAbs(epsAbs)
.
A large number of new features have been added in the TMVA SOFIE library. The list of all operators supported in the RModel
class is the one provided below for the ONNX parser.
The interface of RModel::Generate
has been changed to
RModel::Generate(Options options = Options::kDefault, int batchsize = 1)`
where Options
is a new enumeration having 3 different values:
kDefault = 0x0
: default case, a session class is generated and the weights are stored in a separate .dat
file (in text format).kNoSession = 0x1
: no session class is generated and the internal intermediate tensors are declared in the global namespace TMVA_SOFIE_$ModelName
.kNoWeightFile = 0x2
the weight values are not written in a separate .dat
file, but they are included in the generated header file.In addition, the RModel::Generate
function takes as an additional optional argument the batch size (default is = 1) and the inference code can then be generated for the desired batch size.
The ONNX parser supports now several new ONNX operators. The list of the current supported ONNX operators is the following:
In addition a Custom (user defined) operator is supported. An example of using a Custom operator is the program tmva/pymva/test/EmitCustomModel.cxx
.
The ONNX parser supports also the fusing of the operators MatMul + Add in a Gemm operator and fusing Conv + Add and ConvTranspose + Add.
The Keras parser supports now model with input batch size not defined (e.g bathsize=-1
), and by default the model is generated with batchsize=1
. The Keras parser supports now in addition to the Dense layer the Conv2D layer, several activation functions (Relu, Selu, Sigmoid, Softmax, Tanh, LeakyRelu) and these other layers: BatchNormalization, Reshape, Convatenate, Add, Subtract, Multiply. Models with Dropout layers are supported in case the Dropout is used only during training and not inference.
For model having operators not yet supported in the Keras parser it is then reccomended to convert the Keras model to ONNX
using the python tf2onnx
tool.
If using PyTorch it is recommended to save the model directly in ONNX
format instad of the native .pt
format by using the torch.onnx.export
function of PyTorch. The support for parsing directly .pt
files is limited to the Gemm, Conv, Relu, Selu, Sigmoid and Transpose operators.
The SOFIE inference is now integrated with RDataFrame, where a model can be evaluated on the columns of an input TTree
with RDataFrame
using the adapter functor class SofieFunctor
. Examples of using SOFIE with RDataFrame
are the new tutorials (in the tutorials/tmva
directory) TMVA_SOFIE_RDataFrame.C
or TMVA_SOFIE_RDataFrame.py
. TMVA_SOFIE_RDataFrame_JIT.C
is an example where the SOFIE model is generated and compiled at runtime using ROOT Cling and evaluated using RDataFrame.
RSofieReader
is a new class, which takes as input a model file (in ONNX, Keras, PyTorch or ROOT format) and generates and compiles the C++ code for the inference at run time using the ROOT JITing capabilities of CLING. An example of using this class is the tutorial TMVA_SOFIE_RSofieReader.C
.
New Pythonizations are available for TMVA allowing to replace the option string passed to several TMVA
functions such as the TMVA::Factory
constructor, the DataLoader::PrepareTrainingAndTestTree
and Factory::BookMethod
using Python function arguments. For example instead of writing an option string "NTrees=500:BoostType=AdaBoost"
one can use in Python NTrees=500,BoostType='AdaBoost'
. The new tmva tutorials TMVA_Higgs_Classification.py
, TMVA_CNN_Classificaion.py
and TMVA_RNN_Classificaton.py
provide examples of using these new pythonizations.
Implement the option “File”: The current file name is painted on the bottom right of each plot if the option File
is set on via gStyle->SetOptFile()
.
import matplotlib.pyplot as plt
import numpy as np
points = np.array([3, 8, 1, 10, 5, 7])
plt.plot(ypoints)
plt. show()
It is now possible to do the same with the ROOT TGraph:
REve now uses RenderCore
to visualize 3D objects in JavaScript, replacing the use of Three.js
. RenderCore is an open source WebGL rendering engine maintained by University of Ljubljana and tailored to the needs of the REve visualization framework. The minimized version is now included in ROOT source as built-in. REve with use of RendeCore gains:
This runs normal WebGL rendering in headless web browser (Chrome or Firefox) and creates png or jpeg image out of it.
rootssh
script for tunnel to remote sessionrootssh
shell script to simplify use of web-based widgets on remote nodes: [localnode] rootssh user@remotenode
[remotenode] root --web -e 'new TBrowser'
Script automatically configures ssh tunnel between local and remote nodes, one the remote node unix socket with strict 0700 mode is used. When ROOT running on remote node wants to display new web widget, script will automatically start web browser on local node with appropriate URL, accessing widget via configured ssh tunnel.
tutorial/tmva
directory. Tutorials like TMVA_Higgs_Classification.py
shows the new pythonizations available in TMVA and new TMVA_SOFIE_...
tutorials show th eusage of SOFIE in both C++ or Python.__cplusplus
preprocessor macro w.r.t. when ROOT was configured.override
..rootlogon.py
file will be searched both in the current working directory and in the user’s home directory. This file is the Python equivalent of rootlogon.C
and can be used to tweak ROOT settings when using PyROOT.TFile
now enables its usage as a Python context manager:from ROOT import TFile
with TFile("file1.root", "recreate") as outfile:
hout = ROOT.TH1F(...)
outfile.WriteObject(hout, "myhisto")
TDirectory::TContext
now enables its usage as a Python context manager:with TDirectory.TContext():
# Open some file here
file = ROOT.TFile(...)
# Retrieve contents from the file
histo = file.Get("myhisto")
# After the 'with' statement, the current directory is restored to ROOT.gROOT
std::vector
contents at the prompt.roottest
standaloneRDataFrame::GraphAsymmErrors
int32
numpy array to Int_t *
doesn’t work on 32-bit platformsrootcling
does not properly detect the class doc when using a ClassDefOverride
TFile::Close()
TAxis::ChangeLabel
documentationTColor::GetColorTransparent()
does not re-use previously defined transparent colorsROOT::VecOps::RVec<double>
as a column typeRBrowser
should support SafariRBrowser
RooFit
banner with CMAKE_CXX_FLAGS
option __ROOFIT_NOBANNER
by defaultRooAbsPdf::generate()
auto
is used for pointer typesnbconvert
TThreadExecutor
and TSeq
with specified beginning/rangeRooProduct::Print("v")
std::iterator
runtime_cxxmodules
fails to build with GCC12RBrowser
does not list in-memory objects when written objects are present in TDirectory
contextVary
to accept Stats
GetViewCollection
semantics are unclearstd::pair
RooMinimizer::contour
does not give back the same plotRooAbsPdf::createChi2()
and RooChi2Var
std::tuple
RBrowser
attempts and fails to launch TBrowser
despite --web=server:xxxx
PreprocessFunction::PrintXML()
needs to escape special characters to produce valid XMLRooAbsData::Expected
RooAddPdf::fixCoefRange
cache issue with createIntegralroot-config
fails if spaces are part of ROOTSYS
pathRooFit::UniqueId
FillColor/FillStyle
and VisualizeError
to RooAbsReal::plotOn()
std::pair<int, int>
branch at promptnlohmann_json
Alias
and TTree sub-branchesTGeoMixture::ComputeDerivedQuantities
TTreeReaderArray
does not support Double32_t
TMetaUtils::ReSubstTemplateArg
with gcc12 headersREAD_WITHOUT_GLOBALREGISTRATION
has no effect on remote filesTH1::Merge
does not extend axes properly for certain histograms with labelsTHnSparse::Add()
does not preserve weightsRooPlot::pullHist
only uses upper rangeRange
with begin+strideEXTRA_CLING_ARGS
to -O2
TInterpreter::Calc
with no output stack in seemingly random distributed rdf test executionTH1::GetRMS
does not mention the fact that it is not the RMS anymorebuiltin_clang=OFF
std::vector<const char*>
Sum(vec_of_bool)
should not return a bool
RooRealSumPdf
when using batchmodeRNTupleWriter::Fill()
return the number of bytes writtenTVirtualCollectionProxy
TFile::Open
when filename contains “://”RooPlot::pullHist
TFile::DrawMap
plots can be improvedplotSamplingHint
can cause evaluation outside the “safe” range of an observablechar
from a TTreeReader<signed char>
_HAS_CONDITIONAL_EXPLICIT=0
won’t work with VS 2022 17.4RooAbsPdf::fitTo
: would it be possible to add an option to control maximal number of calls?TExec::SavePrimitive
fails when string args used inside commandTColor::SaveColor
sometimes does not store colorRNTupleLocator
sTClass::GetMethodWithPrototype
-flat_namespace
changes user-facing behavior[#12164] - Strange behaviour in interpreter in master/6.28 when initialising vectors
TROOT::ProcessLine()
RooHist
does not correctly handle negative scale factorRooAbsData
reduce with CutRange
not applying cut to unselected variablesTTreeReaderArray<T>
does not work for VLEN branches whose length branch is not of type intRooHistPdf
plotted in range[ROOT-11023] - RDataFrame Remove global state in ROOT::RDF::SaveGraph
Published on March 21, 2023
rootreadspeed --help
has “random” linebreaks?#
syntax in TChain::AddRVec<T>
is broken for non-trivially-constructible TsgPad->SetLogx
is combined with Draw("same")
TTime
class is not splitablePublished on May 7, 2023
"TEXT90 COLZ"
does not workRDF::FromCSV
gives wrong output with colTypes specifiedRVec<bool>
shows wrong valuesgDirectory
macro should include global-namespace qualificationGetClass(<typedef>)
works only at the second tryRooDataSet
RooLinearVar
not used in plot projection integralsstd.bits/uses_allocator_args.h
requires feature cplusplus20
Published on August 28, 2023
HistFactory
model file twice gives strange results since ROOT 6.26.02TTreeCache
scales (very) poorly with number of baskets/clusters.TClass
object managed in case of multi-threaded ‘rapid’ set of dlopen/dlclose on same library.<filesystem>
with runtime modulesHistFactory
workspaces incompatible between versions 6.26 and 6.28std::map
in a Debug build using recent versions of GCCTDirectoryFile::ls
TRootBrowser
: Histogramming leafs which are functions failsClingConfig.cmake.tmp
to the external LLVM library directory, causing configuration failurebuiltin_llvm=OFF
due to unintend libbsd linkingbuiltin_llvm=OFF
: CommandLine Error: Option ‘W’ registered more than once!core/clib/inc/strlcpy.h
incompatible with latest glibcstd::unique_ptr
TFile
with very large number of directories.input_line_1:1:
…Snapshot
actions writes to uninitialized memoryThese changes will be part of a future 6.28/08.