diff --git a/GUI/coregui/Models/BeamItems.cpp b/GUI/coregui/Models/BeamItems.cpp index e16ff56cff4b86dbefb4cf91a6130743bbcb496d..0e1373d8273691323b277f9653e3c148d6ddbbb3 100644 --- a/GUI/coregui/Models/BeamItems.cpp +++ b/GUI/coregui/Models/BeamItems.cpp @@ -63,6 +63,11 @@ void BeamItem::setIntensity(double value) setItemValue(P_INTENSITY, value); } +SessionItem* BeamItem::intensityItem() const +{ + return getItem(P_INTENSITY); +} + double BeamItem::wavelength() const { return item<BeamWavelengthItem>(P_WAVELENGTH)->wavelength(); @@ -73,11 +78,21 @@ void BeamItem::setWavelength(double value) item<BeamWavelengthItem>(P_WAVELENGTH)->resetToValue(value); } +BeamWavelengthItem* BeamItem::wavelengthItem() const +{ + return item<BeamWavelengthItem>(P_WAVELENGTH); +} + void BeamItem::setInclinationAngle(double value) { item<BeamDistributionItem>(P_INCLINATION_ANGLE)->resetToValue(value); } +BeamDistributionItem* BeamItem::inclinationAngleItem() const +{ + return item<BeamDistributionItem>(P_INCLINATION_ANGLE); +} + double BeamItem::getAzimuthalAngle() const { return item<BeamAzimuthalAngleItem>(P_AZIMUTHAL_ANGLE)->azimuthalAngle(); @@ -88,6 +103,16 @@ void BeamItem::setAzimuthalAngle(double value) item<BeamDistributionItem>(P_AZIMUTHAL_ANGLE)->resetToValue(value); } +BeamAzimuthalAngleItem* BeamItem::azimuthalAngleItem() const +{ + return item<BeamAzimuthalAngleItem>(P_AZIMUTHAL_ANGLE); +} + +VectorItem* BeamItem::polarizationItem() const +{ + return item<VectorItem>(P_POLARIZATION); +} + std::unique_ptr<Beam> BeamItem::createBeam() const { double lambda = wavelength(); @@ -97,31 +122,49 @@ std::unique_ptr<Beam> BeamItem::createBeam() const auto result = std::make_unique<Beam>(intensity(), lambda, Direction(inclination_angle, azimuthal_angle)); - result->setPolarization(item<VectorItem>(P_POLARIZATION)->getVector()); + result->setPolarization(polarizationItem()->getVector()); return result; } +template<typename T> void BeamItem::initWavelength() +{ + static_assert(std::is_base_of<BeamWavelengthItem,T>::value, + "Class must be derived from BeamWavelengthItem"); + + addProperty<T>(P_WAVELENGTH); +} + +template<typename T> void BeamItem::initInclinationAngle() +{ + static_assert(std::is_base_of<BeamDistributionItem,T>::value, + "Class must be derived from BeamDistributionItem"); + + addProperty<T>(P_INCLINATION_ANGLE); +} + // Specular beam item /* ------------------------------------------------------------------------- */ const QString SpecularBeamItem::P_FOOPTPRINT = "Footprint"; +const QString SpecularBeamItem::M_TYPE = "SpecularBeam"; + const QString footprint_group_label("Type"); -SpecularBeamItem::SpecularBeamItem() : BeamItem("SpecularBeam") +SpecularBeamItem::SpecularBeamItem() : BeamItem(M_TYPE) { - addProperty<SpecularBeamInclinationItem>(P_INCLINATION_ANGLE); - addProperty<SpecularBeamWavelengthItem>(P_WAVELENGTH); + initInclinationAngle<SpecularBeamInclinationItem>(); + initWavelength<SpecularBeamWavelengthItem>(); - getItem(P_AZIMUTHAL_ANGLE)->setVisible(false); - getItem(P_POLARIZATION)->setVisible(false); + azimuthalAngleItem()->setVisible(false); + polarizationItem()->setVisible(false); auto item = addGroupProperty(P_FOOPTPRINT, "Footprint group"); item->setDisplayName(footprint_group_label); item->setToolTip("Footprint type"); - getItem(P_WAVELENGTH) + wavelengthItem() ->mapper() ->setOnChildPropertyChange( [this](SessionItem*, QString property) { @@ -152,7 +195,7 @@ void SpecularBeamItem::setInclinationAngle(double value) GroupItem* SpecularBeamItem::inclinationAxisGroup() { return dynamic_cast<GroupItem*>( - getItem(P_INCLINATION_ANGLE)->getItem(SpecularBeamInclinationItem::P_ALPHA_AXIS)); + inclinationAngleItem()->getItem(SpecularBeamInclinationItem::P_ALPHA_AXIS)); } BasicAxisItem* SpecularBeamItem::currentInclinationAxisItem() @@ -165,9 +208,28 @@ FootprintItem* SpecularBeamItem::currentFootprintItem() const return &groupItem<FootprintItem>(P_FOOPTPRINT); } + +void SpecularBeamItem::setGaussianFootprint(double value) +{ + setGroupProperty(P_FOOPTPRINT, "GaussianFootrpint") + ->setItemValue(FootprintGaussianItem::P_VALUE, value); +} + +void SpecularBeamItem::setSquareFootprint(double value) +{ + setGroupProperty(P_FOOPTPRINT, "SquareFootprint") + ->setItemValue(FootprintSquareItem::P_VALUE, value); +} + +SessionItem* SpecularBeamItem::footprintGroupItem() const +{ + return getItem(P_FOOPTPRINT); +} + void SpecularBeamItem::updateFileName(const QString& filename) { - item<SpecularBeamInclinationItem>(BeamItem::P_INCLINATION_ANGLE)->updateFileName(filename); + dynamic_cast<SpecularBeamInclinationItem*>(inclinationAngleItem()) + ->updateFileName(filename); } void SpecularBeamItem::updateToData(const IAxis& axis, QString units) @@ -189,7 +251,7 @@ void SpecularBeamItem::updateToData(const IAxis& axis, QString units) void SpecularBeamItem::updateWavelength() { auto item = inclinationAxisGroup()->currentItem(); - auto wl_item = static_cast<SpecularBeamWavelengthItem*>(getItem(P_WAVELENGTH)); + auto wl_item = static_cast<SpecularBeamWavelengthItem*>(wavelengthItem()); if (auto axis_item = dynamic_cast<PointwiseAxisItem*>(item)) { auto axis = axis_item->axis(); if (axis && axis_item->getUnitsLabel() == "q-space") @@ -201,17 +263,20 @@ void SpecularBeamItem::updateWavelength() // GISAS beam item /* ------------------------------------------------------------------------- */ -GISASBeamItem::GISASBeamItem() : BeamItem("GISASBeam") +const QString GISASBeamItem::M_TYPE = "GISASBeam"; + +GISASBeamItem::GISASBeamItem() : BeamItem(M_TYPE) { - addProperty<BeamInclinationAngleItem>(P_INCLINATION_ANGLE); - addProperty<BeamWavelengthItem>(P_WAVELENGTH); + initInclinationAngle<BeamInclinationAngleItem>(); + initWavelength<BeamWavelengthItem>(); } GISASBeamItem::~GISASBeamItem() = default; double GISASBeamItem::getInclinationAngle() const { - return item<BeamInclinationAngleItem>(P_INCLINATION_ANGLE)->inclinationAngle(); + return dynamic_cast<BeamInclinationAngleItem*>(inclinationAngleItem()) + ->inclinationAngle(); } namespace { diff --git a/GUI/coregui/Models/BeamItems.h b/GUI/coregui/Models/BeamItems.h index 53258894aa9c85dd5cac2a53c2c549a373632054..4f61302a4ab9d10e9ccb68b70d68e02cee1a08c4 100644 --- a/GUI/coregui/Models/BeamItems.h +++ b/GUI/coregui/Models/BeamItems.h @@ -19,52 +19,76 @@ class BasicAxisItem; class Beam; +class BeamAzimuthalAngleItem; +class BeamDistributionItem; +class BeamWavelengthItem; class FootprintItem; class GroupItem; class IAxis; +class VectorItem; class BA_CORE_API_ BeamItem : public SessionItem { -public: +private: static const QString P_INTENSITY; static const QString P_WAVELENGTH; static const QString P_INCLINATION_ANGLE; static const QString P_AZIMUTHAL_ANGLE; static const QString P_POLARIZATION; +public: ~BeamItem() override; double intensity() const; void setIntensity(double value); + SessionItem* intensityItem() const; double wavelength() const; void setWavelength(double value); - + BeamWavelengthItem* wavelengthItem() const; + virtual double getInclinationAngle() const = 0; virtual void setInclinationAngle(double value); - + BeamDistributionItem* inclinationAngleItem() const; + double getAzimuthalAngle() const; void setAzimuthalAngle(double value); + BeamAzimuthalAngleItem* azimuthalAngleItem() const; + + VectorItem* polarizationItem() const; std::unique_ptr<Beam> createBeam() const; protected: explicit BeamItem(const QString& beam_model); + + template<typename T> void initWavelength(); + template<typename T> void initInclinationAngle(); }; class BA_CORE_API_ SpecularBeamItem : public BeamItem { + public: + + static const QString M_TYPE; + +private: static const QString P_FOOPTPRINT; +public: + SpecularBeamItem(); ~SpecularBeamItem() override; double getInclinationAngle() const override; void setInclinationAngle(double value) override; - GroupItem* inclinationAxisGroup(); BasicAxisItem* currentInclinationAxisItem(); + FootprintItem* currentFootprintItem() const; - + void setGaussianFootprint(double value); + void setSquareFootprint(double value); + SessionItem* footprintGroupItem() const; + void updateFileName(const QString& filename); void updateToData(const IAxis& axis, QString units); @@ -74,6 +98,9 @@ private: class BA_CORE_API_ GISASBeamItem : public BeamItem { public: + + static const QString M_TYPE; + GISASBeamItem(); ~GISASBeamItem() override; diff --git a/GUI/coregui/Models/InstrumentItems.cpp b/GUI/coregui/Models/InstrumentItems.cpp index 3f4a84e7d48fb439ce04cbdbb8106e95e0f3076c..42ebba51ee84c1d6d97f811f816c2cc48916ce01 100644 --- a/GUI/coregui/Models/InstrumentItems.cpp +++ b/GUI/coregui/Models/InstrumentItems.cpp @@ -309,7 +309,7 @@ OffSpecularInstrumentItem::OffSpecularInstrumentItem() : Instrument2DItem("OffSp auto inclination_item = getItem(P_ALPHA_AXIS)->getItem(BasicAxisItem::P_MIN_DEG); auto beam_item = beamItem(); beam_item->setInclinationAngle(inclination_item->value().toDouble()); - beam_item->getItem(BeamItem::P_INCLINATION_ANGLE)->setEnabled(false); + beam_item->inclinationAngleItem()->setEnabled(false); inclination_item->mapper()->setOnValueChange([beam_item, inclination_item]() { beam_item->setInclinationAngle(inclination_item->value().toDouble()); }); @@ -422,12 +422,12 @@ std::unique_ptr<DepthProbeSimulation> DepthProbeInstrumentItem::createSimulation simulation->setZSpan(depthAxis->size(), depthAxis->lowerBound(), depthAxis->upperBound()); TransformToDomain::setBeamDistribution( - ParameterDistribution::BeamWavelength, - *beamItem()->item<BeamWavelengthItem>(SpecularBeamItem::P_WAVELENGTH), *simulation.get()); + ParameterDistribution::BeamWavelength, *beamItem()->wavelengthItem(), + *simulation.get()); TransformToDomain::setBeamDistribution( ParameterDistribution::BeamInclinationAngle, - *beamItem()->item<SpecularBeamInclinationItem>(SpecularBeamItem::P_INCLINATION_ANGLE), + *beamItem()->inclinationAngleItem(), *simulation.get()); return simulation; diff --git a/GUI/coregui/Models/InstrumentModel.cpp b/GUI/coregui/Models/InstrumentModel.cpp index 34368ff1f2dd7bee95d42a8fb7bfd78c6603421c..1dee3986b18ff3b15bc082b63009bceef2e41364 100644 --- a/GUI/coregui/Models/InstrumentModel.cpp +++ b/GUI/coregui/Models/InstrumentModel.cpp @@ -40,7 +40,7 @@ QVector<SessionItem*> InstrumentModel::nonXMLItems() const for (auto instrument_item : topItems<SpecularInstrumentItem>()) { auto axis_group = instrument_item->beamItem() - ->getItem(BeamItem::P_INCLINATION_ANGLE) + ->inclinationAngleItem() ->getItem(SpecularBeamInclinationItem::P_ALPHA_AXIS); if (auto pointwise_axis = axis_group->getChildOfType("PointwiseAxis")) diff --git a/GUI/coregui/Models/ItemCatalog.cpp b/GUI/coregui/Models/ItemCatalog.cpp index 1f585bd88bf2803e5042cf9b725bfe93f566f47d..ac53408bc967257a12fc302c1cdd7e2886ba06c3 100644 --- a/GUI/coregui/Models/ItemCatalog.cpp +++ b/GUI/coregui/Models/ItemCatalog.cpp @@ -80,8 +80,8 @@ ItemCatalog::ItemCatalog() add("GISASInstrument", create_new<GISASInstrumentItem>); add("OffSpecularInstrument", create_new<OffSpecularInstrumentItem>); add("SpecularInstrument", create_new<SpecularInstrumentItem>); - add("GISASBeam", create_new<GISASBeamItem>); - add("SpecularBeam", create_new<SpecularBeamItem>); + add(GISASBeamItem::M_TYPE, create_new<GISASBeamItem>); + add(SpecularBeamItem::M_TYPE, create_new<SpecularBeamItem>); add("NoBackground", create_new<BackgroundNoneItem>); add("ConstantBackground", create_new<ConstantBackgroundItem>); add("PoissonNoiseBackground", create_new<PoissonNoiseBackgroundItem>); diff --git a/GUI/coregui/Models/TransformFromDomain.cpp b/GUI/coregui/Models/TransformFromDomain.cpp index 522efdfd71a215836eabf0491cc622a5aa49082d..2c2b8db6d1e3ee0e2d91104310e5d8b85e95bcfc 100644 --- a/GUI/coregui/Models/TransformFromDomain.cpp +++ b/GUI/coregui/Models/TransformFromDomain.cpp @@ -35,6 +35,7 @@ #include "GUI/coregui/Models/AxesItems.h" #include "GUI/coregui/Models/BackgroundItems.h" #include "GUI/coregui/Models/BeamAngleItems.h" +#include "GUI/coregui/Models/BeamWavelengthItem.h" #include "GUI/coregui/Models/FTDecayFunctionItems.h" #include "GUI/coregui/Models/FTDistributionItems.h" #include "GUI/coregui/Models/FootprintItems.h" @@ -74,9 +75,9 @@ void setDistribution(SessionItem* item, ParameterDistribution par_distr, QString double factor = 1.0); void addDistributionToBeamItem(ParameterDistribution::WhichParameter which, - const QString& item_name, const ParameterDistribution& distribution, - const BeamItem* beam_item); - + BeamDistributionItem* item, + const ParameterDistribution& distribution); + void addRangedDistributionToItem(SessionItem* item, const IRangedDistribution& ranged, double mean, double std_dev); } // namespace @@ -222,16 +223,18 @@ void TransformFromDomain::setGISASBeamItem(BeamItem* beam_item, const GISASSimul const std::vector<ParameterDistribution> distributions = simulation.getDistributionHandler().getDistributions(); for (size_t i = 0; i < distributions.size(); ++i) { - addDistributionToBeamItem(ParameterDistribution::BeamWavelength, BeamItem::P_WAVELENGTH, - distributions[i], beam_item); + addDistributionToBeamItem(ParameterDistribution::BeamWavelength, + beam_item->wavelengthItem(), distributions[i]); addDistributionToBeamItem(ParameterDistribution::BeamInclinationAngle, - BeamItem::P_INCLINATION_ANGLE, distributions[i], beam_item); + beam_item->inclinationAngleItem(), + distributions[i]); addDistributionToBeamItem(ParameterDistribution::BeamAzimuthalAngle, - BeamItem::P_AZIMUTHAL_ANGLE, distributions[i], beam_item); + beam_item->azimuthalAngleItem(), + distributions[i]); } // polarization parameters - beam_item->item<VectorItem>(BeamItem::P_POLARIZATION)->setVector(beam.getBlochVector()); + beam_item->polarizationItem()->setVector(beam.getBlochVector()); } void TransformFromDomain::setOffSpecularBeamItem(BeamItem* beam_item, @@ -269,14 +272,14 @@ void TransformFromDomain::setSpecularBeamItem(SpecularBeamItem* beam_item, if (!resolution->empty()) { double mean = scan->wavelength(); double std_dev = resolution->stdDevs(mean, 1).front(); - addRangedDistributionToItem(beam_item->getItem(SpecularBeamItem::P_WAVELENGTH), + addRangedDistributionToItem(beam_item->wavelengthItem(), *resolution->distribution(), mean, std_dev); } resolution = scan->angleResolution(); if (resolution && !resolution->empty()) { double std_dev = resolution->stdDevs(0.0, 1).front(); - addRangedDistributionToItem(beam_item->getItem(SpecularBeamItem::P_INCLINATION_ANGLE), + addRangedDistributionToItem(beam_item->inclinationAngleItem(), *resolution->distribution(), 0.0, std_dev); } } @@ -573,15 +576,9 @@ void TransformFromDomain::setFootprintFactor(const IFootprintFactor* footprint, if (!footprint) return; if (const auto gaussian_fp = dynamic_cast<const FootprintGauss*>(footprint)) { - auto gaussian_fp_item = - beam_item->setGroupProperty(SpecularBeamItem::P_FOOPTPRINT, "GaussianFootrpint"); - const double value = gaussian_fp->widthRatio(); - gaussian_fp_item->setItemValue(FootprintGaussianItem::P_VALUE, value); + beam_item->setGaussianFootprint(gaussian_fp->widthRatio()); } else if (const auto square_fp = dynamic_cast<const FootprintSquare*>(footprint)) { - auto square_fp_item = - beam_item->setGroupProperty(SpecularBeamItem::P_FOOPTPRINT, "SquareFootprint"); - const double value = square_fp->widthRatio(); - square_fp_item->setItemValue(FootprintSquareItem::P_VALUE, value); + beam_item->setSquareFootprint(square_fp->widthRatio()); } } @@ -808,14 +805,13 @@ void setDistribution(SessionItem* part_distr_item, ParameterDistribution par_dis } void addDistributionToBeamItem(ParameterDistribution::WhichParameter which, - const QString& item_name, const ParameterDistribution& distribution, - const BeamItem* beam_item) + BeamDistributionItem* item, + const ParameterDistribution& distribution) { if (distribution.whichParameter() != which) return; - const auto beam_parameter = dynamic_cast<BeamDistributionItem*>(beam_item->getItem(item_name)); - TransformFromDomain::setItemFromSample(beam_parameter, distribution); + TransformFromDomain::setItemFromSample(item, distribution); } void addRangedDistributionToItem(SessionItem* item, const IRangedDistribution& ranged, double mean, diff --git a/GUI/coregui/Models/TransformToDomain.cpp b/GUI/coregui/Models/TransformToDomain.cpp index 25b6f2bd5d614b35634dc4fd7472ec05b0fe2e0a..de031b17b16c8a92847b78b9f315653ce25af4a6 100644 --- a/GUI/coregui/Models/TransformToDomain.cpp +++ b/GUI/coregui/Models/TransformToDomain.cpp @@ -134,37 +134,37 @@ std::unique_ptr<IParticle> TransformToDomain::createIParticle(const SessionItem& } //! adds DistributionParameters to the ISimulation -void TransformToDomain::addDistributionParametersToSimulation(const SessionItem& beam_item, +void TransformToDomain::addDistributionParametersToSimulation(const BeamItem& beam_item, GISASSimulation& simulation) { - if (beam_item.modelType() != "GISASBeam") { - ASSERT(beam_item.modelType() == "GISASBeam"); + if (beam_item.modelType() != GISASBeamItem::M_TYPE) { + ASSERT(beam_item.modelType() == GISASBeamItem::M_TYPE); return; } setParameterDistributionToSimulation<BeamWavelengthItem>( - ParameterDistribution::BeamWavelength, beam_item.getItem(BeamItem::P_WAVELENGTH), + ParameterDistribution::BeamWavelength, beam_item.wavelengthItem(), simulation); setParameterDistributionToSimulation<BeamInclinationAngleItem>( ParameterDistribution::BeamInclinationAngle, - beam_item.getItem(BeamItem::P_INCLINATION_ANGLE), simulation); + beam_item.inclinationAngleItem(), simulation); setParameterDistributionToSimulation<BeamAzimuthalAngleItem>( - ParameterDistribution::BeamAzimuthalAngle, beam_item.getItem(BeamItem::P_AZIMUTHAL_ANGLE), - simulation); + ParameterDistribution::BeamAzimuthalAngle, + beam_item.azimuthalAngleItem(), simulation); } -void TransformToDomain::addBeamDivergencesToScan(const SessionItem& beam_item, +void TransformToDomain::addBeamDivergencesToScan(const BeamItem& beam_item, AngularSpecScan& scan) { - if (beam_item.modelType() != "SpecularBeam") { - ASSERT(beam_item.modelType() == "SpecularBeam"); + if (beam_item.modelType() != SpecularBeamItem::M_TYPE) { + ASSERT(beam_item.modelType() == SpecularBeamItem::M_TYPE); return; } - auto resolution = createScanResolution(beam_item.getItem(SpecularBeamItem::P_WAVELENGTH)); + auto resolution = createScanResolution(beam_item.wavelengthItem()); if (resolution) scan.setWavelengthResolution(*resolution); - resolution = createScanResolution(beam_item.getItem(SpecularBeamItem::P_INCLINATION_ANGLE)); + resolution = createScanResolution(beam_item.inclinationAngleItem()); if (resolution) scan.setAngleResolution(*resolution); } diff --git a/GUI/coregui/Models/TransformToDomain.h b/GUI/coregui/Models/TransformToDomain.h index a741641f388e61cd3e7b58c0b1761d562c5cee93..3c6c84dca7b14f0342d1fb2bbad0a05b247c81f1 100644 --- a/GUI/coregui/Models/TransformToDomain.h +++ b/GUI/coregui/Models/TransformToDomain.h @@ -28,6 +28,7 @@ class AngularSpecScan; class BeamDistributionItem; +class BeamItem; class GISASSimulation; class Material; class MaterialItemContainer; @@ -42,9 +43,9 @@ std::unique_ptr<LayerRoughness> createLayerRoughness(const SessionItem& item); std::unique_ptr<MultiLayer> createMultiLayer(const SessionItem& item); std::unique_ptr<ParticleLayout> createParticleLayout(const SessionItem& item); -void addDistributionParametersToSimulation(const SessionItem& beam_item, +void addDistributionParametersToSimulation(const BeamItem& beam_item, GISASSimulation& simulation); -void addBeamDivergencesToScan(const SessionItem& beam_item, AngularSpecScan& simulation); +void addBeamDivergencesToScan(const BeamItem& beam_item, AngularSpecScan& simulation); void setBeamDistribution(ParameterDistribution::WhichParameter which, const BeamDistributionItem& item, ISimulation& simulation); diff --git a/GUI/coregui/Views/InstrumentWidgets/DepthProbeInstrumentEditor.cpp b/GUI/coregui/Views/InstrumentWidgets/DepthProbeInstrumentEditor.cpp index acde70ca74633194322de8410bd221760ec33e13..30fccb4ee8ebfa7c1aaf2602e791146c6695334a 100644 --- a/GUI/coregui/Views/InstrumentWidgets/DepthProbeInstrumentEditor.cpp +++ b/GUI/coregui/Views/InstrumentWidgets/DepthProbeInstrumentEditor.cpp @@ -13,6 +13,7 @@ // ************************************************************************************************ #include "GUI/coregui/Views/InstrumentWidgets/DepthProbeInstrumentEditor.h" +#include "GUI/coregui/Models/BeamWavelengthItem.h" #include "GUI/coregui/Models/InstrumentItems.h" #include "GUI/coregui/Models/SpecularBeamInclinationItem.h" #include "GUI/coregui/Views/InfoWidgets/DistributionDialog.h" @@ -52,12 +53,12 @@ DepthProbeInstrumentEditor::DepthProbeInstrumentEditor(QWidget* parent) void DepthProbeInstrumentEditor::subscribeToItem() { - const auto beam_item = instrumentItem()->getItem(DepthProbeInstrumentItem::P_BEAM); + const SpecularBeamItem* beam_item = instrumentItem()->beamItem(); - auto wavelengthItem = beam_item->getItem(SpecularBeamItem::P_WAVELENGTH); + BeamWavelengthItem* wavelengthItem = beam_item->wavelengthItem(); m_wavelengthEditor->setItem(wavelengthItem->getItem(BeamDistributionItem::P_DISTRIBUTION)); - auto inclinationItem = beam_item->getItem(SpecularBeamItem::P_INCLINATION_ANGLE); + auto inclinationItem = beam_item->inclinationAngleItem(); m_inclinationEditor->setItem( inclinationItem->getItem(SpecularBeamInclinationItem::P_DISTRIBUTION)); m_inclinationEditor->addItem( diff --git a/GUI/coregui/Views/InstrumentWidgets/GISASBeamEditor.cpp b/GUI/coregui/Views/InstrumentWidgets/GISASBeamEditor.cpp index af43e919b15236a35f13648ecc32c94eb843365e..70fa36ad97a3204e54feb57a957ad0b6cc40d300 100644 --- a/GUI/coregui/Views/InstrumentWidgets/GISASBeamEditor.cpp +++ b/GUI/coregui/Views/InstrumentWidgets/GISASBeamEditor.cpp @@ -13,7 +13,9 @@ // ************************************************************************************************ #include "GUI/coregui/Views/InstrumentWidgets/GISASBeamEditor.h" +#include "GUI/coregui/Models/BeamAngleItems.h" #include "GUI/coregui/Models/BeamDistributionItem.h" +#include "GUI/coregui/Models/BeamWavelengthItem.h" #include "GUI/coregui/Models/InstrumentItems.h" #include "GUI/coregui/Views/CommonWidgets/ColumnResizer.h" #include "GUI/coregui/Views/InfoWidgets/DistributionDialog.h" @@ -61,15 +63,15 @@ GISASBeamEditor::GISASBeamEditor(ColumnResizer* columnResizer, QWidget* parent) void GISASBeamEditor::subscribeToItem() { - m_intensityEditor->setItem(beamItem()->getItem(BeamItem::P_INTENSITY)); + m_intensityEditor->setItem(beamItem()->intensityItem()); - auto wavelengthItem = beamItem()->getItem(BeamItem::P_WAVELENGTH); + auto wavelengthItem = beamItem()->wavelengthItem(); m_wavelengthEditor->setItem(wavelengthItem->getItem(BeamDistributionItem::P_DISTRIBUTION)); - auto inclinationItem = beamItem()->getItem(BeamItem::P_INCLINATION_ANGLE); + auto inclinationItem = beamItem()->inclinationAngleItem(); m_inclinationEditor->setItem(inclinationItem->getItem(BeamDistributionItem::P_DISTRIBUTION)); - auto azimuthalItem = beamItem()->getItem(BeamItem::P_AZIMUTHAL_ANGLE); + auto azimuthalItem = beamItem()->azimuthalAngleItem(); m_azimuthalEditor->setItem(azimuthalItem->getItem(BeamDistributionItem::P_DISTRIBUTION)); } diff --git a/GUI/coregui/Views/InstrumentWidgets/OffSpecularBeamEditor.cpp b/GUI/coregui/Views/InstrumentWidgets/OffSpecularBeamEditor.cpp index 18852914c6a46471f3ed75700a7f59b3d401c4e3..a93cd28a0ddb554a027e482787d304da0aa0f127 100644 --- a/GUI/coregui/Views/InstrumentWidgets/OffSpecularBeamEditor.cpp +++ b/GUI/coregui/Views/InstrumentWidgets/OffSpecularBeamEditor.cpp @@ -13,7 +13,9 @@ // ************************************************************************************************ #include "GUI/coregui/Views/InstrumentWidgets/OffSpecularBeamEditor.h" +#include "GUI/coregui/Models/BeamAngleItems.h" #include "GUI/coregui/Models/BeamDistributionItem.h" +#include "GUI/coregui/Models/BeamWavelengthItem.h" #include "GUI/coregui/Models/InstrumentItems.h" #include "GUI/coregui/Views/CommonWidgets/ColumnResizer.h" #include "GUI/coregui/Views/InfoWidgets/DistributionDialog.h" @@ -61,15 +63,15 @@ OffSpecularBeamEditor::OffSpecularBeamEditor(ColumnResizer* columnResizer, QWidg void OffSpecularBeamEditor::subscribeToItem() { - m_intensityEditor->setItem(beamItem()->getItem(BeamItem::P_INTENSITY)); + m_intensityEditor->setItem(beamItem()->intensityItem()); - auto wavelengthItem = beamItem()->getItem(BeamItem::P_WAVELENGTH); + auto wavelengthItem = beamItem()->wavelengthItem(); m_wavelengthEditor->setItem(wavelengthItem->getItem(BeamDistributionItem::P_DISTRIBUTION)); auto inclinationItem = instrumentItem()->getItem(OffSpecularInstrumentItem::P_ALPHA_AXIS); m_inclinationEditor->setItem(inclinationItem); - auto azimuthalItem = beamItem()->getItem(BeamItem::P_AZIMUTHAL_ANGLE); + auto azimuthalItem = beamItem()->azimuthalAngleItem(); m_azimuthalEditor->setItem(azimuthalItem->getItem(BeamDistributionItem::P_DISTRIBUTION)); } diff --git a/GUI/coregui/Views/InstrumentWidgets/PolarizationAnalysisEditor.cpp b/GUI/coregui/Views/InstrumentWidgets/PolarizationAnalysisEditor.cpp index 4bf977cea5bc82fb8b4f97eb2a65a313f13df545..59f82fcd8abc50cb278e568e403e11b924a15ac5 100644 --- a/GUI/coregui/Views/InstrumentWidgets/PolarizationAnalysisEditor.cpp +++ b/GUI/coregui/Views/InstrumentWidgets/PolarizationAnalysisEditor.cpp @@ -15,6 +15,7 @@ #include "GUI/coregui/Views/InstrumentWidgets/PolarizationAnalysisEditor.h" #include "GUI/coregui/Models/DetectorItems.h" #include "GUI/coregui/Models/InstrumentItems.h" +#include "GUI/coregui/Models/VectorItem.h" #include "GUI/coregui/Views/CommonWidgets/ColumnResizer.h" #include "GUI/coregui/Views/PropertyEditor/ComponentEditor.h" #include "GUI/coregui/utils/LayoutUtils.h" @@ -54,7 +55,7 @@ PolarizationAnalysisEditor::PolarizationAnalysisEditor(ColumnResizer* columnResi void PolarizationAnalysisEditor::subscribeToItem() { - m_polarizationEditor->setItem(beamItem()->getItem(BeamItem::P_POLARIZATION)); + m_polarizationEditor->setItem(beamItem()->polarizationItem()); currentItem()->mapper()->setOnPropertyChange( [this](const QString& name) { diff --git a/GUI/coregui/Views/InstrumentWidgets/SpecularBeamEditor.cpp b/GUI/coregui/Views/InstrumentWidgets/SpecularBeamEditor.cpp index 830f7c0929038f11465fe6cc4b62e1876b529f6c..6f92700505a0a276c11831bda10ea02d4ea94d59 100644 --- a/GUI/coregui/Views/InstrumentWidgets/SpecularBeamEditor.cpp +++ b/GUI/coregui/Views/InstrumentWidgets/SpecularBeamEditor.cpp @@ -13,6 +13,7 @@ // ************************************************************************************************ #include "GUI/coregui/Views/InstrumentWidgets/SpecularBeamEditor.h" +#include "GUI/coregui/Models/BeamWavelengthItem.h" #include "GUI/coregui/Models/InstrumentItems.h" #include "GUI/coregui/Models/SpecularBeamInclinationItem.h" #include "GUI/coregui/Views/CommonWidgets/ColumnResizer.h" @@ -64,18 +65,18 @@ void SpecularBeamEditor::subscribeToItem() const auto beam_item = instrumentItem()->beamItem(); ASSERT(beam_item); - m_intensityEditor->setItem(beam_item->getItem(SpecularBeamItem::P_INTENSITY)); + m_intensityEditor->setItem(beam_item->intensityItem()); - auto wavelengthItem = beam_item->getItem(SpecularBeamItem::P_WAVELENGTH); + auto wavelengthItem = beam_item->wavelengthItem(); m_wavelengthEditor->setItem(wavelengthItem->getItem(BeamDistributionItem::P_DISTRIBUTION)); - auto inclinationItem = beam_item->getItem(SpecularBeamItem::P_INCLINATION_ANGLE); + auto inclinationItem = beam_item->inclinationAngleItem(); m_inclinationEditor->setItem( inclinationItem->getItem(SpecularBeamInclinationItem::P_DISTRIBUTION)); m_inclinationEditor->addItem( inclinationItem->getItem(SpecularBeamInclinationItem::P_ALPHA_AXIS)); - m_footprint_editor->setItem(beam_item->getItem(SpecularBeamItem::P_FOOPTPRINT)); + m_footprint_editor->setItem(beam_item->footprintGroupItem()); } void SpecularBeamEditor::unsubscribeFromItem() diff --git a/Tests/UnitTests/GUI/TestSavingSpecularData.cpp b/Tests/UnitTests/GUI/TestSavingSpecularData.cpp index 8fd851afd25c1c0fd4225a6a9418d170d6eb32d9..2149002e811eb38acd05ded7cf9a28da340e8bae 100644 --- a/Tests/UnitTests/GUI/TestSavingSpecularData.cpp +++ b/Tests/UnitTests/GUI/TestSavingSpecularData.cpp @@ -51,8 +51,8 @@ PointwiseAxisItem* TestSavingSpecularData::createPointwiseAxisItem(SessionModel& GroupItem* TestSavingSpecularData::getAxisGroup(SpecularInstrumentItem* instrument) { - auto axis_item = instrument->getItem(SpecularInstrumentItem::P_BEAM) - ->getItem(BeamItem::P_INCLINATION_ANGLE) + auto axis_item = instrument->beamItem() + ->inclinationAngleItem() ->getItem(SpecularBeamInclinationItem::P_ALPHA_AXIS); return dynamic_cast<GroupItem*>(axis_item); }