diff --git a/GUI/coregui/Models/BeamItems.cpp b/GUI/coregui/Models/BeamItems.cpp index fd3aab175c902407a2e0d94f16ad6b91de1d1e42..bdf1ff40b7f36d92c47d2047e4179dde66a28de3 100644 --- a/GUI/coregui/Models/BeamItems.cpp +++ b/GUI/coregui/Models/BeamItems.cpp @@ -153,10 +153,15 @@ void SpecularBeamItem::setInclinationAngle(double value) BeamItem::setInclinationAngle(value); } -BasicAxisItem& SpecularBeamItem::getInclinationAngleAxis() +SessionItem* SpecularBeamItem::inclinationAxisGroup() { - return getItem(BeamItem::P_INCLINATION_ANGLE) - ->item<BasicAxisItem>(SpecularBeamInclinationItem::P_ALPHA_AXIS); + return getItem(P_INCLINATION_ANGLE)->getItem(SpecularBeamInclinationItem::P_ALPHA_AXIS); +} + +BasicAxisItem* SpecularBeamItem::currentInclinationAxisItem() +{ + return &getItem(BeamItem::P_INCLINATION_ANGLE) + ->groupItem<BasicAxisItem>(SpecularBeamInclinationItem::P_ALPHA_AXIS); } FootprintItem* SpecularBeamItem::currentFootprintItem() const diff --git a/GUI/coregui/Models/BeamItems.h b/GUI/coregui/Models/BeamItems.h index 6af8d8a8012a04b0a20dc39afa770896513b4ba0..ac72138b29c1b21710645b438ba2d8bfe0cf66d2 100644 --- a/GUI/coregui/Models/BeamItems.h +++ b/GUI/coregui/Models/BeamItems.h @@ -63,7 +63,8 @@ public: double getInclinationAngle() const override; void setInclinationAngle(double value) override; - BasicAxisItem& getInclinationAngleAxis(); + SessionItem* inclinationAxisGroup(); + BasicAxisItem* currentInclinationAxisItem(); FootprintItem* currentFootprintItem() const; }; diff --git a/GUI/coregui/Models/DomainObjectBuilder.cpp b/GUI/coregui/Models/DomainObjectBuilder.cpp index 010387c6ce6a0f91698bfa75c9a99bef797a5802..a405c1ca4c1ba1a24b750abb77bbc3b08659f45d 100644 --- a/GUI/coregui/Models/DomainObjectBuilder.cpp +++ b/GUI/coregui/Models/DomainObjectBuilder.cpp @@ -140,12 +140,9 @@ DomainObjectBuilder::createUnitConverter(const InstrumentItem* instrumentItem) if (instrumentItem->modelType() == Constants::GISASInstrumentType) return UnitConverterUtils::createConverterForGISAS(*instrument); - if (instrumentItem->modelType() == Constants::SpecularInstrumentType) + if (auto specular_instrument = dynamic_cast<const SpecularInstrumentItem*>(instrumentItem)) { - auto axis_item = dynamic_cast<BasicAxisItem*>( - instrumentItem->beamItem() - ->getItem(SpecularBeamItem::P_INCLINATION_ANGLE) - ->getItem(SpecularBeamInclinationItem::P_ALPHA_AXIS)); + auto axis_item = specular_instrument->beamItem()->currentInclinationAxisItem(); return std::make_unique<UnitConverter1D>(instrument->getBeam(), *axis_item->createAxis(Units::degree)); } diff --git a/GUI/coregui/Models/DomainSimulationBuilder.cpp b/GUI/coregui/Models/DomainSimulationBuilder.cpp index 3d57ea3d69bbb53ce512737f525c21236b7b16f4..6c1597a01c9d8b5155299af44aafd2221f1d83fe 100644 --- a/GUI/coregui/Models/DomainSimulationBuilder.cpp +++ b/GUI/coregui/Models/DomainSimulationBuilder.cpp @@ -141,9 +141,7 @@ createSpecularSimulation(std::unique_ptr<MultiLayer> P_multilayer, = std::make_unique<SpecularSimulation>(*P_multilayer); auto beam_item = specular_instrument->beamItem(); - const auto axis_item - = dynamic_cast<BasicAxisItem*>(beam_item->getItem(SpecularBeamItem::P_INCLINATION_ANGLE) - ->getItem(SpecularBeamInclinationItem::P_ALPHA_AXIS)); + const auto axis_item = beam_item->currentInclinationAxisItem(); const auto footprint = beam_item->currentFootprintItem(); specular_simulation->setBeamIntensity(beam_item->getIntensity()); diff --git a/GUI/coregui/Models/InstrumentItems.cpp b/GUI/coregui/Models/InstrumentItems.cpp index a44b096329b96251b9dac45cacda9896d69d874d..762bb95f70a3374ba0eaed43c3867f07a562ea8b 100644 --- a/GUI/coregui/Models/InstrumentItems.cpp +++ b/GUI/coregui/Models/InstrumentItems.cpp @@ -111,8 +111,8 @@ std::unique_ptr<Instrument> SpecularInstrumentItem::createInstrument() const std::vector<int> SpecularInstrumentItem::shape() const { - const auto& axis_item = beamItem()->getInclinationAngleAxis(); - return {axis_item.getItemValue(BasicAxisItem::P_NBINS).toInt()}; + const auto axis_item = beamItem()->currentInclinationAxisItem(); + return {axis_item->getItemValue(BasicAxisItem::P_NBINS).toInt()}; } void SpecularInstrumentItem::setShape(const std::vector<int>& data_shape) @@ -120,8 +120,8 @@ void SpecularInstrumentItem::setShape(const std::vector<int>& data_shape) if (shape().size() != data_shape.size()) throw GUIHelpers::Error("Error in SpecularInstrumentItem::setShape: The type of " "instrument is incompatible with passed data shape."); - auto& axis_item = beamItem()->getInclinationAngleAxis(); - axis_item.setItemValue(BasicAxisItem::P_NBINS, data_shape[0]); + auto axis_item = beamItem()->currentInclinationAxisItem(); + axis_item->setItemValue(BasicAxisItem::P_NBINS, data_shape[0]); } const QString Instrument2DItem::P_DETECTOR = "Detector"; diff --git a/GUI/coregui/Models/TransformFromDomain.cpp b/GUI/coregui/Models/TransformFromDomain.cpp index c2b6b1fa85af1dd110f6b49d0bb31191d8020582..a2c911d9590ef8858d17045818189136b8f3cb2b 100644 --- a/GUI/coregui/Models/TransformFromDomain.cpp +++ b/GUI/coregui/Models/TransformFromDomain.cpp @@ -272,8 +272,7 @@ void TransformFromDomain::setSpecularBeamItem(SpecularBeamItem* beam_item, beam_item->setInclinationAngle(0.0); // inclination angle is hardcoded beam_item->setAzimuthalAngle(0.0); // azimuthal angle is hardcoded - auto axis_item = beam_item->getItem(SpecularBeamItem::P_INCLINATION_ANGLE) - ->getItem(SpecularBeamInclinationItem::P_ALPHA_AXIS); + auto axis_item = beam_item->currentInclinationAxisItem(); TransformFromDomain::setAxisItem(axis_item, *simulation.getAlphaAxis(), 1. / Units::deg); // distribution parameters