From ad0e756d797af4211fc1f3e12e39dff939b78794 Mon Sep 17 00:00:00 2001
From: "Joachim Wuttke (h)" <j.wuttke@fz-juelich.de>
Date: Tue, 7 Mar 2023 12:29:49 +0100
Subject: [PATCH] InstrumentItem: move m_beamItem to subclasses

---
 GUI/Model/Device/InstrumentItems.cpp | 44 +++++++++++++++++++---------
 GUI/Model/Device/InstrumentItems.h   | 11 ++++++-
 2 files changed, 40 insertions(+), 15 deletions(-)

diff --git a/GUI/Model/Device/InstrumentItems.cpp b/GUI/Model/Device/InstrumentItems.cpp
index e3c503d1172..f3061a1d59d 100644
--- a/GUI/Model/Device/InstrumentItems.cpp
+++ b/GUI/Model/Device/InstrumentItems.cpp
@@ -120,8 +120,6 @@ void InstrumentItem::setWithPolarizerAnalyzer(bool with)
 
 void InstrumentItem::writeTo(QXmlStreamWriter* w) const
 {
-    ASSERT(m_beamItem);
-
     XML::writeAttribute(w, XML::Attrib::version, uint(1));
 
     // id
@@ -169,11 +167,6 @@ void InstrumentItem::writeTo(QXmlStreamWriter* w) const
     m_background.writeTo(w);
     w->writeEndElement();
 
-    // beam
-    w->writeStartElement(Tag::Beam);
-    m_beamItem->writeTo(w);
-    w->writeEndElement();
-
     // info groupbox: is expanded?
     w->writeStartElement(Tag::ExpandInfoGroupbox);
     XML::writeAttribute(w, XML::Attrib::value, m_expandInfo);
@@ -197,8 +190,6 @@ void InstrumentItem::writeTo(QXmlStreamWriter* w) const
 
 void InstrumentItem::readFrom(QXmlStreamReader* r)
 {
-    ASSERT(m_beamItem);
-
     const uint version = XML::readUIntAttribute(r, XML::Attrib::version);
     Q_UNUSED(version)
 
@@ -250,11 +241,6 @@ void InstrumentItem::readFrom(QXmlStreamReader* r)
             m_background.readFrom(r);
             XML::gotoEndElementOfTag(r, tag);
 
-            // beam
-        } else if (tag == Tag::Beam) {
-            m_beamItem->readFrom(r);
-            XML::gotoEndElementOfTag(r, tag);
-
             // info groupbox: is expanded?
         } else if (tag == Tag::ExpandInfoGroupbox) {
             XML::readAttribute(r, XML::Attrib::value, &m_expandInfo);
@@ -437,6 +423,11 @@ void DepthprobeInstrumentItem::writeTo(QXmlStreamWriter* w) const
     InstrumentItem::writeTo(w);
     w->writeEndElement();
 
+    // beam
+    w->writeStartElement(Tag::Beam);
+    m_beamItem->writeTo(w);
+    w->writeEndElement();
+
     // z axis
     w->writeStartElement(Tag::ZAxis);
     m_zAxis.writeTo(w);
@@ -456,6 +447,11 @@ void DepthprobeInstrumentItem::readFrom(QXmlStreamReader* r)
             InstrumentItem::readFrom(r);
             XML::gotoEndElementOfTag(r, tag);
 
+            // scan
+        } else if (tag == Tag::Beam) {
+            m_beamItem->readFrom(r);
+            XML::gotoEndElementOfTag(r, tag);
+
             // z axis
         } else if (tag == Tag::ZAxis) {
             m_zAxis.readFrom(r);
@@ -553,6 +549,11 @@ void OffspecInstrumentItem::writeTo(QXmlStreamWriter* w) const
     InstrumentItem::writeTo(w);
     w->writeEndElement();
 
+    // beam
+    w->writeStartElement(Tag::Beam);
+    m_beamItem->writeTo(w);
+    w->writeEndElement();
+
     // alpha axis
     w->writeStartElement(Tag::AlphaAxis);
     m_alphaAxis.writeTo(w);
@@ -577,6 +578,11 @@ void OffspecInstrumentItem::readFrom(QXmlStreamReader* r)
             InstrumentItem::readFrom(r);
             XML::gotoEndElementOfTag(r, tag);
 
+            // scan
+        } else if (tag == Tag::Beam) {
+            m_beamItem->readFrom(r);
+            XML::gotoEndElementOfTag(r, tag);
+
             // alpha axis
         } else if (tag == Tag::AlphaAxis) {
             m_alphaAxis.readFrom(r);
@@ -671,6 +677,11 @@ void GISASInstrumentItem::writeTo(QXmlStreamWriter* w) const
     InstrumentItem::writeTo(w);
     w->writeEndElement();
 
+    // beam
+    w->writeStartElement(Tag::Beam);
+    m_beamItem->writeTo(w);
+    w->writeEndElement();
+
     // detector
     w->writeStartElement(Tag::Detector);
     m_detector.writeTo(w);
@@ -690,6 +701,11 @@ void GISASInstrumentItem::readFrom(QXmlStreamReader* r)
             InstrumentItem::readFrom(r);
             XML::gotoEndElementOfTag(r, tag);
 
+            // beam
+        } else if (tag == Tag::Beam) {
+            m_beamItem->readFrom(r);
+            XML::gotoEndElementOfTag(r, tag);
+
             // detector
         } else if (tag == Tag::Detector) {
             m_detector.readFrom(r);
diff --git a/GUI/Model/Device/InstrumentItems.h b/GUI/Model/Device/InstrumentItems.h
index 347f15a9f3b..845a38a5ed8 100644
--- a/GUI/Model/Device/InstrumentItems.h
+++ b/GUI/Model/Device/InstrumentItems.h
@@ -125,7 +125,6 @@ protected:
     QString m_description;
     bool m_withPolarizerAnalyzer;
     SelectionProperty<BackgroundItemCatalog> m_background;
-    std::unique_ptr<BeamItem> m_beamItem;
 
     VectorProperty m_polarization;
     VectorProperty m_analyzerDirection;
@@ -153,6 +152,9 @@ public:
     const ICoordSystem* createCoordSystem() const override;
 
     ISimulation* createSimulation(const MultiLayer& sample) const override;
+
+private:
+    std::unique_ptr<ScanItem> m_beamItem;
 };
 
 
@@ -183,6 +185,9 @@ protected:
     mutable std::unique_ptr<const ICoordSystem> m_coosys;
     AxisProperty m_zAxis;
     bool m_expandParameters = true;
+
+private:
+    std::unique_ptr<ScanItem> m_beamItem;
 };
 
 
@@ -215,6 +220,9 @@ protected:
     AxisProperty m_alphaAxis;
     bool m_expandBeamParameters = true;
     std::unique_ptr<OffspecDetectorItem> m_detector;
+
+private:
+    std::unique_ptr<ScanItem> m_beamItem;
 };
 
 
@@ -245,6 +253,7 @@ public:
 
 private:
     SelectionProperty<DetectorItemCatalog> m_detector;
+    std::unique_ptr<BeamItem> m_beamItem;
 };
 
 
-- 
GitLab