Math Libraries
MathCore
- TKDTree: new class for representing a kd-tree (a k-dimensional tree). See the TKDTree class documentation for a detailed description of the method.
- TMath: change slightly the signature of TMath::Sort(n,x,w). Now the type of the index array (w) and the type of the size (n) have to be the same. Before the type of (n) was not templated and was a Long64_t, therefore, due to automatic compiler conversion one could instantiate for example a TMath::Sort by having as unsigned int for the size for the array and int for the array. Now this is not possible anymore and one must pass the same type. This is now consistent with other similar TMath functions. Now in the CINT dictionary contains also the instantiations for both cases of Long64_t and Int_t for the size (and index array) types.
-
Fixed a bug in the ROOT::Math::landau_pdf function. Now it evaluates to the correct normalized distribution when the scale factor is different than 1.
- TVirtualFitter: move TVirtualFitter from base to mathcore. Setting the minimizer parameters is done via the new class ROOT::Math::MinimizerOptions. Fixed also a bug in the TVirtualFitter destructor, which was preventing the deletion of the static instance and causing in same cases memory leaks.
- ROOT::Math::MinimizerOptions: new class keeping the minimizer control parameters, minimizer name and algorithms. Static values of the parameter exist and can be set and retrieved via corresponding static methods.
- Fitting Classes: improve in general all classes in view of using them in the histogram and graph fitting routines. Few bugs have been as well fixed (see the cvs log for details). The fitter class, ROOT::Fit::Fitter is used now to implement the fit functionality of the Hist library (i.e. TH1::Fit, TGraph::Fit/
The Fitter class has been changed to retain a pointer to the Minimizer and Objective function of the last fit. The objective function depends on a reference to the data and the model function, therefore the objective function pointer is valid as far the data and the model function are mantained alive.
The library provides the implmentation of standard objective function like the Chi2 function, the Poisson likelihood function (for binned likelihood fits) and the loh likelihood function (for unbinned fits). These standard objective functions can be created with or without gradient functionality. In the first case the minimization will be performed using the gradient provided by the function. These functions can also be used in specialized fitting methods like Fumili or the GSL non-linear least square.
MathCore
- Fixed a bug in setting the VEGAS integration mode in the GSLMCIntegrator class.
Fumili
- Add implementation of Minimizer interface using TFumili.
Minuit
-
In TMinuitMinimizer: do not delete the contained TMinuit reference, but maintain it alive, and accessible outside as gMinuit. It can then be used after fitting, for example for drawing contour plots. Add also support for Scan and Contour plots.
-
TLinearMinimizer: add support for robust fitting
Minuit2
- Add support to perform parallel minimization using a thread for each gradient calculation with openMP. In the ROOT environment the Minuit2 library can be build using openMP ( -fopenmp compilation flag for gcc) if the environment variables USE_PARALLEL_MINUIT2 and USE_OPENMP are set.
In the Minuit2 standalone built libraries (using autoconf) support for openMP is automatically enabled, whenever the compiler supports it (for example for gcc version >= 4.2). Some small changes have been applied in Minuit2 to make it thread safe. For example, when transforming from internal to external values, the parameter values are not cached anymore in MnUserTransformation class.
- DavidonErrorUpdator: add an additional check to avoid a division by zero.
- In Minuit2Minimizer fill the status information according to the minimizer result
- Add Scan and Contour methods in the Minuit2Minimizer class
GenVector
- Change the way the exception are thrown in the package (class GenVector_exception). Now, the GenVector_exception class is created only when the throwing of exception is enabled. This avoids the allocation of an un-needed std::string. This problem was observed in CMS when converting from 4D-vectors based on mass to standard (x,y,z,t) vectors, when the mass is zero. In this case, a numerical error creates artificially small negative masses returned by the (x,y,z,t) vector. Eventually a protection could be added when calculating M2(), to avoid negative values due to numerical rounding.
- Fix a problem in the assignment operator of the ROOT::Math::PxPyPzM4D class. Avoid having nan when converting for example from PxPyPzME4D to PxPyPzM4D when the mass is negative.
- Throw always exception in the non-supported setters (i.e. SetPt on a PxPyPzEVector) methods, which are generated only for the CINT dictionary. These methods flag a compiled-error when running in C++ mode.
SMatrix
- Change implementation of the SMatrix::Invert and SMatrix::Inverse methods. Now the optimized method based on the Cramer rule is used only for matrix up to sizes 2x2. The standard methods based on LU (for ordinary square matrix) or Bunch-Kaufman factorization (for square matrix) are used. The factorization method, although slower for small size matrices, they suffer much less from numerical precision problems.
- New methods SMatrix::Invert and SMatrix::InverseFast are added for using the Cramer rule for up to matrix of sizes 5x5. This method has exactly the same implementation as the Invert and Inverse of the previous ROOT version.
Physics
-
TLorentzVector:Change in the implementation of the function SetPtEtaPhi and SetPtEtaPhiM the algorithm to calculate z from pt and eta. Use now, as in the GenVector package, the expression z = pt * sinh(eta) instead of using the tangent and the arc-tangent. This is is more efficient and avoids a problem found on 64 bit machines when eta=0. by Dariusz Miskowiec.
Unuran
- New version (1.3) from Josef Leydold fixing some warnings on Windows Visual Studio 9.