last update:$Date: 2006/01/06 17:13:50 $

MINUIT2 Release Notes (ROOT version)

Minuit2-5.34.14

2014/01/24: Minuit2 as released in ROOT 5.34/14

  • Several fixes and improvements have been put between this verion and the previous stand-alone one (5.28). Main new features is now the support for using the ROOT::Math::Minimizer interface via the class ROOT::Math::Minuit2Minimizer also in the standalone version. A new test has been added (test/MnSim/demoMinimizer.cxx) to show this new functionality
  • Other major improvements is in the control of the error messages. One can now use the class MnPrint::SetLevel(int value) to control the output level. The same can be achieved by calling ROOT::Math::Minuit2Minimizer::SetPrintLevel.
  • For the detail of the other fixes, look at the history log of the changes at the git Web.

Minuit2-5.28.00

2010/12/15: Minuit2 released in ROOT 5.28/00

  • Fix a problem in the number of function calls when running MnHesse after minimizing. Now the number is incremented instead of being reset.

Minuit2-5.27.02

2008/12/18: Minuit2 released in ROOT 5.27/02

  • Fix the returned error from the Minimizer class for fixed and constant parameters. Now is set explicity to zero.
  • Fix a problem in re-defining fixed parameters as variable ones. Before it was not possible to release them.

In version 5.26.00 (released with ROOT 5.26/00):

  • Fix a bug in MnFunctionCross.
  • Add a protection against very small step sizes which can cause nan values in InitialGradientCalculator.
  • Implement a new function in the MnUserTransformation class, FindIndex(name), which returns -1 when the parameter name does not exist.
  • Implement new methods in Minuit2Minimizer as requested by the Minimizer interface: SetPrecision(double eps) to change the precision value used internally in Minuit2 (in MnPrecision), VariableName(index) to return the name of a variable (parameter) given an index, and VariableIndex(name) to return the index of a variable given a name.
  • Set a status code in Minuit2Minimizer according to the following convention:
    status = minimizeStatus + 10 * minosStatus + 100 * hesseStatus.
    See the Minuit2Minimizer reference documentation for the possible values of minimizeStatus , minosStatus and hesseStatus.
  • In MnHesse. when the inversion of the hessian matrix failed, return MnInvertFailed instead of MnHesseFailed.

Minuit2-5.24.00

2008/12/18: Minuit2 released in ROOT 5.24/00

  • Apply some fixes in MnHesse and MnPosDef classes to check correctly variables to not be zero. (use same checks as in F77Minuit)
  • Fix a bug introduced in DavidonErrorCalculator when checking for delgam. Negative values are allowed. This fixes a test problem given privately by A. Suter.
  • Uses also a tighter condition on edm when exiting the iterations (factor of 5 smaller). This is more consistent with conditions used by F77Minuit.
  • Fix a bug in MnCross in the standalone version of Minuit (when WARNINGMSG was not defined).
  • Fix a bug in the sign of the derivative for sine transformation which are used with double bound parameters. The bug could affect the minimization of function with user provided gradient and bound parameters and bound parameters. It could also affected Fumili2. Furthermore, a wrong sign for the correlation matrix could also have been obtained in some cases with bound parameters.
  • Use a tolerance of 0.01 instead of 0.05 in MnContours. The value of 0.01 is the same used in Minos. This is sufficient to get good quality contours.
  • Improve also the debug in MnContour. Add printing of points as info messages
  • Remove some un-necessary assert() when defining the minimization parameters.
  • Fix a bug in MnHesse to return the information if the matrix was made pos def. In addition change in MinimumError the codition that when the matrix was made pos def the status of the error is still considered valid and not invalid as before. This makes also the function minimum valid when a matrix was decleared pos def.
  • Improvements in the Minuit2Minimizer class:
    • implement the new methods defined in the base class: Hess() using MnHess and CovMatrixStatus();
    • improve the switch-off of the info message according to the print level;
    • define the variables passed with zero step-size as constant (as is done in F77 Minuit)
  • Fix a problem in building the parallel version of Minuit2. The parallel version is built if the environment variables USE_PARALLEL_MINUIT2 and USE_OPENMP are set before compiling Minuit2 on a compiler which supports openMP (for example gcc version >= 4.2)
  • Add, thanks to Alfio Lazzaro, support for running Minuit2 using multi-process by using MPI. A new class MPIProcess deals with starting and terminating the MPI process. Each process calculates independently the derivatives for a given set of parameters. A Minuit2 library with MPI support can be built by defining before compilation the environment variables USE_PARALLEL_MINUIT2 and USE_MPI.

