BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
JobModelFunctions Namespace Reference

Contains set of functions to extend JobModel functionality. More...

Functions

void copyRealDataItem (JobItem *jobItem, const RealDataItem *realDataItem)
 Copy RealDataItem to jobItem intended for fitting. More...
 
const JobItemfindJobItem (const SessionItem *item)
 Determines parenting JobItem of a given SessionItem. More...
 
void initDataView (JobItem *jobItem)
 Initializes Data1DViewItem and assigns it to the passed JobItem. More...
 
void muteMagnetizationData (JobItem *jobItem)
 
void setupJobItemForFit (JobItem *jobItem, const RealDataItem *realDataItem)
 Setups JobItem for fit. More...
 
void setupJobItemInstrument (JobItem *jobItem, const InstrumentItem *from)
 Properly copies instrument into job item. More...
 
void setupJobItemOutput (JobItem *jobItem)
 Setup items intended for storing results of the job. More...
 
void setupJobItemSampleData (JobItem *jobItem, const MultiLayerItem *sampleItem)
 Properly copies sample and materials into JobItem. More...
 

Detailed Description

Contains set of functions to extend JobModel functionality.

Handles setup of JobItem in fitting context.

Function Documentation

◆ copyRealDataItem()

void JobModelFunctions::copyRealDataItem ( JobItem jobItem,
const RealDataItem realDataItem 
)

Copy RealDataItem to jobItem intended for fitting.

Definition at line 190 of file JobModelFunctions.cpp.

191 {
192  if (!realDataItem)
193  return;
194 
195  SessionModel* model = jobItem->model();
196 
197  RealDataItem* realDataItemCopy = model->copyItem(realDataItem, jobItem, JobItem::T_REALDATA);
198  ASSERT(realDataItemCopy);
199 
200  realDataItemCopy->dataItem()->setOutputData(realDataItem->dataItem()->getOutputData()->clone());
201 
202  // adapting the name to job name
203  realDataItemCopy->dataItem()->setFileName(ItemFileNameUtils::jobReferenceFileName(*jobItem));
204 
205  // #baimport ++ copy members of realDataItem?
206 
207  if (!realDataItem->hasNativeData())
208  return;
209 
210  realDataItemCopy->setNativeOutputData(realDataItem->nativeOutputData()->clone());
211  realDataItemCopy->nativeData()->setFileName(ItemFileNameUtils::jobNativeDataFileName(*jobItem));
212 }
#define ASSERT(condition)
Definition: Assert.h:31
OutputData< double > * getOutputData()
Definition: DataItem.h:36
virtual void setOutputData(OutputData< double > *data)=0
The given pointer becomes owned by this class!!
Definition: DataItem.cpp:24
void setFileName(const QString &filename)
Definition: DataItem.cpp:45
static const QString T_REALDATA
Definition: JobItem.h:51
OutputData * clone() const
Definition: OutputData.h:259
The RealDataItem class represents intensity data imported from file and intended for fitting.
Definition: RealDataItem.h:35
const OutputData< double > * nativeOutputData() const
bool hasNativeData() const
void setNativeOutputData(OutputData< double > *data)
takes ownership of data
DataItem * nativeData()
DataItem * dataItem()
SessionModel * model() const
Returns model of this item.
Definition: SessionItem.cpp:66
T * copyItem(const T *item_to_copy, SessionItem *new_parent=0, const QString &tag="")
Definition: SessionModel.h:136
QString jobReferenceFileName(const JobItem &jobItem)
Constructs the name of the file with reference data.
QString jobNativeDataFileName(const JobItem &jobItem)

References ASSERT, OutputData< T >::clone(), SessionModel::copyItem(), RealDataItem::dataItem(), DataItem::getOutputData(), RealDataItem::hasNativeData(), ItemFileNameUtils::jobNativeDataFileName(), ItemFileNameUtils::jobReferenceFileName(), SessionItem::model(), RealDataItem::nativeData(), RealDataItem::nativeOutputData(), DataItem::setFileName(), RealDataItem::setNativeOutputData(), DataItem::setOutputData(), and JobItem::T_REALDATA.

Referenced by setupJobItemForFit().

Here is the call graph for this function:

◆ findJobItem()

const JobItem * JobModelFunctions::findJobItem ( const SessionItem item)

Determines parenting JobItem of a given SessionItem.

Returns nullptr, if there is no parent of JobItem type

Definition at line 214 of file JobModelFunctions.cpp.

215 {
216  while (item && item->modelType() != "JobItem")
217  item = item->parent();
218  return static_cast<const JobItem*>(item);
219 }
SessionItem * parent() const
Returns parent of this item.
Definition: SessionItem.cpp:73
QString modelType() const
Get model type.

References SessionItem::modelType(), and SessionItem::parent().

Referenced by TransformToDomain::createDomainMaterial().

Here is the call graph for this function:

◆ initDataView()

void JobModelFunctions::initDataView ( JobItem jobItem)

Initializes Data1DViewItem and assigns it to the passed JobItem.

Definition at line 64 of file JobModelFunctions.cpp.

65 {
66  ASSERT(job_item && job_item->isValidForFitting());
67  ASSERT(job_item->instrumentItem() && job_item->instrumentItem()->is<SpecularInstrumentItem>());
68  ASSERT(!job_item->getItem(JobItem::T_DATAVIEW));
69 
70  SessionModel* model = job_item->model();
71  auto view_item = model->insertItem<Data1DViewItem>(job_item, -1, JobItem::T_DATAVIEW);
72 
73  auto property_container =
75 
76  property_container->addItem(job_item->realDataItem()->dataItem());
77  property_container->addItem(job_item->dataItem());
78 
79  // also triggers Data1DViewItem::setAxesRangeToData and DataViewUtils::updateAxesTitle by
80  // setting new value of P_AXES_UNITS.
81  auto converter = DomainObjectBuilder::createUnitConverter(job_item->instrumentItem());
84 }
QVariant variant() const
Constructs variant enclosing given ComboProperty.
View model for 1D DataItem.
static const QString P_AXES_UNITS
static const QString T_DATA_PROPERTIES
static const QString T_DATAVIEW
Definition: JobItem.h:52
void setItemValue(const QString &tag, const QVariant &variant)
Directly set value of item under given tag.
T * insertItem(SessionItem *parent=nullptr, int row=-1, QString tag="")
Definition: SessionModel.h:125
std::unique_ptr< IUnitConverter > createUnitConverter(const InstrumentItem *instrumentItem)
Creates a unit converter corresponding to the given instrument item.
ComboProperty availableUnits(const IUnitConverter &converter)

References ASSERT, JobItemUtils::availableUnits(), DomainObjectBuilder::createUnitConverter(), JobItem::dataItem(), RealDataItem::dataItem(), SessionItem::getItem(), SessionModel::insertItem(), JobItem::instrumentItem(), SessionItem::is(), JobItem::isValidForFitting(), SessionItem::model(), Data1DViewItem::P_AXES_UNITS, JobItem::realDataItem(), SessionItem::setItemValue(), Data1DViewItem::T_DATA_PROPERTIES, JobItem::T_DATAVIEW, and ComboProperty::variant().

Referenced by setupJobItemForFit().

Here is the call graph for this function:

◆ muteMagnetizationData()

void JobModelFunctions::muteMagnetizationData ( JobItem jobItem)

Definition at line 179 of file JobModelFunctions.cpp.

180 {
181  auto container =
183  for (auto item : container->getItems(MaterialItemContainer::T_MATERIALS))
185 
186  auto sample = static_cast<MultiLayerItem*>(jobItem->getItem(JobItem::T_SAMPLE));
188 }
static const QString T_SAMPLE
Definition: JobItem.h:47
static const QString T_MATERIAL_CONTAINER
Definition: JobItem.h:48
static const QString T_MATERIALS
static const QString P_MAGNETIZATION
Definition: MaterialItem.h:26
static const QString P_EXTERNAL_FIELD
void setVisible(bool enabled)
Flags accessors.
SessionItem * getItem(const QString &tag="", int row=0) const
Returns item in given row of given tag.

