BornAgain  1.18.0
Simulate and fit neutron and x-ray scattering at grazing incidence
MinimizerResultUtils.cpp
Go to the documentation of this file.
1 // ************************************************************************** //
2 //
3 // BornAgain: simulate and fit scattering at grazing incidence
4 //
5 //! @file Fit/RootAdapter/MinimizerResultUtils.cpp
6 //! @brief Implements MinimizerResultUtils namespace.
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 <boost/format.hpp>
19 #include <iomanip>
20 #include <sstream>
21 
22 using namespace Fit;
23 
24 namespace
25 {
26 
27 const int column_width = 18;
28 
29 template <typename T> std::string reportValue(const std::string& name, T value)
30 {
31  std::ostringstream result;
32  result << std::setw(column_width) << std::left << name << ": " << value << std::endl;
33  return result.str();
34 }
35 
36 std::string reportDescription(const RootMinimizerAdapter& minimizer);
37 std::string reportOption(const RootMinimizerAdapter& minimizer);
38 std::string reportStatus(const RootMinimizerAdapter& minimizer);
39 
40 } // namespace
41 
43 {
44  std::ostringstream result;
45 
47  result << reportDescription(minimizer);
48  result << reportOption(minimizer);
49  result << reportStatus(minimizer);
50 
51  return result.str();
52 }
53 
55 {
56  std::ostringstream result;
57 
58  result << MinimizerUtils::sectionString("FitParameters");
59 
60  result << "Name StartValue Limits FitValue"
61  << " Error" << std::endl;
62 
63  for (const auto& par : parameters) {
64  result << boost::format("%-26.26s %-8.3e %-28s %-8.3e %8.3e \n") % par.name()
65  % par.startValue() % par.limits().toString() % par.value() % par.error();
66  }
67 
69  if (!matrix.empty()) {
70  result << MinimizerUtils::sectionString("Correlations");
71  for (size_t i = 0; i < matrix.size(); ++i) {
72  result << boost::format("#%-2d ") % i;
73  for (size_t j = 0; j < matrix[i].size(); ++j)
74  result << boost::format("%_7.4f ") % matrix[i][j];
75  result << std::endl;
76  }
77  }
78 
79  return result.str();
80 }
81 
82 namespace
83 {
84 
85 std::string reportDescription(const RootMinimizerAdapter& minimizer)
86 {
87  std::ostringstream result;
88  result << reportValue("MinimizerType", minimizer.minimizerName());
89  result << reportValue("AlgorithmName", minimizer.algorithmName());
90  return result.str();
91 }
92 
93 std::string reportOption(const RootMinimizerAdapter& minimizer)
94 {
95  if (minimizer.options().empty())
96  return "";
97 
98  std::ostringstream result;
99  result << MinimizerUtils::sectionString("Options");
100  for (auto option : minimizer.options()) {
101  std::ostringstream opt;
102  opt << std::setw(5) << std::left << option->value() << option->description();
103  result << reportValue(option->name(), opt.str());
104  }
105  result << MinimizerUtils::sectionString("OptionString");
106  result << minimizer.options().toOptionString() << std::endl;
107 
108  return result.str();
109 }
110 
111 std::string reportStatus(const RootMinimizerAdapter& minimizer)
112 {
113  std::ostringstream result;
114  result << MinimizerUtils::sectionString("Status");
115 
116  auto status = minimizer.statusMap();
117  for (auto it : status)
118  result << reportValue(it.first, it.second);
119 
120  return result.str();
121 }
122 
123 } // namespace
Declares MinimizerResultUtils namespace.
Declares namespace MinimizerUtils.
Declares class RootMinimizerAdapter.
A collection of fit parameters.
Definition: Parameters.h:28
corr_matrix_t correlationMatrix() const
Definition: Parameters.cpp:117
std::vector< std::vector< double > > corr_matrix_t
Definition: Parameters.h:33
std::string toOptionString() const
Returns string with all options (i.e. "Strategy=1;Tolerance=0.01;")
bool empty() const
Pure virtual interface that adapts the CERN ROOT minimizer to our IMinimizer.
std::string minimizerName() const override final
Returns name of the minimizer.
std::string algorithmName() const override final
Returns name of the minimization algorithm.
MinimizerOptions & options()
virtual std::map< std::string, std::string > statusMap() const
Returns map of string representing different minimizer statuses.
Objective function types.
std::string reportToString(const RootMinimizerAdapter &minimizer)
Reports results of minimization in the form of multi-line string.
std::string reportParameters(const Fit::Parameters &parameters)
Reports fit parameters settings and final results.
std::string sectionString(const std::string &sectionName="", size_t report_width=80)
Returns horizontal line of 80 characters length with section name in it.
std::string reportDescription(const RootMinimizerAdapter &minimizer)
std::string reportStatus(const RootMinimizerAdapter &minimizer)
std::string reportValue(const std::string &name, T value)
std::string reportOption(const RootMinimizerAdapter &minimizer)