From d3e1f56864f5d51ff9bc8acd02d6a264de0e2009 Mon Sep 17 00:00:00 2001
From: "Joachim Wuttke (h)" <j.wuttke@fz-juelich.de>
Date: Thu, 16 Dec 2021 16:17:49 +0100
Subject: [PATCH] rm class and source files IDecoratableBorn

---
 Sample/Particle/FormFactorCrystal.h    |   2 +-
 Sample/Scattering/DecoratedFF.h        |   6 +-
 Sample/Scattering/IDecoratableBorn.cpp |  24 -
 Sample/Scattering/IDecoratableBorn.h   |  41 --
 Sample/Scattering/IFormFactor.h        |   2 +-
 Tests/SingleUse/ff-tetrahedron.cpp     |   2 +-
 Tests/Unit/Numeric/BisectFF.cpp        |   8 +-
 Wrap/Swig/libBornAgainCore.i           |   3 +-
 Wrap/Swig/libBornAgainResample.i       |   1 -
 Wrap/Swig/libBornAgainSample.i         |   4 +-
 auto/Wrap/doxygenSample.i              |  50 +-
 auto/Wrap/libBornAgainCore_wrap.cpp    | 205 +++---
 auto/Wrap/libBornAgainSample.py        |  64 +-
 auto/Wrap/libBornAgainSample_wrap.cpp  | 907 ++++---------------------
 auto/Wrap/libBornAgainSample_wrap.h    |  52 --
 15 files changed, 257 insertions(+), 1114 deletions(-)
 delete mode 100644 Sample/Scattering/IDecoratableBorn.cpp
 delete mode 100644 Sample/Scattering/IDecoratableBorn.h

diff --git a/Sample/Particle/FormFactorCrystal.h b/Sample/Particle/FormFactorCrystal.h
index c076be64a35..26bdc86daba 100644
--- a/Sample/Particle/FormFactorCrystal.h
+++ b/Sample/Particle/FormFactorCrystal.h
@@ -15,8 +15,8 @@
 #ifndef BORNAGAIN_SAMPLE_PARTICLE_FORMFACTORCRYSTAL_H
 #define BORNAGAIN_SAMPLE_PARTICLE_FORMFACTORCRYSTAL_H
 
+#include "Sample/Scattering/IFormFactor.h"
 #include "Sample/Lattice/Lattice3D.h"
-#include "Sample/Scattering/IDecoratableBorn.h"
 
 //! The form factor of a MesoCrystal.
 //! @ingroup formfactors
diff --git a/Sample/Scattering/DecoratedFF.h b/Sample/Scattering/DecoratedFF.h
index b6b39d1d5fb..1e01285f533 100644
--- a/Sample/Scattering/DecoratedFF.h
+++ b/Sample/Scattering/DecoratedFF.h
@@ -16,7 +16,7 @@
 #ifndef BORNAGAIN_SAMPLE_SCATTERING_DECORATEDFF_H
 #define BORNAGAIN_SAMPLE_SCATTERING_DECORATEDFF_H
 
-#include "Sample/Scattering/IDecoratableBorn.h"
+#include "Sample/Scattering/IFormFactor.h"
 #include <heinz/Vectors3D.h>
 
 class IBornFF;
@@ -29,7 +29,7 @@ class RotMatrix;
 //! This class is designed according to the Decorator Pattern.
 //! It inherits from IFormFactor _and_ has a member of type IFormFactor*.
 
-class DecoratedFF : public IDecoratableBorn {
+class DecoratedFF : public IFormFactor {
 public:
     DecoratedFF(const IBornFF& ff);
     ~DecoratedFF() override;
@@ -61,7 +61,7 @@ public:
 
     const IBornFF* getFormFactor() const;
 
-    complex_t formfactor(C3 q) const override;
+    virtual complex_t formfactor(C3 q) const;
 
     static DecoratedFF* createTransformedFormFactor(const IBornFF& formfactor, const IRotation* rot,
                                                     R3 translation);
diff --git a/Sample/Scattering/IDecoratableBorn.cpp b/Sample/Scattering/IDecoratableBorn.cpp
deleted file mode 100644
index 033b9a4dcca..00000000000
--- a/Sample/Scattering/IDecoratableBorn.cpp
+++ /dev/null
@@ -1,24 +0,0 @@
-//  ************************************************************************************************
-//
-//  BornAgain: simulate and fit reflection and scattering
-//
-//! @file      Sample/Scattering/IDecoratableBorn.cpp
-//! @brief     Implements interface class IDecoratableBorn.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-//  ************************************************************************************************
-
-#include "Sample/Scattering/IDecoratableBorn.h"
-
-IDecoratableBorn::IDecoratableBorn() = default;
-
-IDecoratableBorn::IDecoratableBorn(const NodeMeta& meta, const std::vector<double>& PValues)
-    : IFormFactor(meta, PValues)
-{
-}
-
-IDecoratableBorn::~IDecoratableBorn() = default;
diff --git a/Sample/Scattering/IDecoratableBorn.h b/Sample/Scattering/IDecoratableBorn.h
deleted file mode 100644
index f3003a14324..00000000000
--- a/Sample/Scattering/IDecoratableBorn.h
+++ /dev/null
@@ -1,41 +0,0 @@
-//  ************************************************************************************************
-//
-//  BornAgain: simulate and fit reflection and scattering
-//
-//! @file      Sample/Scattering/IDecoratableBorn.h
-//! @brief     Defines interface IDecoratableBorn.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-//  ************************************************************************************************
-
-#ifndef USER_API
-#ifndef BORNAGAIN_SAMPLE_SCATTERING_IDECORATABLEBORN_H
-#define BORNAGAIN_SAMPLE_SCATTERING_IDECORATABLEBORN_H
-
-#include "Sample/Scattering/IFormFactor.h"
-
-//! Abstract base class for Born form factors.
-//!
-//! In contrast to the generic IFormFactor, a Born form factor does not depend
-//! on the incoming and outgoing wave vectors ki and kf, except through their
-//! difference, the scattering vector q=ki-kf.
-
-class IDecoratableBorn : public IFormFactor {
-public:
-    IDecoratableBorn();
-    IDecoratableBorn(const NodeMeta& meta, const std::vector<double>& PValues);
-    ~IDecoratableBorn() override;
-
-    IDecoratableBorn* clone() const override = 0;
-
-    //! Returns scattering amplitude for complex scattering wavevector q=k_i-k_f.
-    //! This method is public only for convenience of plotting form factors in Python.
-    virtual complex_t formfactor(C3 q) const = 0;
-};
-
-#endif // BORNAGAIN_SAMPLE_SCATTERING_IDECORATABLEBORN_H
-#endif // USER_API
diff --git a/Sample/Scattering/IFormFactor.h b/Sample/Scattering/IFormFactor.h
index 136734c2793..57125718a01 100644
--- a/Sample/Scattering/IFormFactor.h
+++ b/Sample/Scattering/IFormFactor.h
@@ -31,7 +31,7 @@ class WavevectorInfo;
 //!
 //! The actual form factor is returned by the complex valued function IFormFactor::evaluate,
 //! which depends on the incoming and outgoing wave vectors ki and kf.
-//! If it only depends on the scattering vector q=ki-kf, then it is a IDecoratableBorn.
+//! If it only depends on the scattering vector q=ki-kf, then it is a DecoratedBorn.
 
 class IFormFactor : public ICloneable, public INode {
 protected:
diff --git a/Tests/SingleUse/ff-tetrahedron.cpp b/Tests/SingleUse/ff-tetrahedron.cpp
index 3137d7cc556..946c21e4f7a 100644
--- a/Tests/SingleUse/ff-tetrahedron.cpp
+++ b/Tests/SingleUse/ff-tetrahedron.cpp
@@ -14,7 +14,7 @@
     class AdHoc : public ::testing::Test {
 };
 
-void run(const IDecoratableBorn& ff, const C3& q, const C3& p)
+void run(const IBornFF& ff, const C3& q, const C3& p)
 {
     const complex_t ffq = ff.formfactor(q);
     std::cout << std::setprecision(16) << q << " -> " << ffq << "\n";
diff --git a/Tests/Unit/Numeric/BisectFF.cpp b/Tests/Unit/Numeric/BisectFF.cpp
index 405b2b3d160..e2d22779f90 100644
--- a/Tests/Unit/Numeric/BisectFF.cpp
+++ b/Tests/Unit/Numeric/BisectFF.cpp
@@ -21,7 +21,7 @@
         testing::Values(1e-19, 1e-17, 1e-15, 1e-12, 1e-9, 1e-6, 1e-3, .03, 1., 3., 10., 30., 100.),
         testing::Values(-1., 1.), testing::Values(0, -4e-16, +8e-16, -5e-11, 3e-7, -2e-3, .01, .1));
 
-complex_t deriv(const IDecoratableBorn& ff, const C3& qf, const complex_t Ff,
+complex_t deriv(const IBornFF& ff, const C3& qf, const complex_t Ff,
                 const PolyhedralDiagnosis& /*df*/, const C3& qdir, const double qstep)
 {
     assert(Ff == ff.formfactor(qf));
@@ -33,7 +33,7 @@ complex_t deriv(const IDecoratableBorn& ff, const C3& qf, const complex_t Ff,
 
 //! Bisect between two q's to find possible discontinuities
 
-void bisect(int& ifail, const C3& qdir, const IDecoratableBorn& ff, const C3& q0, const C3& q1,
+void bisect(int& ifail, const C3& qdir, const IBornFF& ff, const C3& q0, const C3& q1,
             const complex_t F0, const complex_t F1, const PolyhedralDiagnosis& d0,
             const PolyhedralDiagnosis& d1, const double qmindiff, const double Fmaxreldiff)
 {
@@ -84,7 +84,7 @@ void bisect(int& ifail, const C3& qdir, const IDecoratableBorn& ff, const C3& q0
         bisect(ifail, qdir, ff, q2, q1, F2, F1, d2, d1, qmindiff, Fmaxreldiff);
 }
 
-void run_bisection(int& ifail, IDecoratableBorn& ff, const C3& q0, const C3& q1)
+void run_bisection(int& ifail, IBornFF& ff, const C3& q0, const C3& q1)
 {
     const double qdiffmin = std::max(q0.mag(), q1.mag()) / 4e11;
     complex_t F0 = ff.formfactor(q0);
@@ -97,7 +97,7 @@ void run_bisection(int& ifail, IDecoratableBorn& ff, const C3& q0, const C3& q1)
     bisect(ifail, q1 - q0, ff, q0, q1, F0, F1, d0, d1, qdiffmin, .6e-10);
 }
 
-void run_test(IDecoratableBorn& ff)
+void run_test(IBornFF& ff)
 {
     ::testing::internal::ParamGenerator<std::tuple<C3, C3, double, double, double>> gen = qlist;
     int ifail = 0;
diff --git a/Wrap/Swig/libBornAgainCore.i b/Wrap/Swig/libBornAgainCore.i
index d08cb8dacc0..cb36cb22bcf 100644
--- a/Wrap/Swig/libBornAgainCore.i
+++ b/Wrap/Swig/libBornAgainCore.i
@@ -56,9 +56,9 @@
 
 %{
 #include "BAVersion.h"
-#include "Sample/Scattering/IDecoratableBorn.h"
 #include "Fit/Minimizer/MinimizerResult.h"
 #include "Sample/Scattering/ISampleNode.h"
+#include "Sample/Scattering/IFormFactor.h"
 
 #include "Core/Background/ConstantBackground.h"
 #include "Core/Background/PoissonNoiseBackground.h"
@@ -91,7 +91,6 @@
 
 %import(module="libBornAgainSample") "Sample/Scattering/ISampleNode.h"
 %import(module="libBornAgainSample") "Sample/Scattering/IFormFactor.h"
-%import(module="libBornAgainSample") "Sample/Scattering/IDecoratableBorn.h"
 
 %template(swig_dummy_type_axisinfo_vector) std::vector<AxisInfo>;
 
diff --git a/Wrap/Swig/libBornAgainResample.i b/Wrap/Swig/libBornAgainResample.i
index a29350851d3..eee2d9d0be7 100644
--- a/Wrap/Swig/libBornAgainResample.i
+++ b/Wrap/Swig/libBornAgainResample.i
@@ -58,7 +58,6 @@
 
 %import(module="libBornAgainSample") "Sample/Scattering/ISampleNode.h"
 %import(module="libBornAgainSample") "Sample/Scattering/IFormFactor.h"
-%import(module="libBornAgainSample") "Sample/Scattering/IDecoratableBorn.h"
 
 %include "BAVersion.h"
 %include "Resample/Swig/MultiLayerFuncs.h"
diff --git a/Wrap/Swig/libBornAgainSample.i b/Wrap/Swig/libBornAgainSample.i
index 7b50e8a247c..2508327e0ac 100644
--- a/Wrap/Swig/libBornAgainSample.i
+++ b/Wrap/Swig/libBornAgainSample.i
@@ -30,8 +30,7 @@
   %}
 
 %feature("director") ISampleNode;            // needed by IFormFactor
-%feature("director") IFormFactor;        // needed by IDecoratableBorn
-%feature("director") IDecoratableBorn;    // used in CustomFormFactor.py
+%feature("director") IFormFactor;        // needed by DecoratedFF etc ?
 %feature("director") IBornFF;    // used in CustomFormFactor.py
 
 %{
@@ -125,7 +124,6 @@
 
 %include "Sample/Scattering/ISampleNode.h"
 %include "Sample/Scattering/IFormFactor.h"
-%include "Sample/Scattering/IDecoratableBorn.h"
 %include "Sample/Scattering/IBornFF.h"
 %include "Sample/Scattering/DecoratedFF.h"
 %include "Sample/Scattering/Rotations.h"
diff --git a/auto/Wrap/doxygenSample.i b/auto/Wrap/doxygenSample.i
index 077ee266a23..17ae4a8da86 100644
--- a/auto/Wrap/doxygenSample.i
+++ b/auto/Wrap/doxygenSample.i
@@ -254,9 +254,7 @@ Returns the z-coordinate of the lowest point in this shape after a given rotatio
 %feature("docstring")  DecoratedFF::getFormFactor "const IBornFF * DecoratedFF::getFormFactor() const
 ";
 
-%feature("docstring")  DecoratedFF::formfactor "complex_t DecoratedFF::formfactor(C3 q) const override
-
-Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
+%feature("docstring")  DecoratedFF::formfactor "complex_t DecoratedFF::formfactor(C3 q) const
 ";
 
 
@@ -2322,34 +2320,6 @@ C++ includes: IProfileRipple.h
 ";
 
 
-// File: classIDecoratableBorn.xml
-%feature("docstring") IDecoratableBorn "
-
-Abstract base class for Born form factors.
-
-In contrast to the generic  IFormFactor, a Born form factor does not depend on the incoming and outgoing wave vectors ki and kf, except through their difference, the scattering vector q=ki-kf.
-
-C++ includes: IDecoratableBorn.h
-";
-
-%feature("docstring")  IDecoratableBorn::IDecoratableBorn "IDecoratableBorn::IDecoratableBorn()
-";
-
-%feature("docstring")  IDecoratableBorn::IDecoratableBorn "IDecoratableBorn::IDecoratableBorn(const NodeMeta &meta, const std::vector< double > &PValues)
-";
-
-%feature("docstring")  IDecoratableBorn::~IDecoratableBorn "IDecoratableBorn::~IDecoratableBorn() override
-";
-
-%feature("docstring")  IDecoratableBorn::clone "IDecoratableBorn* IDecoratableBorn::clone() const override=0
-";
-
-%feature("docstring")  IDecoratableBorn::formfactor "virtual complex_t IDecoratableBorn::formfactor(C3 q) const =0
-
-Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
-";
-
-
 // File: classIdentityRotation.xml
 %feature("docstring") IdentityRotation "
 
@@ -2414,7 +2384,7 @@ Returns true if rotation matrix is identity matrix (no rotations)
 
 Abstract base class for all form factors.
 
-The actual form factor is returned by the complex valued function IFormFactor::evaluate, which depends on the incoming and outgoing wave vectors ki and kf. If it only depends on the scattering vector q=ki-kf, then it is a  IDecoratableBorn.
+The actual form factor is returned by the complex valued function IFormFactor::evaluate, which depends on the incoming and outgoing wave vectors ki and kf. If it only depends on the scattering vector q=ki-kf, then it is a DecoratedBorn.
 
 C++ includes: IFormFactor.h
 ";
@@ -5137,19 +5107,19 @@ C++ includes: ZLimits.h
 // File: namespace_0d2.xml
 
 
-// File: namespace_0d204.xml
+// File: namespace_0d202.xml
 
 
-// File: namespace_0d217.xml
+// File: namespace_0d215.xml
 
 
-// File: namespace_0d227.xml
+// File: namespace_0d225.xml
 
 
-// File: namespace_0d249.xml
+// File: namespace_0d247.xml
 
 
-// File: namespace_0d262.xml
+// File: namespace_0d260.xml
 
 
 // File: namespace_0d36.xml
@@ -6143,12 +6113,6 @@ magnetization (in A/m)
 // File: IBornFF_8h.xml
 
 
-// File: IDecoratableBorn_8cpp.xml
-
-
-// File: IDecoratableBorn_8h.xml
-
-
 // File: IFormFactor_8cpp.xml
 
 
diff --git a/auto/Wrap/libBornAgainCore_wrap.cpp b/auto/Wrap/libBornAgainCore_wrap.cpp
index 41d945727e5..aadd412636b 100644
--- a/auto/Wrap/libBornAgainCore_wrap.cpp
+++ b/auto/Wrap/libBornAgainCore_wrap.cpp
@@ -3109,101 +3109,100 @@ namespace Swig {
 #define SWIGTYPE_p_IBackground swig_types[9]
 #define SWIGTYPE_p_IChiSquaredModule swig_types[10]
 #define SWIGTYPE_p_ICloneable swig_types[11]
-#define SWIGTYPE_p_IDecoratableBorn swig_types[12]
-#define SWIGTYPE_p_IDetector swig_types[13]
-#define SWIGTYPE_p_IDetector2D swig_types[14]
-#define SWIGTYPE_p_IDistribution1D swig_types[15]
-#define SWIGTYPE_p_IFootprintFactor swig_types[16]
-#define SWIGTYPE_p_IFormFactor swig_types[17]
-#define SWIGTYPE_p_IIntensityFunction swig_types[18]
-#define SWIGTYPE_p_INode swig_types[19]
-#define SWIGTYPE_p_IRangedDistribution swig_types[20]
-#define SWIGTYPE_p_ISampleNode swig_types[21]
-#define SWIGTYPE_p_IShape2D swig_types[22]
-#define SWIGTYPE_p_ISimulation swig_types[23]
-#define SWIGTYPE_p_ISimulation2D swig_types[24]
-#define SWIGTYPE_p_ISpecularScan swig_types[25]
-#define SWIGTYPE_p_IVarianceFunction swig_types[26]
-#define SWIGTYPE_p_Instrument swig_types[27]
-#define SWIGTYPE_p_IntensityFunctionLog swig_types[28]
-#define SWIGTYPE_p_IntensityFunctionSqrt swig_types[29]
-#define SWIGTYPE_p_IterationInfo swig_types[30]
-#define SWIGTYPE_p_MultiLayer swig_types[31]
-#define SWIGTYPE_p_OffSpecularSimulation swig_types[32]
-#define SWIGTYPE_p_ParameterDistribution swig_types[33]
-#define SWIGTYPE_p_PoissonNoiseBackground swig_types[34]
-#define SWIGTYPE_p_PyBuilderCallback swig_types[35]
-#define SWIGTYPE_p_PyObserverCallback swig_types[36]
-#define SWIGTYPE_p_QzScan swig_types[37]
-#define SWIGTYPE_p_RealLimits swig_types[38]
-#define SWIGTYPE_p_ScanResolution swig_types[39]
-#define SWIGTYPE_p_SimulationOptions swig_types[40]
-#define SWIGTYPE_p_SimulationResult swig_types[41]
-#define SWIGTYPE_p_SpecularSimulation swig_types[42]
-#define SWIGTYPE_p_VarianceConstantFunction swig_types[43]
-#define SWIGTYPE_p_VarianceSimFunction swig_types[44]
-#define SWIGTYPE_p_Vec3T_double_t swig_types[45]
-#define SWIGTYPE_p_Vec3T_int_t swig_types[46]
-#define SWIGTYPE_p_Vec3T_std__complexT_double_t_t swig_types[47]
-#define SWIGTYPE_p_allocator_type swig_types[48]
-#define SWIGTYPE_p_char swig_types[49]
-#define SWIGTYPE_p_difference_type swig_types[50]
-#define SWIGTYPE_p_first_type swig_types[51]
-#define SWIGTYPE_p_int swig_types[52]
-#define SWIGTYPE_p_key_type swig_types[53]
-#define SWIGTYPE_p_long_long swig_types[54]
-#define SWIGTYPE_p_mapped_type swig_types[55]
-#define SWIGTYPE_p_mumufit__MinimizerResult swig_types[56]
-#define SWIGTYPE_p_mumufit__Parameters swig_types[57]
-#define SWIGTYPE_p_p_PyObject swig_types[58]
-#define SWIGTYPE_p_second_type swig_types[59]
-#define SWIGTYPE_p_short swig_types[60]
-#define SWIGTYPE_p_signed_char swig_types[61]
-#define SWIGTYPE_p_size_type swig_types[62]
-#define SWIGTYPE_p_std__allocatorT_AxisInfo_t swig_types[63]
-#define SWIGTYPE_p_std__allocatorT_INode_const_p_t swig_types[64]
-#define SWIGTYPE_p_std__allocatorT_INode_p_t swig_types[65]
-#define SWIGTYPE_p_std__allocatorT_Vec3T_double_t_t swig_types[66]
-#define SWIGTYPE_p_std__allocatorT_Vec3T_std__complexT_double_t_t_t swig_types[67]
-#define SWIGTYPE_p_std__allocatorT_double_t swig_types[68]
-#define SWIGTYPE_p_std__allocatorT_int_t swig_types[69]
-#define SWIGTYPE_p_std__allocatorT_std__complexT_double_t_t swig_types[70]
-#define SWIGTYPE_p_std__allocatorT_std__pairT_double_double_t_t swig_types[71]
-#define SWIGTYPE_p_std__allocatorT_std__pairT_std__string_const_double_t_t swig_types[72]
-#define SWIGTYPE_p_std__allocatorT_std__string_t swig_types[73]
-#define SWIGTYPE_p_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t swig_types[74]
-#define SWIGTYPE_p_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t swig_types[75]
-#define SWIGTYPE_p_std__allocatorT_unsigned_long_t swig_types[76]
-#define SWIGTYPE_p_std__arrayT_double_3_t swig_types[77]
-#define SWIGTYPE_p_std__arrayT_std__complexT_double_t_3_t swig_types[78]
-#define SWIGTYPE_p_std__complexT_double_t swig_types[79]
-#define SWIGTYPE_p_std__functionT_bool_fsize_tF_t swig_types[80]
-#define SWIGTYPE_p_std__invalid_argument swig_types[81]
-#define SWIGTYPE_p_std__lessT_std__string_t swig_types[82]
-#define SWIGTYPE_p_std__mapT_std__string_double_std__lessT_std__string_t_std__allocatorT_std__pairT_std__string_const_double_t_t_t swig_types[83]
-#define SWIGTYPE_p_std__pairT_double_double_t swig_types[84]
-#define SWIGTYPE_p_std__vectorT_AxisInfo_std__allocatorT_AxisInfo_t_t swig_types[85]
-#define SWIGTYPE_p_std__vectorT_INode_const_p_std__allocatorT_INode_const_p_t_t swig_types[86]
-#define SWIGTYPE_p_std__vectorT_INode_p_std__allocatorT_INode_p_t_t swig_types[87]
-#define SWIGTYPE_p_std__vectorT_ParameterDistribution_std__allocatorT_ParameterDistribution_t_t swig_types[88]
-#define SWIGTYPE_p_std__vectorT_Vec3T_double_t_std__allocatorT_Vec3T_double_t_t_t swig_types[89]
-#define SWIGTYPE_p_std__vectorT_Vec3T_std__complexT_double_t_t_std__allocatorT_Vec3T_std__complexT_double_t_t_t_t swig_types[90]
-#define SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t swig_types[91]
-#define SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t swig_types[92]
-#define SWIGTYPE_p_std__vectorT_std__complexT_double_t_std__allocatorT_std__complexT_double_t_t_t swig_types[93]
-#define SWIGTYPE_p_std__vectorT_std__pairT_double_double_t_std__allocatorT_std__pairT_double_double_t_t_t swig_types[94]
-#define SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t swig_types[95]
-#define SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t swig_types[96]
-#define SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t swig_types[97]
-#define SWIGTYPE_p_std__vectorT_unsigned_long_std__allocatorT_unsigned_long_t_t swig_types[98]
-#define SWIGTYPE_p_swig__SwigPyIterator swig_types[99]
-#define SWIGTYPE_p_unsigned_char swig_types[100]
-#define SWIGTYPE_p_unsigned_int swig_types[101]
-#define SWIGTYPE_p_unsigned_long_long swig_types[102]
-#define SWIGTYPE_p_unsigned_short swig_types[103]
-#define SWIGTYPE_p_value_type swig_types[104]
-static swig_type_info *swig_types[106];
-static swig_module_info swig_module = {swig_types, 105, 0, 0, 0, 0};
+#define SWIGTYPE_p_IDetector swig_types[12]
+#define SWIGTYPE_p_IDetector2D swig_types[13]
+#define SWIGTYPE_p_IDistribution1D swig_types[14]
+#define SWIGTYPE_p_IFootprintFactor swig_types[15]
+#define SWIGTYPE_p_IFormFactor swig_types[16]
+#define SWIGTYPE_p_IIntensityFunction swig_types[17]
+#define SWIGTYPE_p_INode swig_types[18]
+#define SWIGTYPE_p_IRangedDistribution swig_types[19]
+#define SWIGTYPE_p_ISampleNode swig_types[20]
+#define SWIGTYPE_p_IShape2D swig_types[21]
+#define SWIGTYPE_p_ISimulation swig_types[22]
+#define SWIGTYPE_p_ISimulation2D swig_types[23]
+#define SWIGTYPE_p_ISpecularScan swig_types[24]
+#define SWIGTYPE_p_IVarianceFunction swig_types[25]
+#define SWIGTYPE_p_Instrument swig_types[26]
+#define SWIGTYPE_p_IntensityFunctionLog swig_types[27]
+#define SWIGTYPE_p_IntensityFunctionSqrt swig_types[28]
+#define SWIGTYPE_p_IterationInfo swig_types[29]
+#define SWIGTYPE_p_MultiLayer swig_types[30]
+#define SWIGTYPE_p_OffSpecularSimulation swig_types[31]
+#define SWIGTYPE_p_ParameterDistribution swig_types[32]
+#define SWIGTYPE_p_PoissonNoiseBackground swig_types[33]
+#define SWIGTYPE_p_PyBuilderCallback swig_types[34]
+#define SWIGTYPE_p_PyObserverCallback swig_types[35]
+#define SWIGTYPE_p_QzScan swig_types[36]
+#define SWIGTYPE_p_RealLimits swig_types[37]
+#define SWIGTYPE_p_ScanResolution swig_types[38]
+#define SWIGTYPE_p_SimulationOptions swig_types[39]
+#define SWIGTYPE_p_SimulationResult swig_types[40]
+#define SWIGTYPE_p_SpecularSimulation swig_types[41]
+#define SWIGTYPE_p_VarianceConstantFunction swig_types[42]
+#define SWIGTYPE_p_VarianceSimFunction swig_types[43]
+#define SWIGTYPE_p_Vec3T_double_t swig_types[44]
+#define SWIGTYPE_p_Vec3T_int_t swig_types[45]
+#define SWIGTYPE_p_Vec3T_std__complexT_double_t_t swig_types[46]
+#define SWIGTYPE_p_allocator_type swig_types[47]
+#define SWIGTYPE_p_char swig_types[48]
+#define SWIGTYPE_p_difference_type swig_types[49]
+#define SWIGTYPE_p_first_type swig_types[50]
+#define SWIGTYPE_p_int swig_types[51]
+#define SWIGTYPE_p_key_type swig_types[52]
+#define SWIGTYPE_p_long_long swig_types[53]
+#define SWIGTYPE_p_mapped_type swig_types[54]
+#define SWIGTYPE_p_mumufit__MinimizerResult swig_types[55]
+#define SWIGTYPE_p_mumufit__Parameters swig_types[56]
+#define SWIGTYPE_p_p_PyObject swig_types[57]
+#define SWIGTYPE_p_second_type swig_types[58]
+#define SWIGTYPE_p_short swig_types[59]
+#define SWIGTYPE_p_signed_char swig_types[60]
+#define SWIGTYPE_p_size_type swig_types[61]
+#define SWIGTYPE_p_std__allocatorT_AxisInfo_t swig_types[62]
+#define SWIGTYPE_p_std__allocatorT_INode_const_p_t swig_types[63]
+#define SWIGTYPE_p_std__allocatorT_INode_p_t swig_types[64]
+#define SWIGTYPE_p_std__allocatorT_Vec3T_double_t_t swig_types[65]
+#define SWIGTYPE_p_std__allocatorT_Vec3T_std__complexT_double_t_t_t swig_types[66]
+#define SWIGTYPE_p_std__allocatorT_double_t swig_types[67]
+#define SWIGTYPE_p_std__allocatorT_int_t swig_types[68]
+#define SWIGTYPE_p_std__allocatorT_std__complexT_double_t_t swig_types[69]
+#define SWIGTYPE_p_std__allocatorT_std__pairT_double_double_t_t swig_types[70]
+#define SWIGTYPE_p_std__allocatorT_std__pairT_std__string_const_double_t_t swig_types[71]
+#define SWIGTYPE_p_std__allocatorT_std__string_t swig_types[72]
+#define SWIGTYPE_p_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t swig_types[73]
+#define SWIGTYPE_p_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t swig_types[74]
+#define SWIGTYPE_p_std__allocatorT_unsigned_long_t swig_types[75]
+#define SWIGTYPE_p_std__arrayT_double_3_t swig_types[76]
+#define SWIGTYPE_p_std__arrayT_std__complexT_double_t_3_t swig_types[77]
+#define SWIGTYPE_p_std__complexT_double_t swig_types[78]
+#define SWIGTYPE_p_std__functionT_bool_fsize_tF_t swig_types[79]
+#define SWIGTYPE_p_std__invalid_argument swig_types[80]
+#define SWIGTYPE_p_std__lessT_std__string_t swig_types[81]
+#define SWIGTYPE_p_std__mapT_std__string_double_std__lessT_std__string_t_std__allocatorT_std__pairT_std__string_const_double_t_t_t swig_types[82]
+#define SWIGTYPE_p_std__pairT_double_double_t swig_types[83]
+#define SWIGTYPE_p_std__vectorT_AxisInfo_std__allocatorT_AxisInfo_t_t swig_types[84]
+#define SWIGTYPE_p_std__vectorT_INode_const_p_std__allocatorT_INode_const_p_t_t swig_types[85]
+#define SWIGTYPE_p_std__vectorT_INode_p_std__allocatorT_INode_p_t_t swig_types[86]
+#define SWIGTYPE_p_std__vectorT_ParameterDistribution_std__allocatorT_ParameterDistribution_t_t swig_types[87]
+#define SWIGTYPE_p_std__vectorT_Vec3T_double_t_std__allocatorT_Vec3T_double_t_t_t swig_types[88]
+#define SWIGTYPE_p_std__vectorT_Vec3T_std__complexT_double_t_t_std__allocatorT_Vec3T_std__complexT_double_t_t_t_t swig_types[89]
+#define SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t swig_types[90]
+#define SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t swig_types[91]
+#define SWIGTYPE_p_std__vectorT_std__complexT_double_t_std__allocatorT_std__complexT_double_t_t_t swig_types[92]
+#define SWIGTYPE_p_std__vectorT_std__pairT_double_double_t_std__allocatorT_std__pairT_double_double_t_t_t swig_types[93]
+#define SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t swig_types[94]
+#define SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t swig_types[95]
+#define SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t swig_types[96]
+#define SWIGTYPE_p_std__vectorT_unsigned_long_std__allocatorT_unsigned_long_t_t swig_types[97]
+#define SWIGTYPE_p_swig__SwigPyIterator swig_types[98]
+#define SWIGTYPE_p_unsigned_char swig_types[99]
+#define SWIGTYPE_p_unsigned_int swig_types[100]
+#define SWIGTYPE_p_unsigned_long_long swig_types[101]
+#define SWIGTYPE_p_unsigned_short swig_types[102]
+#define SWIGTYPE_p_value_type swig_types[103]
+static swig_type_info *swig_types[105];
+static swig_module_info swig_module = {swig_types, 104, 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)
 
@@ -6954,9 +6953,9 @@ SWIGINTERN std::vector< std::pair< double,double > >::iterator std_vector_Sl_std
 SWIGINTERN void std_vector_Sl_std_pair_Sl_double_Sc_double_Sg__Sg__insert__SWIG_1(std::vector< std::pair< double,double > > *self,std::vector< std::pair< double,double > >::iterator pos,std::vector< std::pair< double,double > >::size_type n,std::vector< std::pair< double,double > >::value_type const &x){ self->insert(pos, n, x); }
 
 #include "BAVersion.h"
-#include "Sample/Scattering/IDecoratableBorn.h"
 #include "Fit/Minimizer/MinimizerResult.h"
 #include "Sample/Scattering/ISampleNode.h"
+#include "Sample/Scattering/IFormFactor.h"
 
 #include "Core/Background/ConstantBackground.h"
 #include "Core/Background/PoissonNoiseBackground.h"
@@ -47839,9 +47838,6 @@ static void *_p_IntensityFunctionLogTo_p_IIntensityFunction(void *x, int *SWIGUN
 static void *_p_IFormFactorTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *)  ((IFormFactor *) x));
 }
-static void *_p_IDecoratableBornTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (IFormFactor *) ((IDecoratableBorn *) x));
-}
 static void *_p_ISimulation2DTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (ISimulation *) ((ISimulation2D *) x));
 }
@@ -47893,9 +47889,6 @@ static void *_p_AlphaScanTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)
 static void *_p_IFormFactorTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *)  ((IFormFactor *) x));
 }
-static void *_p_IDecoratableBornTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (IFormFactor *) ((IDecoratableBorn *) x));
-}
 static void *_p_IBackgroundTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *)  ((IBackground *) x));
 }