References SessionItem::getItem(), MultiLayerItem::P_EXTERNAL_FIELD, MaterialItem::P_MAGNETIZATION, SessionItem::setVisible(), JobItem::T_MATERIAL_CONTAINER, MaterialItemContainer::T_MATERIALS, and JobItem::T_SAMPLE.

Referenced by JobModel::addJob().

Here is the call graph for this function:

◆ setupJobItemForFit()

void JobModelFunctions::setupJobItemForFit ( JobItem jobItem,
const RealDataItem realDataItem 
)

Setups JobItem for fit.

Definition at line 160 of file JobModelFunctions.cpp.

161 {
162  if (!jobItem->instrumentItem())
163  throw GUIHelpers::Error("JobModelFunctions::processInstrumentLink() -> Error. "
164  "No instrument.");
165 
166  copyRealDataItem(jobItem, realDataItem);
167  processInstrumentLink(jobItem);
168  copyMasksToInstrument(jobItem);
169 
170  // TODO: remove if when other simulation types are ready for roi & masks
171  if (jobItem->instrumentItem()->is<GISASInstrumentItem>())
172  cropRealData(jobItem);
173  if (jobItem->instrumentItem()->is<SpecularInstrumentItem>())
174  initDataView(jobItem);
175 
176  createFitContainers(jobItem);
177 }
InstrumentItem * instrumentItem()
Definition: JobItem.cpp:224
bool is() const
Definition: SessionItem.h:175
void copyRealDataItem(JobItem *jobItem, const RealDataItem *realDataItem)
Copy RealDataItem to jobItem intended for fitting.
void initDataView(JobItem *jobItem)
Initializes Data1DViewItem and assigns it to the passed JobItem.

References copyRealDataItem(), initDataView(), JobItem::instrumentItem(), and SessionItem::is().

Referenced by JobModel::addJob().

Here is the call graph for this function:

◆ setupJobItemInstrument()

void JobModelFunctions::setupJobItemInstrument ( JobItem jobItem,
const InstrumentItem from 
)

Properly copies instrument into job item.

Definition at line 112 of file JobModelFunctions.cpp.

113 {
114  auto model = jobItem->model();
115  auto copiedInstrument = model->copyItem(from, jobItem, JobItem::T_INSTRUMENT);
116  copiedInstrument->setItemName(from->modelType());
117  copiedInstrument->setId(GUIHelpers::createUuid());
119 
120  auto spec_to = dynamic_cast<SpecularInstrumentItem*>(copiedInstrument);
121  if (!spec_to)
122  return;
123 
124  // updating filename
126  spec_to->beamItem()->updateFileName(filename);
127 
128  // copying axis data
129  auto spec_from = static_cast<const SpecularInstrumentItem*>(from);
130  auto axis_origin = getPointwiseAxisItem(spec_from);
131  const QString current_axis_type = spec_from->beamItem()->inclinationAxisGroup()->currentType();
132  if (current_axis_type == "PointwiseAxis")
133  spec_to->beamItem()->updateToData(*axis_origin->axis(), axis_origin->getUnitsLabel());
134  else if (axis_origin->containsNonXMLData())
135  getPointwiseAxisItem(spec_to)->init(*axis_origin->axis(), axis_origin->getUnitsLabel());
136 }
static const QString T_INSTRUMENT
Definition: JobItem.h:49
static const QString P_INSTRUMENT_NAME
Definition: JobItem.h:38
QString itemName() const
Get item name, return display name if no name is set.
bool setValue(QVariant value)
Set value, ensure that variant types match.
std::string filename(const std::string &path)
Returns path without directory part ("Foo/Bar/Doz.int.gz" -> "Doz.int.gz")
QString createUuid()
Definition: GUIHelpers.cpp:242
QString instrumentDataFileName(const InstrumentItem &instrumentItem)

