BornAgain  1.18.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 scattering at grazing incidence
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 Fit;
20 
21 namespace
22 {
23 const std::string default_minimizer = "Minuit2";
24 const std::string default_algorithm = "Migrad";
25 } // namespace
26 
28 {
30 }
31 
32 Kernel::~Kernel() = default;
33 
34 void Kernel::setMinimizer(const std::string& minimizerName, const std::string& algorithmName,
35  const std::string& options)
36 {
37  m_minimizer.reset(MinimizerFactory::createMinimizer(minimizerName, algorithmName, options));
38 }
39 
41 {
42  m_minimizer.reset(minimizer);
43 }
44 
46 {
47  setParameters(parameters);
48 
49  m_timer.start();
50  if (m_minimizer->requiresResiduals())
51  throw std::runtime_error(
52  "Error in Kernel::minimize: the chosen minimizer requires residuals computation. "
53  "Please use FitObjective::evaluate_residuals with this minimizer.");
54  auto result = m_minimizer->minimize_scalar(fcn, parameters);
55  m_timer.stop();
56 
57  result.setDuration(m_timer.runTime());
58  return result;
59 }
60 
62 {
63  setParameters(parameters);
64 
65  m_timer.start();
66  auto result = m_minimizer->minimize_residual(fcn, parameters);
67  m_timer.stop();
68 
69  result.setDuration(m_timer.runTime());
70  return result;
71 }
72 
73 void Kernel::setParameters(const Parameters& parameters)
74 {
75  m_parameters = parameters;
76 }
Defines class IMinimizer.
std::function< std::vector< double >(const Fit::Parameters &)> fcn_residual_t
Definition: KernelTypes.h:38
std::function< double(const Fit::Parameters &)> fcn_scalar_t
Definition: KernelTypes.h:37
Defines class Kernel.
Defines class MinimizerFactory.
void setMinimizer(const std::string &minimizerName, const std::string &algorithmName="", const std::string &options="")
Definition: Kernel.cpp:34
Parameters m_parameters
Definition: Kernel.h:50
WallclockTimer m_timer
Definition: Kernel.h:52
void setParameters(const Parameters &parameters)
Definition: Kernel.cpp:73
MinimizerResult minimize(fcn_scalar_t fcn, const Parameters &parameters)
Definition: Kernel.cpp:45
std::unique_ptr< IMinimizer > m_minimizer
Definition: Kernel.h:51
Result of minimization round.
A collection of fit parameters.
Definition: Parameters.h:28
Pure virtual interface for all kind minimizers.
Definition: IMinimizer.h:31
static IMinimizer * createMinimizer(const std::string &minimizerName, const std::string &algorithmType="", const std::string &optionString="")
double runTime() const
returns run time in sec.
Objective function types.
const std::string default_minimizer
Definition: Kernel.cpp:23
const std::string default_algorithm
Definition: Kernel.cpp:24