@@ -47927,7 +47920,6 @@ static swig_type_info _swigt__p_IBackground = {"_p_IBackground", "IBackground *"
 static swig_type_info _swigt__p_IChiSquaredModule = {"_p_IChiSquaredModule", "IChiSquaredModule *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_ICloneable = {"_p_ICloneable", "ICloneable *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_IFormFactor = {"_p_IFormFactor", 0, 0, 0, 0, 0};
-static swig_type_info _swigt__p_IDecoratableBorn = {"_p_IDecoratableBorn", 0, 0, 0, 0, 0};
 static swig_type_info _swigt__p_ISampleNode = {"_p_ISampleNode", 0, 0, 0, 0, 0};
 static swig_type_info _swigt__p_IDetector = {"_p_IDetector", "IDetector *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_IDetector2D = {"_p_IDetector2D", "IDetector2D *", 0, 0, (void*)0, 0};
@@ -48033,7 +48025,6 @@ static swig_type_info *swig_type_initial[] = {
   &_swigt__p_IBackground,
   &_swigt__p_IChiSquaredModule,
   &_swigt__p_ICloneable,
-  &_swigt__p_IDecoratableBorn,
   &_swigt__p_IDetector,
   &_swigt__p_IDetector2D,
   &_swigt__p_IDistribution1D,
@@ -48140,15 +48131,14 @@ static swig_cast_info _swigc__p_IAxis[] = {  {&_swigt__p_IAxis, 0, 0, 0},{0, 0,
 static swig_cast_info _swigc__p_IBackground[] = {  {&_swigt__p_IBackground, 0, 0, 0},  {&_swigt__p_ConstantBackground, _p_ConstantBackgroundTo_p_IBackground, 0, 0},  {&_swigt__p_PoissonNoiseBackground, _p_PoissonNoiseBackgroundTo_p_IBackground, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IChiSquaredModule[] = {  {&_swigt__p_IChiSquaredModule, 0, 0, 0},  {&_swigt__p_ChiSquaredModule, _p_ChiSquaredModuleTo_p_IChiSquaredModule, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IFormFactor[] = {{&_swigt__p_IFormFactor, 0, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_IDecoratableBorn[] = {{&_swigt__p_IDecoratableBorn, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_ISampleNode[] = {{&_swigt__p_ISampleNode, 0, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_ICloneable[] = {  {&_swigt__p_ScanResolution, _p_ScanResolutionTo_p_ICloneable, 0, 0},  {&_swigt__p_IChiSquaredModule, _p_IChiSquaredModuleTo_p_ICloneable, 0, 0},  {&_swigt__p_ChiSquaredModule, _p_ChiSquaredModuleTo_p_ICloneable, 0, 0},  {&_swigt__p_QzScan, _p_QzScanTo_p_ICloneable, 0, 0},  {&_swigt__p_AlphaScan, _p_AlphaScanTo_p_ICloneable, 0, 0},  {&_swigt__p_IFormFactor, _p_IFormFactorTo_p_ICloneable, 0, 0},  {&_swigt__p_IDecoratableBorn, _p_IDecoratableBornTo_p_ICloneable, 0, 0},  {&_swigt__p_IBackground, _p_IBackgroundTo_p_ICloneable, 0, 0},  {&_swigt__p_ConstantBackground, _p_ConstantBackgroundTo_p_ICloneable, 0, 0},  {&_swigt__p_PoissonNoiseBackground, _p_PoissonNoiseBackgroundTo_p_ICloneable, 0, 0},  {&_swigt__p_ICloneable, 0, 0, 0},  {&_swigt__p_ISampleNode, _p_ISampleNodeTo_p_ICloneable, 0, 0},  {&_swigt__p_ISpecularScan, _p_ISpecularScanTo_p_ICloneable, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_ICloneable[] = {  {&_swigt__p_ScanResolution, _p_ScanResolutionTo_p_ICloneable, 0, 0},  {&_swigt__p_IChiSquaredModule, _p_IChiSquaredModuleTo_p_ICloneable, 0, 0},  {&_swigt__p_ChiSquaredModule, _p_ChiSquaredModuleTo_p_ICloneable, 0, 0},  {&_swigt__p_QzScan, _p_QzScanTo_p_ICloneable, 0, 0},  {&_swigt__p_AlphaScan, _p_AlphaScanTo_p_ICloneable, 0, 0},  {&_swigt__p_IFormFactor, _p_IFormFactorTo_p_ICloneable, 0, 0},  {&_swigt__p_IBackground, _p_IBackgroundTo_p_ICloneable, 0, 0},  {&_swigt__p_ConstantBackground, _p_ConstantBackgroundTo_p_ICloneable, 0, 0},  {&_swigt__p_PoissonNoiseBackground, _p_PoissonNoiseBackgroundTo_p_ICloneable, 0, 0},  {&_swigt__p_ICloneable, 0, 0, 0},  {&_swigt__p_ISampleNode, _p_ISampleNodeTo_p_ICloneable, 0, 0},  {&_swigt__p_ISpecularScan, _p_ISpecularScanTo_p_ICloneable, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IDetector[] = {  {&_swigt__p_IDetector, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IDetector2D[] = {  {&_swigt__p_IDetector2D, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IDistribution1D[] = {  {&_swigt__p_IDistribution1D, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IFootprintFactor[] = {  {&_swigt__p_IFootprintFactor, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IIntensityFunction[] = {  {&_swigt__p_IntensityFunctionSqrt, _p_IntensityFunctionSqrtTo_p_IIntensityFunction, 0, 0},  {&_swigt__p_IIntensityFunction, 0, 0, 0},  {&_swigt__p_IntensityFunctionLog, _p_IntensityFunctionLogTo_p_IIntensityFunction, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_INode[] = {  {&_swigt__p_INode, 0, 0, 0},  {&_swigt__p_IFormFactor, _p_IFormFactorTo_p_INode, 0, 0},  {&_swigt__p_IDecoratableBorn, _p_IDecoratableBornTo_p_INode, 0, 0},  {&_swigt__p_ISimulation2D, _p_ISimulation2DTo_p_INode, 0, 0},  {&_swigt__p_GISASSimulation, _p_GISASSimulationTo_p_INode, 0, 0},  {&_swigt__p_OffSpecularSimulation, _p_OffSpecularSimulationTo_p_INode, 0, 0},  {&_swigt__p_ISimulation, _p_ISimulationTo_p_INode, 0, 0},  {&_swigt__p_DepthProbeSimulation, _p_DepthProbeSimulationTo_p_INode, 0, 0},  {&_swigt__p_SpecularSimulation, _p_SpecularSimulationTo_p_INode, 0, 0},  {&_swigt__p_IBackground, _p_IBackgroundTo_p_INode, 0, 0},  {&_swigt__p_ConstantBackground, _p_ConstantBackgroundTo_p_INode, 0, 0},  {&_swigt__p_PoissonNoiseBackground, _p_PoissonNoiseBackgroundTo_p_INode, 0, 0},  {&_swigt__p_ISampleNode, _p_ISampleNodeTo_p_INode, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_INode[] = {  {&_swigt__p_INode, 0, 0, 0},  {&_swigt__p_IFormFactor, _p_IFormFactorTo_p_INode, 0, 0},  {&_swigt__p_ISimulation2D, _p_ISimulation2DTo_p_INode, 0, 0},  {&_swigt__p_GISASSimulation, _p_GISASSimulationTo_p_INode, 0, 0},  {&_swigt__p_OffSpecularSimulation, _p_OffSpecularSimulationTo_p_INode, 0, 0},  {&_swigt__p_ISimulation, _p_ISimulationTo_p_INode, 0, 0},  {&_swigt__p_DepthProbeSimulation, _p_DepthProbeSimulationTo_p_INode, 0, 0},  {&_swigt__p_SpecularSimulation, _p_SpecularSimulationTo_p_INode, 0, 0},  {&_swigt__p_IBackground, _p_IBackgroundTo_p_INode, 0, 0},  {&_swigt__p_ConstantBackground, _p_ConstantBackgroundTo_p_INode, 0, 0},  {&_swigt__p_PoissonNoiseBackground, _p_PoissonNoiseBackgroundTo_p_INode, 0, 0},  {&_swigt__p_ISampleNode, _p_ISampleNodeTo_p_INode, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IRangedDistribution[] = {  {&_swigt__p_IRangedDistribution, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IShape2D[] = {  {&_swigt__p_IShape2D, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_ISimulation[] = {  {&_swigt__p_ISimulation2D, _p_ISimulation2DTo_p_ISimulation, 0, 0},  {&_swigt__p_ISimulation, 0, 0, 0},  {&_swigt__p_GISASSimulation, _p_GISASSimulationTo_p_ISimulation, 0, 0},  {&_swigt__p_OffSpecularSimulation, _p_OffSpecularSimulationTo_p_ISimulation, 0, 0},  {&_swigt__p_DepthProbeSimulation, _p_DepthProbeSimulationTo_p_ISimulation, 0, 0},  {&_swigt__p_SpecularSimulation, _p_SpecularSimulationTo_p_ISimulation, 0, 0},{0, 0, 0, 0}};
@@ -48247,7 +48237,6 @@ static swig_cast_info *swig_cast_initial[] = {
   _swigc__p_IBackground,
   _swigc__p_IChiSquaredModule,
   _swigc__p_ICloneable,
-  _swigc__p_IDecoratableBorn,
   _swigc__p_IDetector,
   _swigc__p_IDetector2D,
   _swigc__p_IDistribution1D,
diff --git a/auto/Wrap/libBornAgainSample.py b/auto/Wrap/libBornAgainSample.py
index 9791d0af2ca..7aa831d3250 100644
--- a/auto/Wrap/libBornAgainSample.py
+++ b/auto/Wrap/libBornAgainSample.py
@@ -3216,7 +3216,7 @@ class IFormFactor(libBornAgainBase.ICloneable, libBornAgainParam.INode):
 
     Abstract base class for all form factors.
 
-    The actual form factor is returned by the complex valued function IFormFactor::evaluate, which depends on the incoming and outgoing wave vectors ki and kf. If it only depends on the scattering vector q=ki-kf, then it is a  IDecoratableBorn.
+    The actual form factor is returned by the complex valued function IFormFactor::evaluate, which depends on the incoming and outgoing wave vectors ki and kf. If it only depends on the scattering vector q=ki-kf, then it is a DecoratedBorn.
 
     C++ includes: IFormFactor.h
 
@@ -3233,7 +3233,7 @@ class IFormFactor(libBornAgainBase.ICloneable, libBornAgainParam.INode):
 
         Abstract base class for all form factors.
 
-        The actual form factor is returned by the complex valued function IFormFactor::evaluate, which depends on the incoming and outgoing wave vectors ki and kf. If it only depends on the scattering vector q=ki-kf, then it is a  IDecoratableBorn.
+        The actual form factor is returned by the complex valued function IFormFactor::evaluate, which depends on the incoming and outgoing wave vectors ki and kf. If it only depends on the scattering vector q=ki-kf, then it is a DecoratedBorn.
 
         C++ includes: IFormFactor.h
 
@@ -3310,60 +3310,6 @@ class IFormFactor(libBornAgainBase.ICloneable, libBornAgainParam.INode):
 # Register IFormFactor in _libBornAgainSample:
 _libBornAgainSample.IFormFactor_swigregister(IFormFactor)
 
-class IDecoratableBorn(IFormFactor):
-    r"""
-
-
-    Abstract base class for Born form factors.
-
-    In contrast to the generic  IFormFactor, a Born form factor does not depend on the incoming and outgoing wave vectors ki and kf, except through their difference, the scattering vector q=ki-kf.
-
-    C++ includes: IDecoratableBorn.h
-
-    """
-
-    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
-    __repr__ = _swig_repr
-
-    def __init__(self, *args):
-        r"""
-        __init__(IDecoratableBorn self) -> IDecoratableBorn
-        __init__(IDecoratableBorn self, NodeMeta meta, vdouble1d_t PValues) -> IDecoratableBorn
-        IDecoratableBorn::IDecoratableBorn(const NodeMeta &meta, const std::vector< double > &PValues)
-
-        """
-        if self.__class__ == IDecoratableBorn:
-            _self = None
-        else:
-            _self = self
-        _libBornAgainSample.IDecoratableBorn_swiginit(self, _libBornAgainSample.new_IDecoratableBorn(_self, *args))
-    __swig_destroy__ = _libBornAgainSample.delete_IDecoratableBorn
-
-    def clone(self):
-        r"""
-        clone(IDecoratableBorn self) -> IDecoratableBorn
-        IDecoratableBorn* IDecoratableBorn::clone() const override=0
-
-        """
-        return _libBornAgainSample.IDecoratableBorn_clone(self)
-
-    def formfactor(self, q):
-        r"""
-        formfactor(IDecoratableBorn self, C3 q) -> complex_t
-        virtual complex_t IDecoratableBorn::formfactor(C3 q) const =0
-
-        Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
-
-        """
-        return _libBornAgainSample.IDecoratableBorn_formfactor(self, q)
-    def __disown__(self):
-        self.this.disown()
-        _libBornAgainSample.disown_IDecoratableBorn(self)
-        return weakref.proxy(self)
-
-# Register IDecoratableBorn in _libBornAgainSample:
-_libBornAgainSample.IDecoratableBorn_swigregister(IDecoratableBorn)
-
 class SlicingEffects(object):
     r"""
 
@@ -3526,7 +3472,7 @@ class IBornFF(ISampleNode):
 # Register IBornFF in _libBornAgainSample:
 _libBornAgainSample.IBornFF_swigregister(IBornFF)
 
-class DecoratedFF(IDecoratableBorn):
+class DecoratedFF(IFormFactor):
     r"""
 
 
@@ -3663,9 +3609,7 @@ class DecoratedFF(IDecoratableBorn):
     def formfactor(self, q):
         r"""
         formfactor(DecoratedFF self, C3 q) -> complex_t
-        complex_t DecoratedFF::formfactor(C3 q) const override
-
-        Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
+        complex_t DecoratedFF::formfactor(C3 q) const
 
         """
         return _libBornAgainSample.DecoratedFF_formfactor(self, q)
diff --git a/auto/Wrap/libBornAgainSample_wrap.cpp b/auto/Wrap/libBornAgainSample_wrap.cpp
index 2e6a28b7fb8..ecf0dd17f1b 100644
--- a/auto/Wrap/libBornAgainSample_wrap.cpp
+++ b/auto/Wrap/libBornAgainSample_wrap.cpp
@@ -3157,130 +3157,129 @@ namespace Swig {
 #define SWIGTYPE_p_IBornFF swig_types[57]
 #define SWIGTYPE_p_ICloneable swig_types[58]
 #define SWIGTYPE_p_ICosineRipple swig_types[59]
-#define SWIGTYPE_p_IDecoratableBorn swig_types[60]
-#define SWIGTYPE_p_IFTDecayFunction1D swig_types[61]
-#define SWIGTYPE_p_IFTDecayFunction2D swig_types[62]
-#define SWIGTYPE_p_IFTDistribution1D swig_types[63]
-#define SWIGTYPE_p_IFTDistribution2D swig_types[64]
-#define SWIGTYPE_p_IFormFactor swig_types[65]
-#define SWIGTYPE_p_IFormFactorPolyhedron swig_types[66]
-#define SWIGTYPE_p_IFormFactorPrism swig_types[67]
-#define SWIGTYPE_p_IInterference swig_types[68]
-#define SWIGTYPE_p_INode swig_types[69]
-#define SWIGTYPE_p_IParticle swig_types[70]
-#define SWIGTYPE_p_IPeakShape swig_types[71]
-#define SWIGTYPE_p_IProfileRectangularRipple swig_types[72]
-#define SWIGTYPE_p_IProfileRipple swig_types[73]
-#define SWIGTYPE_p_IRotation swig_types[74]
-#define SWIGTYPE_p_ISampleNode swig_types[75]
-#define SWIGTYPE_p_ISawtoothRipple swig_types[76]
-#define SWIGTYPE_p_ISelectionRule swig_types[77]
-#define SWIGTYPE_p_IdentityRotation swig_types[78]
-#define SWIGTYPE_p_Interference1DLattice swig_types[79]
-#define SWIGTYPE_p_Interference2DLattice swig_types[80]
-#define SWIGTYPE_p_Interference2DParaCrystal swig_types[81]
-#define SWIGTYPE_p_Interference2DSuperLattice swig_types[82]
-#define SWIGTYPE_p_Interference3DLattice swig_types[83]
-#define SWIGTYPE_p_InterferenceFinite2DLattice swig_types[84]
-#define SWIGTYPE_p_InterferenceFinite3DLattice swig_types[85]
-#define SWIGTYPE_p_InterferenceHardDisk swig_types[86]
-#define SWIGTYPE_p_InterferenceNone swig_types[87]
-#define SWIGTYPE_p_InterferenceRadialParaCrystal swig_types[88]
-#define SWIGTYPE_p_InterferenceTwin swig_types[89]
-#define SWIGTYPE_p_IsotropicGaussPeakShape swig_types[90]
-#define SWIGTYPE_p_IsotropicLorentzPeakShape swig_types[91]
-#define SWIGTYPE_p_Lattice2D swig_types[92]
-#define SWIGTYPE_p_Lattice2D__ReciprocalBases swig_types[93]
-#define SWIGTYPE_p_Lattice3D swig_types[94]
-#define SWIGTYPE_p_Layer swig_types[95]
-#define SWIGTYPE_p_LayerInterface swig_types[96]
-#define SWIGTYPE_p_LayerRoughness swig_types[97]
-#define SWIGTYPE_p_LorentzFisherPeakShape swig_types[98]
-#define SWIGTYPE_p_Material swig_types[99]
-#define SWIGTYPE_p_MesoCrystal swig_types[100]
-#define SWIGTYPE_p_MisesFisherGaussPeakShape swig_types[101]
-#define SWIGTYPE_p_MisesGaussPeakShape swig_types[102]
-#define SWIGTYPE_p_MultiLayer swig_types[103]
-#define SWIGTYPE_p_NodeMeta swig_types[104]
-#define SWIGTYPE_p_Particle swig_types[105]
-#define SWIGTYPE_p_ParticleComposition swig_types[106]
-#define SWIGTYPE_p_ParticleCoreShell swig_types[107]
-#define SWIGTYPE_p_ParticleInSlice swig_types[108]
-#define SWIGTYPE_p_ParticleLayout swig_types[109]
-#define SWIGTYPE_p_RotMatrix swig_types[110]
-#define SWIGTYPE_p_RotationEuler swig_types[111]
-#define SWIGTYPE_p_RotationX swig_types[112]
-#define SWIGTYPE_p_RotationY swig_types[113]
-#define SWIGTYPE_p_RotationZ swig_types[114]
-#define SWIGTYPE_p_RoughnessModelWrap swig_types[115]
-#define SWIGTYPE_p_RoughnessModelWrap__RoughnessModel swig_types[116]
-#define SWIGTYPE_p_SimpleSelectionRule swig_types[117]
-#define SWIGTYPE_p_SlicingEffects swig_types[118]
-#define SWIGTYPE_p_SquareLattice2D swig_types[119]
-#define SWIGTYPE_p_Vec3T_double_t swig_types[120]
-#define SWIGTYPE_p_Vec3T_int_t swig_types[121]
-#define SWIGTYPE_p_Vec3T_std__complexT_double_t_t swig_types[122]
-#define SWIGTYPE_p_WavevectorInfo swig_types[123]
-#define SWIGTYPE_p_ZLimits swig_types[124]
-#define SWIGTYPE_p_allocator_type swig_types[125]
-#define SWIGTYPE_p_char swig_types[126]
-#define SWIGTYPE_p_difference_type swig_types[127]
-#define SWIGTYPE_p_first_type swig_types[128]
-#define SWIGTYPE_p_int swig_types[129]
-#define SWIGTYPE_p_key_type swig_types[130]
-#define SWIGTYPE_p_long_long swig_types[131]
-#define SWIGTYPE_p_mapped_type swig_types[132]
-#define SWIGTYPE_p_p_PyObject swig_types[133]
-#define SWIGTYPE_p_second_type swig_types[134]
-#define SWIGTYPE_p_short swig_types[135]
-#define SWIGTYPE_p_signed_char swig_types[136]
-#define SWIGTYPE_p_size_type swig_types[137]
-#define SWIGTYPE_p_std__allocatorT_IFormFactor_p_t swig_types[138]
-#define SWIGTYPE_p_std__allocatorT_INode_const_p_t swig_types[139]
-#define SWIGTYPE_p_std__allocatorT_INode_p_t swig_types[140]
-#define SWIGTYPE_p_std__allocatorT_Vec3T_double_t_t swig_types[141]
-#define SWIGTYPE_p_std__allocatorT_Vec3T_std__complexT_double_t_t_t swig_types[142]
-#define SWIGTYPE_p_std__allocatorT_double_t swig_types[143]
-#define SWIGTYPE_p_std__allocatorT_int_t swig_types[144]
-#define SWIGTYPE_p_std__allocatorT_std__complexT_double_t_t swig_types[145]
-#define SWIGTYPE_p_std__allocatorT_std__pairT_double_double_t_t swig_types[146]
-#define SWIGTYPE_p_std__allocatorT_std__pairT_std__string_const_double_t_t swig_types[147]
-#define SWIGTYPE_p_std__allocatorT_std__string_t swig_types[148]
-#define SWIGTYPE_p_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t swig_types[149]
-#define SWIGTYPE_p_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t swig_types[150]
-#define SWIGTYPE_p_std__allocatorT_unsigned_long_t swig_types[151]
-#define SWIGTYPE_p_std__arrayT_double_3_t swig_types[152]
-#define SWIGTYPE_p_std__arrayT_std__complexT_double_t_3_t swig_types[153]
-#define SWIGTYPE_p_std__complexT_double_t swig_types[154]
-#define SWIGTYPE_p_std__invalid_argument swig_types[155]
-#define SWIGTYPE_p_std__lessT_std__string_t swig_types[156]
-#define SWIGTYPE_p_std__mapT_std__string_double_std__lessT_std__string_t_std__allocatorT_std__pairT_std__string_const_double_t_t_t swig_types[157]
-#define SWIGTYPE_p_std__pairT_double_double_t swig_types[158]
-#define SWIGTYPE_p_std__vectorT_IFormFactor_p_std__allocatorT_IFormFactor_p_t_t swig_types[159]
-#define SWIGTYPE_p_std__vectorT_INode_const_p_std__allocatorT_INode_const_p_t_t swig_types[160]
-#define SWIGTYPE_p_std__vectorT_INode_p_std__allocatorT_INode_p_t_t swig_types[161]
-#define SWIGTYPE_p_std__vectorT_IParticle_const_p_std__allocatorT_IParticle_const_p_t_t swig_types[162]
-#define SWIGTYPE_p_std__vectorT_Material_const_p_std__allocatorT_Material_const_p_t_t swig_types[163]
-#define SWIGTYPE_p_std__vectorT_ParticleLayout_const_p_std__allocatorT_ParticleLayout_const_p_t_t swig_types[164]
-#define SWIGTYPE_p_std__vectorT_Vec3T_double_t_std__allocatorT_Vec3T_double_t_t_t swig_types[165]
-#define SWIGTYPE_p_std__vectorT_Vec3T_std__complexT_double_t_t_std__allocatorT_Vec3T_std__complexT_double_t_t_t_t swig_types[166]
-#define SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t swig_types[167]
-#define SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t swig_types[168]
-#define SWIGTYPE_p_std__vectorT_std__complexT_double_t_std__allocatorT_std__complexT_double_t_t_t swig_types[169]
-#define SWIGTYPE_p_std__vectorT_std__pairT_double_double_t_std__allocatorT_std__pairT_double_double_t_t_t swig_types[170]
-#define SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t swig_types[171]
-#define SWIGTYPE_p_std__vectorT_std__unique_ptrT_IParticle_t_std__allocatorT_std__unique_ptrT_IParticle_t_t_t swig_types[172]
-#define SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t swig_types[173]
-#define SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t swig_types[174]
-#define SWIGTYPE_p_std__vectorT_unsigned_long_std__allocatorT_unsigned_long_t_t swig_types[175]
-#define SWIGTYPE_p_swig__SwigPyIterator swig_types[176]
-#define SWIGTYPE_p_unsigned_char swig_types[177]
-#define SWIGTYPE_p_unsigned_int swig_types[178]
-#define SWIGTYPE_p_unsigned_long_long swig_types[179]
-#define SWIGTYPE_p_unsigned_short swig_types[180]
-#define SWIGTYPE_p_value_type swig_types[181]
-static swig_type_info *swig_types[183];
-static swig_module_info swig_module = {swig_types, 182, 0, 0, 0, 0};
+#define SWIGTYPE_p_IFTDecayFunction1D swig_types[60]
+#define SWIGTYPE_p_IFTDecayFunction2D swig_types[61]
+#define SWIGTYPE_p_IFTDistribution1D swig_types[62]
+#define SWIGTYPE_p_IFTDistribution2D swig_types[63]
+#define SWIGTYPE_p_IFormFactor swig_types[64]
+#define SWIGTYPE_p_IFormFactorPolyhedron swig_types[65]
+#define SWIGTYPE_p_IFormFactorPrism swig_types[66]
+#define SWIGTYPE_p_IInterference swig_types[67]
+#define SWIGTYPE_p_INode swig_types[68]
+#define SWIGTYPE_p_IParticle swig_types[69]
+#define SWIGTYPE_p_IPeakShape swig_types[70]
+#define SWIGTYPE_p_IProfileRectangularRipple swig_types[71]
+#define SWIGTYPE_p_IProfileRipple swig_types[72]
+#define SWIGTYPE_p_IRotation swig_types[73]
+#define SWIGTYPE_p_ISampleNode swig_types[74]
+#define SWIGTYPE_p_ISawtoothRipple swig_types[75]
+#define SWIGTYPE_p_ISelectionRule swig_types[76]
+#define SWIGTYPE_p_IdentityRotation swig_types[77]
+#define SWIGTYPE_p_Interference1DLattice swig_types[78]
+#define SWIGTYPE_p_Interference2DLattice swig_types[79]
+#define SWIGTYPE_p_Interference2DParaCrystal swig_types[80]
+#define SWIGTYPE_p_Interference2DSuperLattice swig_types[81]
+#define SWIGTYPE_p_Interference3DLattice swig_types[82]
+#define SWIGTYPE_p_InterferenceFinite2DLattice swig_types[83]
+#define SWIGTYPE_p_InterferenceFinite3DLattice swig_types[84]
+#define SWIGTYPE_p_InterferenceHardDisk swig_types[85]
+#define SWIGTYPE_p_InterferenceNone swig_types[86]
+#define SWIGTYPE_p_InterferenceRadialParaCrystal swig_types[87]
+#define SWIGTYPE_p_InterferenceTwin swig_types[88]
+#define SWIGTYPE_p_IsotropicGaussPeakShape swig_types[89]
+#define SWIGTYPE_p_IsotropicLorentzPeakShape swig_types[90]
+#define SWIGTYPE_p_Lattice2D swig_types[91]
+#define SWIGTYPE_p_Lattice2D__ReciprocalBases swig_types[92]
+#define SWIGTYPE_p_Lattice3D swig_types[93]
+#define SWIGTYPE_p_Layer swig_types[94]
+#define SWIGTYPE_p_LayerInterface swig_types[95]
+#define SWIGTYPE_p_LayerRoughness swig_types[96]
+#define SWIGTYPE_p_LorentzFisherPeakShape swig_types[97]
+#define SWIGTYPE_p_Material swig_types[98]
+#define SWIGTYPE_p_MesoCrystal swig_types[99]
+#define SWIGTYPE_p_MisesFisherGaussPeakShape swig_types[100]
+#define SWIGTYPE_p_MisesGaussPeakShape swig_types[101]
+#define SWIGTYPE_p_MultiLayer swig_types[102]
+#define SWIGTYPE_p_NodeMeta swig_types[103]
+#define SWIGTYPE_p_Particle swig_types[104]
+#define SWIGTYPE_p_ParticleComposition swig_types[105]
+#define SWIGTYPE_p_ParticleCoreShell swig_types[106]
+#define SWIGTYPE_p_ParticleInSlice swig_types[107]
+#define SWIGTYPE_p_ParticleLayout swig_types[108]
+#define SWIGTYPE_p_RotMatrix swig_types[109]
+#define SWIGTYPE_p_RotationEuler swig_types[110]
+#define SWIGTYPE_p_RotationX swig_types[111]
+#define SWIGTYPE_p_RotationY swig_types[112]
+#define SWIGTYPE_p_RotationZ swig_types[113]
+#define SWIGTYPE_p_RoughnessModelWrap swig_types[114]
+#define SWIGTYPE_p_RoughnessModelWrap__RoughnessModel swig_types[115]
+#define SWIGTYPE_p_SimpleSelectionRule swig_types[116]
+#define SWIGTYPE_p_SlicingEffects swig_types[117]
+#define SWIGTYPE_p_SquareLattice2D swig_types[118]
+#define SWIGTYPE_p_Vec3T_double_t swig_types[119]
+#define SWIGTYPE_p_Vec3T_int_t swig_types[120]
+#define SWIGTYPE_p_Vec3T_std__complexT_double_t_t swig_types[121]
+#define SWIGTYPE_p_WavevectorInfo swig_types[122]
+#define SWIGTYPE_p_ZLimits swig_types[123]
+#define SWIGTYPE_p_allocator_type swig_types[124]
+#define SWIGTYPE_p_char swig_types[125]
+#define SWIGTYPE_p_difference_type swig_types[126]
+#define SWIGTYPE_p_first_type swig_types[127]
+#define SWIGTYPE_p_int swig_types[128]
+#define SWIGTYPE_p_key_type swig_types[129]
+#define SWIGTYPE_p_long_long swig_types[130]
+#define SWIGTYPE_p_mapped_type swig_types[131]
+#define SWIGTYPE_p_p_PyObject swig_types[132]
+#define SWIGTYPE_p_second_type swig_types[133]
+#define SWIGTYPE_p_short swig_types[134]
+#define SWIGTYPE_p_signed_char swig_types[135]
+#define SWIGTYPE_p_size_type swig_types[136]
+#define SWIGTYPE_p_std__allocatorT_IFormFactor_p_t swig_types[137]
+#define SWIGTYPE_p_std__allocatorT_INode_const_p_t swig_types[138]
+#define SWIGTYPE_p_std__allocatorT_INode_p_t swig_types[139]
+#define SWIGTYPE_p_std__allocatorT_Vec3T_double_t_t swig_types[140]
+#define SWIGTYPE_p_std__allocatorT_Vec3T_std__complexT_double_t_t_t swig_types[141]
+#define SWIGTYPE_p_std__allocatorT_double_t swig_types[142]
+#define SWIGTYPE_p_std__allocatorT_int_t swig_types[143]
+#define SWIGTYPE_p_std__allocatorT_std__complexT_double_t_t swig_types[144]
+#define SWIGTYPE_p_std__allocatorT_std__pairT_double_double_t_t swig_types[145]
+#define SWIGTYPE_p_std__allocatorT_std__pairT_std__string_const_double_t_t swig_types[146]
+#define SWIGTYPE_p_std__allocatorT_std__string_t swig_types[147]
+#define SWIGTYPE_p_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t swig_types[148]
+#define SWIGTYPE_p_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t swig_types[149]
+#define SWIGTYPE_p_std__allocatorT_unsigned_long_t swig_types[150]
+#define SWIGTYPE_p_std__arrayT_double_3_t swig_types[151]
+#define SWIGTYPE_p_std__arrayT_std__complexT_double_t_3_t swig_types[152]
+#define SWIGTYPE_p_std__complexT_double_t swig_types[153]
+#define SWIGTYPE_p_std__invalid_argument swig_types[154]
+#define SWIGTYPE_p_std__lessT_std__string_t swig_types[155]
+#define SWIGTYPE_p_std__mapT_std__string_double_std__lessT_std__string_t_std__allocatorT_std__pairT_std__string_const_double_t_t_t swig_types[156]
+#define SWIGTYPE_p_std__pairT_double_double_t swig_types[157]
+#define SWIGTYPE_p_std__vectorT_IFormFactor_p_std__allocatorT_IFormFactor_p_t_t swig_types[158]
+#define SWIGTYPE_p_std__vectorT_INode_const_p_std__allocatorT_INode_const_p_t_t swig_types[159]
+#define SWIGTYPE_p_std__vectorT_INode_p_std__allocatorT_INode_p_t_t swig_types[160]
+#define SWIGTYPE_p_std__vectorT_IParticle_const_p_std__allocatorT_IParticle_const_p_t_t swig_types[161]
+#define SWIGTYPE_p_std__vectorT_Material_const_p_std__allocatorT_Material_const_p_t_t swig_types[162]
+#define SWIGTYPE_p_std__vectorT_ParticleLayout_const_p_std__allocatorT_ParticleLayout_const_p_t_t swig_types[163]
+#define SWIGTYPE_p_std__vectorT_Vec3T_double_t_std__allocatorT_Vec3T_double_t_t_t swig_types[164]
+#define SWIGTYPE_p_std__vectorT_Vec3T_std__complexT_double_t_t_std__allocatorT_Vec3T_std__complexT_double_t_t_t_t swig_types[165]
+#define SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t swig_types[166]
+#define SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t swig_types[167]
+#define SWIGTYPE_p_std__vectorT_std__complexT_double_t_std__allocatorT_std__complexT_double_t_t_t swig_types[168]
+#define SWIGTYPE_p_std__vectorT_std__pairT_double_double_t_std__allocatorT_std__pairT_double_double_t_t_t swig_types[169]
+#define SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t swig_types[170]
+#define SWIGTYPE_p_std__vectorT_std__unique_ptrT_IParticle_t_std__allocatorT_std__unique_ptrT_IParticle_t_t_t swig_types[171]
+#define SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t swig_types[172]
+#define SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t swig_types[173]
+#define SWIGTYPE_p_std__vectorT_unsigned_long_std__allocatorT_unsigned_long_t_t swig_types[174]
+#define SWIGTYPE_p_swig__SwigPyIterator swig_types[175]
+#define SWIGTYPE_p_unsigned_char swig_types[176]
+#define SWIGTYPE_p_unsigned_int swig_types[177]
+#define SWIGTYPE_p_unsigned_long_long swig_types[178]
+#define SWIGTYPE_p_unsigned_short swig_types[179]
+#define SWIGTYPE_p_value_type swig_types[180]
+static swig_type_info *swig_types[182];
+static swig_module_info swig_module = {swig_types, 181, 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)
 
@@ -8148,331 +8147,6 @@ double SwigDirector_IFormFactor::topZ(IRotation const *rotation) const {
 }
 
 
-SwigDirector_IDecoratableBorn::SwigDirector_IDecoratableBorn(PyObject *self): IDecoratableBorn(), Swig::Director(self) {
-  SWIG_DIRECTOR_RGTR((IDecoratableBorn *)this, this); 
-}
-
-
-
-
-SwigDirector_IDecoratableBorn::SwigDirector_IDecoratableBorn(PyObject *self, NodeMeta const &meta, std::vector< double, std::allocator< double > > const &PValues): IDecoratableBorn(meta, PValues), Swig::Director(self) {
-  SWIG_DIRECTOR_RGTR((IDecoratableBorn *)this, this); 
-}
-
-
-
-
-SwigDirector_IDecoratableBorn::~SwigDirector_IDecoratableBorn() {
-}
-
-IDecoratableBorn *SwigDirector_IDecoratableBorn::clone() const {
-  IDecoratableBorn *c_result = 0 ;
-  void *swig_argp ;
-  int swig_res ;
-  swig_owntype own ;
-  
-  if (!swig_get_self()) {
-    Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IDecoratableBorn.__init__.");
-  }
-#if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
-  const size_t swig_method_index = 0;
-  const char *const swig_method_name = "clone";
-  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
-  swig::SwigVar_PyObject args = PyTuple_New(0);
-  swig::SwigVar_PyObject result = PyObject_Call(method, (PyObject *) args, NULL);
-#else
-  swig::SwigVar_PyObject swig_method_name = SWIG_Python_str_FromChar("clone");
-  swig::SwigVar_PyObject result = PyObject_CallMethodObjArgs(swig_get_self(), (PyObject *) swig_method_name, NULL);
-#endif
-  if (!result) {
-    PyObject *error = PyErr_Occurred();
-    if (error) {
-      Swig::DirectorMethodException::raise("Error detected when calling 'IDecoratableBorn.clone'");
-    }
-  }
-  swig_res = SWIG_ConvertPtrAndOwn(result, &swig_argp, SWIGTYPE_p_IDecoratableBorn,  0  | SWIG_POINTER_DISOWN, &own);
-  if (!SWIG_IsOK(swig_res)) {
-    Swig::DirectorTypeMismatchException::raise(SWIG_ErrorType(SWIG_ArgError(swig_res)), "in output value of type '""IDecoratableBorn *""'");
-  }
-  c_result = reinterpret_cast< IDecoratableBorn * >(swig_argp);
-  swig_acquire_ownership_obj(SWIG_as_voidptr(c_result), own /* & TODO: SWIG_POINTER_OWN */);
-  return (IDecoratableBorn *) c_result;
-}
-
-
-void SwigDirector_IDecoratableBorn::transferToCPP() {
-  if (!swig_get_self()) {
-    Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IDecoratableBorn.__init__.");
-  }
-#if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
-  const size_t swig_method_index = 1;
-  const char *const swig_method_name = "transferToCPP";
-  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
-  swig::SwigVar_PyObject args = PyTuple_New(0);
-  swig::SwigVar_PyObject result = PyObject_Call(method, (PyObject *) args, NULL);
-#else
-  swig::SwigVar_PyObject swig_method_name = SWIG_Python_str_FromChar("transferToCPP");
-  swig::SwigVar_PyObject result = PyObject_CallMethodObjArgs(swig_get_self(), (PyObject *) swig_method_name, NULL);
-#endif
-  if (!result) {
-    PyObject *error = PyErr_Occurred();
-    if (error) {
-      Swig::DirectorMethodException::raise("Error detected when calling 'IDecoratableBorn.transferToCPP'");
-    }
-  }
-}
-
-
-std::string SwigDirector_IDecoratableBorn::className() const {
-  std::string c_result;
-  if (!swig_get_self()) {
-    Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IDecoratableBorn.__init__.");
-  }
-#if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
-  const size_t swig_method_index = 2;
-  const char *const swig_method_name = "className";
-  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
-  swig::SwigVar_PyObject args = PyTuple_New(0);
-  swig::SwigVar_PyObject result = PyObject_Call(method, (PyObject *) args, NULL);
-#else
-  swig::SwigVar_PyObject swig_method_name = SWIG_Python_str_FromChar("className");
-  swig::SwigVar_PyObject result = PyObject_CallMethodObjArgs(swig_get_self(), (PyObject *) swig_method_name, NULL);
-#endif
-  if (!result) {
-    PyObject *error = PyErr_Occurred();
-    if (error) {
-      Swig::DirectorMethodException::raise("Error detected when calling 'IDecoratableBorn.className'");
-    }
-  }
-  std::string *swig_optr = 0;
-  int swig_ores = SWIG_AsPtr_std_string(result, &swig_optr);
-  if (!SWIG_IsOK(swig_ores) || !swig_optr) {
-    Swig::DirectorTypeMismatchException::raise(SWIG_ErrorType(SWIG_ArgError((swig_optr ? swig_ores : SWIG_TypeError))), "in output value of type '""std::string""'");
-  }
-  c_result = *swig_optr;
-  if (SWIG_IsNewObj(swig_ores)) delete swig_optr;
-  return (std::string) c_result;
-}
-
-
-std::vector< INode const *, std::allocator< INode const * > > SwigDirector_IDecoratableBorn::nodeChildren() const {
-  std::vector< INode const *,std::allocator< INode const * > > c_result;
-  if (!swig_get_self()) {
-    Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IDecoratableBorn.__init__.");
-  }
-#if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
-  const size_t swig_method_index = 3;
-  const char *const swig_method_name = "nodeChildren";
-  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
-  swig::SwigVar_PyObject args = PyTuple_New(0);
-  swig::SwigVar_PyObject result = PyObject_Call(method, (PyObject *) args, NULL);
-#else
-  swig::SwigVar_PyObject swig_method_name = SWIG_Python_str_FromChar("nodeChildren");
-  swig::SwigVar_PyObject result = PyObject_CallMethodObjArgs(swig_get_self(), (PyObject *) swig_method_name, NULL);
-#endif
-  if (!result) {
-    PyObject *error = PyErr_Occurred();
-    if (error) {
-      Swig::DirectorMethodException::raise("Error detected when calling 'IDecoratableBorn.nodeChildren'");
-    }
-  }
-  std::vector< INode const*,std::allocator< INode const * > > *swig_optr = 0;
-  int swig_ores = swig::asptr(result, &swig_optr);
-  if (!SWIG_IsOK(swig_ores) || !swig_optr) {
-    Swig::DirectorTypeMismatchException::raise(SWIG_ErrorType(SWIG_ArgError((swig_optr ? swig_ores : SWIG_TypeError))), "in output value of type '""std::vector< INode const *,std::allocator< INode const * > >""'");
-  }
-  c_result = *swig_optr;
-  if (SWIG_IsNewObj(swig_ores)) delete swig_optr;
-  return (std::vector< INode const *,std::allocator< INode const * > >) c_result;
-}
-
-
-void SwigDirector_IDecoratableBorn::setAmbientMaterial(Material const &arg0) {
-  swig::SwigVar_PyObject obj0;
-  obj0 = SWIG_NewPointerObj(SWIG_as_voidptr(&arg0), SWIGTYPE_p_Material,  0 );
-  if (!swig_get_self()) {
-    Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IDecoratableBorn.__init__.");
-  }
-#if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
-  const size_t swig_method_index = 4;
-  const char *const swig_method_name = "setAmbientMaterial";
-  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
-  swig::SwigVar_PyObject result = PyObject_CallFunctionObjArgs(method ,(PyObject *)obj0, NULL);
-#else
-  swig::SwigVar_PyObject swig_method_name = SWIG_Python_str_FromChar("setAmbientMaterial");
-  swig::SwigVar_PyObject result = PyObject_CallMethodObjArgs(swig_get_self(), (PyObject *) swig_method_name ,(PyObject *)obj0, NULL);
-#endif
-  if (!result) {
-    PyObject *error = PyErr_Occurred();
-    if (error) {
-      Swig::DirectorMethodException::raise("Error detected when calling 'IDecoratableBorn.setAmbientMaterial'");
-    }
-  }
-}
-
-
-complex_t SwigDirector_IDecoratableBorn::theFF(WavevectorInfo const &wavevectors) const {
-  complex_t c_result;
-  swig::SwigVar_PyObject obj0;
-  obj0 = SWIG_NewPointerObj(SWIG_as_voidptr(&wavevectors), SWIGTYPE_p_WavevectorInfo,  0 );
-  if (!swig_get_self()) {
-    Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IDecoratableBorn.__init__.");
-  }
-#if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
-  const size_t swig_method_index = 5;
-  const char *const swig_method_name = "theFF";
-  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
-  swig::SwigVar_PyObject result = PyObject_CallFunctionObjArgs(method ,(PyObject *)obj0, NULL);
-#else
-  swig::SwigVar_PyObject swig_method_name = SWIG_Python_str_FromChar("theFF");
-  swig::SwigVar_PyObject result = PyObject_CallMethodObjArgs(swig_get_self(), (PyObject *) swig_method_name ,(PyObject *)obj0, NULL);
-#endif
-  if (!result) {
-    PyObject *error = PyErr_Occurred();
-    if (error) {
-      Swig::DirectorMethodException::raise("Error detected when calling 'IDecoratableBorn.theFF'");
-    }
-  }
-  std::complex<double> swig_val;
-  int swig_res = SWIG_AsVal_std_complex_Sl_double_Sg_(result, &swig_val);
-  if (!SWIG_IsOK(swig_res)) {
-    Swig::DirectorTypeMismatchException::raise(SWIG_ErrorType(SWIG_ArgError(swig_res)), "in output value of type '""complex_t""'");
-  }
-  c_result = static_cast< complex_t >(swig_val);
-  return (complex_t) c_result;
-}
-
-
-double SwigDirector_IDecoratableBorn::radialExtension() const {
-  double c_result = SwigValueInit< double >() ;
-  
-  if (!swig_get_self()) {
-    Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IDecoratableBorn.__init__.");
-  }
-#if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
-  const size_t swig_method_index = 6;
-  const char *const swig_method_name = "radialExtension";
-  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
-  swig::SwigVar_PyObject args = PyTuple_New(0);
-  swig::SwigVar_PyObject result = PyObject_Call(method, (PyObject *) args, NULL);
-#else
-  swig::SwigVar_PyObject swig_method_name = SWIG_Python_str_FromChar("radialExtension");
-  swig::SwigVar_PyObject result = PyObject_CallMethodObjArgs(swig_get_self(), (PyObject *) swig_method_name, NULL);
-#endif
-  if (!result) {
-    PyObject *error = PyErr_Occurred();
-    if (error) {
-      Swig::DirectorMethodException::raise("Error detected when calling 'IDecoratableBorn.radialExtension'");
-    }
-  }
-  double swig_val;
-  int swig_res = SWIG_AsVal_double(result, &swig_val);
-  if (!SWIG_IsOK(swig_res)) {
-    Swig::DirectorTypeMismatchException::raise(SWIG_ErrorType(SWIG_ArgError(swig_res)), "in output value of type '""double""'");
-  }
-  c_result = static_cast< double >(swig_val);
-  return (double) c_result;
-}
-
-
-double SwigDirector_IDecoratableBorn::bottomZ(IRotation const *rotation) const {
-  double c_result = SwigValueInit< double >() ;
-  
-  swig::SwigVar_PyObject obj0;
-  obj0 = SWIG_NewPointerObj(SWIG_as_voidptr(rotation), SWIGTYPE_p_IRotation,  0 );
-  if (!swig_get_self()) {
-    Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IDecoratableBorn.__init__.");
-  }
-#if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
-  const size_t swig_method_index = 7;
-  const char *const swig_method_name = "bottomZ";
-  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
-  swig::SwigVar_PyObject result = PyObject_CallFunctionObjArgs(method ,(PyObject *)obj0, NULL);
-#else
-  swig::SwigVar_PyObject swig_method_name = SWIG_Python_str_FromChar("bottomZ");
-  swig::SwigVar_PyObject result = PyObject_CallMethodObjArgs(swig_get_self(), (PyObject *) swig_method_name ,(PyObject *)obj0, NULL);
-#endif
-  if (!result) {
-    PyObject *error = PyErr_Occurred();
-    if (error) {
-      Swig::DirectorMethodException::raise("Error detected when calling 'IDecoratableBorn.bottomZ'");
-    }
-  }
-  double swig_val;
-  int swig_res = SWIG_AsVal_double(result, &swig_val);
-  if (!SWIG_IsOK(swig_res)) {
-    Swig::DirectorTypeMismatchException::raise(SWIG_ErrorType(SWIG_ArgError(swig_res)), "in output value of type '""double""'");
-  }
-  c_result = static_cast< double >(swig_val);
-  return (double) c_result;
-}
-
-
-double SwigDirector_IDecoratableBorn::topZ(IRotation const *rotation) const {
-  double c_result = SwigValueInit< double >() ;
-  
-  swig::SwigVar_PyObject obj0;
-  obj0 = SWIG_NewPointerObj(SWIG_as_voidptr(rotation), SWIGTYPE_p_IRotation,  0 );
-  if (!swig_get_self()) {
-    Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IDecoratableBorn.__init__.");
-  }
-#if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
-  const size_t swig_method_index = 8;
-  const char *const swig_method_name = "topZ";
-  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
-  swig::SwigVar_PyObject result = PyObject_CallFunctionObjArgs(method ,(PyObject *)obj0, NULL);
-#else
-  swig::SwigVar_PyObject swig_method_name = SWIG_Python_str_FromChar("topZ");
-  swig::SwigVar_PyObject result = PyObject_CallMethodObjArgs(swig_get_self(), (PyObject *) swig_method_name ,(PyObject *)obj0, NULL);
-#endif
-  if (!result) {
-    PyObject *error = PyErr_Occurred();
-    if (error) {
-      Swig::DirectorMethodException::raise("Error detected when calling 'IDecoratableBorn.topZ'");
-    }
-  }
-  double swig_val;
-  int swig_res = SWIG_AsVal_double(result, &swig_val);
-  if (!SWIG_IsOK(swig_res)) {
-    Swig::DirectorTypeMismatchException::raise(SWIG_ErrorType(SWIG_ArgError(swig_res)), "in output value of type '""double""'");
-  }
-  c_result = static_cast< double >(swig_val);
-  return (double) c_result;
-}
-
-
-complex_t SwigDirector_IDecoratableBorn::formfactor(C3 q) const {
-  complex_t c_result;
-  swig::SwigVar_PyObject obj0;
-  obj0 = SWIG_NewPointerObj(SWIG_as_voidptr(new C3((const C3 &)q)), SWIGTYPE_p_Vec3T_std__complexT_double_t_t, SWIG_POINTER_OWN |  0 );
-  if (!swig_get_self()) {
-    Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IDecoratableBorn.__init__.");
-  }
-#if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
-  const size_t swig_method_index = 9;
-  const char *const swig_method_name = "formfactor";
-  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
-  swig::SwigVar_PyObject result = PyObject_CallFunctionObjArgs(method ,(PyObject *)obj0, NULL);
-#else
-  swig::SwigVar_PyObject swig_method_name = SWIG_Python_str_FromChar("formfactor");
-  swig::SwigVar_PyObject result = PyObject_CallMethodObjArgs(swig_get_self(), (PyObject *) swig_method_name ,(PyObject *)obj0, NULL);
-#endif
-  if (!result) {
-    PyObject *error = PyErr_Occurred();
-    if (error) {
-      Swig::DirectorMethodException::raise("Error detected when calling 'IDecoratableBorn.formfactor'");
-    }
-  }
-  std::complex<double> swig_val;
-  int swig_res = SWIG_AsVal_std_complex_Sl_double_Sg_(result, &swig_val);
-  if (!SWIG_IsOK(swig_res)) {
-    Swig::DirectorTypeMismatchException::raise(SWIG_ErrorType(SWIG_ArgError(swig_res)), "in output value of type '""complex_t""'");
-  }
-  c_result = static_cast< complex_t >(swig_val);
-  return (complex_t) c_result;
-}
-
-
 SwigDirector_IBornFF::SwigDirector_IBornFF(PyObject *self): IBornFF(), Swig::Director(self) {
   SWIG_DIRECTOR_RGTR((IBornFF *)this, this); 
 }
@@ -40290,269 +39964,6 @@ SWIGINTERN PyObject *IFormFactor_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObje
   return SWIG_Python_InitShadowInstance(args);
 }
 
-SWIGINTERN PyObject *_wrap_new_IDecoratableBorn__SWIG_0(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **swig_obj) {
-  PyObject *resultobj = 0;
-  PyObject *arg1 = (PyObject *) 0 ;
-  IDecoratableBorn *result = 0 ;
-  
-  if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
-  arg1 = swig_obj[0];
-  if ( arg1 != Py_None ) {
-    /* subclassed */
-    result = (IDecoratableBorn *)new SwigDirector_IDecoratableBorn(arg1); 
-  } else {
-    SWIG_SetErrorMsg(PyExc_RuntimeError,"accessing abstract class or protected constructor"); 
-    SWIG_fail;
-  }
-  
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IDecoratableBorn, SWIG_POINTER_NEW |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_new_IDecoratableBorn__SWIG_1(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **swig_obj) {
-  PyObject *resultobj = 0;
-  PyObject *arg1 = (PyObject *) 0 ;
-  NodeMeta *arg2 = 0 ;
-  std::vector< double,std::allocator< double > > *arg3 = 0 ;
-  void *argp2 = 0 ;
-  int res2 = 0 ;
-  int res3 = SWIG_OLDOBJ ;
-  IDecoratableBorn *result = 0 ;
-  
-  if ((nobjs < 3) || (nobjs > 3)) SWIG_fail;
-  arg1 = swig_obj[0];
-  res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_NodeMeta,  0  | 0);
-  if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "new_IDecoratableBorn" "', argument " "2"" of type '" "NodeMeta const &""'"); 
-  }
-  if (!argp2) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_IDecoratableBorn" "', argument " "2"" of type '" "NodeMeta const &""'"); 
-  }
-  arg2 = reinterpret_cast< NodeMeta * >(argp2);
-  {
-    std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
-    res3 = swig::asptr(swig_obj[2], &ptr);
-    if (!SWIG_IsOK(res3)) {
-      SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "new_IDecoratableBorn" "', argument " "3"" of type '" "std::vector< double,std::allocator< double > > const &""'"); 
-    }
-    if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_IDecoratableBorn" "', argument " "3"" of type '" "std::vector< double,std::allocator< double > > const &""'"); 
-    }
-    arg3 = ptr;
-  }
-  if ( arg1 != Py_None ) {
-    /* subclassed */
-    result = (IDecoratableBorn *)new SwigDirector_IDecoratableBorn(arg1,(NodeMeta const &)*arg2,(std::vector< double,std::allocator< double > > const &)*arg3); 
-  } else {
-    SWIG_SetErrorMsg(PyExc_RuntimeError,"accessing abstract class or protected constructor"); 
-    SWIG_fail;
-  }
-  
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IDecoratableBorn, SWIG_POINTER_NEW |  0 );
-  if (SWIG_IsNewObj(res3)) delete arg3;
-  return resultobj;
-fail:
-  if (SWIG_IsNewObj(res3)) delete arg3;
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_new_IDecoratableBorn(PyObject *self, PyObject *args) {
-  Py_ssize_t argc;
-  PyObject *argv[4] = {
-    0
-  };
-  
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_IDecoratableBorn", 0, 3, argv))) SWIG_fail;
-  --argc;
-  if (argc == 1) {
-    int _v;
-    _v = (argv[0] != 0);
-    if (_v) {
-      return _wrap_new_IDecoratableBorn__SWIG_0(self, argc, argv);
-    }
-  }
-  if (argc == 3) {
-    int _v;
-    _v = (argv[0] != 0);
-    if (_v) {
-      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_NodeMeta, SWIG_POINTER_NO_NULL | 0);
-      _v = SWIG_CheckState(res);
-      if (_v) {
-        int res = swig::asptr(argv[2], (std::vector< double,std::allocator< double > >**)(0));
-        _v = SWIG_CheckState(res);
-        if (_v) {
-          return _wrap_new_IDecoratableBorn__SWIG_1(self, argc, argv);
-        }
-      }
-    }
-  }
-  
-fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_IDecoratableBorn'.\n"
-    "  Possible C/C++ prototypes are:\n"
-    "    IDecoratableBorn::IDecoratableBorn()\n"
-    "    IDecoratableBorn::IDecoratableBorn(PyObject *,NodeMeta const &,std::vector< double,std::allocator< double > > const &)\n");
-  return 0;
-}
-
-
-SWIGINTERN PyObject *_wrap_delete_IDecoratableBorn(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  IDecoratableBorn *arg1 = (IDecoratableBorn *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IDecoratableBorn, SWIG_POINTER_DISOWN |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_IDecoratableBorn" "', argument " "1"" of type '" "IDecoratableBorn *""'"); 
-  }
-  arg1 = reinterpret_cast< IDecoratableBorn * >(argp1);
-  delete arg1;
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_IDecoratableBorn_clone(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  IDecoratableBorn *arg1 = (IDecoratableBorn *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  Swig::Director *director = 0;
-  bool upcall = false;
-  IDecoratableBorn *result = 0 ;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IDecoratableBorn, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IDecoratableBorn_clone" "', argument " "1"" of type '" "IDecoratableBorn const *""'"); 
-  }
-  arg1 = reinterpret_cast< IDecoratableBorn * >(argp1);
-  director = SWIG_DIRECTOR_CAST(arg1);
-  upcall = (director && (director->swig_get_self()==swig_obj[0]));
-  try {
-    if (upcall) {
-      Swig::DirectorPureVirtualException::raise("IDecoratableBorn::clone");
-    } else {
-      result = (IDecoratableBorn *)((IDecoratableBorn const *)arg1)->clone();
-    }
-  } catch (Swig::DirectorException&) {
-    SWIG_fail;
-  }
-  director = SWIG_DIRECTOR_CAST(result);
-  if (director) {
-    resultobj = director->swig_get_self();
-    Py_INCREF(resultobj);
-  } else {
-    resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IDecoratableBorn, 0 |  0 );
-  }
-  if (director) {
-    SWIG_AcquirePtr(resultobj, director->swig_release_ownership(SWIG_as_voidptr(result)));
-  }
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_IDecoratableBorn_formfactor(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  IDecoratableBorn *arg1 = (IDecoratableBorn *) 0 ;
-  C3 arg2 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  void *argp2 ;
-  int res2 = 0 ;
-  PyObject *swig_obj[2] ;
-  Swig::Director *director = 0;
-  bool upcall = false;
-  complex_t result;
-  
-  if (!SWIG_Python_UnpackTuple(args, "IDecoratableBorn_formfactor", 2, 2, swig_obj)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IDecoratableBorn, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IDecoratableBorn_formfactor" "', argument " "1"" of type '" "IDecoratableBorn const *""'"); 
-  }
-  arg1 = reinterpret_cast< IDecoratableBorn * >(argp1);
-  {
-    res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_Vec3T_std__complexT_double_t_t,  0  | 0);
-    if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IDecoratableBorn_formfactor" "', argument " "2"" of type '" "C3""'"); 
-    }  
-    if (!argp2) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "IDecoratableBorn_formfactor" "', argument " "2"" of type '" "C3""'");
-    } else {
-      C3 * temp = reinterpret_cast< C3 * >(argp2);
-      arg2 = *temp;
-      if (SWIG_IsNewObj(res2)) delete temp;
-    }
-  }
-  director = SWIG_DIRECTOR_CAST(arg1);
-  upcall = (director && (director->swig_get_self()==swig_obj[0]));
-  try {
-    if (upcall) {
-      Swig::DirectorPureVirtualException::raise("IDecoratableBorn::formfactor");
-    } else {
-      result = ((IDecoratableBorn const *)arg1)->formfactor(arg2);
-    }
-  } catch (Swig::DirectorException&) {
-    SWIG_fail;
-  }
-  resultobj = SWIG_From_std_complex_Sl_double_Sg_(static_cast< std::complex<double> >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_disown_IDecoratableBorn(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  IDecoratableBorn *arg1 = (IDecoratableBorn *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IDecoratableBorn, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "disown_IDecoratableBorn" "', argument " "1"" of type '" "IDecoratableBorn *""'"); 
-  }
-  arg1 = reinterpret_cast< IDecoratableBorn * >(argp1);
-  {
-    Swig::Director *director = SWIG_DIRECTOR_CAST(arg1);
-    if (director) director->swig_disown();
-  }
-  
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *IDecoratableBorn_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *obj;
-  if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_IDecoratableBorn, SWIG_NewClientData(obj));
-  return SWIG_Py_Void();
-}
-
-SWIGINTERN PyObject *IDecoratableBorn_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  return SWIG_Python_InitShadowInstance(args);
-}
-
 SWIGINTERN PyObject *_wrap_SlicingEffects_position_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   SlicingEffects *arg1 = (SlicingEffects *) 0 ;
@@ -69619,7 +69030,7 @@ static PyMethodDef SwigMethods[] = {
 		"\n"
 		"Abstract base class for all form factors.\n"
 		"\n"
-		"The actual form factor is returned by the complex valued function IFormFactor::evaluate, which depends on the incoming and outgoing wave vectors ki and kf. If it only depends on the scattering vector q=ki-kf, then it is a  IDecoratableBorn.\n"
+		"The actual form factor is returned by the complex valued function IFormFactor::evaluate, which depends on the incoming and outgoing wave vectors ki and kf. If it only depends on the scattering vector q=ki-kf, then it is a DecoratedBorn.\n"
 		"\n"
 		"C++ includes: IFormFactor.h\n"
 		"\n"
@@ -69672,32 +69083,6 @@ static PyMethodDef SwigMethods[] = {
 	 { "disown_IFormFactor", _wrap_disown_IFormFactor, METH_O, NULL},
 	 { "IFormFactor_swigregister", IFormFactor_swigregister, METH_O, NULL},
 	 { "IFormFactor_swiginit", IFormFactor_swiginit, METH_VARARGS, NULL},
-	 { "new_IDecoratableBorn", _wrap_new_IDecoratableBorn, METH_VARARGS, "\n"
-		"IDecoratableBorn()\n"
-		"new_IDecoratableBorn(PyObject * _self, NodeMeta meta, vdouble1d_t PValues) -> IDecoratableBorn\n"
-		"IDecoratableBorn::IDecoratableBorn(const NodeMeta &meta, const std::vector< double > &PValues)\n"
-		"\n"
-		""},
-	 { "delete_IDecoratableBorn", _wrap_delete_IDecoratableBorn, METH_O, "\n"
-		"delete_IDecoratableBorn(IDecoratableBorn self)\n"
-		"IDecoratableBorn::~IDecoratableBorn() override\n"
-		"\n"
-		""},
-	 { "IDecoratableBorn_clone", _wrap_IDecoratableBorn_clone, METH_O, "\n"
-		"IDecoratableBorn_clone(IDecoratableBorn self) -> IDecoratableBorn\n"
-		"IDecoratableBorn* IDecoratableBorn::clone() const override=0\n"
-		"\n"
-		""},
-	 { "IDecoratableBorn_formfactor", _wrap_IDecoratableBorn_formfactor, METH_VARARGS, "\n"
-		"IDecoratableBorn_formfactor(IDecoratableBorn self, C3 q) -> complex_t\n"
-		"virtual complex_t IDecoratableBorn::formfactor(C3 q) const =0\n"
-		"\n"
-		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
-		"\n"
-		""},
-	 { "disown_IDecoratableBorn", _wrap_disown_IDecoratableBorn, METH_O, NULL},
-	 { "IDecoratableBorn_swigregister", IDecoratableBorn_swigregister, METH_O, NULL},
-	 { "IDecoratableBorn_swiginit", IDecoratableBorn_swiginit, METH_VARARGS, NULL},
 	 { "SlicingEffects_position_set", _wrap_SlicingEffects_position_set, METH_VARARGS, "SlicingEffects_position_set(SlicingEffects self, R3 position)"},
 	 { "SlicingEffects_position_get", _wrap_SlicingEffects_position_get, METH_O, "SlicingEffects_position_get(SlicingEffects self) -> R3"},
 	 { "SlicingEffects_dz_bottom_set", _wrap_SlicingEffects_dz_bottom_set, METH_VARARGS, "SlicingEffects_dz_bottom_set(SlicingEffects self, double dz_bottom)"},
@@ -69874,9 +69259,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "DecoratedFF_formfactor", _wrap_DecoratedFF_formfactor, METH_VARARGS, "\n"
 		"DecoratedFF_formfactor(DecoratedFF self, C3 q) -> complex_t\n"
-		"complex_t DecoratedFF::formfactor(C3 q) const override\n"
-		"\n"
-		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
+		"complex_t DecoratedFF::formfactor(C3 q) const\n"
 		"\n"
 		""},
 	 { "DecoratedFF_createTransformedFormFactor", _wrap_DecoratedFF_createTransformedFormFactor, METH_VARARGS, "DecoratedFF_createTransformedFormFactor(IBornFF formfactor, IRotation rot, R3 translation) -> DecoratedFF"},
@@ -74254,11 +73637,8 @@ static void *_p_RotationXTo_p_IRotation(void *x, int *SWIGUNUSEDPARM(newmemory))
 static void *_p_FormFactorCompositionTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((IFormFactor *)  ((FormFactorComposition *) x));
 }
-static void *_p_IDecoratableBornTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IFormFactor *)  ((IDecoratableBorn *) x));
-}
 static void *_p_DecoratedFFTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IFormFactor *) (IDecoratableBorn *) ((DecoratedFF *) x));
+    return (void *)((IFormFactor *)  ((DecoratedFF *) x));
 }
 static void *_p_FormFactorCrystalTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((IFormFactor *)  ((FormFactorCrystal *) x));
@@ -74548,9 +73928,6 @@ static void *_p_FTDistribution1DGaussTo_p_ICloneable(void *x, int *SWIGUNUSEDPAR
 static void *_p_ParticleLayoutTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (ISampleNode *) ((ParticleLayout *) x));
 }
-static void *_p_IDecoratableBornTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (IFormFactor *) ((IDecoratableBorn *) x));
-}
 static void *_p_FormFactorHemiEllipsoidTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (ISampleNode *)(IBornFF *) ((FormFactorHemiEllipsoid *) x));
 }
@@ -74606,7 +73983,7 @@ static void *_p_FTDistribution2DConeTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM
     return (void *)((ICloneable *) (IFTDistribution2D *) ((FTDistribution2DCone *) x));
 }
 static void *_p_DecoratedFFTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (IFormFactor *)(IDecoratableBorn *) ((DecoratedFF *) x));
+    return (void *)((ICloneable *) (IFormFactor *) ((DecoratedFF *) x));
 }
 static void *_p_ParticleCoreShellTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (ISampleNode *)(IParticle *) ((ParticleCoreShell *) x));
@@ -74638,12 +74015,12 @@ static void *_p_FTDistribution2DGateTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM
 static void *_p_IInterferenceTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *)  ((IInterference *) x));
 }
-static void *_p_FTDistribution1DVoigtTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (IFTDistribution1D *) ((FTDistribution1DVoigt *) x));
-}
 static void *_p_FTDecayFunction1DVoigtTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (IFTDecayFunction1D *) ((FTDecayFunction1DVoigt *) x));
 }
+static void *_p_FTDistribution1DVoigtTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ICloneable *) (IFTDistribution1D *) ((FTDistribution1DVoigt *) x));
+}
 static void *_p_IdentityRotationTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (IRotation *) ((IdentityRotation *) x));
 }
@@ -74905,9 +74282,6 @@ static void *_p_FTDistribution1DGaussTo_p_INode(void *x, int *SWIGUNUSEDPARM(new
 static void *_p_ParticleLayoutTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (ISampleNode *) ((ParticleLayout *) x));
 }
-static void *_p_IDecoratableBornTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (IFormFactor *) ((IDecoratableBorn *) x));
-}
 static void *_p_FormFactorHemiEllipsoidTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (ISampleNode *)(IBornFF *) ((FormFactorHemiEllipsoid *) x));
 }
