BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
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), m_number_of_calls(0), m_number_of_gradient_calls(0), m_duration(0.0)
60 {
61 }
62 
64 {
66 }
67 
69 {
70  return m_parameters;
71 }
72 
73 void MinimizerResult::setMinValue(double value)
74 {
75  m_min_value = value;
76 }
77 
78 //! Minimum value of objective function found by minimizer.
79 
81 {
82  return m_min_value;
83 }
84 
85 //! Returns multi-line string representing minimization results.
86 
87 std::string MinimizerResult::toString() const
88 {
89  std::ostringstream result;
90  if (m_minimizer_report.empty()) {
91  result << "Don't know anything about external minimizer. "
92  << "Use minimizer API to get result of minimization.\n";
93 
94  } else {
96  result << "Run time (sec) : " << m_duration << "\n";
97  result << "Objective function calls : " << m_number_of_calls << "\n";
98  result << "Gradient calls : " << m_number_of_gradient_calls << "\n";
99  result << m_minimizer_report;
100  result << reportParameters(m_parameters);
101  }
102 
103  return result.str();
104 }
105 
106 void MinimizerResult::setReport(const std::string& value)
107 {
108  m_minimizer_report = value;
109 }
110 
112 {
113  m_duration = value;
114 }
115 
117 {
118  m_number_of_calls = value;
119 }
120 
122 {
124 }
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.