BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
Kernel.cpp
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file Fit/Kernel/Kernel.cpp
6 //! @brief Implements class Kernel.
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 
15 #include "Fit/Kernel/Kernel.h"
18 
19 using namespace mumufit;
20 
21 namespace {
22 const std::string default_minimizer = "Minuit2";
23 const std::string default_algorithm = "Migrad";
24 } // namespace
25 
27 {
28  setMinimizer(default_minimizer, default_algorithm);
29 }
30 
31 Kernel::~Kernel() = default;
32 
33 void Kernel::setMinimizer(const std::string& minimizerName, const std::string& algorithmName,
34  const std::string& options)
35 {
36  m_minimizer.reset(MinimizerFactory::createMinimizer(minimizerName, algorithmName, options));
37 }
38 
40 {
41  m_minimizer.reset(minimizer);
42 }
43 
45 {
46  setParameters(parameters);
47 
48  m_timer.start();
49  if (m_minimizer->requiresResiduals())
50  throw std::runtime_error(
51  "Error in Kernel::minimize: the chosen minimizer requires residuals computation. "
52  "Please use FitObjective::evaluate_residuals with this minimizer.");
53  auto result = m_minimizer->minimize_scalar(fcn, parameters);
54  m_timer.stop();
55 
56  result.setDuration(m_timer.runTime());
57  return result;
58 }
59 
61 {
62  setParameters(parameters);
63 
64  m_timer.start();
65  auto result = m_minimizer->minimize_residual(fcn, parameters);
66  m_timer.stop();
67 
68  result.setDuration(m_timer.runTime());
69  return result;
70 }
71 
72 void Kernel::setParameters(const Parameters& parameters)
73 {
74  m_parameters = parameters;
75 }
Defines interface IMinimizer.
Defines class Kernel.
Defines class MinimizerFactory.
std::function< double(const mumufit::Parameters &)> fcn_scalar_t
Definition: Types.h:39
std::function< std::vector< double >(const mumufit::Parameters &)> fcn_residual_t
Definition: Types.h:40
Abstract base class for all kind minimizers.
Definition: IMinimizer.h:30
static IMinimizer * createMinimizer(const std::string &minimizerName, const std::string &algorithmType="", const std::string &optionString="")
double runTime() const
returns run time in sec.
Parameters m_parameters
Definition: Kernel.h:53
WallclockTimer m_timer
Definition: Kernel.h:55
void setMinimizer(const std::string &minimizerName, const std::string &algorithmName="", const std::string &options="")
Definition: Kernel.cpp:33
void setParameters(const Parameters &parameters)
Definition: Kernel.cpp:72
MinimizerResult minimize(fcn_scalar_t fcn, const Parameters &parameters)
Definition: Kernel.cpp:44
std::unique_ptr< IMinimizer > m_minimizer
Definition: Kernel.h:54
Result of minimization round.
A collection of fit parameters.
Definition: Parameters.h:26
The multi-library, multi-algorithm fit wrapper library.