BornAgain  1.18.0
Simulate and fit neutron and x-ray scattering at grazing incidence
FitStatus.cpp
Go to the documentation of this file.
1 // ************************************************************************** //
2 //
3 // BornAgain: simulate and fit scattering at grazing incidence
4 //
5 //! @file Core/Fitting/FitStatus.cpp
6 //! @brief Implements class FitStatus.
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 "Core/Fitting/FitStatus.h"
18 #include <stdexcept>
19 
20 FitStatus::FitStatus(const FitObjective* fit_objective)
21  : m_fit_status(IDLE), m_fit_objective(fit_objective)
22 {
23 }
24 
25 FitStatus::~FitStatus() = default;
26 
27 void FitStatus::setInterrupted()
28 {
29  m_fit_status = INTERRUPTED;
30 }
31 
32 bool FitStatus::isInterrupted() const
33 {
34  return m_fit_status == INTERRUPTED;
35 }
36 
37 bool FitStatus::isCompleted() const
38 {
39  return m_fit_status == COMPLETED;
40 }
41 
42 void FitStatus::update(const Fit::Parameters& params, double chi2)
43 {
44  if (!isInterrupted())
45  m_fit_status = RUNNING;
46 
47  m_iterationInfo.update(params, chi2);
48 
49  m_observers.notify(*m_fit_objective);
50 }
51 
52 void FitStatus::initPrint(int every_nth)
53 {
54  m_print_service.reset(new FitPrintService);
55 
56  FitObserver<FitObjective>::observer_t callback = [&](const FitObjective& objective) {
57  m_print_service->print(objective);
58  };
59 
60  addObserver(every_nth, callback);
61 }
62 
63 void FitStatus::addObserver(int every_nth, fit_observer_t observer)
64 {
65  m_observers.addObserver(every_nth, observer);
66 }
67 
68 IterationInfo FitStatus::iterationInfo() const
69 {
70  return m_iterationInfo;
71 }
72 
73 Fit::MinimizerResult FitStatus::minimizerResult() const
74 {
75  if (!m_minimizer_result)
76  throw std::runtime_error("FitStatus::minimizerResult() -> Minimizer result wasn't set. "
77  "Make sure that FitObjective::finalize() was called.");
78 
79  return Fit::MinimizerResult(*m_minimizer_result);
80 }
81 
83 {
84  m_minimizer_result.reset(new Fit::MinimizerResult(result));
85  m_fit_status = COMPLETED;
86  m_observers.notify_all(*m_fit_objective);
87 }
Defines class FitPrintService.
Defines class FitStatus.
Defines class MinimizerResult.
Holds vector of SimDataPairs (experimental data and simulation results) for use in fitting.
Definition: FitObjective.h:34
Contains collection of observers and call them at specified intervals.
Definition: FitObserver.h:26
void notify(const T &data)
Notifies all observers at their personally specified intervals.
Definition: FitObserver.h:69
void addObserver(int every_nth, observer_t observer)
Adds observer to the list.
Definition: FitObserver.h:64
Prints fit statistics to standard output during minimizer iterations.
void finalize(const Fit::MinimizerResult &result)
Should be explicitely called on last iteration to notify all observers.
Definition: FitStatus.cpp:82
Result of minimization round.
A collection of fit parameters.
Definition: Parameters.h:28
Stores fit iteration info to track fit flow from various observers.
Definition: IterationInfo.h:26