From 8d091d7e4856cad3d74dcf103c9bc75abd08d499 Mon Sep 17 00:00:00 2001
From: Dmitry Yurov <d.yurov@fz-juelich.de>
Date: Tue, 4 Dec 2018 13:53:29 +0100
Subject: [PATCH] update to real data via SpecularBeamItem::updateToData

Redmine: #2217
---
 GUI/coregui/Models/BeamItems.cpp       | 8 ++++++++
 GUI/coregui/Models/InstrumentItems.cpp | 9 +++------
 2 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/GUI/coregui/Models/BeamItems.cpp b/GUI/coregui/Models/BeamItems.cpp
index f57f466488c..df83ac2aa24 100644
--- a/GUI/coregui/Models/BeamItems.cpp
+++ b/GUI/coregui/Models/BeamItems.cpp
@@ -22,6 +22,7 @@
 #include "FootprintItems.h"
 #include "GroupItem.h"
 #include "GUIHelpers.h"
+#include "IAxis.h"
 #include "ParameterTranslators.h"
 #include "PointwiseAxisItem.h"
 #include "SessionItemUtils.h"
@@ -194,6 +195,13 @@ void SpecularBeamItem::updateFileName(const QString& filename)
 
 void SpecularBeamItem::updateToData(const IAxis& axis, QString units)
 {
+    if (units == Constants::UnitsNbins) {
+        inclinationAxisGroup()->setCurrentType(Constants::BasicAxisType);
+        auto axis_item = currentInclinationAxisItem();
+        axis_item->setItemValue(BasicAxisItem::P_NBINS, static_cast<int>(axis.size()));
+        return;
+    }
+
     auto axis_group = inclinationAxisGroup();
     axis_group->setCurrentType(Constants::PointwiseAxisType);
     auto axis_item = static_cast<PointwiseAxisItem*>(axis_group->currentItem());
diff --git a/GUI/coregui/Models/InstrumentItems.cpp b/GUI/coregui/Models/InstrumentItems.cpp
index ad79883a978..e9717a2ef91 100644
--- a/GUI/coregui/Models/InstrumentItems.cpp
+++ b/GUI/coregui/Models/InstrumentItems.cpp
@@ -147,13 +147,10 @@ void SpecularInstrumentItem::setShape(const std::vector<int>& data_shape)
 
 void SpecularInstrumentItem::updateToRealData(const RealDataItem* item)
 {
-    if (item->getItemValue(RealDataItem::P_NATIVE_UNITS).toString() == Constants::UnitsNbins) {
-        beamItem()->inclinationAxisGroup()->setCurrentType(Constants::BasicAxisType);
-        setShape(item->shape());
-        return;
-    }
+    if (shape().size() != item->shape().size())
+        throw GUIHelpers::Error("Error in SpecularInstrumentItem::updateToRealData: The type "
+                                "of instrument is incompatible with passed data shape.");
 
-    // the case of dimensional units in user data
     QString units = item->getItemValue(RealDataItem::P_NATIVE_UNITS).toString();
     const auto& data = item->nativeData()->getOutputData()->getAxis(0);
     beamItem()->updateToData(data, units);
-- 
GitLab