Minuit2-5.22.00

2008/12/18: Minuit2 released in ROOT 5.22/00

  • Add Scan and Contour methods in the Minuit2Minimizer class
  • Add new test, MnSim/ParallelTest.cxx, which consists in a multi-dimensional gaussian fit, which can be used to test the parallelization improvements in multi-threads.

Minuit2-5.21.06

2008/11/26: Minuit2 released in ROOT 5.21/06

  • Add support to perform parallel minimization using a thread for each gradient calculation with openMP.
    • 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).
    • 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.
    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
  • Apply fixes in the test programs for compilation under the latest gccversion (4.3)

More detailed description of the current Minuit2 release can be found at this location.

Minuit2-5.20.00

2008/06/25: Minuit2 released in ROOT 5.20/00

Various fixes have been applied to different problems discovered mainly by a test program from Alfio Lazzaro. In detail:
  • Fix a bug in MnMinos which was setting wrong initial values when the parameters were limited. This was resulting in a much larger number of function calls used inside MnMinos.
  • Improve MnHesse by returning in the final state the improved gradient step values used in HessianGradientCalculator. With this change same results are obtained from using Hesse in Minuit2 or TMinuit. In addition, the interface of MnHesse (MnHesse::operator() ) has been improved to use it from the FunctionMinimum object (similar to MnMinos) in order to be called after the minimization (Migrad). The API with a MnUserParameterState should not be used after minimization, because in that case the latest state information resulting from the minimum (gradient values and step sizes) is lost.
  • Add support in MnMigrad and MnMinimize for user provided analytical gradient of the FCN function. One needs to pass an instance of a function implementing the ROOT::Minuit2::FcnGradientBase interface.
  • Use now std::string for storing parameter names. This removes the un-necessary limitation on the length of parameter name (10 characters) existing before. The method Name() of MinuitParameter (and of MnUserParameterState and MnUserParameters) still returns a const char * (for backward compatibility). A new method, GetName() has been added to return a std::string
  • The Minuit2Minimizer class has been improved by having an option to always run Hesse if it was not done before during the minimization. Method to retrieve the correlation coefficients have been also added.

More detailed description of the current Minuit2 release can be found at this location.


Minuit2-5.18.00

2008/01/17: Minuit2 is released in ROOT 5.18/00

  • fix the maximum edm value allowed for convergence of the minimization to be 0.001 * tolerance. This is the same as in Fortran version and it is the value documented in the User Guide
  • fix a similar tolerance problem in Minos and MnFuncitonCross. Use same values now as in Fortran version
  • add a new method to FunctionMinimum to set the error definition, to allow Minos to run with a different error definition than Migrad.
  • add a new class ROOT::Minuit2::Minuit2Minimizer implementing the ROOT::Math::Minimizer interface. A test program minuit2/test/testNewMinimizer.cxx shows how to use the new interface.


Minuit2-5.16.00

2007/06/29: Minuit2 is released in ROOT 5.16/00

