BornAgain  1.18.0
Simulate and fit neutron and x-ray scattering at grazing incidence
SimAnMinimizer.cpp
Go to the documentation of this file.
1 // ************************************************************************** //
2 //
3 // BornAgain: simulate and fit scattering at grazing incidence
4 //
5 //! @file Fit/RootAdapter/SimAnMinimizer.cpp
6 //! @brief Implements class SimAnMinimizer.
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 
18 #ifdef _WIN32
19 #pragma warning(push)
20 #pragma warning(disable : 4267)
21 #include <Math/GSLSimAnMinimizer.h>
22 #pragma warning(pop)
23 #else
24 #pragma GCC diagnostic push
25 #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
26 #include <Math/GSLSimAnMinimizer.h>
27 #pragma GCC diagnostic pop
28 #endif
29 
30 SimAnMinimizer::SimAnMinimizer()
31  : RootMinimizerAdapter(MinimizerInfo::buildGSLSimAnInfo()),
32  m_siman_minimizer(new ROOT::Math::GSLSimAnMinimizer())
33 {
34  addOption("PrintLevel", 0, "Minimizer internal print level");
35  addOption("MaxIterations", 100, "Number of points to try for each step");
36  addOption("IterationsAtTemp", 10, "Number of iterations at each temperature");
37  addOption("StepSize", 1.0, "Max step size used in random walk");
38  addOption("k", 1.0, "Boltzmann k");
39  addOption("t_init", 50.0, "Boltzmann initial temperature");
40  addOption("mu", 1.05, "Boltzmann mu");
41  addOption("t_min", 0.1, "Boltzmann minimal temperature");
42 }
43 
44 SimAnMinimizer::~SimAnMinimizer() = default;
45 
47 {
48  setOptionValue("PrintLevel", value);
49 }
50 
51 int SimAnMinimizer::printLevel() const
52 {
53  return optionValue<int>("PrintLevel");
54 }
55 
57 {
58  setOptionValue("MaxIterations", value);
59 }
60 
61 int SimAnMinimizer::maxIterations() const
62 {
63  return optionValue<int>("MaxIterations");
64 }
65 
67 {
68  setOptionValue("IterationsAtTemp", value);
69 }
70 
71 int SimAnMinimizer::iterationsAtEachTemp() const
72 {
73  return optionValue<int>("IterationsAtTemp");
74 }
75 
76 void SimAnMinimizer::setStepSize(double value)
77 {
78  setOptionValue("StepSize", value);
79 }
80 
81 double SimAnMinimizer::stepSize() const
82 {
83  return optionValue<double>("StepSize");
84 }
85 
87 {
88  setOptionValue("k", value);
89 }
90 
91 double SimAnMinimizer::boltzmannK() const
92 {
93  return optionValue<double>("k");
94 }
95 
97 {
98  setOptionValue("t_init", value);
99 }
100 
101 double SimAnMinimizer::boltzmannInitialTemp() const
102 {
103  return optionValue<double>("t_init");
104 }
105 
107 {
108  setOptionValue("mu", value);
109 }
110 
111 double SimAnMinimizer::boltzmannMu() const
112 {
113  return optionValue<double>("mu");
114 }
115 
117 {
118  setOptionValue("t_min", value);
119 }
120 
121 double SimAnMinimizer::boltzmannMinTemp() const
122 {
123  return optionValue<double>("t_min");
124 }
125 
126 std::map<std::string, std::string> SimAnMinimizer::statusMap() const
127 {
128  auto result = RootMinimizerAdapter::statusMap();
129  result["functionCalls"] = std::to_string(rootMinimizer()->NCalls());
130  return result;
131 }
132 
133 void SimAnMinimizer::propagateOptions()
134 {
135  ROOT::Math::GSLSimAnParams& pars = m_siman_minimizer->getSolver().Params();
136  pars.n_tries = maxIterations();
137  pars.iters_fixed_T = iterationsAtEachTemp();
138  pars.step_size = stepSize();
139  pars.k = boltzmannK();
140  pars.t_initial = boltzmannInitialTemp();
141  pars.mu_t = boltzmannMu();
142  pars.t_min = boltzmannMinTemp();
143 }
144 
145 const RootMinimizerAdapter::root_minimizer_t* SimAnMinimizer::rootMinimizer() const
146 {
147  return m_siman_minimizer.get();
148 }
Declares class GSLMultiMinimizer.
Declares class SimAnMinimizer.
Info about a minimizer, including list of defined minimization algorithms.
Definition: MinimizerInfo.h:45
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::map< std::string, std::string > statusMap() const override
Returns map of string representing different minimizer statuses.
void setIterationsAtEachTemp(int value)
Sets number of iterations at each temperature.
void setPrintLevel(int value)
Sets minimizer internal print level.
void setBoltzmannMu(double value)
Sets Boltzmann distribution parameter: mu.
void setBoltzmannK(double value)
Sets Boltzmann distribution parameter: k.
void setStepSize(double value)
Sets max step size used in random walk.
void setBoltzmannMinTemp(double value)
Sets Boltzmann distribution parameter: minimal temperature.
void setMaxIterations(int value)
Sets maximum number of iterations to try at each step.
void setBoltzmannInitialTemp(double value)
Sets Boltzmann distribution parameter: initial temperature.