diff --git a/Core/Material/BaseMaterialImpl.h b/Core/Material/BaseMaterialImpl.h
index 1751e37d73e08220e86016477b79a8ed01c129a9..959165cbb3ef12b00b5d1b1cf87f565ffa8d8097 100644
--- a/Core/Material/BaseMaterialImpl.h
+++ b/Core/Material/BaseMaterialImpl.h
@@ -3,13 +3,13 @@
 //  BornAgain: simulate and fit scattering at grazing incidence
 //
 //! @file      Core/Material/BaseMaterialImpl.h
-//! @brief     Defines material implementation interface.
+//! @brief     Defines basic material implementation interface.
 //!
 //! @homepage  http://www.bornagainproject.org
 //! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2015
+//! @copyright Forschungszentrum Jülich GmbH 2017
 //! @authors   Scientific Computing Group at MLZ Garching
-//! @authors   C. Durniak, M. Ganeva, G. Pospelov, W. Van Herck, J. Wuttke
+//! @authors   M. Ganeva, G. Pospelov, W. Van Herck, J. Wuttke, D. Yurov
 //
 // ************************************************************************** //
 
@@ -24,59 +24,59 @@
 class Transform3D;
 class WavevectorInfo;
 
-//! A basic implementation for homogeneous and wavelength-independent materials.
-//! Incorporates data and methods required to handle material magnetization.
+enum class MATERIAL_TYPES {
+    VacuumMaterial = 0,
+    RefractiveCoefMaterial,
+    WavelengthIndependentMaterial
+};
+
 //! @ingroup materials
 
 class BA_CORE_API_ BaseMaterialImpl : public INamed
 {
 public:
-    //! Constructs basic material with name and magnetization
-    BaseMaterialImpl(const std::string& name, kvector_t magnetization);
+    //! Constructs basic material with name
+    BaseMaterialImpl(const std::string& name) : INamed(name) {}
 
-    virtual ~BaseMaterialImpl();
+    virtual ~BaseMaterialImpl() = default;
 
     //! Returns pointer to a copy of material
     virtual BaseMaterialImpl* clone() const = 0;
 
     //! Constructs a material with inverted magnetization
-    BaseMaterialImpl* inverted() const;
+    virtual BaseMaterialImpl* inverted() const = 0;
 
+    //! Returns refractive index.
     virtual complex_t refractiveIndex(double wavelength) const = 0;
+
+    //! Returns squared refractive index.
     virtual complex_t refractiveIndex2(double wavelength) const = 0;
 
     //! Indicates whether the interaction with the material is scalar.
     //! This means that different polarization states will be diffracted equally
-    bool isScalarMaterial() const {return m_magnetization == kvector_t {};}
+    virtual bool isScalarMaterial() const = 0;
 
-    bool isMagneticMaterial() const {return !isScalarMaterial();}
+    virtual bool isMagneticMaterial() const = 0;
 
     //! Returns the magnetization (in A/m)
-    kvector_t magnetization() const {return m_magnetization;}
+    virtual kvector_t magnetization() const = 0;
 
     //! Returns underlying material data
     virtual complex_t materialData() const = 0;
 
+    //! Returns type of material implementation
+    virtual MATERIAL_TYPES typeID() const = 0;
+
     //! Returns (\f$ \pi/\lambda^2 \f$ - sld), sld being the scattering length density
     virtual complex_t scalarSubtrSLD(const WavevectorInfo& wavevectors) const = 0;
 
-#ifndef SWIG
     //! Returns (\f$ \pi/\lambda^2 \f$ - sld) matrix with magnetization corrections
-    Eigen::Matrix2cd polarizedSubtrSLD(const WavevectorInfo& wavevectors) const;
-#endif
+    virtual Eigen::Matrix2cd polarizedSubtrSLD(const WavevectorInfo& wavevectors) const = 0;
 
-    BaseMaterialImpl* transformedMaterial(const Transform3D& transform) const;
+    virtual BaseMaterialImpl* transformedMaterial(const Transform3D& transform) const = 0;
 
     //! Prints object data
     virtual void print(std::ostream &ostr) const = 0;
-
-private:
-    void setMagnetization(kvector_t magnetization)
-    {
-        m_magnetization = magnetization;
-    }
-
-    kvector_t m_magnetization; //!< magnetization
 };
 
 #endif /* IMATERIALIMPL_H_ */
diff --git a/Core/Material/BaseMaterialImpl.cpp b/Core/Material/MagneticMaterialImpl.cpp
similarity index 61%
rename from Core/Material/BaseMaterialImpl.cpp
rename to Core/Material/MagneticMaterialImpl.cpp
index 929a70ae5e1f06683249918d3e68855928e8a8ba..c1c79634b033fc6f33abf3c9c1a66472808da9b3 100644
--- a/Core/Material/BaseMaterialImpl.cpp
+++ b/Core/Material/MagneticMaterialImpl.cpp
@@ -1,4 +1,4 @@
-#include "BaseMaterialImpl.h"
+#include "MagneticMaterialImpl.h"
 #include "WavevectorInfo.h"
 #include "Transform3D.h"
 #include "MaterialUtils.h"
@@ -21,37 +21,48 @@ cvector_t OrthogonalToBaseVector(cvector_t base, const kvector_t vector)
 }
 }
 
-BaseMaterialImpl::BaseMaterialImpl(const std::string& name, kvector_t magnetization)
-    : INamed(name)
+MagneticMaterialImpl::MagneticMaterialImpl(const std::string& name, kvector_t magnetization)
+    : BaseMaterialImpl(name)
     , m_magnetization(magnetization)
 {}
 
-BaseMaterialImpl::~BaseMaterialImpl()
-{}
-
-BaseMaterialImpl* BaseMaterialImpl::inverted() const
+MagneticMaterialImpl* MagneticMaterialImpl::inverted() const
 {
     std::string name = isScalarMaterial() ? getName()
                                           : getName()+"_inv";
-    std::unique_ptr<BaseMaterialImpl> result(this->clone());
+    std::unique_ptr<MagneticMaterialImpl> result(this->clone());
     result->setName(name);
     result->setMagnetization(-magnetization());
     return result.release();
 }
 
-Eigen::Matrix2cd BaseMaterialImpl::polarizedSubtrSLD(const WavevectorInfo& wavevectors) const
+bool MagneticMaterialImpl::isScalarMaterial() const
+{
+    return m_magnetization == kvector_t{};
+}
+
+bool MagneticMaterialImpl::isMagneticMaterial() const
+{
+    return !isScalarMaterial();
+}
+
+kvector_t MagneticMaterialImpl::magnetization() const
+{
+    return m_magnetization;
+}
+
+Eigen::Matrix2cd MagneticMaterialImpl::polarizedSubtrSLD(const WavevectorInfo& wavevectors) const
 {
     cvector_t mag_ortho = OrthogonalToBaseVector(wavevectors.getQ(), m_magnetization);
     complex_t unit_factor = scalarSubtrSLD(wavevectors);
     return MaterialUtils::MagnetizationCorrection(unit_factor, magnetization_prefactor, mag_ortho);
 }
 
-BaseMaterialImpl* BaseMaterialImpl::transformedMaterial(const Transform3D& transform) const
+MagneticMaterialImpl* MagneticMaterialImpl::transformedMaterial(const Transform3D& transform) const
 {
     kvector_t transformed_field = transform.transformed(m_magnetization);
-    std::unique_ptr<BaseMaterialImpl> result(this->clone());
+    std::unique_ptr<MagneticMaterialImpl> result(this->clone());
     result->setName(this->getName());
     result->setMagnetization(transformed_field);
     return result.release();
 }
-
diff --git a/Core/Material/MagneticMaterialImpl.h b/Core/Material/MagneticMaterialImpl.h
new file mode 100644
index 0000000000000000000000000000000000000000..6a881ee96623837a687bebcf4306dcd7c961d1ba
--- /dev/null
+++ b/Core/Material/MagneticMaterialImpl.h
@@ -0,0 +1,68 @@
+// ************************************************************************** //
+//
+//  BornAgain: simulate and fit scattering at grazing incidence
+//
+//! @file      Core/Material/MagneticMaterialImpl.h
+//! @brief     Defines magnetic material base implementation.
+//!
+//! @homepage  http://www.bornagainproject.org
+//! @license   GNU General Public License v3 or higher (see COPYING)
+//! @copyright Forschungszentrum Jülich GmbH 2017
+//! @authors   Scientific Computing Group at MLZ Garching
+//! @authors   M. Ganeva, G. Pospelov, W. Van Herck, J. Wuttke, D. Yurov
+//
+// ************************************************************************** //
+
+#ifndef MAGNETICMATERIALIMPL_H_
+#define MAGNETICMATERIALIMPL_H_
+
+#include "BaseMaterialImpl.h"
+#include "Vectors3D.h"
+#include "Complex.h"
+#include "EigenCore.h"
+
+class Transform3D;
+class WavevectorInfo;
+
+//! Basic implementation for magnetized material.
+//! Incorporates data and methods required to handle material magnetization.
+//! @ingroup materials
+
+class BA_CORE_API_ MagneticMaterialImpl : public BaseMaterialImpl
+{
+public:
+    //! Constructs basic material with name and magnetization
+    MagneticMaterialImpl(const std::string& name, kvector_t magnetization);
+
+    virtual ~MagneticMaterialImpl() = default;
+
+    //! Returns pointer to a copy of material
+    virtual MagneticMaterialImpl* clone() const override = 0;
+
+    //! Constructs a material with inverted magnetization
+    virtual MagneticMaterialImpl* inverted() const override final;
+
+    //! Indicates whether the interaction with the material is scalar.
+    //! This means that different polarization states will be diffracted equally
+    virtual bool isScalarMaterial() const override final;
+
+    virtual bool isMagneticMaterial() const override final;
+
+    //! Returns the magnetization (in A/m)
+    virtual kvector_t magnetization() const override final;
+
+    //! Returns (\f$ \pi/\lambda^2 \f$ - sld) matrix with magnetization corrections
+    virtual Eigen::Matrix2cd polarizedSubtrSLD(const WavevectorInfo& wavevectors) const override final;
+
+    virtual MagneticMaterialImpl* transformedMaterial(const Transform3D& transform) const override final;
+
+private:
+    void setMagnetization(kvector_t magnetization)
+    {
+        m_magnetization = magnetization;
+    }
+
+    kvector_t m_magnetization; //!< magnetization
+};
+
+#endif /* MAGNETICMATERIALIMPL_H_ */
diff --git a/Core/Material/Material.cpp b/Core/Material/Material.cpp
index eb076ec0569ea0ca43dbb28feb39f9c838d0c5db..848f2a08104e1663713cfa6bbf05fd82d34cc5b7 100644
--- a/Core/Material/Material.cpp
+++ b/Core/Material/Material.cpp
@@ -54,10 +54,9 @@ std::string Material::getName() const
     return m_material_impl->getName();
 }
 
-size_t Material::dataType() const
+MATERIAL_TYPES Material::typeID() const
 {
-    //TODO: reimplement using CRTP or just static type identifiers in material implementations
-    return typeid(*m_material_impl).hash_code();
+    return m_material_impl->typeID();
 }
 
 kvector_t Material::magnetization() const
@@ -97,7 +96,7 @@ bool operator==(const Material& left, const Material& right)
     if (left.getName() != right.getName()) return false;
     if (left.magnetization() != right.magnetization()) return false;
     if (left.materialData() != right.materialData()) return false;
-    if (left.dataType() != right.dataType()) return false;
+    if (left.typeID() != right.typeID()) return false;
     return true;
 }
 
diff --git a/Core/Material/Material.h b/Core/Material/Material.h
index df3da43e60f5c31a48114b6f1038f69db076446d..9c0a021d3ccaef04522654e321769c469dbf183b 100644
--- a/Core/Material/Material.h
+++ b/Core/Material/Material.h
@@ -67,8 +67,10 @@ public:
     //! Returns the name of material
     std::string getName() const;
 
-    //! Returns hash code of underlying material implementation
-    size_t dataType() const;
+#ifndef SWIG
+    //! Returns the type of underlying material implementation
+    MATERIAL_TYPES typeID() const;
+#endif //SWIG
 
     //! Get the magnetization (in A/m)
     kvector_t magnetization() const;
