From 3045129c7025f2cb79024f11e759f2f14543e5fa Mon Sep 17 00:00:00 2001
From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de>
Date: Wed, 21 Aug 2024 15:22:28 +0200
Subject: [PATCH] add SpatialFrequencyCrosscorrelation

---
 GUI/Model/FromCore/ItemizeSample.cpp        |   2 +-
 Sample/Interface/AutocorrelationModels.cpp  |   8 +-
 Sample/Interface/AutocorrelationModels.h    |   4 +-
 Sample/Interface/CrosscorrelationModels.cpp |  88 ++-
 Sample/Interface/CrosscorrelationModels.h   |  56 +-
 auto/Wrap/libBornAgainSample.py             |  83 ++-
 auto/Wrap/libBornAgainSample_wrap.cpp       | 682 +++++++++++++-------
 7 files changed, 623 insertions(+), 300 deletions(-)

diff --git a/GUI/Model/FromCore/ItemizeSample.cpp b/GUI/Model/FromCore/ItemizeSample.cpp
index 9f95690b97f..ad808f31fea 100644
--- a/GUI/Model/FromCore/ItemizeSample.cpp
+++ b/GUI/Model/FromCore/ItemizeSample.cpp
@@ -296,7 +296,7 @@ void set_CrosscorrelationModel(RoughnessItem* parent, const CrosscorrelationMode
 {
     if (const auto cd = dynamic_cast<const CommonDepthCrosscorrelation*>(crosscorr))
         parent->crossrorrModelSelection().setCertainItem(
-            new CommonDepthCrosscorrelationItem(cd->crossCorrDepth(R3())));
+            new CommonDepthCrosscorrelationItem(cd->crossCorrDepth()));
 }
 
 void set_Roughness(LayerItem* parent, const LayerInterface* top_interface)
diff --git a/Sample/Interface/AutocorrelationModels.cpp b/Sample/Interface/AutocorrelationModels.cpp
index a08e233b133..b0eccefb4d1 100644
--- a/Sample/Interface/AutocorrelationModels.cpp
+++ b/Sample/Interface/AutocorrelationModels.cpp
@@ -62,22 +62,22 @@ std::string K_CorrelationModel::pythonArguments() const
 //! Fourier transform of the correlation function of the roughness profile.
 //!
 //! Based on Palasantzas, Phys Rev B, 48, 14472 (1993)
-double K_CorrelationModel::spectralFunction(const R3& k) const
+double K_CorrelationModel::spectralFunction(const R3& q) const
 {
     ASSERT(m_validated);
     double H = m_hurst_parameter;
     double clength2 = m_lateral_corr_length * m_lateral_corr_length;
-    double Qpar2 = k.magxy2();
+    double Qpar2 = q.magxy2();
     return 4.0 * pi * H * m_sigma * m_sigma * clength2 * std::pow(1 + Qpar2 * clength2, -1 - H);
 }
 
 //! Correlation function of the roughness profile
-double K_CorrelationModel::corrFunction(const R3& k) const
+double K_CorrelationModel::corrFunction(const R3& r) const
 {
     ASSERT(m_validated);
     double H = m_hurst_parameter;
     double clength = m_lateral_corr_length;
-    double R = k.magxy();
+    double R = r.magxy();
     return m_sigma * m_sigma * std::pow(2., 1 - H) / tgamma(H) * std::pow(R / clength, H)
            * gsl_sf_bessel_Knu(H, R / clength);
 }
diff --git a/Sample/Interface/AutocorrelationModels.h b/Sample/Interface/AutocorrelationModels.h
index a0ea5329bcc..6f2595588df 100644
--- a/Sample/Interface/AutocorrelationModels.h
+++ b/Sample/Interface/AutocorrelationModels.h
@@ -52,9 +52,9 @@ public:
 #endif
 
     //! Returns power spectral density of the surface roughness
-    double spectralFunction(const R3& k) const override;
+    double spectralFunction(const R3& q) const override;
 
-    double corrFunction(const R3& k) const override;
+    double corrFunction(const R3& r) const override;
 
     //! Sets rms of roughness
     void setSigma(double sigma)
diff --git a/Sample/Interface/CrosscorrelationModels.cpp b/Sample/Interface/CrosscorrelationModels.cpp
index 64f6e0f6f1e..d48316bcfeb 100644
--- a/Sample/Interface/CrosscorrelationModels.cpp
+++ b/Sample/Interface/CrosscorrelationModels.cpp
@@ -17,53 +17,91 @@
 #include "Base/Util/Assert.h"
 #include "Sample/Interface/AutocorrelationModels.h"
 #include <cmath>
+#include <numbers>
 
-CommonDepthCrosscorrelation::CommonDepthCrosscorrelation(double cross_corr_depth)
-    : m_crosscorrelation_depth(cross_corr_depth)
+using std::numbers::pi;
+
+namespace {
+double cross_spectrum(const AutocorrelationModel* up, const AutocorrelationModel* low,
+                      const R3& qvec)
+{
+    ASSERT(up && low);
+
+    double sigma_up = up->sigma();
+    double sigma_low = low->sigma();
+
+    if (sigma_up <= 0 || sigma_low <= 0)
+        return 0;
+
+    double spectrum_up = up->spectralFunction(qvec);
+    double spectrum_low = low->spectralFunction(qvec);
+    return 0.5 * ((sigma_low / sigma_up) * spectrum_up + (sigma_up / sigma_low) * spectrum_low);
+}
+} // namespace
+
+SpatialFrequencyCrosscorrelation::SpatialFrequencyCrosscorrelation(double base_crosscorr_depth,
+                                                                   double base_frequency,
+                                                                   double power)
+    : m_base_crosscorr_depth(base_crosscorr_depth)
+    , m_base_spatial_frequency(base_frequency)
+    , m_power(power)
 {
     validateOrThrow();
 }
 
-CommonDepthCrosscorrelation* CommonDepthCrosscorrelation::clone() const
+SpatialFrequencyCrosscorrelation* SpatialFrequencyCrosscorrelation::clone() const
 {
-    return new CommonDepthCrosscorrelation(m_crosscorrelation_depth);
+    return new SpatialFrequencyCrosscorrelation(m_base_crosscorr_depth, m_base_spatial_frequency,
+                                                m_power);
 }
 
-std::string CommonDepthCrosscorrelation::validate() const
+std::string SpatialFrequencyCrosscorrelation::pythonArguments() const
+{
+    return Py::Fmt::printArguments({{m_base_crosscorr_depth, parDefs()[0].unit},
+                                    {m_base_spatial_frequency, parDefs()[1].unit},
+                                    {m_power, parDefs()[2].unit}});
+}
+
+std::string SpatialFrequencyCrosscorrelation::validate() const
 {
     std::vector<std::string> errs;
-    requestGe0(errs, m_crosscorrelation_depth, "crossCorrDepth");
+    requestGe0(errs, m_base_crosscorr_depth, parDefs()[0].name);
+    requestGt0(errs, m_base_spatial_frequency, parDefs()[1].name);
+    requestGe0(errs, m_power, parDefs()[2].name);
     if (!errs.empty())
         return jointError(errs);
     m_validated = true;
     return "";
 }
 
-std::string CommonDepthCrosscorrelation::pythonArguments() const
-{
-    return Py::Fmt::printArguments({{m_crosscorrelation_depth, parDefs()[0].unit}});
-}
-
-double CommonDepthCrosscorrelation::crossCorrSpectrum(const AutocorrelationModel* up,
-                                                      const AutocorrelationModel* low,
-                                                      const R3& qvec, double thickness) const
+double SpatialFrequencyCrosscorrelation::crossCorrSpectrum(const AutocorrelationModel* up,
+                                                           const AutocorrelationModel* low,
+                                                           const R3& qvec, double thickness) const
 {
     ASSERT(thickness >= 0);
-    ASSERT(up && low);
 
-    if (m_crosscorrelation_depth == 0)
+    if (m_base_crosscorr_depth == 0)
         return 0;
 
-    double sigma_up = up->sigma();
-    double sigma_low = low->sigma();
+    double frequency_factor = std::pow(qvec.magxy() / 2 / pi / m_base_spatial_frequency, m_power);
 
-    if (sigma_up <= 0 || sigma_low <= 0)
-        return 0;
+    return ::cross_spectrum(up, low, qvec)
+           * std::exp(-thickness / m_base_crosscorr_depth * frequency_factor);
+}
 
-    double spectrum_up = up->spectralFunction(qvec);
-    double spectrum_low = low->spectralFunction(qvec);
-    double distance_factor = std::exp(-thickness / m_crosscorrelation_depth);
+//-------------------------------------------------------------------------------------------------
 
-    return 0.5 * ((sigma_low / sigma_up) * spectrum_up + (sigma_up / sigma_low) * spectrum_low)
-           * distance_factor;
+CommonDepthCrosscorrelation::CommonDepthCrosscorrelation(double cross_corr_depth)
+    : SpatialFrequencyCrosscorrelation(cross_corr_depth, 1, 0)
+{
+}
+
+CommonDepthCrosscorrelation* CommonDepthCrosscorrelation::clone() const
+{
+    return new CommonDepthCrosscorrelation(m_base_crosscorr_depth);
+}
+
+std::string CommonDepthCrosscorrelation::pythonArguments() const
+{
+    return Py::Fmt::printArguments({{m_base_crosscorr_depth, parDefs()[0].unit}});
 }
diff --git a/Sample/Interface/CrosscorrelationModels.h b/Sample/Interface/CrosscorrelationModels.h
index 5e8e611f6a8..a2bc6404703 100644
--- a/Sample/Interface/CrosscorrelationModels.h
+++ b/Sample/Interface/CrosscorrelationModels.h
@@ -25,7 +25,6 @@ class AutocorrelationModel;
 class CrosscorrelationModel : public ICloneable, public INode {
 public:
     CrosscorrelationModel* clone() const override = 0;
-    virtual double crossCorrDepth(const R3& qvec) const = 0;
     virtual double crossCorrSpectrum(const AutocorrelationModel* up,
                                      const AutocorrelationModel* low, const R3& qvec,
                                      double thickness) const = 0;
@@ -36,25 +35,62 @@ public:
 #endif
 };
 
+//! The crosscorrelation factor depends both on the distance between interfaces and the spatial
+//! frequency of roughness.
+class SpatialFrequencyCrosscorrelation : public CrosscorrelationModel {
+public:
+    SpatialFrequencyCrosscorrelation(double base_crosscorr_depth, double base_frequency,
+                                     double power);
+    SpatialFrequencyCrosscorrelation* clone() const override;
+    std::string className() const override { return "SpatialFrequencyCrosscorrelation"; }
+    std::string validate() const override;
+    double crossCorrSpectrum(const AutocorrelationModel* up, const AutocorrelationModel* low,
+                             const R3& qvec, double thickness) const override;
+    std::vector<ParaMeta> parDefs() const override
+    {
+        return {{"BaseCrosscorrDepth", "nm"}, {"BaseSpatialFrequency", "1/nm"}, {"Power", ""}};
+    }
+
+#ifndef SWIG
+    std::string pythonArguments() const override;
+#endif
+
+    double baseCrossCorrDepth() const
+    {
+        return m_base_crosscorr_depth;
+    }
+    double baseSpatialFrequency() const
+    {
+        return m_base_spatial_frequency;
+    }
+    double power() const
+    {
+        return m_power;
+    }
+
+protected:
+    double m_base_crosscorr_depth;
+    double m_base_spatial_frequency;
+    double m_power;
+};
+
 //! The crosscorrelation factor depends on the distance between interfaces and does not depend
 //! on the spatial frequency of roughness.