@@ -74963,7 +74337,7 @@ static void *_p_FTDistribution2DConeTo_p_INode(void *x, int *SWIGUNUSEDPARM(newm
     return (void *)((INode *) (IFTDistribution2D *) ((FTDistribution2DCone *) x));
 }
 static void *_p_DecoratedFFTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (IFormFactor *)(IDecoratableBorn *) ((DecoratedFF *) x));
+    return (void *)((INode *) (IFormFactor *) ((DecoratedFF *) x));
 }
 static void *_p_ParticleCoreShellTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (ISampleNode *)(IParticle *) ((ParticleCoreShell *) x));
@@ -74995,12 +74369,12 @@ static void *_p_FTDistribution2DGateTo_p_INode(void *x, int *SWIGUNUSEDPARM(newm
 static void *_p_IInterferenceTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *)  ((IInterference *) x));
 }
-static void *_p_FTDistribution1DVoigtTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (IFTDistribution1D *) ((FTDistribution1DVoigt *) x));
-}
 static void *_p_FTDecayFunction1DVoigtTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (IFTDecayFunction1D *) ((FTDecayFunction1DVoigt *) x));
 }
+static void *_p_FTDistribution1DVoigtTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((INode *) (IFTDistribution1D *) ((FTDistribution1DVoigt *) x));
+}
 static void *_p_IdentityRotationTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (IRotation *) ((IdentityRotation *) x));
 }
