BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
JobWorker.cpp
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file GUI/coregui/Models/JobWorker.cpp
6 //! @brief Implements class JobWorker
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 #include <QDateTime>
18 #include <memory>
19 
20 JobWorker::JobWorker(const QString& identifier, ISimulation* simulation)
21  : m_identifier(identifier)
22  , m_simulation(simulation)
23  , m_percentage_done(0)
24  , m_job_status("Idle")
25  , m_terminate_request_flag(false)
26  , m_simulation_duration(0)
27 {
28 }
29 
30 QString JobWorker::identifier() const
31 {
32  return m_identifier;
33 }
34 
36 {
37  return m_percentage_done;
38 }
39 
41 {
44  emit started();
45 
46  if (m_simulation) {
47  m_simulation->subscribe([this](size_t percentage_done) {
48  return updateProgress(static_cast<int>(percentage_done));
49  });
50 
51  m_job_status = "Running";
52 
53  try {
54  QDateTime beginTime = QDateTime::currentDateTime();
56  if (m_job_status != "Canceled")
57  m_job_status = "Completed";
58 
59  QDateTime endTime = QDateTime::currentDateTime();
60  m_simulation_duration = static_cast<int>(beginTime.msecsTo(endTime));
61 
62  } catch (const std::exception& ex) {
63  m_job_status = "Failed";
64  m_percentage_done = 100;
66  "JobRunner::start() -> ISimulation failed with exception throw:\n\n";
67 
68  m_failure_message.append(QString(ex.what()));
69  }
70 
71  } else {
72  m_job_status = "Failed";
73  m_percentage_done = 100;
74  m_failure_message = "JobRunner::start() -> Error. ISimulation doesn't exist.";
75  }
76 
77  emit progressUpdate();
78  emit finished();
79 }
80 
81 QString JobWorker::status() const
82 {
83  return m_job_status;
84 }
85 
87 {
88  return m_failure_message;
89 }
90 
92 {
93  return m_simulation_duration;
94 }
95 
96 //! Sets request for JobRunner to terminate underlying domain simulation.
97 
99 {
101  m_job_status = "Canceled";
102 }
103 
104 //! Sets current progress. Returns true if we want to continue the simulation.
105 
106 bool JobWorker::updateProgress(int percentage_done)
107 {
108  if (percentage_done > m_percentage_done) {
109  m_percentage_done = percentage_done;
110  emit progressUpdate();
111  }
112  return !m_terminate_request_flag;
113 }
Defines class GISASSimulation.
Defines class JobWorker.
Abstract base class of OffSpecularSimulation, GISASSimulation and SpecularSimulation.
Definition: ISimulation.h:38
void runSimulation()
Run a simulation, possibly averaged over parameter distributions.
void subscribe(ProgressHandler::Callback_t inform)
Definition: ISimulation.h:94
bool updateProgress(int percentage_done)
Sets current progress. Returns true if we want to continue the simulation.
Definition: JobWorker.cpp:106
int m_percentage_done
Definition: JobWorker.h:53
int m_simulation_duration
Definition: JobWorker.h:57
void progressUpdate()
QString failureMessage() const
Definition: JobWorker.cpp:86
QString identifier() const
Definition: JobWorker.cpp:30
QString m_job_status
Definition: JobWorker.h:54
int progress() const
Definition: JobWorker.cpp:35
QString status() const
Definition: JobWorker.cpp:81
void start()
Definition: JobWorker.cpp:40
bool m_terminate_request_flag
Definition: JobWorker.h:55
int simulationDuration() const
Definition: JobWorker.cpp:91
JobWorker(const QString &identifier, ISimulation *simulation)
Definition: JobWorker.cpp:20
QString m_identifier
Definition: JobWorker.h:51
void finished()
QString m_failure_message
Definition: JobWorker.h:56
void terminate()
Sets request for JobRunner to terminate underlying domain simulation.
Definition: JobWorker.cpp:98
ISimulation * m_simulation
Definition: JobWorker.h:52
void started()
QString currentDateTime()
Definition: GUIHelpers.cpp:210