33 const QString background_group_label =
"Type";
34 const QStringList instrument_names{
"GISASInstrument",
"OffSpecularInstrument",
35 "SpecularInstrument"};
36 void addAxisGroupProperty(
SessionItem* parent,
const QString& tag);
46 if (list.back().endsWith(
P_BACKGROUND) && list.size() == 2) {
47 result << list[0] << list[1];
50 if (instrument_names.contains(result.back())) {
52 result <<
"Instrument";
80 return item<BeamItem>(
P_BEAM);
100 std::unique_ptr<Instrument> result(
new Instrument);
103 result->setBeam(*beam);
117 item->setDisplayName(background_group_label);
118 item->setToolTip(
"Background type");
123 addProperty<SpecularBeamItem>(
P_BEAM);
126 item<SpecularBeamItem>(
P_BEAM)->updateFileName(
132 return item<SpecularBeamItem>(
P_BEAM);
150 if (
shape().size() !=
item->shape().size())
151 throw GUIHelpers::Error(
"Error in SpecularInstrumentItem::updateToRealData: The type "
152 "of instrument is incompatible with passed data shape.");
154 const auto& data =
item->nativeOutputData()->axis(0);
160 const QString native_units =
item->nativeDataUnits();
161 if (native_units ==
"nbins") {
168 if (axis_item->getUnitsLabel() != native_units)
171 auto instrument_axis = axis_item->
axis();
172 if (!instrument_axis)
175 if (!
item->hasNativeData())
178 const auto& native_axis =
item->nativeOutputData()->axis(0);
179 return *instrument_axis == native_axis;
189 if (!pointwise_axis->containsNonXMLData())
192 return std::make_unique<UnitConverterConvSpec>(instrument->beam(), *pointwise_axis->axis(),
195 return std::make_unique<UnitConverterConvSpec>(
196 instrument->beam(), *axis_item->createAxis(1.0), Axes::Units::DEGREES);
208 addProperty<GISASBeamItem>(
P_BEAM);
247 result->setDetector(*detector);
257 return {detector_item->xSize(), detector_item->ySize()};
265 const auto data_shape =
item->shape();
266 if (
shape().size() != data_shape.size())
267 throw GUIHelpers::Error(
"Error in GISASInstrumentItem::updateToRealData: The type of "
268 "instrument is incompatible with passed data shape.");
285 beam_item->setInclinationAngle(inclination_item->value().toDouble());
287 inclination_item->mapper()->setOnValueChange([beam_item, inclination_item]() {
288 beam_item->setInclinationAngle(inclination_item->value().toDouble());
294 const int x_size = item<BasicAxisItem>(
P_ALPHA_AXIS)->binCount();
296 return {x_size, detector_item->ySize()};
304 const auto data_shape = dataItem->
shape();
305 if (
shape().size() != data_shape.size())
306 throw GUIHelpers::Error(
"Error in OffSpecularInstrumentItem::updateToRealData: The type of "
307 "instrument is incompatible with passed data shape.");
309 item<BasicAxisItem>(
P_ALPHA_AXIS)->setBinCount(data_shape[0]);
315 return "OffSpecular";
319 void addAxisGroupProperty(
SessionItem* parent,
const QString& tag)
322 axisItem->
setToolTip(
"Incoming alpha range [deg]");
328 axisItem->setTitle(
"alpha_i");
329 axisItem->setLowerBound(0.0);
330 axisItem->setUpperBound(10.0);
Defines BackgroundItem classes.
Defines BeamItem hierarchy.
Defines classes DetectorItems.
Defines class GUIHelpers functions.
Defines interface IDetector2D.
Defines InstrumentItems classes.
Defines class Instrument.
Defines auxiliary functions in ItemFileNameUtils namespace.
Defines class JobItemUtils.
Defines MaskItems classes.
Defines pointwise axis item.
Defines class RealDataItem.
Defines class SessionModel.
Defines UnitConverter1D class and derived classes.
static const QString P_NBINS
static const QString P_MAX_DEG
static const QString P_TITLE
static const QString P_MIN_DEG
std::unique_ptr< Beam > createBeam() const
static const QString P_INCLINATION_ANGLE
virtual void setXSize(int nx)=0
sets the size of x-axis of the detector
void importMasks(const MaskContainerItem *maskContainer)
std::unique_ptr< IDetector2D > createDetector() const
virtual void setYSize(int ny)=0
sets the size of y-axis of the detector
std::vector< int > shape() const override
virtual QString defaultName() const override
The default user visible name when creating an instrument.
void updateToRealData(const RealDataItem *item) override
GroupItem * detectorGroup()
void setDetectorGroup(const QString &modelType)
void clearMasks() override
Instrument2DItem(const QString &modelType)
DetectorItem * detectorItem() const
std::unique_ptr< Instrument > createInstrument() const override
~Instrument2DItem() override
static const QString P_DETECTOR
void importMasks(const MaskContainerItem *maskContainer) override
GroupItem * backgroundGroup()
void setName(const QString &instrumentName)
void initBackgroundGroup()
static const QString P_IDENTIFIER
InstrumentItem(const QString &modelType)
static const QString P_BEAM
void setId(const QString &id)
virtual std::vector< int > shape() const =0
virtual BeamItem * beamItem() const
virtual std::unique_ptr< Instrument > createInstrument() const =0
static const QString P_BACKGROUND
virtual bool alignedWith(const RealDataItem *item) const
BackgroundItem * backgroundItem() const
QStringList translateList(const QStringList &list) const override
Assembles beam, detector and their relative positions with respect to the sample.
Container holding various masks as children.
OffSpecularInstrumentItem()
static const QString P_ALPHA_AXIS
void updateToRealData(const RealDataItem *item) override
std::vector< int > shape() const override
virtual QString defaultName() const override
The default user visible name when creating an instrument.
Item for non-uniform axis with specified coordinates.
const IAxis * axis() const
The RealDataItem class represents intensity data imported from file and intended for fitting.
std::vector< int > shape() const
Returns the shape of underlying data item.
QString itemName() const
Get item name, return display name if no name is set.
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.
void setVisible(bool enabled)
Flags accessors.
virtual QStringList translateList(const QStringList &list) const
QVariant getItemValue(const QString &tag) const
Directly access value of item under given tag.
SessionItem * addGroupProperty(const QString &groupTag, const QString &groupType)
Creates new group item and register new tag, returns GroupItem.
void setDefaultTag(const QString &tag)
Set default tag.
T * item(const QString &tag) const
void setItemValue(const QString &tag, const QVariant &variant)
Directly set value of item under given tag.
SessionItem * setGroupProperty(const QString &groupTag, const QString &modelType) const
Set the current type of group item.
SessionItem & setToolTip(const QString &tooltip)
QString modelType() const
Get model type.
SessionItem * getItem(const QString &tag="", int row=0) const
Returns item in given row of given tag.
BasicAxisItem * currentInclinationAxisItem()
void updateToData(const IAxis &axis, QString units)
std::unique_ptr< Instrument > createInstrument() const override
~SpecularInstrumentItem() override
SpecularBeamItem * beamItem() const override
std::vector< int > shape() const override
virtual QString defaultName() const override
The default user visible name when creating an instrument.
void updateToRealData(const RealDataItem *item) override
bool alignedWith(const RealDataItem *item) const override
std::unique_ptr< IUnitConverter > createUnitConverter() const
QString instrumentDataFileName(const InstrumentItem &instrumentItem)
Axes::Units axesUnitsFromName(const QString &name)
returns domain axes units type from their GUI name