References SessionModel::copyItem(), GUIHelpers::createUuid(), FileSystemUtils::filename(), SessionItem::getItem(), ItemFileNameUtils::instrumentDataFileName(), SessionItem::itemName(), SessionItem::model(), SessionItem::modelType(), JobItem::P_INSTRUMENT_NAME, SessionItem::setValue(), and JobItem::T_INSTRUMENT.

Referenced by JobModel::addJob().

Here is the call graph for this function:

◆ setupJobItemOutput()

void JobModelFunctions::setupJobItemOutput ( JobItem jobItem)

Setup items intended for storing results of the job.

Definition at line 140 of file JobModelFunctions.cpp.

141 {
142  const bool isSpecularInstrument = jobItem->instrumentItem()->is<SpecularInstrumentItem>();
143  const bool isIntensityInstrument = jobItem->instrumentItem()->is<GISASInstrumentItem>()
145  || jobItem->instrumentItem()->is<DepthProbeInstrumentItem>();
146 
147  ASSERT(isSpecularInstrument || isIntensityInstrument);
148 
149  if (isSpecularInstrument)
150  jobItem->model()->insertItem<SpecularDataItem>(jobItem, -1, JobItem::T_OUTPUT);
151  else if (isIntensityInstrument)
152  jobItem->model()->insertItem<IntensityDataItem>(jobItem, -1, JobItem::T_OUTPUT);
153  else
154  throw GUIHelpers::Error("JobModelFunctions::setupJobItemOutput() -> Error. "
155  "Unsupported instrument type");
156 }
static const QString T_OUTPUT
Definition: JobItem.h:50

References ASSERT, SessionModel::insertItem(), JobItem::instrumentItem(), SessionItem::is(), SessionItem::model(), and JobItem::T_OUTPUT.

Referenced by JobModel::addJob().

Here is the call graph for this function:

◆ setupJobItemSampleData()

void JobModelFunctions::setupJobItemSampleData ( JobItem jobItem,
const MultiLayerItem sampleItem 
)

Properly copies sample and materials into JobItem.

Definition at line 86 of file JobModelFunctions.cpp.

87 {
88  auto model = jobItem->model();
89  auto multilayer = model->copyItem(sampleItem, jobItem, JobItem::T_SAMPLE);
90  multilayer->setItemName("MultiLayer");
91 
92  // copying materials
93  auto container = jobItem->model()->insertItem<MaterialItemContainer>(
94  jobItem, -1, JobItem::T_MATERIAL_CONTAINER);
95 
96  std::map<MaterialItem*, QString> materials;
97  for (auto property_item : multilayer->materialPropertyItems()) {
98  auto material_property = property_item->value().value<ExternalProperty>();
99  auto material = MaterialItemUtils::findMaterial(material_property);
100 
101  auto iter = materials.find(material);
102  if (iter == materials.end()) {
103  auto material_copy = container->insertCopy(material);
104  materials.insert({material, material_copy->identifier()});
105  material_property.setIdentifier(material_copy->identifier());
106  } else
107  material_property.setIdentifier(iter->second);
108  property_item->setValue(material_property.variant());
109  }
110 }
The ExternalProperty class defines custom QVariant property to carry the text, color and an identifie...
QString identifier() const
QVariant value() const
Get value.
MaterialItem * findMaterial(const ExternalProperty &material_property)

References SessionModel::copyItem(), MaterialItemUtils::findMaterial(), ExternalProperty::identifier(), SessionModel::insertItem(), SessionItem::model(), JobItem::T_MATERIAL_CONTAINER, JobItem::T_SAMPLE, and SessionItem::value().

Referenced by JobModel::addJob().

Here is the call graph for this function: