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

Contains set of convenience methods to set data to the IntensityDataItem from domain simulation. More...

Functions

ComboProperty availableUnits (const IUnitConverter &converter)
 
Axes::Units axesUnitsFromName (const QString &name)
 returns domain axes units type from their GUI name More...
 
void createDefaultDetectorMap (DataItem *intensityItem, const InstrumentItem *instrumentItem)
 
QString nameFromAxesUnits (Axes::Units units)
 returns axes units names from their domain counterpart More...
 
void setIntensityItemAxesUnits (DataItem *intensityItem, const InstrumentItem *instrumentItem)
 Sets axes units suitable for given instrument. More...
 
void setIntensityItemAxesUnits (DataItem *intensityItem, const IUnitConverter &converter)
 
void setResults (DataItem *intensityItem, const ISimulation *simulation)
 Sets simulation results into the DataItem. More...
 
void updateDataAxes (DataItem *intensityItem, const InstrumentItem *instrumentItem)
 updates axes of OutputData in IntensityData item More...
 

Detailed Description

Contains set of convenience methods to set data to the IntensityDataItem from domain simulation.

Used to modify OutputData's axes units as requested by IntensityDataItem.

Function Documentation

◆ availableUnits()

ComboProperty JobItemUtils::availableUnits ( const IUnitConverter converter)

Definition at line 128 of file JobItemUtils.cpp.

129 {
130  ComboProperty result;
131  for (auto units : converter.availableUnits()) {
132  auto unit_name = nameFromAxesUnits(units);
133  if (unit_name != "")
134  result << unit_name;
135  }
136 
137  result.setValue(nameFromAxesUnits(converter.defaultUnits()));
138  return result;
139 }
Custom property to define list of string values with multiple selections.
Definition: ComboProperty.h:25
void setValue(const QString &name)
virtual Axes::Units defaultUnits() const =0
virtual std::vector< Axes::Units > availableUnits() const =0
QString nameFromAxesUnits(Axes::Units units)
returns axes units names from their domain counterpart

References IUnitConverter::availableUnits(), IUnitConverter::defaultUnits(), nameFromAxesUnits(), and ComboProperty::setValue().

Referenced by JobModelFunctions::initDataView(), and setIntensityItemAxesUnits().

Here is the call graph for this function:

◆ axesUnitsFromName()

Axes::Units JobItemUtils::axesUnitsFromName ( const QString &  name)

returns domain axes units type from their GUI name

Correspondance of GUI axes units names to their domain counterpart.

Definition at line 82 of file JobItemUtils.cpp.

83 {
84  return units_from_names.at(name);
85 }
QString const & name(EShape k)
Definition: particles.cpp:21

References RealSpace::Particles::name().

Referenced by SpecularInstrumentItem::createUnitConverter(), setResults(), and updateDataAxes().

Here is the call graph for this function:

◆ createDefaultDetectorMap()

void JobItemUtils::createDefaultDetectorMap ( DataItem intensityItem,
const InstrumentItem instrumentItem 
)

Definition at line 105 of file JobItemUtils.cpp.

107 {
108  const auto converter = DomainObjectBuilder::createUnitConverter(instrumentItem);
109  auto output_data = UnitConverterUtils::createOutputData(*converter, converter->defaultUnits());
110  intensityItem->setOutputData(output_data.release());
111  setIntensityItemAxesUnits(intensityItem, *converter);
112  updateAxesTitle(intensityItem, *converter, converter->defaultUnits());
113 }
virtual void setOutputData(OutputData< double > *data)=0
The given pointer becomes owned by this class!!
Definition: DataItem.cpp:24
void updateAxesTitle(Data1DViewItem *view_item)
std::unique_ptr< IUnitConverter > createUnitConverter(const InstrumentItem *instrumentItem)
Creates a unit converter corresponding to the given instrument item.
void setIntensityItemAxesUnits(DataItem *intensityItem, const InstrumentItem *instrumentItem)
Sets axes units suitable for given instrument.
std::unique_ptr< OutputData< double > > createOutputData(const IUnitConverter &converter, Axes::Units units)
Returns zero-valued output data array in specified units.

References UnitConverterUtils::createOutputData(), DomainObjectBuilder::createUnitConverter(), setIntensityItemAxesUnits(), DataItem::setOutputData(), and DataViewUtils::updateAxesTitle().

Referenced by DetectorMaskDelegate::createIntensityDataItem().

Here is the call graph for this function:

◆ nameFromAxesUnits()

QString JobItemUtils::nameFromAxesUnits ( Axes::Units  units)

returns axes units names from their domain counterpart

Correspondance of domain detector axes types to their gui counterpart.

Definition at line 74 of file JobItemUtils.cpp.

75 {
76  return names_from_units.find(units) != names_from_units.end() ? names_from_units.at(units)
77  : QString();
78 }

Referenced by availableUnits(), QREDataLoader::createOutputDataFromParsingResult(), and ImportDataInfo::unitsLabel().

◆ setIntensityItemAxesUnits() [1/2]

