ROOT logo
ROOT » Download » Release Notes

ROOT Version 5.28/00 Release Notes

ROOT version 5.28/00 has been released on December 15 2010. In case you are upgrading from an old version, please read the releases notes of version 5.16, 5.18, 5.20, 5.22, 5.24 and version 5.26 in addition to these notes.

Binaries for all supported platforms are available at:

      http://root.cern.ch/drupal/content/production-version-528 

For more information, see:

      http://root.cern.ch

The following people have contributed to this new version:
Alberto Annovi, INFN, TH1,
Kevin Belasco, Princeton University, RooStats,
Bertrand Bellenot, CERN/SFT,
Rene Brun, CERN/SFT,
Philippe Canal, FNAL,
Olivier Couet, CERN/SFT,
Kyle Cranmer, NYU, RooStats,
Jason Detwiler, LBL, TClonesArray,
Valeri Fine, BNL/STAR,
Fabrizio Furano, CERN/IT,
Gerri Ganis, CERN/SFT,
Andrei Gheata, CERN/Alice,
Oleksandr Grebenyuk, GSI, TLatex, TPostScript,
Christian Gumpert, CERN and University Dresden, TEfficiency
Bill Heintzelman, UPENN, TTree,
Andreas Hoecker, CERN/Atlas, TMVA,
Pierre Juillot, IN2P3, PostScript,
Folkert Koetsveld, Nijmegen, RooFit,
Alex Koutsman, Nikhef, RooFit,
Sven Kreiss, NYU, RooStats,
Wim Lavrijsen, LBNL, PyRoot,
Sergei Linev, GSI,
Benno List, Desy, MathCore and MathMore,
Anar Manafov, GSI,
Mike Marino, TUM, pyroot/tutorials
Ramon Medrano Llamas, University of Oviedo, PROOF
Biagio di Micco, Pythia8,
Lorenzo Moneta, CERN/SFT,
Axel Naumann, CERN/SFT,
Eddy Offermann, Renaissance,
Bartolomeu Rabacal, CERN/ADL, Math,
Fons Rademakers, CERN/SFT,
Paul Russo, FNAL,
Sangsu Ryu, KISTI, PROOF
Stefan Schmitt, Desy, TUnfold,
Gregory Schott, Karlsruhe/CMS, RooStats,
Benoit Speckel, IN2P3, Fonts,
Peter Speckmayer, CERN, CLIC, TMVA,
Joerg Stelzer, DESY/Atlas, TMVA,
Alja Tadel, CERN/CMS, Eve,
Matevz Tadel, CERN/Alice, Eve,
Jan Therhaag, University Bonn, ATLAS, TMVA,
Eckhard von Toerne, University Bonn, ATLAS, TMVA,
Wouter Verkerke, NIKHEF/Atlas, RooFit,
Helge Voss, MPI Heidelberg, LHCb, TMVA



Core

Build system and Platform support

Base

Build

ACLiC

Meta

Cont

Thread



I/O

File Format

Run time performance

We introduced an optimized infrastructure for reading objects using a StreamerInfo. Rather than driving the streaming using a switch statement inside TStreamerInfo::ReadBuffer, the streaming is now driven using a simple loop over a sequence of configured StreamerInfo actions. This improves run-time performance by allowing a dramatic reduction in function calls and code branches at the expense of some code duplication. There are 3 versions of this loop implemented in TBufferFile and overloaded in TBufferXML and TBufferSQL:
  1. virtual Int_t ReadSequence(const TStreamerInfoActions::TActionSequence &sequence, void *object);

  2. virtual Int_t ReadSequenceVecPtr(const TStreamerInfoActions::TActionSequence &sequence, void *start_collection, void *end_collection);

  3. virtual Int_t ReadSequence(const TStreamerInfoActions::TActionSequence &sequence, void *start_collection, void *end_collection);

The 1st version is optimized to read a single object. The 2nd version is optimized to read the content of TClonesArrays and vectors of pointers to objects. The 3rd version is used to streamed any collections.

TBufferXML and TBufferSQL overload the loops to introduce extra code to help the buffer keep track of which streamer element is being streamed (this functionality is not used by TBufferFile.)

A TStreamerInfoActions::TActionSequence is an ordered sequence of configured actions.

A configured action has both an action which is a free standing function and a configuration object deriving from TStreamerInfoActions::TConfiguration. The configuration contains information that is specific to the action but varies from use to use, including the offset from the beginning of the object that needs to be updated. Other examples of configuration include the number of bits requested for storing a Double32_t or its factor and minimum.

When the sequence is intended for a collection, the sequence has a configuration object deriving from TStreamerInfoActions::TLoopConfiguration which contains for example the size of the element of a vector or the pointers to the iterators functions (see below).

Each TStreamerInfo has 2 reading sequences, one for object-wise reading (GetReadObjectWiseActions) and one for member-wise reading (GetReadMemberWiseActions) which is used when streaming a TClonesArray of a vector of pointer to the type of objects described by the TClass.

Each collection proxy has at least one reading sequences, one for the reading each version of the contained class layout.

Each case of the TStreamerInfo::ReadBuffer switch statement is replaced by 4 new action functions, one for the object wise reading, one for the member wise reading for TClonesArray and vector of pointers, one for the member wise reading for a vector of object and one for all other collections.

Each collection (proxy) needs to provide 5 new free standing functions:
   // Set of functions to iterate easily throught the collection
   static const Int_t fgIteratorArenaSize = 16; // greater than sizeof(void*) + sizeof(UInt_t)

   typedef void (*CreateIterators_t)(void *collection, void **begin_arena, void **end_arena);
   virtual CreateIterators_t GetFunctionCreateIterators(Bool_t read = kTRUE) = 0; 
   // begin_arena and end_arena should contain the location of a memory arena of size fgIteratorSize. 
   // If the collection iterator are of that size or less, the iterators will be constructed in place in those location (new with placement)
   // Otherwise the iterators will be allocated via a regular new and their address returned by modifying the value of begin_arena and end_arena.
   
   typedef void* (*CopyIterator_t)(void *dest, const void *source);
   virtual CopyIterator_t GetFunctionCopyIterator(Bool_t read = kTRUE) = 0;
   // Copy the iterator source, into dest.   dest should contain the location of a memory arena of size fgIteratorSize.
   // If the collection iterator is of that size or less, the iterator will be constructed in place in this location (new with placement)
   // Otherwise the iterator will be allocated via a regular new and its address returned by modifying the value of dest.
   
   typedef void* (*Next_t)(void *iter, const void *end);
   virtual Next_t GetFunctionNext(Bool_t read = kTRUE) = 0;
   // iter and end should be pointers to respectively an iterator to be incremented and the result of collection.end()
   // If the iterator has not reached the end of the collection, 'Next' increment the iterator 'iter' and return 0 if 
   // the iterator reached the end.
   // If the end was not reached, 'Next' returns the address of the content pointed to by the iterator before the 
   // incrementation ; if the collection contains pointers, 'Next' will return the value of the pointer.
   
   typedef void (*DeleteIterator_t)(void *iter);
   typedef void (*DeleteTwoIterators_t)(void *begin, void *end);

   virtual DeleteIterator_t GetFunctionDeleteIterator(Bool_t read = kTRUE) = 0;
   virtual DeleteTwoIterators_t GetFunctionDeleteTwoIterators(Bool_t read = kTRUE) = 0;
   // If the size of the iterator is greater than fgIteratorArenaSize, call delete on the addresses,
   // Otherwise just call the iterator's destructor.

TFile::MakeProject

Misc.



Networking



SQL



Tree

TTree Scan and Draw


Proof



Histogram package

TGraphDelaunay

TGraph2D

TGraph2DPainter

THistPainter

TGraphPainter

TGraph

TMultiGraph

THStack

TF1

TH1

THnSparse

TSpectrum2Painter

New TEfficiency class

New TKDE class

New TSVDUnfold class

TSVDUnfold implements the singular value decomposition based unfolding method proposed in NIM A372, 469 (1996) [hep-ph/9509307]. The regularisation is implemented as a discrete minimum curvature condition. This minimal implementation of TSVDUnfold provides unfolding of one-dimensional histograms with equal number of, not necessarily equidistant, bins in the measured and unfolded distributions. In addition to the unfolding itself, TSVDUnfold provides A toy example for the use of TSVDUnfold is included in the math tutorials (TSVDUnfoldExample.C).

New TH2Poly class

TH2Poly is a 2D Histogram class, inheriting from TH2, allowing to define polygonal bins of arbitary shape.

Each bin, in a TH2Poly histogram, is a TH2PolyBin object. TH2PolyBin is a very simple class containing the vertices, stored as TGraphs and TMultiGraphs, and the content of the polygonal bin.

Bins are defined using one of the AddBin() methods. The bins definition should be done before filling.

TH2Poly implements a partitioning algorithm to speed up bins' filling. The following very simple macro shows how to build and fill a TH2Poly:

{
   TH2Poly *h2p = new TH2Poly();

   Double_t x1[] = {0, 5, 5};
   Double_t y1[] = {0, 0, 5};
   Double_t x2[] = {0, -1, -1, 0};
   Double_t y2[] = {0, 0, -1, -1};
   Double_t x3[] = {4, 3, 0, 1, 2.4};
   Double_t y3[] = {4, 3.7, 1, 4.7, 3.5};

   h2p->AddBin(3, x1, y1);
   h2p->AddBin(3, x2, y2);
   h2p->AddBin(3, x3, y3);

   h2p->Fill(   3,    1, 3); // fill bin 1
   h2p->Fill(-0.5, -0.5, 7); // fill bin 2
   h2p->Fill(-0.7, -0.5, 1); // fill bin 2
   h2p->Fill(   1,    3, 5); // fill bin 3
}
More examples can be found in $ROOTSYS/tutorials/hist/:

th2polyBoses.C
th2polyEurope.C
th2polyHonecomb.C
th2polyUSA.C


CINT



PyROOT

Python 3 is now in principle supported: a problem remains with passing builtin types by reference, since the internal object layout has changed. There may be further problems with handling of char*: all strings are unicode in p3, so if the C++ code is meant to see the char* as byte*, that won't work.

Other significant feature improvements include:

  • Globally overloaded operators are now supported, and histogram unary multiplication with scalar is mapped onto TH1.Scale.
  • Significant changes to equality and non-equality operators should make their behavior more consistent across the board, and in particular globally overloaded equality operators for STL iterators should work as expected (if a dictionary entry is generated for them).
  • Global arrays of builtin types are now supported.
  • Added further mappings of operator converters for builtin types.
  • Individual methods can release the GIL, by setting the "_threaded" parameter of the method to True.
  • Constructors need not be creators of new objects (controlled with their "_creates" parameters).
  • Added access to TSelector protected data members in TPySelector.
  • Derivable Fitter base classes are added for use with ROOT::Fitter.
  • Special cases for RooFit are added to resolve a few specific overloading problems.
  • A Python Warning is issued if a void* converter or executor is chosen out of necessity (e.g. because dictionaries are missing).
  • A Python Warning is issued if keyword arguments are given (unsupported).

Notable bug fixes include:

  • Object returns as a member of a temporary will keep a life line to that temporary, to prevent it from being destroyed in a long expression.
  • Added "_" as a valid class name character.
  • Speed of the destruction of memory-regulated objects has been improved (made linear, rather than quadratic).



Math Libraries

Mathcore

  • New interface class ROOT::Math::DistSampler for generating random number according to a given distribution.
    • The class defines the methods to generate a single number DistSampler::Sample()or a data sets DistSampler::Generate(n, data). The data set generation can be unbinned or binned in the given range (only equidistant bins are currently supported)
    • Sampling of 1D or multi-dim distributions is supported via the same interface
    • Derived classes implementing this interface are not provided by MathCore but by other libraries and they can be instantiated using the plugin manager. Implementations based on Unuran and Foam exist.
    • The tutorial math/multidimSampling.C is an example on how to use this class

  • New class ROOT::Math::GoFTest for goodness of fit tests of unbinned data
    • The class implements the Kolmogorov-Smirnov and Anderson-Darling tests for two samples (data vs data ) and one sample (data vs distribution)
    • For the data vs distribution test, the user can compare using a predefined distributions (Gaussian, LogNormal or Exponential) or by passing a user defined PDF or CDF.
    • Example 1: perform a 2 sample GoF test from two arrays, sample1[n1] and sample2[n2] containing the data
          ROOT::Math::GoFTest goftest(n1, sample1, n2, sample2);
          double pValueAD = goftest.AndersonDarling2SamplesTest();
          double pValueKS = goftest.KolmogorovSmirnov2SamplesTest();
        
      The class can return optionally also the test statistics instead of the p value.
    • Example 2: perform a 1 sample test with a pre-defined distribution starting from a data set sample[n]
          ROOT::Math::GoFTest goftest(n, sample, ROOT::Math::GoFTest::kGaussian);
          double pValueAD = goftest.AndersonDarlingTest();
          double pValueKS = goftest.KolmogorovSmirnovTest();
          
    • Example 3: perform a 1 sample test with a user-defined distribution provided as cdf
               ROOT::Math::Functor1D cdf_func(&ROOT::Math::landau_cdf);
               ROOT::Math::GofTest goftest(n, sample, cdf_func, ROOT::Math::GoFTest::kCDF);
               double pValueAD = goftest.AndersonDarlingTest();
         
    • Example 4: perform a 1 sample test with a user-defined distribution provided as pdf. Note that in this case to avoid integration problems is sometimes recommended to give some reasonable xmin and xmax values. xmin (and xmax) should however be smaller (larger) than the minimum (maximum) data value.
               ROOT::Math::Functor1D pdf_func(&ROOT::Math::landau_pdf);
               double xmin = 5*TMath::Min_Element(n,sample);
               double xmax = 5*TMath::Max_Element(n,sample);
               ROOT::Math::GofTest goftest(n, sample, pdf_func, ROOT::Math::GoFTest::kPDF,xmin,xmax);
               double pValueAD = goftest.AndersonDarlingTest();
         
    • The tutorial math/goftest.C is an example on how to use the ROOT::Math::GofTest class

  • New class TKDTreeBinning for binning multidimensional data.
    • The class implements multidimensional binning by constructing a TKDTree inner structure form the data which is used as the bins.
    • The bins are retrieved as two double*, one for the minimum bin edges, the other as the maximum bin edges. For one dimension one of these is enough to correctly define the bins. The bin edges of d-dimensional data is a d-tet of the bin's thresholds. For example if d=3 the minimum bin edges of bin b is of the form of the following array: {xbmin, ybmin, zbmin}.
    • Example 1: constructing a TKDTreeBinning object with sample[dataSize] containing the data and dataDim and nBins, multidimension and bin number parameters.
          TKDTreeBinning* fBins = new TKDTreeBinning(dataSize, dataDim, sample, nBins);
          
    • Example 2: retrieving the bin edges. For the multidimensional case both minimum and maximum ones are necessary for the bins to be well defined
             Double_t* binsMinEdges = fBins->GetBinsMinEdges();
             Double_t* binsMaxEdges = fBins->GetBinsMaxEdges();
          
      If you wish to retrieve them sorted by their density issue before the earlier getters fBins->SortBinsByDensity();
    • Example 3: retrieving the bin edges of bin b. For the multidimensional case both minimum and maximum ones are necessary for the bins to be well defined
            std::pair binEdges = fBins->GetBinEdges(b);
         
    • Example 4: perform queries on bin b information
            Double_t density = GetBinDensity(b);
            Double_t volume  = GetBinVolume(b);
            Double_t* center = GetBinCenter(b);
         
    • The tutorial math/kdTreeBinning.C is an example on how to use this class

  • New statistical functions ROOT::Math::landau_quantile (inverse of landau cumulative distribution) translated from RANLAN and ROOT::Math::landau_quantile_c.
  • New statistical functions ROOT::Math::negative_binomial_pdf and the cumulative distributions ROOT::Math::negative_binomial_cdf and ROOT::Math::negative_binomial_cdf_c.
  • New special functions: sine and cosine integral, translated by B. List from CERNLIB: ROOT::Math::sinint and ROOT::Math::cosint
  • New classes ROOT::Math::IOptions and ROOT::Math::GenAlgoOptions for dealing in general with the options for the numerical algorithm. The first one is the interface for the second and defines the setting and retrieval of generic pair of (name,value) options.
  • They are used for defining possible extra options for the minimizer, integration and sampler options.
  • Integration classes:
    • Fix a bug in the templated method setting the integrand function
    • Use now IntegrationOneDim::kADAPTIVESINGULAR as default method for the 1D integration
    • Add the method IntegrationOneDim::kLEGENDRE based on the GaussLegendreIntegrator class.
    • Implement also for the GaussIntegrator and GaussLegendreIntegrator the undefined and semi-undefined integral using a function transformation as it is done in the GSLIntegrator
    • Fix a bug in IntegratorOneDim::SetAbsTolerance
    • New class ROOT::Math::IntegratorOptions which can be passed to all integrator allowing the user to give options to the class and in particular default value. Via the support for extra options (with the class ROOT::Math::IOptions generic (string,value) options can be used in the base class to define specific options for the implementations. For example for the MCIntegrator class, specific options can now be passed to VEGAS or MISER.
  • Improve the root finder and 1D minimization classes (BrentRootFinder and BrentMinimizer1D) by fixing a bug in the Brent method (see rev. 32544) and adding possibility to pass the tolerance and max number of iterations
  • Change also the interface classes, ROOT::Math::RootFinder and ROOT::Math::IMinimizer1D to have methods consistent with the other numerical algorithm classes (e.g. return bool and not int from RootFinder::Solve and add a RootFinder::Status() function. In addition, use the same default tolerance for all the root finder algorithms.
  • The class ROOT::Math::Data::Range returns in the method GetRange the values -inf and +inf when no range is set
  • Use in TRandom::SetSeed(int seed) a value of seed=0 as default argument. This is the same now in all the derived classes.
  • Add new methods in ROOT::Fit::FitResult to have a more consistent and expressive API:FitResult::Parameter(index), FitResult::ParError(index) and FitResult::ParName(index). The method FitResult::ParError should be used instead of FitResult::Error in the derived TFitResult class to avoid a conflict with TObject::Error (see bug 67671).
  • Fix a bug in Tmath::AreEqualRel to take into account the case when the two arguments may be null.
  • Improve implementation of the F distribution for large N and M. Use now the same implementation in ROOT::Math and TMath
  • Fix the returned value of the incomplete gamma functions for a=0 or a is a negative integer number.

Mathmore

  • Fix a bug in ROOT::Math::Random::Multinomial.
  • Fix some bugs in GSLInterpolator
  • New mathematical special functions in the ROOT::Math namespace implemented using GSL:
    • Airy functions:
         double airy_Ai(double x);
         double airy_Bi(double x);
         double airy_Ai_deriv(double x);
         double airy_Bi_deriv(double x);
         double airy_zero_Ai(unsigned int s);
         double airy_zero_Bi(unsigned int s);
         double airy_zero_Ai_deriv(unsigned int s);
         double airy_zero_Bi_deriv(unsigned int s);
        
    • Wigner coefficient functions:
         double wigner_3j(int ja, int jb, int jc, int ma, int mb, int mc);
         double wigner_6j(int ja, int jb, int jc, int jd, int je, int jf);
         double wigner_9j(int ja, int jb, int jc, int jd, int je, int jf, int jg, int jh, int ji);
         
  • New statistical function: non-central chisquare probability density function
       double noncentral_chisquared_pdf(double x, double r, double lambda);
       
    It is implemented using Bessel functions or hypergeometric function
  • New classes VavilovAccurate and VavilovFast, derived from the abstract base class Vavilov, provide pdf, cdf and quantile functions for the Vavilov distribution, based on the algorithms of CERNLIB (G116 and G115, respectively). The classes VavilovAccuratePdf, VavilovAccurateCdf and VavilovAccurateQuantile implement the IParametricFunctionOneDim interface for easier use in fit problems.

Unuran

  • Use new version 1.7.2
  • Add new class TUnuranSampler implementing the ROOT::Math::DistSampler interface for one dimensional continuous and discrete distributions and for mult-dimensional ones

Foam

  • Add new class TFoamSampler implementing the ROOT::Math::DistSampler interface for generating random numbers according to any one or multi-dim distributions using Foam.
  • All the TFoam options can be controlled via the ROOT::Math::DistSamplerOptions class, which can be passed as input to the virtual ROOT::Math::DistSampler::Init(..) function.

GenVector

  • Add some missing copy constructor and assignment operators to fix compilation issue observed with LLVM (Clang)

Minuit

  • Fix a bug when using at the same time TMinuit or TFitter with the new TMinuitMinimizer class. See bug 72909.

Minuit2

  • Fix the returned error from the Minimizer class for fixed and constant parameters. Now is set explicitly to zero.
  • Fix a problem in re-defining fixed parameters as variable ones. Before it was not possible to release them.
  • Fix a problem in the number of function calls when running MnHesse after minimizing. Now the number is incremented instead of being reset.

Genetic

  • Add a new Minimizer implementation based on the genetic algorithm used in TMVA (plugin name "Genetic"). See example programs in math/genetic/test.


RooFit

  • Assorted small bug fixes have been applied. No major new features have been introduced since 5.26
  • Normalization of
  • RooRealSumPdf
  • changed from sum of coefficents to sum of coefficients*integrals of input functions.
  • New PDF RooNonCentralChiSquare which is useful for asymptotic analysis of likelihood ratio tests -- like expected significance and error bands.
  • Ability to "seal" data in RooNLLVar, so that an experiment can publish likleihood functions without exposing the data necessary to evaluate the likelihood function.

HistFactory

  • The ROOT release ships with a script prepareHistFactory and a binary hist2workspace in the $ROOTSYS/bin directories.
  • prepareHistFactory prepares a working area. It creates a results/, data/, and config/ directory. It also copies the HistFactorySchema.dtd and example XML files into the config/ directory. Additionally, it copies a root file into the data/ directory for use with the examples.
  • Usage: hist2workspace input.xml
  • HistFactorySchema.dtd: This file is located in $ROOTSYS/etc/ specifies the XML schema. It is typically placed in the config/ direc-tory of a working area together with the top-level XML file and the individual channel XML files. The user should not modify this file. The HistFactorySchema.dtd is commented to specify exactly the meaning of the various options.

Top-Level XML File

  • see for example $ROOTSYS/tutorials/histfactory/example.xml
  • This file is edited by the user. It specifies
    • A top level 'Combination' that is composed of:
      • several 'Channels', which are described in separate XML files.
      • several 'Measurements' (corresponding to a full fit of the model) each of which specifies
        • a name for this measurement to be used in tables and files
        • what is the luminosity associated to the measurement in picobarns
        • which bins of the histogram should be used
        • what is the relative uncertainty on the luminosity
        • what is (are) the parameter(s) of interest that will be measured
        • which parameters should be fixed/floating (eg. nuisance parameters)
        • which type of constriants are desired
          • Gaussian by default
          • Gamma, LogNormal, and Uniform are also supported
        • if the tool should export the model only and skip the default fit

Channel XML Files

  • see for example $ROOTSYS/tutorials/histfactory/example_channel.xml
  • This file is edited by the user. It specifies for each channel
    • observed data (if absent the tool will use the expectation, which is useful for expected sensitivity)
    • several 'Samples' (eg. signal, bkg1, bkg2, ...), each of which has:
      • a name
      • if the sample is normalized by theory (eg N = L*sigma) or not (eg. data driven)
      • a nominal expectation histogram
      • a named 'Normalization Factor' (which can be fixed or allowed to float in a fit)
      • several 'Overall Systematics' in normalization with:
        • a name
        • +/- 1 sigma variations (eg. 1.05 and 0.95 for a 5% uncertainty)
      • several 'Histogram Systematics' in shape with:
        • a name (which can be shared with the OverallSyst if correlated)
        • +/- 1 sigma variational histograms

RooStats

ModelConfig

  • This class is now used extensively by the calculator tools. It encapsulates the configuration of a model to define a particular hypothesis.
  • Various fixes by and improvements to make it usable with all the existing calculator.
  • ModelConfig contains now always a reference to an external workspace who manages all the objects being part of the model (pdf's and parameter sets). The user needs then to set always a workspace pointer before setting the various objects.

General Improvements

  • ModelConfig is now used extensively by the calculator tools. It encapsulates the configuration of a model to define a particular hypothesis.
  • ProfileLikelihood::GetInterval now returns LikleihoodInterval in the interface to avoid unnecessary casting
  • FeldmanCousins::GetInterval now returns PointSetInterval in the interface to avoid unnecessary casting

Profile Likelihood

  • When running ProfileLikelihoodCalculator::GetHypoTest the user does not need anymore to clone the null parameter set. It is done now inside the calculator
  • LikelihoodInterval::LowerLimit (and UpperLimit) returns now a boolean flag with the status of the limit search. In case of a failure in finding the upper/lower limit a value of zero is returned instead of the min/max of the variable range
  • LikelihoodIntervalPlot fix drawing of horizontal green line when limits are outside the variable range

HybridCalculator

  • New re-written class based on the TestStatSampler and TestStatistic interfaces. The new class is designed to provide consistent use of a ModelConfig, specifying the Pdf and Prior. The old class remains, but with a new name: HybridCalculatorOriginal.
  • The tutorial rs201b_hybridcalculator shows the usage of the new class.
  • Note that the new class can be constructed only from a ModelConfig
  • One can specify a TestStatSampler in the constructor (which implies a choice of a TestStatistic, or by default the tool will use the ToyMCSampler and the RatioOfProfiledLikelihoods
  • The interface of the new HybridCalculator class is now more uniform with the other calculator tools, which is different from the original HybridCalculator's interface. Users wishing to run their old macro are advised to use ModelConfig, but if that is too time consuming one can just change the name of the class from HybridCalculator to HybridCalculatorOriginal
  • Note also that with the new class no HybridResult is returned but directly the base class HypoTestResult which has been improved for this release.
  • The plot class, HybridPlot is not returned, but the user can create an HypoTestPlot object from the HypoTestResult.
  • The classes HybridResult and HybridPlot work only with the HybridCalculatorOriginal and remain for maintaining a backward compatibility.
  • Given a ModelConfig, the tool will attempt to form the posterior pdf for the nuisance parameters based on the prior and the constraint terms in the pdf. However, this is not yet implemented. In order to keep logical consistency with other tools, the distribution being used to smear the nuisance parameters should NOT be considered the prior in the model config. Instead, one should use HybridCalculator's ForcePriorNuisanceNull and ForcePriorNuisanceAlt.

HybridCalculatorOriginal

  • Apply a fix for test statistic = 3 (profile likelihood)
  • Apply a fix for using non-extended pdf

TestStatSampler and TestStatistics

  • Cleanup of the interfaces.
  • TestStatistics now have a method PValueIsRightTail to specify the sign conventions for the test statistic. This is used when making plots and calculating p-values.
  • make clear that TestStatistic::Evaluate should take data and values of the parameters that defien the null.
  • Add method TestStatSampler::SetParametersForTestStat that allows for greater control of parameters used for generating toy data and parameters used for evaluating the test statistic.
  • ProfileLikelihoodTestStat
  • Using the raw profile likelihood while reviewing the old algorithm used to provide robustness in situations with local minima.
  • New test statistic classes:
    • SimpleLikelihoodRatioTestStat : log L_1 / L_0
    • RatioOfProfiledLikelihoodsTestStat: log L(mu_1, hat(nu_1))/L(mu_0,hat(nu_0))
    • MaxLikelihoodEstiamteTestStat: the MLE of a specified parameter

ToyMCSampler

  • New version of ToyMCSampler which can smear the nuisance parameters according to their distributions for use with HybridCalculator
  • Updated class structure: ToyMCSampler is a particular implementation of a TestStatSampler and runs with any TestStatistic. It returns the result in an instance of SamplingDistribution.
  • Supports Importance Sampling: Improves sampling the tails of a distribution by generating toys from a user supplied importance density and a reweighing procedure of the result.
  • Supports Adaptive Sampling: extends the run until a given number of toys is reached in the tail(s).
  • Parallelization using PROOF(-Lite) is supported. It is enabled by supplying a ProofConfig instance.

BayesianCalculator

  • Improve the way the class performs the numerical integration to find the interval and/or the posterior function.
  • In case of complex numerical calculation add the method SetScanOfPosterior(nbins) for scanning the posterior function in a givn number of nbins
  • Add possibility to compute lower/upper limits using the method SetLeftSideTailFraction(fraction)
  • Add possibility to compute shortest interval using SetShortestInterval

MCMCCalculator

  • Various improvements including possibility to compute lower/central/upper limits using SetLeftSideTailFraction(fraction)

New Tutorials

  • New Demos that take name for file, workspace, modelconfig, and data, then use the corresponding calculator tool. If the file is not specified it will read an file produced from running the HistFactory tutorial example.
    • StandardProfileLikelihoodDemo.C:
    • StandardFeldmanCousinsDemo.C:
    • StandardBayesianMCMCDemo.C:
    • StandardBayesianNumericalDemo.C:
    • StandardProfileInspectorDemo.C:
  • Demonstrate some new PDFs
    • TestNonCentral.C: demonstrates non central chi-square
    • JeffreysPriorDemo.C: demonstrates Jeffreys Prior
  • Instructional Examples
    • IntervalExamples.C: Standard Gaussian with known answer using 4 techniques
    • FourBinInstructional.C: Example of a standard data-driven approach for estimating backgrounds. A lot of discussion.
    • HybridInstructional.C: Example of protoype on/off problem with a data-driven background estimate. A lot of discussion
    • HybridStandardForm.C: Variant on above in 'standard form'
    • MultivariateGaussianTest.C: A validation example with an N-D multivariate Gaussian


TMVA

TMVA version 4.1.0 is included in this root release. The most important new feature is the support for simulataneous classification of multiple output classes for several multi-variate methods. A lot of effort went into consolidation of the software, i.e. method performance and robustness, and framework stability. The changes with respect to ROOT 5.27 / TMVA 4.0.7 are in detail:

Framework

  • Multi-class support. The support of multiple output classes (i.e., more than a single background and signal class) has been enabled for these methods: MLP (NN), BDTG, FDA.
    The multiclass functionality can be enabled with the Factory option "AnalysisType=multiclass". Training data is specified with an additional classname, e.g. via factory->AddTree(tree,"classname");. After the training a genetic algorithm is invoked to determine the best cuts for selecting a specific class, based on the figure of merit: purity*efficiency. TMVA comes with two examples in $ROOTSYS/tmva/test: TMVAMulticlass.C and TMVAMulticlassApplication.C
  • New TMVA event vector building. The code for splitting the input data into training and test samples for all classes and the mixing of those samples to one training and one test sample has been rewritten completely. The new code is more performant and has a clearer structure. This fixes several bugs which have been reported by some users of TMVA.
  • Code and performance test framework: A unit test framework for daily software and method performance validation has been implemented.

Methods

  • BDT Automatic parameter optimisation for building the tree architecture: The optimisation procedure uses the performance of the trained classifier on the "test sample" for finding the set of optimal parameters. Two different methods to traverse the parameter space are available (scanning, genetic algorithm). Currently parameter optimization is implemented only for these three parameters that influence the tree architectur: the maximum depth of a tree, MaxDepth, the minimum number of events in each node, NodeMinEvents, and the number of tress, NTrees.
    Optimization can is invoked by calling factory->OptimizeAllMethods(); prior to the call factory->TrainAllMethods();.
    Automated and configurable parameter optimization is soon to be enabled for all methods (for those parameters where optimization is applicable).
  • BDT node splitting: While Decision Trees typically have only univariate splits, in TMVA one can now also opt for multivariate splits that use a "Fisher Discriminant" (option: UseFisherCuts), built from all observables that show correlations larger than some threshold (MinLinCorrForFisher). The training will then test at each split a cut on this fisher discriminant in addition to all univariate cuts on the variables (or only on those variables that have not been used in the Fisher discriminant, option UseExcusiveVars). No obvious improvement betwen very simple decision trees after boosting has been observed so far, but only a limited number of studies has been performed concerning potiential benenfit of these simple multivariate splits.

Bug fixes

  • A problem in the BDTG has been fixed, leading to a much improved regression performance.
  • A problem in the TMVA::Reader has been fixed.
  • With the new test framework and the coverity checks of ROOT a number of bugs were discovered and fixed. They mainly concerned memory leaks, and did not affect the performance.


Geometry


TGeoElement, TGeoIsotope


New class TGeoIsotope inside the file TGeoElement.h/.cxx. This is done for compatibility with GEANT4 isotopes and elements. TGeoElement class now contains the number of nucleons and an array of possible isotopes (as in GEANT4). One can make isotopes of the same element:

TGeoIsotope *iso1 = new TGeoIsotope("U235", Z,N1,A1);
TGeoIsotope *iso2 = new TGeoIsotope("U238", Z,N2,A2);

then an element containing the 2 isotopes:

TGeoElement *elem = new TGeoElement("U_nat", "U", 2); elem->AddIsotope(iso1,abundance1_percent); elem->AddIsotope(iso2,abundance2_percent);

Then one can make normal materials based on such elements. Added getters for isotopes from elements, as well as an isotope table within TGeoElementTable with search method by name (and not supporting several isotopes with the same name). Existing material table updated to use the number of nucleons. Everything backward compatible.

TGDMLParser


Several fixes and support for new features: Support for reading isotopes via the GDML parser. Interaction length now automatically computed using the algorithm from GEANT4. Fixed parsing of composite shapes. G4Ellipsoid is now supported in conversions.

MonteCarlo

TDatabasePDG

The method ReadPDGTable of TDatabasePDG was setting the stable flags for all particles regardless of their width.

TParticlePDG

The value reported in the fLifetime variable of TParticlePDG is in seconds while in the documentation is was indicated in nanoseconds.

pdg_table.txt

Particles with a width greater than 1e-10 have now the stable flag set to 1.

TVirtualMC

New functions added in the interface:
  • For activation of collecting TGeo tracks:
    virtual void SetCollectTracks(Bool_t collectTracks);
    virtual Bool_t IsCollectTracks() const;
    
  • For accessing the normal vector of the crossing volume surface on the geometry boundary:
    virtual Bool_t CurrentBoundaryNormal(Double_t &x, Double_t &y, Double_t &z) const;
    


GUI

TGFileDialog

  • Properly change directory when navigating in the directory tree.
  • Make the File Dialog resizable.

TGFSContainer

  • Create specific icons for symlinks (add a small arrow on the bottom left corner of the original icon).

TGListBox

  • Enabled CurrentChanged(TGFrame*) and CurrentChanged(Int_t,Int_t) signals, allowing to handle keyboard navigation/selection.
    For example:
       TGLBContainer *lbc = (TGLBContainer *)fListBox->GetContainer();
       lbc->Connect("CurrentChanged(TGFrame*)", "MyGuiClass", this, "CurrentChanged(TGFrame*)"); 
    
       void MyGuiClass::CurrentChanged(TGFrame *f)
       {
          TGTextLBEntry *lbe = (TGTextLBEntry *)f;
          printf("\nMyGuiClass::CurrentChanged() : Id = %d, Text = %s\n", lbe->EntryId(), lbe->GetTitle());
       }
    

TGSlider

  • Added SetEnabled(Bool_t) and SetState(Bool_t), allowing to disable or enable the TGSlider widgets (will be greyed if disabled).

TGToolTip

  • Use a better way of positionning tooltips when they go out of screen
  • Avoid to overlap the mouse pointer when repositioning it (flickering effect!)

TRootBrowser

  • Implemented the alphabetical sorting mechanism in the file browser. The sorting is applied only in the current directory and the browser remembers every sorted directory. For this purpose, a new picture button has been added to the file browser plug-in (the status of this button reflects the sorting status of each directory)
    Another button has been added to the file browser plug-in, used for refreshing the current directory in the list tree. Refreshing now checks also if files still exist in the current directory (for the case where files have been deleted by the user or by another application)
  • Allow to change graphic properties of an object (e.g. a histogram) in a Root file via the context menu from the browser (by opening a ged editor)
  • Size of directories, trees, and objects associated to keys inside Root files, or any kind of browsable object can be displayed in their associated tooltip, as soon as their GetObjectInfo() method returns their size as a long long int formatted in a const char * ("%lld")

TRootContextMenu

  • Close the context menu if the selected object is being deleted in the RecursiveRemove() operation.

TRootCanvas/TRootEmbeddedCanvas

  • Drag and drop improvements for images (don't add margins between the canvas/pad border and the picture itself).


Graphical Output

PostScript and PDF

  • The marker size between the screen output and the output file formats was not consistent.
  • Implement the text kerning. The effect is clearly illustrated with the following script. Without kerning the red X is overlaped by the the rest of the text.
         {
            TCanvas *c = new TCanvas;
            TLatex *l = new TLatex(0.5, 0.5, "AVAVAVAVAVAVAVAVAVA#color[2]{X}");
            l->Draw();
            c->SaveAs("c1.eps");
         } 
         
    The original idea came from Oleksandr Grebenyuk. It has been implemented in a such way that the kerning mechanism is activated only when needed. If not needed the old way of text rendering is used. It was done that way because most of the time kerning is not needed and text rendered using the kerning mechanism takes more space in the PS/PDF files.
  • Very long text strings made wrong PS files.
  • PDF also allows to define table of contents. Now, this facility can be used in ROOT. The following example shows how to proceed:
         {
            TCanvas* canvas = new TCanvas("canvas");
            TH1F* histo = new TH1F("histo","test 1",10,0.,10.);
            histo->SetFillColor(2);
            histo->Fill(2.);
            histo->Draw();
            canvas->Print("plots.pdf(","Title:One bin filled");
            histo->Fill(4.);
            histo->Draw();
            canvas->Print("plots.pdf","Title:Two bins filled");
            histo->Fill(6.);
            histo->Draw();
            canvas->Print("plots.pdf","Title:Three bins filled");
            histo->Fill(8.);
            histo->Draw();
            canvas->Print("plots.pdf","Title:Four bins filled");
            histo->Fill(8.);
            histo->Draw();
            canvas->Print("plots.pdf)","Title:The fourth bin content is 2");
         }
         
    Each character string following the keyword "Title:" makes a new entry in the table of contents.
  • TPostScript::Text: Inside a string, the backslash itself is now escaped. The PS file generated by the two following lines did not work.
         TText t(.5,.5,"\\t\\");
         t.Draw();
         
  • Small fix regarding line width in TPDF.
  • In some cases there was some extra blanck page at the beginning of the PDF files. In particular when generated using the "[]" mechanism.

SVG

  • The character #pm was not correct.
  • Long polyline were not drawn correctly.

TASImage

  • In the following macro the histogram drawing was done with wrong margins:
         {
            TImage *img = TImage::Open("$ROOTSYS/tutorials/image/rose512.jpg");
            img->Draw("x");
            gPad->Update();
            TH1F *h1f = new TH1F("h1f","Test random numbers",100,-5,5);
            h1f->FillRandom("gaus",10000);
            h1f->Draw();
            gPad->Update();
         }
        
  • Improve the palette placement in TASImage::Paint (cf $ROOTSYS/tutorials/image/galaxy_image.C)
  • GetWidth() and GetHeight() returned the size of the scaled image (if it exist) instead of the real size of the image.
  • Initialize the Visual in TASImage::ReadImage. This fix a long standing problem with THtml: Without this fix all the embeded macros generating GUI output did not work in THtml.

TImageDump

  • Small boxes (less than one pixel width) were not drawn properly.
  • Line width for hollow boxes was always 1 (in batch mode).
  • Graphics Primitives

    New text font: Symbol italic

    • A new text font "Symbol Italic" has been implemented. It is working for all possible outputs: screen, PS, PDF,SVG, gif etc ... It has the font number 15.
      The following macro gives an example:
           {
              TCanvas c("c","c",0,0,400,100);
              TLatex t0(.05,.45,"Symbol: #font[122]{abc} - Symbol Italic #font[152]{abc}");                    
              t0.SetTextSize(0.36);
              t0.Draw();
              c.Print("symbolitalic.ps");
              c.Print("symbolitalic.pdf");
              c.Print("symbolitalic.gif");
              c.Print("symbolitalic.svg");
           }
           
      The new font Symbol Italic
      The PostScript implementation was done thanks to the help of Pierre Juillot and Benoit Speckel (IPHC Strasbourg)

    New markers

    • Three new marker's styles are now available (32, 33, 34). They complement the markers' list making sure each marker has a solid and an hollow version.
      New markers

    TLatex

    • The #int and #sum symbols had wrong limits placement if the character just before started with "#". There was an atempt to fix this problem in the previous release but it produced very bad side effects therefore the fix was reverted. This new fix does not have this sidecw effect. It causes, in the case of the "^" or "_" preceded by "sum" or "int", to break off and process everything before "sum" or "int" first. After that, when processing the rest, the "^" kicks in first according to the order of precedence, and takes the "int" (only!) as its base.
      Fix done by: Oleksandr Grebenyuk <ogrebenyuk@lbl.gov>.
    • Four new commands: #kern, #lower, #it and #bf.
      The two commands #kern and #lower enable a better control over characters placement. The command #kern[(Float_t)dx]{text} moves the output string horizontally by the fraction dx of its length. Similarly, #lower[(Float_t)dy]{text} shifts the text up or down by the fraction dy of its height.
      Text can be turned italic or boldface using the commands #it and #bf.
      Example:
           {
              gStyle->SetTextFont(132);
              (new TLatex(0.01, 0.9, "Positive k#kern[0.3]{e}#kern[0.3]{r}#kern[0.3]{n}#kern[0.3]{i}#kern[0.3]{n}#kern[0.3]{g} with #^{}kern[0.3]"))->Draw();
              (new TLatex(0.01, 0.7, "Negative k#kern[-0.3]{e}#kern[-0.3]{r}#kern[-0.3]{n}#kern[-0.3]{i}#kern[-0.3]{n}#kern[-0.3]{g} with #^{}kern[-0.3]"))->Draw();
              (new TLatex(0.01, 0.5, "Vertical a#lower[0.2]{d}#lower[0.4]{j}#lower[0.1]{u}#lower[-0.1]{s}#lower[-0.3]{t}#lower[-0.4]{m}#lower[-0.2]{e}#lower[0.1]{n}t with #^{}lower[-0.4...+0.4]"))->Draw();
              (new TLatex(0.01, 0.3, "Font styles: #^{}bf{#bf{bold}}, #^{}it{#it{italic}}, #^{}bf{#^{}it{#bf{#it{bold italic}}}}, #^{}bf{#^{}bf{#bf{#bf{unbold}}}}"))->Draw();
              (new TLatex(0.01, 0.1, "Font styles: abc#alpha#beta#gamma, #^{}it{#it{abc#alpha#beta#gamma}}, #^{}it{#^{}it{#it{#it{abc#alpha#beta#gamma}}}}"))->Draw();
           }
      New commands
      Done by: Oleksandr Grebenyuk <ogrebenyuk@lbl.gov>.
    • Two new characters: #forall and #exists.

    TText

    • New method GetTextAdvance to return the text advance for string text taking the kerning into account or not.

    TGaxis

    • In case of horizontal axis with the font size in pixel (font precision = 3) the labels were not visible.
    • Alpha numeric labels are not scaled anymore in case of text precision 3 (size in pixels). They are in the other precisions.
    • Fix a precision issue on Mac. With the following lines the last label (10^3) did not show:
           t1 = new TH1F("test","test", 100,1,1000);
           t1.Draw();
           gPad->SetLogx(1);
           

    TPaveStats

    • The stats painting assumed that the stats position was always defined with Y2>Y1 and X2>X1. This is true when the stats is created automatically but might not true if the stats position is given by user. This is now protected. The stats are correctly drawn whatever the orders of X and Y coordinates are.
    • Saving canvas as a .C macro discarded white title and stat box background. Same thing with TPaveText.

    TCutG

    • IsInside(x,y) is now inherited from TGraph.

    TCanvas and TPad

    • In case of Canvas.MoveOpaque = true in $ROOTSYS/etc/system.rootrc the rubberband was not visible during the zooming along axis.
    • TPad::SaveAs now takes care of the extensions .pdf], .pdf[, .pad( and .pdf) to avoid the PS and PDF mixing when a multiple pages PDF files is generated. To work around this problem it was enough to specify the option "pdf" in SaveAs.
    • c->BuildLegend() created the legend in the current pad, not in c (as it should).
    • A square TCanvas saved in batch mode in a ROOT file was not square anymore when displayed in interactive mode.


    3D Graphics Primitives

    TPolyMarker3D

    • TPolyMarker3D::PaintH3 entered an infinite loop in case of huge bin content

    OpenGL

    Major changes

    • GL in Pad: It is now possible to save a PadGL into a binary image file (gif, png, jpg etc...).
    • Improve behaviour of TGLEventHandler and make it consistent:
      1. Process only one mouse button (the first pressed) at any time.
      2. All selections take effect on button release.
      3. Precsion modifiers Shift and Control can thus be pressed at any time for controlling rate of rotation, translation or zooming.
    • Add support for multiple secondary-selection and partial highlightning of secondary-selectable sub-items. This requires new signals to be emitted from TGLViewer:
         virtual void MouseOver  (TObject *obj, UInt_t state); // *SIGNAL*
         virtual void ReMouseOver(TObject *obj, UInt_t state); // *SIGNAL*
         virtual void UnMouseOver(TObject *obj, UInt_t state); // *SIGNAL*
      
      TGLEventHandler emits them when needed. For example see TEveDigitSet and its sub-classes TEveQuadSet and TEveBoxSet.
    • It is now possible to enforce all tesselations of geometry shapes to only use triangles via static function void TGLFaceSet::EnforceTriangles(). This is needed to export TGeo shapes and CSG meshes to external triangle-mesh libraries that can not handle arbitrary polygons.
    • Add support for full-scene anti-aliasing (the actual benefits depend on graphics card / driver). It is controlled via rootrc, e.g.:
         OpenGL.Framebuffer.Multisample: 4
      

    Minor changes

    • Extend configurability of GL event-handler to allow inversion of controls from scene-centric to viewer-centric. The following rootrc variables control the behaviour:
         OpenGL.EventHandler.ViewerCentricControls:  1
         OpenGL.EventHandler.ArrowKeyFactor:        -1.0
         OpenGL.EventHandler.MouseDragFactor:       -1.0
         OpenGL.EventHandler.MouseWheelFactor:      -1.0
      
    • Add camera auto-rotation support. Controls are available from the "Extras" tab of TGLViewer GUI editor. Implemented in class TGLAutoRotator, can be sub-classed and attached to a viewer via TGLViewer::SetAutoRotator() method.
    • Added new overlay element class TGLCameraGuide that shows the orientation of major axes. To use, call this on a TGLViewer object:
         gl_viewer->AddOverlayElement(new TGLCameraGuide(0.9, 0.1, 0.08));
      
    • Fix an issue with GL-clip object not being properly updated after a scene update.
    • Hide / show menu-bar with a time-out (default 400ms). This can be adjusted by calling static method:
        TGLSAViewer::SetMenuHidingTimeout(200);
      To disable menu hiding for Eve viewers, where it is enabled by default, set the following rootrc variable:
        Eve.Viewer.HideMenus: off

    EVE

    Major changes

    • Implement central infractructure to allow eve-elements to support internal multiple selection and highlightning of their sub-parts.
      Use this in TEveDigitSet and its sub-classes TEveQuadSet and TEveBoxSet.
      • TEveSecondarySelectable: New secondary base-class for elements supporting internal multiple selection / highlight.
      • TEveViewer - Add functions to handle additional mouse-over signals from TGLViewer.
      • TEveElement - Add 3 new functions:
            virtual TString  GetHighlightTooltip();
            virtual void     UnSelected();
            virtual void     UnHighlighted();
        
      • TEveDigitSet, TEveQuadSet, TEveBoxSet
        • Sub-class TEveDigitSet from TEveSecondarySelectable.
        • Implement functions needed for internal selection.
        • Add common base-class TEveDigitSetGL for quad and box-set GL rendering.
        • Move anti-flickering controls from TEveQuadSet to TEveDigitSet and implement it also in TEveBoxSetGL.
      • TEveChunkManager: Add support for restricted iteration. TEveChunkManager::iterator accepts set<Int_t> for that purpose.
    • TEveElement: Extensions for configurable selection / highlight / color / transparency propagation between compounds and elements. The following options can be activated:
      • ImplySelectAllChildren() - to highlight / imply-select all children of an compound;
      • TakeAnyParentAsMaster() - to upwards propagate mouse-selection to any compound parent;
      • ApplyMainColorToAllChildren() / ApplyMainColorToMatchingChildren() to request color propagation to all / matching children of a compound;
      • ApplyMainTransparencyToAllChildren() / ApplyMainTransparencyToMatchingChildren() to request transparency propagation to all / matching children of a compound.
      These flags are stored as bit pattern of CompoundColorSelectionBits enum.
    • TEveElement: propagate transparency to projected replicas. As this is implemented in the base-class, it works for all projectable classes.
    • TEveVector, TEveVector4 and TEveVector2 are now typedefs to float specialization of corresponding templates. Double versions use 'D' as postfix, 'F' postfix is another alias for float versions, e.g.:
          typedef TEveVectorT<Float_t>  TEveVector;
          typedef TEveVectorT<Float_t>  TEveVectorF;
          typedef TEveVectorT<Double_t> TEveVectorD;
      
    • All projectable classes now take into account their transformation matrix. The projected versions are still stored in global coordinates.
    • TEveShape -- a new abstract base-class for 2D/3D shapes that require fill / outline color, line-width and various flags controlling the area / outline drawing.
    • TEveGeoShape and projected classes: subclass from TEveShape. Add support for TGeoCompositeShapes. In 2D projected class (TEvePolygonSetProjected) improve detection of duplicate polygons and add support for detection of minimal-outline (triggered via Bool_t TEveShape::fMiniOutline).
    • TEveBox: New class to draw a simple cuboid with minimal memory usage. It is projectable.
    • TEveBoxSet: for box-type kBT_FreeBox assure proper face orientation at registration time and calculate normals when rendering.
    • TEveJetCone is now projectable.
    • Several performance improvements when dealing with large collections of EVE objects. Profiled with simulated heavy-ion data. In particular, for destruction of self-contained sub-hierarchies of objects one can use TEveElement::Annihilate() and TEveElement::AnnihilateElements(). See class docs for constraints.

    Minor changes

    • Add support for projecting a new child (all children) of an element after the element and its old children have already been projected. This is provided by the following virtual functions in TEveElement:
        void ProjectChild(TEveElement* el, Bool_t sameDepth=kTRUE);
        void ProjectAllChildren(Bool_t same_depth=kTRUE);
      
    • Several improvements in drawing of TEveCalo axes and labels.
    • TEveTrackPropagator. Fix some issues with Runge-Kutta track propagator. Move in controls specifying how to plot tracks that get split in RhoZ projection.
    • Fix rendering of TEveJetCone: normals at apex were not changing as they should.
    • Support single-color for TEveDigitSet (call TEveDigitSet::UseSingleColor()).
    • Always add children of an element to the GUI list-tree. There was a problem when elements having children were added to the list-tree, the children were not added.
    • TEveLine has its own icon now. The icon for TEvePointSet was used before and this caused confusion.


    Misc



    Tutorials

    • New tutorial $ROOTSYS/tutorials/graphics/mass_spectrum.C. It produces the following output:
      Mass spectrum
    • New tutorial $ROOTSYS/math/goftest.C showing the example usage of the new ROOT::Math::GoFTest class.
    • New tutorial $ROOTSYS/math/multiDimSampling.C showing the example usage of the new ROOT::Math::DistSampler interface for random generation from arbitrary functions using Unuran or Foam.
    • New tutorial $ROOTSYS/math/kdTreeBinning.C showing the example usage of the new TKDTreeBinning class.
    • New tutorial $ROOTSYS/fit/NumericalMinimization.C showing a minimization example (Rosenbrock function) using the ROOT::Math::Minimizer interface.
    • New tutorial $ROOTSYS/fit/exampleFit3D.C showing a simple fit example of 3D points with a 3D function.
    • New tutorial $ROOTSYS/fit/TSVDUnfoldExample.C showing an example of the new TSVDUnfold class.

    • New Roostats tutorials:
      • New Demos that take name for file, workspace, modelconfig, and data, then use the corresponding calculator tool. If the file is not specified it will read an file produced from running the HistFactory tutorial example.
        • StandardProfileLikelihoodDemo.C:
        • StandardFeldmanCousinsDemo.C:
        • StandardBayesianMCMCDemo.C:
        • StandardBayesianNumericalDemo.C:
        • StandardProfileInspectorDemo.C:
      • Demonstrate some new PDFs
        • TestNonCentral.C: demonstrates non central chi-square
        • JeffreysPriorDemo.C: demonstrates Jeffreys Prior
      • Instructional Examples
        • IntervalExamples.C: Standard Gaussian with known answer using 4 techniques
        • FourBinInstructional.C: Example of a standard data-driven approach for estimating backgrounds. A lot of discussion.
        • HybridInstructional.C: Example of protoype on/off problem with a data-driven background estimate. A lot of discussion
        • HybridStandardForm.C: Variant on above in 'standard form'
        • MultivariateGaussianTest.C: A validation example with an N-D multivariate Gaussian
      • Renamed the rs201_hybridcalculator.C to HybridOriginalDemo.C
      • Removed some obsolete roostats tutorials (all the rs500 types)



    ROOT page - Class index - Top of the page - Valid XHTML 1.0 Transitional