From b13f614489e747a21434ad68ae0ad00d6d806fe2 Mon Sep 17 00:00:00 2001
From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de>
Date: Mon, 12 Aug 2024 16:41:37 +0200
Subject: [PATCH] update examples

---
 Sample/Interface/CrosscorrelationModels.cpp   |   2 +-
 Wrap/Swig/libBornAgainSample.i                |   2 +
 .../Examples/scatter2d/CorrelatedRoughness.py |   4 +-
 .../scatter2d/CorrelatedRoughness.py          |   4 +-
 auto/Wrap/libBornAgainSample.py               |  67 +-
 auto/Wrap/libBornAgainSample_wrap.cpp         | 898 ++++++++++++++----
 rawEx/scatter2d/CorrelatedRoughness.py        |   4 +-
 7 files changed, 806 insertions(+), 175 deletions(-)

diff --git a/Sample/Interface/CrosscorrelationModels.cpp b/Sample/Interface/CrosscorrelationModels.cpp
index f201cf64654..d791d9e6596 100644
--- a/Sample/Interface/CrosscorrelationModels.cpp
+++ b/Sample/Interface/CrosscorrelationModels.cpp
@@ -31,7 +31,7 @@ CommonDepthCrosscorrelation* CommonDepthCrosscorrelation::clone() const
 std::string CommonDepthCrosscorrelation::validate() const
 {
     std::vector<std::string> errs;
-    requestGe0(errs, m_crosscorrelation_depth, "crossCorrLength");
+    requestGe0(errs, m_crosscorrelation_depth, "crossCorrDepth");
     if (!errs.empty())
         return jointError(errs);
     m_validated = true;
diff --git a/Wrap/Swig/libBornAgainSample.i b/Wrap/Swig/libBornAgainSample.i
index 9aaacafc0f2..2e0e86dcb8c 100644
--- a/Wrap/Swig/libBornAgainSample.i
+++ b/Wrap/Swig/libBornAgainSample.i
@@ -105,6 +105,8 @@
 
 %include "Sample/Interface/AutocorrelationModels.h"
 %include "Sample/Interface/InterlayerModels.h"
+%include "Sample/Interface/CrosscorrelationModels.h"
+
 
 %include "Sample/HardParticle/IFormfactorPolyhedron.h"
 %include "Sample/HardParticle/IFormfactorPrism.h"
diff --git a/auto/Examples/scatter2d/CorrelatedRoughness.py b/auto/Examples/scatter2d/CorrelatedRoughness.py
index f5b84991873..6a6f5cc882f 100755
--- a/auto/Examples/scatter2d/CorrelatedRoughness.py
+++ b/auto/Examples/scatter2d/CorrelatedRoughness.py
@@ -25,7 +25,8 @@ def get_sample():
     sigma, hurst, corrLength = 1*nm, 0.3, 5*nm
     autocorr = ba.K_CorrelationModel(sigma, hurst, corrLength)
     interlayer = ba.TanhInterlayer()
-    roughness = ba.LayerRoughness(autocorr, interlayer)
+    crosscorrelation = ba.CommonDepthCrosscorrelation(10*nm)
+    roughness = ba.LayerRoughness(autocorr, interlayer, crosscorrelation)
 
     my_sample = ba.MultiLayer()
 
@@ -38,7 +39,6 @@ def get_sample():
         my_sample.addLayerWithTopRoughness(l_part_b, roughness)
 
     my_sample.addLayerWithTopRoughness(l_substrate, roughness)
-    my_sample.setCrossCorrLength(10*nm)
 
     return my_sample
 
diff --git a/auto/MiniExamples/scatter2d/CorrelatedRoughness.py b/auto/MiniExamples/scatter2d/CorrelatedRoughness.py
index d5daf8a7168..a7e366a2f61 100755
--- a/auto/MiniExamples/scatter2d/CorrelatedRoughness.py
+++ b/auto/MiniExamples/scatter2d/CorrelatedRoughness.py
@@ -25,7 +25,8 @@ def get_sample():
     sigma, hurst, corrLength = 1*nm, 0.3, 5*nm
     autocorr = ba.K_CorrelationModel(sigma, hurst, corrLength)
     interlayer = ba.TanhInterlayer()
-    roughness = ba.LayerRoughness(autocorr, interlayer)
+    crosscorrelation = ba.CommonDepthCrosscorrelation(10*nm)
+    roughness = ba.LayerRoughness(autocorr, interlayer, crosscorrelation)
 
     my_sample = ba.MultiLayer()
 
@@ -38,7 +39,6 @@ def get_sample():
         my_sample.addLayerWithTopRoughness(l_part_b, roughness)
 
     my_sample.addLayerWithTopRoughness(l_substrate, roughness)
-    my_sample.setCrossCorrLength(10*nm)
 
     return my_sample
 
diff --git a/auto/Wrap/libBornAgainSample.py b/auto/Wrap/libBornAgainSample.py
index f32e8a2b16e..48054397ad9 100644
--- a/auto/Wrap/libBornAgainSample.py
+++ b/auto/Wrap/libBornAgainSample.py
@@ -4176,7 +4176,7 @@ class LayerRoughness(ISampleNode):
     __repr__ = _swig_repr
 
     def __init__(self, autocorrelation, interlayer, crosscorrelation=None):
-        r"""__init__(LayerRoughness self, AutocorrelationModel autocorrelation, InterlayerModel interlayer, CrosscorrelationModel const * crosscorrelation=None) -> LayerRoughness"""
+        r"""__init__(LayerRoughness self, AutocorrelationModel autocorrelation, InterlayerModel interlayer, CrosscorrelationModel crosscorrelation=None) -> LayerRoughness"""
         _libBornAgainSample.LayerRoughness_swiginit(self, _libBornAgainSample.new_LayerRoughness(autocorrelation, interlayer, crosscorrelation))
 
     def clone(self):
@@ -4212,11 +4212,11 @@ class LayerRoughness(ISampleNode):
         return _libBornAgainSample.LayerRoughness_interlayerModel(self)
 
     def setCrosscorrelationModel(self, crosscorrelation):
-        r"""setCrosscorrelationModel(LayerRoughness self, CrosscorrelationModel const * crosscorrelation)"""
+        r"""setCrosscorrelationModel(LayerRoughness self, CrosscorrelationModel crosscorrelation)"""
         return _libBornAgainSample.LayerRoughness_setCrosscorrelationModel(self, crosscorrelation)
 
     def crosscorrelationModel(self):
-        r"""crosscorrelationModel(LayerRoughness self) -> CrosscorrelationModel const *"""
+        r"""crosscorrelationModel(LayerRoughness self) -> CrosscorrelationModel"""
         return _libBornAgainSample.LayerRoughness_crosscorrelationModel(self)
     __swig_destroy__ = _libBornAgainSample.delete_LayerRoughness
 
@@ -4496,6 +4496,67 @@ class TanhInterlayer(InterlayerModel):
 
 # Register TanhInterlayer in _libBornAgainSample:
 _libBornAgainSample.TanhInterlayer_swigregister(TanhInterlayer)
+class CrosscorrelationModel(libBornAgainBase.ICloneable, libBornAgainParam.INode):
+    r"""Proxy of C++ CrosscorrelationModel class."""
+
+    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
+
+    def __init__(self, *args, **kwargs):
+        raise AttributeError("No constructor defined - class is abstract")
+    __repr__ = _swig_repr
+
+    def clone(self):
+        r"""clone(CrosscorrelationModel self) -> CrosscorrelationModel"""
+        return _libBornAgainSample.CrosscorrelationModel_clone(self)
+
+    def crossCorrDepth(self, k):
+        r"""crossCorrDepth(CrosscorrelationModel self, R3 k) -> double"""
+        return _libBornAgainSample.CrosscorrelationModel_crossCorrDepth(self, k)
+
+    def replicationFactor(self, k, thickness):
+        r"""replicationFactor(CrosscorrelationModel self, R3 k, double thickness) -> double"""
+        return _libBornAgainSample.CrosscorrelationModel_replicationFactor(self, k, thickness)
+    __swig_destroy__ = _libBornAgainSample.delete_CrosscorrelationModel
+
+# Register CrosscorrelationModel in _libBornAgainSample:
+_libBornAgainSample.CrosscorrelationModel_swigregister(CrosscorrelationModel)
+class CommonDepthCrosscorrelation(CrosscorrelationModel):
+    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"""
+        _libBornAgainSample.CommonDepthCrosscorrelation_swiginit(self, _libBornAgainSample.new_CommonDepthCrosscorrelation(cross_corr_depth))
+
+    def clone(self):
+        r"""clone(CommonDepthCrosscorrelation self) -> CommonDepthCrosscorrelation"""
+        return _libBornAgainSample.CommonDepthCrosscorrelation_clone(self)
+
+    def className(self):
+        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 replicationFactor(self, arg2, thickness):
+        r"""replicationFactor(CommonDepthCrosscorrelation self, R3 arg2, double thickness) -> double"""
+        return _libBornAgainSample.CommonDepthCrosscorrelation_replicationFactor(self, arg2, thickness)
+
+    def parDefs(self):
+        r"""parDefs(CommonDepthCrosscorrelation self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
+        return _libBornAgainSample.CommonDepthCrosscorrelation_parDefs(self)
+    __swig_destroy__ = _libBornAgainSample.delete_CommonDepthCrosscorrelation
+
+# Register CommonDepthCrosscorrelation in _libBornAgainSample:
+_libBornAgainSample.CommonDepthCrosscorrelation_swigregister(CommonDepthCrosscorrelation)
 class IFormfactorPolyhedron(IFormfactor):
     r"""Proxy of C++ IFormfactorPolyhedron class."""
 
diff --git a/auto/Wrap/libBornAgainSample_wrap.cpp b/auto/Wrap/libBornAgainSample_wrap.cpp
index 97f158502b7..483777083f0 100644
--- a/auto/Wrap/libBornAgainSample_wrap.cpp
+++ b/auto/Wrap/libBornAgainSample_wrap.cpp
@@ -3652,165 +3652,166 @@ namespace Swig {
 #define SWIGTYPE_p_Bipyramid4 swig_types[4]
 #define SWIGTYPE_p_Box swig_types[5]
 #define SWIGTYPE_p_CantellatedCube swig_types[6]
-#define SWIGTYPE_p_Compound swig_types[7]
-#define SWIGTYPE_p_Cone swig_types[8]
-#define SWIGTYPE_p_CoreAndShell swig_types[9]
-#define SWIGTYPE_p_CosineRippleBox swig_types[10]
-#define SWIGTYPE_p_CosineRippleGauss swig_types[11]
-#define SWIGTYPE_p_CosineRippleLorentz swig_types[12]
-#define SWIGTYPE_p_CrosscorrelationModel swig_types[13]
-#define SWIGTYPE_p_Crystal swig_types[14]
-#define SWIGTYPE_p_Cylinder swig_types[15]
-#define SWIGTYPE_p_Dodecahedron swig_types[16]
-#define SWIGTYPE_p_EllipsoidalCylinder swig_types[17]
-#define SWIGTYPE_p_ErfInterlayer swig_types[18]
-#define SWIGTYPE_p_FuzzySphere swig_types[19]
-#define SWIGTYPE_p_GaussFisherPeakShape swig_types[20]
-#define SWIGTYPE_p_GaussSphere swig_types[21]
-#define SWIGTYPE_p_HemiEllipsoid swig_types[22]
-#define SWIGTYPE_p_HexagonalLattice2D swig_types[23]
-#define SWIGTYPE_p_HorizontalCylinder swig_types[24]
-#define SWIGTYPE_p_ICloneable swig_types[25]
-#define SWIGTYPE_p_ICosineRipple swig_types[26]
-#define SWIGTYPE_p_IFormfactor swig_types[27]
-#define SWIGTYPE_p_IFormfactorPolyhedron swig_types[28]
-#define SWIGTYPE_p_IFormfactorPrism swig_types[29]
-#define SWIGTYPE_p_IInterference swig_types[30]
-#define SWIGTYPE_p_IMaterialImpl swig_types[31]
-#define SWIGTYPE_p_INode swig_types[32]
-#define SWIGTYPE_p_IParticle swig_types[33]
-#define SWIGTYPE_p_IPeakShape swig_types[34]
-#define SWIGTYPE_p_IProfile1D swig_types[35]
-#define SWIGTYPE_p_IProfile2D swig_types[36]
-#define SWIGTYPE_p_IProfileRectangularRipple swig_types[37]
-#define SWIGTYPE_p_IProfileRipple swig_types[38]
-#define SWIGTYPE_p_IRotation swig_types[39]
-#define SWIGTYPE_p_ISampleNode swig_types[40]
-#define SWIGTYPE_p_ISawtoothRipple swig_types[41]
-#define SWIGTYPE_p_ISelectionRule swig_types[42]
-#define SWIGTYPE_p_Icosahedron swig_types[43]
-#define SWIGTYPE_p_IdentityRotation swig_types[44]
-#define SWIGTYPE_p_Interference1DLattice swig_types[45]
-#define SWIGTYPE_p_Interference2DLattice swig_types[46]
-#define SWIGTYPE_p_Interference2DParacrystal swig_types[47]
-#define SWIGTYPE_p_Interference2DSuperLattice swig_types[48]
-#define SWIGTYPE_p_InterferenceFinite2DLattice swig_types[49]
-#define SWIGTYPE_p_InterferenceHardDisk swig_types[50]
-#define SWIGTYPE_p_InterferenceNone swig_types[51]
-#define SWIGTYPE_p_InterferenceRadialParacrystal swig_types[52]
-#define SWIGTYPE_p_InterlayerModel swig_types[53]
-#define SWIGTYPE_p_IsotropicGaussPeakShape swig_types[54]
-#define SWIGTYPE_p_IsotropicLorentzPeakShape swig_types[55]
-#define SWIGTYPE_p_K_CorrelationModel swig_types[56]
-#define SWIGTYPE_p_Lattice2D swig_types[57]
-#define SWIGTYPE_p_Lattice2D__ReciprocalBases swig_types[58]
-#define SWIGTYPE_p_Lattice3D swig_types[59]
-#define SWIGTYPE_p_Layer swig_types[60]
-#define SWIGTYPE_p_LayerRoughness swig_types[61]
-#define SWIGTYPE_p_LongBoxGauss swig_types[62]
-#define SWIGTYPE_p_LongBoxLorentz swig_types[63]
-#define SWIGTYPE_p_LorentzFisherPeakShape swig_types[64]
-#define SWIGTYPE_p_Material swig_types[65]
-#define SWIGTYPE_p_MaterialBySLDImpl swig_types[66]
-#define SWIGTYPE_p_Mesocrystal swig_types[67]
-#define SWIGTYPE_p_MisesFisherGaussPeakShape swig_types[68]
-#define SWIGTYPE_p_MisesGaussPeakShape swig_types[69]
-#define SWIGTYPE_p_MultiLayer swig_types[70]
-#define SWIGTYPE_p_Particle swig_types[71]
-#define SWIGTYPE_p_ParticleLayout swig_types[72]
-#define SWIGTYPE_p_PlatonicOctahedron swig_types[73]
-#define SWIGTYPE_p_PlatonicTetrahedron swig_types[74]
-#define SWIGTYPE_p_Prism3 swig_types[75]
-#define SWIGTYPE_p_Prism6 swig_types[76]
-#define SWIGTYPE_p_Profile1DCauchy swig_types[77]
-#define SWIGTYPE_p_Profile1DCosine swig_types[78]
-#define SWIGTYPE_p_Profile1DGate swig_types[79]
-#define SWIGTYPE_p_Profile1DGauss swig_types[80]
-#define SWIGTYPE_p_Profile1DTriangle swig_types[81]
-#define SWIGTYPE_p_Profile1DVoigt swig_types[82]
-#define SWIGTYPE_p_Profile2DCauchy swig_types[83]
-#define SWIGTYPE_p_Profile2DCone swig_types[84]
-#define SWIGTYPE_p_Profile2DGate swig_types[85]
-#define SWIGTYPE_p_Profile2DGauss swig_types[86]
-#define SWIGTYPE_p_Profile2DVoigt swig_types[87]
-#define SWIGTYPE_p_Pyramid2 swig_types[88]
-#define SWIGTYPE_p_Pyramid3 swig_types[89]
-#define SWIGTYPE_p_Pyramid4 swig_types[90]
-#define SWIGTYPE_p_Pyramid6 swig_types[91]
-#define SWIGTYPE_p_RefractiveMaterialImpl swig_types[92]
-#define SWIGTYPE_p_Rotation3DT_double_t swig_types[93]
-#define SWIGTYPE_p_RotationEuler swig_types[94]
-#define SWIGTYPE_p_RotationX swig_types[95]
-#define SWIGTYPE_p_RotationY swig_types[96]
-#define SWIGTYPE_p_RotationZ swig_types[97]
-#define SWIGTYPE_p_RoughnessMap swig_types[98]
-#define SWIGTYPE_p_SawtoothRippleBox swig_types[99]
-#define SWIGTYPE_p_SawtoothRippleGauss swig_types[100]
-#define SWIGTYPE_p_SawtoothRippleLorentz swig_types[101]
-#define SWIGTYPE_p_SimpleSelectionRule swig_types[102]
-#define SWIGTYPE_p_Span swig_types[103]
-#define SWIGTYPE_p_Sphere swig_types[104]
-#define SWIGTYPE_p_Spheroid swig_types[105]
-#define SWIGTYPE_p_SpinMatrix swig_types[106]
-#define SWIGTYPE_p_SquareLattice2D swig_types[107]
-#define SWIGTYPE_p_TanhInterlayer swig_types[108]
-#define SWIGTYPE_p_TruncatedCube swig_types[109]
-#define SWIGTYPE_p_TruncatedSphere swig_types[110]
-#define SWIGTYPE_p_TruncatedSpheroid swig_types[111]
-#define SWIGTYPE_p_Vec3T_double_t swig_types[112]
-#define SWIGTYPE_p_Vec3T_int_t swig_types[113]
-#define SWIGTYPE_p_Vec3T_std__complexT_double_t_t swig_types[114]
-#define SWIGTYPE_p_WavevectorInfo swig_types[115]
-#define SWIGTYPE_p_allocator_type swig_types[116]
-#define SWIGTYPE_p_char swig_types[117]
-#define SWIGTYPE_p_difference_type swig_types[118]
-#define SWIGTYPE_p_double2d_t swig_types[119]
-#define SWIGTYPE_p_first_type swig_types[120]
-#define SWIGTYPE_p_int swig_types[121]
-#define SWIGTYPE_p_key_type swig_types[122]
-#define SWIGTYPE_p_long_long swig_types[123]
-#define SWIGTYPE_p_mapped_type swig_types[124]
-#define SWIGTYPE_p_p_PyObject swig_types[125]
-#define SWIGTYPE_p_second_type swig_types[126]
-#define SWIGTYPE_p_short swig_types[127]
-#define SWIGTYPE_p_signed_char swig_types[128]
-#define SWIGTYPE_p_size_type swig_types[129]
-#define SWIGTYPE_p_std__allocatorT_INode_const_p_t swig_types[130]
-#define SWIGTYPE_p_std__allocatorT_Vec3T_double_t_t swig_types[131]
-#define SWIGTYPE_p_std__allocatorT_double_t swig_types[132]
-#define SWIGTYPE_p_std__allocatorT_int_t swig_types[133]
-#define SWIGTYPE_p_std__allocatorT_std__complexT_double_t_t swig_types[134]
-#define SWIGTYPE_p_std__allocatorT_std__pairT_double_double_t_t swig_types[135]
-#define SWIGTYPE_p_std__allocatorT_std__pairT_std__string_const_double_t_t swig_types[136]
-#define SWIGTYPE_p_std__allocatorT_std__string_t swig_types[137]
-#define SWIGTYPE_p_std__allocatorT_std__vectorT_double_t_t swig_types[138]
-#define SWIGTYPE_p_std__allocatorT_std__vectorT_int_t_t swig_types[139]
-#define SWIGTYPE_p_std__allocatorT_unsigned_long_t swig_types[140]
-#define SWIGTYPE_p_std__complexT_double_t swig_types[141]
-#define SWIGTYPE_p_std__functionT_double_fdoubleF_t swig_types[142]
-#define SWIGTYPE_p_std__invalid_argument swig_types[143]
-#define SWIGTYPE_p_std__lessT_std__string_t swig_types[144]
-#define SWIGTYPE_p_std__mapT_std__string_double_t swig_types[145]
-#define SWIGTYPE_p_std__pairT_double_double_t swig_types[146]
-#define SWIGTYPE_p_std__vectorT_INode_const_p_t swig_types[147]
-#define SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t swig_types[148]
-#define SWIGTYPE_p_std__vectorT_Vec3T_double_t_t swig_types[149]
-#define SWIGTYPE_p_std__vectorT_double_t swig_types[150]
-#define SWIGTYPE_p_std__vectorT_int_t swig_types[151]
-#define SWIGTYPE_p_std__vectorT_std__complexT_double_t_t swig_types[152]
-#define SWIGTYPE_p_std__vectorT_std__pairT_double_double_t_t swig_types[153]
-#define SWIGTYPE_p_std__vectorT_std__string_t swig_types[154]
-#define SWIGTYPE_p_std__vectorT_std__vectorT_double_t_t swig_types[155]
-#define SWIGTYPE_p_std__vectorT_std__vectorT_int_t_t swig_types[156]
-#define SWIGTYPE_p_std__vectorT_unsigned_long_t swig_types[157]
-#define SWIGTYPE_p_swig__SwigPyIterator swig_types[158]
-#define SWIGTYPE_p_unsigned_char swig_types[159]
-#define SWIGTYPE_p_unsigned_int swig_types[160]
-#define SWIGTYPE_p_unsigned_long_long swig_types[161]
-#define SWIGTYPE_p_unsigned_short swig_types[162]
-#define SWIGTYPE_p_value_type swig_types[163]
-static swig_type_info *swig_types[165];
-static swig_module_info swig_module = {swig_types, 164, 0, 0, 0, 0};
+#define SWIGTYPE_p_CommonDepthCrosscorrelation swig_types[7]
+#define SWIGTYPE_p_Compound swig_types[8]
+#define SWIGTYPE_p_Cone swig_types[9]
+#define SWIGTYPE_p_CoreAndShell swig_types[10]
+#define SWIGTYPE_p_CosineRippleBox swig_types[11]
+#define SWIGTYPE_p_CosineRippleGauss swig_types[12]
+#define SWIGTYPE_p_CosineRippleLorentz swig_types[13]
+#define SWIGTYPE_p_CrosscorrelationModel swig_types[14]
+#define SWIGTYPE_p_Crystal swig_types[15]
+#define SWIGTYPE_p_Cylinder swig_types[16]
+#define SWIGTYPE_p_Dodecahedron swig_types[17]
+#define SWIGTYPE_p_EllipsoidalCylinder swig_types[18]
+#define SWIGTYPE_p_ErfInterlayer swig_types[19]
+#define SWIGTYPE_p_FuzzySphere swig_types[20]
+#define SWIGTYPE_p_GaussFisherPeakShape swig_types[21]
+#define SWIGTYPE_p_GaussSphere swig_types[22]
+#define SWIGTYPE_p_HemiEllipsoid swig_types[23]
+#define SWIGTYPE_p_HexagonalLattice2D swig_types[24]
+#define SWIGTYPE_p_HorizontalCylinder swig_types[25]
+#define SWIGTYPE_p_ICloneable swig_types[26]
+#define SWIGTYPE_p_ICosineRipple swig_types[27]
+#define SWIGTYPE_p_IFormfactor swig_types[28]
+#define SWIGTYPE_p_IFormfactorPolyhedron swig_types[29]
+#define SWIGTYPE_p_IFormfactorPrism swig_types[30]
+#define SWIGTYPE_p_IInterference swig_types[31]
+#define SWIGTYPE_p_IMaterialImpl swig_types[32]
+#define SWIGTYPE_p_INode swig_types[33]
+#define SWIGTYPE_p_IParticle swig_types[34]
+#define SWIGTYPE_p_IPeakShape swig_types[35]
+#define SWIGTYPE_p_IProfile1D swig_types[36]
+#define SWIGTYPE_p_IProfile2D swig_types[37]
+#define SWIGTYPE_p_IProfileRectangularRipple swig_types[38]
+#define SWIGTYPE_p_IProfileRipple swig_types[39]
+#define SWIGTYPE_p_IRotation swig_types[40]
+#define SWIGTYPE_p_ISampleNode swig_types[41]
+#define SWIGTYPE_p_ISawtoothRipple swig_types[42]
+#define SWIGTYPE_p_ISelectionRule swig_types[43]
+#define SWIGTYPE_p_Icosahedron swig_types[44]
+#define SWIGTYPE_p_IdentityRotation swig_types[45]
+#define SWIGTYPE_p_Interference1DLattice swig_types[46]
+#define SWIGTYPE_p_Interference2DLattice swig_types[47]
+#define SWIGTYPE_p_Interference2DParacrystal swig_types[48]
+#define SWIGTYPE_p_Interference2DSuperLattice swig_types[49]
+#define SWIGTYPE_p_InterferenceFinite2DLattice swig_types[50]
+#define SWIGTYPE_p_InterferenceHardDisk swig_types[51]
+#define SWIGTYPE_p_InterferenceNone swig_types[52]
+#define SWIGTYPE_p_InterferenceRadialParacrystal swig_types[53]
+#define SWIGTYPE_p_InterlayerModel swig_types[54]
+#define SWIGTYPE_p_IsotropicGaussPeakShape swig_types[55]
+#define SWIGTYPE_p_IsotropicLorentzPeakShape swig_types[56]
+#define SWIGTYPE_p_K_CorrelationModel swig_types[57]
+#define SWIGTYPE_p_Lattice2D swig_types[58]
+#define SWIGTYPE_p_Lattice2D__ReciprocalBases swig_types[59]
+#define SWIGTYPE_p_Lattice3D swig_types[60]
+#define SWIGTYPE_p_Layer swig_types[61]
+#define SWIGTYPE_p_LayerRoughness swig_types[62]
+#define SWIGTYPE_p_LongBoxGauss swig_types[63]
+#define SWIGTYPE_p_LongBoxLorentz swig_types[64]
+#define SWIGTYPE_p_LorentzFisherPeakShape swig_types[65]
+#define SWIGTYPE_p_Material swig_types[66]
+#define SWIGTYPE_p_MaterialBySLDImpl swig_types[67]
+#define SWIGTYPE_p_Mesocrystal swig_types[68]
+#define SWIGTYPE_p_MisesFisherGaussPeakShape swig_types[69]
+#define SWIGTYPE_p_MisesGaussPeakShape swig_types[70]
+#define SWIGTYPE_p_MultiLayer swig_types[71]
+#define SWIGTYPE_p_Particle swig_types[72]
+#define SWIGTYPE_p_ParticleLayout swig_types[73]
+#define SWIGTYPE_p_PlatonicOctahedron swig_types[74]
+#define SWIGTYPE_p_PlatonicTetrahedron swig_types[75]
+#define SWIGTYPE_p_Prism3 swig_types[76]
+#define SWIGTYPE_p_Prism6 swig_types[77]
+#define SWIGTYPE_p_Profile1DCauchy swig_types[78]
+#define SWIGTYPE_p_Profile1DCosine swig_types[79]
+#define SWIGTYPE_p_Profile1DGate swig_types[80]
+#define SWIGTYPE_p_Profile1DGauss swig_types[81]
+#define SWIGTYPE_p_Profile1DTriangle swig_types[82]
+#define SWIGTYPE_p_Profile1DVoigt swig_types[83]
+#define SWIGTYPE_p_Profile2DCauchy swig_types[84]
+#define SWIGTYPE_p_Profile2DCone swig_types[85]
+#define SWIGTYPE_p_Profile2DGate swig_types[86]
+#define SWIGTYPE_p_Profile2DGauss swig_types[87]
+#define SWIGTYPE_p_Profile2DVoigt swig_types[88]
+#define SWIGTYPE_p_Pyramid2 swig_types[89]
+#define SWIGTYPE_p_Pyramid3 swig_types[90]
+#define SWIGTYPE_p_Pyramid4 swig_types[91]
+#define SWIGTYPE_p_Pyramid6 swig_types[92]
+#define SWIGTYPE_p_RefractiveMaterialImpl swig_types[93]
+#define SWIGTYPE_p_Rotation3DT_double_t swig_types[94]
+#define SWIGTYPE_p_RotationEuler swig_types[95]
+#define SWIGTYPE_p_RotationX swig_types[96]
+#define SWIGTYPE_p_RotationY swig_types[97]
+#define SWIGTYPE_p_RotationZ swig_types[98]
+#define SWIGTYPE_p_RoughnessMap swig_types[99]
+#define SWIGTYPE_p_SawtoothRippleBox swig_types[100]
+#define SWIGTYPE_p_SawtoothRippleGauss swig_types[101]
+#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 SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
 #define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
 
@@ -53692,6 +53693,539 @@ SWIGINTERN PyObject *TanhInterlayer_swiginit(PyObject *SWIGUNUSEDPARM(self), PyO
   return SWIG_Python_InitShadowInstance(args);
 }
 
+SWIGINTERN PyObject *_wrap_CrosscorrelationModel_clone(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  CrosscorrelationModel *arg1 = (CrosscorrelationModel *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  CrosscorrelationModel *result = 0 ;
+  
+  (void)self;
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  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_clone" "', argument " "1"" of type '" "CrosscorrelationModel const *""'"); 
+  }
+  arg1 = reinterpret_cast< CrosscorrelationModel * >(argp1);
+  {
+    try {
+      result = (CrosscorrelationModel *)((CrosscorrelationModel 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());
+    }
+  }
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CrosscorrelationModel, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+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_replicationFactor(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  CrosscorrelationModel *arg1 = (CrosscorrelationModel *) 0 ;
+  R3 *arg2 = 0 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject *swig_obj[3] ;
+  double result;
+  
+  (void)self;
+  if (!SWIG_Python_UnpackTuple(args, "CrosscorrelationModel_replicationFactor", 3, 3, 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_replicationFactor" "', 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_replicationFactor" "', argument " "2"" of type '" "R3 const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CrosscorrelationModel_replicationFactor" "', argument " "2"" of type '" "R3 const &""'"); 
+  }
+  arg2 = reinterpret_cast< R3 * >(argp2);
+  ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CrosscorrelationModel_replicationFactor" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  {
+    try {
+      result = (double)((CrosscorrelationModel const *)arg1)->replicationFactor((R3 const &)*arg2,arg3);
+    } 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_CrosscorrelationModel(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  CrosscorrelationModel *arg1 = (CrosscorrelationModel *) 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_CrosscorrelationModel, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CrosscorrelationModel" "', argument " "1"" of type '" "CrosscorrelationModel *""'"); 
+  }
+  arg1 = reinterpret_cast< CrosscorrelationModel * >(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 *CrosscorrelationModel_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CrosscorrelationModel, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_CommonDepthCrosscorrelation__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  double arg1 ;
+  double val1 ;
+  int ecode1 = 0 ;
+  CommonDepthCrosscorrelation *result = 0 ;
+  
+  (void)self;
+  if ((nobjs < 1) || (nobjs > 1)) 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""'");
+  } 
+  arg1 = static_cast< double >(val1);
+  {
+    try {
+      result = (CommonDepthCrosscorrelation *)new CommonDepthCrosscorrelation(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_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CommonDepthCrosscorrelation, 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)) {
+  PyObject *resultobj = 0;
+  CommonDepthCrosscorrelation *result = 0 ;
+  
+  (void)self;
+  if ((nobjs < 0) || (nobjs > 0)) SWIG_fail;
+  {
+    try {
+      result = (CommonDepthCrosscorrelation *)new CommonDepthCrosscorrelation();
+    } 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_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CommonDepthCrosscorrelation, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CommonDepthCrosscorrelation(PyObject *self, PyObject *args) {
+  Py_ssize_t argc;
+  PyObject *argv[2] = {
+    0
+  };
+  
+  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);
+  }
+  if (argc == 1) {
+    int _v = 0;
+    {
+      int res = SWIG_AsVal_double(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      return _wrap_new_CommonDepthCrosscorrelation__SWIG_0(self, argc, argv);
+    }
+  }
+  
+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;
+}
+
+
+SWIGINTERN PyObject *_wrap_CommonDepthCrosscorrelation_clone(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  CommonDepthCrosscorrelation *arg1 = (CommonDepthCrosscorrelation *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  CommonDepthCrosscorrelation *result = 0 ;
+  
+  (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_clone" "', argument " "1"" of type '" "CommonDepthCrosscorrelation const *""'"); 
+  }
+  arg1 = reinterpret_cast< CommonDepthCrosscorrelation * >(argp1);
+  {
+    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());
+    }
+  }
+  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 *""'"); 
+  }
+  arg1 = reinterpret_cast< CommonDepthCrosscorrelation * >(argp1);
+  {
+    try {
+      result = ((CommonDepthCrosscorrelation 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());
+    }
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CommonDepthCrosscorrelation_validate(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_validate" "', argument " "1"" of type '" "CommonDepthCrosscorrelation const *""'"); 
+  }
+  arg1 = reinterpret_cast< CommonDepthCrosscorrelation * >(argp1);
+  {
+    try {
+      result = ((CommonDepthCrosscorrelation 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_CommonDepthCrosscorrelation_crossCorrDepth(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  CommonDepthCrosscorrelation *arg1 = (CommonDepthCrosscorrelation *) 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, "CommonDepthCrosscorrelation_crossCorrDepth", 2, 2, swig_obj)) SWIG_fail;
+  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);
+  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 &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CommonDepthCrosscorrelation_crossCorrDepth" "', argument " "2"" of type '" "R3 const &""'"); 
+  }
+  arg2 = reinterpret_cast< R3 * >(argp2);
+  {
+    try {
+      result = (double)((CommonDepthCrosscorrelation 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_CommonDepthCrosscorrelation_replicationFactor(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  CommonDepthCrosscorrelation *arg1 = (CommonDepthCrosscorrelation *) 0 ;
+  R3 *arg2 = 0 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject *swig_obj[3] ;
+  double result;
+  
+  (void)self;
+  if (!SWIG_Python_UnpackTuple(args, "CommonDepthCrosscorrelation_replicationFactor", 3, 3, swig_obj)) SWIG_fail;
+  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_replicationFactor" "', argument " "1"" of type '" "CommonDepthCrosscorrelation 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_replicationFactor" "', argument " "2"" of type '" "R3 const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "CommonDepthCrosscorrelation_replicationFactor" "', argument " "2"" of type '" "R3 const &""'"); 
+  }
+  arg2 = reinterpret_cast< R3 * >(argp2);
+  ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CommonDepthCrosscorrelation_replicationFactor" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  {
+    try {
+      result = (double)((CommonDepthCrosscorrelation const *)arg1)->replicationFactor((R3 const &)*arg2,arg3);
+    } 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_CommonDepthCrosscorrelation_parDefs(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  CommonDepthCrosscorrelation *arg1 = (CommonDepthCrosscorrelation *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  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 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CommonDepthCrosscorrelation_parDefs" "', argument " "1"" of type '" "CommonDepthCrosscorrelation const *""'"); 
+  }
+  arg1 = reinterpret_cast< CommonDepthCrosscorrelation * >(argp1);
+  {
+    try {
+      result = ((CommonDepthCrosscorrelation const *)arg1)->parDefs();
+    } 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_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_delete_CommonDepthCrosscorrelation(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  CommonDepthCrosscorrelation *arg1 = (CommonDepthCrosscorrelation *) 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_CommonDepthCrosscorrelation, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CommonDepthCrosscorrelation" "', argument " "1"" of type '" "CommonDepthCrosscorrelation *""'"); 
+  }
+  arg1 = reinterpret_cast< CommonDepthCrosscorrelation * >(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 *CommonDepthCrosscorrelation_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CommonDepthCrosscorrelation, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *CommonDepthCrosscorrelation_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+
 SWIGINTERN PyObject *_wrap_delete_IFormfactorPolyhedron(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
   IFormfactorPolyhedron *arg1 = (IFormfactorPolyhedron *) 0 ;
@@ -73638,7 +74172,7 @@ static PyMethodDef SwigMethods[] = {
 	 { "ParticleLayout_setAbsoluteWeight", _wrap_ParticleLayout_setAbsoluteWeight, METH_VARARGS, "ParticleLayout_setAbsoluteWeight(ParticleLayout self, double weight)"},
 	 { "ParticleLayout_swigregister", ParticleLayout_swigregister, METH_O, NULL},
 	 { "ParticleLayout_swiginit", ParticleLayout_swiginit, METH_VARARGS, NULL},
-	 { "new_LayerRoughness", _wrap_new_LayerRoughness, METH_VARARGS, "LayerRoughness(AutocorrelationModel autocorrelation, InterlayerModel interlayer, CrosscorrelationModel const * crosscorrelation=None)"},
+	 { "new_LayerRoughness", _wrap_new_LayerRoughness, METH_VARARGS, "LayerRoughness(AutocorrelationModel autocorrelation, InterlayerModel interlayer, CrosscorrelationModel crosscorrelation=None)"},
 	 { "LayerRoughness_clone", _wrap_LayerRoughness_clone, METH_O, "LayerRoughness_clone(LayerRoughness self) -> LayerRoughness"},
 	 { "LayerRoughness_className", _wrap_LayerRoughness_className, METH_O, "LayerRoughness_className(LayerRoughness self) -> std::string"},
 	 { "LayerRoughness_nodeChildren", _wrap_LayerRoughness_nodeChildren, METH_O, "LayerRoughness_nodeChildren(LayerRoughness self) -> swig_dummy_type_const_inode_vector"},
@@ -73647,8 +74181,8 @@ static PyMethodDef SwigMethods[] = {
 	 { "LayerRoughness_autocorrelationModel", _wrap_LayerRoughness_autocorrelationModel, METH_O, "LayerRoughness_autocorrelationModel(LayerRoughness self) -> AutocorrelationModel"},
 	 { "LayerRoughness_setInterlayerModel", _wrap_LayerRoughness_setInterlayerModel, METH_VARARGS, "LayerRoughness_setInterlayerModel(LayerRoughness self, InterlayerModel interlayer)"},
 	 { "LayerRoughness_interlayerModel", _wrap_LayerRoughness_interlayerModel, METH_O, "LayerRoughness_interlayerModel(LayerRoughness self) -> InterlayerModel"},
-	 { "LayerRoughness_setCrosscorrelationModel", _wrap_LayerRoughness_setCrosscorrelationModel, METH_VARARGS, "LayerRoughness_setCrosscorrelationModel(LayerRoughness self, CrosscorrelationModel const * crosscorrelation)"},
-	 { "LayerRoughness_crosscorrelationModel", _wrap_LayerRoughness_crosscorrelationModel, METH_O, "LayerRoughness_crosscorrelationModel(LayerRoughness self) -> CrosscorrelationModel const *"},
+	 { "LayerRoughness_setCrosscorrelationModel", _wrap_LayerRoughness_setCrosscorrelationModel, METH_VARARGS, "LayerRoughness_setCrosscorrelationModel(LayerRoughness self, CrosscorrelationModel crosscorrelation)"},
+	 { "LayerRoughness_crosscorrelationModel", _wrap_LayerRoughness_crosscorrelationModel, METH_O, "LayerRoughness_crosscorrelationModel(LayerRoughness self) -> CrosscorrelationModel"},
 	 { "delete_LayerRoughness", _wrap_delete_LayerRoughness, METH_O, "delete_LayerRoughness(LayerRoughness self)"},
 	 { "LayerRoughness_swigregister", LayerRoughness_swigregister, METH_O, NULL},
 	 { "LayerRoughness_swiginit", LayerRoughness_swiginit, METH_VARARGS, NULL},
@@ -73723,6 +74257,21 @@ static PyMethodDef SwigMethods[] = {
 	 { "delete_TanhInterlayer", _wrap_delete_TanhInterlayer, METH_O, "delete_TanhInterlayer(TanhInterlayer self)"},
 	 { "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 k) -> double"},
+	 { "CrosscorrelationModel_replicationFactor", _wrap_CrosscorrelationModel_replicationFactor, METH_VARARGS, "CrosscorrelationModel_replicationFactor(CrosscorrelationModel self, R3 k, 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)"},
+	 { "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_replicationFactor", _wrap_CommonDepthCrosscorrelation_replicationFactor, METH_VARARGS, "CommonDepthCrosscorrelation_replicationFactor(CommonDepthCrosscorrelation self, R3 arg2, double thickness) -> double"},
+	 { "CommonDepthCrosscorrelation_parDefs", _wrap_CommonDepthCrosscorrelation_parDefs, METH_O, "CommonDepthCrosscorrelation_parDefs(CommonDepthCrosscorrelation self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "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},
 	 { "delete_IFormfactorPolyhedron", _wrap_delete_IFormfactorPolyhedron, METH_O, "delete_IFormfactorPolyhedron(IFormfactorPolyhedron self)"},
 	 { "IFormfactorPolyhedron_volume", _wrap_IFormfactorPolyhedron_volume, METH_O, "IFormfactorPolyhedron_volume(IFormfactorPolyhedron self) -> double"},
 	 { "IFormfactorPolyhedron_radialExtension", _wrap_IFormfactorPolyhedron_radialExtension, METH_O, "IFormfactorPolyhedron_radialExtension(IFormfactorPolyhedron self) -> double"},
@@ -74335,6 +74884,9 @@ static PyMethodDef SwigMethods[] = {
 static void *_p_K_CorrelationModelTo_p_AutocorrelationModel(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((AutocorrelationModel *)  ((K_CorrelationModel *) x));
 }
+static void *_p_CommonDepthCrosscorrelationTo_p_CrosscorrelationModel(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((CrosscorrelationModel *)  ((CommonDepthCrosscorrelation *) x));
+}
 static void *_p_AutocorrelationModelTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *)  ((AutocorrelationModel *) x));
 }
@@ -74356,6 +74908,9 @@ static void *_p_BoxTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
 static void *_p_CantellatedCubeTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     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));
+}
 static void *_p_CompoundTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (ISampleNode *)(IParticle *) ((Compound *) x));
 }
@@ -74374,6 +74929,9 @@ static void *_p_CosineRippleGaussTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(ne
 static void *_p_CosineRippleLorentzTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (ISampleNode *)(IFormfactor *)(IProfileRipple *)(ICosineRipple *) ((CosineRippleLorentz *) x));
 }
+static void *_p_CrosscorrelationModelTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ICloneable *)  ((CrosscorrelationModel *) x));
+}
 static void *_p_CrystalTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (ISampleNode *) ((Crystal *) x));
 }
@@ -74863,6 +75421,9 @@ static void *_p_BoxTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
 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));
+}
 static void *_p_CompoundTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (ISampleNode *)(IParticle *) ((Compound *) x));
 }
@@ -74881,6 +75442,9 @@ static void *_p_CosineRippleGaussTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemo
 static void *_p_CosineRippleLorentzTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (ISampleNode *)(IFormfactor *)(IProfileRipple *)(ICosineRipple *) ((CosineRippleLorentz *) x));
 }
+static void *_p_CrosscorrelationModelTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((INode *)  ((CrosscorrelationModel *) x));
+}
 static void *_p_CrystalTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (ISampleNode *) ((Crystal *) x));
 }