void JobItemUtils::setIntensityItemAxesUnits ( DataItem intensityItem,
const InstrumentItem instrumentItem 
)

Sets axes units suitable for given instrument.

Definition at line 89 of file JobItemUtils.cpp.

91 {
92  const auto converter = DomainObjectBuilder::createUnitConverter(instrumentItem);
93  if (!converter)
94  return;
95  setIntensityItemAxesUnits(intensityItem, *converter);
96 }

References DomainObjectBuilder::createUnitConverter().

Referenced by createDefaultDetectorMap(), setResults(), and RealDataItem::updateToInstrument().

Here is the call graph for this function:

◆ setIntensityItemAxesUnits() [2/2]

void JobItemUtils::setIntensityItemAxesUnits ( DataItem intensityItem,
const IUnitConverter converter 
)

Definition at line 98 of file JobItemUtils.cpp.

100 {
101  ComboProperty combo = availableUnits(converter);
102  intensityItem->setItemValue(DataItem::P_AXES_UNITS, combo.variant());
103 }
QVariant variant() const
Constructs variant enclosing given ComboProperty.
static const QString P_AXES_UNITS
Definition: DataItem.h:34
void setItemValue(const QString &tag, const QVariant &variant)
Directly set value of item under given tag.
ComboProperty availableUnits(const IUnitConverter &converter)

References availableUnits(), DataItem::P_AXES_UNITS, SessionItem::setItemValue(), and ComboProperty::variant().

Here is the call graph for this function:

◆ setResults()

void JobItemUtils::setResults ( DataItem intensityItem,
const ISimulation simulation 
)

Sets simulation results into the DataItem.

Definition at line 115 of file JobItemUtils.cpp.

116 {
117  const auto sim_result = simulation->result();
118  if (intensityItem->getOutputData() == nullptr) {
119  const auto& converter = sim_result.converter();
120  JobItemUtils::setIntensityItemAxesUnits(intensityItem, converter);
121  updateAxesTitle(intensityItem, converter, converter.defaultUnits());
122  }
123  auto selected_units = JobItemUtils::axesUnitsFromName(intensityItem->selectedAxesUnits());
124  auto data = sim_result.data(selected_units);
125  intensityItem->setOutputData(data.release());
126 }
OutputData< double > * getOutputData()
Definition: DataItem.h:36
QString selectedAxesUnits() const
Definition: DataItem.cpp:87
virtual SimulationResult result() const =0
Returns the results of the simulation in a format that supports unit conversion and export to numpy a...
const IUnitConverter & converter() const
Returns underlying unit converter.
Axes::Units axesUnitsFromName(const QString &name)
returns domain axes units type from their GUI name

References axesUnitsFromName(), SimulationResult::converter(), DataItem::getOutputData(), ISimulation::result(), DataItem::selectedAxesUnits(), setIntensityItemAxesUnits(), DataItem::setOutputData(), and DataViewUtils::updateAxesTitle().

Referenced by JobItem::setResults().

Here is the call graph for this function:

◆ updateDataAxes()

void JobItemUtils::updateDataAxes ( DataItem intensityItem,
const InstrumentItem instrumentItem 
)

updates axes of OutputData in IntensityData item

Updates axes of OutputData in IntensityData item to correspond with ::P_AXES_UNITS selection.

InstrumentItem is used to get domain's detector map for given units.

Definition at line 47 of file JobItemUtils.cpp.

48 {
49  ASSERT(intensityItem);
50 
51  if (!instrumentItem) {
52  // special case when reading old project files: project failed on load instrument
53  // but we want to try to recover the rest.
54  qInfo() << "JobItemUtils::updateDataAxes() -> Error. Absent instrument.";
55  return;
56  }
57 
58  if (!intensityItem->getOutputData())
59  return;
60 
61  Axes::Units requested_units = axesUnitsFromName(intensityItem->selectedAxesUnits());
62 
63  const auto converter = DomainObjectBuilder::createUnitConverter(instrumentItem);
64  auto newData = UnitConverterUtils::createOutputData(*converter.get(), requested_units);
65  newData->setRawDataVector(intensityItem->getOutputData()->getRawDataVector());
66 
67  intensityItem->setOutputData(newData.release());
68  intensityItem->setAxesRangeToData();
69  updateAxesTitle(intensityItem, *converter, requested_units);
70 }
#define ASSERT(condition)
Definition: Assert.h:31
virtual void setAxesRangeToData()=0
std::vector< T > getRawDataVector() const
Returns copy of raw data vector.
Definition: OutputData.h:334

References ASSERT, axesUnitsFromName(), UnitConverterUtils::createOutputData(), DomainObjectBuilder::createUnitConverter(), DataItem::getOutputData(), OutputData< T >::getRawDataVector(), DataItem::selectedAxesUnits(), DataItem::setAxesRangeToData(), DataItem::setOutputData(), and DataViewUtils::updateAxesTitle().

Referenced by IntensityDataItem::updateAxesUnits(), and SpecularDataItem::updateAxesUnits().

Here is the call graph for this function: