diff --git a/Core/Export/SampleToPython.cpp b/Core/Export/SampleToPython.cpp
index db9f8aed139e56ba82359976a68c7c5f3c2d5074..a2fa4b8662fc75bba403dc2d66c3f35f8efddd04 100644
--- a/Core/Export/SampleToPython.cpp
+++ b/Core/Export/SampleToPython.cpp
@@ -113,7 +113,7 @@ void SampleToPython::initLabels(const MultiLayer& multilayer)
         m_objs->insertModel("roughness", x);
     for (const auto* x : NodeUtils::AllDescendantsOfType<ParticleLayout>(multilayer))
         m_objs->insertModel("layout", x);
-    for (const auto* x : NodeUtils::AllDescendantsOfType<IFormFactor>(multilayer))
+    for (const auto* x : NodeUtils::AllDescendantsOfType<IBornFF>(multilayer))
         m_objs->insertModel("ff", x);
     for (const auto* x : NodeUtils::AllDescendantsOfType<IInterference>(multilayer))
         m_objs->insertModel("iff", x);
@@ -228,7 +228,7 @@ std::string SampleToPython::defineRoughnesses() const
 
 std::string SampleToPython::defineFormFactors() const
 {
-    std::vector<const IFormFactor*> formFactors = m_objs->objectsOfType<IFormFactor>();
+    std::vector<const IBornFF*> formFactors = m_objs->objectsOfType<IBornFF>();
     if (formFactors.empty())
         return "";
     std::ostringstream result;
@@ -381,7 +381,7 @@ std::string SampleToPython::defineParticles() const
     result << "\n" << indent() << "# Define particles\n";
     for (const auto* s : v) {
         const std::string& key = m_objs->obj2key(s);
-        const auto* ff = NodeUtils::OnlyChildOfType<IFormFactor>(*s);
+        const auto* ff = NodeUtils::OnlyChildOfType<IBornFF>(*s);
         ASSERT(ff);
         result << indent() << key << " = ba.Particle(" << m_materials->mat2key(s->material())
                << ", " << m_objs->obj2key(ff) << ")\n";
@@ -441,7 +441,7 @@ std::string SampleToPython::defineMesoCrystals() const
     for (const auto* s : v) {
         const std::string& key = m_objs->obj2key(s);
         const auto* crystal = NodeUtils::OnlyChildOfType<Crystal>(*s);
-        const auto* outer_shape = NodeUtils::OnlyChildOfType<IFormFactor>(*s);
+        const auto* outer_shape = NodeUtils::OnlyChildOfType<IBornFF>(*s);
         if (!crystal || !outer_shape)
             continue;
         result << indent() << key << " = ba.MesoCrystal(";
diff --git a/GUI/Model/From/FromDomain.cpp b/GUI/Model/From/FromDomain.cpp
index 88d1beeb71944c851a0969e01304a678c1d7c951..d3ee899a3a87415679fc1a8a0b59f6025f61a6a3 100644
--- a/GUI/Model/From/FromDomain.cpp
+++ b/GUI/Model/From/FromDomain.cpp
@@ -822,7 +822,7 @@ void GUI::Transform::FromDomain::setInterference(ParticleLayoutItem* layoutItem,
 }
 
 void GUI::Transform::FromDomain::setFormFactor(std::variant<ParticleItem*, MesoCrystalItem*> parent,
-                                               const IFormFactor* iFormFactor)
+                                               const IBornFF* iFormFactor)
 {
     if (const auto* formFactor = dynamic_cast<const FormFactorAnisoPyramid*>(iFormFactor)) {
         auto* formFactorItem = addFormFactorItem<AnisoPyramidItem>(parent);
diff --git a/GUI/Model/From/FromDomain.h b/GUI/Model/From/FromDomain.h
index 6c10d0b66ff9f2fa5688177cd184b7f32e7f3da9..884d69ce9749dee32068a3dcee8ca6eebcc4cf60 100644
--- a/GUI/Model/From/FromDomain.h
+++ b/GUI/Model/From/FromDomain.h
@@ -64,7 +64,7 @@ class ParticleLayoutItem;
 class IInterference;
 class ParticleItem;
 class MesoCrystalItem;
-class IFormFactor;
+class IBornFF;
 
 namespace GUI::Transform::FromDomain {
 
@@ -128,7 +128,7 @@ void setRotation(ItemWithParticles* item, const IRotation* rotation);
 void setInterference(ParticleLayoutItem* layoutItem, const IInterference* interference);
 
 void setFormFactor(std::variant<ParticleItem*, MesoCrystalItem*> parent,
-                   const IFormFactor* iFormFactor);
+                   const IBornFF* iFormFactor);
 
 } // namespace GUI::Transform::FromDomain
 
diff --git a/GUI/View/Realspace/RealSpaceBuilderUtils.cpp b/GUI/View/Realspace/RealSpaceBuilderUtils.cpp
index 48f14f0fbc59acf28e7ff7bdb00c3123925c5e24..a03b40e2cdf29a0e43afe6a0cd1252e3d827c5d9 100644
--- a/GUI/View/Realspace/RealSpaceBuilderUtils.cpp
+++ b/GUI/View/Realspace/RealSpaceBuilderUtils.cpp
@@ -37,12 +37,12 @@ namespace {
 
 const double layerBorderWidth = 10.0;
 
-const IDecoratableBorn* getUnderlyingFormFactor(const IFormFactor* ff)
+const IBornFF* getUnderlyingFormFactor(const IBornFF* ff)
 {
     // TRUE as long as ff is of DecoratedFF (or its derived) type
     while (dynamic_cast<const DecoratedFF*>(ff))
         ff = dynamic_cast<const DecoratedFF*>(ff)->getFormFactor();
-    const auto* ffb = dynamic_cast<const IDecoratableBorn*>(ff);
+    const auto* ffb = dynamic_cast<const IBornFF*>(ff);
     ASSERT(ffb);
     return ffb;
 }
@@ -261,10 +261,9 @@ Particle3DContainer GUI::RealSpace::BuilderUtils::singleParticle3DContainer(
 {
     std::unique_ptr<Particle> P_clone(particle.clone()); // clone of the particle
 
-    std::unique_ptr<const IFormFactor> particleff(P_clone->createFormFactor());
-    const IDecoratableBorn* ff = getUnderlyingFormFactor(particleff.get());
+    const IBornFF* ff = getUnderlyingFormFactor(P_clone->formFactor());
 
-    auto particle3D = GUI::View::TransformTo3D::createParticlefromIFormFactor(ff);
+    auto particle3D = GUI::View::TransformTo3D::createParticlefromFormfactor(ff);
     applyParticleTransformations(*P_clone, *particle3D, to_kvector(origin));
     applyParticleColor(*P_clone, *particle3D);
 
@@ -282,16 +281,16 @@ Particle3DContainer GUI::RealSpace::BuilderUtils::particleCoreShell3DContainer(
     // clone of the particleCoreShell
     std::unique_ptr<ParticleCoreShell> PCS_clone(particleCoreShell.clone());
 
-    std::unique_ptr<const IFormFactor> coreParticleff(
-        PCS_clone->coreParticle()->createFormFactor());
-    std::unique_ptr<const IFormFactor> shellParticleff(
-        PCS_clone->shellParticle()->createFormFactor());
+    std::unique_ptr<const IBornFF> coreParticleff(
+        PCS_clone->coreParticle()->formFactor());
+    std::unique_ptr<const IBornFF> shellParticleff(
+        PCS_clone->shellParticle()->formFactor());
 
     const auto* coreff = getUnderlyingFormFactor(coreParticleff.get());
     const auto* shellff = getUnderlyingFormFactor(shellParticleff.get());
 
-    auto coreParticle3D = GUI::View::TransformTo3D::createParticlefromIFormFactor(coreff);
-    auto shellParticle3D = GUI::View::TransformTo3D::createParticlefromIFormFactor(shellff);
+    auto coreParticle3D = GUI::View::TransformTo3D::createParticlefromFormfactor(coreff);
+    auto shellParticle3D = GUI::View::TransformTo3D::createParticlefromFormfactor(shellff);
 
     // core
     applyParticleCoreShellTransformations(*PCS_clone->coreParticle(), *coreParticle3D, *PCS_clone,
diff --git a/GUI/View/Realspace/RealSpaceMesoCrystalUtils.cpp b/GUI/View/Realspace/RealSpaceMesoCrystalUtils.cpp
index 893062bff809e27ffcd2f5b7918520f0cb57a56c..cb90e3e7ec6d793260357330dac86785a29b4cac 100644
--- a/GUI/View/Realspace/RealSpaceMesoCrystalUtils.cpp
+++ b/GUI/View/Realspace/RealSpaceMesoCrystalUtils.cpp
@@ -28,7 +28,7 @@ namespace {
 
 const int n = 10; // TODO: Adjust this parameter based on the size of the mesocrystal
 
-bool isPositionInsideMesoCrystal(const IDecoratableBorn* outerShape, R3 positionInside)
+bool isPositionInsideMesoCrystal(const IBornFF* outerShape, R3 positionInside)
 {
     bool check(false);
     if (const auto* ff_AnisoPyramid = dynamic_cast<const FormFactorAnisoPyramid*>(outerShape)) {
@@ -424,7 +424,7 @@ Particle3DContainer RealSpaceMesoCrystal::populateMesoCrystal()
     }
 
     // Add outer shape for visualization
-    auto outerShape3D = GUI::View::TransformTo3D::createParticlefromIFormFactor(outerShapeff.get());
+    auto outerShape3D = GUI::View::TransformTo3D::createParticlefromFormfactor(outerShapeff.get());
     outerShape3D->addTransform(
         m_builderUtils->implementParticleRotationfromIRotation(mesoCrystal_rotation),
         QVector3D(static_cast<float>(mesoCrystal_translation.x()),
diff --git a/GUI/View/Realspace/TransformTo3D.cpp b/GUI/View/Realspace/TransformTo3D.cpp
index bef27b084c26e7391d7c922fdea6c90ffc1e8329..b8bad6d97416e800c8badba0bba22ee5436c840a 100644
--- a/GUI/View/Realspace/TransformTo3D.cpp
+++ b/GUI/View/Realspace/TransformTo3D.cpp
@@ -77,7 +77,7 @@ GUI::View::TransformTo3D::createLayer(const LayerItem& layerItem,
 }
 
 std::unique_ptr<GUI::RealSpace::Particles::Particle>
-GUI::View::TransformTo3D::createParticlefromIFormFactor(const IDecoratableBorn* ff)
+GUI::View::TransformTo3D::createParticlefromFormfactor(const IBornFF* ff)
 {
     if (const auto* ff_AnisoPyramid = dynamic_cast<const FormFactorAnisoPyramid*>(ff)) {
         double length = ff_AnisoPyramid->getLength();
diff --git a/GUI/View/Realspace/TransformTo3D.h b/GUI/View/Realspace/TransformTo3D.h
index bb3e024df994c75078cbd57c01b504de18761b21..c65f34456a49e795ef4f50b02edde7b539601a66 100644
--- a/GUI/View/Realspace/TransformTo3D.h
+++ b/GUI/View/Realspace/TransformTo3D.h
@@ -24,7 +24,7 @@ class LayerItem;
 class ParticleItem;
 class SessionItem;
 struct SceneGeometry;
-class IDecoratableBorn;
+class IBornFF;
 
 //! Collection of utility functions to build 3D objects from session items.
 
@@ -37,7 +37,7 @@ std::unique_ptr<GUI::RealSpace::Layer> createLayer(const LayerItem& layerItem,
                                                    const QVector3D& origin = {});
 
 std::unique_ptr<GUI::RealSpace::Particles::Particle>
-createParticlefromIFormFactor(const IDecoratableBorn* ff);
+createParticlefromFormfactor(const IBornFF* ff);
 
 } // namespace GUI::View::TransformTo3D
 
diff --git a/Sample/Scattering/DecoratedFF.cpp b/Sample/Scattering/DecoratedFF.cpp
index dab7702fe2f5b65a1965dc728527219b38ed78be..b7a14a174fe914e974935e5b31c22e55c723c309 100644
--- a/Sample/Scattering/DecoratedFF.cpp
+++ b/Sample/Scattering/DecoratedFF.cpp
@@ -87,7 +87,7 @@ double DecoratedFF::radialExtension() const
     return m_ff->radialExtension();
 }
 
-const IDecoratableBorn* DecoratedFF::getFormFactor() const
+const IBornFF* DecoratedFF::getFormFactor() const
 {
     return m_ff.get();
 }
diff --git a/Sample/Scattering/DecoratedFF.h b/Sample/Scattering/DecoratedFF.h
index 91de7e468fdda91caa786da4cb065de3c250e505..b6b39d1d5fb1f79f21148deff9b43f2c03159a1e 100644
--- a/Sample/Scattering/DecoratedFF.h
+++ b/Sample/Scattering/DecoratedFF.h
@@ -59,7 +59,7 @@ public:
 
     double topZ(const IRotation* rotation) const override;
 
-    const IDecoratableBorn* getFormFactor() const;
+    const IBornFF* getFormFactor() const;
 
     complex_t formfactor(C3 q) const override;
 
diff --git a/Sample/Scattering/IBornFF.cpp b/Sample/Scattering/IBornFF.cpp
index 0b31eb9a43b7d236bc1659969cd8709e49920275..3be1289d756c396d77295344e87e3477d7f20a65 100644
--- a/Sample/Scattering/IBornFF.cpp
+++ b/Sample/Scattering/IBornFF.cpp
@@ -18,11 +18,14 @@
 #include "Base/Vector/WavevectorInfo.h"
 #include "Sample/Scattering/Rotations.h"
 #include "Sample/Shapes/IShape3D.h"
+#include "Base/Util/PyFmt.h"
+#include "Base/Util/StringUtils.h"
 #include <stdexcept>
+#include <utility>
 
 namespace {
 
-bool shapeIsContainedInLimits(const IFormFactor& formfactor, ZLimits limits,
+bool shapeIsContainedInLimits(const IBornFF& formfactor, ZLimits limits,
                               const IRotation* rotation, R3 translation)
 {
     double zbottom = formfactor.bottomZ(rotation) + translation.z();
@@ -31,7 +34,7 @@ bool shapeIsContainedInLimits(const IFormFactor& formfactor, ZLimits limits,
     return limits.zBottom() <= zbottom && ztop <= limits.zTop();
 }
 
-bool shapeOutsideLimits(const IFormFactor& formfactor, ZLimits limits, const IRotation* rotation,
+bool shapeOutsideLimits(const IBornFF& formfactor, ZLimits limits, const IRotation* rotation,
                         R3 translation)
 {
     double zbottom = formfactor.bottomZ(rotation) + translation.z();
@@ -46,12 +49,19 @@ bool shapeOutsideLimits(const IFormFactor& formfactor, ZLimits limits, const IRo
 IBornFF::IBornFF() = default;
 
 IBornFF::IBornFF(const NodeMeta& meta, const std::vector<double>& PValues)
-    : IDecoratableBorn(meta, PValues)
+    : ISampleNode(meta, PValues), m_nodeMeta(meta)
 {
 }
 
 IBornFF::~IBornFF() = default;
 
+std::string IBornFF::shapeName() const
+{
+    if (className().substr(0, 10) == "FormFactor")
+        return className().substr(10);
+    return className();
+}
+
 complex_t IBornFF::theFF(const WavevectorInfo& wavevectors) const
 {
     return formfactor(wavevectors.getQ());
@@ -81,6 +91,15 @@ bool IBornFF::canSliceAnalytically(const IRotation* rotation) const
     return !rotation || rotation->zInvariant();
 }
 
+std::string IBornFF::pythonConstructor() const
+{
+    std::vector<std::pair<double, std::string>> arguments;
+    for (size_t i = 0; i < m_nodeMeta.paraMeta.size(); i++)
+        arguments.emplace_back(m_P[i], m_nodeMeta.paraMeta[i].unit);
+
+    return Py::Fmt::printFunction(className(), arguments);
+}
+
 Eigen::Matrix2cd IBornFF::formfactor_pol(C3 q) const
 {
     return formfactor(q) * Eigen::Matrix2cd::Identity();
@@ -123,6 +142,8 @@ SlicingEffects IBornFF::computeSlicingEffects(ZLimits limits, const R3& position
     return {new_position, dz_bottom, dz_top};
 }
 
+double IBornFF::volume() const { return std::abs(formfactor(C3())); }
+
 double IBornFF::BottomZ(const std::vector<R3>& vertices, const IRotation* rotation)
 {
     ASSERT(vertices.size());
diff --git a/Sample/Scattering/IBornFF.h b/Sample/Scattering/IBornFF.h
index 383ece4f9f18fd0a5c12fdfd0d34ce2944f89668..2ae890895bfbf5cedf01f2a1233cbfc3a199e541 100644
--- a/Sample/Scattering/IBornFF.h
+++ b/Sample/Scattering/IBornFF.h
@@ -16,7 +16,7 @@
 #ifndef BORNAGAIN_SAMPLE_SCATTERING_IBORNFF_H
 #define BORNAGAIN_SAMPLE_SCATTERING_IBORNFF_H
 
-#include "Sample/Scattering/IDecoratableBorn.h"
+#include "Sample/Scattering/ISampleNode.h"
 
 #include "Sample/Scattering/DecoratedFF.h" // TODO circular, temporary
 // class DecoratedFF;
@@ -37,7 +37,7 @@ struct SlicingEffects {
 //! on the incoming and outgoing wave vectors ki and kf, except through their
 //! difference, the scattering vector q=ki-kf.
 
-class IBornFF : public IDecoratableBorn {
+class IBornFF : public ISampleNode {
 public:
     IBornFF();
     IBornFF(const NodeMeta& meta, const std::vector<double>& PValues);
@@ -45,16 +45,29 @@ public:
 
     IBornFF* clone() const override = 0;
 
-    complex_t theFF(const WavevectorInfo& wavevectors) const override;
+    virtual complex_t theFF(const WavevectorInfo& wavevectors) const;
+
+    std::string shapeName() const;
 
 #ifndef SWIG
-    Eigen::Matrix2cd thePolFF(const WavevectorInfo& wavevectors) const override;
+    virtual Eigen::Matrix2cd thePolFF(const WavevectorInfo& wavevectors) const;
 #endif
-    double bottomZ(const IRotation* rotation) const override;
-    double topZ(const IRotation* rotation) const override;
+    virtual double bottomZ(const IRotation* rotation) const;
+    virtual double topZ(const IRotation* rotation) const;
+
+    virtual double volume() const;
+
+    //! Returns the (approximate in some cases) radial size of the particle of this
+    //! form factor's shape. This is used for SSCA calculations
+    virtual double radialExtension() const = 0;
+
+    virtual complex_t formfactor(C3 q) const = 0;
 
     DecoratedFF* createSlicedFormFactor(ZLimits limits, const IRotation* rot, R3 translation) const;
 
+    //! Creates the Python constructor of this class (or derived classes)
+    virtual std::string pythonConstructor() const;
+
 protected:
     //! Default implementation only allows rotations along z-axis
     virtual bool canSliceAnalytically(const IRotation* rot) const;
@@ -82,6 +95,9 @@ protected:
 
     //! Calculates the z-coordinate of the highest vertex after rotation
     static double TopZ(const std::vector<R3>& vertices, const IRotation* rotation);
+
+
+    NodeMeta m_nodeMeta; //!< stored for python code generation
 };
 
 #endif // BORNAGAIN_SAMPLE_SCATTERING_IBORNFF_H
diff --git a/Sample/Scattering/IFormFactor.cpp b/Sample/Scattering/IFormFactor.cpp
index 2b969dab264934598717d814b105da6f2b3703fb..fe6a250299cfe653ff4fff7b151e1d2cc526626c 100644
--- a/Sample/Scattering/IFormFactor.cpp
+++ b/Sample/Scattering/IFormFactor.cpp
@@ -13,39 +13,20 @@
 //  ************************************************************************************************
 
 #include "Sample/Scattering/IFormFactor.h"
-#include "Base/Util/PyFmt.h"
-#include "Base/Util/StringUtils.h"
 #include "Base/Vector/WavevectorInfo.h"
 #include <memory>
-#include <utility>
 
 IFormFactor::IFormFactor(const NodeMeta& meta, const std::vector<double>& PValues)
-    : INode(meta, PValues), m_nodeMeta(meta)
+    : INode(meta, PValues)
 {
 }
 
-std::string IFormFactor::shapeName() const
-{
-    if (className().substr(0, 10) == "FormFactor")
-        return className().substr(10);
-    return className();
-}
-
 Eigen::Matrix2cd IFormFactor::thePolFF(const WavevectorInfo&) const
 {
     // Throws to prevent unanticipated behaviour
     throw std::runtime_error("IFormFactor::evaluatePol: is not implemented by default");
 }
 
-std::string IFormFactor::pythonConstructor() const
-{
-    std::vector<std::pair<double, std::string>> arguments;
-    for (size_t i = 0; i < m_nodeMeta.paraMeta.size(); i++)
-        arguments.emplace_back(m_P[i], m_nodeMeta.paraMeta[i].unit);
-
-    return Py::Fmt::printFunction(className(), arguments);
-}
-
 double IFormFactor::volume() const
 {
     auto zero_wavevectors = WavevectorInfo::makeZeroQ();
diff --git a/Sample/Scattering/IFormFactor.h b/Sample/Scattering/IFormFactor.h
index 6feb7be528265147b5cf3421b5b781f5941dbae6..136734c2793a845a72f304a7dd2f5766acb4e64f 100644
--- a/Sample/Scattering/IFormFactor.h
+++ b/Sample/Scattering/IFormFactor.h
@@ -43,8 +43,6 @@ public:
 
     IFormFactor* clone() const override = 0;
 
-    std::string shapeName() const;
-
     //! Passes the material in which this particle is embedded.
     virtual void setAmbientMaterial(const Material&) {}
 
@@ -65,15 +63,9 @@ public:
     //! Returns scattering amplitude for matrix interactions
     virtual Eigen::Matrix2cd thePolFF(const WavevectorInfo& wavevectors) const;
 
-    //! Creates the Python constructor of this class (or derived classes)
-    virtual std::string pythonConstructor() const;
-
     //! Returns the total volume of the particle of this form factor's shape
     virtual double volume() const;
 
-protected:
-    NodeMeta m_nodeMeta; //!< stored for python code generation
-
 #endif // SWIG
 };
 
diff --git a/Tests/Unit/Numeric/FormFactorSpecializationTest.cpp b/Tests/Unit/Numeric/FormFactorSpecializationTest.cpp
index 826b2be42850e6e8828800f844aa85b83a6ebc0f..b53e9f3af485274edb3c20afb6861d8c7690045c 100644
--- a/Tests/Unit/Numeric/FormFactorSpecializationTest.cpp
+++ b/Tests/Unit/Numeric/FormFactorSpecializationTest.cpp
@@ -8,7 +8,7 @@
 
 class FFSpecializationTest : public testing::Test {
 protected:
-    void run_test(IDecoratableBorn* p0, IDecoratableBorn* p1, double eps, double qmag1,
+    void run_test(IBornFF* p0, IBornFF* p1, double eps, double qmag1,
                   double qmag2)
     {
         formFactorTest::run_test_for_many_q([&](C3 q) { test_ff_eq(q, p0, p1, eps); }, qmag1,
@@ -16,7 +16,7 @@ protected:
     }
 
 private:
-    void test_ff_eq(C3 q, IDecoratableBorn* p0, IDecoratableBorn* p1, double eps)
+    void test_ff_eq(C3 q, IBornFF* p0, IBornFF* p1, double eps)
     {
         const complex_t f0 = p0->formfactor(q);
         const complex_t f1 = p1->formfactor(q);
diff --git a/Tests/Unit/Numeric/FormFactorSymmetryTest.cpp b/Tests/Unit/Numeric/FormFactorSymmetryTest.cpp
index f851947e9b5d864c7c9cb176323ba29fc63ccd87..d08e3a254369895eafddac7315612526dff8199c 100644
--- a/Tests/Unit/Numeric/FormFactorSymmetryTest.cpp
+++ b/Tests/Unit/Numeric/FormFactorSymmetryTest.cpp
@@ -10,7 +10,7 @@ class FFSymmetryTest : public testing::Test {
 private:
     using transform_t = std::function<C3(const C3&)>;
 
-    void test_qq_eq(IDecoratableBorn* ff, C3 q, C3 p, double eps)
+    void test_qq_eq(IBornFF* ff, C3 q, C3 p, double eps)
     {
         complex_t f0 = ff->formfactor(q);
 #ifdef ALGORITHM_DIAGNOSTIC
@@ -36,7 +36,7 @@ private:
     }
 
 protected:
-    void run_test(IDecoratableBorn* ff, transform_t trafo, double eps, double qmag1, double qmag2)
+    void run_test(IBornFF* ff, transform_t trafo, double eps, double qmag1, double qmag2)
     {
         formFactorTest::run_test_for_many_q([&](C3 q) { test_qq_eq(ff, q, trafo(q), eps); }, qmag1,
                                             qmag2);
diff --git a/Tests/Unit/Sample/FormFactorBasicTest.cpp b/Tests/Unit/Sample/FormFactorBasicTest.cpp
index d99e1f53fa6f233fb52286d718e84cd8555620c8..3b43aa443a5c3d8bb073c13df5aab77434dd21ec 100644
--- a/Tests/Unit/Sample/FormFactorBasicTest.cpp
+++ b/Tests/Unit/Sample/FormFactorBasicTest.cpp
@@ -6,7 +6,7 @@
 
 class FormFactorBasicTest : public ::testing::Test {
 protected:
-    void test_eps_q(const IDecoratableBorn* p, C3 qdir, double eps) const
+    void test_eps_q(const IBornFF* p, C3 qdir, double eps) const
     {
         C3 q = eps * qdir;
         complex_t ff = p->formfactor(q);
@@ -18,7 +18,7 @@ protected:
         EXPECT_GT(real(ff), V * (1 - std::max(3e-16, 2 * eps * R * eps * R)));
         EXPECT_LT(std::abs(imag(ff)), 2 * eps * V * R);
     }
-    void test_small_q(const IDecoratableBorn* p, complex_t x, complex_t y, complex_t z) const
+    void test_small_q(const IBornFF* p, complex_t x, complex_t y, complex_t z) const
     {
         C3 q(x, y, z);
         test_eps_q(p, q, 1e-14);
@@ -26,7 +26,7 @@ protected:
         test_eps_q(p, q, 1e-8);
         test_eps_q(p, q, 1e-5);
     }
-    void test_ff(const IDecoratableBorn* p)
+    void test_ff(const IBornFF* p)
     {
         complex_t ff0 = p->formfactor(C3(0., 0., 0.));
         EXPECT_EQ(imag(ff0), 0.);
@@ -54,7 +54,7 @@ protected:
         test_small_q(p, 1, 1, 1);
         test_small_q(p, .7, .8, .9);
 
-        IDecoratableBorn* clone = p->clone();
+        IBornFF* clone = p->clone();
         EXPECT_EQ(clone->volume(), V);
         C3 q(.1, .2, complex_t(.3, .004));
         EXPECT_EQ(clone->formfactor(q), p->formfactor(q));
diff --git a/auto/Wrap/doxygenSample.i b/auto/Wrap/doxygenSample.i
index bfdad15a80d4debea1724e3ec71b71d45b1909a0..077ee266a2332c95b6820348182db8d78ca5b9b2 100644
--- a/auto/Wrap/doxygenSample.i
+++ b/auto/Wrap/doxygenSample.i
@@ -251,7 +251,7 @@ Returns the z-coordinate of the lowest point in this shape after a given rotatio
 Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 ";
 
-%feature("docstring")  DecoratedFF::getFormFactor "const IDecoratableBorn * DecoratedFF::getFormFactor() const
+%feature("docstring")  DecoratedFF::getFormFactor "const IBornFF * DecoratedFF::getFormFactor() const
 ";
 
 %feature("docstring")  DecoratedFF::formfactor "complex_t DecoratedFF::formfactor(C3 q) const override
@@ -378,6 +378,8 @@ C++ includes: FormFactorAnisoPyramid.h
 ";
 
 %feature("docstring")  FormFactorAnisoPyramid::clone "FormFactorAnisoPyramid* FormFactorAnisoPyramid::clone() const override
+
+Returns a clone of this  ISampleNode object. 
 ";
 
 %feature("docstring")  FormFactorAnisoPyramid::getLength "double FormFactorAnisoPyramid::getLength() const
@@ -411,6 +413,8 @@ C++ includes: FormFactorBar.h
 ";
 
 %feature("docstring")  FormFactorBarGauss::clone "FormFactorBarGauss * FormFactorBarGauss::clone() const override
+
+Returns a clone of this  ISampleNode object. 
 ";
 
 
@@ -432,6 +436,8 @@ C++ includes: FormFactorBar.h
 ";
 
 %feature("docstring")  FormFactorBarLorentz::clone "FormFactorBarLorentz * FormFactorBarLorentz::clone() const override
+
+Returns a clone of this  ISampleNode object. 
 ";
 
 
@@ -453,6 +459,8 @@ C++ includes: FormFactorBox.h
 ";
 
 %feature("docstring")  FormFactorBox::clone "FormFactorBox* FormFactorBox::clone() const override
+
+Returns a clone of this  ISampleNode object. 
 ";
 
 %feature("docstring")  FormFactorBox::getLength "double FormFactorBox::getLength() const
@@ -462,8 +470,6 @@ C++ includes: FormFactorBox.h
 ";
 
 %feature("docstring")  FormFactorBox::volume "double FormFactorBox::volume() const override
-
-Returns the total volume of the particle of this form factor's shape. 
 ";
 
 %feature("docstring")  FormFactorBox::radialExtension "double FormFactorBox::radialExtension() const override
@@ -472,8 +478,6 @@ Returns the (approximate in some cases) radial size of the particle of this form
 ";
 
 %feature("docstring")  FormFactorBox::formfactor "complex_t FormFactorBox::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. 
 ";
 
 
@@ -495,6 +499,8 @@ C++ includes: FormFactorCantellatedCube.h
 ";
 
 %feature("docstring")  FormFactorCantellatedCube::clone "FormFactorCantellatedCube* FormFactorCantellatedCube::clone() const override
+
+Returns a clone of this  ISampleNode object. 
 ";
 
 %feature("docstring")  FormFactorCantellatedCube::getLength "double FormFactorCantellatedCube::getLength() const
@@ -590,6 +596,8 @@ C++ includes: FormFactorCone.h
 ";
 
 %feature("docstring")  FormFactorCone::clone "FormFactorCone* FormFactorCone::clone() const override
+
+Returns a clone of this  ISampleNode object. 
 ";
 
 %feature("docstring")  FormFactorCone::getHeight "double FormFactorCone::getHeight() const
@@ -607,8 +615,6 @@ Returns the (approximate in some cases) radial size of the particle of this form
 ";
 
 %feature("docstring")  FormFactorCone::formfactor "complex_t FormFactorCone::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. 
 ";
 
 
@@ -630,6 +636,8 @@ C++ includes: FormFactorCone6.h
 ";
 
 %feature("docstring")  FormFactorCone6::clone "FormFactorCone6* FormFactorCone6::clone() const override
+
+Returns a clone of this  ISampleNode object. 
 ";
 
 %feature("docstring")  FormFactorCone6::getBaseEdge "double FormFactorCone6::getBaseEdge() const
@@ -713,6 +721,8 @@ C++ includes: FormFactorCosineRipple.h
 ";
 
 %feature("docstring")  FormFactorCosineRippleBox::clone "FormFactorCosineRippleBox * FormFactorCosineRippleBox::clone() const override
+
+Returns a clone of this  ISampleNode object. 
 ";
 
 
@@ -734,6 +744,8 @@ C++ includes: FormFactorCosineRipple.h
 ";
 
 %feature("docstring")  FormFactorCosineRippleGauss::clone "FormFactorCosineRippleGauss * FormFactorCosineRippleGauss::clone() const override
+
+Returns a clone of this  ISampleNode object. 
 ";
 
 
@@ -755,6 +767,8 @@ C++ includes: FormFactorCosineRipple.h
 ";
 
 %feature("docstring")  FormFactorCosineRippleLorentz::clone "FormFactorCosineRippleLorentz * FormFactorCosineRippleLorentz::clone() const override
+
+Returns a clone of this  ISampleNode object. 
 ";
 
 
@@ -832,6 +846,8 @@ C++ includes: FormFactorCuboctahedron.h
 ";
 
 %feature("docstring")  FormFactorCuboctahedron::clone "FormFactorCuboctahedron* FormFactorCuboctahedron::clone() const override
+
+Returns a clone of this  ISampleNode object. 
 ";
 
 %feature("docstring")  FormFactorCuboctahedron::getLength "double FormFactorCuboctahedron::getLength() const
@@ -865,6 +881,8 @@ C++ includes: FormFactorCylinder.h
 ";
 
 %feature("docstring")  FormFactorCylinder::clone "FormFactorCylinder* FormFactorCylinder::clone() const override
+
+Returns a clone of this  ISampleNode object. 
 ";
 
 %feature("docstring")  FormFactorCylinder::getHeight "double FormFactorCylinder::getHeight() const
@@ -879,8 +897,6 @@ Returns the (approximate in some cases) radial size of the particle of this form
 ";
 
 %feature("docstring")  FormFactorCylinder::formfactor "complex_t FormFactorCylinder::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. 
 ";
 
 
@@ -902,6 +918,8 @@ C++ includes: FormFactorDodecahedron.h
 ";
 
 %feature("docstring")  FormFactorDodecahedron::clone "FormFactorDodecahedron* FormFactorDodecahedron::clone() const override
+
+Returns a clone of this  ISampleNode object. 
 ";
 
 %feature("docstring")  FormFactorDodecahedron::getEdge "double FormFactorDodecahedron::getEdge() const
@@ -926,6 +944,8 @@ C++ includes: FormFactorEllipsoidalCylinder.h
 ";
 
 %feature("docstring")  FormFactorEllipsoidalCylinder::clone "FormFactorEllipsoidalCylinder* FormFactorEllipsoidalCylinder::clone() const override
+
+Returns a clone of this  ISampleNode object. 
 ";
 
 %feature("docstring")  FormFactorEllipsoidalCylinder::getRadiusX "double FormFactorEllipsoidalCylinder::getRadiusX() const
@@ -943,8 +963,6 @@ Returns the (approximate in some cases) radial size of the particle of this form
 ";
 
 %feature("docstring")  FormFactorEllipsoidalCylinder::formfactor "complex_t FormFactorEllipsoidalCylinder::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. 
 ";
 
 
@@ -966,6 +984,8 @@ C++ includes: FormFactorFullSphere.h
 ";
 
 %feature("docstring")  FormFactorFullSphere::clone "FormFactorFullSphere* FormFactorFullSphere::clone() const override
+
+Returns a clone of this  ISampleNode object. 
 ";
 
 %feature("docstring")  FormFactorFullSphere::getRadius "double FormFactorFullSphere::getRadius() const
@@ -977,18 +997,12 @@ Returns the (approximate in some cases) radial size of the particle of this form
 ";
 
 %feature("docstring")  FormFactorFullSphere::bottomZ "double FormFactorFullSphere::bottomZ(const IRotation *rotation) const override
-
-Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 ";
 
 %feature("docstring")  FormFactorFullSphere::topZ "double FormFactorFullSphere::topZ(const IRotation *rotation) const override
-
-Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 ";
 
 %feature("docstring")  FormFactorFullSphere::formfactor "complex_t FormFactorFullSphere::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. 
 ";
 
 
@@ -1010,6 +1024,8 @@ C++ includes: FormFactorFullSpheroid.h
 ";
 
 %feature("docstring")  FormFactorFullSpheroid::clone "FormFactorFullSpheroid* FormFactorFullSpheroid::clone() const override
+
+Returns a clone of this  ISampleNode object. 
 ";
 
 %feature("docstring")  FormFactorFullSpheroid::getHeight "double FormFactorFullSpheroid::getHeight() const
@@ -1024,8 +1040,6 @@ Returns the (approximate in some cases) radial size of the particle of this form
 ";
 
 %feature("docstring")  FormFactorFullSpheroid::formfactor "complex_t FormFactorFullSpheroid::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. 
 ";
 
 
@@ -1047,6 +1061,8 @@ C++ includes: FormFactorGauss.h
 ";
 
 %feature("docstring")  FormFactorGaussSphere::clone "FormFactorGaussSphere* FormFactorGaussSphere::clone() const override
+
+Returns a clone of this  ISampleNode object. 
 ";
 
 %feature("docstring")  FormFactorGaussSphere::getMeanRadius "double FormFactorGaussSphere::getMeanRadius() const
@@ -1058,8 +1074,6 @@ Returns the (approximate in some cases) radial size of the particle of this form
 ";
 
 %feature("docstring")  FormFactorGaussSphere::formfactor "complex_t FormFactorGaussSphere::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. 
 ";
 
 
@@ -1084,6 +1098,8 @@ C++ includes: FormFactorHemiEllipsoid.h
 ";
 
 %feature("docstring")  FormFactorHemiEllipsoid::clone "FormFactorHemiEllipsoid* FormFactorHemiEllipsoid::clone() const override
+
+Returns a clone of this  ISampleNode object. 
 ";
 
 %feature("docstring")  FormFactorHemiEllipsoid::getHeight "double FormFactorHemiEllipsoid::getHeight() const
@@ -1101,8 +1117,6 @@ Returns the (approximate in some cases) radial size of the particle of this form
 ";
 
 %feature("docstring")  FormFactorHemiEllipsoid::formfactor "complex_t FormFactorHemiEllipsoid::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. 
 ";
 
 
@@ -1124,6 +1138,8 @@ C++ includes: FormFactorHollowSphere.h
 ";
 
 %feature("docstring")  FormFactorHollowSphere::clone "FormFactorHollowSphere* FormFactorHollowSphere::clone() const override
+
+Returns a clone of this  ISampleNode object. 
 ";
 
 %feature("docstring")  FormFactorHollowSphere::radialExtension "double FormFactorHollowSphere::radialExtension() const override
@@ -1132,8 +1148,6 @@ Returns the (approximate in some cases) radial size of the particle of this form
 ";
 
 %feature("docstring")  FormFactorHollowSphere::formfactor "complex_t FormFactorHollowSphere::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. 
 ";
 
 
@@ -1155,6 +1169,8 @@ C++ includes: FormFactorIcosahedron.h
 ";
 
 %feature("docstring")  FormFactorIcosahedron::clone "FormFactorIcosahedron* FormFactorIcosahedron::clone() const override
+
+Returns a clone of this  ISampleNode object. 
 ";
 
 %feature("docstring")  FormFactorIcosahedron::getEdge "double FormFactorIcosahedron::getEdge() const
@@ -1179,6 +1195,8 @@ C++ includes: FormFactorLongBoxGauss.h
 ";
 
 %feature("docstring")  FormFactorLongBoxGauss::clone "FormFactorLongBoxGauss* FormFactorLongBoxGauss::clone() const override
+
+Returns a clone of this  ISampleNode object. 
 ";
 
 %feature("docstring")  FormFactorLongBoxGauss::getLength "double FormFactorLongBoxGauss::getLength() const
@@ -1196,8 +1214,6 @@ Returns the (approximate in some cases) radial size of the particle of this form
 ";
 
 %feature("docstring")  FormFactorLongBoxGauss::formfactor "complex_t FormFactorLongBoxGauss::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. 
 ";
 
 
@@ -1219,6 +1235,8 @@ C++ includes: FormFactorLongBoxLorentz.h
 ";
 
 %feature("docstring")  FormFactorLongBoxLorentz::clone "FormFactorLongBoxLorentz* FormFactorLongBoxLorentz::clone() const override
+
+Returns a clone of this  ISampleNode object. 
 ";
 
 %feature("docstring")  FormFactorLongBoxLorentz::getLength "double FormFactorLongBoxLorentz::getLength() const
@@ -1236,8 +1254,6 @@ Returns the (approximate in some cases) radial size of the particle of this form
 ";
 
 %feature("docstring")  FormFactorLongBoxLorentz::formfactor "complex_t FormFactorLongBoxLorentz::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. 
 ";
 
 
@@ -1259,6 +1275,8 @@ C++ includes: FormFactorPrism3.h
 ";
 
 %feature("docstring")  FormFactorPrism3::clone "FormFactorPrism3* FormFactorPrism3::clone() const override
+
+Returns a clone of this  ISampleNode object. 
 ";
 
 %feature("docstring")  FormFactorPrism3::getBaseEdge "double FormFactorPrism3::getBaseEdge() const
@@ -1283,6 +1301,8 @@ C++ includes: FormFactorPrism6.h
 ";
 
 %feature("docstring")  FormFactorPrism6::clone "FormFactorPrism6* FormFactorPrism6::clone() const override
+
+Returns a clone of this  ISampleNode object. 
 ";
 
 %feature("docstring")  FormFactorPrism6::getBaseEdge "double FormFactorPrism6::getBaseEdge() const
@@ -1307,6 +1327,8 @@ C++ includes: FormFactorPyramid.h
 ";
 
 %feature("docstring")  FormFactorPyramid::clone "FormFactorPyramid* FormFactorPyramid::clone() const override
+
+Returns a clone of this  ISampleNode object. 
 ";
 
 %feature("docstring")  FormFactorPyramid::getHeight "double FormFactorPyramid::getHeight() const
@@ -1337,6 +1359,8 @@ C++ includes: FormFactorSawtoothRipple.h
 ";
 
 %feature("docstring")  FormFactorSawtoothRippleBox::clone "FormFactorSawtoothRippleBox * FormFactorSawtoothRippleBox::clone() const override
+
+Returns a clone of this  ISampleNode object. 
 ";
 
 
@@ -1358,6 +1382,8 @@ C++ includes: FormFactorSawtoothRipple.h
 ";
 
 %feature("docstring")  FormFactorSawtoothRippleGauss::clone "FormFactorSawtoothRippleGauss * FormFactorSawtoothRippleGauss::clone() const override
+
+Returns a clone of this  ISampleNode object. 
 ";
 
 
@@ -1379,6 +1405,8 @@ C++ includes: FormFactorSawtoothRipple.h
 ";
 
 %feature("docstring")  FormFactorSawtoothRippleLorentz::clone "FormFactorSawtoothRippleLorentz * FormFactorSawtoothRippleLorentz::clone() const override
+
+Returns a clone of this  ISampleNode object. 
 ";
 
 
@@ -1400,6 +1428,8 @@ C++ includes: FormFactorSphereGaussianRadius.h
 ";
 
 %feature("docstring")  FormFactorSphereGaussianRadius::clone "FormFactorSphereGaussianRadius* FormFactorSphereGaussianRadius::clone() const override
+
+Returns a clone of this  ISampleNode object. 
 ";
 
 %feature("docstring")  FormFactorSphereGaussianRadius::radialExtension "double FormFactorSphereGaussianRadius::radialExtension() const override
@@ -1408,8 +1438,6 @@ Returns the (approximate in some cases) radial size of the particle of this form
 ";
 
 %feature("docstring")  FormFactorSphereGaussianRadius::formfactor "complex_t FormFactorSphereGaussianRadius::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. 
 ";
 
 
@@ -1431,6 +1459,8 @@ C++ includes: FormFactorSphereLogNormalRadius.h
 ";
 
 %feature("docstring")  FormFactorSphereLogNormalRadius::clone "FormFactorSphereLogNormalRadius * FormFactorSphereLogNormalRadius::clone() const override
+
+Returns a clone of this  ISampleNode object. 
 ";
 
 %feature("docstring")  FormFactorSphereLogNormalRadius::radialExtension "double FormFactorSphereLogNormalRadius::radialExtension() const override
@@ -1439,8 +1469,6 @@ Returns the (approximate in some cases) radial size of the particle of this form
 ";
 
 %feature("docstring")  FormFactorSphereLogNormalRadius::formfactor "complex_t FormFactorSphereLogNormalRadius::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")  FormFactorSphereLogNormalRadius::pythonConstructor "std::string FormFactorSphereLogNormalRadius::pythonConstructor() const override
@@ -1467,6 +1495,8 @@ C++ includes: FormFactorTetrahedron.h
 ";
 
 %feature("docstring")  FormFactorTetrahedron::clone "FormFactorTetrahedron* FormFactorTetrahedron::clone() const override
+
+Returns a clone of this  ISampleNode object. 
 ";
 
 %feature("docstring")  FormFactorTetrahedron::getBaseEdge "double FormFactorTetrahedron::getBaseEdge() const
@@ -1497,6 +1527,8 @@ C++ includes: FormFactorTruncatedCube.h
 ";
 
 %feature("docstring")  FormFactorTruncatedCube::clone "FormFactorTruncatedCube* FormFactorTruncatedCube::clone() const override
+
+Returns a clone of this  ISampleNode object. 
 ";
 
 %feature("docstring")  FormFactorTruncatedCube::getLength "double FormFactorTruncatedCube::getLength() const
@@ -1524,6 +1556,8 @@ C++ includes: FormFactorTruncatedSphere.h
 ";
 
 %feature("docstring")  FormFactorTruncatedSphere::clone "FormFactorTruncatedSphere* FormFactorTruncatedSphere::clone() const override
+
+Returns a clone of this  ISampleNode object. 
 ";
 
 %feature("docstring")  FormFactorTruncatedSphere::getHeight "double FormFactorTruncatedSphere::getHeight() const
@@ -1564,6 +1598,8 @@ C++ includes: FormFactorTruncatedSpheroid.h
 ";
 
 %feature("docstring")  FormFactorTruncatedSpheroid::clone "FormFactorTruncatedSpheroid* FormFactorTruncatedSpheroid::clone() const override
+
+Returns a clone of this  ISampleNode object. 
 ";
 
 %feature("docstring")  FormFactorTruncatedSpheroid::getRadius "double FormFactorTruncatedSpheroid::getRadius() const
@@ -1584,8 +1620,6 @@ Returns the (approximate in some cases) radial size of the particle of this form
 ";
 
 %feature("docstring")  FormFactorTruncatedSpheroid::formfactor "complex_t FormFactorTruncatedSpheroid::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. 
 ";
 
 
@@ -2237,31 +2271,44 @@ C++ includes: IBornFF.h
 ";
 
 %feature("docstring")  IBornFF::clone "IBornFF* IBornFF::clone() const override=0
+
+Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  IBornFF::theFF "complex_t IBornFF::theFF(const WavevectorInfo &wavevectors) const override
+%feature("docstring")  IBornFF::theFF "complex_t IBornFF::theFF(const WavevectorInfo &wavevectors) const
+";
 
-Returns scattering amplitude for complex wavevectors ki, kf. 
+%feature("docstring")  IBornFF::shapeName "std::string IBornFF::shapeName() const
 ";
 
-%feature("docstring")  IBornFF::thePolFF "Eigen::Matrix2cd IBornFF::thePolFF(const WavevectorInfo &wavevectors) const override
+%feature("docstring")  IBornFF::thePolFF "Eigen::Matrix2cd IBornFF::thePolFF(const WavevectorInfo &wavevectors) const
+";
 
-Returns scattering amplitude for matrix interactions. 
+%feature("docstring")  IBornFF::bottomZ "double IBornFF::bottomZ(const IRotation *rotation) const
 ";
 
-%feature("docstring")  IBornFF::bottomZ "double IBornFF::bottomZ(const IRotation *rotation) const override
+%feature("docstring")  IBornFF::topZ "double IBornFF::topZ(const IRotation *rotation) const
+";
 
-Returns the z-coordinate of the lowest point in this shape after a given rotation. 
+%feature("docstring")  IBornFF::volume "double IBornFF::volume() const
 ";
 
-%feature("docstring")  IBornFF::topZ "double IBornFF::topZ(const IRotation *rotation) const override
+%feature("docstring")  IBornFF::radialExtension "virtual double IBornFF::radialExtension() const =0
 
-Returns the z-coordinate of the lowest point in this shape after a given rotation. 
+Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
+";
+
+%feature("docstring")  IBornFF::formfactor "virtual complex_t IBornFF::formfactor(C3 q) const =0
 ";
 
 %feature("docstring")  IBornFF::createSlicedFormFactor "DecoratedFF * IBornFF::createSlicedFormFactor(ZLimits limits, const IRotation *rot, R3 translation) const
 ";
 
+%feature("docstring")  IBornFF::pythonConstructor "std::string IBornFF::pythonConstructor() const
+
+Creates the Python constructor of this class (or derived classes) 
+";
+
 
 // File: classICosineRipple.xml
 %feature("docstring") ICosineRipple "
@@ -2378,9 +2425,6 @@ C++ includes: IFormFactor.h
 %feature("docstring")  IFormFactor::clone "IFormFactor* IFormFactor::clone() const override=0
 ";
 
-%feature("docstring")  IFormFactor::shapeName "std::string IFormFactor::shapeName() const
-";
-
 %feature("docstring")  IFormFactor::setAmbientMaterial "virtual void IFormFactor::setAmbientMaterial(const Material &)
 
 Passes the material in which this particle is embedded. 
@@ -2411,11 +2455,6 @@ Returns the z-coordinate of the lowest point in this shape after a given rotatio
 Returns scattering amplitude for matrix interactions. 
 ";
 
-%feature("docstring")  IFormFactor::pythonConstructor "std::string IFormFactor::pythonConstructor() const
-
-Creates the Python constructor of this class (or derived classes) 
-";
-
 %feature("docstring")  IFormFactor::volume "double IFormFactor::volume() const
 
 Returns the total volume of the particle of this form factor's shape. 
@@ -2439,23 +2478,15 @@ The mathematics implemented here is described in full detail in a paper by Joach
 ";
 
 %feature("docstring")  IFormFactorPolyhedron::bottomZ "double IFormFactorPolyhedron::bottomZ(const IRotation *rotation) const override
-
-Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 ";
 
 %feature("docstring")  IFormFactorPolyhedron::topZ "double IFormFactorPolyhedron::topZ(const IRotation *rotation) const override
-
-Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 ";
 
 %feature("docstring")  IFormFactorPolyhedron::formfactor "complex_t IFormFactorPolyhedron::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")  IFormFactorPolyhedron::volume "double IFormFactorPolyhedron::volume() const override
-
-Returns the total volume of the particle of this form factor's shape. 
 ";
 
 %feature("docstring")  IFormFactorPolyhedron::radialExtension "double IFormFactorPolyhedron::radialExtension() const override
@@ -2484,13 +2515,9 @@ C++ includes: IFormFactorPrism.h
 ";
 
 %feature("docstring")  IFormFactorPrism::bottomZ "double IFormFactorPrism::bottomZ(const IRotation *rotation) const override
-
-Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 ";
 
 %feature("docstring")  IFormFactorPrism::topZ "double IFormFactorPrism::topZ(const IRotation *rotation) const override
-
-Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 ";
 
 %feature("docstring")  IFormFactorPrism::formfactor "complex_t IFormFactorPrism::formfactor(C3 q) const override
@@ -3445,8 +3472,6 @@ Returns the (approximate in some cases) radial size of the particle of this form
 ";
 
 %feature("docstring")  IProfileRipple::formfactor "complex_t IProfileRipple::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. 
 ";
 
 
diff --git a/auto/Wrap/libBornAgainSample.py b/auto/Wrap/libBornAgainSample.py
index 9aa50d9db776e4fcf1f26f300ab8497ad5f36591..9791d0af2cad2e9c0d3db1b0e1e3a73fc04ac0ee 100644
--- a/auto/Wrap/libBornAgainSample.py
+++ b/auto/Wrap/libBornAgainSample.py
@@ -3253,14 +3253,6 @@ class IFormFactor(libBornAgainBase.ICloneable, libBornAgainParam.INode):
         """
         return _libBornAgainSample.IFormFactor_clone(self)
 
-    def shapeName(self):
-        r"""
-        shapeName(IFormFactor self) -> std::string
-        std::string IFormFactor::shapeName() const
-
-        """
-        return _libBornAgainSample.IFormFactor_shapeName(self)
-
     def setAmbientMaterial(self, arg0):
         r"""
         setAmbientMaterial(IFormFactor self, Material arg0)
@@ -3404,7 +3396,7 @@ class SlicingEffects(object):
 # Register SlicingEffects in _libBornAgainSample:
 _libBornAgainSample.SlicingEffects_swigregister(SlicingEffects)
 
-class IBornFF(IDecoratableBorn):
+class IBornFF(ISampleNode):
     r"""
 
 
@@ -3438,25 +3430,31 @@ class IBornFF(IDecoratableBorn):
         clone(IBornFF self) -> IBornFF
         IBornFF* IBornFF::clone() const override=0
 
+        Returns a clone of this  ISampleNode object. 
+
         """
         return _libBornAgainSample.IBornFF_clone(self)
 
     def theFF(self, wavevectors):
         r"""
         theFF(IBornFF self, WavevectorInfo const & wavevectors) -> complex_t
-        complex_t IBornFF::theFF(const WavevectorInfo &wavevectors) const override
-
-        Returns scattering amplitude for complex wavevectors ki, kf. 
+        complex_t IBornFF::theFF(const WavevectorInfo &wavevectors) const
 
         """
         return _libBornAgainSample.IBornFF_theFF(self, wavevectors)
 
+    def shapeName(self):
+        r"""
+        shapeName(IBornFF self) -> std::string
+        std::string IBornFF::shapeName() const
+
+        """
+        return _libBornAgainSample.IBornFF_shapeName(self)
+
     def bottomZ(self, rotation):
         r"""
         bottomZ(IBornFF self, IRotation rotation) -> double
-        double IBornFF::bottomZ(const IRotation *rotation) const override
-
-        Returns the z-coordinate of the lowest point in this shape after a given rotation. 
+        double IBornFF::bottomZ(const IRotation *rotation) const
 
         """
         return _libBornAgainSample.IBornFF_bottomZ(self, rotation)
@@ -3464,13 +3462,37 @@ class IBornFF(IDecoratableBorn):
     def topZ(self, rotation):
         r"""
         topZ(IBornFF self, IRotation rotation) -> double
-        double IBornFF::topZ(const IRotation *rotation) const override
-
-        Returns the z-coordinate of the lowest point in this shape after a given rotation. 
+        double IBornFF::topZ(const IRotation *rotation) const
 
         """
         return _libBornAgainSample.IBornFF_topZ(self, rotation)
 
+    def volume(self):
+        r"""
+        volume(IBornFF self) -> double
+        double IBornFF::volume() const
+
+        """
+        return _libBornAgainSample.IBornFF_volume(self)
+
+    def radialExtension(self):
+        r"""
+        radialExtension(IBornFF self) -> double
+        virtual double IBornFF::radialExtension() const =0
+
+        Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
+
+        """
+        return _libBornAgainSample.IBornFF_radialExtension(self)
+
+    def formfactor(self, q):
+        r"""
+        formfactor(IBornFF self, C3 q) -> complex_t
+        virtual complex_t IBornFF::formfactor(C3 q) const =0
+
+        """
+        return _libBornAgainSample.IBornFF_formfactor(self, q)
+
     def createSlicedFormFactor(self, limits, rot, translation):
         r"""
         createSlicedFormFactor(IBornFF self, ZLimits limits, IRotation rot, R3 translation) -> DecoratedFF
@@ -3479,6 +3501,16 @@ class IBornFF(IDecoratableBorn):
         """
         return _libBornAgainSample.IBornFF_createSlicedFormFactor(self, limits, rot, translation)
 
+    def pythonConstructor(self):
+        r"""
+        pythonConstructor(IBornFF self) -> std::string
+        std::string IBornFF::pythonConstructor() const
+
+        Creates the Python constructor of this class (or derived classes) 
+
+        """
+        return _libBornAgainSample.IBornFF_pythonConstructor(self)
+
     def canSliceAnalytically(self, rot):
         r"""canSliceAnalytically(IBornFF self, IRotation rot) -> bool"""
         return _libBornAgainSample.IBornFF_canSliceAnalytically(self, rot)
@@ -3622,8 +3654,8 @@ class DecoratedFF(IDecoratableBorn):
 
     def getFormFactor(self):
         r"""
-        getFormFactor(DecoratedFF self) -> IDecoratableBorn
-        const IDecoratableBorn * DecoratedFF::getFormFactor() const
+        getFormFactor(DecoratedFF self) -> IBornFF
+        const IBornFF * DecoratedFF::getFormFactor() const
 
         """
         return _libBornAgainSample.DecoratedFF_getFormFactor(self)
@@ -8406,8 +8438,6 @@ class IFormFactorPolyhedron(IBornFF):
         bottomZ(IFormFactorPolyhedron self, IRotation rotation) -> double
         double IFormFactorPolyhedron::bottomZ(const IRotation *rotation) const override
 
-        Returns the z-coordinate of the lowest point in this shape after a given rotation. 
-
         """
         return _libBornAgainSample.IFormFactorPolyhedron_bottomZ(self, rotation)
 
@@ -8416,8 +8446,6 @@ class IFormFactorPolyhedron(IBornFF):
         topZ(IFormFactorPolyhedron self, IRotation rotation) -> double
         double IFormFactorPolyhedron::topZ(const IRotation *rotation) const override
 
-        Returns the z-coordinate of the lowest point in this shape after a given rotation. 
-
         """
         return _libBornAgainSample.IFormFactorPolyhedron_topZ(self, rotation)
 
@@ -8426,8 +8454,6 @@ class IFormFactorPolyhedron(IBornFF):
         formfactor(IFormFactorPolyhedron self, C3 q) -> complex_t
         complex_t IFormFactorPolyhedron::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. 
-
         """
         return _libBornAgainSample.IFormFactorPolyhedron_formfactor(self, q)
 
@@ -8436,8 +8462,6 @@ class IFormFactorPolyhedron(IBornFF):
         volume(IFormFactorPolyhedron self) -> double
         double IFormFactorPolyhedron::volume() const override
 
-        Returns the total volume of the particle of this form factor's shape. 
-
         """
         return _libBornAgainSample.IFormFactorPolyhedron_volume(self)
 
@@ -8486,8 +8510,6 @@ class IFormFactorPrism(IBornFF):
         bottomZ(IFormFactorPrism self, IRotation rotation) -> double
         double IFormFactorPrism::bottomZ(const IRotation *rotation) const override
 
-        Returns the z-coordinate of the lowest point in this shape after a given rotation. 
-
         """
         return _libBornAgainSample.IFormFactorPrism_bottomZ(self, rotation)
 
@@ -8496,8 +8518,6 @@ class IFormFactorPrism(IBornFF):
         topZ(IFormFactorPrism self, IRotation rotation) -> double
         double IFormFactorPrism::topZ(const IRotation *rotation) const override
 
-        Returns the z-coordinate of the lowest point in this shape after a given rotation. 
-
         """
         return _libBornAgainSample.IFormFactorPrism_topZ(self, rotation)
 
@@ -8597,8 +8617,6 @@ class IProfileRipple(IBornFF):
         formfactor(IProfileRipple self, C3 q) -> complex_t
         complex_t IProfileRipple::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. 
-
         """
         return _libBornAgainSample.IProfileRipple_formfactor(self, q)
     __swig_destroy__ = _libBornAgainSample.delete_IProfileRipple
@@ -8709,6 +8727,8 @@ class FormFactorAnisoPyramid(IFormFactorPolyhedron):
         clone(FormFactorAnisoPyramid self) -> FormFactorAnisoPyramid
         FormFactorAnisoPyramid* FormFactorAnisoPyramid::clone() const override
 
+        Returns a clone of this  ISampleNode object. 
+
         """
         return _libBornAgainSample.FormFactorAnisoPyramid_clone(self)
 
@@ -8783,6 +8803,8 @@ class FormFactorBox(IFormFactorPrism):
         clone(FormFactorBox self) -> FormFactorBox
         FormFactorBox* FormFactorBox::clone() const override
 
+        Returns a clone of this  ISampleNode object. 
+
         """
         return _libBornAgainSample.FormFactorBox_clone(self)
 
@@ -8807,8 +8829,6 @@ class FormFactorBox(IFormFactorPrism):
         volume(FormFactorBox self) -> double
         double FormFactorBox::volume() const override
 
-        Returns the total volume of the particle of this form factor's shape. 
-
         """
         return _libBornAgainSample.FormFactorBox_volume(self)
 
@@ -8827,8 +8847,6 @@ class FormFactorBox(IFormFactorPrism):
         formfactor(FormFactorBox self, C3 q) -> complex_t
         complex_t FormFactorBox::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. 
-
         """
         return _libBornAgainSample.FormFactorBox_formfactor(self, q)
     __swig_destroy__ = _libBornAgainSample.delete_FormFactorBox
@@ -8871,6 +8889,8 @@ class FormFactorCantellatedCube(IFormFactorPolyhedron):
         clone(FormFactorCantellatedCube self) -> FormFactorCantellatedCube
         FormFactorCantellatedCube* FormFactorCantellatedCube::clone() const override
 
+        Returns a clone of this  ISampleNode object. 
+
         """
         return _libBornAgainSample.FormFactorCantellatedCube_clone(self)
 
@@ -8929,6 +8949,8 @@ class FormFactorCone(IBornFF):
         clone(FormFactorCone self) -> FormFactorCone
         FormFactorCone* FormFactorCone::clone() const override
 
+        Returns a clone of this  ISampleNode object. 
+
         """
         return _libBornAgainSample.FormFactorCone_clone(self)
 
@@ -8971,8 +8993,6 @@ class FormFactorCone(IBornFF):
         formfactor(FormFactorCone self, C3 q) -> complex_t
         complex_t FormFactorCone::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. 
-
         """
         return _libBornAgainSample.FormFactorCone_formfactor(self, q)
     __swig_destroy__ = _libBornAgainSample.delete_FormFactorCone
@@ -9015,6 +9035,8 @@ class FormFactorCone6(IFormFactorPolyhedron):
         clone(FormFactorCone6 self) -> FormFactorCone6
         FormFactorCone6* FormFactorCone6::clone() const override
 
+        Returns a clone of this  ISampleNode object. 
+
         """
         return _libBornAgainSample.FormFactorCone6_clone(self)
 
@@ -9081,6 +9103,8 @@ class FormFactorCosineRippleBox(ICosineRipple):
         clone(FormFactorCosineRippleBox self) -> FormFactorCosineRippleBox
         FormFactorCosineRippleBox * FormFactorCosineRippleBox::clone() const override
 
+        Returns a clone of this  ISampleNode object. 
+
         """
         return _libBornAgainSample.FormFactorCosineRippleBox_clone(self)
     __swig_destroy__ = _libBornAgainSample.delete_FormFactorCosineRippleBox
@@ -9123,6 +9147,8 @@ class FormFactorCosineRippleGauss(ICosineRipple):
         clone(FormFactorCosineRippleGauss self) -> FormFactorCosineRippleGauss
         FormFactorCosineRippleGauss * FormFactorCosineRippleGauss::clone() const override
 
+        Returns a clone of this  ISampleNode object. 
+
         """
         return _libBornAgainSample.FormFactorCosineRippleGauss_clone(self)
     __swig_destroy__ = _libBornAgainSample.delete_FormFactorCosineRippleGauss
@@ -9165,6 +9191,8 @@ class FormFactorCosineRippleLorentz(ICosineRipple):
         clone(FormFactorCosineRippleLorentz self) -> FormFactorCosineRippleLorentz
         FormFactorCosineRippleLorentz * FormFactorCosineRippleLorentz::clone() const override
 
+        Returns a clone of this  ISampleNode object. 
+
         """
         return _libBornAgainSample.FormFactorCosineRippleLorentz_clone(self)
     __swig_destroy__ = _libBornAgainSample.delete_FormFactorCosineRippleLorentz
@@ -9207,6 +9235,8 @@ class FormFactorCuboctahedron(IFormFactorPolyhedron):
         clone(FormFactorCuboctahedron self) -> FormFactorCuboctahedron
         FormFactorCuboctahedron* FormFactorCuboctahedron::clone() const override
 
+        Returns a clone of this  ISampleNode object. 
+
         """
         return _libBornAgainSample.FormFactorCuboctahedron_clone(self)
 
@@ -9281,6 +9311,8 @@ class FormFactorCylinder(IBornFF):
         clone(FormFactorCylinder self) -> FormFactorCylinder
         FormFactorCylinder* FormFactorCylinder::clone() const override
 
+        Returns a clone of this  ISampleNode object. 
+
         """
         return _libBornAgainSample.FormFactorCylinder_clone(self)
 
@@ -9315,8 +9347,6 @@ class FormFactorCylinder(IBornFF):
         formfactor(FormFactorCylinder self, C3 q) -> complex_t
         complex_t FormFactorCylinder::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. 
-
         """
         return _libBornAgainSample.FormFactorCylinder_formfactor(self, q)
     __swig_destroy__ = _libBornAgainSample.delete_FormFactorCylinder
@@ -9359,6 +9389,8 @@ class FormFactorDodecahedron(IFormFactorPolyhedron):
         clone(FormFactorDodecahedron self) -> FormFactorDodecahedron
         FormFactorDodecahedron* FormFactorDodecahedron::clone() const override
 
+        Returns a clone of this  ISampleNode object. 
+
         """
         return _libBornAgainSample.FormFactorDodecahedron_clone(self)
 
@@ -9409,6 +9441,8 @@ class FormFactorEllipsoidalCylinder(IBornFF):
         clone(FormFactorEllipsoidalCylinder self) -> FormFactorEllipsoidalCylinder
         FormFactorEllipsoidalCylinder* FormFactorEllipsoidalCylinder::clone() const override
 
+        Returns a clone of this  ISampleNode object. 
+
         """
         return _libBornAgainSample.FormFactorEllipsoidalCylinder_clone(self)
 
@@ -9451,8 +9485,6 @@ class FormFactorEllipsoidalCylinder(IBornFF):
         formfactor(FormFactorEllipsoidalCylinder self, C3 q) -> complex_t
         complex_t FormFactorEllipsoidalCylinder::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. 
-
         """
         return _libBornAgainSample.FormFactorEllipsoidalCylinder_formfactor(self, q)
     __swig_destroy__ = _libBornAgainSample.delete_FormFactorEllipsoidalCylinder
@@ -9495,6 +9527,8 @@ class FormFactorFullSphere(IBornFF):
         clone(FormFactorFullSphere self) -> FormFactorFullSphere
         FormFactorFullSphere* FormFactorFullSphere::clone() const override
 
+        Returns a clone of this  ISampleNode object. 
+
         """
         return _libBornAgainSample.FormFactorFullSphere_clone(self)
 
@@ -9521,8 +9555,6 @@ class FormFactorFullSphere(IBornFF):
         bottomZ(FormFactorFullSphere self, IRotation rotation) -> double
         double FormFactorFullSphere::bottomZ(const IRotation *rotation) const override
 
-        Returns the z-coordinate of the lowest point in this shape after a given rotation. 
-
         """
         return _libBornAgainSample.FormFactorFullSphere_bottomZ(self, rotation)
 
@@ -9531,8 +9563,6 @@ class FormFactorFullSphere(IBornFF):
         topZ(FormFactorFullSphere self, IRotation rotation) -> double
         double FormFactorFullSphere::topZ(const IRotation *rotation) const override
 
-        Returns the z-coordinate of the lowest point in this shape after a given rotation. 
-
         """
         return _libBornAgainSample.FormFactorFullSphere_topZ(self, rotation)
 
@@ -9541,8 +9571,6 @@ class FormFactorFullSphere(IBornFF):
         formfactor(FormFactorFullSphere self, C3 q) -> complex_t
         complex_t FormFactorFullSphere::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. 
-
         """
         return _libBornAgainSample.FormFactorFullSphere_formfactor(self, q)
     __swig_destroy__ = _libBornAgainSample.delete_FormFactorFullSphere
@@ -9585,6 +9613,8 @@ class FormFactorFullSpheroid(IBornFF):
         clone(FormFactorFullSpheroid self) -> FormFactorFullSpheroid
         FormFactorFullSpheroid* FormFactorFullSpheroid::clone() const override
 
+        Returns a clone of this  ISampleNode object. 
+
         """
         return _libBornAgainSample.FormFactorFullSpheroid_clone(self)
 
@@ -9619,8 +9649,6 @@ class FormFactorFullSpheroid(IBornFF):
         formfactor(FormFactorFullSpheroid self, C3 q) -> complex_t
         complex_t FormFactorFullSpheroid::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. 
-
         """
         return _libBornAgainSample.FormFactorFullSpheroid_formfactor(self, q)
     __swig_destroy__ = _libBornAgainSample.delete_FormFactorFullSpheroid
@@ -9664,6 +9692,8 @@ class FormFactorHemiEllipsoid(IBornFF):
         clone(FormFactorHemiEllipsoid self) -> FormFactorHemiEllipsoid
         FormFactorHemiEllipsoid* FormFactorHemiEllipsoid::clone() const override
 
+        Returns a clone of this  ISampleNode object. 
+
         """
         return _libBornAgainSample.FormFactorHemiEllipsoid_clone(self)
 
@@ -9706,8 +9736,6 @@ class FormFactorHemiEllipsoid(IBornFF):
         formfactor(FormFactorHemiEllipsoid self, C3 q) -> complex_t
         complex_t FormFactorHemiEllipsoid::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. 
-
         """
         return _libBornAgainSample.FormFactorHemiEllipsoid_formfactor(self, q)
 
@@ -9749,6 +9777,8 @@ class FormFactorHollowSphere(IBornFF):
         clone(FormFactorHollowSphere self) -> FormFactorHollowSphere
         FormFactorHollowSphere* FormFactorHollowSphere::clone() const override
 
+        Returns a clone of this  ISampleNode object. 
+
         """
         return _libBornAgainSample.FormFactorHollowSphere_clone(self)
 
@@ -9767,8 +9797,6 @@ class FormFactorHollowSphere(IBornFF):
         formfactor(FormFactorHollowSphere self, C3 q) -> complex_t
         complex_t FormFactorHollowSphere::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. 
-
         """
         return _libBornAgainSample.FormFactorHollowSphere_formfactor(self, q)
     __swig_destroy__ = _libBornAgainSample.delete_FormFactorHollowSphere
@@ -9811,6 +9839,8 @@ class FormFactorIcosahedron(IFormFactorPolyhedron):
         clone(FormFactorIcosahedron self) -> FormFactorIcosahedron
         FormFactorIcosahedron* FormFactorIcosahedron::clone() const override
 
+        Returns a clone of this  ISampleNode object. 
+
         """
         return _libBornAgainSample.FormFactorIcosahedron_clone(self)
 
@@ -9861,6 +9891,8 @@ class FormFactorLongBoxGauss(IBornFF):
         clone(FormFactorLongBoxGauss self) -> FormFactorLongBoxGauss
         FormFactorLongBoxGauss* FormFactorLongBoxGauss::clone() const override
 
+        Returns a clone of this  ISampleNode object. 
+
         """
         return _libBornAgainSample.FormFactorLongBoxGauss_clone(self)
 
@@ -9903,8 +9935,6 @@ class FormFactorLongBoxGauss(IBornFF):
         formfactor(FormFactorLongBoxGauss self, C3 q) -> complex_t
         complex_t FormFactorLongBoxGauss::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. 
-
         """
         return _libBornAgainSample.FormFactorLongBoxGauss_formfactor(self, q)
     __swig_destroy__ = _libBornAgainSample.delete_FormFactorLongBoxGauss
@@ -9947,6 +9977,8 @@ class FormFactorLongBoxLorentz(IBornFF):
         clone(FormFactorLongBoxLorentz self) -> FormFactorLongBoxLorentz
         FormFactorLongBoxLorentz* FormFactorLongBoxLorentz::clone() const override
 
+        Returns a clone of this  ISampleNode object. 
+
         """
         return _libBornAgainSample.FormFactorLongBoxLorentz_clone(self)
 
@@ -9989,8 +10021,6 @@ class FormFactorLongBoxLorentz(IBornFF):
         formfactor(FormFactorLongBoxLorentz self, C3 q) -> complex_t
         complex_t FormFactorLongBoxLorentz::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. 
-
         """
         return _libBornAgainSample.FormFactorLongBoxLorentz_formfactor(self, q)
     __swig_destroy__ = _libBornAgainSample.delete_FormFactorLongBoxLorentz
@@ -10033,6 +10063,8 @@ class FormFactorPrism3(IFormFactorPrism):
         clone(FormFactorPrism3 self) -> FormFactorPrism3
         FormFactorPrism3* FormFactorPrism3::clone() const override
 
+        Returns a clone of this  ISampleNode object. 
+
         """
         return _libBornAgainSample.FormFactorPrism3_clone(self)
 
@@ -10083,6 +10115,8 @@ class FormFactorPrism6(IFormFactorPrism):
         clone(FormFactorPrism6 self) -> FormFactorPrism6
         FormFactorPrism6* FormFactorPrism6::clone() const override
 
+        Returns a clone of this  ISampleNode object. 
+
         """
         return _libBornAgainSample.FormFactorPrism6_clone(self)
 
@@ -10133,6 +10167,8 @@ class FormFactorPyramid(IFormFactorPolyhedron):
         clone(FormFactorPyramid self) -> FormFactorPyramid
         FormFactorPyramid* FormFactorPyramid::clone() const override
 
+        Returns a clone of this  ISampleNode object. 
+
         """
         return _libBornAgainSample.FormFactorPyramid_clone(self)
 
@@ -10199,6 +10235,8 @@ class FormFactorSawtoothRippleBox(ISawtoothRipple):
         clone(FormFactorSawtoothRippleBox self) -> FormFactorSawtoothRippleBox
         FormFactorSawtoothRippleBox * FormFactorSawtoothRippleBox::clone() const override
 
+        Returns a clone of this  ISampleNode object. 
+
         """
         return _libBornAgainSample.FormFactorSawtoothRippleBox_clone(self)
     __swig_destroy__ = _libBornAgainSample.delete_FormFactorSawtoothRippleBox
@@ -10241,6 +10279,8 @@ class FormFactorSawtoothRippleGauss(ISawtoothRipple):
         clone(FormFactorSawtoothRippleGauss self) -> FormFactorSawtoothRippleGauss
         FormFactorSawtoothRippleGauss * FormFactorSawtoothRippleGauss::clone() const override
 
+        Returns a clone of this  ISampleNode object. 
+
         """
         return _libBornAgainSample.FormFactorSawtoothRippleGauss_clone(self)
     __swig_destroy__ = _libBornAgainSample.delete_FormFactorSawtoothRippleGauss
@@ -10283,6 +10323,8 @@ class FormFactorSawtoothRippleLorentz(ISawtoothRipple):
         clone(FormFactorSawtoothRippleLorentz self) -> FormFactorSawtoothRippleLorentz
         FormFactorSawtoothRippleLorentz * FormFactorSawtoothRippleLorentz::clone() const override
 
+        Returns a clone of this  ISampleNode object. 
+
         """
         return _libBornAgainSample.FormFactorSawtoothRippleLorentz_clone(self)
     __swig_destroy__ = _libBornAgainSample.delete_FormFactorSawtoothRippleLorentz
@@ -10325,6 +10367,8 @@ class FormFactorTetrahedron(IFormFactorPolyhedron):
         clone(FormFactorTetrahedron self) -> FormFactorTetrahedron
         FormFactorTetrahedron* FormFactorTetrahedron::clone() const override
 
+        Returns a clone of this  ISampleNode object. 
+
         """
         return _libBornAgainSample.FormFactorTetrahedron_clone(self)
 
@@ -10391,6 +10435,8 @@ class FormFactorTruncatedCube(IFormFactorPolyhedron):
         clone(FormFactorTruncatedCube self) -> FormFactorTruncatedCube
         FormFactorTruncatedCube* FormFactorTruncatedCube::clone() const override
 
+        Returns a clone of this  ISampleNode object. 
+
         """
         return _libBornAgainSample.FormFactorTruncatedCube_clone(self)
 
@@ -10449,6 +10495,8 @@ class FormFactorTruncatedSphere(IBornFF):
         clone(FormFactorTruncatedSphere self) -> FormFactorTruncatedSphere
         FormFactorTruncatedSphere* FormFactorTruncatedSphere::clone() const override
 
+        Returns a clone of this  ISampleNode object. 
+
         """
         return _libBornAgainSample.FormFactorTruncatedSphere_clone(self)
 
@@ -10535,6 +10583,8 @@ class FormFactorTruncatedSpheroid(IBornFF):
         clone(FormFactorTruncatedSpheroid self) -> FormFactorTruncatedSpheroid
         FormFactorTruncatedSpheroid* FormFactorTruncatedSpheroid::clone() const override
 
+        Returns a clone of this  ISampleNode object. 
+
         """
         return _libBornAgainSample.FormFactorTruncatedSpheroid_clone(self)
 
@@ -10585,8 +10635,6 @@ class FormFactorTruncatedSpheroid(IBornFF):
         formfactor(FormFactorTruncatedSpheroid self, C3 q) -> complex_t
         complex_t FormFactorTruncatedSpheroid::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. 
-
         """
         return _libBornAgainSample.FormFactorTruncatedSpheroid_formfactor(self, q)
     __swig_destroy__ = _libBornAgainSample.delete_FormFactorTruncatedSpheroid
@@ -10629,6 +10677,8 @@ class FormFactorGaussSphere(IBornFF):
         clone(FormFactorGaussSphere self) -> FormFactorGaussSphere
         FormFactorGaussSphere* FormFactorGaussSphere::clone() const override
 
+        Returns a clone of this  ISampleNode object. 
+
         """
         return _libBornAgainSample.FormFactorGaussSphere_clone(self)
 
@@ -10655,8 +10705,6 @@ class FormFactorGaussSphere(IBornFF):
         formfactor(FormFactorGaussSphere self, C3 q) -> complex_t
         complex_t FormFactorGaussSphere::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. 
-
         """
         return _libBornAgainSample.FormFactorGaussSphere_formfactor(self, q)
     __swig_destroy__ = _libBornAgainSample.delete_FormFactorGaussSphere
@@ -10699,6 +10747,8 @@ class FormFactorSphereGaussianRadius(IBornFF):
         clone(FormFactorSphereGaussianRadius self) -> FormFactorSphereGaussianRadius
         FormFactorSphereGaussianRadius* FormFactorSphereGaussianRadius::clone() const override
 
+        Returns a clone of this  ISampleNode object. 
+
         """
         return _libBornAgainSample.FormFactorSphereGaussianRadius_clone(self)
 
@@ -10717,8 +10767,6 @@ class FormFactorSphereGaussianRadius(IBornFF):
         formfactor(FormFactorSphereGaussianRadius self, C3 q) -> complex_t
         complex_t FormFactorSphereGaussianRadius::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. 
-
         """
         return _libBornAgainSample.FormFactorSphereGaussianRadius_formfactor(self, q)
     __swig_destroy__ = _libBornAgainSample.delete_FormFactorSphereGaussianRadius
@@ -10761,6 +10809,8 @@ class FormFactorSphereLogNormalRadius(IBornFF):
         clone(FormFactorSphereLogNormalRadius self) -> FormFactorSphereLogNormalRadius
         FormFactorSphereLogNormalRadius * FormFactorSphereLogNormalRadius::clone() const override
 
+        Returns a clone of this  ISampleNode object. 
+
         """
         return _libBornAgainSample.FormFactorSphereLogNormalRadius_clone(self)
 
@@ -10779,8 +10829,6 @@ class FormFactorSphereLogNormalRadius(IBornFF):
         formfactor(FormFactorSphereLogNormalRadius self, C3 q) -> complex_t
         complex_t FormFactorSphereLogNormalRadius::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. 
-
         """
         return _libBornAgainSample.FormFactorSphereLogNormalRadius_formfactor(self, q)
     __swig_destroy__ = _libBornAgainSample.delete_FormFactorSphereLogNormalRadius
diff --git a/auto/Wrap/libBornAgainSample_wrap.cpp b/auto/Wrap/libBornAgainSample_wrap.cpp
index e8fca0d064b686058e1bf9203071c04c4116bf3b..2e6a28b7fb85fa84eea6d06643675c8139abf2fc 100644
--- a/auto/Wrap/libBornAgainSample_wrap.cpp
+++ b/auto/Wrap/libBornAgainSample_wrap.cpp
@@ -8612,27 +8612,38 @@ std::vector< INode const *, std::allocator< INode const * > > SwigDirector_IBorn
 }
 
 
-void SwigDirector_IBornFF::setAmbientMaterial(Material const &arg0) {
-  swig::SwigVar_PyObject obj0;
-  obj0 = SWIG_NewPointerObj(SWIG_as_voidptr(&arg0), SWIGTYPE_p_Material,  0 );
+Material const *SwigDirector_IBornFF::material() const {
+  Material *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 IBornFF.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 4;
-  const char *const swig_method_name = "setAmbientMaterial";
+  const char *const swig_method_name = "material";
   PyObject *method = swig_get_method(swig_method_index, swig_method_name);
-  swig::SwigVar_PyObject result = PyObject_CallFunctionObjArgs(method ,(PyObject *)obj0, NULL);
+  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("setAmbientMaterial");
-  swig::SwigVar_PyObject result = PyObject_CallMethodObjArgs(swig_get_self(), (PyObject *) swig_method_name ,(PyObject *)obj0, NULL);
+  swig::SwigVar_PyObject swig_method_name = SWIG_Python_str_FromChar("material");
+  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 'IBornFF.setAmbientMaterial'");
+      Swig::DirectorMethodException::raise("Error detected when calling 'IBornFF.material'");
     }
   }
+  swig_res = SWIG_ConvertPtrAndOwn(result, &swig_argp, SWIGTYPE_p_Material,  0  | SWIG_POINTER_DISOWN, &own);
+  if (!SWIG_IsOK(swig_res)) {
+    Swig::DirectorTypeMismatchException::raise(SWIG_ErrorType(SWIG_ArgError(swig_res)), "in output value of type '""Material const *""'");
+  }
+  c_result = reinterpret_cast< Material * >(swig_argp);
+  swig_acquire_ownership_obj(SWIG_as_voidptr(c_result), own /* & TODO: SWIG_POINTER_OWN */);
+  return (Material const *) c_result;
 }
 
 
@@ -8668,26 +8679,27 @@ complex_t SwigDirector_IBornFF::theFF(WavevectorInfo const &wavevectors) const {
 }
 
 
-double SwigDirector_IBornFF::radialExtension() const {
+double SwigDirector_IBornFF::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 IBornFF.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 6;
-  const char *const swig_method_name = "radialExtension";
+  const char *const swig_method_name = "bottomZ";
   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);
+  swig::SwigVar_PyObject result = PyObject_CallFunctionObjArgs(method ,(PyObject *)obj0, 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);
+  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 'IBornFF.radialExtension'");
+      Swig::DirectorMethodException::raise("Error detected when calling 'IBornFF.bottomZ'");
     }
   }
   double swig_val;
@@ -8700,7 +8712,7 @@ double SwigDirector_IBornFF::radialExtension() const {
 }
 
 
-double SwigDirector_IBornFF::bottomZ(IRotation const *rotation) const {
+double SwigDirector_IBornFF::topZ(IRotation const *rotation) const {
   double c_result = SwigValueInit< double >() ;
   
   swig::SwigVar_PyObject obj0;
@@ -8710,17 +8722,17 @@ double SwigDirector_IBornFF::bottomZ(IRotation const *rotation) const {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 7;
-  const char *const swig_method_name = "bottomZ";
+  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("bottomZ");
+  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 'IBornFF.bottomZ'");
+      Swig::DirectorMethodException::raise("Error detected when calling 'IBornFF.topZ'");
     }
   }
   double swig_val;
@@ -8733,27 +8745,58 @@ double SwigDirector_IBornFF::bottomZ(IRotation const *rotation) const {
 }
 
 
-double SwigDirector_IBornFF::topZ(IRotation const *rotation) const {
+double SwigDirector_IBornFF::volume() 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 IBornFF.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 8;
-  const char *const swig_method_name = "topZ";
+  const char *const swig_method_name = "volume";
   PyObject *method = swig_get_method(swig_method_index, swig_method_name);
-  swig::SwigVar_PyObject result = PyObject_CallFunctionObjArgs(method ,(PyObject *)obj0, NULL);
+  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("topZ");
-  swig::SwigVar_PyObject result = PyObject_CallMethodObjArgs(swig_get_self(), (PyObject *) swig_method_name ,(PyObject *)obj0, NULL);
+  swig::SwigVar_PyObject swig_method_name = SWIG_Python_str_FromChar("volume");
+  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 'IBornFF.topZ'");
+      Swig::DirectorMethodException::raise("Error detected when calling 'IBornFF.volume'");
+    }
+  }
+  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_IBornFF::radialExtension() const {
+  double c_result = SwigValueInit< double >() ;
+  
+  if (!swig_get_self()) {
+    Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IBornFF.__init__.");
+  }
+#if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
+  const size_t swig_method_index = 9;
+  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 'IBornFF.radialExtension'");
     }
   }
   double swig_val;
@@ -8774,7 +8817,7 @@ complex_t SwigDirector_IBornFF::formfactor(C3 q) const {
     Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IBornFF.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
-  const size_t swig_method_index = 9;
+  const size_t swig_method_index = 10;
   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);
@@ -8798,6 +8841,38 @@ complex_t SwigDirector_IBornFF::formfactor(C3 q) const {
 }
 
 
+std::string SwigDirector_IBornFF::pythonConstructor() const {
+  std::string c_result;
+  if (!swig_get_self()) {
+    Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IBornFF.__init__.");
+  }
+#if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
+  const size_t swig_method_index = 11;
+  const char *const swig_method_name = "pythonConstructor";
+  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("pythonConstructor");
+  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 'IBornFF.pythonConstructor'");
+    }
+  }
+  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;
+}
+
+
 bool SwigDirector_IBornFF::canSliceAnalytically(IRotation const *rot) const {
   bool c_result = SwigValueInit< bool >() ;
   
@@ -8808,7 +8883,7 @@ bool SwigDirector_IBornFF::canSliceAnalytically(IRotation const *rot) const {
     Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IBornFF.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
-  const size_t swig_method_index = 10;
+  const size_t swig_method_index = 12;
   const char *const swig_method_name = "canSliceAnalytically";
   PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunctionObjArgs(method ,(PyObject *)obj0, NULL);
@@ -8850,7 +8925,7 @@ DecoratedFF *SwigDirector_IBornFF::sliceFormFactor(ZLimits limits, IRotation con
     Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IBornFF.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
-  const size_t swig_method_index = 11;
+  const size_t swig_method_index = 13;
   const char *const swig_method_name = "sliceFormFactor";
   PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunctionObjArgs(method ,(PyObject *)obj0,(PyObject *)obj1,(PyObject *)obj2, NULL);
@@ -39970,29 +40045,6 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_IFormFactor_shapeName(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  IFormFactor *arg1 = (IFormFactor *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  std::string result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IFormFactor, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFormFactor_shapeName" "', argument " "1"" of type '" "IFormFactor const *""'"); 
-  }
-  arg1 = reinterpret_cast< IFormFactor * >(argp1);
-  result = ((IFormFactor const *)arg1)->shapeName();
-  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
 SWIGINTERN PyObject *_wrap_IFormFactor_setAmbientMaterial(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   IFormFactor *arg1 = (IFormFactor *) 0 ;
@@ -40924,6 +40976,29 @@ fail:
 }
 
 
+SWIGINTERN PyObject *_wrap_IBornFF_shapeName(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  IBornFF *arg1 = (IBornFF *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  std::string result;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IBornFF, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IBornFF_shapeName" "', argument " "1"" of type '" "IBornFF const *""'"); 
+  }
+  arg1 = reinterpret_cast< IBornFF * >(argp1);
+  result = ((IBornFF const *)arg1)->shapeName();
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
 SWIGINTERN PyObject *_wrap_IBornFF_bottomZ(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   IBornFF *arg1 = (IBornFF *) 0 ;
@@ -41008,6 +41083,126 @@ fail:
 }
 
 
+SWIGINTERN PyObject *_wrap_IBornFF_volume(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  IBornFF *arg1 = (IBornFF *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Swig::Director *director = 0;
+  bool upcall = false;
+  double result;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IBornFF, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IBornFF_volume" "', argument " "1"" of type '" "IBornFF const *""'"); 
+  }
+  arg1 = reinterpret_cast< IBornFF * >(argp1);
+  director = SWIG_DIRECTOR_CAST(arg1);
+  upcall = (director && (director->swig_get_self()==swig_obj[0]));
+  try {
+    if (upcall) {
+      result = (double)((IBornFF const *)arg1)->IBornFF::volume();
+    } else {
+      result = (double)((IBornFF const *)arg1)->volume();
+    }
+  } catch (Swig::DirectorException&) {
+    SWIG_fail;
+  }
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_IBornFF_radialExtension(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  IBornFF *arg1 = (IBornFF *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Swig::Director *director = 0;
+  bool upcall = false;
+  double result;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IBornFF, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IBornFF_radialExtension" "', argument " "1"" of type '" "IBornFF const *""'"); 
+  }
+  arg1 = reinterpret_cast< IBornFF * >(argp1);
+  director = SWIG_DIRECTOR_CAST(arg1);
+  upcall = (director && (director->swig_get_self()==swig_obj[0]));
+  try {
+    if (upcall) {
+      Swig::DirectorPureVirtualException::raise("IBornFF::radialExtension");
+    } else {
+      result = (double)((IBornFF const *)arg1)->radialExtension();
+    }
+  } catch (Swig::DirectorException&) {
+    SWIG_fail;
+  }
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_IBornFF_formfactor(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  IBornFF *arg1 = (IBornFF *) 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, "IBornFF_formfactor", 2, 2, swig_obj)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IBornFF, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IBornFF_formfactor" "', argument " "1"" of type '" "IBornFF const *""'"); 
+  }
+  arg1 = reinterpret_cast< IBornFF * >(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 '" "IBornFF_formfactor" "', argument " "2"" of type '" "C3""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "IBornFF_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("IBornFF::formfactor");
+    } else {
+      result = ((IBornFF 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_IBornFF_createSlicedFormFactor(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   IBornFF *arg1 = (IBornFF *) 0 ;
@@ -41070,6 +41265,41 @@ fail:
 }
 
 
+SWIGINTERN PyObject *_wrap_IBornFF_pythonConstructor(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  IBornFF *arg1 = (IBornFF *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Swig::Director *director = 0;
+  bool upcall = false;
+  std::string result;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IBornFF, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IBornFF_pythonConstructor" "', argument " "1"" of type '" "IBornFF const *""'"); 
+  }
+  arg1 = reinterpret_cast< IBornFF * >(argp1);
+  director = SWIG_DIRECTOR_CAST(arg1);
+  upcall = (director && (director->swig_get_self()==swig_obj[0]));
+  try {
+    if (upcall) {
+      result = ((IBornFF const *)arg1)->IBornFF::pythonConstructor();
+    } else {
+      result = ((IBornFF const *)arg1)->pythonConstructor();
+    }
+  } catch (Swig::DirectorException&) {
+    SWIG_fail;
+  }
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
 SWIGINTERN PyObject *_wrap_IBornFF_canSliceAnalytically(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   IBornFF *arg1 = (IBornFF *) 0 ;
@@ -41606,7 +41836,7 @@ SWIGINTERN PyObject *_wrap_DecoratedFF_getFormFactor(PyObject *SWIGUNUSEDPARM(se
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
   Swig::Director *director = 0;
-  IDecoratableBorn *result = 0 ;
+  IBornFF *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
@@ -41615,13 +41845,13 @@ SWIGINTERN PyObject *_wrap_DecoratedFF_getFormFactor(PyObject *SWIGUNUSEDPARM(se
     SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "DecoratedFF_getFormFactor" "', argument " "1"" of type '" "DecoratedFF const *""'"); 
   }
   arg1 = reinterpret_cast< DecoratedFF * >(argp1);
-  result = (IDecoratableBorn *)((DecoratedFF const *)arg1)->getFormFactor();
+  result = (IBornFF *)((DecoratedFF const *)arg1)->getFormFactor();
   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 );
+    resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IBornFF, 0 |  0 );
   }
   return resultobj;
 fail:
@@ -69404,11 +69634,6 @@ static PyMethodDef SwigMethods[] = {
 		"IFormFactor* IFormFactor::clone() const override=0\n"
 		"\n"
 		""},
-	 { "IFormFactor_shapeName", _wrap_IFormFactor_shapeName, METH_O, "\n"
-		"IFormFactor_shapeName(IFormFactor self) -> std::string\n"
-		"std::string IFormFactor::shapeName() const\n"
-		"\n"
-		""},
 	 { "IFormFactor_setAmbientMaterial", _wrap_IFormFactor_setAmbientMaterial, METH_VARARGS, "\n"
 		"IFormFactor_setAmbientMaterial(IFormFactor self, Material arg0)\n"
 		"virtual void IFormFactor::setAmbientMaterial(const Material &)\n"
@@ -69506,26 +69731,44 @@ static PyMethodDef SwigMethods[] = {
 		"IBornFF_clone(IBornFF self) -> IBornFF\n"
 		"IBornFF* IBornFF::clone() const override=0\n"
 		"\n"
+		"Returns a clone of this  ISampleNode object. \n"
+		"\n"
 		""},
 	 { "IBornFF_theFF", _wrap_IBornFF_theFF, METH_VARARGS, "\n"
 		"IBornFF_theFF(IBornFF self, WavevectorInfo const & wavevectors) -> complex_t\n"
-		"complex_t IBornFF::theFF(const WavevectorInfo &wavevectors) const override\n"
+		"complex_t IBornFF::theFF(const WavevectorInfo &wavevectors) const\n"
 		"\n"
-		"Returns scattering amplitude for complex wavevectors ki, kf. \n"
+		""},
+	 { "IBornFF_shapeName", _wrap_IBornFF_shapeName, METH_O, "\n"
+		"IBornFF_shapeName(IBornFF self) -> std::string\n"
+		"std::string IBornFF::shapeName() const\n"
 		"\n"
 		""},
 	 { "IBornFF_bottomZ", _wrap_IBornFF_bottomZ, METH_VARARGS, "\n"
 		"IBornFF_bottomZ(IBornFF self, IRotation rotation) -> double\n"
-		"double IBornFF::bottomZ(const IRotation *rotation) const override\n"
-		"\n"
-		"Returns the z-coordinate of the lowest point in this shape after a given rotation. \n"
+		"double IBornFF::bottomZ(const IRotation *rotation) const\n"
 		"\n"
 		""},
 	 { "IBornFF_topZ", _wrap_IBornFF_topZ, METH_VARARGS, "\n"
 		"IBornFF_topZ(IBornFF self, IRotation rotation) -> double\n"
-		"double IBornFF::topZ(const IRotation *rotation) const override\n"
+		"double IBornFF::topZ(const IRotation *rotation) const\n"
 		"\n"
-		"Returns the z-coordinate of the lowest point in this shape after a given rotation. \n"
+		""},
+	 { "IBornFF_volume", _wrap_IBornFF_volume, METH_O, "\n"
+		"IBornFF_volume(IBornFF self) -> double\n"
+		"double IBornFF::volume() const\n"
+		"\n"
+		""},
+	 { "IBornFF_radialExtension", _wrap_IBornFF_radialExtension, METH_O, "\n"
+		"IBornFF_radialExtension(IBornFF self) -> double\n"
+		"virtual double IBornFF::radialExtension() const =0\n"
+		"\n"
+		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
+		"\n"
+		""},
+	 { "IBornFF_formfactor", _wrap_IBornFF_formfactor, METH_VARARGS, "\n"
+		"IBornFF_formfactor(IBornFF self, C3 q) -> complex_t\n"
+		"virtual complex_t IBornFF::formfactor(C3 q) const =0\n"
 		"\n"
 		""},
 	 { "IBornFF_createSlicedFormFactor", _wrap_IBornFF_createSlicedFormFactor, METH_VARARGS, "\n"
@@ -69533,6 +69776,13 @@ static PyMethodDef SwigMethods[] = {
 		"DecoratedFF * IBornFF::createSlicedFormFactor(ZLimits limits, const IRotation *rot, R3 translation) const\n"
 		"\n"
 		""},
+	 { "IBornFF_pythonConstructor", _wrap_IBornFF_pythonConstructor, METH_O, "\n"
+		"IBornFF_pythonConstructor(IBornFF self) -> std::string\n"
+		"std::string IBornFF::pythonConstructor() const\n"
+		"\n"
+		"Creates the Python constructor of this class (or derived classes) \n"
+		"\n"
+		""},
 	 { "IBornFF_canSliceAnalytically", _wrap_IBornFF_canSliceAnalytically, METH_VARARGS, "IBornFF_canSliceAnalytically(IBornFF self, IRotation rot) -> bool"},
 	 { "IBornFF_sliceFormFactor", _wrap_IBornFF_sliceFormFactor, METH_VARARGS, "IBornFF_sliceFormFactor(IBornFF self, ZLimits limits, IRotation rot, R3 translation) -> DecoratedFF"},
 	 { "disown_IBornFF", _wrap_disown_IBornFF, METH_O, NULL},
@@ -69618,8 +69868,8 @@ static PyMethodDef SwigMethods[] = {
 		"\n"
 		""},
 	 { "DecoratedFF_getFormFactor", _wrap_DecoratedFF_getFormFactor, METH_O, "\n"
-		"DecoratedFF_getFormFactor(DecoratedFF self) -> IDecoratableBorn\n"
-		"const IDecoratableBorn * DecoratedFF::getFormFactor() const\n"
+		"DecoratedFF_getFormFactor(DecoratedFF self) -> IBornFF\n"
+		"const IBornFF * DecoratedFF::getFormFactor() const\n"
 		"\n"
 		""},
 	 { "DecoratedFF_formfactor", _wrap_DecoratedFF_formfactor, METH_VARARGS, "\n"
@@ -72387,29 +72637,21 @@ static PyMethodDef SwigMethods[] = {
 		"IFormFactorPolyhedron_bottomZ(IFormFactorPolyhedron self, IRotation rotation) -> double\n"
 		"double IFormFactorPolyhedron::bottomZ(const IRotation *rotation) const override\n"
 		"\n"
-		"Returns the z-coordinate of the lowest point in this shape after a given rotation. \n"
-		"\n"
 		""},
 	 { "IFormFactorPolyhedron_topZ", _wrap_IFormFactorPolyhedron_topZ, METH_VARARGS, "\n"
 		"IFormFactorPolyhedron_topZ(IFormFactorPolyhedron self, IRotation rotation) -> double\n"
 		"double IFormFactorPolyhedron::topZ(const IRotation *rotation) const override\n"
 		"\n"
-		"Returns the z-coordinate of the lowest point in this shape after a given rotation. \n"
-		"\n"
 		""},
 	 { "IFormFactorPolyhedron_formfactor", _wrap_IFormFactorPolyhedron_formfactor, METH_VARARGS, "\n"
 		"IFormFactorPolyhedron_formfactor(IFormFactorPolyhedron self, C3 q) -> complex_t\n"
 		"complex_t IFormFactorPolyhedron::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"
-		"\n"
 		""},
 	 { "IFormFactorPolyhedron_volume", _wrap_IFormFactorPolyhedron_volume, METH_O, "\n"
 		"IFormFactorPolyhedron_volume(IFormFactorPolyhedron self) -> double\n"
 		"double IFormFactorPolyhedron::volume() const override\n"
 		"\n"
-		"Returns the total volume of the particle of this form factor's shape. \n"
-		"\n"
 		""},
 	 { "IFormFactorPolyhedron_radialExtension", _wrap_IFormFactorPolyhedron_radialExtension, METH_O, "\n"
 		"IFormFactorPolyhedron_radialExtension(IFormFactorPolyhedron self) -> double\n"
@@ -72435,15 +72677,11 @@ static PyMethodDef SwigMethods[] = {
 		"IFormFactorPrism_bottomZ(IFormFactorPrism self, IRotation rotation) -> double\n"
 		"double IFormFactorPrism::bottomZ(const IRotation *rotation) const override\n"
 		"\n"
-		"Returns the z-coordinate of the lowest point in this shape after a given rotation. \n"
-		"\n"
 		""},
 	 { "IFormFactorPrism_topZ", _wrap_IFormFactorPrism_topZ, METH_VARARGS, "\n"
 		"IFormFactorPrism_topZ(IFormFactorPrism self, IRotation rotation) -> double\n"
 		"double IFormFactorPrism::topZ(const IRotation *rotation) const override\n"
 		"\n"
-		"Returns the z-coordinate of the lowest point in this shape after a given rotation. \n"
-		"\n"
 		""},
 	 { "IFormFactorPrism_formfactor", _wrap_IFormFactorPrism_formfactor, METH_VARARGS, "\n"
 		"IFormFactorPrism_formfactor(IFormFactorPrism self, C3 q) -> complex_t\n"
@@ -72498,8 +72736,6 @@ static PyMethodDef SwigMethods[] = {
 		"IProfileRipple_formfactor(IProfileRipple self, C3 q) -> complex_t\n"
 		"complex_t IProfileRipple::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"
-		"\n"
 		""},
 	 { "delete_IProfileRipple", _wrap_delete_IProfileRipple, METH_O, "delete_IProfileRipple(IProfileRipple self)"},
 	 { "IProfileRipple_swigregister", IProfileRipple_swigregister, METH_O, NULL},
@@ -72529,6 +72765,8 @@ static PyMethodDef SwigMethods[] = {
 		"FormFactorAnisoPyramid_clone(FormFactorAnisoPyramid self) -> FormFactorAnisoPyramid\n"
 		"FormFactorAnisoPyramid* FormFactorAnisoPyramid::clone() const override\n"
 		"\n"
+		"Returns a clone of this  ISampleNode object. \n"
+		"\n"
 		""},
 	 { "FormFactorAnisoPyramid_getLength", _wrap_FormFactorAnisoPyramid_getLength, METH_O, "\n"
 		"FormFactorAnisoPyramid_getLength(FormFactorAnisoPyramid self) -> double\n"
@@ -72568,6 +72806,8 @@ static PyMethodDef SwigMethods[] = {
 		"FormFactorBox_clone(FormFactorBox self) -> FormFactorBox\n"
 		"FormFactorBox* FormFactorBox::clone() const override\n"
 		"\n"
+		"Returns a clone of this  ISampleNode object. \n"
+		"\n"
 		""},
 	 { "FormFactorBox_getLength", _wrap_FormFactorBox_getLength, METH_O, "\n"
 		"FormFactorBox_getLength(FormFactorBox self) -> double\n"
@@ -72583,8 +72823,6 @@ static PyMethodDef SwigMethods[] = {
 		"FormFactorBox_volume(FormFactorBox self) -> double\n"
 		"double FormFactorBox::volume() const override\n"
 		"\n"
-		"Returns the total volume of the particle of this form factor's shape. \n"
-		"\n"
 		""},
 	 { "FormFactorBox_radialExtension", _wrap_FormFactorBox_radialExtension, METH_O, "\n"
 		"FormFactorBox_radialExtension(FormFactorBox self) -> double\n"
@@ -72597,8 +72835,6 @@ static PyMethodDef SwigMethods[] = {
 		"FormFactorBox_formfactor(FormFactorBox self, C3 q) -> complex_t\n"
 		"complex_t FormFactorBox::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"
-		"\n"
 		""},
 	 { "delete_FormFactorBox", _wrap_delete_FormFactorBox, METH_O, "delete_FormFactorBox(FormFactorBox self)"},
 	 { "FormFactorBox_swigregister", FormFactorBox_swigregister, METH_O, NULL},
@@ -72618,6 +72854,8 @@ static PyMethodDef SwigMethods[] = {
 		"FormFactorCantellatedCube_clone(FormFactorCantellatedCube self) -> FormFactorCantellatedCube\n"
 		"FormFactorCantellatedCube* FormFactorCantellatedCube::clone() const override\n"
 		"\n"
+		"Returns a clone of this  ISampleNode object. \n"
+		"\n"
 		""},
 	 { "FormFactorCantellatedCube_getLength", _wrap_FormFactorCantellatedCube_getLength, METH_O, "\n"
 		"FormFactorCantellatedCube_getLength(FormFactorCantellatedCube self) -> double\n"
@@ -72647,6 +72885,8 @@ static PyMethodDef SwigMethods[] = {
 		"FormFactorCone_clone(FormFactorCone self) -> FormFactorCone\n"
 		"FormFactorCone* FormFactorCone::clone() const override\n"
 		"\n"
+		"Returns a clone of this  ISampleNode object. \n"
+		"\n"
 		""},
 	 { "FormFactorCone_getHeight", _wrap_FormFactorCone_getHeight, METH_O, "\n"
 		"FormFactorCone_getHeight(FormFactorCone self) -> double\n"
@@ -72674,8 +72914,6 @@ static PyMethodDef SwigMethods[] = {
 		"FormFactorCone_formfactor(FormFactorCone self, C3 q) -> complex_t\n"
 		"complex_t FormFactorCone::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"
-		"\n"
 		""},
 	 { "delete_FormFactorCone", _wrap_delete_FormFactorCone, METH_O, "delete_FormFactorCone(FormFactorCone self)"},
 	 { "FormFactorCone_swigregister", FormFactorCone_swigregister, METH_O, NULL},
@@ -72695,6 +72933,8 @@ static PyMethodDef SwigMethods[] = {
 		"FormFactorCone6_clone(FormFactorCone6 self) -> FormFactorCone6\n"
 		"FormFactorCone6* FormFactorCone6::clone() const override\n"
 		"\n"
+		"Returns a clone of this  ISampleNode object. \n"
+		"\n"
 		""},
 	 { "FormFactorCone6_getBaseEdge", _wrap_FormFactorCone6_getBaseEdge, METH_O, "\n"
 		"FormFactorCone6_getBaseEdge(FormFactorCone6 self) -> double\n"
@@ -72729,6 +72969,8 @@ static PyMethodDef SwigMethods[] = {
 		"FormFactorCosineRippleBox_clone(FormFactorCosineRippleBox self) -> FormFactorCosineRippleBox\n"
 		"FormFactorCosineRippleBox * FormFactorCosineRippleBox::clone() const override\n"
 		"\n"
+		"Returns a clone of this  ISampleNode object. \n"
+		"\n"
 		""},
 	 { "delete_FormFactorCosineRippleBox", _wrap_delete_FormFactorCosineRippleBox, METH_O, "delete_FormFactorCosineRippleBox(FormFactorCosineRippleBox self)"},
 	 { "FormFactorCosineRippleBox_swigregister", FormFactorCosineRippleBox_swigregister, METH_O, NULL},
@@ -72748,6 +72990,8 @@ static PyMethodDef SwigMethods[] = {
 		"FormFactorCosineRippleGauss_clone(FormFactorCosineRippleGauss self) -> FormFactorCosineRippleGauss\n"
 		"FormFactorCosineRippleGauss * FormFactorCosineRippleGauss::clone() const override\n"
 		"\n"
+		"Returns a clone of this  ISampleNode object. \n"
+		"\n"
 		""},
 	 { "delete_FormFactorCosineRippleGauss", _wrap_delete_FormFactorCosineRippleGauss, METH_O, "delete_FormFactorCosineRippleGauss(FormFactorCosineRippleGauss self)"},
 	 { "FormFactorCosineRippleGauss_swigregister", FormFactorCosineRippleGauss_swigregister, METH_O, NULL},
@@ -72767,6 +73011,8 @@ static PyMethodDef SwigMethods[] = {
 		"FormFactorCosineRippleLorentz_clone(FormFactorCosineRippleLorentz self) -> FormFactorCosineRippleLorentz\n"
 		"FormFactorCosineRippleLorentz * FormFactorCosineRippleLorentz::clone() const override\n"
 		"\n"
+		"Returns a clone of this  ISampleNode object. \n"
+		"\n"
 		""},
 	 { "delete_FormFactorCosineRippleLorentz", _wrap_delete_FormFactorCosineRippleLorentz, METH_O, "delete_FormFactorCosineRippleLorentz(FormFactorCosineRippleLorentz self)"},
 	 { "FormFactorCosineRippleLorentz_swigregister", FormFactorCosineRippleLorentz_swigregister, METH_O, NULL},
@@ -72786,6 +73032,8 @@ static PyMethodDef SwigMethods[] = {
 		"FormFactorCuboctahedron_clone(FormFactorCuboctahedron self) -> FormFactorCuboctahedron\n"
 		"FormFactorCuboctahedron* FormFactorCuboctahedron::clone() const override\n"
 		"\n"
+		"Returns a clone of this  ISampleNode object. \n"
+		"\n"
 		""},
 	 { "FormFactorCuboctahedron_getLength", _wrap_FormFactorCuboctahedron_getLength, METH_O, "\n"
 		"FormFactorCuboctahedron_getLength(FormFactorCuboctahedron self) -> double\n"
@@ -72825,6 +73073,8 @@ static PyMethodDef SwigMethods[] = {
 		"FormFactorCylinder_clone(FormFactorCylinder self) -> FormFactorCylinder\n"
 		"FormFactorCylinder* FormFactorCylinder::clone() const override\n"
 		"\n"
+		"Returns a clone of this  ISampleNode object. \n"
+		"\n"
 		""},
 	 { "FormFactorCylinder_getHeight", _wrap_FormFactorCylinder_getHeight, METH_O, "\n"
 		"FormFactorCylinder_getHeight(FormFactorCylinder self) -> double\n"
@@ -72847,8 +73097,6 @@ static PyMethodDef SwigMethods[] = {
 		"FormFactorCylinder_formfactor(FormFactorCylinder self, C3 q) -> complex_t\n"
 		"complex_t FormFactorCylinder::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"
-		"\n"
 		""},
 	 { "delete_FormFactorCylinder", _wrap_delete_FormFactorCylinder, METH_O, "delete_FormFactorCylinder(FormFactorCylinder self)"},
 	 { "FormFactorCylinder_swigregister", FormFactorCylinder_swigregister, METH_O, NULL},
@@ -72868,6 +73116,8 @@ static PyMethodDef SwigMethods[] = {
 		"FormFactorDodecahedron_clone(FormFactorDodecahedron self) -> FormFactorDodecahedron\n"
 		"FormFactorDodecahedron* FormFactorDodecahedron::clone() const override\n"
 		"\n"
+		"Returns a clone of this  ISampleNode object. \n"
+		"\n"
 		""},
 	 { "FormFactorDodecahedron_getEdge", _wrap_FormFactorDodecahedron_getEdge, METH_O, "\n"
 		"FormFactorDodecahedron_getEdge(FormFactorDodecahedron self) -> double\n"
@@ -72892,6 +73142,8 @@ static PyMethodDef SwigMethods[] = {
 		"FormFactorEllipsoidalCylinder_clone(FormFactorEllipsoidalCylinder self) -> FormFactorEllipsoidalCylinder\n"
 		"FormFactorEllipsoidalCylinder* FormFactorEllipsoidalCylinder::clone() const override\n"
 		"\n"
+		"Returns a clone of this  ISampleNode object. \n"
+		"\n"
 		""},
 	 { "FormFactorEllipsoidalCylinder_getRadiusX", _wrap_FormFactorEllipsoidalCylinder_getRadiusX, METH_O, "\n"
 		"FormFactorEllipsoidalCylinder_getRadiusX(FormFactorEllipsoidalCylinder self) -> double\n"
@@ -72919,8 +73171,6 @@ static PyMethodDef SwigMethods[] = {
 		"FormFactorEllipsoidalCylinder_formfactor(FormFactorEllipsoidalCylinder self, C3 q) -> complex_t\n"
 		"complex_t FormFactorEllipsoidalCylinder::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"
-		"\n"
 		""},
 	 { "delete_FormFactorEllipsoidalCylinder", _wrap_delete_FormFactorEllipsoidalCylinder, METH_O, "delete_FormFactorEllipsoidalCylinder(FormFactorEllipsoidalCylinder self)"},
 	 { "FormFactorEllipsoidalCylinder_swigregister", FormFactorEllipsoidalCylinder_swigregister, METH_O, NULL},
@@ -72940,6 +73190,8 @@ static PyMethodDef SwigMethods[] = {
 		"FormFactorFullSphere_clone(FormFactorFullSphere self) -> FormFactorFullSphere\n"
 		"FormFactorFullSphere* FormFactorFullSphere::clone() const override\n"
 		"\n"
+		"Returns a clone of this  ISampleNode object. \n"
+		"\n"
 		""},
 	 { "FormFactorFullSphere_getRadius", _wrap_FormFactorFullSphere_getRadius, METH_O, "\n"
 		"FormFactorFullSphere_getRadius(FormFactorFullSphere self) -> double\n"
@@ -72957,22 +73209,16 @@ static PyMethodDef SwigMethods[] = {
 		"FormFactorFullSphere_bottomZ(FormFactorFullSphere self, IRotation rotation) -> double\n"
 		"double FormFactorFullSphere::bottomZ(const IRotation *rotation) const override\n"
 		"\n"
-		"Returns the z-coordinate of the lowest point in this shape after a given rotation. \n"
-		"\n"
 		""},
 	 { "FormFactorFullSphere_topZ", _wrap_FormFactorFullSphere_topZ, METH_VARARGS, "\n"
 		"FormFactorFullSphere_topZ(FormFactorFullSphere self, IRotation rotation) -> double\n"
 		"double FormFactorFullSphere::topZ(const IRotation *rotation) const override\n"
 		"\n"
-		"Returns the z-coordinate of the lowest point in this shape after a given rotation. \n"
-		"\n"
 		""},
 	 { "FormFactorFullSphere_formfactor", _wrap_FormFactorFullSphere_formfactor, METH_VARARGS, "\n"
 		"FormFactorFullSphere_formfactor(FormFactorFullSphere self, C3 q) -> complex_t\n"
 		"complex_t FormFactorFullSphere::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"
-		"\n"
 		""},
 	 { "delete_FormFactorFullSphere", _wrap_delete_FormFactorFullSphere, METH_O, "delete_FormFactorFullSphere(FormFactorFullSphere self)"},
 	 { "FormFactorFullSphere_swigregister", FormFactorFullSphere_swigregister, METH_O, NULL},
@@ -72992,6 +73238,8 @@ static PyMethodDef SwigMethods[] = {
 		"FormFactorFullSpheroid_clone(FormFactorFullSpheroid self) -> FormFactorFullSpheroid\n"
 		"FormFactorFullSpheroid* FormFactorFullSpheroid::clone() const override\n"
 		"\n"
+		"Returns a clone of this  ISampleNode object. \n"
+		"\n"
 		""},
 	 { "FormFactorFullSpheroid_getHeight", _wrap_FormFactorFullSpheroid_getHeight, METH_O, "\n"
 		"FormFactorFullSpheroid_getHeight(FormFactorFullSpheroid self) -> double\n"
@@ -73014,8 +73262,6 @@ static PyMethodDef SwigMethods[] = {
 		"FormFactorFullSpheroid_formfactor(FormFactorFullSpheroid self, C3 q) -> complex_t\n"
 		"complex_t FormFactorFullSpheroid::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"
-		"\n"
 		""},
 	 { "delete_FormFactorFullSpheroid", _wrap_delete_FormFactorFullSpheroid, METH_O, "delete_FormFactorFullSpheroid(FormFactorFullSpheroid self)"},
 	 { "FormFactorFullSpheroid_swigregister", FormFactorFullSpheroid_swigregister, METH_O, NULL},
@@ -73040,6 +73286,8 @@ static PyMethodDef SwigMethods[] = {
 		"FormFactorHemiEllipsoid_clone(FormFactorHemiEllipsoid self) -> FormFactorHemiEllipsoid\n"
 		"FormFactorHemiEllipsoid* FormFactorHemiEllipsoid::clone() const override\n"
 		"\n"
+		"Returns a clone of this  ISampleNode object. \n"
+		"\n"
 		""},
 	 { "FormFactorHemiEllipsoid_getHeight", _wrap_FormFactorHemiEllipsoid_getHeight, METH_O, "\n"
 		"FormFactorHemiEllipsoid_getHeight(FormFactorHemiEllipsoid self) -> double\n"
@@ -73067,8 +73315,6 @@ static PyMethodDef SwigMethods[] = {
 		"FormFactorHemiEllipsoid_formfactor(FormFactorHemiEllipsoid self, C3 q) -> complex_t\n"
 		"complex_t FormFactorHemiEllipsoid::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"
-		"\n"
 		""},
 	 { "FormFactorHemiEllipsoid_swigregister", FormFactorHemiEllipsoid_swigregister, METH_O, NULL},
 	 { "FormFactorHemiEllipsoid_swiginit", FormFactorHemiEllipsoid_swiginit, METH_VARARGS, NULL},
@@ -73087,6 +73333,8 @@ static PyMethodDef SwigMethods[] = {
 		"FormFactorHollowSphere_clone(FormFactorHollowSphere self) -> FormFactorHollowSphere\n"
 		"FormFactorHollowSphere* FormFactorHollowSphere::clone() const override\n"
 		"\n"
+		"Returns a clone of this  ISampleNode object. \n"
+		"\n"
 		""},
 	 { "FormFactorHollowSphere_radialExtension", _wrap_FormFactorHollowSphere_radialExtension, METH_O, "\n"
 		"FormFactorHollowSphere_radialExtension(FormFactorHollowSphere self) -> double\n"
@@ -73099,8 +73347,6 @@ static PyMethodDef SwigMethods[] = {
 		"FormFactorHollowSphere_formfactor(FormFactorHollowSphere self, C3 q) -> complex_t\n"
 		"complex_t FormFactorHollowSphere::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"
-		"\n"
 		""},
 	 { "delete_FormFactorHollowSphere", _wrap_delete_FormFactorHollowSphere, METH_O, "delete_FormFactorHollowSphere(FormFactorHollowSphere self)"},
 	 { "FormFactorHollowSphere_swigregister", FormFactorHollowSphere_swigregister, METH_O, NULL},
@@ -73120,6 +73366,8 @@ static PyMethodDef SwigMethods[] = {
 		"FormFactorIcosahedron_clone(FormFactorIcosahedron self) -> FormFactorIcosahedron\n"
 		"FormFactorIcosahedron* FormFactorIcosahedron::clone() const override\n"
 		"\n"
+		"Returns a clone of this  ISampleNode object. \n"
+		"\n"
 		""},
 	 { "FormFactorIcosahedron_getEdge", _wrap_FormFactorIcosahedron_getEdge, METH_O, "\n"
 		"FormFactorIcosahedron_getEdge(FormFactorIcosahedron self) -> double\n"
@@ -73144,6 +73392,8 @@ static PyMethodDef SwigMethods[] = {
 		"FormFactorLongBoxGauss_clone(FormFactorLongBoxGauss self) -> FormFactorLongBoxGauss\n"
 		"FormFactorLongBoxGauss* FormFactorLongBoxGauss::clone() const override\n"
 		"\n"
+		"Returns a clone of this  ISampleNode object. \n"
+		"\n"
 		""},
 	 { "FormFactorLongBoxGauss_getLength", _wrap_FormFactorLongBoxGauss_getLength, METH_O, "\n"
 		"FormFactorLongBoxGauss_getLength(FormFactorLongBoxGauss self) -> double\n"
@@ -73171,8 +73421,6 @@ static PyMethodDef SwigMethods[] = {
 		"FormFactorLongBoxGauss_formfactor(FormFactorLongBoxGauss self, C3 q) -> complex_t\n"
 		"complex_t FormFactorLongBoxGauss::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"
-		"\n"
 		""},
 	 { "delete_FormFactorLongBoxGauss", _wrap_delete_FormFactorLongBoxGauss, METH_O, "delete_FormFactorLongBoxGauss(FormFactorLongBoxGauss self)"},
 	 { "FormFactorLongBoxGauss_swigregister", FormFactorLongBoxGauss_swigregister, METH_O, NULL},
@@ -73192,6 +73440,8 @@ static PyMethodDef SwigMethods[] = {
 		"FormFactorLongBoxLorentz_clone(FormFactorLongBoxLorentz self) -> FormFactorLongBoxLorentz\n"
 		"FormFactorLongBoxLorentz* FormFactorLongBoxLorentz::clone() const override\n"
 		"\n"
+		"Returns a clone of this  ISampleNode object. \n"
+		"\n"
 		""},
 	 { "FormFactorLongBoxLorentz_getLength", _wrap_FormFactorLongBoxLorentz_getLength, METH_O, "\n"
 		"FormFactorLongBoxLorentz_getLength(FormFactorLongBoxLorentz self) -> double\n"
@@ -73219,8 +73469,6 @@ static PyMethodDef SwigMethods[] = {
 		"FormFactorLongBoxLorentz_formfactor(FormFactorLongBoxLorentz self, C3 q) -> complex_t\n"
 		"complex_t FormFactorLongBoxLorentz::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"
-		"\n"
 		""},
 	 { "delete_FormFactorLongBoxLorentz", _wrap_delete_FormFactorLongBoxLorentz, METH_O, "delete_FormFactorLongBoxLorentz(FormFactorLongBoxLorentz self)"},
 	 { "FormFactorLongBoxLorentz_swigregister", FormFactorLongBoxLorentz_swigregister, METH_O, NULL},
@@ -73240,6 +73488,8 @@ static PyMethodDef SwigMethods[] = {
 		"FormFactorPrism3_clone(FormFactorPrism3 self) -> FormFactorPrism3\n"
 		"FormFactorPrism3* FormFactorPrism3::clone() const override\n"
 		"\n"
+		"Returns a clone of this  ISampleNode object. \n"
+		"\n"
 		""},
 	 { "FormFactorPrism3_getBaseEdge", _wrap_FormFactorPrism3_getBaseEdge, METH_O, "\n"
 		"FormFactorPrism3_getBaseEdge(FormFactorPrism3 self) -> double\n"
@@ -73264,6 +73514,8 @@ static PyMethodDef SwigMethods[] = {
 		"FormFactorPrism6_clone(FormFactorPrism6 self) -> FormFactorPrism6\n"
 		"FormFactorPrism6* FormFactorPrism6::clone() const override\n"
 		"\n"
+		"Returns a clone of this  ISampleNode object. \n"
+		"\n"
 		""},
 	 { "FormFactorPrism6_getBaseEdge", _wrap_FormFactorPrism6_getBaseEdge, METH_O, "\n"
 		"FormFactorPrism6_getBaseEdge(FormFactorPrism6 self) -> double\n"
@@ -73288,6 +73540,8 @@ static PyMethodDef SwigMethods[] = {
 		"FormFactorPyramid_clone(FormFactorPyramid self) -> FormFactorPyramid\n"
 		"FormFactorPyramid* FormFactorPyramid::clone() const override\n"
 		"\n"
+		"Returns a clone of this  ISampleNode object. \n"
+		"\n"
 		""},
 	 { "FormFactorPyramid_getHeight", _wrap_FormFactorPyramid_getHeight, METH_O, "\n"
 		"FormFactorPyramid_getHeight(FormFactorPyramid self) -> double\n"
@@ -73322,6 +73576,8 @@ static PyMethodDef SwigMethods[] = {
 		"FormFactorSawtoothRippleBox_clone(FormFactorSawtoothRippleBox self) -> FormFactorSawtoothRippleBox\n"
 		"FormFactorSawtoothRippleBox * FormFactorSawtoothRippleBox::clone() const override\n"
 		"\n"
+		"Returns a clone of this  ISampleNode object. \n"
+		"\n"
 		""},
 	 { "delete_FormFactorSawtoothRippleBox", _wrap_delete_FormFactorSawtoothRippleBox, METH_O, "delete_FormFactorSawtoothRippleBox(FormFactorSawtoothRippleBox self)"},
 	 { "FormFactorSawtoothRippleBox_swigregister", FormFactorSawtoothRippleBox_swigregister, METH_O, NULL},
@@ -73341,6 +73597,8 @@ static PyMethodDef SwigMethods[] = {
 		"FormFactorSawtoothRippleGauss_clone(FormFactorSawtoothRippleGauss self) -> FormFactorSawtoothRippleGauss\n"
 		"FormFactorSawtoothRippleGauss * FormFactorSawtoothRippleGauss::clone() const override\n"
 		"\n"
+		"Returns a clone of this  ISampleNode object. \n"
+		"\n"
 		""},
 	 { "delete_FormFactorSawtoothRippleGauss", _wrap_delete_FormFactorSawtoothRippleGauss, METH_O, "delete_FormFactorSawtoothRippleGauss(FormFactorSawtoothRippleGauss self)"},
 	 { "FormFactorSawtoothRippleGauss_swigregister", FormFactorSawtoothRippleGauss_swigregister, METH_O, NULL},
@@ -73360,6 +73618,8 @@ static PyMethodDef SwigMethods[] = {
 		"FormFactorSawtoothRippleLorentz_clone(FormFactorSawtoothRippleLorentz self) -> FormFactorSawtoothRippleLorentz\n"
 		"FormFactorSawtoothRippleLorentz * FormFactorSawtoothRippleLorentz::clone() const override\n"
 		"\n"
+		"Returns a clone of this  ISampleNode object. \n"
+		"\n"
 		""},
 	 { "delete_FormFactorSawtoothRippleLorentz", _wrap_delete_FormFactorSawtoothRippleLorentz, METH_O, "delete_FormFactorSawtoothRippleLorentz(FormFactorSawtoothRippleLorentz self)"},
 	 { "FormFactorSawtoothRippleLorentz_swigregister", FormFactorSawtoothRippleLorentz_swigregister, METH_O, NULL},
@@ -73379,6 +73639,8 @@ static PyMethodDef SwigMethods[] = {
 		"FormFactorTetrahedron_clone(FormFactorTetrahedron self) -> FormFactorTetrahedron\n"
 		"FormFactorTetrahedron* FormFactorTetrahedron::clone() const override\n"
 		"\n"
+		"Returns a clone of this  ISampleNode object. \n"
+		"\n"
 		""},
 	 { "FormFactorTetrahedron_getBaseEdge", _wrap_FormFactorTetrahedron_getBaseEdge, METH_O, "\n"
 		"FormFactorTetrahedron_getBaseEdge(FormFactorTetrahedron self) -> double\n"
@@ -73413,6 +73675,8 @@ static PyMethodDef SwigMethods[] = {
 		"FormFactorTruncatedCube_clone(FormFactorTruncatedCube self) -> FormFactorTruncatedCube\n"
 		"FormFactorTruncatedCube* FormFactorTruncatedCube::clone() const override\n"
 		"\n"
+		"Returns a clone of this  ISampleNode object. \n"
+		"\n"
 		""},
 	 { "FormFactorTruncatedCube_getLength", _wrap_FormFactorTruncatedCube_getLength, METH_O, "\n"
 		"FormFactorTruncatedCube_getLength(FormFactorTruncatedCube self) -> double\n"
@@ -73442,6 +73706,8 @@ static PyMethodDef SwigMethods[] = {
 		"FormFactorTruncatedSphere_clone(FormFactorTruncatedSphere self) -> FormFactorTruncatedSphere\n"
 		"FormFactorTruncatedSphere* FormFactorTruncatedSphere::clone() const override\n"
 		"\n"
+		"Returns a clone of this  ISampleNode object. \n"
+		"\n"
 		""},
 	 { "FormFactorTruncatedSphere_getHeight", _wrap_FormFactorTruncatedSphere_getHeight, METH_O, "\n"
 		"FormFactorTruncatedSphere_getHeight(FormFactorTruncatedSphere self) -> double\n"
@@ -73490,6 +73756,8 @@ static PyMethodDef SwigMethods[] = {
 		"FormFactorTruncatedSpheroid_clone(FormFactorTruncatedSpheroid self) -> FormFactorTruncatedSpheroid\n"
 		"FormFactorTruncatedSpheroid* FormFactorTruncatedSpheroid::clone() const override\n"
 		"\n"
+		"Returns a clone of this  ISampleNode object. \n"
+		"\n"
 		""},
 	 { "FormFactorTruncatedSpheroid_getRadius", _wrap_FormFactorTruncatedSpheroid_getRadius, METH_O, "\n"
 		"FormFactorTruncatedSpheroid_getRadius(FormFactorTruncatedSpheroid self) -> double\n"
@@ -73522,8 +73790,6 @@ static PyMethodDef SwigMethods[] = {
 		"FormFactorTruncatedSpheroid_formfactor(FormFactorTruncatedSpheroid self, C3 q) -> complex_t\n"
 		"complex_t FormFactorTruncatedSpheroid::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"
-		"\n"
 		""},
 	 { "delete_FormFactorTruncatedSpheroid", _wrap_delete_FormFactorTruncatedSpheroid, METH_O, "delete_FormFactorTruncatedSpheroid(FormFactorTruncatedSpheroid self)"},
 	 { "FormFactorTruncatedSpheroid_swigregister", FormFactorTruncatedSpheroid_swigregister, METH_O, NULL},
@@ -73543,6 +73809,8 @@ static PyMethodDef SwigMethods[] = {
 		"FormFactorGaussSphere_clone(FormFactorGaussSphere self) -> FormFactorGaussSphere\n"
 		"FormFactorGaussSphere* FormFactorGaussSphere::clone() const override\n"
 		"\n"
+		"Returns a clone of this  ISampleNode object. \n"
+		"\n"
 		""},
 	 { "FormFactorGaussSphere_getMeanRadius", _wrap_FormFactorGaussSphere_getMeanRadius, METH_O, "\n"
 		"FormFactorGaussSphere_getMeanRadius(FormFactorGaussSphere self) -> double\n"
@@ -73560,8 +73828,6 @@ static PyMethodDef SwigMethods[] = {
 		"FormFactorGaussSphere_formfactor(FormFactorGaussSphere self, C3 q) -> complex_t\n"
 		"complex_t FormFactorGaussSphere::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"
-		"\n"
 		""},
 	 { "delete_FormFactorGaussSphere", _wrap_delete_FormFactorGaussSphere, METH_O, "delete_FormFactorGaussSphere(FormFactorGaussSphere self)"},
 	 { "FormFactorGaussSphere_swigregister", FormFactorGaussSphere_swigregister, METH_O, NULL},
@@ -73581,6 +73847,8 @@ static PyMethodDef SwigMethods[] = {
 		"FormFactorSphereGaussianRadius_clone(FormFactorSphereGaussianRadius self) -> FormFactorSphereGaussianRadius\n"
 		"FormFactorSphereGaussianRadius* FormFactorSphereGaussianRadius::clone() const override\n"
 		"\n"
+		"Returns a clone of this  ISampleNode object. \n"
+		"\n"
 		""},
 	 { "FormFactorSphereGaussianRadius_radialExtension", _wrap_FormFactorSphereGaussianRadius_radialExtension, METH_O, "\n"
 		"FormFactorSphereGaussianRadius_radialExtension(FormFactorSphereGaussianRadius self) -> double\n"
@@ -73593,8 +73861,6 @@ static PyMethodDef SwigMethods[] = {
 		"FormFactorSphereGaussianRadius_formfactor(FormFactorSphereGaussianRadius self, C3 q) -> complex_t\n"
 		"complex_t FormFactorSphereGaussianRadius::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"
-		"\n"
 		""},
 	 { "delete_FormFactorSphereGaussianRadius", _wrap_delete_FormFactorSphereGaussianRadius, METH_O, "delete_FormFactorSphereGaussianRadius(FormFactorSphereGaussianRadius self)"},
 	 { "FormFactorSphereGaussianRadius_swigregister", FormFactorSphereGaussianRadius_swigregister, METH_O, NULL},
@@ -73614,6 +73880,8 @@ static PyMethodDef SwigMethods[] = {
 		"FormFactorSphereLogNormalRadius_clone(FormFactorSphereLogNormalRadius self) -> FormFactorSphereLogNormalRadius\n"
 		"FormFactorSphereLogNormalRadius * FormFactorSphereLogNormalRadius::clone() const override\n"
 		"\n"
+		"Returns a clone of this  ISampleNode object. \n"
+		"\n"
 		""},
 	 { "FormFactorSphereLogNormalRadius_radialExtension", _wrap_FormFactorSphereLogNormalRadius_radialExtension, METH_O, "\n"
 		"FormFactorSphereLogNormalRadius_radialExtension(FormFactorSphereLogNormalRadius self) -> double\n"
@@ -73626,8 +73894,6 @@ static PyMethodDef SwigMethods[] = {
 		"FormFactorSphereLogNormalRadius_formfactor(FormFactorSphereLogNormalRadius self, C3 q) -> complex_t\n"
 		"complex_t FormFactorSphereLogNormalRadius::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"
-		"\n"
 		""},
 	 { "delete_FormFactorSphereLogNormalRadius", _wrap_delete_FormFactorSphereLogNormalRadius, METH_O, "delete_FormFactorSphereLogNormalRadius(FormFactorSphereLogNormalRadius self)"},
 	 { "FormFactorSphereLogNormalRadius_swigregister", FormFactorSphereLogNormalRadius_swigregister, METH_O, NULL},
@@ -73985,135 +74251,18 @@ static void *_p_IdentityRotationTo_p_IRotation(void *x, int *SWIGUNUSEDPARM(newm
 static void *_p_RotationXTo_p_IRotation(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((IRotation *)  ((RotationX *) x));
 }
-static void *_p_IBornFFTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IFormFactor *) (IDecoratableBorn *) ((IBornFF *) x));
-}
-static void *_p_FormFactorPrism6To_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IFormFactor *) (IDecoratableBorn *)(IBornFF *)(IFormFactorPrism *) ((FormFactorPrism6 *) x));
+static void *_p_FormFactorCompositionTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IFormFactor *)  ((FormFactorComposition *) x));
 }
-static void *_p_FormFactorHemiEllipsoidTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IFormFactor *) (IDecoratableBorn *)(IBornFF *) ((FormFactorHemiEllipsoid *) 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));
 }
-static void *_p_FormFactorFullSpheroidTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IFormFactor *) (IDecoratableBorn *)(IBornFF *) ((FormFactorFullSpheroid *) x));
-}
-static void *_p_FormFactorTruncatedSpheroidTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IFormFactor *) (IDecoratableBorn *)(IBornFF *) ((FormFactorTruncatedSpheroid *) x));
-}
-static void *_p_IProfileRippleTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IFormFactor *) (IDecoratableBorn *)(IBornFF *) ((IProfileRipple *) x));
-}
-static void *_p_ICosineRippleTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IFormFactor *) (IDecoratableBorn *)(IBornFF *)(IProfileRipple *) ((ICosineRipple *) x));
-}
-static void *_p_FormFactorLongBoxGaussTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IFormFactor *) (IDecoratableBorn *)(IBornFF *) ((FormFactorLongBoxGauss *) x));
-}
-static void *_p_FormFactorCosineRippleGaussTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IFormFactor *) (IDecoratableBorn *)(IBornFF *)(IProfileRipple *)(ICosineRipple *) ((FormFactorCosineRippleGauss *) x));
-}
-static void *_p_FormFactorSawtoothRippleGaussTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IFormFactor *) (IDecoratableBorn *)(IBornFF *)(IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleGauss *) x));
-}
-static void *_p_IFormFactorPrismTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IFormFactor *) (IDecoratableBorn *)(IBornFF *) ((IFormFactorPrism *) x));
-}
 static void *_p_FormFactorCrystalTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((IFormFactor *)  ((FormFactorCrystal *) x));
 }
-static void *_p_FormFactorCantellatedCubeTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IFormFactor *) (IDecoratableBorn *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorCantellatedCube *) x));
-}
-static void *_p_FormFactorFullSphereTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IFormFactor *) (IDecoratableBorn *)(IBornFF *) ((FormFactorFullSphere *) x));
-}
-static void *_p_FormFactorTruncatedCubeTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IFormFactor *) (IDecoratableBorn *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorTruncatedCube *) x));
-}
-static void *_p_FormFactorTruncatedSphereTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IFormFactor *) (IDecoratableBorn *)(IBornFF *) ((FormFactorTruncatedSphere *) x));
-}
-static void *_p_IDecoratableBornTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IFormFactor *)  ((IDecoratableBorn *) x));
-}
-static void *_p_FormFactorEllipsoidalCylinderTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IFormFactor *) (IDecoratableBorn *)(IBornFF *) ((FormFactorEllipsoidalCylinder *) x));
-}
-static void *_p_FormFactorCylinderTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IFormFactor *) (IDecoratableBorn *)(IBornFF *) ((FormFactorCylinder *) x));
-}
-static void *_p_FormFactorBoxTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IFormFactor *) (IDecoratableBorn *)(IBornFF *)(IFormFactorPrism *) ((FormFactorBox *) x));
-}
-static void *_p_FormFactorIcosahedronTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IFormFactor *) (IDecoratableBorn *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorIcosahedron *) x));
-}
-static void *_p_FormFactorDodecahedronTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IFormFactor *) (IDecoratableBorn *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorDodecahedron *) x));
-}
-static void *_p_FormFactorCuboctahedronTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IFormFactor *) (IDecoratableBorn *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorCuboctahedron *) x));
-}
-static void *_p_IFormFactorPolyhedronTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IFormFactor *) (IDecoratableBorn *)(IBornFF *) ((IFormFactorPolyhedron *) x));
-}
-static void *_p_FormFactorTetrahedronTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IFormFactor *) (IDecoratableBorn *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorTetrahedron *) x));
-}
-static void *_p_FormFactorConeTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IFormFactor *) (IDecoratableBorn *)(IBornFF *) ((FormFactorCone *) x));
-}
-static void *_p_FormFactorCone6To_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IFormFactor *) (IDecoratableBorn *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorCone6 *) x));
-}
-static void *_p_FormFactorSphereGaussianRadiusTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IFormFactor *) (IDecoratableBorn *)(IBornFF *) ((FormFactorSphereGaussianRadius *) x));
-}
-static void *_p_FormFactorSphereLogNormalRadiusTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IFormFactor *) (IDecoratableBorn *)(IBornFF *) ((FormFactorSphereLogNormalRadius *) x));
-}
-static void *_p_FormFactorHollowSphereTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IFormFactor *) (IDecoratableBorn *)(IBornFF *) ((FormFactorHollowSphere *) x));
-}
-static void *_p_FormFactorGaussSphereTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IFormFactor *) (IDecoratableBorn *)(IBornFF *) ((FormFactorGaussSphere *) x));
-}
-static void *_p_IProfileRectangularRippleTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IFormFactor *) (IDecoratableBorn *)(IBornFF *)(IProfileRipple *) ((IProfileRectangularRipple *) x));
-}
-static void *_p_ISawtoothRippleTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IFormFactor *) (IDecoratableBorn *)(IBornFF *)(IProfileRipple *) ((ISawtoothRipple *) x));
-}
-static void *_p_FormFactorLongBoxLorentzTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IFormFactor *) (IDecoratableBorn *)(IBornFF *) ((FormFactorLongBoxLorentz *) x));
-}
-static void *_p_FormFactorCosineRippleLorentzTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IFormFactor *) (IDecoratableBorn *)(IBornFF *)(IProfileRipple *)(ICosineRipple *) ((FormFactorCosineRippleLorentz *) x));
-}
-static void *_p_FormFactorSawtoothRippleLorentzTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IFormFactor *) (IDecoratableBorn *)(IBornFF *)(IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleLorentz *) x));
-}
-static void *_p_FormFactorSawtoothRippleBoxTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IFormFactor *) (IDecoratableBorn *)(IBornFF *)(IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleBox *) x));
-}
-static void *_p_FormFactorCosineRippleBoxTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IFormFactor *) (IDecoratableBorn *)(IBornFF *)(IProfileRipple *)(ICosineRipple *) ((FormFactorCosineRippleBox *) x));
-}
-static void *_p_FormFactorCompositionTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IFormFactor *)  ((FormFactorComposition *) x));
-}
-static void *_p_FormFactorPyramidTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IFormFactor *) (IDecoratableBorn *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorPyramid *) x));
-}
-static void *_p_FormFactorAnisoPyramidTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IFormFactor *) (IDecoratableBorn *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorAnisoPyramid *) x));
-}
-static void *_p_FormFactorPrism3To_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IFormFactor *) (IDecoratableBorn *)(IBornFF *)(IFormFactorPrism *) ((FormFactorPrism3 *) x));
-}
 static void *_p_FormFactorCuboctahedronTo_p_IFormFactorPolyhedron(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((IFormFactorPolyhedron *)  ((FormFactorCuboctahedron *) x));
 }
