From df388d1705053c796f999369119bc344424364ad Mon Sep 17 00:00:00 2001 From: Joachim Wuttke <j.wuttke@fz-juelich.de> Date: Wed, 24 Jul 2024 21:37:42 +0200 Subject: [PATCH] mv all members from GrazingScanItem to ScanItem --- GUI/Model/Beam/GrazingScanItem.cpp | 93 +----------------------- GUI/Model/Beam/GrazingScanItem.h | 30 -------- GUI/Model/Beam/SourceItems.cpp | 109 +++++++++++++++++++++++++--- GUI/Model/Beam/SourceItems.h | 30 ++++++++ GUI/Model/Sim/InstrumentItems.cpp | 12 ++- GUI/View/Device/AlphaScanEditor.cpp | 5 +- GUI/View/Device/AlphaScanEditor.h | 6 +- GUI/View/Device/ScanEditor.cpp | 2 +- 8 files changed, 143 insertions(+), 144 deletions(-) diff --git a/GUI/Model/Beam/GrazingScanItem.cpp b/GUI/Model/Beam/GrazingScanItem.cpp index 9e63956f9c8..29e61127465 100644 --- a/GUI/Model/Beam/GrazingScanItem.cpp +++ b/GUI/Model/Beam/GrazingScanItem.cpp @@ -21,7 +21,6 @@ #include "GUI/Model/Beam/DistributionItems.h" namespace { - namespace Tag { const QString UniformAxis("UniformAxis"); @@ -32,29 +31,13 @@ const QString IsUniformAxis("IsUniformAxis"); const QString BaseData("BaseData"); } // namespace Tag - - -void setAxisPresentationDefaults(BasicAxisItem* axisItem) -{ - ASSERT(axisItem); - if (dynamic_cast<PointwiseAxisItem*>(axisItem)) - return; - axisItem->setMin(0.0); - axisItem->setMax(3.0); - axisItem->resize(500); -} - } // namespace GrazingScanItem::GrazingScanItem() : BeamDistributionItem() - , m_current_axis_is_uniform_axis(true) { m_distribution.simpleInit("Distribution", "", DistributionCatalog::Type::None); - - m_uniform_alpha_axis = std::make_unique<BasicAxisItem>(); - setAxisPresentationDefaults(m_uniform_alpha_axis.get()); } GrazingScanItem::~GrazingScanItem() = default; @@ -62,17 +45,6 @@ GrazingScanItem::~GrazingScanItem() = default; void GrazingScanItem::writeTo(QXmlStreamWriter* w) const { XML::writeBaseElement<BeamDistributionItem>(w, XML::Tag::BaseData, this); - XML::writeTaggedValue(w, Tag::IsUniformAxis, m_current_axis_is_uniform_axis); - - // uniform axis - if (m_uniform_alpha_axis) { - XML::writeTaggedElement(w, Tag::UniformAxis, *m_uniform_alpha_axis); - } - - // pointwise axis - if (m_pointwise_alpha_axis) { - XML::writeTaggedElement(w, Tag::ListScan, *m_pointwise_alpha_axis); - } } void GrazingScanItem::readFrom(QXmlStreamReader* r) @@ -81,18 +53,7 @@ void GrazingScanItem::readFrom(QXmlStreamReader* r) QString tag = r->name().toString(); if (tag == Tag::BaseData) XML::readBaseElement<BeamDistributionItem>(r, tag, this); - else if (tag == Tag::IsUniformAxis) - m_current_axis_is_uniform_axis = XML::readTaggedBool(r, tag); - else if (tag == Tag::UniformAxis) { - m_uniform_alpha_axis = std::make_unique<BasicAxisItem>(); - setAxisPresentationDefaults(m_uniform_alpha_axis.get()); - XML::readTaggedElement(r, tag, *m_uniform_alpha_axis); - } else if (tag == Tag::ListScan || tag == Tag::PointwiseAxis) { // compatibility with pre-21 - m_pointwise_alpha_axis = std::make_unique<PointwiseAxisItem>(); - setAxisPresentationDefaults(m_pointwise_alpha_axis.get()); - XML::readTaggedElement(r, tag, *m_pointwise_alpha_axis); - - } else + else r->skipCurrentElement(); } } @@ -101,55 +62,3 @@ double GrazingScanItem::scaleFactor() const { return Units::deg; } - -int GrazingScanItem::nBins() const -{ - return alphaAxisItem()->size(); -} - -BasicAxisItem* GrazingScanItem::alphaAxisItem() const -{ - return m_current_axis_is_uniform_axis ? m_uniform_alpha_axis.get() - : m_pointwise_alpha_axis.get(); -} - -bool GrazingScanItem::pointwiseAlphaAxisDefined() const -{ - return (bool)m_pointwise_alpha_axis; -} - -bool GrazingScanItem::pointwiseAlphaAxisSelected() const -{ - return !m_current_axis_is_uniform_axis; -} -void GrazingScanItem::selectUniformAxis() -{ - m_current_axis_is_uniform_axis = true; -} - -void GrazingScanItem::selectListScan() -{ - ASSERT(pointwiseAlphaAxisDefined()); - m_current_axis_is_uniform_axis = false; -} - -void GrazingScanItem::initUniformAxis(const Scale& axis) -{ - m_uniform_alpha_axis->resize(static_cast<int>(axis.size())); -} - -void GrazingScanItem::initListScan(const Scale& axis) -{ - if (!m_pointwise_alpha_axis) { - m_pointwise_alpha_axis = std::make_unique<PointwiseAxisItem>(); - setAxisPresentationDefaults(m_pointwise_alpha_axis.get()); - } - m_pointwise_alpha_axis->setAxis(axis); -} - -void GrazingScanItem::updateAxIndicators(const Frame& frame) -{ - if (!m_pointwise_alpha_axis) - return; - m_pointwise_alpha_axis->updateAxIndicators(frame); -} diff --git a/GUI/Model/Beam/GrazingScanItem.h b/GUI/Model/Beam/GrazingScanItem.h index 228abda9628..b48712071dd 100644 --- a/GUI/Model/Beam/GrazingScanItem.h +++ b/GUI/Model/Beam/GrazingScanItem.h @@ -19,7 +19,6 @@ class BasicAxisItem; class Frame; -class PointwiseAxisItem; class Scale; class GrazingScanItem : public BeamDistributionItem { @@ -32,36 +31,7 @@ public: double scaleFactor() const override; - int nBins() const; - - //! The currently selected axis - BasicAxisItem* alphaAxisItem() const; - - //! True if a pointwise axis was defined. - //! - //! It still is no necessarily the selected axis! - //! Not to be confused with pointwiseAlphaAxisSelected - bool pointwiseAlphaAxisDefined() const; - - //! True if pointwise axis is selected. - //! - //! Not to be confused with pointwiseAlphaAxisDefined - bool pointwiseAlphaAxisSelected() const; - - //! True if uniform axis is selected. - bool uniformAlphaAxisSelected() const { return m_current_axis_is_uniform_axis; } - - void selectUniformAxis(); - void selectListScan(); - - void initUniformAxis(const Scale& axis); - void initListScan(const Scale& axis); - void updateAxIndicators(const Frame& frame); - private: - std::unique_ptr<BasicAxisItem> m_uniform_alpha_axis; - std::unique_ptr<PointwiseAxisItem> m_pointwise_alpha_axis; - bool m_current_axis_is_uniform_axis; }; #endif // BORNAGAIN_GUI_MODEL_BEAM_GRAZINGSCANITEM_H diff --git a/GUI/Model/Beam/SourceItems.cpp b/GUI/Model/Beam/SourceItems.cpp index a2edc723989..463e2861944 100644 --- a/GUI/Model/Beam/SourceItems.cpp +++ b/GUI/Model/Beam/SourceItems.cpp @@ -13,6 +13,7 @@ // ************************************************************************************************ #include "GUI/Model/Beam/SourceItems.h" +#include "Base/Axis/Frame.h" #include "Base/Axis/Scale.h" #include "Base/Const/Units.h" #include "Base/Util/Assert.h" @@ -20,9 +21,12 @@ #include "Device/Beam/FootprintGauss.h" #include "Device/Beam/FootprintSquare.h" #include "GUI/Model/Axis/BasicAxisItem.h" +#include "GUI/Model/Axis/PointwiseAxisItem.h" #include "GUI/Model/Beam/BeamDistributionItem.h" +#include "GUI/Model/Beam/DistributionItems.h" #include "GUI/Model/Beam/FootprintItems.h" #include "GUI/Model/Beam/GrazingScanItem.h" +#include "Param/Distrib/Distributions.h" #include "Sim/Scan/AlphaScan.h" namespace { @@ -31,16 +35,32 @@ namespace Tag { const QString AzimuthalAngle("AzimuthalAngle"); const QString BaseData("BaseData"); +const QString BeamInclinationDistribution("BeamInclinationDistribution"); +const QString Distribution("Distribution"); const QString ExpandBeamParametersGroupbox("ExpandBeamParametersGroupbox"); const QString ExpandFootprintGroupbox("ExpandFootprintGroupbox"); const QString Footprint("Footprint"); const QString GrazingScan("GrazingScan"); const QString InclinationAngle("InclinationAngle"); const QString Intensity("Intensity"); +const QString IsUniformAxis("IsUniformAxis"); +const QString ListScan("ListScan"); +const QString PointwiseAxis("PointwiseAxis"); // used in pre-21 +const QString UniformAxis("UniformAxis"); const QString Wavelength("Wavelength"); } // namespace Tag +void setAxisPresentationDefaults(BasicAxisItem* axisItem) +{ + ASSERT(axisItem); + if (dynamic_cast<PointwiseAxisItem*>(axisItem)) + return; + axisItem->setMin(0.0); + axisItem->setMax(3.0); + axisItem->resize(500); +} + } // namespace // ************************************************************************************************ @@ -59,7 +79,6 @@ SourceItem::SourceItem() void SourceItem::writeTo(QXmlStreamWriter* w) const { ASSERT(m_wavelength_item); - // intensity m_intensity.writeTo2(w, Tag::Intensity); XML::writeTaggedElement(w, Tag::Wavelength, *m_wavelength_item); XML::writeTaggedElement(w, Tag::AzimuthalAngle, *m_azimuthal_angle_item); @@ -73,9 +92,9 @@ void SourceItem::readFrom(QXmlStreamReader* r) ASSERT(m_wavelength_item); while (r->readNextStartElement()) { QString tag = r->name().toString(); - if (tag == Tag::Intensity) { + if (tag == Tag::Intensity) m_intensity.readFrom2(r, tag); - } else if (tag == Tag::Wavelength) + else if (tag == Tag::Wavelength) XML::readTaggedElement(r, tag, *m_wavelength_item); else if (tag == Tag::AzimuthalAngle) XML::readTaggedElement(r, tag, *m_azimuthal_angle_item); @@ -197,9 +216,13 @@ std::unique_ptr<Beam> BeamItem::createBeam() const // ************************************************************************************************ ScanItem::ScanItem() + : m_current_axis_is_uniform_axis(true) { m_grazing_scan_item = std::make_unique<GrazingScanItem>(); m_wavelength_item = std::make_unique<BeamDistributionItem>(); + + m_uniform_alpha_axis = std::make_unique<BasicAxisItem>(); + setAxisPresentationDefaults(m_uniform_alpha_axis.get()); } void ScanItem::setScan(const BeamScan* scan) @@ -224,6 +247,11 @@ void ScanItem::writeTo(QXmlStreamWriter* w) const { XML::writeBaseElement<SourceItem>(w, XML::Tag::BaseData, this); XML::writeTaggedElement(w, Tag::GrazingScan, *m_grazing_scan_item); + XML::writeTaggedValue(w, Tag::IsUniformAxis, m_current_axis_is_uniform_axis); + if (m_uniform_alpha_axis) + XML::writeTaggedElement(w, Tag::UniformAxis, *m_uniform_alpha_axis); + if (m_pointwise_alpha_axis) + XML::writeTaggedElement(w, Tag::ListScan, *m_pointwise_alpha_axis); } void ScanItem::readFrom(QXmlStreamReader* r) @@ -234,7 +262,17 @@ void ScanItem::readFrom(QXmlStreamReader* r) XML::readBaseElement<SourceItem>(r, tag, this); else if (tag == Tag::GrazingScan) XML::readTaggedElement(r, tag, *m_grazing_scan_item); - else + else if (tag == Tag::IsUniformAxis) + m_current_axis_is_uniform_axis = XML::readTaggedBool(r, tag); + else if (tag == Tag::UniformAxis) { + m_uniform_alpha_axis = std::make_unique<BasicAxisItem>(); + setAxisPresentationDefaults(m_uniform_alpha_axis.get()); + XML::readTaggedElement(r, tag, *m_uniform_alpha_axis); + } else if (tag == Tag::ListScan || tag == Tag::PointwiseAxis) { // compatibility with pre-21 + m_pointwise_alpha_axis = std::make_unique<PointwiseAxisItem>(); + setAxisPresentationDefaults(m_pointwise_alpha_axis.get()); + XML::readTaggedElement(r, tag, *m_pointwise_alpha_axis); + } else r->skipCurrentElement(); } } @@ -246,16 +284,69 @@ GrazingScanItem* ScanItem::grazingScanItem() const BasicAxisItem* ScanItem::inclinationAxisItem() const { - return grazingScanItem()->alphaAxisItem(); + return alphaAxisItem(); } void ScanItem::updateToData(const Scale& axis) { if (axis.unit() == "bin") { - grazingScanItem()->initUniformAxis(axis); - grazingScanItem()->selectUniformAxis(); + initUniformAxis(axis); + selectUniformAxis(); } else { - grazingScanItem()->initListScan(axis); - grazingScanItem()->selectListScan(); + initListScan(axis); + selectListScan(); } } + + +int ScanItem::nBins() const +{ + return alphaAxisItem()->size(); +} + +BasicAxisItem* ScanItem::alphaAxisItem() const +{ + return m_current_axis_is_uniform_axis ? m_uniform_alpha_axis.get() + : m_pointwise_alpha_axis.get(); +} + +bool ScanItem::pointwiseAlphaAxisDefined() const +{ + return (bool)m_pointwise_alpha_axis; +} + +bool ScanItem::pointwiseAlphaAxisSelected() const +{ + return !m_current_axis_is_uniform_axis; +} +void ScanItem::selectUniformAxis() +{ + m_current_axis_is_uniform_axis = true; +} + +void ScanItem::selectListScan() +{ + ASSERT(pointwiseAlphaAxisDefined()); + m_current_axis_is_uniform_axis = false; +} + +void ScanItem::initUniformAxis(const Scale& axis) +{ + m_uniform_alpha_axis->resize(static_cast<int>(axis.size())); +} + +void ScanItem::initListScan(const Scale& axis) +{ + if (!m_pointwise_alpha_axis) { + m_pointwise_alpha_axis = std::make_unique<PointwiseAxisItem>(); + setAxisPresentationDefaults(m_pointwise_alpha_axis.get()); + } + m_pointwise_alpha_axis->setAxis(axis); +} + +void ScanItem::updateAxIndicators(const Frame& frame) +{ + if (!m_pointwise_alpha_axis) + return; + m_pointwise_alpha_axis->updateAxIndicators(frame); +} diff --git a/GUI/Model/Beam/SourceItems.h b/GUI/Model/Beam/SourceItems.h index 04b11241a95..ab91b37dcc5 100644 --- a/GUI/Model/Beam/SourceItems.h +++ b/GUI/Model/Beam/SourceItems.h @@ -28,6 +28,7 @@ class BeamScan; class Frame; class GrazingScanItem; class IFootprint; +class PointwiseAxisItem; class Scale; //! Base class for BeamItem and ScanItem. Name refers to radiation source. @@ -98,7 +99,36 @@ public: void updateToData(const Scale& axis); + int nBins() const; + + //! The currently selected axis + BasicAxisItem* alphaAxisItem() const; + + //! True if a pointwise axis was defined. + //! + //! It still is no necessarily the selected axis! + //! Not to be confused with pointwiseAlphaAxisSelected + bool pointwiseAlphaAxisDefined() const; + + //! True if pointwise axis is selected. + //! + //! Not to be confused with pointwiseAlphaAxisDefined + bool pointwiseAlphaAxisSelected() const; + + //! True if uniform axis is selected. + bool uniformAlphaAxisSelected() const { return m_current_axis_is_uniform_axis; } + + void selectUniformAxis(); + void selectListScan(); + + void initUniformAxis(const Scale& axis); + void initListScan(const Scale& axis); + void updateAxIndicators(const Frame& frame); + private: + std::unique_ptr<BasicAxisItem> m_uniform_alpha_axis; + std::unique_ptr<PointwiseAxisItem> m_pointwise_alpha_axis; + bool m_current_axis_is_uniform_axis; std::unique_ptr<GrazingScanItem> m_grazing_scan_item; }; diff --git a/GUI/Model/Sim/InstrumentItems.cpp b/GUI/Model/Sim/InstrumentItems.cpp index df5f14e9e53..75da600fa11 100644 --- a/GUI/Model/Sim/InstrumentItems.cpp +++ b/GUI/Model/Sim/InstrumentItems.cpp @@ -339,7 +339,7 @@ size_t OffspecInstrumentItem::axdim(int i) const { if (i == 0) { ASSERT(scanItem() && scanItem()->grazingScanItem()); - return scanItem()->grazingScanItem()->nBins(); + return scanItem()->nBins(); } else if (i == 1) { ASSERT(detectorItem()); return detectorItem()->ySize(); @@ -423,20 +423,18 @@ void SpecularInstrumentItem::updateToRealData(const DatafileItem* dfi) const Scale& dataAxis = dfi->dataItem()->c_field()->axis(0); scanItem()->updateToData(dataAxis); - scanItem()->grazingScanItem()->updateAxIndicators(makeFrame()); + scanItem()->updateAxIndicators(makeFrame()); } bool SpecularInstrumentItem::alignedWith(const DatafileItem* dfi) const { if (!dfi->holdsDimensionalData()) - return scanItem()->grazingScanItem()->uniformAlphaAxisSelected() - && axdim(0) == dfi->axdim(0); + return scanItem()->uniformAlphaAxisSelected() && axdim(0) == dfi->axdim(0); - if (!scanItem()->grazingScanItem()->pointwiseAlphaAxisSelected()) + if (!scanItem()->pointwiseAlphaAxisSelected()) return false; - const auto* axisItem = - dynamic_cast<const PointwiseAxisItem*>(scanItem()->grazingScanItem()->alphaAxisItem()); + const auto* axisItem = dynamic_cast<const PointwiseAxisItem*>(scanItem()->alphaAxisItem()); ASSERT(axisItem); const Scale* instrumentAxis = axisItem->axis(); diff --git a/GUI/View/Device/AlphaScanEditor.cpp b/GUI/View/Device/AlphaScanEditor.cpp index e84b008988d..1634499ffbb 100644 --- a/GUI/View/Device/AlphaScanEditor.cpp +++ b/GUI/View/Device/AlphaScanEditor.cpp @@ -15,11 +15,12 @@ #include "GUI/View/Device/AlphaScanEditor.h" #include "GUI/Model/Beam/DistributionItems.h" #include "GUI/Model/Beam/GrazingScanItem.h" +#include "GUI/Model/Beam/SourceItems.h" #include "GUI/View/Device/DistributionPlot.h" #include "GUI/View/Device/DistributionSelector.h" #include "GUI/View/Device/ScanRangeForm.h" -AlphaScanEditor::AlphaScanEditor(QWidget* parent, GrazingScanItem* item, bool allow_distr) +AlphaScanEditor::AlphaScanEditor(QWidget* parent, ScanItem* item, bool allow_distr) : StaticGroupBox("Grazing angles (deg)", parent) , m_item(item) , m_plot(new DistributionPlot(this)) @@ -39,7 +40,7 @@ AlphaScanEditor::AlphaScanEditor(QWidget* parent, GrazingScanItem* item, bool al //... beam distribution m_selector = new DistributionSelector(std::nullopt, DistributionSelector::Category::Symmetric, - this, m_item, allow_distr); + this, m_item->grazingScanItem(), allow_distr); connect(m_selector, &DistributionSelector::distributionChanged, this, &AlphaScanEditor::dataChanged); connect(m_selector, &DistributionSelector::distributionChanged, this, diff --git a/GUI/View/Device/AlphaScanEditor.h b/GUI/View/Device/AlphaScanEditor.h index 8a25b9b831a..eeb836c46c6 100644 --- a/GUI/View/Device/AlphaScanEditor.h +++ b/GUI/View/Device/AlphaScanEditor.h @@ -19,7 +19,7 @@ class DistributionPlot; class DistributionSelector; -class GrazingScanItem; +class ScanItem; class ScanRangeForm; //! Editor for scanning inclination angles @@ -27,7 +27,7 @@ class ScanRangeForm; class AlphaScanEditor : public StaticGroupBox { Q_OBJECT public: - AlphaScanEditor(QWidget* parent, GrazingScanItem* item, bool allow_distr); + AlphaScanEditor(QWidget* parent, ScanItem* item, bool allow_distr); void updateIndicators(); @@ -41,7 +41,7 @@ private slots: private: DistributionSelector* m_selector; ScanRangeForm* m_form; - GrazingScanItem* m_item; + ScanItem* m_item; DistributionPlot* m_plot; }; diff --git a/GUI/View/Device/ScanEditor.cpp b/GUI/View/Device/ScanEditor.cpp index 74675b8959a..dc7625359bb 100644 --- a/GUI/View/Device/ScanEditor.cpp +++ b/GUI/View/Device/ScanEditor.cpp @@ -54,7 +54,7 @@ ScanEditor::ScanEditor(QWidget* parent, InstrumentItem* instr_item, ScanItem* it //... Inclination scan (alpha or qz) - auto* inclinationEditor = new AlphaScanEditor(this, item->grazingScanItem(), allow_distr); + auto* inclinationEditor = new AlphaScanEditor(this, item, allow_distr); layout->addWidget(inclinationEditor, 1, 1); //... Signals, will couple wavelength and inclination -- GitLab