The following fixes have been applied :

  • use same convention in counting the iteration in MnLineSearch as in the Fortran version.
  • when doing a negative line search at the beginning, use always a step size equal to the step used in the gradient calculation.
  • in Fumili the Hesse is now always calculated at the end of the iterations to be sure to get a correct error matrix.
  • add the possibility to modify dynamically the error scale definition by adding the FCNBase::SetErrorDef( up) function.
  • add support for the "SET Err" command in TFitterMinuit
  • multiply the likelihood function used by TFitterMinuit and TFitterFumili by 2 to be consistent with the functions defined in TFitter.
  • remove some warning messages and improve the debugging by using the ROOT Error system for the library built in ROOT. In the case of the stand-alone Minuit2 builds use now by default std::cerr.

More detailed description of the current Minuit2 release can be found at this location.


Minuit2-5.14.00

2006/12/25: Minuit2 is released in ROOT 5.14/00

No major changes for this release, only a couple of bug fixes.

For improving performances in case of minimization of very simple functions (like those used in the test stressFit.cxx, Minuit2 can be compiled with the option -DMN_USE_STACK_ALLOC, by un commenting the corresponding line in the minuit2/Module.mk. In this case an optimized allocator for the Minuit2 objects is used and providing significant gain in performance. The drawback is that Minuit2 will not be anymore thread-safe.

Online documentation of the current released version of Minuit2 can be found at this location.


Minuit2-5.12.00

2006/07/11: Minuit2 is released in ROOT 5.12

Removed some warning messages and improved the error reporting in the TFitterMinuit class. Fixed a bug in the fitter when fitting in an defined range specified by the function.
A small change in Fumili to break the iterations when they do not improve sufficiently the convergence towards the minimum point.


Minuit2-5.10.00

2006/03/02: Minuit2 is released in ROOT 5.10

No major changes for this release, only some minor bug fixes. More information on Minuit2, the new C++ version of MINUIT, can be found on the MINUIT Web Site and reference documentation at this location.


Minuit2-5.08.00

2005/12/15: First version of the Minuit2 package (new API) in ROOT version 5.08

The Minuit2 package contains the new object oriented re-implementation of MINUIT in C++, developed by M. Winkler and F. James in the context of the SEAL project. These new version contains basically all the functionality present in the old Fortran and TMinuit version. Furthermore, it provides the FUMILI algorithm, for least square and log likelihood minimizations. More information on the new C++ can be found on the MINUIT Web Site.

Minuit2 contains the C++ MINUIT package imported in ROOT from the SEAL project. The API has been changed to follow the ROOT coding convention (function names starting with capital letters) and the classes have been moved inside the namespace ROOT::Minuit2. In addition, the ROOT distribution contains classes needed to integrate Minuit2 in the ROOT framework. Two implementation of the TVirtualFitter interface exist: TFitterMinuit and TFitterFumili, which define two different fitter plug-in's: Minuit2 and Fumili2. Some helper classes are present for implementing the objective function interface (FCNBase) required by MINUIT minimization.

Minuit2 can be used through the TVirtualFitter interface or directly using the C++ interface of the ROOT::Minuit2 classes.
For example for fitting an histogram via the TVirtualFitter, one needs to select first the Minuit2 fitter plugin by:

TVirtualFitter::SetDefaultFitter("Minuit2");  // or Fumili2 for the FUMILI algorithm
h1->Fit()
 
or for minimization problem, passing the FCN function to minimize, one can do:
TVirtualFitter::SetDefaultFitter(fitter);
TVirtualFitter * minuit2 = TVirtualFitter::Fitter(0,2);
 

and then set the parameters, the FCN and minimize using the TVirtualFitter methods: SetParameter, SetFCN and ExecuteCommand like in the old minuit example tutorial. Examples on how to use the Minuit2 and Fumili2 plug-in's are provided in the tutorials minuit2FitBench.C, minuit2FitBench2D.C and minuit2GausFit.C .

Examples on how to use directly Minuit2, without the ROOT interface are provided in the tests present in the directories minuit2/tests/MnSim and minuit2/test/MnTutorial. More information on the C++ interface can be also found on the new MINUIT user guide or looking at the reference documentation.

Minuit2, without the ROOT TVirtualFitter interface classes, can be built and used as an independent package. See the file minuit2/build/INSTALL.


up