@@ -74159,17 +74308,44 @@ static void *_p_MisesFisherGaussPeakShapeTo_p_IPeakShape(void *x, int *SWIGUNUSE
 static void *_p_MisesGaussPeakShapeTo_p_IPeakShape(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((IPeakShape *)  ((MisesGaussPeakShape *) x));
 }
-static void *_p_ParticleCompositionTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *) (IParticle *) ((ParticleComposition *) x));
+static void *_p_IBornFFTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ISampleNode *)  ((IBornFF *) x));
 }
-static void *_p_LayerRoughnessTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *)  ((LayerRoughness *) x));
+static void *_p_FormFactorPrism6To_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ISampleNode *) (IBornFF *)(IFormFactorPrism *) ((FormFactorPrism6 *) x));
 }
-static void *_p_ParticleLayoutTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *)  ((ParticleLayout *) x));
+static void *_p_FormFactorHemiEllipsoidTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ISampleNode *) (IBornFF *) ((FormFactorHemiEllipsoid *) x));
 }
-static void *_p_MultiLayerTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *)  ((MultiLayer *) x));
+static void *_p_FormFactorFullSpheroidTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ISampleNode *) (IBornFF *) ((FormFactorFullSpheroid *) x));
+}
+static void *_p_FormFactorTruncatedSpheroidTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ISampleNode *) (IBornFF *) ((FormFactorTruncatedSpheroid *) x));
+}
+static void *_p_ICosineRippleTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ISampleNode *) (IBornFF *)(IProfileRipple *) ((ICosineRipple *) x));
+}
+static void *_p_IProfileRippleTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ISampleNode *) (IBornFF *) ((IProfileRipple *) x));
+}
+static void *_p_FormFactorLongBoxGaussTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ISampleNode *) (IBornFF *) ((FormFactorLongBoxGauss *) x));
+}
+static void *_p_ParticleCoreShellTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ISampleNode *) (IParticle *) ((ParticleCoreShell *) x));
+}
+static void *_p_FormFactorCosineRippleGaussTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ISampleNode *) (IBornFF *)(IProfileRipple *)(ICosineRipple *) ((FormFactorCosineRippleGauss *) x));
+}
+static void *_p_FormFactorSawtoothRippleGaussTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ISampleNode *) (IBornFF *)(IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleGauss *) x));
+}
+static void *_p_LayerTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ISampleNode *)  ((Layer *) x));
+}
+static void *_p_IFormFactorPrismTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ISampleNode *) (IBornFF *) ((IFormFactorPrism *) x));
 }
 static void *_p_CrystalTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ISampleNode *)  ((Crystal *) x));
