BornAgain  1.19.79
Open-source research software to simulate and fit neutron and x-ray reflectometry and grazing-incidence small-angle scattering
MinimizerResult.cpp
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file Fit/Minimizer/MinimizerResult.cpp
6 //! @brief Implements class MinimizerResult.
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 
17 #include <boost/format.hpp>
18 #include <sstream>
19 
20 namespace {
21 
22 std::string reportParameters(const mumufit::Parameters& parameters)
23 {
24  std::ostringstream result;
25 
26  result << mumufit::utils::sectionString("FitParameters");
27 
28  result << "Name StartValue Limits FitValue"
29  << " Error" << std::endl;
30 
31  for (const auto& par : parameters) {
32  result << boost::format("%-26.26s %-8.3e %-28s %-8.3e %8.3e \n") % par.name()
33  % par.startValue() % par.limits().toString() % par.value() % par.error();
34  }
35 
36  mumufit::Parameters::corr_matrix_t matrix = parameters.correlationMatrix();
37  if (!matrix.empty()) {
38  result << mumufit::utils::sectionString("Correlations");
39  for (size_t i = 0; i < matrix.size(); ++i) {
40  result << boost::format("#%-2d ") % i;
41  for (size_t j = 0; j < matrix[i].size(); ++j)
42  result << boost::format("%_7.4f ") % matrix[i][j];
43  result << std::endl;
44  }
45  }
46 
47  return result.str();
48 }
49 
50 } // namespace
51 
52 // ************************************************************************************************
53 // class MinimizerResult
54 // ************************************************************************************************
55 
56 using namespace mumufit;
57 
59  : m_min_value(0.0)
60  , m_number_of_calls(0)
61  , m_number_of_gradient_calls(0)
62  , m_duration(0.0)
63 {
64 }
65 
67 {
69 }
70 
72 {
73  return m_parameters;
74 }
75 
76 void MinimizerResult::setMinValue(double value)
77 {
78  m_min_value = value;
79 }
80 
81 //! Minimum value of objective function found by minimizer.
82 
84 {
85  return m_min_value;
86 }
87 
88 //! Returns multi-line string representing minimization results.
89 
90 std::string MinimizerResult::toString() const
91 {
92  std::ostringstream result;
93  if (m_minimizer_report.empty()) {
94  result << "Don't know anything about external minimizer. "
95  << "Use minimizer API to get result of minimization.\n";
96  } else {
98  result << "Run time (sec) : " << m_duration << "\n";
99  result << "Objective function calls : " << m_number_of_calls << "\n";
100  result << "Gradient calls : " << m_number_of_gradient_calls << "\n";
101  result << m_minimizer_report;
102  result << reportParameters(m_parameters);
103  }
104 
105  return result.str();
106 }
107 
108 void MinimizerResult::setReport(const std::string& value)
109 {
110  m_minimizer_report = value;
111 }
112 
114 {
115  m_duration = value;
116 }
117 
119 {
120  m_number_of_calls = value;
121 }
122 
124 {
126 }
Defines class MinimizerResult.
Declares namespace MinimizerUtils.
double m_duration
Duration of minimization in sec.msec.
void setReport(const std::string &value)
void setMinValue(double value)
void setDuration(double value)
int m_number_of_gradient_calls
Number of calls to calculate gradients.
void setNumberOfGradientCalls(int value)
int m_number_of_calls
Number of objective function calls.
void setNumberOfCalls(int value)
double minValue() const
Minimum value of objective function found by minimizer.
std::string toString() const
Returns multi-line string representing minimization results.
void setParameters(const Parameters &parameters)
Parameters parameters() const
double m_min_value
Found minimum of objective function.
A collection of fit parameters.
Definition: Parameters.h:26
std::vector< std::vector< double > > corr_matrix_t
Definition: Parameters.h:31
std::string sectionString(const std::string &sectionName="", size_t report_width=80)
Returns horizontal line of 80 characters length with section name in it.
The multi-library, multi-algorithm fit wrapper library.