@@ -75205,9 +74579,6 @@ static void *_p_FTDistribution1DTriangleTo_p_INode(void *x, int *SWIGUNUSEDPARM(
 static void *_p_RotationEulerTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (IRotation *) ((RotationEuler *) x));
 }
-static void *_p_DecoratedFFTo_p_IDecoratableBorn(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IDecoratableBorn *)  ((DecoratedFF *) x));
-}
 static void *_p_FormFactorPrism6To_p_IBornFF(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((IBornFF *) (IFormFactorPrism *) ((FormFactorPrism6 *) x));
 }
@@ -75436,7 +74807,6 @@ static swig_type_info _swigt__p_HexagonalLattice2D = {"_p_HexagonalLattice2D", "
 static swig_type_info _swigt__p_IBornFF = {"_p_IBornFF", "IBornFF *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_ICloneable = {"_p_ICloneable", "ICloneable *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_ICosineRipple = {"_p_ICosineRipple", "ICosineRipple *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_IDecoratableBorn = {"_p_IDecoratableBorn", "IDecoratableBorn *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_IFTDecayFunction1D = {"_p_IFTDecayFunction1D", "IFTDecayFunction1D *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_IFTDecayFunction2D = {"_p_IFTDecayFunction2D", "IFTDecayFunction2D *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_IFTDistribution1D = {"_p_IFTDistribution1D", "IFTDistribution1D *", 0, 0, (void*)0, 0};
@@ -75620,7 +74990,6 @@ static swig_type_info *swig_type_initial[] = {
   &_swigt__p_IBornFF,
   &_swigt__p_ICloneable,
   &_swigt__p_ICosineRipple,
-  &_swigt__p_IDecoratableBorn,
   &_swigt__p_IFTDecayFunction1D,
   &_swigt__p_IFTDecayFunction2D,
   &_swigt__p_IFTDistribution1D,
@@ -75802,18 +75171,17 @@ static swig_cast_info _swigc__p_FormFactorTruncatedSpheroid[] = {  {&_swigt__p_F
 static swig_cast_info _swigc__p_GaussFisherPeakShape[] = {  {&_swigt__p_GaussFisherPeakShape, 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_IBornFF[] = {  {&_swigt__p_IBornFF, 0, 0, 0},  {&_swigt__p_FormFactorPrism6, _p_FormFactorPrism6To_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorHemiEllipsoid, _p_FormFactorHemiEllipsoidTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorFullSpheroid, _p_FormFactorFullSpheroidTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorTruncatedSpheroid, _p_FormFactorTruncatedSpheroidTo_p_IBornFF, 0, 0},  {&_swigt__p_IProfileRipple, _p_IProfileRippleTo_p_IBornFF, 0, 0},  {&_swigt__p_ICosineRipple, _p_ICosineRippleTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorLongBoxGauss, _p_FormFactorLongBoxGaussTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorCosineRippleGauss, _p_FormFactorCosineRippleGaussTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleGauss, _p_FormFactorSawtoothRippleGaussTo_p_IBornFF, 0, 0},  {&_swigt__p_IFormFactorPrism, _p_IFormFactorPrismTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorCantellatedCube, _p_FormFactorCantellatedCubeTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorTruncatedCube, _p_FormFactorTruncatedCubeTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorTruncatedSphere, _p_FormFactorTruncatedSphereTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorFullSphere, _p_FormFactorFullSphereTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorEllipsoidalCylinder, _p_FormFactorEllipsoidalCylinderTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorCylinder, _p_FormFactorCylinderTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorBox, _p_FormFactorBoxTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorTetrahedron, _p_FormFactorTetrahedronTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorIcosahedron, _p_FormFactorIcosahedronTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorDodecahedron, _p_FormFactorDodecahedronTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorCuboctahedron, _p_FormFactorCuboctahedronTo_p_IBornFF, 0, 0},  {&_swigt__p_IFormFactorPolyhedron, _p_IFormFactorPolyhedronTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorCone, _p_FormFactorConeTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorCone6, _p_FormFactorCone6To_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorSphereLogNormalRadius, _p_FormFactorSphereLogNormalRadiusTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorSphereGaussianRadius, _p_FormFactorSphereGaussianRadiusTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorGaussSphere, _p_FormFactorGaussSphereTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorHollowSphere, _p_FormFactorHollowSphereTo_p_IBornFF, 0, 0},  {&_swigt__p_IProfileRectangularRipple, _p_IProfileRectangularRippleTo_p_IBornFF, 0, 0},  {&_swigt__p_ISawtoothRipple, _p_ISawtoothRippleTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorCosineRippleLorentz, _p_FormFactorCosineRippleLorentzTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleLorentz, _p_FormFactorSawtoothRippleLorentzTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorLongBoxLorentz, _p_FormFactorLongBoxLorentzTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleBox, _p_FormFactorSawtoothRippleBoxTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorCosineRippleBox, _p_FormFactorCosineRippleBoxTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorPyramid, _p_FormFactorPyramidTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorAnisoPyramid, _p_FormFactorAnisoPyramidTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorPrism3, _p_FormFactorPrism3To_p_IBornFF, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_ICloneable[] = {  {&_swigt__p_FormFactorBox, _p_FormFactorBoxTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorSphereGaussianRadius, _p_FormFactorSphereGaussianRadiusTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorSphereLogNormalRadius, _p_FormFactorSphereLogNormalRadiusTo_p_ICloneable, 0, 0},  {&_swigt__p_MultiLayer, _p_MultiLayerTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDecayFunction1DGauss, _p_FTDecayFunction1DGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution1DGauss, _p_FTDistribution1DGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_ParticleLayout, _p_ParticleLayoutTo_p_ICloneable, 0, 0},  {&_swigt__p_IDecoratableBorn, _p_IDecoratableBornTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorHemiEllipsoid, _p_FormFactorHemiEllipsoidTo_p_ICloneable, 0, 0},  {&_swigt__p_IBornFF, _p_IBornFFTo_p_ICloneable, 0, 0},  {&_swigt__p_IPeakShape, _p_IPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_IsotropicGaussPeakShape, _p_IsotropicGaussPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_IsotropicLorentzPeakShape, _p_IsotropicLorentzPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_GaussFisherPeakShape, _p_GaussFisherPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_MisesGaussPeakShape, _p_MisesGaussPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_MisesFisherGaussPeakShape, _p_MisesFisherGaussPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_LorentzFisherPeakShape, _p_LorentzFisherPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorPrism3, _p_FormFactorPrism3To_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorTetrahedron, _p_FormFactorTetrahedronTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorIcosahedron, _p_FormFactorIcosahedronTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorDodecahedron, _p_FormFactorDodecahedronTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCuboctahedron, _p_FormFactorCuboctahedronTo_p_ICloneable, 0, 0},  {&_swigt__p_IFormFactorPolyhedron, _p_IFormFactorPolyhedronTo_p_ICloneable, 0, 0},  {&_swigt__p_IFormFactorPrism, _p_IFormFactorPrismTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorPrism6, _p_FormFactorPrism6To_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution2DCone, _p_FTDistribution2DConeTo_p_ICloneable, 0, 0},  {&_swigt__p_DecoratedFF, _p_DecoratedFFTo_p_ICloneable, 0, 0},  {&_swigt__p_ParticleCoreShell, _p_ParticleCoreShellTo_p_ICloneable, 0, 0},  {&_swigt__p_IProfileRectangularRipple, _p_IProfileRectangularRippleTo_p_ICloneable, 0, 0},  {&_swigt__p_ISawtoothRipple, _p_ISawtoothRippleTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorFullSphere, _p_FormFactorFullSphereTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorTruncatedSphere, _p_FormFactorTruncatedSphereTo_p_ICloneable, 0, 0},  {&_swigt__p_IFormFactor, _p_IFormFactorTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorLongBoxGauss, _p_FormFactorLongBoxGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceHardDisk, _p_InterferenceHardDiskTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution2DGate, _p_FTDistribution2DGateTo_p_ICloneable, 0, 0},  {&_swigt__p_IInterference, _p_IInterferenceTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution1DVoigt, _p_FTDistribution1DVoigtTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDecayFunction1DVoigt, _p_FTDecayFunction1DVoigtTo_p_ICloneable, 0, 0},  {&_swigt__p_IRotation, _p_IRotationTo_p_ICloneable, 0, 0},  {&_swigt__p_IdentityRotation, _p_IdentityRotationTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorFullSpheroid, _p_FormFactorFullSpheroidTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorTruncatedSpheroid, _p_FormFactorTruncatedSpheroidTo_p_ICloneable, 0, 0},  {&_swigt__p_RotationX, _p_RotationXTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorTruncatedCube, _p_FormFactorTruncatedCubeTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCantellatedCube, _p_FormFactorCantellatedCubeTo_p_ICloneable, 0, 0},  {&_swigt__p_RotationY, _p_RotationYTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDecayFunction2DGauss, _p_FTDecayFunction2DGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution2DGauss, _p_FTDistribution2DGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_RotationZ, _p_RotationZTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceTwin, _p_InterferenceTwinTo_p_ICloneable, 0, 0},  {&_swigt__p_HexagonalLattice2D, _p_HexagonalLattice2DTo_p_ICloneable, 0, 0},  {&_swigt__p_SquareLattice2D, _p_SquareLattice2DTo_p_ICloneable, 0, 0},  {&_swigt__p_BasicLattice2D, _p_BasicLattice2DTo_p_ICloneable, 0, 0},  {&_swigt__p_Lattice2D, _p_Lattice2DTo_p_ICloneable, 0, 0},  {&_swigt__p_Particle, _p_ParticleTo_p_ICloneable, 0, 0},  {&_swigt__p_IParticle, _p_IParticleTo_p_ICloneable, 0, 0},  {&_swigt__p_IFTDistribution1D, _p_IFTDistribution1DTo_p_ICloneable, 0, 0},  {&_swigt__p_IFTDecayFunction1D, _p_IFTDecayFunction1DTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleBox, _p_FormFactorSawtoothRippleBoxTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCosineRippleBox, _p_FormFactorCosineRippleBoxTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCone, _p_FormFactorConeTo_p_ICloneable, 0, 0},  {&_swigt__p_Layer, _p_LayerTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorPyramid, _p_FormFactorPyramidTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorAnisoPyramid, _p_FormFactorAnisoPyramidTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCylinder, _p_FormFactorCylinderTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorEllipsoidalCylinder, _p_FormFactorEllipsoidalCylinderTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorComposition, _p_FormFactorCompositionTo_p_ICloneable, 0, 0},  {&_swigt__p_ParticleComposition, _p_ParticleCompositionTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution1DCosine, _p_FTDistribution1DCosineTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution1DGate, _p_FTDistribution1DGateTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleGauss, _p_FormFactorSawtoothRippleGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCosineRippleGauss, _p_FormFactorCosineRippleGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_ISampleNode, _p_ISampleNodeTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution2DVoigt, _p_FTDistribution2DVoigtTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDecayFunction2DVoigt, _p_FTDecayFunction2DVoigtTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution1DCauchy, _p_FTDistribution1DCauchyTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDecayFunction1DCauchy, _p_FTDecayFunction1DCauchyTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution2DCauchy, _p_FTDistribution2DCauchyTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDecayFunction2DCauchy, _p_FTDecayFunction2DCauchyTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCone6, _p_FormFactorCone6To_p_ICloneable, 0, 0},  {&_swigt__p_LayerRoughness, _p_LayerRoughnessTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceRadialParaCrystal, _p_InterferenceRadialParaCrystalTo_p_ICloneable, 0, 0},  {&_swigt__p_Interference2DParaCrystal, _p_Interference2DParaCrystalTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCrystal, _p_FormFactorCrystalTo_p_ICloneable, 0, 0},  {&_swigt__p_IProfileRipple, _p_IProfileRippleTo_p_ICloneable, 0, 0},  {&_swigt__p_ICosineRipple, _p_ICosineRippleTo_p_ICloneable, 0, 0},  {&_swigt__p_MesoCrystal, _p_MesoCrystalTo_p_ICloneable, 0, 0},  {&_swigt__p_Crystal, _p_CrystalTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorHollowSphere, _p_FormFactorHollowSphereTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorGaussSphere, _p_FormFactorGaussSphereTo_p_ICloneable, 0, 0},  {&_swigt__p_IFTDistribution2D, _p_IFTDistribution2DTo_p_ICloneable, 0, 0},  {&_swigt__p_IFTDecayFunction2D, _p_IFTDecayFunction2DTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceNone, _p_InterferenceNoneTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorLongBoxLorentz, _p_FormFactorLongBoxLorentzTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCosineRippleLorentz, _p_FormFactorCosineRippleLorentzTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleLorentz, _p_FormFactorSawtoothRippleLorentzTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFinite3DLattice, _p_InterferenceFinite3DLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFinite2DLattice, _p_InterferenceFinite2DLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_Interference3DLattice, _p_Interference3DLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_Interference2DSuperLattice, _p_Interference2DSuperLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_Interference2DLattice, _p_Interference2DLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_Interference1DLattice, _p_Interference1DLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution1DTriangle, _p_FTDistribution1DTriangleTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDecayFunction1DTriangle, _p_FTDecayFunction1DTriangleTo_p_ICloneable, 0, 0},  {&_swigt__p_ICloneable, 0, 0, 0},  {&_swigt__p_RotationEuler, _p_RotationEulerTo_p_ICloneable, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_ICloneable[] = {  {&_swigt__p_FormFactorBox, _p_FormFactorBoxTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorSphereGaussianRadius, _p_FormFactorSphereGaussianRadiusTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorSphereLogNormalRadius, _p_FormFactorSphereLogNormalRadiusTo_p_ICloneable, 0, 0},  {&_swigt__p_MultiLayer, _p_MultiLayerTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDecayFunction1DGauss, _p_FTDecayFunction1DGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution1DGauss, _p_FTDistribution1DGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_ParticleLayout, _p_ParticleLayoutTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorHemiEllipsoid, _p_FormFactorHemiEllipsoidTo_p_ICloneable, 0, 0},  {&_swigt__p_IBornFF, _p_IBornFFTo_p_ICloneable, 0, 0},  {&_swigt__p_IPeakShape, _p_IPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_IsotropicGaussPeakShape, _p_IsotropicGaussPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_IsotropicLorentzPeakShape, _p_IsotropicLorentzPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_MisesGaussPeakShape, _p_MisesGaussPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_MisesFisherGaussPeakShape, _p_MisesFisherGaussPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_LorentzFisherPeakShape, _p_LorentzFisherPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_GaussFisherPeakShape, _p_GaussFisherPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorPrism3, _p_FormFactorPrism3To_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorTetrahedron, _p_FormFactorTetrahedronTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorIcosahedron, _p_FormFactorIcosahedronTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorDodecahedron, _p_FormFactorDodecahedronTo_p_ICloneable, 0, 0},  {&_swigt__p_IFormFactorPolyhedron, _p_IFormFactorPolyhedronTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCuboctahedron, _p_FormFactorCuboctahedronTo_p_ICloneable, 0, 0},  {&_swigt__p_IFormFactorPrism, _p_IFormFactorPrismTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorPrism6, _p_FormFactorPrism6To_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution2DCone, _p_FTDistribution2DConeTo_p_ICloneable, 0, 0},  {&_swigt__p_DecoratedFF, _p_DecoratedFFTo_p_ICloneable, 0, 0},  {&_swigt__p_ParticleCoreShell, _p_ParticleCoreShellTo_p_ICloneable, 0, 0},  {&_swigt__p_IProfileRectangularRipple, _p_IProfileRectangularRippleTo_p_ICloneable, 0, 0},  {&_swigt__p_ISawtoothRipple, _p_ISawtoothRippleTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorFullSphere, _p_FormFactorFullSphereTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorTruncatedSphere, _p_FormFactorTruncatedSphereTo_p_ICloneable, 0, 0},  {&_swigt__p_IFormFactor, _p_IFormFactorTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorLongBoxGauss, _p_FormFactorLongBoxGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceHardDisk, _p_InterferenceHardDiskTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution2DGate, _p_FTDistribution2DGateTo_p_ICloneable, 0, 0},  {&_swigt__p_IInterference, _p_IInterferenceTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDecayFunction1DVoigt, _p_FTDecayFunction1DVoigtTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution1DVoigt, _p_FTDistribution1DVoigtTo_p_ICloneable, 0, 0},  {&_swigt__p_IRotation, _p_IRotationTo_p_ICloneable, 0, 0},  {&_swigt__p_IdentityRotation, _p_IdentityRotationTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorTruncatedSpheroid, _p_FormFactorTruncatedSpheroidTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorFullSpheroid, _p_FormFactorFullSpheroidTo_p_ICloneable, 0, 0},  {&_swigt__p_RotationX, _p_RotationXTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorTruncatedCube, _p_FormFactorTruncatedCubeTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCantellatedCube, _p_FormFactorCantellatedCubeTo_p_ICloneable, 0, 0},  {&_swigt__p_RotationY, _p_RotationYTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDecayFunction2DGauss, _p_FTDecayFunction2DGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution2DGauss, _p_FTDistribution2DGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_RotationZ, _p_RotationZTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceTwin, _p_InterferenceTwinTo_p_ICloneable, 0, 0},  {&_swigt__p_HexagonalLattice2D, _p_HexagonalLattice2DTo_p_ICloneable, 0, 0},  {&_swigt__p_SquareLattice2D, _p_SquareLattice2DTo_p_ICloneable, 0, 0},  {&_swigt__p_BasicLattice2D, _p_BasicLattice2DTo_p_ICloneable, 0, 0},  {&_swigt__p_Lattice2D, _p_Lattice2DTo_p_ICloneable, 0, 0},  {&_swigt__p_Particle, _p_ParticleTo_p_ICloneable, 0, 0},  {&_swigt__p_IParticle, _p_IParticleTo_p_ICloneable, 0, 0},  {&_swigt__p_IFTDistribution1D, _p_IFTDistribution1DTo_p_ICloneable, 0, 0},  {&_swigt__p_IFTDecayFunction1D, _p_IFTDecayFunction1DTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleBox, _p_FormFactorSawtoothRippleBoxTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCosineRippleBox, _p_FormFactorCosineRippleBoxTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCone, _p_FormFactorConeTo_p_ICloneable, 0, 0},  {&_swigt__p_Layer, _p_LayerTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorPyramid, _p_FormFactorPyramidTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorAnisoPyramid, _p_FormFactorAnisoPyramidTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCylinder, _p_FormFactorCylinderTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorEllipsoidalCylinder, _p_FormFactorEllipsoidalCylinderTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorComposition, _p_FormFactorCompositionTo_p_ICloneable, 0, 0},  {&_swigt__p_ParticleComposition, _p_ParticleCompositionTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution1DCosine, _p_FTDistribution1DCosineTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution1DGate, _p_FTDistribution1DGateTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleGauss, _p_FormFactorSawtoothRippleGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCosineRippleGauss, _p_FormFactorCosineRippleGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_ISampleNode, _p_ISampleNodeTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDecayFunction2DVoigt, _p_FTDecayFunction2DVoigtTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution2DVoigt, _p_FTDistribution2DVoigtTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution1DCauchy, _p_FTDistribution1DCauchyTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDecayFunction1DCauchy, _p_FTDecayFunction1DCauchyTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution2DCauchy, _p_FTDistribution2DCauchyTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDecayFunction2DCauchy, _p_FTDecayFunction2DCauchyTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCone6, _p_FormFactorCone6To_p_ICloneable, 0, 0},  {&_swigt__p_LayerRoughness, _p_LayerRoughnessTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceRadialParaCrystal, _p_InterferenceRadialParaCrystalTo_p_ICloneable, 0, 0},  {&_swigt__p_Interference2DParaCrystal, _p_Interference2DParaCrystalTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCrystal, _p_FormFactorCrystalTo_p_ICloneable, 0, 0},  {&_swigt__p_IProfileRipple, _p_IProfileRippleTo_p_ICloneable, 0, 0},  {&_swigt__p_ICosineRipple, _p_ICosineRippleTo_p_ICloneable, 0, 0},  {&_swigt__p_MesoCrystal, _p_MesoCrystalTo_p_ICloneable, 0, 0},  {&_swigt__p_Crystal, _p_CrystalTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorHollowSphere, _p_FormFactorHollowSphereTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorGaussSphere, _p_FormFactorGaussSphereTo_p_ICloneable, 0, 0},  {&_swigt__p_IFTDistribution2D, _p_IFTDistribution2DTo_p_ICloneable, 0, 0},  {&_swigt__p_IFTDecayFunction2D, _p_IFTDecayFunction2DTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceNone, _p_InterferenceNoneTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorLongBoxLorentz, _p_FormFactorLongBoxLorentzTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCosineRippleLorentz, _p_FormFactorCosineRippleLorentzTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleLorentz, _p_FormFactorSawtoothRippleLorentzTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFinite3DLattice, _p_InterferenceFinite3DLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFinite2DLattice, _p_InterferenceFinite2DLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_Interference3DLattice, _p_Interference3DLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_Interference2DSuperLattice, _p_Interference2DSuperLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_Interference2DLattice, _p_Interference2DLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_Interference1DLattice, _p_Interference1DLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution1DTriangle, _p_FTDistribution1DTriangleTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDecayFunction1DTriangle, _p_FTDecayFunction1DTriangleTo_p_ICloneable, 0, 0},  {&_swigt__p_ICloneable, 0, 0, 0},  {&_swigt__p_RotationEuler, _p_RotationEulerTo_p_ICloneable, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_ICosineRipple[] = {  {&_swigt__p_FormFactorCosineRippleLorentz, _p_FormFactorCosineRippleLorentzTo_p_ICosineRipple, 0, 0},  {&_swigt__p_FormFactorCosineRippleBox, _p_FormFactorCosineRippleBoxTo_p_ICosineRipple, 0, 0},  {&_swigt__p_ICosineRipple, 0, 0, 0},  {&_swigt__p_FormFactorCosineRippleGauss, _p_FormFactorCosineRippleGaussTo_p_ICosineRipple, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_IDecoratableBorn[] = {  {&_swigt__p_IDecoratableBorn, 0, 0, 0},  {&_swigt__p_DecoratedFF, _p_DecoratedFFTo_p_IDecoratableBorn, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IFTDecayFunction1D[] = {  {&_swigt__p_FTDecayFunction1DCauchy, _p_FTDecayFunction1DCauchyTo_p_IFTDecayFunction1D, 0, 0},  {&_swigt__p_FTDecayFunction1DGauss, _p_FTDecayFunction1DGaussTo_p_IFTDecayFunction1D, 0, 0},  {&_swigt__p_FTDecayFunction1DTriangle, _p_FTDecayFunction1DTriangleTo_p_IFTDecayFunction1D, 0, 0},  {&_swigt__p_IFTDecayFunction1D, 0, 0, 0},  {&_swigt__p_FTDecayFunction1DVoigt, _p_FTDecayFunction1DVoigtTo_p_IFTDecayFunction1D, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IFTDecayFunction2D[] = {  {&_swigt__p_FTDecayFunction2DCauchy, _p_FTDecayFunction2DCauchyTo_p_IFTDecayFunction2D, 0, 0},  {&_swigt__p_FTDecayFunction2DGauss, _p_FTDecayFunction2DGaussTo_p_IFTDecayFunction2D, 0, 0},  {&_swigt__p_IFTDecayFunction2D, 0, 0, 0},  {&_swigt__p_FTDecayFunction2DVoigt, _p_FTDecayFunction2DVoigtTo_p_IFTDecayFunction2D, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IFTDistribution1D[] = {  {&_swigt__p_FTDistribution1DCauchy, _p_FTDistribution1DCauchyTo_p_IFTDistribution1D, 0, 0},  {&_swigt__p_FTDistribution1DCosine, _p_FTDistribution1DCosineTo_p_IFTDistribution1D, 0, 0},  {&_swigt__p_FTDistribution1DGauss, _p_FTDistribution1DGaussTo_p_IFTDistribution1D, 0, 0},  {&_swigt__p_FTDistribution1DGate, _p_FTDistribution1DGateTo_p_IFTDistribution1D, 0, 0},  {&_swigt__p_FTDistribution1DTriangle, _p_FTDistribution1DTriangleTo_p_IFTDistribution1D, 0, 0},  {&_swigt__p_IFTDistribution1D, 0, 0, 0},  {&_swigt__p_FTDistribution1DVoigt, _p_FTDistribution1DVoigtTo_p_IFTDistribution1D, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IFTDistribution2D[] = {  {&_swigt__p_FTDistribution2DCauchy, _p_FTDistribution2DCauchyTo_p_IFTDistribution2D, 0, 0},  {&_swigt__p_FTDistribution2DGauss, _p_FTDistribution2DGaussTo_p_IFTDistribution2D, 0, 0},  {&_swigt__p_IFTDistribution2D, 0, 0, 0},  {&_swigt__p_FTDistribution2DVoigt, _p_FTDistribution2DVoigtTo_p_IFTDistribution2D, 0, 0},  {&_swigt__p_FTDistribution2DGate, _p_FTDistribution2DGateTo_p_IFTDistribution2D, 0, 0},  {&_swigt__p_FTDistribution2DCone, _p_FTDistribution2DConeTo_p_IFTDistribution2D, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_IFormFactor[] = {  {&_swigt__p_FormFactorComposition, _p_FormFactorCompositionTo_p_IFormFactor, 0, 0},  {&_swigt__p_IFormFactor, 0, 0, 0},  {&_swigt__p_IDecoratableBorn, _p_IDecoratableBornTo_p_IFormFactor, 0, 0},  {&_swigt__p_DecoratedFF, _p_DecoratedFFTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorCrystal, _p_FormFactorCrystalTo_p_IFormFactor, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_IFormFactor[] = {  {&_swigt__p_FormFactorComposition, _p_FormFactorCompositionTo_p_IFormFactor, 0, 0},  {&_swigt__p_IFormFactor, 0, 0, 0},  {&_swigt__p_DecoratedFF, _p_DecoratedFFTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorCrystal, _p_FormFactorCrystalTo_p_IFormFactor, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IFormFactorPolyhedron[] = {  {&_swigt__p_IFormFactorPolyhedron, 0, 0, 0},  {&_swigt__p_FormFactorCuboctahedron, _p_FormFactorCuboctahedronTo_p_IFormFactorPolyhedron, 0, 0},  {&_swigt__p_FormFactorDodecahedron, _p_FormFactorDodecahedronTo_p_IFormFactorPolyhedron, 0, 0},  {&_swigt__p_FormFactorIcosahedron, _p_FormFactorIcosahedronTo_p_IFormFactorPolyhedron, 0, 0},  {&_swigt__p_FormFactorTetrahedron, _p_FormFactorTetrahedronTo_p_IFormFactorPolyhedron, 0, 0},  {&_swigt__p_FormFactorCantellatedCube, _p_FormFactorCantellatedCubeTo_p_IFormFactorPolyhedron, 0, 0},  {&_swigt__p_FormFactorCone6, _p_FormFactorCone6To_p_IFormFactorPolyhedron, 0, 0},  {&_swigt__p_FormFactorTruncatedCube, _p_FormFactorTruncatedCubeTo_p_IFormFactorPolyhedron, 0, 0},  {&_swigt__p_FormFactorAnisoPyramid, _p_FormFactorAnisoPyramidTo_p_IFormFactorPolyhedron, 0, 0},  {&_swigt__p_FormFactorPyramid, _p_FormFactorPyramidTo_p_IFormFactorPolyhedron, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IFormFactorPrism[] = {  {&_swigt__p_FormFactorPrism3, _p_FormFactorPrism3To_p_IFormFactorPrism, 0, 0},  {&_swigt__p_IFormFactorPrism, 0, 0, 0},  {&_swigt__p_FormFactorPrism6, _p_FormFactorPrism6To_p_IFormFactorPrism, 0, 0},  {&_swigt__p_FormFactorBox, _p_FormFactorBoxTo_p_IFormFactorPrism, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IInterference[] = {  {&_swigt__p_InterferenceHardDisk, _p_InterferenceHardDiskTo_p_IInterference, 0, 0},  {&_swigt__p_Interference1DLattice, _p_Interference1DLatticeTo_p_IInterference, 0, 0},  {&_swigt__p_Interference2DLattice, _p_Interference2DLatticeTo_p_IInterference, 0, 0},  {&_swigt__p_Interference2DSuperLattice, _p_Interference2DSuperLatticeTo_p_IInterference, 0, 0},  {&_swigt__p_Interference3DLattice, _p_Interference3DLatticeTo_p_IInterference, 0, 0},  {&_swigt__p_InterferenceFinite2DLattice, _p_InterferenceFinite2DLatticeTo_p_IInterference, 0, 0},  {&_swigt__p_InterferenceFinite3DLattice, _p_InterferenceFinite3DLatticeTo_p_IInterference, 0, 0},  {&_swigt__p_InterferenceTwin, _p_InterferenceTwinTo_p_IInterference, 0, 0},  {&_swigt__p_IInterference, 0, 0, 0},  {&_swigt__p_Interference2DParaCrystal, _p_Interference2DParaCrystalTo_p_IInterference, 0, 0},  {&_swigt__p_InterferenceRadialParaCrystal, _p_InterferenceRadialParaCrystalTo_p_IInterference, 0, 0},  {&_swigt__p_InterferenceNone, _p_InterferenceNoneTo_p_IInterference, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_INode[] = {  {&_swigt__p_FormFactorBox, _p_FormFactorBoxTo_p_INode, 0, 0},  {&_swigt__p_FormFactorSphereGaussianRadius, _p_FormFactorSphereGaussianRadiusTo_p_INode, 0, 0},  {&_swigt__p_FormFactorSphereLogNormalRadius, _p_FormFactorSphereLogNormalRadiusTo_p_INode, 0, 0},  {&_swigt__p_MultiLayer, _p_MultiLayerTo_p_INode, 0, 0},  {&_swigt__p_FTDecayFunction1DGauss, _p_FTDecayFunction1DGaussTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution1DGauss, _p_FTDistribution1DGaussTo_p_INode, 0, 0},  {&_swigt__p_ParticleLayout, _p_ParticleLayoutTo_p_INode, 0, 0},  {&_swigt__p_IDecoratableBorn, _p_IDecoratableBornTo_p_INode, 0, 0},  {&_swigt__p_FormFactorHemiEllipsoid, _p_FormFactorHemiEllipsoidTo_p_INode, 0, 0},  {&_swigt__p_INode, 0, 0, 0},  {&_swigt__p_IBornFF, _p_IBornFFTo_p_INode, 0, 0},  {&_swigt__p_IPeakShape, _p_IPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_IsotropicGaussPeakShape, _p_IsotropicGaussPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_IsotropicLorentzPeakShape, _p_IsotropicLorentzPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_GaussFisherPeakShape, _p_GaussFisherPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_MisesGaussPeakShape, _p_MisesGaussPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_MisesFisherGaussPeakShape, _p_MisesFisherGaussPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_LorentzFisherPeakShape, _p_LorentzFisherPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_FormFactorPrism3, _p_FormFactorPrism3To_p_INode, 0, 0},  {&_swigt__p_FormFactorTetrahedron, _p_FormFactorTetrahedronTo_p_INode, 0, 0},  {&_swigt__p_FormFactorIcosahedron, _p_FormFactorIcosahedronTo_p_INode, 0, 0},  {&_swigt__p_FormFactorDodecahedron, _p_FormFactorDodecahedronTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCuboctahedron, _p_FormFactorCuboctahedronTo_p_INode, 0, 0},  {&_swigt__p_IFormFactorPolyhedron, _p_IFormFactorPolyhedronTo_p_INode, 0, 0},  {&_swigt__p_IFormFactorPrism, _p_IFormFactorPrismTo_p_INode, 0, 0},  {&_swigt__p_FormFactorPrism6, _p_FormFactorPrism6To_p_INode, 0, 0},  {&_swigt__p_FTDistribution2DCone, _p_FTDistribution2DConeTo_p_INode, 0, 0},  {&_swigt__p_DecoratedFF, _p_DecoratedFFTo_p_INode, 0, 0},  {&_swigt__p_ParticleCoreShell, _p_ParticleCoreShellTo_p_INode, 0, 0},  {&_swigt__p_IProfileRectangularRipple, _p_IProfileRectangularRippleTo_p_INode, 0, 0},  {&_swigt__p_ISawtoothRipple, _p_ISawtoothRippleTo_p_INode, 0, 0},  {&_swigt__p_FormFactorFullSphere, _p_FormFactorFullSphereTo_p_INode, 0, 0},  {&_swigt__p_FormFactorTruncatedSphere, _p_FormFactorTruncatedSphereTo_p_INode, 0, 0},  {&_swigt__p_IFormFactor, _p_IFormFactorTo_p_INode, 0, 0},  {&_swigt__p_FormFactorLongBoxGauss, _p_FormFactorLongBoxGaussTo_p_INode, 0, 0},  {&_swigt__p_InterferenceHardDisk, _p_InterferenceHardDiskTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution2DGate, _p_FTDistribution2DGateTo_p_INode, 0, 0},  {&_swigt__p_IInterference, _p_IInterferenceTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution1DVoigt, _p_FTDistribution1DVoigtTo_p_INode, 0, 0},  {&_swigt__p_FTDecayFunction1DVoigt, _p_FTDecayFunction1DVoigtTo_p_INode, 0, 0},  {&_swigt__p_IRotation, _p_IRotationTo_p_INode, 0, 0},  {&_swigt__p_IdentityRotation, _p_IdentityRotationTo_p_INode, 0, 0},  {&_swigt__p_FormFactorFullSpheroid, _p_FormFactorFullSpheroidTo_p_INode, 0, 0},  {&_swigt__p_FormFactorTruncatedSpheroid, _p_FormFactorTruncatedSpheroidTo_p_INode, 0, 0},  {&_swigt__p_RotationX, _p_RotationXTo_p_INode, 0, 0},  {&_swigt__p_FormFactorTruncatedCube, _p_FormFactorTruncatedCubeTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCantellatedCube, _p_FormFactorCantellatedCubeTo_p_INode, 0, 0},  {&_swigt__p_RotationY, _p_RotationYTo_p_INode, 0, 0},  {&_swigt__p_FTDecayFunction2DGauss, _p_FTDecayFunction2DGaussTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution2DGauss, _p_FTDistribution2DGaussTo_p_INode, 0, 0},  {&_swigt__p_RotationZ, _p_RotationZTo_p_INode, 0, 0},  {&_swigt__p_InterferenceTwin, _p_InterferenceTwinTo_p_INode, 0, 0},  {&_swigt__p_HexagonalLattice2D, _p_HexagonalLattice2DTo_p_INode, 0, 0},  {&_swigt__p_SquareLattice2D, _p_SquareLattice2DTo_p_INode, 0, 0},  {&_swigt__p_BasicLattice2D, _p_BasicLattice2DTo_p_INode, 0, 0},  {&_swigt__p_Lattice2D, _p_Lattice2DTo_p_INode, 0, 0},  {&_swigt__p_Particle, _p_ParticleTo_p_INode, 0, 0},  {&_swigt__p_IParticle, _p_IParticleTo_p_INode, 0, 0},  {&_swigt__p_IFTDistribution1D, _p_IFTDistribution1DTo_p_INode, 0, 0},  {&_swigt__p_IFTDecayFunction1D, _p_IFTDecayFunction1DTo_p_INode, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleBox, _p_FormFactorSawtoothRippleBoxTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCosineRippleBox, _p_FormFactorCosineRippleBoxTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCone, _p_FormFactorConeTo_p_INode, 0, 0},  {&_swigt__p_Layer, _p_LayerTo_p_INode, 0, 0},  {&_swigt__p_FormFactorPyramid, _p_FormFactorPyramidTo_p_INode, 0, 0},  {&_swigt__p_FormFactorAnisoPyramid, _p_FormFactorAnisoPyramidTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCylinder, _p_FormFactorCylinderTo_p_INode, 0, 0},  {&_swigt__p_FormFactorEllipsoidalCylinder, _p_FormFactorEllipsoidalCylinderTo_p_INode, 0, 0},  {&_swigt__p_FormFactorComposition, _p_FormFactorCompositionTo_p_INode, 0, 0},  {&_swigt__p_ParticleComposition, _p_ParticleCompositionTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution1DCosine, _p_FTDistribution1DCosineTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution1DGate, _p_FTDistribution1DGateTo_p_INode, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleGauss, _p_FormFactorSawtoothRippleGaussTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCosineRippleGauss, _p_FormFactorCosineRippleGaussTo_p_INode, 0, 0},  {&_swigt__p_ISampleNode, _p_ISampleNodeTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution2DVoigt, _p_FTDistribution2DVoigtTo_p_INode, 0, 0},  {&_swigt__p_FTDecayFunction2DVoigt, _p_FTDecayFunction2DVoigtTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution1DCauchy, _p_FTDistribution1DCauchyTo_p_INode, 0, 0},  {&_swigt__p_FTDecayFunction1DCauchy, _p_FTDecayFunction1DCauchyTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution2DCauchy, _p_FTDistribution2DCauchyTo_p_INode, 0, 0},  {&_swigt__p_FTDecayFunction2DCauchy, _p_FTDecayFunction2DCauchyTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCone6, _p_FormFactorCone6To_p_INode, 0, 0},  {&_swigt__p_LayerRoughness, _p_LayerRoughnessTo_p_INode, 0, 0},  {&_swigt__p_InterferenceRadialParaCrystal, _p_InterferenceRadialParaCrystalTo_p_INode, 0, 0},  {&_swigt__p_Interference2DParaCrystal, _p_Interference2DParaCrystalTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCrystal, _p_FormFactorCrystalTo_p_INode, 0, 0},  {&_swigt__p_IProfileRipple, _p_IProfileRippleTo_p_INode, 0, 0},  {&_swigt__p_ICosineRipple, _p_ICosineRippleTo_p_INode, 0, 0},  {&_swigt__p_MesoCrystal, _p_MesoCrystalTo_p_INode, 0, 0},  {&_swigt__p_Crystal, _p_CrystalTo_p_INode, 0, 0},  {&_swigt__p_Lattice3D, _p_Lattice3DTo_p_INode, 0, 0},  {&_swigt__p_FormFactorHollowSphere, _p_FormFactorHollowSphereTo_p_INode, 0, 0},  {&_swigt__p_FormFactorGaussSphere, _p_FormFactorGaussSphereTo_p_INode, 0, 0},  {&_swigt__p_IFTDistribution2D, _p_IFTDistribution2DTo_p_INode, 0, 0},  {&_swigt__p_IFTDecayFunction2D, _p_IFTDecayFunction2DTo_p_INode, 0, 0},  {&_swigt__p_InterferenceNone, _p_InterferenceNoneTo_p_INode, 0, 0},  {&_swigt__p_FormFactorLongBoxLorentz, _p_FormFactorLongBoxLorentzTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCosineRippleLorentz, _p_FormFactorCosineRippleLorentzTo_p_INode, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleLorentz, _p_FormFactorSawtoothRippleLorentzTo_p_INode, 0, 0},  {&_swigt__p_InterferenceFinite3DLattice, _p_InterferenceFinite3DLatticeTo_p_INode, 0, 0},  {&_swigt__p_InterferenceFinite2DLattice, _p_InterferenceFinite2DLatticeTo_p_INode, 0, 0},  {&_swigt__p_Interference3DLattice, _p_Interference3DLatticeTo_p_INode, 0, 0},  {&_swigt__p_Interference2DSuperLattice, _p_Interference2DSuperLatticeTo_p_INode, 0, 0},  {&_swigt__p_Interference2DLattice, _p_Interference2DLatticeTo_p_INode, 0, 0},  {&_swigt__p_Interference1DLattice, _p_Interference1DLatticeTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution1DTriangle, _p_FTDistribution1DTriangleTo_p_INode, 0, 0},  {&_swigt__p_FTDecayFunction1DTriangle, _p_FTDecayFunction1DTriangleTo_p_INode, 0, 0},  {&_swigt__p_RotationEuler, _p_RotationEulerTo_p_INode, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_INode[] = {  {&_swigt__p_FormFactorBox, _p_FormFactorBoxTo_p_INode, 0, 0},  {&_swigt__p_FormFactorSphereGaussianRadius, _p_FormFactorSphereGaussianRadiusTo_p_INode, 0, 0},  {&_swigt__p_FormFactorSphereLogNormalRadius, _p_FormFactorSphereLogNormalRadiusTo_p_INode, 0, 0},  {&_swigt__p_MultiLayer, _p_MultiLayerTo_p_INode, 0, 0},  {&_swigt__p_FTDecayFunction1DGauss, _p_FTDecayFunction1DGaussTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution1DGauss, _p_FTDistribution1DGaussTo_p_INode, 0, 0},  {&_swigt__p_ParticleLayout, _p_ParticleLayoutTo_p_INode, 0, 0},  {&_swigt__p_FormFactorHemiEllipsoid, _p_FormFactorHemiEllipsoidTo_p_INode, 0, 0},  {&_swigt__p_INode, 0, 0, 0},  {&_swigt__p_IBornFF, _p_IBornFFTo_p_INode, 0, 0},  {&_swigt__p_IPeakShape, _p_IPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_IsotropicGaussPeakShape, _p_IsotropicGaussPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_IsotropicLorentzPeakShape, _p_IsotropicLorentzPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_MisesGaussPeakShape, _p_MisesGaussPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_MisesFisherGaussPeakShape, _p_MisesFisherGaussPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_LorentzFisherPeakShape, _p_LorentzFisherPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_GaussFisherPeakShape, _p_GaussFisherPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_FormFactorPrism3, _p_FormFactorPrism3To_p_INode, 0, 0},  {&_swigt__p_FormFactorTetrahedron, _p_FormFactorTetrahedronTo_p_INode, 0, 0},  {&_swigt__p_FormFactorIcosahedron, _p_FormFactorIcosahedronTo_p_INode, 0, 0},  {&_swigt__p_FormFactorDodecahedron, _p_FormFactorDodecahedronTo_p_INode, 0, 0},  {&_swigt__p_IFormFactorPolyhedron, _p_IFormFactorPolyhedronTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCuboctahedron, _p_FormFactorCuboctahedronTo_p_INode, 0, 0},  {&_swigt__p_IFormFactorPrism, _p_IFormFactorPrismTo_p_INode, 0, 0},  {&_swigt__p_FormFactorPrism6, _p_FormFactorPrism6To_p_INode, 0, 0},  {&_swigt__p_FTDistribution2DCone, _p_FTDistribution2DConeTo_p_INode, 0, 0},  {&_swigt__p_DecoratedFF, _p_DecoratedFFTo_p_INode, 0, 0},  {&_swigt__p_ParticleCoreShell, _p_ParticleCoreShellTo_p_INode, 0, 0},  {&_swigt__p_IProfileRectangularRipple, _p_IProfileRectangularRippleTo_p_INode, 0, 0},  {&_swigt__p_ISawtoothRipple, _p_ISawtoothRippleTo_p_INode, 0, 0},  {&_swigt__p_FormFactorFullSphere, _p_FormFactorFullSphereTo_p_INode, 0, 0},  {&_swigt__p_FormFactorTruncatedSphere, _p_FormFactorTruncatedSphereTo_p_INode, 0, 0},  {&_swigt__p_IFormFactor, _p_IFormFactorTo_p_INode, 0, 0},  {&_swigt__p_FormFactorLongBoxGauss, _p_FormFactorLongBoxGaussTo_p_INode, 0, 0},  {&_swigt__p_InterferenceHardDisk, _p_InterferenceHardDiskTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution2DGate, _p_FTDistribution2DGateTo_p_INode, 0, 0},  {&_swigt__p_IInterference, _p_IInterferenceTo_p_INode, 0, 0},  {&_swigt__p_FTDecayFunction1DVoigt, _p_FTDecayFunction1DVoigtTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution1DVoigt, _p_FTDistribution1DVoigtTo_p_INode, 0, 0},  {&_swigt__p_IRotation, _p_IRotationTo_p_INode, 0, 0},  {&_swigt__p_IdentityRotation, _p_IdentityRotationTo_p_INode, 0, 0},  {&_swigt__p_FormFactorTruncatedSpheroid, _p_FormFactorTruncatedSpheroidTo_p_INode, 0, 0},  {&_swigt__p_FormFactorFullSpheroid, _p_FormFactorFullSpheroidTo_p_INode, 0, 0},  {&_swigt__p_RotationX, _p_RotationXTo_p_INode, 0, 0},  {&_swigt__p_FormFactorTruncatedCube, _p_FormFactorTruncatedCubeTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCantellatedCube, _p_FormFactorCantellatedCubeTo_p_INode, 0, 0},  {&_swigt__p_RotationY, _p_RotationYTo_p_INode, 0, 0},  {&_swigt__p_FTDecayFunction2DGauss, _p_FTDecayFunction2DGaussTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution2DGauss, _p_FTDistribution2DGaussTo_p_INode, 0, 0},  {&_swigt__p_RotationZ, _p_RotationZTo_p_INode, 0, 0},  {&_swigt__p_InterferenceTwin, _p_InterferenceTwinTo_p_INode, 0, 0},  {&_swigt__p_HexagonalLattice2D, _p_HexagonalLattice2DTo_p_INode, 0, 0},  {&_swigt__p_SquareLattice2D, _p_SquareLattice2DTo_p_INode, 0, 0},  {&_swigt__p_BasicLattice2D, _p_BasicLattice2DTo_p_INode, 0, 0},  {&_swigt__p_Lattice2D, _p_Lattice2DTo_p_INode, 0, 0},  {&_swigt__p_Particle, _p_ParticleTo_p_INode, 0, 0},  {&_swigt__p_IParticle, _p_IParticleTo_p_INode, 0, 0},  {&_swigt__p_IFTDistribution1D, _p_IFTDistribution1DTo_p_INode, 0, 0},  {&_swigt__p_IFTDecayFunction1D, _p_IFTDecayFunction1DTo_p_INode, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleBox, _p_FormFactorSawtoothRippleBoxTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCosineRippleBox, _p_FormFactorCosineRippleBoxTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCone, _p_FormFactorConeTo_p_INode, 0, 0},  {&_swigt__p_Layer, _p_LayerTo_p_INode, 0, 0},  {&_swigt__p_FormFactorPyramid, _p_FormFactorPyramidTo_p_INode, 0, 0},  {&_swigt__p_FormFactorAnisoPyramid, _p_FormFactorAnisoPyramidTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCylinder, _p_FormFactorCylinderTo_p_INode, 0, 0},  {&_swigt__p_FormFactorEllipsoidalCylinder, _p_FormFactorEllipsoidalCylinderTo_p_INode, 0, 0},  {&_swigt__p_FormFactorComposition, _p_FormFactorCompositionTo_p_INode, 0, 0},  {&_swigt__p_ParticleComposition, _p_ParticleCompositionTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution1DCosine, _p_FTDistribution1DCosineTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution1DGate, _p_FTDistribution1DGateTo_p_INode, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleGauss, _p_FormFactorSawtoothRippleGaussTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCosineRippleGauss, _p_FormFactorCosineRippleGaussTo_p_INode, 0, 0},  {&_swigt__p_ISampleNode, _p_ISampleNodeTo_p_INode, 0, 0},  {&_swigt__p_FTDecayFunction2DVoigt, _p_FTDecayFunction2DVoigtTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution2DVoigt, _p_FTDistribution2DVoigtTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution1DCauchy, _p_FTDistribution1DCauchyTo_p_INode, 0, 0},  {&_swigt__p_FTDecayFunction1DCauchy, _p_FTDecayFunction1DCauchyTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution2DCauchy, _p_FTDistribution2DCauchyTo_p_INode, 0, 0},  {&_swigt__p_FTDecayFunction2DCauchy, _p_FTDecayFunction2DCauchyTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCone6, _p_FormFactorCone6To_p_INode, 0, 0},  {&_swigt__p_LayerRoughness, _p_LayerRoughnessTo_p_INode, 0, 0},  {&_swigt__p_InterferenceRadialParaCrystal, _p_InterferenceRadialParaCrystalTo_p_INode, 0, 0},  {&_swigt__p_Interference2DParaCrystal, _p_Interference2DParaCrystalTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCrystal, _p_FormFactorCrystalTo_p_INode, 0, 0},  {&_swigt__p_IProfileRipple, _p_IProfileRippleTo_p_INode, 0, 0},  {&_swigt__p_ICosineRipple, _p_ICosineRippleTo_p_INode, 0, 0},  {&_swigt__p_MesoCrystal, _p_MesoCrystalTo_p_INode, 0, 0},  {&_swigt__p_Crystal, _p_CrystalTo_p_INode, 0, 0},  {&_swigt__p_Lattice3D, _p_Lattice3DTo_p_INode, 0, 0},  {&_swigt__p_FormFactorHollowSphere, _p_FormFactorHollowSphereTo_p_INode, 0, 0},  {&_swigt__p_FormFactorGaussSphere, _p_FormFactorGaussSphereTo_p_INode, 0, 0},  {&_swigt__p_IFTDistribution2D, _p_IFTDistribution2DTo_p_INode, 0, 0},  {&_swigt__p_IFTDecayFunction2D, _p_IFTDecayFunction2DTo_p_INode, 0, 0},  {&_swigt__p_InterferenceNone, _p_InterferenceNoneTo_p_INode, 0, 0},  {&_swigt__p_FormFactorLongBoxLorentz, _p_FormFactorLongBoxLorentzTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCosineRippleLorentz, _p_FormFactorCosineRippleLorentzTo_p_INode, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleLorentz, _p_FormFactorSawtoothRippleLorentzTo_p_INode, 0, 0},  {&_swigt__p_InterferenceFinite3DLattice, _p_InterferenceFinite3DLatticeTo_p_INode, 0, 0},  {&_swigt__p_InterferenceFinite2DLattice, _p_InterferenceFinite2DLatticeTo_p_INode, 0, 0},  {&_swigt__p_Interference3DLattice, _p_Interference3DLatticeTo_p_INode, 0, 0},  {&_swigt__p_Interference2DSuperLattice, _p_Interference2DSuperLatticeTo_p_INode, 0, 0},  {&_swigt__p_Interference2DLattice, _p_Interference2DLatticeTo_p_INode, 0, 0},  {&_swigt__p_Interference1DLattice, _p_Interference1DLatticeTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution1DTriangle, _p_FTDistribution1DTriangleTo_p_INode, 0, 0},  {&_swigt__p_FTDecayFunction1DTriangle, _p_FTDecayFunction1DTriangleTo_p_INode, 0, 0},  {&_swigt__p_RotationEuler, _p_RotationEulerTo_p_INode, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IParticle[] = {  {&_swigt__p_ParticleComposition, _p_ParticleCompositionTo_p_IParticle, 0, 0},  {&_swigt__p_MesoCrystal, _p_MesoCrystalTo_p_IParticle, 0, 0},  {&_swigt__p_IParticle, 0, 0, 0},  {&_swigt__p_Particle, _p_ParticleTo_p_IParticle, 0, 0},  {&_swigt__p_ParticleCoreShell, _p_ParticleCoreShellTo_p_IParticle, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IPeakShape[] = {  {&_swigt__p_IPeakShape, 0, 0, 0},  {&_swigt__p_IsotropicGaussPeakShape, _p_IsotropicGaussPeakShapeTo_p_IPeakShape, 0, 0},  {&_swigt__p_IsotropicLorentzPeakShape, _p_IsotropicLorentzPeakShapeTo_p_IPeakShape, 0, 0},  {&_swigt__p_GaussFisherPeakShape, _p_GaussFisherPeakShapeTo_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_IProfileRectangularRipple[] = {  {&_swigt__p_IProfileRectangularRipple, 0, 0, 0},{0, 0, 0, 0}};
@@ -75988,7 +75356,6 @@ static swig_cast_info *swig_cast_initial[] = {
   _swigc__p_IBornFF,
   _swigc__p_ICloneable,
   _swigc__p_ICosineRipple,
-  _swigc__p_IDecoratableBorn,
   _swigc__p_IFTDecayFunction1D,
   _swigc__p_IFTDecayFunction2D,
   _swigc__p_IFTDistribution1D,
diff --git a/auto/Wrap/libBornAgainSample_wrap.h b/auto/Wrap/libBornAgainSample_wrap.h
index 50028bf2f0e..07dd24e5083 100644
--- a/auto/Wrap/libBornAgainSample_wrap.h
+++ b/auto/Wrap/libBornAgainSample_wrap.h
@@ -113,58 +113,6 @@ private:
 };
 
 
-class SwigDirector_IDecoratableBorn : public IDecoratableBorn, public Swig::Director {
-
-public:
-    SwigDirector_IDecoratableBorn(PyObject *self);
-    SwigDirector_IDecoratableBorn(PyObject *self, NodeMeta const &meta, std::vector< double, std::allocator< double > > const &PValues);
-    virtual ~SwigDirector_IDecoratableBorn();
-    virtual IDecoratableBorn *clone() const;
-    virtual void transferToCPP();
-    virtual std::string className() const;
-    virtual std::vector< INode const *, std::allocator< INode const * > > nodeChildren() const;
-    virtual void setAmbientMaterial(Material const &arg0);
-    virtual complex_t theFF(WavevectorInfo const &wavevectors) const;
-    virtual double radialExtension() const;
-    virtual double bottomZ(IRotation const *rotation) const;
-    virtual double topZ(IRotation const *rotation) const;
-    virtual complex_t formfactor(C3 q) const;
-
-/* Internal director utilities */
-public:
-    bool swig_get_inner(const char *swig_protected_method_name) const {
-      std::map<std::string, bool>::const_iterator iv = swig_inner.find(swig_protected_method_name);
-      return (iv != swig_inner.end() ? iv->second : false);
-    }
-    void swig_set_inner(const char *swig_protected_method_name, bool swig_val) const {
-      swig_inner[swig_protected_method_name] = swig_val;
-    }
-private:
-    mutable std::map<std::string, bool> swig_inner;
-
-#if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
-/* VTable implementation */
-    PyObject *swig_get_method(size_t method_index, const char *method_name) const {
-      PyObject *method = vtable[method_index];
-      if (!method) {
-        swig::SwigVar_PyObject name = SWIG_Python_str_FromChar(method_name);
-        method = PyObject_GetAttr(swig_get_self(), name);
-        if (!method) {
-          std::string msg = "Method in class IDecoratableBorn doesn't exist, undefined ";
-          msg += method_name;
-          Swig::DirectorMethodException::raise(msg.c_str());
-        }
-        vtable[method_index] = method;
-      }
-      return method;
-    }
-private:
-    mutable swig::SwigVar_PyObject vtable[10];
-#endif
-
-};
-
-
 class SwigDirector_IBornFF : public IBornFF, public Swig::Director {
 
 public:
-- 
GitLab