@@ -74177,17 +74353,107 @@ static void *_p_CrystalTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory))
 static void *_p_MesoCrystalTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ISampleNode *) (IParticle *) ((MesoCrystal *) x));
 }
+static void *_p_FormFactorCantellatedCubeTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ISampleNode *) (IBornFF *)(IFormFactorPolyhedron *) ((FormFactorCantellatedCube *) x));
+}
+static void *_p_FormFactorFullSphereTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ISampleNode *) (IBornFF *) ((FormFactorFullSphere *) x));
+}
+static void *_p_FormFactorTruncatedCubeTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ISampleNode *) (IBornFF *)(IFormFactorPolyhedron *) ((FormFactorTruncatedCube *) x));
+}
+static void *_p_FormFactorTruncatedSphereTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ISampleNode *) (IBornFF *) ((FormFactorTruncatedSphere *) x));
+}
+static void *_p_MultiLayerTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ISampleNode *)  ((MultiLayer *) x));
+}
 static void *_p_IParticleTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ISampleNode *)  ((IParticle *) x));
 }
 static void *_p_ParticleTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ISampleNode *) (IParticle *) ((Particle *) x));
 }
-static void *_p_ParticleCoreShellTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *) (IParticle *) ((ParticleCoreShell *) x));
+static void *_p_FormFactorEllipsoidalCylinderTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ISampleNode *) (IBornFF *) ((FormFactorEllipsoidalCylinder *) x));
 }
-static void *_p_LayerTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *)  ((Layer *) x));
+static void *_p_FormFactorCylinderTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ISampleNode *) (IBornFF *) ((FormFactorCylinder *) x));
+}
+static void *_p_FormFactorBoxTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ISampleNode *) (IBornFF *)(IFormFactorPrism *) ((FormFactorBox *) x));
+}
+static void *_p_FormFactorIcosahedronTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ISampleNode *) (IBornFF *)(IFormFactorPolyhedron *) ((FormFactorIcosahedron *) x));
+}
+static void *_p_FormFactorDodecahedronTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ISampleNode *) (IBornFF *)(IFormFactorPolyhedron *) ((FormFactorDodecahedron *) x));
+}
+static void *_p_FormFactorCuboctahedronTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ISampleNode *) (IBornFF *)(IFormFactorPolyhedron *) ((FormFactorCuboctahedron *) x));
+}
+static void *_p_IFormFactorPolyhedronTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ISampleNode *) (IBornFF *) ((IFormFactorPolyhedron *) x));
+}
+static void *_p_FormFactorTetrahedronTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ISampleNode *) (IBornFF *)(IFormFactorPolyhedron *) ((FormFactorTetrahedron *) x));
+}
+static void *_p_FormFactorConeTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ISampleNode *) (IBornFF *) ((FormFactorCone *) x));
+}
+static void *_p_FormFactorCone6To_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ISampleNode *) (IBornFF *)(IFormFactorPolyhedron *) ((FormFactorCone6 *) x));
+}
+static void *_p_FormFactorSphereGaussianRadiusTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ISampleNode *) (IBornFF *) ((FormFactorSphereGaussianRadius *) x));
+}
+static void *_p_FormFactorSphereLogNormalRadiusTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ISampleNode *) (IBornFF *) ((FormFactorSphereLogNormalRadius *) x));
+}
+static void *_p_FormFactorHollowSphereTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ISampleNode *) (IBornFF *) ((FormFactorHollowSphere *) x));
+}
+static void *_p_FormFactorGaussSphereTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ISampleNode *) (IBornFF *) ((FormFactorGaussSphere *) x));
+}
+static void *_p_LayerRoughnessTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ISampleNode *)  ((LayerRoughness *) x));
+}
+static void *_p_ISawtoothRippleTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ISampleNode *) (IBornFF *)(IProfileRipple *) ((ISawtoothRipple *) x));
+}
+static void *_p_IProfileRectangularRippleTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ISampleNode *) (IBornFF *)(IProfileRipple *) ((IProfileRectangularRipple *) x));
+}
+static void *_p_FormFactorCosineRippleLorentzTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ISampleNode *) (IBornFF *)(IProfileRipple *)(ICosineRipple *) ((FormFactorCosineRippleLorentz *) x));
+}
+static void *_p_FormFactorLongBoxLorentzTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ISampleNode *) (IBornFF *) ((FormFactorLongBoxLorentz *) x));
+}
+static void *_p_FormFactorSawtoothRippleLorentzTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ISampleNode *) (IBornFF *)(IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleLorentz *) x));
+}
+static void *_p_ParticleLayoutTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ISampleNode *)  ((ParticleLayout *) x));
+}
+static void *_p_FormFactorCosineRippleBoxTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ISampleNode *) (IBornFF *)(IProfileRipple *)(ICosineRipple *) ((FormFactorCosineRippleBox *) x));
+}
+static void *_p_FormFactorSawtoothRippleBoxTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ISampleNode *) (IBornFF *)(IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleBox *) x));
+}
+static void *_p_ParticleCompositionTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ISampleNode *) (IParticle *) ((ParticleComposition *) x));
+}
+static void *_p_FormFactorAnisoPyramidTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ISampleNode *) (IBornFF *)(IFormFactorPolyhedron *) ((FormFactorAnisoPyramid *) x));
+}
+static void *_p_FormFactorPrism3To_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ISampleNode *) (IBornFF *)(IFormFactorPrism *) ((FormFactorPrism3 *) x));
+}
+static void *_p_FormFactorPyramidTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ISampleNode *) (IBornFF *)(IFormFactorPolyhedron *) ((FormFactorPyramid *) x));
 }
 static void *_p_BasicLattice2DTo_p_Lattice2D(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((Lattice2D *)  ((BasicLattice2D *) x));
@@ -74262,16 +74528,16 @@ static void *_p_FormFactorSawtoothRippleGaussTo_p_ISawtoothRipple(void *x, int *
     return (void *)((ISawtoothRipple *)  ((FormFactorSawtoothRippleGauss *) x));
 }
 static void *_p_FormFactorBoxTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *)(IFormFactorPrism *) ((FormFactorBox *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *)(IFormFactorPrism *) ((FormFactorBox *) x));
 }
 static void *_p_MultiLayerTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (ISampleNode *) ((MultiLayer *) x));
 }
 static void *_p_FormFactorSphereGaussianRadiusTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *) ((FormFactorSphereGaussianRadius *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *) ((FormFactorSphereGaussianRadius *) x));
 }
 static void *_p_FormFactorSphereLogNormalRadiusTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *) ((FormFactorSphereLogNormalRadius *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *) ((FormFactorSphereLogNormalRadius *) x));
 }
 static void *_p_FTDecayFunction1DGaussTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (IFTDecayFunction1D *) ((FTDecayFunction1DGauss *) x));
@@ -74286,10 +74552,10 @@ static void *_p_IDecoratableBornTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(new
     return (void *)((ICloneable *) (IFormFactor *) ((IDecoratableBorn *) x));
 }
 static void *_p_FormFactorHemiEllipsoidTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *) ((FormFactorHemiEllipsoid *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *) ((FormFactorHemiEllipsoid *) x));
 }
 static void *_p_IBornFFTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (IFormFactor *)(IDecoratableBorn *) ((IBornFF *) x));
+    return (void *)((ICloneable *) (ISampleNode *) ((IBornFF *) x));
 }
 static void *_p_MisesGaussPeakShapeTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (IPeakShape *) ((MisesGaussPeakShape *) x));
@@ -74313,28 +74579,28 @@ static void *_p_IPeakShapeTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory
     return (void *)((ICloneable *)  ((IPeakShape *) x));
 }
 static void *_p_FormFactorPrism3To_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *)(IFormFactorPrism *) ((FormFactorPrism3 *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *)(IFormFactorPrism *) ((FormFactorPrism3 *) x));
 }
 static void *_p_IFormFactorPolyhedronTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *) ((IFormFactorPolyhedron *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *) ((IFormFactorPolyhedron *) x));
 }
 static void *_p_IFormFactorPrismTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *) ((IFormFactorPrism *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *) ((IFormFactorPrism *) x));
 }
 static void *_p_FormFactorCuboctahedronTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorCuboctahedron *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorCuboctahedron *) x));
 }
 static void *_p_FormFactorDodecahedronTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorDodecahedron *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorDodecahedron *) x));
 }
 static void *_p_FormFactorIcosahedronTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorIcosahedron *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorIcosahedron *) x));
 }
 static void *_p_FormFactorTetrahedronTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorTetrahedron *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorTetrahedron *) x));
 }
 static void *_p_FormFactorPrism6To_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *)(IFormFactorPrism *) ((FormFactorPrism6 *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *)(IFormFactorPrism *) ((FormFactorPrism6 *) x));
 }
 static void *_p_FTDistribution2DConeTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (IFTDistribution2D *) ((FTDistribution2DCone *) x));
