From 332a985b26bbb6dd741979aa4107c546ef3a992a Mon Sep 17 00:00:00 2001 From: Gennady Pospelov <g.pospelov@fz-juelich.de> Date: Mon, 8 Aug 2016 17:13:49 +0200 Subject: [PATCH] On the way to refactoring Minuit2 minimizer options. --- Fit/Minimizer/Minuit2Minimizer.cpp | 38 +++++++++++++++++++--- Fit/Minimizer/Minuit2Minimizer.h | 29 +++++++++++++++++ Tests/UnitTests/Fit/MinimizerOptionTest.h | 2 -- Tests/UnitTests/Fit/MinimizerOptionsTest.h | 12 ------- 4 files changed, 63 insertions(+), 18 deletions(-) diff --git a/Fit/Minimizer/Minuit2Minimizer.cpp b/Fit/Minimizer/Minuit2Minimizer.cpp index 878ac294492..ef3e12ea7ac 100644 --- a/Fit/Minimizer/Minuit2Minimizer.cpp +++ b/Fit/Minimizer/Minuit2Minimizer.cpp @@ -16,15 +16,45 @@ #include "Minuit2Minimizer.h" #include "AlgorithmNames.h" +namespace { +const std::string O_STRATEGY = "Strategy"; +const std::string O_ERRORDEF = "ErrorDef"; +const std::string O_TOLERANCE = "Tolerance"; +const std::string O_PRECISION = "Precision"; +const std::string O_PRINTLEVEL = "PrintLevel"; +} + Minuit2Minimizer::Minuit2Minimizer() : BasicMinimizer(MinimizerNames::Minuit, AlgorithmNames::Migrad) { - addOption(std::string("Strategy"), 1); - addOption(std::string("ErrorDef"), 1); + addOption(O_STRATEGY, 1, + "Minimization strategy (0-low, 1-medium, 2-high quality)"); + addOption(O_ERRORDEF, 1.0, + "Error definition factor for parameter error calculation."); + addOption(O_TOLERANCE, 0.01, + "Tolerance on the function value at the minimum."); + addOption(O_PRECISION, -1.0, + "Relative floating point arithmetic precision."); + +} - MinimizerOption::variant_t v; - v.get<int>(); +void Minuit2Minimizer::setStrategy(int value) +{ + setOptionValue(O_STRATEGY, value); +} +void Minuit2Minimizer::setErrorDefinition(double value) +{ + setOptionValue(O_ERRORDEF, value); +} +void Minuit2Minimizer::setTolerance(double value) +{ + setOptionValue(O_TOLERANCE, value); +} +void Minuit2Minimizer::setPrecision(double value) +{ + setOptionValue(O_PRECISION, value); } + diff --git a/Fit/Minimizer/Minuit2Minimizer.h b/Fit/Minimizer/Minuit2Minimizer.h index 98dac0ba8cd..1c5178445fe 100644 --- a/Fit/Minimizer/Minuit2Minimizer.h +++ b/Fit/Minimizer/Minuit2Minimizer.h @@ -21,12 +21,41 @@ //! @class Minuit2Minimizer //! @ingroup fitting_internal //! @brief The Minuit2Minimizer class is a wrapper for ROOT Minuit2 minimizer +//! See Minuit2 user manual https://root.cern.ch/root/htmldoc/guides/minuit2/Minuit2.pdf. class BA_CORE_API_ Minuit2Minimizer : public BasicMinimizer { public: Minuit2Minimizer(); + //! Sets minimization strategy (0-low, 1-medium, 2-high minimization quality). + //! At low quality number of function calls will be economized. Default value is 1. + void setStrategy(int value); + + //! Sets error definition factor for parameter error calculation. + //! If objective function (OF) is the usual chisquare function and if the user wants the usual + //! one-standard-deviation errors, then the error definition should be 1.0. If OF is a + //! negative-log-likelihood function, then 0.5. If OF is a chisquare, but the user wants + //! two-standard-deviation errors, 4.0. + //! Default value is 1.0 + void setErrorDefinition(double value); + + //!< Sets tolerance on the function value at the minimum. + //!< Minimization will stop when the estimated vertical distance to the minimum (EDM) is less + //! than 0.001*tolerance*ErrorDef. Here ErrorDef=1 for chi squared fit and ErrorDef=0.5 + //! for negative log likelihood fit. + //! Default value is 0.01 + void setTolerance(double value); + + //!< Sets relative floating point arithmetic precision. + //!< Should be adjusted when the user knows that objectiove function value is not + //!< calculated to the nominal machine accuracy. Typical values are between 10^-5 and 10^-14. + //! Default value is -1.0 (minimizer specific will be used). + void setPrecision(double value); + + //! Sets minimizer internal print level. + //! Default value is 0 (silent). + void setPrintLevel(int value); private: diff --git a/Tests/UnitTests/Fit/MinimizerOptionTest.h b/Tests/UnitTests/Fit/MinimizerOptionTest.h index e7056f211c7..90333dfd609 100644 --- a/Tests/UnitTests/Fit/MinimizerOptionTest.h +++ b/Tests/UnitTests/Fit/MinimizerOptionTest.h @@ -85,6 +85,4 @@ TEST_F(MinimizerOptionTest, Assignment) EXPECT_EQ(double_value, copy.getDefault<double>()); } - - #endif diff --git a/Tests/UnitTests/Fit/MinimizerOptionsTest.h b/Tests/UnitTests/Fit/MinimizerOptionsTest.h index 2292a91bea6..967a43a8a01 100644 --- a/Tests/UnitTests/Fit/MinimizerOptionsTest.h +++ b/Tests/UnitTests/Fit/MinimizerOptionsTest.h @@ -54,15 +54,3 @@ TEST_F(MinimizerOptionsTest, SetValues) EXPECT_EQ(opt2.getRealValue("some_double"), 9.9); EXPECT_EQ(opt2.getNamedValue("some_string"), "xxx"); } - - -TEST_F(MinimizerOptionsTest, Minuit2Minimizer) -{ - EXPECT_EQ(1,1); - - Minuit2Minimizer *minim = new Minuit2Minimizer(); - std::cout << "XXX" << minim->minimizerName() << " " << minim->algorithmName() << std::endl; - - - -} -- GitLab