-class CommonDepthCrosscorrelation : public CrosscorrelationModel {
+class CommonDepthCrosscorrelation : public SpatialFrequencyCrosscorrelation {
 public:
-    CommonDepthCrosscorrelation(double cross_corr_depth = 0);
+    CommonDepthCrosscorrelation(double cross_corr_depth);
     CommonDepthCrosscorrelation* clone() const override;
     std::string className() const override { return "CommonDepthCrosscorrelation"; }
-    std::string validate() const override;
-    double crossCorrDepth(const R3&) const override { return m_crosscorrelation_depth; }
-    double crossCorrSpectrum(const AutocorrelationModel* up, const AutocorrelationModel* low,
-                             const R3& qvec, double thickness) const override;
-    std::vector<ParaMeta> parDefs() const final { return {{"CrosscorrDepth", "nm"}}; }
+    std::vector<ParaMeta> parDefs() const override { return {{"CrosscorrDepth", "nm"}}; }
 
 #ifndef SWIG
     std::string pythonArguments() const override;
 #endif
 
-private:
-    double m_crosscorrelation_depth = 0;
+    double crossCorrDepth() const
+    {
+        return m_base_crosscorr_depth;
+    }
 };
 
 #endif // BORNAGAIN_SAMPLE_INTERFACE_CROSSCORRELATIONMODELS_H
diff --git a/auto/Wrap/libBornAgainSample.py b/auto/Wrap/libBornAgainSample.py
index 2990af8d604..9f35ceb0dcb 100644
--- a/auto/Wrap/libBornAgainSample.py
+++ b/auto/Wrap/libBornAgainSample.py
@@ -4367,13 +4367,13 @@ class K_CorrelationModel(AutocorrelationModel):
         r"""validate(K_CorrelationModel self) -> std::string"""
         return _libBornAgainSample.K_CorrelationModel_validate(self)
 
-    def spectralFunction(self, k):
-        r"""spectralFunction(K_CorrelationModel self, R3 k) -> double"""
-        return _libBornAgainSample.K_CorrelationModel_spectralFunction(self, k)
+    def spectralFunction(self, q):
+        r"""spectralFunction(K_CorrelationModel self, R3 q) -> double"""
+        return _libBornAgainSample.K_CorrelationModel_spectralFunction(self, q)
 
-    def corrFunction(self, k):
-        r"""corrFunction(K_CorrelationModel self, R3 k) -> double"""
-        return _libBornAgainSample.K_CorrelationModel_corrFunction(self, k)
+    def corrFunction(self, r):
+        r"""corrFunction(K_CorrelationModel self, R3 r) -> double"""
+        return _libBornAgainSample.K_CorrelationModel_corrFunction(self, r)
 
     def setSigma(self, sigma):
         r"""setSigma(K_CorrelationModel self, double sigma)"""
@@ -4509,10 +4509,6 @@ class CrosscorrelationModel(libBornAgainBase.ICloneable, libBornAgainParam.INode
         r"""clone(CrosscorrelationModel self) -> CrosscorrelationModel"""
         return _libBornAgainSample.CrosscorrelationModel_clone(self)
 
-    def crossCorrDepth(self, qvec):
-        r"""crossCorrDepth(CrosscorrelationModel self, R3 qvec) -> double"""
-        return _libBornAgainSample.CrosscorrelationModel_crossCorrDepth(self, qvec)
-
     def crossCorrSpectrum(self, up, low, qvec, thickness):
         r"""crossCorrSpectrum(CrosscorrelationModel self, AutocorrelationModel up, AutocorrelationModel low, R3 qvec, double thickness) -> double"""
         return _libBornAgainSample.CrosscorrelationModel_crossCorrSpectrum(self, up, low, qvec, thickness)
@@ -4520,14 +4516,59 @@ class CrosscorrelationModel(libBornAgainBase.ICloneable, libBornAgainParam.INode
 
 # Register CrosscorrelationModel in _libBornAgainSample:
 _libBornAgainSample.CrosscorrelationModel_swigregister(CrosscorrelationModel)
-class CommonDepthCrosscorrelation(CrosscorrelationModel):
+class SpatialFrequencyCrosscorrelation(CrosscorrelationModel):
+    r"""Proxy of C++ SpatialFrequencyCrosscorrelation class."""
+
+    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
+    __repr__ = _swig_repr
+
+    def __init__(self, base_crosscorr_depth, base_frequency, power):
+        r"""__init__(SpatialFrequencyCrosscorrelation self, double base_crosscorr_depth, double base_frequency, double power) -> SpatialFrequencyCrosscorrelation"""
+        _libBornAgainSample.SpatialFrequencyCrosscorrelation_swiginit(self, _libBornAgainSample.new_SpatialFrequencyCrosscorrelation(base_crosscorr_depth, base_frequency, power))
+
+    def clone(self):
+        r"""clone(SpatialFrequencyCrosscorrelation self) -> SpatialFrequencyCrosscorrelation"""
+        return _libBornAgainSample.SpatialFrequencyCrosscorrelation_clone(self)
+
+    def className(self):
+        r"""className(SpatialFrequencyCrosscorrelation self) -> std::string"""
+        return _libBornAgainSample.SpatialFrequencyCrosscorrelation_className(self)
+
+    def validate(self):
+        r"""validate(SpatialFrequencyCrosscorrelation self) -> std::string"""
+        return _libBornAgainSample.SpatialFrequencyCrosscorrelation_validate(self)
+
+    def crossCorrSpectrum(self, up, low, qvec, thickness):
+        r"""crossCorrSpectrum(SpatialFrequencyCrosscorrelation self, AutocorrelationModel up, AutocorrelationModel low, R3 qvec, double thickness) -> double"""
+        return _libBornAgainSample.SpatialFrequencyCrosscorrelation_crossCorrSpectrum(self, up, low, qvec, thickness)
+
+    def parDefs(self):
+        r"""parDefs(SpatialFrequencyCrosscorrelation self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
+        return _libBornAgainSample.SpatialFrequencyCrosscorrelation_parDefs(self)
+
+    def baseCrossCorrDepth(self):
+        r"""baseCrossCorrDepth(SpatialFrequencyCrosscorrelation self) -> double"""
+        return _libBornAgainSample.SpatialFrequencyCrosscorrelation_baseCrossCorrDepth(self)
+
+    def baseSpatialFrequency(self):
+        r"""baseSpatialFrequency(SpatialFrequencyCrosscorrelation self) -> double"""
+        return _libBornAgainSample.SpatialFrequencyCrosscorrelation_baseSpatialFrequency(self)
+
+    def power(self):
+        r"""power(SpatialFrequencyCrosscorrelation self) -> double"""
+        return _libBornAgainSample.SpatialFrequencyCrosscorrelation_power(self)
+    __swig_destroy__ = _libBornAgainSample.delete_SpatialFrequencyCrosscorrelation
+
+# Register SpatialFrequencyCrosscorrelation in _libBornAgainSample:
+_libBornAgainSample.SpatialFrequencyCrosscorrelation_swigregister(SpatialFrequencyCrosscorrelation)
+class CommonDepthCrosscorrelation(SpatialFrequencyCrosscorrelation):
     r"""Proxy of C++ CommonDepthCrosscorrelation class."""
 
     thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
     __repr__ = _swig_repr
 
-    def __init__(self, cross_corr_depth=0):
-        r"""__init__(CommonDepthCrosscorrelation self, double cross_corr_depth=0) -> CommonDepthCrosscorrelation"""
+    def __init__(self, cross_corr_depth):
+        r"""__init__(CommonDepthCrosscorrelation self, double cross_corr_depth) -> CommonDepthCrosscorrelation"""
         _libBornAgainSample.CommonDepthCrosscorrelation_swiginit(self, _libBornAgainSample.new_CommonDepthCrosscorrelation(cross_corr_depth))
 
     def clone(self):
@@ -4538,21 +4579,13 @@ class CommonDepthCrosscorrelation(CrosscorrelationModel):
         r"""className(CommonDepthCrosscorrelation self) -> std::string"""
         return _libBornAgainSample.CommonDepthCrosscorrelation_className(self)
 
-    def validate(self):
-        r"""validate(CommonDepthCrosscorrelation self) -> std::string"""
-        return _libBornAgainSample.CommonDepthCrosscorrelation_validate(self)
-
-    def crossCorrDepth(self, arg2):
-        r"""crossCorrDepth(CommonDepthCrosscorrelation self, R3 arg2) -> double"""
-        return _libBornAgainSample.CommonDepthCrosscorrelation_crossCorrDepth(self, arg2)
-
-    def crossCorrSpectrum(self, up, low, qvec, thickness):
-        r"""crossCorrSpectrum(CommonDepthCrosscorrelation self, AutocorrelationModel up, AutocorrelationModel low, R3 qvec, double thickness) -> double"""
-        return _libBornAgainSample.CommonDepthCrosscorrelation_crossCorrSpectrum(self, up, low, qvec, thickness)
-
     def parDefs(self):
         r"""parDefs(CommonDepthCrosscorrelation self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
         return _libBornAgainSample.CommonDepthCrosscorrelation_parDefs(self)
+
+    def crossCorrDepth(self):
+        r"""crossCorrDepth(CommonDepthCrosscorrelation self) -> double"""
+        return _libBornAgainSample.CommonDepthCrosscorrelation_crossCorrDepth(self)
     __swig_destroy__ = _libBornAgainSample.delete_CommonDepthCrosscorrelation
 
 # Register CommonDepthCrosscorrelation in _libBornAgainSample:
diff --git a/auto/Wrap/libBornAgainSample_wrap.cpp b/auto/Wrap/libBornAgainSample_wrap.cpp
index 60c6e5d5e4b..c2f75f61b9f 100644
--- a/auto/Wrap/libBornAgainSample_wrap.cpp
+++ b/auto/Wrap/libBornAgainSample_wrap.cpp
@@ -3750,68 +3750,69 @@ namespace Swig {
 #define SWIGTYPE_p_SawtoothRippleLorentz swig_types[102]
 #define SWIGTYPE_p_SimpleSelectionRule swig_types[103]
 #define SWIGTYPE_p_Span swig_types[104]
-#define SWIGTYPE_p_Sphere swig_types[105]
-#define SWIGTYPE_p_Spheroid swig_types[106]
-#define SWIGTYPE_p_SpinMatrix swig_types[107]
-#define SWIGTYPE_p_SquareLattice2D swig_types[108]
-#define SWIGTYPE_p_TanhInterlayer swig_types[109]
-#define SWIGTYPE_p_TruncatedCube swig_types[110]
-#define SWIGTYPE_p_TruncatedSphere swig_types[111]
-#define SWIGTYPE_p_TruncatedSpheroid swig_types[112]
-#define SWIGTYPE_p_Vec3T_double_t swig_types[113]
-#define SWIGTYPE_p_Vec3T_int_t swig_types[114]
-#define SWIGTYPE_p_Vec3T_std__complexT_double_t_t swig_types[115]
-#define SWIGTYPE_p_WavevectorInfo swig_types[116]
-#define SWIGTYPE_p_allocator_type swig_types[117]
-#define SWIGTYPE_p_char swig_types[118]
-#define SWIGTYPE_p_difference_type swig_types[119]
-#define SWIGTYPE_p_double2d_t swig_types[120]
-#define SWIGTYPE_p_first_type swig_types[121]
-#define SWIGTYPE_p_int swig_types[122]
-#define SWIGTYPE_p_key_type swig_types[123]
-#define SWIGTYPE_p_long_long swig_types[124]
-#define SWIGTYPE_p_mapped_type swig_types[125]
-#define SWIGTYPE_p_p_PyObject swig_types[126]
-#define SWIGTYPE_p_second_type swig_types[127]
-#define SWIGTYPE_p_short swig_types[128]
-#define SWIGTYPE_p_signed_char swig_types[129]
-#define SWIGTYPE_p_size_type swig_types[130]
-#define SWIGTYPE_p_std__allocatorT_INode_const_p_t swig_types[131]
-#define SWIGTYPE_p_std__allocatorT_Vec3T_double_t_t swig_types[132]
-#define SWIGTYPE_p_std__allocatorT_double_t swig_types[133]
-#define SWIGTYPE_p_std__allocatorT_int_t swig_types[134]
-#define SWIGTYPE_p_std__allocatorT_std__complexT_double_t_t swig_types[135]
-#define SWIGTYPE_p_std__allocatorT_std__pairT_double_double_t_t swig_types[136]
-#define SWIGTYPE_p_std__allocatorT_std__pairT_std__string_const_double_t_t swig_types[137]
-#define SWIGTYPE_p_std__allocatorT_std__string_t swig_types[138]
-#define SWIGTYPE_p_std__allocatorT_std__vectorT_double_t_t swig_types[139]
-#define SWIGTYPE_p_std__allocatorT_std__vectorT_int_t_t swig_types[140]
-#define SWIGTYPE_p_std__allocatorT_unsigned_long_t swig_types[141]
-#define SWIGTYPE_p_std__complexT_double_t swig_types[142]
-#define SWIGTYPE_p_std__functionT_double_fdoubleF_t swig_types[143]
-#define SWIGTYPE_p_std__invalid_argument swig_types[144]
-#define SWIGTYPE_p_std__lessT_std__string_t swig_types[145]
-#define SWIGTYPE_p_std__mapT_std__string_double_t swig_types[146]
-#define SWIGTYPE_p_std__pairT_double_double_t swig_types[147]
-#define SWIGTYPE_p_std__vectorT_INode_const_p_t swig_types[148]
-#define SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t swig_types[149]
-#define SWIGTYPE_p_std__vectorT_Vec3T_double_t_t swig_types[150]
-#define SWIGTYPE_p_std__vectorT_double_t swig_types[151]
-#define SWIGTYPE_p_std__vectorT_int_t swig_types[152]
-#define SWIGTYPE_p_std__vectorT_std__complexT_double_t_t swig_types[153]
-#define SWIGTYPE_p_std__vectorT_std__pairT_double_double_t_t swig_types[154]
-#define SWIGTYPE_p_std__vectorT_std__string_t swig_types[155]
-#define SWIGTYPE_p_std__vectorT_std__vectorT_double_t_t swig_types[156]
-#define SWIGTYPE_p_std__vectorT_std__vectorT_int_t_t swig_types[157]
-#define SWIGTYPE_p_std__vectorT_unsigned_long_t swig_types[158]
-#define SWIGTYPE_p_swig__SwigPyIterator swig_types[159]
-#define SWIGTYPE_p_unsigned_char swig_types[160]
-#define SWIGTYPE_p_unsigned_int swig_types[161]
-#define SWIGTYPE_p_unsigned_long_long swig_types[162]
-#define SWIGTYPE_p_unsigned_short swig_types[163]
-#define SWIGTYPE_p_value_type swig_types[164]
-static swig_type_info *swig_types[166];
-static swig_module_info swig_module = {swig_types, 165, 0, 0, 0, 0};
+#define SWIGTYPE_p_SpatialFrequencyCrosscorrelation swig_types[105]
+#define SWIGTYPE_p_Sphere swig_types[106]
+#define SWIGTYPE_p_Spheroid swig_types[107]
+#define SWIGTYPE_p_SpinMatrix swig_types[108]
+#define SWIGTYPE_p_SquareLattice2D swig_types[109]
+#define SWIGTYPE_p_TanhInterlayer swig_types[110]
+#define SWIGTYPE_p_TruncatedCube swig_types[111]
+#define SWIGTYPE_p_TruncatedSphere swig_types[112]
+#define SWIGTYPE_p_TruncatedSpheroid swig_types[113]
+#define SWIGTYPE_p_Vec3T_double_t swig_types[114]
+#define SWIGTYPE_p_Vec3T_int_t swig_types[115]
+#define SWIGTYPE_p_Vec3T_std__complexT_double_t_t swig_types[116]
+#define SWIGTYPE_p_WavevectorInfo swig_types[117]
+#define SWIGTYPE_p_allocator_type swig_types[118]
+#define SWIGTYPE_p_char swig_types[119]
+#define SWIGTYPE_p_difference_type swig_types[120]
+#define SWIGTYPE_p_double2d_t swig_types[121]
+#define SWIGTYPE_p_first_type swig_types[122]
+#define SWIGTYPE_p_int swig_types[123]
+#define SWIGTYPE_p_key_type swig_types[124]
+#define SWIGTYPE_p_long_long swig_types[125]
+#define SWIGTYPE_p_mapped_type swig_types[126]
+#define SWIGTYPE_p_p_PyObject swig_types[127]
+#define SWIGTYPE_p_second_type swig_types[128]
+#define SWIGTYPE_p_short swig_types[129]
+#define SWIGTYPE_p_signed_char swig_types[130]
+#define SWIGTYPE_p_size_type swig_types[131]
+#define SWIGTYPE_p_std__allocatorT_INode_const_p_t swig_types[132]
+#define SWIGTYPE_p_std__allocatorT_Vec3T_double_t_t swig_types[133]
+#define SWIGTYPE_p_std__allocatorT_double_t swig_types[134]
+#define SWIGTYPE_p_std__allocatorT_int_t swig_types[135]
+#define SWIGTYPE_p_std__allocatorT_std__complexT_double_t_t swig_types[136]
+#define SWIGTYPE_p_std__allocatorT_std__pairT_double_double_t_t swig_types[137]
+#define SWIGTYPE_p_std__allocatorT_std__pairT_std__string_const_double_t_t swig_types[138]
+#define SWIGTYPE_p_std__allocatorT_std__string_t swig_types[139]
+#define SWIGTYPE_p_std__allocatorT_std__vectorT_double_t_t swig_types[140]
+#define SWIGTYPE_p_std__allocatorT_std__vectorT_int_t_t swig_types[141]
+#define SWIGTYPE_p_std__allocatorT_unsigned_long_t swig_types[142]
+#define SWIGTYPE_p_std__complexT_double_t swig_types[143]
+#define SWIGTYPE_p_std__functionT_double_fdoubleF_t swig_types[144]
+#define SWIGTYPE_p_std__invalid_argument swig_types[145]
+#define SWIGTYPE_p_std__lessT_std__string_t swig_types[146]
+#define SWIGTYPE_p_std__mapT_std__string_double_t swig_types[147]
+#define SWIGTYPE_p_std__pairT_double_double_t swig_types[148]
+#define SWIGTYPE_p_std__vectorT_INode_const_p_t swig_types[149]
+#define SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t swig_types[150]
+#define SWIGTYPE_p_std__vectorT_Vec3T_double_t_t swig_types[151]
+#define SWIGTYPE_p_std__vectorT_double_t swig_types[152]
+#define SWIGTYPE_p_std__vectorT_int_t swig_types[153]
+#define SWIGTYPE_p_std__vectorT_std__complexT_double_t_t swig_types[154]
+#define SWIGTYPE_p_std__vectorT_std__pairT_double_double_t_t swig_types[155]
+#define SWIGTYPE_p_std__vectorT_std__string_t swig_types[156]
+#define SWIGTYPE_p_std__vectorT_std__vectorT_double_t_t swig_types[157]
+#define SWIGTYPE_p_std__vectorT_std__vectorT_int_t_t swig_types[158]
+#define SWIGTYPE_p_std__vectorT_unsigned_long_t swig_types[159]
+#define SWIGTYPE_p_swig__SwigPyIterator swig_types[160]
+#define SWIGTYPE_p_unsigned_char swig_types[161]
+#define SWIGTYPE_p_unsigned_int swig_types[162]
+#define SWIGTYPE_p_unsigned_long_long swig_types[163]
+#define SWIGTYPE_p_unsigned_short swig_types[164]
+#define SWIGTYPE_p_value_type swig_types[165]
+static swig_type_info *swig_types[167];
+static swig_module_info swig_module = {swig_types, 166, 0, 0, 0, 0};
 #define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
 #define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
 
@@ -53727,50 +53728,6 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_CrosscorrelationModel_crossCorrDepth(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  CrosscorrelationModel *arg1 = (CrosscorrelationModel *) 0 ;
-  R3 *arg2 = 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  void *argp2 = 0 ;
-  int res2 = 0 ;
-  PyObject *swig_obj[2] ;
-  double result;
-  
-  (void)self;
-  if (!SWIG_Python_UnpackTuple(args, "CrosscorrelationModel_crossCorrDepth", 2, 2, swig_obj)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_CrosscorrelationModel, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CrosscorrelationModel_crossCorrDepth" "', argument " "1"" of type '" "CrosscorrelationModel const *""'"); 
-  }
-  arg1 = reinterpret_cast< CrosscorrelationModel * >(argp1);
-  res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_Vec3T_double_t,  0  | 0);
-  if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CrosscorrelationModel_crossCorrDepth" "', argument " "2"" of type '" "R3 const &""'"); 
-  }
-  if (!argp2) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CrosscorrelationModel_crossCorrDepth" "', argument " "2"" of type '" "R3 const &""'"); 
-  }
-  arg2 = reinterpret_cast< R3 * >(argp2);
-  {
-    try {
-      result = (double)((CrosscorrelationModel const *)arg1)->crossCorrDepth((R3 const &)*arg2);
-    } catch (const std::exception& ex) {
-      // message shown in the Python interpreter
-      const std::string msg {
-        "BornAgain C++ Exception: " + std::string(ex.what())
-      };
-      SWIG_exception(SWIG_RuntimeError, msg.c_str());
-    }
-  }
-  resultobj = SWIG_From_double(static_cast< double >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
 SWIGINTERN PyObject *_wrap_CrosscorrelationModel_crossCorrSpectrum(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
   CrosscorrelationModel *arg1 = (CrosscorrelationModel *) 0 ;
@@ -53879,23 +53836,40 @@ SWIGINTERN PyObject *CrosscorrelationModel_swigregister(PyObject *SWIGUNUSEDPARM
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *_wrap_new_CommonDepthCrosscorrelation__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_SpatialFrequencyCrosscorrelation(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
   double arg1 ;
+  double arg2 ;
+  double arg3 ;
   double val1 ;
   int ecode1 = 0 ;
-  CommonDepthCrosscorrelation *result = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject *swig_obj[3] ;
+  SpatialFrequencyCrosscorrelation *result = 0 ;
   
   (void)self;
-  if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
+  if (!SWIG_Python_UnpackTuple(args, "new_SpatialFrequencyCrosscorrelation", 3, 3, swig_obj)) SWIG_fail;
   ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
   if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CommonDepthCrosscorrelation" "', argument " "1"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_SpatialFrequencyCrosscorrelation" "', argument " "1"" of type '" "double""'");
   } 
   arg1 = static_cast< double >(val1);
+  ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_SpatialFrequencyCrosscorrelation" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_SpatialFrequencyCrosscorrelation" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
   {
     try {
-      result = (CommonDepthCrosscorrelation *)new CommonDepthCrosscorrelation(arg1);
+      result = (SpatialFrequencyCrosscorrelation *)new SpatialFrequencyCrosscorrelation(arg1,arg2,arg3);
     } catch (const std::exception& ex) {
       // message shown in the Python interpreter
       const std::string msg {
@@ -53904,22 +53878,32 @@ SWIGINTERN PyObject *_wrap_new_CommonDepthCrosscorrelation__SWIG_0(PyObject *sel
       SWIG_exception(SWIG_RuntimeError, msg.c_str());
     }
   }
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CommonDepthCrosscorrelation, SWIG_POINTER_NEW |  0 );
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SpatialFrequencyCrosscorrelation, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_CommonDepthCrosscorrelation__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **SWIGUNUSEDPARM(swig_obj)) {
+SWIGINTERN PyObject *_wrap_SpatialFrequencyCrosscorrelation_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  CommonDepthCrosscorrelation *result = 0 ;
+  SpatialFrequencyCrosscorrelation *arg1 = (SpatialFrequencyCrosscorrelation *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  SpatialFrequencyCrosscorrelation *result = 0 ;
   
   (void)self;
-  if ((nobjs < 0) || (nobjs > 0)) SWIG_fail;
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SpatialFrequencyCrosscorrelation, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SpatialFrequencyCrosscorrelation_clone" "', argument " "1"" of type '" "SpatialFrequencyCrosscorrelation const *""'"); 
+  }
+  arg1 = reinterpret_cast< SpatialFrequencyCrosscorrelation * >(argp1);
   {
     try {
-      result = (CommonDepthCrosscorrelation *)new CommonDepthCrosscorrelation();
+      result = (SpatialFrequencyCrosscorrelation *)((SpatialFrequencyCrosscorrelation const *)arg1)->clone();
     } catch (const std::exception& ex) {
       // message shown in the Python interpreter
       const std::string msg {
@@ -53928,63 +53912,168 @@ SWIGINTERN PyObject *_wrap_new_CommonDepthCrosscorrelation__SWIG_1(PyObject *sel
       SWIG_exception(SWIG_RuntimeError, msg.c_str());
     }
   }
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CommonDepthCrosscorrelation, SWIG_POINTER_NEW |  0 );
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SpatialFrequencyCrosscorrelation, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_CommonDepthCrosscorrelation(PyObject *self, PyObject *args) {
-  Py_ssize_t argc;
-  PyObject *argv[2] = {
-    0
-  };
+SWIGINTERN PyObject *_wrap_SpatialFrequencyCrosscorrelation_className(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  SpatialFrequencyCrosscorrelation *arg1 = (SpatialFrequencyCrosscorrelation *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  std::string result;
   
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_CommonDepthCrosscorrelation", 0, 1, argv))) SWIG_fail;
-  --argc;
-  if (argc == 0) {
-    return _wrap_new_CommonDepthCrosscorrelation__SWIG_1(self, argc, argv);
+  (void)self;
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SpatialFrequencyCrosscorrelation, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SpatialFrequencyCrosscorrelation_className" "', argument " "1"" of type '" "SpatialFrequencyCrosscorrelation const *""'"); 
   }
-  if (argc == 1) {
-    int _v = 0;
-    {
-      int res = SWIG_AsVal_double(argv[0], NULL);
-      _v = SWIG_CheckState(res);
+  arg1 = reinterpret_cast< SpatialFrequencyCrosscorrelation * >(argp1);
+  {
+    try {
+      result = ((SpatialFrequencyCrosscorrelation const *)arg1)->className();
+    } catch (const std::exception& ex) {
+      // message shown in the Python interpreter
+      const std::string msg {
+        "BornAgain C++ Exception: " + std::string(ex.what())
+      };
+      SWIG_exception(SWIG_RuntimeError, msg.c_str());
     }
-    if (_v) {
-      return _wrap_new_CommonDepthCrosscorrelation__SWIG_0(self, argc, argv);
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SpatialFrequencyCrosscorrelation_validate(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  SpatialFrequencyCrosscorrelation *arg1 = (SpatialFrequencyCrosscorrelation *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  std::string result;
+  
+  (void)self;
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SpatialFrequencyCrosscorrelation, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SpatialFrequencyCrosscorrelation_validate" "', argument " "1"" of type '" "SpatialFrequencyCrosscorrelation const *""'"); 
+  }
+  arg1 = reinterpret_cast< SpatialFrequencyCrosscorrelation * >(argp1);
+  {
+    try {
+      result = ((SpatialFrequencyCrosscorrelation const *)arg1)->validate();
+    } catch (const std::exception& ex) {
+      // message shown in the Python interpreter
+      const std::string msg {
+        "BornAgain C++ Exception: " + std::string(ex.what())
+      };
+      SWIG_exception(SWIG_RuntimeError, msg.c_str());
     }
   }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SpatialFrequencyCrosscorrelation_crossCorrSpectrum(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  SpatialFrequencyCrosscorrelation *arg1 = (SpatialFrequencyCrosscorrelation *) 0 ;
+  AutocorrelationModel *arg2 = (AutocorrelationModel *) 0 ;
+  AutocorrelationModel *arg3 = (AutocorrelationModel *) 0 ;
+  R3 *arg4 = 0 ;
+  double arg5 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  void *argp4 = 0 ;
+  int res4 = 0 ;
+  double val5 ;
+  int ecode5 = 0 ;
+  PyObject *swig_obj[5] ;
+  double result;
   
+  (void)self;
+  if (!SWIG_Python_UnpackTuple(args, "SpatialFrequencyCrosscorrelation_crossCorrSpectrum", 5, 5, swig_obj)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SpatialFrequencyCrosscorrelation, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SpatialFrequencyCrosscorrelation_crossCorrSpectrum" "', argument " "1"" of type '" "SpatialFrequencyCrosscorrelation const *""'"); 
+  }
+  arg1 = reinterpret_cast< SpatialFrequencyCrosscorrelation * >(argp1);
+  res2 = SWIG_ConvertPtr(swig_obj[1], &argp2,SWIGTYPE_p_AutocorrelationModel, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SpatialFrequencyCrosscorrelation_crossCorrSpectrum" "', argument " "2"" of type '" "AutocorrelationModel const *""'"); 
+  }
+  arg2 = reinterpret_cast< AutocorrelationModel * >(argp2);
+  res3 = SWIG_ConvertPtr(swig_obj[2], &argp3,SWIGTYPE_p_AutocorrelationModel, 0 |  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "SpatialFrequencyCrosscorrelation_crossCorrSpectrum" "', argument " "3"" of type '" "AutocorrelationModel const *""'"); 
+  }
+  arg3 = reinterpret_cast< AutocorrelationModel * >(argp3);
+  res4 = SWIG_ConvertPtr(swig_obj[3], &argp4, SWIGTYPE_p_Vec3T_double_t,  0  | 0);
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "SpatialFrequencyCrosscorrelation_crossCorrSpectrum" "', argument " "4"" of type '" "R3 const &""'"); 
+  }
+  if (!argp4) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SpatialFrequencyCrosscorrelation_crossCorrSpectrum" "', argument " "4"" of type '" "R3 const &""'"); 
+  }
+  arg4 = reinterpret_cast< R3 * >(argp4);
+  ecode5 = SWIG_AsVal_double(swig_obj[4], &val5);
+  if (!SWIG_IsOK(ecode5)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "SpatialFrequencyCrosscorrelation_crossCorrSpectrum" "', argument " "5"" of type '" "double""'");
+  } 
+  arg5 = static_cast< double >(val5);
+  {
+    try {
+      result = (double)((SpatialFrequencyCrosscorrelation const *)arg1)->crossCorrSpectrum((AutocorrelationModel const *)arg2,(AutocorrelationModel const *)arg3,(R3 const &)*arg4,arg5);
+    } catch (const std::exception& ex) {
+      // message shown in the Python interpreter
+      const std::string msg {
+        "BornAgain C++ Exception: " + std::string(ex.what())
+      };
+      SWIG_exception(SWIG_RuntimeError, msg.c_str());
+    }
+  }
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
 fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_CommonDepthCrosscorrelation'.\n"
-    "  Possible C/C++ prototypes are:\n"
-    "    CommonDepthCrosscorrelation::CommonDepthCrosscorrelation(double)\n"
-    "    CommonDepthCrosscorrelation::CommonDepthCrosscorrelation()\n");
-  return 0;
+  return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_CommonDepthCrosscorrelation_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_SpatialFrequencyCrosscorrelation_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  CommonDepthCrosscorrelation *arg1 = (CommonDepthCrosscorrelation *) 0 ;
+  SpatialFrequencyCrosscorrelation *arg1 = (SpatialFrequencyCrosscorrelation *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  CommonDepthCrosscorrelation *result = 0 ;
+  SwigValueWrapper< std::vector< ParaMeta,std::allocator< ParaMeta > > > result;
   
   (void)self;
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_CommonDepthCrosscorrelation, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SpatialFrequencyCrosscorrelation, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CommonDepthCrosscorrelation_clone" "', argument " "1"" of type '" "CommonDepthCrosscorrelation const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SpatialFrequencyCrosscorrelation_parDefs" "', argument " "1"" of type '" "SpatialFrequencyCrosscorrelation const *""'"); 
   }
-  arg1 = reinterpret_cast< CommonDepthCrosscorrelation * >(argp1);
+  arg1 = reinterpret_cast< SpatialFrequencyCrosscorrelation * >(argp1);
   {
     try {
-      result = (CommonDepthCrosscorrelation *)((CommonDepthCrosscorrelation const *)arg1)->clone();
+      result = ((SpatialFrequencyCrosscorrelation const *)arg1)->parDefs();
     } catch (const std::exception& ex) {
       // message shown in the Python interpreter
       const std::string msg {
@@ -53993,32 +54082,32 @@ SWIGINTERN PyObject *_wrap_CommonDepthCrosscorrelation_clone(PyObject *self, PyO
       SWIG_exception(SWIG_RuntimeError, msg.c_str());
     }
   }
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CommonDepthCrosscorrelation, 0 |  0 );
+  resultobj = SWIG_NewPointerObj((new std::vector< ParaMeta,std::allocator< ParaMeta > >(result)), SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_CommonDepthCrosscorrelation_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_SpatialFrequencyCrosscorrelation_baseCrossCorrDepth(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  CommonDepthCrosscorrelation *arg1 = (CommonDepthCrosscorrelation *) 0 ;
+  SpatialFrequencyCrosscorrelation *arg1 = (SpatialFrequencyCrosscorrelation *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  std::string result;
+  double result;
   
   (void)self;
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_CommonDepthCrosscorrelation, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SpatialFrequencyCrosscorrelation, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CommonDepthCrosscorrelation_className" "', argument " "1"" of type '" "CommonDepthCrosscorrelation const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SpatialFrequencyCrosscorrelation_baseCrossCorrDepth" "', argument " "1"" of type '" "SpatialFrequencyCrosscorrelation const *""'"); 
   }
-  arg1 = reinterpret_cast< CommonDepthCrosscorrelation * >(argp1);
+  arg1 = reinterpret_cast< SpatialFrequencyCrosscorrelation * >(argp1);
   {
     try {
-      result = ((CommonDepthCrosscorrelation const *)arg1)->className();
+      result = (double)((SpatialFrequencyCrosscorrelation const *)arg1)->baseCrossCorrDepth();
     } catch (const std::exception& ex) {
       // message shown in the Python interpreter
       const std::string msg {
@@ -54027,32 +54116,32 @@ SWIGINTERN PyObject *_wrap_CommonDepthCrosscorrelation_className(PyObject *self,
       SWIG_exception(SWIG_RuntimeError, msg.c_str());
     }
   }
-  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_CommonDepthCrosscorrelation_validate(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_SpatialFrequencyCrosscorrelation_baseSpatialFrequency(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  CommonDepthCrosscorrelation *arg1 = (CommonDepthCrosscorrelation *) 0 ;
+  SpatialFrequencyCrosscorrelation *arg1 = (SpatialFrequencyCrosscorrelation *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  std::string result;
+  double result;
   
   (void)self;
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_CommonDepthCrosscorrelation, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SpatialFrequencyCrosscorrelation, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CommonDepthCrosscorrelation_validate" "', argument " "1"" of type '" "CommonDepthCrosscorrelation const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SpatialFrequencyCrosscorrelation_baseSpatialFrequency" "', argument " "1"" of type '" "SpatialFrequencyCrosscorrelation const *""'"); 
   }
-  arg1 = reinterpret_cast< CommonDepthCrosscorrelation * >(argp1);
+  arg1 = reinterpret_cast< SpatialFrequencyCrosscorrelation * >(argp1);
   {
     try {
-      result = ((CommonDepthCrosscorrelation const *)arg1)->validate();
+      result = (double)((SpatialFrequencyCrosscorrelation const *)arg1)->baseSpatialFrequency();
     } catch (const std::exception& ex) {
       // message shown in the Python interpreter
       const std::string msg {
@@ -54061,42 +54150,110 @@ SWIGINTERN PyObject *_wrap_CommonDepthCrosscorrelation_validate(PyObject *self,
       SWIG_exception(SWIG_RuntimeError, msg.c_str());
     }
   }
-  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_CommonDepthCrosscorrelation_crossCorrDepth(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_SpatialFrequencyCrosscorrelation_power(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  CommonDepthCrosscorrelation *arg1 = (CommonDepthCrosscorrelation *) 0 ;
-  R3 *arg2 = 0 ;
+  SpatialFrequencyCrosscorrelation *arg1 = (SpatialFrequencyCrosscorrelation *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
-  void *argp2 = 0 ;
-  int res2 = 0 ;
-  PyObject *swig_obj[2] ;
+  PyObject *swig_obj[1] ;
   double result;
   
   (void)self;
-  if (!SWIG_Python_UnpackTuple(args, "CommonDepthCrosscorrelation_crossCorrDepth", 2, 2, swig_obj)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_CommonDepthCrosscorrelation, 0 |  0 );
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SpatialFrequencyCrosscorrelation, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CommonDepthCrosscorrelation_crossCorrDepth" "', argument " "1"" of type '" "CommonDepthCrosscorrelation const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SpatialFrequencyCrosscorrelation_power" "', argument " "1"" of type '" "SpatialFrequencyCrosscorrelation const *""'"); 
   }
-  arg1 = reinterpret_cast< CommonDepthCrosscorrelation * >(argp1);
-  res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_Vec3T_double_t,  0  | 0);
-  if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CommonDepthCrosscorrelation_crossCorrDepth" "', argument " "2"" of type '" "R3 const &""'"); 
+  arg1 = reinterpret_cast< SpatialFrequencyCrosscorrelation * >(argp1);
+  {
+    try {
+      result = (double)((SpatialFrequencyCrosscorrelation const *)arg1)->power();
+    } catch (const std::exception& ex) {
+      // message shown in the Python interpreter
+      const std::string msg {
+        "BornAgain C++ Exception: " + std::string(ex.what())
+      };
+      SWIG_exception(SWIG_RuntimeError, msg.c_str());
+    }
   }
-  if (!argp2) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CommonDepthCrosscorrelation_crossCorrDepth" "', argument " "2"" of type '" "R3 const &""'"); 
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_SpatialFrequencyCrosscorrelation(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  SpatialFrequencyCrosscorrelation *arg1 = (SpatialFrequencyCrosscorrelation *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  
+  (void)self;
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SpatialFrequencyCrosscorrelation, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_SpatialFrequencyCrosscorrelation" "', argument " "1"" of type '" "SpatialFrequencyCrosscorrelation *""'"); 
   }
-  arg2 = reinterpret_cast< R3 * >(argp2);
+  arg1 = reinterpret_cast< SpatialFrequencyCrosscorrelation * >(argp1);
+  {
+    try {
+      delete arg1;
+    } catch (const std::exception& ex) {
+      // message shown in the Python interpreter
+      const std::string msg {
+        "BornAgain C++ Exception: " + std::string(ex.what())
+      };
+      SWIG_exception(SWIG_RuntimeError, msg.c_str());
+    }
+  }
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *SpatialFrequencyCrosscorrelation_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_SpatialFrequencyCrosscorrelation, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *SpatialFrequencyCrosscorrelation_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+
+SWIGINTERN PyObject *_wrap_new_CommonDepthCrosscorrelation(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  double arg1 ;
+  double val1 ;
+  int ecode1 = 0 ;
+  PyObject *swig_obj[1] ;
+  CommonDepthCrosscorrelation *result = 0 ;
+  
+  (void)self;
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CommonDepthCrosscorrelation" "', argument " "1"" of type '" "double""'");
+  } 
+  arg1 = static_cast< double >(val1);
   {
     try {
-      result = (double)((CommonDepthCrosscorrelation const *)arg1)->crossCorrDepth((R3 const &)*arg2);
+      result = (CommonDepthCrosscorrelation *)new CommonDepthCrosscorrelation(arg1);
     } catch (const std::exception& ex) {
       // message shown in the Python interpreter
       const std::string msg {
@@ -54105,66 +54262,66 @@ SWIGINTERN PyObject *_wrap_CommonDepthCrosscorrelation_crossCorrDepth(PyObject *
       SWIG_exception(SWIG_RuntimeError, msg.c_str());
     }
   }
-  resultobj = SWIG_From_double(static_cast< double >(result));
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CommonDepthCrosscorrelation, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_CommonDepthCrosscorrelation_crossCorrSpectrum(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_CommonDepthCrosscorrelation_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
   CommonDepthCrosscorrelation *arg1 = (CommonDepthCrosscorrelation *) 0 ;
-  AutocorrelationModel *arg2 = (AutocorrelationModel *) 0 ;
-  AutocorrelationModel *arg3 = (AutocorrelationModel *) 0 ;
-  R3 *arg4 = 0 ;
-  double arg5 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
-  void *argp2 = 0 ;
-  int res2 = 0 ;
-  void *argp3 = 0 ;
-  int res3 = 0 ;
-  void *argp4 = 0 ;
-  int res4 = 0 ;
-  double val5 ;
-  int ecode5 = 0 ;
-  PyObject *swig_obj[5] ;
-  double result;
+  PyObject *swig_obj[1] ;
+  CommonDepthCrosscorrelation *result = 0 ;
   
   (void)self;
-  if (!SWIG_Python_UnpackTuple(args, "CommonDepthCrosscorrelation_crossCorrSpectrum", 5, 5, swig_obj)) SWIG_fail;
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
   res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_CommonDepthCrosscorrelation, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CommonDepthCrosscorrelation_crossCorrSpectrum" "', argument " "1"" of type '" "CommonDepthCrosscorrelation const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CommonDepthCrosscorrelation_clone" "', argument " "1"" of type '" "CommonDepthCrosscorrelation const *""'"); 
   }
   arg1 = reinterpret_cast< CommonDepthCrosscorrelation * >(argp1);
-  res2 = SWIG_ConvertPtr(swig_obj[1], &argp2,SWIGTYPE_p_AutocorrelationModel, 0 |  0 );
-  if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CommonDepthCrosscorrelation_crossCorrSpectrum" "', argument " "2"" of type '" "AutocorrelationModel const *""'"); 
-  }
-  arg2 = reinterpret_cast< AutocorrelationModel * >(argp2);
-  res3 = SWIG_ConvertPtr(swig_obj[2], &argp3,SWIGTYPE_p_AutocorrelationModel, 0 |  0 );
-  if (!SWIG_IsOK(res3)) {
-    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CommonDepthCrosscorrelation_crossCorrSpectrum" "', argument " "3"" of type '" "AutocorrelationModel const *""'"); 
-  }
-  arg3 = reinterpret_cast< AutocorrelationModel * >(argp3);
-  res4 = SWIG_ConvertPtr(swig_obj[3], &argp4, SWIGTYPE_p_Vec3T_double_t,  0  | 0);
-  if (!SWIG_IsOK(res4)) {
-    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CommonDepthCrosscorrelation_crossCorrSpectrum" "', argument " "4"" of type '" "R3 const &""'"); 
+  {
+    try {
+      result = (CommonDepthCrosscorrelation *)((CommonDepthCrosscorrelation const *)arg1)->clone();
+    } catch (const std::exception& ex) {
+      // message shown in the Python interpreter
+      const std::string msg {
+        "BornAgain C++ Exception: " + std::string(ex.what())
+      };
+      SWIG_exception(SWIG_RuntimeError, msg.c_str());
+    }
   }
-  if (!argp4) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CommonDepthCrosscorrelation_crossCorrSpectrum" "', argument " "4"" of type '" "R3 const &""'"); 
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CommonDepthCrosscorrelation, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CommonDepthCrosscorrelation_className(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  CommonDepthCrosscorrelation *arg1 = (CommonDepthCrosscorrelation *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  std::string result;
+  
+  (void)self;
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_CommonDepthCrosscorrelation, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CommonDepthCrosscorrelation_className" "', argument " "1"" of type '" "CommonDepthCrosscorrelation const *""'"); 
   }
-  arg4 = reinterpret_cast< R3 * >(argp4);
-  ecode5 = SWIG_AsVal_double(swig_obj[4], &val5);
-  if (!SWIG_IsOK(ecode5)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "CommonDepthCrosscorrelation_crossCorrSpectrum" "', argument " "5"" of type '" "double""'");
-  } 
-  arg5 = static_cast< double >(val5);
+  arg1 = reinterpret_cast< CommonDepthCrosscorrelation * >(argp1);
   {
     try {
-      result = (double)((CommonDepthCrosscorrelation const *)arg1)->crossCorrSpectrum((AutocorrelationModel const *)arg2,(AutocorrelationModel const *)arg3,(R3 const &)*arg4,arg5);
+      result = ((CommonDepthCrosscorrelation const *)arg1)->className();
     } catch (const std::exception& ex) {
       // message shown in the Python interpreter
       const std::string msg {
@@ -54173,7 +54330,7 @@ SWIGINTERN PyObject *_wrap_CommonDepthCrosscorrelation_crossCorrSpectrum(PyObjec
       SWIG_exception(SWIG_RuntimeError, msg.c_str());
     }
   }
-  resultobj = SWIG_From_double(static_cast< double >(result));
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
   return NULL;
@@ -54214,6 +54371,40 @@ fail:
 }
 
 
+SWIGINTERN PyObject *_wrap_CommonDepthCrosscorrelation_crossCorrDepth(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  CommonDepthCrosscorrelation *arg1 = (CommonDepthCrosscorrelation *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  double result;
+  
+  (void)self;
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_CommonDepthCrosscorrelation, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CommonDepthCrosscorrelation_crossCorrDepth" "', argument " "1"" of type '" "CommonDepthCrosscorrelation const *""'"); 
+  }
+  arg1 = reinterpret_cast< CommonDepthCrosscorrelation * >(argp1);
+  {
+    try {
+      result = (double)((CommonDepthCrosscorrelation const *)arg1)->crossCorrDepth();
+    } catch (const std::exception& ex) {
+      // message shown in the Python interpreter
+      const std::string msg {
+        "BornAgain C++ Exception: " + std::string(ex.what())
+      };
+      SWIG_exception(SWIG_RuntimeError, msg.c_str());
+    }
+  }
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
 SWIGINTERN PyObject *_wrap_delete_CommonDepthCrosscorrelation(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
   CommonDepthCrosscorrelation *arg1 = (CommonDepthCrosscorrelation *) 0 ;
@@ -74254,8 +74445,8 @@ static PyMethodDef SwigMethods[] = {
 	 { "K_CorrelationModel_className", _wrap_K_CorrelationModel_className, METH_O, "K_CorrelationModel_className(K_CorrelationModel self) -> std::string"},
 	 { "K_CorrelationModel_parDefs", _wrap_K_CorrelationModel_parDefs, METH_O, "K_CorrelationModel_parDefs(K_CorrelationModel self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
 	 { "K_CorrelationModel_validate", _wrap_K_CorrelationModel_validate, METH_O, "K_CorrelationModel_validate(K_CorrelationModel self) -> std::string"},
-	 { "K_CorrelationModel_spectralFunction", _wrap_K_CorrelationModel_spectralFunction, METH_VARARGS, "K_CorrelationModel_spectralFunction(K_CorrelationModel self, R3 k) -> double"},
-	 { "K_CorrelationModel_corrFunction", _wrap_K_CorrelationModel_corrFunction, METH_VARARGS, "K_CorrelationModel_corrFunction(K_CorrelationModel self, R3 k) -> double"},
+	 { "K_CorrelationModel_spectralFunction", _wrap_K_CorrelationModel_spectralFunction, METH_VARARGS, "K_CorrelationModel_spectralFunction(K_CorrelationModel self, R3 q) -> double"},
+	 { "K_CorrelationModel_corrFunction", _wrap_K_CorrelationModel_corrFunction, METH_VARARGS, "K_CorrelationModel_corrFunction(K_CorrelationModel self, R3 r) -> double"},
 	 { "K_CorrelationModel_setSigma", _wrap_K_CorrelationModel_setSigma, METH_VARARGS, "K_CorrelationModel_setSigma(K_CorrelationModel self, double sigma)"},
 	 { "K_CorrelationModel_sigma", _wrap_K_CorrelationModel_sigma, METH_O, "K_CorrelationModel_sigma(K_CorrelationModel self) -> double"},
 	 { "K_CorrelationModel_setHurstParameter", _wrap_K_CorrelationModel_setHurstParameter, METH_VARARGS, "K_CorrelationModel_setHurstParameter(K_CorrelationModel self, double hurstParameter)"},
@@ -74290,17 +74481,26 @@ static PyMethodDef SwigMethods[] = {
 	 { "TanhInterlayer_swigregister", TanhInterlayer_swigregister, METH_O, NULL},
 	 { "TanhInterlayer_swiginit", TanhInterlayer_swiginit, METH_VARARGS, NULL},
 	 { "CrosscorrelationModel_clone", _wrap_CrosscorrelationModel_clone, METH_O, "CrosscorrelationModel_clone(CrosscorrelationModel self) -> CrosscorrelationModel"},
-	 { "CrosscorrelationModel_crossCorrDepth", _wrap_CrosscorrelationModel_crossCorrDepth, METH_VARARGS, "CrosscorrelationModel_crossCorrDepth(CrosscorrelationModel self, R3 qvec) -> double"},
 	 { "CrosscorrelationModel_crossCorrSpectrum", _wrap_CrosscorrelationModel_crossCorrSpectrum, METH_VARARGS, "CrosscorrelationModel_crossCorrSpectrum(CrosscorrelationModel self, AutocorrelationModel up, AutocorrelationModel low, R3 qvec, double thickness) -> double"},
 	 { "delete_CrosscorrelationModel", _wrap_delete_CrosscorrelationModel, METH_O, "delete_CrosscorrelationModel(CrosscorrelationModel self)"},
 	 { "CrosscorrelationModel_swigregister", CrosscorrelationModel_swigregister, METH_O, NULL},
-	 { "new_CommonDepthCrosscorrelation", _wrap_new_CommonDepthCrosscorrelation, METH_VARARGS, "CommonDepthCrosscorrelation(double cross_corr_depth=0)"},
+	 { "new_SpatialFrequencyCrosscorrelation", _wrap_new_SpatialFrequencyCrosscorrelation, METH_VARARGS, "new_SpatialFrequencyCrosscorrelation(double base_crosscorr_depth, double base_frequency, double power) -> SpatialFrequencyCrosscorrelation"},
+	 { "SpatialFrequencyCrosscorrelation_clone", _wrap_SpatialFrequencyCrosscorrelation_clone, METH_O, "SpatialFrequencyCrosscorrelation_clone(SpatialFrequencyCrosscorrelation self) -> SpatialFrequencyCrosscorrelation"},
+	 { "SpatialFrequencyCrosscorrelation_className", _wrap_SpatialFrequencyCrosscorrelation_className, METH_O, "SpatialFrequencyCrosscorrelation_className(SpatialFrequencyCrosscorrelation self) -> std::string"},
+	 { "SpatialFrequencyCrosscorrelation_validate", _wrap_SpatialFrequencyCrosscorrelation_validate, METH_O, "SpatialFrequencyCrosscorrelation_validate(SpatialFrequencyCrosscorrelation self) -> std::string"},
+	 { "SpatialFrequencyCrosscorrelation_crossCorrSpectrum", _wrap_SpatialFrequencyCrosscorrelation_crossCorrSpectrum, METH_VARARGS, "SpatialFrequencyCrosscorrelation_crossCorrSpectrum(SpatialFrequencyCrosscorrelation self, AutocorrelationModel up, AutocorrelationModel low, R3 qvec, double thickness) -> double"},
+	 { "SpatialFrequencyCrosscorrelation_parDefs", _wrap_SpatialFrequencyCrosscorrelation_parDefs, METH_O, "SpatialFrequencyCrosscorrelation_parDefs(SpatialFrequencyCrosscorrelation self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "SpatialFrequencyCrosscorrelation_baseCrossCorrDepth", _wrap_SpatialFrequencyCrosscorrelation_baseCrossCorrDepth, METH_O, "SpatialFrequencyCrosscorrelation_baseCrossCorrDepth(SpatialFrequencyCrosscorrelation self) -> double"},
+	 { "SpatialFrequencyCrosscorrelation_baseSpatialFrequency", _wrap_SpatialFrequencyCrosscorrelation_baseSpatialFrequency, METH_O, "SpatialFrequencyCrosscorrelation_baseSpatialFrequency(SpatialFrequencyCrosscorrelation self) -> double"},
+	 { "SpatialFrequencyCrosscorrelation_power", _wrap_SpatialFrequencyCrosscorrelation_power, METH_O, "SpatialFrequencyCrosscorrelation_power(SpatialFrequencyCrosscorrelation self) -> double"},
+	 { "delete_SpatialFrequencyCrosscorrelation", _wrap_delete_SpatialFrequencyCrosscorrelation, METH_O, "delete_SpatialFrequencyCrosscorrelation(SpatialFrequencyCrosscorrelation self)"},
+	 { "SpatialFrequencyCrosscorrelation_swigregister", SpatialFrequencyCrosscorrelation_swigregister, METH_O, NULL},
+	 { "SpatialFrequencyCrosscorrelation_swiginit", SpatialFrequencyCrosscorrelation_swiginit, METH_VARARGS, NULL},
+	 { "new_CommonDepthCrosscorrelation", _wrap_new_CommonDepthCrosscorrelation, METH_O, "new_CommonDepthCrosscorrelation(double cross_corr_depth) -> CommonDepthCrosscorrelation"},
 	 { "CommonDepthCrosscorrelation_clone", _wrap_CommonDepthCrosscorrelation_clone, METH_O, "CommonDepthCrosscorrelation_clone(CommonDepthCrosscorrelation self) -> CommonDepthCrosscorrelation"},
 	 { "CommonDepthCrosscorrelation_className", _wrap_CommonDepthCrosscorrelation_className, METH_O, "CommonDepthCrosscorrelation_className(CommonDepthCrosscorrelation self) -> std::string"},
-	 { "CommonDepthCrosscorrelation_validate", _wrap_CommonDepthCrosscorrelation_validate, METH_O, "CommonDepthCrosscorrelation_validate(CommonDepthCrosscorrelation self) -> std::string"},
-	 { "CommonDepthCrosscorrelation_crossCorrDepth", _wrap_CommonDepthCrosscorrelation_crossCorrDepth, METH_VARARGS, "CommonDepthCrosscorrelation_crossCorrDepth(CommonDepthCrosscorrelation self, R3 arg2) -> double"},
-	 { "CommonDepthCrosscorrelation_crossCorrSpectrum", _wrap_CommonDepthCrosscorrelation_crossCorrSpectrum, METH_VARARGS, "CommonDepthCrosscorrelation_crossCorrSpectrum(CommonDepthCrosscorrelation self, AutocorrelationModel up, AutocorrelationModel low, R3 qvec, double thickness) -> double"},
 	 { "CommonDepthCrosscorrelation_parDefs", _wrap_CommonDepthCrosscorrelation_parDefs, METH_O, "CommonDepthCrosscorrelation_parDefs(CommonDepthCrosscorrelation self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "CommonDepthCrosscorrelation_crossCorrDepth", _wrap_CommonDepthCrosscorrelation_crossCorrDepth, METH_O, "CommonDepthCrosscorrelation_crossCorrDepth(CommonDepthCrosscorrelation self) -> double"},
 	 { "delete_CommonDepthCrosscorrelation", _wrap_delete_CommonDepthCrosscorrelation, METH_O, "delete_CommonDepthCrosscorrelation(CommonDepthCrosscorrelation self)"},
 	 { "CommonDepthCrosscorrelation_swigregister", CommonDepthCrosscorrelation_swigregister, METH_O, NULL},
 	 { "CommonDepthCrosscorrelation_swiginit", CommonDepthCrosscorrelation_swiginit, METH_VARARGS, NULL},
@@ -74917,7 +75117,10 @@ static void *_p_K_CorrelationModelTo_p_AutocorrelationModel(void *x, int *SWIGUN
     return (void *)((AutocorrelationModel *)  ((K_CorrelationModel *) x));
 }
 static void *_p_CommonDepthCrosscorrelationTo_p_CrosscorrelationModel(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((CrosscorrelationModel *)  ((CommonDepthCrosscorrelation *) x));
+    return (void *)((CrosscorrelationModel *) (SpatialFrequencyCrosscorrelation *) ((CommonDepthCrosscorrelation *) x));
+}
+static void *_p_SpatialFrequencyCrosscorrelationTo_p_CrosscorrelationModel(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CrosscorrelationModel *)  ((SpatialFrequencyCrosscorrelation *) x));
 }
 static void *_p_AutocorrelationModelTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *)  ((AutocorrelationModel *) x));
@@ -74941,7 +75144,7 @@ static void *_p_CantellatedCubeTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newm
     return (void *)((ICloneable *) (ISampleNode *)(IFormfactor *)(IFormfactorPolyhedron *) ((CantellatedCube *) x));
 }
 static void *_p_CommonDepthCrosscorrelationTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (CrosscorrelationModel *) ((CommonDepthCrosscorrelation *) x));
+    return (void *)((ICloneable *) (CrosscorrelationModel *)(SpatialFrequencyCrosscorrelation *) ((CommonDepthCrosscorrelation *) x));
 }
 static void *_p_CompoundTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (ISampleNode *)(IParticle *) ((Compound *) x));
@@ -75195,6 +75398,9 @@ static void *_p_SawtoothRippleGaussTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(
 static void *_p_SawtoothRippleLorentzTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (ISampleNode *)(IFormfactor *)(IProfileRipple *)(ISawtoothRipple *) ((SawtoothRippleLorentz *) x));
 }
+static void *_p_SpatialFrequencyCrosscorrelationTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ICloneable *) (CrosscorrelationModel *) ((SpatialFrequencyCrosscorrelation *) x));
+}
 static void *_p_SphereTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (ISampleNode *)(IFormfactor *) ((Sphere *) x));
 }
@@ -75454,7 +75660,7 @@ static void *_p_CantellatedCubeTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory
     return (void *)((INode *) (ISampleNode *)(IFormfactor *)(IFormfactorPolyhedron *) ((CantellatedCube *) x));
 }
 static void *_p_CommonDepthCrosscorrelationTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (CrosscorrelationModel *) ((CommonDepthCrosscorrelation *) x));
+    return (void *)((INode *) (CrosscorrelationModel *)(SpatialFrequencyCrosscorrelation *) ((CommonDepthCrosscorrelation *) x));
 }
 static void *_p_CompoundTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (ISampleNode *)(IParticle *) ((Compound *) x));
@@ -75711,6 +75917,9 @@ static void *_p_SawtoothRippleGaussTo_p_INode(void *x, int *SWIGUNUSEDPARM(newme
 static void *_p_SawtoothRippleLorentzTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (ISampleNode *)(IFormfactor *)(IProfileRipple *)(ISawtoothRipple *) ((SawtoothRippleLorentz *) x));
 }
+static void *_p_SpatialFrequencyCrosscorrelationTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((INode *) (CrosscorrelationModel *) ((SpatialFrequencyCrosscorrelation *) x));
+}
 static void *_p_SphereTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (ISampleNode *)(IFormfactor *) ((Sphere *) x));
 }
@@ -76032,6 +76241,9 @@ static void *_p_HexagonalLattice2DTo_p_Lattice2D(void *x, int *SWIGUNUSEDPARM(ne
 static void *_p_SquareLattice2DTo_p_Lattice2D(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((Lattice2D *)  ((SquareLattice2D *) x));
 }
+static void *_p_CommonDepthCrosscorrelationTo_p_SpatialFrequencyCrosscorrelation(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((SpatialFrequencyCrosscorrelation *)  ((CommonDepthCrosscorrelation *) x));
+}
 static swig_type_info _swigt__p_AutocorrelationModel = {"_p_AutocorrelationModel", "AutocorrelationModel *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_BarGauss = {"_p_BarGauss", "BarGauss *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_BarLorentz = {"_p_BarLorentz", "BarLorentz *", 0, 0, (void*)0, 0};
@@ -76137,6 +76349,7 @@ static swig_type_info _swigt__p_SawtoothRippleGauss = {"_p_SawtoothRippleGauss",
 static swig_type_info _swigt__p_SawtoothRippleLorentz = {"_p_SawtoothRippleLorentz", "SawtoothRippleLorentz *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_SimpleSelectionRule = {"_p_SimpleSelectionRule", "SimpleSelectionRule *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_Span = {"_p_Span", "Span *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_SpatialFrequencyCrosscorrelation = {"_p_SpatialFrequencyCrosscorrelation", "SpatialFrequencyCrosscorrelation *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_Sphere = {"_p_Sphere", "Sphere *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_Spheroid = {"_p_Spheroid", "Spheroid *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_SpinMatrix = {"_p_SpinMatrix", "SpinMatrix *", 0, 0, (void*)0, 0};
@@ -76304,6 +76517,7 @@ static swig_type_info *swig_type_initial[] = {
   &_swigt__p_SawtoothRippleLorentz,
   &_swigt__p_SimpleSelectionRule,
   &_swigt__p_Span,
+  &_swigt__p_SpatialFrequencyCrosscorrelation,
   &_swigt__p_Sphere,
   &_swigt__p_Spheroid,
   &_swigt__p_SpinMatrix,
@@ -76380,7 +76594,7 @@ static swig_cast_info _swigc__p_CoreAndShell[] = {  {&_swigt__p_CoreAndShell, 0,
 static swig_cast_info _swigc__p_CosineRippleBox[] = {  {&_swigt__p_CosineRippleBox, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_CosineRippleGauss[] = {  {&_swigt__p_CosineRippleGauss, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_CosineRippleLorentz[] = {  {&_swigt__p_CosineRippleLorentz, 0, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_CrosscorrelationModel[] = {  {&_swigt__p_CrosscorrelationModel, 0, 0, 0},  {&_swigt__p_CommonDepthCrosscorrelation, _p_CommonDepthCrosscorrelationTo_p_CrosscorrelationModel, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CrosscorrelationModel[] = {  {&_swigt__p_CrosscorrelationModel, 0, 0, 0},  {&_swigt__p_CommonDepthCrosscorrelation, _p_CommonDepthCrosscorrelationTo_p_CrosscorrelationModel, 0, 0},  {&_swigt__p_SpatialFrequencyCrosscorrelation, _p_SpatialFrequencyCrosscorrelationTo_p_CrosscorrelationModel, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_Crystal[] = {  {&_swigt__p_Crystal, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_Cylinder[] = {  {&_swigt__p_Cylinder, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_Dodecahedron[] = {  {&_swigt__p_Dodecahedron, 0, 0, 0},{0, 0, 0, 0}};
@@ -76392,14 +76606,14 @@ static swig_cast_info _swigc__p_GaussSphere[] = {  {&_swigt__p_GaussSphere, 0, 0
 static swig_cast_info _swigc__p_HemiEllipsoid[] = {  {&_swigt__p_HemiEllipsoid, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_HexagonalLattice2D[] = {  {&_swigt__p_HexagonalLattice2D, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_HorizontalCylinder[] = {  {&_swigt__p_HorizontalCylinder, 0, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_ICloneable[] = {  {&_swigt__p_ICloneable, 0, 0, 0},  {&_swigt__p_AutocorrelationModel, _p_AutocorrelationModelTo_p_ICloneable, 0, 0},  {&_swigt__p_BarGauss, _p_BarGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_BarLorentz, _p_BarLorentzTo_p_ICloneable, 0, 0},  {&_swigt__p_BasicLattice2D, _p_BasicLattice2DTo_p_ICloneable, 0, 0},  {&_swigt__p_Bipyramid4, _p_Bipyramid4To_p_ICloneable, 0, 0},  {&_swigt__p_Box, _p_BoxTo_p_ICloneable, 0, 0},  {&_swigt__p_CantellatedCube, _p_CantellatedCubeTo_p_ICloneable, 0, 0},  {&_swigt__p_CommonDepthCrosscorrelation, _p_CommonDepthCrosscorrelationTo_p_ICloneable, 0, 0},  {&_swigt__p_Compound, _p_CompoundTo_p_ICloneable, 0, 0},  {&_swigt__p_Cone, _p_ConeTo_p_ICloneable, 0, 0},  {&_swigt__p_CoreAndShell, _p_CoreAndShellTo_p_ICloneable, 0, 0},  {&_swigt__p_CosineRippleBox, _p_CosineRippleBoxTo_p_ICloneable, 0, 0},  {&_swigt__p_CosineRippleGauss, _p_CosineRippleGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_CosineRippleLorentz, _p_CosineRippleLorentzTo_p_ICloneable, 0, 0},  {&_swigt__p_CrosscorrelationModel, _p_CrosscorrelationModelTo_p_ICloneable, 0, 0},  {&_swigt__p_Crystal, _p_CrystalTo_p_ICloneable, 0, 0},  {&_swigt__p_Cylinder, _p_CylinderTo_p_ICloneable, 0, 0},  {&_swigt__p_Dodecahedron, _p_DodecahedronTo_p_ICloneable, 0, 0},  {&_swigt__p_EllipsoidalCylinder, _p_EllipsoidalCylinderTo_p_ICloneable, 0, 0},  {&_swigt__p_ErfInterlayer, _p_ErfInterlayerTo_p_ICloneable, 0, 0},  {&_swigt__p_FuzzySphere, _p_FuzzySphereTo_p_ICloneable, 0, 0},  {&_swigt__p_GaussFisherPeakShape, _p_GaussFisherPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_GaussSphere, _p_GaussSphereTo_p_ICloneable, 0, 0},  {&_swigt__p_HemiEllipsoid, _p_HemiEllipsoidTo_p_ICloneable, 0, 0},  {&_swigt__p_HexagonalLattice2D, _p_HexagonalLattice2DTo_p_ICloneable, 0, 0},  {&_swigt__p_HorizontalCylinder, _p_HorizontalCylinderTo_p_ICloneable, 0, 0},  {&_swigt__p_ICosineRipple, _p_ICosineRippleTo_p_ICloneable, 0, 0},  {&_swigt__p_IFormfactor, _p_IFormfactorTo_p_ICloneable, 0, 0},  {&_swigt__p_IFormfactorPolyhedron, _p_IFormfactorPolyhedronTo_p_ICloneable, 0, 0},  {&_swigt__p_IFormfactorPrism, _p_IFormfactorPrismTo_p_ICloneable, 0, 0},  {&_swigt__p_IInterference, _p_IInterferenceTo_p_ICloneable, 0, 0},  {&_swigt__p_IParticle, _p_IParticleTo_p_ICloneable, 0, 0},  {&_swigt__p_IPeakShape, _p_IPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_IProfile1D, _p_IProfile1DTo_p_ICloneable, 0, 0},  {&_swigt__p_IProfile2D, _p_IProfile2DTo_p_ICloneable, 0, 0},  {&_swigt__p_IProfileRectangularRipple, _p_IProfileRectangularRippleTo_p_ICloneable, 0, 0},  {&_swigt__p_IProfileRipple, _p_IProfileRippleTo_p_ICloneable, 0, 0},  {&_swigt__p_IRotation, _p_IRotationTo_p_ICloneable, 0, 0},  {&_swigt__p_ISampleNode, _p_ISampleNodeTo_p_ICloneable, 0, 0},  {&_swigt__p_ISawtoothRipple, _p_ISawtoothRippleTo_p_ICloneable, 0, 0},  {&_swigt__p_Icosahedron, _p_IcosahedronTo_p_ICloneable, 0, 0},  {&_swigt__p_IdentityRotation, _p_IdentityRotationTo_p_ICloneable, 0, 0},  {&_swigt__p_Interference1DLattice, _p_Interference1DLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_Interference2DLattice, _p_Interference2DLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_Interference2DParacrystal, _p_Interference2DParacrystalTo_p_ICloneable, 0, 0},  {&_swigt__p_Interference2DSuperLattice, _p_Interference2DSuperLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFinite2DLattice, _p_InterferenceFinite2DLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceHardDisk, _p_InterferenceHardDiskTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceNone, _p_InterferenceNoneTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceRadialParacrystal, _p_InterferenceRadialParacrystalTo_p_ICloneable, 0, 0},  {&_swigt__p_InterlayerModel, _p_InterlayerModelTo_p_ICloneable, 0, 0},  {&_swigt__p_IsotropicGaussPeakShape, _p_IsotropicGaussPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_IsotropicLorentzPeakShape, _p_IsotropicLorentzPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_K_CorrelationModel, _p_K_CorrelationModelTo_p_ICloneable, 0, 0},  {&_swigt__p_Lattice2D, _p_Lattice2DTo_p_ICloneable, 0, 0},  {&_swigt__p_Layer, _p_LayerTo_p_ICloneable, 0, 0},  {&_swigt__p_LayerRoughness, _p_LayerRoughnessTo_p_ICloneable, 0, 0},  {&_swigt__p_LongBoxGauss, _p_LongBoxGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_LongBoxLorentz, _p_LongBoxLorentzTo_p_ICloneable, 0, 0},  {&_swigt__p_LorentzFisherPeakShape, _p_LorentzFisherPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_Mesocrystal, _p_MesocrystalTo_p_ICloneable, 0, 0},  {&_swigt__p_MisesFisherGaussPeakShape, _p_MisesFisherGaussPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_MisesGaussPeakShape, _p_MisesGaussPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_MultiLayer, _p_MultiLayerTo_p_ICloneable, 0, 0},  {&_swigt__p_Particle, _p_ParticleTo_p_ICloneable, 0, 0},  {&_swigt__p_ParticleLayout, _p_ParticleLayoutTo_p_ICloneable, 0, 0},  {&_swigt__p_PlatonicOctahedron, _p_PlatonicOctahedronTo_p_ICloneable, 0, 0},  {&_swigt__p_PlatonicTetrahedron, _p_PlatonicTetrahedronTo_p_ICloneable, 0, 0},  {&_swigt__p_Prism3, _p_Prism3To_p_ICloneable, 0, 0},  {&_swigt__p_Prism6, _p_Prism6To_p_ICloneable, 0, 0},  {&_swigt__p_Profile1DCauchy, _p_Profile1DCauchyTo_p_ICloneable, 0, 0},  {&_swigt__p_Profile1DCosine, _p_Profile1DCosineTo_p_ICloneable, 0, 0},  {&_swigt__p_Profile1DGate, _p_Profile1DGateTo_p_ICloneable, 0, 0},  {&_swigt__p_Profile1DGauss, _p_Profile1DGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_Profile1DTriangle, _p_Profile1DTriangleTo_p_ICloneable, 0, 0},  {&_swigt__p_Profile1DVoigt, _p_Profile1DVoigtTo_p_ICloneable, 0, 0},  {&_swigt__p_Profile2DCauchy, _p_Profile2DCauchyTo_p_ICloneable, 0, 0},  {&_swigt__p_Profile2DCone, _p_Profile2DConeTo_p_ICloneable, 0, 0},  {&_swigt__p_Profile2DGate, _p_Profile2DGateTo_p_ICloneable, 0, 0},  {&_swigt__p_Profile2DGauss, _p_Profile2DGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_Profile2DVoigt, _p_Profile2DVoigtTo_p_ICloneable, 0, 0},  {&_swigt__p_Pyramid2, _p_Pyramid2To_p_ICloneable, 0, 0},  {&_swigt__p_Pyramid3, _p_Pyramid3To_p_ICloneable, 0, 0},  {&_swigt__p_Pyramid4, _p_Pyramid4To_p_ICloneable, 0, 0},  {&_swigt__p_Pyramid6, _p_Pyramid6To_p_ICloneable, 0, 0},  {&_swigt__p_RotationEuler, _p_RotationEulerTo_p_ICloneable, 0, 0},  {&_swigt__p_RotationX, _p_RotationXTo_p_ICloneable, 0, 0},  {&_swigt__p_RotationY, _p_RotationYTo_p_ICloneable, 0, 0},  {&_swigt__p_RotationZ, _p_RotationZTo_p_ICloneable, 0, 0},  {&_swigt__p_SawtoothRippleBox, _p_SawtoothRippleBoxTo_p_ICloneable, 0, 0},  {&_swigt__p_SawtoothRippleGauss, _p_SawtoothRippleGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_SawtoothRippleLorentz, _p_SawtoothRippleLorentzTo_p_ICloneable, 0, 0},  {&_swigt__p_Sphere, _p_SphereTo_p_ICloneable, 0, 0},  {&_swigt__p_Spheroid, _p_SpheroidTo_p_ICloneable, 0, 0},  {&_swigt__p_SquareLattice2D, _p_SquareLattice2DTo_p_ICloneable, 0, 0},  {&_swigt__p_TanhInterlayer, _p_TanhInterlayerTo_p_ICloneable, 0, 0},  {&_swigt__p_TruncatedCube, _p_TruncatedCubeTo_p_ICloneable, 0, 0},  {&_swigt__p_TruncatedSphere, _p_TruncatedSphereTo_p_ICloneable, 0, 0},  {&_swigt__p_TruncatedSpheroid, _p_TruncatedSpheroidTo_p_ICloneable, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_ICloneable[] = {  {&_swigt__p_ICloneable, 0, 0, 0},  {&_swigt__p_AutocorrelationModel, _p_AutocorrelationModelTo_p_ICloneable, 0, 0},  {&_swigt__p_BarGauss, _p_BarGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_BarLorentz, _p_BarLorentzTo_p_ICloneable, 0, 0},  {&_swigt__p_BasicLattice2D, _p_BasicLattice2DTo_p_ICloneable, 0, 0},  {&_swigt__p_Bipyramid4, _p_Bipyramid4To_p_ICloneable, 0, 0},  {&_swigt__p_Box, _p_BoxTo_p_ICloneable, 0, 0},  {&_swigt__p_CantellatedCube, _p_CantellatedCubeTo_p_ICloneable, 0, 0},  {&_swigt__p_CommonDepthCrosscorrelation, _p_CommonDepthCrosscorrelationTo_p_ICloneable, 0, 0},  {&_swigt__p_Compound, _p_CompoundTo_p_ICloneable, 0, 0},  {&_swigt__p_Cone, _p_ConeTo_p_ICloneable, 0, 0},  {&_swigt__p_CoreAndShell, _p_CoreAndShellTo_p_ICloneable, 0, 0},  {&_swigt__p_CosineRippleBox, _p_CosineRippleBoxTo_p_ICloneable, 0, 0},  {&_swigt__p_CosineRippleGauss, _p_CosineRippleGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_CosineRippleLorentz, _p_CosineRippleLorentzTo_p_ICloneable, 0, 0},  {&_swigt__p_CrosscorrelationModel, _p_CrosscorrelationModelTo_p_ICloneable, 0, 0},  {&_swigt__p_Crystal, _p_CrystalTo_p_ICloneable, 0, 0},  {&_swigt__p_Cylinder, _p_CylinderTo_p_ICloneable, 0, 0},  {&_swigt__p_Dodecahedron, _p_DodecahedronTo_p_ICloneable, 0, 0},  {&_swigt__p_EllipsoidalCylinder, _p_EllipsoidalCylinderTo_p_ICloneable, 0, 0},  {&_swigt__p_ErfInterlayer, _p_ErfInterlayerTo_p_ICloneable, 0, 0},  {&_swigt__p_FuzzySphere, _p_FuzzySphereTo_p_ICloneable, 0, 0},  {&_swigt__p_GaussFisherPeakShape, _p_GaussFisherPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_GaussSphere, _p_GaussSphereTo_p_ICloneable, 0, 0},  {&_swigt__p_HemiEllipsoid, _p_HemiEllipsoidTo_p_ICloneable, 0, 0},  {&_swigt__p_HexagonalLattice2D, _p_HexagonalLattice2DTo_p_ICloneable, 0, 0},  {&_swigt__p_HorizontalCylinder, _p_HorizontalCylinderTo_p_ICloneable, 0, 0},  {&_swigt__p_ICosineRipple, _p_ICosineRippleTo_p_ICloneable, 0, 0},  {&_swigt__p_IFormfactor, _p_IFormfactorTo_p_ICloneable, 0, 0},  {&_swigt__p_IFormfactorPolyhedron, _p_IFormfactorPolyhedronTo_p_ICloneable, 0, 0},  {&_swigt__p_IFormfactorPrism, _p_IFormfactorPrismTo_p_ICloneable, 0, 0},  {&_swigt__p_IInterference, _p_IInterferenceTo_p_ICloneable, 0, 0},  {&_swigt__p_IParticle, _p_IParticleTo_p_ICloneable, 0, 0},  {&_swigt__p_IPeakShape, _p_IPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_IProfile1D, _p_IProfile1DTo_p_ICloneable, 0, 0},  {&_swigt__p_IProfile2D, _p_IProfile2DTo_p_ICloneable, 0, 0},  {&_swigt__p_IProfileRectangularRipple, _p_IProfileRectangularRippleTo_p_ICloneable, 0, 0},  {&_swigt__p_IProfileRipple, _p_IProfileRippleTo_p_ICloneable, 0, 0},  {&_swigt__p_IRotation, _p_IRotationTo_p_ICloneable, 0, 0},  {&_swigt__p_ISampleNode, _p_ISampleNodeTo_p_ICloneable, 0, 0},  {&_swigt__p_ISawtoothRipple, _p_ISawtoothRippleTo_p_ICloneable, 0, 0},  {&_swigt__p_Icosahedron, _p_IcosahedronTo_p_ICloneable, 0, 0},  {&_swigt__p_IdentityRotation, _p_IdentityRotationTo_p_ICloneable, 0, 0},  {&_swigt__p_Interference1DLattice, _p_Interference1DLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_Interference2DLattice, _p_Interference2DLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_Interference2DParacrystal, _p_Interference2DParacrystalTo_p_ICloneable, 0, 0},  {&_swigt__p_Interference2DSuperLattice, _p_Interference2DSuperLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFinite2DLattice, _p_InterferenceFinite2DLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceHardDisk, _p_InterferenceHardDiskTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceNone, _p_InterferenceNoneTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceRadialParacrystal, _p_InterferenceRadialParacrystalTo_p_ICloneable, 0, 0},  {&_swigt__p_InterlayerModel, _p_InterlayerModelTo_p_ICloneable, 0, 0},  {&_swigt__p_IsotropicGaussPeakShape, _p_IsotropicGaussPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_IsotropicLorentzPeakShape, _p_IsotropicLorentzPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_K_CorrelationModel, _p_K_CorrelationModelTo_p_ICloneable, 0, 0},  {&_swigt__p_Lattice2D, _p_Lattice2DTo_p_ICloneable, 0, 0},  {&_swigt__p_Layer, _p_LayerTo_p_ICloneable, 0, 0},  {&_swigt__p_LayerRoughness, _p_LayerRoughnessTo_p_ICloneable, 0, 0},  {&_swigt__p_LongBoxGauss, _p_LongBoxGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_LongBoxLorentz, _p_LongBoxLorentzTo_p_ICloneable, 0, 0},  {&_swigt__p_LorentzFisherPeakShape, _p_LorentzFisherPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_Mesocrystal, _p_MesocrystalTo_p_ICloneable, 0, 0},  {&_swigt__p_MisesFisherGaussPeakShape, _p_MisesFisherGaussPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_MisesGaussPeakShape, _p_MisesGaussPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_MultiLayer, _p_MultiLayerTo_p_ICloneable, 0, 0},  {&_swigt__p_Particle, _p_ParticleTo_p_ICloneable, 0, 0},  {&_swigt__p_ParticleLayout, _p_ParticleLayoutTo_p_ICloneable, 0, 0},  {&_swigt__p_PlatonicOctahedron, _p_PlatonicOctahedronTo_p_ICloneable, 0, 0},  {&_swigt__p_PlatonicTetrahedron, _p_PlatonicTetrahedronTo_p_ICloneable, 0, 0},  {&_swigt__p_Prism3, _p_Prism3To_p_ICloneable, 0, 0},  {&_swigt__p_Prism6, _p_Prism6To_p_ICloneable, 0, 0},  {&_swigt__p_Profile1DCauchy, _p_Profile1DCauchyTo_p_ICloneable, 0, 0},  {&_swigt__p_Profile1DCosine, _p_Profile1DCosineTo_p_ICloneable, 0, 0},  {&_swigt__p_Profile1DGate, _p_Profile1DGateTo_p_ICloneable, 0, 0},  {&_swigt__p_Profile1DGauss, _p_Profile1DGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_Profile1DTriangle, _p_Profile1DTriangleTo_p_ICloneable, 0, 0},  {&_swigt__p_Profile1DVoigt, _p_Profile1DVoigtTo_p_ICloneable, 0, 0},  {&_swigt__p_Profile2DCauchy, _p_Profile2DCauchyTo_p_ICloneable, 0, 0},  {&_swigt__p_Profile2DCone, _p_Profile2DConeTo_p_ICloneable, 0, 0},  {&_swigt__p_Profile2DGate, _p_Profile2DGateTo_p_ICloneable, 0, 0},  {&_swigt__p_Profile2DGauss, _p_Profile2DGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_Profile2DVoigt, _p_Profile2DVoigtTo_p_ICloneable, 0, 0},  {&_swigt__p_Pyramid2, _p_Pyramid2To_p_ICloneable, 0, 0},  {&_swigt__p_Pyramid3, _p_Pyramid3To_p_ICloneable, 0, 0},  {&_swigt__p_Pyramid4, _p_Pyramid4To_p_ICloneable, 0, 0},  {&_swigt__p_Pyramid6, _p_Pyramid6To_p_ICloneable, 0, 0},  {&_swigt__p_RotationEuler, _p_RotationEulerTo_p_ICloneable, 0, 0},  {&_swigt__p_RotationX, _p_RotationXTo_p_ICloneable, 0, 0},  {&_swigt__p_RotationY, _p_RotationYTo_p_ICloneable, 0, 0},  {&_swigt__p_RotationZ, _p_RotationZTo_p_ICloneable, 0, 0},  {&_swigt__p_SawtoothRippleBox, _p_SawtoothRippleBoxTo_p_ICloneable, 0, 0},  {&_swigt__p_SawtoothRippleGauss, _p_SawtoothRippleGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_SawtoothRippleLorentz, _p_SawtoothRippleLorentzTo_p_ICloneable, 0, 0},  {&_swigt__p_SpatialFrequencyCrosscorrelation, _p_SpatialFrequencyCrosscorrelationTo_p_ICloneable, 0, 0},  {&_swigt__p_Sphere, _p_SphereTo_p_ICloneable, 0, 0},  {&_swigt__p_Spheroid, _p_SpheroidTo_p_ICloneable, 0, 0},  {&_swigt__p_SquareLattice2D, _p_SquareLattice2DTo_p_ICloneable, 0, 0},  {&_swigt__p_TanhInterlayer, _p_TanhInterlayerTo_p_ICloneable, 0, 0},  {&_swigt__p_TruncatedCube, _p_TruncatedCubeTo_p_ICloneable, 0, 0},  {&_swigt__p_TruncatedSphere, _p_TruncatedSphereTo_p_ICloneable, 0, 0},  {&_swigt__p_TruncatedSpheroid, _p_TruncatedSpheroidTo_p_ICloneable, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_ICosineRipple[] = {  {&_swigt__p_ICosineRipple, 0, 0, 0},  {&_swigt__p_CosineRippleBox, _p_CosineRippleBoxTo_p_ICosineRipple, 0, 0},  {&_swigt__p_CosineRippleGauss, _p_CosineRippleGaussTo_p_ICosineRipple, 0, 0},  {&_swigt__p_CosineRippleLorentz, _p_CosineRippleLorentzTo_p_ICosineRipple, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IFormfactor[] = {  {&_swigt__p_IFormfactor, 0, 0, 0},  {&_swigt__p_BarGauss, _p_BarGaussTo_p_IFormfactor, 0, 0},  {&_swigt__p_BarLorentz, _p_BarLorentzTo_p_IFormfactor, 0, 0},  {&_swigt__p_Bipyramid4, _p_Bipyramid4To_p_IFormfactor, 0, 0},  {&_swigt__p_Box, _p_BoxTo_p_IFormfactor, 0, 0},  {&_swigt__p_CantellatedCube, _p_CantellatedCubeTo_p_IFormfactor, 0, 0},  {&_swigt__p_Cone, _p_ConeTo_p_IFormfactor, 0, 0},  {&_swigt__p_CosineRippleBox, _p_CosineRippleBoxTo_p_IFormfactor, 0, 0},  {&_swigt__p_CosineRippleGauss, _p_CosineRippleGaussTo_p_IFormfactor, 0, 0},  {&_swigt__p_CosineRippleLorentz, _p_CosineRippleLorentzTo_p_IFormfactor, 0, 0},  {&_swigt__p_Cylinder, _p_CylinderTo_p_IFormfactor, 0, 0},  {&_swigt__p_Dodecahedron, _p_DodecahedronTo_p_IFormfactor, 0, 0},  {&_swigt__p_EllipsoidalCylinder, _p_EllipsoidalCylinderTo_p_IFormfactor, 0, 0},  {&_swigt__p_FuzzySphere, _p_FuzzySphereTo_p_IFormfactor, 0, 0},  {&_swigt__p_GaussSphere, _p_GaussSphereTo_p_IFormfactor, 0, 0},  {&_swigt__p_HemiEllipsoid, _p_HemiEllipsoidTo_p_IFormfactor, 0, 0},  {&_swigt__p_HorizontalCylinder, _p_HorizontalCylinderTo_p_IFormfactor, 0, 0},  {&_swigt__p_ICosineRipple, _p_ICosineRippleTo_p_IFormfactor, 0, 0},  {&_swigt__p_IFormfactorPolyhedron, _p_IFormfactorPolyhedronTo_p_IFormfactor, 0, 0},  {&_swigt__p_IFormfactorPrism, _p_IFormfactorPrismTo_p_IFormfactor, 0, 0},  {&_swigt__p_IProfileRectangularRipple, _p_IProfileRectangularRippleTo_p_IFormfactor, 0, 0},  {&_swigt__p_IProfileRipple, _p_IProfileRippleTo_p_IFormfactor, 0, 0},  {&_swigt__p_ISawtoothRipple, _p_ISawtoothRippleTo_p_IFormfactor, 0, 0},  {&_swigt__p_Icosahedron, _p_IcosahedronTo_p_IFormfactor, 0, 0},  {&_swigt__p_LongBoxGauss, _p_LongBoxGaussTo_p_IFormfactor, 0, 0},  {&_swigt__p_LongBoxLorentz, _p_LongBoxLorentzTo_p_IFormfactor, 0, 0},  {&_swigt__p_PlatonicOctahedron, _p_PlatonicOctahedronTo_p_IFormfactor, 0, 0},  {&_swigt__p_PlatonicTetrahedron, _p_PlatonicTetrahedronTo_p_IFormfactor, 0, 0},  {&_swigt__p_Prism3, _p_Prism3To_p_IFormfactor, 0, 0},  {&_swigt__p_Prism6, _p_Prism6To_p_IFormfactor, 0, 0},  {&_swigt__p_Pyramid2, _p_Pyramid2To_p_IFormfactor, 0, 0},  {&_swigt__p_Pyramid3, _p_Pyramid3To_p_IFormfactor, 0, 0},  {&_swigt__p_Pyramid4, _p_Pyramid4To_p_IFormfactor, 0, 0},  {&_swigt__p_Pyramid6, _p_Pyramid6To_p_IFormfactor, 0, 0},  {&_swigt__p_SawtoothRippleBox, _p_SawtoothRippleBoxTo_p_IFormfactor, 0, 0},  {&_swigt__p_SawtoothRippleGauss, _p_SawtoothRippleGaussTo_p_IFormfactor, 0, 0},  {&_swigt__p_SawtoothRippleLorentz, _p_SawtoothRippleLorentzTo_p_IFormfactor, 0, 0},  {&_swigt__p_Sphere, _p_SphereTo_p_IFormfactor, 0, 0},  {&_swigt__p_Spheroid, _p_SpheroidTo_p_IFormfactor, 0, 0},  {&_swigt__p_TruncatedCube, _p_TruncatedCubeTo_p_IFormfactor, 0, 0},  {&_swigt__p_TruncatedSphere, _p_TruncatedSphereTo_p_IFormfactor, 0, 0},  {&_swigt__p_TruncatedSpheroid, _p_TruncatedSpheroidTo_p_IFormfactor, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IFormfactorPolyhedron[] = {  {&_swigt__p_IFormfactorPolyhedron, 0, 0, 0},  {&_swigt__p_Bipyramid4, _p_Bipyramid4To_p_IFormfactorPolyhedron, 0, 0},  {&_swigt__p_Box, _p_BoxTo_p_IFormfactorPolyhedron, 0, 0},  {&_swigt__p_CantellatedCube, _p_CantellatedCubeTo_p_IFormfactorPolyhedron, 0, 0},  {&_swigt__p_Dodecahedron, _p_DodecahedronTo_p_IFormfactorPolyhedron, 0, 0},  {&_swigt__p_IFormfactorPrism, _p_IFormfactorPrismTo_p_IFormfactorPolyhedron, 0, 0},  {&_swigt__p_Icosahedron, _p_IcosahedronTo_p_IFormfactorPolyhedron, 0, 0},  {&_swigt__p_PlatonicOctahedron, _p_PlatonicOctahedronTo_p_IFormfactorPolyhedron, 0, 0},  {&_swigt__p_PlatonicTetrahedron, _p_PlatonicTetrahedronTo_p_IFormfactorPolyhedron, 0, 0},  {&_swigt__p_Prism3, _p_Prism3To_p_IFormfactorPolyhedron, 0, 0},  {&_swigt__p_Prism6, _p_Prism6To_p_IFormfactorPolyhedron, 0, 0},  {&_swigt__p_Pyramid2, _p_Pyramid2To_p_IFormfactorPolyhedron, 0, 0},  {&_swigt__p_Pyramid3, _p_Pyramid3To_p_IFormfactorPolyhedron, 0, 0},  {&_swigt__p_Pyramid4, _p_Pyramid4To_p_IFormfactorPolyhedron, 0, 0},  {&_swigt__p_Pyramid6, _p_Pyramid6To_p_IFormfactorPolyhedron, 0, 0},  {&_swigt__p_TruncatedCube, _p_TruncatedCubeTo_p_IFormfactorPolyhedron, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IFormfactorPrism[] = {  {&_swigt__p_IFormfactorPrism, 0, 0, 0},  {&_swigt__p_Box, _p_BoxTo_p_IFormfactorPrism, 0, 0},  {&_swigt__p_Prism3, _p_Prism3To_p_IFormfactorPrism, 0, 0},  {&_swigt__p_Prism6, _p_Prism6To_p_IFormfactorPrism, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IInterference[] = {  {&_swigt__p_IInterference, 0, 0, 0},  {&_swigt__p_Interference1DLattice, _p_Interference1DLatticeTo_p_IInterference, 0, 0},  {&_swigt__p_Interference2DLattice, _p_Interference2DLatticeTo_p_IInterference, 0, 0},  {&_swigt__p_Interference2DParacrystal, _p_Interference2DParacrystalTo_p_IInterference, 0, 0},  {&_swigt__p_Interference2DSuperLattice, _p_Interference2DSuperLatticeTo_p_IInterference, 0, 0},  {&_swigt__p_InterferenceFinite2DLattice, _p_InterferenceFinite2DLatticeTo_p_IInterference, 0, 0},  {&_swigt__p_InterferenceHardDisk, _p_InterferenceHardDiskTo_p_IInterference, 0, 0},  {&_swigt__p_InterferenceNone, _p_InterferenceNoneTo_p_IInterference, 0, 0},  {&_swigt__p_InterferenceRadialParacrystal, _p_InterferenceRadialParacrystalTo_p_IInterference, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IMaterialImpl[] = {  {&_swigt__p_IMaterialImpl, 0, 0, 0},  {&_swigt__p_MaterialBySLDImpl, _p_MaterialBySLDImplTo_p_IMaterialImpl, 0, 0},  {&_swigt__p_RefractiveMaterialImpl, _p_RefractiveMaterialImplTo_p_IMaterialImpl, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_INode[] = {  {&_swigt__p_INode, 0, 0, 0},  {&_swigt__p_AutocorrelationModel, _p_AutocorrelationModelTo_p_INode, 0, 0},  {&_swigt__p_BarGauss, _p_BarGaussTo_p_INode, 0, 0},  {&_swigt__p_BarLorentz, _p_BarLorentzTo_p_INode, 0, 0},  {&_swigt__p_BasicLattice2D, _p_BasicLattice2DTo_p_INode, 0, 0},  {&_swigt__p_Bipyramid4, _p_Bipyramid4To_p_INode, 0, 0},  {&_swigt__p_Box, _p_BoxTo_p_INode, 0, 0},  {&_swigt__p_CantellatedCube, _p_CantellatedCubeTo_p_INode, 0, 0},  {&_swigt__p_CommonDepthCrosscorrelation, _p_CommonDepthCrosscorrelationTo_p_INode, 0, 0},  {&_swigt__p_Compound, _p_CompoundTo_p_INode, 0, 0},  {&_swigt__p_Cone, _p_ConeTo_p_INode, 0, 0},  {&_swigt__p_CoreAndShell, _p_CoreAndShellTo_p_INode, 0, 0},  {&_swigt__p_CosineRippleBox, _p_CosineRippleBoxTo_p_INode, 0, 0},  {&_swigt__p_CosineRippleGauss, _p_CosineRippleGaussTo_p_INode, 0, 0},  {&_swigt__p_CosineRippleLorentz, _p_CosineRippleLorentzTo_p_INode, 0, 0},  {&_swigt__p_CrosscorrelationModel, _p_CrosscorrelationModelTo_p_INode, 0, 0},  {&_swigt__p_Crystal, _p_CrystalTo_p_INode, 0, 0},  {&_swigt__p_Cylinder, _p_CylinderTo_p_INode, 0, 0},  {&_swigt__p_Dodecahedron, _p_DodecahedronTo_p_INode, 0, 0},  {&_swigt__p_EllipsoidalCylinder, _p_EllipsoidalCylinderTo_p_INode, 0, 0},  {&_swigt__p_ErfInterlayer, _p_ErfInterlayerTo_p_INode, 0, 0},  {&_swigt__p_FuzzySphere, _p_FuzzySphereTo_p_INode, 0, 0},  {&_swigt__p_GaussFisherPeakShape, _p_GaussFisherPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_GaussSphere, _p_GaussSphereTo_p_INode, 0, 0},  {&_swigt__p_HemiEllipsoid, _p_HemiEllipsoidTo_p_INode, 0, 0},  {&_swigt__p_HexagonalLattice2D, _p_HexagonalLattice2DTo_p_INode, 0, 0},  {&_swigt__p_HorizontalCylinder, _p_HorizontalCylinderTo_p_INode, 0, 0},  {&_swigt__p_ICosineRipple, _p_ICosineRippleTo_p_INode, 0, 0},  {&_swigt__p_IFormfactor, _p_IFormfactorTo_p_INode, 0, 0},  {&_swigt__p_IFormfactorPolyhedron, _p_IFormfactorPolyhedronTo_p_INode, 0, 0},  {&_swigt__p_IFormfactorPrism, _p_IFormfactorPrismTo_p_INode, 0, 0},  {&_swigt__p_IInterference, _p_IInterferenceTo_p_INode, 0, 0},  {&_swigt__p_IParticle, _p_IParticleTo_p_INode, 0, 0},  {&_swigt__p_IPeakShape, _p_IPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_IProfile1D, _p_IProfile1DTo_p_INode, 0, 0},  {&_swigt__p_IProfile2D, _p_IProfile2DTo_p_INode, 0, 0},  {&_swigt__p_IProfileRectangularRipple, _p_IProfileRectangularRippleTo_p_INode, 0, 0},  {&_swigt__p_IProfileRipple, _p_IProfileRippleTo_p_INode, 0, 0},  {&_swigt__p_IRotation, _p_IRotationTo_p_INode, 0, 0},  {&_swigt__p_ISampleNode, _p_ISampleNodeTo_p_INode, 0, 0},  {&_swigt__p_ISawtoothRipple, _p_ISawtoothRippleTo_p_INode, 0, 0},  {&_swigt__p_Icosahedron, _p_IcosahedronTo_p_INode, 0, 0},  {&_swigt__p_IdentityRotation, _p_IdentityRotationTo_p_INode, 0, 0},  {&_swigt__p_Interference1DLattice, _p_Interference1DLatticeTo_p_INode, 0, 0},  {&_swigt__p_Interference2DLattice, _p_Interference2DLatticeTo_p_INode, 0, 0},  {&_swigt__p_Interference2DParacrystal, _p_Interference2DParacrystalTo_p_INode, 0, 0},  {&_swigt__p_Interference2DSuperLattice, _p_Interference2DSuperLatticeTo_p_INode, 0, 0},  {&_swigt__p_InterferenceFinite2DLattice, _p_InterferenceFinite2DLatticeTo_p_INode, 0, 0},  {&_swigt__p_InterferenceHardDisk, _p_InterferenceHardDiskTo_p_INode, 0, 0},  {&_swigt__p_InterferenceNone, _p_InterferenceNoneTo_p_INode, 0, 0},  {&_swigt__p_InterferenceRadialParacrystal, _p_InterferenceRadialParacrystalTo_p_INode, 0, 0},  {&_swigt__p_InterlayerModel, _p_InterlayerModelTo_p_INode, 0, 0},  {&_swigt__p_IsotropicGaussPeakShape, _p_IsotropicGaussPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_IsotropicLorentzPeakShape, _p_IsotropicLorentzPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_K_CorrelationModel, _p_K_CorrelationModelTo_p_INode, 0, 0},  {&_swigt__p_Lattice2D, _p_Lattice2DTo_p_INode, 0, 0},  {&_swigt__p_Lattice3D, _p_Lattice3DTo_p_INode, 0, 0},  {&_swigt__p_Layer, _p_LayerTo_p_INode, 0, 0},  {&_swigt__p_LayerRoughness, _p_LayerRoughnessTo_p_INode, 0, 0},  {&_swigt__p_LongBoxGauss, _p_LongBoxGaussTo_p_INode, 0, 0},  {&_swigt__p_LongBoxLorentz, _p_LongBoxLorentzTo_p_INode, 0, 0},  {&_swigt__p_LorentzFisherPeakShape, _p_LorentzFisherPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_Mesocrystal, _p_MesocrystalTo_p_INode, 0, 0},  {&_swigt__p_MisesFisherGaussPeakShape, _p_MisesFisherGaussPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_MisesGaussPeakShape, _p_MisesGaussPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_MultiLayer, _p_MultiLayerTo_p_INode, 0, 0},  {&_swigt__p_Particle, _p_ParticleTo_p_INode, 0, 0},  {&_swigt__p_ParticleLayout, _p_ParticleLayoutTo_p_INode, 0, 0},  {&_swigt__p_PlatonicOctahedron, _p_PlatonicOctahedronTo_p_INode, 0, 0},  {&_swigt__p_PlatonicTetrahedron, _p_PlatonicTetrahedronTo_p_INode, 0, 0},  {&_swigt__p_Prism3, _p_Prism3To_p_INode, 0, 0},  {&_swigt__p_Prism6, _p_Prism6To_p_INode, 0, 0},  {&_swigt__p_Profile1DCauchy, _p_Profile1DCauchyTo_p_INode, 0, 0},  {&_swigt__p_Profile1DCosine, _p_Profile1DCosineTo_p_INode, 0, 0},  {&_swigt__p_Profile1DGate, _p_Profile1DGateTo_p_INode, 0, 0},  {&_swigt__p_Profile1DGauss, _p_Profile1DGaussTo_p_INode, 0, 0},  {&_swigt__p_Profile1DTriangle, _p_Profile1DTriangleTo_p_INode, 0, 0},  {&_swigt__p_Profile1DVoigt, _p_Profile1DVoigtTo_p_INode, 0, 0},  {&_swigt__p_Profile2DCauchy, _p_Profile2DCauchyTo_p_INode, 0, 0},  {&_swigt__p_Profile2DCone, _p_Profile2DConeTo_p_INode, 0, 0},  {&_swigt__p_Profile2DGate, _p_Profile2DGateTo_p_INode, 0, 0},  {&_swigt__p_Profile2DGauss, _p_Profile2DGaussTo_p_INode, 0, 0},  {&_swigt__p_Profile2DVoigt, _p_Profile2DVoigtTo_p_INode, 0, 0},  {&_swigt__p_Pyramid2, _p_Pyramid2To_p_INode, 0, 0},  {&_swigt__p_Pyramid3, _p_Pyramid3To_p_INode, 0, 0},  {&_swigt__p_Pyramid4, _p_Pyramid4To_p_INode, 0, 0},  {&_swigt__p_Pyramid6, _p_Pyramid6To_p_INode, 0, 0},  {&_swigt__p_RotationEuler, _p_RotationEulerTo_p_INode, 0, 0},  {&_swigt__p_RotationX, _p_RotationXTo_p_INode, 0, 0},  {&_swigt__p_RotationY, _p_RotationYTo_p_INode, 0, 0},  {&_swigt__p_RotationZ, _p_RotationZTo_p_INode, 0, 0},  {&_swigt__p_SawtoothRippleBox, _p_SawtoothRippleBoxTo_p_INode, 0, 0},  {&_swigt__p_SawtoothRippleGauss, _p_SawtoothRippleGaussTo_p_INode, 0, 0},  {&_swigt__p_SawtoothRippleLorentz, _p_SawtoothRippleLorentzTo_p_INode, 0, 0},  {&_swigt__p_Sphere, _p_SphereTo_p_INode, 0, 0},  {&_swigt__p_Spheroid, _p_SpheroidTo_p_INode, 0, 0},  {&_swigt__p_SquareLattice2D, _p_SquareLattice2DTo_p_INode, 0, 0},  {&_swigt__p_TanhInterlayer, _p_TanhInterlayerTo_p_INode, 0, 0},  {&_swigt__p_TruncatedCube, _p_TruncatedCubeTo_p_INode, 0, 0},  {&_swigt__p_TruncatedSphere, _p_TruncatedSphereTo_p_INode, 0, 0},  {&_swigt__p_TruncatedSpheroid, _p_TruncatedSpheroidTo_p_INode, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_INode[] = {  {&_swigt__p_INode, 0, 0, 0},  {&_swigt__p_AutocorrelationModel, _p_AutocorrelationModelTo_p_INode, 0, 0},  {&_swigt__p_BarGauss, _p_BarGaussTo_p_INode, 0, 0},  {&_swigt__p_BarLorentz, _p_BarLorentzTo_p_INode, 0, 0},  {&_swigt__p_BasicLattice2D, _p_BasicLattice2DTo_p_INode, 0, 0},  {&_swigt__p_Bipyramid4, _p_Bipyramid4To_p_INode, 0, 0},  {&_swigt__p_Box, _p_BoxTo_p_INode, 0, 0},  {&_swigt__p_CantellatedCube, _p_CantellatedCubeTo_p_INode, 0, 0},  {&_swigt__p_CommonDepthCrosscorrelation, _p_CommonDepthCrosscorrelationTo_p_INode, 0, 0},  {&_swigt__p_Compound, _p_CompoundTo_p_INode, 0, 0},  {&_swigt__p_Cone, _p_ConeTo_p_INode, 0, 0},  {&_swigt__p_CoreAndShell, _p_CoreAndShellTo_p_INode, 0, 0},  {&_swigt__p_CosineRippleBox, _p_CosineRippleBoxTo_p_INode, 0, 0},  {&_swigt__p_CosineRippleGauss, _p_CosineRippleGaussTo_p_INode, 0, 0},  {&_swigt__p_CosineRippleLorentz, _p_CosineRippleLorentzTo_p_INode, 0, 0},  {&_swigt__p_CrosscorrelationModel, _p_CrosscorrelationModelTo_p_INode, 0, 0},  {&_swigt__p_Crystal, _p_CrystalTo_p_INode, 0, 0},  {&_swigt__p_Cylinder, _p_CylinderTo_p_INode, 0, 0},  {&_swigt__p_Dodecahedron, _p_DodecahedronTo_p_INode, 0, 0},  {&_swigt__p_EllipsoidalCylinder, _p_EllipsoidalCylinderTo_p_INode, 0, 0},  {&_swigt__p_ErfInterlayer, _p_ErfInterlayerTo_p_INode, 0, 0},  {&_swigt__p_FuzzySphere, _p_FuzzySphereTo_p_INode, 0, 0},  {&_swigt__p_GaussFisherPeakShape, _p_GaussFisherPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_GaussSphere, _p_GaussSphereTo_p_INode, 0, 0},  {&_swigt__p_HemiEllipsoid, _p_HemiEllipsoidTo_p_INode, 0, 0},  {&_swigt__p_HexagonalLattice2D, _p_HexagonalLattice2DTo_p_INode, 0, 0},  {&_swigt__p_HorizontalCylinder, _p_HorizontalCylinderTo_p_INode, 0, 0},  {&_swigt__p_ICosineRipple, _p_ICosineRippleTo_p_INode, 0, 0},  {&_swigt__p_IFormfactor, _p_IFormfactorTo_p_INode, 0, 0},  {&_swigt__p_IFormfactorPolyhedron, _p_IFormfactorPolyhedronTo_p_INode, 0, 0},  {&_swigt__p_IFormfactorPrism, _p_IFormfactorPrismTo_p_INode, 0, 0},  {&_swigt__p_IInterference, _p_IInterferenceTo_p_INode, 0, 0},  {&_swigt__p_IParticle, _p_IParticleTo_p_INode, 0, 0},  {&_swigt__p_IPeakShape, _p_IPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_IProfile1D, _p_IProfile1DTo_p_INode, 0, 0},  {&_swigt__p_IProfile2D, _p_IProfile2DTo_p_INode, 0, 0},  {&_swigt__p_IProfileRectangularRipple, _p_IProfileRectangularRippleTo_p_INode, 0, 0},  {&_swigt__p_IProfileRipple, _p_IProfileRippleTo_p_INode, 0, 0},  {&_swigt__p_IRotation, _p_IRotationTo_p_INode, 0, 0},  {&_swigt__p_ISampleNode, _p_ISampleNodeTo_p_INode, 0, 0},  {&_swigt__p_ISawtoothRipple, _p_ISawtoothRippleTo_p_INode, 0, 0},  {&_swigt__p_Icosahedron, _p_IcosahedronTo_p_INode, 0, 0},  {&_swigt__p_IdentityRotation, _p_IdentityRotationTo_p_INode, 0, 0},  {&_swigt__p_Interference1DLattice, _p_Interference1DLatticeTo_p_INode, 0, 0},  {&_swigt__p_Interference2DLattice, _p_Interference2DLatticeTo_p_INode, 0, 0},  {&_swigt__p_Interference2DParacrystal, _p_Interference2DParacrystalTo_p_INode, 0, 0},  {&_swigt__p_Interference2DSuperLattice, _p_Interference2DSuperLatticeTo_p_INode, 0, 0},  {&_swigt__p_InterferenceFinite2DLattice, _p_InterferenceFinite2DLatticeTo_p_INode, 0, 0},  {&_swigt__p_InterferenceHardDisk, _p_InterferenceHardDiskTo_p_INode, 0, 0},  {&_swigt__p_InterferenceNone, _p_InterferenceNoneTo_p_INode, 0, 0},  {&_swigt__p_InterferenceRadialParacrystal, _p_InterferenceRadialParacrystalTo_p_INode, 0, 0},  {&_swigt__p_InterlayerModel, _p_InterlayerModelTo_p_INode, 0, 0},  {&_swigt__p_IsotropicGaussPeakShape, _p_IsotropicGaussPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_IsotropicLorentzPeakShape, _p_IsotropicLorentzPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_K_CorrelationModel, _p_K_CorrelationModelTo_p_INode, 0, 0},  {&_swigt__p_Lattice2D, _p_Lattice2DTo_p_INode, 0, 0},  {&_swigt__p_Lattice3D, _p_Lattice3DTo_p_INode, 0, 0},  {&_swigt__p_Layer, _p_LayerTo_p_INode, 0, 0},  {&_swigt__p_LayerRoughness, _p_LayerRoughnessTo_p_INode, 0, 0},  {&_swigt__p_LongBoxGauss, _p_LongBoxGaussTo_p_INode, 0, 0},  {&_swigt__p_LongBoxLorentz, _p_LongBoxLorentzTo_p_INode, 0, 0},  {&_swigt__p_LorentzFisherPeakShape, _p_LorentzFisherPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_Mesocrystal, _p_MesocrystalTo_p_INode, 0, 0},  {&_swigt__p_MisesFisherGaussPeakShape, _p_MisesFisherGaussPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_MisesGaussPeakShape, _p_MisesGaussPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_MultiLayer, _p_MultiLayerTo_p_INode, 0, 0},  {&_swigt__p_Particle, _p_ParticleTo_p_INode, 0, 0},  {&_swigt__p_ParticleLayout, _p_ParticleLayoutTo_p_INode, 0, 0},  {&_swigt__p_PlatonicOctahedron, _p_PlatonicOctahedronTo_p_INode, 0, 0},  {&_swigt__p_PlatonicTetrahedron, _p_PlatonicTetrahedronTo_p_INode, 0, 0},  {&_swigt__p_Prism3, _p_Prism3To_p_INode, 0, 0},  {&_swigt__p_Prism6, _p_Prism6To_p_INode, 0, 0},  {&_swigt__p_Profile1DCauchy, _p_Profile1DCauchyTo_p_INode, 0, 0},  {&_swigt__p_Profile1DCosine, _p_Profile1DCosineTo_p_INode, 0, 0},  {&_swigt__p_Profile1DGate, _p_Profile1DGateTo_p_INode, 0, 0},  {&_swigt__p_Profile1DGauss, _p_Profile1DGaussTo_p_INode, 0, 0},  {&_swigt__p_Profile1DTriangle, _p_Profile1DTriangleTo_p_INode, 0, 0},  {&_swigt__p_Profile1DVoigt, _p_Profile1DVoigtTo_p_INode, 0, 0},  {&_swigt__p_Profile2DCauchy, _p_Profile2DCauchyTo_p_INode, 0, 0},  {&_swigt__p_Profile2DCone, _p_Profile2DConeTo_p_INode, 0, 0},  {&_swigt__p_Profile2DGate, _p_Profile2DGateTo_p_INode, 0, 0},  {&_swigt__p_Profile2DGauss, _p_Profile2DGaussTo_p_INode, 0, 0},  {&_swigt__p_Profile2DVoigt, _p_Profile2DVoigtTo_p_INode, 0, 0},  {&_swigt__p_Pyramid2, _p_Pyramid2To_p_INode, 0, 0},  {&_swigt__p_Pyramid3, _p_Pyramid3To_p_INode, 0, 0},  {&_swigt__p_Pyramid4, _p_Pyramid4To_p_INode, 0, 0},  {&_swigt__p_Pyramid6, _p_Pyramid6To_p_INode, 0, 0},  {&_swigt__p_RotationEuler, _p_RotationEulerTo_p_INode, 0, 0},  {&_swigt__p_RotationX, _p_RotationXTo_p_INode, 0, 0},  {&_swigt__p_RotationY, _p_RotationYTo_p_INode, 0, 0},  {&_swigt__p_RotationZ, _p_RotationZTo_p_INode, 0, 0},  {&_swigt__p_SawtoothRippleBox, _p_SawtoothRippleBoxTo_p_INode, 0, 0},  {&_swigt__p_SawtoothRippleGauss, _p_SawtoothRippleGaussTo_p_INode, 0, 0},  {&_swigt__p_SawtoothRippleLorentz, _p_SawtoothRippleLorentzTo_p_INode, 0, 0},  {&_swigt__p_SpatialFrequencyCrosscorrelation, _p_SpatialFrequencyCrosscorrelationTo_p_INode, 0, 0},  {&_swigt__p_Sphere, _p_SphereTo_p_INode, 0, 0},  {&_swigt__p_Spheroid, _p_SpheroidTo_p_INode, 0, 0},  {&_swigt__p_SquareLattice2D, _p_SquareLattice2DTo_p_INode, 0, 0},  {&_swigt__p_TanhInterlayer, _p_TanhInterlayerTo_p_INode, 0, 0},  {&_swigt__p_TruncatedCube, _p_TruncatedCubeTo_p_INode, 0, 0},  {&_swigt__p_TruncatedSphere, _p_TruncatedSphereTo_p_INode, 0, 0},  {&_swigt__p_TruncatedSpheroid, _p_TruncatedSpheroidTo_p_INode, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IParticle[] = {  {&_swigt__p_IParticle, 0, 0, 0},  {&_swigt__p_Compound, _p_CompoundTo_p_IParticle, 0, 0},  {&_swigt__p_CoreAndShell, _p_CoreAndShellTo_p_IParticle, 0, 0},  {&_swigt__p_Mesocrystal, _p_MesocrystalTo_p_IParticle, 0, 0},  {&_swigt__p_Particle, _p_ParticleTo_p_IParticle, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IPeakShape[] = {  {&_swigt__p_IPeakShape, 0, 0, 0},  {&_swigt__p_GaussFisherPeakShape, _p_GaussFisherPeakShapeTo_p_IPeakShape, 0, 0},  {&_swigt__p_IsotropicGaussPeakShape, _p_IsotropicGaussPeakShapeTo_p_IPeakShape, 0, 0},  {&_swigt__p_IsotropicLorentzPeakShape, _p_IsotropicLorentzPeakShapeTo_p_IPeakShape, 0, 0},  {&_swigt__p_LorentzFisherPeakShape, _p_LorentzFisherPeakShapeTo_p_IPeakShape, 0, 0},  {&_swigt__p_MisesFisherGaussPeakShape, _p_MisesFisherGaussPeakShapeTo_p_IPeakShape, 0, 0},  {&_swigt__p_MisesGaussPeakShape, _p_MisesGaussPeakShapeTo_p_IPeakShape, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IProfile1D[] = {  {&_swigt__p_IProfile1D, 0, 0, 0},  {&_swigt__p_Profile1DCauchy, _p_Profile1DCauchyTo_p_IProfile1D, 0, 0},  {&_swigt__p_Profile1DCosine, _p_Profile1DCosineTo_p_IProfile1D, 0, 0},  {&_swigt__p_Profile1DGate, _p_Profile1DGateTo_p_IProfile1D, 0, 0},  {&_swigt__p_Profile1DGauss, _p_Profile1DGaussTo_p_IProfile1D, 0, 0},  {&_swigt__p_Profile1DTriangle, _p_Profile1DTriangleTo_p_IProfile1D, 0, 0},  {&_swigt__p_Profile1DVoigt, _p_Profile1DVoigtTo_p_IProfile1D, 0, 0},{0, 0, 0, 0}};
@@ -76471,6 +76685,7 @@ static swig_cast_info _swigc__p_SawtoothRippleGauss[] = {  {&_swigt__p_SawtoothR
 static swig_cast_info _swigc__p_SawtoothRippleLorentz[] = {  {&_swigt__p_SawtoothRippleLorentz, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_SimpleSelectionRule[] = {  {&_swigt__p_SimpleSelectionRule, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_Span[] = {  {&_swigt__p_Span, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_SpatialFrequencyCrosscorrelation[] = {  {&_swigt__p_SpatialFrequencyCrosscorrelation, 0, 0, 0},  {&_swigt__p_CommonDepthCrosscorrelation, _p_CommonDepthCrosscorrelationTo_p_SpatialFrequencyCrosscorrelation, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_Sphere[] = {  {&_swigt__p_Sphere, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_Spheroid[] = {  {&_swigt__p_Spheroid, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_SpinMatrix[] = {  {&_swigt__p_SpinMatrix, 0, 0, 0},{0, 0, 0, 0}};
@@ -76638,6 +76853,7 @@ static swig_cast_info *swig_cast_initial[] = {
   _swigc__p_SawtoothRippleLorentz,
   _swigc__p_SimpleSelectionRule,
   _swigc__p_Span,
+  _swigc__p_SpatialFrequencyCrosscorrelation,
   _swigc__p_Sphere,
   _swigc__p_Spheroid,
   _swigc__p_SpinMatrix,
-- 
GitLab