@@ -74346,22 +74612,22 @@ static void *_p_ParticleCoreShellTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(ne
     return (void *)((ICloneable *) (ISampleNode *)(IParticle *) ((ParticleCoreShell *) x));
 }
 static void *_p_ISawtoothRippleTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *)(IProfileRipple *) ((ISawtoothRipple *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *)(IProfileRipple *) ((ISawtoothRipple *) x));
 }
 static void *_p_IProfileRectangularRippleTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *)(IProfileRipple *) ((IProfileRectangularRipple *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *)(IProfileRipple *) ((IProfileRectangularRipple *) x));
 }
 static void *_p_FormFactorFullSphereTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *) ((FormFactorFullSphere *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *) ((FormFactorFullSphere *) x));
 }
 static void *_p_FormFactorTruncatedSphereTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *) ((FormFactorTruncatedSphere *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *) ((FormFactorTruncatedSphere *) x));
 }
 static void *_p_IFormFactorTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *)  ((IFormFactor *) x));
 }
 static void *_p_FormFactorLongBoxGaussTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *) ((FormFactorLongBoxGauss *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *) ((FormFactorLongBoxGauss *) x));
 }
 static void *_p_InterferenceHardDiskTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (IInterference *) ((InterferenceHardDisk *) x));
@@ -74388,10 +74654,10 @@ static void *_p_RotationXTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)
     return (void *)((ICloneable *) (IRotation *) ((RotationX *) x));
 }
 static void *_p_FormFactorFullSpheroidTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *) ((FormFactorFullSpheroid *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *) ((FormFactorFullSpheroid *) x));
 }
 static void *_p_FormFactorTruncatedSpheroidTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *) ((FormFactorTruncatedSpheroid *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *) ((FormFactorTruncatedSpheroid *) x));
 }
 static void *_p_FTDistribution2DGaussTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (IFTDistribution2D *) ((FTDistribution2DGauss *) x));
