diff --git a/GUI/coregui/Models/DetectorItems.h b/GUI/coregui/Models/DetectorItems.h index aae8e2c210e0a1f43806894f9d12a93fd231cc48..3b61b8f436758d5ed28b504865d7f1928de5b8ce 100644 --- a/GUI/coregui/Models/DetectorItems.h +++ b/GUI/coregui/Models/DetectorItems.h @@ -43,6 +43,8 @@ public: virtual std::unique_ptr<IDetector2D> createDetector() const = 0; virtual std::unique_ptr<IResolutionFunction2D> createResolutionFunction() = 0; + + virtual void setSize(int nx, int ny) = 0; }; diff --git a/GUI/coregui/Models/InstrumentItem.cpp b/GUI/coregui/Models/InstrumentItem.cpp index 9aed4f92fbd03110c07964c2f9204033fbc9f6f0..6f0e84a2fa051e60bd0967ccd7f843855f75dc15 100644 --- a/GUI/coregui/Models/InstrumentItem.cpp +++ b/GUI/coregui/Models/InstrumentItem.cpp @@ -41,10 +41,19 @@ BeamItem *InstrumentItem::beamItem() const return 0; } -DetectorContainerItem *InstrumentItem::detectorItem() const +DetectorContainerItem *InstrumentItem::detectorContainerItem() const { for(SessionItem *item : childItems()) if(item->modelType() == Constants::DetectorContainerType) return dynamic_cast<DetectorContainerItem *>(item); return 0; } + +DetectorItem* InstrumentItem::detectorItem() const +{ + DetectorContainerItem* detectorContainer = detectorContainerItem(); + DetectorItem* detectorItem = dynamic_cast<DetectorItem*>( + detectorContainer->getGroupItem(DetectorContainerItem::P_DETECTOR)); + Q_ASSERT(detectorItem); + return detectorItem; +} diff --git a/GUI/coregui/Models/InstrumentItem.h b/GUI/coregui/Models/InstrumentItem.h index eb2818684e9850aafe26de6690fb6fa549b0f1bb..21ee1aff494f35f34dac9bf0a7ea751504c239e5 100644 --- a/GUI/coregui/Models/InstrumentItem.h +++ b/GUI/coregui/Models/InstrumentItem.h @@ -21,6 +21,7 @@ class BeamItem; class DetectorContainerItem; +class DetectorItem; class BA_CORE_API_ InstrumentItem : public SessionItem { @@ -29,7 +30,8 @@ public: InstrumentItem(); BeamItem *beamItem() const; - DetectorContainerItem *detectorItem() const; + DetectorContainerItem *detectorContainerItem() const; + DetectorItem *detectorItem() const; }; #endif // INSTRUMENTITEM_H diff --git a/GUI/coregui/Models/JobModelFunctions.cpp b/GUI/coregui/Models/JobModelFunctions.cpp index 8388bb95ae3e3f5ed49dbaa8ea6a5419a97495c5..8a1176d77ad67e9ad9fc5718c625cf61812a4eb5 100644 --- a/GUI/coregui/Models/JobModelFunctions.cpp +++ b/GUI/coregui/Models/JobModelFunctions.cpp @@ -97,7 +97,7 @@ void JobModelFunctions::processInstrumentLink(JobItem *jobItem) void JobModelFunctions::copyMasksToInstrument(JobItem *jobItem) { IntensityDataItem *intensityItem = jobItem->realDataItem()->intensityDataItem(); - DetectorContainerItem *detector = jobItem->instrumentItem()->detectorItem(); + DetectorContainerItem *detector = jobItem->instrumentItem()->detectorContainerItem(); // removing original masks from the detector, if exists if(detector->maskContainerItem()) diff --git a/GUI/coregui/Models/RectangularDetectorItem.cpp b/GUI/coregui/Models/RectangularDetectorItem.cpp index aa7f806791da0b765666ab7de7d9dffccc267b86..5f5df2236e4e7c16da36886512b1a6a193b50ddd 100644 --- a/GUI/coregui/Models/RectangularDetectorItem.cpp +++ b/GUI/coregui/Models/RectangularDetectorItem.cpp @@ -193,6 +193,12 @@ void RectangularDetectorItem::setDetectorAlignment(const QString& alignment) setItemValue(RectangularDetectorItem::P_ALIGNMENT, combo_property.getVariant()); } +void RectangularDetectorItem::setSize(int nx, int ny) +{ + getItem(RectangularDetectorItem::P_X_AXIS)->setItemValue(BasicAxisItem::P_NBINS, nx); + getItem(RectangularDetectorItem::P_Y_AXIS)->setItemValue(BasicAxisItem::P_NBINS, ny); +} + //! updates property tooltips and visibility flags, depending from type of alignment selected void RectangularDetectorItem::update_properties_appearance() { diff --git a/GUI/coregui/Models/RectangularDetectorItem.h b/GUI/coregui/Models/RectangularDetectorItem.h index 50b42618e8cb1175b175e48a497e4af2b0651f0d..9d1d2c037b7ab954f000f4896137a57969285160 100644 --- a/GUI/coregui/Models/RectangularDetectorItem.h +++ b/GUI/coregui/Models/RectangularDetectorItem.h @@ -41,6 +41,7 @@ public: std::unique_ptr<IResolutionFunction2D> createResolutionFunction(); void setDetectorAlignment(const QString& alignment); + void setSize(int nx, int ny); private: void update_properties_appearance(); diff --git a/GUI/coregui/Models/SphericalDetectorItem.cpp b/GUI/coregui/Models/SphericalDetectorItem.cpp index bacd0a56cdf4496ca028be4c06f7c23e93936bb9..25a7369c8538e9b0be3bb49a2f69cf917b0f4312 100644 --- a/GUI/coregui/Models/SphericalDetectorItem.cpp +++ b/GUI/coregui/Models/SphericalDetectorItem.cpp @@ -72,3 +72,9 @@ std::unique_ptr<IResolutionFunction2D> SphericalDetectorItem::createResolutionFu return result; } + +void SphericalDetectorItem::setSize(int nx, int ny) +{ + getItem(SphericalDetectorItem::P_PHI_AXIS)->setItemValue(BasicAxisItem::P_NBINS, nx); + getItem(SphericalDetectorItem::P_ALPHA_AXIS)->setItemValue(BasicAxisItem::P_NBINS, ny); +} diff --git a/GUI/coregui/Models/SphericalDetectorItem.h b/GUI/coregui/Models/SphericalDetectorItem.h index 6d663e04de6dbd8592212aeb3a026d0d8af9b556..bf4a0db7a7b8da5e47a45840843127660cf35b08 100644 --- a/GUI/coregui/Models/SphericalDetectorItem.h +++ b/GUI/coregui/Models/SphericalDetectorItem.h @@ -29,6 +29,7 @@ public: std::unique_ptr<IDetector2D> createDetector() const; std::unique_ptr<IResolutionFunction2D> createResolutionFunction(); + void setSize(int nx, int ny); }; #endif // SPHERICALDETECTORITEM_H diff --git a/GUI/coregui/Views/ImportDataWidgets/ImportDataAssistant.cpp b/GUI/coregui/Views/ImportDataWidgets/ImportDataAssistant.cpp index dd526f00741daccf3f2fc04e2268227328227d76..2137cf720efda812d9a9e970b1592da305138034 100644 --- a/GUI/coregui/Views/ImportDataWidgets/ImportDataAssistant.cpp +++ b/GUI/coregui/Views/ImportDataWidgets/ImportDataAssistant.cpp @@ -162,25 +162,7 @@ void ImportDataAssistant::realDataShape(const RealDataItem *realData, int &nx, i void ImportDataAssistant::detectorShape(const InstrumentItem *instrumentItem, int &nx, int &ny) { - nx = ny = 0; - DetectorContainerItem *detectorItem = instrumentItem ->detectorItem(); - Q_ASSERT(detectorItem); - - // FIXME Refactor subDetector - auto subDetector = detectorItem->getGroupItem(DetectorContainerItem::P_DETECTOR); - Q_ASSERT(subDetector); - - std::unique_ptr<IDetector2D> detector; - - if(auto sphericalDetector = dynamic_cast<SphericalDetectorItem *>(subDetector)) { - detector = sphericalDetector->createDetector(); - } - - else if(auto rectangularDetector = dynamic_cast<RectangularDetectorItem *>(subDetector)) { - detector = rectangularDetector->createDetector(); - } - - Q_ASSERT(detector.get()); + std::unique_ptr<IDetector2D> detector = instrumentItem ->detectorItem()->createDetector(); nx = detector->getAxis(0).size(); ny = detector->getAxis(1).size(); } @@ -190,30 +172,5 @@ void ImportDataAssistant::setInstrumentShapeToData(InstrumentItem *instrumentIte { int nxData(0), nyData(0); realDataShape(realDataItemItem, nxData, nyData); - - DetectorContainerItem *detectorItem = instrumentItem ->detectorItem(); - Q_ASSERT(detectorItem); - - // FIXME Refactor subDetector - auto subDetector = detectorItem->getGroupItem(DetectorContainerItem::P_DETECTOR); - Q_ASSERT(subDetector); - - if (subDetector->modelType() == Constants::SphericalDetectorType) { - subDetector->getItem(SphericalDetectorItem::P_PHI_AXIS) - ->setItemValue(BasicAxisItem::P_NBINS, nxData); - subDetector->getItem(SphericalDetectorItem::P_ALPHA_AXIS) - ->setItemValue(BasicAxisItem::P_NBINS, nyData); - } - - else if (subDetector->modelType() == Constants::RectangularDetectorType) { - subDetector->getItem(RectangularDetectorItem::P_X_AXIS) - ->setItemValue(BasicAxisItem::P_NBINS, nxData); - subDetector->getItem(RectangularDetectorItem::P_Y_AXIS) - ->setItemValue(BasicAxisItem::P_NBINS, nyData); - } - - else { - throw GUIHelpers::Error("ImportDataAssistant::setInstrumentShapeToData() -> Error."); - } - + instrumentItem->detectorItem()->setSize(nxData, nyData); } diff --git a/GUI/coregui/Views/ImportDataWidgets/LinkInstrumentManager.cpp b/GUI/coregui/Views/ImportDataWidgets/LinkInstrumentManager.cpp index 9286aaa069309da5a8ea2cc60a2d6dac58d8ac4d..5279d2a458c8a6477f9a6ac4f76695fc91b5d261 100644 --- a/GUI/coregui/Views/ImportDataWidgets/LinkInstrumentManager.cpp +++ b/GUI/coregui/Views/ImportDataWidgets/LinkInstrumentManager.cpp @@ -108,7 +108,7 @@ bool LinkInstrumentManager::canLinkDataToInstrument(const RealDataItem *realData return true; // FIXME temporary hack to get rid from Instrument's own masks and ROI - DetectorContainerItem *detectorItem = instrumentItem->detectorItem(); + DetectorContainerItem *detectorItem = instrumentItem->detectorContainerItem(); if(SessionItem *maskContainer = detectorItem->maskContainerItem()) { SessionItem *item = detectorItem->takeRow(detectorItem->rowOfChild(maskContainer)); delete item; diff --git a/GUI/coregui/Views/InstrumentWidgets/InstrumentEditorWidget.cpp b/GUI/coregui/Views/InstrumentWidgets/InstrumentEditorWidget.cpp index 11eca1dd7cbbc3520e389bef661621bcad788d0f..c569cbadc889ee381da948814e23d4478ba3b871 100644 --- a/GUI/coregui/Views/InstrumentWidgets/InstrumentEditorWidget.cpp +++ b/GUI/coregui/Views/InstrumentWidgets/InstrumentEditorWidget.cpp @@ -140,7 +140,7 @@ void InstrumentEditorWidget::setInstrumentItem(SessionItem *instrument) InstrumentItem *instrumentItem = dynamic_cast<InstrumentItem *>(instrument); m_instrumentComponents->setBeamItem(instrumentItem->beamItem()); - m_instrumentComponents->setDetectorItem(instrumentItem->detectorItem()); + m_instrumentComponents->setDetectorItem(instrumentItem->detectorContainerItem()); } void InstrumentEditorWidget::onChangedEditor(const QString &)