@@ -75443,6 +76007,7 @@ static swig_type_info _swigt__p_BasicLattice2D = {"_p_BasicLattice2D", "BasicLat
 static swig_type_info _swigt__p_Bipyramid4 = {"_p_Bipyramid4", "Bipyramid4 *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_Box = {"_p_Box", "Box *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_CantellatedCube = {"_p_CantellatedCube", "CantellatedCube *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_CommonDepthCrosscorrelation = {"_p_CommonDepthCrosscorrelation", "CommonDepthCrosscorrelation *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_Compound = {"_p_Compound", "Compound *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_Cone = {"_p_Cone", "Cone *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_CoreAndShell = {"_p_CoreAndShell", "CoreAndShell *", 0, 0, (void*)0, 0};
@@ -75609,6 +76174,7 @@ static swig_type_info *swig_type_initial[] = {
   &_swigt__p_Bipyramid4,
   &_swigt__p_Box,
   &_swigt__p_CantellatedCube,
+  &_swigt__p_CommonDepthCrosscorrelation,
   &_swigt__p_Compound,
   &_swigt__p_Cone,
   &_swigt__p_CoreAndShell,
@@ -75775,13 +76341,14 @@ static swig_cast_info _swigc__p_BasicLattice2D[] = {  {&_swigt__p_BasicLattice2D
 static swig_cast_info _swigc__p_Bipyramid4[] = {  {&_swigt__p_Bipyramid4, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_Box[] = {  {&_swigt__p_Box, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_CantellatedCube[] = {  {&_swigt__p_CantellatedCube, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CommonDepthCrosscorrelation[] = {  {&_swigt__p_CommonDepthCrosscorrelation, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_Compound[] = {  {&_swigt__p_Compound, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_Cone[] = {  {&_swigt__p_Cone, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_CoreAndShell[] = {  {&_swigt__p_CoreAndShell, 0, 0, 0},{0, 0, 0, 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},{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_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}};
@@ -75793,14 +76360,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_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_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_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_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_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_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}};
@@ -75941,6 +76508,7 @@ static swig_cast_info *swig_cast_initial[] = {
   _swigc__p_Bipyramid4,
   _swigc__p_Box,
   _swigc__p_CantellatedCube,
+  _swigc__p_CommonDepthCrosscorrelation,
   _swigc__p_Compound,
   _swigc__p_Cone,
   _swigc__p_CoreAndShell,
diff --git a/rawEx/scatter2d/CorrelatedRoughness.py b/rawEx/scatter2d/CorrelatedRoughness.py
index e97f3678aad..d55a91bbf88 100755
--- a/rawEx/scatter2d/CorrelatedRoughness.py
+++ b/rawEx/scatter2d/CorrelatedRoughness.py
@@ -25,7 +25,8 @@ def get_sample():
     sigma, hurst, corrLength = 1*nm, 0.3, 5*nm
     autocorr = ba.K_CorrelationModel(sigma, hurst, corrLength)
     interlayer = ba.TanhInterlayer()
-    roughness = ba.LayerRoughness(autocorr, interlayer)
+    crosscorrelation = ba.CommonDepthCrosscorrelation(10*nm)
+    roughness = ba.LayerRoughness(autocorr, interlayer, crosscorrelation)
 
     my_sample = ba.MultiLayer()
 
@@ -38,7 +39,6 @@ def get_sample():
         my_sample.addLayerWithTopRoughness(l_part_b, roughness)
 
     my_sample.addLayerWithTopRoughness(l_substrate, roughness)
-    my_sample.setCrossCorrLength(10*nm)
 
     return my_sample
 
-- 
GitLab