@@ -74400,13 +74666,13 @@ static void *_p_FTDecayFunction2DGaussTo_p_ICloneable(void *x, int *SWIGUNUSEDPA
     return (void *)((ICloneable *) (IFTDecayFunction2D *) ((FTDecayFunction2DGauss *) x));
 }
 static void *_p_FormFactorCantellatedCubeTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorCantellatedCube *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorCantellatedCube *) x));
 }
 static void *_p_RotationYTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (IRotation *) ((RotationY *) x));
 }
 static void *_p_FormFactorTruncatedCubeTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorTruncatedCube *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorTruncatedCube *) x));
 }
 static void *_p_RotationZTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (IRotation *) ((RotationZ *) x));
@@ -74439,28 +74705,28 @@ static void *_p_IFTDistribution1DTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(ne
     return (void *)((ICloneable *)  ((IFTDistribution1D *) x));
 }
 static void *_p_FormFactorConeTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *) ((FormFactorCone *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *) ((FormFactorCone *) x));
 }
 static void *_p_FormFactorCosineRippleBoxTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *)(IProfileRipple *)(ICosineRipple *) ((FormFactorCosineRippleBox *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *)(IProfileRipple *)(ICosineRipple *) ((FormFactorCosineRippleBox *) x));
 }
 static void *_p_FormFactorSawtoothRippleBoxTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *)(IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleBox *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *)(IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleBox *) x));
 }
 static void *_p_LayerTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (ISampleNode *) ((Layer *) x));
 }
 static void *_p_FormFactorAnisoPyramidTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorAnisoPyramid *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorAnisoPyramid *) x));
 }
 static void *_p_FormFactorPyramidTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorPyramid *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorPyramid *) x));
 }
 static void *_p_FormFactorCylinderTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *) ((FormFactorCylinder *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *) ((FormFactorCylinder *) x));
 }
 static void *_p_FormFactorEllipsoidalCylinderTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *) ((FormFactorEllipsoidalCylinder *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *) ((FormFactorEllipsoidalCylinder *) x));
 }
 static void *_p_FormFactorCompositionTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (IFormFactor *) ((FormFactorComposition *) x));
@@ -74484,10 +74750,10 @@ static void *_p_FTDecayFunction2DVoigtTo_p_ICloneable(void *x, int *SWIGUNUSEDPA
     return (void *)((ICloneable *) (IFTDecayFunction2D *) ((FTDecayFunction2DVoigt *) x));
 }
 static void *_p_FormFactorCosineRippleGaussTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *)(IProfileRipple *)(ICosineRipple *) ((FormFactorCosineRippleGauss *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *)(IProfileRipple *)(ICosineRipple *) ((FormFactorCosineRippleGauss *) x));
 }
 static void *_p_FormFactorSawtoothRippleGaussTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *)(IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleGauss *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *)(IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleGauss *) x));
 }
 static void *_p_FTDistribution2DCauchyTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (IFTDistribution2D *) ((FTDistribution2DCauchy *) x));
@@ -74502,7 +74768,7 @@ static void *_p_FTDistribution1DCauchyTo_p_ICloneable(void *x, int *SWIGUNUSEDPA
     return (void *)((ICloneable *) (IFTDistribution1D *) ((FTDistribution1DCauchy *) x));
 }
 static void *_p_FormFactorCone6To_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorCone6 *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorCone6 *) x));
 }
 static void *_p_LayerRoughnessTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (ISampleNode *) ((LayerRoughness *) x));
@@ -74523,10 +74789,10 @@ static void *_p_MesoCrystalTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemor
     return (void *)((ICloneable *) (ISampleNode *)(IParticle *) ((MesoCrystal *) x));
 }
 static void *_p_ICosineRippleTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *)(IProfileRipple *) ((ICosineRipple *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *)(IProfileRipple *) ((ICosineRipple *) x));
 }
 static void *_p_IProfileRippleTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *) ((IProfileRipple *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *) ((IProfileRipple *) x));
 }
 static void *_p_IFTDistribution2DTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *)  ((IFTDistribution2D *) x));
@@ -74535,10 +74801,10 @@ static void *_p_IFTDecayFunction2DTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(n
     return (void *)((ICloneable *)  ((IFTDecayFunction2D *) x));
 }
 static void *_p_FormFactorHollowSphereTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *) ((FormFactorHollowSphere *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *) ((FormFactorHollowSphere *) x));
 }
 static void *_p_FormFactorGaussSphereTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *) ((FormFactorGaussSphere *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *) ((FormFactorGaussSphere *) x));
 }
 static void *_p_InterferenceNoneTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (IInterference *) ((InterferenceNone *) x));
@@ -74562,13 +74828,13 @@ static void *_p_Interference1DLatticeTo_p_ICloneable(void *x, int *SWIGUNUSEDPAR
     return (void *)((ICloneable *) (IInterference *) ((Interference1DLattice *) x));
 }
 static void *_p_FormFactorCosineRippleLorentzTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *)(IProfileRipple *)(ICosineRipple *) ((FormFactorCosineRippleLorentz *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *)(IProfileRipple *)(ICosineRipple *) ((FormFactorCosineRippleLorentz *) x));
 }
 static void *_p_FormFactorLongBoxLorentzTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *) ((FormFactorLongBoxLorentz *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *) ((FormFactorLongBoxLorentz *) x));
 }
 static void *_p_FormFactorSawtoothRippleLorentzTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *)(IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleLorentz *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *)(IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleLorentz *) x));
 }
 static void *_p_FTDecayFunction1DTriangleTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (IFTDecayFunction1D *) ((FTDecayFunction1DTriangle *) x));
@@ -74619,16 +74885,16 @@ static void *_p_SimpleSelectionRuleTo_p_ISelectionRule(void *x, int *SWIGUNUSEDP
     return (void *)((ISelectionRule *)  ((SimpleSelectionRule *) x));
 }
 static void *_p_FormFactorBoxTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *)(IFormFactorPrism *) ((FormFactorBox *) x));
+    return (void *)((INode *) (ISampleNode *)(IBornFF *)(IFormFactorPrism *) ((FormFactorBox *) x));
 }
 static void *_p_MultiLayerTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (ISampleNode *) ((MultiLayer *) x));
 }
 static void *_p_FormFactorSphereGaussianRadiusTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *) ((FormFactorSphereGaussianRadius *) x));
+    return (void *)((INode *) (ISampleNode *)(IBornFF *) ((FormFactorSphereGaussianRadius *) x));
 }
 static void *_p_FormFactorSphereLogNormalRadiusTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *) ((FormFactorSphereLogNormalRadius *) x));
+    return (void *)((INode *) (ISampleNode *)(IBornFF *) ((FormFactorSphereLogNormalRadius *) x));
 }
 static void *_p_FTDecayFunction1DGaussTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (IFTDecayFunction1D *) ((FTDecayFunction1DGauss *) x));
@@ -74643,10 +74909,10 @@ static void *_p_IDecoratableBornTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemor
     return (void *)((INode *) (IFormFactor *) ((IDecoratableBorn *) x));
 }
 static void *_p_FormFactorHemiEllipsoidTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *) ((FormFactorHemiEllipsoid *) x));
+    return (void *)((INode *) (ISampleNode *)(IBornFF *) ((FormFactorHemiEllipsoid *) x));
 }
 static void *_p_IBornFFTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (IFormFactor *)(IDecoratableBorn *) ((IBornFF *) x));
+    return (void *)((INode *) (ISampleNode *) ((IBornFF *) x));
 }
 static void *_p_MisesGaussPeakShapeTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (IPeakShape *) ((MisesGaussPeakShape *) x));
@@ -74670,28 +74936,28 @@ static void *_p_IPeakShapeTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *)  ((IPeakShape *) x));
 }
 static void *_p_FormFactorPrism3To_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *)(IFormFactorPrism *) ((FormFactorPrism3 *) x));
+    return (void *)((INode *) (ISampleNode *)(IBornFF *)(IFormFactorPrism *) ((FormFactorPrism3 *) x));
 }
 static void *_p_IFormFactorPolyhedronTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *) ((IFormFactorPolyhedron *) x));
+    return (void *)((INode *) (ISampleNode *)(IBornFF *) ((IFormFactorPolyhedron *) x));
 }
 static void *_p_IFormFactorPrismTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *) ((IFormFactorPrism *) x));
+    return (void *)((INode *) (ISampleNode *)(IBornFF *) ((IFormFactorPrism *) x));
 }
 static void *_p_FormFactorCuboctahedronTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorCuboctahedron *) x));
+    return (void *)((INode *) (ISampleNode *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorCuboctahedron *) x));
 }
 static void *_p_FormFactorDodecahedronTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorDodecahedron *) x));
+    return (void *)((INode *) (ISampleNode *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorDodecahedron *) x));
 }
 static void *_p_FormFactorIcosahedronTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorIcosahedron *) x));
+    return (void *)((INode *) (ISampleNode *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorIcosahedron *) x));
 }
 static void *_p_FormFactorTetrahedronTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorTetrahedron *) x));
+    return (void *)((INode *) (ISampleNode *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorTetrahedron *) x));
 }
 static void *_p_FormFactorPrism6To_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *)(IFormFactorPrism *) ((FormFactorPrism6 *) x));
+    return (void *)((INode *) (ISampleNode *)(IBornFF *)(IFormFactorPrism *) ((FormFactorPrism6 *) x));
 }
 static void *_p_FTDistribution2DConeTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (IFTDistribution2D *) ((FTDistribution2DCone *) x));
@@ -74703,22 +74969,22 @@ static void *_p_ParticleCoreShellTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemo
     return (void *)((INode *) (ISampleNode *)(IParticle *) ((ParticleCoreShell *) x));
 }
 static void *_p_ISawtoothRippleTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *)(IProfileRipple *) ((ISawtoothRipple *) x));
+    return (void *)((INode *) (ISampleNode *)(IBornFF *)(IProfileRipple *) ((ISawtoothRipple *) x));
 }
 static void *_p_IProfileRectangularRippleTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *)(IProfileRipple *) ((IProfileRectangularRipple *) x));
+    return (void *)((INode *) (ISampleNode *)(IBornFF *)(IProfileRipple *) ((IProfileRectangularRipple *) x));
 }
 static void *_p_FormFactorFullSphereTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *) ((FormFactorFullSphere *) x));
+    return (void *)((INode *) (ISampleNode *)(IBornFF *) ((FormFactorFullSphere *) x));
 }
 static void *_p_FormFactorTruncatedSphereTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *) ((FormFactorTruncatedSphere *) x));
+    return (void *)((INode *) (ISampleNode *)(IBornFF *) ((FormFactorTruncatedSphere *) x));
 }
 static void *_p_IFormFactorTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *)  ((IFormFactor *) x));
 }
 static void *_p_FormFactorLongBoxGaussTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *) ((FormFactorLongBoxGauss *) x));
+    return (void *)((INode *) (ISampleNode *)(IBornFF *) ((FormFactorLongBoxGauss *) x));
 }
 static void *_p_InterferenceHardDiskTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (IInterference *) ((InterferenceHardDisk *) x));
@@ -74745,10 +75011,10 @@ static void *_p_RotationXTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (IRotation *) ((RotationX *) x));
 }
 static void *_p_FormFactorFullSpheroidTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *) ((FormFactorFullSpheroid *) x));
+    return (void *)((INode *) (ISampleNode *)(IBornFF *) ((FormFactorFullSpheroid *) x));
 }
 static void *_p_FormFactorTruncatedSpheroidTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *) ((FormFactorTruncatedSpheroid *) x));
+    return (void *)((INode *) (ISampleNode *)(IBornFF *) ((FormFactorTruncatedSpheroid *) x));
 }
 static void *_p_FTDistribution2DGaussTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (IFTDistribution2D *) ((FTDistribution2DGauss *) x));
@@ -74757,13 +75023,13 @@ static void *_p_FTDecayFunction2DGaussTo_p_INode(void *x, int *SWIGUNUSEDPARM(ne
     return (void *)((INode *) (IFTDecayFunction2D *) ((FTDecayFunction2DGauss *) x));
 }
 static void *_p_FormFactorCantellatedCubeTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorCantellatedCube *) x));
+    return (void *)((INode *) (ISampleNode *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorCantellatedCube *) x));
 }
 static void *_p_RotationYTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (IRotation *) ((RotationY *) x));
 }
 static void *_p_FormFactorTruncatedCubeTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorTruncatedCube *) x));
+    return (void *)((INode *) (ISampleNode *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorTruncatedCube *) x));
 }
 static void *_p_RotationZTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (IRotation *) ((RotationZ *) x));
@@ -74796,28 +75062,28 @@ static void *_p_IFTDistribution1DTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemo
     return (void *)((INode *)  ((IFTDistribution1D *) x));
 }
 static void *_p_FormFactorConeTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *) ((FormFactorCone *) x));
+    return (void *)((INode *) (ISampleNode *)(IBornFF *) ((FormFactorCone *) x));
 }
 static void *_p_FormFactorCosineRippleBoxTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *)(IProfileRipple *)(ICosineRipple *) ((FormFactorCosineRippleBox *) x));
+    return (void *)((INode *) (ISampleNode *)(IBornFF *)(IProfileRipple *)(ICosineRipple *) ((FormFactorCosineRippleBox *) x));
 }
 static void *_p_FormFactorSawtoothRippleBoxTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *)(IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleBox *) x));
+    return (void *)((INode *) (ISampleNode *)(IBornFF *)(IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleBox *) x));
 }
 static void *_p_LayerTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (ISampleNode *) ((Layer *) x));
 }
 static void *_p_FormFactorAnisoPyramidTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorAnisoPyramid *) x));
+    return (void *)((INode *) (ISampleNode *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorAnisoPyramid *) x));
 }
 static void *_p_FormFactorPyramidTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorPyramid *) x));
+    return (void *)((INode *) (ISampleNode *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorPyramid *) x));
 }
 static void *_p_FormFactorCylinderTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *) ((FormFactorCylinder *) x));
+    return (void *)((INode *) (ISampleNode *)(IBornFF *) ((FormFactorCylinder *) x));
 }
 static void *_p_FormFactorEllipsoidalCylinderTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *) ((FormFactorEllipsoidalCylinder *) x));
+    return (void *)((INode *) (ISampleNode *)(IBornFF *) ((FormFactorEllipsoidalCylinder *) x));
 }
 static void *_p_FormFactorCompositionTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (IFormFactor *) ((FormFactorComposition *) x));
@@ -74841,10 +75107,10 @@ static void *_p_FTDecayFunction2DVoigtTo_p_INode(void *x, int *SWIGUNUSEDPARM(ne
     return (void *)((INode *) (IFTDecayFunction2D *) ((FTDecayFunction2DVoigt *) x));
 }
 static void *_p_FormFactorCosineRippleGaussTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *)(IProfileRipple *)(ICosineRipple *) ((FormFactorCosineRippleGauss *) x));
+    return (void *)((INode *) (ISampleNode *)(IBornFF *)(IProfileRipple *)(ICosineRipple *) ((FormFactorCosineRippleGauss *) x));
 }
 static void *_p_FormFactorSawtoothRippleGaussTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *)(IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleGauss *) x));
+    return (void *)((INode *) (ISampleNode *)(IBornFF *)(IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleGauss *) x));
 }
 static void *_p_FTDistribution2DCauchyTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (IFTDistribution2D *) ((FTDistribution2DCauchy *) x));
@@ -74859,7 +75125,7 @@ static void *_p_FTDistribution1DCauchyTo_p_INode(void *x, int *SWIGUNUSEDPARM(ne
     return (void *)((INode *) (IFTDistribution1D *) ((FTDistribution1DCauchy *) x));
 }
 static void *_p_FormFactorCone6To_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorCone6 *) x));
+    return (void *)((INode *) (ISampleNode *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorCone6 *) x));
 }
 static void *_p_LayerRoughnessTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (ISampleNode *) ((LayerRoughness *) x));
@@ -74880,10 +75146,10 @@ static void *_p_MesoCrystalTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (ISampleNode *)(IParticle *) ((MesoCrystal *) x));
 }
 static void *_p_ICosineRippleTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *)(IProfileRipple *) ((ICosineRipple *) x));
+    return (void *)((INode *) (ISampleNode *)(IBornFF *)(IProfileRipple *) ((ICosineRipple *) x));
 }
 static void *_p_IProfileRippleTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *) ((IProfileRipple *) x));
+    return (void *)((INode *) (ISampleNode *)(IBornFF *) ((IProfileRipple *) x));
 }
 static void *_p_Lattice3DTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *)  ((Lattice3D *) x));
@@ -74895,10 +75161,10 @@ static void *_p_IFTDecayFunction2DTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmem
     return (void *)((INode *)  ((IFTDecayFunction2D *) x));
 }
 static void *_p_FormFactorHollowSphereTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *) ((FormFactorHollowSphere *) x));
+    return (void *)((INode *) (ISampleNode *)(IBornFF *) ((FormFactorHollowSphere *) x));
 }
 static void *_p_FormFactorGaussSphereTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *) ((FormFactorGaussSphere *) x));
+    return (void *)((INode *) (ISampleNode *)(IBornFF *) ((FormFactorGaussSphere *) x));
 }
 static void *_p_InterferenceNoneTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (IInterference *) ((InterferenceNone *) x));
@@ -74922,13 +75188,13 @@ static void *_p_Interference1DLatticeTo_p_INode(void *x, int *SWIGUNUSEDPARM(new
     return (void *)((INode *) (IInterference *) ((Interference1DLattice *) x));
 }
 static void *_p_FormFactorCosineRippleLorentzTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *)(IProfileRipple *)(ICosineRipple *) ((FormFactorCosineRippleLorentz *) x));
+    return (void *)((INode *) (ISampleNode *)(IBornFF *)(IProfileRipple *)(ICosineRipple *) ((FormFactorCosineRippleLorentz *) x));
 }
 static void *_p_FormFactorLongBoxLorentzTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *) ((FormFactorLongBoxLorentz *) x));
+    return (void *)((INode *) (ISampleNode *)(IBornFF *) ((FormFactorLongBoxLorentz *) x));
 }
 static void *_p_FormFactorSawtoothRippleLorentzTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (IFormFactor *)(IDecoratableBorn *)(IBornFF *)(IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleLorentz *) x));
+    return (void *)((INode *) (ISampleNode *)(IBornFF *)(IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleLorentz *) x));
 }
 static void *_p_FTDecayFunction1DTriangleTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (IFTDecayFunction1D *) ((FTDecayFunction1DTriangle *) x));
@@ -74939,126 +75205,9 @@ 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_IBornFFTo_p_IDecoratableBorn(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IDecoratableBorn *)  ((IBornFF *) x));
-}
-static void *_p_FormFactorPrism6To_p_IDecoratableBorn(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IDecoratableBorn *) (IBornFF *)(IFormFactorPrism *) ((FormFactorPrism6 *) x));
-}
-static void *_p_FormFactorHemiEllipsoidTo_p_IDecoratableBorn(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IDecoratableBorn *) (IBornFF *) ((FormFactorHemiEllipsoid *) x));
-}
 static void *_p_DecoratedFFTo_p_IDecoratableBorn(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((IDecoratableBorn *)  ((DecoratedFF *) x));
 }
