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 
28 {
30 }
31 
33 {
34  return m_fit_status == INTERRUPTED;
35 }
36 
38 {
39  return m_fit_status == COMPLETED;
40 }
41 
42 void FitStatus::update(const Fit::Parameters& params, double chi2)
43 {
44  if (!isInterrupted())
46 
47  m_iterationInfo.update(params, chi2);
48 
50 }
51 
52 void FitStatus::initPrint(int every_nth)
53 {
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 
69 {
70  return m_iterationInfo;
71 }
72 
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 
80 }
81 
83 {
84  m_minimizer_result.reset(new Fit::MinimizerResult(result));
87 }
Defines class FitPrintService.
Defines class FitStatus.
std::function< void(const FitObjective &)> fit_observer_t
Definition: FitTypes.h:30
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 notify_all(const T &data)
Definition: FitObserver.h:79
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 setInterrupted()
Definition: FitStatus.cpp:27
bool isCompleted() const
Definition: FitStatus.cpp:37
Fit::MinimizerResult minimizerResult() const
Definition: FitStatus.cpp:73
IterationInfo iterationInfo() const
Definition: FitStatus.cpp:68
void initPrint(int every_nth)
Definition: FitStatus.cpp:52
FitStatus(const FitObjective *fit_objective)
Definition: FitStatus.cpp:20
EFitStatus m_fit_status
Definition: FitStatus.h:59
void finalize(const Fit::MinimizerResult &result)
Should be explicitely called on last iteration to notify all observers.
Definition: FitStatus.cpp:82
const FitObjective * m_fit_objective
Definition: FitStatus.h:62
@ INTERRUPTED
Definition: FitStatus.h:58
@ COMPLETED
Definition: FitStatus.h:58
IterationInfo m_iterationInfo
Definition: FitStatus.h:63
void addObserver(int every_nth, fit_observer_t)
Definition: FitStatus.cpp:63
FitObserver< FitObjective > m_observers
Definition: FitStatus.h:60
std::unique_ptr< FitPrintService > m_print_service
Definition: FitStatus.h:61
std::unique_ptr< Fit::MinimizerResult > m_minimizer_result
Definition: FitStatus.h:64
void update(const Fit::Parameters &params, double chi2)
Definition: FitStatus.cpp:42
bool isInterrupted() const
Definition: FitStatus.cpp:32
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
void update(const Fit::Parameters &params, double chi2)