diff --git a/GUI/Model/Sample/InterferenceItems.cpp b/GUI/Model/Sample/InterferenceItems.cpp index 284aa1caebe918240d99e99dc021ed32b8e904ba..48909fb543449beefbeb41af5477b69b35530f7a 100644 --- a/GUI/Model/Sample/InterferenceItems.cpp +++ b/GUI/Model/Sample/InterferenceItems.cpp @@ -82,6 +82,15 @@ SelectionDescriptor<FTDecayFunction1DItem*> Interference1DLatticeItem::decayFunc return m_decayFunction; } +void Interference1DLatticeItem::serialize(Serializer& s) +{ + s.assertVersion(0); + s.rw(m_positionVariance); + s.rw(m_length); + s.rw(m_rotationAngle); + s.rw<FTDecayFunction1DItemCatalog>(m_decayFunction); +} + // --------------------------------------------------------------------------------------------- // SelectionDescriptor<Lattice2DItem*> Interference2DAbstractLatticeItem::latticeType() const @@ -132,6 +141,15 @@ std::unique_ptr<IInterference> Interference2DLatticeItem::createInterference() c return std::unique_ptr<IInterference>(result.release()); } +void Interference2DLatticeItem::serialize(Serializer& s) +{ + s.assertVersion(0); + s.rw(m_positionVariance); + s.rw("integrate", m_xiIntegration); + s.rw<Lattice2DItemCatalog>(m_latticeType); + s.rw<FTDecayFunction2DItemCatalog>(m_decayFunction); +} + void Interference2DLatticeItem::setDecayFunctionType(FTDecayFunction2DItem* p) { m_decayFunction.set(p); @@ -175,6 +193,19 @@ std::unique_ptr<IInterference> Interference2DParaCrystalItem::createInterference return std::unique_ptr<IInterference>(result.release()); } +void Interference2DParaCrystalItem::serialize(Serializer& s) +{ + s.assertVersion(0); + s.rw(m_positionVariance); + s.rw("integrate", m_xiIntegration); + s.rw<Lattice2DItemCatalog>(m_latticeType); + s.rw(m_dampingLength); + s.rw(m_domainSize1); + s.rw(m_domainSize2); + s.rw<FTDistribution2DItemCatalog>(m_pdf1); + s.rw<FTDistribution2DItemCatalog>(m_pdf2); +} + DoubleDescriptor Interference2DParaCrystalItem::dampingLength() const { return m_dampingLength; @@ -250,6 +281,16 @@ std::unique_ptr<IInterference> InterferenceFinite2DLatticeItem::createInterferen return std::unique_ptr<IInterference>(result.release()); } +void InterferenceFinite2DLatticeItem::serialize(Serializer& s) +{ + s.assertVersion(0); + s.rw(m_positionVariance); + s.rw("integrate", m_xiIntegration); + s.rw<Lattice2DItemCatalog>(m_latticeType); + s.rw(m_domainSize1); + s.rw(m_domainSize2); +} + UIntDescriptor InterferenceFinite2DLatticeItem::domainSize1() { return m_domainSize1; @@ -286,6 +327,14 @@ std::unique_ptr<IInterference> InterferenceHardDiskItem::createInterference() co return std::unique_ptr<IInterference>(result.release()); } +void InterferenceHardDiskItem::serialize(Serializer& s) +{ + s.assertVersion(0); + s.rw(m_positionVariance); + s.rw(m_radius); + s.rw(m_density); +} + DoubleDescriptor InterferenceHardDiskItem::density() const { return m_density; @@ -324,6 +373,17 @@ std::unique_ptr<IInterference> InterferenceRadialParaCrystalItem::createInterfer return std::unique_ptr<IInterference>(result.release()); } +void InterferenceRadialParaCrystalItem::serialize(Serializer& s) +{ + s.assertVersion(0); + s.rw(m_positionVariance); + s.rw(m_peakDistance); + s.rw(m_dampingLength); + s.rw(m_domainSize); + s.rw(m_kappa); + s.rw<FTDistribution1DItemCatalog>(m_pdf); +} + DoubleDescriptor InterferenceRadialParaCrystalItem::peakDistance() const { return m_peakDistance; diff --git a/GUI/Model/Sample/InterferenceItems.h b/GUI/Model/Sample/InterferenceItems.h index d11fa0fadde636092a900a12e3a607ec1dcb552e..4c0496440a44b1cf91d369afa094b47a88930611 100644 --- a/GUI/Model/Sample/InterferenceItems.h +++ b/GUI/Model/Sample/InterferenceItems.h @@ -30,23 +30,24 @@ class InterferenceItem { public: virtual ~InterferenceItem() = default; virtual std::unique_ptr<IInterference> createInterference() const = 0; + virtual void serialize(Serializer& s) = 0; DoubleDescriptor positionVariance() const; - virtual void serialize(Serializer& s); - protected: InterferenceItem(); -private: DoubleProperty m_positionVariance; }; +// ------------------------------------------------------------------------------------------------ + class Interference1DLatticeItem : public InterferenceItem { public: Interference1DLatticeItem(); std::unique_ptr<IInterference> createInterference() const override; + void serialize(Serializer& s) override; DoubleDescriptor length() const; DoubleDescriptor rotationAngle() const; @@ -60,6 +61,8 @@ private: SelectionProperty<FTDecayFunction1DItem*> m_decayFunction; }; +// ------------------------------------------------------------------------------------------------ + class Interference2DAbstractLatticeItem : public InterferenceItem { public: SelectionDescriptor<Lattice2DItem*> latticeType() const; @@ -71,14 +74,17 @@ public: protected: explicit Interference2DAbstractLatticeItem(bool xiIntegration); - bool m_xiIntegration; // #baMigration serialize + bool m_xiIntegration; SelectionProperty<Lattice2DItem*> m_latticeType; }; +// ------------------------------------------------------------------------------------------------ + class Interference2DLatticeItem : public Interference2DAbstractLatticeItem { public: Interference2DLatticeItem(); std::unique_ptr<IInterference> createInterference() const override; + void serialize(Serializer& s) override; void setDecayFunctionType(FTDecayFunction2DItem* p); SelectionDescriptor<FTDecayFunction2DItem*> decayFunction() const; @@ -87,10 +93,13 @@ protected: SelectionProperty<FTDecayFunction2DItem*> m_decayFunction; }; +// ------------------------------------------------------------------------------------------------ + class Interference2DParaCrystalItem : public Interference2DAbstractLatticeItem { public: Interference2DParaCrystalItem(); std::unique_ptr<IInterference> createInterference() const override; + void serialize(Serializer& s) override; DoubleDescriptor dampingLength() const; void setDampingLength(double dampingLength); @@ -114,10 +123,13 @@ private: SelectionProperty<FTDistribution2DItem*> m_pdf2; }; +// ------------------------------------------------------------------------------------------------ + class InterferenceFinite2DLatticeItem : public Interference2DAbstractLatticeItem { public: InterferenceFinite2DLatticeItem(); std::unique_ptr<IInterference> createInterference() const override; + void serialize(Serializer& s) override; UIntDescriptor domainSize1(); void setDomainSize1(unsigned int domain_size1); @@ -129,10 +141,13 @@ private: UIntProperty m_domainSize2; }; +// ------------------------------------------------------------------------------------------------ + class InterferenceHardDiskItem : public InterferenceItem { public: InterferenceHardDiskItem(); std::unique_ptr<IInterference> createInterference() const override; + void serialize(Serializer& s) override; DoubleDescriptor radius() const; DoubleDescriptor density() const; @@ -142,10 +157,13 @@ private: DoubleProperty m_density; }; +// ------------------------------------------------------------------------------------------------ + class InterferenceRadialParaCrystalItem : public InterferenceItem { public: InterferenceRadialParaCrystalItem(); std::unique_ptr<IInterference> createInterference() const override; + void serialize(Serializer& s) override; DoubleDescriptor peakDistance() const; DoubleDescriptor dampingLength() const;