-static void *_p_FormFactorFullSpheroidTo_p_IDecoratableBorn(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IDecoratableBorn *) (IBornFF *) ((FormFactorFullSpheroid *) x));
-}
-static void *_p_FormFactorTruncatedSpheroidTo_p_IDecoratableBorn(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IDecoratableBorn *) (IBornFF *) ((FormFactorTruncatedSpheroid *) x));
-}
-static void *_p_IProfileRippleTo_p_IDecoratableBorn(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IDecoratableBorn *) (IBornFF *) ((IProfileRipple *) x));
-}
-static void *_p_ICosineRippleTo_p_IDecoratableBorn(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IDecoratableBorn *) (IBornFF *)(IProfileRipple *) ((ICosineRipple *) x));
-}
-static void *_p_FormFactorLongBoxGaussTo_p_IDecoratableBorn(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IDecoratableBorn *) (IBornFF *) ((FormFactorLongBoxGauss *) x));
-}
-static void *_p_FormFactorSawtoothRippleGaussTo_p_IDecoratableBorn(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IDecoratableBorn *) (IBornFF *)(IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleGauss *) x));
-}
-static void *_p_FormFactorCosineRippleGaussTo_p_IDecoratableBorn(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IDecoratableBorn *) (IBornFF *)(IProfileRipple *)(ICosineRipple *) ((FormFactorCosineRippleGauss *) x));
-}
-static void *_p_IFormFactorPrismTo_p_IDecoratableBorn(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IDecoratableBorn *) (IBornFF *) ((IFormFactorPrism *) x));
-}
-static void *_p_FormFactorCantellatedCubeTo_p_IDecoratableBorn(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IDecoratableBorn *) (IBornFF *)(IFormFactorPolyhedron *) ((FormFactorCantellatedCube *) x));
-}
-static void *_p_FormFactorFullSphereTo_p_IDecoratableBorn(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IDecoratableBorn *) (IBornFF *) ((FormFactorFullSphere *) x));
-}
-static void *_p_FormFactorTruncatedCubeTo_p_IDecoratableBorn(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IDecoratableBorn *) (IBornFF *)(IFormFactorPolyhedron *) ((FormFactorTruncatedCube *) x));
-}
-static void *_p_FormFactorTruncatedSphereTo_p_IDecoratableBorn(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IDecoratableBorn *) (IBornFF *) ((FormFactorTruncatedSphere *) x));
-}
-static void *_p_FormFactorEllipsoidalCylinderTo_p_IDecoratableBorn(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IDecoratableBorn *) (IBornFF *) ((FormFactorEllipsoidalCylinder *) x));
-}
-static void *_p_FormFactorCylinderTo_p_IDecoratableBorn(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IDecoratableBorn *) (IBornFF *) ((FormFactorCylinder *) x));
-}
-static void *_p_FormFactorBoxTo_p_IDecoratableBorn(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IDecoratableBorn *) (IBornFF *)(IFormFactorPrism *) ((FormFactorBox *) x));
-}
-static void *_p_FormFactorTetrahedronTo_p_IDecoratableBorn(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IDecoratableBorn *) (IBornFF *)(IFormFactorPolyhedron *) ((FormFactorTetrahedron *) x));
-}
-static void *_p_FormFactorIcosahedronTo_p_IDecoratableBorn(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IDecoratableBorn *) (IBornFF *)(IFormFactorPolyhedron *) ((FormFactorIcosahedron *) x));
-}
-static void *_p_FormFactorDodecahedronTo_p_IDecoratableBorn(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IDecoratableBorn *) (IBornFF *)(IFormFactorPolyhedron *) ((FormFactorDodecahedron *) x));
-}
-static void *_p_FormFactorCuboctahedronTo_p_IDecoratableBorn(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IDecoratableBorn *) (IBornFF *)(IFormFactorPolyhedron *) ((FormFactorCuboctahedron *) x));
-}
-static void *_p_IFormFactorPolyhedronTo_p_IDecoratableBorn(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IDecoratableBorn *) (IBornFF *) ((IFormFactorPolyhedron *) x));
-}
-static void *_p_FormFactorConeTo_p_IDecoratableBorn(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IDecoratableBorn *) (IBornFF *) ((FormFactorCone *) x));
-}
-static void *_p_FormFactorCone6To_p_IDecoratableBorn(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IDecoratableBorn *) (IBornFF *)(IFormFactorPolyhedron *) ((FormFactorCone6 *) x));
-}
-static void *_p_FormFactorSphereGaussianRadiusTo_p_IDecoratableBorn(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IDecoratableBorn *) (IBornFF *) ((FormFactorSphereGaussianRadius *) x));
-}
-static void *_p_FormFactorSphereLogNormalRadiusTo_p_IDecoratableBorn(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IDecoratableBorn *) (IBornFF *) ((FormFactorSphereLogNormalRadius *) x));
-}
-static void *_p_FormFactorHollowSphereTo_p_IDecoratableBorn(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IDecoratableBorn *) (IBornFF *) ((FormFactorHollowSphere *) x));
-}
-static void *_p_FormFactorGaussSphereTo_p_IDecoratableBorn(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IDecoratableBorn *) (IBornFF *) ((FormFactorGaussSphere *) x));
-}
-static void *_p_IProfileRectangularRippleTo_p_IDecoratableBorn(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IDecoratableBorn *) (IBornFF *)(IProfileRipple *) ((IProfileRectangularRipple *) x));
-}
-static void *_p_ISawtoothRippleTo_p_IDecoratableBorn(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IDecoratableBorn *) (IBornFF *)(IProfileRipple *) ((ISawtoothRipple *) x));
-}
-static void *_p_FormFactorSawtoothRippleLorentzTo_p_IDecoratableBorn(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IDecoratableBorn *) (IBornFF *)(IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleLorentz *) x));
-}
-static void *_p_FormFactorLongBoxLorentzTo_p_IDecoratableBorn(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IDecoratableBorn *) (IBornFF *) ((FormFactorLongBoxLorentz *) x));
-}
-static void *_p_FormFactorCosineRippleLorentzTo_p_IDecoratableBorn(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IDecoratableBorn *) (IBornFF *)(IProfileRipple *)(ICosineRipple *) ((FormFactorCosineRippleLorentz *) x));
-}
-static void *_p_FormFactorSawtoothRippleBoxTo_p_IDecoratableBorn(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IDecoratableBorn *) (IBornFF *)(IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleBox *) x));
-}
-static void *_p_FormFactorCosineRippleBoxTo_p_IDecoratableBorn(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IDecoratableBorn *) (IBornFF *)(IProfileRipple *)(ICosineRipple *) ((FormFactorCosineRippleBox *) x));
-}
-static void *_p_FormFactorPyramidTo_p_IDecoratableBorn(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IDecoratableBorn *) (IBornFF *)(IFormFactorPolyhedron *) ((FormFactorPyramid *) x));
-}
-static void *_p_FormFactorAnisoPyramidTo_p_IDecoratableBorn(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IDecoratableBorn *) (IBornFF *)(IFormFactorPolyhedron *) ((FormFactorAnisoPyramid *) x));
-}
-static void *_p_FormFactorPrism3To_p_IDecoratableBorn(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IDecoratableBorn *) (IBornFF *)(IFormFactorPrism *) ((FormFactorPrism3 *) x));
-}
 static void *_p_FormFactorPrism6To_p_IBornFF(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((IBornFF *) (IFormFactorPrism *) ((FormFactorPrism6 *) x));
 }
@@ -75653,24 +75802,24 @@ 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_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_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_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_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_IBornFF, _p_IBornFFTo_p_IDecoratableBorn, 0, 0},  {&_swigt__p_FormFactorPrism6, _p_FormFactorPrism6To_p_IDecoratableBorn, 0, 0},  {&_swigt__p_FormFactorHemiEllipsoid, _p_FormFactorHemiEllipsoidTo_p_IDecoratableBorn, 0, 0},  {&_swigt__p_FormFactorFullSpheroid, _p_FormFactorFullSpheroidTo_p_IDecoratableBorn, 0, 0},  {&_swigt__p_FormFactorTruncatedSpheroid, _p_FormFactorTruncatedSpheroidTo_p_IDecoratableBorn, 0, 0},  {&_swigt__p_DecoratedFF, _p_DecoratedFFTo_p_IDecoratableBorn, 0, 0},  {&_swigt__p_ICosineRipple, _p_ICosineRippleTo_p_IDecoratableBorn, 0, 0},  {&_swigt__p_IProfileRipple, _p_IProfileRippleTo_p_IDecoratableBorn, 0, 0},  {&_swigt__p_FormFactorLongBoxGauss, _p_FormFactorLongBoxGaussTo_p_IDecoratableBorn, 0, 0},  {&_swigt__p_FormFactorCosineRippleGauss, _p_FormFactorCosineRippleGaussTo_p_IDecoratableBorn, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleGauss, _p_FormFactorSawtoothRippleGaussTo_p_IDecoratableBorn, 0, 0},  {&_swigt__p_IFormFactorPrism, _p_IFormFactorPrismTo_p_IDecoratableBorn, 0, 0},  {&_swigt__p_FormFactorCantellatedCube, _p_FormFactorCantellatedCubeTo_p_IDecoratableBorn, 0, 0},  {&_swigt__p_FormFactorTruncatedCube, _p_FormFactorTruncatedCubeTo_p_IDecoratableBorn, 0, 0},  {&_swigt__p_FormFactorTruncatedSphere, _p_FormFactorTruncatedSphereTo_p_IDecoratableBorn, 0, 0},  {&_swigt__p_FormFactorFullSphere, _p_FormFactorFullSphereTo_p_IDecoratableBorn, 0, 0},  {&_swigt__p_IDecoratableBorn, 0, 0, 0},  {&_swigt__p_FormFactorEllipsoidalCylinder, _p_FormFactorEllipsoidalCylinderTo_p_IDecoratableBorn, 0, 0},  {&_swigt__p_FormFactorCylinder, _p_FormFactorCylinderTo_p_IDecoratableBorn, 0, 0},  {&_swigt__p_FormFactorBox, _p_FormFactorBoxTo_p_IDecoratableBorn, 0, 0},  {&_swigt__p_FormFactorTetrahedron, _p_FormFactorTetrahedronTo_p_IDecoratableBorn, 0, 0},  {&_swigt__p_FormFactorIcosahedron, _p_FormFactorIcosahedronTo_p_IDecoratableBorn, 0, 0},  {&_swigt__p_FormFactorDodecahedron, _p_FormFactorDodecahedronTo_p_IDecoratableBorn, 0, 0},  {&_swigt__p_FormFactorCuboctahedron, _p_FormFactorCuboctahedronTo_p_IDecoratableBorn, 0, 0},  {&_swigt__p_IFormFactorPolyhedron, _p_IFormFactorPolyhedronTo_p_IDecoratableBorn, 0, 0},  {&_swigt__p_FormFactorCone, _p_FormFactorConeTo_p_IDecoratableBorn, 0, 0},  {&_swigt__p_FormFactorCone6, _p_FormFactorCone6To_p_IDecoratableBorn, 0, 0},  {&_swigt__p_FormFactorSphereLogNormalRadius, _p_FormFactorSphereLogNormalRadiusTo_p_IDecoratableBorn, 0, 0},  {&_swigt__p_FormFactorSphereGaussianRadius, _p_FormFactorSphereGaussianRadiusTo_p_IDecoratableBorn, 0, 0},  {&_swigt__p_FormFactorGaussSphere, _p_FormFactorGaussSphereTo_p_IDecoratableBorn, 0, 0},  {&_swigt__p_FormFactorHollowSphere, _p_FormFactorHollowSphereTo_p_IDecoratableBorn, 0, 0},  {&_swigt__p_IProfileRectangularRipple, _p_IProfileRectangularRippleTo_p_IDecoratableBorn, 0, 0},  {&_swigt__p_ISawtoothRipple, _p_ISawtoothRippleTo_p_IDecoratableBorn, 0, 0},  {&_swigt__p_FormFactorCosineRippleLorentz, _p_FormFactorCosineRippleLorentzTo_p_IDecoratableBorn, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleLorentz, _p_FormFactorSawtoothRippleLorentzTo_p_IDecoratableBorn, 0, 0},  {&_swigt__p_FormFactorLongBoxLorentz, _p_FormFactorLongBoxLorentzTo_p_IDecoratableBorn, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleBox, _p_FormFactorSawtoothRippleBoxTo_p_IDecoratableBorn, 0, 0},  {&_swigt__p_FormFactorCosineRippleBox, _p_FormFactorCosineRippleBoxTo_p_IDecoratableBorn, 0, 0},  {&_swigt__p_FormFactorPyramid, _p_FormFactorPyramidTo_p_IDecoratableBorn, 0, 0},  {&_swigt__p_FormFactorAnisoPyramid, _p_FormFactorAnisoPyramidTo_p_IDecoratableBorn, 0, 0},  {&_swigt__p_FormFactorPrism3, _p_FormFactorPrism3To_p_IDecoratableBorn, 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_IBornFF, _p_IBornFFTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorPrism6, _p_FormFactorPrism6To_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorHemiEllipsoid, _p_FormFactorHemiEllipsoidTo_p_IFormFactor, 0, 0},  {&_swigt__p_IFormFactor, 0, 0, 0},  {&_swigt__p_FormFactorFullSpheroid, _p_FormFactorFullSpheroidTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorTruncatedSpheroid, _p_FormFactorTruncatedSpheroidTo_p_IFormFactor, 0, 0},  {&_swigt__p_DecoratedFF, _p_DecoratedFFTo_p_IFormFactor, 0, 0},  {&_swigt__p_ICosineRipple, _p_ICosineRippleTo_p_IFormFactor, 0, 0},  {&_swigt__p_IProfileRipple, _p_IProfileRippleTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorLongBoxGauss, _p_FormFactorLongBoxGaussTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorCosineRippleGauss, _p_FormFactorCosineRippleGaussTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleGauss, _p_FormFactorSawtoothRippleGaussTo_p_IFormFactor, 0, 0},  {&_swigt__p_IFormFactorPrism, _p_IFormFactorPrismTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorCrystal, _p_FormFactorCrystalTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorCantellatedCube, _p_FormFactorCantellatedCubeTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorTruncatedCube, _p_FormFactorTruncatedCubeTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorTruncatedSphere, _p_FormFactorTruncatedSphereTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorFullSphere, _p_FormFactorFullSphereTo_p_IFormFactor, 0, 0},  {&_swigt__p_IDecoratableBorn, _p_IDecoratableBornTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorEllipsoidalCylinder, _p_FormFactorEllipsoidalCylinderTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorCylinder, _p_FormFactorCylinderTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorBox, _p_FormFactorBoxTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorTetrahedron, _p_FormFactorTetrahedronTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorIcosahedron, _p_FormFactorIcosahedronTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorDodecahedron, _p_FormFactorDodecahedronTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorCuboctahedron, _p_FormFactorCuboctahedronTo_p_IFormFactor, 0, 0},  {&_swigt__p_IFormFactorPolyhedron, _p_IFormFactorPolyhedronTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorCone, _p_FormFactorConeTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorCone6, _p_FormFactorCone6To_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorSphereLogNormalRadius, _p_FormFactorSphereLogNormalRadiusTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorSphereGaussianRadius, _p_FormFactorSphereGaussianRadiusTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorGaussSphere, _p_FormFactorGaussSphereTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorHollowSphere, _p_FormFactorHollowSphereTo_p_IFormFactor, 0, 0},  {&_swigt__p_IProfileRectangularRipple, _p_IProfileRectangularRippleTo_p_IFormFactor, 0, 0},  {&_swigt__p_ISawtoothRipple, _p_ISawtoothRippleTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorCosineRippleLorentz, _p_FormFactorCosineRippleLorentzTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleLorentz, _p_FormFactorSawtoothRippleLorentzTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorLongBoxLorentz, _p_FormFactorLongBoxLorentzTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleBox, _p_FormFactorSawtoothRippleBoxTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorCosineRippleBox, _p_FormFactorCosineRippleBoxTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorPyramid, _p_FormFactorPyramidTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorAnisoPyramid, _p_FormFactorAnisoPyramidTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorPrism3, _p_FormFactorPrism3To_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorComposition, _p_FormFactorCompositionTo_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_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_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_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_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_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_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}};
 static swig_cast_info _swigc__p_IProfileRipple[] = {  {&_swigt__p_FormFactorCosineRippleLorentz, _p_FormFactorCosineRippleLorentzTo_p_IProfileRipple, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleLorentz, _p_FormFactorSawtoothRippleLorentzTo_p_IProfileRipple, 0, 0},  {&_swigt__p_IProfileRectangularRipple, _p_IProfileRectangularRippleTo_p_IProfileRipple, 0, 0},  {&_swigt__p_ISawtoothRipple, _p_ISawtoothRippleTo_p_IProfileRipple, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleBox, _p_FormFactorSawtoothRippleBoxTo_p_IProfileRipple, 0, 0},  {&_swigt__p_FormFactorCosineRippleBox, _p_FormFactorCosineRippleBoxTo_p_IProfileRipple, 0, 0},  {&_swigt__p_IProfileRipple, 0, 0, 0},  {&_swigt__p_ICosineRipple, _p_ICosineRippleTo_p_IProfileRipple, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleGauss, _p_FormFactorSawtoothRippleGaussTo_p_IProfileRipple, 0, 0},  {&_swigt__p_FormFactorCosineRippleGauss, _p_FormFactorCosineRippleGaussTo_p_IProfileRipple, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IRotation[] = {  {&_swigt__p_RotationY, _p_RotationYTo_p_IRotation, 0, 0},  {&_swigt__p_RotationEuler, _p_RotationEulerTo_p_IRotation, 0, 0},  {&_swigt__p_RotationZ, _p_RotationZTo_p_IRotation, 0, 0},  {&_swigt__p_IRotation, 0, 0, 0},  {&_swigt__p_IdentityRotation, _p_IdentityRotationTo_p_IRotation, 0, 0},  {&_swigt__p_RotationX, _p_RotationXTo_p_IRotation, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_ISampleNode[] = {  {&_swigt__p_ParticleComposition, _p_ParticleCompositionTo_p_ISampleNode, 0, 0},  {&_swigt__p_LayerRoughness, _p_LayerRoughnessTo_p_ISampleNode, 0, 0},  {&_swigt__p_ParticleLayout, _p_ParticleLayoutTo_p_ISampleNode, 0, 0},  {&_swigt__p_MultiLayer, _p_MultiLayerTo_p_ISampleNode, 0, 0},  {&_swigt__p_ISampleNode, 0, 0, 0},  {&_swigt__p_Crystal, _p_CrystalTo_p_ISampleNode, 0, 0},  {&_swigt__p_MesoCrystal, _p_MesoCrystalTo_p_ISampleNode, 0, 0},  {&_swigt__p_Layer, _p_LayerTo_p_ISampleNode, 0, 0},  {&_swigt__p_IParticle, _p_IParticleTo_p_ISampleNode, 0, 0},  {&_swigt__p_Particle, _p_ParticleTo_p_ISampleNode, 0, 0},  {&_swigt__p_ParticleCoreShell, _p_ParticleCoreShellTo_p_ISampleNode, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_ISampleNode[] = {  {&_swigt__p_IBornFF, _p_IBornFFTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorPrism6, _p_FormFactorPrism6To_p_ISampleNode, 0, 0},  {&_swigt__p_Layer, _p_LayerTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorHemiEllipsoid, _p_FormFactorHemiEllipsoidTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorFullSpheroid, _p_FormFactorFullSpheroidTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorTruncatedSpheroid, _p_FormFactorTruncatedSpheroidTo_p_ISampleNode, 0, 0},  {&_swigt__p_ICosineRipple, _p_ICosineRippleTo_p_ISampleNode, 0, 0},  {&_swigt__p_IProfileRipple, _p_IProfileRippleTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorLongBoxGauss, _p_FormFactorLongBoxGaussTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorCosineRippleGauss, _p_FormFactorCosineRippleGaussTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleGauss, _p_FormFactorSawtoothRippleGaussTo_p_ISampleNode, 0, 0},  {&_swigt__p_ParticleCoreShell, _p_ParticleCoreShellTo_p_ISampleNode, 0, 0},  {&_swigt__p_IFormFactorPrism, _p_IFormFactorPrismTo_p_ISampleNode, 0, 0},  {&_swigt__p_MesoCrystal, _p_MesoCrystalTo_p_ISampleNode, 0, 0},  {&_swigt__p_Crystal, _p_CrystalTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorCantellatedCube, _p_FormFactorCantellatedCubeTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorTruncatedCube, _p_FormFactorTruncatedCubeTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorTruncatedSphere, _p_FormFactorTruncatedSphereTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorFullSphere, _p_FormFactorFullSphereTo_p_ISampleNode, 0, 0},  {&_swigt__p_MultiLayer, _p_MultiLayerTo_p_ISampleNode, 0, 0},  {&_swigt__p_Particle, _p_ParticleTo_p_ISampleNode, 0, 0},  {&_swigt__p_IParticle, _p_IParticleTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorEllipsoidalCylinder, _p_FormFactorEllipsoidalCylinderTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorCylinder, _p_FormFactorCylinderTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorBox, _p_FormFactorBoxTo_p_ISampleNode, 0, 0},  {&_swigt__p_ISampleNode, 0, 0, 0},  {&_swigt__p_FormFactorTetrahedron, _p_FormFactorTetrahedronTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorIcosahedron, _p_FormFactorIcosahedronTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorDodecahedron, _p_FormFactorDodecahedronTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorCuboctahedron, _p_FormFactorCuboctahedronTo_p_ISampleNode, 0, 0},  {&_swigt__p_IFormFactorPolyhedron, _p_IFormFactorPolyhedronTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorCone, _p_FormFactorConeTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorCone6, _p_FormFactorCone6To_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorSphereLogNormalRadius, _p_FormFactorSphereLogNormalRadiusTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorSphereGaussianRadius, _p_FormFactorSphereGaussianRadiusTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorGaussSphere, _p_FormFactorGaussSphereTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorHollowSphere, _p_FormFactorHollowSphereTo_p_ISampleNode, 0, 0},  {&_swigt__p_LayerRoughness, _p_LayerRoughnessTo_p_ISampleNode, 0, 0},  {&_swigt__p_IProfileRectangularRipple, _p_IProfileRectangularRippleTo_p_ISampleNode, 0, 0},  {&_swigt__p_ISawtoothRipple, _p_ISawtoothRippleTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorCosineRippleLorentz, _p_FormFactorCosineRippleLorentzTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleLorentz, _p_FormFactorSawtoothRippleLorentzTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorLongBoxLorentz, _p_FormFactorLongBoxLorentzTo_p_ISampleNode, 0, 0},  {&_swigt__p_ParticleLayout, _p_ParticleLayoutTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleBox, _p_FormFactorSawtoothRippleBoxTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorCosineRippleBox, _p_FormFactorCosineRippleBoxTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorPyramid, _p_FormFactorPyramidTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorAnisoPyramid, _p_FormFactorAnisoPyramidTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorPrism3, _p_FormFactorPrism3To_p_ISampleNode, 0, 0},  {&_swigt__p_ParticleComposition, _p_ParticleCompositionTo_p_ISampleNode, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_ISawtoothRipple[] = {  {&_swigt__p_FormFactorSawtoothRippleLorentz, _p_FormFactorSawtoothRippleLorentzTo_p_ISawtoothRipple, 0, 0},  {&_swigt__p_ISawtoothRipple, 0, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleBox, _p_FormFactorSawtoothRippleBoxTo_p_ISawtoothRipple, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleGauss, _p_FormFactorSawtoothRippleGaussTo_p_ISawtoothRipple, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_ISelectionRule[] = {  {&_swigt__p_ISelectionRule, 0, 0, 0},  {&_swigt__p_SimpleSelectionRule, _p_SimpleSelectionRuleTo_p_ISelectionRule, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IdentityRotation[] = {  {&_swigt__p_IdentityRotation, 0, 0, 0},{0, 0, 0, 0}};
diff --git a/auto/Wrap/libBornAgainSample_wrap.h b/auto/Wrap/libBornAgainSample_wrap.h
index 17955b293a89a40935d0210307726dc58ac8496b..50028bf2f0e064d137f1ed3f5c09e1932d633560 100644
--- a/auto/Wrap/libBornAgainSample_wrap.h
+++ b/auto/Wrap/libBornAgainSample_wrap.h
@@ -175,12 +175,14 @@ public:
     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 Material const *material() const;
     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 double volume() const;
+    virtual double radialExtension() const;
     virtual complex_t formfactor(C3 q) const;
+    virtual std::string pythonConstructor() const;
     virtual bool canSliceAnalytically(IRotation const *rot) const;
     virtual bool canSliceAnalyticallySwigPublic(IRotation const *rot) const {
       return IBornFF::canSliceAnalytically(rot);
@@ -219,7 +221,7 @@ private:
       return method;
     }
 private:
-    mutable swig::SwigVar_PyObject vtable[12];
+    mutable swig::SwigVar_PyObject vtable[14];
 #endif
 
 };