BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
JobItem.cpp
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file GUI/coregui/Models/JobItem.cpp
6 //! @brief Implements class JobItem
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 
30 
31 const QString JobItem::P_IDENTIFIER = "Identifier";
32 const QString JobItem::P_SAMPLE_NAME = "Sample";
33 const QString JobItem::P_INSTRUMENT_NAME = "Instrument";
34 const QString JobItem::P_WITH_FITTING = "With fitting";
35 const QString JobItem::P_STATUS = "Status";
36 const QString JobItem::P_BEGIN_TIME = "Begin time";
37 const QString JobItem::P_END_TIME = "End time";
38 const QString JobItem::P_DURATION = "Duration";
39 const QString JobItem::P_COMMENTS = "Comments";
40 const QString JobItem::P_PROGRESS = "Progress";
41 const QString JobItem::P_PRESENTATION_TYPE = "Presentation type";
42 const QString JobItem::T_SAMPLE = "Sample tag";
43 const QString JobItem::T_MATERIAL_CONTAINER = "Material container tag";
44 const QString JobItem::T_INSTRUMENT = "Instrument tag";
45 const QString JobItem::T_OUTPUT = "Output tag";
46 const QString JobItem::T_REALDATA = "Real Data tag";
47 const QString JobItem::T_DATAVIEW = "Data View tag";
48 const QString JobItem::T_PARAMETER_TREE = "Parameter tree tag";
49 const QString JobItem::T_SIMULATION_OPTIONS = "Simulation options tag";
50 const QString JobItem::T_FIT_SUITE = "Fit suite tag";
51 
53 {
54  setItemName("JobItem");
55  addProperty(P_IDENTIFIER, QString())->setVisible(false);
56  addProperty(P_SAMPLE_NAME, QString())->setEditable(false);
57  addProperty(P_INSTRUMENT_NAME, QString())->setEditable(false);
58  addProperty(P_WITH_FITTING, false)->setVisible(false);
59 
60  addProperty(P_STATUS, "Idle")->setEditable(false);
61 
62  addProperty(P_BEGIN_TIME, QString())->setEditable(false);
63  addProperty(P_END_TIME, QString())->setEditable(false);
64 
65  auto durationItem = addProperty(P_DURATION, QString());
66  durationItem->setEditable(false);
67  durationItem->setToolTip("Duration of DWBA simulation in sec.msec format");
68 
69  addProperty(P_COMMENTS, QString())->setVisible(false);
70  addProperty(P_PROGRESS, 0)->setVisible(false);
71  addProperty(P_PRESENTATION_TYPE, QVariant::Type::Invalid)->setVisible(false);
72 
73  registerTag(T_SAMPLE, 1, 1, QStringList() << "MultiLayer");
74  registerTag(T_MATERIAL_CONTAINER, 1, 1, QStringList{"MaterialContainer"});
76  QStringList() << "GISASInstrument"
77  << "OffSpecularInstrument"
78  << "SpecularInstrument"
79  << "DepthProbeInstrument");
80  registerTag(T_OUTPUT, 1, 1,
81  QStringList() << "IntensityData"
82  << "SpecularData");
83  registerTag(T_REALDATA, 1, 1, QStringList() << "RealData");
84  registerTag(T_DATAVIEW, 1, 1, QStringList() << "Data1DViewItem");
85  registerTag(T_PARAMETER_TREE, 0, -1, QStringList() << "Parameter Container");
86 
87  registerTag(T_SIMULATION_OPTIONS, 1, 1, QStringList() << "SimulationOptions");
88 
89  registerTag(T_FIT_SUITE, 1, 1, QStringList() << "FitSuite");
90 
91  mapper()->setOnChildPropertyChange([this](SessionItem* item, const QString& name) {
92  if (item->parent() == this && dynamic_cast<DataItem*>(item)
94  dynamic_cast<DataItem*>(item)->updateAxesUnits(instrumentItem());
95  });
96 
97  mapper()->setOnPropertyChange([this](const QString& name) {
98  if (name == P_NAME)
100  });
101 }
102 
103 QString JobItem::getIdentifier() const
104 {
105  return getItemValue(P_IDENTIFIER).toString();
106 }
107 
108 void JobItem::setIdentifier(const QString& identifier)
109 {
110  setItemValue(JobItem::P_IDENTIFIER, identifier);
111 }
112 
114 {
115  return dynamic_cast<IntensityDataItem*>(getItem(T_OUTPUT));
116 }
117 
119 {
120  return dynamic_cast<DataItem*>(getItem(T_OUTPUT));
121 }
122 
123 QString JobItem::getStatus() const
124 {
125  return getItemValue(P_STATUS).toString();
126 }
127 
128 void JobItem::setStatus(const QString& status)
129 {
130  setItemValue(P_STATUS, status);
131  if (status == "Failed") {
132  if (DataItem* intensityItem = dataItem()) {
133  if (intensityItem->getOutputData())
134  intensityItem->getOutputData()->setAllTo(0.0);
135  emit intensityItem->emitDataChanged();
136  }
137  }
138 }
139 
140 bool JobItem::isIdle() const
141 {
142  return getStatus() == "Idle";
143 }
144 
145 bool JobItem::isRunning() const
146 {
147  return getStatus() == "Running";
148 }
149 
151 {
152  return getStatus() == "Completed";
153 }
154 
156 {
157  return getStatus() == "Canceled";
158 }
159 
160 bool JobItem::isFailed() const
161 {
162  return getStatus() == "Failed";
163 }
164 
166 {
167  return isTag(T_REALDATA) && getItem(T_REALDATA);
168 }
169 
170 void JobItem::setBeginTime(const QString& begin_time)
171 {
172  setItemValue(P_BEGIN_TIME, begin_time);
173 }
174 
175 void JobItem::setEndTime(const QString& end_time)
176 {
177  setItemValue(P_END_TIME, end_time);
178 }
179 
180 // Sets duration (msec -> "sec.msec")
181 void JobItem::setDuration(int duration)
182 {
183  QString str;
184  if (duration != 0)
185  str = QString("%7.3f").arg(duration / 1000.);
186  setItemValue(P_DURATION, str.simplified());
187 }
188 
189 QString JobItem::getComments() const
190 {
191  return getItemValue(P_COMMENTS).toString();
192 }
193 
194 void JobItem::setComments(const QString& comments)
195 {
196  setItemValue(P_COMMENTS, comments);
197 }
198 
200 {
201  return getItemValue(P_PROGRESS).toInt();
202 }
203 
204 void JobItem::setProgress(int progress)
205 {
206  setItemValue(P_PROGRESS, progress);
207 }
208 
210 {
212 }
213 
215 {
217 }
218 
220 {
221  return dynamic_cast<MultiLayerItem*>(getItem(T_SAMPLE));
222 }
223 
225 {
226  return dynamic_cast<InstrumentItem*>(getItem(T_INSTRUMENT));
227 }
228 
229 void JobItem::setResults(const ISimulation* simulation)
230 {
231  JobItemUtils::setResults(dataItem(), simulation);
233 }
234 
236 {
237  return dynamic_cast<FitSuiteItem*>(getItem(JobItem::T_FIT_SUITE));
238 }
239 
241 {
242  return const_cast<ParameterContainerItem*>(
243  static_cast<const JobItem*>(this)->parameterContainerItem());
244 }
245 
247 {
249 }
250 
252 {
253  if (FitSuiteItem* item = fitSuiteItem())
254  return item->fitParameterContainerItem();
255 
256  return nullptr;
257 }
258 
260 {
261  return dynamic_cast<RealDataItem*>(getItem(JobItem::T_REALDATA));
262 }
263 
265 {
267 }
268 
270 {
271  return dynamic_cast<Data1DViewItem*>(getItem(JobItem::T_DATAVIEW));
272 }
273 
274 //! Updates the name of file to store intensity data.
275 
277 {
278  if (DataItem* item = dataItem())
279  item->setFileName(ItemFileNameUtils::jobResultsFileName(*this));
280 
281  if (RealDataItem* realItem = realDataItem()) {
282  if (DataItem* item = realItem->dataItem())
283  item->setFileName(ItemFileNameUtils::jobReferenceFileName(*this));
284 
285  if (DataItem* item = realItem->nativeData())
286  item->setFileName(ItemFileNameUtils::jobNativeDataFileName(*this));
287  }
288 }
289 
291 {
292  return const_cast<SimulationOptionsItem*>(
293  static_cast<const JobItem*>(this)->simulationOptionsItem());
294 }
295 
297 {
298  return item<const SimulationOptionsItem>(T_SIMULATION_OPTIONS);
299 }
Defines class Data1DViewItem.
Defines class FitSuiteItem.
Defines class GUIHelpers functions.
Defines InstrumentItems classes.
Defines class IntensityDataItem.
Defines auxiliary functions in ItemFileNameUtils namespace.
Defines class JobItemUtils.
Defines class JobItem.
Defines class MaskUnitsConverter.
Defines class MaterialItemContainer.
Defines class MultiLayerItem.
Defines classes for ParameterTreeItems.
Defines class RealDataItem.
Defines class SimulationOptionsItem.
Defines class SpecularDataItem.
View model for 1D DataItem.
Provides common functionality for IntensityDataItem and SpecularDataItem.
Definition: DataItem.h:29
virtual void updateAxesUnits(const InstrumentItem *instrument)=0
static const QString P_AXES_UNITS
Definition: DataItem.h:34
Abstract base class of OffSpecularSimulation, GISASSimulation and SpecularSimulation.
Definition: ISimulation.h:38
void setComments(const QString &comments)
Definition: JobItem.cpp:194
static const QString T_DATAVIEW
Definition: JobItem.h:52
QString getComments() const
Definition: JobItem.cpp:189
const MaterialItemContainer * materialContainerItem() const
Definition: JobItem.cpp:264
static const QString P_DURATION
Definition: JobItem.h:43
static const QString T_SAMPLE
Definition: JobItem.h:47
static const QString P_PRESENTATION_TYPE
Definition: JobItem.h:46
bool isIdle() const
Definition: JobItem.cpp:140
bool isFailed() const
Definition: JobItem.cpp:160
static const QString P_STATUS
Definition: JobItem.h:40
void setResults(const ISimulation *simulation)
Definition: JobItem.cpp:229
static const QString T_OUTPUT
Definition: JobItem.h:50
static const QString P_PROGRESS
Definition: JobItem.h:45
InstrumentItem * instrumentItem()
Definition: JobItem.cpp:224
bool runImmediately() const
Definition: JobItem.cpp:209
void setProgress(int progress)
Definition: JobItem.cpp:204
static const QString T_FIT_SUITE
Definition: JobItem.h:55
static const QString P_COMMENTS
Definition: JobItem.h:44
FitParameterContainerItem * fitParameterContainerItem()
Definition: JobItem.cpp:251
void updateIntensityDataFileName()
Updates the name of file to store intensity data.
Definition: JobItem.cpp:276
Data1DViewItem * dataItemView()
Definition: JobItem.cpp:269
int getProgress() const
Definition: JobItem.cpp:199
FitSuiteItem * fitSuiteItem()
Definition: JobItem.cpp:235
bool isCompleted() const
Definition: JobItem.cpp:150
static const QString T_PARAMETER_TREE
Definition: JobItem.h:53
static const QString T_INSTRUMENT
Definition: JobItem.h:49
void setBeginTime(const QString &begin_time)
Definition: JobItem.cpp:170
static const QString P_END_TIME
Definition: JobItem.h:42
DataItem * dataItem()
Definition: JobItem.cpp:118
void setIdentifier(const QString &identifier)
Definition: JobItem.cpp:108
RealDataItem * realDataItem()
Definition: JobItem.cpp:259
QString getStatus() const
Definition: JobItem.cpp:123
bool isValidForFitting()
Definition: JobItem.cpp:165
static const QString T_SIMULATION_OPTIONS
Definition: JobItem.h:54
QString getIdentifier() const
Definition: JobItem.cpp:103
static const QString T_REALDATA
Definition: JobItem.h:51
SimulationOptionsItem * simulationOptionsItem()
Definition: JobItem.cpp:290
MultiLayerItem * multiLayerItem()
Definition: JobItem.cpp:219
void setDuration(int duration)
Definition: JobItem.cpp:181
static const QString P_BEGIN_TIME
Definition: JobItem.h:41
bool isRunning() const
Definition: JobItem.cpp:145
static const QString P_WITH_FITTING
Definition: JobItem.h:39
JobItem()
Definition: JobItem.cpp:52
static const QString T_MATERIAL_CONTAINER
Definition: JobItem.h:48
ParameterContainerItem * parameterContainerItem()
Definition: JobItem.cpp:240
bool isCanceled() const
Definition: JobItem.cpp:155
IntensityDataItem * intensityDataItem()
Definition: JobItem.cpp:113
void setStatus(const QString &status)
Definition: JobItem.cpp:128
bool runInBackground() const
Definition: JobItem.cpp:214
static const QString P_IDENTIFIER
Definition: JobItem.h:36
static const QString P_INSTRUMENT_NAME
Definition: JobItem.h:38
void setEndTime(const QString &end_time)
Definition: JobItem.cpp:175
static const QString P_SAMPLE_NAME
Definition: JobItem.h:37
void setOnChildPropertyChange(std::function< void(SessionItem *, QString)> f, const void *caller=0)
Calls back on child property change, report childItem and property name.
Definition: ModelMapper.cpp:49
void setOnPropertyChange(std::function< void(QString)> f, const void *caller=0)
Definition: ModelMapper.cpp:35
The ParameterContainerItem is a top item to hold all ParameterItem, represents an entry point to para...
The RealDataItem class represents intensity data imported from file and intended for fitting.
Definition: RealDataItem.h:35
bool isTag(const QString &name) const
Returns true if tag is available.
void setItemName(const QString &name)
Set item name, add property if necessary.
SessionItem * addProperty(const QString &name, const QVariant &variant)
Add new property item and register new tag.
bool registerTag(const QString &name, int min=0, int max=-1, QStringList modelTypes={})
Add new tag to this item with given name, min, max and types.
void setVisible(bool enabled)
Flags accessors.
static const QString P_NAME
Definition: SessionItem.h:37
QVariant getItemValue(const QString &tag) const
Directly access value of item under given tag.
ModelMapper * mapper()
Returns the current model mapper of this item. Creates new one if necessary.
T * item(const QString &tag) const
Definition: SessionItem.h:151
void setItemValue(const QString &tag, const QVariant &variant)
Directly set value of item under given tag.
void setEditable(bool enabled)
SessionItem * getItem(const QString &tag="", int row=0) const
Returns item in given row of given tag.
The SimulationOptionsItem class holds simulation status (run policy, number of threads,...
QString jobResultsFileName(const JobItem &jobItem)
Constructs the name of the file with simulated intensities.
QString jobReferenceFileName(const JobItem &jobItem)
Constructs the name of the file with reference data.
QString jobNativeDataFileName(const JobItem &jobItem)
void setResults(DataItem *intensityItem, const ISimulation *simulation)
Sets simulation results into the DataItem.
QString const & name(EShape k)
Definition: particles.cpp:21