diff --git a/Core/Material/MaterialFactoryFuncs.cpp b/Core/Material/MaterialFactoryFuncs.cpp
index 9f10cc4eea467a0e019c4b3cb6111f1ed4892003..caa94c0ac7c2409204ab244d1594408b1b220206 100644
--- a/Core/Material/MaterialFactoryFuncs.cpp
+++ b/Core/Material/MaterialFactoryFuncs.cpp
@@ -7,9 +7,7 @@ Material HomogeneousMaterial(const std::string& name, complex_t refractive_index
 {
     const double delta = 1.0 - refractive_index.real();
     const double beta = refractive_index.imag();
-    std::unique_ptr<RefractiveCoefMaterial> mat_impl(
-        new RefractiveCoefMaterial(name, delta, beta, magnetization));
-    return Material(std::move(mat_impl));
+    return HomogeneousMaterial(name, delta, beta, magnetization);
 }
 
 Material HomogeneousMaterial(const std::string& name, double delta, double beta,
@@ -22,9 +20,7 @@ Material HomogeneousMaterial(const std::string& name, double delta, double beta,
 
 Material HomogeneousMaterial()
 {
-    std::unique_ptr<RefractiveCoefMaterial> mat_impl(
-        new RefractiveCoefMaterial("vacuum", 0.0, 0.0, kvector_t{}));
-    return Material(std::move(mat_impl));
+    return HomogeneousMaterial("vacuum", 0.0, 0.0, kvector_t{});
 }
 
 Material MaterialBySLD(const std::string& name, double sld, double abs_term,
@@ -46,7 +42,5 @@ Material MaterialByAbsCX(const std::string& name, double sld, double abs_cx,
 
 Material MaterialBySLD()
 {
-    std::unique_ptr<WavelengthIndependentMaterial> mat_impl(
-        new WavelengthIndependentMaterial("vacuum", 0.0, 0.0, kvector_t{}));
-    return Material(std::move(mat_impl));
+    return MaterialBySLD("vacuum", 0.0, 0.0, kvector_t{});
 }
diff --git a/Core/Material/RefractiveCoefMaterial.cpp b/Core/Material/RefractiveCoefMaterial.cpp
index ea99dd609629f48587c8ff7e4cc3993d8d13af98..8ef5f37b9460e77c5af283b94021737a7ecbdd1a 100644
--- a/Core/Material/RefractiveCoefMaterial.cpp
+++ b/Core/Material/RefractiveCoefMaterial.cpp
@@ -3,7 +3,7 @@
 
 RefractiveCoefMaterial::RefractiveCoefMaterial(const std::string& name, double delta, double beta,
                                                  kvector_t magnetization)
-    : BaseMaterialImpl(name, magnetization)
+    : MagneticMaterialImpl(name, magnetization)
     , m_delta(delta)
     , m_beta(beta)
 {}
diff --git a/Core/Material/RefractiveCoefMaterial.h b/Core/Material/RefractiveCoefMaterial.h
index 5f81019eb2ad7cff0067ef8f1e45fb247d8011b7..3611d948b1b166669213ba80f9c13d84a9abd9d8 100644
--- a/Core/Material/RefractiveCoefMaterial.h
+++ b/Core/Material/RefractiveCoefMaterial.h
@@ -7,31 +7,27 @@
 //!
 //! @homepage  http://www.bornagainproject.org
 //! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2015
+//! @copyright Forschungszentrum Jülich GmbH 2017
 //! @authors   Scientific Computing Group at MLZ Garching
-//! @authors   C. Durniak, M. Ganeva, G. Pospelov, W. Van Herck, J. Wuttke
+//! @authors   M. Ganeva, G. Pospelov, W. Van Herck, J. Wuttke, D. Yurov
 //
 // ************************************************************************** //
 
 #ifndef REFRACTIVECOEFMATERIAL_H_
 #define REFRACTIVECOEFMATERIAL_H_
 
-#include "BaseMaterialImpl.h"
+#include "MagneticMaterialImpl.h"
 #include "Material.h"
 
 //! Material implementation based on refractive coefficiencts (valid for one wavelength value only)
 //! @ingroup materials
 
-class BA_CORE_API_ RefractiveCoefMaterial : public BaseMaterialImpl
+class BA_CORE_API_ RefractiveCoefMaterial : public MagneticMaterialImpl
 {
 public:
-    friend BA_CORE_API_ Material HomogeneousMaterial(const std::string&, complex_t, kvector_t);
-
     friend BA_CORE_API_ Material HomogeneousMaterial(const std::string&, double, double,
                                                          kvector_t);
 
-    friend BA_CORE_API_ Material HomogeneousMaterial();
-
     virtual ~RefractiveCoefMaterial();
 
     //! Returns pointer to a copy of material
@@ -50,6 +46,12 @@ public:
     //! Returns underlying material data
     virtual complex_t materialData() const override;
 
+    //! Returns type of material implementation
+    virtual MATERIAL_TYPES typeID() const override
+    {
+        return MATERIAL_TYPES::RefractiveCoefMaterial;
+    }
+
     //! Returns (\f$ \pi/\lambda^2 \f$ - sld), sld (in \f$nm^{-2}\f$) being the scattering length density.
     //! If the wavelength associated with passed wavevector is different from the one
     //! associated with refractive coefficients used during the object construction,
diff --git a/Core/Material/WavelengthIndependentMaterial.cpp b/Core/Material/WavelengthIndependentMaterial.cpp
index 5a93ffc1875a59c9a8a73b60e72007da46c97f6c..bd14a58b0b00ff94938105d1c4fe6793cae5f8f5 100644
--- a/Core/Material/WavelengthIndependentMaterial.cpp
+++ b/Core/Material/WavelengthIndependentMaterial.cpp
@@ -19,7 +19,7 @@ inline double getWlPrefactor(double wavelength)
 WavelengthIndependentMaterial::WavelengthIndependentMaterial(const std::string& name, double sld,
                                                              double abs_term,
                                                              kvector_t magnetization)
-    : BaseMaterialImpl(name, magnetization), m_sld(sld), m_abs_term(abs_term)
+    : MagneticMaterialImpl(name, magnetization), m_sld(sld), m_abs_term(abs_term)
 {}
 
 WavelengthIndependentMaterial::~WavelengthIndependentMaterial()
diff --git a/Core/Material/WavelengthIndependentMaterial.h b/Core/Material/WavelengthIndependentMaterial.h
index dff7c2259cd706c5714b7286ef1b25dafae74297..2192718a17bd9050852df97bb6e09ba6af316456 100644
--- a/Core/Material/WavelengthIndependentMaterial.h
+++ b/Core/Material/WavelengthIndependentMaterial.h
@@ -7,30 +7,28 @@
 //!
 //! @homepage  http://www.bornagainproject.org
 //! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2015
+//! @copyright Forschungszentrum Jülich GmbH 2017
 //! @authors   Scientific Computing Group at MLZ Garching
-//! @authors   C. Durniak, M. Ganeva, G. Pospelov, W. Van Herck, J. Wuttke
+//! @authors   M. Ganeva, G. Pospelov, W. Van Herck, J. Wuttke, D. Yurov
 //
 // ************************************************************************** //
 
 #ifndef WAVELENGTHINDEPENDENTMATERIAL_H_
 #define WAVELENGTHINDEPENDENTMATERIAL_H_
 
-#include "BaseMaterialImpl.h"
+#include "MagneticMaterialImpl.h"
 #include "Material.h"
 
 //! Material implementation based on wavelength-independent data (valid for a range of wavelengths)
 //! @ingroup materials
 
-class BA_CORE_API_ WavelengthIndependentMaterial : public BaseMaterialImpl
+class BA_CORE_API_ WavelengthIndependentMaterial : public MagneticMaterialImpl
 {
 public:
     friend BA_CORE_API_ Material MaterialBySLD(const std::string&, double, double, kvector_t);
 
     friend BA_CORE_API_ Material MaterialByAbsCX(const std::string&, double, double, kvector_t);
 
-    friend BA_CORE_API_ Material MaterialBySLD();
-
     virtual ~WavelengthIndependentMaterial();
 
     //! Returns pointer to a copy of material
@@ -45,6 +43,12 @@ public:
     //! Returns underlying material data
     virtual complex_t materialData() const override;
 
+    //! Returns type of material implementation
+    virtual MATERIAL_TYPES typeID() const override
+    {
+        return MATERIAL_TYPES::WavelengthIndependentMaterial;
+    }
+
     //! Returns (\f$ \pi/\lambda^2 \f$ - sld), sld (in \f$nm^{-2}\f$) being the scattering length density
     virtual complex_t scalarSubtrSLD(const WavevectorInfo& wavevectors) const override;
 
diff --git a/Tests/UnitTests/Core/Other/MaterialTest.h b/Tests/UnitTests/Core/Other/MaterialTest.h
index 8758e813cd74aaaba2f13cc7b4a88ec694c9b68e..d7fc1fd16f3eca0ee8fade5f62b1225f2ac6bf57 100644
--- a/Tests/UnitTests/Core/Other/MaterialTest.h
+++ b/Tests/UnitTests/Core/Other/MaterialTest.h
@@ -1,4 +1,6 @@
 #include "MaterialFactoryFuncs.h"
+#include "WavelengthIndependentMaterial.h"
+#include "RefractiveCoefMaterial.h"
 #include "WavevectorInfo.h"
 #include "Rotations.h"
 #include "Units.h"
@@ -64,8 +66,8 @@ TEST_F(MaterialTest, MaterialConstruction)
     EXPECT_EQ(material7.materialData(), MaterialBySLD().materialData());
     EXPECT_EQ(material7.magnetization(), HomogeneousMaterial().magnetization());
     EXPECT_EQ(material7.magnetization(), MaterialBySLD().magnetization());
-    EXPECT_TRUE(material7.dataType() == HomogeneousMaterial().dataType());
-    EXPECT_FALSE(material7.dataType() == MaterialBySLD().dataType());
+    EXPECT_TRUE(material7.typeID() == HomogeneousMaterial().typeID());
+    EXPECT_FALSE(material7.typeID() == MaterialBySLD().typeID());
 
     constexpr double basic_wavelength = 0.1798197; // nm
     Material material8 = MaterialByAbsCX("Material", material_data.real(),
@@ -74,7 +76,7 @@ TEST_F(MaterialTest, MaterialConstruction)
     EXPECT_TRUE(material8.magnetization() == material6.magnetization());
     EXPECT_DOUBLE_EQ(material8.materialData().real(), material6.materialData().real());
     EXPECT_DOUBLE_EQ(material8.materialData().imag(), material6.materialData().imag());
-    EXPECT_TRUE(material8.dataType() == material6.dataType());
+    EXPECT_TRUE(material8.typeID() == material6.typeID());
 }
 
 TEST_F(MaterialTest, MaterialTransform)
@@ -138,6 +140,17 @@ TEST_F(MaterialTest, ComputationTest)
     EXPECT_FLOAT_EQ(subtrSLD.imag(), subtrSLDWlIndep.imag());
 }
 
+TEST_F(MaterialTest, TypeIdsTest)
+{
+    Material material = MaterialBySLD("Material", 1.0, 1.0);
+    Material material2 = HomogeneousMaterial("Material", 1.0, 1.0);
+    EXPECT_TRUE(material.typeID() == MATERIAL_TYPES::WavelengthIndependentMaterial);
+    EXPECT_TRUE(material2.typeID() == MATERIAL_TYPES::RefractiveCoefMaterial);
+    EXPECT_TRUE(material.typeID() != material2.typeID());
+    Material material3 = MaterialBySLD("Material", 1.0, 1.0);
+    EXPECT_TRUE(material.typeID() == material3.typeID());
+}
+
 TEST_F(MaterialTest, MaterialComparison)
 {
     Material material = MaterialBySLD("Material", 1.0, 1.0);
diff --git a/auto/Doc/man/bornagain.1 b/auto/Doc/man/bornagain.1
new file mode 100644
index 0000000000000000000000000000000000000000..98a3c89d2999c5a3c412d85dc573ef8a9bdc863e
--- /dev/null
+++ b/auto/Doc/man/bornagain.1
@@ -0,0 +1,168 @@
+.\" Automatically generated by Pod::Man 4.07 (Pod::Simple 3.32)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings.  \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
+.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+.    ds -- \(*W-
+.    ds PI pi
+.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+.    ds L" ""
+.    ds R" ""
+.    ds C` ""
+.    ds C' ""
+'br\}
+.el\{\
+.    ds -- \|\(em\|
+.    ds PI \(*p
+.    ds L" ``
+.    ds R" ''
+.    ds C`
+.    ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD.  Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.if !\nF .nr F 0
+.if \nF>0 \{\
+.    de IX
+.    tm Index:\\$1\t\\n%\t"\\$2"
+..
+.    if !\nF==2 \{\
+.        nr % 0
+.        nr F 2
+.    \}
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+.    \" fudge factors for nroff and troff
+.if n \{\
+.    ds #H 0
+.    ds #V .8m
+.    ds #F .3m
+.    ds #[ \f1
+.    ds #] \fP
+.\}
+.if t \{\
+.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+.    ds #V .6m
+.    ds #F 0
+.    ds #[ \&
+.    ds #] \&
+.\}
+.    \" simple accents for nroff and troff
+.if n \{\
+.    ds ' \&
+.    ds ` \&
+.    ds ^ \&
+.    ds , \&
+.    ds ~ ~
+.    ds /
+.\}
+.if t \{\
+.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+.    \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+.    \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+.    \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+.    ds : e
+.    ds 8 ss
+.    ds o a
+.    ds d- d\h'-1'\(ga
+.    ds D- D\h'-1'\(hy
+.    ds th \o'bp'
+.    ds Th \o'LP'
+.    ds ae ae
+.    ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "BORNAGAIN 1"
+.TH BORNAGAIN 1 "2017-09-04" "perl v5.24.1" "BornAgain manual"
+.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+BornAgain \- simulate and fit small\-angle scattering at grazing incidence.
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+\&\fBbornagain\fR
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+BornAgain is a free and open-source software package to simulate and fit small-angle scattering at grazing incidence. It supports analysis of both X\-ray (\s-1GISAXS\s0) and neutron (\s-1GISANS\s0) data.  Its name, BornAgain, indicates the central role of the distorted wave Born approximation  in the physical description of the scattering process.  The software provides a generic framework for modeling multilayer samples with smooth or rough interfaces and with various types of embedded nanoparticles.
+.PP
+The command \fBbornagain\fR launches a graphical user interface
+that allows to create sample models and to run simulations.
+.PP
+For more information, see the User Manual, available as a \s-1PDF\s0 file at http://apps.jcns.fz\-juelich.de/src/BornAgain/.
+.SH "RESOURCES"
+.IX Header "RESOURCES"
+Project web site: http://bornagainproject.org
+.PP
+Download directory: http://apps.jcns.fz\-juelich.de/src/BornAgain/
+.SH "BUGS"
+.IX Header "BUGS"
+Send bug reports to contact@bornagainproject.org,
+or fill the form at http://www.bornagainproject.org/contact.
+.SH "AUTHORS"
+.IX Header "AUTHORS"
+Celine Durniak, Marina Ganeva, Gennady Pospelov,
+Walter Van Herck, Joachim Wuttke
+.SH "COPYING"
+.IX Header "COPYING"
+Copyright (C) 2013\- Forschungszentrum Juelich GmbH.
+.PP
+Free use of this software is granted under the terms of the
+\&\s-1GNU\s0 General Public License (\s-1GPL\s0), version 3 or higher.
diff --git a/auto/Wrap/libBornAgainCore.py b/auto/Wrap/libBornAgainCore.py
index 5a6e65625994329450df13c9cf706c6b70a84cb9..8d8c334d300ba61c2ba5f06933e7fdf40d6546de 100644
--- a/auto/Wrap/libBornAgainCore.py
+++ b/auto/Wrap/libBornAgainCore.py
@@ -1,15 +1,22 @@
 # This file was automatically generated by SWIG (http://www.swig.org).
-# Version 3.0.8
+# Version 3.0.12
 #
 # Do not make changes to this file unless you know what you are doing--modify
 # the SWIG interface file instead.
 
-
-
-
-
-from sys import version_info
-if version_info >= (2, 6, 0):
+from sys import version_info as _swig_python_version_info
+if _swig_python_version_info >= (2, 7, 0):
+    def swig_import_helper():
+        import importlib
+        pkg = __name__.rpartition('.')[0]
+        mname = '.'.join((pkg, '_libBornAgainCore')).lstrip('.')
+        try:
+            return importlib.import_module(mname)
+        except ImportError:
+            return importlib.import_module('_libBornAgainCore')
+    _libBornAgainCore = swig_import_helper()
+    del swig_import_helper
+elif _swig_python_version_info >= (2, 6, 0):
     def swig_import_helper():
         from os.path import dirname
         import imp
@@ -19,22 +26,27 @@ if version_info >= (2, 6, 0):
         except ImportError:
             import _libBornAgainCore
             return _libBornAgainCore
-        if fp is not None:
-            try:
-                _mod = imp.load_module('_libBornAgainCore', fp, pathname, description)
-            finally:
+        try:
+            _mod = imp.load_module('_libBornAgainCore', fp, pathname, description)
+        finally:
+            if fp is not None:
                 fp.close()
-            return _mod
+        return _mod
     _libBornAgainCore = swig_import_helper()
     del swig_import_helper
 else:
     import _libBornAgainCore
-del version_info
+del _swig_python_version_info
+
 try:
     _swig_property = property
 except NameError:
     pass  # Python < 2.2 doesn't have 'property'.
 
+try:
+    import builtins as __builtin__
+except ImportError:
+    import __builtin__
 
 def _swig_setattr_nondynamic(self, class_type, name, value, static=1):
     if (name == "thisown"):
@@ -59,41 +71,34 @@ def _swig_setattr(self, class_type, name, value):
     return _swig_setattr_nondynamic(self, class_type, name, value, 0)
 
 
-def _swig_getattr_nondynamic(self, class_type, name, static=1):
+def _swig_getattr(self, class_type, name):
     if (name == "thisown"):
         return self.this.own()
     method = class_type.__swig_getmethods__.get(name, None)
     if method:
         return method(self)
-    if (not static):
-        return object.__getattr__(self, name)
-    else:
-        raise AttributeError(name)
-
-def _swig_getattr(self, class_type, name):
-    return _swig_getattr_nondynamic(self, class_type, name, 0)
+    raise AttributeError("'%s' object has no attribute '%s'" % (class_type.__name__, name))
 
 
 def _swig_repr(self):
     try:
         strthis = "proxy of " + self.this.__repr__()
-    except Exception:
+    except __builtin__.Exception:
         strthis = ""
     return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,)
 
 try:
     _object = object
     _newclass = 1
-except AttributeError:
+except __builtin__.Exception:
     class _object:
         pass
     _newclass = 0
 
-
 try:
     import weakref
     weakref_proxy = weakref.proxy
-except Exception:
+except __builtin__.Exception:
     weakref_proxy = lambda x: x
 
 
@@ -204,8 +209,6 @@ class SwigPyIterator(_object):
 SwigPyIterator_swigregister = _libBornAgainCore.SwigPyIterator_swigregister
 SwigPyIterator_swigregister(SwigPyIterator)
 
-
-_libBornAgainCore.SHARED_PTR_DISOWN_swigconstant(_libBornAgainCore)
 SHARED_PTR_DISOWN = _libBornAgainCore.SHARED_PTR_DISOWN
 
 class ParameterPoolIterator(object):
@@ -386,7 +389,7 @@ class vdouble1d_t(_object):
         this = _libBornAgainCore.new_vdouble1d_t(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def push_back(self, x):
@@ -598,7 +601,7 @@ class vdouble2d_t(_object):
         this = _libBornAgainCore.new_vdouble2d_t(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def push_back(self, x):
@@ -810,7 +813,7 @@ class vector_integer_t(_object):
         this = _libBornAgainCore.new_vector_integer_t(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def push_back(self, x):
@@ -1022,7 +1025,7 @@ class vinteger2d_t(_object):
         this = _libBornAgainCore.new_vinteger2d_t(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def push_back(self, x):
@@ -1234,7 +1237,7 @@ class vector_longinteger_t(_object):
         this = _libBornAgainCore.new_vector_longinteger_t(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def push_back(self, x):
@@ -1446,7 +1449,7 @@ class vector_complex_t(_object):
         this = _libBornAgainCore.new_vector_complex_t(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def push_back(self, x):
@@ -1658,7 +1661,7 @@ class vector_string_t(_object):
         this = _libBornAgainCore.new_vector_string_t(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def push_back(self, x):
@@ -1771,7 +1774,7 @@ class INoncopyable(_object):
         this = _libBornAgainCore.new_INoncopyable()
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_INoncopyable
     __del__ = lambda self: None
@@ -1864,7 +1867,7 @@ class INamed(_object):
         this = _libBornAgainCore.new_INamed(_self, *args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_INamed
     __del__ = lambda self: None
@@ -1921,7 +1924,7 @@ class IParameterized(INamed):
         this = _libBornAgainCore.new_IParameterized(_self, *args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_IParameterized
     __del__ = lambda self: None
@@ -2056,7 +2059,7 @@ class INode(IParameterized):
         this = _libBornAgainCore.new_INode(_self, )
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_INode
     __del__ = lambda self: None
@@ -2329,7 +2332,7 @@ class swig_dummy_type_inode_vector(_object):
         this = _libBornAgainCore.new_swig_dummy_type_inode_vector(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def push_back(self, x):
@@ -2541,7 +2544,7 @@ class swig_dummy_type_const_inode_vector(_object):
         this = _libBornAgainCore.new_swig_dummy_type_const_inode_vector(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def push_back(self, x):
@@ -2623,7 +2626,7 @@ class kvector_t(_object):
         this = _libBornAgainCore.new_kvector_t(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def x(self):
@@ -3053,7 +3056,7 @@ class vector_kvector_t(_object):
         this = _libBornAgainCore.new_vector_kvector_t(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def push_back(self, x):
@@ -3135,7 +3138,7 @@ class cvector_t(_object):
         this = _libBornAgainCore.new_cvector_t(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def x(self):
@@ -3473,7 +3476,7 @@ class vector_cvector_t(_object):
         this = _libBornAgainCore.new_vector_cvector_t(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def push_back(self, x):
@@ -3586,9 +3589,7 @@ class WavevectorInfo(_object):
         """GetZeroQ() -> WavevectorInfo"""
         return _libBornAgainCore.WavevectorInfo_GetZeroQ()
 
-    if _newclass:
-        GetZeroQ = staticmethod(GetZeroQ)
-    __swig_getmethods__["GetZeroQ"] = lambda x: GetZeroQ
+    GetZeroQ = staticmethod(GetZeroQ)
 
     def __init__(self, *args):
         """
@@ -3601,7 +3602,7 @@ class WavevectorInfo(_object):
         this = _libBornAgainCore.new_WavevectorInfo(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def transformed(self, transform):
@@ -3709,7 +3710,7 @@ class Beam(INode):
         this = _libBornAgainCore.new_Beam(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_Beam
     __del__ = lambda self: None
@@ -3848,7 +3849,7 @@ class Bin1D(_object):
         this = _libBornAgainCore.new_Bin1D(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_setmethods__["m_lower"] = _libBornAgainCore.Bin1D_m_lower_set
     __swig_getmethods__["m_lower"] = _libBornAgainCore.Bin1D_m_lower_get
@@ -3924,7 +3925,7 @@ class Bin1DKVector(_object):
         this = _libBornAgainCore.new_Bin1DKVector(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def getMidPoint(self):
@@ -3989,7 +3990,7 @@ class Bin1DCVector(_object):
         this = _libBornAgainCore.new_Bin1DCVector(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def getMidPoint(self):
@@ -4286,7 +4287,7 @@ class VariableBinAxis(IAxis):
         this = _libBornAgainCore.new_VariableBinAxis(name, nbins, bin_boundaries)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_VariableBinAxis
     __del__ = lambda self: None
@@ -4459,7 +4460,7 @@ class ConstKBinAxis(VariableBinAxis):
         this = _libBornAgainCore.new_ConstKBinAxis(name, nbins, start, end)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_ConstKBinAxis
     __del__ = lambda self: None
@@ -4537,7 +4538,7 @@ class CustomBinAxis(VariableBinAxis):
         this = _libBornAgainCore.new_CustomBinAxis(name, nbins, start, end)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_CustomBinAxis
     __del__ = lambda self: None
@@ -4714,7 +4715,7 @@ class ISample(ICloneable, INode):
         this = _libBornAgainCore.new_ISample(_self, )
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_ISample
     __del__ = lambda self: None
@@ -4943,7 +4944,7 @@ class IObservable(_object):
         this = _libBornAgainCore.new_IObservable(_self, )
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     def __disown__(self):
         self.this.disown()
@@ -4986,7 +4987,7 @@ class IFitObserver(IObserver):
         this = _libBornAgainCore.new_IFitObserver(_self, update_every_nth)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def notify(self, subject):
@@ -5108,7 +5109,7 @@ class FitStrategyDefault(IFitStrategy):
         this = _libBornAgainCore.new_FitStrategyDefault()
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -5234,7 +5235,7 @@ class IntensityFunctionLog(IIntensityFunction):
         this = _libBornAgainCore.new_IntensityFunctionLog()
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 IntensityFunctionLog_swigregister = _libBornAgainCore.IntensityFunctionLog_swigregister
 IntensityFunctionLog_swigregister(IntensityFunctionLog)
@@ -5295,7 +5296,7 @@ class IntensityFunctionSqrt(IIntensityFunction):
         this = _libBornAgainCore.new_IntensityFunctionSqrt()
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 IntensityFunctionSqrt_swigregister = _libBornAgainCore.IntensityFunctionSqrt_swigregister
 IntensityFunctionSqrt_swigregister(IntensityFunctionSqrt)
@@ -5399,7 +5400,7 @@ class IntensityNormalizer(IIntensityNormalizer):
         this = _libBornAgainCore.new_IntensityNormalizer(scale, shift)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_IntensityNormalizer
     __del__ = lambda self: None
@@ -5490,7 +5491,7 @@ class IntensityScaleAndShiftNormalizer(IntensityNormalizer):
         this = _libBornAgainCore.new_IntensityScaleAndShiftNormalizer(scale, shift)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_IntensityScaleAndShiftNormalizer
     __del__ = lambda self: None
@@ -5613,7 +5614,7 @@ class SquaredFunctionDefault(ISquaredFunction):
         this = _libBornAgainCore.new_SquaredFunctionDefault()
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_SquaredFunctionDefault
     __del__ = lambda self: None
@@ -5910,7 +5911,7 @@ class ChiSquaredModule(IChiSquaredModule):
         this = _libBornAgainCore.new_ChiSquaredModule(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_ChiSquaredModule
     __del__ = lambda self: None
@@ -5987,7 +5988,7 @@ class FitObject(INode, INoncopyable):
         this = _libBornAgainCore.new_FitObject(simulation, real_data, weight)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_FitObject
     __del__ = lambda self: None
@@ -6139,7 +6140,7 @@ class FitOptions(_object):
         this = _libBornAgainCore.new_FitOptions()
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_FitOptions
     __del__ = lambda self: None
@@ -6202,7 +6203,7 @@ class FitParameter(libBornAgainFit.IFitParameter):
         this = _libBornAgainCore.new_FitParameter(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_FitParameter
     __del__ = lambda self: None
@@ -6343,7 +6344,7 @@ class FitSuite(IObservable):
         this = _libBornAgainCore.new_FitSuite()
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_FitSuite
     __del__ = lambda self: None
@@ -6775,7 +6776,7 @@ class FitSuiteObjects(INode, INoncopyable):
         this = _libBornAgainCore.new_FitSuiteObjects()
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_FitSuiteObjects
     __del__ = lambda self: None
@@ -7126,11 +7127,7 @@ def Bessel_J1c(*args):
 
     """
     return _libBornAgainCore.Bessel_J1c(*args)
-
-_libBornAgainCore.FORWARD_FFT_swigconstant(_libBornAgainCore)
 FORWARD_FFT = _libBornAgainCore.FORWARD_FFT
-
-_libBornAgainCore.BACKWARD_FFT_swigconstant(_libBornAgainCore)
 BACKWARD_FFT = _libBornAgainCore.BACKWARD_FFT
 
 def FastFourierTransform(*args):
@@ -7215,7 +7212,7 @@ class AdjustMinimizerStrategy(IFitStrategy):
         this = _libBornAgainCore.new_AdjustMinimizerStrategy(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -7288,7 +7285,7 @@ class IMultiLayerBuilder(IParameterized):
         this = _libBornAgainCore.new_IMultiLayerBuilder(_self, )
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def buildSample(self):
@@ -7348,9 +7345,7 @@ class IMultiLayerBuilder(IParameterized):
         """isPythonBuilder() -> bool"""
         return _libBornAgainCore.IMultiLayerBuilder_isPythonBuilder()
 
-    if _newclass:
-        isPythonBuilder = staticmethod(isPythonBuilder)
-    __swig_getmethods__["isPythonBuilder"] = lambda x: isPythonBuilder
+    isPythonBuilder = staticmethod(isPythonBuilder)
     __swig_destroy__ = _libBornAgainCore.delete_IMultiLayerBuilder
     __del__ = lambda self: None
     def __disown__(self):
@@ -7392,7 +7387,7 @@ class INodeVisitor(_object):
         this = _libBornAgainCore.new_INodeVisitor()
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_INodeVisitor
     __del__ = lambda self: None
@@ -7663,7 +7658,7 @@ class Crystal(IClusteredParticles):
         this = _libBornAgainCore.new_Crystal(lattice_basis, lattice)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_Crystal
     __del__ = lambda self: None
@@ -7918,7 +7913,7 @@ class DistributionGate(IDistribution1D):
         this = _libBornAgainCore.new_DistributionGate(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_DistributionGate
     __del__ = lambda self: None
@@ -8047,7 +8042,7 @@ class DistributionLorentz(IDistribution1D):
         this = _libBornAgainCore.new_DistributionLorentz(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_DistributionLorentz
     __del__ = lambda self: None
@@ -8166,7 +8161,7 @@ class DistributionGaussian(IDistribution1D):
         this = _libBornAgainCore.new_DistributionGaussian(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_DistributionGaussian
     __del__ = lambda self: None
@@ -8285,7 +8280,7 @@ class DistributionLogNormal(IDistribution1D):
         this = _libBornAgainCore.new_DistributionLogNormal(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_DistributionLogNormal
     __del__ = lambda self: None
@@ -8426,7 +8421,7 @@ class DistributionCosine(IDistribution1D):
         this = _libBornAgainCore.new_DistributionCosine(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_DistributionCosine
     __del__ = lambda self: None
@@ -8545,7 +8540,7 @@ class DistributionTrapezoid(IDistribution1D):
         this = _libBornAgainCore.new_DistributionTrapezoid(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_DistributionTrapezoid
     __del__ = lambda self: None
@@ -8680,7 +8675,7 @@ class DetectorMask(_object):
         this = _libBornAgainCore.new_DetectorMask(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def addMask(self, shape, mask_value):
@@ -8852,7 +8847,7 @@ class Ellipse(IShape2D):
         this = _libBornAgainCore.new_Ellipse(xcenter, ycenter, xradius, yradius, theta)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -9019,7 +9014,7 @@ class FTDecayFunction1DCauchy(IFTDecayFunction1D):
         this = _libBornAgainCore.new_FTDecayFunction1DCauchy(decay_length)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -9088,7 +9083,7 @@ class FTDecayFunction1DGauss(IFTDecayFunction1D):
         this = _libBornAgainCore.new_FTDecayFunction1DGauss(decay_length)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -9157,7 +9152,7 @@ class FTDecayFunction1DTriangle(IFTDecayFunction1D):
         this = _libBornAgainCore.new_FTDecayFunction1DTriangle(decay_length)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -9237,7 +9232,7 @@ class FTDecayFunction1DVoigt(IFTDecayFunction1D):
         this = _libBornAgainCore.new_FTDecayFunction1DVoigt(decay_length, eta)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -9438,7 +9433,7 @@ class FTDecayFunction2DCauchy(IFTDecayFunction2D):
         this = _libBornAgainCore.new_FTDecayFunction2DCauchy(decay_length_x, decay_length_y, gamma)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -9510,7 +9505,7 @@ class FTDecayFunction2DGauss(IFTDecayFunction2D):
         this = _libBornAgainCore.new_FTDecayFunction2DGauss(decay_length_x, decay_length_y, gamma)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -9599,7 +9594,7 @@ class FTDecayFunction2DVoigt(IFTDecayFunction2D):
         this = _libBornAgainCore.new_FTDecayFunction2DVoigt(decay_length_x, decay_length_y, eta, gamma)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -9749,7 +9744,7 @@ class FTDistribution1DCauchy(IFTDistribution1D):
         this = _libBornAgainCore.new_FTDistribution1DCauchy(omega)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -9820,7 +9815,7 @@ class FTDistribution1DGauss(IFTDistribution1D):
         this = _libBornAgainCore.new_FTDistribution1DGauss(omega)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -9891,7 +9886,7 @@ class FTDistribution1DGate(IFTDistribution1D):
         this = _libBornAgainCore.new_FTDistribution1DGate(omega)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -9962,7 +9957,7 @@ class FTDistribution1DTriangle(IFTDistribution1D):
         this = _libBornAgainCore.new_FTDistribution1DTriangle(omega)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -10033,7 +10028,7 @@ class FTDistribution1DCosine(IFTDistribution1D):
         this = _libBornAgainCore.new_FTDistribution1DCosine(omega)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -10115,7 +10110,7 @@ class FTDistribution1DVoigt(IFTDistribution1D):
         this = _libBornAgainCore.new_FTDistribution1DVoigt(omega, eta)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -10296,7 +10291,7 @@ class FTDistribution2DCauchy(IFTDistribution2D):
         this = _libBornAgainCore.new_FTDistribution2DCauchy(omega_x, omega_y, gamma)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -10368,7 +10363,7 @@ class FTDistribution2DGauss(IFTDistribution2D):
         this = _libBornAgainCore.new_FTDistribution2DGauss(omega_x, omega_y, gamma)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -10440,7 +10435,7 @@ class FTDistribution2DGate(IFTDistribution2D):
         this = _libBornAgainCore.new_FTDistribution2DGate(omega_x, omega_y, gamma)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -10512,7 +10507,7 @@ class FTDistribution2DCone(IFTDistribution2D):
         this = _libBornAgainCore.new_FTDistribution2DCone(omega_x, omega_y, gamma)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -10601,7 +10596,7 @@ class FTDistribution2DVoigt(IFTDistribution2D):
         this = _libBornAgainCore.new_FTDistribution2DVoigt(omega_x, omega_y, eta, gamma)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -10699,7 +10694,7 @@ class FixedBinAxis(IAxis):
         this = _libBornAgainCore.new_FixedBinAxis(name, nbins, start, end)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_FixedBinAxis
     __del__ = lambda self: None
@@ -10863,7 +10858,7 @@ class IFormFactor(ISample):
         this = _libBornAgainCore.new_IFormFactor(_self, )
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_IFormFactor
     __del__ = lambda self: None
@@ -11160,7 +11155,7 @@ class vector_IFormFactorPtr_t(_object):
         this = _libBornAgainCore.new_vector_IFormFactorPtr_t(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def push_back(self, x):
@@ -11249,7 +11244,7 @@ class IFormFactorBorn(IFormFactor):
         this = _libBornAgainCore.new_IFormFactorBorn(_self, )
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_IFormFactorBorn
     __del__ = lambda self: None
@@ -11384,7 +11379,7 @@ class SlicingEffects(_object):
         this = _libBornAgainCore.new_SlicingEffects()
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_SlicingEffects
     __del__ = lambda self: None
@@ -11542,7 +11537,7 @@ class PolygonalTopology(_object):
         this = _libBornAgainCore.new_PolygonalTopology()
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_PolygonalTopology
     __del__ = lambda self: None
@@ -11587,7 +11582,7 @@ class PolyhedralTopology(_object):
         this = _libBornAgainCore.new_PolyhedralTopology()
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_PolyhedralTopology
     __del__ = lambda self: None
@@ -11620,7 +11615,7 @@ class PolyhedralEdge(_object):
         this = _libBornAgainCore.new_PolyhedralEdge(_Vlow, _Vhig)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def E(self):
@@ -11699,9 +11694,7 @@ class PolyhedralFace(_object):
         """diameter(vector_kvector_t V) -> double"""
         return _libBornAgainCore.PolyhedralFace_diameter(V)
 
-    if _newclass:
-        diameter = staticmethod(diameter)
-    __swig_getmethods__["diameter"] = lambda x: diameter
+    diameter = staticmethod(diameter)
 
     def __init__(self, *args):
         """
@@ -11726,7 +11719,7 @@ class PolyhedralFace(_object):
         this = _libBornAgainCore.new_PolyhedralFace(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def area(self):
@@ -12107,7 +12100,7 @@ class FormFactorAnisoPyramid(FormFactorPolyhedron):
         this = _libBornAgainCore.new_FormFactorAnisoPyramid(length, width, height, alpha)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -12222,7 +12215,7 @@ class FormFactorBox(IFormFactorBorn):
         this = _libBornAgainCore.new_FormFactorBox(length, width, height)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -12351,7 +12344,7 @@ class FormFactorCone(IFormFactorBorn):
         this = _libBornAgainCore.new_FormFactorCone(radius, height, alpha)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -12480,7 +12473,7 @@ class FormFactorCone6(FormFactorPolyhedron):
         this = _libBornAgainCore.new_FormFactorCone6(base_edge, height, alpha)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -12571,7 +12564,7 @@ class FormFactorCrystal(IFormFactor):
         this = _libBornAgainCore.new_FormFactorCrystal(lattice, basis_form_factor, meso_form_factor)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_FormFactorCrystal
     __del__ = lambda self: None
@@ -12721,7 +12714,7 @@ class FormFactorCuboctahedron(FormFactorPolyhedron):
         this = _libBornAgainCore.new_FormFactorCuboctahedron(length, height, height_ratio, alpha)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -12833,7 +12826,7 @@ class FormFactorCylinder(IFormFactorBorn):
         this = _libBornAgainCore.new_FormFactorCylinder(radius, height)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -12941,7 +12934,7 @@ class FormFactorDecoratorDebyeWaller(IFormFactorDecorator):
         this = _libBornAgainCore.new_FormFactorDecoratorDebyeWaller(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -13030,7 +13023,7 @@ class FormFactorDodecahedron(FormFactorPolyhedron):
         this = _libBornAgainCore.new_FormFactorDodecahedron(edge)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -13101,7 +13094,7 @@ class FormFactorDot(IFormFactorBorn):
         this = _libBornAgainCore.new_FormFactorDot()
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -13200,7 +13193,7 @@ class FormFactorEllipsoidalCylinder(IFormFactorBorn):
         this = _libBornAgainCore.new_FormFactorEllipsoidalCylinder(radius_x, radius_y, height)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -13323,7 +13316,7 @@ class FormFactorFullSphere(IFormFactorBorn):
         this = _libBornAgainCore.new_FormFactorFullSphere(radius)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -13453,7 +13446,7 @@ class FormFactorFullSpheroid(IFormFactorBorn):
         this = _libBornAgainCore.new_FormFactorFullSpheroid(radius, height)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -13559,7 +13552,7 @@ class FormFactorGauss(IFormFactorBorn):
         this = _libBornAgainCore.new_FormFactorGauss(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -13678,7 +13671,7 @@ class FormFactorHemiEllipsoid(IFormFactorBorn):
         this = _libBornAgainCore.new_FormFactorHemiEllipsoid(radius_x, radius_y, height)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_FormFactorHemiEllipsoid
     __del__ = lambda self: None
@@ -13801,7 +13794,7 @@ class FormFactorIcosahedron(FormFactorPolyhedron):
         this = _libBornAgainCore.new_FormFactorIcosahedron(edge)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -13886,7 +13879,7 @@ class FormFactorLongBoxGauss(IFormFactorBorn):
         this = _libBornAgainCore.new_FormFactorLongBoxGauss(length, width, height)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -14015,7 +14008,7 @@ class FormFactorLongBoxLorentz(IFormFactorBorn):
         this = _libBornAgainCore.new_FormFactorLongBoxLorentz(length, width, height)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -14144,7 +14137,7 @@ class FormFactorLongRipple1Gauss(IFormFactorBorn):
         this = _libBornAgainCore.new_FormFactorLongRipple1Gauss(length, width, height)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -14273,7 +14266,7 @@ class FormFactorLongRipple1Lorentz(IFormFactorBorn):
         this = _libBornAgainCore.new_FormFactorLongRipple1Lorentz(length, width, height)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -14405,7 +14398,7 @@ class FormFactorLongRipple2Gauss(IFormFactorBorn):
         this = _libBornAgainCore.new_FormFactorLongRipple2Gauss(length, width, height, asymmetry)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -14545,7 +14538,7 @@ class FormFactorLongRipple2Lorentz(IFormFactorBorn):
         this = _libBornAgainCore.new_FormFactorLongRipple2Lorentz(length, width, height, asymmetry)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -14671,7 +14664,7 @@ class FormFactorLorentz(IFormFactorBorn):
         this = _libBornAgainCore.new_FormFactorLorentz(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -14787,7 +14780,7 @@ class FormFactorPrism3(FormFactorPolygonalPrism):
         this = _libBornAgainCore.new_FormFactorPrism3(base_edge, height)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -14869,7 +14862,7 @@ class FormFactorPrism6(FormFactorPolygonalPrism):
         this = _libBornAgainCore.new_FormFactorPrism6(base_edge, height)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -14954,7 +14947,7 @@ class FormFactorPyramid(FormFactorPolyhedron):
         this = _libBornAgainCore.new_FormFactorPyramid(base_edge, height, alpha)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -15059,7 +15052,7 @@ class FormFactorRipple1(IFormFactorBorn):
         this = _libBornAgainCore.new_FormFactorRipple1(length, width, height)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -15191,7 +15184,7 @@ class FormFactorRipple2(IFormFactorBorn):
         this = _libBornAgainCore.new_FormFactorRipple2(length, width, height, asymmetry)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -15316,7 +15309,7 @@ class FormFactorSphereGaussianRadius(IFormFactorBorn):
         this = _libBornAgainCore.new_FormFactorSphereGaussianRadius(mean, sigma)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -15401,7 +15394,7 @@ class FormFactorSphereLogNormalRadius(IFormFactorBorn):
         this = _libBornAgainCore.new_FormFactorSphereLogNormalRadius(mean, scale_param, n_samples)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -15486,7 +15479,7 @@ class FormFactorSphereUniformRadius(IFormFactorBorn):
         this = _libBornAgainCore.new_FormFactorSphereUniformRadius(mean, full_width)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -15585,7 +15578,7 @@ class FormFactorTetrahedron(FormFactorPolyhedron):
         this = _libBornAgainCore.new_FormFactorTetrahedron(base_edge, height, alpha)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -15687,7 +15680,7 @@ class FormFactorTruncatedCube(FormFactorPolyhedron):
         this = _libBornAgainCore.new_FormFactorTruncatedCube(length, removed_length)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -15783,7 +15776,7 @@ class FormFactorTruncatedSphere(IFormFactorBorn):
         this = _libBornAgainCore.new_FormFactorTruncatedSphere(radius, height, dh)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -15916,7 +15909,7 @@ class FormFactorTruncatedSpheroid(IFormFactorBorn):
         this = _libBornAgainCore.new_FormFactorTruncatedSpheroid(radius, height, height_flattening, dh)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -16043,7 +16036,7 @@ class FormFactorWeighted(IFormFactor):
         this = _libBornAgainCore.new_FormFactorWeighted()
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_FormFactorWeighted
     __del__ = lambda self: None
@@ -16459,7 +16452,7 @@ class SimulationOptions(_object):
         this = _libBornAgainCore.new_SimulationOptions()
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def isIntegrate(self):
@@ -16657,7 +16650,7 @@ class GISASSimulation(Simulation):
         this = _libBornAgainCore.new_GISASSimulation(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_GISASSimulation
     __del__ = lambda self: None
@@ -17323,9 +17316,7 @@ class IHistogram(_object):
         """createHistogram(IntensityData source) -> IHistogram"""
         return _libBornAgainCore.IHistogram_createHistogram(source)
 
-    if _newclass:
-        createHistogram = staticmethod(createHistogram)
-    __swig_getmethods__["createHistogram"] = lambda x: createHistogram
+    createHistogram = staticmethod(createHistogram)
 
     def createFrom(*args):
         """
@@ -17334,9 +17325,7 @@ class IHistogram(_object):
         """
         return _libBornAgainCore.IHistogram_createFrom(*args)
 
-    if _newclass:
-        createFrom = staticmethod(createFrom)
-    __swig_getmethods__["createFrom"] = lambda x: createFrom
+    createFrom = staticmethod(createFrom)
 
     def createOutputData(self, *args):
         """
@@ -17488,7 +17477,7 @@ class Histogram1D(IHistogram):
         this = _libBornAgainCore.new_Histogram1D(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -17595,9 +17584,7 @@ class Histogram1D(IHistogram):
         """dynamicCast(IHistogram pHistogram) -> Histogram1D"""
         return _libBornAgainCore.Histogram1D_dynamicCast(pHistogram)
 
-    if _newclass:
-        dynamicCast = staticmethod(dynamicCast)
-    __swig_getmethods__["dynamicCast"] = lambda x: dynamicCast
+    dynamicCast = staticmethod(dynamicCast)
     __swig_destroy__ = _libBornAgainCore.delete_Histogram1D
     __del__ = lambda self: None
 Histogram1D_swigregister = _libBornAgainCore.Histogram1D_swigregister
@@ -17643,7 +17630,7 @@ class Histogram2D(IHistogram):
         this = _libBornAgainCore.new_Histogram2D(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -17769,9 +17756,7 @@ class Histogram2D(IHistogram):
         """dynamicCast(IHistogram pHistogram) -> Histogram2D"""
         return _libBornAgainCore.Histogram2D_dynamicCast(pHistogram)
 
-    if _newclass:
-        dynamicCast = staticmethod(dynamicCast)
-    __swig_getmethods__["dynamicCast"] = lambda x: dynamicCast
+    dynamicCast = staticmethod(dynamicCast)
     __swig_destroy__ = _libBornAgainCore.delete_Histogram2D
     __del__ = lambda self: None
 Histogram2D_swigregister = _libBornAgainCore.Histogram2D_swigregister
@@ -18384,7 +18369,7 @@ class IInterferenceFunction(ISample):
         this = _libBornAgainCore.new_IInterferenceFunction(_self, )
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     def __disown__(self):
         self.this.disown()
@@ -18725,7 +18710,7 @@ class ParticleLimits(_object):
         this = _libBornAgainCore.new_ParticleLimits()
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_ParticleLimits
     __del__ = lambda self: None
@@ -19026,17 +19011,13 @@ class IRotation(ISample):
         """createRotation(Transform3D const & transform) -> IRotation"""
         return _libBornAgainCore.IRotation_createRotation(transform)
 
-    if _newclass:
-        createRotation = staticmethod(createRotation)
-    __swig_getmethods__["createRotation"] = lambda x: createRotation
+    createRotation = staticmethod(createRotation)
 
     def createIdentity():
         """createIdentity() -> IRotation"""
         return _libBornAgainCore.IRotation_createIdentity()
 
-    if _newclass:
-        createIdentity = staticmethod(createIdentity)
-    __swig_getmethods__["createIdentity"] = lambda x: createIdentity
+    createIdentity = staticmethod(createIdentity)
     __swig_destroy__ = _libBornAgainCore.delete_IRotation
     __del__ = lambda self: None
 
@@ -19161,7 +19142,7 @@ class RotationX(IRotation):
         this = _libBornAgainCore.new_RotationX(angle)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -19257,7 +19238,7 @@ class RotationY(IRotation):
         this = _libBornAgainCore.new_RotationY(angle)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -19354,7 +19335,7 @@ class RotationZ(IRotation):
         this = _libBornAgainCore.new_RotationZ(angle)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -19456,7 +19437,7 @@ class RotationEuler(IRotation):
         this = _libBornAgainCore.new_RotationEuler(alpha, beta, gamma)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -19614,7 +19595,7 @@ class SimpleSelectionRule(ISelectionRule):
         this = _libBornAgainCore.new_SimpleSelectionRule(a, b, c, modulus)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_SimpleSelectionRule
     __del__ = lambda self: None
@@ -19672,7 +19653,7 @@ class Instrument(INode):
         this = _libBornAgainCore.new_Instrument(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_Instrument
     __del__ = lambda self: None
@@ -20037,33 +20018,25 @@ class IntensityDataIOFactory(_object):
         """readOutputData(std::string const & file_name) -> IntensityData"""
         return _libBornAgainCore.IntensityDataIOFactory_readOutputData(file_name)
 
-    if _newclass:
-        readOutputData = staticmethod(readOutputData)
-    __swig_getmethods__["readOutputData"] = lambda x: readOutputData
+    readOutputData = staticmethod(readOutputData)
 
     def readIntensityData(file_name):
         """readIntensityData(std::string const & file_name) -> IHistogram"""
         return _libBornAgainCore.IntensityDataIOFactory_readIntensityData(file_name)
 
-    if _newclass:
-        readIntensityData = staticmethod(readIntensityData)
-    __swig_getmethods__["readIntensityData"] = lambda x: readIntensityData
+    readIntensityData = staticmethod(readIntensityData)
 
     def writeOutputData(data, file_name):
         """writeOutputData(IntensityData data, std::string const & file_name)"""
         return _libBornAgainCore.IntensityDataIOFactory_writeOutputData(data, file_name)
 
-    if _newclass:
-        writeOutputData = staticmethod(writeOutputData)
-    __swig_getmethods__["writeOutputData"] = lambda x: writeOutputData
+    writeOutputData = staticmethod(writeOutputData)
 
     def writeIntensityData(histogram, file_name):
         """writeIntensityData(IHistogram histogram, std::string const & file_name)"""
         return _libBornAgainCore.IntensityDataIOFactory_writeIntensityData(histogram, file_name)
 
-    if _newclass:
-        writeIntensityData = staticmethod(writeIntensityData)
-    __swig_getmethods__["writeIntensityData"] = lambda x: writeIntensityData
+    writeIntensityData = staticmethod(writeIntensityData)
 
     def __init__(self):
         """
@@ -20079,7 +20052,7 @@ class IntensityDataIOFactory(_object):
         this = _libBornAgainCore.new_IntensityDataIOFactory()
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_IntensityDataIOFactory
     __del__ = lambda self: None
@@ -20143,7 +20116,7 @@ class InterferenceFunction1DLattice(IInterferenceFunction):
         this = _libBornAgainCore.new_InterferenceFunction1DLattice(length, xi)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_InterferenceFunction1DLattice
     __del__ = lambda self: None
@@ -20268,7 +20241,7 @@ class InterferenceFunctionRadialParaCrystal(IInterferenceFunction):
         this = _libBornAgainCore.new_InterferenceFunctionRadialParaCrystal(peak_distance, damping_length)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -20478,7 +20451,7 @@ class InterferenceFunction2DLattice(IInterferenceFunction):
         this = _libBornAgainCore.new_InterferenceFunction2DLattice(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_InterferenceFunction2DLattice
     __del__ = lambda self: None
@@ -20514,9 +20487,7 @@ class InterferenceFunction2DLattice(IInterferenceFunction):
         """
         return _libBornAgainCore.InterferenceFunction2DLattice_createSquare(lattice_length, xi)
 
-    if _newclass:
-        createSquare = staticmethod(createSquare)
-    __swig_getmethods__["createSquare"] = lambda x: createSquare
+    createSquare = staticmethod(createSquare)
 
     def createHexagonal(lattice_length, xi=0.0):
         """
@@ -20525,9 +20496,7 @@ class InterferenceFunction2DLattice(IInterferenceFunction):
         """
         return _libBornAgainCore.InterferenceFunction2DLattice_createHexagonal(lattice_length, xi)
 
-    if _newclass:
-        createHexagonal = staticmethod(createHexagonal)
-    __swig_getmethods__["createHexagonal"] = lambda x: createHexagonal
+    createHexagonal = staticmethod(createHexagonal)
 
     def setDecayFunction(self, decay):
         """
@@ -20697,7 +20666,7 @@ class InterferenceFunction2DParaCrystal(IInterferenceFunction):
         this = _libBornAgainCore.new_InterferenceFunction2DParaCrystal(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_InterferenceFunction2DParaCrystal
     __del__ = lambda self: None
@@ -20735,9 +20704,7 @@ class InterferenceFunction2DParaCrystal(IInterferenceFunction):
         """
         return _libBornAgainCore.InterferenceFunction2DParaCrystal_createSquare(lattice_length, damping_length, domain_size_1, domain_size_2)
 
-    if _newclass:
-        createSquare = staticmethod(createSquare)
-    __swig_getmethods__["createSquare"] = lambda x: createSquare
+    createSquare = staticmethod(createSquare)
 
     def createHexagonal(lattice_length, damping_length=0.0, domain_size_1=0.0, domain_size_2=0.0):
         """
@@ -20748,9 +20715,7 @@ class InterferenceFunction2DParaCrystal(IInterferenceFunction):
         """
         return _libBornAgainCore.InterferenceFunction2DParaCrystal_createHexagonal(lattice_length, damping_length, domain_size_1, domain_size_2)
 
-    if _newclass:
-        createHexagonal = staticmethod(createHexagonal)
-    __swig_getmethods__["createHexagonal"] = lambda x: createHexagonal
+    createHexagonal = staticmethod(createHexagonal)
 
     def setDomainSizes(self, size_1, size_2):
         """
@@ -20956,7 +20921,7 @@ class InterferenceFunctionNone(IInterferenceFunction):
         this = _libBornAgainCore.new_InterferenceFunctionNone()
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -21104,7 +21069,7 @@ class SphericalDetector(IDetector2D):
         this = _libBornAgainCore.new_SphericalDetector(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -21180,7 +21145,7 @@ class SphericalPixel(IPixel):
         this = _libBornAgainCore.new_SphericalPixel(alpha_bin, phi_bin)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_SphericalPixel
     __del__ = lambda self: None
@@ -21269,7 +21234,7 @@ class IsGISAXSDetector(SphericalDetector):
         this = _libBornAgainCore.new_IsGISAXSDetector(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -21329,7 +21294,7 @@ class Lattice(INode):
         this = _libBornAgainCore.new_Lattice(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_Lattice
     __del__ = lambda self: None
@@ -21482,17 +21447,13 @@ class Lattice(INode):
         """createFCCLattice(double a) -> Lattice"""
         return _libBornAgainCore.Lattice_createFCCLattice(a)
 
-    if _newclass:
-        createFCCLattice = staticmethod(createFCCLattice)
-    __swig_getmethods__["createFCCLattice"] = lambda x: createFCCLattice
+    createFCCLattice = staticmethod(createFCCLattice)
 
     def createTrigonalLattice(a, c):
         """createTrigonalLattice(double a, double c) -> Lattice"""
         return _libBornAgainCore.Lattice_createTrigonalLattice(a, c)
 
-    if _newclass:
-        createTrigonalLattice = staticmethod(createTrigonalLattice)
-    __swig_getmethods__["createTrigonalLattice"] = lambda x: createTrigonalLattice
+    createTrigonalLattice = staticmethod(createTrigonalLattice)
 
     def onChange(self):
         """
@@ -21552,7 +21513,7 @@ class Lattice1DParameters(_object):
         this = _libBornAgainCore.new_Lattice1DParameters(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_setmethods__["m_length"] = _libBornAgainCore.Lattice1DParameters_m_length_set
     __swig_getmethods__["m_length"] = _libBornAgainCore.Lattice1DParameters_m_length_get
@@ -21691,7 +21652,7 @@ class BasicLattice(Lattice2D):
         this = _libBornAgainCore.new_BasicLattice(length1, length2, angle, rotation_angle)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -21784,7 +21745,7 @@ class SquareLattice(Lattice2D):
         this = _libBornAgainCore.new_SquareLattice(length, rotation_angle)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -21877,7 +21838,7 @@ class HexagonalLattice(Lattice2D):
         this = _libBornAgainCore.new_HexagonalLattice(length, rotation_angle)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -21992,7 +21953,7 @@ class Layer(ISample):
         this = _libBornAgainCore.new_Layer(material, thickness)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_Layer
     __del__ = lambda self: None
@@ -22232,7 +22193,7 @@ class LayerRoughness(ISample):
         this = _libBornAgainCore.new_LayerRoughness(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -22393,7 +22354,7 @@ class Line(IShape2D):
         this = _libBornAgainCore.new_Line(x1, y1, x2, y2)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -22459,7 +22420,7 @@ class VerticalLine(IShape2D):
         this = _libBornAgainCore.new_VerticalLine(x)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -22535,7 +22496,7 @@ class HorizontalLine(IShape2D):
         this = _libBornAgainCore.new_HorizontalLine(y)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -22604,7 +22565,7 @@ class Material(_object):
         this = _libBornAgainCore.new_Material(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def inverted(self):
@@ -22677,18 +22638,6 @@ class Material(_object):
         return _libBornAgainCore.Material_getName(self)
 
 
-    def dataType(self):
-        """
-        dataType(Material self) -> size_t
-
-        size_t Material::dataType() const
-
-        Returns hash code of underlying material implementation. 
-
-        """
-        return _libBornAgainCore.Material_dataType(self)
-
-
     def magnetization(self):
         """
         magnetization(Material self) -> kvector_t
@@ -22833,7 +22782,7 @@ class MesoCrystal(IParticle):
         this = _libBornAgainCore.new_MesoCrystal(particle_structure, form_factor)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_MesoCrystal
     __del__ = lambda self: None
@@ -22920,7 +22869,7 @@ class MultiLayer(ISample):
         this = _libBornAgainCore.new_MultiLayer()
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_MultiLayer
     __del__ = lambda self: None
@@ -23329,7 +23278,7 @@ class OffSpecSimulation(Simulation):
         this = _libBornAgainCore.new_OffSpecSimulation(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_OffSpecSimulation
     __del__ = lambda self: None
@@ -23457,7 +23406,7 @@ class IntensityData(_object):
         this = _libBornAgainCore.new_IntensityData()
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_IntensityData
     __del__ = lambda self: None
@@ -23848,9 +23797,10 @@ class IntensityData(_object):
         return _libBornAgainCore.IntensityData___isub__(self, right)
 
 
-    def __idiv__(self, right):
-        """__idiv__(IntensityData self, IntensityData right) -> IntensityData"""
-        return _libBornAgainCore.IntensityData___idiv__(self, right)
+    def __itruediv__(self, *args):
+        return _libBornAgainCore.IntensityData___itruediv__(self, *args)
+    __idiv__ = __itruediv__
+
 
 
     def __imul__(self, right):
@@ -23940,7 +23890,7 @@ class ParameterDistribution(IParameterized):
         this = _libBornAgainCore.new_ParameterDistribution(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_ParameterDistribution
     __del__ = lambda self: None
@@ -24090,7 +24040,7 @@ class ParameterPool(ICloneable):
         this = _libBornAgainCore.new_ParameterPool()
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_ParameterPool
     __del__ = lambda self: None
@@ -24303,7 +24253,7 @@ class ParameterSample(_object):
         this = _libBornAgainCore.new_ParameterSample(_value, _weight)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_setmethods__["value"] = _libBornAgainCore.ParameterSample_value_set
     __swig_getmethods__["value"] = _libBornAgainCore.ParameterSample_value_get
@@ -24477,7 +24427,7 @@ class ParameterSampleVector(_object):
         this = _libBornAgainCore.new_ParameterSampleVector(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def push_back(self, x):
@@ -24563,7 +24513,7 @@ class Particle(IParticle):
         this = _libBornAgainCore.new_Particle(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -24681,7 +24631,7 @@ class ParticleComposition(IParticle):
         this = _libBornAgainCore.new_ParticleComposition(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_ParticleComposition
     __del__ = lambda self: None
@@ -24824,7 +24774,7 @@ class ParticleCoreShell(IParticle):
         this = _libBornAgainCore.new_ParticleCoreShell(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_ParticleCoreShell
     __del__ = lambda self: None
@@ -24929,7 +24879,7 @@ class ParticleDistribution(IAbstractParticle):
         this = _libBornAgainCore.new_ParticleDistribution(prototype, par_distr)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -25054,7 +25004,7 @@ class ParticleLayout(ILayout):
         this = _libBornAgainCore.new_ParticleLayout(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_ParticleLayout
     __del__ = lambda self: None
@@ -25229,7 +25179,7 @@ class Polygon(IShape2D):
         this = _libBornAgainCore.new_Polygon(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_Polygon
     __del__ = lambda self: None
@@ -25313,7 +25263,7 @@ class RealParameter(IParameterReal):
         this = _libBornAgainCore.new_RealParameter(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self, *args):
@@ -25470,7 +25420,7 @@ class Rectangle(IShape2D):
         this = _libBornAgainCore.new_Rectangle(xlow, ylow, xup, yup)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -25586,7 +25536,7 @@ class RectangularDetector(IDetector2D):
         this = _libBornAgainCore.new_RectangularDetector(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
@@ -25847,7 +25797,7 @@ class RectangularPixel(IPixel):
         this = _libBornAgainCore.new_RectangularPixel(corner_pos, width, height)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_RectangularPixel
     __del__ = lambda self: None
@@ -25934,7 +25884,7 @@ class ResolutionFunction2DGaussian(IResolutionFunction2D):
         this = _libBornAgainCore.new_ResolutionFunction2DGaussian(sigma_x, sigma_y)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def evaluateCDF(self, x, y):
@@ -26025,7 +25975,7 @@ class SpecularSimulation(ICloneable, IParameterized):
         this = _libBornAgainCore.new_SpecularSimulation(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_SpecularSimulation
     __del__ = lambda self: None
@@ -26214,7 +26164,7 @@ class ThreadInfo(_object):
         this = _libBornAgainCore.new_ThreadInfo()
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_setmethods__["n_threads"] = _libBornAgainCore.ThreadInfo_n_threads_set
     __swig_getmethods__["n_threads"] = _libBornAgainCore.ThreadInfo_n_threads_get
@@ -26263,7 +26213,7 @@ class SampleBuilderFactoryTemp(_object):
         this = _libBornAgainCore.new_SampleBuilderFactoryTemp()
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def createItem(self, item_key):
@@ -26367,7 +26317,7 @@ class SampleBuilderFactory(SampleBuilderFactoryTemp):
         this = _libBornAgainCore.new_SampleBuilderFactory()
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def createSample(self, name):
@@ -26412,7 +26362,7 @@ class SimulationFactoryTemp(_object):
         this = _libBornAgainCore.new_SimulationFactoryTemp()
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def createItem(self, item_key):
@@ -26516,7 +26466,7 @@ class SimulationFactory(SimulationFactoryTemp):
         this = _libBornAgainCore.new_SimulationFactory()
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
     __swig_destroy__ = _libBornAgainCore.delete_SimulationFactory
     __del__ = lambda self: None
diff --git a/auto/Wrap/libBornAgainCore_wrap.cpp b/auto/Wrap/libBornAgainCore_wrap.cpp
index c23fd705797163716acf21256c17a279eb67ac7d..fba33e0993297797e1ee7384f9754c75ad228b70 100644
--- a/auto/Wrap/libBornAgainCore_wrap.cpp
+++ b/auto/Wrap/libBornAgainCore_wrap.cpp
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 3.0.8
+ * Version 3.0.12
  *
  * This file is not intended to be easily readable and contains a number of
  * coding conventions designed to improve portability and efficiency. Do not make
@@ -107,9 +107,11 @@ template <typename T> T SwigValueInit() {
 #endif
 
 /* exporting methods */
-#if (__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
-#  ifndef GCC_HASCLASSVISIBILITY
-#    define GCC_HASCLASSVISIBILITY
+#if defined(__GNUC__)
+#  if (__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+#    ifndef GCC_HASCLASSVISIBILITY
+#      define GCC_HASCLASSVISIBILITY
+#    endif
 #  endif
 #endif
 
@@ -669,16 +671,16 @@ SWIG_UnpackData(const char *c, void *ptr, size_t sz) {
     char d = *(c++);
     unsigned char uu;
     if ((d >= '0') && (d <= '9'))
-      uu = ((d - '0') << 4);
+      uu = (unsigned char)((d - '0') << 4);
     else if ((d >= 'a') && (d <= 'f'))
-      uu = ((d - ('a'-10)) << 4);
+      uu = (unsigned char)((d - ('a'-10)) << 4);
     else
       return (char *) 0;
     d = *(c++);
     if ((d >= '0') && (d <= '9'))
-      uu |= (d - '0');
+      uu |= (unsigned char)(d - '0');
     else if ((d >= 'a') && (d <= 'f'))
-      uu |= (d - ('a'-10));
+      uu |= (unsigned char)(d - ('a'-10));
     else
       return (char *) 0;
     *u = uu;
@@ -861,10 +863,6 @@ PyString_FromFormat(const char *fmt, ...) {
 }
 #endif
 
-/* Add PyObject_Del for old Pythons */
-#if PY_VERSION_HEX < 0x01060000
-# define PyObject_Del(op) PyMem_DEL((op))
-#endif
 #ifndef PyObject_DEL
 # define PyObject_DEL PyObject_Del
 #endif
@@ -979,6 +977,7 @@ typedef destructor freefunc;
 #if PY_VERSION_HEX < 0x03020000
 #define PyDescr_TYPE(x) (((PyDescrObject *)(x))->d_type)
 #define PyDescr_NAME(x) (((PyDescrObject *)(x))->d_name)
+#define Py_hash_t long
 #endif
 
 /* -----------------------------------------------------------------------------
@@ -1927,7 +1926,6 @@ SwigPyObject_TypeOnce(void) {
   static int type_init = 0;
   if (!type_init) {
     const PyTypeObject tmp = {
-      /* PyObject header changed in Python 3 */
 #if PY_VERSION_HEX >= 0x03000000
       PyVarObject_HEAD_INIT(NULL, 0)
 #else
@@ -1938,7 +1936,7 @@ SwigPyObject_TypeOnce(void) {
       sizeof(SwigPyObject),                 /* tp_basicsize */
       0,                                    /* tp_itemsize */
       (destructor)SwigPyObject_dealloc,     /* tp_dealloc */
-      0,				    /* tp_print */
+      0,                                    /* tp_print */
 #if PY_VERSION_HEX < 0x02020000
       (getattrfunc)SwigPyObject_getattr,    /* tp_getattr */
 #else
@@ -1946,7 +1944,7 @@ SwigPyObject_TypeOnce(void) {
 #endif
       (setattrfunc)0,                       /* tp_setattr */
 #if PY_VERSION_HEX >= 0x03000000
-    0, /* tp_reserved in 3.0.1, tp_compare in 3.0.0 but not used */
+      0, /* tp_reserved in 3.0.1, tp_compare in 3.0.0 but not used */
 #else
       (cmpfunc)SwigPyObject_compare,        /* tp_compare */
 #endif
@@ -1956,7 +1954,7 @@ SwigPyObject_TypeOnce(void) {
       0,                                    /* tp_as_mapping */
       (hashfunc)0,                          /* tp_hash */
       (ternaryfunc)0,                       /* tp_call */
-      0,				    /* tp_str */
+      0,                                    /* tp_str */
       PyObject_GenericGetAttr,              /* tp_getattro */
       0,                                    /* tp_setattro */
       0,                                    /* tp_as_buffer */
@@ -2119,7 +2117,6 @@ SwigPyPacked_TypeOnce(void) {
   static int type_init = 0;
   if (!type_init) {
     const PyTypeObject tmp = {
-      /* PyObject header changed in Python 3 */
 #if PY_VERSION_HEX>=0x03000000
       PyVarObject_HEAD_INIT(NULL, 0)
 #else
@@ -3787,7 +3784,7 @@ static swig_module_info swig_module = {swig_types, 308, 0, 0, 0, 0};
 #endif
 #define SWIG_name    "_libBornAgainCore"
 
-#define SWIGVERSION 0x030008 
+#define SWIGVERSION 0x030012 
 #define SWIG_VERSION SWIGVERSION
 
 
@@ -3886,6 +3883,7 @@ namespace swig {
 #endif
 
 
+#include <typeinfo>
 #include <stdexcept>
 
 
@@ -4035,7 +4033,7 @@ SWIG_AsVal_double (PyObject *obj, double *val)
     return SWIG_OK;
 #if PY_VERSION_HEX < 0x03000000
   } else if (PyInt_Check(obj)) {
-    if (val) *val = PyInt_AsLong(obj);
+    if (val) *val = (double) PyInt_AsLong(obj);
     return SWIG_OK;
 #endif
   } else if (PyLong_Check(obj)) {
@@ -4156,23 +4154,109 @@ SWIG_AsVal_unsigned_SS_long (PyObject *obj, unsigned long *val)
 }
 
 
+#include <limits.h>
+#if !defined(SWIG_NO_LLONG_MAX)
+# if !defined(LLONG_MAX) && defined(__GNUC__) && defined (__LONG_LONG_MAX__)
+#   define LLONG_MAX __LONG_LONG_MAX__
+#   define LLONG_MIN (-LLONG_MAX - 1LL)
+#   define ULLONG_MAX (LLONG_MAX * 2ULL + 1ULL)
+# endif
+#endif
+
+
+#if defined(LLONG_MAX) && !defined(SWIG_LONG_LONG_AVAILABLE)
+#  define SWIG_LONG_LONG_AVAILABLE
+#endif
+
+
+#ifdef SWIG_LONG_LONG_AVAILABLE
+SWIGINTERN int
+SWIG_AsVal_unsigned_SS_long_SS_long (PyObject *obj, unsigned long long *val)
+{
+  int res = SWIG_TypeError;
+  if (PyLong_Check(obj)) {
+    unsigned long long v = PyLong_AsUnsignedLongLong(obj);
+    if (!PyErr_Occurred()) {
+      if (val) *val = v;
+      return SWIG_OK;
+    } else {
+      PyErr_Clear();
+      res = SWIG_OverflowError;
+    }
+  } else {
+    unsigned long v;
+    res = SWIG_AsVal_unsigned_SS_long (obj,&v);
+    if (SWIG_IsOK(res)) {
+      if (val) *val = v;
+      return res;
+    }
+  }
+#ifdef SWIG_PYTHON_CAST_MODE
+  {
+    const double mant_max = 1LL << DBL_MANT_DIG;
+    double d;
+    res = SWIG_AsVal_double (obj,&d);
+    if (SWIG_IsOK(res) && !SWIG_CanCastAsInteger(&d, 0, mant_max))
+      return SWIG_OverflowError;
+    if (SWIG_IsOK(res) && SWIG_CanCastAsInteger(&d, 0, mant_max)) {
+      if (val) *val = (unsigned long long)(d);
+      return SWIG_AddCast(res);
+    }
+    res = SWIG_TypeError;
+  }
+#endif
+  return res;
+}
+#endif
+
+
 SWIGINTERNINLINE int
 SWIG_AsVal_size_t (PyObject * obj, size_t *val)
 {
-  unsigned long v;
-  int res = SWIG_AsVal_unsigned_SS_long (obj, val ? &v : 0);
-  if (SWIG_IsOK(res) && val) *val = static_cast< size_t >(v);
+  int res = SWIG_TypeError;
+#ifdef SWIG_LONG_LONG_AVAILABLE
+  if (sizeof(size_t) <= sizeof(unsigned long)) {
+#endif
+    unsigned long v;
+    res = SWIG_AsVal_unsigned_SS_long (obj, val ? &v : 0);
+    if (SWIG_IsOK(res) && val) *val = static_cast< size_t >(v);
+#ifdef SWIG_LONG_LONG_AVAILABLE
+  } else if (sizeof(size_t) <= sizeof(unsigned long long)) {
+    unsigned long long v;
+    res = SWIG_AsVal_unsigned_SS_long_SS_long (obj, val ? &v : 0);
+    if (SWIG_IsOK(res) && val) *val = static_cast< size_t >(v);
+  }
+#endif
   return res;
 }
 
 
-  #define SWIG_From_long   PyLong_FromLong 
+  #define SWIG_From_long   PyInt_FromLong 
+
+
+#ifdef SWIG_LONG_LONG_AVAILABLE
+SWIGINTERNINLINE PyObject* 
+SWIG_From_long_SS_long  (long long value)
+{
+  return ((value < LONG_MIN) || (value > LONG_MAX)) ?
+    PyLong_FromLongLong(value) : PyInt_FromLong(static_cast< long >(value));
+}
+#endif
 
 
 SWIGINTERNINLINE PyObject *
 SWIG_From_ptrdiff_t  (ptrdiff_t value)
 {    
-  return SWIG_From_long  (static_cast< long >(value));
+#ifdef SWIG_LONG_LONG_AVAILABLE
+  if (sizeof(ptrdiff_t) <= sizeof(long)) {
+#endif
+    return SWIG_From_long  (static_cast< long >(value));
+#ifdef SWIG_LONG_LONG_AVAILABLE
+  } else {
+    /* assume sizeof(ptrdiff_t) <= sizeof(long long) */
+    return SWIG_From_long_SS_long  (static_cast< long long >(value));
+  }
+#endif
 }
 
 
@@ -4226,12 +4310,65 @@ SWIG_AsVal_long (PyObject *obj, long* val)
 }
 
 
+#ifdef SWIG_LONG_LONG_AVAILABLE
+SWIGINTERN int
+SWIG_AsVal_long_SS_long (PyObject *obj, long long *val)
+{
+  int res = SWIG_TypeError;
+  if (PyLong_Check(obj)) {
+    long long v = PyLong_AsLongLong(obj);
+    if (!PyErr_Occurred()) {
+      if (val) *val = v;
+      return SWIG_OK;
+    } else {
+      PyErr_Clear();
+      res = SWIG_OverflowError;
+    }
+  } else {
+    long v;
+    res = SWIG_AsVal_long (obj,&v);
+    if (SWIG_IsOK(res)) {
+      if (val) *val = v;
+      return res;
+    }
+  }
+#ifdef SWIG_PYTHON_CAST_MODE
+  {
+    const double mant_max = 1LL << DBL_MANT_DIG;
+    const double mant_min = -mant_max;
+    double d;
+    res = SWIG_AsVal_double (obj,&d);
+    if (SWIG_IsOK(res) && !SWIG_CanCastAsInteger(&d, mant_min, mant_max))
+      return SWIG_OverflowError;
+    if (SWIG_IsOK(res) && SWIG_CanCastAsInteger(&d, mant_min, mant_max)) {
+      if (val) *val = (long long)(d);
+      return SWIG_AddCast(res);
+    }
+    res = SWIG_TypeError;
+  }
+#endif
+  return res;
+}
+#endif
+
+
 SWIGINTERNINLINE int
 SWIG_AsVal_ptrdiff_t (PyObject * obj, ptrdiff_t *val)
 {
-  long v;
-  int res = SWIG_AsVal_long (obj, val ? &v : 0);
-  if (SWIG_IsOK(res) && val) *val = static_cast< ptrdiff_t >(v);
+  int res = SWIG_TypeError;
+#ifdef SWIG_LONG_LONG_AVAILABLE
+  if (sizeof(ptrdiff_t) <= sizeof(long)) {
+#endif
+    long v;
+    res = SWIG_AsVal_long (obj, val ? &v : 0);
+    if (SWIG_IsOK(res) && val) *val = static_cast< ptrdiff_t >(v);
+#ifdef SWIG_LONG_LONG_AVAILABLE
+  } else if (sizeof(ptrdiff_t) <= sizeof(long long)) {
+    long long v;
+    res = SWIG_AsVal_long_SS_long (obj, val ? &v : 0);
+    if (SWIG_IsOK(res) && val) *val = static_cast< ptrdiff_t >(v);
+  }
+#endif
   return res;
 }
 
@@ -4276,8 +4413,21 @@ namespace swig {
     return traits<typename noconst_traits<Type >::noconst_type >::type_name();
   }
 
-  template <class Type>
-  struct traits_info {
+  template <class Type> struct traits_info {
+    static swig_type_info *type_query(std::string name) {
+      name += " *";
+      return SWIG_TypeQuery(name.c_str());
+    }
+    static swig_type_info *type_info() {
+      static swig_type_info *info = type_query(type_name<Type>());
+      return info;
+    }
+  };
+
+  /*
+    Partial specialization for pointers (traits_info)
+  */
+  template <class Type> struct traits_info<Type *> {
     static swig_type_info *type_query(std::string name) {
       name += " *";
       return SWIG_TypeQuery(name.c_str());
@@ -4294,7 +4444,7 @@ namespace swig {
   }
 
   /*
-    Partial specialization for pointers
+    Partial specialization for pointers (traits)
   */
   template <class Type> struct traits <Type *> {
     typedef pointer_category category;
@@ -4364,7 +4514,8 @@ namespace swig {
   struct traits_asptr {   
     static int asptr(PyObject *obj, Type **val) {
       Type *p;
-      int res = SWIG_ConvertPtr(obj, (void**)&p, type_info<Type>(), 0);
+      swig_type_info *descriptor = type_info<Type>();
+      int res = descriptor ? SWIG_ConvertPtr(obj, (void **)&p, descriptor, 0) : SWIG_ERROR;
       if (SWIG_IsOK(res)) {
 	if (val) *val = p;
       }
@@ -4512,7 +4663,7 @@ namespace swig {
 
 namespace std {
   template <>
-  struct less <PyObject *>: public binary_function<PyObject *, PyObject *, bool>
+  struct less <PyObject *>
   {
     bool
     operator()(PyObject * v, PyObject *w) const
@@ -4537,7 +4688,7 @@ namespace std {
   };
 
   template <>
-  struct less <swig::SwigPtr_PyObject>: public binary_function<swig::SwigPtr_PyObject, swig::SwigPtr_PyObject, bool>
+  struct less <swig::SwigPtr_PyObject>
   {
     bool
     operator()(const swig::SwigPtr_PyObject& v, const swig::SwigPtr_PyObject& w) const
@@ -4547,7 +4698,7 @@ namespace std {
   };
 
   template <>
-  struct less <swig::SwigVar_PyObject>: public binary_function<swig::SwigVar_PyObject, swig::SwigVar_PyObject, bool>
+  struct less <swig::SwigVar_PyObject>
   {
     bool
     operator()(const swig::SwigVar_PyObject& v, const swig::SwigVar_PyObject& w) const
@@ -4610,7 +4761,7 @@ namespace swig {
     if (step == 0) {
       throw std::invalid_argument("slice step cannot be zero");
     } else if (step > 0) {
-      // Required range: 0 <= i < size, 0 <= j < size
+      // Required range: 0 <= i < size, 0 <= j < size, i <= j
       if (i < 0) {
         ii = 0;
       } else if (i < (Difference)size) {
@@ -4618,13 +4769,15 @@ namespace swig {
       } else if (insert && (i >= (Difference)size)) {
         ii = (Difference)size;
       }
-      if ( j < 0 ) {
+      if (j < 0) {
         jj = 0;
       } else {
         jj = (j < (Difference)size) ? j : (Difference)size;
       }
+      if (jj < ii)
+        jj = ii;
     } else {
-      // Required range: -1 <= i < size-1, -1 <= j < size-1
+      // Required range: -1 <= i < size-1, -1 <= j < size-1, i >= j
       if (i < -1) {
         ii = -1;
       } else if (i < (Difference) size) {
@@ -4637,6 +4790,8 @@ namespace swig {
       } else {
         jj = (j < (Difference)size ) ? j : (Difference)(size-1);
       }
+      if (ii < jj)
+        ii = jj;
     }
   }
 
@@ -4662,6 +4817,13 @@ namespace swig {
     seq->erase(position);
   }
 
+  template <class Sequence>
+  struct traits_reserve {
+    static void reserve(Sequence & /*seq*/, typename Sequence::size_type /*n*/) {
+      // This should be specialized for types that support reserve
+    }
+  };
+
   template <class Sequence, class Difference>
   inline Sequence*
   getslice(const Sequence* self, Difference i, Difference j, Py_ssize_t step) {
@@ -4679,6 +4841,7 @@ namespace swig {
         return new Sequence(sb, se);
       } else {
         Sequence *sequence = new Sequence();
+        swig::traits_reserve<Sequence>::reserve(*sequence, (jj - ii + step - 1) / step);
         typename Sequence::const_iterator it = sb;
         while (it!=se) {
           sequence->push_back(*it);
@@ -4689,17 +4852,16 @@ namespace swig {
       } 
     } else {
       Sequence *sequence = new Sequence();
-      if (ii > jj) {
-        typename Sequence::const_reverse_iterator sb = self->rbegin();
-        typename Sequence::const_reverse_iterator se = self->rbegin();
-        std::advance(sb,size-ii-1);
-        std::advance(se,size-jj-1);
-        typename Sequence::const_reverse_iterator it = sb;
-        while (it!=se) {
-          sequence->push_back(*it);
-          for (Py_ssize_t c=0; c<-step && it!=se; ++c)
-            it++;
-        }
+      swig::traits_reserve<Sequence>::reserve(*sequence, (ii - jj - step - 1) / -step);
+      typename Sequence::const_reverse_iterator sb = self->rbegin();
+      typename Sequence::const_reverse_iterator se = self->rbegin();
+      std::advance(sb,size-ii-1);
+      std::advance(se,size-jj-1);
+      typename Sequence::const_reverse_iterator it = sb;
+      while (it!=se) {
+        sequence->push_back(*it);
+        for (Py_ssize_t c=0; c<-step && it!=se; ++c)
+          it++;
       }
       return sequence;
     }
@@ -4713,12 +4875,11 @@ namespace swig {
     Difference jj = 0;
     swig::slice_adjust(i, j, step, size, ii, jj, true);
     if (step > 0) {
-      if (jj < ii)
-        jj = ii;
       if (step == 1) {
         size_t ssize = jj - ii;
         if (ssize <= is.size()) {
           // expanding/staying the same size
+          swig::traits_reserve<Sequence>::reserve(*self, self->size() - ssize + is.size());
           typename Sequence::iterator sb = self->begin();
           typename InputSeq::const_iterator isit = is.begin();
           std::advance(sb,ii);
@@ -4752,8 +4913,6 @@ namespace swig {
         }
       }
     } else {
-      if (jj > ii)
-        jj = ii;
       size_t replacecount = (ii - jj - step - 1) / -step;
       if (is.size() != replacecount) {
         char msg[1024];
@@ -4779,37 +4938,33 @@ namespace swig {
     Difference jj = 0;
     swig::slice_adjust(i, j, step, size, ii, jj, true);
     if (step > 0) {
-      if (jj > ii) {
-        typename Sequence::iterator sb = self->begin();
-        std::advance(sb,ii);
-        if (step == 1) {
-          typename Sequence::iterator se = self->begin();
-          std::advance(se,jj);
-          self->erase(sb,se);
-        } else {
-          typename Sequence::iterator it = sb;
-          size_t delcount = (jj - ii + step - 1) / step;
-          while (delcount) {
-            it = self->erase(it);
-            for (Py_ssize_t c=0; c<(step-1) && it != self->end(); ++c)
-              it++;
-            delcount--;
-          }
-        }
-      }
-    } else {
-      if (ii > jj) {
-        typename Sequence::reverse_iterator sb = self->rbegin();
-        std::advance(sb,size-ii-1);
-        typename Sequence::reverse_iterator it = sb;
-        size_t delcount = (ii - jj - step - 1) / -step;
+      typename Sequence::iterator sb = self->begin();
+      std::advance(sb,ii);
+      if (step == 1) {
+        typename Sequence::iterator se = self->begin();
+        std::advance(se,jj);
+        self->erase(sb,se);
+      } else {
+        typename Sequence::iterator it = sb;
+        size_t delcount = (jj - ii + step - 1) / step;
         while (delcount) {
-          it = typename Sequence::reverse_iterator(self->erase((++it).base()));
-          for (Py_ssize_t c=0; c<(-step-1) && it != self->rend(); ++c)
+          it = self->erase(it);
+          for (Py_ssize_t c=0; c<(step-1) && it != self->end(); ++c)
             it++;
           delcount--;
         }
       }
+    } else {
+      typename Sequence::reverse_iterator sb = self->rbegin();
+      std::advance(sb,size-ii-1);
+      typename Sequence::reverse_iterator it = sb;
+      size_t delcount = (ii - jj - step - 1) / -step;
+      while (delcount) {
+        it = typename Sequence::reverse_iterator(self->erase((++it).base()));
+        for (Py_ssize_t c=0; c<(-step-1) && it != self->rend(); ++c)
+          it++;
+        delcount--;
+      }
     }
   }
 }
@@ -5308,8 +5463,8 @@ namespace swig {
     static int asptr(PyObject *obj, sequence **seq) {
       if (obj == Py_None || SWIG_Python_GetSwigThis(obj)) {
 	sequence *p;
-	if (::SWIG_ConvertPtr(obj,(void**)&p,
-			      swig::type_info<sequence>(),0) == SWIG_OK) {
+	swig_type_info *descriptor = swig::type_info<sequence>();
+	if (descriptor && SWIG_IsOK(::SWIG_ConvertPtr(obj, (void **)&p, descriptor, 0))) {
 	  if (seq) *seq = p;
 	  return SWIG_OLDOBJ;
 	}
@@ -5348,7 +5503,7 @@ namespace swig {
 #ifdef SWIG_PYTHON_EXTRA_NATIVE_CONTAINERS
       swig_type_info *desc = swig::type_info<sequence>();
       if (desc && desc->clientdata) {
-	return SWIG_NewPointerObj(new sequence(seq), desc, SWIG_POINTER_OWN);
+	return SWIG_InternalNewPointerObj(new sequence(seq), desc, SWIG_POINTER_OWN);
       }
 #endif
       size_type size = seq.size();
@@ -5369,6 +5524,13 @@ namespace swig {
 
 
   namespace swig {
+    template <class T>
+    struct traits_reserve<std::vector<T> > {
+      static void reserve(std::vector<T> &seq, typename std::vector<T>::size_type n) {
+        seq.reserve(n);
+      }
+    };
+
     template <class T>
     struct traits_asptr<std::vector<T> >  {
       static int asptr(PyObject *obj, std::vector<T> **vec) {
@@ -5411,14 +5573,33 @@ SWIGINTERNINLINE PyObject*
 SWIG_From_unsigned_SS_long  (unsigned long value)
 {
   return (value > LONG_MAX) ?
-    PyLong_FromUnsignedLong(value) : PyLong_FromLong(static_cast< long >(value)); 
+    PyLong_FromUnsignedLong(value) : PyInt_FromLong(static_cast< long >(value));
 }
 
 
+#ifdef SWIG_LONG_LONG_AVAILABLE
+SWIGINTERNINLINE PyObject* 
+SWIG_From_unsigned_SS_long_SS_long  (unsigned long long value)
+{
+  return (value > LONG_MAX) ?
+    PyLong_FromUnsignedLongLong(value) : PyInt_FromLong(static_cast< long >(value));
+}
+#endif
+
+
 SWIGINTERNINLINE PyObject *
 SWIG_From_size_t  (size_t value)
 {    
-  return SWIG_From_unsigned_SS_long  (static_cast< unsigned long >(value));
+#ifdef SWIG_LONG_LONG_AVAILABLE
+  if (sizeof(size_t) <= sizeof(unsigned long)) {
+#endif
+    return SWIG_From_unsigned_SS_long  (static_cast< unsigned long >(value));
+#ifdef SWIG_LONG_LONG_AVAILABLE
+  } else {
+    /* assume sizeof(size_t) <= sizeof(unsigned long long) */
+    return SWIG_From_unsigned_SS_long_SS_long  (static_cast< unsigned long long >(value));
+  }
+#endif
 }
 
 SWIGINTERN std::vector< double,std::allocator< double > > *std_vector_Sl_double_Sg____getslice__(std::vector< double > *self,std::vector< double >::difference_type i,std::vector< double >::difference_type j){
@@ -5602,16 +5783,6 @@ SWIGINTERN std::vector< std::vector< double > >::iterator std_vector_Sl_std_vect
 SWIGINTERN std::vector< std::vector< double > >::iterator std_vector_Sl_std_vector_Sl_double_Sg__Sg__insert__SWIG_0(std::vector< std::vector< double > > *self,std::vector< std::vector< double > >::iterator pos,std::vector< std::vector< double > >::value_type const &x){ return self->insert(pos, x); }
 SWIGINTERN void std_vector_Sl_std_vector_Sl_double_Sg__Sg__insert__SWIG_1(std::vector< std::vector< double > > *self,std::vector< std::vector< double > >::iterator pos,std::vector< std::vector< double > >::size_type n,std::vector< std::vector< double > >::value_type const &x){ self->insert(pos, n, x); }
 
-#include <limits.h>
-#if !defined(SWIG_NO_LLONG_MAX)
-# if !defined(LLONG_MAX) && defined(__GNUC__) && defined (__LONG_LONG_MAX__)
-#   define LLONG_MAX __LONG_LONG_MAX__
-#   define LLONG_MIN (-LLONG_MAX - 1LL)
-#   define ULLONG_MAX (LLONG_MAX * 2ULL + 1ULL)
-# endif
-#endif
-
-
 SWIGINTERN int
 SWIG_AsVal_int (PyObject * obj, int *val)
 {
@@ -5990,7 +6161,7 @@ SWIG_AsVal_std_complex_Sl_double_Sg_  (PyObject *o, std::complex<double>* val)
 
 
 SWIGINTERNINLINE PyObject*
-SWIG_From_std_complex_Sl_double_Sg_  (/*@SWIG:/home/pospelov/software/local/share/swig/3.0.8/typemaps/swigmacros.swg,104,%ifcplusplus@*/
+SWIG_From_std_complex_Sl_double_Sg_  (/*@SWIG:/usr/local/share/swig/3.0.12/typemaps/swigmacros.swg,104,%ifcplusplus@*/
 
 const std::complex<double>&
 
@@ -6140,13 +6311,18 @@ SWIGINTERN int
 SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize, int *alloc)
 {
 #if PY_VERSION_HEX>=0x03000000
+#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR)
+  if (PyBytes_Check(obj))
+#else
   if (PyUnicode_Check(obj))
+#endif
 #else  
   if (PyString_Check(obj))
 #endif
   {
     char *cstr; Py_ssize_t len;
 #if PY_VERSION_HEX>=0x03000000
+#if !defined(SWIG_PYTHON_STRICT_BYTE_CHAR)
     if (!alloc && cptr) {
         /* We can't allow converting without allocation, since the internal
            representation of string in Python 3 is UCS-2/UCS-4 but we require
@@ -6155,8 +6331,9 @@ SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize, int *alloc)
         return SWIG_RuntimeError;
     }
     obj = PyUnicode_AsUTF8String(obj);
-    PyBytes_AsStringAndSize(obj, &cstr, &len);
     if(alloc) *alloc = SWIG_NEWOBJ;
+#endif
+    PyBytes_AsStringAndSize(obj, &cstr, &len);
 #else
     PyString_AsStringAndSize(obj, &cstr, &len);
 #endif
@@ -6177,26 +6354,34 @@ SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize, int *alloc)
 	if (*alloc == SWIG_NEWOBJ) 
 #endif
 	{
-	  *cptr = reinterpret_cast< char* >(memcpy((new char[len + 1]), cstr, sizeof(char)*(len + 1)));
+	  *cptr = reinterpret_cast< char* >(memcpy(new char[len + 1], cstr, sizeof(char)*(len + 1)));
 	  *alloc = SWIG_NEWOBJ;
 	} else {
 	  *cptr = cstr;
 	  *alloc = SWIG_OLDOBJ;
 	}
       } else {
-	#if PY_VERSION_HEX>=0x03000000
-	assert(0); /* Should never reach here in Python 3 */
-	#endif
+#if PY_VERSION_HEX>=0x03000000
+#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR)
+	*cptr = PyBytes_AsString(obj);
+#else
+	assert(0); /* Should never reach here with Unicode strings in Python 3 */
+#endif
+#else
 	*cptr = SWIG_Python_str_AsChar(obj);
+#endif
       }
     }
     if (psize) *psize = len + 1;
-#if PY_VERSION_HEX>=0x03000000
+#if PY_VERSION_HEX>=0x03000000 && !defined(SWIG_PYTHON_STRICT_BYTE_CHAR)
     Py_XDECREF(obj);
 #endif
     return SWIG_OK;
   } else {
 #if defined(SWIG_PYTHON_2_UNICODE)
+#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR)
+#error "Cannot use both SWIG_PYTHON_2_UNICODE and SWIG_PYTHON_STRICT_BYTE_CHAR at once"
+#endif
 #if PY_VERSION_HEX<0x03000000
     if (PyUnicode_Check(obj)) {
       char *cstr; Py_ssize_t len;
@@ -6207,7 +6392,7 @@ SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize, int *alloc)
       if (PyString_AsStringAndSize(obj, &cstr, &len) != -1) {
         if (cptr) {
           if (alloc) *alloc = SWIG_NEWOBJ;
-          *cptr = reinterpret_cast< char* >(memcpy((new char[len + 1]), cstr, sizeof(char)*(len + 1)));
+          *cptr = reinterpret_cast< char* >(memcpy(new char[len + 1], cstr, sizeof(char)*(len + 1)));
         }
         if (psize) *psize = len + 1;
 
@@ -6294,11 +6479,15 @@ SWIG_FromCharPtrAndSize(const char* carray, size_t size)
 	SWIG_InternalNewPointerObj(const_cast< char * >(carray), pchar_descriptor, 0) : SWIG_Py_Void();
     } else {
 #if PY_VERSION_HEX >= 0x03000000
+#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR)
+      return PyBytes_FromStringAndSize(carray, static_cast< Py_ssize_t >(size));
+#else
 #if PY_VERSION_HEX >= 0x03010000
       return PyUnicode_DecodeUTF8(carray, static_cast< Py_ssize_t >(size), "surrogateescape");
 #else
       return PyUnicode_FromStringAndSize(carray, static_cast< Py_ssize_t >(size));
 #endif
+#endif
 #else
       return PyString_FromStringAndSize(carray, static_cast< Py_ssize_t >(size));
 #endif
@@ -7066,44 +7255,6 @@ struct SWIG_null_deleter {
 
 #define SWIG_NO_NULL_DELETER_SWIG_BUILTIN_INIT
 
-
-SWIGINTERN int
-SWIG_AsVal_long_SS_long (PyObject *obj, long long *val)
-{
-  int res = SWIG_TypeError;
-  if (PyLong_Check(obj)) {
-    long long v = PyLong_AsLongLong(obj);
-    if (!PyErr_Occurred()) {
-      if (val) *val = v;
-      return SWIG_OK;
-    } else {
-      PyErr_Clear();
-      res = SWIG_OverflowError;
-    }
-  } else {
-    long v;
-    res = SWIG_AsVal_long (obj,&v);
-    if (SWIG_IsOK(res)) {
-      if (val) *val = v;
-      return res;
-    }
-  }
-#ifdef SWIG_PYTHON_CAST_MODE
-  {
-    const double mant_max = 1LL << DBL_MANT_DIG;
-    const double mant_min = -mant_max;
-    double d;
-    res = SWIG_AsVal_double (obj,&d);
-    if (SWIG_IsOK(res) && SWIG_CanCastAsInteger(&d, mant_min, mant_max)) {
-      if (val) *val = (long long)(d);
-      return SWIG_AddCast(res);
-    }
-    res = SWIG_TypeError;
-  }
-#endif
-  return res;
-}
-
 SWIGINTERN RealParameter *IMultiLayerBuilder_registerParameter(IMultiLayerBuilder *self,std::string const &name,int64_t parpointer){
         return &((*(self)).registerParameter(name, (double*)parpointer)); }
 SWIGINTERN void IMultiLayerBuilder_setParameterValue(IMultiLayerBuilder *self,std::string const &name,double value){
@@ -7415,8 +7566,8 @@ ParameterPool *SwigDirector_IParameterized::createParameterTree() const {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 0;
-  const char * const swig_method_name = "createParameterTree";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "createParameterTree";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, NULL, NULL);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *) "createParameterTree", NULL);
@@ -7443,8 +7594,8 @@ void SwigDirector_IParameterized::onChange() {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 1;
-  const char * const swig_method_name = "onChange";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "onChange";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, NULL, NULL);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *) "onChange", NULL);
@@ -7479,8 +7630,8 @@ ParameterPool *SwigDirector_INode::createParameterTree() const {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 0;
-  const char * const swig_method_name = "createParameterTree";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "createParameterTree";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, NULL, NULL);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *) "createParameterTree", NULL);
@@ -7507,8 +7658,8 @@ void SwigDirector_INode::onChange() {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 1;
-  const char * const swig_method_name = "onChange";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "onChange";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, NULL, NULL);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *) "onChange", NULL);
@@ -7530,8 +7681,8 @@ void SwigDirector_INode::accept(INodeVisitor *visitor) const {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 2;
-  const char * const swig_method_name = "accept";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "accept";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, (char *)"(O)" ,(PyObject *)obj0);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *)"accept", (char *)"(O)" ,(PyObject *)obj0);
@@ -7552,8 +7703,8 @@ std::string SwigDirector_INode::treeToString() const {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 3;
-  const char * const swig_method_name = "treeToString";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "treeToString";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, NULL, NULL);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *) "treeToString", NULL);
@@ -7585,8 +7736,8 @@ std::vector< INode const *,std::allocator< INode const * > > SwigDirector_INode:
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 4;
-  const char * const swig_method_name = "getChildren";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "getChildren";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, NULL, NULL);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *) "getChildren", NULL);
@@ -7615,8 +7766,8 @@ void SwigDirector_INode::setParent(INode const *newParent) {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 5;
-  const char * const swig_method_name = "setParent";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "setParent";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, (char *)"(O)" ,(PyObject *)obj0);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *)"setParent", (char *)"(O)" ,(PyObject *)obj0);
@@ -7651,8 +7802,8 @@ ISample *SwigDirector_ISample::clone() const {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 0;
-  const char * const swig_method_name = "clone";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "clone";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, NULL, NULL);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *) "clone", NULL);
@@ -7679,8 +7830,8 @@ void SwigDirector_ISample::transferToCPP() {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 1;
-  const char * const swig_method_name = "transferToCPP";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "transferToCPP";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, NULL, NULL);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *) "transferToCPP", NULL);
@@ -7705,8 +7856,8 @@ ParameterPool *SwigDirector_ISample::createParameterTree() const {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 2;
-  const char * const swig_method_name = "createParameterTree";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "createParameterTree";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, NULL, NULL);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *) "createParameterTree", NULL);
@@ -7733,8 +7884,8 @@ void SwigDirector_ISample::onChange() {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 3;
-  const char * const swig_method_name = "onChange";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "onChange";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, NULL, NULL);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *) "onChange", NULL);
@@ -7756,8 +7907,8 @@ void SwigDirector_ISample::accept(INodeVisitor *visitor) const {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 4;
-  const char * const swig_method_name = "accept";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "accept";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, (char *)"(O)" ,(PyObject *)obj0);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *)"accept", (char *)"(O)" ,(PyObject *)obj0);
@@ -7778,8 +7929,8 @@ std::string SwigDirector_ISample::treeToString() const {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 5;
-  const char * const swig_method_name = "treeToString";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "treeToString";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, NULL, NULL);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *) "treeToString", NULL);
@@ -7808,8 +7959,8 @@ std::vector< INode const *,std::allocator< INode const * > > SwigDirector_ISampl
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 6;
-  const char * const swig_method_name = "getChildren";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "getChildren";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, NULL, NULL);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *) "getChildren", NULL);
@@ -7839,8 +7990,8 @@ void SwigDirector_ISample::setParent(INode const *newParent) {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 7;
-  const char * const swig_method_name = "setParent";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "setParent";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, (char *)"(O)" ,(PyObject *)obj0);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *)"setParent", (char *)"(O)" ,(PyObject *)obj0);
@@ -7865,8 +8016,8 @@ Material const *SwigDirector_ISample::material() const {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 8;
-  const char * const swig_method_name = "material";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "material";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, NULL, NULL);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *) "material", NULL);
@@ -7899,14 +8050,14 @@ SwigDirector_IObservable::~SwigDirector_IObservable() {
 
 void SwigDirector_IObservable::attachObserver(IObservable::observer_t obj) {
   swig::SwigVar_PyObject obj0;
-  obj0 = SWIG_NewPointerObj(SWIG_as_voidptr(&obj), SWIGTYPE_p_std__shared_ptrT_IObserver_t,  0 );
+  obj0 = SWIG_NewPointerObj(SWIG_as_voidptr(new IObservable::observer_t((const IObservable::observer_t &)obj)), SWIGTYPE_p_std__shared_ptrT_IObserver_t, SWIG_POINTER_OWN |  0 );
   if (!swig_get_self()) {
     Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IObservable.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 0;
-  const char * const swig_method_name = "attachObserver";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "attachObserver";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, (char *)"(O)" ,(PyObject *)obj0);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *)"attachObserver", (char *)"(O)" ,(PyObject *)obj0);
@@ -7926,8 +8077,8 @@ void SwigDirector_IObservable::notifyObservers() {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 1;
-  const char * const swig_method_name = "notifyObservers";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "notifyObservers";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, NULL, NULL);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *) "notifyObservers", NULL);
@@ -7959,8 +8110,8 @@ void SwigDirector_IFitObserver::notify(IObservable *subject) {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 0;
-  const char * const swig_method_name = "notify";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "notify";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, (char *)"(O)" ,(PyObject *)obj0);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *)"notify", (char *)"(O)" ,(PyObject *)obj0);
@@ -7982,8 +8133,8 @@ void SwigDirector_IFitObserver::update(FitSuite *fit_suite) {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 1;
-  const char * const swig_method_name = "update";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "update";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, (char *)"(O)" ,(PyObject *)obj0);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *)"update", (char *)"(O)" ,(PyObject *)obj0);
@@ -8018,8 +8169,8 @@ ParameterPool *SwigDirector_IMultiLayerBuilder::createParameterTree() const {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 0;
-  const char * const swig_method_name = "createParameterTree";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "createParameterTree";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, NULL, NULL);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *) "createParameterTree", NULL);
@@ -8046,8 +8197,8 @@ void SwigDirector_IMultiLayerBuilder::onChange() {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 1;
-  const char * const swig_method_name = "onChange";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "onChange";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, NULL, NULL);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *) "onChange", NULL);
@@ -8072,8 +8223,8 @@ MultiLayer *SwigDirector_IMultiLayerBuilder::buildSample() const {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 2;
-  const char * const swig_method_name = "buildSample";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "buildSample";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, NULL, NULL);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *) "buildSample", NULL);
@@ -8107,8 +8258,8 @@ MultiLayer *SwigDirector_IMultiLayerBuilder::createSample(size_t index) {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 3;
-  const char * const swig_method_name = "createSample";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "createSample";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, (char *)"(O)" ,(PyObject *)obj0);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *)"createSample", (char *)"(O)" ,(PyObject *)obj0);
@@ -8136,8 +8287,8 @@ size_t SwigDirector_IMultiLayerBuilder::size() {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 5;
-  const char * const swig_method_name = "size";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "size";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, NULL, NULL);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *) "size", NULL);
@@ -8179,8 +8330,8 @@ IFormFactor *SwigDirector_IFormFactor::clone() const {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 0;
-  const char * const swig_method_name = "clone";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "clone";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, NULL, NULL);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *) "clone", NULL);
@@ -8207,8 +8358,8 @@ void SwigDirector_IFormFactor::transferToCPP() {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 1;
-  const char * const swig_method_name = "transferToCPP";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "transferToCPP";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, NULL, NULL);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *) "transferToCPP", NULL);
@@ -8233,8 +8384,8 @@ ParameterPool *SwigDirector_IFormFactor::createParameterTree() const {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 2;
-  const char * const swig_method_name = "createParameterTree";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "createParameterTree";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, NULL, NULL);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *) "createParameterTree", NULL);
@@ -8261,8 +8412,8 @@ void SwigDirector_IFormFactor::onChange() {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 3;
-  const char * const swig_method_name = "onChange";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "onChange";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, NULL, NULL);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *) "onChange", NULL);
@@ -8284,8 +8435,8 @@ void SwigDirector_IFormFactor::accept(INodeVisitor *visitor) const {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 4;
-  const char * const swig_method_name = "accept";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "accept";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, (char *)"(O)" ,(PyObject *)obj0);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *)"accept", (char *)"(O)" ,(PyObject *)obj0);
@@ -8306,8 +8457,8 @@ std::string SwigDirector_IFormFactor::treeToString() const {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 5;
-  const char * const swig_method_name = "treeToString";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "treeToString";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, NULL, NULL);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *) "treeToString", NULL);
@@ -8336,8 +8487,8 @@ std::vector< INode const *,std::allocator< INode const * > > SwigDirector_IFormF
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 6;
-  const char * const swig_method_name = "getChildren";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "getChildren";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, NULL, NULL);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *) "getChildren", NULL);
@@ -8367,8 +8518,8 @@ void SwigDirector_IFormFactor::setParent(INode const *newParent) {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 7;
-  const char * const swig_method_name = "setParent";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "setParent";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, (char *)"(O)" ,(PyObject *)obj0);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *)"setParent", (char *)"(O)" ,(PyObject *)obj0);
@@ -8393,8 +8544,8 @@ Material const *SwigDirector_IFormFactor::material() const {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 8;
-  const char * const swig_method_name = "material";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "material";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, NULL, NULL);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *) "material", NULL);
@@ -8417,14 +8568,14 @@ Material const *SwigDirector_IFormFactor::material() const {
 
 void SwigDirector_IFormFactor::setAmbientMaterial(Material arg0) {
   swig::SwigVar_PyObject obj0;
-  obj0 = SWIG_NewPointerObj(SWIG_as_voidptr(&arg0), SWIGTYPE_p_Material,  0 );
+  obj0 = SWIG_NewPointerObj(SWIG_as_voidptr(new Material((const Material &)arg0)), SWIGTYPE_p_Material, SWIG_POINTER_OWN |  0 );
   if (!swig_get_self()) {
     Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IFormFactor.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 9;
-  const char * const swig_method_name = "setAmbientMaterial";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "setAmbientMaterial";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, (char *)"(O)" ,(PyObject *)obj0);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *)"setAmbientMaterial", (char *)"(O)" ,(PyObject *)obj0);
@@ -8447,8 +8598,8 @@ complex_t SwigDirector_IFormFactor::evaluate(WavevectorInfo const &wavevectors)
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 10;
-  const char * const swig_method_name = "evaluate";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "evaluate";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, (char *)"(O)" ,(PyObject *)obj0);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *)"evaluate", (char *)"(O)" ,(PyObject *)obj0);
@@ -8476,8 +8627,8 @@ double SwigDirector_IFormFactor::volume() const {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 11;
-  const char * const swig_method_name = "volume";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "volume";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, NULL, NULL);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *) "volume", NULL);
@@ -8505,8 +8656,8 @@ double SwigDirector_IFormFactor::radialExtension() const {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 12;
-  const char * const swig_method_name = "radialExtension";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "radialExtension";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, NULL, NULL);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *) "radialExtension", NULL);
@@ -8536,8 +8687,8 @@ double SwigDirector_IFormFactor::bottomZ(IRotation const &rotation) const {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 13;
-  const char * const swig_method_name = "bottomZ";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "bottomZ";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, (char *)"(O)" ,(PyObject *)obj0);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *)"bottomZ", (char *)"(O)" ,(PyObject *)obj0);
@@ -8567,8 +8718,8 @@ double SwigDirector_IFormFactor::topZ(IRotation const &rotation) const {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 14;
-  const char * const swig_method_name = "topZ";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "topZ";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, (char *)"(O)" ,(PyObject *)obj0);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *)"topZ", (char *)"(O)" ,(PyObject *)obj0);
@@ -8599,8 +8750,8 @@ void SwigDirector_IFormFactor::setSpecularInfo(ILayerRTCoefficients const *arg0,
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 15;
-  const char * const swig_method_name = "setSpecularInfo";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "setSpecularInfo";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, (char *)"(OO)" ,(PyObject *)obj0,(PyObject *)obj1);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *)"setSpecularInfo", (char *)"(OO)" ,(PyObject *)obj0,(PyObject *)obj1);
@@ -8624,8 +8775,8 @@ bool SwigDirector_IFormFactor::canSliceAnalytically(IRotation const &rot) const
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 16;
-  const char * const swig_method_name = "canSliceAnalytically";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "canSliceAnalytically";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, (char *)"(O)" ,(PyObject *)obj0);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *)"canSliceAnalytically", (char *)"(O)" ,(PyObject *)obj0);
@@ -8654,19 +8805,19 @@ IFormFactor *SwigDirector_IFormFactor::sliceFormFactor(ZLimits limits, IRotation
   
   IFormFactor *c_result;
   swig::SwigVar_PyObject obj0;
-  obj0 = SWIG_NewPointerObj(SWIG_as_voidptr(&limits), SWIGTYPE_p_ZLimits,  0 );
+  obj0 = SWIG_NewPointerObj(SWIG_as_voidptr(new ZLimits((const ZLimits &)limits)), SWIGTYPE_p_ZLimits, SWIG_POINTER_OWN |  0 );
   swig::SwigVar_PyObject obj1;
   obj1 = SWIG_NewPointerObj(SWIG_as_voidptr(&rot), SWIGTYPE_p_IRotation,  0 );
   swig::SwigVar_PyObject obj2;
-  obj2 = SWIG_NewPointerObj(SWIG_as_voidptr(&translation), SWIGTYPE_p_BasicVector3DT_double_t,  0 );
+  obj2 = SWIG_NewPointerObj(SWIG_as_voidptr(new kvector_t((const kvector_t &)translation)), SWIGTYPE_p_BasicVector3DT_double_t, SWIG_POINTER_OWN |  0 );
   swig_set_inner("sliceFormFactor", true);
   if (!swig_get_self()) {
     Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IFormFactor.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 17;
-  const char * const swig_method_name = "sliceFormFactor";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "sliceFormFactor";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, (char *)"(OOO)" ,(PyObject *)obj0,(PyObject *)obj1,(PyObject *)obj2);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *)"sliceFormFactor", (char *)"(OOO)" ,(PyObject *)obj0,(PyObject *)obj1,(PyObject *)obj2);
@@ -8709,8 +8860,8 @@ IFormFactorBorn *SwigDirector_IFormFactorBorn::clone() const {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 0;
-  const char * const swig_method_name = "clone";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "clone";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, NULL, NULL);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *) "clone", NULL);
@@ -8737,8 +8888,8 @@ void SwigDirector_IFormFactorBorn::transferToCPP() {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 1;
-  const char * const swig_method_name = "transferToCPP";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "transferToCPP";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, NULL, NULL);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *) "transferToCPP", NULL);
@@ -8763,8 +8914,8 @@ ParameterPool *SwigDirector_IFormFactorBorn::createParameterTree() const {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 2;
-  const char * const swig_method_name = "createParameterTree";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "createParameterTree";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, NULL, NULL);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *) "createParameterTree", NULL);
@@ -8791,8 +8942,8 @@ void SwigDirector_IFormFactorBorn::onChange() {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 3;
-  const char * const swig_method_name = "onChange";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "onChange";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, NULL, NULL);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *) "onChange", NULL);
@@ -8814,8 +8965,8 @@ void SwigDirector_IFormFactorBorn::accept(INodeVisitor *visitor) const {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 4;
-  const char * const swig_method_name = "accept";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "accept";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, (char *)"(O)" ,(PyObject *)obj0);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *)"accept", (char *)"(O)" ,(PyObject *)obj0);
@@ -8836,8 +8987,8 @@ std::string SwigDirector_IFormFactorBorn::treeToString() const {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 5;
-  const char * const swig_method_name = "treeToString";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "treeToString";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, NULL, NULL);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *) "treeToString", NULL);
@@ -8866,8 +9017,8 @@ std::vector< INode const *,std::allocator< INode const * > > SwigDirector_IFormF
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 6;
-  const char * const swig_method_name = "getChildren";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "getChildren";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, NULL, NULL);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *) "getChildren", NULL);
@@ -8897,8 +9048,8 @@ void SwigDirector_IFormFactorBorn::setParent(INode const *newParent) {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 7;
-  const char * const swig_method_name = "setParent";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "setParent";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, (char *)"(O)" ,(PyObject *)obj0);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *)"setParent", (char *)"(O)" ,(PyObject *)obj0);
@@ -8923,8 +9074,8 @@ Material const *SwigDirector_IFormFactorBorn::material() const {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 8;
-  const char * const swig_method_name = "material";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "material";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, NULL, NULL);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *) "material", NULL);
@@ -8947,14 +9098,14 @@ Material const *SwigDirector_IFormFactorBorn::material() const {
 
 void SwigDirector_IFormFactorBorn::setAmbientMaterial(Material arg0) {
   swig::SwigVar_PyObject obj0;
-  obj0 = SWIG_NewPointerObj(SWIG_as_voidptr(&arg0), SWIGTYPE_p_Material,  0 );
+  obj0 = SWIG_NewPointerObj(SWIG_as_voidptr(new Material((const Material &)arg0)), SWIGTYPE_p_Material, SWIG_POINTER_OWN |  0 );
   if (!swig_get_self()) {
     Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IFormFactorBorn.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 9;
-  const char * const swig_method_name = "setAmbientMaterial";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "setAmbientMaterial";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, (char *)"(O)" ,(PyObject *)obj0);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *)"setAmbientMaterial", (char *)"(O)" ,(PyObject *)obj0);
@@ -8977,8 +9128,8 @@ complex_t SwigDirector_IFormFactorBorn::evaluate(WavevectorInfo const &wavevecto
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 10;
-  const char * const swig_method_name = "evaluate";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "evaluate";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, (char *)"(O)" ,(PyObject *)obj0);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *)"evaluate", (char *)"(O)" ,(PyObject *)obj0);
@@ -9006,8 +9157,8 @@ double SwigDirector_IFormFactorBorn::volume() const {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 11;
-  const char * const swig_method_name = "volume";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "volume";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, NULL, NULL);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *) "volume", NULL);
@@ -9035,8 +9186,8 @@ double SwigDirector_IFormFactorBorn::radialExtension() const {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 12;
-  const char * const swig_method_name = "radialExtension";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "radialExtension";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, NULL, NULL);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *) "radialExtension", NULL);
@@ -9066,8 +9217,8 @@ double SwigDirector_IFormFactorBorn::bottomZ(IRotation const &rotation) const {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 13;
-  const char * const swig_method_name = "bottomZ";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "bottomZ";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, (char *)"(O)" ,(PyObject *)obj0);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *)"bottomZ", (char *)"(O)" ,(PyObject *)obj0);
@@ -9097,8 +9248,8 @@ double SwigDirector_IFormFactorBorn::topZ(IRotation const &rotation) const {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 14;
-  const char * const swig_method_name = "topZ";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "topZ";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, (char *)"(O)" ,(PyObject *)obj0);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *)"topZ", (char *)"(O)" ,(PyObject *)obj0);
@@ -9129,8 +9280,8 @@ void SwigDirector_IFormFactorBorn::setSpecularInfo(ILayerRTCoefficients const *a
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 15;
-  const char * const swig_method_name = "setSpecularInfo";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "setSpecularInfo";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, (char *)"(OO)" ,(PyObject *)obj0,(PyObject *)obj1);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *)"setSpecularInfo", (char *)"(OO)" ,(PyObject *)obj0,(PyObject *)obj1);
@@ -9154,8 +9305,8 @@ bool SwigDirector_IFormFactorBorn::canSliceAnalytically(IRotation const &rot) co
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 16;
-  const char * const swig_method_name = "canSliceAnalytically";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "canSliceAnalytically";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, (char *)"(O)" ,(PyObject *)obj0);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *)"canSliceAnalytically", (char *)"(O)" ,(PyObject *)obj0);
@@ -9184,19 +9335,19 @@ IFormFactor *SwigDirector_IFormFactorBorn::sliceFormFactor(ZLimits limits, IRota
   
   IFormFactor *c_result;
   swig::SwigVar_PyObject obj0;
-  obj0 = SWIG_NewPointerObj(SWIG_as_voidptr(&limits), SWIGTYPE_p_ZLimits,  0 );
+  obj0 = SWIG_NewPointerObj(SWIG_as_voidptr(new ZLimits((const ZLimits &)limits)), SWIGTYPE_p_ZLimits, SWIG_POINTER_OWN |  0 );
   swig::SwigVar_PyObject obj1;
   obj1 = SWIG_NewPointerObj(SWIG_as_voidptr(&rot), SWIGTYPE_p_IRotation,  0 );
   swig::SwigVar_PyObject obj2;
-  obj2 = SWIG_NewPointerObj(SWIG_as_voidptr(&translation), SWIGTYPE_p_BasicVector3DT_double_t,  0 );
+  obj2 = SWIG_NewPointerObj(SWIG_as_voidptr(new kvector_t((const kvector_t &)translation)), SWIGTYPE_p_BasicVector3DT_double_t, SWIG_POINTER_OWN |  0 );
   swig_set_inner("sliceFormFactor", true);
   if (!swig_get_self()) {
     Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IFormFactorBorn.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 17;
-  const char * const swig_method_name = "sliceFormFactor";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "sliceFormFactor";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, (char *)"(OOO)" ,(PyObject *)obj0,(PyObject *)obj1,(PyObject *)obj2);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *)"sliceFormFactor", (char *)"(OOO)" ,(PyObject *)obj0,(PyObject *)obj1,(PyObject *)obj2);
@@ -9221,14 +9372,14 @@ IFormFactor *SwigDirector_IFormFactorBorn::sliceFormFactor(ZLimits limits, IRota
 complex_t SwigDirector_IFormFactorBorn::evaluate_for_q(cvector_t q) const {
   complex_t c_result;
   swig::SwigVar_PyObject obj0;
-  obj0 = SWIG_NewPointerObj(SWIG_as_voidptr(&q), SWIGTYPE_p_BasicVector3DT_std__complexT_double_t_t,  0 );
+  obj0 = SWIG_NewPointerObj(SWIG_as_voidptr(new cvector_t((const cvector_t &)q)), SWIGTYPE_p_BasicVector3DT_std__complexT_double_t_t, SWIG_POINTER_OWN |  0 );
   if (!swig_get_self()) {
     Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IFormFactorBorn.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 18;
-  const char * const swig_method_name = "evaluate_for_q";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "evaluate_for_q";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, (char *)"(O)" ,(PyObject *)obj0);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *)"evaluate_for_q", (char *)"(O)" ,(PyObject *)obj0);
@@ -9270,8 +9421,8 @@ IInterferenceFunction *SwigDirector_IInterferenceFunction::clone() const {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 0;
-  const char * const swig_method_name = "clone";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "clone";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, NULL, NULL);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *) "clone", NULL);
@@ -9298,8 +9449,8 @@ void SwigDirector_IInterferenceFunction::transferToCPP() {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 1;
-  const char * const swig_method_name = "transferToCPP";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "transferToCPP";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, NULL, NULL);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *) "transferToCPP", NULL);
@@ -9324,8 +9475,8 @@ ParameterPool *SwigDirector_IInterferenceFunction::createParameterTree() const {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 2;
-  const char * const swig_method_name = "createParameterTree";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "createParameterTree";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, NULL, NULL);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *) "createParameterTree", NULL);
@@ -9352,8 +9503,8 @@ void SwigDirector_IInterferenceFunction::onChange() {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 3;
-  const char * const swig_method_name = "onChange";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "onChange";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, NULL, NULL);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *) "onChange", NULL);
@@ -9375,8 +9526,8 @@ void SwigDirector_IInterferenceFunction::accept(INodeVisitor *visitor) const {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 4;
-  const char * const swig_method_name = "accept";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "accept";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, (char *)"(O)" ,(PyObject *)obj0);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *)"accept", (char *)"(O)" ,(PyObject *)obj0);
@@ -9397,8 +9548,8 @@ std::string SwigDirector_IInterferenceFunction::treeToString() const {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 5;
-  const char * const swig_method_name = "treeToString";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "treeToString";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, NULL, NULL);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *) "treeToString", NULL);
@@ -9427,8 +9578,8 @@ std::vector< INode const *,std::allocator< INode const * > > SwigDirector_IInter
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 6;
-  const char * const swig_method_name = "getChildren";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "getChildren";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, NULL, NULL);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *) "getChildren", NULL);
@@ -9458,8 +9609,8 @@ void SwigDirector_IInterferenceFunction::setParent(INode const *newParent) {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 7;
-  const char * const swig_method_name = "setParent";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "setParent";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, (char *)"(O)" ,(PyObject *)obj0);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *)"setParent", (char *)"(O)" ,(PyObject *)obj0);
@@ -9484,8 +9635,8 @@ Material const *SwigDirector_IInterferenceFunction::material() const {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 8;
-  const char * const swig_method_name = "material";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "material";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, NULL, NULL);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *) "material", NULL);
@@ -9509,14 +9660,14 @@ Material const *SwigDirector_IInterferenceFunction::material() const {
 double SwigDirector_IInterferenceFunction::evaluate(kvector_t const q) const {
   double c_result;
   swig::SwigVar_PyObject obj0;
-  obj0 = SWIG_NewPointerObj(SWIG_as_voidptr(&q), SWIGTYPE_p_BasicVector3DT_double_t,  0 );
+  obj0 = SWIG_NewPointerObj(SWIG_as_voidptr(new kvector_t((const kvector_t &)q)), SWIGTYPE_p_BasicVector3DT_double_t, SWIG_POINTER_OWN |  0 );
   if (!swig_get_self()) {
     Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IInterferenceFunction.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 9;
-  const char * const swig_method_name = "evaluate";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "evaluate";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, (char *)"(O)" ,(PyObject *)obj0);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *)"evaluate", (char *)"(O)" ,(PyObject *)obj0);
@@ -9544,8 +9695,8 @@ double SwigDirector_IInterferenceFunction::kappa() const {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 10;
-  const char * const swig_method_name = "kappa";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "kappa";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, NULL, NULL);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *) "kappa", NULL);
@@ -9573,8 +9724,8 @@ double SwigDirector_IInterferenceFunction::getParticleDensity() const {
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 11;
-  const char * const swig_method_name = "getParticleDensity";
-  PyObject* method = swig_get_method(swig_method_index, swig_method_name);
+  const char *const swig_method_name = "getParticleDensity";
+  PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunction(method, NULL, NULL);
 #else
   swig::SwigVar_PyObject result = PyObject_CallMethod(swig_get_self(), (char *) "getParticleDensity", NULL);
@@ -10443,22 +10594,11 @@ fail:
 
 SWIGINTERN PyObject *SwigPyIterator_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_swig__SwigPyIterator, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *SHARED_PTR_DISOWN_swigconstant(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *module;
-  PyObject *d;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigconstant", &module)) return NULL;
-  d = PyModule_GetDict(module);
-  if (!d) return NULL;
-  SWIG_Python_SetConstant(d, "SHARED_PTR_DISOWN",SWIG_From_int(static_cast< int >(0)));
-  return SWIG_Py_Void();
-}
-
-
 SWIGINTERN PyObject *_wrap_vdouble1d_t_iterator(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   std::vector< double > *arg1 = (std::vector< double > *) 0 ;
@@ -12372,7 +12512,7 @@ fail:
 
 SWIGINTERN PyObject *vdouble1d_t_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -14320,7 +14460,7 @@ fail:
 
 SWIGINTERN PyObject *vdouble2d_t_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -16238,7 +16378,7 @@ fail:
 
 SWIGINTERN PyObject *vector_integer_t_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -18186,7 +18326,7 @@ fail:
 
 SWIGINTERN PyObject *vinteger2d_t_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -20104,7 +20244,7 @@ fail:
 
 SWIGINTERN PyObject *vector_longinteger_t_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_std__vectorT_unsigned_long_std__allocatorT_unsigned_long_t_t, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -22022,7 +22162,7 @@ fail:
 
 SWIGINTERN PyObject *vector_complex_t_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_std__vectorT_std__complexT_double_t_std__allocatorT_std__complexT_double_t_t_t, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -23970,7 +24110,7 @@ fail:
 
 SWIGINTERN PyObject *vector_string_t_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -24158,7 +24298,7 @@ fail:
 
 SWIGINTERN PyObject *INoncopyable_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_INoncopyable, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -24229,7 +24369,7 @@ fail:
 
 SWIGINTERN PyObject *ICloneable_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_ICloneable, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -24404,7 +24544,7 @@ fail:
 
 SWIGINTERN PyObject *INamed_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_INamed, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -24885,7 +25025,7 @@ fail:
 
 SWIGINTERN PyObject *IParameterized_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_IParameterized, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -25331,7 +25471,7 @@ fail:
 
 SWIGINTERN PyObject *INode_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_INode, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -27228,7 +27368,7 @@ fail:
 
 SWIGINTERN PyObject *swig_dummy_type_inode_vector_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_std__vectorT_INode_p_std__allocatorT_INode_p_t_t, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -29125,7 +29265,7 @@ fail:
 
 SWIGINTERN PyObject *swig_dummy_type_const_inode_vector_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_std__vectorT_INode_const_p_std__allocatorT_INode_const_p_t_t, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -29933,7 +30073,7 @@ fail:
 
 SWIGINTERN PyObject *kvector_t_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_BasicVector3DT_double_t, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -31849,7 +31989,7 @@ fail:
 
 SWIGINTERN PyObject *vector_kvector_t_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_std__vectorT_BasicVector3DT_double_t_std__allocatorT_BasicVector3DT_double_t_t_t, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -32395,7 +32535,7 @@ fail:
 
 SWIGINTERN PyObject *cvector_t_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_BasicVector3DT_std__complexT_double_t_t, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -34311,7 +34451,7 @@ fail:
 
 SWIGINTERN PyObject *vector_cvector_t_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_std__vectorT_BasicVector3DT_std__complexT_double_t_t_std__allocatorT_BasicVector3DT_std__complexT_double_t_t_t_t, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -34956,7 +35096,7 @@ fail:
 
 SWIGINTERN PyObject *WavevectorInfo_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_WavevectorInfo, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -35333,7 +35473,7 @@ fail:
 
 SWIGINTERN PyObject *Beam_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_Beam, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -35594,7 +35734,7 @@ fail:
 
 SWIGINTERN PyObject *Bin1D_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_Bin1D, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -35966,7 +36106,7 @@ fail:
 
 SWIGINTERN PyObject *Bin1DKVector_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_Bin1DKVector, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -36304,7 +36444,7 @@ fail:
 
 SWIGINTERN PyObject *Bin1DCVector_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_Bin1DCVector, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -36803,7 +36943,7 @@ fail:
 
 SWIGINTERN PyObject *IAxis_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_IAxis, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -37218,7 +37358,7 @@ fail:
 
 SWIGINTERN PyObject *VariableBinAxis_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_VariableBinAxis, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -37364,7 +37504,7 @@ fail:
 
 SWIGINTERN PyObject *ConstKBinAxis_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_ConstKBinAxis, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -37563,7 +37703,7 @@ fail:
 
 SWIGINTERN PyObject *CustomBinAxis_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_CustomBinAxis, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -37759,7 +37899,7 @@ fail:
 
 SWIGINTERN PyObject *IShape2D_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_IShape2D, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -37937,7 +38077,7 @@ fail:
 
 SWIGINTERN PyObject *ISample_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_ISample, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -38348,7 +38488,7 @@ fail:
 
 SWIGINTERN PyObject *IChiSquaredModule_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_IChiSquaredModule, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -38430,7 +38570,7 @@ fail:
 
 SWIGINTERN PyObject *IObserver_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_std__shared_ptrT_IObserver_t, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -38584,7 +38724,7 @@ fail:
 
 SWIGINTERN PyObject *IObservable_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_IObservable, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -38803,7 +38943,7 @@ fail:
 
 SWIGINTERN PyObject *IFitObserver_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_std__shared_ptrT_IFitObserver_t, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -38904,7 +39044,7 @@ fail:
 
 SWIGINTERN PyObject *IFitStrategy_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_IFitStrategy, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -38988,7 +39128,7 @@ fail:
 
 SWIGINTERN PyObject *FitStrategyDefault_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FitStrategyDefault, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -39069,7 +39209,7 @@ fail:
 
 SWIGINTERN PyObject *IIntensityFunction_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_IIntensityFunction, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -39163,7 +39303,7 @@ fail:
 
 SWIGINTERN PyObject *IntensityFunctionLog_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_IntensityFunctionLog, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -39257,7 +39397,7 @@ fail:
 
 SWIGINTERN PyObject *IntensityFunctionSqrt_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_IntensityFunctionSqrt, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -39404,7 +39544,7 @@ fail:
 
 SWIGINTERN PyObject *IIntensityNormalizer_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_IIntensityNormalizer, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -39699,7 +39839,7 @@ fail:
 
 SWIGINTERN PyObject *IntensityNormalizer_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_IntensityNormalizer, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -39927,7 +40067,7 @@ fail:
 
 SWIGINTERN PyObject *IntensityScaleAndShiftNormalizer_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_IntensityScaleAndShiftNormalizer, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -40146,7 +40286,7 @@ fail:
 
 SWIGINTERN PyObject *ISquaredFunction_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_ISquaredFunction, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -40378,7 +40518,7 @@ fail:
 
 SWIGINTERN PyObject *SquaredFunctionDefault_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_SquaredFunctionDefault, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -40508,7 +40648,7 @@ fail:
 
 SWIGINTERN PyObject *SquaredFunctionSimError_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_SquaredFunctionSimError, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -40638,7 +40778,7 @@ fail:
 
 SWIGINTERN PyObject *SquaredFunctionMeanSquaredError_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_SquaredFunctionMeanSquaredError, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -40768,7 +40908,7 @@ fail:
 
 SWIGINTERN PyObject *SquaredFunctionSystematicError_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_SquaredFunctionSystematicError, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -40898,7 +41038,7 @@ fail:
 
 SWIGINTERN PyObject *SquaredFunctionGaussianError_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_SquaredFunctionGaussianError, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -41074,7 +41214,7 @@ fail:
 
 SWIGINTERN PyObject *ChiSquaredModule_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_ChiSquaredModule, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -41658,7 +41798,7 @@ fail:
 
 SWIGINTERN PyObject *FitObject_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FitObject, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -41803,7 +41943,7 @@ fail:
 
 SWIGINTERN PyObject *FitOptions_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FitOptions, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -42488,7 +42628,7 @@ fail:
 
 SWIGINTERN PyObject *FitParameter_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FitParameter, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -44656,7 +44796,7 @@ fail:
 
 SWIGINTERN PyObject *FitSuite_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FitSuite, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -45554,7 +45694,7 @@ fail:
 
 SWIGINTERN PyObject *FitSuiteObjects_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FitSuiteObjects, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -46102,28 +46242,6 @@ fail:
 }
 
 
-SWIGINTERN PyObject *FORWARD_FFT_swigconstant(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *module;
-  PyObject *d;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigconstant", &module)) return NULL;
-  d = PyModule_GetDict(module);
-  if (!d) return NULL;
-  SWIG_Python_SetConstant(d, "FORWARD_FFT",SWIG_From_int(static_cast< int >(MathFunctions::FORWARD_FFT)));
-  return SWIG_Py_Void();
-}
-
-
-SWIGINTERN PyObject *BACKWARD_FFT_swigconstant(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *module;
-  PyObject *d;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigconstant", &module)) return NULL;
-  d = PyModule_GetDict(module);
-  if (!d) return NULL;
-  SWIG_Python_SetConstant(d, "BACKWARD_FFT",SWIG_From_int(static_cast< int >(MathFunctions::BACKWARD_FFT)));
-  return SWIG_Py_Void();
-}
-
-
 SWIGINTERN PyObject *_wrap_FastFourierTransform__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   std::vector< complex_t,std::allocator< complex_t > > *arg1 = 0 ;
@@ -46862,7 +46980,7 @@ fail:
 
 SWIGINTERN PyObject *AdjustMinimizerStrategy_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_AdjustMinimizerStrategy, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -47386,7 +47504,7 @@ fail:
 
 SWIGINTERN PyObject *IMultiLayerBuilder_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_std__shared_ptrT_IMultiLayerBuilder_t, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -52359,7 +52477,7 @@ fail:
 
 SWIGINTERN PyObject *INodeVisitor_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_INodeVisitor, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -52588,7 +52706,7 @@ fail:
 
 SWIGINTERN PyObject *IClusteredParticles_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_IClusteredParticles, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -52932,7 +53050,7 @@ fail:
 
 SWIGINTERN PyObject *Crystal_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_Crystal, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -53559,7 +53677,7 @@ fail:
 
 SWIGINTERN PyObject *IDistribution1D_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_IDistribution1D, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -54003,7 +54121,7 @@ fail:
 
 SWIGINTERN PyObject *DistributionGate_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_DistributionGate, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -54425,7 +54543,7 @@ fail:
 
 SWIGINTERN PyObject *DistributionLorentz_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_DistributionLorentz, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -54847,7 +54965,7 @@ fail:
 
 SWIGINTERN PyObject *DistributionGaussian_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_DistributionGaussian, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -55344,7 +55462,7 @@ fail:
 
 SWIGINTERN PyObject *DistributionLogNormal_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_DistributionLogNormal, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -55766,7 +55884,7 @@ fail:
 
 SWIGINTERN PyObject *DistributionCosine_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_DistributionCosine, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -56262,7 +56380,7 @@ fail:
 
 SWIGINTERN PyObject *DistributionTrapezoid_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_DistributionTrapezoid, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -56722,7 +56840,7 @@ fail:
 
 SWIGINTERN PyObject *DetectorMask_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_DetectorMask, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -57219,7 +57337,7 @@ fail:
 
 SWIGINTERN PyObject *Ellipse_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_Ellipse, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -57322,7 +57440,7 @@ fail:
 
 SWIGINTERN PyObject *IFTDecayFunction1D_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_IFTDecayFunction1D, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -57455,7 +57573,7 @@ fail:
 
 SWIGINTERN PyObject *FTDecayFunction1DCauchy_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FTDecayFunction1DCauchy, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -57588,7 +57706,7 @@ fail:
 
 SWIGINTERN PyObject *FTDecayFunction1DGauss_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FTDecayFunction1DGauss, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -57721,7 +57839,7 @@ fail:
 
 SWIGINTERN PyObject *FTDecayFunction1DTriangle_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FTDecayFunction1DTriangle, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -57885,7 +58003,7 @@ fail:
 
 SWIGINTERN PyObject *FTDecayFunction1DVoigt_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FTDecayFunction1DVoigt, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -58183,7 +58301,7 @@ fail:
 
 SWIGINTERN PyObject *IFTDecayFunction2D_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_IFTDecayFunction2D, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -58434,7 +58552,7 @@ fail:
 
 SWIGINTERN PyObject *FTDecayFunction2DCauchy_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FTDecayFunction2DCauchy, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -58685,7 +58803,7 @@ fail:
 
 SWIGINTERN PyObject *FTDecayFunction2DGauss_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FTDecayFunction2DGauss, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -58988,7 +59106,7 @@ fail:
 
 SWIGINTERN PyObject *FTDecayFunction2DVoigt_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FTDecayFunction2DVoigt, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -59121,7 +59239,7 @@ fail:
 
 SWIGINTERN PyObject *IFTDistribution1D_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_IFTDistribution1D, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -59254,7 +59372,7 @@ fail:
 
 SWIGINTERN PyObject *FTDistribution1DCauchy_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FTDistribution1DCauchy, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -59387,7 +59505,7 @@ fail:
 
 SWIGINTERN PyObject *FTDistribution1DGauss_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FTDistribution1DGauss, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -59520,7 +59638,7 @@ fail:
 
 SWIGINTERN PyObject *FTDistribution1DGate_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FTDistribution1DGate, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -59653,7 +59771,7 @@ fail:
 
 SWIGINTERN PyObject *FTDistribution1DTriangle_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FTDistribution1DTriangle, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -59786,7 +59904,7 @@ fail:
 
 SWIGINTERN PyObject *FTDistribution1DCosine_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FTDistribution1DCosine, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -59950,7 +60068,7 @@ fail:
 
 SWIGINTERN PyObject *FTDistribution1DVoigt_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FTDistribution1DVoigt, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -60158,7 +60276,7 @@ fail:
 
 SWIGINTERN PyObject *IFTDistribution2D_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_IFTDistribution2D, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -60409,7 +60527,7 @@ fail:
 
 SWIGINTERN PyObject *FTDistribution2DCauchy_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FTDistribution2DCauchy, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -60660,7 +60778,7 @@ fail:
 
 SWIGINTERN PyObject *FTDistribution2DGauss_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FTDistribution2DGauss, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -60911,7 +61029,7 @@ fail:
 
 SWIGINTERN PyObject *FTDistribution2DGate_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FTDistribution2DGate, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -61162,7 +61280,7 @@ fail:
 
 SWIGINTERN PyObject *FTDistribution2DCone_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FTDistribution2DCone, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -61465,7 +61583,7 @@ fail:
 
 SWIGINTERN PyObject *FTDistribution2DVoigt_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FTDistribution2DVoigt, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -61845,7 +61963,7 @@ fail:
 
 SWIGINTERN PyObject *FixedBinAxis_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FixedBinAxis, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -62493,7 +62611,7 @@ fail:
 
 SWIGINTERN PyObject *IFormFactor_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_IFormFactor, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -64444,7 +64562,7 @@ fail:
 
 SWIGINTERN PyObject *vector_IFormFactorPtr_t_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_std__vectorT_IFormFactor_p_std__allocatorT_IFormFactor_p_t_t, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -64949,7 +65067,7 @@ fail:
 
 SWIGINTERN PyObject *IFormFactorBorn_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_IFormFactorBorn, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -65146,7 +65264,7 @@ fail:
 
 SWIGINTERN PyObject *SlicingEffects_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_SlicingEffects, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -65376,7 +65494,7 @@ fail:
 
 SWIGINTERN PyObject *IFormFactorDecorator_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_IFormFactorDecorator, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -65521,7 +65639,7 @@ fail:
 
 SWIGINTERN PyObject *PolygonalTopology_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_PolygonalTopology, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -65666,7 +65784,7 @@ fail:
 
 SWIGINTERN PyObject *PolyhedralTopology_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_PolyhedralTopology, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -65920,7 +66038,7 @@ fail:
 
 SWIGINTERN PyObject *PolyhedralEdge_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_PolyhedralEdge, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -66400,7 +66518,7 @@ fail:
 
 SWIGINTERN PyObject *PolyhedralFace_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_PolyhedralFace, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -66571,7 +66689,7 @@ fail:
 
 SWIGINTERN PyObject *FormFactorPolyhedron_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FormFactorPolyhedron, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -66704,7 +66822,7 @@ fail:
 
 SWIGINTERN PyObject *FormFactorPolygonalPrism_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FormFactorPolygonalPrism, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -66815,7 +66933,7 @@ fail:
 
 SWIGINTERN PyObject *FormFactorPolygonalSurface_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FormFactorPolygonalSurface, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -67032,7 +67150,7 @@ fail:
 
 SWIGINTERN PyObject *FormFactorAnisoPyramid_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FormFactorAnisoPyramid, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -67279,7 +67397,7 @@ fail:
 
 SWIGINTERN PyObject *FormFactorBox_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FormFactorBox, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -67526,7 +67644,7 @@ fail:
 
 SWIGINTERN PyObject *FormFactorCone_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FormFactorCone, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -67712,7 +67830,7 @@ fail:
 
 SWIGINTERN PyObject *FormFactorCone6_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FormFactorCone6, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -68025,7 +68143,7 @@ fail:
 
 SWIGINTERN PyObject *FormFactorCrystal_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FormFactorCrystal, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -68242,7 +68360,7 @@ fail:
 
 SWIGINTERN PyObject *FormFactorCuboctahedron_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FormFactorCuboctahedron, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -68458,7 +68576,7 @@ fail:
 
 SWIGINTERN PyObject *FormFactorCylinder_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FormFactorCylinder, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -68705,7 +68823,7 @@ fail:
 
 SWIGINTERN PyObject *FormFactorDecoratorDebyeWaller_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FormFactorDecoratorDebyeWaller, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -68829,7 +68947,7 @@ fail:
 
 SWIGINTERN PyObject *FormFactorDodecahedron_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FormFactorDodecahedron, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -68983,7 +69101,7 @@ fail:
 
 SWIGINTERN PyObject *FormFactorDot_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FormFactorDot, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -69230,7 +69348,7 @@ fail:
 
 SWIGINTERN PyObject *FormFactorEllipsoidalCylinder_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FormFactorEllipsoidalCylinder, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -69483,7 +69601,7 @@ fail:
 
 SWIGINTERN PyObject *FormFactorFullSphere_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FormFactorFullSphere, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -69699,7 +69817,7 @@ fail:
 
 SWIGINTERN PyObject *FormFactorFullSpheroid_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FormFactorFullSpheroid, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -69985,7 +70103,7 @@ fail:
 
 SWIGINTERN PyObject *FormFactorGauss_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FormFactorGauss, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -70232,7 +70350,7 @@ fail:
 
 SWIGINTERN PyObject *FormFactorHemiEllipsoid_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FormFactorHemiEllipsoid, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -70356,7 +70474,7 @@ fail:
 
 SWIGINTERN PyObject *FormFactorIcosahedron_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FormFactorIcosahedron, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -70603,7 +70721,7 @@ fail:
 
 SWIGINTERN PyObject *FormFactorLongBoxGauss_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FormFactorLongBoxGauss, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -70850,7 +70968,7 @@ fail:
 
 SWIGINTERN PyObject *FormFactorLongBoxLorentz_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FormFactorLongBoxLorentz, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -71097,7 +71215,7 @@ fail:
 
 SWIGINTERN PyObject *FormFactorLongRipple1Gauss_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FormFactorLongRipple1Gauss, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -71344,7 +71462,7 @@ fail:
 
 SWIGINTERN PyObject *FormFactorLongRipple1Lorentz_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FormFactorLongRipple1Lorentz, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -71622,7 +71740,7 @@ fail:
 
 SWIGINTERN PyObject *FormFactorLongRipple2Gauss_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FormFactorLongRipple2Gauss, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -71900,7 +72018,7 @@ fail:
 
 SWIGINTERN PyObject *FormFactorLongRipple2Lorentz_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FormFactorLongRipple2Lorentz, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -72186,7 +72304,7 @@ fail:
 
 SWIGINTERN PyObject *FormFactorLorentz_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FormFactorLorentz, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -72319,7 +72437,7 @@ fail:
 
 SWIGINTERN PyObject *FormFactorPrism3_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FormFactorPrism3, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -72452,7 +72570,7 @@ fail:
 
 SWIGINTERN PyObject *FormFactorPrism6_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FormFactorPrism6, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -72638,7 +72756,7 @@ fail:
 
 SWIGINTERN PyObject *FormFactorPyramid_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FormFactorPyramid, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -72885,7 +73003,7 @@ fail:
 
 SWIGINTERN PyObject *FormFactorRipple1_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FormFactorRipple1, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -73163,7 +73281,7 @@ fail:
 
 SWIGINTERN PyObject *FormFactorRipple2_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FormFactorRipple2, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -73335,7 +73453,7 @@ fail:
 
 SWIGINTERN PyObject *FormFactorSphereGaussianRadius_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FormFactorSphereGaussianRadius, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -73516,7 +73634,7 @@ fail:
 
 SWIGINTERN PyObject *FormFactorSphereLogNormalRadius_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FormFactorSphereLogNormalRadius, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -73688,7 +73806,7 @@ fail:
 
 SWIGINTERN PyObject *FormFactorSphereUniformRadius_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FormFactorSphereUniformRadius, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -73874,7 +73992,7 @@ fail:
 
 SWIGINTERN PyObject *FormFactorTetrahedron_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FormFactorTetrahedron, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -74029,7 +74147,7 @@ fail:
 
 SWIGINTERN PyObject *FormFactorTruncatedCube_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FormFactorTruncatedCube, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -74367,7 +74485,7 @@ fail:
 
 SWIGINTERN PyObject *FormFactorTruncatedSphere_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FormFactorTruncatedSphere, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -74757,7 +74875,7 @@ fail:
 
 SWIGINTERN PyObject *FormFactorTruncatedSpheroid_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FormFactorTruncatedSpheroid, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -75141,7 +75259,7 @@ fail:
 
 SWIGINTERN PyObject *FormFactorWeighted_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_FormFactorWeighted, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -76339,7 +76457,7 @@ fail:
 
 SWIGINTERN PyObject *Simulation_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_Simulation, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -76867,7 +76985,7 @@ fail:
 
 SWIGINTERN PyObject *SimulationOptions_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_SimulationOptions, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -77699,7 +77817,7 @@ fail:
 
 SWIGINTERN PyObject *GISASSimulation_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_GISASSimulation, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -79689,7 +79807,7 @@ fail:
 
 SWIGINTERN PyObject *IHistogram_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_IHistogram, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -80288,7 +80406,7 @@ fail:
 
 SWIGINTERN PyObject *Histogram1D_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_Histogram1D, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -81328,7 +81446,7 @@ fail:
 
 SWIGINTERN PyObject *Histogram2D_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_Histogram2D, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -82656,7 +82774,7 @@ fail:
 
 SWIGINTERN PyObject *IDetector2D_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_IDetector2D, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -82736,7 +82854,7 @@ fail:
 
 SWIGINTERN PyObject *IDetectorResolution_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_IDetectorResolution, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -83016,7 +83134,7 @@ fail:
 
 SWIGINTERN PyObject *IInterferenceFunction_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_IInterferenceFunction, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -83275,7 +83393,7 @@ fail:
 
 SWIGINTERN PyObject *ILayout_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_ILayout, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -83445,7 +83563,7 @@ fail:
 
 SWIGINTERN PyObject *IAbstractParticle_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_IAbstractParticle, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -83688,7 +83806,7 @@ fail:
 
 SWIGINTERN PyObject *IParameterReal_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_IParameterT_double_t, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -83833,7 +83951,7 @@ fail:
 
 SWIGINTERN PyObject *ParticleLimits_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_ParticleLimits, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -84539,7 +84657,7 @@ fail:
 
 SWIGINTERN PyObject *IParticle_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_IParticle, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -84629,7 +84747,7 @@ fail:
 
 SWIGINTERN PyObject *IResolutionFunction2D_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_IResolutionFunction2D, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -84813,7 +84931,7 @@ fail:
 
 SWIGINTERN PyObject *IRotation_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_IRotation, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -85043,7 +85161,7 @@ fail:
 
 SWIGINTERN PyObject *RotationX_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_RotationX, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -85211,7 +85329,7 @@ fail:
 
 SWIGINTERN PyObject *RotationY_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_RotationY, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -85427,7 +85545,7 @@ fail:
 
 SWIGINTERN PyObject *RotationZ_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_RotationZ, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -85657,7 +85775,7 @@ fail:
 
 SWIGINTERN PyObject *RotationEuler_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_RotationEuler, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -85741,7 +85859,7 @@ fail:
 
 SWIGINTERN PyObject *ISelectionRule_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_ISelectionRule, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -85874,7 +85992,7 @@ fail:
 
 SWIGINTERN PyObject *SimpleSelectionRule_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_SimpleSelectionRule, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -87114,7 +87232,7 @@ fail:
 
 SWIGINTERN PyObject *Instrument_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_Instrument, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -87820,7 +87938,7 @@ fail:
 
 SWIGINTERN PyObject *IntensityDataIOFactory_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_IntensityDataIOFactory, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -88047,7 +88165,7 @@ fail:
 
 SWIGINTERN PyObject *InterferenceFunction1DLattice_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_InterferenceFunction1DLattice, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -88501,7 +88619,7 @@ fail:
 
 SWIGINTERN PyObject *InterferenceFunctionRadialParaCrystal_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_InterferenceFunctionRadialParaCrystal, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -89189,7 +89307,7 @@ fail:
 
 SWIGINTERN PyObject *InterferenceFunction2DLattice_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_InterferenceFunction2DLattice, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -90548,7 +90666,7 @@ fail:
 
 SWIGINTERN PyObject *InterferenceFunction2DParaCrystal_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_InterferenceFunction2DParaCrystal, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -90680,7 +90798,7 @@ fail:
 
 SWIGINTERN PyObject *InterferenceFunctionNone_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_InterferenceFunctionNone, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -90881,7 +90999,7 @@ fail:
 
 SWIGINTERN PyObject *IPixel_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_IPixel, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -91184,7 +91302,7 @@ fail:
 
 SWIGINTERN PyObject *SphericalDetector_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_SphericalDetector, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -91432,7 +91550,7 @@ fail:
 
 SWIGINTERN PyObject *SphericalPixel_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_SphericalPixel, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -91691,7 +91809,7 @@ fail:
 
 SWIGINTERN PyObject *IsGISAXSDetector_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_IsGISAXSDetector, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -92332,7 +92450,7 @@ fail:
 
 SWIGINTERN PyObject *Lattice_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_Lattice, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -92549,7 +92667,7 @@ fail:
 
 SWIGINTERN PyObject *Lattice1DParameters_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_Lattice1DParameters, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -92761,7 +92879,7 @@ fail:
 
 SWIGINTERN PyObject *Lattice2D_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_Lattice2D, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -93090,7 +93208,7 @@ fail:
 
 SWIGINTERN PyObject *BasicLattice_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_BasicLattice, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -93359,7 +93477,7 @@ fail:
 
 SWIGINTERN PyObject *SquareLattice_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_SquareLattice, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -93628,7 +93746,7 @@ fail:
 
 SWIGINTERN PyObject *HexagonalLattice_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_HexagonalLattice, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -94346,7 +94464,7 @@ fail:
 
 SWIGINTERN PyObject *Layer_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_Layer, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -94760,7 +94878,7 @@ fail:
 
 SWIGINTERN PyObject *LayerRoughness_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_LayerRoughness, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -95005,7 +95123,7 @@ fail:
 
 SWIGINTERN PyObject *Line_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_Line, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -95245,7 +95363,7 @@ fail:
 
 SWIGINTERN PyObject *VerticalLine_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_VerticalLine, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -95485,7 +95603,7 @@ fail:
 
 SWIGINTERN PyObject *HorizontalLine_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_HorizontalLine, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -95729,28 +95847,6 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Material_dataType(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  Material *arg1 = (Material *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  size_t result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:Material_dataType",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_Material, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Material_dataType" "', argument " "1"" of type '" "Material const *""'"); 
-  }
-  arg1 = reinterpret_cast< Material * >(argp1);
-  result = ((Material const *)arg1)->dataType();
-  resultobj = SWIG_From_size_t(static_cast< size_t >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
 SWIGINTERN PyObject *_wrap_Material_magnetization(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   Material *arg1 = (Material *) 0 ;
@@ -95908,7 +96004,7 @@ fail:
 
 SWIGINTERN PyObject *Material_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_Material, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -96780,7 +96876,7 @@ fail:
 
 SWIGINTERN PyObject *MesoCrystal_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_MesoCrystal, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -97736,7 +97832,7 @@ fail:
 
 SWIGINTERN PyObject *MultiLayer_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_MultiLayer, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -98212,7 +98308,7 @@ fail:
 
 SWIGINTERN PyObject *OffSpecSimulation_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_OffSpecSimulation, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -99758,7 +99854,7 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_IntensityData___idiv__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_IntensityData___itruediv__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   OutputData< double > *arg1 = (OutputData< double > *) 0 ;
   OutputData< double > *arg2 = 0 ;
@@ -99770,18 +99866,18 @@ SWIGINTERN PyObject *_wrap_IntensityData___idiv__(PyObject *SWIGUNUSEDPARM(self)
   PyObject * obj1 = 0 ;
   OutputData< double > *result = 0 ;
   
-  if (!PyArg_ParseTuple(args,(char *)"OO:IntensityData___idiv__",&obj0,&obj1)) SWIG_fail;
+  if (!PyArg_ParseTuple(args,(char *)"OO:IntensityData___itruediv__",&obj0,&obj1)) SWIG_fail;
   res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_OutputDataT_double_t, SWIG_POINTER_DISOWN |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IntensityData___idiv__" "', argument " "1"" of type '" "OutputData< double > *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IntensityData___itruediv__" "', argument " "1"" of type '" "OutputData< double > *""'"); 
   }
   arg1 = reinterpret_cast< OutputData< double > * >(argp1);
   res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_OutputDataT_double_t,  0  | 0);
   if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IntensityData___idiv__" "', argument " "2"" of type '" "OutputData< double > const &""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IntensityData___itruediv__" "', argument " "2"" of type '" "OutputData< double > const &""'"); 
   }
   if (!argp2) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "IntensityData___idiv__" "', argument " "2"" of type '" "OutputData< double > const &""'"); 
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "IntensityData___itruediv__" "', argument " "2"" of type '" "OutputData< double > const &""'"); 
   }
   arg2 = reinterpret_cast< OutputData< double > * >(argp2);
   result = (OutputData< double > *) &(arg1)->operator /=((OutputData< double > const &)*arg2);
@@ -99995,7 +100091,7 @@ fail:
 
 SWIGINTERN PyObject *IntensityData_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_OutputDataT_double_t, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -100722,7 +100818,7 @@ fail:
 
 SWIGINTERN PyObject *ParameterDistribution_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_ParameterDistribution, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -101356,7 +101452,7 @@ fail:
 
 SWIGINTERN PyObject *ParameterPool_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_ParameterPool, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -101606,7 +101702,7 @@ fail:
 
 SWIGINTERN PyObject *ParameterSample_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_ParameterSample, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -103522,7 +103618,7 @@ fail:
 
 SWIGINTERN PyObject *ParameterSampleVector_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_std__vectorT_ParameterSample_std__allocatorT_ParameterSample_t_t, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -103960,7 +104056,7 @@ fail:
 
 SWIGINTERN PyObject *Particle_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_Particle, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -104422,7 +104518,7 @@ fail:
 
 SWIGINTERN PyObject *ParticleComposition_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_ParticleComposition, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -104750,7 +104846,7 @@ fail:
 
 SWIGINTERN PyObject *ParticleCoreShell_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_ParticleCoreShell, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -104993,7 +105089,7 @@ fail:
 
 SWIGINTERN PyObject *ParticleDistribution_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_ParticleDistribution, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -105686,7 +105782,7 @@ fail:
 
 SWIGINTERN PyObject *ParticleLayout_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_ParticleLayout, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -106082,7 +106178,7 @@ fail:
 
 SWIGINTERN PyObject *Polygon_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_Polygon, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -106922,7 +107018,7 @@ fail:
 
 SWIGINTERN PyObject *RealParameter_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_RealParameter, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -107277,7 +107373,7 @@ fail:
 
 SWIGINTERN PyObject *Rectangle_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_Rectangle, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -108373,7 +108469,7 @@ fail:
 
 SWIGINTERN PyObject *RectangularDetector_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_RectangularDetector, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -108638,7 +108734,7 @@ fail:
 
 SWIGINTERN PyObject *RectangularPixel_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_RectangularPixel, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -108833,7 +108929,7 @@ fail:
 
 SWIGINTERN PyObject *ResolutionFunction2DGaussian_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_ResolutionFunction2DGaussian, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -109480,7 +109576,7 @@ fail:
 
 SWIGINTERN PyObject *SpecularSimulation_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_SpecularSimulation, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -109729,7 +109825,7 @@ fail:
 
 SWIGINTERN PyObject *ThreadInfo_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_ThreadInfo, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -110108,7 +110204,7 @@ fail:
 
 SWIGINTERN PyObject *SampleBuilderFactoryTemp_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_IFactoryT_std__string_IMultiLayerBuilder_t, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -110187,7 +110283,7 @@ fail:
 
 SWIGINTERN PyObject *SampleBuilderFactory_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_SampleBuilderFactory, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -110556,7 +110652,7 @@ fail:
 
 SWIGINTERN PyObject *SimulationFactoryTemp_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_IFactoryT_std__string_GISASSimulation_t, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -110597,7 +110693,7 @@ fail:
 
 SWIGINTERN PyObject *SimulationFactory_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_SimulationFactory, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -110631,7 +110727,6 @@ static PyMethodDef SwigMethods[] = {
 		"SwigPyIterator___sub__(SwigPyIterator self, SwigPyIterator x) -> ptrdiff_t\n"
 		""},
 	 { (char *)"SwigPyIterator_swigregister", SwigPyIterator_swigregister, METH_VARARGS, NULL},
-	 { (char *)"SHARED_PTR_DISOWN_swigconstant", SHARED_PTR_DISOWN_swigconstant, METH_VARARGS, NULL},
 	 { (char *)"vdouble1d_t_iterator", _wrap_vdouble1d_t_iterator, METH_VARARGS, (char *)"vdouble1d_t_iterator(vdouble1d_t self) -> SwigPyIterator"},
 	 { (char *)"vdouble1d_t___nonzero__", _wrap_vdouble1d_t___nonzero__, METH_VARARGS, (char *)"vdouble1d_t___nonzero__(vdouble1d_t self) -> bool"},
 	 { (char *)"vdouble1d_t___bool__", _wrap_vdouble1d_t___bool__, METH_VARARGS, (char *)"vdouble1d_t___bool__(vdouble1d_t self) -> bool"},
@@ -113846,8 +113941,6 @@ static PyMethodDef SwigMethods[] = {
 		"Complex Bessel function Bessel_J1(x)/x. \n"
 		"\n"
 		""},
-	 { (char *)"FORWARD_FFT_swigconstant", FORWARD_FFT_swigconstant, METH_VARARGS, NULL},
-	 { (char *)"BACKWARD_FFT_swigconstant", BACKWARD_FFT_swigconstant, METH_VARARGS, NULL},
 	 { (char *)"FastFourierTransform", _wrap_FastFourierTransform, METH_VARARGS, (char *)"\n"
 		"FastFourierTransform(vector_complex_t data, MathFunctions::EFFTDirection tcase) -> vector_complex_t\n"
 		"FastFourierTransform(vdouble1d_t data, MathFunctions::EFFTDirection tcase) -> vector_complex_t\n"
@@ -122235,14 +122328,6 @@ static PyMethodDef SwigMethods[] = {
 		"Returns the name of material. \n"
 		"\n"
 		""},
-	 { (char *)"Material_dataType", _wrap_Material_dataType, METH_VARARGS, (char *)"\n"
-		"Material_dataType(Material self) -> size_t\n"
-		"\n"
-		"size_t Material::dataType() const\n"
-		"\n"
-		"Returns hash code of underlying material implementation. \n"
-		"\n"
-		""},
 	 { (char *)"Material_magnetization", _wrap_Material_magnetization, METH_VARARGS, (char *)"\n"
 		"Material_magnetization(Material self) -> kvector_t\n"
 		"\n"
@@ -122994,7 +123079,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { (char *)"IntensityData___iadd__", _wrap_IntensityData___iadd__, METH_VARARGS, (char *)"IntensityData___iadd__(IntensityData self, IntensityData right) -> IntensityData"},
 	 { (char *)"IntensityData___isub__", _wrap_IntensityData___isub__, METH_VARARGS, (char *)"IntensityData___isub__(IntensityData self, IntensityData right) -> IntensityData"},
-	 { (char *)"IntensityData___idiv__", _wrap_IntensityData___idiv__, METH_VARARGS, (char *)"IntensityData___idiv__(IntensityData self, IntensityData right) -> IntensityData"},
+	 { (char *)"IntensityData___itruediv__", _wrap_IntensityData___itruediv__, METH_VARARGS, (char *)"IntensityData___itruediv__(IntensityData self, IntensityData right) -> IntensityData"},
 	 { (char *)"IntensityData___imul__", _wrap_IntensityData___imul__, METH_VARARGS, (char *)"IntensityData___imul__(IntensityData self, IntensityData right) -> IntensityData"},
 	 { (char *)"IntensityData_getValue", _wrap_IntensityData_getValue, METH_VARARGS, (char *)"\n"
 		"IntensityData_getValue(IntensityData self, size_t index) -> double\n"
@@ -128663,7 +128748,6 @@ extern "C" {
     static int type_init = 0;
     if (!type_init) {
       const PyTypeObject tmp = {
-        /* PyObject header changed in Python 3 */
 #if PY_VERSION_HEX >= 0x03000000
         PyVarObject_HEAD_INIT(NULL, 0)
 #else
@@ -128895,13 +128979,13 @@ SWIG_init(void) {
   static PyGetSetDef thisown_getset_def = {
     (char *)"thisown", SwigPyBuiltin_GetterClosure, SwigPyBuiltin_SetterClosure, NULL, &thisown_getset_closure
   };
-  PyObject *metatype_args;
   PyTypeObject *builtin_pytype;
   int builtin_base_count;
   swig_type_info *builtin_basetype;
   PyObject *tuple;
   PyGetSetDescrObject *static_getset;
   PyTypeObject *metatype;
+  PyTypeObject *swigpyobject;
   SwigPyClientData *cd;
   PyObject *public_interface, *public_symbol;
   PyObject *this_descr;
@@ -128916,14 +129000,9 @@ SWIG_init(void) {
   (void)static_getset;
   (void)self;
   
-  /* metatype is used to implement static member variables. */
-  metatype_args = Py_BuildValue("(s(O){})", "SwigPyObjectType", &PyType_Type);
-  assert(metatype_args);
-  metatype = (PyTypeObject *) PyType_Type.tp_call((PyObject *) &PyType_Type, metatype_args, NULL);
+  /* Metaclass is used to implement static member variables */
+  metatype = SwigPyObjectType();
   assert(metatype);
-  Py_DECREF(metatype_args);
-  metatype->tp_setattro = (setattrofunc) &SwigPyObjectType_setattro;
-  assert(PyType_Ready(metatype) >= 0);
 #endif
   
   /* Fix SwigMethods to carry the callback ptrs when needed */
@@ -128941,13 +129020,15 @@ SWIG_init(void) {
   SWIG_InitializeModule(0);
   
 #ifdef SWIGPYTHON_BUILTIN
+  swigpyobject = SwigPyObject_TypeOnce();
+  
   SwigPyObject_stype = SWIG_MangledTypeQuery("_p_SwigPyObject");
   assert(SwigPyObject_stype);
   cd = (SwigPyClientData*) SwigPyObject_stype->clientdata;
   if (!cd) {
     SwigPyObject_stype->clientdata = &SwigPyObject_clientdata;
-    SwigPyObject_clientdata.pytype = SwigPyObject_TypeOnce();
-  } else if (SwigPyObject_TypeOnce()->tp_basicsize != cd->pytype->tp_basicsize) {
+    SwigPyObject_clientdata.pytype = swigpyobject;
+  } else if (swigpyobject->tp_basicsize != cd->pytype->tp_basicsize) {
     PyErr_SetString(PyExc_RuntimeError, "Import error: attempted to load two incompatible swig-generated modules.");
 # if PY_VERSION_HEX >= 0x03000000
     return NULL;
@@ -128978,29 +129059,32 @@ SWIG_init(void) {
   
   SWIG_InstallConstants(d,swig_const_table);
   
+  SWIG_Python_SetConstant(d, "SHARED_PTR_DISOWN",SWIG_From_int(static_cast< int >(0)));
   
   import_array();
   
-  PyDict_SetItemString(md,(char*)"cvar", SWIG_globals());
-  SWIG_addvarlink(SWIG_globals(),(char*)"major_version_number",Swig_var_major_version_number_get, Swig_var_major_version_number_set);
-  SWIG_addvarlink(SWIG_globals(),(char*)"minor_version_number",Swig_var_minor_version_number_get, Swig_var_minor_version_number_set);
-  SWIG_addvarlink(SWIG_globals(),(char*)"patch_version_number",Swig_var_patch_version_number_get, Swig_var_patch_version_number_set);
-  SWIG_addvarlink(SWIG_globals(),(char*)"nanometer",Swig_var_nanometer_get, Swig_var_nanometer_set);
-  SWIG_addvarlink(SWIG_globals(),(char*)"angstrom",Swig_var_angstrom_get, Swig_var_angstrom_set);
-  SWIG_addvarlink(SWIG_globals(),(char*)"micrometer",Swig_var_micrometer_get, Swig_var_micrometer_set);
-  SWIG_addvarlink(SWIG_globals(),(char*)"millimeter",Swig_var_millimeter_get, Swig_var_millimeter_set);
-  SWIG_addvarlink(SWIG_globals(),(char*)"meter",Swig_var_meter_get, Swig_var_meter_set);
-  SWIG_addvarlink(SWIG_globals(),(char*)"nm",Swig_var_nm_get, Swig_var_nm_set);
-  SWIG_addvarlink(SWIG_globals(),(char*)"radian",Swig_var_radian_get, Swig_var_radian_set);
-  SWIG_addvarlink(SWIG_globals(),(char*)"milliradian",Swig_var_milliradian_get, Swig_var_milliradian_set);
-  SWIG_addvarlink(SWIG_globals(),(char*)"degree",Swig_var_degree_get, Swig_var_degree_set);
-  SWIG_addvarlink(SWIG_globals(),(char*)"steradian",Swig_var_steradian_get, Swig_var_steradian_set);
-  SWIG_addvarlink(SWIG_globals(),(char*)"rad",Swig_var_rad_get, Swig_var_rad_set);
-  SWIG_addvarlink(SWIG_globals(),(char*)"mrad",Swig_var_mrad_get, Swig_var_mrad_set);
-  SWIG_addvarlink(SWIG_globals(),(char*)"sr",Swig_var_sr_get, Swig_var_sr_set);
-  SWIG_addvarlink(SWIG_globals(),(char*)"deg",Swig_var_deg_get, Swig_var_deg_set);
-  SWIG_addvarlink(SWIG_globals(),(char*)"tesla",Swig_var_tesla_get, Swig_var_tesla_set);
-  SWIG_addvarlink(SWIG_globals(),(char*)"gauss",Swig_var_gauss_get, Swig_var_gauss_set);
+  PyDict_SetItemString(md,(char *)"cvar", SWIG_globals());
+  SWIG_addvarlink(SWIG_globals(),(char *)"major_version_number",Swig_var_major_version_number_get, Swig_var_major_version_number_set);
+  SWIG_addvarlink(SWIG_globals(),(char *)"minor_version_number",Swig_var_minor_version_number_get, Swig_var_minor_version_number_set);
+  SWIG_addvarlink(SWIG_globals(),(char *)"patch_version_number",Swig_var_patch_version_number_get, Swig_var_patch_version_number_set);
+  SWIG_addvarlink(SWIG_globals(),(char *)"nanometer",Swig_var_nanometer_get, Swig_var_nanometer_set);
+  SWIG_addvarlink(SWIG_globals(),(char *)"angstrom",Swig_var_angstrom_get, Swig_var_angstrom_set);
+  SWIG_addvarlink(SWIG_globals(),(char *)"micrometer",Swig_var_micrometer_get, Swig_var_micrometer_set);
+  SWIG_addvarlink(SWIG_globals(),(char *)"millimeter",Swig_var_millimeter_get, Swig_var_millimeter_set);
+  SWIG_addvarlink(SWIG_globals(),(char *)"meter",Swig_var_meter_get, Swig_var_meter_set);
+  SWIG_addvarlink(SWIG_globals(),(char *)"nm",Swig_var_nm_get, Swig_var_nm_set);
+  SWIG_addvarlink(SWIG_globals(),(char *)"radian",Swig_var_radian_get, Swig_var_radian_set);
+  SWIG_addvarlink(SWIG_globals(),(char *)"milliradian",Swig_var_milliradian_get, Swig_var_milliradian_set);
+  SWIG_addvarlink(SWIG_globals(),(char *)"degree",Swig_var_degree_get, Swig_var_degree_set);
+  SWIG_addvarlink(SWIG_globals(),(char *)"steradian",Swig_var_steradian_get, Swig_var_steradian_set);
+  SWIG_addvarlink(SWIG_globals(),(char *)"rad",Swig_var_rad_get, Swig_var_rad_set);
+  SWIG_addvarlink(SWIG_globals(),(char *)"mrad",Swig_var_mrad_get, Swig_var_mrad_set);
+  SWIG_addvarlink(SWIG_globals(),(char *)"sr",Swig_var_sr_get, Swig_var_sr_set);
+  SWIG_addvarlink(SWIG_globals(),(char *)"deg",Swig_var_deg_get, Swig_var_deg_set);
+  SWIG_addvarlink(SWIG_globals(),(char *)"tesla",Swig_var_tesla_get, Swig_var_tesla_set);
+  SWIG_addvarlink(SWIG_globals(),(char *)"gauss",Swig_var_gauss_get, Swig_var_gauss_set);
+  SWIG_Python_SetConstant(d, "FORWARD_FFT",SWIG_From_int(static_cast< int >(MathFunctions::FORWARD_FFT)));
+  SWIG_Python_SetConstant(d, "BACKWARD_FFT",SWIG_From_int(static_cast< int >(MathFunctions::BACKWARD_FFT)));
   SWIG_Python_SetConstant(d, "IHistogram_INTEGRAL",SWIG_From_int(static_cast< int >(IHistogram::INTEGRAL)));
   SWIG_Python_SetConstant(d, "IHistogram_AVERAGE",SWIG_From_int(static_cast< int >(IHistogram::AVERAGE)));
   SWIG_Python_SetConstant(d, "IHistogram_STANDARD_ERROR",SWIG_From_int(static_cast< int >(IHistogram::STANDARD_ERROR)));
diff --git a/auto/Wrap/libBornAgainCore_wrap.h b/auto/Wrap/libBornAgainCore_wrap.h
index 4901028c873f5d1fced5d9facec601c1334ebdd8..f35447d484460d35d42d55e9f1ae676bf87eebc9 100644
--- a/auto/Wrap/libBornAgainCore_wrap.h
+++ b/auto/Wrap/libBornAgainCore_wrap.h
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 3.0.8
+ * Version 3.0.12
  *
  * This file is not intended to be easily readable and contains a number of
  * coding conventions designed to improve portability and efficiency. Do not make