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 
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 
45 
47 {
48  setOptionValue("PrintLevel", value);
49 }
50 
52 {
53  return optionValue<int>("PrintLevel");
54 }
55 
57 {
58  setOptionValue("MaxIterations", value);
59 }
60 
62 {
63  return optionValue<int>("MaxIterations");
64 }
65 
67 {
68  setOptionValue("IterationsAtTemp", value);
69 }
70 
72 {
73  return optionValue<int>("IterationsAtTemp");
74 }
75 
76 void SimAnMinimizer::setStepSize(double value)
77 {
78  setOptionValue("StepSize", value);
79 }
80 
82 {
83  return optionValue<double>("StepSize");
84 }
85 
87 {
88  setOptionValue("k", value);
89 }
90 
92 {
93  return optionValue<double>("k");
94 }
95 
97 {
98  setOptionValue("t_init", value);
99 }
100 
102 {
103  return optionValue<double>("t_init");
104 }
105 
107 {
108  setOptionValue("mu", value);
109 }
110 
112 {
113  return optionValue<double>("mu");
114 }
115 
117 {
118  setOptionValue("t_min", value);
119 }
120 
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 
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 
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.
OptionContainer::option_t addOption(const std::string &optionName, T value, const std::string &description="")
void setOptionValue(const std::string &optionName, T value)
ROOT::Math::Minimizer root_minimizer_t
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.
int iterationsAtEachTemp() const
double boltzmannMinTemp() const
int maxIterations() const
void setBoltzmannMu(double value)
Sets Boltzmann distribution parameter: mu.
double stepSize() const
void setBoltzmannK(double value)
Sets Boltzmann distribution parameter: k.
void propagateOptions() override
int printLevel() const
~SimAnMinimizer() override
std::unique_ptr< ROOT::Math::GSLSimAnMinimizer > m_siman_minimizer
void setStepSize(double value)
Sets max step size used in random walk.
const root_minimizer_t * rootMinimizer() const override
void setBoltzmannMinTemp(double value)
Sets Boltzmann distribution parameter: minimal temperature.
double boltzmannK() const
void setMaxIterations(int value)
Sets maximum number of iterations to try at each step.
double boltzmannInitialTemp() const
void setBoltzmannInitialTemp(double value)
Sets Boltzmann distribution parameter: initial temperature.
double boltzmannMu() const