23 #pragma warning(disable : 4267)
24 #include <Math/GSLNLSMinimizer.h>
27 #pragma GCC diagnostic push
28 #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
29 #include <Math/GSLNLSMinimizer.h>
30 #pragma GCC diagnostic pop
36 std::map<int, std::string> covmatrixStatusDescription()
38 std::map<int, std::string> result;
39 result[0] =
"Covariance matrix was not computed";
40 result[1] =
"Covariance matrix approximate because minimum is not valid";
41 result[3] =
"Covariance matrix OK";
47 GSLLevenbergMarquardtMinimizer::GSLLevenbergMarquardtMinimizer()
49 m_gsl_minimizer(new ROOT::Math::GSLNLSMinimizer(2))
51 addOption(
"Tolerance", 0.01,
"Tolerance on the function value at the minimum");
52 addOption(
"PrintLevel", 0,
"Minimizer internal print level");
53 addOption(
"MaxIterations", 0,
"Maximum number of iterations");
56 GSLLevenbergMarquardtMinimizer::~GSLLevenbergMarquardtMinimizer() =
default;
60 setOptionValue(
"Tolerance", value);
63 double GSLLevenbergMarquardtMinimizer::tolerance()
const
65 return optionValue<double>(
"Tolerance");
70 setOptionValue(
"PrintLevel", value);
73 int GSLLevenbergMarquardtMinimizer::printLevel()
const
75 return optionValue<int>(
"PrintLevel");
80 setOptionValue(
"MaxIterations", value);
83 int GSLLevenbergMarquardtMinimizer::maxIterations()
const
85 return optionValue<int>(
"MaxIterations");
90 return MinimizerUtils::gslErrorDescription(rootMinimizer()->Status());
97 result[
"CovMatrixStatus"] = covmatrixStatusDescription()[rootMinimizer()->CovMatrixStatus()];
98 result[
"functionCalls"] = std::to_string(rootMinimizer()->NCalls());
102 void GSLLevenbergMarquardtMinimizer::propagateOptions()
104 m_gsl_minimizer->SetTolerance(tolerance());
105 m_gsl_minimizer->SetPrintLevel(printLevel());
106 m_gsl_minimizer->SetMaxIterations(
static_cast<unsigned int>(maxIterations()));
109 const RootMinimizerAdapter::root_minimizer_t* GSLLevenbergMarquardtMinimizer::rootMinimizer()
const
111 return m_gsl_minimizer.get();
114 void GSLLevenbergMarquardtMinimizer::setParameter(
unsigned int index,
const Fit::Parameter& par)
116 auto limits = par.limits();
117 if (!limits.isLimitless() && !limits.isFixed())
118 throw std::runtime_error(
"GSLLMA minimizer can't handle limited parameters."
119 "Please make them free");
120 RootMinimizerAdapter::setParameter(index, par);
Declares class GSLLevenbergMarquardtMinimizer.
Declares class GSLMultiMinimizer.
Declares namespace MinimizerUtils.
Defines a few helper functions.
A fittable parameter with value, error, step, and limits.
void setMaxIterations(int value)
Sets maximum number of iterations.
void setTolerance(double value)
Sets tolerance on the function value at the minimum.
std::string statusToString() const override
Returns string representation of current minimizer status.
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.
Info about a minimizer, including list of defined minimization algorithms.
Pure virtual interface 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.
std::string scientific(const T value, int n=10)
Returns scientific string representing given value of any numeric type.