BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
GSLLevenbergMarquardtMinimizer.cpp
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file Fit/Adapter/GSLLevenbergMarquardtMinimizer.cpp
6 //! @brief Implements class GSLLevenbergMarquardtMinimizer.
7 //!
8 //! @homepage http://www.bornagainproject.org
9 //! @license GNU General Public License v3 or higher (see COPYING)
10 //! @copyright Forschungszentrum Jülich GmbH 2018
11 //! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
12 //
13 // ************************************************************************************************
14 
18 #include "Fit/Tools/StringUtils.h"
19 #include <stdexcept>
20 
21 #ifdef _WIN32
22 #pragma warning(push)
23 #pragma warning(disable : 4267)
24 #include <Math/GSLNLSMinimizer.h>
25 #pragma warning(pop)
26 #else
27 #pragma GCC diagnostic push
28 #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
29 #include <Math/GSLNLSMinimizer.h>
30 #pragma GCC diagnostic pop
31 #endif
32 
33 namespace {
34 
35 std::map<int, std::string> covmatrixStatusDescription()
36 {
37  std::map<int, std::string> result;
38  result[0] = "Covariance matrix was not computed";
39  result[1] = "Covariance matrix approximate because minimum is not valid";
40  result[3] = "Covariance matrix OK";
41  return result;
42 }
43 
44 } // namespace
45 
47  : MinimizerAdapter(MinimizerInfo::buildGSLLMAInfo())
48  , m_gsl_minimizer(new ROOT::Math::GSLNLSMinimizer(2))
49 {
50  addOption("Tolerance", 0.01, "Tolerance on the function value at the minimum");
51  addOption("PrintLevel", 0, "Minimizer internal print level");
52  addOption("MaxIterations", 0, "Maximum number of iterations");
53 }
54 
56 
58 {
59  setOptionValue("Tolerance", value);
60 }
61 
63 {
64  return optionValue<double>("Tolerance");
65 }
66 
68 {
69  setOptionValue("PrintLevel", value);
70 }
71 
73 {
74  return optionValue<int>("PrintLevel");
75 }
76 
78 {
79  setOptionValue("MaxIterations", value);
80 }
81 
83 {
84  return optionValue<int>("MaxIterations");
85 }
86 
88 {
90 }
91 
92 std::map<std::string, std::string> GSLLevenbergMarquardtMinimizer::statusMap() const
93 {
94  auto result = MinimizerAdapter::statusMap();
95  result["Edm"] = mumufit::stringUtils::scientific(rootMinimizer()->Edm());
96  result["CovMatrixStatus"] = covmatrixStatusDescription()[rootMinimizer()->CovMatrixStatus()];
97  result["functionCalls"] = std::to_string(rootMinimizer()->NCalls());
98  return result;
99 }
100 
102 {
103  m_gsl_minimizer->SetTolerance(tolerance());
104  m_gsl_minimizer->SetPrintLevel(printLevel());
105  m_gsl_minimizer->SetMaxIterations(static_cast<unsigned int>(maxIterations()));
106 }
107 
109 {
110  return m_gsl_minimizer.get();
111 }
112 
114 {
115  auto limits = par.limits();
116  if (!limits.isLimitless() && !limits.isFixed())
117  throw std::runtime_error("GSLLMA minimizer can't handle limited parameters."
118  "Please make them free");
119  MinimizerAdapter::setParameter(index, par);
120 }
Defines a few helper functions.
Declares class GSLLevenbergMarquardtMinimizer.
Declares class GSLMultiMinimizer.
Declares namespace MinimizerUtils.
void setMaxIterations(int value)
Sets maximum number of iterations.
~GSLLevenbergMarquardtMinimizer() override
void setTolerance(double value)
Sets tolerance on the function value at the minimum.
std::unique_ptr< ROOT::Math::GSLNLSMinimizer > m_gsl_minimizer
std::string statusToString() const override
Returns string representation of current minimizer status.
const root_minimizer_t * rootMinimizer() const override
void setPrintLevel(int value)
Sets minimizer internal print level.
std::map< std::string, std::string > statusMap() const override
Returns map of string representing different minimizer statuses.
void setParameter(unsigned int index, const mumufit::Parameter &par) override
Abstract base class that adapts the CERN ROOT minimizer to our IMinimizer.
virtual std::map< std::string, std::string > statusMap() const
Returns map of string representing different minimizer statuses.
virtual void setParameter(unsigned int index, const mumufit::Parameter &par)
OptionContainer::option_t addOption(const std::string &optionName, T value, const std::string &description="")
ROOT::Math::Minimizer root_minimizer_t
void setOptionValue(const std::string &optionName, T value)
Info about a minimizer, including list of defined minimization algorithms.
Definition: MinimizerInfo.h:48
A fittable parameter with value, error, step, and limits.
Definition: Parameter.h:26
AttLimits limits() const
Definition: Parameter.cpp:54
Various mathematical functions.
Definition: Bessel.h:26
std::string scientific(const T value, int n=10)
Returns scientific string representing given value of any numeric type.
Definition: StringUtils.h:41
std::string gslErrorDescription(int errorCode)