From a89601aba3432f59e319d3308465e4e56cfad4f2 Mon Sep 17 00:00:00 2001
From: Dmitry Yurov <d.yurov@fz-juelich.de>
Date: Thu, 2 Nov 2017 11:31:58 +0100
Subject: [PATCH] Bindings regenerated

Redmine: #1858
---
 auto/Wrap/doxygen_core.i            | 2088 +++++++-----
 auto/Wrap/libBornAgainCore.py       | 1883 ++++++-----
 auto/Wrap/libBornAgainCore_wrap.cpp | 4871 +++++++++++++++------------
 auto/Wrap/libBornAgainCore_wrap.h   |   14 +-
 auto/Wrap/swig_runtime.h            |   31 +-
 5 files changed, 5048 insertions(+), 3839 deletions(-)

diff --git a/auto/Wrap/doxygen_core.i b/auto/Wrap/doxygen_core.i
index c90030e836e..2c1c07d8c42 100644
--- a/auto/Wrap/doxygen_core.i
+++ b/auto/Wrap/doxygen_core.i
@@ -15,7 +15,7 @@ C++ includes: AdjustMinimizerStrategy.h
 %feature("docstring")  AdjustMinimizerStrategy::AdjustMinimizerStrategy "AdjustMinimizerStrategy::AdjustMinimizerStrategy(const std::string &minimizerName, const std::string &algorithmName=\"\", const std::string &optionString=\"\")
 ";
 
-%feature("docstring")  AdjustMinimizerStrategy::clone "AdjustMinimizerStrategy * AdjustMinimizerStrategy::clone() const 
+%feature("docstring")  AdjustMinimizerStrategy::clone "AdjustMinimizerStrategy * AdjustMinimizerStrategy::clone() const
 ";
 
 %feature("docstring")  AdjustMinimizerStrategy::setMinimizer "void AdjustMinimizerStrategy::setMinimizer(const std::string &minimizerName, const std::string &algorithmName=\"\", const std::string &optionString=\"\")
@@ -38,7 +38,76 @@ C++ includes: AdjustMinimizerStrategy.h
 // File: classAsymRippleBuilder.xml
 %feature("docstring") AsymRippleBuilder "";
 
-%feature("docstring")  AsymRippleBuilder::buildSample "MultiLayer * AsymRippleBuilder::buildSample() const 
+%feature("docstring")  AsymRippleBuilder::buildSample "MultiLayer * AsymRippleBuilder::buildSample() const
+";
+
+
+// File: classBaseMaterialImpl.xml
+%feature("docstring") BaseMaterialImpl "
+
+A basic implementation for homogeneous and wavelength-independent materials. Incorporates data and methods required to handle material magnetization.
+
+C++ includes: BaseMaterialImpl.h
+";
+
+%feature("docstring")  BaseMaterialImpl::BaseMaterialImpl "BaseMaterialImpl::BaseMaterialImpl(const std::string &name, kvector_t magnetization)
+
+Constructs basic material with name and magnetization. 
+";
+
+%feature("docstring")  BaseMaterialImpl::~BaseMaterialImpl "BaseMaterialImpl::~BaseMaterialImpl()
+";
+
+%feature("docstring")  BaseMaterialImpl::clone "virtual BaseMaterialImpl* BaseMaterialImpl::clone() const =0
+
+Returns pointer to a copy of material. 
+";
+
+%feature("docstring")  BaseMaterialImpl::inverted "BaseMaterialImpl * BaseMaterialImpl::inverted() const
+
+Constructs a material with inverted magnetization. 
+";
+
+%feature("docstring")  BaseMaterialImpl::refractiveIndex "virtual complex_t BaseMaterialImpl::refractiveIndex(double wavelength) const =0
+";
+
+%feature("docstring")  BaseMaterialImpl::refractiveIndex2 "virtual complex_t BaseMaterialImpl::refractiveIndex2(double wavelength) const =0
+";
+
+%feature("docstring")  BaseMaterialImpl::isScalarMaterial "bool BaseMaterialImpl::isScalarMaterial() const
+
+Indicates whether the interaction with the material is scalar. This means that different polarization states will be diffracted equally 
+";
+
+%feature("docstring")  BaseMaterialImpl::isMagneticMaterial "bool BaseMaterialImpl::isMagneticMaterial() const
+";
+
+%feature("docstring")  BaseMaterialImpl::magnetization "kvector_t BaseMaterialImpl::magnetization() const
+
+Returns the magnetization (in A/m) 
+";
+
+%feature("docstring")  BaseMaterialImpl::materialData "virtual complex_t BaseMaterialImpl::materialData() const =0
+
+Returns underlying material data. 
+";
+
+%feature("docstring")  BaseMaterialImpl::scalarSubtrSLD "virtual complex_t BaseMaterialImpl::scalarSubtrSLD(const WavevectorInfo &wavevectors) const =0
+
+Returns (  $ \\\\pi/\\\\lambda^2 $ - sld), sld being the scattering length density. 
+";
+
+%feature("docstring")  BaseMaterialImpl::polarizedSubtrSLD "Eigen::Matrix2cd BaseMaterialImpl::polarizedSubtrSLD(const WavevectorInfo &wavevectors) const
+
+Returns (  $ \\\\pi/\\\\lambda^2 $ - sld) matrix with magnetization corrections. 
+";
+
+%feature("docstring")  BaseMaterialImpl::transformedMaterial "BaseMaterialImpl * BaseMaterialImpl::transformedMaterial(const Transform3D &transform) const
+";
+
+%feature("docstring")  BaseMaterialImpl::print "virtual void BaseMaterialImpl::print(std::ostream &ostr) const =0
+
+Prints object data. 
 ";
 
 
@@ -53,7 +122,7 @@ C++ includes: TwoDimLatticeBuilder.h
 %feature("docstring")  Basic2DLatticeBuilder::Basic2DLatticeBuilder "Basic2DLatticeBuilder::Basic2DLatticeBuilder()
 ";
 
-%feature("docstring")  Basic2DLatticeBuilder::buildSample "MultiLayer * Basic2DLatticeBuilder::buildSample() const 
+%feature("docstring")  Basic2DLatticeBuilder::buildSample "MultiLayer * Basic2DLatticeBuilder::buildSample() const
 ";
 
 
@@ -71,7 +140,7 @@ C++ includes: ParaCrystalBuilder.h
 %feature("docstring")  Basic2DParaCrystalBuilder::~Basic2DParaCrystalBuilder "Basic2DParaCrystalBuilder::~Basic2DParaCrystalBuilder()
 ";
 
-%feature("docstring")  Basic2DParaCrystalBuilder::buildSample "MultiLayer * Basic2DParaCrystalBuilder::buildSample() const 
+%feature("docstring")  Basic2DParaCrystalBuilder::buildSample "MultiLayer * Basic2DParaCrystalBuilder::buildSample() const
 ";
 
 %feature("docstring")  Basic2DParaCrystalBuilder::createSample "MultiLayer * Basic2DParaCrystalBuilder::createSample(size_t index=0)
@@ -87,7 +156,7 @@ C++ includes: ParaCrystalBuilder.h
 %feature("docstring")  BasicLattice::BasicLattice "BasicLattice::BasicLattice(double length1, double length2, double angle, double rotation_angle=0.0)
 ";
 
-%feature("docstring")  BasicLattice::clone "BasicLattice * BasicLattice::clone() const 
+%feature("docstring")  BasicLattice::clone "BasicLattice * BasicLattice::clone() const
 ";
 
 %feature("docstring")  BasicLattice::accept "void BasicLattice::accept(INodeVisitor *visitor) const final
@@ -95,16 +164,16 @@ C++ includes: ParaCrystalBuilder.h
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  BasicLattice::length1 "virtual double BasicLattice::length1() const 
+%feature("docstring")  BasicLattice::length1 "virtual double BasicLattice::length1() const
 ";
 
-%feature("docstring")  BasicLattice::length2 "virtual double BasicLattice::length2() const 
+%feature("docstring")  BasicLattice::length2 "virtual double BasicLattice::length2() const
 ";
 
-%feature("docstring")  BasicLattice::latticeAngle "virtual double BasicLattice::latticeAngle() const 
+%feature("docstring")  BasicLattice::latticeAngle "virtual double BasicLattice::latticeAngle() const
 ";
 
-%feature("docstring")  BasicLattice::unitCellArea "double BasicLattice::unitCellArea() const 
+%feature("docstring")  BasicLattice::unitCellArea "double BasicLattice::unitCellArea() const
 ";
 
 
@@ -216,14 +285,14 @@ Returns this, trivially converted to complex type.
 Returns real parts. 
 ";
 
-%feature("docstring")  BasicVector3D::dot "auto BasicVector3D< T >::dot(const BasicVector3D< U > &v) const -> decltype(this->x()*v.x())
+%feature("docstring")  BasicVector3D::dot "auto BasicVector3D< T >::dot(const BasicVector3D< U > &v) const -> decltype(this->x() *v.x())
 
 Returns dot product of vectors (antilinear in the first [=self] argument).
 
 Returns dot product of (complex) vectors (antilinear in the first [=self] argument). 
 ";
 
-%feature("docstring")  BasicVector3D::cross "auto BasicVector3D< T >::cross(const BasicVector3D< U > &v) const -> BasicVector3D< decltype(this->x()*v.x())>
+%feature("docstring")  BasicVector3D::cross "auto BasicVector3D< T >::cross(const BasicVector3D< U > &v) const -> BasicVector3D< decltype(this->x() *v.x())>
 
 Returns cross product of vectors (linear in both arguments).
 
@@ -312,18 +381,21 @@ Sets the beam intensity in neutrons/sec.
 Sets the polarization density matrix according to the given Bloch vector. 
 ";
 
+%feature("docstring")  Beam::getBlochVector "kvector_t Beam::getBlochVector() const
+";
+
 %feature("docstring")  Beam::getPolarization "Eigen::Matrix2cd Beam::getPolarization() const
 
 Returns the polarization density matrix (in spin basis along z-axis) 
 ";
 
-%feature("docstring")  Beam::getWavelength "double Beam::getWavelength() const 
+%feature("docstring")  Beam::getWavelength "double Beam::getWavelength() const
 ";
 
-%feature("docstring")  Beam::getAlpha "double Beam::getAlpha() const 
+%feature("docstring")  Beam::getAlpha "double Beam::getAlpha() const
 ";
 
-%feature("docstring")  Beam::getPhi "double Beam::getPhi() const 
+%feature("docstring")  Beam::getPhi "double Beam::getPhi() const
 ";
 
 %feature("docstring")  Beam::accept "void Beam::accept(INodeVisitor *visitor) const final
@@ -341,10 +413,10 @@ Calls the  INodeVisitor's visit method.
 %feature("docstring")  Bin1D::Bin1D "Bin1D::Bin1D(double lower, double upper)
 ";
 
-%feature("docstring")  Bin1D::getMidPoint "double Bin1D::getMidPoint() const 
+%feature("docstring")  Bin1D::getMidPoint "double Bin1D::getMidPoint() const
 ";
 
-%feature("docstring")  Bin1D::getBinSize "double Bin1D::getBinSize() const 
+%feature("docstring")  Bin1D::getBinSize "double Bin1D::getBinSize() const
 ";
 
 
@@ -367,10 +439,10 @@ C++ includes: Bin.h
 creation on  Bin1DCVector from alpha and phi bins 
 ";
 
-%feature("docstring")  Bin1DCVector::getMidPoint "cvector_t Bin1DCVector::getMidPoint() const 
+%feature("docstring")  Bin1DCVector::getMidPoint "cvector_t Bin1DCVector::getMidPoint() const
 ";
 
-%feature("docstring")  Bin1DCVector::getDelta "cvector_t Bin1DCVector::getDelta() const 
+%feature("docstring")  Bin1DCVector::getDelta "cvector_t Bin1DCVector::getDelta() const
 ";
 
 
@@ -393,10 +465,10 @@ C++ includes: Bin.h
 creation on  Bin1DKVector from alpha and phi bins 
 ";
 
-%feature("docstring")  Bin1DKVector::getMidPoint "kvector_t Bin1DKVector::getMidPoint() const 
+%feature("docstring")  Bin1DKVector::getMidPoint "kvector_t Bin1DKVector::getMidPoint() const
 ";
 
-%feature("docstring")  Bin1DKVector::getDelta "kvector_t Bin1DKVector::getDelta() const 
+%feature("docstring")  Bin1DKVector::getDelta "kvector_t Bin1DKVector::getDelta() const
 ";
 
 
@@ -446,7 +518,7 @@ C++ includes: BoxCompositionBuilder.h
 %feature("docstring")  BoxCompositionRotateXBuilder::BoxCompositionRotateXBuilder "BoxCompositionRotateXBuilder::BoxCompositionRotateXBuilder()
 ";
 
-%feature("docstring")  BoxCompositionRotateXBuilder::buildSample "MultiLayer * BoxCompositionRotateXBuilder::buildSample() const 
+%feature("docstring")  BoxCompositionRotateXBuilder::buildSample "MultiLayer * BoxCompositionRotateXBuilder::buildSample() const
 ";
 
 
@@ -461,7 +533,7 @@ C++ includes: BoxCompositionBuilder.h
 %feature("docstring")  BoxCompositionRotateYBuilder::BoxCompositionRotateYBuilder "BoxCompositionRotateYBuilder::BoxCompositionRotateYBuilder()
 ";
 
-%feature("docstring")  BoxCompositionRotateYBuilder::buildSample "MultiLayer * BoxCompositionRotateYBuilder::buildSample() const 
+%feature("docstring")  BoxCompositionRotateYBuilder::buildSample "MultiLayer * BoxCompositionRotateYBuilder::buildSample() const
 ";
 
 
@@ -476,7 +548,7 @@ C++ includes: BoxCompositionBuilder.h
 %feature("docstring")  BoxCompositionRotateZandYBuilder::BoxCompositionRotateZandYBuilder "BoxCompositionRotateZandYBuilder::BoxCompositionRotateZandYBuilder()
 ";
 
-%feature("docstring")  BoxCompositionRotateZandYBuilder::buildSample "MultiLayer * BoxCompositionRotateZandYBuilder::buildSample() const 
+%feature("docstring")  BoxCompositionRotateZandYBuilder::buildSample "MultiLayer * BoxCompositionRotateZandYBuilder::buildSample() const
 ";
 
 
@@ -491,7 +563,7 @@ C++ includes: BoxCompositionBuilder.h
 %feature("docstring")  BoxCompositionRotateZBuilder::BoxCompositionRotateZBuilder "BoxCompositionRotateZBuilder::BoxCompositionRotateZBuilder()
 ";
 
-%feature("docstring")  BoxCompositionRotateZBuilder::buildSample "MultiLayer * BoxCompositionRotateZBuilder::buildSample() const 
+%feature("docstring")  BoxCompositionRotateZBuilder::buildSample "MultiLayer * BoxCompositionRotateZBuilder::buildSample() const
 ";
 
 
@@ -506,7 +578,7 @@ C++ includes: BoxesSquareLatticeBuilder.h
 %feature("docstring")  BoxesSquareLatticeBuilder::BoxesSquareLatticeBuilder "BoxesSquareLatticeBuilder::BoxesSquareLatticeBuilder()
 ";
 
-%feature("docstring")  BoxesSquareLatticeBuilder::buildSample "MultiLayer * BoxesSquareLatticeBuilder::buildSample() const 
+%feature("docstring")  BoxesSquareLatticeBuilder::buildSample "MultiLayer * BoxesSquareLatticeBuilder::buildSample() const
 ";
 
 
@@ -521,25 +593,25 @@ C++ includes: BoxCompositionBuilder.h
 %feature("docstring")  BoxStackCompositionBuilder::BoxStackCompositionBuilder "BoxStackCompositionBuilder::BoxStackCompositionBuilder()
 ";
 
-%feature("docstring")  BoxStackCompositionBuilder::buildSample "MultiLayer * BoxStackCompositionBuilder::buildSample() const 
+%feature("docstring")  BoxStackCompositionBuilder::buildSample "MultiLayer * BoxStackCompositionBuilder::buildSample() const
 ";
 
 
-// File: structIntegratorMCMiser_1_1CallBackHolder.xml
-%feature("docstring") IntegratorMCMiser::CallBackHolder "
+// File: structIntegratorReal_1_1CallBackHolder.xml
+%feature("docstring") IntegratorReal::CallBackHolder "
 
 structure holding the object and possible extra parameters
 
-C++ includes: IntegratorMCMiser.h
+C++ includes: IntegratorReal.h
 ";
 
 
-// File: structIntegratorReal_1_1CallBackHolder.xml
-%feature("docstring") IntegratorReal::CallBackHolder "
+// File: structIntegratorMCMiser_1_1CallBackHolder.xml
+%feature("docstring") IntegratorMCMiser::CallBackHolder "
 
 structure holding the object and possible extra parameters
 
-C++ includes: IntegratorReal.h
+C++ includes: IntegratorMCMiser.h
 ";
 
 
@@ -554,7 +626,7 @@ C++ includes: TwoDimLatticeBuilder.h
 %feature("docstring")  CenteredSquareLatticeBuilder::CenteredSquareLatticeBuilder "CenteredSquareLatticeBuilder::CenteredSquareLatticeBuilder()
 ";
 
-%feature("docstring")  CenteredSquareLatticeBuilder::buildSample "MultiLayer * CenteredSquareLatticeBuilder::buildSample() const 
+%feature("docstring")  CenteredSquareLatticeBuilder::buildSample "MultiLayer * CenteredSquareLatticeBuilder::buildSample() const
 ";
 
 
@@ -602,10 +674,10 @@ C++ includes: ComputationStatus.h
 %feature("docstring")  ComputationStatus::ComputationStatus "ComputationStatus::ComputationStatus()
 ";
 
-%feature("docstring")  ComputationStatus::isCompleted "bool ComputationStatus::isCompleted() const 
+%feature("docstring")  ComputationStatus::isCompleted "bool ComputationStatus::isCompleted() const
 ";
 
-%feature("docstring")  ComputationStatus::errorMessage "std::string ComputationStatus::errorMessage() const 
+%feature("docstring")  ComputationStatus::errorMessage "std::string ComputationStatus::errorMessage() const
 ";
 
 %feature("docstring")  ComputationStatus::setRunning "void ComputationStatus::setRunning()
@@ -632,7 +704,7 @@ C++ includes: ParticleDistributionsBuilder.h
 %feature("docstring")  ConesWithLimitsDistributionBuilder::ConesWithLimitsDistributionBuilder "ConesWithLimitsDistributionBuilder::ConesWithLimitsDistributionBuilder()
 ";
 
-%feature("docstring")  ConesWithLimitsDistributionBuilder::buildSample "MultiLayer * ConesWithLimitsDistributionBuilder::buildSample() const 
+%feature("docstring")  ConesWithLimitsDistributionBuilder::buildSample "MultiLayer * ConesWithLimitsDistributionBuilder::buildSample() const
 ";
 
 
@@ -706,7 +778,7 @@ Constructor taking a 2 dimensional resolution function as argument.
 Convolve given intensities with the encapsulated resolution. 
 ";
 
-%feature("docstring")  ConvolutionDetectorResolution::clone "ConvolutionDetectorResolution * ConvolutionDetectorResolution::clone() const 
+%feature("docstring")  ConvolutionDetectorResolution::clone "ConvolutionDetectorResolution * ConvolutionDetectorResolution::clone() const
 ";
 
 %feature("docstring")  ConvolutionDetectorResolution::accept "void ConvolutionDetectorResolution::accept(INodeVisitor *visitor) const final
@@ -714,7 +786,7 @@ Convolve given intensities with the encapsulated resolution.
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  ConvolutionDetectorResolution::getResolutionFunction2D "const IResolutionFunction2D * ConvolutionDetectorResolution::getResolutionFunction2D() const 
+%feature("docstring")  ConvolutionDetectorResolution::getResolutionFunction2D "const IResolutionFunction2D * ConvolutionDetectorResolution::getResolutionFunction2D() const
 ";
 
 %feature("docstring")  ConvolutionDetectorResolution::getChildren "std::vector< const INode * > ConvolutionDetectorResolution::getChildren() const
@@ -770,7 +842,7 @@ C++ includes: CoreShellParticleBuilder.h
 %feature("docstring")  CoreShellBoxRotateZandYBuilder::CoreShellBoxRotateZandYBuilder "CoreShellBoxRotateZandYBuilder::CoreShellBoxRotateZandYBuilder()
 ";
 
-%feature("docstring")  CoreShellBoxRotateZandYBuilder::buildSample "MultiLayer * CoreShellBoxRotateZandYBuilder::buildSample() const 
+%feature("docstring")  CoreShellBoxRotateZandYBuilder::buildSample "MultiLayer * CoreShellBoxRotateZandYBuilder::buildSample() const
 ";
 
 
@@ -785,7 +857,7 @@ C++ includes: CoreShellParticleBuilder.h
 %feature("docstring")  CoreShellParticleBuilder::CoreShellParticleBuilder "CoreShellParticleBuilder::CoreShellParticleBuilder()
 ";
 
-%feature("docstring")  CoreShellParticleBuilder::buildSample "MultiLayer * CoreShellParticleBuilder::buildSample() const 
+%feature("docstring")  CoreShellParticleBuilder::buildSample "MultiLayer * CoreShellParticleBuilder::buildSample() const
 ";
 
 
@@ -800,7 +872,7 @@ C++ includes: RipplesBuilder.h
 %feature("docstring")  CosineRippleBuilder::CosineRippleBuilder "CosineRippleBuilder::CosineRippleBuilder()
 ";
 
-%feature("docstring")  CosineRippleBuilder::buildSample "MultiLayer * CosineRippleBuilder::buildSample() const 
+%feature("docstring")  CosineRippleBuilder::buildSample "MultiLayer * CosineRippleBuilder::buildSample() const
 ";
 
 
@@ -818,33 +890,33 @@ C++ includes: Crystal.h
 %feature("docstring")  Crystal::~Crystal "Crystal::~Crystal()
 ";
 
-%feature("docstring")  Crystal::clone "Crystal * Crystal::clone() const overridefinal
+%feature("docstring")  Crystal::clone "Crystal * Crystal::clone() const override final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  Crystal::accept "void Crystal::accept(INodeVisitor *visitor) const overridefinal
+%feature("docstring")  Crystal::accept "void Crystal::accept(INodeVisitor *visitor) const override final
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  Crystal::createTotalFormFactor "IFormFactor * Crystal::createTotalFormFactor(const IFormFactor &meso_crystal_form_factor, const IRotation *p_rotation, const kvector_t &translation) const overridefinal
+%feature("docstring")  Crystal::createTotalFormFactor "IFormFactor * Crystal::createTotalFormFactor(const IFormFactor &meso_crystal_form_factor, const IRotation *p_rotation, const kvector_t &translation) const override final
 
 Creates a total form factor for the mesocrystal with a specific shape and content The bulk content of the mesocrystal is encapsulated by the  IClusteredParticles object itself 
 ";
 
-%feature("docstring")  Crystal::homogeneousRegions "std::vector< HomogeneousRegion > Crystal::homogeneousRegions() const overridefinal
+%feature("docstring")  Crystal::homogeneousRegions "std::vector< HomogeneousRegion > Crystal::homogeneousRegions() const override final
 
 Creates region information with volumetric densities instead of absolute volume These densities need to be multiplied by the total mesocrystal volume 
 ";
 
-%feature("docstring")  Crystal::transformedLattice "Lattice Crystal::transformedLattice(const IRotation *p_rotation=nullptr) const 
+%feature("docstring")  Crystal::transformedLattice "Lattice Crystal::transformedLattice(const IRotation *p_rotation=nullptr) const
 ";
 
 %feature("docstring")  Crystal::setDWFactor "void Crystal::setDWFactor(double dw_factor)
 ";
 
-%feature("docstring")  Crystal::getChildren "std::vector< const INode * > Crystal::getChildren() const overridefinal
+%feature("docstring")  Crystal::getChildren "std::vector< const INode * > Crystal::getChildren() const override final
 
 Returns a vector of children (const). 
 ";
@@ -870,16 +942,16 @@ C++ includes: CumulativeValue.h
 %feature("docstring")  CumulativeValue::add "void CumulativeValue::add(double value, double weight=1.0)
 ";
 
-%feature("docstring")  CumulativeValue::getNumberOfEntries "int CumulativeValue::getNumberOfEntries() const 
+%feature("docstring")  CumulativeValue::getNumberOfEntries "int CumulativeValue::getNumberOfEntries() const
 ";
 
-%feature("docstring")  CumulativeValue::getContent "double CumulativeValue::getContent() const 
+%feature("docstring")  CumulativeValue::getContent "double CumulativeValue::getContent() const
 ";
 
-%feature("docstring")  CumulativeValue::getAverage "double CumulativeValue::getAverage() const 
+%feature("docstring")  CumulativeValue::getAverage "double CumulativeValue::getAverage() const
 ";
 
-%feature("docstring")  CumulativeValue::getRMS "double CumulativeValue::getRMS() const 
+%feature("docstring")  CumulativeValue::getRMS "double CumulativeValue::getRMS() const
 ";
 
 
@@ -924,7 +996,7 @@ clone function
 retrieve a 1d bin for the given index 
 ";
 
-%feature("docstring")  CustomBinAxis::getBinCenters "std::vector< double > CustomBinAxis::getBinCenters() const 
+%feature("docstring")  CustomBinAxis::getBinCenters "std::vector< double > CustomBinAxis::getBinCenters() const
 ";
 
 %feature("docstring")  CustomBinAxis::createClippedAxis "CustomBinAxis * CustomBinAxis::createClippedAxis(double left, double right) const
@@ -944,7 +1016,7 @@ C++ includes: CustomMorphologyBuilder.h
 %feature("docstring")  CustomMorphologyBuilder::CustomMorphologyBuilder "CustomMorphologyBuilder::CustomMorphologyBuilder()
 ";
 
-%feature("docstring")  CustomMorphologyBuilder::buildSample "MultiLayer * CustomMorphologyBuilder::buildSample() const 
+%feature("docstring")  CustomMorphologyBuilder::buildSample "MultiLayer * CustomMorphologyBuilder::buildSample() const
 ";
 
 
@@ -959,7 +1031,7 @@ C++ includes: CylindersAndPrismsBuilder.h
 %feature("docstring")  CylindersAndPrismsBuilder::CylindersAndPrismsBuilder "CylindersAndPrismsBuilder::CylindersAndPrismsBuilder()
 ";
 
-%feature("docstring")  CylindersAndPrismsBuilder::buildSample "MultiLayer * CylindersAndPrismsBuilder::buildSample() const 
+%feature("docstring")  CylindersAndPrismsBuilder::buildSample "MultiLayer * CylindersAndPrismsBuilder::buildSample() const
 ";
 
 
@@ -974,7 +1046,7 @@ C++ includes: CylindersBuilder.h
 %feature("docstring")  CylindersInBABuilder::CylindersInBABuilder "CylindersInBABuilder::CylindersInBABuilder()
 ";
 
-%feature("docstring")  CylindersInBABuilder::buildSample "MultiLayer * CylindersInBABuilder::buildSample() const 
+%feature("docstring")  CylindersInBABuilder::buildSample "MultiLayer * CylindersInBABuilder::buildSample() const
 ";
 
 
@@ -989,7 +1061,7 @@ C++ includes: CylindersBuilder.h
 %feature("docstring")  CylindersInDWBABuilder::CylindersInDWBABuilder "CylindersInDWBABuilder::CylindersInDWBABuilder()
 ";
 
-%feature("docstring")  CylindersInDWBABuilder::buildSample "MultiLayer * CylindersInDWBABuilder::buildSample() const 
+%feature("docstring")  CylindersInDWBABuilder::buildSample "MultiLayer * CylindersInDWBABuilder::buildSample() const
 ";
 
 
@@ -1004,7 +1076,7 @@ C++ includes: SizeDistributionModelsBuilder.h
 %feature("docstring")  CylindersInSSCABuilder::CylindersInSSCABuilder "CylindersInSSCABuilder::CylindersInSSCABuilder()
 ";
 
-%feature("docstring")  CylindersInSSCABuilder::buildSample "MultiLayer * CylindersInSSCABuilder::buildSample() const 
+%feature("docstring")  CylindersInSSCABuilder::buildSample "MultiLayer * CylindersInSSCABuilder::buildSample() const
 ";
 
 
@@ -1019,7 +1091,7 @@ C++ includes: ParticleDistributionsBuilder.h
 %feature("docstring")  CylindersWithSizeDistributionBuilder::CylindersWithSizeDistributionBuilder "CylindersWithSizeDistributionBuilder::CylindersWithSizeDistributionBuilder()
 ";
 
-%feature("docstring")  CylindersWithSizeDistributionBuilder::buildSample "MultiLayer * CylindersWithSizeDistributionBuilder::buildSample() const 
+%feature("docstring")  CylindersWithSizeDistributionBuilder::buildSample "MultiLayer * CylindersWithSizeDistributionBuilder::buildSample() const
 ";
 
 
@@ -1080,7 +1152,18 @@ Sets the polarization analyzer characteristics of the detector.
 
 %feature("docstring")  DetectionProperties::analyzerOperator "Eigen::Matrix2cd DetectionProperties::analyzerOperator() const
 
-Gets the polarization density matrix (in spin basis along z-axis) 
+Return the polarization density matrix (in spin basis along z-axis) 
+";
+
+%feature("docstring")  DetectionProperties::analyzerDirection "kvector_t DetectionProperties::analyzerDirection() const
+
+Retrieve the analyzer characteristics. 
+";
+
+%feature("docstring")  DetectionProperties::analyzerEfficiency "double DetectionProperties::analyzerEfficiency() const
+";
+
+%feature("docstring")  DetectionProperties::analyzerTotalTransmission "double DetectionProperties::analyzerTotalTransmission() const
 ";
 
 
@@ -1120,13 +1203,13 @@ Init the map of masks for the given detector plane.
 %feature("docstring")  DetectorMask::initMaskData "void DetectorMask::initMaskData(const OutputData< double > &data)
 ";
 
-%feature("docstring")  DetectorMask::isMasked "bool DetectorMask::isMasked(size_t index) const 
+%feature("docstring")  DetectorMask::isMasked "bool DetectorMask::isMasked(size_t index) const
 ";
 
-%feature("docstring")  DetectorMask::getMaskData "const OutputData<bool>* DetectorMask::getMaskData() const 
+%feature("docstring")  DetectorMask::getMaskData "const OutputData<bool>* DetectorMask::getMaskData() const
 ";
 
-%feature("docstring")  DetectorMask::createHistogram "Histogram2D * DetectorMask::createHistogram() const 
+%feature("docstring")  DetectorMask::createHistogram "Histogram2D * DetectorMask::createHistogram() const
 ";
 
 %feature("docstring")  DetectorMask::removeMasks "void DetectorMask::removeMasks()
@@ -1139,13 +1222,13 @@ remove all masks and return object to initial state
 returns true if has masks 
 ";
 
-%feature("docstring")  DetectorMask::numberOfMaskedChannels "int DetectorMask::numberOfMaskedChannels() const 
+%feature("docstring")  DetectorMask::numberOfMaskedChannels "int DetectorMask::numberOfMaskedChannels() const
 ";
 
-%feature("docstring")  DetectorMask::numberOfMasks "size_t DetectorMask::numberOfMasks() const 
+%feature("docstring")  DetectorMask::numberOfMasks "size_t DetectorMask::numberOfMasks() const
 ";
 
-%feature("docstring")  DetectorMask::getMaskShape "const IShape2D * DetectorMask::getMaskShape(size_t mask_index, bool &mask_value) const 
+%feature("docstring")  DetectorMask::getMaskShape "const IShape2D * DetectorMask::getMaskShape(size_t mask_index, bool &mask_value) const
 ";
 
 
@@ -1179,7 +1262,7 @@ Returns the distribution-specific probability density for value x.
 Returns the distribution-specific mean. 
 ";
 
-%feature("docstring")  DistributionCosine::getSigma "double DistributionCosine::getSigma() const 
+%feature("docstring")  DistributionCosine::getSigma "double DistributionCosine::getSigma() const
 ";
 
 %feature("docstring")  DistributionCosine::equidistantPoints "std::vector< double > DistributionCosine::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const
@@ -1228,10 +1311,10 @@ Returns the distribution-specific probability density for value x.
 Returns the distribution-specific mean. 
 ";
 
-%feature("docstring")  DistributionGate::getMin "double DistributionGate::getMin() const 
+%feature("docstring")  DistributionGate::getMin "double DistributionGate::getMin() const
 ";
 
-%feature("docstring")  DistributionGate::getMax "double DistributionGate::getMax() const 
+%feature("docstring")  DistributionGate::getMax "double DistributionGate::getMax() const
 ";
 
 %feature("docstring")  DistributionGate::equidistantPoints "std::vector< double > DistributionGate::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const
@@ -1280,7 +1363,7 @@ Returns the distribution-specific probability density for value x.
 Returns the distribution-specific mean. 
 ";
 
-%feature("docstring")  DistributionGaussian::getStdDev "double DistributionGaussian::getStdDev() const 
+%feature("docstring")  DistributionGaussian::getStdDev "double DistributionGaussian::getStdDev() const
 ";
 
 %feature("docstring")  DistributionGaussian::equidistantPoints "std::vector< double > DistributionGaussian::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const
@@ -1331,7 +1414,7 @@ get the total number of parameter value combinations (product of the individual
 set the parameter values of the simulation object to a specific combination of values, determined by the index (which must be smaller than the total number of combinations) and returns the weight associated with this combination of parameter values 
 ";
 
-%feature("docstring")  DistributionHandler::getDistributions "const DistributionHandler::Distributions_t & DistributionHandler::getDistributions() const 
+%feature("docstring")  DistributionHandler::getDistributions "const DistributionHandler::Distributions_t & DistributionHandler::getDistributions() const
 ";
 
 
@@ -1365,10 +1448,10 @@ Returns the distribution-specific probability density for value x.
 Returns the distribution-specific mean. 
 ";
 
-%feature("docstring")  DistributionLogNormal::getMedian "double DistributionLogNormal::getMedian() const 
+%feature("docstring")  DistributionLogNormal::getMedian "double DistributionLogNormal::getMedian() const
 ";
 
-%feature("docstring")  DistributionLogNormal::getScalePar "double DistributionLogNormal::getScalePar() const 
+%feature("docstring")  DistributionLogNormal::getScalePar "double DistributionLogNormal::getScalePar() const
 ";
 
 %feature("docstring")  DistributionLogNormal::equidistantPoints "std::vector< double > DistributionLogNormal::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const
@@ -1422,7 +1505,7 @@ Returns the distribution-specific probability density for value x.
 Returns the distribution-specific mean. 
 ";
 
-%feature("docstring")  DistributionLorentz::getHWHM "double DistributionLorentz::getHWHM() const 
+%feature("docstring")  DistributionLorentz::getHWHM "double DistributionLorentz::getHWHM() const
 ";
 
 %feature("docstring")  DistributionLorentz::equidistantPoints "std::vector< double > DistributionLorentz::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const
@@ -1471,13 +1554,13 @@ Returns the distribution-specific probability density for value x.
 Returns the distribution-specific mean. 
 ";
 
-%feature("docstring")  DistributionTrapezoid::getLeftWidth "double DistributionTrapezoid::getLeftWidth() const 
+%feature("docstring")  DistributionTrapezoid::getLeftWidth "double DistributionTrapezoid::getLeftWidth() const
 ";
 
-%feature("docstring")  DistributionTrapezoid::getMiddleWidth "double DistributionTrapezoid::getMiddleWidth() const 
+%feature("docstring")  DistributionTrapezoid::getMiddleWidth "double DistributionTrapezoid::getMiddleWidth() const
 ";
 
-%feature("docstring")  DistributionTrapezoid::getRightWidth "double DistributionTrapezoid::getRightWidth() const 
+%feature("docstring")  DistributionTrapezoid::getRightWidth "double DistributionTrapezoid::getRightWidth() const
 ";
 
 %feature("docstring")  DistributionTrapezoid::equidistantPoints "std::vector< double > DistributionTrapezoid::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const
@@ -1569,7 +1652,7 @@ theta:
 Angle of  Ellipse rotation in radians 
 ";
 
-%feature("docstring")  Ellipse::clone "Ellipse* Ellipse::clone() const 
+%feature("docstring")  Ellipse::clone "Ellipse* Ellipse::clone() const
 ";
 
 %feature("docstring")  Ellipse::contains "bool Ellipse::contains(double x, double y) const
@@ -1582,19 +1665,19 @@ Returns true if point with given coordinates is inside or on border of the shape
 Returns true if area defined by two bins is inside or on border of ellipse; more precisely, if mid point of two bins satisfy this condition. 
 ";
 
-%feature("docstring")  Ellipse::getCenterX "double Ellipse::getCenterX() const 
+%feature("docstring")  Ellipse::getCenterX "double Ellipse::getCenterX() const
 ";
 
-%feature("docstring")  Ellipse::getCenterY "double Ellipse::getCenterY() const 
+%feature("docstring")  Ellipse::getCenterY "double Ellipse::getCenterY() const
 ";
 
-%feature("docstring")  Ellipse::getRadiusX "double Ellipse::getRadiusX() const 
+%feature("docstring")  Ellipse::getRadiusX "double Ellipse::getRadiusX() const
 ";
 
-%feature("docstring")  Ellipse::getRadiusY "double Ellipse::getRadiusY() const 
+%feature("docstring")  Ellipse::getRadiusY "double Ellipse::getRadiusY() const
 ";
 
-%feature("docstring")  Ellipse::getTheta "double Ellipse::getTheta() const 
+%feature("docstring")  Ellipse::getTheta "double Ellipse::getTheta() const
 ";
 
 
@@ -1659,25 +1742,25 @@ C++ includes: FitElement.h
 %feature("docstring")  FitElement::FitElement "FitElement::FitElement(const FitElement &other)
 ";
 
-%feature("docstring")  FitElement::getIndex "size_t FitElement::getIndex() const 
+%feature("docstring")  FitElement::getIndex "size_t FitElement::getIndex() const
 ";
 
-%feature("docstring")  FitElement::getSimulValue "double FitElement::getSimulValue() const 
+%feature("docstring")  FitElement::getSimulValue "double FitElement::getSimulValue() const
 ";
 
-%feature("docstring")  FitElement::getRealValue "double FitElement::getRealValue() const 
+%feature("docstring")  FitElement::getRealValue "double FitElement::getRealValue() const
 ";
 
-%feature("docstring")  FitElement::getWeight "double FitElement::getWeight() const 
+%feature("docstring")  FitElement::getWeight "double FitElement::getWeight() const
 ";
 
-%feature("docstring")  FitElement::getSquaredDifference "double FitElement::getSquaredDifference() const 
+%feature("docstring")  FitElement::getSquaredDifference "double FitElement::getSquaredDifference() const
 ";
 
 %feature("docstring")  FitElement::setSquaredDifference "void FitElement::setSquaredDifference(double value)
 ";
 
-%feature("docstring")  FitElement::getResidual "double FitElement::getResidual() const 
+%feature("docstring")  FitElement::getResidual "double FitElement::getResidual() const
 ";
 
 %feature("docstring")  FitElement::setResidual "void FitElement::setResidual(double value)
@@ -1765,7 +1848,7 @@ Updates ChiSquared map from external vector and returns const reference to it. U
 Returns a vector of children (const). 
 ";
 
-%feature("docstring")  FitObject::getDefaultAxisUnits "std::string FitObject::getDefaultAxisUnits() const 
+%feature("docstring")  FitObject::getDefaultAxisUnits "std::string FitObject::getDefaultAxisUnits() const
 ";
 
 
@@ -1789,7 +1872,7 @@ C++ includes: FitParameter.h
 %feature("docstring")  FitParameter::~FitParameter "FitParameter::~FitParameter() final
 ";
 
-%feature("docstring")  FitParameter::clone "FitParameter * FitParameter::clone() const 
+%feature("docstring")  FitParameter::clone "FitParameter * FitParameter::clone() const
 ";
 
 %feature("docstring")  FitParameter::setValue "void FitParameter::setValue(double value) final
@@ -1812,7 +1895,7 @@ Adds real parameter to the collection.
 Adds parameters from pool which match given wildcard. 
 ";
 
-%feature("docstring")  FitParameter::patterns "std::vector< std::string > FitParameter::patterns() const 
+%feature("docstring")  FitParameter::patterns "std::vector< std::string > FitParameter::patterns() const
 ";
 
 %feature("docstring")  FitParameter::matchedParameterNames "std::vector< std::string > FitParameter::matchedParameterNames() const
@@ -1848,7 +1931,7 @@ C++ includes: FitStrategyAdjustParameters.h
 %feature("docstring")  FitStrategyAdjustParameters::~FitStrategyAdjustParameters "virtual FitStrategyAdjustParameters::~FitStrategyAdjustParameters()
 ";
 
-%feature("docstring")  FitStrategyAdjustParameters::clone "virtual FitStrategyAdjustParameters* FitStrategyAdjustParameters::clone() const 
+%feature("docstring")  FitStrategyAdjustParameters::clone "virtual FitStrategyAdjustParameters* FitStrategyAdjustParameters::clone() const
 ";
 
 %feature("docstring")  FitStrategyAdjustParameters::execute "void FitStrategyAdjustParameters::execute()
@@ -1886,7 +1969,7 @@ C++ includes: IFitStrategy.h
 %feature("docstring")  FitStrategyDefault::FitStrategyDefault "FitStrategyDefault::FitStrategyDefault()
 ";
 
-%feature("docstring")  FitStrategyDefault::clone "FitStrategyDefault * FitStrategyDefault::clone() const 
+%feature("docstring")  FitStrategyDefault::clone "FitStrategyDefault * FitStrategyDefault::clone() const
 ";
 
 %feature("docstring")  FitStrategyDefault::execute "void FitStrategyDefault::execute()
@@ -1910,7 +1993,7 @@ C++ includes: FitStrategyAdjustParameters.h
 %feature("docstring")  FitStrategyFixParameters::~FitStrategyFixParameters "virtual FitStrategyFixParameters::~FitStrategyFixParameters()
 ";
 
-%feature("docstring")  FitStrategyFixParameters::clone "virtual FitStrategyFixParameters* FitStrategyFixParameters::clone() const 
+%feature("docstring")  FitStrategyFixParameters::clone "virtual FitStrategyFixParameters* FitStrategyFixParameters::clone() const
 ";
 
 %feature("docstring")  FitStrategyFixParameters::clear "virtual void FitStrategyFixParameters::clear()
@@ -1937,7 +2020,7 @@ C++ includes: FitStrategyAdjustParameters.h
 %feature("docstring")  FitStrategyReleaseParameters::~FitStrategyReleaseParameters "virtual FitStrategyReleaseParameters::~FitStrategyReleaseParameters()
 ";
 
-%feature("docstring")  FitStrategyReleaseParameters::clone "virtual FitStrategyReleaseParameters* FitStrategyReleaseParameters::clone() const 
+%feature("docstring")  FitStrategyReleaseParameters::clone "virtual FitStrategyReleaseParameters* FitStrategyReleaseParameters::clone() const
 ";
 
 %feature("docstring")  FitStrategyReleaseParameters::clear "virtual void FitStrategyReleaseParameters::clear()
@@ -2155,13 +2238,13 @@ Returns minimum chi squared value found.
 %feature("docstring")  FitSuite::isInterrupted "bool FitSuite::isInterrupted()
 ";
 
-%feature("docstring")  FitSuite::getRealOutputData "const OutputData< double > * FitSuite::getRealOutputData(size_t i_item=0) const 
+%feature("docstring")  FitSuite::getRealOutputData "const OutputData< double > * FitSuite::getRealOutputData(size_t i_item=0) const
 ";
 
-%feature("docstring")  FitSuite::getSimulationOutputData "const OutputData< double > * FitSuite::getSimulationOutputData(size_t i_item=0) const 
+%feature("docstring")  FitSuite::getSimulationOutputData "const OutputData< double > * FitSuite::getSimulationOutputData(size_t i_item=0) const
 ";
 
-%feature("docstring")  FitSuite::getChiSquaredOutputData "const OutputData< double > * FitSuite::getChiSquaredOutputData(size_t i_item=0) const 
+%feature("docstring")  FitSuite::getChiSquaredOutputData "const OutputData< double > * FitSuite::getChiSquaredOutputData(size_t i_item=0) const
 ";
 
 %feature("docstring")  FitSuite::parametersToString "std::string FitSuite::parametersToString() const
@@ -2223,10 +2306,10 @@ evaluate method for gradients and residuals called directly from the minimizer
 evaluate residual and derivative for given data element 
 ";
 
-%feature("docstring")  FitSuiteGradientFunction::getNCallsTotal "virtual size_t FitSuiteGradientFunction::getNCallsTotal() const 
+%feature("docstring")  FitSuiteGradientFunction::getNCallsTotal "virtual size_t FitSuiteGradientFunction::getNCallsTotal() const
 ";
 
-%feature("docstring")  FitSuiteGradientFunction::getNCallsGradient "virtual size_t FitSuiteGradientFunction::getNCallsGradient() const 
+%feature("docstring")  FitSuiteGradientFunction::getNCallsGradient "virtual size_t FitSuiteGradientFunction::getNCallsGradient() const
 ";
 
 
@@ -2296,7 +2379,7 @@ Runs a single minimization round (called by FitSuiteStrategy)
 Returns reference to the kit with data. 
 ";
 
-%feature("docstring")  FitSuiteImpl::fitObjects "const FitSuiteObjects* FitSuiteImpl::fitObjects() const 
+%feature("docstring")  FitSuiteImpl::fitObjects "const FitSuiteObjects* FitSuiteImpl::fitObjects() const
 ";
 
 %feature("docstring")  FitSuiteImpl::fitParameters "FitParameterSet * FitSuiteImpl::fitParameters()
@@ -2348,10 +2431,10 @@ Sets fit options.
 %feature("docstring")  FitSuiteImpl::resetInterrupt "void FitSuiteImpl::resetInterrupt()
 ";
 
-%feature("docstring")  FitSuiteImpl::isInterrupted "bool FitSuiteImpl::isInterrupted() const 
+%feature("docstring")  FitSuiteImpl::isInterrupted "bool FitSuiteImpl::isInterrupted() const
 ";
 
-%feature("docstring")  FitSuiteImpl::kernel "const FitKernel * FitSuiteImpl::kernel() const 
+%feature("docstring")  FitSuiteImpl::kernel "const FitKernel * FitSuiteImpl::kernel() const
 ";
 
 %feature("docstring")  FitSuiteImpl::setupToString "std::string FitSuiteImpl::setupToString()
@@ -2460,7 +2543,7 @@ index accross all element in  FitElement vector
 clear all data 
 ";
 
-%feature("docstring")  FitSuiteObjects::size "size_t FitSuiteObjects::size() const 
+%feature("docstring")  FitSuiteObjects::size "size_t FitSuiteObjects::size() const
 ";
 
 %feature("docstring")  FitSuiteObjects::begin "iterator FitSuiteObjects::begin()
@@ -2474,7 +2557,7 @@ clear all data
 Returns a vector of children (const). 
 ";
 
-%feature("docstring")  FitSuiteObjects::getDefaultAxesUnits "std::string FitSuiteObjects::getDefaultAxesUnits(size_t i_item=0) const 
+%feature("docstring")  FitSuiteObjects::getDefaultAxesUnits "std::string FitSuiteObjects::getDefaultAxesUnits(size_t i_item=0) const
 ";
 
 
@@ -2524,10 +2607,10 @@ C++ includes: FitSuiteStrategies.h
 %feature("docstring")  FitSuiteStrategies::minimize "void FitSuiteStrategies::minimize()
 ";
 
-%feature("docstring")  FitSuiteStrategies::currentStrategyIndex "size_t FitSuiteStrategies::currentStrategyIndex() const 
+%feature("docstring")  FitSuiteStrategies::currentStrategyIndex "size_t FitSuiteStrategies::currentStrategyIndex() const
 ";
 
-%feature("docstring")  FitSuiteStrategies::size "size_t FitSuiteStrategies::size() const 
+%feature("docstring")  FitSuiteStrategies::size "size_t FitSuiteStrategies::size() const
 ";
 
 %feature("docstring")  FitSuiteStrategies::clear "void FitSuiteStrategies::clear()
@@ -2593,7 +2676,7 @@ Returns value of first point of axis.
 Returns value of last point of axis. 
 ";
 
-%feature("docstring")  FixedBinAxis::getBinCenter "double FixedBinAxis::getBinCenter(size_t index) const 
+%feature("docstring")  FixedBinAxis::getBinCenter "double FixedBinAxis::getBinCenter(size_t index) const
 ";
 
 %feature("docstring")  FixedBinAxis::findClosestIndex "size_t FixedBinAxis::findClosestIndex(double value) const
@@ -2601,10 +2684,10 @@ Returns value of last point of axis.
 find bin index which is best match for given value 
 ";
 
-%feature("docstring")  FixedBinAxis::getBinCenters "std::vector< double > FixedBinAxis::getBinCenters() const 
+%feature("docstring")  FixedBinAxis::getBinCenters "std::vector< double > FixedBinAxis::getBinCenters() const
 ";
 
-%feature("docstring")  FixedBinAxis::getBinBoundaries "std::vector< double > FixedBinAxis::getBinBoundaries() const 
+%feature("docstring")  FixedBinAxis::getBinBoundaries "std::vector< double > FixedBinAxis::getBinBoundaries() const
 ";
 
 %feature("docstring")  FixedBinAxis::createClippedAxis "FixedBinAxis * FixedBinAxis::createClippedAxis(double left, double right) const
@@ -2648,26 +2731,26 @@ alpha:
 dihedral angle in radians between base and facet 
 ";
 
-%feature("docstring")  FormFactorAnisoPyramid::clone "FormFactorAnisoPyramid* FormFactorAnisoPyramid::clone() const overridefinal
+%feature("docstring")  FormFactorAnisoPyramid::clone "FormFactorAnisoPyramid* FormFactorAnisoPyramid::clone() const override final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  FormFactorAnisoPyramid::accept "void FormFactorAnisoPyramid::accept(INodeVisitor *visitor) const overridefinal
+%feature("docstring")  FormFactorAnisoPyramid::accept "void FormFactorAnisoPyramid::accept(INodeVisitor *visitor) const override final
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  FormFactorAnisoPyramid::getLength "double FormFactorAnisoPyramid::getLength() const 
+%feature("docstring")  FormFactorAnisoPyramid::getLength "double FormFactorAnisoPyramid::getLength() const
 ";
 
-%feature("docstring")  FormFactorAnisoPyramid::getWidth "double FormFactorAnisoPyramid::getWidth() const 
+%feature("docstring")  FormFactorAnisoPyramid::getWidth "double FormFactorAnisoPyramid::getWidth() const
 ";
 
-%feature("docstring")  FormFactorAnisoPyramid::getHeight "double FormFactorAnisoPyramid::getHeight() const 
+%feature("docstring")  FormFactorAnisoPyramid::getHeight "double FormFactorAnisoPyramid::getHeight() const
 ";
 
-%feature("docstring")  FormFactorAnisoPyramid::getAlpha "double FormFactorAnisoPyramid::getAlpha() const 
+%feature("docstring")  FormFactorAnisoPyramid::getAlpha "double FormFactorAnisoPyramid::getAlpha() const
 ";
 
 
@@ -2696,31 +2779,31 @@ height:
 height of the box in nanometers 
 ";
 
-%feature("docstring")  FormFactorBox::clone "FormFactorBox* FormFactorBox::clone() const overridefinal
+%feature("docstring")  FormFactorBox::clone "FormFactorBox* FormFactorBox::clone() const override final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  FormFactorBox::accept "void FormFactorBox::accept(INodeVisitor *visitor) const overridefinal
+%feature("docstring")  FormFactorBox::accept "void FormFactorBox::accept(INodeVisitor *visitor) const override final
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  FormFactorBox::getLength "double FormFactorBox::getLength() const 
+%feature("docstring")  FormFactorBox::getLength "double FormFactorBox::getLength() const
 ";
 
-%feature("docstring")  FormFactorBox::getHeight "double FormFactorBox::getHeight() const 
+%feature("docstring")  FormFactorBox::getHeight "double FormFactorBox::getHeight() const
 ";
 
-%feature("docstring")  FormFactorBox::getWidth "double FormFactorBox::getWidth() const 
+%feature("docstring")  FormFactorBox::getWidth "double FormFactorBox::getWidth() const
 ";
 
-%feature("docstring")  FormFactorBox::radialExtension "double FormFactorBox::radialExtension() const overridefinal
+%feature("docstring")  FormFactorBox::radialExtension "double FormFactorBox::radialExtension() const override final
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorBox::evaluate_for_q "complex_t FormFactorBox::evaluate_for_q(cvector_t q) const overridefinal
+%feature("docstring")  FormFactorBox::evaluate_for_q "complex_t FormFactorBox::evaluate_for_q(cvector_t q) const override final
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -2743,16 +2826,16 @@ C++ includes: FormFactorCoherentPart.h
 %feature("docstring")  FormFactorCoherentPart::~FormFactorCoherentPart "FormFactorCoherentPart::~FormFactorCoherentPart()
 ";
 
-%feature("docstring")  FormFactorCoherentPart::evaluate "complex_t FormFactorCoherentPart::evaluate(const SimulationElement &sim_element) const 
+%feature("docstring")  FormFactorCoherentPart::evaluate "complex_t FormFactorCoherentPart::evaluate(const SimulationElement &sim_element) const
 ";
 
-%feature("docstring")  FormFactorCoherentPart::evaluatePol "Eigen::Matrix2cd FormFactorCoherentPart::evaluatePol(const SimulationElement &sim_element) const 
+%feature("docstring")  FormFactorCoherentPart::evaluatePol "Eigen::Matrix2cd FormFactorCoherentPart::evaluatePol(const SimulationElement &sim_element) const
 ";
 
 %feature("docstring")  FormFactorCoherentPart::setSpecularInfo "void FormFactorCoherentPart::setSpecularInfo(const IFresnelMap *p_fresnel_map, size_t layer_index)
 ";
 
-%feature("docstring")  FormFactorCoherentPart::radialExtension "double FormFactorCoherentPart::radialExtension() const 
+%feature("docstring")  FormFactorCoherentPart::radialExtension "double FormFactorCoherentPart::radialExtension() const
 ";
 
 
@@ -2770,28 +2853,28 @@ C++ includes: FormFactorCoherentSum.h
 %feature("docstring")  FormFactorCoherentSum::~FormFactorCoherentSum "FormFactorCoherentSum::~FormFactorCoherentSum()
 ";
 
-%feature("docstring")  FormFactorCoherentSum::clone "FormFactorCoherentSum * FormFactorCoherentSum::clone() const 
+%feature("docstring")  FormFactorCoherentSum::clone "FormFactorCoherentSum * FormFactorCoherentSum::clone() const
 ";
 
 %feature("docstring")  FormFactorCoherentSum::addCoherentPart "void FormFactorCoherentSum::addCoherentPart(const FormFactorCoherentPart &part)
 ";
 
-%feature("docstring")  FormFactorCoherentSum::evaluate "complex_t FormFactorCoherentSum::evaluate(const SimulationElement &sim_element) const 
+%feature("docstring")  FormFactorCoherentSum::evaluate "complex_t FormFactorCoherentSum::evaluate(const SimulationElement &sim_element) const
 ";
 
-%feature("docstring")  FormFactorCoherentSum::evaluatePol "Eigen::Matrix2cd FormFactorCoherentSum::evaluatePol(const SimulationElement &sim_element) const 
+%feature("docstring")  FormFactorCoherentSum::evaluatePol "Eigen::Matrix2cd FormFactorCoherentSum::evaluatePol(const SimulationElement &sim_element) const
 ";
 
 %feature("docstring")  FormFactorCoherentSum::setSpecularInfo "void FormFactorCoherentSum::setSpecularInfo(const IFresnelMap *p_fresnel_map, size_t layer_index)
 ";
 
-%feature("docstring")  FormFactorCoherentSum::relativeAbundance "double FormFactorCoherentSum::relativeAbundance() const 
+%feature("docstring")  FormFactorCoherentSum::relativeAbundance "double FormFactorCoherentSum::relativeAbundance() const
 ";
 
 %feature("docstring")  FormFactorCoherentSum::scaleRelativeAbundance "void FormFactorCoherentSum::scaleRelativeAbundance(double total_abundance)
 ";
 
-%feature("docstring")  FormFactorCoherentSum::radialExtension "double FormFactorCoherentSum::radialExtension() const 
+%feature("docstring")  FormFactorCoherentSum::radialExtension "double FormFactorCoherentSum::radialExtension() const
 ";
 
 
@@ -2832,31 +2915,31 @@ alpha:
 angle between the base and the side surface in radians 
 ";
 
-%feature("docstring")  FormFactorCone::clone "FormFactorCone* FormFactorCone::clone() const overridefinal
+%feature("docstring")  FormFactorCone::clone "FormFactorCone* FormFactorCone::clone() const override final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  FormFactorCone::accept "void FormFactorCone::accept(INodeVisitor *visitor) const overridefinal
+%feature("docstring")  FormFactorCone::accept "void FormFactorCone::accept(INodeVisitor *visitor) const override final
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  FormFactorCone::getHeight "double FormFactorCone::getHeight() const 
+%feature("docstring")  FormFactorCone::getHeight "double FormFactorCone::getHeight() const
 ";
 
-%feature("docstring")  FormFactorCone::getAlpha "double FormFactorCone::getAlpha() const 
+%feature("docstring")  FormFactorCone::getAlpha "double FormFactorCone::getAlpha() const
 ";
 
-%feature("docstring")  FormFactorCone::getRadius "double FormFactorCone::getRadius() const 
+%feature("docstring")  FormFactorCone::getRadius "double FormFactorCone::getRadius() const
 ";
 
-%feature("docstring")  FormFactorCone::radialExtension "double FormFactorCone::radialExtension() const overridefinal
+%feature("docstring")  FormFactorCone::radialExtension "double FormFactorCone::radialExtension() const override final
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorCone::evaluate_for_q "complex_t FormFactorCone::evaluate_for_q(cvector_t q) const overridefinal
+%feature("docstring")  FormFactorCone::evaluate_for_q "complex_t FormFactorCone::evaluate_for_q(cvector_t q) const override final
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -2887,23 +2970,23 @@ alpha:
 dihedral angle in radians between base and facet 
 ";
 
-%feature("docstring")  FormFactorCone6::clone "FormFactorCone6* FormFactorCone6::clone() const overridefinal
+%feature("docstring")  FormFactorCone6::clone "FormFactorCone6* FormFactorCone6::clone() const override final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  FormFactorCone6::accept "void FormFactorCone6::accept(INodeVisitor *visitor) const overridefinal
+%feature("docstring")  FormFactorCone6::accept "void FormFactorCone6::accept(INodeVisitor *visitor) const override final
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  FormFactorCone6::getBaseEdge "double FormFactorCone6::getBaseEdge() const 
+%feature("docstring")  FormFactorCone6::getBaseEdge "double FormFactorCone6::getBaseEdge() const
 ";
 
-%feature("docstring")  FormFactorCone6::getHeight "double FormFactorCone6::getHeight() const 
+%feature("docstring")  FormFactorCone6::getHeight "double FormFactorCone6::getHeight() const
 ";
 
-%feature("docstring")  FormFactorCone6::getAlpha "double FormFactorCone6::getAlpha() const 
+%feature("docstring")  FormFactorCone6::getAlpha "double FormFactorCone6::getAlpha() const
 ";
 
 
@@ -2920,45 +3003,45 @@ C++ includes: FormFactorCoreShell.h
 %feature("docstring")  FormFactorCoreShell::FormFactorCoreShell "FormFactorCoreShell::FormFactorCoreShell(IFormFactor *core, IFormFactor *shell)
 ";
 
-%feature("docstring")  FormFactorCoreShell::~FormFactorCoreShell "FormFactorCoreShell::~FormFactorCoreShell() overridefinal
+%feature("docstring")  FormFactorCoreShell::~FormFactorCoreShell "FormFactorCoreShell::~FormFactorCoreShell() override final
 ";
 
-%feature("docstring")  FormFactorCoreShell::clone "FormFactorCoreShell * FormFactorCoreShell::clone() const overridefinal
+%feature("docstring")  FormFactorCoreShell::clone "FormFactorCoreShell * FormFactorCoreShell::clone() const override final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  FormFactorCoreShell::accept "void FormFactorCoreShell::accept(INodeVisitor *visitor) const overridefinal
+%feature("docstring")  FormFactorCoreShell::accept "void FormFactorCoreShell::accept(INodeVisitor *visitor) const override final
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  FormFactorCoreShell::radialExtension "double FormFactorCoreShell::radialExtension() const overridefinal
+%feature("docstring")  FormFactorCoreShell::radialExtension "double FormFactorCoreShell::radialExtension() const override final
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorCoreShell::bottomZ "double FormFactorCoreShell::bottomZ(const IRotation &rotation) const overridefinal
+%feature("docstring")  FormFactorCoreShell::bottomZ "double FormFactorCoreShell::bottomZ(const IRotation &rotation) const override final
 
 Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 ";
 
-%feature("docstring")  FormFactorCoreShell::topZ "double FormFactorCoreShell::topZ(const IRotation &rotation) const overridefinal
+%feature("docstring")  FormFactorCoreShell::topZ "double FormFactorCoreShell::topZ(const IRotation &rotation) const override final
 
 Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 ";
 
-%feature("docstring")  FormFactorCoreShell::setAmbientMaterial "void FormFactorCoreShell::setAmbientMaterial(HomogeneousMaterial material) overridefinal
+%feature("docstring")  FormFactorCoreShell::setAmbientMaterial "void FormFactorCoreShell::setAmbientMaterial(Material material) override final
 
-Passes the refractive index of the ambient material in which this particle is embedded. 
+Passes the material in which this particle is embedded. 
 ";
 
-%feature("docstring")  FormFactorCoreShell::evaluate "complex_t FormFactorCoreShell::evaluate(const WavevectorInfo &wavevectors) const overridefinal
+%feature("docstring")  FormFactorCoreShell::evaluate "complex_t FormFactorCoreShell::evaluate(const WavevectorInfo &wavevectors) const override final
 
 Returns scattering amplitude for complex wavevectors ki, kf. 
 ";
 
-%feature("docstring")  FormFactorCoreShell::evaluatePol "Eigen::Matrix2cd FormFactorCoreShell::evaluatePol(const WavevectorInfo &wavevectors) const overridefinal
+%feature("docstring")  FormFactorCoreShell::evaluatePol "Eigen::Matrix2cd FormFactorCoreShell::evaluatePol(const WavevectorInfo &wavevectors) const override final
 
 Calculates and returns a polarized form factor calculation in DWBA. 
 ";
@@ -2975,30 +3058,30 @@ C++ includes: FormFactorCrystal.h
 %feature("docstring")  FormFactorCrystal::FormFactorCrystal "FormFactorCrystal::FormFactorCrystal(const Lattice &lattice, const IFormFactor &basis_form_factor, const IFormFactor &meso_form_factor)
 ";
 
-%feature("docstring")  FormFactorCrystal::~FormFactorCrystal "FormFactorCrystal::~FormFactorCrystal() overridefinal
+%feature("docstring")  FormFactorCrystal::~FormFactorCrystal "FormFactorCrystal::~FormFactorCrystal() override final
 ";
 
-%feature("docstring")  FormFactorCrystal::clone "FormFactorCrystal* FormFactorCrystal::clone() const overridefinal
+%feature("docstring")  FormFactorCrystal::clone "FormFactorCrystal* FormFactorCrystal::clone() const override final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  FormFactorCrystal::accept "void FormFactorCrystal::accept(INodeVisitor *visitor) const overridefinal
+%feature("docstring")  FormFactorCrystal::accept "void FormFactorCrystal::accept(INodeVisitor *visitor) const override final
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  FormFactorCrystal::setAmbientMaterial "void FormFactorCrystal::setAmbientMaterial(HomogeneousMaterial material) override
+%feature("docstring")  FormFactorCrystal::setAmbientMaterial "void FormFactorCrystal::setAmbientMaterial(Material material) override
 
-Passes the refractive index of the ambient material in which this particle is embedded. 
+Passes the material in which this particle is embedded. 
 ";
 
-%feature("docstring")  FormFactorCrystal::volume "double FormFactorCrystal::volume() const overridefinal
+%feature("docstring")  FormFactorCrystal::volume "double FormFactorCrystal::volume() const override final
 
 Returns the total volume of the particle of this form factor's shape. 
 ";
 
-%feature("docstring")  FormFactorCrystal::radialExtension "double FormFactorCrystal::radialExtension() const overridefinal
+%feature("docstring")  FormFactorCrystal::radialExtension "double FormFactorCrystal::radialExtension() const override final
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
@@ -3008,17 +3091,17 @@ Returns the (approximate in some cases) radial size of the particle of this form
 Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 ";
 
-%feature("docstring")  FormFactorCrystal::topZ "double FormFactorCrystal::topZ(const IRotation &rotation) const overridefinal
+%feature("docstring")  FormFactorCrystal::topZ "double FormFactorCrystal::topZ(const IRotation &rotation) const override final
 
 Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 ";
 
-%feature("docstring")  FormFactorCrystal::evaluate "complex_t FormFactorCrystal::evaluate(const WavevectorInfo &wavevectors) const overridefinal
+%feature("docstring")  FormFactorCrystal::evaluate "complex_t FormFactorCrystal::evaluate(const WavevectorInfo &wavevectors) const override final
 
 Returns scattering amplitude for complex wavevectors ki, kf. 
 ";
 
-%feature("docstring")  FormFactorCrystal::evaluatePol "Eigen::Matrix2cd FormFactorCrystal::evaluatePol(const WavevectorInfo &wavevectors) const overridefinal
+%feature("docstring")  FormFactorCrystal::evaluatePol "Eigen::Matrix2cd FormFactorCrystal::evaluatePol(const WavevectorInfo &wavevectors) const override final
 
 Returns scattering amplitude for matrix interactions. 
 ";
@@ -3052,26 +3135,26 @@ alpha:
 dihedral angle in radians between base and facet 
 ";
 
-%feature("docstring")  FormFactorCuboctahedron::clone "FormFactorCuboctahedron* FormFactorCuboctahedron::clone() const overridefinal
+%feature("docstring")  FormFactorCuboctahedron::clone "FormFactorCuboctahedron* FormFactorCuboctahedron::clone() const override final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  FormFactorCuboctahedron::accept "void FormFactorCuboctahedron::accept(INodeVisitor *visitor) const overridefinal
+%feature("docstring")  FormFactorCuboctahedron::accept "void FormFactorCuboctahedron::accept(INodeVisitor *visitor) const override final
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  FormFactorCuboctahedron::getLength "double FormFactorCuboctahedron::getLength() const 
+%feature("docstring")  FormFactorCuboctahedron::getLength "double FormFactorCuboctahedron::getLength() const
 ";
 
-%feature("docstring")  FormFactorCuboctahedron::getHeight "double FormFactorCuboctahedron::getHeight() const 
+%feature("docstring")  FormFactorCuboctahedron::getHeight "double FormFactorCuboctahedron::getHeight() const
 ";
 
-%feature("docstring")  FormFactorCuboctahedron::getHeightRatio "double FormFactorCuboctahedron::getHeightRatio() const 
+%feature("docstring")  FormFactorCuboctahedron::getHeightRatio "double FormFactorCuboctahedron::getHeightRatio() const
 ";
 
-%feature("docstring")  FormFactorCuboctahedron::getAlpha "double FormFactorCuboctahedron::getAlpha() const 
+%feature("docstring")  FormFactorCuboctahedron::getAlpha "double FormFactorCuboctahedron::getAlpha() const
 ";
 
 
@@ -3097,28 +3180,28 @@ height:
 height of the cylinder in nanometers 
 ";
 
-%feature("docstring")  FormFactorCylinder::clone "FormFactorCylinder* FormFactorCylinder::clone() const overridefinal
+%feature("docstring")  FormFactorCylinder::clone "FormFactorCylinder* FormFactorCylinder::clone() const override final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  FormFactorCylinder::accept "void FormFactorCylinder::accept(INodeVisitor *visitor) const overridefinal
+%feature("docstring")  FormFactorCylinder::accept "void FormFactorCylinder::accept(INodeVisitor *visitor) const override final
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  FormFactorCylinder::getHeight "double FormFactorCylinder::getHeight() const 
+%feature("docstring")  FormFactorCylinder::getHeight "double FormFactorCylinder::getHeight() const
 ";
 
-%feature("docstring")  FormFactorCylinder::getRadius "double FormFactorCylinder::getRadius() const 
+%feature("docstring")  FormFactorCylinder::getRadius "double FormFactorCylinder::getRadius() const
 ";
 
-%feature("docstring")  FormFactorCylinder::radialExtension "double FormFactorCylinder::radialExtension() const overridefinal
+%feature("docstring")  FormFactorCylinder::radialExtension "double FormFactorCylinder::radialExtension() const override final
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorCylinder::evaluate_for_q "complex_t FormFactorCylinder::evaluate_for_q(cvector_t q) const overridefinal
+%feature("docstring")  FormFactorCylinder::evaluate_for_q "complex_t FormFactorCylinder::evaluate_for_q(cvector_t q) const override final
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -3142,22 +3225,22 @@ Anisotropic Debye-Waller factor.
 Isotropic Debye-Waller factor. 
 ";
 
-%feature("docstring")  FormFactorDecoratorDebyeWaller::clone "FormFactorDecoratorDebyeWaller* FormFactorDecoratorDebyeWaller::clone() const overridefinal
+%feature("docstring")  FormFactorDecoratorDebyeWaller::clone "FormFactorDecoratorDebyeWaller* FormFactorDecoratorDebyeWaller::clone() const override final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  FormFactorDecoratorDebyeWaller::accept "void FormFactorDecoratorDebyeWaller::accept(INodeVisitor *visitor) const overridefinal
+%feature("docstring")  FormFactorDecoratorDebyeWaller::accept "void FormFactorDecoratorDebyeWaller::accept(INodeVisitor *visitor) const override final
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  FormFactorDecoratorDebyeWaller::evaluate "complex_t FormFactorDecoratorDebyeWaller::evaluate(const WavevectorInfo &wavevectors) const overridefinal
+%feature("docstring")  FormFactorDecoratorDebyeWaller::evaluate "complex_t FormFactorDecoratorDebyeWaller::evaluate(const WavevectorInfo &wavevectors) const override final
 
 Returns scattering amplitude for complex wavevectors ki, kf. 
 ";
 
-%feature("docstring")  FormFactorDecoratorDebyeWaller::evaluatePol "Eigen::Matrix2cd FormFactorDecoratorDebyeWaller::evaluatePol(const WavevectorInfo &wavevectors) const overridefinal
+%feature("docstring")  FormFactorDecoratorDebyeWaller::evaluatePol "Eigen::Matrix2cd FormFactorDecoratorDebyeWaller::evaluatePol(const WavevectorInfo &wavevectors) const override final
 
 Returns scattering amplitude for matrix interactions. 
 ";
@@ -3174,38 +3257,35 @@ C++ includes: FormFactorDecoratorMaterial.h
 %feature("docstring")  FormFactorDecoratorMaterial::FormFactorDecoratorMaterial "FormFactorDecoratorMaterial::FormFactorDecoratorMaterial(const IFormFactor &form_factor)
 ";
 
-%feature("docstring")  FormFactorDecoratorMaterial::~FormFactorDecoratorMaterial "FormFactorDecoratorMaterial::~FormFactorDecoratorMaterial() overridefinal
+%feature("docstring")  FormFactorDecoratorMaterial::~FormFactorDecoratorMaterial "FormFactorDecoratorMaterial::~FormFactorDecoratorMaterial() override final
 ";
 
-%feature("docstring")  FormFactorDecoratorMaterial::clone "FormFactorDecoratorMaterial * FormFactorDecoratorMaterial::clone() const overridefinal
+%feature("docstring")  FormFactorDecoratorMaterial::clone "FormFactorDecoratorMaterial * FormFactorDecoratorMaterial::clone() const override final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  FormFactorDecoratorMaterial::accept "void FormFactorDecoratorMaterial::accept(INodeVisitor *visitor) const overridefinal
+%feature("docstring")  FormFactorDecoratorMaterial::accept "void FormFactorDecoratorMaterial::accept(INodeVisitor *visitor) const override final
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  FormFactorDecoratorMaterial::setMaterial "void FormFactorDecoratorMaterial::setMaterial(HomogeneousMaterial material)
+%feature("docstring")  FormFactorDecoratorMaterial::setMaterial "void FormFactorDecoratorMaterial::setMaterial(Material material)
 
 Sets the material of the scatterer. 
 ";
 
-%feature("docstring")  FormFactorDecoratorMaterial::setAmbientMaterial "void FormFactorDecoratorMaterial::setAmbientMaterial(HomogeneousMaterial material) override
+%feature("docstring")  FormFactorDecoratorMaterial::setAmbientMaterial "void FormFactorDecoratorMaterial::setAmbientMaterial(Material material) override
 
 Sets the ambient material. 
 ";
 
-%feature("docstring")  FormFactorDecoratorMaterial::getAmbientRefractiveIndex "complex_t FormFactorDecoratorMaterial::getAmbientRefractiveIndex() const 
-";
-
 %feature("docstring")  FormFactorDecoratorMaterial::evaluate "complex_t FormFactorDecoratorMaterial::evaluate(const WavevectorInfo &wavevectors) const override
 
 Returns scattering amplitude for complex wavevectors ki, kf. 
 ";
 
-%feature("docstring")  FormFactorDecoratorMaterial::evaluatePol "Eigen::Matrix2cd FormFactorDecoratorMaterial::evaluatePol(const WavevectorInfo &wavevectors) const overridefinal
+%feature("docstring")  FormFactorDecoratorMaterial::evaluatePol "Eigen::Matrix2cd FormFactorDecoratorMaterial::evaluatePol(const WavevectorInfo &wavevectors) const override final
 
 Returns scattering amplitude for matrix interactions. 
 ";
@@ -3222,32 +3302,32 @@ C++ includes: FormFactorDecoratorPositionFactor.h
 %feature("docstring")  FormFactorDecoratorPositionFactor::FormFactorDecoratorPositionFactor "FormFactorDecoratorPositionFactor::FormFactorDecoratorPositionFactor(const IFormFactor &form_factor, const kvector_t &position)
 ";
 
-%feature("docstring")  FormFactorDecoratorPositionFactor::clone "FormFactorDecoratorPositionFactor* FormFactorDecoratorPositionFactor::clone() const overridefinal
+%feature("docstring")  FormFactorDecoratorPositionFactor::clone "FormFactorDecoratorPositionFactor* FormFactorDecoratorPositionFactor::clone() const override final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  FormFactorDecoratorPositionFactor::accept "void FormFactorDecoratorPositionFactor::accept(INodeVisitor *visitor) const overridefinal
+%feature("docstring")  FormFactorDecoratorPositionFactor::accept "void FormFactorDecoratorPositionFactor::accept(INodeVisitor *visitor) const override final
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  FormFactorDecoratorPositionFactor::bottomZ "double FormFactorDecoratorPositionFactor::bottomZ(const IRotation &rotation) const overridefinal
+%feature("docstring")  FormFactorDecoratorPositionFactor::bottomZ "double FormFactorDecoratorPositionFactor::bottomZ(const IRotation &rotation) const override final
 
 Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 ";
 
-%feature("docstring")  FormFactorDecoratorPositionFactor::topZ "double FormFactorDecoratorPositionFactor::topZ(const IRotation &rotation) const overridefinal
+%feature("docstring")  FormFactorDecoratorPositionFactor::topZ "double FormFactorDecoratorPositionFactor::topZ(const IRotation &rotation) const override final
 
 Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 ";
 
-%feature("docstring")  FormFactorDecoratorPositionFactor::evaluate "complex_t FormFactorDecoratorPositionFactor::evaluate(const WavevectorInfo &wavevectors) const overridefinal
+%feature("docstring")  FormFactorDecoratorPositionFactor::evaluate "complex_t FormFactorDecoratorPositionFactor::evaluate(const WavevectorInfo &wavevectors) const override final
 
 Returns scattering amplitude for complex wavevectors ki, kf. 
 ";
 
-%feature("docstring")  FormFactorDecoratorPositionFactor::evaluatePol "Eigen::Matrix2cd FormFactorDecoratorPositionFactor::evaluatePol(const WavevectorInfo &wavevectors) const overridefinal
+%feature("docstring")  FormFactorDecoratorPositionFactor::evaluatePol "Eigen::Matrix2cd FormFactorDecoratorPositionFactor::evaluatePol(const WavevectorInfo &wavevectors) const override final
 
 Returns scattering amplitude for matrix interactions. 
 ";
@@ -3266,32 +3346,32 @@ C++ includes: FormFactorDecoratorRotation.h
 Constructor, setting form factor and rotation. 
 ";
 
-%feature("docstring")  FormFactorDecoratorRotation::clone "FormFactorDecoratorRotation * FormFactorDecoratorRotation::clone() const overridefinal
+%feature("docstring")  FormFactorDecoratorRotation::clone "FormFactorDecoratorRotation * FormFactorDecoratorRotation::clone() const override final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  FormFactorDecoratorRotation::accept "void FormFactorDecoratorRotation::accept(INodeVisitor *visitor) const overridefinal
+%feature("docstring")  FormFactorDecoratorRotation::accept "void FormFactorDecoratorRotation::accept(INodeVisitor *visitor) const override final
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  FormFactorDecoratorRotation::bottomZ "double FormFactorDecoratorRotation::bottomZ(const IRotation &rotation) const overridefinal
+%feature("docstring")  FormFactorDecoratorRotation::bottomZ "double FormFactorDecoratorRotation::bottomZ(const IRotation &rotation) const override final
 
 Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 ";
 
-%feature("docstring")  FormFactorDecoratorRotation::topZ "double FormFactorDecoratorRotation::topZ(const IRotation &rotation) const overridefinal
+%feature("docstring")  FormFactorDecoratorRotation::topZ "double FormFactorDecoratorRotation::topZ(const IRotation &rotation) const override final
 
 Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 ";
 
-%feature("docstring")  FormFactorDecoratorRotation::evaluate "complex_t FormFactorDecoratorRotation::evaluate(const WavevectorInfo &wavevectors) const overridefinal
+%feature("docstring")  FormFactorDecoratorRotation::evaluate "complex_t FormFactorDecoratorRotation::evaluate(const WavevectorInfo &wavevectors) const override final
 
 Returns scattering amplitude for complex wavevectors ki, kf. 
 ";
 
-%feature("docstring")  FormFactorDecoratorRotation::evaluatePol "Eigen::Matrix2cd FormFactorDecoratorRotation::evaluatePol(const WavevectorInfo &wavevectors) const overridefinal
+%feature("docstring")  FormFactorDecoratorRotation::evaluatePol "Eigen::Matrix2cd FormFactorDecoratorRotation::evaluatePol(const WavevectorInfo &wavevectors) const override final
 
 Returns scattering amplitude for matrix interactions. 
 ";
@@ -3324,17 +3404,17 @@ edge:
 length of the edge in nanometers 
 ";
 
-%feature("docstring")  FormFactorDodecahedron::clone "FormFactorDodecahedron* FormFactorDodecahedron::clone() const overridefinal
+%feature("docstring")  FormFactorDodecahedron::clone "FormFactorDodecahedron* FormFactorDodecahedron::clone() const override final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  FormFactorDodecahedron::accept "void FormFactorDodecahedron::accept(INodeVisitor *visitor) const overridefinal
+%feature("docstring")  FormFactorDodecahedron::accept "void FormFactorDodecahedron::accept(INodeVisitor *visitor) const override final
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  FormFactorDodecahedron::getEdge "double FormFactorDodecahedron::getEdge() const 
+%feature("docstring")  FormFactorDodecahedron::getEdge "double FormFactorDodecahedron::getEdge() const
 ";
 
 
@@ -3349,22 +3429,22 @@ C++ includes: FormFactorDot.h
 %feature("docstring")  FormFactorDot::FormFactorDot "FormFactorDot::FormFactorDot()
 ";
 
-%feature("docstring")  FormFactorDot::clone "FormFactorDot* FormFactorDot::clone() const overridefinal
+%feature("docstring")  FormFactorDot::clone "FormFactorDot* FormFactorDot::clone() const override final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  FormFactorDot::accept "void FormFactorDot::accept(INodeVisitor *visitor) const overridefinal
+%feature("docstring")  FormFactorDot::accept "void FormFactorDot::accept(INodeVisitor *visitor) const override final
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  FormFactorDot::radialExtension "double FormFactorDot::radialExtension() const overridefinal
+%feature("docstring")  FormFactorDot::radialExtension "double FormFactorDot::radialExtension() const override final
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorDot::evaluate_for_q "complex_t FormFactorDot::evaluate_for_q(cvector_t) const overridefinal
+%feature("docstring")  FormFactorDot::evaluate_for_q "complex_t FormFactorDot::evaluate_for_q(cvector_t) const override final
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -3394,9 +3474,9 @@ Returns a clone of this  ISample object.
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  FormFactorDWBA::setAmbientMaterial "void FormFactorDWBA::setAmbientMaterial(HomogeneousMaterial material) override
+%feature("docstring")  FormFactorDWBA::setAmbientMaterial "void FormFactorDWBA::setAmbientMaterial(Material material) override
 
-Passes the refractive index of the ambient material in which this particle is embedded. 
+Passes the material in which this particle is embedded. 
 ";
 
 %feature("docstring")  FormFactorDWBA::evaluate "complex_t FormFactorDWBA::evaluate(const WavevectorInfo &wavevectors) const override
@@ -3454,9 +3534,9 @@ Returns a clone of this  ISample object.
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  FormFactorDWBAPol::setAmbientMaterial "void FormFactorDWBAPol::setAmbientMaterial(HomogeneousMaterial material) override
+%feature("docstring")  FormFactorDWBAPol::setAmbientMaterial "void FormFactorDWBAPol::setAmbientMaterial(Material material) override
 
-Passes the refractive index of the ambient material in which this particle is embedded. 
+Passes the material in which this particle is embedded. 
 ";
 
 %feature("docstring")  FormFactorDWBAPol::evaluate "complex_t FormFactorDWBAPol::evaluate(const WavevectorInfo &wavevectors) const override
@@ -3520,31 +3600,31 @@ height:
 height of the ellipsoidal cylinder in nanometers 
 ";
 
-%feature("docstring")  FormFactorEllipsoidalCylinder::clone "FormFactorEllipsoidalCylinder* FormFactorEllipsoidalCylinder::clone() const overridefinal
+%feature("docstring")  FormFactorEllipsoidalCylinder::clone "FormFactorEllipsoidalCylinder* FormFactorEllipsoidalCylinder::clone() const override final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  FormFactorEllipsoidalCylinder::accept "void FormFactorEllipsoidalCylinder::accept(INodeVisitor *visitor) const overridefinal
+%feature("docstring")  FormFactorEllipsoidalCylinder::accept "void FormFactorEllipsoidalCylinder::accept(INodeVisitor *visitor) const override final
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  FormFactorEllipsoidalCylinder::getRadiusX "double FormFactorEllipsoidalCylinder::getRadiusX() const 
+%feature("docstring")  FormFactorEllipsoidalCylinder::getRadiusX "double FormFactorEllipsoidalCylinder::getRadiusX() const
 ";
 
-%feature("docstring")  FormFactorEllipsoidalCylinder::getRadiusY "double FormFactorEllipsoidalCylinder::getRadiusY() const 
+%feature("docstring")  FormFactorEllipsoidalCylinder::getRadiusY "double FormFactorEllipsoidalCylinder::getRadiusY() const
 ";
 
-%feature("docstring")  FormFactorEllipsoidalCylinder::getHeight "double FormFactorEllipsoidalCylinder::getHeight() const 
+%feature("docstring")  FormFactorEllipsoidalCylinder::getHeight "double FormFactorEllipsoidalCylinder::getHeight() const
 ";
 
-%feature("docstring")  FormFactorEllipsoidalCylinder::radialExtension "double FormFactorEllipsoidalCylinder::radialExtension() const overridefinal
+%feature("docstring")  FormFactorEllipsoidalCylinder::radialExtension "double FormFactorEllipsoidalCylinder::radialExtension() const override final
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorEllipsoidalCylinder::evaluate_for_q "complex_t FormFactorEllipsoidalCylinder::evaluate_for_q(cvector_t q) const overridefinal
+%feature("docstring")  FormFactorEllipsoidalCylinder::evaluate_for_q "complex_t FormFactorEllipsoidalCylinder::evaluate_for_q(cvector_t q) const override final
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -3569,35 +3649,35 @@ radius:
 radius of the sphere in nanometers 
 ";
 
-%feature("docstring")  FormFactorFullSphere::clone "FormFactorFullSphere* FormFactorFullSphere::clone() const overridefinal
+%feature("docstring")  FormFactorFullSphere::clone "FormFactorFullSphere* FormFactorFullSphere::clone() const override final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  FormFactorFullSphere::accept "void FormFactorFullSphere::accept(INodeVisitor *visitor) const overridefinal
+%feature("docstring")  FormFactorFullSphere::accept "void FormFactorFullSphere::accept(INodeVisitor *visitor) const override final
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  FormFactorFullSphere::getRadius "double FormFactorFullSphere::getRadius() const 
+%feature("docstring")  FormFactorFullSphere::getRadius "double FormFactorFullSphere::getRadius() const
 ";
 
-%feature("docstring")  FormFactorFullSphere::radialExtension "double FormFactorFullSphere::radialExtension() const overridefinal
+%feature("docstring")  FormFactorFullSphere::radialExtension "double FormFactorFullSphere::radialExtension() const override final
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorFullSphere::bottomZ "double FormFactorFullSphere::bottomZ(const IRotation &rotation) const overridefinal
+%feature("docstring")  FormFactorFullSphere::bottomZ "double FormFactorFullSphere::bottomZ(const IRotation &rotation) const override final
 
 Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 ";
 
-%feature("docstring")  FormFactorFullSphere::topZ "double FormFactorFullSphere::topZ(const IRotation &rotation) const overridefinal
+%feature("docstring")  FormFactorFullSphere::topZ "double FormFactorFullSphere::topZ(const IRotation &rotation) const override final
 
 Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 ";
 
-%feature("docstring")  FormFactorFullSphere::evaluate_for_q "complex_t FormFactorFullSphere::evaluate_for_q(cvector_t q) const overridefinal
+%feature("docstring")  FormFactorFullSphere::evaluate_for_q "complex_t FormFactorFullSphere::evaluate_for_q(cvector_t q) const override final
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -3625,28 +3705,28 @@ height:
 height of the full spheroid in nanometers 
 ";
 
-%feature("docstring")  FormFactorFullSpheroid::clone "FormFactorFullSpheroid* FormFactorFullSpheroid::clone() const overridefinal
+%feature("docstring")  FormFactorFullSpheroid::clone "FormFactorFullSpheroid* FormFactorFullSpheroid::clone() const override final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  FormFactorFullSpheroid::accept "void FormFactorFullSpheroid::accept(INodeVisitor *visitor) const overridefinal
+%feature("docstring")  FormFactorFullSpheroid::accept "void FormFactorFullSpheroid::accept(INodeVisitor *visitor) const override final
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  FormFactorFullSpheroid::getHeight "double FormFactorFullSpheroid::getHeight() const 
+%feature("docstring")  FormFactorFullSpheroid::getHeight "double FormFactorFullSpheroid::getHeight() const
 ";
 
-%feature("docstring")  FormFactorFullSpheroid::getRadius "double FormFactorFullSpheroid::getRadius() const 
+%feature("docstring")  FormFactorFullSpheroid::getRadius "double FormFactorFullSpheroid::getRadius() const
 ";
 
-%feature("docstring")  FormFactorFullSpheroid::radialExtension "double FormFactorFullSpheroid::radialExtension() const overridefinal
+%feature("docstring")  FormFactorFullSpheroid::radialExtension "double FormFactorFullSpheroid::radialExtension() const override final
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorFullSpheroid::evaluate_for_q "complex_t FormFactorFullSpheroid::evaluate_for_q(cvector_t q) const overridefinal
+%feature("docstring")  FormFactorFullSpheroid::evaluate_for_q "complex_t FormFactorFullSpheroid::evaluate_for_q(cvector_t q) const override final
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -3666,28 +3746,28 @@ C++ includes: FormFactorGauss.h
 %feature("docstring")  FormFactorGauss::FormFactorGauss "FormFactorGauss::FormFactorGauss(double width, double height)
 ";
 
-%feature("docstring")  FormFactorGauss::clone "FormFactorGauss* FormFactorGauss::clone() const overridefinal
+%feature("docstring")  FormFactorGauss::clone "FormFactorGauss* FormFactorGauss::clone() const override final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  FormFactorGauss::accept "void FormFactorGauss::accept(INodeVisitor *visitor) const overridefinal
+%feature("docstring")  FormFactorGauss::accept "void FormFactorGauss::accept(INodeVisitor *visitor) const override final
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  FormFactorGauss::getWidth "double FormFactorGauss::getWidth() const 
+%feature("docstring")  FormFactorGauss::getWidth "double FormFactorGauss::getWidth() const
 ";
 
-%feature("docstring")  FormFactorGauss::getHeight "double FormFactorGauss::getHeight() const 
+%feature("docstring")  FormFactorGauss::getHeight "double FormFactorGauss::getHeight() const
 ";
 
-%feature("docstring")  FormFactorGauss::radialExtension "double FormFactorGauss::radialExtension() const overridefinal
+%feature("docstring")  FormFactorGauss::radialExtension "double FormFactorGauss::radialExtension() const override final
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorGauss::evaluate_for_q "complex_t FormFactorGauss::evaluate_for_q(cvector_t q) const overridefinal
+%feature("docstring")  FormFactorGauss::evaluate_for_q "complex_t FormFactorGauss::evaluate_for_q(cvector_t q) const override final
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -3721,31 +3801,31 @@ height of the hemi ellipsoid in nanometers
 %feature("docstring")  FormFactorHemiEllipsoid::~FormFactorHemiEllipsoid "virtual FormFactorHemiEllipsoid::~FormFactorHemiEllipsoid()
 ";
 
-%feature("docstring")  FormFactorHemiEllipsoid::clone "FormFactorHemiEllipsoid* FormFactorHemiEllipsoid::clone() const overridefinal
+%feature("docstring")  FormFactorHemiEllipsoid::clone "FormFactorHemiEllipsoid* FormFactorHemiEllipsoid::clone() const override final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  FormFactorHemiEllipsoid::accept "void FormFactorHemiEllipsoid::accept(INodeVisitor *visitor) const overridefinal
+%feature("docstring")  FormFactorHemiEllipsoid::accept "void FormFactorHemiEllipsoid::accept(INodeVisitor *visitor) const override final
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  FormFactorHemiEllipsoid::getHeight "double FormFactorHemiEllipsoid::getHeight() const 
+%feature("docstring")  FormFactorHemiEllipsoid::getHeight "double FormFactorHemiEllipsoid::getHeight() const
 ";
 
-%feature("docstring")  FormFactorHemiEllipsoid::getRadiusX "double FormFactorHemiEllipsoid::getRadiusX() const 
+%feature("docstring")  FormFactorHemiEllipsoid::getRadiusX "double FormFactorHemiEllipsoid::getRadiusX() const
 ";
 
-%feature("docstring")  FormFactorHemiEllipsoid::getRadiusY "double FormFactorHemiEllipsoid::getRadiusY() const 
+%feature("docstring")  FormFactorHemiEllipsoid::getRadiusY "double FormFactorHemiEllipsoid::getRadiusY() const
 ";
 
-%feature("docstring")  FormFactorHemiEllipsoid::radialExtension "double FormFactorHemiEllipsoid::radialExtension() const overridefinal
+%feature("docstring")  FormFactorHemiEllipsoid::radialExtension "double FormFactorHemiEllipsoid::radialExtension() const override final
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorHemiEllipsoid::evaluate_for_q "complex_t FormFactorHemiEllipsoid::evaluate_for_q(cvector_t q) const overridefinal
+%feature("docstring")  FormFactorHemiEllipsoid::evaluate_for_q "complex_t FormFactorHemiEllipsoid::evaluate_for_q(cvector_t q) const override final
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -3770,17 +3850,17 @@ edge:
 length of the edge in nanometers 
 ";
 
-%feature("docstring")  FormFactorIcosahedron::clone "FormFactorIcosahedron* FormFactorIcosahedron::clone() const overridefinal
+%feature("docstring")  FormFactorIcosahedron::clone "FormFactorIcosahedron* FormFactorIcosahedron::clone() const override final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  FormFactorIcosahedron::accept "void FormFactorIcosahedron::accept(INodeVisitor *visitor) const overridefinal
+%feature("docstring")  FormFactorIcosahedron::accept "void FormFactorIcosahedron::accept(INodeVisitor *visitor) const override final
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  FormFactorIcosahedron::getEdge "double FormFactorIcosahedron::getEdge() const 
+%feature("docstring")  FormFactorIcosahedron::getEdge "double FormFactorIcosahedron::getEdge() const
 ";
 
 
@@ -3809,31 +3889,31 @@ height:
 of  Box
 ";
 
-%feature("docstring")  FormFactorLongBoxGauss::clone "FormFactorLongBoxGauss* FormFactorLongBoxGauss::clone() const overridefinal
+%feature("docstring")  FormFactorLongBoxGauss::clone "FormFactorLongBoxGauss* FormFactorLongBoxGauss::clone() const override final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  FormFactorLongBoxGauss::accept "void FormFactorLongBoxGauss::accept(INodeVisitor *visitor) const overridefinal
+%feature("docstring")  FormFactorLongBoxGauss::accept "void FormFactorLongBoxGauss::accept(INodeVisitor *visitor) const override final
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  FormFactorLongBoxGauss::getLength "double FormFactorLongBoxGauss::getLength() const 
+%feature("docstring")  FormFactorLongBoxGauss::getLength "double FormFactorLongBoxGauss::getLength() const
 ";
 
-%feature("docstring")  FormFactorLongBoxGauss::getHeight "double FormFactorLongBoxGauss::getHeight() const 
+%feature("docstring")  FormFactorLongBoxGauss::getHeight "double FormFactorLongBoxGauss::getHeight() const
 ";
 
-%feature("docstring")  FormFactorLongBoxGauss::getWidth "double FormFactorLongBoxGauss::getWidth() const 
+%feature("docstring")  FormFactorLongBoxGauss::getWidth "double FormFactorLongBoxGauss::getWidth() const
 ";
 
-%feature("docstring")  FormFactorLongBoxGauss::radialExtension "double FormFactorLongBoxGauss::radialExtension() const overridefinal
+%feature("docstring")  FormFactorLongBoxGauss::radialExtension "double FormFactorLongBoxGauss::radialExtension() const override final
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorLongBoxGauss::evaluate_for_q "complex_t FormFactorLongBoxGauss::evaluate_for_q(cvector_t q) const overridefinal
+%feature("docstring")  FormFactorLongBoxGauss::evaluate_for_q "complex_t FormFactorLongBoxGauss::evaluate_for_q(cvector_t q) const override final
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -3864,31 +3944,31 @@ height:
 of  Box
 ";
 
-%feature("docstring")  FormFactorLongBoxLorentz::clone "FormFactorLongBoxLorentz* FormFactorLongBoxLorentz::clone() const overridefinal
+%feature("docstring")  FormFactorLongBoxLorentz::clone "FormFactorLongBoxLorentz* FormFactorLongBoxLorentz::clone() const override final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  FormFactorLongBoxLorentz::accept "void FormFactorLongBoxLorentz::accept(INodeVisitor *visitor) const overridefinal
+%feature("docstring")  FormFactorLongBoxLorentz::accept "void FormFactorLongBoxLorentz::accept(INodeVisitor *visitor) const override final
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  FormFactorLongBoxLorentz::getLength "double FormFactorLongBoxLorentz::getLength() const 
+%feature("docstring")  FormFactorLongBoxLorentz::getLength "double FormFactorLongBoxLorentz::getLength() const
 ";
 
-%feature("docstring")  FormFactorLongBoxLorentz::getHeight "double FormFactorLongBoxLorentz::getHeight() const 
+%feature("docstring")  FormFactorLongBoxLorentz::getHeight "double FormFactorLongBoxLorentz::getHeight() const
 ";
 
-%feature("docstring")  FormFactorLongBoxLorentz::getWidth "double FormFactorLongBoxLorentz::getWidth() const 
+%feature("docstring")  FormFactorLongBoxLorentz::getWidth "double FormFactorLongBoxLorentz::getWidth() const
 ";
 
-%feature("docstring")  FormFactorLongBoxLorentz::radialExtension "double FormFactorLongBoxLorentz::radialExtension() const overridefinal
+%feature("docstring")  FormFactorLongBoxLorentz::radialExtension "double FormFactorLongBoxLorentz::radialExtension() const override final
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorLongBoxLorentz::evaluate_for_q "complex_t FormFactorLongBoxLorentz::evaluate_for_q(cvector_t q) const overridefinal
+%feature("docstring")  FormFactorLongBoxLorentz::evaluate_for_q "complex_t FormFactorLongBoxLorentz::evaluate_for_q(cvector_t q) const override final
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -3919,31 +3999,31 @@ height:
 of cosine cross section 
 ";
 
-%feature("docstring")  FormFactorLongRipple1Gauss::clone "FormFactorLongRipple1Gauss* FormFactorLongRipple1Gauss::clone() const overridefinal
+%feature("docstring")  FormFactorLongRipple1Gauss::clone "FormFactorLongRipple1Gauss* FormFactorLongRipple1Gauss::clone() const override final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  FormFactorLongRipple1Gauss::accept "void FormFactorLongRipple1Gauss::accept(INodeVisitor *visitor) const overridefinal
+%feature("docstring")  FormFactorLongRipple1Gauss::accept "void FormFactorLongRipple1Gauss::accept(INodeVisitor *visitor) const override final
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  FormFactorLongRipple1Gauss::getHeight "double FormFactorLongRipple1Gauss::getHeight() const 
+%feature("docstring")  FormFactorLongRipple1Gauss::getHeight "double FormFactorLongRipple1Gauss::getHeight() const
 ";
 
-%feature("docstring")  FormFactorLongRipple1Gauss::getWidth "double FormFactorLongRipple1Gauss::getWidth() const 
+%feature("docstring")  FormFactorLongRipple1Gauss::getWidth "double FormFactorLongRipple1Gauss::getWidth() const
 ";
 
-%feature("docstring")  FormFactorLongRipple1Gauss::getLength "double FormFactorLongRipple1Gauss::getLength() const 
+%feature("docstring")  FormFactorLongRipple1Gauss::getLength "double FormFactorLongRipple1Gauss::getLength() const
 ";
 
-%feature("docstring")  FormFactorLongRipple1Gauss::radialExtension "double FormFactorLongRipple1Gauss::radialExtension() const overridefinal
+%feature("docstring")  FormFactorLongRipple1Gauss::radialExtension "double FormFactorLongRipple1Gauss::radialExtension() const override final
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorLongRipple1Gauss::evaluate_for_q "complex_t FormFactorLongRipple1Gauss::evaluate_for_q(cvector_t q) const overridefinal
+%feature("docstring")  FormFactorLongRipple1Gauss::evaluate_for_q "complex_t FormFactorLongRipple1Gauss::evaluate_for_q(cvector_t q) const override final
 
 Complex formfactor. 
 ";
@@ -3974,31 +4054,31 @@ height:
 of cosine cross section 
 ";
 
-%feature("docstring")  FormFactorLongRipple1Lorentz::clone "FormFactorLongRipple1Lorentz* FormFactorLongRipple1Lorentz::clone() const overridefinal
+%feature("docstring")  FormFactorLongRipple1Lorentz::clone "FormFactorLongRipple1Lorentz* FormFactorLongRipple1Lorentz::clone() const override final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  FormFactorLongRipple1Lorentz::accept "void FormFactorLongRipple1Lorentz::accept(INodeVisitor *visitor) const overridefinal
+%feature("docstring")  FormFactorLongRipple1Lorentz::accept "void FormFactorLongRipple1Lorentz::accept(INodeVisitor *visitor) const override final
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  FormFactorLongRipple1Lorentz::radialExtension "double FormFactorLongRipple1Lorentz::radialExtension() const overridefinal
+%feature("docstring")  FormFactorLongRipple1Lorentz::radialExtension "double FormFactorLongRipple1Lorentz::radialExtension() const override final
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorLongRipple1Lorentz::getHeight "double FormFactorLongRipple1Lorentz::getHeight() const 
+%feature("docstring")  FormFactorLongRipple1Lorentz::getHeight "double FormFactorLongRipple1Lorentz::getHeight() const
 ";
 
-%feature("docstring")  FormFactorLongRipple1Lorentz::getWidth "double FormFactorLongRipple1Lorentz::getWidth() const 
+%feature("docstring")  FormFactorLongRipple1Lorentz::getWidth "double FormFactorLongRipple1Lorentz::getWidth() const
 ";
 
-%feature("docstring")  FormFactorLongRipple1Lorentz::getLength "double FormFactorLongRipple1Lorentz::getLength() const 
+%feature("docstring")  FormFactorLongRipple1Lorentz::getLength "double FormFactorLongRipple1Lorentz::getLength() const
 ";
 
-%feature("docstring")  FormFactorLongRipple1Lorentz::evaluate_for_q "complex_t FormFactorLongRipple1Lorentz::evaluate_for_q(cvector_t q) const overridefinal
+%feature("docstring")  FormFactorLongRipple1Lorentz::evaluate_for_q "complex_t FormFactorLongRipple1Lorentz::evaluate_for_q(cvector_t q) const override final
 
 Complex formfactor. 
 ";
@@ -4032,34 +4112,34 @@ asymmetry:
 length of triangular cross section 
 ";
 
-%feature("docstring")  FormFactorLongRipple2Gauss::clone "FormFactorLongRipple2Gauss* FormFactorLongRipple2Gauss::clone() const overridefinal
+%feature("docstring")  FormFactorLongRipple2Gauss::clone "FormFactorLongRipple2Gauss* FormFactorLongRipple2Gauss::clone() const override final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  FormFactorLongRipple2Gauss::accept "void FormFactorLongRipple2Gauss::accept(INodeVisitor *visitor) const overridefinal
+%feature("docstring")  FormFactorLongRipple2Gauss::accept "void FormFactorLongRipple2Gauss::accept(INodeVisitor *visitor) const override final
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  FormFactorLongRipple2Gauss::getHeight "double FormFactorLongRipple2Gauss::getHeight() const 
+%feature("docstring")  FormFactorLongRipple2Gauss::getHeight "double FormFactorLongRipple2Gauss::getHeight() const
 ";
 
-%feature("docstring")  FormFactorLongRipple2Gauss::getWidth "double FormFactorLongRipple2Gauss::getWidth() const 
+%feature("docstring")  FormFactorLongRipple2Gauss::getWidth "double FormFactorLongRipple2Gauss::getWidth() const
 ";
 
-%feature("docstring")  FormFactorLongRipple2Gauss::getLength "double FormFactorLongRipple2Gauss::getLength() const 
+%feature("docstring")  FormFactorLongRipple2Gauss::getLength "double FormFactorLongRipple2Gauss::getLength() const
 ";
 
-%feature("docstring")  FormFactorLongRipple2Gauss::getAsymmetry "double FormFactorLongRipple2Gauss::getAsymmetry() const 
+%feature("docstring")  FormFactorLongRipple2Gauss::getAsymmetry "double FormFactorLongRipple2Gauss::getAsymmetry() const
 ";
 
-%feature("docstring")  FormFactorLongRipple2Gauss::radialExtension "double FormFactorLongRipple2Gauss::radialExtension() const overridefinal
+%feature("docstring")  FormFactorLongRipple2Gauss::radialExtension "double FormFactorLongRipple2Gauss::radialExtension() const override final
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorLongRipple2Gauss::evaluate_for_q "complex_t FormFactorLongRipple2Gauss::evaluate_for_q(cvector_t q) const overridefinal
+%feature("docstring")  FormFactorLongRipple2Gauss::evaluate_for_q "complex_t FormFactorLongRipple2Gauss::evaluate_for_q(cvector_t q) const override final
 
 Complex formfactor. 
 ";
@@ -4091,34 +4171,34 @@ asymmetry:
 length of triangular cross section 
 ";
 
-%feature("docstring")  FormFactorLongRipple2Lorentz::clone "FormFactorLongRipple2Lorentz* FormFactorLongRipple2Lorentz::clone() const overridefinal
+%feature("docstring")  FormFactorLongRipple2Lorentz::clone "FormFactorLongRipple2Lorentz* FormFactorLongRipple2Lorentz::clone() const override final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  FormFactorLongRipple2Lorentz::accept "void FormFactorLongRipple2Lorentz::accept(INodeVisitor *visitor) const overridefinal
+%feature("docstring")  FormFactorLongRipple2Lorentz::accept "void FormFactorLongRipple2Lorentz::accept(INodeVisitor *visitor) const override final
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  FormFactorLongRipple2Lorentz::getHeight "double FormFactorLongRipple2Lorentz::getHeight() const 
+%feature("docstring")  FormFactorLongRipple2Lorentz::getHeight "double FormFactorLongRipple2Lorentz::getHeight() const
 ";
 
-%feature("docstring")  FormFactorLongRipple2Lorentz::getWidth "double FormFactorLongRipple2Lorentz::getWidth() const 
+%feature("docstring")  FormFactorLongRipple2Lorentz::getWidth "double FormFactorLongRipple2Lorentz::getWidth() const
 ";
 
-%feature("docstring")  FormFactorLongRipple2Lorentz::getLength "double FormFactorLongRipple2Lorentz::getLength() const 
+%feature("docstring")  FormFactorLongRipple2Lorentz::getLength "double FormFactorLongRipple2Lorentz::getLength() const
 ";
 
-%feature("docstring")  FormFactorLongRipple2Lorentz::getAsymmetry "double FormFactorLongRipple2Lorentz::getAsymmetry() const 
+%feature("docstring")  FormFactorLongRipple2Lorentz::getAsymmetry "double FormFactorLongRipple2Lorentz::getAsymmetry() const
 ";
 
-%feature("docstring")  FormFactorLongRipple2Lorentz::radialExtension "double FormFactorLongRipple2Lorentz::radialExtension() const overridefinal
+%feature("docstring")  FormFactorLongRipple2Lorentz::radialExtension "double FormFactorLongRipple2Lorentz::radialExtension() const override final
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorLongRipple2Lorentz::evaluate_for_q "complex_t FormFactorLongRipple2Lorentz::evaluate_for_q(cvector_t q) const overridefinal
+%feature("docstring")  FormFactorLongRipple2Lorentz::evaluate_for_q "complex_t FormFactorLongRipple2Lorentz::evaluate_for_q(cvector_t q) const override final
 
 Complex formfactor. 
 ";
@@ -4138,28 +4218,28 @@ C++ includes: FormFactorLorentz.h
 %feature("docstring")  FormFactorLorentz::FormFactorLorentz "FormFactorLorentz::FormFactorLorentz(double width, double height)
 ";
 
-%feature("docstring")  FormFactorLorentz::clone "FormFactorLorentz* FormFactorLorentz::clone() const overridefinal
+%feature("docstring")  FormFactorLorentz::clone "FormFactorLorentz* FormFactorLorentz::clone() const override final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  FormFactorLorentz::accept "void FormFactorLorentz::accept(INodeVisitor *visitor) const overridefinal
+%feature("docstring")  FormFactorLorentz::accept "void FormFactorLorentz::accept(INodeVisitor *visitor) const override final
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  FormFactorLorentz::getWidth "double FormFactorLorentz::getWidth() const 
+%feature("docstring")  FormFactorLorentz::getWidth "double FormFactorLorentz::getWidth() const
 ";
 
-%feature("docstring")  FormFactorLorentz::getHeight "double FormFactorLorentz::getHeight() const 
+%feature("docstring")  FormFactorLorentz::getHeight "double FormFactorLorentz::getHeight() const
 ";
 
-%feature("docstring")  FormFactorLorentz::radialExtension "double FormFactorLorentz::radialExtension() const overridefinal
+%feature("docstring")  FormFactorLorentz::radialExtension "double FormFactorLorentz::radialExtension() const override final
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorLorentz::evaluate_for_q "complex_t FormFactorLorentz::evaluate_for_q(cvector_t q) const overridefinal
+%feature("docstring")  FormFactorLorentz::evaluate_for_q "complex_t FormFactorLorentz::evaluate_for_q(cvector_t q) const override final
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -4176,20 +4256,20 @@ C++ includes: FormFactorPolyhedron.h
 %feature("docstring")  FormFactorPolygonalPrism::FormFactorPolygonalPrism "FormFactorPolygonalPrism::FormFactorPolygonalPrism(double height)
 ";
 
-%feature("docstring")  FormFactorPolygonalPrism::evaluate_for_q "complex_t FormFactorPolygonalPrism::evaluate_for_q(cvector_t q) const overridefinal
+%feature("docstring")  FormFactorPolygonalPrism::evaluate_for_q "complex_t FormFactorPolygonalPrism::evaluate_for_q(cvector_t q) const override final
 
 Returns the form factor F(q) of this polyhedron, respecting the offset height/2. 
 ";
 
-%feature("docstring")  FormFactorPolygonalPrism::volume "double FormFactorPolygonalPrism::volume() const overridefinal
+%feature("docstring")  FormFactorPolygonalPrism::volume "double FormFactorPolygonalPrism::volume() const override final
 
 Returns the volume of this prism. 
 ";
 
-%feature("docstring")  FormFactorPolygonalPrism::getHeight "double FormFactorPolygonalPrism::getHeight() const 
+%feature("docstring")  FormFactorPolygonalPrism::getHeight "double FormFactorPolygonalPrism::getHeight() const
 ";
 
-%feature("docstring")  FormFactorPolygonalPrism::radialExtension "double FormFactorPolygonalPrism::radialExtension() const overridefinal
+%feature("docstring")  FormFactorPolygonalPrism::radialExtension "double FormFactorPolygonalPrism::radialExtension() const override final
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
@@ -4206,7 +4286,7 @@ C++ includes: FormFactorPolyhedron.h
 %feature("docstring")  FormFactorPolygonalSurface::FormFactorPolygonalSurface "FormFactorPolygonalSurface::FormFactorPolygonalSurface()
 ";
 
-%feature("docstring")  FormFactorPolygonalSurface::evaluate_for_q "complex_t FormFactorPolygonalSurface::evaluate_for_q(cvector_t q) const overridefinal
+%feature("docstring")  FormFactorPolygonalSurface::evaluate_for_q "complex_t FormFactorPolygonalSurface::evaluate_for_q(cvector_t q) const override final
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -4216,7 +4296,7 @@ Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This m
 Returns the total volume of the particle of this form factor's shape. 
 ";
 
-%feature("docstring")  FormFactorPolygonalSurface::radialExtension "double FormFactorPolygonalSurface::radialExtension() const overridefinal
+%feature("docstring")  FormFactorPolygonalSurface::radialExtension "double FormFactorPolygonalSurface::radialExtension() const override final
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
@@ -4233,7 +4313,7 @@ C++ includes: FormFactorPolyhedron.h
 %feature("docstring")  FormFactorPolyhedron::FormFactorPolyhedron "FormFactorPolyhedron::FormFactorPolyhedron()
 ";
 
-%feature("docstring")  FormFactorPolyhedron::evaluate_for_q "complex_t FormFactorPolyhedron::evaluate_for_q(cvector_t q) const overridefinal
+%feature("docstring")  FormFactorPolyhedron::evaluate_for_q "complex_t FormFactorPolyhedron::evaluate_for_q(cvector_t q) const override final
 
 Returns the form factor F(q) of this polyhedron, respecting the offset z_origin. 
 ";
@@ -4243,12 +4323,12 @@ Returns the form factor F(q) of this polyhedron, respecting the offset z_origin.
 Returns the form factor F(q) of this polyhedron, with origin at z=0. 
 ";
 
-%feature("docstring")  FormFactorPolyhedron::volume "double FormFactorPolyhedron::volume() const overridefinal
+%feature("docstring")  FormFactorPolyhedron::volume "double FormFactorPolyhedron::volume() const override final
 
 Returns the total volume of the particle of this form factor's shape. 
 ";
 
-%feature("docstring")  FormFactorPolyhedron::radialExtension "double FormFactorPolyhedron::radialExtension() const overridefinal
+%feature("docstring")  FormFactorPolyhedron::radialExtension "double FormFactorPolyhedron::radialExtension() const override final
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
@@ -4281,17 +4361,17 @@ height:
 height in nanometers 
 ";
 
-%feature("docstring")  FormFactorPrism3::clone "FormFactorPrism3* FormFactorPrism3::clone() const overridefinal
+%feature("docstring")  FormFactorPrism3::clone "FormFactorPrism3* FormFactorPrism3::clone() const override final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  FormFactorPrism3::accept "void FormFactorPrism3::accept(INodeVisitor *visitor) const overridefinal
+%feature("docstring")  FormFactorPrism3::accept "void FormFactorPrism3::accept(INodeVisitor *visitor) const override final
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  FormFactorPrism3::getBaseEdge "double FormFactorPrism3::getBaseEdge() const 
+%feature("docstring")  FormFactorPrism3::getBaseEdge "double FormFactorPrism3::getBaseEdge() const
 ";
 
 
@@ -4317,17 +4397,17 @@ height:
 height in nanometers 
 ";
 
-%feature("docstring")  FormFactorPrism6::clone "FormFactorPrism6* FormFactorPrism6::clone() const overridefinal
+%feature("docstring")  FormFactorPrism6::clone "FormFactorPrism6* FormFactorPrism6::clone() const override final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  FormFactorPrism6::accept "void FormFactorPrism6::accept(INodeVisitor *visitor) const overridefinal
+%feature("docstring")  FormFactorPrism6::accept "void FormFactorPrism6::accept(INodeVisitor *visitor) const override final
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  FormFactorPrism6::getBaseEdge "double FormFactorPrism6::getBaseEdge() const 
+%feature("docstring")  FormFactorPrism6::getBaseEdge "double FormFactorPrism6::getBaseEdge() const
 ";
 
 
@@ -4356,23 +4436,23 @@ alpha:
 dihedral angle between the base and a side face in radians 
 ";
 
-%feature("docstring")  FormFactorPyramid::clone "FormFactorPyramid* FormFactorPyramid::clone() const overridefinal
+%feature("docstring")  FormFactorPyramid::clone "FormFactorPyramid* FormFactorPyramid::clone() const override final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  FormFactorPyramid::accept "void FormFactorPyramid::accept(INodeVisitor *visitor) const overridefinal
+%feature("docstring")  FormFactorPyramid::accept "void FormFactorPyramid::accept(INodeVisitor *visitor) const override final
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  FormFactorPyramid::getHeight "double FormFactorPyramid::getHeight() const 
+%feature("docstring")  FormFactorPyramid::getHeight "double FormFactorPyramid::getHeight() const
 ";
 
-%feature("docstring")  FormFactorPyramid::getBaseEdge "double FormFactorPyramid::getBaseEdge() const 
+%feature("docstring")  FormFactorPyramid::getBaseEdge "double FormFactorPyramid::getBaseEdge() const
 ";
 
-%feature("docstring")  FormFactorPyramid::getAlpha "double FormFactorPyramid::getAlpha() const 
+%feature("docstring")  FormFactorPyramid::getAlpha "double FormFactorPyramid::getAlpha() const
 ";
 
 
@@ -4401,31 +4481,31 @@ height:
 height of the ripple in nanometers 
 ";
 
-%feature("docstring")  FormFactorRipple1::clone "FormFactorRipple1* FormFactorRipple1::clone() const overridefinal
+%feature("docstring")  FormFactorRipple1::clone "FormFactorRipple1* FormFactorRipple1::clone() const override final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  FormFactorRipple1::accept "void FormFactorRipple1::accept(INodeVisitor *visitor) const overridefinal
+%feature("docstring")  FormFactorRipple1::accept "void FormFactorRipple1::accept(INodeVisitor *visitor) const override final
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  FormFactorRipple1::getLength "double FormFactorRipple1::getLength() const 
+%feature("docstring")  FormFactorRipple1::getLength "double FormFactorRipple1::getLength() const
 ";
 
-%feature("docstring")  FormFactorRipple1::getHeight "double FormFactorRipple1::getHeight() const 
+%feature("docstring")  FormFactorRipple1::getHeight "double FormFactorRipple1::getHeight() const
 ";
 
-%feature("docstring")  FormFactorRipple1::getWidth "double FormFactorRipple1::getWidth() const 
+%feature("docstring")  FormFactorRipple1::getWidth "double FormFactorRipple1::getWidth() const
 ";
 
-%feature("docstring")  FormFactorRipple1::radialExtension "double FormFactorRipple1::radialExtension() const overridefinal
+%feature("docstring")  FormFactorRipple1::radialExtension "double FormFactorRipple1::radialExtension() const override final
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorRipple1::evaluate_for_q "complex_t FormFactorRipple1::evaluate_for_q(cvector_t q) const overridefinal
+%feature("docstring")  FormFactorRipple1::evaluate_for_q "complex_t FormFactorRipple1::evaluate_for_q(cvector_t q) const override final
 
 Complex formfactor. 
 ";
@@ -4459,34 +4539,34 @@ asymmetry:
 asymmetry length of the triangular profile in nanometers 
 ";
 
-%feature("docstring")  FormFactorRipple2::clone "FormFactorRipple2* FormFactorRipple2::clone() const overridefinal
+%feature("docstring")  FormFactorRipple2::clone "FormFactorRipple2* FormFactorRipple2::clone() const override final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  FormFactorRipple2::accept "void FormFactorRipple2::accept(INodeVisitor *visitor) const overridefinal
+%feature("docstring")  FormFactorRipple2::accept "void FormFactorRipple2::accept(INodeVisitor *visitor) const override final
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  FormFactorRipple2::getHeight "double FormFactorRipple2::getHeight() const 
+%feature("docstring")  FormFactorRipple2::getHeight "double FormFactorRipple2::getHeight() const
 ";
 
-%feature("docstring")  FormFactorRipple2::getWidth "double FormFactorRipple2::getWidth() const 
+%feature("docstring")  FormFactorRipple2::getWidth "double FormFactorRipple2::getWidth() const
 ";
 
-%feature("docstring")  FormFactorRipple2::getLength "double FormFactorRipple2::getLength() const 
+%feature("docstring")  FormFactorRipple2::getLength "double FormFactorRipple2::getLength() const
 ";
 
-%feature("docstring")  FormFactorRipple2::getAsymmetry "double FormFactorRipple2::getAsymmetry() const 
+%feature("docstring")  FormFactorRipple2::getAsymmetry "double FormFactorRipple2::getAsymmetry() const
 ";
 
-%feature("docstring")  FormFactorRipple2::radialExtension "double FormFactorRipple2::radialExtension() const overridefinal
+%feature("docstring")  FormFactorRipple2::radialExtension "double FormFactorRipple2::radialExtension() const override final
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorRipple2::evaluate_for_q "complex_t FormFactorRipple2::evaluate_for_q(cvector_t q) const overridefinal
+%feature("docstring")  FormFactorRipple2::evaluate_for_q "complex_t FormFactorRipple2::evaluate_for_q(cvector_t q) const override final
 
 Complex formfactor. 
 ";
@@ -4503,22 +4583,22 @@ C++ includes: FormFactorSphereGaussianRadius.h
 %feature("docstring")  FormFactorSphereGaussianRadius::FormFactorSphereGaussianRadius "FormFactorSphereGaussianRadius::FormFactorSphereGaussianRadius(double mean, double sigma)
 ";
 
-%feature("docstring")  FormFactorSphereGaussianRadius::clone "FormFactorSphereGaussianRadius* FormFactorSphereGaussianRadius::clone() const overridefinal
+%feature("docstring")  FormFactorSphereGaussianRadius::clone "FormFactorSphereGaussianRadius* FormFactorSphereGaussianRadius::clone() const override final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  FormFactorSphereGaussianRadius::accept "void FormFactorSphereGaussianRadius::accept(INodeVisitor *visitor) const overridefinal
+%feature("docstring")  FormFactorSphereGaussianRadius::accept "void FormFactorSphereGaussianRadius::accept(INodeVisitor *visitor) const override final
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  FormFactorSphereGaussianRadius::radialExtension "double FormFactorSphereGaussianRadius::radialExtension() const overridefinal
+%feature("docstring")  FormFactorSphereGaussianRadius::radialExtension "double FormFactorSphereGaussianRadius::radialExtension() const override final
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorSphereGaussianRadius::evaluate_for_q "complex_t FormFactorSphereGaussianRadius::evaluate_for_q(cvector_t q) const overridefinal
+%feature("docstring")  FormFactorSphereGaussianRadius::evaluate_for_q "complex_t FormFactorSphereGaussianRadius::evaluate_for_q(cvector_t q) const override final
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -4535,22 +4615,22 @@ C++ includes: FormFactorSphereLogNormalRadius.h
 %feature("docstring")  FormFactorSphereLogNormalRadius::FormFactorSphereLogNormalRadius "FormFactorSphereLogNormalRadius::FormFactorSphereLogNormalRadius(double mean, double scale_param, size_t n_samples)
 ";
 
-%feature("docstring")  FormFactorSphereLogNormalRadius::clone "FormFactorSphereLogNormalRadius* FormFactorSphereLogNormalRadius::clone() const overridefinal
+%feature("docstring")  FormFactorSphereLogNormalRadius::clone "FormFactorSphereLogNormalRadius* FormFactorSphereLogNormalRadius::clone() const override final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  FormFactorSphereLogNormalRadius::accept "void FormFactorSphereLogNormalRadius::accept(INodeVisitor *visitor) const overridefinal
+%feature("docstring")  FormFactorSphereLogNormalRadius::accept "void FormFactorSphereLogNormalRadius::accept(INodeVisitor *visitor) const override final
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  FormFactorSphereLogNormalRadius::radialExtension "double FormFactorSphereLogNormalRadius::radialExtension() const overridefinal
+%feature("docstring")  FormFactorSphereLogNormalRadius::radialExtension "double FormFactorSphereLogNormalRadius::radialExtension() const override final
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorSphereLogNormalRadius::evaluate_for_q "complex_t FormFactorSphereLogNormalRadius::evaluate_for_q(cvector_t q) const overridefinal
+%feature("docstring")  FormFactorSphereLogNormalRadius::evaluate_for_q "complex_t FormFactorSphereLogNormalRadius::evaluate_for_q(cvector_t q) const override final
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -4567,22 +4647,22 @@ C++ includes: FormFactorSphereUniformRadius.h
 %feature("docstring")  FormFactorSphereUniformRadius::FormFactorSphereUniformRadius "FormFactorSphereUniformRadius::FormFactorSphereUniformRadius(double mean, double full_width)
 ";
 
-%feature("docstring")  FormFactorSphereUniformRadius::clone "FormFactorSphereUniformRadius* FormFactorSphereUniformRadius::clone() const overridefinal
+%feature("docstring")  FormFactorSphereUniformRadius::clone "FormFactorSphereUniformRadius* FormFactorSphereUniformRadius::clone() const override final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  FormFactorSphereUniformRadius::accept "void FormFactorSphereUniformRadius::accept(INodeVisitor *visitor) const overridefinal
+%feature("docstring")  FormFactorSphereUniformRadius::accept "void FormFactorSphereUniformRadius::accept(INodeVisitor *visitor) const override final
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  FormFactorSphereUniformRadius::radialExtension "double FormFactorSphereUniformRadius::radialExtension() const overridefinal
+%feature("docstring")  FormFactorSphereUniformRadius::radialExtension "double FormFactorSphereUniformRadius::radialExtension() const override final
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorSphereUniformRadius::evaluate_for_q "complex_t FormFactorSphereUniformRadius::evaluate_for_q(cvector_t q) const overridefinal
+%feature("docstring")  FormFactorSphereUniformRadius::evaluate_for_q "complex_t FormFactorSphereUniformRadius::evaluate_for_q(cvector_t q) const override final
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -4613,23 +4693,23 @@ alpha:
 dihedral angle in radians between base and facet 
 ";
 
-%feature("docstring")  FormFactorTetrahedron::clone "FormFactorTetrahedron* FormFactorTetrahedron::clone() const overridefinal
+%feature("docstring")  FormFactorTetrahedron::clone "FormFactorTetrahedron* FormFactorTetrahedron::clone() const override final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  FormFactorTetrahedron::accept "void FormFactorTetrahedron::accept(INodeVisitor *visitor) const overridefinal
+%feature("docstring")  FormFactorTetrahedron::accept "void FormFactorTetrahedron::accept(INodeVisitor *visitor) const override final
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  FormFactorTetrahedron::getBaseEdge "double FormFactorTetrahedron::getBaseEdge() const 
+%feature("docstring")  FormFactorTetrahedron::getBaseEdge "double FormFactorTetrahedron::getBaseEdge() const
 ";
 
-%feature("docstring")  FormFactorTetrahedron::getHeight "double FormFactorTetrahedron::getHeight() const 
+%feature("docstring")  FormFactorTetrahedron::getHeight "double FormFactorTetrahedron::getHeight() const
 ";
 
-%feature("docstring")  FormFactorTetrahedron::getAlpha "double FormFactorTetrahedron::getAlpha() const 
+%feature("docstring")  FormFactorTetrahedron::getAlpha "double FormFactorTetrahedron::getAlpha() const
 ";
 
 
@@ -4644,17 +4724,17 @@ C++ includes: FormFactorTriangle.h
 %feature("docstring")  FormFactorTriangle::FormFactorTriangle "FormFactorTriangle::FormFactorTriangle(const double base_edge)
 ";
 
-%feature("docstring")  FormFactorTriangle::clone "FormFactorTriangle* FormFactorTriangle::clone() const overridefinal
+%feature("docstring")  FormFactorTriangle::clone "FormFactorTriangle* FormFactorTriangle::clone() const override final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  FormFactorTriangle::accept "void FormFactorTriangle::accept(INodeVisitor *visitor) const overridefinal
+%feature("docstring")  FormFactorTriangle::accept "void FormFactorTriangle::accept(INodeVisitor *visitor) const override final
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  FormFactorTriangle::getBaseEdge "double FormFactorTriangle::getBaseEdge() const 
+%feature("docstring")  FormFactorTriangle::getBaseEdge "double FormFactorTriangle::getBaseEdge() const
 ";
 
 
@@ -4680,20 +4760,20 @@ removed_length:
 removed length from each edge of the cube in nanometers 
 ";
 
-%feature("docstring")  FormFactorTruncatedCube::clone "FormFactorTruncatedCube* FormFactorTruncatedCube::clone() const overridefinal
+%feature("docstring")  FormFactorTruncatedCube::clone "FormFactorTruncatedCube* FormFactorTruncatedCube::clone() const override final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  FormFactorTruncatedCube::accept "void FormFactorTruncatedCube::accept(INodeVisitor *visitor) const overridefinal
+%feature("docstring")  FormFactorTruncatedCube::accept "void FormFactorTruncatedCube::accept(INodeVisitor *visitor) const override final
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  FormFactorTruncatedCube::getLength "double FormFactorTruncatedCube::getLength() const 
+%feature("docstring")  FormFactorTruncatedCube::getLength "double FormFactorTruncatedCube::getLength() const
 ";
 
-%feature("docstring")  FormFactorTruncatedCube::getRemovedLength "double FormFactorTruncatedCube::getRemovedLength() const 
+%feature("docstring")  FormFactorTruncatedCube::getRemovedLength "double FormFactorTruncatedCube::getRemovedLength() const
 ";
 
 
@@ -4722,31 +4802,31 @@ dh:
 length of cup truncated from the top 
 ";
 
-%feature("docstring")  FormFactorTruncatedSphere::clone "FormFactorTruncatedSphere* FormFactorTruncatedSphere::clone() const overridefinal
+%feature("docstring")  FormFactorTruncatedSphere::clone "FormFactorTruncatedSphere* FormFactorTruncatedSphere::clone() const override final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  FormFactorTruncatedSphere::accept "void FormFactorTruncatedSphere::accept(INodeVisitor *visitor) const overridefinal
+%feature("docstring")  FormFactorTruncatedSphere::accept "void FormFactorTruncatedSphere::accept(INodeVisitor *visitor) const override final
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  FormFactorTruncatedSphere::getHeight "double FormFactorTruncatedSphere::getHeight() const 
+%feature("docstring")  FormFactorTruncatedSphere::getHeight "double FormFactorTruncatedSphere::getHeight() const
 ";
 
-%feature("docstring")  FormFactorTruncatedSphere::getRadius "double FormFactorTruncatedSphere::getRadius() const 
+%feature("docstring")  FormFactorTruncatedSphere::getRadius "double FormFactorTruncatedSphere::getRadius() const
 ";
 
-%feature("docstring")  FormFactorTruncatedSphere::getRemovedTop "double FormFactorTruncatedSphere::getRemovedTop() const 
+%feature("docstring")  FormFactorTruncatedSphere::getRemovedTop "double FormFactorTruncatedSphere::getRemovedTop() const
 ";
 
-%feature("docstring")  FormFactorTruncatedSphere::radialExtension "double FormFactorTruncatedSphere::radialExtension() const overridefinal
+%feature("docstring")  FormFactorTruncatedSphere::radialExtension "double FormFactorTruncatedSphere::radialExtension() const override final
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorTruncatedSphere::evaluate_for_q "complex_t FormFactorTruncatedSphere::evaluate_for_q(cvector_t q) const overridefinal
+%feature("docstring")  FormFactorTruncatedSphere::evaluate_for_q "complex_t FormFactorTruncatedSphere::evaluate_for_q(cvector_t q) const override final
 
 Complex formfactor. 
 ";
@@ -4780,34 +4860,34 @@ dh:
 length of cup truncated from the top 
 ";
 
-%feature("docstring")  FormFactorTruncatedSpheroid::clone "FormFactorTruncatedSpheroid* FormFactorTruncatedSpheroid::clone() const overridefinal
+%feature("docstring")  FormFactorTruncatedSpheroid::clone "FormFactorTruncatedSpheroid* FormFactorTruncatedSpheroid::clone() const override final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  FormFactorTruncatedSpheroid::accept "void FormFactorTruncatedSpheroid::accept(INodeVisitor *visitor) const overridefinal
+%feature("docstring")  FormFactorTruncatedSpheroid::accept "void FormFactorTruncatedSpheroid::accept(INodeVisitor *visitor) const override final
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  FormFactorTruncatedSpheroid::getRadius "double FormFactorTruncatedSpheroid::getRadius() const 
+%feature("docstring")  FormFactorTruncatedSpheroid::getRadius "double FormFactorTruncatedSpheroid::getRadius() const
 ";
 
-%feature("docstring")  FormFactorTruncatedSpheroid::getHeight "double FormFactorTruncatedSpheroid::getHeight() const 
+%feature("docstring")  FormFactorTruncatedSpheroid::getHeight "double FormFactorTruncatedSpheroid::getHeight() const
 ";
 
-%feature("docstring")  FormFactorTruncatedSpheroid::getHeightFlattening "double FormFactorTruncatedSpheroid::getHeightFlattening() const 
+%feature("docstring")  FormFactorTruncatedSpheroid::getHeightFlattening "double FormFactorTruncatedSpheroid::getHeightFlattening() const
 ";
 
-%feature("docstring")  FormFactorTruncatedSpheroid::getRemovedTop "double FormFactorTruncatedSpheroid::getRemovedTop() const 
+%feature("docstring")  FormFactorTruncatedSpheroid::getRemovedTop "double FormFactorTruncatedSpheroid::getRemovedTop() const
 ";
 
-%feature("docstring")  FormFactorTruncatedSpheroid::radialExtension "double FormFactorTruncatedSpheroid::radialExtension() const overridefinal
+%feature("docstring")  FormFactorTruncatedSpheroid::radialExtension "double FormFactorTruncatedSpheroid::radialExtension() const override final
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorTruncatedSpheroid::evaluate_for_q "complex_t FormFactorTruncatedSpheroid::evaluate_for_q(cvector_t q) const overridefinal
+%feature("docstring")  FormFactorTruncatedSpheroid::evaluate_for_q "complex_t FormFactorTruncatedSpheroid::evaluate_for_q(cvector_t q) const override final
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -4826,30 +4906,30 @@ C++ includes: FormFactorWeighted.h
 %feature("docstring")  FormFactorWeighted::FormFactorWeighted "FormFactorWeighted::FormFactorWeighted()
 ";
 
-%feature("docstring")  FormFactorWeighted::~FormFactorWeighted "FormFactorWeighted::~FormFactorWeighted() overridefinal
+%feature("docstring")  FormFactorWeighted::~FormFactorWeighted "FormFactorWeighted::~FormFactorWeighted() override final
 ";
 
-%feature("docstring")  FormFactorWeighted::clone "FormFactorWeighted * FormFactorWeighted::clone() const overridefinal
+%feature("docstring")  FormFactorWeighted::clone "FormFactorWeighted * FormFactorWeighted::clone() const override final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  FormFactorWeighted::accept "void FormFactorWeighted::accept(INodeVisitor *visitor) const overridefinal
+%feature("docstring")  FormFactorWeighted::accept "void FormFactorWeighted::accept(INodeVisitor *visitor) const override final
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  FormFactorWeighted::radialExtension "double FormFactorWeighted::radialExtension() const overridefinal
+%feature("docstring")  FormFactorWeighted::radialExtension "double FormFactorWeighted::radialExtension() const override final
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorWeighted::bottomZ "double FormFactorWeighted::bottomZ(const IRotation &rotation) const overridefinal
+%feature("docstring")  FormFactorWeighted::bottomZ "double FormFactorWeighted::bottomZ(const IRotation &rotation) const override final
 
 Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 ";
 
-%feature("docstring")  FormFactorWeighted::topZ "double FormFactorWeighted::topZ(const IRotation &rotation) const overridefinal
+%feature("docstring")  FormFactorWeighted::topZ "double FormFactorWeighted::topZ(const IRotation &rotation) const override final
 
 Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 ";
@@ -4857,17 +4937,17 @@ Returns the z-coordinate of the lowest point in this shape after a given rotatio
 %feature("docstring")  FormFactorWeighted::addFormFactor "void FormFactorWeighted::addFormFactor(const IFormFactor &form_factor, double weight=1.0)
 ";
 
-%feature("docstring")  FormFactorWeighted::setAmbientMaterial "void FormFactorWeighted::setAmbientMaterial(HomogeneousMaterial material) overridefinal
+%feature("docstring")  FormFactorWeighted::setAmbientMaterial "void FormFactorWeighted::setAmbientMaterial(Material material) override final
 
-Passes the refractive index of the ambient material in which this particle is embedded. 
+Passes the material in which this particle is embedded. 
 ";
 
-%feature("docstring")  FormFactorWeighted::evaluate "complex_t FormFactorWeighted::evaluate(const WavevectorInfo &wavevectors) const overridefinal
+%feature("docstring")  FormFactorWeighted::evaluate "complex_t FormFactorWeighted::evaluate(const WavevectorInfo &wavevectors) const override final
 
 Returns scattering amplitude for complex wavevectors ki, kf. 
 ";
 
-%feature("docstring")  FormFactorWeighted::evaluatePol "Eigen::Matrix2cd FormFactorWeighted::evaluatePol(const WavevectorInfo &wavevectors) const overridefinal
+%feature("docstring")  FormFactorWeighted::evaluatePol "Eigen::Matrix2cd FormFactorWeighted::evaluatePol(const WavevectorInfo &wavevectors) const override final
 
 Calculates and returns a polarized form factor calculation in DWBA. 
 ";
@@ -4884,7 +4964,7 @@ C++ includes: FTDecayFunctions.h
 %feature("docstring")  FTDecayFunction1DCauchy::FTDecayFunction1DCauchy "FTDecayFunction1DCauchy::FTDecayFunction1DCauchy(double decay_length)
 ";
 
-%feature("docstring")  FTDecayFunction1DCauchy::clone "FTDecayFunction1DCauchy * FTDecayFunction1DCauchy::clone() const 
+%feature("docstring")  FTDecayFunction1DCauchy::clone "FTDecayFunction1DCauchy * FTDecayFunction1DCauchy::clone() const
 ";
 
 %feature("docstring")  FTDecayFunction1DCauchy::accept "void FTDecayFunction1DCauchy::accept(INodeVisitor *visitor) const final
@@ -4907,7 +4987,7 @@ C++ includes: FTDecayFunctions.h
 %feature("docstring")  FTDecayFunction1DGauss::FTDecayFunction1DGauss "FTDecayFunction1DGauss::FTDecayFunction1DGauss(double decay_length)
 ";
 
-%feature("docstring")  FTDecayFunction1DGauss::clone "FTDecayFunction1DGauss * FTDecayFunction1DGauss::clone() const 
+%feature("docstring")  FTDecayFunction1DGauss::clone "FTDecayFunction1DGauss * FTDecayFunction1DGauss::clone() const
 ";
 
 %feature("docstring")  FTDecayFunction1DGauss::accept "void FTDecayFunction1DGauss::accept(INodeVisitor *visitor) const final
@@ -4930,7 +5010,7 @@ C++ includes: FTDecayFunctions.h
 %feature("docstring")  FTDecayFunction1DTriangle::FTDecayFunction1DTriangle "FTDecayFunction1DTriangle::FTDecayFunction1DTriangle(double decay_length)
 ";
 
-%feature("docstring")  FTDecayFunction1DTriangle::clone "FTDecayFunction1DTriangle * FTDecayFunction1DTriangle::clone() const 
+%feature("docstring")  FTDecayFunction1DTriangle::clone "FTDecayFunction1DTriangle * FTDecayFunction1DTriangle::clone() const
 ";
 
 %feature("docstring")  FTDecayFunction1DTriangle::accept "void FTDecayFunction1DTriangle::accept(INodeVisitor *visitor) const final
@@ -4964,7 +5044,7 @@ eta:
 parameter [0,1] to balance between Cauchy (eta=0.0) and Gauss (eta=1.0) 
 ";
 
-%feature("docstring")  FTDecayFunction1DVoigt::clone "FTDecayFunction1DVoigt * FTDecayFunction1DVoigt::clone() const 
+%feature("docstring")  FTDecayFunction1DVoigt::clone "FTDecayFunction1DVoigt * FTDecayFunction1DVoigt::clone() const
 ";
 
 %feature("docstring")  FTDecayFunction1DVoigt::accept "void FTDecayFunction1DVoigt::accept(INodeVisitor *visitor) const final
@@ -4975,7 +5055,7 @@ Calls the  INodeVisitor's visit method.
 %feature("docstring")  FTDecayFunction1DVoigt::evaluate "double FTDecayFunction1DVoigt::evaluate(double q) const final
 ";
 
-%feature("docstring")  FTDecayFunction1DVoigt::eEta "double FTDecayFunction1DVoigt::eEta() const 
+%feature("docstring")  FTDecayFunction1DVoigt::eEta "double FTDecayFunction1DVoigt::eEta() const
 ";
 
 
@@ -4990,7 +5070,7 @@ C++ includes: FTDecayFunctions.h
 %feature("docstring")  FTDecayFunction2DCauchy::FTDecayFunction2DCauchy "FTDecayFunction2DCauchy::FTDecayFunction2DCauchy(double decay_length_x, double decay_length_y, double gamma=0)
 ";
 
-%feature("docstring")  FTDecayFunction2DCauchy::clone "FTDecayFunction2DCauchy * FTDecayFunction2DCauchy::clone() const 
+%feature("docstring")  FTDecayFunction2DCauchy::clone "FTDecayFunction2DCauchy * FTDecayFunction2DCauchy::clone() const
 ";
 
 %feature("docstring")  FTDecayFunction2DCauchy::accept "void FTDecayFunction2DCauchy::accept(INodeVisitor *visitor) const final
@@ -5015,7 +5095,7 @@ C++ includes: FTDecayFunctions.h
 %feature("docstring")  FTDecayFunction2DGauss::FTDecayFunction2DGauss "FTDecayFunction2DGauss::FTDecayFunction2DGauss(double decay_length_x, double decay_length_y, double gamma=0)
 ";
 
-%feature("docstring")  FTDecayFunction2DGauss::clone "FTDecayFunction2DGauss * FTDecayFunction2DGauss::clone() const 
+%feature("docstring")  FTDecayFunction2DGauss::clone "FTDecayFunction2DGauss * FTDecayFunction2DGauss::clone() const
 ";
 
 %feature("docstring")  FTDecayFunction2DGauss::accept "void FTDecayFunction2DGauss::accept(INodeVisitor *visitor) const final
@@ -5057,7 +5137,7 @@ gamma:
 distribution orientation with respect to the first lattice vector in radians 
 ";
 
-%feature("docstring")  FTDecayFunction2DVoigt::clone "FTDecayFunction2DVoigt * FTDecayFunction2DVoigt::clone() const 
+%feature("docstring")  FTDecayFunction2DVoigt::clone "FTDecayFunction2DVoigt * FTDecayFunction2DVoigt::clone() const
 ";
 
 %feature("docstring")  FTDecayFunction2DVoigt::accept "void FTDecayFunction2DVoigt::accept(INodeVisitor *visitor) const final
@@ -5070,7 +5150,7 @@ Calls the  INodeVisitor's visit method.
 evaluate Fourier transformed decay function for q in X,Y coordinates 
 ";
 
-%feature("docstring")  FTDecayFunction2DVoigt::eta "double FTDecayFunction2DVoigt::eta() const 
+%feature("docstring")  FTDecayFunction2DVoigt::eta "double FTDecayFunction2DVoigt::eta() const
 ";
 
 
@@ -5234,7 +5314,7 @@ Calls the  INodeVisitor's visit method.
 Returns Fourier transform of this distribution; is a decay function starting at evaluate(0)=1. 
 ";
 
-%feature("docstring")  FTDistribution1DVoigt::eta "double FTDistribution1DVoigt::eta() const 
+%feature("docstring")  FTDistribution1DVoigt::eta "double FTDistribution1DVoigt::eta() const
 ";
 
 
@@ -5391,7 +5471,7 @@ Calls the  INodeVisitor's visit method.
 evaluate Fourier transformed distribution for q in X,Y coordinates the original distribution (in real space) is assumed to be normalized: total integral is equal to 1 
 ";
 
-%feature("docstring")  FTDistribution2DVoigt::eta "double FTDistribution2DVoigt::eta() const 
+%feature("docstring")  FTDistribution2DVoigt::eta "double FTDistribution2DVoigt::eta() const
 ";
 
 
@@ -5415,7 +5495,7 @@ C++ includes: GISASSimulation.h
 %feature("docstring")  GISASSimulation::~GISASSimulation "GISASSimulation::~GISASSimulation() final
 ";
 
-%feature("docstring")  GISASSimulation::clone "GISASSimulation* GISASSimulation::clone() const 
+%feature("docstring")  GISASSimulation::clone "GISASSimulation* GISASSimulation::clone() const
 ";
 
 %feature("docstring")  GISASSimulation::accept "void GISASSimulation::accept(INodeVisitor *visitor) const final
@@ -5540,7 +5620,7 @@ Resets region of interest making whole detector plane available for the simulati
 %feature("docstring")  HexagonalLattice::HexagonalLattice "HexagonalLattice::HexagonalLattice(double length, double rotation_angle=0.0)
 ";
 
-%feature("docstring")  HexagonalLattice::clone "HexagonalLattice * HexagonalLattice::clone() const 
+%feature("docstring")  HexagonalLattice::clone "HexagonalLattice * HexagonalLattice::clone() const
 ";
 
 %feature("docstring")  HexagonalLattice::accept "void HexagonalLattice::accept(INodeVisitor *visitor) const final
@@ -5548,16 +5628,16 @@ Resets region of interest making whole detector plane available for the simulati
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  HexagonalLattice::length1 "virtual double HexagonalLattice::length1() const 
+%feature("docstring")  HexagonalLattice::length1 "virtual double HexagonalLattice::length1() const
 ";
 
-%feature("docstring")  HexagonalLattice::length2 "virtual double HexagonalLattice::length2() const 
+%feature("docstring")  HexagonalLattice::length2 "virtual double HexagonalLattice::length2() const
 ";
 
-%feature("docstring")  HexagonalLattice::latticeAngle "double HexagonalLattice::latticeAngle() const 
+%feature("docstring")  HexagonalLattice::latticeAngle "double HexagonalLattice::latticeAngle() const
 ";
 
-%feature("docstring")  HexagonalLattice::unitCellArea "double HexagonalLattice::unitCellArea() const 
+%feature("docstring")  HexagonalLattice::unitCellArea "double HexagonalLattice::unitCellArea() const
 ";
 
 
@@ -5572,7 +5652,7 @@ C++ includes: ParaCrystalBuilder.h
 %feature("docstring")  HexParaCrystalBuilder::HexParaCrystalBuilder "HexParaCrystalBuilder::HexParaCrystalBuilder()
 ";
 
-%feature("docstring")  HexParaCrystalBuilder::buildSample "MultiLayer * HexParaCrystalBuilder::buildSample() const 
+%feature("docstring")  HexParaCrystalBuilder::buildSample "MultiLayer * HexParaCrystalBuilder::buildSample() const
 ";
 
 
@@ -5821,76 +5901,6 @@ Add to values in histograms channels from numpy array,.
 ";
 
 
-// File: classHomogeneousMaterial.xml
-%feature("docstring") HomogeneousMaterial "
-
-An homogeneous material with a refractive index and (optionally) a magnetic field.
-
-C++ includes: HomogeneousMaterial.h
-";
-
-%feature("docstring")  HomogeneousMaterial::HomogeneousMaterial "HomogeneousMaterial::HomogeneousMaterial()
-
-Constructs a default material (vacuum). 
-";
-
-%feature("docstring")  HomogeneousMaterial::HomogeneousMaterial "HomogeneousMaterial::HomogeneousMaterial(const std::string &name, const complex_t refractive_index, kvector_t magnetization=kvector_t())
-
-Constructs a material with  name and  refractive_index. 
-";
-
-%feature("docstring")  HomogeneousMaterial::HomogeneousMaterial "HomogeneousMaterial::HomogeneousMaterial(const std::string &name, double refractive_index_delta, double refractive_index_beta, kvector_t magnetization=kvector_t())
-
-Constructs a material with  name and refractive_index parameters delta and beta (n = 1 - delta + i*beta). 
-";
-
-%feature("docstring")  HomogeneousMaterial::~HomogeneousMaterial "HomogeneousMaterial::~HomogeneousMaterial()
-";
-
-%feature("docstring")  HomogeneousMaterial::inverted "HomogeneousMaterial HomogeneousMaterial::inverted() const
-
-Constructs a material with inverted magnetization. 
-";
-
-%feature("docstring")  HomogeneousMaterial::refractiveIndex "complex_t HomogeneousMaterial::refractiveIndex() const 
-";
-
-%feature("docstring")  HomogeneousMaterial::refractiveIndex2 "complex_t HomogeneousMaterial::refractiveIndex2() const 
-";
-
-%feature("docstring")  HomogeneousMaterial::setRefractiveIndex "void HomogeneousMaterial::setRefractiveIndex(const complex_t refractive_index)
-";
-
-%feature("docstring")  HomogeneousMaterial::isScalarMaterial "bool HomogeneousMaterial::isScalarMaterial() const
-
-Indicates whether the interaction with the material is scalar. This means that different polarization states will be diffracted equally 
-";
-
-%feature("docstring")  HomogeneousMaterial::isMagneticMaterial "bool HomogeneousMaterial::isMagneticMaterial() const 
-";
-
-%feature("docstring")  HomogeneousMaterial::magnetization "kvector_t HomogeneousMaterial::magnetization() const
-
-Get the magnetization (in A/m) 
-";
-
-%feature("docstring")  HomogeneousMaterial::setMagnetization "void HomogeneousMaterial::setMagnetization(const kvector_t magnetization)
-
-Set the magnetizationd (in A/m) 
-";
-
-%feature("docstring")  HomogeneousMaterial::scalarSLD "complex_t HomogeneousMaterial::scalarSLD(const WavevectorInfo &wavevectors) const 
-";
-
-%feature("docstring")  HomogeneousMaterial::polarizedSLD "Eigen::Matrix2cd HomogeneousMaterial::polarizedSLD(const WavevectorInfo &wavevectors) const
-
-Get the scattering matrix for a material defined by its magnetization. 
-";
-
-%feature("docstring")  HomogeneousMaterial::transformedMaterial "HomogeneousMaterial HomogeneousMaterial::transformedMaterial(const Transform3D &transform) const 
-";
-
-
 // File: structHomogeneousRegion.xml
 %feature("docstring") HomogeneousRegion "
 
@@ -5917,7 +5927,7 @@ y:
 The value at which it crosses y-axes 
 ";
 
-%feature("docstring")  HorizontalLine::clone "HorizontalLine* HorizontalLine::clone() const 
+%feature("docstring")  HorizontalLine::clone "HorizontalLine* HorizontalLine::clone() const
 ";
 
 %feature("docstring")  HorizontalLine::contains "bool HorizontalLine::contains(double x, double y) const
@@ -5930,7 +5940,7 @@ Returns true if point with given coordinates is inside or on border of the shape
 Returns true if area defined by two bins is inside or on border of polygon (more precisely, if mid point of two bins satisfy this condition). 
 ";
 
-%feature("docstring")  HorizontalLine::getYpos "double HorizontalLine::getYpos() const 
+%feature("docstring")  HorizontalLine::getYpos "double HorizontalLine::getYpos() const
 ";
 
 
@@ -5960,7 +5970,7 @@ Returns a clone of this  ISample object.
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  IAbstractParticle::abundance "double IAbstractParticle::abundance() const 
+%feature("docstring")  IAbstractParticle::abundance "double IAbstractParticle::abundance() const
 ";
 
 %feature("docstring")  IAbstractParticle::setAbundance "void IAbstractParticle::setAbundance(double abundance)
@@ -6051,10 +6061,10 @@ find bin index which is best match for given value
 find index of bin that contains the given value returns  size() when value is not found 
 ";
 
-%feature("docstring")  IAxis::getBinCenters "std::vector< double > IAxis::getBinCenters() const 
+%feature("docstring")  IAxis::getBinCenters "std::vector< double > IAxis::getBinCenters() const
 ";
 
-%feature("docstring")  IAxis::getBinBoundaries "std::vector< double > IAxis::getBinBoundaries() const 
+%feature("docstring")  IAxis::getBinBoundaries "std::vector< double > IAxis::getBinBoundaries() const
 ";
 
 %feature("docstring")  IAxis::createClippedAxis "IAxis * IAxis::createClippedAxis(double left, double right) const
@@ -6239,10 +6249,10 @@ Inits detector with the beam settings.
 %feature("docstring")  IDetector2D::addAxis "void IDetector2D::addAxis(const IAxis &axis)
 ";
 
-%feature("docstring")  IDetector2D::getAxis "const IAxis & IDetector2D::getAxis(size_t index) const 
+%feature("docstring")  IDetector2D::getAxis "const IAxis & IDetector2D::getAxis(size_t index) const
 ";
 
-%feature("docstring")  IDetector2D::getDimension "size_t IDetector2D::getDimension() const 
+%feature("docstring")  IDetector2D::getDimension "size_t IDetector2D::getDimension() const
 ";
 
 %feature("docstring")  IDetector2D::clear "void IDetector2D::clear()
@@ -6276,7 +6286,7 @@ Removes detector resolution function.
 Applies the detector resolution to the given intensity maps. 
 ";
 
-%feature("docstring")  IDetector2D::detectorResolution "const IDetectorResolution * IDetector2D::detectorResolution() const 
+%feature("docstring")  IDetector2D::detectorResolution "const IDetectorResolution * IDetector2D::detectorResolution() const
 ";
 
 %feature("docstring")  IDetector2D::setAnalyzerProperties "void IDetector2D::setAnalyzerProperties(const kvector_t direction, double efficiency, double total_transmission)
@@ -6284,6 +6294,19 @@ Applies the detector resolution to the given intensity maps.
 Sets the polarization analyzer characteristics of the detector. 
 ";
 
+%feature("docstring")  IDetector2D::analyzerDirection "kvector_t IDetector2D::analyzerDirection() const
+
+Get analyzer properties. 
+";
+
+%feature("docstring")  IDetector2D::analyzerEfficiency "double IDetector2D::analyzerEfficiency() const
+
+will always return a positive number 
+";
+
+%feature("docstring")  IDetector2D::analyzerTotalTransmission "double IDetector2D::analyzerTotalTransmission() const
+";
+
 %feature("docstring")  IDetector2D::removeMasks "void IDetector2D::removeMasks()
 
 Removes all masks from the detector. 
@@ -6308,13 +6331,13 @@ The value of mask
 Put the mask for all detector channels (i.e. exclude whole detector from the analysis) 
 ";
 
-%feature("docstring")  IDetector2D::getDetectorMask "const DetectorMask * IDetector2D::getDetectorMask() const 
+%feature("docstring")  IDetector2D::getDetectorMask "const DetectorMask * IDetector2D::getDetectorMask() const
 ";
 
-%feature("docstring")  IDetector2D::numberOfMaskedChannels "size_t IDetector2D::numberOfMaskedChannels() const 
+%feature("docstring")  IDetector2D::numberOfMaskedChannels "size_t IDetector2D::numberOfMaskedChannels() const
 ";
 
-%feature("docstring")  IDetector2D::isMasked "bool IDetector2D::isMasked(size_t index) const 
+%feature("docstring")  IDetector2D::isMasked "bool IDetector2D::isMasked(size_t index) const
 ";
 
 %feature("docstring")  IDetector2D::hasMasks "bool IDetector2D::hasMasks() const
@@ -6511,10 +6534,10 @@ Registers object's creation function and store object description.
 Returns number of registered objects. 
 ";
 
-%feature("docstring")  IFactory::begin "const_iterator IFactory< Key, AbstractProduct >::begin() const 
+%feature("docstring")  IFactory::begin "const_iterator IFactory< Key, AbstractProduct >::begin() const
 ";
 
-%feature("docstring")  IFactory::end "const_iterator IFactory< Key, AbstractProduct >::end() const 
+%feature("docstring")  IFactory::end "const_iterator IFactory< Key, AbstractProduct >::end() const
 ";
 
 
@@ -6581,7 +6604,7 @@ C++ includes: FitSuiteFunctions.h
 %feature("docstring")  IFitSuiteFunction::init "virtual void IFitSuiteFunction::init(FitSuiteImpl *fit_suite)
 ";
 
-%feature("docstring")  IFitSuiteFunction::getNCalls "virtual size_t IFitSuiteFunction::getNCalls() const 
+%feature("docstring")  IFitSuiteFunction::getNCalls "virtual size_t IFitSuiteFunction::getNCalls() const
 ";
 
 
@@ -6613,9 +6636,9 @@ Returns a clone of this  ISample object.
 Creates a (possibly sliced) form factor with the given rotation and translation. 
 ";
 
-%feature("docstring")  IFormFactor::setAmbientMaterial "virtual void IFormFactor::setAmbientMaterial(HomogeneousMaterial)=0
+%feature("docstring")  IFormFactor::setAmbientMaterial "virtual void IFormFactor::setAmbientMaterial(Material)=0
 
-Passes the refractive index of the ambient material in which this particle is embedded. 
+Passes the material in which this particle is embedded. 
 ";
 
 %feature("docstring")  IFormFactor::evaluate "virtual complex_t IFormFactor::evaluate(const WavevectorInfo &wavevectors) const =0
@@ -6675,9 +6698,9 @@ C++ includes: IFormFactorBorn.h
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  IFormFactorBorn::setAmbientMaterial "void IFormFactorBorn::setAmbientMaterial(HomogeneousMaterial) override
+%feature("docstring")  IFormFactorBorn::setAmbientMaterial "void IFormFactorBorn::setAmbientMaterial(Material) override
 
-Passes the refractive index of the ambient material in which this particle is embedded. 
+Passes the material in which this particle is embedded. 
 ";
 
 %feature("docstring")  IFormFactorBorn::evaluate "complex_t IFormFactorBorn::evaluate(const WavevectorInfo &wavevectors) const override
@@ -6732,9 +6755,9 @@ Returns a clone of this  ISample object.
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  IFormFactorDecorator::setAmbientMaterial "void IFormFactorDecorator::setAmbientMaterial(HomogeneousMaterial material) override
+%feature("docstring")  IFormFactorDecorator::setAmbientMaterial "void IFormFactorDecorator::setAmbientMaterial(Material material) override
 
-Passes the refractive index of the ambient material in which this particle is embedded. 
+Passes the material in which this particle is embedded. 
 ";
 
 %feature("docstring")  IFormFactorDecorator::volume "double IFormFactorDecorator::volume() const override
@@ -6818,7 +6841,7 @@ half-width of the distribution in nanometers
 %feature("docstring")  IFTDecayFunction1D::evaluate "virtual double IFTDecayFunction1D::evaluate(double q) const =0
 ";
 
-%feature("docstring")  IFTDecayFunction1D::decayLength "double IFTDecayFunction1D::decayLength() const 
+%feature("docstring")  IFTDecayFunction1D::decayLength "double IFTDecayFunction1D::decayLength() const
 ";
 
 
@@ -6916,7 +6939,7 @@ Returns Fourier transform of this distribution; is a decay function starting at
 %feature("docstring")  IFTDistribution1D::setOmega "void IFTDistribution1D::setOmega(double omega)
 ";
 
-%feature("docstring")  IFTDistribution1D::omega "double IFTDistribution1D::omega() const 
+%feature("docstring")  IFTDistribution1D::omega "double IFTDistribution1D::omega() const
 ";
 
 
@@ -6951,16 +6974,16 @@ angle in direct space between first lattice vector and x-axis of the distributio
 %feature("docstring")  IFTDistribution2D::setGamma "void IFTDistribution2D::setGamma(double gamma)
 ";
 
-%feature("docstring")  IFTDistribution2D::gamma "double IFTDistribution2D::gamma() const 
+%feature("docstring")  IFTDistribution2D::gamma "double IFTDistribution2D::gamma() const
 ";
 
-%feature("docstring")  IFTDistribution2D::delta "double IFTDistribution2D::delta() const 
+%feature("docstring")  IFTDistribution2D::delta "double IFTDistribution2D::delta() const
 ";
 
-%feature("docstring")  IFTDistribution2D::omegaX "double IFTDistribution2D::omegaX() const 
+%feature("docstring")  IFTDistribution2D::omegaX "double IFTDistribution2D::omegaX() const
 ";
 
-%feature("docstring")  IFTDistribution2D::omegaY "double IFTDistribution2D::omegaY() const 
+%feature("docstring")  IFTDistribution2D::omegaY "double IFTDistribution2D::omegaY() const
 ";
 
 %feature("docstring")  IFTDistribution2D::evaluate "virtual double IFTDistribution2D::evaluate(double qx, double qy) const =0
@@ -7126,7 +7149,7 @@ The global bin index
 The value accumulated by the bin (integral) 
 ";
 
-%feature("docstring")  IHistogram::getData "const OutputData<CumulativeValue>& IHistogram::getData() const 
+%feature("docstring")  IHistogram::getData "const OutputData<CumulativeValue>& IHistogram::getData() const
 ";
 
 %feature("docstring")  IHistogram::getData "OutputData<CumulativeValue>& IHistogram::getData()
@@ -7260,7 +7283,7 @@ Loads histogram from file, the shape of array in file should match Following for
 Sets axes units. 
 ";
 
-%feature("docstring")  IHistogram::axesUnits "std::string IHistogram::axesUnits() const 
+%feature("docstring")  IHistogram::axesUnits "std::string IHistogram::axesUnits() const
 ";
 
 
@@ -7420,10 +7443,10 @@ Returns z-part of the two wavevector eigenmodes.
 Scalar value getters; these throw errors by default as they should only be used when the derived object is really scalar 
 ";
 
-%feature("docstring")  ILayerRTCoefficients::getScalarR "virtual complex_t ILayerRTCoefficients::getScalarR() const 
+%feature("docstring")  ILayerRTCoefficients::getScalarR "virtual complex_t ILayerRTCoefficients::getScalarR() const
 ";
 
-%feature("docstring")  ILayerRTCoefficients::getScalarKz "virtual complex_t ILayerRTCoefficients::getScalarKz() const 
+%feature("docstring")  ILayerRTCoefficients::getScalarKz "virtual complex_t ILayerRTCoefficients::getScalarKz() const
 ";
 
 
@@ -7528,7 +7551,7 @@ C++ includes: INamed.h
 %feature("docstring")  INamed::~INamed "INamed::~INamed()
 ";
 
-%feature("docstring")  INamed::getName "std::string INamed::getName() const 
+%feature("docstring")  INamed::getName "std::string INamed::getName() const
 ";
 
 
@@ -7543,7 +7566,7 @@ C++ includes: InfinitePlane.h
 %feature("docstring")  InfinitePlane::InfinitePlane "InfinitePlane::InfinitePlane()
 ";
 
-%feature("docstring")  InfinitePlane::clone "InfinitePlane* InfinitePlane::clone() const 
+%feature("docstring")  InfinitePlane::clone "InfinitePlane* InfinitePlane::clone() const
 ";
 
 %feature("docstring")  InfinitePlane::contains "bool InfinitePlane::contains(double, double) const
@@ -7592,7 +7615,7 @@ Returns a vector of children (const).
 %feature("docstring")  INode::setParent "void INode::setParent(const INode *newParent)
 ";
 
-%feature("docstring")  INode::parent "const INode * INode::parent() const 
+%feature("docstring")  INode::parent "const INode * INode::parent() const
 ";
 
 %feature("docstring")  INode::parent "INode * INode::parent()
@@ -8010,7 +8033,7 @@ Calls the  INodeVisitor's visit method.
 %feature("docstring")  Instrument::getBeam "Beam& Instrument::getBeam()
 ";
 
-%feature("docstring")  Instrument::getBeam "const Beam& Instrument::getBeam() const 
+%feature("docstring")  Instrument::getBeam "const Beam& Instrument::getBeam() const
 ";
 
 %feature("docstring")  Instrument::setBeam "void Instrument::setBeam(const Beam &beam)
@@ -8044,7 +8067,7 @@ Returns the detector data.
 %feature("docstring")  Instrument::getDetector "IDetector2D * Instrument::getDetector()
 ";
 
-%feature("docstring")  Instrument::getDetectorMask "const DetectorMask * Instrument::getDetectorMask() const 
+%feature("docstring")  Instrument::getDetectorMask "const DetectorMask * Instrument::getDetectorMask() const
 ";
 
 %feature("docstring")  Instrument::getDetectorAxis "const IAxis & Instrument::getDetectorAxis(size_t index) const
@@ -8224,10 +8247,10 @@ C++ includes: IIntensityFunction.h
 %feature("docstring")  IntensityFunctionLog::~IntensityFunctionLog "virtual IntensityFunctionLog::~IntensityFunctionLog()
 ";
 
-%feature("docstring")  IntensityFunctionLog::clone "virtual IntensityFunctionLog* IntensityFunctionLog::clone() const 
+%feature("docstring")  IntensityFunctionLog::clone "virtual IntensityFunctionLog* IntensityFunctionLog::clone() const
 ";
 
-%feature("docstring")  IntensityFunctionLog::evaluate "double IntensityFunctionLog::evaluate(double value) const 
+%feature("docstring")  IntensityFunctionLog::evaluate "double IntensityFunctionLog::evaluate(double value) const
 ";
 
 
@@ -8242,10 +8265,10 @@ C++ includes: IIntensityFunction.h
 %feature("docstring")  IntensityFunctionSqrt::~IntensityFunctionSqrt "virtual IntensityFunctionSqrt::~IntensityFunctionSqrt()
 ";
 
-%feature("docstring")  IntensityFunctionSqrt::clone "virtual IntensityFunctionSqrt* IntensityFunctionSqrt::clone() const 
+%feature("docstring")  IntensityFunctionSqrt::clone "virtual IntensityFunctionSqrt* IntensityFunctionSqrt::clone() const
 ";
 
-%feature("docstring")  IntensityFunctionSqrt::evaluate "double IntensityFunctionSqrt::evaluate(double value) const 
+%feature("docstring")  IntensityFunctionSqrt::evaluate "double IntensityFunctionSqrt::evaluate(double value) const
 ";
 
 
@@ -8263,7 +8286,7 @@ C++ includes: IIntensityNormalizer.h
 %feature("docstring")  IntensityNormalizer::~IntensityNormalizer "virtual IntensityNormalizer::~IntensityNormalizer()
 ";
 
-%feature("docstring")  IntensityNormalizer::clone "IntensityNormalizer * IntensityNormalizer::clone() const 
+%feature("docstring")  IntensityNormalizer::clone "IntensityNormalizer * IntensityNormalizer::clone() const
 ";
 
 %feature("docstring")  IntensityNormalizer::accept "void IntensityNormalizer::accept(INodeVisitor *visitor) const
@@ -8271,7 +8294,7 @@ C++ includes: IIntensityNormalizer.h
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  IntensityNormalizer::createNormalizedData "OutputData< double > * IntensityNormalizer::createNormalizedData(const OutputData< double > &data) const 
+%feature("docstring")  IntensityNormalizer::createNormalizedData "OutputData< double > * IntensityNormalizer::createNormalizedData(const OutputData< double > &data) const
 ";
 
 %feature("docstring")  IntensityNormalizer::apply "void IntensityNormalizer::apply(OutputData< double > &data) const final
@@ -8353,7 +8376,7 @@ decay:
 one-dimensional decay function in reciprocal space 
 ";
 
-%feature("docstring")  InterferenceFunction1DLattice::getLatticeParameters "Lattice1DParameters InterferenceFunction1DLattice::getLatticeParameters() const 
+%feature("docstring")  InterferenceFunction1DLattice::getLatticeParameters "Lattice1DParameters InterferenceFunction1DLattice::getLatticeParameters() const
 ";
 
 %feature("docstring")  InterferenceFunction1DLattice::evaluate "double InterferenceFunction1DLattice::evaluate(const kvector_t q) const final
@@ -8430,10 +8453,10 @@ Evaluates the interference function for a given wavevector transfer (only the re
 %feature("docstring")  InterferenceFunction2DLattice::setIntegrationOverXi "void InterferenceFunction2DLattice::setIntegrationOverXi(bool integrate_xi)
 ";
 
-%feature("docstring")  InterferenceFunction2DLattice::integrationOverXi "bool InterferenceFunction2DLattice::integrationOverXi() const 
+%feature("docstring")  InterferenceFunction2DLattice::integrationOverXi "bool InterferenceFunction2DLattice::integrationOverXi() const
 ";
 
-%feature("docstring")  InterferenceFunction2DLattice::lattice "const Lattice2D & InterferenceFunction2DLattice::lattice() const 
+%feature("docstring")  InterferenceFunction2DLattice::lattice "const Lattice2D & InterferenceFunction2DLattice::lattice() const
 ";
 
 %feature("docstring")  InterferenceFunction2DLattice::getParticleDensity "double InterferenceFunction2DLattice::getParticleDensity() const final
@@ -8446,7 +8469,7 @@ Returns the particle density associated with this 2d lattice.
 Returns a vector of children (const). 
 ";
 
-%feature("docstring")  InterferenceFunction2DLattice::onChange "void InterferenceFunction2DLattice::onChange() overridefinal
+%feature("docstring")  InterferenceFunction2DLattice::onChange "void InterferenceFunction2DLattice::onChange() override final
 
 Action to be taken in inherited class when a parameter has changed. 
 ";
@@ -8543,7 +8566,7 @@ the damping (coherence) length of the paracrystal in nanometers
 Evaluates the interference function for a given wavevector transfer (only the real x and y components are relevant) 
 ";
 
-%feature("docstring")  InterferenceFunction2DParaCrystal::domainSizes "std::vector< double > InterferenceFunction2DParaCrystal::domainSizes() const 
+%feature("docstring")  InterferenceFunction2DParaCrystal::domainSizes "std::vector< double > InterferenceFunction2DParaCrystal::domainSizes() const
 ";
 
 %feature("docstring")  InterferenceFunction2DParaCrystal::setIntegrationOverXi "void InterferenceFunction2DParaCrystal::setIntegrationOverXi(bool integrate_xi)
@@ -8557,13 +8580,13 @@ integrate_xi:
 integration flag 
 ";
 
-%feature("docstring")  InterferenceFunction2DParaCrystal::integrationOverXi "bool InterferenceFunction2DParaCrystal::integrationOverXi() const 
+%feature("docstring")  InterferenceFunction2DParaCrystal::integrationOverXi "bool InterferenceFunction2DParaCrystal::integrationOverXi() const
 ";
 
-%feature("docstring")  InterferenceFunction2DParaCrystal::dampingLength "double InterferenceFunction2DParaCrystal::dampingLength() const 
+%feature("docstring")  InterferenceFunction2DParaCrystal::dampingLength "double InterferenceFunction2DParaCrystal::dampingLength() const
 ";
 
-%feature("docstring")  InterferenceFunction2DParaCrystal::lattice "const Lattice2D & InterferenceFunction2DParaCrystal::lattice() const 
+%feature("docstring")  InterferenceFunction2DParaCrystal::lattice "const Lattice2D & InterferenceFunction2DParaCrystal::lattice() const
 ";
 
 %feature("docstring")  InterferenceFunction2DParaCrystal::getParticleDensity "double InterferenceFunction2DParaCrystal::getParticleDensity() const final
@@ -8663,7 +8686,7 @@ size:
 size of coherence domain along the lattice main axis in nanometers 
 ";
 
-%feature("docstring")  InterferenceFunctionRadialParaCrystal::domainSize "double InterferenceFunctionRadialParaCrystal::domainSize() const 
+%feature("docstring")  InterferenceFunctionRadialParaCrystal::domainSize "double InterferenceFunctionRadialParaCrystal::domainSize() const
 ";
 
 %feature("docstring")  InterferenceFunctionRadialParaCrystal::evaluate "double InterferenceFunctionRadialParaCrystal::evaluate(const kvector_t q) const final
@@ -8671,7 +8694,7 @@ size of coherence domain along the lattice main axis in nanometers
 Evaluates the interference function for a given wavevector transfer (only the real x and y components are relevant) 
 ";
 
-%feature("docstring")  InterferenceFunctionRadialParaCrystal::FTPDF "complex_t InterferenceFunctionRadialParaCrystal::FTPDF(double qpar) const 
+%feature("docstring")  InterferenceFunctionRadialParaCrystal::FTPDF "complex_t InterferenceFunctionRadialParaCrystal::FTPDF(double qpar) const
 ";
 
 %feature("docstring")  InterferenceFunctionRadialParaCrystal::setProbabilityDistribution "void InterferenceFunctionRadialParaCrystal::setProbabilityDistribution(const IFTDistribution1D &pdf)
@@ -8685,10 +8708,10 @@ pdf:
 probability distribution (Fourier transform of probability density) 
 ";
 
-%feature("docstring")  InterferenceFunctionRadialParaCrystal::peakDistance "double InterferenceFunctionRadialParaCrystal::peakDistance() const 
+%feature("docstring")  InterferenceFunctionRadialParaCrystal::peakDistance "double InterferenceFunctionRadialParaCrystal::peakDistance() const
 ";
 
-%feature("docstring")  InterferenceFunctionRadialParaCrystal::dampingLength "double InterferenceFunctionRadialParaCrystal::dampingLength() const 
+%feature("docstring")  InterferenceFunctionRadialParaCrystal::dampingLength "double InterferenceFunctionRadialParaCrystal::dampingLength() const
 ";
 
 %feature("docstring")  InterferenceFunctionRadialParaCrystal::getChildren "std::vector< const INode * > InterferenceFunctionRadialParaCrystal::getChildren() const override
@@ -8791,7 +8814,7 @@ C++ includes: IParameter.h
 Returns true if wrapped parameter was not initialized with proper real value. 
 ";
 
-%feature("docstring")  IParameter::getData "T& IParameter< T >::getData() const 
+%feature("docstring")  IParameter::getData "T& IParameter< T >::getData() const
 ";
 
 %feature("docstring")  IParameter::setData "void IParameter< T >::setData(T &data)
@@ -8919,7 +8942,7 @@ z:
 z-coordinate in nanometers 
 ";
 
-%feature("docstring")  IParticle::translate "void IParticle::translate(kvector_t translation) overridefinal
+%feature("docstring")  IParticle::translate "void IParticle::translate(kvector_t translation) override final
 
 Translates the particle. 
 ";
@@ -8998,13 +9021,13 @@ Templated object registry.
 C++ includes: IRegistry.h
 ";
 
-%feature("docstring")  IRegistry::getItem "const ValueType* IRegistry< ValueType >::getItem(const std::string &key) const 
+%feature("docstring")  IRegistry::getItem "const ValueType* IRegistry< ValueType >::getItem(const std::string &key) const
 ";
 
 %feature("docstring")  IRegistry::keys "std::vector<std::string> IRegistry< ValueType >::keys()
 ";
 
-%feature("docstring")  IRegistry::size "size_t IRegistry< ValueType >::size() const 
+%feature("docstring")  IRegistry::size "size_t IRegistry< ValueType >::size() const
 ";
 
 
@@ -9076,12 +9099,12 @@ C++ includes: ISample.h
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  ISample::material "virtual const HomogeneousMaterial* ISample::material() const
+%feature("docstring")  ISample::material "virtual const Material* ISample::material() const
 
 Returns nullptr, unless overwritten to return a specific material. 
 ";
 
-%feature("docstring")  ISample::containedMaterials "std::vector< const HomogeneousMaterial * > ISample::containedMaterials() const
+%feature("docstring")  ISample::containedMaterials "std::vector< const Material * > ISample::containedMaterials() const
 
 Returns set of unique materials contained in this  ISample. 
 ";
@@ -9256,7 +9279,7 @@ C++ includes: NodeIterator.h
 %feature("docstring")  IteratorMemento::get_state "IteratorState& IteratorMemento::get_state()
 ";
 
-%feature("docstring")  IteratorMemento::empty "bool IteratorMemento::empty() const 
+%feature("docstring")  IteratorMemento::empty "bool IteratorMemento::empty() const
 ";
 
 %feature("docstring")  IteratorMemento::reset "void IteratorMemento::reset()
@@ -9268,7 +9291,7 @@ C++ includes: NodeIterator.h
 %feature("docstring")  IteratorMemento::next "void IteratorMemento::next()
 ";
 
-%feature("docstring")  IteratorMemento::size "size_t IteratorMemento::size() const 
+%feature("docstring")  IteratorMemento::size "size_t IteratorMemento::size() const
 ";
 
 
@@ -9283,16 +9306,16 @@ C++ includes: NodeIterator.h
 %feature("docstring")  IteratorState::IteratorState "IteratorState::IteratorState(const INode *single_element)
 ";
 
-%feature("docstring")  IteratorState::IteratorState "IteratorState::IteratorState(std::vector< const INode * > samples)
+%feature("docstring")  IteratorState::IteratorState "IteratorState::IteratorState(std::vector< const INode *> samples)
 ";
 
 %feature("docstring")  IteratorState::~IteratorState "virtual IteratorState::~IteratorState()
 ";
 
-%feature("docstring")  IteratorState::getCurrent "const INode* IteratorState::getCurrent() const 
+%feature("docstring")  IteratorState::getCurrent "const INode* IteratorState::getCurrent() const
 ";
 
-%feature("docstring")  IteratorState::isEnd "bool IteratorState::isEnd() const 
+%feature("docstring")  IteratorState::isEnd "bool IteratorState::isEnd() const
 ";
 
 %feature("docstring")  IteratorState::next "void IteratorState::next()
@@ -9314,7 +9337,7 @@ C++ includes: CylindersBuilder.h
 %feature("docstring")  LargeCylindersInDWBABuilder::LargeCylindersInDWBABuilder "LargeCylindersInDWBABuilder::LargeCylindersInDWBABuilder()
 ";
 
-%feature("docstring")  LargeCylindersInDWBABuilder::buildSample "MultiLayer * LargeCylindersInDWBABuilder::buildSample() const 
+%feature("docstring")  LargeCylindersInDWBABuilder::buildSample "MultiLayer * LargeCylindersInDWBABuilder::buildSample() const
 ";
 
 
@@ -9415,7 +9438,7 @@ C++ includes: LatticeBuilder.h
 %feature("docstring")  Lattice1DBuilder::Lattice1DBuilder "Lattice1DBuilder::Lattice1DBuilder()
 ";
 
-%feature("docstring")  Lattice1DBuilder::buildSample "MultiLayer * Lattice1DBuilder::buildSample() const 
+%feature("docstring")  Lattice1DBuilder::buildSample "MultiLayer * Lattice1DBuilder::buildSample() const
 ";
 
 
@@ -9464,10 +9487,10 @@ xi:
 %feature("docstring")  Lattice2D::unitCellArea "virtual double Lattice2D::unitCellArea() const =0
 ";
 
-%feature("docstring")  Lattice2D::rotationAngle "double Lattice2D::rotationAngle() const 
+%feature("docstring")  Lattice2D::rotationAngle "double Lattice2D::rotationAngle() const
 ";
 
-%feature("docstring")  Lattice2D::reciprocalBases "Lattice2D::ReciprocalBases Lattice2D::reciprocalBases() const 
+%feature("docstring")  Lattice2D::reciprocalBases "Lattice2D::ReciprocalBases Lattice2D::reciprocalBases() const
 ";
 
 %feature("docstring")  Lattice2D::setRotationEnabled "void Lattice2D::setRotationEnabled(bool enabled)
@@ -9482,7 +9505,7 @@ A layer, with thickness (in nanometer) and material.
 C++ includes: Layer.h
 ";
 
-%feature("docstring")  Layer::Layer "Layer::Layer(HomogeneousMaterial material, double thickness=0)
+%feature("docstring")  Layer::Layer "Layer::Layer(Material material, double thickness=0)
 
 Constructor of a layer with thickness and material
 
@@ -9499,15 +9522,15 @@ thickness of a layer in nanometers
 %feature("docstring")  Layer::~Layer "Layer::~Layer()
 ";
 
-%feature("docstring")  Layer::clone "Layer * Layer::clone() const overridefinal
+%feature("docstring")  Layer::clone "Layer * Layer::clone() const override final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  Layer::cloneInvertB "Layer * Layer::cloneInvertB() const 
+%feature("docstring")  Layer::cloneInvertB "Layer * Layer::cloneInvertB() const
 ";
 
-%feature("docstring")  Layer::accept "void Layer::accept(INodeVisitor *visitor) const overridefinal
+%feature("docstring")  Layer::accept "void Layer::accept(INodeVisitor *visitor) const override final
 
 Calls the  INodeVisitor's visit method. 
 ";
@@ -9517,35 +9540,27 @@ Calls the  INodeVisitor's visit method.
 Sets layer thickness in nanometers. 
 ";
 
-%feature("docstring")  Layer::thickness "double Layer::thickness() const 
+%feature("docstring")  Layer::thickness "double Layer::thickness() const
 ";
 
-%feature("docstring")  Layer::material "const HomogeneousMaterial* Layer::material() const overridefinal
+%feature("docstring")  Layer::material "const Material* Layer::material() const override final
 
 Returns nullptr, unless overwritten to return a specific material. 
 ";
 
-%feature("docstring")  Layer::setMaterial "void Layer::setMaterial(HomogeneousMaterial material)
-";
-
-%feature("docstring")  Layer::refractiveIndex "complex_t Layer::refractiveIndex() const 
-";
-
-%feature("docstring")  Layer::refractiveIndex2 "complex_t Layer::refractiveIndex2() const
-
-squared refractive index 
+%feature("docstring")  Layer::setMaterial "void Layer::setMaterial(Material material)
 ";
 
 %feature("docstring")  Layer::addLayout "void Layer::addLayout(const ILayout &decoration)
 ";
 
-%feature("docstring")  Layer::numberOfLayouts "size_t Layer::numberOfLayouts() const 
+%feature("docstring")  Layer::numberOfLayouts "size_t Layer::numberOfLayouts() const
 ";
 
-%feature("docstring")  Layer::layouts "std::vector< const ILayout * > Layer::layouts() const 
+%feature("docstring")  Layer::layouts "std::vector< const ILayout * > Layer::layouts() const
 ";
 
-%feature("docstring")  Layer::getChildren "std::vector< const INode * > Layer::getChildren() const overridefinal
+%feature("docstring")  Layer::getChildren "std::vector< const INode * > Layer::getChildren() const override final
 
 Returns a vector of children (const). 
 ";
@@ -9556,10 +9571,10 @@ Returns a vector of children (const).
 %feature("docstring")  Layer::setNumberOfSlices "void Layer::setNumberOfSlices(unsigned int n_slices)
 ";
 
-%feature("docstring")  Layer::numberOfSlices "unsigned int Layer::numberOfSlices() const 
+%feature("docstring")  Layer::numberOfSlices "unsigned int Layer::numberOfSlices() const
 ";
 
-%feature("docstring")  Layer::slice "SafePointerVector< Layer > Layer::slice(ZLimits limits, ELayerType layer_type) const 
+%feature("docstring")  Layer::slice "SafePointerVector< Layer > Layer::slice(ZLimits limits, ELayerType layer_type) const
 ";
 
 %feature("docstring")  Layer::scalarReducedPotential "complex_t Layer::scalarReducedPotential(kvector_t k, double n_ref) const
@@ -9633,10 +9648,10 @@ Sets roughness of the interface.
 Returns roughness of the interface. 
 ";
 
-%feature("docstring")  LayerInterface::topLayer "const Layer * LayerInterface::topLayer() const 
+%feature("docstring")  LayerInterface::topLayer "const Layer * LayerInterface::topLayer() const
 ";
 
-%feature("docstring")  LayerInterface::bottomLayer "const Layer * LayerInterface::bottomLayer() const 
+%feature("docstring")  LayerInterface::bottomLayer "const Layer * LayerInterface::bottomLayer() const
 ";
 
 %feature("docstring")  LayerInterface::getChildren "std::vector< const INode * > LayerInterface::getChildren() const
@@ -9744,7 +9759,7 @@ C++ includes: LayersWithAbsorptionBuilder.h
 %feature("docstring")  LayersWithAbsorptionBuilder::~LayersWithAbsorptionBuilder "LayersWithAbsorptionBuilder::~LayersWithAbsorptionBuilder()
 ";
 
-%feature("docstring")  LayersWithAbsorptionBuilder::buildSample "MultiLayer * LayersWithAbsorptionBuilder::buildSample() const 
+%feature("docstring")  LayersWithAbsorptionBuilder::buildSample "MultiLayer * LayersWithAbsorptionBuilder::buildSample() const
 ";
 
 %feature("docstring")  LayersWithAbsorptionBuilder::createSample "MultiLayer * LayersWithAbsorptionBuilder::createSample(size_t index=0)
@@ -9771,7 +9786,7 @@ C++ includes: LayoutStrategyBuilder.h
 %feature("docstring")  LayoutStrategyBuilder::releaseStrategy "IInterferenceFunctionStrategy * LayoutStrategyBuilder::releaseStrategy()
 ";
 
-%feature("docstring")  LayoutStrategyBuilder::regionMap "std::map< size_t, std::vector< HomogeneousRegion > > LayoutStrategyBuilder::regionMap() const 
+%feature("docstring")  LayoutStrategyBuilder::regionMap "std::map< size_t, std::vector< HomogeneousRegion > > LayoutStrategyBuilder::regionMap() const
 ";
 
 
@@ -9786,7 +9801,7 @@ C++ includes: Line.h
 %feature("docstring")  Line::Line "Line::Line(double x1, double y1, double x2, double y2)
 ";
 
-%feature("docstring")  Line::clone "Line* Line::clone() const 
+%feature("docstring")  Line::clone "Line* Line::clone() const
 ";
 
 %feature("docstring")  Line::contains "bool Line::contains(double x, double y) const
@@ -9817,13 +9832,13 @@ C++ includes: LLData.h
 %feature("docstring")  LLData::~LLData "LLData< T >::~LLData()
 ";
 
-%feature("docstring")  LLData::meanValues "LLData<double> LLData< T >::meanValues() const 
+%feature("docstring")  LLData::meanValues "LLData<double> LLData< T >::meanValues() const
 ";
 
 %feature("docstring")  LLData::atCoordinate "T & LLData< T >::atCoordinate(int *coordinate)
 ";
 
-%feature("docstring")  LLData::atCoordinate "const T & LLData< T >::atCoordinate(int *coordinate) const 
+%feature("docstring")  LLData::atCoordinate "const T & LLData< T >::atCoordinate(int *coordinate) const
 ";
 
 %feature("docstring")  LLData::setAll "void LLData< T >::setAll(const T &value)
@@ -9832,16 +9847,16 @@ C++ includes: LLData.h
 %feature("docstring")  LLData::scaleAll "void LLData< T >::scaleAll(const T &factor)
 ";
 
-%feature("docstring")  LLData::getTotalSize "size_t LLData< T >::getTotalSize() const 
+%feature("docstring")  LLData::getTotalSize "size_t LLData< T >::getTotalSize() const
 ";
 
-%feature("docstring")  LLData::getRank "size_t LLData< T >::getRank() const 
+%feature("docstring")  LLData::getRank "size_t LLData< T >::getRank() const
 ";
 
-%feature("docstring")  LLData::getDimensions "const int* LLData< T >::getDimensions() const 
+%feature("docstring")  LLData::getDimensions "const int* LLData< T >::getDimensions() const
 ";
 
-%feature("docstring")  LLData::getTotalSum "T LLData< T >::getTotalSum() const 
+%feature("docstring")  LLData::getTotalSum "T LLData< T >::getTotalSum() const
 ";
 
 
@@ -9863,7 +9878,7 @@ C++ includes: MagneticParticlesBuilder.h
 %feature("docstring")  MagneticCylindersBuilder::MagneticCylindersBuilder "MagneticCylindersBuilder::MagneticCylindersBuilder()
 ";
 
-%feature("docstring")  MagneticCylindersBuilder::buildSample "MultiLayer * MagneticCylindersBuilder::buildSample() const 
+%feature("docstring")  MagneticCylindersBuilder::buildSample "MultiLayer * MagneticCylindersBuilder::buildSample() const
 ";
 
 
@@ -9878,7 +9893,7 @@ C++ includes: MagneticParticlesBuilder.h
 %feature("docstring")  MagneticParticleZeroFieldBuilder::MagneticParticleZeroFieldBuilder "MagneticParticleZeroFieldBuilder::MagneticParticleZeroFieldBuilder()
 ";
 
-%feature("docstring")  MagneticParticleZeroFieldBuilder::buildSample "MultiLayer * MagneticParticleZeroFieldBuilder::buildSample() const 
+%feature("docstring")  MagneticParticleZeroFieldBuilder::buildSample "MultiLayer * MagneticParticleZeroFieldBuilder::buildSample() const
 ";
 
 
@@ -9893,7 +9908,22 @@ C++ includes: MagneticLayersBuilder.h
 %feature("docstring")  MagneticRotationBuilder::MagneticRotationBuilder "MagneticRotationBuilder::MagneticRotationBuilder()
 ";
 
-%feature("docstring")  MagneticRotationBuilder::buildSample "MultiLayer * MagneticRotationBuilder::buildSample() const 
+%feature("docstring")  MagneticRotationBuilder::buildSample "MultiLayer * MagneticRotationBuilder::buildSample() const
+";
+
+
+// File: classMagneticSpheresBuilder.xml
+%feature("docstring") MagneticSpheresBuilder "
+
+Builds sample: spheres with magnetization inside substrate.
+
+C++ includes: MagneticParticlesBuilder.h
+";
+
+%feature("docstring")  MagneticSpheresBuilder::MagneticSpheresBuilder "MagneticSpheresBuilder::MagneticSpheresBuilder()
+";
+
+%feature("docstring")  MagneticSpheresBuilder::buildSample "MultiLayer * MagneticSpheresBuilder::buildSample() const
 ";
 
 
@@ -9908,7 +9938,7 @@ C++ includes: MagneticLayersBuilder.h
 %feature("docstring")  MagneticSubstrateZeroFieldBuilder::MagneticSubstrateZeroFieldBuilder "MagneticSubstrateZeroFieldBuilder::MagneticSubstrateZeroFieldBuilder()
 ";
 
-%feature("docstring")  MagneticSubstrateZeroFieldBuilder::buildSample "MultiLayer * MagneticSubstrateZeroFieldBuilder::buildSample() const 
+%feature("docstring")  MagneticSubstrateZeroFieldBuilder::buildSample "MultiLayer * MagneticSubstrateZeroFieldBuilder::buildSample() const
 ";
 
 
@@ -9922,7 +9952,7 @@ Controlled by the multi-threading machinery in  Simulation::runSingleSimulation(
 C++ includes: MainComputation.h
 ";
 
-%feature("docstring")  MainComputation::MainComputation "MainComputation::MainComputation(const MultiLayer &multilayer, const SimulationOptions &options, ProgressHandler &progress, const std::vector< SimulationElement >::iterator &begin_it, const std::vector< SimulationElement >::iterator &end_it)
+%feature("docstring")  MainComputation::MainComputation "MainComputation::MainComputation(const MultiLayer &multilayer, const Instrument &instrument, const SimulationOptions &options, ProgressHandler &progress, const std::vector< SimulationElement >::iterator &begin_it, const std::vector< SimulationElement >::iterator &end_it)
 ";
 
 %feature("docstring")  MainComputation::~MainComputation "MainComputation::~MainComputation()
@@ -9931,10 +9961,95 @@ C++ includes: MainComputation.h
 %feature("docstring")  MainComputation::run "void MainComputation::run()
 ";
 
-%feature("docstring")  MainComputation::isCompleted "bool MainComputation::isCompleted() const 
+%feature("docstring")  MainComputation::isCompleted "bool MainComputation::isCompleted() const
+";
+
+%feature("docstring")  MainComputation::errorMessage "std::string MainComputation::errorMessage() const
+";
+
+
+// File: classMaterial.xml
+%feature("docstring") Material "
+
+A wrapper for underlying material implementation
+
+C++ includes: Material.h
+";
+
+%feature("docstring")  Material::Material "Material::Material(const Material &material)
+
+Material copy-constructor. 
+";
+
+%feature("docstring")  Material::Material "Material::Material(Material &&material)=default
+
+Material move-constructor. 
+";
+
+%feature("docstring")  Material::Material "Material::Material(std::unique_ptr< BaseMaterialImpl > material_impl)
+
+Creates material with particular material implementation. 
 ";
 
-%feature("docstring")  MainComputation::errorMessage "std::string MainComputation::errorMessage() const 
+%feature("docstring")  Material::inverted "Material Material::inverted() const
+
+Constructs a material with inverted magnetization. 
+";
+
+%feature("docstring")  Material::refractiveIndex "complex_t Material::refractiveIndex(double wavelength) const
+
+Returns refractive index. 
+";
+
+%feature("docstring")  Material::refractiveIndex2 "complex_t Material::refractiveIndex2(double wavelength) const
+
+Returns squared refractive index. 
+";
+
+%feature("docstring")  Material::isScalarMaterial "bool Material::isScalarMaterial() const
+
+Indicates whether the interaction with the material is scalar. This means that different polarization states will be diffracted equally 
+";
+
+%feature("docstring")  Material::isMagneticMaterial "bool Material::isMagneticMaterial() const
+";
+
+%feature("docstring")  Material::getName "std::string Material::getName() const
+
+Returns the name of material. 
+";
+
+%feature("docstring")  Material::dataType "size_t Material::dataType() const
+
+Returns hash code of underlying material implementation. 
+";
+
+%feature("docstring")  Material::magnetization "kvector_t Material::magnetization() const
+
+Get the magnetization (in A/m) 
+";
+
+%feature("docstring")  Material::materialData "complex_t Material::materialData() const
+
+Returns underlying material data. 
+";
+
+%feature("docstring")  Material::isEmpty "bool Material::isEmpty() const
+
+Returns true if material underlying data is nullptr. 
+";
+
+%feature("docstring")  Material::scalarSubtrSLD "complex_t Material::scalarSubtrSLD(const WavevectorInfo &wavevectors) const
+
+Returns (  $ \\\\pi/\\\\lambda^2 $ - sld), sld (in  $nm^{-2}$) being the scattering length density. 
+";
+
+%feature("docstring")  Material::polarizedSubtrSLD "Eigen::Matrix2cd Material::polarizedSubtrSLD(const WavevectorInfo &wavevectors) const
+
+Returns (  $ \\\\pi/\\\\lambda^2 $ - sld) matrix with magnetization corrections. 
+";
+
+%feature("docstring")  Material::transformedMaterial "Material Material::transformedMaterial(const Transform3D &transform) const
 ";
 
 
@@ -9952,17 +10067,17 @@ C++ includes: MatrixFresnelMap.h
 %feature("docstring")  MatrixFresnelMap::~MatrixFresnelMap "MatrixFresnelMap::~MatrixFresnelMap() final
 ";
 
-%feature("docstring")  MatrixFresnelMap::getOutCoefficients "const ILayerRTCoefficients * MatrixFresnelMap::getOutCoefficients(const SimulationElement &sim_element, size_t layer_index) const finaloverride
+%feature("docstring")  MatrixFresnelMap::getOutCoefficients "const ILayerRTCoefficients * MatrixFresnelMap::getOutCoefficients(const SimulationElement &sim_element, size_t layer_index) const final override
 
 Retrieves the amplitude coefficients for a (time-reversed) outgoing wavevector. 
 ";
 
-%feature("docstring")  MatrixFresnelMap::getInCoefficients "const ILayerRTCoefficients * MatrixFresnelMap::getInCoefficients(const SimulationElement &sim_element, size_t layer_index) const finaloverride
+%feature("docstring")  MatrixFresnelMap::getInCoefficients "const ILayerRTCoefficients * MatrixFresnelMap::getInCoefficients(const SimulationElement &sim_element, size_t layer_index) const final override
 
 Retrieves the amplitude coefficients for an incoming wavevector. 
 ";
 
-%feature("docstring")  MatrixFresnelMap::setMultilayer "void MatrixFresnelMap::setMultilayer(const MultiLayer &multilayer) finaloverride
+%feature("docstring")  MatrixFresnelMap::setMultilayer "void MatrixFresnelMap::setMultilayer(const MultiLayer &multilayer) final override
 
 Sets the multilayer to be used for the Fresnel calculations. 
 ";
@@ -9982,7 +10097,7 @@ C++ includes: MatrixRTCoefficients.h
 %feature("docstring")  MatrixRTCoefficients::~MatrixRTCoefficients "virtual MatrixRTCoefficients::~MatrixRTCoefficients()
 ";
 
-%feature("docstring")  MatrixRTCoefficients::clone "MatrixRTCoefficients * MatrixRTCoefficients::clone() const 
+%feature("docstring")  MatrixRTCoefficients::clone "MatrixRTCoefficients * MatrixRTCoefficients::clone() const
 ";
 
 %feature("docstring")  MatrixRTCoefficients::T1plus "Eigen::Vector2cd MatrixRTCoefficients::T1plus() const
@@ -9990,25 +10105,25 @@ C++ includes: MatrixRTCoefficients.h
 The following functions return the transmitted and reflected amplitudes for different incoming beam polarizations and eigenmodes 
 ";
 
-%feature("docstring")  MatrixRTCoefficients::R1plus "Eigen::Vector2cd MatrixRTCoefficients::R1plus() const 
+%feature("docstring")  MatrixRTCoefficients::R1plus "Eigen::Vector2cd MatrixRTCoefficients::R1plus() const
 ";
 
-%feature("docstring")  MatrixRTCoefficients::T2plus "Eigen::Vector2cd MatrixRTCoefficients::T2plus() const 
+%feature("docstring")  MatrixRTCoefficients::T2plus "Eigen::Vector2cd MatrixRTCoefficients::T2plus() const
 ";
 
-%feature("docstring")  MatrixRTCoefficients::R2plus "Eigen::Vector2cd MatrixRTCoefficients::R2plus() const 
+%feature("docstring")  MatrixRTCoefficients::R2plus "Eigen::Vector2cd MatrixRTCoefficients::R2plus() const
 ";
 
-%feature("docstring")  MatrixRTCoefficients::T1min "Eigen::Vector2cd MatrixRTCoefficients::T1min() const 
+%feature("docstring")  MatrixRTCoefficients::T1min "Eigen::Vector2cd MatrixRTCoefficients::T1min() const
 ";
 
-%feature("docstring")  MatrixRTCoefficients::R1min "Eigen::Vector2cd MatrixRTCoefficients::R1min() const 
+%feature("docstring")  MatrixRTCoefficients::R1min "Eigen::Vector2cd MatrixRTCoefficients::R1min() const
 ";
 
-%feature("docstring")  MatrixRTCoefficients::T2min "Eigen::Vector2cd MatrixRTCoefficients::T2min() const 
+%feature("docstring")  MatrixRTCoefficients::T2min "Eigen::Vector2cd MatrixRTCoefficients::T2min() const
 ";
 
-%feature("docstring")  MatrixRTCoefficients::R2min "Eigen::Vector2cd MatrixRTCoefficients::R2min() const 
+%feature("docstring")  MatrixRTCoefficients::R2min "Eigen::Vector2cd MatrixRTCoefficients::R2min() const
 ";
 
 %feature("docstring")  MatrixRTCoefficients::getKz "virtual Eigen::Vector2cd MatrixRTCoefficients::getKz() const
@@ -10031,22 +10146,22 @@ C++ includes: MesoCrystal.h
 %feature("docstring")  MesoCrystal::~MesoCrystal "MesoCrystal::~MesoCrystal()
 ";
 
-%feature("docstring")  MesoCrystal::clone "MesoCrystal * MesoCrystal::clone() const overridefinal
+%feature("docstring")  MesoCrystal::clone "MesoCrystal * MesoCrystal::clone() const override final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  MesoCrystal::accept "void MesoCrystal::accept(INodeVisitor *visitor) const overridefinal
+%feature("docstring")  MesoCrystal::accept "void MesoCrystal::accept(INodeVisitor *visitor) const override final
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  MesoCrystal::createSlicedParticle "SlicedParticle MesoCrystal::createSlicedParticle(ZLimits limits) const overridefinal
+%feature("docstring")  MesoCrystal::createSlicedParticle "SlicedParticle MesoCrystal::createSlicedParticle(ZLimits limits) const override final
 
 Create a sliced form factor for this particle. 
 ";
 
-%feature("docstring")  MesoCrystal::getChildren "std::vector< const INode * > MesoCrystal::getChildren() const overridefinal
+%feature("docstring")  MesoCrystal::getChildren "std::vector< const INode * > MesoCrystal::getChildren() const override final
 
 Returns a vector of children (const). 
 ";
@@ -10063,7 +10178,7 @@ C++ includes: MesoCrystalBuilder.h
 %feature("docstring")  MesoCrystalBuilder::MesoCrystalBuilder "MesoCrystalBuilder::MesoCrystalBuilder()
 ";
 
-%feature("docstring")  MesoCrystalBuilder::buildSample "MultiLayer * MesoCrystalBuilder::buildSample() const 
+%feature("docstring")  MesoCrystalBuilder::buildSample "MultiLayer * MesoCrystalBuilder::buildSample() const
 ";
 
 
@@ -10083,15 +10198,15 @@ C++ includes: MultiLayer.h
 %feature("docstring")  MultiLayer::~MultiLayer "MultiLayer::~MultiLayer()
 ";
 
-%feature("docstring")  MultiLayer::accept "virtual void MultiLayer::accept(INodeVisitor *visitor) const finaloverride
+%feature("docstring")  MultiLayer::accept "virtual void MultiLayer::accept(INodeVisitor *visitor) const final override
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  MultiLayer::numberOfLayers "size_t MultiLayer::numberOfLayers() const 
+%feature("docstring")  MultiLayer::numberOfLayers "size_t MultiLayer::numberOfLayers() const
 ";
 
-%feature("docstring")  MultiLayer::numberOfInterfaces "size_t MultiLayer::numberOfInterfaces() const 
+%feature("docstring")  MultiLayer::numberOfInterfaces "size_t MultiLayer::numberOfInterfaces() const
 ";
 
 %feature("docstring")  MultiLayer::addLayer "void MultiLayer::addLayer(const Layer &layer)
@@ -10145,17 +10260,17 @@ Returns bottom interface of layer.
 Returns pointer to the bottom interface of the layer. 
 ";
 
-%feature("docstring")  MultiLayer::layerMaterial "HomogeneousMaterial MultiLayer::layerMaterial(size_t i_layer) const
+%feature("docstring")  MultiLayer::layerMaterial "Material MultiLayer::layerMaterial(size_t i_layer) const
 
 Returns layer material. 
 ";
 
-%feature("docstring")  MultiLayer::setLayerMaterial "void MultiLayer::setLayerMaterial(size_t i_layer, HomogeneousMaterial material)
+%feature("docstring")  MultiLayer::setLayerMaterial "void MultiLayer::setLayerMaterial(size_t i_layer, Material material)
 
 Changes a layer's material. 
 ";
 
-%feature("docstring")  MultiLayer::clone "MultiLayer * MultiLayer::clone() const finaloverride
+%feature("docstring")  MultiLayer::clone "MultiLayer * MultiLayer::clone() const final override
 
 Returns a clone of multilayer with clones of all layers and recreated interfaces between layers 
 ";
@@ -10217,7 +10332,7 @@ returns layer index corresponding to given global z coordinate The top interface
 returns layer index corresponding to given global z coordinate The top interface position of a layer is considered to belong to the layer beneath 
 ";
 
-%feature("docstring")  MultiLayer::containsMagneticMaterial "bool MultiLayer::containsMagneticMaterial() const 
+%feature("docstring")  MultiLayer::containsMagneticMaterial "bool MultiLayer::containsMagneticMaterial() const
 ";
 
 %feature("docstring")  MultiLayer::initBFields "void MultiLayer::initBFields()
@@ -10225,13 +10340,13 @@ returns layer index corresponding to given global z coordinate The top interface
 precalculate the magnetic B fields in each layer 
 ";
 
-%feature("docstring")  MultiLayer::hasRoughness "bool MultiLayer::hasRoughness() const 
+%feature("docstring")  MultiLayer::hasRoughness "bool MultiLayer::hasRoughness() const
 ";
 
-%feature("docstring")  MultiLayer::totalNofLayouts "size_t MultiLayer::totalNofLayouts() const 
+%feature("docstring")  MultiLayer::totalNofLayouts "size_t MultiLayer::totalNofLayouts() const
 ";
 
-%feature("docstring")  MultiLayer::getChildren "std::vector< const INode * > MultiLayer::getChildren() const finaloverride
+%feature("docstring")  MultiLayer::getChildren "std::vector< const INode * > MultiLayer::getChildren() const final override
 
 Returns a vector of children (const). 
 ";
@@ -10248,7 +10363,7 @@ C++ includes: MultiLayerWithRoughnessBuilder.h
 %feature("docstring")  MultiLayerWithRoughnessBuilder::MultiLayerWithRoughnessBuilder "MultiLayerWithRoughnessBuilder::MultiLayerWithRoughnessBuilder()
 ";
 
-%feature("docstring")  MultiLayerWithRoughnessBuilder::buildSample "MultiLayer * MultiLayerWithRoughnessBuilder::buildSample() const 
+%feature("docstring")  MultiLayerWithRoughnessBuilder::buildSample "MultiLayer * MultiLayerWithRoughnessBuilder::buildSample() const
 ";
 
 
@@ -10263,7 +10378,7 @@ C++ includes: MultipleLayoutBuilder.h
 %feature("docstring")  MultipleLayoutBuilder::MultipleLayoutBuilder "MultipleLayoutBuilder::MultipleLayoutBuilder()
 ";
 
-%feature("docstring")  MultipleLayoutBuilder::buildSample "MultiLayer * MultipleLayoutBuilder::buildSample() const 
+%feature("docstring")  MultipleLayoutBuilder::buildSample "MultiLayer * MultipleLayoutBuilder::buildSample() const
 ";
 
 
@@ -10292,10 +10407,10 @@ C++ includes: NodeIterator.h
 %feature("docstring")  NodeIterator::getCurrent "const INode * NodeIterator< Strategy >::getCurrent()
 ";
 
-%feature("docstring")  NodeIterator::isDone "bool NodeIterator< Strategy >::isDone() const 
+%feature("docstring")  NodeIterator::isDone "bool NodeIterator< Strategy >::isDone() const
 ";
 
-%feature("docstring")  NodeIterator::depth "int NodeIterator< Strategy >::depth() const 
+%feature("docstring")  NodeIterator::depth "int NodeIterator< Strategy >::depth() const
 ";
 
 
@@ -10333,7 +10448,7 @@ C++ includes: OffSpecSimulation.h
 %feature("docstring")  OffSpecSimulation::~OffSpecSimulation "OffSpecSimulation::~OffSpecSimulation() final
 ";
 
-%feature("docstring")  OffSpecSimulation::clone "OffSpecSimulation* OffSpecSimulation::clone() const 
+%feature("docstring")  OffSpecSimulation::clone "OffSpecSimulation* OffSpecSimulation::clone() const
 ";
 
 %feature("docstring")  OffSpecSimulation::accept "void OffSpecSimulation::accept(INodeVisitor *visitor) const final
@@ -10398,10 +10513,10 @@ C++ includes: OrderedMap.h
 %feature("docstring")  OrderedMap::clear "void OrderedMap< Key, Object >::clear()
 ";
 
-%feature("docstring")  OrderedMap::begin "const_iterator OrderedMap< Key, Object >::begin() const 
+%feature("docstring")  OrderedMap::begin "const_iterator OrderedMap< Key, Object >::begin() const
 ";
 
-%feature("docstring")  OrderedMap::end "const_iterator OrderedMap< Key, Object >::end() const 
+%feature("docstring")  OrderedMap::end "const_iterator OrderedMap< Key, Object >::end() const
 ";
 
 %feature("docstring")  OrderedMap::begin "iterator OrderedMap< Key, Object >::begin()
@@ -10419,7 +10534,7 @@ C++ includes: OrderedMap.h
 %feature("docstring")  OrderedMap::find "iterator OrderedMap< Key, Object >::find(const Key &key)
 ";
 
-%feature("docstring")  OrderedMap::find "const_iterator OrderedMap< Key, Object >::find(const Key &key) const 
+%feature("docstring")  OrderedMap::find "const_iterator OrderedMap< Key, Object >::find(const Key &key) const
 ";
 
 %feature("docstring")  OrderedMap::erase "size_t OrderedMap< Key, Object >::erase(const Key &key)
@@ -10453,7 +10568,7 @@ C++ includes: OutputData.h
 %feature("docstring")  OutputData::~OutputData "OutputData< T >::~OutputData()
 ";
 
-%feature("docstring")  OutputData::clone "OutputData< T > * OutputData< T >::clone() const 
+%feature("docstring")  OutputData::clone "OutputData< T > * OutputData< T >::clone() const
 ";
 
 %feature("docstring")  OutputData::copyFrom "void OutputData< T >::copyFrom(const OutputData< T > &x)
@@ -10462,7 +10577,7 @@ C++ includes: OutputData.h
 %feature("docstring")  OutputData::copyShapeFrom "void OutputData< T >::copyShapeFrom(const OutputData< U > &other)
 ";
 
-%feature("docstring")  OutputData::meanValues "OutputData< double > * OutputData< T >::meanValues() const 
+%feature("docstring")  OutputData::meanValues "OutputData< double > * OutputData< T >::meanValues() const
 ";
 
 %feature("docstring")  OutputData::addAxis "void OutputData< T >::addAxis(const IAxis &new_axis)
@@ -10931,7 +11046,7 @@ get number of samples for this distribution
 get the sigma factor 
 ";
 
-%feature("docstring")  ParameterDistribution::getDistribution "const IDistribution1D * ParameterDistribution::getDistribution() const 
+%feature("docstring")  ParameterDistribution::getDistribution "const IDistribution1D * ParameterDistribution::getDistribution() const
 ";
 
 %feature("docstring")  ParameterDistribution::getDistribution "IDistribution1D * ParameterDistribution::getDistribution()
@@ -10947,13 +11062,13 @@ generate list of sampled values with their weight
 get list of linked parameter names 
 ";
 
-%feature("docstring")  ParameterDistribution::getLimits "RealLimits ParameterDistribution::getLimits() const 
+%feature("docstring")  ParameterDistribution::getLimits "RealLimits ParameterDistribution::getLimits() const
 ";
 
-%feature("docstring")  ParameterDistribution::getMinValue "double ParameterDistribution::getMinValue() const 
+%feature("docstring")  ParameterDistribution::getMinValue "double ParameterDistribution::getMinValue() const
 ";
 
-%feature("docstring")  ParameterDistribution::getMaxValue "double ParameterDistribution::getMaxValue() const 
+%feature("docstring")  ParameterDistribution::getMaxValue "double ParameterDistribution::getMaxValue() const
 ";
 
 
@@ -10977,7 +11092,7 @@ C++ includes: ParameterPattern.h
 %feature("docstring")  ParameterPattern::add "ParameterPattern & ParameterPattern::add(std::string object_type)
 ";
 
-%feature("docstring")  ParameterPattern::toStdString "std::string ParameterPattern::toStdString() const 
+%feature("docstring")  ParameterPattern::toStdString "std::string ParameterPattern::toStdString() const
 ";
 
 
@@ -11064,7 +11179,7 @@ Sets value of the nonzero parameters that match  pattern ('*' allowed), or throw
 Sets value of the one parameter that matches  pattern ('*' allowed), or throws. 
 ";
 
-%feature("docstring")  ParameterPool::parameterNames "std::vector< std::string > ParameterPool::parameterNames() const 
+%feature("docstring")  ParameterPool::parameterNames "std::vector< std::string > ParameterPool::parameterNames() const
 ";
 
 %feature("docstring")  ParameterPool::removeParameter "void ParameterPool::removeParameter(const std::string &name)
@@ -11096,45 +11211,42 @@ C++ includes: Particle.h
 %feature("docstring")  Particle::Particle "Particle::Particle()
 ";
 
-%feature("docstring")  Particle::Particle "Particle::Particle(HomogeneousMaterial material)
+%feature("docstring")  Particle::Particle "Particle::Particle(Material material)
 ";
 
-%feature("docstring")  Particle::Particle "Particle::Particle(HomogeneousMaterial material, const IFormFactor &form_factor)
+%feature("docstring")  Particle::Particle "Particle::Particle(Material material, const IFormFactor &form_factor)
 ";
 
-%feature("docstring")  Particle::Particle "Particle::Particle(HomogeneousMaterial material, const IFormFactor &form_factor, const IRotation &rotation)
+%feature("docstring")  Particle::Particle "Particle::Particle(Material material, const IFormFactor &form_factor, const IRotation &rotation)
 ";
 
-%feature("docstring")  Particle::clone "Particle * Particle::clone() const overridefinal
+%feature("docstring")  Particle::clone "Particle * Particle::clone() const override final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  Particle::accept "void Particle::accept(INodeVisitor *visitor) const overridefinal
+%feature("docstring")  Particle::accept "void Particle::accept(INodeVisitor *visitor) const override final
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  Particle::createSlicedParticle "SlicedParticle Particle::createSlicedParticle(ZLimits limits) const overridefinal
+%feature("docstring")  Particle::createSlicedParticle "SlicedParticle Particle::createSlicedParticle(ZLimits limits) const override final
 
 Create a sliced form factor for this particle. 
 ";
 
-%feature("docstring")  Particle::setMaterial "void Particle::setMaterial(HomogeneousMaterial material)
+%feature("docstring")  Particle::setMaterial "void Particle::setMaterial(Material material)
 ";
 
-%feature("docstring")  Particle::material "const HomogeneousMaterial* Particle::material() const overridefinal
+%feature("docstring")  Particle::material "const Material* Particle::material() const override final
 
 Returns nullptr, unless overwritten to return a specific material. 
 ";
 
-%feature("docstring")  Particle::refractiveIndex "complex_t Particle::refractiveIndex() const 
-";
-
 %feature("docstring")  Particle::setFormFactor "void Particle::setFormFactor(const IFormFactor &form_factor)
 ";
 
-%feature("docstring")  Particle::getChildren "std::vector< const INode * > Particle::getChildren() const overridefinal
+%feature("docstring")  Particle::getChildren "std::vector< const INode * > Particle::getChildren() const override final
 
 Returns a vector of children (const). 
 ";
@@ -11157,17 +11269,17 @@ C++ includes: ParticleComposition.h
 %feature("docstring")  ParticleComposition::~ParticleComposition "ParticleComposition::~ParticleComposition()
 ";
 
-%feature("docstring")  ParticleComposition::clone "ParticleComposition * ParticleComposition::clone() const overridefinal
+%feature("docstring")  ParticleComposition::clone "ParticleComposition * ParticleComposition::clone() const override final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  ParticleComposition::accept "void ParticleComposition::accept(INodeVisitor *visitor) const overridefinal
+%feature("docstring")  ParticleComposition::accept "void ParticleComposition::accept(INodeVisitor *visitor) const override final
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  ParticleComposition::createFormFactor "IFormFactor * ParticleComposition::createFormFactor() const overridefinal
+%feature("docstring")  ParticleComposition::createFormFactor "IFormFactor * ParticleComposition::createFormFactor() const override final
 
 Create a form factor for this particle. 
 ";
@@ -11186,17 +11298,17 @@ Create a form factor for this particle.
 Returns number of different particles. 
 ";
 
-%feature("docstring")  ParticleComposition::getChildren "std::vector< const INode * > ParticleComposition::getChildren() const overridefinal
+%feature("docstring")  ParticleComposition::getChildren "std::vector< const INode * > ParticleComposition::getChildren() const override final
 
 Returns a vector of children (const). 
 ";
 
-%feature("docstring")  ParticleComposition::decompose "SafePointerVector< IParticle > ParticleComposition::decompose() const overridefinal
+%feature("docstring")  ParticleComposition::decompose "SafePointerVector< IParticle > ParticleComposition::decompose() const override final
 
 Decompose in constituent  IParticle objects. 
 ";
 
-%feature("docstring")  ParticleComposition::bottomTopZ "ParticleLimits ParticleComposition::bottomTopZ() const overridefinal
+%feature("docstring")  ParticleComposition::bottomTopZ "ParticleLimits ParticleComposition::bottomTopZ() const override final
 
 Top and bottom z-coordinate. 
 ";
@@ -11213,7 +11325,7 @@ C++ includes: ParticleCompositionBuilder.h
 %feature("docstring")  ParticleCompositionBuilder::ParticleCompositionBuilder "ParticleCompositionBuilder::ParticleCompositionBuilder()
 ";
 
-%feature("docstring")  ParticleCompositionBuilder::buildSample "MultiLayer * ParticleCompositionBuilder::buildSample() const 
+%feature("docstring")  ParticleCompositionBuilder::buildSample "MultiLayer * ParticleCompositionBuilder::buildSample() const
 ";
 
 
@@ -11231,28 +11343,28 @@ C++ includes: ParticleCoreShell.h
 %feature("docstring")  ParticleCoreShell::~ParticleCoreShell "ParticleCoreShell::~ParticleCoreShell()
 ";
 
-%feature("docstring")  ParticleCoreShell::clone "ParticleCoreShell * ParticleCoreShell::clone() const overridefinal
+%feature("docstring")  ParticleCoreShell::clone "ParticleCoreShell * ParticleCoreShell::clone() const override final
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  ParticleCoreShell::accept "void ParticleCoreShell::accept(INodeVisitor *visitor) const overridefinal
+%feature("docstring")  ParticleCoreShell::accept "void ParticleCoreShell::accept(INodeVisitor *visitor) const override final
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  ParticleCoreShell::createSlicedParticle "SlicedParticle ParticleCoreShell::createSlicedParticle(ZLimits limits) const overridefinal
+%feature("docstring")  ParticleCoreShell::createSlicedParticle "SlicedParticle ParticleCoreShell::createSlicedParticle(ZLimits limits) const override final
 
 Create a sliced form factor for this particle. 
 ";
 
-%feature("docstring")  ParticleCoreShell::coreParticle "const Particle * ParticleCoreShell::coreParticle() const 
+%feature("docstring")  ParticleCoreShell::coreParticle "const Particle * ParticleCoreShell::coreParticle() const
 ";
 
-%feature("docstring")  ParticleCoreShell::shellParticle "const Particle * ParticleCoreShell::shellParticle() const 
+%feature("docstring")  ParticleCoreShell::shellParticle "const Particle * ParticleCoreShell::shellParticle() const
 ";
 
-%feature("docstring")  ParticleCoreShell::getChildren "std::vector< const INode * > ParticleCoreShell::getChildren() const overridefinal
+%feature("docstring")  ParticleCoreShell::getChildren "std::vector< const INode * > ParticleCoreShell::getChildren() const override final
 
 Returns a vector of children (const). 
 ";
@@ -11269,17 +11381,17 @@ C++ includes: ParticleDistribution.h
 %feature("docstring")  ParticleDistribution::ParticleDistribution "ParticleDistribution::ParticleDistribution(const IParticle &prototype, const ParameterDistribution &par_distr)
 ";
 
-%feature("docstring")  ParticleDistribution::clone "ParticleDistribution * ParticleDistribution::clone() const finaloverride
+%feature("docstring")  ParticleDistribution::clone "ParticleDistribution * ParticleDistribution::clone() const final override
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  ParticleDistribution::accept "void ParticleDistribution::accept(INodeVisitor *visitor) const finaloverride
+%feature("docstring")  ParticleDistribution::accept "void ParticleDistribution::accept(INodeVisitor *visitor) const final override
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  ParticleDistribution::translate "void ParticleDistribution::translate(kvector_t translation) finaloverride
+%feature("docstring")  ParticleDistribution::translate "void ParticleDistribution::translate(kvector_t translation) final override
 
 Translates the particle with the given vector. 
 ";
@@ -11301,7 +11413,7 @@ Returns the prototype particle, used for generating multiple ones.
 Returns the distributed parameter data. 
 ";
 
-%feature("docstring")  ParticleDistribution::getChildren "std::vector< const INode * > ParticleDistribution::getChildren() const finaloverride
+%feature("docstring")  ParticleDistribution::getChildren "std::vector< const INode * > ParticleDistribution::getChildren() const final override
 
 Returns a vector of children (const). 
 ";
@@ -11321,7 +11433,7 @@ C++ includes: ParticleInTheAirBuilder.h
 %feature("docstring")  ParticleInTheAirBuilder::~ParticleInTheAirBuilder "ParticleInTheAirBuilder::~ParticleInTheAirBuilder()
 ";
 
-%feature("docstring")  ParticleInTheAirBuilder::buildSample "MultiLayer * ParticleInTheAirBuilder::buildSample() const 
+%feature("docstring")  ParticleInTheAirBuilder::buildSample "MultiLayer * ParticleInTheAirBuilder::buildSample() const
 ";
 
 %feature("docstring")  ParticleInTheAirBuilder::createSample "MultiLayer * ParticleInTheAirBuilder::createSample(size_t index=0)
@@ -11351,15 +11463,15 @@ C++ includes: ParticleLayout.h
 %feature("docstring")  ParticleLayout::~ParticleLayout "ParticleLayout::~ParticleLayout()
 ";
 
-%feature("docstring")  ParticleLayout::clone "ParticleLayout * ParticleLayout::clone() const finaloverride
+%feature("docstring")  ParticleLayout::clone "ParticleLayout * ParticleLayout::clone() const final override
 
 Returns a clone of this  ISample object. 
 ";
 
-%feature("docstring")  ParticleLayout::cloneWithOffset "ParticleLayout * ParticleLayout::cloneWithOffset(double offset) const finaloverride
+%feature("docstring")  ParticleLayout::cloneWithOffset "ParticleLayout * ParticleLayout::cloneWithOffset(double offset) const final override
 ";
 
-%feature("docstring")  ParticleLayout::accept "void ParticleLayout::accept(INodeVisitor *visitor) const finaloverride
+%feature("docstring")  ParticleLayout::accept "void ParticleLayout::accept(INodeVisitor *visitor) const final override
 
 Calls the  INodeVisitor's visit method. 
 ";
@@ -11420,12 +11532,12 @@ rotation:
  Particle rotation 
 ";
 
-%feature("docstring")  ParticleLayout::particles "SafePointerVector< const IParticle > ParticleLayout::particles() const finaloverride
+%feature("docstring")  ParticleLayout::particles "SafePointerVector< const IParticle > ParticleLayout::particles() const final override
 
 Returns information on all particles (type and abundance) and generates new particles if an  IAbstractParticle denotes a collection 
 ";
 
-%feature("docstring")  ParticleLayout::getTotalAbundance "double ParticleLayout::getTotalAbundance() const finaloverride
+%feature("docstring")  ParticleLayout::getTotalAbundance "double ParticleLayout::getTotalAbundance() const final override
 
 Get total abundance of all particles. 
 ";
@@ -11435,17 +11547,17 @@ Get total abundance of all particles.
 Adds interference functions. 
 ";
 
-%feature("docstring")  ParticleLayout::totalParticleSurfaceDensity "double ParticleLayout::totalParticleSurfaceDensity() const finaloverride
+%feature("docstring")  ParticleLayout::totalParticleSurfaceDensity "double ParticleLayout::totalParticleSurfaceDensity() const final override
 
 Returns surface density of all particles. 
 ";
 
-%feature("docstring")  ParticleLayout::setTotalParticleSurfaceDensity "void ParticleLayout::setTotalParticleSurfaceDensity(double particle_density) finaloverride
+%feature("docstring")  ParticleLayout::setTotalParticleSurfaceDensity "void ParticleLayout::setTotalParticleSurfaceDensity(double particle_density) final override
 
 Sets total particle surface density.  particle_density: number of particles per square nanometer 
 ";
 
-%feature("docstring")  ParticleLayout::getChildren "std::vector< const INode * > ParticleLayout::getChildren() const finaloverride
+%feature("docstring")  ParticleLayout::getChildren "std::vector< const INode * > ParticleLayout::getChildren() const final override
 
 Returns a vector of children (const). 
 ";
@@ -11501,7 +11613,7 @@ Vector of y-coordinates of polygon points.
 %feature("docstring")  Polygon::~Polygon "Polygon::~Polygon()
 ";
 
-%feature("docstring")  Polygon::clone "virtual Polygon* Polygon::clone() const 
+%feature("docstring")  Polygon::clone "virtual Polygon* Polygon::clone() const
 ";
 
 %feature("docstring")  Polygon::contains "bool Polygon::contains(double x, double y) const
@@ -11514,10 +11626,10 @@ Returns true if point with given coordinates is inside or on border of the shape
 Returns true if area defined by two bins is inside or on border of polygon (more precisely, if mid point of two bins satisfy this condition). 
 ";
 
-%feature("docstring")  Polygon::getArea "double Polygon::getArea() const 
+%feature("docstring")  Polygon::getArea "double Polygon::getArea() const
 ";
 
-%feature("docstring")  Polygon::getPoints "void Polygon::getPoints(std::vector< double > &xpos, std::vector< double > &ypos) const 
+%feature("docstring")  Polygon::getPoints "void Polygon::getPoints(std::vector< double > &xpos, std::vector< double > &ypos) const
 ";
 
 
@@ -11554,16 +11666,16 @@ C++ includes: FormFactorPolyhedron.h
 %feature("docstring")  PolyhedralEdge::PolyhedralEdge "PolyhedralEdge::PolyhedralEdge(const kvector_t _Vlow, const kvector_t _Vhig)
 ";
 
-%feature("docstring")  PolyhedralEdge::E "kvector_t PolyhedralEdge::E() const 
+%feature("docstring")  PolyhedralEdge::E "kvector_t PolyhedralEdge::E() const
 ";
 
-%feature("docstring")  PolyhedralEdge::R "kvector_t PolyhedralEdge::R() const 
+%feature("docstring")  PolyhedralEdge::R "kvector_t PolyhedralEdge::R() const
 ";
 
-%feature("docstring")  PolyhedralEdge::qE "complex_t PolyhedralEdge::qE(cvector_t q) const 
+%feature("docstring")  PolyhedralEdge::qE "complex_t PolyhedralEdge::qE(cvector_t q) const
 ";
 
-%feature("docstring")  PolyhedralEdge::qR "complex_t PolyhedralEdge::qR(cvector_t q) const 
+%feature("docstring")  PolyhedralEdge::qR "complex_t PolyhedralEdge::qR(cvector_t q) const
 ";
 
 %feature("docstring")  PolyhedralEdge::contrib "complex_t PolyhedralEdge::contrib(int m, cvector_t qpa, complex_t qrperp) const
@@ -11594,16 +11706,16 @@ _sym_S2:
 true if face has a perpedicular two-fold symmetry axis 
 ";
 
-%feature("docstring")  PolyhedralFace::area "double PolyhedralFace::area() const 
+%feature("docstring")  PolyhedralFace::area "double PolyhedralFace::area() const
 ";
 
-%feature("docstring")  PolyhedralFace::center "kvector_t PolyhedralFace::center() const 
+%feature("docstring")  PolyhedralFace::center "kvector_t PolyhedralFace::center() const
 ";
 
-%feature("docstring")  PolyhedralFace::pyramidalVolume "double PolyhedralFace::pyramidalVolume() const 
+%feature("docstring")  PolyhedralFace::pyramidalVolume "double PolyhedralFace::pyramidalVolume() const
 ";
 
-%feature("docstring")  PolyhedralFace::radius3d "double PolyhedralFace::radius3d() const 
+%feature("docstring")  PolyhedralFace::radius3d "double PolyhedralFace::radius3d() const
 ";
 
 %feature("docstring")  PolyhedralFace::normalProjectionConj "complex_t PolyhedralFace::normalProjectionConj(cvector_t q) const
@@ -11647,7 +11759,7 @@ C++ includes: FormFactorPolyhedron.h
 %feature("docstring")  PostorderStrategy::PostorderStrategy "PostorderStrategy::PostorderStrategy()
 ";
 
-%feature("docstring")  PostorderStrategy::clone "PostorderStrategy * PostorderStrategy::clone() const 
+%feature("docstring")  PostorderStrategy::clone "PostorderStrategy * PostorderStrategy::clone() const
 ";
 
 %feature("docstring")  PostorderStrategy::~PostorderStrategy "PostorderStrategy::~PostorderStrategy()
@@ -11656,19 +11768,10 @@ C++ includes: FormFactorPolyhedron.h
 %feature("docstring")  PostorderStrategy::first "IteratorMemento PostorderStrategy::first(const INode *p_root)
 ";
 
-%feature("docstring")  PostorderStrategy::next "void PostorderStrategy::next(IteratorMemento &iterator_stack) const 
-";
-
-%feature("docstring")  PostorderStrategy::isDone "bool PostorderStrategy::isDone(IteratorMemento &iterator_stack) const 
+%feature("docstring")  PostorderStrategy::next "void PostorderStrategy::next(IteratorMemento &iterator_stack) const
 ";
 
-
-// File: classPrecomputed.xml
-%feature("docstring") Precomputed "
-
-This class contains precomputed constants.
-
-C++ includes: Precomputed.h
+%feature("docstring")  PostorderStrategy::isDone "bool PostorderStrategy::isDone(IteratorMemento &iterator_stack) const
 ";
 
 
@@ -11678,7 +11781,7 @@ C++ includes: Precomputed.h
 %feature("docstring")  PreorderStrategy::PreorderStrategy "PreorderStrategy::PreorderStrategy()
 ";
 
-%feature("docstring")  PreorderStrategy::clone "PreorderStrategy * PreorderStrategy::clone() const 
+%feature("docstring")  PreorderStrategy::clone "PreorderStrategy * PreorderStrategy::clone() const
 ";
 
 %feature("docstring")  PreorderStrategy::~PreorderStrategy "PreorderStrategy::~PreorderStrategy()
@@ -11687,10 +11790,10 @@ C++ includes: Precomputed.h
 %feature("docstring")  PreorderStrategy::first "IteratorMemento PreorderStrategy::first(const INode *p_root)
 ";
 
-%feature("docstring")  PreorderStrategy::next "void PreorderStrategy::next(IteratorMemento &iterator_stack) const 
+%feature("docstring")  PreorderStrategy::next "void PreorderStrategy::next(IteratorMemento &iterator_stack) const
 ";
 
-%feature("docstring")  PreorderStrategy::isDone "bool PreorderStrategy::isDone(IteratorMemento &iterator_stack) const 
+%feature("docstring")  PreorderStrategy::isDone "bool PreorderStrategy::isDone(IteratorMemento &iterator_stack) const
 ";
 
 
@@ -11757,7 +11860,7 @@ C++ includes: ParaCrystalBuilder.h
 %feature("docstring")  RadialParaCrystalBuilder::RadialParaCrystalBuilder "RadialParaCrystalBuilder::RadialParaCrystalBuilder()
 ";
 
-%feature("docstring")  RadialParaCrystalBuilder::buildSample "MultiLayer * RadialParaCrystalBuilder::buildSample() const 
+%feature("docstring")  RadialParaCrystalBuilder::buildSample "MultiLayer * RadialParaCrystalBuilder::buildSample() const
 ";
 
 
@@ -11772,7 +11875,7 @@ C++ includes: RealParameter.h
 %feature("docstring")  RealParameter::RealParameter "RealParameter::RealParameter(const std::string &name, double *par, const std::string &parent_name=std::string(), const std::function< void()> &onChange=std::function< void()>(), const RealLimits &limits=RealLimits::limitless(), const Attributes &attr=Attributes::free())
 ";
 
-%feature("docstring")  RealParameter::clone "RealParameter * RealParameter::clone(const std::string &new_name=\"\") const 
+%feature("docstring")  RealParameter::clone "RealParameter * RealParameter::clone(const std::string &new_name=\"\") const
 ";
 
 %feature("docstring")  RealParameter::setValue "void RealParameter::setValue(double value)
@@ -11788,7 +11891,7 @@ Returns value of wrapped parameter.
 %feature("docstring")  RealParameter::setLimits "RealParameter & RealParameter::setLimits(const RealLimits &limits)
 ";
 
-%feature("docstring")  RealParameter::limits "RealLimits RealParameter::limits() const 
+%feature("docstring")  RealParameter::limits "RealLimits RealParameter::limits() const
 ";
 
 %feature("docstring")  RealParameter::setLimited "RealParameter & RealParameter::setLimited(double lower, double upper)
@@ -11803,7 +11906,7 @@ Returns value of wrapped parameter.
 %feature("docstring")  RealParameter::setUnit "RealParameter & RealParameter::setUnit(const std::string &name)
 ";
 
-%feature("docstring")  RealParameter::unit "std::string RealParameter::unit() const 
+%feature("docstring")  RealParameter::unit "std::string RealParameter::unit() const
 ";
 
 
@@ -11811,6 +11914,15 @@ Returns value of wrapped parameter.
 %feature("docstring") Lattice2D::ReciprocalBases "";
 
 
+// File: structPrecomputed_1_1ReciprocalFactorial.xml
+%feature("docstring") Precomputed::ReciprocalFactorial "";
+
+
+// File: structPrecomputed_1_1ReciprocalFactorial_3_010_01_4.xml
+%feature("docstring") Precomputed::ReciprocalFactorial< 0 > "
+";
+
+
 // File: classRectangle.xml
 %feature("docstring") Rectangle "
 
@@ -11837,7 +11949,7 @@ yup:
 y-coordinate of upper right corner 
 ";
 
-%feature("docstring")  Rectangle::clone "Rectangle* Rectangle::clone() const 
+%feature("docstring")  Rectangle::clone "Rectangle* Rectangle::clone() const
 ";
 
 %feature("docstring")  Rectangle::contains "bool Rectangle::contains(double x, double y) const
@@ -11850,19 +11962,19 @@ Returns true if point with given coordinates is inside or on border of the shape
 Returns true if area defined by two bins is inside or on border of polygon (more precisely, if mid point of two bins satisfy this condition). 
 ";
 
-%feature("docstring")  Rectangle::getArea "double Rectangle::getArea() const 
+%feature("docstring")  Rectangle::getArea "double Rectangle::getArea() const
 ";
 
-%feature("docstring")  Rectangle::getXlow "double Rectangle::getXlow() const 
+%feature("docstring")  Rectangle::getXlow "double Rectangle::getXlow() const
 ";
 
-%feature("docstring")  Rectangle::getYlow "double Rectangle::getYlow() const 
+%feature("docstring")  Rectangle::getYlow "double Rectangle::getYlow() const
 ";
 
-%feature("docstring")  Rectangle::getXup "double Rectangle::getXup() const 
+%feature("docstring")  Rectangle::getXup "double Rectangle::getXup() const
 ";
 
-%feature("docstring")  Rectangle::getYup "double Rectangle::getYup() const 
+%feature("docstring")  Rectangle::getYup "double Rectangle::getYup() const
 ";
 
 
@@ -11913,7 +12025,7 @@ Calls the  INodeVisitor's visit method.
 Inits detector with the beam settings. 
 ";
 
-%feature("docstring")  RectangularDetector::setPosition "void RectangularDetector::setPosition(const kvector_t normal_to_detector, double u0, double v0, const kvector_t direction=kvector_t(0.0,-1.0, 0.0))
+%feature("docstring")  RectangularDetector::setPosition "void RectangularDetector::setPosition(const kvector_t normal_to_detector, double u0, double v0, const kvector_t direction=kvector_t(0.0, -1.0, 0.0))
 ";
 
 %feature("docstring")  RectangularDetector::setPerpendicularToSampleX "void RectangularDetector::setPerpendicularToSampleX(double distance, double u0, double v0)
@@ -11928,40 +12040,40 @@ Inits detector with the beam settings.
 %feature("docstring")  RectangularDetector::setDirectBeamPosition "void RectangularDetector::setDirectBeamPosition(double u0, double v0)
 ";
 
-%feature("docstring")  RectangularDetector::getWidth "double RectangularDetector::getWidth() const 
+%feature("docstring")  RectangularDetector::getWidth "double RectangularDetector::getWidth() const
 ";
 
-%feature("docstring")  RectangularDetector::getHeight "double RectangularDetector::getHeight() const 
+%feature("docstring")  RectangularDetector::getHeight "double RectangularDetector::getHeight() const
 ";
 
-%feature("docstring")  RectangularDetector::getNbinsX "size_t RectangularDetector::getNbinsX() const 
+%feature("docstring")  RectangularDetector::getNbinsX "size_t RectangularDetector::getNbinsX() const
 ";
 
-%feature("docstring")  RectangularDetector::getNbinsY "size_t RectangularDetector::getNbinsY() const 
+%feature("docstring")  RectangularDetector::getNbinsY "size_t RectangularDetector::getNbinsY() const
 ";
 
-%feature("docstring")  RectangularDetector::getNormalVector "kvector_t RectangularDetector::getNormalVector() const 
+%feature("docstring")  RectangularDetector::getNormalVector "kvector_t RectangularDetector::getNormalVector() const
 ";
 
-%feature("docstring")  RectangularDetector::getU0 "double RectangularDetector::getU0() const 
+%feature("docstring")  RectangularDetector::getU0 "double RectangularDetector::getU0() const
 ";
 
-%feature("docstring")  RectangularDetector::getV0 "double RectangularDetector::getV0() const 
+%feature("docstring")  RectangularDetector::getV0 "double RectangularDetector::getV0() const
 ";
 
-%feature("docstring")  RectangularDetector::getDirectionVector "kvector_t RectangularDetector::getDirectionVector() const 
+%feature("docstring")  RectangularDetector::getDirectionVector "kvector_t RectangularDetector::getDirectionVector() const
 ";
 
-%feature("docstring")  RectangularDetector::getDistance "double RectangularDetector::getDistance() const 
+%feature("docstring")  RectangularDetector::getDistance "double RectangularDetector::getDistance() const
 ";
 
-%feature("docstring")  RectangularDetector::getDirectBeamU0 "double RectangularDetector::getDirectBeamU0() const 
+%feature("docstring")  RectangularDetector::getDirectBeamU0 "double RectangularDetector::getDirectBeamU0() const
 ";
 
-%feature("docstring")  RectangularDetector::getDirectBeamV0 "double RectangularDetector::getDirectBeamV0() const 
+%feature("docstring")  RectangularDetector::getDirectBeamV0 "double RectangularDetector::getDirectBeamV0() const
 ";
 
-%feature("docstring")  RectangularDetector::getDetectorArrangment "RectangularDetector::EDetectorArrangement RectangularDetector::getDetectorArrangment() const 
+%feature("docstring")  RectangularDetector::getDetectorArrangment "RectangularDetector::EDetectorArrangement RectangularDetector::getDetectorArrangment() const
 ";
 
 %feature("docstring")  RectangularDetector::getValidAxesUnits "std::vector< IDetector2D::EAxesUnits > RectangularDetector::getValidAxesUnits() const override
@@ -12011,7 +12123,49 @@ C++ includes: ParaCrystalBuilder.h
 %feature("docstring")  RectParaCrystalBuilder::RectParaCrystalBuilder "RectParaCrystalBuilder::RectParaCrystalBuilder()
 ";
 
-%feature("docstring")  RectParaCrystalBuilder::buildSample "MultiLayer * RectParaCrystalBuilder::buildSample() const 
+%feature("docstring")  RectParaCrystalBuilder::buildSample "MultiLayer * RectParaCrystalBuilder::buildSample() const
+";
+
+
+// File: classRefractiveCoefMaterial.xml
+%feature("docstring") RefractiveCoefMaterial "
+
+Material implementation based on refractive coefficiencts (valid for one wavelength value only)
+
+C++ includes: RefractiveCoefMaterial.h
+";
+
+%feature("docstring")  RefractiveCoefMaterial::~RefractiveCoefMaterial "RefractiveCoefMaterial::~RefractiveCoefMaterial()
+";
+
+%feature("docstring")  RefractiveCoefMaterial::clone "RefractiveCoefMaterial * RefractiveCoefMaterial::clone() const override
+
+Returns pointer to a copy of material. 
+";
+
+%feature("docstring")  RefractiveCoefMaterial::refractiveIndex "complex_t RefractiveCoefMaterial::refractiveIndex(double wavelength) const override
+
+Returns refractive index For this particular implementation returned value does not depend on passed wavelength 
+";
+
+%feature("docstring")  RefractiveCoefMaterial::refractiveIndex2 "complex_t RefractiveCoefMaterial::refractiveIndex2(double wavelength) const override
+
+Returns squared refractive index. For this particular implementation returned value does not depend on passed wavelength. 
+";
+
+%feature("docstring")  RefractiveCoefMaterial::materialData "complex_t RefractiveCoefMaterial::materialData() const override
+
+Returns underlying material data. 
+";
+
+%feature("docstring")  RefractiveCoefMaterial::scalarSubtrSLD "complex_t RefractiveCoefMaterial::scalarSubtrSLD(const WavevectorInfo &wavevectors) const override
+
+Returns (  $ \\\\pi/\\\\lambda^2 $ - sld), sld (in  $nm^{-2}$) 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, provided result is inconsistent. 
+";
+
+%feature("docstring")  RefractiveCoefMaterial::print "void RefractiveCoefMaterial::print(std::ostream &ostr) const override
+
+Prints object data. 
 ";
 
 
@@ -12029,22 +12183,22 @@ C++ includes: RegionOfInterest.h
 %feature("docstring")  RegionOfInterest::RegionOfInterest "RegionOfInterest::RegionOfInterest(const OutputData< double > &data, double xlow, double ylow, double xup, double yup)
 ";
 
-%feature("docstring")  RegionOfInterest::clone "RegionOfInterest * RegionOfInterest::clone() const 
+%feature("docstring")  RegionOfInterest::clone "RegionOfInterest * RegionOfInterest::clone() const
 ";
 
 %feature("docstring")  RegionOfInterest::~RegionOfInterest "RegionOfInterest::~RegionOfInterest()
 ";
 
-%feature("docstring")  RegionOfInterest::getXlow "double RegionOfInterest::getXlow() const 
+%feature("docstring")  RegionOfInterest::getXlow "double RegionOfInterest::getXlow() const
 ";
 
-%feature("docstring")  RegionOfInterest::getYlow "double RegionOfInterest::getYlow() const 
+%feature("docstring")  RegionOfInterest::getYlow "double RegionOfInterest::getYlow() const
 ";
 
-%feature("docstring")  RegionOfInterest::getXup "double RegionOfInterest::getXup() const 
+%feature("docstring")  RegionOfInterest::getXup "double RegionOfInterest::getXup() const
 ";
 
-%feature("docstring")  RegionOfInterest::getYup "double RegionOfInterest::getYup() const 
+%feature("docstring")  RegionOfInterest::getYup "double RegionOfInterest::getYup() const
 ";
 
 %feature("docstring")  RegionOfInterest::detectorIndex "size_t RegionOfInterest::detectorIndex(size_t roiIndex) const
@@ -12067,10 +12221,10 @@ Number of detector bins in ROI area.
 Number of detector bins. 
 ";
 
-%feature("docstring")  RegionOfInterest::isInROI "bool RegionOfInterest::isInROI(size_t detectorIndex) const 
+%feature("docstring")  RegionOfInterest::isInROI "bool RegionOfInterest::isInROI(size_t detectorIndex) const
 ";
 
-%feature("docstring")  RegionOfInterest::clipAxisToRoi "std::unique_ptr< IAxis > RegionOfInterest::clipAxisToRoi(size_t axis_index, const IAxis &axis) const 
+%feature("docstring")  RegionOfInterest::clipAxisToRoi "std::unique_ptr< IAxis > RegionOfInterest::clipAxisToRoi(size_t axis_index, const IAxis &axis) const
 ";
 
 
@@ -12085,10 +12239,10 @@ C++ includes: ResolutionFunction2DGaussian.h
 %feature("docstring")  ResolutionFunction2DGaussian::ResolutionFunction2DGaussian "ResolutionFunction2DGaussian::ResolutionFunction2DGaussian(double sigma_x, double sigma_y)
 ";
 
-%feature("docstring")  ResolutionFunction2DGaussian::evaluateCDF "double ResolutionFunction2DGaussian::evaluateCDF(double x, double y) const 
+%feature("docstring")  ResolutionFunction2DGaussian::evaluateCDF "double ResolutionFunction2DGaussian::evaluateCDF(double x, double y) const
 ";
 
-%feature("docstring")  ResolutionFunction2DGaussian::clone "ResolutionFunction2DGaussian* ResolutionFunction2DGaussian::clone() const 
+%feature("docstring")  ResolutionFunction2DGaussian::clone "ResolutionFunction2DGaussian* ResolutionFunction2DGaussian::clone() const
 ";
 
 %feature("docstring")  ResolutionFunction2DGaussian::accept "void ResolutionFunction2DGaussian::accept(INodeVisitor *visitor) const final
@@ -12096,10 +12250,10 @@ C++ includes: ResolutionFunction2DGaussian.h
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  ResolutionFunction2DGaussian::getSigmaX "double ResolutionFunction2DGaussian::getSigmaX() const 
+%feature("docstring")  ResolutionFunction2DGaussian::getSigmaX "double ResolutionFunction2DGaussian::getSigmaX() const
 ";
 
-%feature("docstring")  ResolutionFunction2DGaussian::getSigmaY "double ResolutionFunction2DGaussian::getSigmaY() const 
+%feature("docstring")  ResolutionFunction2DGaussian::getSigmaY "double ResolutionFunction2DGaussian::getSigmaY() const
 ";
 
 
@@ -12134,7 +12288,7 @@ C++ includes: CylindersBuilder.h
 %feature("docstring")  RotatedCylindersBuilder::RotatedCylindersBuilder "RotatedCylindersBuilder::RotatedCylindersBuilder()
 ";
 
-%feature("docstring")  RotatedCylindersBuilder::buildSample "MultiLayer * RotatedCylindersBuilder::buildSample() const 
+%feature("docstring")  RotatedCylindersBuilder::buildSample "MultiLayer * RotatedCylindersBuilder::buildSample() const
 ";
 
 
@@ -12149,7 +12303,7 @@ C++ includes: RotatedPyramidsBuilder.h
 %feature("docstring")  RotatedPyramidsBuilder::RotatedPyramidsBuilder "RotatedPyramidsBuilder::RotatedPyramidsBuilder()
 ";
 
-%feature("docstring")  RotatedPyramidsBuilder::buildSample "MultiLayer * RotatedPyramidsBuilder::buildSample() const 
+%feature("docstring")  RotatedPyramidsBuilder::buildSample "MultiLayer * RotatedPyramidsBuilder::buildSample() const
 ";
 
 
@@ -12164,7 +12318,7 @@ C++ includes: ParticleDistributionsBuilder.h
 %feature("docstring")  RotatedPyramidsDistributionBuilder::RotatedPyramidsDistributionBuilder "RotatedPyramidsDistributionBuilder::RotatedPyramidsDistributionBuilder()
 ";
 
-%feature("docstring")  RotatedPyramidsDistributionBuilder::buildSample "MultiLayer * RotatedPyramidsDistributionBuilder::buildSample() const 
+%feature("docstring")  RotatedPyramidsDistributionBuilder::buildSample "MultiLayer * RotatedPyramidsDistributionBuilder::buildSample() const
 ";
 
 
@@ -12179,7 +12333,7 @@ C++ includes: TwoDimLatticeBuilder.h
 %feature("docstring")  RotatedSquareLatticeBuilder::RotatedSquareLatticeBuilder "RotatedSquareLatticeBuilder::RotatedSquareLatticeBuilder()
 ";
 
-%feature("docstring")  RotatedSquareLatticeBuilder::buildSample "MultiLayer * RotatedSquareLatticeBuilder::buildSample() const 
+%feature("docstring")  RotatedSquareLatticeBuilder::buildSample "MultiLayer * RotatedSquareLatticeBuilder::buildSample() const
 ";
 
 
@@ -12218,13 +12372,13 @@ Returns a new  IRotation object that is the current object's inverse.
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  RotationEuler::getAlpha "double RotationEuler::getAlpha() const 
+%feature("docstring")  RotationEuler::getAlpha "double RotationEuler::getAlpha() const
 ";
 
-%feature("docstring")  RotationEuler::getBeta "double RotationEuler::getBeta() const 
+%feature("docstring")  RotationEuler::getBeta "double RotationEuler::getBeta() const
 ";
 
-%feature("docstring")  RotationEuler::getGamma "double RotationEuler::getGamma() const 
+%feature("docstring")  RotationEuler::getGamma "double RotationEuler::getGamma() const
 ";
 
 %feature("docstring")  RotationEuler::getTransform3D "Transform3D RotationEuler::getTransform3D() const
@@ -12262,7 +12416,7 @@ Returns a new  IRotation object that is the current object's inverse.
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  RotationX::getAngle "double RotationX::getAngle() const 
+%feature("docstring")  RotationX::getAngle "double RotationX::getAngle() const
 ";
 
 %feature("docstring")  RotationX::getTransform3D "Transform3D RotationX::getTransform3D() const
@@ -12300,7 +12454,7 @@ Returns a new  IRotation object that is the current object's inverse.
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  RotationY::getAngle "double RotationY::getAngle() const 
+%feature("docstring")  RotationY::getAngle "double RotationY::getAngle() const
 ";
 
 %feature("docstring")  RotationY::getTransform3D "Transform3D RotationY::getTransform3D() const
@@ -12338,7 +12492,7 @@ Returns a new  IRotation object that is the current object's inverse.
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  RotationZ::getAngle "double RotationZ::getAngle() const 
+%feature("docstring")  RotationZ::getAngle "double RotationZ::getAngle() const
 ";
 
 %feature("docstring")  RotationZ::getTransform3D "Transform3D RotationZ::getTransform3D() const
@@ -12393,10 +12547,10 @@ C++ includes: SafePointerVector.h
 %feature("docstring")  SafePointerVector::~SafePointerVector "SafePointerVector< T >::~SafePointerVector()
 ";
 
-%feature("docstring")  SafePointerVector::size "size_t SafePointerVector< T >::size() const 
+%feature("docstring")  SafePointerVector::size "size_t SafePointerVector< T >::size() const
 ";
 
-%feature("docstring")  SafePointerVector::empty "bool SafePointerVector< T >::empty() const 
+%feature("docstring")  SafePointerVector::empty "bool SafePointerVector< T >::empty() const
 ";
 
 %feature("docstring")  SafePointerVector::push_back "void SafePointerVector< T >::push_back(T *pointer)
@@ -12405,13 +12559,13 @@ C++ includes: SafePointerVector.h
 %feature("docstring")  SafePointerVector::begin "iterator SafePointerVector< T >::begin()
 ";
 
-%feature("docstring")  SafePointerVector::begin "const_iterator SafePointerVector< T >::begin() const 
+%feature("docstring")  SafePointerVector::begin "const_iterator SafePointerVector< T >::begin() const
 ";
 
 %feature("docstring")  SafePointerVector::end "iterator SafePointerVector< T >::end()
 ";
 
-%feature("docstring")  SafePointerVector::end "const_iterator SafePointerVector< T >::end() const 
+%feature("docstring")  SafePointerVector::end "const_iterator SafePointerVector< T >::end() const
 ";
 
 %feature("docstring")  SafePointerVector::deleteElement "bool SafePointerVector< T >::deleteElement(T *pointer)
@@ -12420,7 +12574,7 @@ C++ includes: SafePointerVector.h
 %feature("docstring")  SafePointerVector::back "T* SafePointerVector< T >::back()
 ";
 
-%feature("docstring")  SafePointerVector::back "const T* SafePointerVector< T >::back() const 
+%feature("docstring")  SafePointerVector::back "const T* SafePointerVector< T >::back() const
 ";
 
 %feature("docstring")  SafePointerVector::clear "void SafePointerVector< T >::clear()
@@ -12555,7 +12709,7 @@ C++ includes: SampleLabelHandler.h
 %feature("docstring")  SampleLabelHandler::labelLayout "std::string SampleLabelHandler::labelLayout(const ILayout *sample)
 ";
 
-%feature("docstring")  SampleLabelHandler::labelMaterial "std::string SampleLabelHandler::labelMaterial(const HomogeneousMaterial *sample)
+%feature("docstring")  SampleLabelHandler::labelMaterial "std::string SampleLabelHandler::labelMaterial(const Material *sample)
 ";
 
 %feature("docstring")  SampleLabelHandler::labelLattice "std::string SampleLabelHandler::labelLattice(const Lattice *sample)
@@ -12588,7 +12742,7 @@ C++ includes: SampleLabelHandler.h
 %feature("docstring")  SampleLabelHandler::insertLayout "void SampleLabelHandler::insertLayout(const ILayout *sample)
 ";
 
-%feature("docstring")  SampleLabelHandler::insertMaterial "void SampleLabelHandler::insertMaterial(const HomogeneousMaterial *sample)
+%feature("docstring")  SampleLabelHandler::insertMaterial "void SampleLabelHandler::insertMaterial(const Material *sample)
 ";
 
 %feature("docstring")  SampleLabelHandler::insertLattice "void SampleLabelHandler::insertLattice(const Lattice *sample)
@@ -12680,12 +12834,12 @@ C++ includes: ScalarFresnelMap.h
 %feature("docstring")  ScalarFresnelMap::~ScalarFresnelMap "ScalarFresnelMap::~ScalarFresnelMap() final
 ";
 
-%feature("docstring")  ScalarFresnelMap::getOutCoefficients "const ILayerRTCoefficients * ScalarFresnelMap::getOutCoefficients(const SimulationElement &sim_element, size_t layer_index) const finaloverride
+%feature("docstring")  ScalarFresnelMap::getOutCoefficients "const ILayerRTCoefficients * ScalarFresnelMap::getOutCoefficients(const SimulationElement &sim_element, size_t layer_index) const final override
 
 Retrieves the amplitude coefficients for a (time-reversed) outgoing wavevector. 
 ";
 
-%feature("docstring")  ScalarFresnelMap::getInCoefficients "const ILayerRTCoefficients * ScalarFresnelMap::getInCoefficients(const SimulationElement &sim_element, size_t layer_index) const finaloverride
+%feature("docstring")  ScalarFresnelMap::getInCoefficients "const ILayerRTCoefficients * ScalarFresnelMap::getInCoefficients(const SimulationElement &sim_element, size_t layer_index) const final override
 
 Retrieves the amplitude coefficients for an incoming wavevector. 
 ";
@@ -12705,7 +12859,7 @@ C++ includes: ScalarRTCoefficients.h
 %feature("docstring")  ScalarRTCoefficients::~ScalarRTCoefficients "virtual ScalarRTCoefficients::~ScalarRTCoefficients()
 ";
 
-%feature("docstring")  ScalarRTCoefficients::clone "ScalarRTCoefficients * ScalarRTCoefficients::clone() const 
+%feature("docstring")  ScalarRTCoefficients::clone "ScalarRTCoefficients * ScalarRTCoefficients::clone() const
 ";
 
 %feature("docstring")  ScalarRTCoefficients::T1plus "Eigen::Vector2cd ScalarRTCoefficients::T1plus() const
@@ -12713,25 +12867,25 @@ C++ includes: ScalarRTCoefficients.h
 The following functions return the transmitted and reflected amplitudes for different incoming beam polarizations and eigenmodes 
 ";
 
-%feature("docstring")  ScalarRTCoefficients::R1plus "Eigen::Vector2cd ScalarRTCoefficients::R1plus() const 
+%feature("docstring")  ScalarRTCoefficients::R1plus "Eigen::Vector2cd ScalarRTCoefficients::R1plus() const
 ";
 
-%feature("docstring")  ScalarRTCoefficients::T2plus "Eigen::Vector2cd ScalarRTCoefficients::T2plus() const 
+%feature("docstring")  ScalarRTCoefficients::T2plus "Eigen::Vector2cd ScalarRTCoefficients::T2plus() const
 ";
 
-%feature("docstring")  ScalarRTCoefficients::R2plus "Eigen::Vector2cd ScalarRTCoefficients::R2plus() const 
+%feature("docstring")  ScalarRTCoefficients::R2plus "Eigen::Vector2cd ScalarRTCoefficients::R2plus() const
 ";
 
-%feature("docstring")  ScalarRTCoefficients::T1min "Eigen::Vector2cd ScalarRTCoefficients::T1min() const 
+%feature("docstring")  ScalarRTCoefficients::T1min "Eigen::Vector2cd ScalarRTCoefficients::T1min() const
 ";
 
-%feature("docstring")  ScalarRTCoefficients::R1min "Eigen::Vector2cd ScalarRTCoefficients::R1min() const 
+%feature("docstring")  ScalarRTCoefficients::R1min "Eigen::Vector2cd ScalarRTCoefficients::R1min() const
 ";
 
-%feature("docstring")  ScalarRTCoefficients::T2min "Eigen::Vector2cd ScalarRTCoefficients::T2min() const 
+%feature("docstring")  ScalarRTCoefficients::T2min "Eigen::Vector2cd ScalarRTCoefficients::T2min() const
 ";
 
-%feature("docstring")  ScalarRTCoefficients::R2min "Eigen::Vector2cd ScalarRTCoefficients::R2min() const 
+%feature("docstring")  ScalarRTCoefficients::R2min "Eigen::Vector2cd ScalarRTCoefficients::R2min() const
 ";
 
 %feature("docstring")  ScalarRTCoefficients::getKz "Eigen::Vector2cd ScalarRTCoefficients::getKz() const
@@ -12744,10 +12898,10 @@ Returns z-part of the two wavevector eigenmodes.
 Scalar value getters; these throw errors by default as they should only be used when the derived object is really scalar 
 ";
 
-%feature("docstring")  ScalarRTCoefficients::getScalarR "complex_t ScalarRTCoefficients::getScalarR() const 
+%feature("docstring")  ScalarRTCoefficients::getScalarR "complex_t ScalarRTCoefficients::getScalarR() const
 ";
 
-%feature("docstring")  ScalarRTCoefficients::getScalarKz "virtual complex_t ScalarRTCoefficients::getScalarKz() const 
+%feature("docstring")  ScalarRTCoefficients::getScalarKz "virtual complex_t ScalarRTCoefficients::getScalarKz() const
 ";
 
 
@@ -12772,10 +12926,10 @@ C++ includes: ISelectionRule.h
 %feature("docstring")  SimpleSelectionRule::~SimpleSelectionRule "virtual SimpleSelectionRule::~SimpleSelectionRule()
 ";
 
-%feature("docstring")  SimpleSelectionRule::clone "SimpleSelectionRule * SimpleSelectionRule::clone() const 
+%feature("docstring")  SimpleSelectionRule::clone "SimpleSelectionRule * SimpleSelectionRule::clone() const
 ";
 
-%feature("docstring")  SimpleSelectionRule::coordinateSelected "bool SimpleSelectionRule::coordinateSelected(const ivector_t &coordinate) const 
+%feature("docstring")  SimpleSelectionRule::coordinateSelected "bool SimpleSelectionRule::coordinateSelected(const ivector_t &coordinate) const
 ";
 
 
@@ -12817,7 +12971,7 @@ Run simulation with possible averaging over parameter distributions.
 %feature("docstring")  Simulation::setInstrument "void Simulation::setInstrument(const Instrument &instrument)
 ";
 
-%feature("docstring")  Simulation::getInstrument "const Instrument& Simulation::getInstrument() const 
+%feature("docstring")  Simulation::getInstrument "const Instrument& Simulation::getInstrument() const
 ";
 
 %feature("docstring")  Simulation::getInstrument "Instrument& Simulation::getInstrument()
@@ -12826,7 +12980,7 @@ Run simulation with possible averaging over parameter distributions.
 %feature("docstring")  Simulation::setBeamIntensity "void Simulation::setBeamIntensity(double intensity)
 ";
 
-%feature("docstring")  Simulation::getBeamIntensity "double Simulation::getBeamIntensity() const 
+%feature("docstring")  Simulation::getBeamIntensity "double Simulation::getBeamIntensity() const
 ";
 
 %feature("docstring")  Simulation::setBeamPolarization "void Simulation::setBeamPolarization(const kvector_t bloch_vector)
@@ -12850,7 +13004,7 @@ Sets the polarization analyzer characteristics of the detector.
 The  MultiLayer object will not be owned by the  Simulation object. 
 ";
 
-%feature("docstring")  Simulation::sample "const MultiLayer * Simulation::sample() const 
+%feature("docstring")  Simulation::sample "const MultiLayer * Simulation::sample() const
 ";
 
 %feature("docstring")  Simulation::setSampleBuilder "void Simulation::setSampleBuilder(const std::shared_ptr< IMultiLayerBuilder > sample_builder)
@@ -12870,13 +13024,13 @@ Clone simulated intensity map.
 %feature("docstring")  Simulation::addParameterDistribution "void Simulation::addParameterDistribution(const ParameterDistribution &par_distr)
 ";
 
-%feature("docstring")  Simulation::getDistributionHandler "const DistributionHandler& Simulation::getDistributionHandler() const 
+%feature("docstring")  Simulation::getDistributionHandler "const DistributionHandler& Simulation::getDistributionHandler() const
 ";
 
 %feature("docstring")  Simulation::setOptions "void Simulation::setOptions(const SimulationOptions &options)
 ";
 
-%feature("docstring")  Simulation::getOptions "const SimulationOptions& Simulation::getOptions() const 
+%feature("docstring")  Simulation::getOptions "const SimulationOptions& Simulation::getOptions() const
 ";
 
 %feature("docstring")  Simulation::getOptions "SimulationOptions& Simulation::getOptions()
@@ -12921,7 +13075,7 @@ C++ includes: SimulationArea.h
 returns trus if given iterator index correspond to masked detector channel 
 ";
 
-%feature("docstring")  SimulationArea::totalSize "size_t SimulationArea::totalSize() const 
+%feature("docstring")  SimulationArea::totalSize "size_t SimulationArea::totalSize() const
 ";
 
 %feature("docstring")  SimulationArea::roiIndex "size_t SimulationArea::roiIndex(size_t index) const
@@ -12946,16 +13100,16 @@ C++ includes: SimulationAreaIterator.h
 %feature("docstring")  SimulationAreaIterator::SimulationAreaIterator "SimulationAreaIterator::SimulationAreaIterator(const SimulationArea *area, size_t start_at_index)
 ";
 
-%feature("docstring")  SimulationAreaIterator::index "size_t SimulationAreaIterator::index() const 
+%feature("docstring")  SimulationAreaIterator::index "size_t SimulationAreaIterator::index() const
 ";
 
-%feature("docstring")  SimulationAreaIterator::elementIndex "size_t SimulationAreaIterator::elementIndex() const 
+%feature("docstring")  SimulationAreaIterator::elementIndex "size_t SimulationAreaIterator::elementIndex() const
 ";
 
-%feature("docstring")  SimulationAreaIterator::roiIndex "size_t SimulationAreaIterator::roiIndex() const 
+%feature("docstring")  SimulationAreaIterator::roiIndex "size_t SimulationAreaIterator::roiIndex() const
 ";
 
-%feature("docstring")  SimulationAreaIterator::detectorIndex "size_t SimulationAreaIterator::detectorIndex() const 
+%feature("docstring")  SimulationAreaIterator::detectorIndex "size_t SimulationAreaIterator::detectorIndex() const
 ";
 
 
@@ -13004,19 +13158,19 @@ Sets the polarization analyzer operator (in spin basis along z-axis)
 Gets the polarization analyzer operator (in spin basis along z-axis) 
 ";
 
-%feature("docstring")  SimulationElement::getWavelength "double SimulationElement::getWavelength() const 
+%feature("docstring")  SimulationElement::getWavelength "double SimulationElement::getWavelength() const
 ";
 
-%feature("docstring")  SimulationElement::getAlphaI "double SimulationElement::getAlphaI() const 
+%feature("docstring")  SimulationElement::getAlphaI "double SimulationElement::getAlphaI() const
 ";
 
-%feature("docstring")  SimulationElement::getPhiI "double SimulationElement::getPhiI() const 
+%feature("docstring")  SimulationElement::getPhiI "double SimulationElement::getPhiI() const
 ";
 
-%feature("docstring")  SimulationElement::getAlphaMean "double SimulationElement::getAlphaMean() const 
+%feature("docstring")  SimulationElement::getAlphaMean "double SimulationElement::getAlphaMean() const
 ";
 
-%feature("docstring")  SimulationElement::getPhiMean "double SimulationElement::getPhiMean() const 
+%feature("docstring")  SimulationElement::getPhiMean "double SimulationElement::getPhiMean() const
 ";
 
 %feature("docstring")  SimulationElement::setIntensity "void SimulationElement::setIntensity(double intensity)
@@ -13025,16 +13179,16 @@ Gets the polarization analyzer operator (in spin basis along z-axis)
 %feature("docstring")  SimulationElement::addIntensity "void SimulationElement::addIntensity(double intensity)
 ";
 
-%feature("docstring")  SimulationElement::getIntensity "double SimulationElement::getIntensity() const 
+%feature("docstring")  SimulationElement::getIntensity "double SimulationElement::getIntensity() const
 ";
 
-%feature("docstring")  SimulationElement::getKi "kvector_t SimulationElement::getKi() const 
+%feature("docstring")  SimulationElement::getKi "kvector_t SimulationElement::getKi() const
 ";
 
-%feature("docstring")  SimulationElement::getMeanKf "kvector_t SimulationElement::getMeanKf() const 
+%feature("docstring")  SimulationElement::getMeanKf "kvector_t SimulationElement::getMeanKf() const
 ";
 
-%feature("docstring")  SimulationElement::getMeanQ "kvector_t SimulationElement::getMeanQ() const 
+%feature("docstring")  SimulationElement::getMeanQ "kvector_t SimulationElement::getMeanQ() const
 ";
 
 %feature("docstring")  SimulationElement::getQ "kvector_t SimulationElement::getQ(double x, double y) const
@@ -13042,16 +13196,16 @@ Gets the polarization analyzer operator (in spin basis along z-axis)
 Returns scattering vector Q, with Kf determined from in-pixel coordinates x,y. In-pixel coordinates take values from 0 to 1. 
 ";
 
-%feature("docstring")  SimulationElement::getIntegrationFactor "double SimulationElement::getIntegrationFactor(double x, double y) const 
+%feature("docstring")  SimulationElement::getIntegrationFactor "double SimulationElement::getIntegrationFactor(double x, double y) const
 ";
 
-%feature("docstring")  SimulationElement::getSolidAngle "double SimulationElement::getSolidAngle() const 
+%feature("docstring")  SimulationElement::getSolidAngle "double SimulationElement::getSolidAngle() const
 ";
 
-%feature("docstring")  SimulationElement::getAlpha "double SimulationElement::getAlpha(double x, double y) const 
+%feature("docstring")  SimulationElement::getAlpha "double SimulationElement::getAlpha(double x, double y) const
 ";
 
-%feature("docstring")  SimulationElement::getPhi "double SimulationElement::getPhi(double x, double y) const 
+%feature("docstring")  SimulationElement::getPhi "double SimulationElement::getPhi(double x, double y) const
 ";
 
 %feature("docstring")  SimulationElement::containsSpecularWavevector "bool SimulationElement::containsSpecularWavevector() const
@@ -13090,10 +13244,10 @@ C++ includes: SimulationOptions.h
 %feature("docstring")  SimulationOptions::SimulationOptions "SimulationOptions::SimulationOptions()
 ";
 
-%feature("docstring")  SimulationOptions::isIntegrate "bool SimulationOptions::isIntegrate() const 
+%feature("docstring")  SimulationOptions::isIntegrate "bool SimulationOptions::isIntegrate() const
 ";
 
-%feature("docstring")  SimulationOptions::getMcPoints "size_t SimulationOptions::getMcPoints() const 
+%feature("docstring")  SimulationOptions::getMcPoints "size_t SimulationOptions::getMcPoints() const
 ";
 
 %feature("docstring")  SimulationOptions::setMonteCarloIntegration "void SimulationOptions::setMonteCarloIntegration(bool flag=true, size_t mc_points=50)
@@ -13115,7 +13269,7 @@ Number of points for MonteCarlo integrator
 Sets number of threads to use during the simulation (0 - take the default value from the hardware) 
 ";
 
-%feature("docstring")  SimulationOptions::getNumberOfThreads "int SimulationOptions::getNumberOfThreads() const 
+%feature("docstring")  SimulationOptions::getNumberOfThreads "int SimulationOptions::getNumberOfThreads() const
 ";
 
 %feature("docstring")  SimulationOptions::setNumberOfBatches "void SimulationOptions::setNumberOfBatches(int nbatches)
@@ -13123,10 +13277,10 @@ Sets number of threads to use during the simulation (0 - take the default value
 Sets number of batches to split. 
 ";
 
-%feature("docstring")  SimulationOptions::getNumberOfBatches "int SimulationOptions::getNumberOfBatches() const 
+%feature("docstring")  SimulationOptions::getNumberOfBatches "int SimulationOptions::getNumberOfBatches() const
 ";
 
-%feature("docstring")  SimulationOptions::getCurrentBatch "int SimulationOptions::getCurrentBatch() const 
+%feature("docstring")  SimulationOptions::getCurrentBatch "int SimulationOptions::getCurrentBatch() const
 ";
 
 %feature("docstring")  SimulationOptions::setThreadInfo "void SimulationOptions::setThreadInfo(const ThreadInfo &thread_info)
@@ -13134,19 +13288,19 @@ Sets number of batches to split.
 Sets the batch and thread information to be used. 
 ";
 
-%feature("docstring")  SimulationOptions::getHardwareConcurrency "int SimulationOptions::getHardwareConcurrency() const 
+%feature("docstring")  SimulationOptions::getHardwareConcurrency "int SimulationOptions::getHardwareConcurrency() const
 ";
 
 %feature("docstring")  SimulationOptions::setIncludeSpecular "void SimulationOptions::setIncludeSpecular(bool include_specular)
 ";
 
-%feature("docstring")  SimulationOptions::includeSpecular "bool SimulationOptions::includeSpecular() const 
+%feature("docstring")  SimulationOptions::includeSpecular "bool SimulationOptions::includeSpecular() const
 ";
 
 %feature("docstring")  SimulationOptions::setUseAvgMaterials "void SimulationOptions::setUseAvgMaterials(bool use_avg_materials)
 ";
 
-%feature("docstring")  SimulationOptions::useAvgMaterials "bool SimulationOptions::useAvgMaterials() const 
+%feature("docstring")  SimulationOptions::useAvgMaterials "bool SimulationOptions::useAvgMaterials() const
 ";
 
 
@@ -13178,7 +13332,7 @@ C++ includes: SizeDistributionModelsBuilder.h
 %feature("docstring")  SizeDistributionDAModelBuilder::SizeDistributionDAModelBuilder "SizeDistributionDAModelBuilder::SizeDistributionDAModelBuilder()
 ";
 
-%feature("docstring")  SizeDistributionDAModelBuilder::buildSample "MultiLayer * SizeDistributionDAModelBuilder::buildSample() const 
+%feature("docstring")  SizeDistributionDAModelBuilder::buildSample "MultiLayer * SizeDistributionDAModelBuilder::buildSample() const
 ";
 
 
@@ -13193,7 +13347,7 @@ C++ includes: SizeDistributionModelsBuilder.h
 %feature("docstring")  SizeDistributionLMAModelBuilder::SizeDistributionLMAModelBuilder "SizeDistributionLMAModelBuilder::SizeDistributionLMAModelBuilder()
 ";
 
-%feature("docstring")  SizeDistributionLMAModelBuilder::buildSample "MultiLayer * SizeDistributionLMAModelBuilder::buildSample() const 
+%feature("docstring")  SizeDistributionLMAModelBuilder::buildSample "MultiLayer * SizeDistributionLMAModelBuilder::buildSample() const
 ";
 
 
@@ -13208,7 +13362,7 @@ C++ includes: SizeDistributionModelsBuilder.h
 %feature("docstring")  SizeDistributionSSCAModelBuilder::SizeDistributionSSCAModelBuilder "SizeDistributionSSCAModelBuilder::SizeDistributionSSCAModelBuilder()
 ";
 
-%feature("docstring")  SizeDistributionSSCAModelBuilder::buildSample "MultiLayer * SizeDistributionSSCAModelBuilder::buildSample() const 
+%feature("docstring")  SizeDistributionSSCAModelBuilder::buildSample "MultiLayer * SizeDistributionSSCAModelBuilder::buildSample() const
 ";
 
 
@@ -13223,7 +13377,7 @@ C++ includes: SlicedParticleBuilder.h
 %feature("docstring")  SlicedCompositionBuilder::SlicedCompositionBuilder "SlicedCompositionBuilder::SlicedCompositionBuilder()
 ";
 
-%feature("docstring")  SlicedCompositionBuilder::buildSample "MultiLayer * SlicedCompositionBuilder::buildSample() const 
+%feature("docstring")  SlicedCompositionBuilder::buildSample "MultiLayer * SlicedCompositionBuilder::buildSample() const
 ";
 
 
@@ -13244,10 +13398,10 @@ C++ includes: SlicedFormFactorList.h
 %feature("docstring")  SlicedFormFactorList::~SlicedFormFactorList "SlicedFormFactorList::~SlicedFormFactorList()=default
 ";
 
-%feature("docstring")  SlicedFormFactorList::size "size_t SlicedFormFactorList::size() const 
+%feature("docstring")  SlicedFormFactorList::size "size_t SlicedFormFactorList::size() const
 ";
 
-%feature("docstring")  SlicedFormFactorList::regionMap "std::map< size_t, std::vector< HomogeneousRegion > > SlicedFormFactorList::regionMap() const 
+%feature("docstring")  SlicedFormFactorList::regionMap "std::map< size_t, std::vector< HomogeneousRegion > > SlicedFormFactorList::regionMap() const
 ";
 
 
@@ -13324,7 +13478,7 @@ C++ includes: SpecularSimulation.h
 %feature("docstring")  SpecularSimulation::~SpecularSimulation "SpecularSimulation::~SpecularSimulation()
 ";
 
-%feature("docstring")  SpecularSimulation::clone "SpecularSimulation * SpecularSimulation::clone() const 
+%feature("docstring")  SpecularSimulation::clone "SpecularSimulation * SpecularSimulation::clone() const
 ";
 
 %feature("docstring")  SpecularSimulation::runSimulation "void SpecularSimulation::runSimulation()
@@ -13380,7 +13534,7 @@ returns vector of transmission coefficients for all alpha_i angles for given lay
 returns vector of Kz coefficients for all alpha_i angles for given layer index 
 ";
 
-%feature("docstring")  SpecularSimulation::getLayerRTCoefficients "SpecularSimulation::LayerRTCoefficients_t SpecularSimulation::getLayerRTCoefficients(size_t i_alpha, size_t i_layer) const 
+%feature("docstring")  SpecularSimulation::getLayerRTCoefficients "SpecularSimulation::LayerRTCoefficients_t SpecularSimulation::getLayerRTCoefficients(size_t i_alpha, size_t i_layer) const
 ";
 
 %feature("docstring")  SpecularSimulation::prepareSimulation "void SpecularSimulation::prepareSimulation()
@@ -13400,7 +13554,7 @@ C++ includes: ParticleDistributionsBuilder.h
 %feature("docstring")  SpheresWithLimitsDistributionBuilder::SpheresWithLimitsDistributionBuilder "SpheresWithLimitsDistributionBuilder::SpheresWithLimitsDistributionBuilder()
 ";
 
-%feature("docstring")  SpheresWithLimitsDistributionBuilder::buildSample "MultiLayer * SpheresWithLimitsDistributionBuilder::buildSample() const 
+%feature("docstring")  SpheresWithLimitsDistributionBuilder::buildSample "MultiLayer * SpheresWithLimitsDistributionBuilder::buildSample() const
 ";
 
 
@@ -13617,7 +13771,7 @@ C++ includes: ISquaredFunction.h
 %feature("docstring")  SquareLattice::SquareLattice "SquareLattice::SquareLattice(double length, double rotation_angle=0.0)
 ";
 
-%feature("docstring")  SquareLattice::clone "SquareLattice * SquareLattice::clone() const 
+%feature("docstring")  SquareLattice::clone "SquareLattice * SquareLattice::clone() const
 ";
 
 %feature("docstring")  SquareLattice::accept "void SquareLattice::accept(INodeVisitor *visitor) const final
@@ -13625,16 +13779,16 @@ C++ includes: ISquaredFunction.h
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  SquareLattice::length1 "virtual double SquareLattice::length1() const 
+%feature("docstring")  SquareLattice::length1 "virtual double SquareLattice::length1() const
 ";
 
-%feature("docstring")  SquareLattice::length2 "virtual double SquareLattice::length2() const 
+%feature("docstring")  SquareLattice::length2 "virtual double SquareLattice::length2() const
 ";
 
-%feature("docstring")  SquareLattice::latticeAngle "double SquareLattice::latticeAngle() const 
+%feature("docstring")  SquareLattice::latticeAngle "double SquareLattice::latticeAngle() const
 ";
 
-%feature("docstring")  SquareLattice::unitCellArea "double SquareLattice::unitCellArea() const 
+%feature("docstring")  SquareLattice::unitCellArea "double SquareLattice::unitCellArea() const
 ";
 
 
@@ -13649,7 +13803,7 @@ C++ includes: TwoDimLatticeBuilder.h
 %feature("docstring")  SquareLatticeBuilder::SquareLatticeBuilder "SquareLatticeBuilder::SquareLatticeBuilder()
 ";
 
-%feature("docstring")  SquareLatticeBuilder::buildSample "MultiLayer * SquareLatticeBuilder::buildSample() const 
+%feature("docstring")  SquareLatticeBuilder::buildSample "MultiLayer * SquareLatticeBuilder::buildSample() const
 ";
 
 
@@ -13667,19 +13821,19 @@ C++ includes: SSCAHelper.h
 %feature("docstring")  SSCAHelper::init "void SSCAHelper::init(const SafePointerVector< FormFactorCoherentSum > &ff_wrappers)
 ";
 
-%feature("docstring")  SSCAHelper::getCharacteristicSizeCoupling "complex_t SSCAHelper::getCharacteristicSizeCoupling(double qp, const SafePointerVector< FormFactorCoherentSum > &ff_wrappers) const 
+%feature("docstring")  SSCAHelper::getCharacteristicSizeCoupling "complex_t SSCAHelper::getCharacteristicSizeCoupling(double qp, const SafePointerVector< FormFactorCoherentSum > &ff_wrappers) const
 ";
 
-%feature("docstring")  SSCAHelper::getCharacteristicDistribution "complex_t SSCAHelper::getCharacteristicDistribution(double qp, const IInterferenceFunction *p_iff) const 
+%feature("docstring")  SSCAHelper::getCharacteristicDistribution "complex_t SSCAHelper::getCharacteristicDistribution(double qp, const IInterferenceFunction *p_iff) const
 ";
 
-%feature("docstring")  SSCAHelper::calculatePositionOffsetPhase "complex_t SSCAHelper::calculatePositionOffsetPhase(double qp, double radial_extension) const 
+%feature("docstring")  SSCAHelper::calculatePositionOffsetPhase "complex_t SSCAHelper::calculatePositionOffsetPhase(double qp, double radial_extension) const
 ";
 
-%feature("docstring")  SSCAHelper::getMeanFormfactorNorm "complex_t SSCAHelper::getMeanFormfactorNorm(double qp, const std::vector< complex_t > &precomputed_ff, const SafePointerVector< FormFactorCoherentSum > &ff_wrappers) const 
+%feature("docstring")  SSCAHelper::getMeanFormfactorNorm "complex_t SSCAHelper::getMeanFormfactorNorm(double qp, const std::vector< complex_t > &precomputed_ff, const SafePointerVector< FormFactorCoherentSum > &ff_wrappers) const
 ";
 
-%feature("docstring")  SSCAHelper::getMeanFormfactors "void SSCAHelper::getMeanFormfactors(double qp, Eigen::Matrix2cd &ff_orig, Eigen::Matrix2cd &ff_conj, const IInterferenceFunctionStrategy::matrixFFVector_t &precomputed_ff, const SafePointerVector< FormFactorCoherentSum > &ff_wrappers) const 
+%feature("docstring")  SSCAHelper::getMeanFormfactors "void SSCAHelper::getMeanFormfactors(double qp, Eigen::Matrix2cd &ff_orig, Eigen::Matrix2cd &ff_conj, const IInterferenceFunctionStrategy::matrixFFVector_t &precomputed_ff, const SafePointerVector< FormFactorCoherentSum > &ff_wrappers) const
 ";
 
 
@@ -13721,16 +13875,16 @@ C++ includes: TRange.h
 %feature("docstring")  TRange::~TRange "virtual TRange< T >::~TRange()
 ";
 
-%feature("docstring")  TRange::getLowerBound "T TRange< T >::getLowerBound() const 
+%feature("docstring")  TRange::getLowerBound "T TRange< T >::getLowerBound() const
 ";
 
-%feature("docstring")  TRange::getUpperBound "T TRange< T >::getUpperBound() const 
+%feature("docstring")  TRange::getUpperBound "T TRange< T >::getUpperBound() const
 ";
 
-%feature("docstring")  TRange::getDifference "T TRange< T >::getDifference() const 
+%feature("docstring")  TRange::getDifference "T TRange< T >::getDifference() const
 ";
 
-%feature("docstring")  TRange::inRange "bool TRange< T >::inRange(T value) const 
+%feature("docstring")  TRange::inRange "bool TRange< T >::inRange(T value) const
 ";
 
 
@@ -13817,16 +13971,16 @@ Retrieve the rotation type (general, around x, y or z-axis)
 Determine if the transformation is trivial (identity) 
 ";
 
-%feature("docstring")  Transform3D::print "void Transform3D::print(std::ostream &ostr) const 
+%feature("docstring")  Transform3D::print "void Transform3D::print(std::ostream &ostr) const
 ";
 
-%feature("docstring")  Transform3D::isXRotation "bool Transform3D::isXRotation() const 
+%feature("docstring")  Transform3D::isXRotation "bool Transform3D::isXRotation() const
 ";
 
-%feature("docstring")  Transform3D::isYRotation "bool Transform3D::isYRotation() const 
+%feature("docstring")  Transform3D::isYRotation "bool Transform3D::isYRotation() const
 ";
 
-%feature("docstring")  Transform3D::isZRotation "bool Transform3D::isZRotation() const 
+%feature("docstring")  Transform3D::isZRotation "bool Transform3D::isZRotation() const
 ";
 
 
@@ -13841,7 +13995,7 @@ C++ includes: TransformationsBuilder.h
 %feature("docstring")  TransformBoxBuilder::TransformBoxBuilder "TransformBoxBuilder::TransformBoxBuilder()
 ";
 
-%feature("docstring")  TransformBoxBuilder::buildSample "MultiLayer * TransformBoxBuilder::buildSample() const 
+%feature("docstring")  TransformBoxBuilder::buildSample "MultiLayer * TransformBoxBuilder::buildSample() const
 ";
 
 
@@ -13866,7 +14020,7 @@ C++ includes: RipplesBuilder.h
 %feature("docstring")  TriangularRippleBuilder::TriangularRippleBuilder "TriangularRippleBuilder::TriangularRippleBuilder()
 ";
 
-%feature("docstring")  TriangularRippleBuilder::buildSample "MultiLayer * TriangularRippleBuilder::buildSample() const 
+%feature("docstring")  TriangularRippleBuilder::buildSample "MultiLayer * TriangularRippleBuilder::buildSample() const
 ";
 
 
@@ -13901,7 +14055,7 @@ C++ includes: TRange.h
 %feature("docstring")  TSampledRange::TSampledRange "TSampledRange< T >::TSampledRange(size_t n_samples, T lowerBound, T upperBound)
 ";
 
-%feature("docstring")  TSampledRange::getNSamples "size_t TSampledRange< T >::getNSamples() const 
+%feature("docstring")  TSampledRange::getNSamples "size_t TSampledRange< T >::getNSamples() const
 ";
 
 
@@ -13916,7 +14070,7 @@ C++ includes: TwoLayerRoughnessBuilder.h
 %feature("docstring")  TwoLayerRoughnessBuilder::TwoLayerRoughnessBuilder "TwoLayerRoughnessBuilder::TwoLayerRoughnessBuilder()
 ";
 
-%feature("docstring")  TwoLayerRoughnessBuilder::buildSample "MultiLayer * TwoLayerRoughnessBuilder::buildSample() const 
+%feature("docstring")  TwoLayerRoughnessBuilder::buildSample "MultiLayer * TwoLayerRoughnessBuilder::buildSample() const
 ";
 
 
@@ -13931,7 +14085,7 @@ C++ includes: ParticleDistributionsBuilder.h
 %feature("docstring")  TwoTypesCylindersDistributionBuilder::TwoTypesCylindersDistributionBuilder "TwoTypesCylindersDistributionBuilder::TwoTypesCylindersDistributionBuilder()
 ";
 
-%feature("docstring")  TwoTypesCylindersDistributionBuilder::buildSample "MultiLayer * TwoTypesCylindersDistributionBuilder::buildSample() const 
+%feature("docstring")  TwoTypesCylindersDistributionBuilder::buildSample "MultiLayer * TwoTypesCylindersDistributionBuilder::buildSample() const
 ";
 
 
@@ -14010,7 +14164,7 @@ Returns value of first point of axis.
 Returns value of last point of axis. 
 ";
 
-%feature("docstring")  VariableBinAxis::getBinCenter "double VariableBinAxis::getBinCenter(size_t index) const 
+%feature("docstring")  VariableBinAxis::getBinCenter "double VariableBinAxis::getBinCenter(size_t index) const
 ";
 
 %feature("docstring")  VariableBinAxis::findClosestIndex "size_t VariableBinAxis::findClosestIndex(double value) const
@@ -14018,10 +14172,10 @@ Returns value of last point of axis.
 find bin index which is best match for given value 
 ";
 
-%feature("docstring")  VariableBinAxis::getBinCenters "std::vector< double > VariableBinAxis::getBinCenters() const 
+%feature("docstring")  VariableBinAxis::getBinCenters "std::vector< double > VariableBinAxis::getBinCenters() const
 ";
 
-%feature("docstring")  VariableBinAxis::getBinBoundaries "std::vector<double> VariableBinAxis::getBinBoundaries() const 
+%feature("docstring")  VariableBinAxis::getBinBoundaries "std::vector<double> VariableBinAxis::getBinBoundaries() const
 ";
 
 %feature("docstring")  VariableBinAxis::createClippedAxis "VariableBinAxis * VariableBinAxis::createClippedAxis(double left, double right) const
@@ -14047,7 +14201,7 @@ x:
 The value at which it crosses x-axes 
 ";
 
-%feature("docstring")  VerticalLine::clone "VerticalLine* VerticalLine::clone() const 
+%feature("docstring")  VerticalLine::clone "VerticalLine* VerticalLine::clone() const
 ";
 
 %feature("docstring")  VerticalLine::contains "bool VerticalLine::contains(double x, double y) const
@@ -14060,7 +14214,49 @@ Returns true if point with given coordinates is inside or on border of the shape
 Returns true if area defined by two bins is inside or on border of polygon (more precisely, if mid point of two bins satisfy this condition). 
 ";
 
-%feature("docstring")  VerticalLine::getXpos "double VerticalLine::getXpos() const 
+%feature("docstring")  VerticalLine::getXpos "double VerticalLine::getXpos() const
+";
+
+
+// File: classWavelengthIndependentMaterial.xml
+%feature("docstring") WavelengthIndependentMaterial "
+
+Material implementation based on wavelength-independent data (valid for a range of wavelengths)
+
+C++ includes: WavelengthIndependentMaterial.h
+";
+
+%feature("docstring")  WavelengthIndependentMaterial::~WavelengthIndependentMaterial "WavelengthIndependentMaterial::~WavelengthIndependentMaterial()
+";
+
+%feature("docstring")  WavelengthIndependentMaterial::clone "WavelengthIndependentMaterial * WavelengthIndependentMaterial::clone() const override
+
+Returns pointer to a copy of material. 
+";
+
+%feature("docstring")  WavelengthIndependentMaterial::refractiveIndex "complex_t WavelengthIndependentMaterial::refractiveIndex(double wavelength) const override
+
+Returns refractive index. 
+";
+
+%feature("docstring")  WavelengthIndependentMaterial::refractiveIndex2 "complex_t WavelengthIndependentMaterial::refractiveIndex2(double wavelength) const override
+
+Returns squared refractive index. 
+";
+
+%feature("docstring")  WavelengthIndependentMaterial::materialData "complex_t WavelengthIndependentMaterial::materialData() const override
+
+Returns underlying material data. 
+";
+
+%feature("docstring")  WavelengthIndependentMaterial::scalarSubtrSLD "complex_t WavelengthIndependentMaterial::scalarSubtrSLD(const WavevectorInfo &wavevectors) const override
+
+Returns (  $ \\\\pi/\\\\lambda^2 $ - sld), sld (in  $nm^{-2}$) being the scattering length density. 
+";
+
+%feature("docstring")  WavelengthIndependentMaterial::print "void WavelengthIndependentMaterial::print(std::ostream &ostr) const override
+
+Prints object data. 
 ";
 
 
@@ -14078,19 +14274,19 @@ C++ includes: WavevectorInfo.h
 %feature("docstring")  WavevectorInfo::WavevectorInfo "WavevectorInfo::WavevectorInfo(kvector_t ki, kvector_t kf, double wavelength)
 ";
 
-%feature("docstring")  WavevectorInfo::transformed "WavevectorInfo WavevectorInfo::transformed(const Transform3D &transform) const 
+%feature("docstring")  WavevectorInfo::transformed "WavevectorInfo WavevectorInfo::transformed(const Transform3D &transform) const
 ";
 
-%feature("docstring")  WavevectorInfo::getKi "cvector_t WavevectorInfo::getKi() const 
+%feature("docstring")  WavevectorInfo::getKi "cvector_t WavevectorInfo::getKi() const
 ";
 
-%feature("docstring")  WavevectorInfo::getKf "cvector_t WavevectorInfo::getKf() const 
+%feature("docstring")  WavevectorInfo::getKf "cvector_t WavevectorInfo::getKf() const
 ";
 
-%feature("docstring")  WavevectorInfo::getQ "cvector_t WavevectorInfo::getQ() const 
+%feature("docstring")  WavevectorInfo::getQ "cvector_t WavevectorInfo::getQ() const
 ";
 
-%feature("docstring")  WavevectorInfo::getWavelength "double WavevectorInfo::getWavelength() const 
+%feature("docstring")  WavevectorInfo::getWavelength "double WavevectorInfo::getWavelength() const
 ";
 
 
@@ -14114,13 +14310,13 @@ C++ includes: ZLimits.h
 %feature("docstring")  ZLimits::ZLimits "ZLimits::ZLimits(OneSidedLimit lower_limit, OneSidedLimit upper_limit)
 ";
 
-%feature("docstring")  ZLimits::isFinite "bool ZLimits::isFinite() const 
+%feature("docstring")  ZLimits::isFinite "bool ZLimits::isFinite() const
 ";
 
-%feature("docstring")  ZLimits::lowerLimit "OneSidedLimit ZLimits::lowerLimit() const 
+%feature("docstring")  ZLimits::lowerLimit "OneSidedLimit ZLimits::lowerLimit() const
 ";
 
-%feature("docstring")  ZLimits::upperLimit "OneSidedLimit ZLimits::upperLimit() const 
+%feature("docstring")  ZLimits::upperLimit "OneSidedLimit ZLimits::upperLimit() const
 ";
 
 
@@ -14145,43 +14341,49 @@ C++ includes: ZLimits.h
 // File: namespace_0D281.xml
 
 
-// File: namespace_0D296.xml
+// File: namespace_0D285.xml
 
 
-// File: namespace_0D304.xml
+// File: namespace_0D291.xml
 
 
-// File: namespace_0D310.xml
+// File: namespace_0D306.xml
 
 
-// File: namespace_0D313.xml
+// File: namespace_0D314.xml
 
 
-// File: namespace_0D315.xml
+// File: namespace_0D320.xml
 
 
-// File: namespace_0D336.xml
+// File: namespace_0D323.xml
 
 
-// File: namespace_0D345.xml
+// File: namespace_0D325.xml
 
 
-// File: namespace_0D378.xml
+// File: namespace_0D346.xml
 
 
-// File: namespace_0D385.xml
+// File: namespace_0D355.xml
 
 
-// File: namespace_0D491.xml
+// File: namespace_0D388.xml
 
 
-// File: namespace_0D514.xml
+// File: namespace_0D395.xml
 
 
-// File: namespace_0D56.xml
+// File: namespace_0D501.xml
 
 
-// File: namespace_0D62.xml
+// File: namespace_0D523.xml
+
+
+// File: namespace_0D57.xml
+
+
+// File: namespace_0D63.xml
 
 
 // File: namespace_0D76.xml
@@ -14587,6 +14789,17 @@ Returns units of main parameter.
 ";
 
 
+// File: namespacePhysConsts.xml
+
+
+// File: namespacePrecomputed.xml
+%feature("docstring")  Precomputed::GenerateArrayHelper "constexpr std::array<double, sizeof...(I)> Precomputed::GenerateArrayHelper(std::index_sequence< I... >)
+";
+
+%feature("docstring")  Precomputed::GenerateReciprocalFactorialArray "constexpr std::array<double, N> Precomputed::GenerateReciprocalFactorialArray()
+";
+
+
 // File: namespacePyEmbeddedUtils.xml
 %feature("docstring")  PyEmbeddedUtils::toString "std::string PyEmbeddedUtils::toString(PyObject *obj)
 
@@ -14747,6 +14960,11 @@ Basic GISAS simulation with the detector phi[0,2], theta[0,2].
 Basic GISAS for polarization studies. 
 ";
 
+%feature("docstring")  StandardSimulations::BasicPolarizedGISAS "GISASSimulation * StandardSimulations::BasicPolarizedGISAS()
+
+Basic GISAS simulation for spin flip channel. 
+";
+
 %feature("docstring")  StandardSimulations::MiniGISAS "GISASSimulation * StandardSimulations::MiniGISAS()
 
 GISAS simulation with small detector and phi[-2,2], theta[0,2]. 
@@ -14991,6 +15209,9 @@ Returns exp(I*z), where I is the imaginary unit.
 // File: MathConstants_8h.xml
 
 
+// File: PhysicalConstants_8h.xml
+
+
 // File: Bin_8cpp.xml
 %feature("docstring")  BinContains "bool BinContains(const Bin1D &bin, double value)
 
@@ -15095,9 +15316,6 @@ Add element vector to element vector with weight.
 // File: RoughMultiLayerComputation_8h.xml
 
 
-// File: Slice_8h.xml
-
-
 // File: SpecularComputation_8cpp.xml
 
 
@@ -15734,33 +15952,208 @@ make Swappable
 // File: Rectangle_8h.xml
 
 
-// File: HomogeneousMaterial_8cpp.xml
-%feature("docstring")  Unit_Matrix "static const Eigen::Matrix2cd Unit_Matrix(Eigen::Matrix2cd::Identity())
+// File: BaseMaterialImpl_8cpp.xml
+
+
+// File: BaseMaterialImpl_8h.xml
+
+
+// File: Material_8cpp.xml
+
+
+// File: Material_8h.xml
+
+
+// File: MaterialFactoryFuncs_8cpp.xml
+%feature("docstring")  HomogeneousMaterial "Material HomogeneousMaterial(const std::string &name, complex_t refractive_index, kvector_t magnetization)
+
+Constructs a material with  name and  refractive_index.
+
+Parameters:
+-----------
+
+magnetization: 
+magnetization (in A/m) 
+";
+
+%feature("docstring")  HomogeneousMaterial "Material HomogeneousMaterial(const std::string &name, double delta, double beta, kvector_t magnetization)
+
+Constructs a material with  name and refractive_index parameters  $\\\\delta$ and  $\\\\beta$ for refractive index  $n = 1 - \\\\delta + i \\\\beta$.
+
+Parameters:
+-----------
+
+magnetization: 
+magnetization (in A/m) 
 ";
 
-%feature("docstring")  Pauli_X "static const Eigen::Matrix2cd Pauli_X((Eigen::Matrix2cd()<< 0, 1, 1, 0).finished())
+%feature("docstring")  HomogeneousMaterial "Material HomogeneousMaterial()
+
+Constructs vacuum material based on refractive coefficients. Though in practice there is no difference between vacuum materials produced with  MaterialBySLD() and  HomogeneousMaterial(), they are not equal because of the difference in the type of underlying data 
 ";
 
-%feature("docstring")  Pauli_Y "static const Eigen::Matrix2cd Pauli_Y((Eigen::Matrix2cd()<< 0,-I, I, 0).finished())
+%feature("docstring")  MaterialBySLD "Material MaterialBySLD(const std::string &name, double sld, double abs_term, kvector_t magnetization)
+
+Constructs a wavelength-independent material with given sld and absorptive term Absorptive term is wavelength-independent (normalized to a wavelength) and can be considered as inverse of imaginary part of complex scattering length density:  $ SLD = (N b_{coh}, N \\\\sigma_{abs}(\\\\lambda_0) / \\\\lambda_0) $ Here  $ N $ - material number density,  $ b_{coh} $ - bound coherent scattering length  $ \\\\sigma_{abs}(\\\\lambda_0) $ - absorption cross-section at  $ \\\\lambda_0 $ wavelength
+
+Parameters:
+-----------
+
+sld: 
+scattering length density,  $ nm^{-2} $
+
+abs_term: 
+wavelength-independent absorptive term,  $ nm^{-2} $
+
+magnetization: 
+magnetization (in A/m) 
 ";
 
-%feature("docstring")  Pauli_Z "static const Eigen::Matrix2cd Pauli_Z((Eigen::Matrix2cd()<< 1, 0, 0,-1).finished())
+%feature("docstring")  MaterialByAbsCX "Material MaterialByAbsCX(const std::string &name, double sld, double abs_cx, kvector_t magnetization)
+
+Constructs a wavelength-independent material with given sld and absorptive term As opposed to MaterialBySLD, absorptive term is the product of number density and absorptive cross-section  $ \\\\sigma_0 $ at  $ \\\\lambda = 1.798197$ Angstroms. The latter corresponds to 2200 m/s neutrons.
+
+Parameters:
+-----------
+
+sld: 
+scattering length density,  $ nm^{-2} $
+
+abs_cx: 
+absorptive term at  $ \\\\lambda = 1.798197$ Angstroms,  $ nm^{-1} $
+
+magnetization: 
+magnetization (in A/m) 
+";
+
+%feature("docstring")  MaterialBySLD "Material MaterialBySLD()
+
+Constructs wavelength-independent vacuum material. Though in practice there is no difference between vacuum materials produced with  MaterialBySLD() and  HomogeneousMaterial(), they are not equal because of the difference in the type of underlying data 
+";
+
+
+// File: MaterialFactoryFuncs_8h.xml
+%feature("docstring")  HomogeneousMaterial "BA_CORE_API_ Material HomogeneousMaterial(const std::string &name, complex_t refractive_index, kvector_t magnetization=kvector_t())
+
+Constructs a material with  name and  refractive_index.
+
+Parameters:
+-----------
+
+magnetization: 
+magnetization (in A/m) 
+";
+
+%feature("docstring")  HomogeneousMaterial "BA_CORE_API_ Material HomogeneousMaterial(const std::string &name, double delta, double beta, kvector_t magnetization=kvector_t())
+
+Constructs a material with  name and refractive_index parameters  $\\\\delta$ and  $\\\\beta$ for refractive index  $n = 1 - \\\\delta + i \\\\beta$.
+
+Parameters:
+-----------
+
+magnetization: 
+magnetization (in A/m) 
+";
+
+%feature("docstring")  HomogeneousMaterial "BA_CORE_API_ Material HomogeneousMaterial()
+
+Constructs vacuum material based on refractive coefficients. Though in practice there is no difference between vacuum materials produced with  MaterialBySLD() and  HomogeneousMaterial(), they are not equal because of the difference in the type of underlying data 
+";
+
+%feature("docstring")  MaterialBySLD "BA_CORE_API_ Material MaterialBySLD(const std::string &name, double sld, double abs_term, kvector_t magnetization=kvector_t())
+
+Constructs a wavelength-independent material with given sld and absorptive term Absorptive term is wavelength-independent (normalized to a wavelength) and can be considered as inverse of imaginary part of complex scattering length density:  $ SLD = (N b_{coh}, N \\\\sigma_{abs}(\\\\lambda_0) / \\\\lambda_0) $ Here  $ N $ - material number density,  $ b_{coh} $ - bound coherent scattering length  $ \\\\sigma_{abs}(\\\\lambda_0) $ - absorption cross-section at  $ \\\\lambda_0 $ wavelength
+
+Parameters:
+-----------
+
+sld: 
+scattering length density,  $ nm^{-2} $
+
+abs_term: 
+wavelength-independent absorptive term,  $ nm^{-2} $
+
+magnetization: 
+magnetization (in A/m) 
+";
+
+%feature("docstring")  MaterialByAbsCX "BA_CORE_API_ Material MaterialByAbsCX(const std::string &name, double sld, double abs_cx, kvector_t magnetization=kvector_t())
+
+Constructs a wavelength-independent material with given sld and absorptive term As opposed to MaterialBySLD, absorptive term is the product of number density and absorptive cross-section  $ \\\\sigma_0 $ at  $ \\\\lambda = 1.798197$ Angstroms. The latter corresponds to 2200 m/s neutrons.
+
+Parameters:
+-----------
+
+sld: 
+scattering length density,  $ nm^{-2} $
+
+abs_cx: 
+absorptive term at  $ \\\\lambda = 1.798197$ Angstroms,  $ nm^{-1} $
+
+magnetization: 
+magnetization (in A/m) 
+";
+
+%feature("docstring")  MaterialBySLD "BA_CORE_API_ Material MaterialBySLD()
+
+Constructs wavelength-independent vacuum material. Though in practice there is no difference between vacuum materials produced with  MaterialBySLD() and  HomogeneousMaterial(), they are not equal because of the difference in the type of underlying data 
+";
+
+
+// File: MaterialUtils_8cpp.xml
+%feature("docstring")  Unit_Matrix "const Eigen::Matrix2cd Unit_Matrix(Eigen::Matrix2cd::Identity())
+";
+
+%feature("docstring")  MagnetizationCorrection "Eigen::Matrix2cd MagnetizationCorrection(complex_t unit_factor, double magnetic_factor, BasicVector3D< T > polarization)
+
+Utility to compute magnetization correction for reduced potential and scattering length density. 
+";
+
+%feature("docstring")  MagnetizationCorrection "template Eigen::Matrix2cd MagnetizationCorrection(complex_t unit_factor, double magnetic_factor, kvector_t polarization)
+";
+
+%feature("docstring")  MagnetizationCorrection "template Eigen::Matrix2cd MagnetizationCorrection(complex_t unit_factor, double magnetic_factor, cvector_t polarization)
 ";
 
 %feature("docstring")  ScalarReducedPotential "complex_t ScalarReducedPotential(complex_t n, kvector_t k, double n_ref)
+
+Function for calculating the reduced potential, used for obtaining the Fresnel coefficients (non-polarized material case) 
 ";
 
 %feature("docstring")  PolarizedReducedPotential "Eigen::Matrix2cd PolarizedReducedPotential(complex_t n, kvector_t b_field, kvector_t k, double n_ref)
+
+Function for calculating the reduced potential, used for obtaining the Fresnel coefficients (polarized material case) 
 ";
 
 
-// File: HomogeneousMaterial_8h.xml
+// File: MaterialUtils_8h.xml
 %feature("docstring")  ScalarReducedPotential "complex_t ScalarReducedPotential(complex_t n, kvector_t k, double n_ref)
+
+Function for calculating the reduced potential, used for obtaining the Fresnel coefficients (non-polarized material case) 
 ";
 
 %feature("docstring")  PolarizedReducedPotential "Eigen::Matrix2cd PolarizedReducedPotential(complex_t n, kvector_t b_field, kvector_t k, double n_ref)
+
+Function for calculating the reduced potential, used for obtaining the Fresnel coefficients (polarized material case) 
 ";
 
+%feature("docstring")  MagnetizationCorrection "BA_CORE_API_ Eigen::Matrix2cd MagnetizationCorrection(complex_t unit_factor, double magnetic_factor, BasicVector3D< T > polarization)
+
+Utility to compute magnetization correction for reduced potential and scattering length density. 
+";
+
+
+// File: RefractiveCoefMaterial_8cpp.xml
+
+
+// File: RefractiveCoefMaterial_8h.xml
+
+
+// File: WavelengthIndependentMaterial_8cpp.xml
+
+
+// File: WavelengthIndependentMaterial_8h.xml
+
 
 // File: DecouplingApproximationStrategy_8cpp.xml
 
@@ -16593,9 +16986,6 @@ Template function to create an integrator object.
 // File: OrderedMap_8h.xml
 
 
-// File: Precomputed_8cpp.xml
-
-
 // File: Precomputed_8h.xml
 
 
diff --git a/auto/Wrap/libBornAgainCore.py b/auto/Wrap/libBornAgainCore.py
index 6ba1ed325be..97b2097613e 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
@@ -1873,7 +1876,7 @@ class INamed(_object):
         """
         getName(INamed self) -> std::string
 
-        std::string INamed::getName() const 
+        std::string INamed::getName() const
 
         """
         return _libBornAgainCore.INamed_getName(self)
@@ -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,14 +3602,14 @@ 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):
         """
         transformed(WavevectorInfo self, Transform3D const & transform) -> WavevectorInfo
 
-        WavevectorInfo WavevectorInfo::transformed(const Transform3D &transform) const 
+        WavevectorInfo WavevectorInfo::transformed(const Transform3D &transform) const
 
         """
         return _libBornAgainCore.WavevectorInfo_transformed(self, transform)
@@ -3618,7 +3619,7 @@ class WavevectorInfo(_object):
         """
         getKi(WavevectorInfo self) -> cvector_t
 
-        cvector_t WavevectorInfo::getKi() const 
+        cvector_t WavevectorInfo::getKi() const
 
         """
         return _libBornAgainCore.WavevectorInfo_getKi(self)
@@ -3628,7 +3629,7 @@ class WavevectorInfo(_object):
         """
         getKf(WavevectorInfo self) -> cvector_t
 
-        cvector_t WavevectorInfo::getKf() const 
+        cvector_t WavevectorInfo::getKf() const
 
         """
         return _libBornAgainCore.WavevectorInfo_getKf(self)
@@ -3638,7 +3639,7 @@ class WavevectorInfo(_object):
         """
         getQ(WavevectorInfo self) -> cvector_t
 
-        cvector_t WavevectorInfo::getQ() const 
+        cvector_t WavevectorInfo::getQ() const
 
         """
         return _libBornAgainCore.WavevectorInfo_getQ(self)
@@ -3648,7 +3649,7 @@ class WavevectorInfo(_object):
         """
         getWavelength(WavevectorInfo self) -> double
 
-        double WavevectorInfo::getWavelength() const 
+        double WavevectorInfo::getWavelength() const
 
         """
         return _libBornAgainCore.WavevectorInfo_getWavelength(self)
@@ -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
@@ -3775,7 +3776,12 @@ class Beam(INode):
 
 
     def getBlochVector(self):
-        """getBlochVector(Beam self) -> kvector_t"""
+        """
+        getBlochVector(Beam self) -> kvector_t
+
+        kvector_t Beam::getBlochVector() const
+
+        """
         return _libBornAgainCore.Beam_getBlochVector(self)
 
 
@@ -3783,7 +3789,7 @@ class Beam(INode):
         """
         getWavelength(Beam self) -> double
 
-        double Beam::getWavelength() const 
+        double Beam::getWavelength() const
 
         """
         return _libBornAgainCore.Beam_getWavelength(self)
@@ -3793,7 +3799,7 @@ class Beam(INode):
         """
         getAlpha(Beam self) -> double
 
-        double Beam::getAlpha() const 
+        double Beam::getAlpha() const
 
         """
         return _libBornAgainCore.Beam_getAlpha(self)
@@ -3803,7 +3809,7 @@ class Beam(INode):
         """
         getPhi(Beam self) -> double
 
-        double Beam::getPhi() const 
+        double Beam::getPhi() const
 
         """
         return _libBornAgainCore.Beam_getPhi(self)
@@ -3843,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
@@ -3858,7 +3864,7 @@ class Bin1D(_object):
         """
         getMidPoint(Bin1D self) -> double
 
-        double Bin1D::getMidPoint() const 
+        double Bin1D::getMidPoint() const
 
         """
         return _libBornAgainCore.Bin1D_getMidPoint(self)
@@ -3868,7 +3874,7 @@ class Bin1D(_object):
         """
         getBinSize(Bin1D self) -> double
 
-        double Bin1D::getBinSize() const 
+        double Bin1D::getBinSize() const
 
         """
         return _libBornAgainCore.Bin1D_getBinSize(self)
@@ -3919,14 +3925,14 @@ class Bin1DKVector(_object):
         this = _libBornAgainCore.new_Bin1DKVector(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def getMidPoint(self):
         """
         getMidPoint(Bin1DKVector self) -> kvector_t
 
-        kvector_t Bin1DKVector::getMidPoint() const 
+        kvector_t Bin1DKVector::getMidPoint() const
 
         """
         return _libBornAgainCore.Bin1DKVector_getMidPoint(self)
@@ -3936,7 +3942,7 @@ class Bin1DKVector(_object):
         """
         getDelta(Bin1DKVector self) -> kvector_t
 
-        kvector_t Bin1DKVector::getDelta() const 
+        kvector_t Bin1DKVector::getDelta() const
 
         """
         return _libBornAgainCore.Bin1DKVector_getDelta(self)
@@ -3984,14 +3990,14 @@ class Bin1DCVector(_object):
         this = _libBornAgainCore.new_Bin1DCVector(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def getMidPoint(self):
         """
         getMidPoint(Bin1DCVector self) -> cvector_t
 
-        cvector_t Bin1DCVector::getMidPoint() const 
+        cvector_t Bin1DCVector::getMidPoint() const
 
         """
         return _libBornAgainCore.Bin1DCVector_getMidPoint(self)
@@ -4001,7 +4007,7 @@ class Bin1DCVector(_object):
         """
         getDelta(Bin1DCVector self) -> cvector_t
 
-        cvector_t Bin1DCVector::getDelta() const 
+        cvector_t Bin1DCVector::getDelta() const
 
         """
         return _libBornAgainCore.Bin1DCVector_getDelta(self)
@@ -4184,7 +4190,7 @@ class IAxis(_object):
         """
         getBinCenters(IAxis self) -> vdouble1d_t
 
-        std::vector< double > IAxis::getBinCenters() const 
+        std::vector< double > IAxis::getBinCenters() const
 
         """
         return _libBornAgainCore.IAxis_getBinCenters(self)
@@ -4194,7 +4200,7 @@ class IAxis(_object):
         """
         getBinBoundaries(IAxis self) -> vdouble1d_t
 
-        std::vector< double > IAxis::getBinBoundaries() const 
+        std::vector< double > IAxis::getBinBoundaries() const
 
         """
         return _libBornAgainCore.IAxis_getBinBoundaries(self)
@@ -4281,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
@@ -4350,7 +4356,7 @@ class VariableBinAxis(IAxis):
         """
         getBinCenter(VariableBinAxis self, size_t index) -> double
 
-        double VariableBinAxis::getBinCenter(size_t index) const 
+        double VariableBinAxis::getBinCenter(size_t index) const
 
         """
         return _libBornAgainCore.VariableBinAxis_getBinCenter(self, index)
@@ -4372,7 +4378,7 @@ class VariableBinAxis(IAxis):
         """
         getBinCenters(VariableBinAxis self) -> vdouble1d_t
 
-        std::vector< double > VariableBinAxis::getBinCenters() const 
+        std::vector< double > VariableBinAxis::getBinCenters() const
 
         """
         return _libBornAgainCore.VariableBinAxis_getBinCenters(self)
@@ -4382,7 +4388,7 @@ class VariableBinAxis(IAxis):
         """
         getBinBoundaries(VariableBinAxis self) -> vdouble1d_t
 
-        std::vector<double> VariableBinAxis::getBinBoundaries() const 
+        std::vector<double> VariableBinAxis::getBinBoundaries() const
 
         """
         return _libBornAgainCore.VariableBinAxis_getBinBoundaries(self)
@@ -4454,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
@@ -4532,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
@@ -4565,7 +4571,7 @@ class CustomBinAxis(VariableBinAxis):
         """
         getBinCenters(CustomBinAxis self) -> vdouble1d_t
 
-        std::vector< double > CustomBinAxis::getBinCenters() const 
+        std::vector< double > CustomBinAxis::getBinCenters() const
 
         """
         return _libBornAgainCore.CustomBinAxis_getBinCenters(self)
@@ -4669,9 +4675,9 @@ class ISample(ICloneable, INode):
 
     def material(self):
         """
-        material(ISample self) -> HomogeneousMaterial
+        material(ISample self) -> Material
 
-        virtual const HomogeneousMaterial* ISample::material() const
+        virtual const Material* ISample::material() const
 
         Returns nullptr, unless overwritten to return a specific material. 
 
@@ -4681,9 +4687,9 @@ class ISample(ICloneable, INode):
 
     def containedMaterials(self):
         """
-        containedMaterials(ISample self) -> std::vector< HomogeneousMaterial const *,std::allocator< HomogeneousMaterial const * > >
+        containedMaterials(ISample self) -> std::vector< Material const *,std::allocator< Material const * > >
 
-        std::vector< const HomogeneousMaterial * > ISample::containedMaterials() const
+        std::vector< const Material * > ISample::containedMaterials() const
 
         Returns set of unique materials contained in this  ISample. 
 
@@ -4709,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
@@ -4938,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()
@@ -4981,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):
@@ -5103,14 +5109,14 @@ class FitStrategyDefault(IFitStrategy):
         this = _libBornAgainCore.new_FitStrategyDefault()
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
         """
         clone(FitStrategyDefault self) -> FitStrategyDefault
 
-        FitStrategyDefault * FitStrategyDefault::clone() const 
+        FitStrategyDefault * FitStrategyDefault::clone() const
 
         """
         return _libBornAgainCore.FitStrategyDefault_clone(self)
@@ -5199,7 +5205,7 @@ class IntensityFunctionLog(IIntensityFunction):
         """
         clone(IntensityFunctionLog self) -> IntensityFunctionLog
 
-        virtual IntensityFunctionLog* IntensityFunctionLog::clone() const 
+        virtual IntensityFunctionLog* IntensityFunctionLog::clone() const
 
         """
         return _libBornAgainCore.IntensityFunctionLog_clone(self)
@@ -5209,7 +5215,7 @@ class IntensityFunctionLog(IIntensityFunction):
         """
         evaluate(IntensityFunctionLog self, double value) -> double
 
-        double IntensityFunctionLog::evaluate(double value) const 
+        double IntensityFunctionLog::evaluate(double value) const
 
         """
         return _libBornAgainCore.IntensityFunctionLog_evaluate(self, value)
@@ -5229,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)
@@ -5260,7 +5266,7 @@ class IntensityFunctionSqrt(IIntensityFunction):
         """
         clone(IntensityFunctionSqrt self) -> IntensityFunctionSqrt
 
-        virtual IntensityFunctionSqrt* IntensityFunctionSqrt::clone() const 
+        virtual IntensityFunctionSqrt* IntensityFunctionSqrt::clone() const
 
         """
         return _libBornAgainCore.IntensityFunctionSqrt_clone(self)
@@ -5270,7 +5276,7 @@ class IntensityFunctionSqrt(IIntensityFunction):
         """
         evaluate(IntensityFunctionSqrt self, double value) -> double
 
-        double IntensityFunctionSqrt::evaluate(double value) const 
+        double IntensityFunctionSqrt::evaluate(double value) const
 
         """
         return _libBornAgainCore.IntensityFunctionSqrt_evaluate(self, value)
@@ -5290,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)
@@ -5394,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
@@ -5403,7 +5409,7 @@ class IntensityNormalizer(IIntensityNormalizer):
         """
         clone(IntensityNormalizer self) -> IntensityNormalizer
 
-        IntensityNormalizer * IntensityNormalizer::clone() const 
+        IntensityNormalizer * IntensityNormalizer::clone() const
 
         """
         return _libBornAgainCore.IntensityNormalizer_clone(self)
@@ -5425,7 +5431,7 @@ class IntensityNormalizer(IIntensityNormalizer):
         """
         createNormalizedData(IntensityNormalizer self, IntensityData data) -> IntensityData
 
-        OutputData< double > * IntensityNormalizer::createNormalizedData(const OutputData< double > &data) const 
+        OutputData< double > * IntensityNormalizer::createNormalizedData(const OutputData< double > &data) const
 
         """
         return _libBornAgainCore.IntensityNormalizer_createNormalizedData(self, data)
@@ -5485,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
@@ -5608,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
@@ -5905,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
@@ -5982,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
@@ -6112,7 +6118,7 @@ class FitObject(INode, INoncopyable):
         """
         getDefaultAxisUnits(FitObject self) -> std::string
 
-        std::string FitObject::getDefaultAxisUnits() const 
+        std::string FitObject::getDefaultAxisUnits() const
 
         """
         return _libBornAgainCore.FitObject_getDefaultAxisUnits(self)
@@ -6134,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
@@ -6197,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
@@ -6206,7 +6212,7 @@ class FitParameter(libBornAgainFit.IFitParameter):
         """
         clone(FitParameter self) -> FitParameter
 
-        FitParameter * FitParameter::clone() const 
+        FitParameter * FitParameter::clone() const
 
         """
         return _libBornAgainCore.FitParameter_clone(self)
@@ -6264,7 +6270,7 @@ class FitParameter(libBornAgainFit.IFitParameter):
         """
         patterns(FitParameter self) -> vector_string_t
 
-        std::vector< std::string > FitParameter::patterns() const 
+        std::vector< std::string > FitParameter::patterns() const
 
         """
         return _libBornAgainCore.FitParameter_patterns(self)
@@ -6338,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
@@ -6674,7 +6680,7 @@ class FitSuite(IObservable):
         getRealOutputData(FitSuite self, size_t i_item=0) -> IntensityData
         getRealOutputData(FitSuite self) -> IntensityData
 
-        const OutputData< double > * FitSuite::getRealOutputData(size_t i_item=0) const 
+        const OutputData< double > * FitSuite::getRealOutputData(size_t i_item=0) const
 
         """
         return _libBornAgainCore.FitSuite_getRealOutputData(self, i_item)
@@ -6685,7 +6691,7 @@ class FitSuite(IObservable):
         getSimulationOutputData(FitSuite self, size_t i_item=0) -> IntensityData
         getSimulationOutputData(FitSuite self) -> IntensityData
 
-        const OutputData< double > * FitSuite::getSimulationOutputData(size_t i_item=0) const 
+        const OutputData< double > * FitSuite::getSimulationOutputData(size_t i_item=0) const
 
         """
         return _libBornAgainCore.FitSuite_getSimulationOutputData(self, i_item)
@@ -6696,7 +6702,7 @@ class FitSuite(IObservable):
         getChiSquaredOutputData(FitSuite self, size_t i_item=0) -> IntensityData
         getChiSquaredOutputData(FitSuite self) -> IntensityData
 
-        const OutputData< double > * FitSuite::getChiSquaredOutputData(size_t i_item=0) const 
+        const OutputData< double > * FitSuite::getChiSquaredOutputData(size_t i_item=0) const
 
         """
         return _libBornAgainCore.FitSuite_getChiSquaredOutputData(self, i_item)
@@ -6770,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
@@ -6953,7 +6959,7 @@ class FitSuiteObjects(INode, INoncopyable):
         """
         size(FitSuiteObjects self) -> size_t
 
-        size_t FitSuiteObjects::size() const 
+        size_t FitSuiteObjects::size() const
 
         """
         return _libBornAgainCore.FitSuiteObjects_size(self)
@@ -6996,7 +7002,7 @@ class FitSuiteObjects(INode, INoncopyable):
         getDefaultAxesUnits(FitSuiteObjects self, size_t i_item=0) -> std::string
         getDefaultAxesUnits(FitSuiteObjects self) -> std::string
 
-        std::string FitSuiteObjects::getDefaultAxesUnits(size_t i_item=0) const 
+        std::string FitSuiteObjects::getDefaultAxesUnits(size_t i_item=0) const
 
         """
         return _libBornAgainCore.FitSuiteObjects_getDefaultAxesUnits(self, i_item)
@@ -7121,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):
@@ -7210,14 +7212,14 @@ class AdjustMinimizerStrategy(IFitStrategy):
         this = _libBornAgainCore.new_AdjustMinimizerStrategy(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
         """
         clone(AdjustMinimizerStrategy self) -> AdjustMinimizerStrategy
 
-        AdjustMinimizerStrategy * AdjustMinimizerStrategy::clone() const 
+        AdjustMinimizerStrategy * AdjustMinimizerStrategy::clone() const
 
         """
         return _libBornAgainCore.AdjustMinimizerStrategy_clone(self)
@@ -7283,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):
@@ -7343,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):
@@ -7387,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
@@ -7658,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
@@ -7667,7 +7667,7 @@ class Crystal(IClusteredParticles):
         """
         clone(Crystal self) -> Crystal
 
-        Crystal * Crystal::clone() const overridefinal
+        Crystal * Crystal::clone() const override final
 
         Returns a clone of this  ISample object. 
 
@@ -7679,7 +7679,7 @@ class Crystal(IClusteredParticles):
         """
         accept(Crystal self, INodeVisitor visitor)
 
-        void Crystal::accept(INodeVisitor *visitor) const overridefinal
+        void Crystal::accept(INodeVisitor *visitor) const override final
 
         Calls the  INodeVisitor's visit method. 
 
@@ -7691,7 +7691,7 @@ class Crystal(IClusteredParticles):
         """
         createTotalFormFactor(Crystal self, IFormFactor meso_crystal_form_factor, IRotation p_rotation, kvector_t translation) -> IFormFactor
 
-        IFormFactor * Crystal::createTotalFormFactor(const IFormFactor &meso_crystal_form_factor, const IRotation *p_rotation, const kvector_t &translation) const overridefinal
+        IFormFactor * Crystal::createTotalFormFactor(const IFormFactor &meso_crystal_form_factor, const IRotation *p_rotation, const kvector_t &translation) const override final
 
         Creates a total form factor for the mesocrystal with a specific shape and content The bulk content of the mesocrystal is encapsulated by the  IClusteredParticles object itself 
 
@@ -7703,7 +7703,7 @@ class Crystal(IClusteredParticles):
         """
         homogeneousRegions(Crystal self) -> std::vector< HomogeneousRegion,std::allocator< HomogeneousRegion > >
 
-        std::vector< HomogeneousRegion > Crystal::homogeneousRegions() const overridefinal
+        std::vector< HomogeneousRegion > Crystal::homogeneousRegions() const override final
 
         Creates region information with volumetric densities instead of absolute volume These densities need to be multiplied by the total mesocrystal volume 
 
@@ -7716,7 +7716,7 @@ class Crystal(IClusteredParticles):
         transformedLattice(Crystal self, IRotation p_rotation=None) -> Lattice
         transformedLattice(Crystal self) -> Lattice
 
-        Lattice Crystal::transformedLattice(const IRotation *p_rotation=nullptr) const 
+        Lattice Crystal::transformedLattice(const IRotation *p_rotation=nullptr) const
 
         """
         return _libBornAgainCore.Crystal_transformedLattice(self, p_rotation)
@@ -7736,7 +7736,7 @@ class Crystal(IClusteredParticles):
         """
         getChildren(Crystal self) -> swig_dummy_type_const_inode_vector
 
-        std::vector< const INode * > Crystal::getChildren() const overridefinal
+        std::vector< const INode * > Crystal::getChildren() const override final
 
         Returns a vector of children (const). 
 
@@ -7913,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
@@ -7956,7 +7956,7 @@ class DistributionGate(IDistribution1D):
         """
         getMin(DistributionGate self) -> double
 
-        double DistributionGate::getMin() const 
+        double DistributionGate::getMin() const
 
         """
         return _libBornAgainCore.DistributionGate_getMin(self)
@@ -7966,7 +7966,7 @@ class DistributionGate(IDistribution1D):
         """
         getMax(DistributionGate self) -> double
 
-        double DistributionGate::getMax() const 
+        double DistributionGate::getMax() const
 
         """
         return _libBornAgainCore.DistributionGate_getMax(self)
@@ -8042,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
@@ -8085,7 +8085,7 @@ class DistributionLorentz(IDistribution1D):
         """
         getHWHM(DistributionLorentz self) -> double
 
-        double DistributionLorentz::getHWHM() const 
+        double DistributionLorentz::getHWHM() const
 
         """
         return _libBornAgainCore.DistributionLorentz_getHWHM(self)
@@ -8161,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
@@ -8204,7 +8204,7 @@ class DistributionGaussian(IDistribution1D):
         """
         getStdDev(DistributionGaussian self) -> double
 
-        double DistributionGaussian::getStdDev() const 
+        double DistributionGaussian::getStdDev() const
 
         """
         return _libBornAgainCore.DistributionGaussian_getStdDev(self)
@@ -8280,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
@@ -8323,7 +8323,7 @@ class DistributionLogNormal(IDistribution1D):
         """
         getMedian(DistributionLogNormal self) -> double
 
-        double DistributionLogNormal::getMedian() const 
+        double DistributionLogNormal::getMedian() const
 
         """
         return _libBornAgainCore.DistributionLogNormal_getMedian(self)
@@ -8333,7 +8333,7 @@ class DistributionLogNormal(IDistribution1D):
         """
         getScalePar(DistributionLogNormal self) -> double
 
-        double DistributionLogNormal::getScalePar() const 
+        double DistributionLogNormal::getScalePar() const
 
         """
         return _libBornAgainCore.DistributionLogNormal_getScalePar(self)
@@ -8421,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
@@ -8464,7 +8464,7 @@ class DistributionCosine(IDistribution1D):
         """
         getSigma(DistributionCosine self) -> double
 
-        double DistributionCosine::getSigma() const 
+        double DistributionCosine::getSigma() const
 
         """
         return _libBornAgainCore.DistributionCosine_getSigma(self)
@@ -8540,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
@@ -8583,7 +8583,7 @@ class DistributionTrapezoid(IDistribution1D):
         """
         getLeftWidth(DistributionTrapezoid self) -> double
 
-        double DistributionTrapezoid::getLeftWidth() const 
+        double DistributionTrapezoid::getLeftWidth() const
 
         """
         return _libBornAgainCore.DistributionTrapezoid_getLeftWidth(self)
@@ -8593,7 +8593,7 @@ class DistributionTrapezoid(IDistribution1D):
         """
         getMiddleWidth(DistributionTrapezoid self) -> double
 
-        double DistributionTrapezoid::getMiddleWidth() const 
+        double DistributionTrapezoid::getMiddleWidth() const
 
         """
         return _libBornAgainCore.DistributionTrapezoid_getMiddleWidth(self)
@@ -8603,7 +8603,7 @@ class DistributionTrapezoid(IDistribution1D):
         """
         getRightWidth(DistributionTrapezoid self) -> double
 
-        double DistributionTrapezoid::getRightWidth() const 
+        double DistributionTrapezoid::getRightWidth() const
 
         """
         return _libBornAgainCore.DistributionTrapezoid_getRightWidth(self)
@@ -8675,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):
@@ -8714,7 +8714,7 @@ class DetectorMask(_object):
         """
         isMasked(DetectorMask self, size_t index) -> bool
 
-        bool DetectorMask::isMasked(size_t index) const 
+        bool DetectorMask::isMasked(size_t index) const
 
         """
         return _libBornAgainCore.DetectorMask_isMasked(self, index)
@@ -8724,7 +8724,7 @@ class DetectorMask(_object):
         """
         getMaskData(DetectorMask self) -> OutputData< bool > const *
 
-        const OutputData<bool>* DetectorMask::getMaskData() const 
+        const OutputData<bool>* DetectorMask::getMaskData() const
 
         """
         return _libBornAgainCore.DetectorMask_getMaskData(self)
@@ -8734,7 +8734,7 @@ class DetectorMask(_object):
         """
         createHistogram(DetectorMask self) -> Histogram2D
 
-        Histogram2D * DetectorMask::createHistogram() const 
+        Histogram2D * DetectorMask::createHistogram() const
 
         """
         return _libBornAgainCore.DetectorMask_createHistogram(self)
@@ -8768,7 +8768,7 @@ class DetectorMask(_object):
         """
         numberOfMaskedChannels(DetectorMask self) -> int
 
-        int DetectorMask::numberOfMaskedChannels() const 
+        int DetectorMask::numberOfMaskedChannels() const
 
         """
         return _libBornAgainCore.DetectorMask_numberOfMaskedChannels(self)
@@ -8778,7 +8778,7 @@ class DetectorMask(_object):
         """
         numberOfMasks(DetectorMask self) -> size_t
 
-        size_t DetectorMask::numberOfMasks() const 
+        size_t DetectorMask::numberOfMasks() const
 
         """
         return _libBornAgainCore.DetectorMask_numberOfMasks(self)
@@ -8788,7 +8788,7 @@ class DetectorMask(_object):
         """
         getMaskShape(DetectorMask self, size_t mask_index, bool & mask_value) -> IShape2D
 
-        const IShape2D * DetectorMask::getMaskShape(size_t mask_index, bool &mask_value) const 
+        const IShape2D * DetectorMask::getMaskShape(size_t mask_index, bool &mask_value) const
 
         """
         return _libBornAgainCore.DetectorMask_getMaskShape(self, mask_index, mask_value)
@@ -8847,14 +8847,14 @@ 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):
         """
         clone(Ellipse self) -> Ellipse
 
-        Ellipse* Ellipse::clone() const 
+        Ellipse* Ellipse::clone() const
 
         """
         return _libBornAgainCore.Ellipse_clone(self)
@@ -8877,7 +8877,7 @@ class Ellipse(IShape2D):
         """
         getCenterX(Ellipse self) -> double
 
-        double Ellipse::getCenterX() const 
+        double Ellipse::getCenterX() const
 
         """
         return _libBornAgainCore.Ellipse_getCenterX(self)
@@ -8887,7 +8887,7 @@ class Ellipse(IShape2D):
         """
         getCenterY(Ellipse self) -> double
 
-        double Ellipse::getCenterY() const 
+        double Ellipse::getCenterY() const
 
         """
         return _libBornAgainCore.Ellipse_getCenterY(self)
@@ -8897,7 +8897,7 @@ class Ellipse(IShape2D):
         """
         getRadiusX(Ellipse self) -> double
 
-        double Ellipse::getRadiusX() const 
+        double Ellipse::getRadiusX() const
 
         """
         return _libBornAgainCore.Ellipse_getRadiusX(self)
@@ -8907,7 +8907,7 @@ class Ellipse(IShape2D):
         """
         getRadiusY(Ellipse self) -> double
 
-        double Ellipse::getRadiusY() const 
+        double Ellipse::getRadiusY() const
 
         """
         return _libBornAgainCore.Ellipse_getRadiusY(self)
@@ -8917,7 +8917,7 @@ class Ellipse(IShape2D):
         """
         getTheta(Ellipse self) -> double
 
-        double Ellipse::getTheta() const 
+        double Ellipse::getTheta() const
 
         """
         return _libBornAgainCore.Ellipse_getTheta(self)
@@ -8974,7 +8974,7 @@ class IFTDecayFunction1D(ICloneable, INode):
         """
         decayLength(IFTDecayFunction1D self) -> double
 
-        double IFTDecayFunction1D::decayLength() const 
+        double IFTDecayFunction1D::decayLength() const
 
         """
         return _libBornAgainCore.IFTDecayFunction1D_decayLength(self)
@@ -9014,14 +9014,14 @@ 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):
         """
         clone(FTDecayFunction1DCauchy self) -> FTDecayFunction1DCauchy
 
-        FTDecayFunction1DCauchy * FTDecayFunction1DCauchy::clone() const 
+        FTDecayFunction1DCauchy * FTDecayFunction1DCauchy::clone() const
 
         """
         return _libBornAgainCore.FTDecayFunction1DCauchy_clone(self)
@@ -9083,14 +9083,14 @@ 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):
         """
         clone(FTDecayFunction1DGauss self) -> FTDecayFunction1DGauss
 
-        FTDecayFunction1DGauss * FTDecayFunction1DGauss::clone() const 
+        FTDecayFunction1DGauss * FTDecayFunction1DGauss::clone() const
 
         """
         return _libBornAgainCore.FTDecayFunction1DGauss_clone(self)
@@ -9152,14 +9152,14 @@ 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):
         """
         clone(FTDecayFunction1DTriangle self) -> FTDecayFunction1DTriangle
 
-        FTDecayFunction1DTriangle * FTDecayFunction1DTriangle::clone() const 
+        FTDecayFunction1DTriangle * FTDecayFunction1DTriangle::clone() const
 
         """
         return _libBornAgainCore.FTDecayFunction1DTriangle_clone(self)
@@ -9232,14 +9232,14 @@ 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):
         """
         clone(FTDecayFunction1DVoigt self) -> FTDecayFunction1DVoigt
 
-        FTDecayFunction1DVoigt * FTDecayFunction1DVoigt::clone() const 
+        FTDecayFunction1DVoigt * FTDecayFunction1DVoigt::clone() const
 
         """
         return _libBornAgainCore.FTDecayFunction1DVoigt_clone(self)
@@ -9271,7 +9271,7 @@ class FTDecayFunction1DVoigt(IFTDecayFunction1D):
         """
         eEta(FTDecayFunction1DVoigt self) -> double
 
-        double FTDecayFunction1DVoigt::eEta() const 
+        double FTDecayFunction1DVoigt::eEta() const
 
         """
         return _libBornAgainCore.FTDecayFunction1DVoigt_eEta(self)
@@ -9433,14 +9433,14 @@ 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):
         """
         clone(FTDecayFunction2DCauchy self) -> FTDecayFunction2DCauchy
 
-        FTDecayFunction2DCauchy * FTDecayFunction2DCauchy::clone() const 
+        FTDecayFunction2DCauchy * FTDecayFunction2DCauchy::clone() const
 
         """
         return _libBornAgainCore.FTDecayFunction2DCauchy_clone(self)
@@ -9505,14 +9505,14 @@ 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):
         """
         clone(FTDecayFunction2DGauss self) -> FTDecayFunction2DGauss
 
-        FTDecayFunction2DGauss * FTDecayFunction2DGauss::clone() const 
+        FTDecayFunction2DGauss * FTDecayFunction2DGauss::clone() const
 
         """
         return _libBornAgainCore.FTDecayFunction2DGauss_clone(self)
@@ -9594,14 +9594,14 @@ 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):
         """
         clone(FTDecayFunction2DVoigt self) -> FTDecayFunction2DVoigt
 
-        FTDecayFunction2DVoigt * FTDecayFunction2DVoigt::clone() const 
+        FTDecayFunction2DVoigt * FTDecayFunction2DVoigt::clone() const
 
         """
         return _libBornAgainCore.FTDecayFunction2DVoigt_clone(self)
@@ -9635,7 +9635,7 @@ class FTDecayFunction2DVoigt(IFTDecayFunction2D):
         """
         eta(FTDecayFunction2DVoigt self) -> double
 
-        double FTDecayFunction2DVoigt::eta() const 
+        double FTDecayFunction2DVoigt::eta() const
 
         """
         return _libBornAgainCore.FTDecayFunction2DVoigt_eta(self)
@@ -9704,7 +9704,7 @@ class IFTDistribution1D(ICloneable, INode):
         """
         omega(IFTDistribution1D self) -> double
 
-        double IFTDistribution1D::omega() const 
+        double IFTDistribution1D::omega() const
 
         """
         return _libBornAgainCore.IFTDistribution1D_omega(self)
@@ -9744,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):
@@ -9815,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):
@@ -9886,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):
@@ -9957,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):
@@ -10028,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):
@@ -10110,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):
@@ -10151,7 +10151,7 @@ class FTDistribution1DVoigt(IFTDistribution1D):
         """
         eta(FTDistribution1DVoigt self) -> double
 
-        double FTDistribution1DVoigt::eta() const 
+        double FTDistribution1DVoigt::eta() const
 
         """
         return _libBornAgainCore.FTDistribution1DVoigt_eta(self)
@@ -10208,7 +10208,7 @@ class IFTDistribution2D(ICloneable, INode):
         """
         gamma(IFTDistribution2D self) -> double
 
-        double IFTDistribution2D::gamma() const 
+        double IFTDistribution2D::gamma() const
 
         """
         return _libBornAgainCore.IFTDistribution2D_gamma(self)
@@ -10218,7 +10218,7 @@ class IFTDistribution2D(ICloneable, INode):
         """
         delta(IFTDistribution2D self) -> double
 
-        double IFTDistribution2D::delta() const 
+        double IFTDistribution2D::delta() const
 
         """
         return _libBornAgainCore.IFTDistribution2D_delta(self)
@@ -10228,7 +10228,7 @@ class IFTDistribution2D(ICloneable, INode):
         """
         omegaX(IFTDistribution2D self) -> double
 
-        double IFTDistribution2D::omegaX() const 
+        double IFTDistribution2D::omegaX() const
 
         """
         return _libBornAgainCore.IFTDistribution2D_omegaX(self)
@@ -10238,7 +10238,7 @@ class IFTDistribution2D(ICloneable, INode):
         """
         omegaY(IFTDistribution2D self) -> double
 
-        double IFTDistribution2D::omegaY() const 
+        double IFTDistribution2D::omegaY() const
 
         """
         return _libBornAgainCore.IFTDistribution2D_omegaY(self)
@@ -10291,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):
@@ -10363,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):
@@ -10435,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):
@@ -10507,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):
@@ -10596,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):
@@ -10637,7 +10637,7 @@ class FTDistribution2DVoigt(IFTDistribution2D):
         """
         eta(FTDistribution2DVoigt self) -> double
 
-        double FTDistribution2DVoigt::eta() const 
+        double FTDistribution2DVoigt::eta() const
 
         """
         return _libBornAgainCore.FTDistribution2DVoigt_eta(self)
@@ -10694,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
@@ -10763,7 +10763,7 @@ class FixedBinAxis(IAxis):
         """
         getBinCenter(FixedBinAxis self, size_t index) -> double
 
-        double FixedBinAxis::getBinCenter(size_t index) const 
+        double FixedBinAxis::getBinCenter(size_t index) const
 
         """
         return _libBornAgainCore.FixedBinAxis_getBinCenter(self, index)
@@ -10785,7 +10785,7 @@ class FixedBinAxis(IAxis):
         """
         getBinCenters(FixedBinAxis self) -> vdouble1d_t
 
-        std::vector< double > FixedBinAxis::getBinCenters() const 
+        std::vector< double > FixedBinAxis::getBinCenters() const
 
         """
         return _libBornAgainCore.FixedBinAxis_getBinCenters(self)
@@ -10795,7 +10795,7 @@ class FixedBinAxis(IAxis):
         """
         getBinBoundaries(FixedBinAxis self) -> vdouble1d_t
 
-        std::vector< double > FixedBinAxis::getBinBoundaries() const 
+        std::vector< double > FixedBinAxis::getBinBoundaries() const
 
         """
         return _libBornAgainCore.FixedBinAxis_getBinBoundaries(self)
@@ -10858,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
@@ -10889,11 +10889,11 @@ class IFormFactor(ISample):
 
     def setAmbientMaterial(self, arg0):
         """
-        setAmbientMaterial(IFormFactor self, HomogeneousMaterial arg0)
+        setAmbientMaterial(IFormFactor self, Material arg0)
 
-        virtual void IFormFactor::setAmbientMaterial(HomogeneousMaterial)=0
+        virtual void IFormFactor::setAmbientMaterial(Material)=0
 
-        Passes the refractive index of the ambient material in which this particle is embedded. 
+        Passes the material in which this particle is embedded. 
 
         """
         return _libBornAgainCore.IFormFactor_setAmbientMaterial(self, arg0)
@@ -11155,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):
@@ -11244,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
@@ -11263,11 +11263,11 @@ class IFormFactorBorn(IFormFactor):
 
     def setAmbientMaterial(self, arg0):
         """
-        setAmbientMaterial(IFormFactorBorn self, HomogeneousMaterial arg0)
+        setAmbientMaterial(IFormFactorBorn self, Material arg0)
 
-        void IFormFactorBorn::setAmbientMaterial(HomogeneousMaterial) override
+        void IFormFactorBorn::setAmbientMaterial(Material) override
 
-        Passes the refractive index of the ambient material in which this particle is embedded. 
+        Passes the material in which this particle is embedded. 
 
         """
         return _libBornAgainCore.IFormFactorBorn_setAmbientMaterial(self, arg0)
@@ -11379,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
@@ -11439,11 +11439,11 @@ class IFormFactorDecorator(IFormFactor):
 
     def setAmbientMaterial(self, material):
         """
-        setAmbientMaterial(IFormFactorDecorator self, HomogeneousMaterial material)
+        setAmbientMaterial(IFormFactorDecorator self, Material material)
 
-        void IFormFactorDecorator::setAmbientMaterial(HomogeneousMaterial material) override
+        void IFormFactorDecorator::setAmbientMaterial(Material material) override
 
-        Passes the refractive index of the ambient material in which this particle is embedded. 
+        Passes the material in which this particle is embedded. 
 
         """
         return _libBornAgainCore.IFormFactorDecorator_setAmbientMaterial(self, material)
@@ -11537,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
@@ -11582,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
@@ -11615,14 +11615,14 @@ 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):
         """
         E(PolyhedralEdge self) -> kvector_t
 
-        kvector_t PolyhedralEdge::E() const 
+        kvector_t PolyhedralEdge::E() const
 
         """
         return _libBornAgainCore.PolyhedralEdge_E(self)
@@ -11632,7 +11632,7 @@ class PolyhedralEdge(_object):
         """
         R(PolyhedralEdge self) -> kvector_t
 
-        kvector_t PolyhedralEdge::R() const 
+        kvector_t PolyhedralEdge::R() const
 
         """
         return _libBornAgainCore.PolyhedralEdge_R(self)
@@ -11642,7 +11642,7 @@ class PolyhedralEdge(_object):
         """
         qE(PolyhedralEdge self, cvector_t q) -> complex_t
 
-        complex_t PolyhedralEdge::qE(cvector_t q) const 
+        complex_t PolyhedralEdge::qE(cvector_t q) const
 
         """
         return _libBornAgainCore.PolyhedralEdge_qE(self, q)
@@ -11652,7 +11652,7 @@ class PolyhedralEdge(_object):
         """
         qR(PolyhedralEdge self, cvector_t q) -> complex_t
 
-        complex_t PolyhedralEdge::qR(cvector_t q) const 
+        complex_t PolyhedralEdge::qR(cvector_t q) const
 
         """
         return _libBornAgainCore.PolyhedralEdge_qR(self, q)
@@ -11694,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):
         """
@@ -11721,14 +11719,14 @@ class PolyhedralFace(_object):
         this = _libBornAgainCore.new_PolyhedralFace(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def area(self):
         """
         area(PolyhedralFace self) -> double
 
-        double PolyhedralFace::area() const 
+        double PolyhedralFace::area() const
 
         """
         return _libBornAgainCore.PolyhedralFace_area(self)
@@ -11738,7 +11736,7 @@ class PolyhedralFace(_object):
         """
         center(PolyhedralFace self) -> kvector_t
 
-        kvector_t PolyhedralFace::center() const 
+        kvector_t PolyhedralFace::center() const
 
         """
         return _libBornAgainCore.PolyhedralFace_center(self)
@@ -11748,7 +11746,7 @@ class PolyhedralFace(_object):
         """
         pyramidalVolume(PolyhedralFace self) -> double
 
-        double PolyhedralFace::pyramidalVolume() const 
+        double PolyhedralFace::pyramidalVolume() const
 
         """
         return _libBornAgainCore.PolyhedralFace_pyramidalVolume(self)
@@ -11758,7 +11756,7 @@ class PolyhedralFace(_object):
         """
         radius3d(PolyhedralFace self) -> double
 
-        double PolyhedralFace::radius3d() const 
+        double PolyhedralFace::radius3d() const
 
         """
         return _libBornAgainCore.PolyhedralFace_radius3d(self)
@@ -11859,7 +11857,7 @@ class FormFactorPolyhedron(IFormFactorBorn):
         """
         evaluate_for_q(FormFactorPolyhedron self, cvector_t q) -> complex_t
 
-        complex_t FormFactorPolyhedron::evaluate_for_q(cvector_t q) const overridefinal
+        complex_t FormFactorPolyhedron::evaluate_for_q(cvector_t q) const override final
 
         Returns the form factor F(q) of this polyhedron, respecting the offset z_origin. 
 
@@ -11883,7 +11881,7 @@ class FormFactorPolyhedron(IFormFactorBorn):
         """
         volume(FormFactorPolyhedron self) -> double
 
-        double FormFactorPolyhedron::volume() const overridefinal
+        double FormFactorPolyhedron::volume() const override final
 
         Returns the total volume of the particle of this form factor's shape. 
 
@@ -11895,7 +11893,7 @@ class FormFactorPolyhedron(IFormFactorBorn):
         """
         radialExtension(FormFactorPolyhedron self) -> double
 
-        double FormFactorPolyhedron::radialExtension() const overridefinal
+        double FormFactorPolyhedron::radialExtension() const override final
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -11946,7 +11944,7 @@ class FormFactorPolygonalPrism(IFormFactorBorn):
         """
         evaluate_for_q(FormFactorPolygonalPrism self, cvector_t q) -> complex_t
 
-        complex_t FormFactorPolygonalPrism::evaluate_for_q(cvector_t q) const overridefinal
+        complex_t FormFactorPolygonalPrism::evaluate_for_q(cvector_t q) const override final
 
         Returns the form factor F(q) of this polyhedron, respecting the offset height/2. 
 
@@ -11958,7 +11956,7 @@ class FormFactorPolygonalPrism(IFormFactorBorn):
         """
         volume(FormFactorPolygonalPrism self) -> double
 
-        double FormFactorPolygonalPrism::volume() const overridefinal
+        double FormFactorPolygonalPrism::volume() const override final
 
         Returns the volume of this prism. 
 
@@ -11970,7 +11968,7 @@ class FormFactorPolygonalPrism(IFormFactorBorn):
         """
         getHeight(FormFactorPolygonalPrism self) -> double
 
-        double FormFactorPolygonalPrism::getHeight() const 
+        double FormFactorPolygonalPrism::getHeight() const
 
         """
         return _libBornAgainCore.FormFactorPolygonalPrism_getHeight(self)
@@ -11980,7 +11978,7 @@ class FormFactorPolygonalPrism(IFormFactorBorn):
         """
         radialExtension(FormFactorPolygonalPrism self) -> double
 
-        double FormFactorPolygonalPrism::radialExtension() const overridefinal
+        double FormFactorPolygonalPrism::radialExtension() const override final
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -12019,7 +12017,7 @@ class FormFactorPolygonalSurface(IFormFactorBorn):
         """
         evaluate_for_q(FormFactorPolygonalSurface self, cvector_t q) -> complex_t
 
-        complex_t FormFactorPolygonalSurface::evaluate_for_q(cvector_t q) const overridefinal
+        complex_t FormFactorPolygonalSurface::evaluate_for_q(cvector_t q) const override final
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -12043,7 +12041,7 @@ class FormFactorPolygonalSurface(IFormFactorBorn):
         """
         radialExtension(FormFactorPolygonalSurface self) -> double
 
-        double FormFactorPolygonalSurface::radialExtension() const overridefinal
+        double FormFactorPolygonalSurface::radialExtension() const override final
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -12102,14 +12100,14 @@ 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):
         """
         clone(FormFactorAnisoPyramid self) -> FormFactorAnisoPyramid
 
-        FormFactorAnisoPyramid* FormFactorAnisoPyramid::clone() const overridefinal
+        FormFactorAnisoPyramid* FormFactorAnisoPyramid::clone() const override final
 
         Returns a clone of this  ISample object. 
 
@@ -12121,7 +12119,7 @@ class FormFactorAnisoPyramid(FormFactorPolyhedron):
         """
         accept(FormFactorAnisoPyramid self, INodeVisitor visitor)
 
-        void FormFactorAnisoPyramid::accept(INodeVisitor *visitor) const overridefinal
+        void FormFactorAnisoPyramid::accept(INodeVisitor *visitor) const override final
 
         Calls the  INodeVisitor's visit method. 
 
@@ -12133,7 +12131,7 @@ class FormFactorAnisoPyramid(FormFactorPolyhedron):
         """
         getLength(FormFactorAnisoPyramid self) -> double
 
-        double FormFactorAnisoPyramid::getLength() const 
+        double FormFactorAnisoPyramid::getLength() const
 
         """
         return _libBornAgainCore.FormFactorAnisoPyramid_getLength(self)
@@ -12143,7 +12141,7 @@ class FormFactorAnisoPyramid(FormFactorPolyhedron):
         """
         getWidth(FormFactorAnisoPyramid self) -> double
 
-        double FormFactorAnisoPyramid::getWidth() const 
+        double FormFactorAnisoPyramid::getWidth() const
 
         """
         return _libBornAgainCore.FormFactorAnisoPyramid_getWidth(self)
@@ -12153,7 +12151,7 @@ class FormFactorAnisoPyramid(FormFactorPolyhedron):
         """
         getHeight(FormFactorAnisoPyramid self) -> double
 
-        double FormFactorAnisoPyramid::getHeight() const 
+        double FormFactorAnisoPyramid::getHeight() const
 
         """
         return _libBornAgainCore.FormFactorAnisoPyramid_getHeight(self)
@@ -12163,7 +12161,7 @@ class FormFactorAnisoPyramid(FormFactorPolyhedron):
         """
         getAlpha(FormFactorAnisoPyramid self) -> double
 
-        double FormFactorAnisoPyramid::getAlpha() const 
+        double FormFactorAnisoPyramid::getAlpha() const
 
         """
         return _libBornAgainCore.FormFactorAnisoPyramid_getAlpha(self)
@@ -12217,14 +12215,14 @@ 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):
         """
         clone(FormFactorBox self) -> FormFactorBox
 
-        FormFactorBox* FormFactorBox::clone() const overridefinal
+        FormFactorBox* FormFactorBox::clone() const override final
 
         Returns a clone of this  ISample object. 
 
@@ -12236,7 +12234,7 @@ class FormFactorBox(IFormFactorBorn):
         """
         accept(FormFactorBox self, INodeVisitor visitor)
 
-        void FormFactorBox::accept(INodeVisitor *visitor) const overridefinal
+        void FormFactorBox::accept(INodeVisitor *visitor) const override final
 
         Calls the  INodeVisitor's visit method. 
 
@@ -12248,7 +12246,7 @@ class FormFactorBox(IFormFactorBorn):
         """
         getLength(FormFactorBox self) -> double
 
-        double FormFactorBox::getLength() const 
+        double FormFactorBox::getLength() const
 
         """
         return _libBornAgainCore.FormFactorBox_getLength(self)
@@ -12258,7 +12256,7 @@ class FormFactorBox(IFormFactorBorn):
         """
         getHeight(FormFactorBox self) -> double
 
-        double FormFactorBox::getHeight() const 
+        double FormFactorBox::getHeight() const
 
         """
         return _libBornAgainCore.FormFactorBox_getHeight(self)
@@ -12268,7 +12266,7 @@ class FormFactorBox(IFormFactorBorn):
         """
         getWidth(FormFactorBox self) -> double
 
-        double FormFactorBox::getWidth() const 
+        double FormFactorBox::getWidth() const
 
         """
         return _libBornAgainCore.FormFactorBox_getWidth(self)
@@ -12278,7 +12276,7 @@ class FormFactorBox(IFormFactorBorn):
         """
         radialExtension(FormFactorBox self) -> double
 
-        double FormFactorBox::radialExtension() const overridefinal
+        double FormFactorBox::radialExtension() const override final
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -12290,7 +12288,7 @@ class FormFactorBox(IFormFactorBorn):
         """
         evaluate_for_q(FormFactorBox self, cvector_t q) -> complex_t
 
-        complex_t FormFactorBox::evaluate_for_q(cvector_t q) const overridefinal
+        complex_t FormFactorBox::evaluate_for_q(cvector_t q) const override final
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -12346,14 +12344,14 @@ 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):
         """
         clone(FormFactorCone self) -> FormFactorCone
 
-        FormFactorCone* FormFactorCone::clone() const overridefinal
+        FormFactorCone* FormFactorCone::clone() const override final
 
         Returns a clone of this  ISample object. 
 
@@ -12365,7 +12363,7 @@ class FormFactorCone(IFormFactorBorn):
         """
         accept(FormFactorCone self, INodeVisitor visitor)
 
-        void FormFactorCone::accept(INodeVisitor *visitor) const overridefinal
+        void FormFactorCone::accept(INodeVisitor *visitor) const override final
 
         Calls the  INodeVisitor's visit method. 
 
@@ -12377,7 +12375,7 @@ class FormFactorCone(IFormFactorBorn):
         """
         getHeight(FormFactorCone self) -> double
 
-        double FormFactorCone::getHeight() const 
+        double FormFactorCone::getHeight() const
 
         """
         return _libBornAgainCore.FormFactorCone_getHeight(self)
@@ -12387,7 +12385,7 @@ class FormFactorCone(IFormFactorBorn):
         """
         getAlpha(FormFactorCone self) -> double
 
-        double FormFactorCone::getAlpha() const 
+        double FormFactorCone::getAlpha() const
 
         """
         return _libBornAgainCore.FormFactorCone_getAlpha(self)
@@ -12397,7 +12395,7 @@ class FormFactorCone(IFormFactorBorn):
         """
         getRadius(FormFactorCone self) -> double
 
-        double FormFactorCone::getRadius() const 
+        double FormFactorCone::getRadius() const
 
         """
         return _libBornAgainCore.FormFactorCone_getRadius(self)
@@ -12407,7 +12405,7 @@ class FormFactorCone(IFormFactorBorn):
         """
         radialExtension(FormFactorCone self) -> double
 
-        double FormFactorCone::radialExtension() const overridefinal
+        double FormFactorCone::radialExtension() const override final
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -12419,7 +12417,7 @@ class FormFactorCone(IFormFactorBorn):
         """
         evaluate_for_q(FormFactorCone self, cvector_t q) -> complex_t
 
-        complex_t FormFactorCone::evaluate_for_q(cvector_t q) const overridefinal
+        complex_t FormFactorCone::evaluate_for_q(cvector_t q) const override final
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -12475,14 +12473,14 @@ 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):
         """
         clone(FormFactorCone6 self) -> FormFactorCone6
 
-        FormFactorCone6* FormFactorCone6::clone() const overridefinal
+        FormFactorCone6* FormFactorCone6::clone() const override final
 
         Returns a clone of this  ISample object. 
 
@@ -12494,7 +12492,7 @@ class FormFactorCone6(FormFactorPolyhedron):
         """
         accept(FormFactorCone6 self, INodeVisitor visitor)
 
-        void FormFactorCone6::accept(INodeVisitor *visitor) const overridefinal
+        void FormFactorCone6::accept(INodeVisitor *visitor) const override final
 
         Calls the  INodeVisitor's visit method. 
 
@@ -12506,7 +12504,7 @@ class FormFactorCone6(FormFactorPolyhedron):
         """
         getBaseEdge(FormFactorCone6 self) -> double
 
-        double FormFactorCone6::getBaseEdge() const 
+        double FormFactorCone6::getBaseEdge() const
 
         """
         return _libBornAgainCore.FormFactorCone6_getBaseEdge(self)
@@ -12516,7 +12514,7 @@ class FormFactorCone6(FormFactorPolyhedron):
         """
         getHeight(FormFactorCone6 self) -> double
 
-        double FormFactorCone6::getHeight() const 
+        double FormFactorCone6::getHeight() const
 
         """
         return _libBornAgainCore.FormFactorCone6_getHeight(self)
@@ -12526,7 +12524,7 @@ class FormFactorCone6(FormFactorPolyhedron):
         """
         getAlpha(FormFactorCone6 self) -> double
 
-        double FormFactorCone6::getAlpha() const 
+        double FormFactorCone6::getAlpha() const
 
         """
         return _libBornAgainCore.FormFactorCone6_getAlpha(self)
@@ -12566,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
@@ -12575,7 +12573,7 @@ class FormFactorCrystal(IFormFactor):
         """
         clone(FormFactorCrystal self) -> FormFactorCrystal
 
-        FormFactorCrystal* FormFactorCrystal::clone() const overridefinal
+        FormFactorCrystal* FormFactorCrystal::clone() const override final
 
         Returns a clone of this  ISample object. 
 
@@ -12587,7 +12585,7 @@ class FormFactorCrystal(IFormFactor):
         """
         accept(FormFactorCrystal self, INodeVisitor visitor)
 
-        void FormFactorCrystal::accept(INodeVisitor *visitor) const overridefinal
+        void FormFactorCrystal::accept(INodeVisitor *visitor) const override final
 
         Calls the  INodeVisitor's visit method. 
 
@@ -12597,11 +12595,11 @@ class FormFactorCrystal(IFormFactor):
 
     def setAmbientMaterial(self, material):
         """
-        setAmbientMaterial(FormFactorCrystal self, HomogeneousMaterial material)
+        setAmbientMaterial(FormFactorCrystal self, Material material)
 
-        void FormFactorCrystal::setAmbientMaterial(HomogeneousMaterial material) override
+        void FormFactorCrystal::setAmbientMaterial(Material material) override
 
-        Passes the refractive index of the ambient material in which this particle is embedded. 
+        Passes the material in which this particle is embedded. 
 
         """
         return _libBornAgainCore.FormFactorCrystal_setAmbientMaterial(self, material)
@@ -12611,7 +12609,7 @@ class FormFactorCrystal(IFormFactor):
         """
         volume(FormFactorCrystal self) -> double
 
-        double FormFactorCrystal::volume() const overridefinal
+        double FormFactorCrystal::volume() const override final
 
         Returns the total volume of the particle of this form factor's shape. 
 
@@ -12623,7 +12621,7 @@ class FormFactorCrystal(IFormFactor):
         """
         radialExtension(FormFactorCrystal self) -> double
 
-        double FormFactorCrystal::radialExtension() const overridefinal
+        double FormFactorCrystal::radialExtension() const override final
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -12647,7 +12645,7 @@ class FormFactorCrystal(IFormFactor):
         """
         topZ(FormFactorCrystal self, IRotation rotation) -> double
 
-        double FormFactorCrystal::topZ(const IRotation &rotation) const overridefinal
+        double FormFactorCrystal::topZ(const IRotation &rotation) const override final
 
         Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 
@@ -12659,7 +12657,7 @@ class FormFactorCrystal(IFormFactor):
         """
         evaluate(FormFactorCrystal self, WavevectorInfo wavevectors) -> complex_t
 
-        complex_t FormFactorCrystal::evaluate(const WavevectorInfo &wavevectors) const overridefinal
+        complex_t FormFactorCrystal::evaluate(const WavevectorInfo &wavevectors) const override final
 
         Returns scattering amplitude for complex wavevectors ki, kf. 
 
@@ -12716,14 +12714,14 @@ 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):
         """
         clone(FormFactorCuboctahedron self) -> FormFactorCuboctahedron
 
-        FormFactorCuboctahedron* FormFactorCuboctahedron::clone() const overridefinal
+        FormFactorCuboctahedron* FormFactorCuboctahedron::clone() const override final
 
         Returns a clone of this  ISample object. 
 
@@ -12735,7 +12733,7 @@ class FormFactorCuboctahedron(FormFactorPolyhedron):
         """
         accept(FormFactorCuboctahedron self, INodeVisitor visitor)
 
-        void FormFactorCuboctahedron::accept(INodeVisitor *visitor) const overridefinal
+        void FormFactorCuboctahedron::accept(INodeVisitor *visitor) const override final
 
         Calls the  INodeVisitor's visit method. 
 
@@ -12747,7 +12745,7 @@ class FormFactorCuboctahedron(FormFactorPolyhedron):
         """
         getLength(FormFactorCuboctahedron self) -> double
 
-        double FormFactorCuboctahedron::getLength() const 
+        double FormFactorCuboctahedron::getLength() const
 
         """
         return _libBornAgainCore.FormFactorCuboctahedron_getLength(self)
@@ -12757,7 +12755,7 @@ class FormFactorCuboctahedron(FormFactorPolyhedron):
         """
         getHeight(FormFactorCuboctahedron self) -> double
 
-        double FormFactorCuboctahedron::getHeight() const 
+        double FormFactorCuboctahedron::getHeight() const
 
         """
         return _libBornAgainCore.FormFactorCuboctahedron_getHeight(self)
@@ -12767,7 +12765,7 @@ class FormFactorCuboctahedron(FormFactorPolyhedron):
         """
         getHeightRatio(FormFactorCuboctahedron self) -> double
 
-        double FormFactorCuboctahedron::getHeightRatio() const 
+        double FormFactorCuboctahedron::getHeightRatio() const
 
         """
         return _libBornAgainCore.FormFactorCuboctahedron_getHeightRatio(self)
@@ -12777,7 +12775,7 @@ class FormFactorCuboctahedron(FormFactorPolyhedron):
         """
         getAlpha(FormFactorCuboctahedron self) -> double
 
-        double FormFactorCuboctahedron::getAlpha() const 
+        double FormFactorCuboctahedron::getAlpha() const
 
         """
         return _libBornAgainCore.FormFactorCuboctahedron_getAlpha(self)
@@ -12828,14 +12826,14 @@ 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):
         """
         clone(FormFactorCylinder self) -> FormFactorCylinder
 
-        FormFactorCylinder* FormFactorCylinder::clone() const overridefinal
+        FormFactorCylinder* FormFactorCylinder::clone() const override final
 
         Returns a clone of this  ISample object. 
 
@@ -12847,7 +12845,7 @@ class FormFactorCylinder(IFormFactorBorn):
         """
         accept(FormFactorCylinder self, INodeVisitor visitor)
 
-        void FormFactorCylinder::accept(INodeVisitor *visitor) const overridefinal
+        void FormFactorCylinder::accept(INodeVisitor *visitor) const override final
 
         Calls the  INodeVisitor's visit method. 
 
@@ -12859,7 +12857,7 @@ class FormFactorCylinder(IFormFactorBorn):
         """
         getHeight(FormFactorCylinder self) -> double
 
-        double FormFactorCylinder::getHeight() const 
+        double FormFactorCylinder::getHeight() const
 
         """
         return _libBornAgainCore.FormFactorCylinder_getHeight(self)
@@ -12869,7 +12867,7 @@ class FormFactorCylinder(IFormFactorBorn):
         """
         getRadius(FormFactorCylinder self) -> double
 
-        double FormFactorCylinder::getRadius() const 
+        double FormFactorCylinder::getRadius() const
 
         """
         return _libBornAgainCore.FormFactorCylinder_getRadius(self)
@@ -12879,7 +12877,7 @@ class FormFactorCylinder(IFormFactorBorn):
         """
         radialExtension(FormFactorCylinder self) -> double
 
-        double FormFactorCylinder::radialExtension() const overridefinal
+        double FormFactorCylinder::radialExtension() const override final
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -12891,7 +12889,7 @@ class FormFactorCylinder(IFormFactorBorn):
         """
         evaluate_for_q(FormFactorCylinder self, cvector_t q) -> complex_t
 
-        complex_t FormFactorCylinder::evaluate_for_q(cvector_t q) const overridefinal
+        complex_t FormFactorCylinder::evaluate_for_q(cvector_t q) const override final
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -12936,14 +12934,14 @@ class FormFactorDecoratorDebyeWaller(IFormFactorDecorator):
         this = _libBornAgainCore.new_FormFactorDecoratorDebyeWaller(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
         """
         clone(FormFactorDecoratorDebyeWaller self) -> FormFactorDecoratorDebyeWaller
 
-        FormFactorDecoratorDebyeWaller* FormFactorDecoratorDebyeWaller::clone() const overridefinal
+        FormFactorDecoratorDebyeWaller* FormFactorDecoratorDebyeWaller::clone() const override final
 
         Returns a clone of this  ISample object. 
 
@@ -12955,7 +12953,7 @@ class FormFactorDecoratorDebyeWaller(IFormFactorDecorator):
         """
         accept(FormFactorDecoratorDebyeWaller self, INodeVisitor visitor)
 
-        void FormFactorDecoratorDebyeWaller::accept(INodeVisitor *visitor) const overridefinal
+        void FormFactorDecoratorDebyeWaller::accept(INodeVisitor *visitor) const override final
 
         Calls the  INodeVisitor's visit method. 
 
@@ -12967,7 +12965,7 @@ class FormFactorDecoratorDebyeWaller(IFormFactorDecorator):
         """
         evaluate(FormFactorDecoratorDebyeWaller self, WavevectorInfo wavevectors) -> complex_t
 
-        complex_t FormFactorDecoratorDebyeWaller::evaluate(const WavevectorInfo &wavevectors) const overridefinal
+        complex_t FormFactorDecoratorDebyeWaller::evaluate(const WavevectorInfo &wavevectors) const override final
 
         Returns scattering amplitude for complex wavevectors ki, kf. 
 
@@ -13025,14 +13023,14 @@ class FormFactorDodecahedron(FormFactorPolyhedron):
         this = _libBornAgainCore.new_FormFactorDodecahedron(edge)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
         """
         clone(FormFactorDodecahedron self) -> FormFactorDodecahedron
 
-        FormFactorDodecahedron* FormFactorDodecahedron::clone() const overridefinal
+        FormFactorDodecahedron* FormFactorDodecahedron::clone() const override final
 
         Returns a clone of this  ISample object. 
 
@@ -13044,7 +13042,7 @@ class FormFactorDodecahedron(FormFactorPolyhedron):
         """
         accept(FormFactorDodecahedron self, INodeVisitor visitor)
 
-        void FormFactorDodecahedron::accept(INodeVisitor *visitor) const overridefinal
+        void FormFactorDodecahedron::accept(INodeVisitor *visitor) const override final
 
         Calls the  INodeVisitor's visit method. 
 
@@ -13056,7 +13054,7 @@ class FormFactorDodecahedron(FormFactorPolyhedron):
         """
         getEdge(FormFactorDodecahedron self) -> double
 
-        double FormFactorDodecahedron::getEdge() const 
+        double FormFactorDodecahedron::getEdge() const
 
         """
         return _libBornAgainCore.FormFactorDodecahedron_getEdge(self)
@@ -13096,14 +13094,14 @@ class FormFactorDot(IFormFactorBorn):
         this = _libBornAgainCore.new_FormFactorDot()
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
         """
         clone(FormFactorDot self) -> FormFactorDot
 
-        FormFactorDot* FormFactorDot::clone() const overridefinal
+        FormFactorDot* FormFactorDot::clone() const override final
 
         Returns a clone of this  ISample object. 
 
@@ -13115,7 +13113,7 @@ class FormFactorDot(IFormFactorBorn):
         """
         accept(FormFactorDot self, INodeVisitor visitor)
 
-        void FormFactorDot::accept(INodeVisitor *visitor) const overridefinal
+        void FormFactorDot::accept(INodeVisitor *visitor) const override final
 
         Calls the  INodeVisitor's visit method. 
 
@@ -13127,7 +13125,7 @@ class FormFactorDot(IFormFactorBorn):
         """
         radialExtension(FormFactorDot self) -> double
 
-        double FormFactorDot::radialExtension() const overridefinal
+        double FormFactorDot::radialExtension() const override final
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -13139,7 +13137,7 @@ class FormFactorDot(IFormFactorBorn):
         """
         evaluate_for_q(FormFactorDot self, cvector_t arg2) -> complex_t
 
-        complex_t FormFactorDot::evaluate_for_q(cvector_t) const overridefinal
+        complex_t FormFactorDot::evaluate_for_q(cvector_t) const override final
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -13195,14 +13193,14 @@ 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):
         """
         clone(FormFactorEllipsoidalCylinder self) -> FormFactorEllipsoidalCylinder
 
-        FormFactorEllipsoidalCylinder* FormFactorEllipsoidalCylinder::clone() const overridefinal
+        FormFactorEllipsoidalCylinder* FormFactorEllipsoidalCylinder::clone() const override final
 
         Returns a clone of this  ISample object. 
 
@@ -13214,7 +13212,7 @@ class FormFactorEllipsoidalCylinder(IFormFactorBorn):
         """
         accept(FormFactorEllipsoidalCylinder self, INodeVisitor visitor)
 
-        void FormFactorEllipsoidalCylinder::accept(INodeVisitor *visitor) const overridefinal
+        void FormFactorEllipsoidalCylinder::accept(INodeVisitor *visitor) const override final
 
         Calls the  INodeVisitor's visit method. 
 
@@ -13226,7 +13224,7 @@ class FormFactorEllipsoidalCylinder(IFormFactorBorn):
         """
         getRadiusX(FormFactorEllipsoidalCylinder self) -> double
 
-        double FormFactorEllipsoidalCylinder::getRadiusX() const 
+        double FormFactorEllipsoidalCylinder::getRadiusX() const
 
         """
         return _libBornAgainCore.FormFactorEllipsoidalCylinder_getRadiusX(self)
@@ -13236,7 +13234,7 @@ class FormFactorEllipsoidalCylinder(IFormFactorBorn):
         """
         getRadiusY(FormFactorEllipsoidalCylinder self) -> double
 
-        double FormFactorEllipsoidalCylinder::getRadiusY() const 
+        double FormFactorEllipsoidalCylinder::getRadiusY() const
 
         """
         return _libBornAgainCore.FormFactorEllipsoidalCylinder_getRadiusY(self)
@@ -13246,7 +13244,7 @@ class FormFactorEllipsoidalCylinder(IFormFactorBorn):
         """
         getHeight(FormFactorEllipsoidalCylinder self) -> double
 
-        double FormFactorEllipsoidalCylinder::getHeight() const 
+        double FormFactorEllipsoidalCylinder::getHeight() const
 
         """
         return _libBornAgainCore.FormFactorEllipsoidalCylinder_getHeight(self)
@@ -13256,7 +13254,7 @@ class FormFactorEllipsoidalCylinder(IFormFactorBorn):
         """
         radialExtension(FormFactorEllipsoidalCylinder self) -> double
 
-        double FormFactorEllipsoidalCylinder::radialExtension() const overridefinal
+        double FormFactorEllipsoidalCylinder::radialExtension() const override final
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -13268,7 +13266,7 @@ class FormFactorEllipsoidalCylinder(IFormFactorBorn):
         """
         evaluate_for_q(FormFactorEllipsoidalCylinder self, cvector_t q) -> complex_t
 
-        complex_t FormFactorEllipsoidalCylinder::evaluate_for_q(cvector_t q) const overridefinal
+        complex_t FormFactorEllipsoidalCylinder::evaluate_for_q(cvector_t q) const override final
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -13318,14 +13316,14 @@ class FormFactorFullSphere(IFormFactorBorn):
         this = _libBornAgainCore.new_FormFactorFullSphere(radius)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
         """
         clone(FormFactorFullSphere self) -> FormFactorFullSphere
 
-        FormFactorFullSphere* FormFactorFullSphere::clone() const overridefinal
+        FormFactorFullSphere* FormFactorFullSphere::clone() const override final
 
         Returns a clone of this  ISample object. 
 
@@ -13337,7 +13335,7 @@ class FormFactorFullSphere(IFormFactorBorn):
         """
         accept(FormFactorFullSphere self, INodeVisitor visitor)
 
-        void FormFactorFullSphere::accept(INodeVisitor *visitor) const overridefinal
+        void FormFactorFullSphere::accept(INodeVisitor *visitor) const override final
 
         Calls the  INodeVisitor's visit method. 
 
@@ -13349,7 +13347,7 @@ class FormFactorFullSphere(IFormFactorBorn):
         """
         getRadius(FormFactorFullSphere self) -> double
 
-        double FormFactorFullSphere::getRadius() const 
+        double FormFactorFullSphere::getRadius() const
 
         """
         return _libBornAgainCore.FormFactorFullSphere_getRadius(self)
@@ -13359,7 +13357,7 @@ class FormFactorFullSphere(IFormFactorBorn):
         """
         radialExtension(FormFactorFullSphere self) -> double
 
-        double FormFactorFullSphere::radialExtension() const overridefinal
+        double FormFactorFullSphere::radialExtension() const override final
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -13371,7 +13369,7 @@ class FormFactorFullSphere(IFormFactorBorn):
         """
         bottomZ(FormFactorFullSphere self, IRotation rotation) -> double
 
-        double FormFactorFullSphere::bottomZ(const IRotation &rotation) const overridefinal
+        double FormFactorFullSphere::bottomZ(const IRotation &rotation) const override final
 
         Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 
@@ -13383,7 +13381,7 @@ class FormFactorFullSphere(IFormFactorBorn):
         """
         topZ(FormFactorFullSphere self, IRotation rotation) -> double
 
-        double FormFactorFullSphere::topZ(const IRotation &rotation) const overridefinal
+        double FormFactorFullSphere::topZ(const IRotation &rotation) const override final
 
         Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 
@@ -13395,7 +13393,7 @@ class FormFactorFullSphere(IFormFactorBorn):
         """
         evaluate_for_q(FormFactorFullSphere self, cvector_t q) -> complex_t
 
-        complex_t FormFactorFullSphere::evaluate_for_q(cvector_t q) const overridefinal
+        complex_t FormFactorFullSphere::evaluate_for_q(cvector_t q) const override final
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -13448,14 +13446,14 @@ 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):
         """
         clone(FormFactorFullSpheroid self) -> FormFactorFullSpheroid
 
-        FormFactorFullSpheroid* FormFactorFullSpheroid::clone() const overridefinal
+        FormFactorFullSpheroid* FormFactorFullSpheroid::clone() const override final
 
         Returns a clone of this  ISample object. 
 
@@ -13467,7 +13465,7 @@ class FormFactorFullSpheroid(IFormFactorBorn):
         """
         accept(FormFactorFullSpheroid self, INodeVisitor visitor)
 
-        void FormFactorFullSpheroid::accept(INodeVisitor *visitor) const overridefinal
+        void FormFactorFullSpheroid::accept(INodeVisitor *visitor) const override final
 
         Calls the  INodeVisitor's visit method. 
 
@@ -13479,7 +13477,7 @@ class FormFactorFullSpheroid(IFormFactorBorn):
         """
         getHeight(FormFactorFullSpheroid self) -> double
 
-        double FormFactorFullSpheroid::getHeight() const 
+        double FormFactorFullSpheroid::getHeight() const
 
         """
         return _libBornAgainCore.FormFactorFullSpheroid_getHeight(self)
@@ -13489,7 +13487,7 @@ class FormFactorFullSpheroid(IFormFactorBorn):
         """
         getRadius(FormFactorFullSpheroid self) -> double
 
-        double FormFactorFullSpheroid::getRadius() const 
+        double FormFactorFullSpheroid::getRadius() const
 
         """
         return _libBornAgainCore.FormFactorFullSpheroid_getRadius(self)
@@ -13499,7 +13497,7 @@ class FormFactorFullSpheroid(IFormFactorBorn):
         """
         radialExtension(FormFactorFullSpheroid self) -> double
 
-        double FormFactorFullSpheroid::radialExtension() const overridefinal
+        double FormFactorFullSpheroid::radialExtension() const override final
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -13511,7 +13509,7 @@ class FormFactorFullSpheroid(IFormFactorBorn):
         """
         evaluate_for_q(FormFactorFullSpheroid self, cvector_t q) -> complex_t
 
-        complex_t FormFactorFullSpheroid::evaluate_for_q(cvector_t q) const overridefinal
+        complex_t FormFactorFullSpheroid::evaluate_for_q(cvector_t q) const override final
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -13554,14 +13552,14 @@ class FormFactorGauss(IFormFactorBorn):
         this = _libBornAgainCore.new_FormFactorGauss(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
         """
         clone(FormFactorGauss self) -> FormFactorGauss
 
-        FormFactorGauss* FormFactorGauss::clone() const overridefinal
+        FormFactorGauss* FormFactorGauss::clone() const override final
 
         Returns a clone of this  ISample object. 
 
@@ -13573,7 +13571,7 @@ class FormFactorGauss(IFormFactorBorn):
         """
         accept(FormFactorGauss self, INodeVisitor visitor)
 
-        void FormFactorGauss::accept(INodeVisitor *visitor) const overridefinal
+        void FormFactorGauss::accept(INodeVisitor *visitor) const override final
 
         Calls the  INodeVisitor's visit method. 
 
@@ -13585,7 +13583,7 @@ class FormFactorGauss(IFormFactorBorn):
         """
         getWidth(FormFactorGauss self) -> double
 
-        double FormFactorGauss::getWidth() const 
+        double FormFactorGauss::getWidth() const
 
         """
         return _libBornAgainCore.FormFactorGauss_getWidth(self)
@@ -13595,7 +13593,7 @@ class FormFactorGauss(IFormFactorBorn):
         """
         getHeight(FormFactorGauss self) -> double
 
-        double FormFactorGauss::getHeight() const 
+        double FormFactorGauss::getHeight() const
 
         """
         return _libBornAgainCore.FormFactorGauss_getHeight(self)
@@ -13605,7 +13603,7 @@ class FormFactorGauss(IFormFactorBorn):
         """
         radialExtension(FormFactorGauss self) -> double
 
-        double FormFactorGauss::radialExtension() const overridefinal
+        double FormFactorGauss::radialExtension() const override final
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -13617,7 +13615,7 @@ class FormFactorGauss(IFormFactorBorn):
         """
         evaluate_for_q(FormFactorGauss self, cvector_t q) -> complex_t
 
-        complex_t FormFactorGauss::evaluate_for_q(cvector_t q) const overridefinal
+        complex_t FormFactorGauss::evaluate_for_q(cvector_t q) const override final
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -13673,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
@@ -13682,7 +13680,7 @@ class FormFactorHemiEllipsoid(IFormFactorBorn):
         """
         clone(FormFactorHemiEllipsoid self) -> FormFactorHemiEllipsoid
 
-        FormFactorHemiEllipsoid* FormFactorHemiEllipsoid::clone() const overridefinal
+        FormFactorHemiEllipsoid* FormFactorHemiEllipsoid::clone() const override final
 
         Returns a clone of this  ISample object. 
 
@@ -13694,7 +13692,7 @@ class FormFactorHemiEllipsoid(IFormFactorBorn):
         """
         accept(FormFactorHemiEllipsoid self, INodeVisitor visitor)
 
-        void FormFactorHemiEllipsoid::accept(INodeVisitor *visitor) const overridefinal
+        void FormFactorHemiEllipsoid::accept(INodeVisitor *visitor) const override final
 
         Calls the  INodeVisitor's visit method. 
 
@@ -13706,7 +13704,7 @@ class FormFactorHemiEllipsoid(IFormFactorBorn):
         """
         getHeight(FormFactorHemiEllipsoid self) -> double
 
-        double FormFactorHemiEllipsoid::getHeight() const 
+        double FormFactorHemiEllipsoid::getHeight() const
 
         """
         return _libBornAgainCore.FormFactorHemiEllipsoid_getHeight(self)
@@ -13716,7 +13714,7 @@ class FormFactorHemiEllipsoid(IFormFactorBorn):
         """
         getRadiusX(FormFactorHemiEllipsoid self) -> double
 
-        double FormFactorHemiEllipsoid::getRadiusX() const 
+        double FormFactorHemiEllipsoid::getRadiusX() const
 
         """
         return _libBornAgainCore.FormFactorHemiEllipsoid_getRadiusX(self)
@@ -13726,7 +13724,7 @@ class FormFactorHemiEllipsoid(IFormFactorBorn):
         """
         getRadiusY(FormFactorHemiEllipsoid self) -> double
 
-        double FormFactorHemiEllipsoid::getRadiusY() const 
+        double FormFactorHemiEllipsoid::getRadiusY() const
 
         """
         return _libBornAgainCore.FormFactorHemiEllipsoid_getRadiusY(self)
@@ -13736,7 +13734,7 @@ class FormFactorHemiEllipsoid(IFormFactorBorn):
         """
         radialExtension(FormFactorHemiEllipsoid self) -> double
 
-        double FormFactorHemiEllipsoid::radialExtension() const overridefinal
+        double FormFactorHemiEllipsoid::radialExtension() const override final
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -13748,7 +13746,7 @@ class FormFactorHemiEllipsoid(IFormFactorBorn):
         """
         evaluate_for_q(FormFactorHemiEllipsoid self, cvector_t q) -> complex_t
 
-        complex_t FormFactorHemiEllipsoid::evaluate_for_q(cvector_t q) const overridefinal
+        complex_t FormFactorHemiEllipsoid::evaluate_for_q(cvector_t q) const override final
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -13796,14 +13794,14 @@ class FormFactorIcosahedron(FormFactorPolyhedron):
         this = _libBornAgainCore.new_FormFactorIcosahedron(edge)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
         """
         clone(FormFactorIcosahedron self) -> FormFactorIcosahedron
 
-        FormFactorIcosahedron* FormFactorIcosahedron::clone() const overridefinal
+        FormFactorIcosahedron* FormFactorIcosahedron::clone() const override final
 
         Returns a clone of this  ISample object. 
 
@@ -13815,7 +13813,7 @@ class FormFactorIcosahedron(FormFactorPolyhedron):
         """
         accept(FormFactorIcosahedron self, INodeVisitor visitor)
 
-        void FormFactorIcosahedron::accept(INodeVisitor *visitor) const overridefinal
+        void FormFactorIcosahedron::accept(INodeVisitor *visitor) const override final
 
         Calls the  INodeVisitor's visit method. 
 
@@ -13827,7 +13825,7 @@ class FormFactorIcosahedron(FormFactorPolyhedron):
         """
         getEdge(FormFactorIcosahedron self) -> double
 
-        double FormFactorIcosahedron::getEdge() const 
+        double FormFactorIcosahedron::getEdge() const
 
         """
         return _libBornAgainCore.FormFactorIcosahedron_getEdge(self)
@@ -13881,14 +13879,14 @@ 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):
         """
         clone(FormFactorLongBoxGauss self) -> FormFactorLongBoxGauss
 
-        FormFactorLongBoxGauss* FormFactorLongBoxGauss::clone() const overridefinal
+        FormFactorLongBoxGauss* FormFactorLongBoxGauss::clone() const override final
 
         Returns a clone of this  ISample object. 
 
@@ -13900,7 +13898,7 @@ class FormFactorLongBoxGauss(IFormFactorBorn):
         """
         accept(FormFactorLongBoxGauss self, INodeVisitor visitor)
 
-        void FormFactorLongBoxGauss::accept(INodeVisitor *visitor) const overridefinal
+        void FormFactorLongBoxGauss::accept(INodeVisitor *visitor) const override final
 
         Calls the  INodeVisitor's visit method. 
 
@@ -13912,7 +13910,7 @@ class FormFactorLongBoxGauss(IFormFactorBorn):
         """
         getLength(FormFactorLongBoxGauss self) -> double
 
-        double FormFactorLongBoxGauss::getLength() const 
+        double FormFactorLongBoxGauss::getLength() const
 
         """
         return _libBornAgainCore.FormFactorLongBoxGauss_getLength(self)
@@ -13922,7 +13920,7 @@ class FormFactorLongBoxGauss(IFormFactorBorn):
         """
         getHeight(FormFactorLongBoxGauss self) -> double
 
-        double FormFactorLongBoxGauss::getHeight() const 
+        double FormFactorLongBoxGauss::getHeight() const
 
         """
         return _libBornAgainCore.FormFactorLongBoxGauss_getHeight(self)
@@ -13932,7 +13930,7 @@ class FormFactorLongBoxGauss(IFormFactorBorn):
         """
         getWidth(FormFactorLongBoxGauss self) -> double
 
-        double FormFactorLongBoxGauss::getWidth() const 
+        double FormFactorLongBoxGauss::getWidth() const
 
         """
         return _libBornAgainCore.FormFactorLongBoxGauss_getWidth(self)
@@ -13942,7 +13940,7 @@ class FormFactorLongBoxGauss(IFormFactorBorn):
         """
         radialExtension(FormFactorLongBoxGauss self) -> double
 
-        double FormFactorLongBoxGauss::radialExtension() const overridefinal
+        double FormFactorLongBoxGauss::radialExtension() const override final
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -13954,7 +13952,7 @@ class FormFactorLongBoxGauss(IFormFactorBorn):
         """
         evaluate_for_q(FormFactorLongBoxGauss self, cvector_t q) -> complex_t
 
-        complex_t FormFactorLongBoxGauss::evaluate_for_q(cvector_t q) const overridefinal
+        complex_t FormFactorLongBoxGauss::evaluate_for_q(cvector_t q) const override final
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -14010,14 +14008,14 @@ 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):
         """
         clone(FormFactorLongBoxLorentz self) -> FormFactorLongBoxLorentz
 
-        FormFactorLongBoxLorentz* FormFactorLongBoxLorentz::clone() const overridefinal
+        FormFactorLongBoxLorentz* FormFactorLongBoxLorentz::clone() const override final
 
         Returns a clone of this  ISample object. 
 
@@ -14029,7 +14027,7 @@ class FormFactorLongBoxLorentz(IFormFactorBorn):
         """
         accept(FormFactorLongBoxLorentz self, INodeVisitor visitor)
 
-        void FormFactorLongBoxLorentz::accept(INodeVisitor *visitor) const overridefinal
+        void FormFactorLongBoxLorentz::accept(INodeVisitor *visitor) const override final
 
         Calls the  INodeVisitor's visit method. 
 
@@ -14041,7 +14039,7 @@ class FormFactorLongBoxLorentz(IFormFactorBorn):
         """
         getLength(FormFactorLongBoxLorentz self) -> double
 
-        double FormFactorLongBoxLorentz::getLength() const 
+        double FormFactorLongBoxLorentz::getLength() const
 
         """
         return _libBornAgainCore.FormFactorLongBoxLorentz_getLength(self)
@@ -14051,7 +14049,7 @@ class FormFactorLongBoxLorentz(IFormFactorBorn):
         """
         getHeight(FormFactorLongBoxLorentz self) -> double
 
-        double FormFactorLongBoxLorentz::getHeight() const 
+        double FormFactorLongBoxLorentz::getHeight() const
 
         """
         return _libBornAgainCore.FormFactorLongBoxLorentz_getHeight(self)
@@ -14061,7 +14059,7 @@ class FormFactorLongBoxLorentz(IFormFactorBorn):
         """
         getWidth(FormFactorLongBoxLorentz self) -> double
 
-        double FormFactorLongBoxLorentz::getWidth() const 
+        double FormFactorLongBoxLorentz::getWidth() const
 
         """
         return _libBornAgainCore.FormFactorLongBoxLorentz_getWidth(self)
@@ -14071,7 +14069,7 @@ class FormFactorLongBoxLorentz(IFormFactorBorn):
         """
         radialExtension(FormFactorLongBoxLorentz self) -> double
 
-        double FormFactorLongBoxLorentz::radialExtension() const overridefinal
+        double FormFactorLongBoxLorentz::radialExtension() const override final
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -14083,7 +14081,7 @@ class FormFactorLongBoxLorentz(IFormFactorBorn):
         """
         evaluate_for_q(FormFactorLongBoxLorentz self, cvector_t q) -> complex_t
 
-        complex_t FormFactorLongBoxLorentz::evaluate_for_q(cvector_t q) const overridefinal
+        complex_t FormFactorLongBoxLorentz::evaluate_for_q(cvector_t q) const override final
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -14139,14 +14137,14 @@ 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):
         """
         clone(FormFactorLongRipple1Gauss self) -> FormFactorLongRipple1Gauss
 
-        FormFactorLongRipple1Gauss* FormFactorLongRipple1Gauss::clone() const overridefinal
+        FormFactorLongRipple1Gauss* FormFactorLongRipple1Gauss::clone() const override final
 
         Returns a clone of this  ISample object. 
 
@@ -14158,7 +14156,7 @@ class FormFactorLongRipple1Gauss(IFormFactorBorn):
         """
         accept(FormFactorLongRipple1Gauss self, INodeVisitor visitor)
 
-        void FormFactorLongRipple1Gauss::accept(INodeVisitor *visitor) const overridefinal
+        void FormFactorLongRipple1Gauss::accept(INodeVisitor *visitor) const override final
 
         Calls the  INodeVisitor's visit method. 
 
@@ -14170,7 +14168,7 @@ class FormFactorLongRipple1Gauss(IFormFactorBorn):
         """
         getHeight(FormFactorLongRipple1Gauss self) -> double
 
-        double FormFactorLongRipple1Gauss::getHeight() const 
+        double FormFactorLongRipple1Gauss::getHeight() const
 
         """
         return _libBornAgainCore.FormFactorLongRipple1Gauss_getHeight(self)
@@ -14180,7 +14178,7 @@ class FormFactorLongRipple1Gauss(IFormFactorBorn):
         """
         getWidth(FormFactorLongRipple1Gauss self) -> double
 
-        double FormFactorLongRipple1Gauss::getWidth() const 
+        double FormFactorLongRipple1Gauss::getWidth() const
 
         """
         return _libBornAgainCore.FormFactorLongRipple1Gauss_getWidth(self)
@@ -14190,7 +14188,7 @@ class FormFactorLongRipple1Gauss(IFormFactorBorn):
         """
         getLength(FormFactorLongRipple1Gauss self) -> double
 
-        double FormFactorLongRipple1Gauss::getLength() const 
+        double FormFactorLongRipple1Gauss::getLength() const
 
         """
         return _libBornAgainCore.FormFactorLongRipple1Gauss_getLength(self)
@@ -14200,7 +14198,7 @@ class FormFactorLongRipple1Gauss(IFormFactorBorn):
         """
         radialExtension(FormFactorLongRipple1Gauss self) -> double
 
-        double FormFactorLongRipple1Gauss::radialExtension() const overridefinal
+        double FormFactorLongRipple1Gauss::radialExtension() const override final
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -14212,7 +14210,7 @@ class FormFactorLongRipple1Gauss(IFormFactorBorn):
         """
         evaluate_for_q(FormFactorLongRipple1Gauss self, cvector_t q) -> complex_t
 
-        complex_t FormFactorLongRipple1Gauss::evaluate_for_q(cvector_t q) const overridefinal
+        complex_t FormFactorLongRipple1Gauss::evaluate_for_q(cvector_t q) const override final
 
         Complex formfactor. 
 
@@ -14268,14 +14266,14 @@ 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):
         """
         clone(FormFactorLongRipple1Lorentz self) -> FormFactorLongRipple1Lorentz
 
-        FormFactorLongRipple1Lorentz* FormFactorLongRipple1Lorentz::clone() const overridefinal
+        FormFactorLongRipple1Lorentz* FormFactorLongRipple1Lorentz::clone() const override final
 
         Returns a clone of this  ISample object. 
 
@@ -14287,7 +14285,7 @@ class FormFactorLongRipple1Lorentz(IFormFactorBorn):
         """
         accept(FormFactorLongRipple1Lorentz self, INodeVisitor visitor)
 
-        void FormFactorLongRipple1Lorentz::accept(INodeVisitor *visitor) const overridefinal
+        void FormFactorLongRipple1Lorentz::accept(INodeVisitor *visitor) const override final
 
         Calls the  INodeVisitor's visit method. 
 
@@ -14299,7 +14297,7 @@ class FormFactorLongRipple1Lorentz(IFormFactorBorn):
         """
         radialExtension(FormFactorLongRipple1Lorentz self) -> double
 
-        double FormFactorLongRipple1Lorentz::radialExtension() const overridefinal
+        double FormFactorLongRipple1Lorentz::radialExtension() const override final
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -14311,7 +14309,7 @@ class FormFactorLongRipple1Lorentz(IFormFactorBorn):
         """
         getHeight(FormFactorLongRipple1Lorentz self) -> double
 
-        double FormFactorLongRipple1Lorentz::getHeight() const 
+        double FormFactorLongRipple1Lorentz::getHeight() const
 
         """
         return _libBornAgainCore.FormFactorLongRipple1Lorentz_getHeight(self)
@@ -14321,7 +14319,7 @@ class FormFactorLongRipple1Lorentz(IFormFactorBorn):
         """
         getWidth(FormFactorLongRipple1Lorentz self) -> double
 
-        double FormFactorLongRipple1Lorentz::getWidth() const 
+        double FormFactorLongRipple1Lorentz::getWidth() const
 
         """
         return _libBornAgainCore.FormFactorLongRipple1Lorentz_getWidth(self)
@@ -14331,7 +14329,7 @@ class FormFactorLongRipple1Lorentz(IFormFactorBorn):
         """
         getLength(FormFactorLongRipple1Lorentz self) -> double
 
-        double FormFactorLongRipple1Lorentz::getLength() const 
+        double FormFactorLongRipple1Lorentz::getLength() const
 
         """
         return _libBornAgainCore.FormFactorLongRipple1Lorentz_getLength(self)
@@ -14341,7 +14339,7 @@ class FormFactorLongRipple1Lorentz(IFormFactorBorn):
         """
         evaluate_for_q(FormFactorLongRipple1Lorentz self, cvector_t q) -> complex_t
 
-        complex_t FormFactorLongRipple1Lorentz::evaluate_for_q(cvector_t q) const overridefinal
+        complex_t FormFactorLongRipple1Lorentz::evaluate_for_q(cvector_t q) const override final
 
         Complex formfactor. 
 
@@ -14400,14 +14398,14 @@ 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):
         """
         clone(FormFactorLongRipple2Gauss self) -> FormFactorLongRipple2Gauss
 
-        FormFactorLongRipple2Gauss* FormFactorLongRipple2Gauss::clone() const overridefinal
+        FormFactorLongRipple2Gauss* FormFactorLongRipple2Gauss::clone() const override final
 
         Returns a clone of this  ISample object. 
 
@@ -14419,7 +14417,7 @@ class FormFactorLongRipple2Gauss(IFormFactorBorn):
         """
         accept(FormFactorLongRipple2Gauss self, INodeVisitor visitor)
 
-        void FormFactorLongRipple2Gauss::accept(INodeVisitor *visitor) const overridefinal
+        void FormFactorLongRipple2Gauss::accept(INodeVisitor *visitor) const override final
 
         Calls the  INodeVisitor's visit method. 
 
@@ -14431,7 +14429,7 @@ class FormFactorLongRipple2Gauss(IFormFactorBorn):
         """
         getHeight(FormFactorLongRipple2Gauss self) -> double
 
-        double FormFactorLongRipple2Gauss::getHeight() const 
+        double FormFactorLongRipple2Gauss::getHeight() const
 
         """
         return _libBornAgainCore.FormFactorLongRipple2Gauss_getHeight(self)
@@ -14441,7 +14439,7 @@ class FormFactorLongRipple2Gauss(IFormFactorBorn):
         """
         getWidth(FormFactorLongRipple2Gauss self) -> double
 
-        double FormFactorLongRipple2Gauss::getWidth() const 
+        double FormFactorLongRipple2Gauss::getWidth() const
 
         """
         return _libBornAgainCore.FormFactorLongRipple2Gauss_getWidth(self)
@@ -14451,7 +14449,7 @@ class FormFactorLongRipple2Gauss(IFormFactorBorn):
         """
         getLength(FormFactorLongRipple2Gauss self) -> double
 
-        double FormFactorLongRipple2Gauss::getLength() const 
+        double FormFactorLongRipple2Gauss::getLength() const
 
         """
         return _libBornAgainCore.FormFactorLongRipple2Gauss_getLength(self)
@@ -14461,7 +14459,7 @@ class FormFactorLongRipple2Gauss(IFormFactorBorn):
         """
         getAsymmetry(FormFactorLongRipple2Gauss self) -> double
 
-        double FormFactorLongRipple2Gauss::getAsymmetry() const 
+        double FormFactorLongRipple2Gauss::getAsymmetry() const
 
         """
         return _libBornAgainCore.FormFactorLongRipple2Gauss_getAsymmetry(self)
@@ -14471,7 +14469,7 @@ class FormFactorLongRipple2Gauss(IFormFactorBorn):
         """
         radialExtension(FormFactorLongRipple2Gauss self) -> double
 
-        double FormFactorLongRipple2Gauss::radialExtension() const overridefinal
+        double FormFactorLongRipple2Gauss::radialExtension() const override final
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -14483,7 +14481,7 @@ class FormFactorLongRipple2Gauss(IFormFactorBorn):
         """
         evaluate_for_q(FormFactorLongRipple2Gauss self, cvector_t q) -> complex_t
 
-        complex_t FormFactorLongRipple2Gauss::evaluate_for_q(cvector_t q) const overridefinal
+        complex_t FormFactorLongRipple2Gauss::evaluate_for_q(cvector_t q) const override final
 
         Complex formfactor. 
 
@@ -14540,14 +14538,14 @@ 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):
         """
         clone(FormFactorLongRipple2Lorentz self) -> FormFactorLongRipple2Lorentz
 
-        FormFactorLongRipple2Lorentz* FormFactorLongRipple2Lorentz::clone() const overridefinal
+        FormFactorLongRipple2Lorentz* FormFactorLongRipple2Lorentz::clone() const override final
 
         Returns a clone of this  ISample object. 
 
@@ -14559,7 +14557,7 @@ class FormFactorLongRipple2Lorentz(IFormFactorBorn):
         """
         accept(FormFactorLongRipple2Lorentz self, INodeVisitor visitor)
 
-        void FormFactorLongRipple2Lorentz::accept(INodeVisitor *visitor) const overridefinal
+        void FormFactorLongRipple2Lorentz::accept(INodeVisitor *visitor) const override final
 
         Calls the  INodeVisitor's visit method. 
 
@@ -14571,7 +14569,7 @@ class FormFactorLongRipple2Lorentz(IFormFactorBorn):
         """
         getHeight(FormFactorLongRipple2Lorentz self) -> double
 
-        double FormFactorLongRipple2Lorentz::getHeight() const 
+        double FormFactorLongRipple2Lorentz::getHeight() const
 
         """
         return _libBornAgainCore.FormFactorLongRipple2Lorentz_getHeight(self)
@@ -14581,7 +14579,7 @@ class FormFactorLongRipple2Lorentz(IFormFactorBorn):
         """
         getWidth(FormFactorLongRipple2Lorentz self) -> double
 
-        double FormFactorLongRipple2Lorentz::getWidth() const 
+        double FormFactorLongRipple2Lorentz::getWidth() const
 
         """
         return _libBornAgainCore.FormFactorLongRipple2Lorentz_getWidth(self)
@@ -14591,7 +14589,7 @@ class FormFactorLongRipple2Lorentz(IFormFactorBorn):
         """
         getLength(FormFactorLongRipple2Lorentz self) -> double
 
-        double FormFactorLongRipple2Lorentz::getLength() const 
+        double FormFactorLongRipple2Lorentz::getLength() const
 
         """
         return _libBornAgainCore.FormFactorLongRipple2Lorentz_getLength(self)
@@ -14601,7 +14599,7 @@ class FormFactorLongRipple2Lorentz(IFormFactorBorn):
         """
         getAsymmetry(FormFactorLongRipple2Lorentz self) -> double
 
-        double FormFactorLongRipple2Lorentz::getAsymmetry() const 
+        double FormFactorLongRipple2Lorentz::getAsymmetry() const
 
         """
         return _libBornAgainCore.FormFactorLongRipple2Lorentz_getAsymmetry(self)
@@ -14611,7 +14609,7 @@ class FormFactorLongRipple2Lorentz(IFormFactorBorn):
         """
         radialExtension(FormFactorLongRipple2Lorentz self) -> double
 
-        double FormFactorLongRipple2Lorentz::radialExtension() const overridefinal
+        double FormFactorLongRipple2Lorentz::radialExtension() const override final
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -14623,7 +14621,7 @@ class FormFactorLongRipple2Lorentz(IFormFactorBorn):
         """
         evaluate_for_q(FormFactorLongRipple2Lorentz self, cvector_t q) -> complex_t
 
-        complex_t FormFactorLongRipple2Lorentz::evaluate_for_q(cvector_t q) const overridefinal
+        complex_t FormFactorLongRipple2Lorentz::evaluate_for_q(cvector_t q) const override final
 
         Complex formfactor. 
 
@@ -14666,14 +14664,14 @@ class FormFactorLorentz(IFormFactorBorn):
         this = _libBornAgainCore.new_FormFactorLorentz(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
         """
         clone(FormFactorLorentz self) -> FormFactorLorentz
 
-        FormFactorLorentz* FormFactorLorentz::clone() const overridefinal
+        FormFactorLorentz* FormFactorLorentz::clone() const override final
 
         Returns a clone of this  ISample object. 
 
@@ -14685,7 +14683,7 @@ class FormFactorLorentz(IFormFactorBorn):
         """
         accept(FormFactorLorentz self, INodeVisitor visitor)
 
-        void FormFactorLorentz::accept(INodeVisitor *visitor) const overridefinal
+        void FormFactorLorentz::accept(INodeVisitor *visitor) const override final
 
         Calls the  INodeVisitor's visit method. 
 
@@ -14697,7 +14695,7 @@ class FormFactorLorentz(IFormFactorBorn):
         """
         getWidth(FormFactorLorentz self) -> double
 
-        double FormFactorLorentz::getWidth() const 
+        double FormFactorLorentz::getWidth() const
 
         """
         return _libBornAgainCore.FormFactorLorentz_getWidth(self)
@@ -14707,7 +14705,7 @@ class FormFactorLorentz(IFormFactorBorn):
         """
         getHeight(FormFactorLorentz self) -> double
 
-        double FormFactorLorentz::getHeight() const 
+        double FormFactorLorentz::getHeight() const
 
         """
         return _libBornAgainCore.FormFactorLorentz_getHeight(self)
@@ -14717,7 +14715,7 @@ class FormFactorLorentz(IFormFactorBorn):
         """
         radialExtension(FormFactorLorentz self) -> double
 
-        double FormFactorLorentz::radialExtension() const overridefinal
+        double FormFactorLorentz::radialExtension() const override final
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -14729,7 +14727,7 @@ class FormFactorLorentz(IFormFactorBorn):
         """
         evaluate_for_q(FormFactorLorentz self, cvector_t q) -> complex_t
 
-        complex_t FormFactorLorentz::evaluate_for_q(cvector_t q) const overridefinal
+        complex_t FormFactorLorentz::evaluate_for_q(cvector_t q) const override final
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -14782,14 +14780,14 @@ 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):
         """
         clone(FormFactorPrism3 self) -> FormFactorPrism3
 
-        FormFactorPrism3* FormFactorPrism3::clone() const overridefinal
+        FormFactorPrism3* FormFactorPrism3::clone() const override final
 
         Returns a clone of this  ISample object. 
 
@@ -14801,7 +14799,7 @@ class FormFactorPrism3(FormFactorPolygonalPrism):
         """
         accept(FormFactorPrism3 self, INodeVisitor visitor)
 
-        void FormFactorPrism3::accept(INodeVisitor *visitor) const overridefinal
+        void FormFactorPrism3::accept(INodeVisitor *visitor) const override final
 
         Calls the  INodeVisitor's visit method. 
 
@@ -14813,7 +14811,7 @@ class FormFactorPrism3(FormFactorPolygonalPrism):
         """
         getBaseEdge(FormFactorPrism3 self) -> double
 
-        double FormFactorPrism3::getBaseEdge() const 
+        double FormFactorPrism3::getBaseEdge() const
 
         """
         return _libBornAgainCore.FormFactorPrism3_getBaseEdge(self)
@@ -14864,14 +14862,14 @@ 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):
         """
         clone(FormFactorPrism6 self) -> FormFactorPrism6
 
-        FormFactorPrism6* FormFactorPrism6::clone() const overridefinal
+        FormFactorPrism6* FormFactorPrism6::clone() const override final
 
         Returns a clone of this  ISample object. 
 
@@ -14883,7 +14881,7 @@ class FormFactorPrism6(FormFactorPolygonalPrism):
         """
         accept(FormFactorPrism6 self, INodeVisitor visitor)
 
-        void FormFactorPrism6::accept(INodeVisitor *visitor) const overridefinal
+        void FormFactorPrism6::accept(INodeVisitor *visitor) const override final
 
         Calls the  INodeVisitor's visit method. 
 
@@ -14895,7 +14893,7 @@ class FormFactorPrism6(FormFactorPolygonalPrism):
         """
         getBaseEdge(FormFactorPrism6 self) -> double
 
-        double FormFactorPrism6::getBaseEdge() const 
+        double FormFactorPrism6::getBaseEdge() const
 
         """
         return _libBornAgainCore.FormFactorPrism6_getBaseEdge(self)
@@ -14949,14 +14947,14 @@ 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):
         """
         clone(FormFactorPyramid self) -> FormFactorPyramid
 
-        FormFactorPyramid* FormFactorPyramid::clone() const overridefinal
+        FormFactorPyramid* FormFactorPyramid::clone() const override final
 
         Returns a clone of this  ISample object. 
 
@@ -14968,7 +14966,7 @@ class FormFactorPyramid(FormFactorPolyhedron):
         """
         accept(FormFactorPyramid self, INodeVisitor visitor)
 
-        void FormFactorPyramid::accept(INodeVisitor *visitor) const overridefinal
+        void FormFactorPyramid::accept(INodeVisitor *visitor) const override final
 
         Calls the  INodeVisitor's visit method. 
 
@@ -14980,7 +14978,7 @@ class FormFactorPyramid(FormFactorPolyhedron):
         """
         getHeight(FormFactorPyramid self) -> double
 
-        double FormFactorPyramid::getHeight() const 
+        double FormFactorPyramid::getHeight() const
 
         """
         return _libBornAgainCore.FormFactorPyramid_getHeight(self)
@@ -14990,7 +14988,7 @@ class FormFactorPyramid(FormFactorPolyhedron):
         """
         getBaseEdge(FormFactorPyramid self) -> double
 
-        double FormFactorPyramid::getBaseEdge() const 
+        double FormFactorPyramid::getBaseEdge() const
 
         """
         return _libBornAgainCore.FormFactorPyramid_getBaseEdge(self)
@@ -15000,7 +14998,7 @@ class FormFactorPyramid(FormFactorPolyhedron):
         """
         getAlpha(FormFactorPyramid self) -> double
 
-        double FormFactorPyramid::getAlpha() const 
+        double FormFactorPyramid::getAlpha() const
 
         """
         return _libBornAgainCore.FormFactorPyramid_getAlpha(self)
@@ -15054,14 +15052,14 @@ 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):
         """
         clone(FormFactorRipple1 self) -> FormFactorRipple1
 
-        FormFactorRipple1* FormFactorRipple1::clone() const overridefinal
+        FormFactorRipple1* FormFactorRipple1::clone() const override final
 
         Returns a clone of this  ISample object. 
 
@@ -15073,7 +15071,7 @@ class FormFactorRipple1(IFormFactorBorn):
         """
         accept(FormFactorRipple1 self, INodeVisitor visitor)
 
-        void FormFactorRipple1::accept(INodeVisitor *visitor) const overridefinal
+        void FormFactorRipple1::accept(INodeVisitor *visitor) const override final
 
         Calls the  INodeVisitor's visit method. 
 
@@ -15085,7 +15083,7 @@ class FormFactorRipple1(IFormFactorBorn):
         """
         getLength(FormFactorRipple1 self) -> double
 
-        double FormFactorRipple1::getLength() const 
+        double FormFactorRipple1::getLength() const
 
         """
         return _libBornAgainCore.FormFactorRipple1_getLength(self)
@@ -15095,7 +15093,7 @@ class FormFactorRipple1(IFormFactorBorn):
         """
         getHeight(FormFactorRipple1 self) -> double
 
-        double FormFactorRipple1::getHeight() const 
+        double FormFactorRipple1::getHeight() const
 
         """
         return _libBornAgainCore.FormFactorRipple1_getHeight(self)
@@ -15105,7 +15103,7 @@ class FormFactorRipple1(IFormFactorBorn):
         """
         getWidth(FormFactorRipple1 self) -> double
 
-        double FormFactorRipple1::getWidth() const 
+        double FormFactorRipple1::getWidth() const
 
         """
         return _libBornAgainCore.FormFactorRipple1_getWidth(self)
@@ -15115,7 +15113,7 @@ class FormFactorRipple1(IFormFactorBorn):
         """
         radialExtension(FormFactorRipple1 self) -> double
 
-        double FormFactorRipple1::radialExtension() const overridefinal
+        double FormFactorRipple1::radialExtension() const override final
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -15127,7 +15125,7 @@ class FormFactorRipple1(IFormFactorBorn):
         """
         evaluate_for_q(FormFactorRipple1 self, cvector_t q) -> complex_t
 
-        complex_t FormFactorRipple1::evaluate_for_q(cvector_t q) const overridefinal
+        complex_t FormFactorRipple1::evaluate_for_q(cvector_t q) const override final
 
         Complex formfactor. 
 
@@ -15186,14 +15184,14 @@ 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):
         """
         clone(FormFactorRipple2 self) -> FormFactorRipple2
 
-        FormFactorRipple2* FormFactorRipple2::clone() const overridefinal
+        FormFactorRipple2* FormFactorRipple2::clone() const override final
 
         Returns a clone of this  ISample object. 
 
@@ -15205,7 +15203,7 @@ class FormFactorRipple2(IFormFactorBorn):
         """
         accept(FormFactorRipple2 self, INodeVisitor visitor)
 
-        void FormFactorRipple2::accept(INodeVisitor *visitor) const overridefinal
+        void FormFactorRipple2::accept(INodeVisitor *visitor) const override final
 
         Calls the  INodeVisitor's visit method. 
 
@@ -15217,7 +15215,7 @@ class FormFactorRipple2(IFormFactorBorn):
         """
         getHeight(FormFactorRipple2 self) -> double
 
-        double FormFactorRipple2::getHeight() const 
+        double FormFactorRipple2::getHeight() const
 
         """
         return _libBornAgainCore.FormFactorRipple2_getHeight(self)
@@ -15227,7 +15225,7 @@ class FormFactorRipple2(IFormFactorBorn):
         """
         getWidth(FormFactorRipple2 self) -> double
 
-        double FormFactorRipple2::getWidth() const 
+        double FormFactorRipple2::getWidth() const
 
         """
         return _libBornAgainCore.FormFactorRipple2_getWidth(self)
@@ -15237,7 +15235,7 @@ class FormFactorRipple2(IFormFactorBorn):
         """
         getLength(FormFactorRipple2 self) -> double
 
-        double FormFactorRipple2::getLength() const 
+        double FormFactorRipple2::getLength() const
 
         """
         return _libBornAgainCore.FormFactorRipple2_getLength(self)
@@ -15247,7 +15245,7 @@ class FormFactorRipple2(IFormFactorBorn):
         """
         getAsymmetry(FormFactorRipple2 self) -> double
 
-        double FormFactorRipple2::getAsymmetry() const 
+        double FormFactorRipple2::getAsymmetry() const
 
         """
         return _libBornAgainCore.FormFactorRipple2_getAsymmetry(self)
@@ -15257,7 +15255,7 @@ class FormFactorRipple2(IFormFactorBorn):
         """
         radialExtension(FormFactorRipple2 self) -> double
 
-        double FormFactorRipple2::radialExtension() const overridefinal
+        double FormFactorRipple2::radialExtension() const override final
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -15269,7 +15267,7 @@ class FormFactorRipple2(IFormFactorBorn):
         """
         evaluate_for_q(FormFactorRipple2 self, cvector_t q) -> complex_t
 
-        complex_t FormFactorRipple2::evaluate_for_q(cvector_t q) const overridefinal
+        complex_t FormFactorRipple2::evaluate_for_q(cvector_t q) const override final
 
         Complex formfactor. 
 
@@ -15311,14 +15309,14 @@ 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):
         """
         clone(FormFactorSphereGaussianRadius self) -> FormFactorSphereGaussianRadius
 
-        FormFactorSphereGaussianRadius* FormFactorSphereGaussianRadius::clone() const overridefinal
+        FormFactorSphereGaussianRadius* FormFactorSphereGaussianRadius::clone() const override final
 
         Returns a clone of this  ISample object. 
 
@@ -15330,7 +15328,7 @@ class FormFactorSphereGaussianRadius(IFormFactorBorn):
         """
         accept(FormFactorSphereGaussianRadius self, INodeVisitor visitor)
 
-        void FormFactorSphereGaussianRadius::accept(INodeVisitor *visitor) const overridefinal
+        void FormFactorSphereGaussianRadius::accept(INodeVisitor *visitor) const override final
 
         Calls the  INodeVisitor's visit method. 
 
@@ -15342,7 +15340,7 @@ class FormFactorSphereGaussianRadius(IFormFactorBorn):
         """
         radialExtension(FormFactorSphereGaussianRadius self) -> double
 
-        double FormFactorSphereGaussianRadius::radialExtension() const overridefinal
+        double FormFactorSphereGaussianRadius::radialExtension() const override final
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -15354,7 +15352,7 @@ class FormFactorSphereGaussianRadius(IFormFactorBorn):
         """
         evaluate_for_q(FormFactorSphereGaussianRadius self, cvector_t q) -> complex_t
 
-        complex_t FormFactorSphereGaussianRadius::evaluate_for_q(cvector_t q) const overridefinal
+        complex_t FormFactorSphereGaussianRadius::evaluate_for_q(cvector_t q) const override final
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -15396,14 +15394,14 @@ 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):
         """
         clone(FormFactorSphereLogNormalRadius self) -> FormFactorSphereLogNormalRadius
 
-        FormFactorSphereLogNormalRadius* FormFactorSphereLogNormalRadius::clone() const overridefinal
+        FormFactorSphereLogNormalRadius* FormFactorSphereLogNormalRadius::clone() const override final
 
         Returns a clone of this  ISample object. 
 
@@ -15415,7 +15413,7 @@ class FormFactorSphereLogNormalRadius(IFormFactorBorn):
         """
         accept(FormFactorSphereLogNormalRadius self, INodeVisitor visitor)
 
-        void FormFactorSphereLogNormalRadius::accept(INodeVisitor *visitor) const overridefinal
+        void FormFactorSphereLogNormalRadius::accept(INodeVisitor *visitor) const override final
 
         Calls the  INodeVisitor's visit method. 
 
@@ -15427,7 +15425,7 @@ class FormFactorSphereLogNormalRadius(IFormFactorBorn):
         """
         radialExtension(FormFactorSphereLogNormalRadius self) -> double
 
-        double FormFactorSphereLogNormalRadius::radialExtension() const overridefinal
+        double FormFactorSphereLogNormalRadius::radialExtension() const override final
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -15439,7 +15437,7 @@ class FormFactorSphereLogNormalRadius(IFormFactorBorn):
         """
         evaluate_for_q(FormFactorSphereLogNormalRadius self, cvector_t q) -> complex_t
 
-        complex_t FormFactorSphereLogNormalRadius::evaluate_for_q(cvector_t q) const overridefinal
+        complex_t FormFactorSphereLogNormalRadius::evaluate_for_q(cvector_t q) const override final
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -15481,14 +15479,14 @@ 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):
         """
         clone(FormFactorSphereUniformRadius self) -> FormFactorSphereUniformRadius
 
-        FormFactorSphereUniformRadius* FormFactorSphereUniformRadius::clone() const overridefinal
+        FormFactorSphereUniformRadius* FormFactorSphereUniformRadius::clone() const override final
 
         Returns a clone of this  ISample object. 
 
@@ -15500,7 +15498,7 @@ class FormFactorSphereUniformRadius(IFormFactorBorn):
         """
         accept(FormFactorSphereUniformRadius self, INodeVisitor visitor)
 
-        void FormFactorSphereUniformRadius::accept(INodeVisitor *visitor) const overridefinal
+        void FormFactorSphereUniformRadius::accept(INodeVisitor *visitor) const override final
 
         Calls the  INodeVisitor's visit method. 
 
@@ -15512,7 +15510,7 @@ class FormFactorSphereUniformRadius(IFormFactorBorn):
         """
         radialExtension(FormFactorSphereUniformRadius self) -> double
 
-        double FormFactorSphereUniformRadius::radialExtension() const overridefinal
+        double FormFactorSphereUniformRadius::radialExtension() const override final
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -15524,7 +15522,7 @@ class FormFactorSphereUniformRadius(IFormFactorBorn):
         """
         evaluate_for_q(FormFactorSphereUniformRadius self, cvector_t q) -> complex_t
 
-        complex_t FormFactorSphereUniformRadius::evaluate_for_q(cvector_t q) const overridefinal
+        complex_t FormFactorSphereUniformRadius::evaluate_for_q(cvector_t q) const override final
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -15580,14 +15578,14 @@ 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):
         """
         clone(FormFactorTetrahedron self) -> FormFactorTetrahedron
 
-        FormFactorTetrahedron* FormFactorTetrahedron::clone() const overridefinal
+        FormFactorTetrahedron* FormFactorTetrahedron::clone() const override final
 
         Returns a clone of this  ISample object. 
 
@@ -15599,7 +15597,7 @@ class FormFactorTetrahedron(FormFactorPolyhedron):
         """
         accept(FormFactorTetrahedron self, INodeVisitor visitor)
 
-        void FormFactorTetrahedron::accept(INodeVisitor *visitor) const overridefinal
+        void FormFactorTetrahedron::accept(INodeVisitor *visitor) const override final
 
         Calls the  INodeVisitor's visit method. 
 
@@ -15611,7 +15609,7 @@ class FormFactorTetrahedron(FormFactorPolyhedron):
         """
         getBaseEdge(FormFactorTetrahedron self) -> double
 
-        double FormFactorTetrahedron::getBaseEdge() const 
+        double FormFactorTetrahedron::getBaseEdge() const
 
         """
         return _libBornAgainCore.FormFactorTetrahedron_getBaseEdge(self)
@@ -15621,7 +15619,7 @@ class FormFactorTetrahedron(FormFactorPolyhedron):
         """
         getHeight(FormFactorTetrahedron self) -> double
 
-        double FormFactorTetrahedron::getHeight() const 
+        double FormFactorTetrahedron::getHeight() const
 
         """
         return _libBornAgainCore.FormFactorTetrahedron_getHeight(self)
@@ -15631,7 +15629,7 @@ class FormFactorTetrahedron(FormFactorPolyhedron):
         """
         getAlpha(FormFactorTetrahedron self) -> double
 
-        double FormFactorTetrahedron::getAlpha() const 
+        double FormFactorTetrahedron::getAlpha() const
 
         """
         return _libBornAgainCore.FormFactorTetrahedron_getAlpha(self)
@@ -15682,14 +15680,14 @@ 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):
         """
         clone(FormFactorTruncatedCube self) -> FormFactorTruncatedCube
 
-        FormFactorTruncatedCube* FormFactorTruncatedCube::clone() const overridefinal
+        FormFactorTruncatedCube* FormFactorTruncatedCube::clone() const override final
 
         Returns a clone of this  ISample object. 
 
@@ -15701,7 +15699,7 @@ class FormFactorTruncatedCube(FormFactorPolyhedron):
         """
         accept(FormFactorTruncatedCube self, INodeVisitor visitor)
 
-        void FormFactorTruncatedCube::accept(INodeVisitor *visitor) const overridefinal
+        void FormFactorTruncatedCube::accept(INodeVisitor *visitor) const override final
 
         Calls the  INodeVisitor's visit method. 
 
@@ -15713,7 +15711,7 @@ class FormFactorTruncatedCube(FormFactorPolyhedron):
         """
         getLength(FormFactorTruncatedCube self) -> double
 
-        double FormFactorTruncatedCube::getLength() const 
+        double FormFactorTruncatedCube::getLength() const
 
         """
         return _libBornAgainCore.FormFactorTruncatedCube_getLength(self)
@@ -15723,7 +15721,7 @@ class FormFactorTruncatedCube(FormFactorPolyhedron):
         """
         getRemovedLength(FormFactorTruncatedCube self) -> double
 
-        double FormFactorTruncatedCube::getRemovedLength() const 
+        double FormFactorTruncatedCube::getRemovedLength() const
 
         """
         return _libBornAgainCore.FormFactorTruncatedCube_getRemovedLength(self)
@@ -15778,14 +15776,14 @@ 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):
         """
         clone(FormFactorTruncatedSphere self) -> FormFactorTruncatedSphere
 
-        FormFactorTruncatedSphere* FormFactorTruncatedSphere::clone() const overridefinal
+        FormFactorTruncatedSphere* FormFactorTruncatedSphere::clone() const override final
 
         Returns a clone of this  ISample object. 
 
@@ -15797,7 +15795,7 @@ class FormFactorTruncatedSphere(IFormFactorBorn):
         """
         accept(FormFactorTruncatedSphere self, INodeVisitor visitor)
 
-        void FormFactorTruncatedSphere::accept(INodeVisitor *visitor) const overridefinal
+        void FormFactorTruncatedSphere::accept(INodeVisitor *visitor) const override final
 
         Calls the  INodeVisitor's visit method. 
 
@@ -15809,7 +15807,7 @@ class FormFactorTruncatedSphere(IFormFactorBorn):
         """
         getHeight(FormFactorTruncatedSphere self) -> double
 
-        double FormFactorTruncatedSphere::getHeight() const 
+        double FormFactorTruncatedSphere::getHeight() const
 
         """
         return _libBornAgainCore.FormFactorTruncatedSphere_getHeight(self)
@@ -15819,7 +15817,7 @@ class FormFactorTruncatedSphere(IFormFactorBorn):
         """
         getRadius(FormFactorTruncatedSphere self) -> double
 
-        double FormFactorTruncatedSphere::getRadius() const 
+        double FormFactorTruncatedSphere::getRadius() const
 
         """
         return _libBornAgainCore.FormFactorTruncatedSphere_getRadius(self)
@@ -15829,7 +15827,7 @@ class FormFactorTruncatedSphere(IFormFactorBorn):
         """
         getRemovedTop(FormFactorTruncatedSphere self) -> double
 
-        double FormFactorTruncatedSphere::getRemovedTop() const 
+        double FormFactorTruncatedSphere::getRemovedTop() const
 
         """
         return _libBornAgainCore.FormFactorTruncatedSphere_getRemovedTop(self)
@@ -15839,7 +15837,7 @@ class FormFactorTruncatedSphere(IFormFactorBorn):
         """
         radialExtension(FormFactorTruncatedSphere self) -> double
 
-        double FormFactorTruncatedSphere::radialExtension() const overridefinal
+        double FormFactorTruncatedSphere::radialExtension() const override final
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -15851,7 +15849,7 @@ class FormFactorTruncatedSphere(IFormFactorBorn):
         """
         evaluate_for_q(FormFactorTruncatedSphere self, cvector_t q) -> complex_t
 
-        complex_t FormFactorTruncatedSphere::evaluate_for_q(cvector_t q) const overridefinal
+        complex_t FormFactorTruncatedSphere::evaluate_for_q(cvector_t q) const override final
 
         Complex formfactor. 
 
@@ -15911,14 +15909,14 @@ 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):
         """
         clone(FormFactorTruncatedSpheroid self) -> FormFactorTruncatedSpheroid
 
-        FormFactorTruncatedSpheroid* FormFactorTruncatedSpheroid::clone() const overridefinal
+        FormFactorTruncatedSpheroid* FormFactorTruncatedSpheroid::clone() const override final
 
         Returns a clone of this  ISample object. 
 
@@ -15930,7 +15928,7 @@ class FormFactorTruncatedSpheroid(IFormFactorBorn):
         """
         accept(FormFactorTruncatedSpheroid self, INodeVisitor visitor)
 
-        void FormFactorTruncatedSpheroid::accept(INodeVisitor *visitor) const overridefinal
+        void FormFactorTruncatedSpheroid::accept(INodeVisitor *visitor) const override final
 
         Calls the  INodeVisitor's visit method. 
 
@@ -15942,7 +15940,7 @@ class FormFactorTruncatedSpheroid(IFormFactorBorn):
         """
         getRadius(FormFactorTruncatedSpheroid self) -> double
 
-        double FormFactorTruncatedSpheroid::getRadius() const 
+        double FormFactorTruncatedSpheroid::getRadius() const
 
         """
         return _libBornAgainCore.FormFactorTruncatedSpheroid_getRadius(self)
@@ -15952,7 +15950,7 @@ class FormFactorTruncatedSpheroid(IFormFactorBorn):
         """
         getHeight(FormFactorTruncatedSpheroid self) -> double
 
-        double FormFactorTruncatedSpheroid::getHeight() const 
+        double FormFactorTruncatedSpheroid::getHeight() const
 
         """
         return _libBornAgainCore.FormFactorTruncatedSpheroid_getHeight(self)
@@ -15962,7 +15960,7 @@ class FormFactorTruncatedSpheroid(IFormFactorBorn):
         """
         getHeightFlattening(FormFactorTruncatedSpheroid self) -> double
 
-        double FormFactorTruncatedSpheroid::getHeightFlattening() const 
+        double FormFactorTruncatedSpheroid::getHeightFlattening() const
 
         """
         return _libBornAgainCore.FormFactorTruncatedSpheroid_getHeightFlattening(self)
@@ -15972,7 +15970,7 @@ class FormFactorTruncatedSpheroid(IFormFactorBorn):
         """
         getRemovedTop(FormFactorTruncatedSpheroid self) -> double
 
-        double FormFactorTruncatedSpheroid::getRemovedTop() const 
+        double FormFactorTruncatedSpheroid::getRemovedTop() const
 
         """
         return _libBornAgainCore.FormFactorTruncatedSpheroid_getRemovedTop(self)
@@ -15982,7 +15980,7 @@ class FormFactorTruncatedSpheroid(IFormFactorBorn):
         """
         radialExtension(FormFactorTruncatedSpheroid self) -> double
 
-        double FormFactorTruncatedSpheroid::radialExtension() const overridefinal
+        double FormFactorTruncatedSpheroid::radialExtension() const override final
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -15994,7 +15992,7 @@ class FormFactorTruncatedSpheroid(IFormFactorBorn):
         """
         evaluate_for_q(FormFactorTruncatedSpheroid self, cvector_t q) -> complex_t
 
-        complex_t FormFactorTruncatedSpheroid::evaluate_for_q(cvector_t q) const overridefinal
+        complex_t FormFactorTruncatedSpheroid::evaluate_for_q(cvector_t q) const override final
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -16038,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
@@ -16047,7 +16045,7 @@ class FormFactorWeighted(IFormFactor):
         """
         clone(FormFactorWeighted self) -> FormFactorWeighted
 
-        FormFactorWeighted * FormFactorWeighted::clone() const overridefinal
+        FormFactorWeighted * FormFactorWeighted::clone() const override final
 
         Returns a clone of this  ISample object. 
 
@@ -16059,7 +16057,7 @@ class FormFactorWeighted(IFormFactor):
         """
         accept(FormFactorWeighted self, INodeVisitor visitor)
 
-        void FormFactorWeighted::accept(INodeVisitor *visitor) const overridefinal
+        void FormFactorWeighted::accept(INodeVisitor *visitor) const override final
 
         Calls the  INodeVisitor's visit method. 
 
@@ -16071,7 +16069,7 @@ class FormFactorWeighted(IFormFactor):
         """
         radialExtension(FormFactorWeighted self) -> double
 
-        double FormFactorWeighted::radialExtension() const overridefinal
+        double FormFactorWeighted::radialExtension() const override final
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -16083,7 +16081,7 @@ class FormFactorWeighted(IFormFactor):
         """
         bottomZ(FormFactorWeighted self, IRotation rotation) -> double
 
-        double FormFactorWeighted::bottomZ(const IRotation &rotation) const overridefinal
+        double FormFactorWeighted::bottomZ(const IRotation &rotation) const override final
 
         Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 
@@ -16095,7 +16093,7 @@ class FormFactorWeighted(IFormFactor):
         """
         topZ(FormFactorWeighted self, IRotation rotation) -> double
 
-        double FormFactorWeighted::topZ(const IRotation &rotation) const overridefinal
+        double FormFactorWeighted::topZ(const IRotation &rotation) const override final
 
         Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 
@@ -16116,11 +16114,11 @@ class FormFactorWeighted(IFormFactor):
 
     def setAmbientMaterial(self, material):
         """
-        setAmbientMaterial(FormFactorWeighted self, HomogeneousMaterial material)
+        setAmbientMaterial(FormFactorWeighted self, Material material)
 
-        void FormFactorWeighted::setAmbientMaterial(HomogeneousMaterial material) overridefinal
+        void FormFactorWeighted::setAmbientMaterial(Material material) override final
 
-        Passes the refractive index of the ambient material in which this particle is embedded. 
+        Passes the material in which this particle is embedded. 
 
         """
         return _libBornAgainCore.FormFactorWeighted_setAmbientMaterial(self, material)
@@ -16130,7 +16128,7 @@ class FormFactorWeighted(IFormFactor):
         """
         evaluate(FormFactorWeighted self, WavevectorInfo wavevectors) -> complex_t
 
-        complex_t FormFactorWeighted::evaluate(const WavevectorInfo &wavevectors) const overridefinal
+        complex_t FormFactorWeighted::evaluate(const WavevectorInfo &wavevectors) const override final
 
         Returns scattering amplitude for complex wavevectors ki, kf. 
 
@@ -16236,7 +16234,7 @@ class Simulation(ICloneable, INode):
         """
         getBeamIntensity(Simulation self) -> double
 
-        double Simulation::getBeamIntensity() const 
+        double Simulation::getBeamIntensity() const
 
         """
         return _libBornAgainCore.Simulation_getBeamIntensity(self)
@@ -16302,7 +16300,7 @@ class Simulation(ICloneable, INode):
         """
         sample(Simulation self) -> MultiLayer
 
-        const MultiLayer * Simulation::sample() const 
+        const MultiLayer * Simulation::sample() const
 
         """
         return _libBornAgainCore.Simulation_sample(self)
@@ -16358,7 +16356,7 @@ class Simulation(ICloneable, INode):
         """
         getDistributionHandler(Simulation self) -> DistributionHandler const &
 
-        const DistributionHandler& Simulation::getDistributionHandler() const 
+        const DistributionHandler& Simulation::getDistributionHandler() const
 
         """
         return _libBornAgainCore.Simulation_getDistributionHandler(self)
@@ -16454,14 +16452,14 @@ class SimulationOptions(_object):
         this = _libBornAgainCore.new_SimulationOptions()
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def isIntegrate(self):
         """
         isIntegrate(SimulationOptions self) -> bool
 
-        bool SimulationOptions::isIntegrate() const 
+        bool SimulationOptions::isIntegrate() const
 
         """
         return _libBornAgainCore.SimulationOptions_isIntegrate(self)
@@ -16471,7 +16469,7 @@ class SimulationOptions(_object):
         """
         getMcPoints(SimulationOptions self) -> size_t
 
-        size_t SimulationOptions::getMcPoints() const 
+        size_t SimulationOptions::getMcPoints() const
 
         """
         return _libBornAgainCore.SimulationOptions_getMcPoints(self)
@@ -16516,7 +16514,7 @@ class SimulationOptions(_object):
         """
         getNumberOfThreads(SimulationOptions self) -> int
 
-        int SimulationOptions::getNumberOfThreads() const 
+        int SimulationOptions::getNumberOfThreads() const
 
         """
         return _libBornAgainCore.SimulationOptions_getNumberOfThreads(self)
@@ -16538,7 +16536,7 @@ class SimulationOptions(_object):
         """
         getNumberOfBatches(SimulationOptions self) -> int
 
-        int SimulationOptions::getNumberOfBatches() const 
+        int SimulationOptions::getNumberOfBatches() const
 
         """
         return _libBornAgainCore.SimulationOptions_getNumberOfBatches(self)
@@ -16548,7 +16546,7 @@ class SimulationOptions(_object):
         """
         getCurrentBatch(SimulationOptions self) -> int
 
-        int SimulationOptions::getCurrentBatch() const 
+        int SimulationOptions::getCurrentBatch() const
 
         """
         return _libBornAgainCore.SimulationOptions_getCurrentBatch(self)
@@ -16570,7 +16568,7 @@ class SimulationOptions(_object):
         """
         getHardwareConcurrency(SimulationOptions self) -> int
 
-        int SimulationOptions::getHardwareConcurrency() const 
+        int SimulationOptions::getHardwareConcurrency() const
 
         """
         return _libBornAgainCore.SimulationOptions_getHardwareConcurrency(self)
@@ -16590,7 +16588,7 @@ class SimulationOptions(_object):
         """
         includeSpecular(SimulationOptions self) -> bool
 
-        bool SimulationOptions::includeSpecular() const 
+        bool SimulationOptions::includeSpecular() const
 
         """
         return _libBornAgainCore.SimulationOptions_includeSpecular(self)
@@ -16610,7 +16608,7 @@ class SimulationOptions(_object):
         """
         useAvgMaterials(SimulationOptions self) -> bool
 
-        bool SimulationOptions::useAvgMaterials() const 
+        bool SimulationOptions::useAvgMaterials() const
 
         """
         return _libBornAgainCore.SimulationOptions_useAvgMaterials(self)
@@ -16652,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
@@ -16661,7 +16659,7 @@ class GISASSimulation(Simulation):
         """
         clone(GISASSimulation self) -> GISASSimulation
 
-        GISASSimulation* GISASSimulation::clone() const 
+        GISASSimulation* GISASSimulation::clone() const
 
         """
         return _libBornAgainCore.GISASSimulation_clone(self)
@@ -17318,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):
         """
@@ -17329,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):
         """
@@ -17429,7 +17423,7 @@ class IHistogram(_object):
         """
         axesUnits(IHistogram self) -> std::string
 
-        std::string IHistogram::axesUnits() const 
+        std::string IHistogram::axesUnits() const
 
         """
         return _libBornAgainCore.IHistogram_axesUnits(self)
@@ -17483,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):
@@ -17590,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
@@ -17638,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):
@@ -17764,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
@@ -17776,135 +17766,6 @@ def Histogram2D_dynamicCast(pHistogram):
     """Histogram2D_dynamicCast(IHistogram pHistogram) -> Histogram2D"""
     return _libBornAgainCore.Histogram2D_dynamicCast(pHistogram)
 
-class HomogeneousMaterial(INamed):
-    """
-
-
-    An homogeneous material with a refractive index and (optionally) a magnetic field.
-
-    C++ includes: HomogeneousMaterial.h
-
-    """
-
-    __swig_setmethods__ = {}
-    for _s in [INamed]:
-        __swig_setmethods__.update(getattr(_s, '__swig_setmethods__', {}))
-    __setattr__ = lambda self, name, value: _swig_setattr(self, HomogeneousMaterial, name, value)
-    __swig_getmethods__ = {}
-    for _s in [INamed]:
-        __swig_getmethods__.update(getattr(_s, '__swig_getmethods__', {}))
-    __getattr__ = lambda self, name: _swig_getattr(self, HomogeneousMaterial, name)
-    __repr__ = _swig_repr
-
-    def __init__(self, *args):
-        """
-        __init__(HomogeneousMaterial self) -> HomogeneousMaterial
-        __init__(HomogeneousMaterial self, std::string const & name, complex_t const refractive_index, kvector_t magnetization) -> HomogeneousMaterial
-        __init__(HomogeneousMaterial self, std::string const & name, complex_t const refractive_index) -> HomogeneousMaterial
-        __init__(HomogeneousMaterial self, std::string const & name, double refractive_index_delta, double refractive_index_beta, kvector_t magnetization) -> HomogeneousMaterial
-        __init__(HomogeneousMaterial self, std::string const & name, double refractive_index_delta, double refractive_index_beta) -> HomogeneousMaterial
-
-        HomogeneousMaterial::HomogeneousMaterial(const std::string &name, double refractive_index_delta, double refractive_index_beta, kvector_t magnetization=kvector_t())
-
-        Constructs a material with  name and refractive_index parameters delta and beta (n = 1 - delta + i*beta). 
-
-        """
-        this = _libBornAgainCore.new_HomogeneousMaterial(*args)
-        try:
-            self.this.append(this)
-        except Exception:
-            self.this = this
-    __swig_destroy__ = _libBornAgainCore.delete_HomogeneousMaterial
-    __del__ = lambda self: None
-
-    def inverted(self):
-        """
-        inverted(HomogeneousMaterial self) -> HomogeneousMaterial
-
-        HomogeneousMaterial HomogeneousMaterial::inverted() const
-
-        Constructs a material with inverted magnetization. 
-
-        """
-        return _libBornAgainCore.HomogeneousMaterial_inverted(self)
-
-
-    def refractiveIndex(self, wavelength):
-        """
-        refractiveIndex(HomogeneousMaterial self, double wavelength) -> complex_t
-
-        complex_t HomogeneousMaterial::refractiveIndex() const 
-
-        """
-        return _libBornAgainCore.HomogeneousMaterial_refractiveIndex(self, wavelength)
-
-
-    def refractiveIndex2(self, wavelength):
-        """
-        refractiveIndex2(HomogeneousMaterial self, double wavelength) -> complex_t
-
-        complex_t HomogeneousMaterial::refractiveIndex2() const 
-
-        """
-        return _libBornAgainCore.HomogeneousMaterial_refractiveIndex2(self, wavelength)
-
-
-    def isScalarMaterial(self):
-        """
-        isScalarMaterial(HomogeneousMaterial self) -> bool
-
-        bool HomogeneousMaterial::isScalarMaterial() const
-
-        Indicates whether the interaction with the material is scalar. This means that different polarization states will be diffracted equally 
-
-        """
-        return _libBornAgainCore.HomogeneousMaterial_isScalarMaterial(self)
-
-
-    def isMagneticMaterial(self):
-        """
-        isMagneticMaterial(HomogeneousMaterial self) -> bool
-
-        bool HomogeneousMaterial::isMagneticMaterial() const 
-
-        """
-        return _libBornAgainCore.HomogeneousMaterial_isMagneticMaterial(self)
-
-
-    def magnetization(self):
-        """
-        magnetization(HomogeneousMaterial self) -> kvector_t
-
-        kvector_t HomogeneousMaterial::magnetization() const
-
-        Get the magnetization (in A/m) 
-
-        """
-        return _libBornAgainCore.HomogeneousMaterial_magnetization(self)
-
-
-    def materialData(self):
-        """materialData(HomogeneousMaterial self) -> complex_t"""
-        return _libBornAgainCore.HomogeneousMaterial_materialData(self)
-
-
-    def scalarSubtrSLD(self, wavevectors):
-        """scalarSubtrSLD(HomogeneousMaterial self, WavevectorInfo wavevectors) -> complex_t"""
-        return _libBornAgainCore.HomogeneousMaterial_scalarSubtrSLD(self, wavevectors)
-
-
-    def transformedMaterial(self, transform):
-        """
-        transformedMaterial(HomogeneousMaterial self, Transform3D const & transform) -> HomogeneousMaterial
-
-        HomogeneousMaterial HomogeneousMaterial::transformedMaterial(const Transform3D &transform) const 
-
-        """
-        return _libBornAgainCore.HomogeneousMaterial_transformedMaterial(self, transform)
-
-HomogeneousMaterial_swigregister = _libBornAgainCore.HomogeneousMaterial_swigregister
-HomogeneousMaterial_swigregister(HomogeneousMaterial)
-
 class IDetector2D(ICloneable, INode):
     """
 
@@ -17972,7 +17833,7 @@ class IDetector2D(ICloneable, INode):
         """
         getAxis(IDetector2D self, size_t index) -> IAxis
 
-        const IAxis & IDetector2D::getAxis(size_t index) const 
+        const IAxis & IDetector2D::getAxis(size_t index) const
 
         """
         return _libBornAgainCore.IDetector2D_getAxis(self, index)
@@ -17982,7 +17843,7 @@ class IDetector2D(ICloneable, INode):
         """
         getDimension(IDetector2D self) -> size_t
 
-        size_t IDetector2D::getDimension() const 
+        size_t IDetector2D::getDimension() const
 
         """
         return _libBornAgainCore.IDetector2D_getDimension(self)
@@ -18072,7 +17933,7 @@ class IDetector2D(ICloneable, INode):
         """
         detectorResolution(IDetector2D self) -> IDetectorResolution
 
-        const IDetectorResolution * IDetector2D::detectorResolution() const 
+        const IDetectorResolution * IDetector2D::detectorResolution() const
 
         """
         return _libBornAgainCore.IDetector2D_detectorResolution(self)
@@ -18091,17 +17952,36 @@ class IDetector2D(ICloneable, INode):
 
 
     def analyzerDirection(self):
-        """analyzerDirection(IDetector2D self) -> kvector_t"""
+        """
+        analyzerDirection(IDetector2D self) -> kvector_t
+
+        kvector_t IDetector2D::analyzerDirection() const
+
+        Get analyzer properties. 
+
+        """
         return _libBornAgainCore.IDetector2D_analyzerDirection(self)
 
 
     def analyzerEfficiency(self):
-        """analyzerEfficiency(IDetector2D self) -> double"""
+        """
+        analyzerEfficiency(IDetector2D self) -> double
+
+        double IDetector2D::analyzerEfficiency() const
+
+        will always return a positive number 
+
+        """
         return _libBornAgainCore.IDetector2D_analyzerEfficiency(self)
 
 
     def analyzerTotalTransmission(self):
-        """analyzerTotalTransmission(IDetector2D self) -> double"""
+        """
+        analyzerTotalTransmission(IDetector2D self) -> double
+
+        double IDetector2D::analyzerTotalTransmission() const
+
+        """
         return _libBornAgainCore.IDetector2D_analyzerTotalTransmission(self)
 
 
@@ -18155,7 +18035,7 @@ class IDetector2D(ICloneable, INode):
         """
         getDetectorMask(IDetector2D self) -> DetectorMask
 
-        const DetectorMask * IDetector2D::getDetectorMask() const 
+        const DetectorMask * IDetector2D::getDetectorMask() const
 
         """
         return _libBornAgainCore.IDetector2D_getDetectorMask(self)
@@ -18165,7 +18045,7 @@ class IDetector2D(ICloneable, INode):
         """
         numberOfMaskedChannels(IDetector2D self) -> size_t
 
-        size_t IDetector2D::numberOfMaskedChannels() const 
+        size_t IDetector2D::numberOfMaskedChannels() const
 
         """
         return _libBornAgainCore.IDetector2D_numberOfMaskedChannels(self)
@@ -18175,7 +18055,7 @@ class IDetector2D(ICloneable, INode):
         """
         isMasked(IDetector2D self, size_t index) -> bool
 
-        bool IDetector2D::isMasked(size_t index) const 
+        bool IDetector2D::isMasked(size_t index) const
 
         """
         return _libBornAgainCore.IDetector2D_isMasked(self, index)
@@ -18489,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()
@@ -18688,7 +18568,7 @@ class IAbstractParticle(ISample):
         """
         abundance(IAbstractParticle self) -> double
 
-        double IAbstractParticle::abundance() const 
+        double IAbstractParticle::abundance() const
 
         """
         return _libBornAgainCore.IAbstractParticle_abundance(self)
@@ -18776,7 +18656,7 @@ class IParameterReal(INamed, INoncopyable):
         """
         getData(IParameterReal self) -> double &
 
-        T& IParameter< T >::getData() const 
+        T& IParameter< T >::getData() const
 
         """
         return _libBornAgainCore.IParameterReal_getData(self)
@@ -18830,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
@@ -18951,7 +18831,7 @@ class IParticle(IAbstractParticle):
         """
         translate(IParticle self, kvector_t translation)
 
-        void IParticle::translate(kvector_t translation) overridefinal
+        void IParticle::translate(kvector_t translation) override final
 
         Translates the particle. 
 
@@ -19131,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
 
@@ -19266,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):
@@ -19309,7 +19185,7 @@ class RotationX(IRotation):
         """
         getAngle(RotationX self) -> double
 
-        double RotationX::getAngle() const 
+        double RotationX::getAngle() const
 
         """
         return _libBornAgainCore.RotationX_getAngle(self)
@@ -19362,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):
@@ -19405,7 +19281,7 @@ class RotationY(IRotation):
         """
         getAngle(RotationY self) -> double
 
-        double RotationY::getAngle() const 
+        double RotationY::getAngle() const
 
         """
         return _libBornAgainCore.RotationY_getAngle(self)
@@ -19459,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):
@@ -19502,7 +19378,7 @@ class RotationZ(IRotation):
         """
         getAngle(RotationZ self) -> double
 
-        double RotationZ::getAngle() const 
+        double RotationZ::getAngle() const
 
         """
         return _libBornAgainCore.RotationZ_getAngle(self)
@@ -19561,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):
@@ -19604,7 +19480,7 @@ class RotationEuler(IRotation):
         """
         getAlpha(RotationEuler self) -> double
 
-        double RotationEuler::getAlpha() const 
+        double RotationEuler::getAlpha() const
 
         """
         return _libBornAgainCore.RotationEuler_getAlpha(self)
@@ -19614,7 +19490,7 @@ class RotationEuler(IRotation):
         """
         getBeta(RotationEuler self) -> double
 
-        double RotationEuler::getBeta() const 
+        double RotationEuler::getBeta() const
 
         """
         return _libBornAgainCore.RotationEuler_getBeta(self)
@@ -19624,7 +19500,7 @@ class RotationEuler(IRotation):
         """
         getGamma(RotationEuler self) -> double
 
-        double RotationEuler::getGamma() const 
+        double RotationEuler::getGamma() const
 
         """
         return _libBornAgainCore.RotationEuler_getGamma(self)
@@ -19719,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
@@ -19728,7 +19604,7 @@ class SimpleSelectionRule(ISelectionRule):
         """
         clone(SimpleSelectionRule self) -> SimpleSelectionRule
 
-        SimpleSelectionRule * SimpleSelectionRule::clone() const 
+        SimpleSelectionRule * SimpleSelectionRule::clone() const
 
         """
         return _libBornAgainCore.SimpleSelectionRule_clone(self)
@@ -19738,7 +19614,7 @@ class SimpleSelectionRule(ISelectionRule):
         """
         coordinateSelected(SimpleSelectionRule self, ivector_t const & coordinate) -> bool
 
-        bool SimpleSelectionRule::coordinateSelected(const ivector_t &coordinate) const 
+        bool SimpleSelectionRule::coordinateSelected(const ivector_t &coordinate) const
 
         """
         return _libBornAgainCore.SimpleSelectionRule_coordinateSelected(self, coordinate)
@@ -19777,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
@@ -19799,7 +19675,7 @@ class Instrument(INode):
         getBeam(Instrument self) -> Beam
         getBeam(Instrument self) -> Beam
 
-        const Beam& Instrument::getBeam() const 
+        const Beam& Instrument::getBeam() const
 
         """
         return _libBornAgainCore.Instrument_getBeam(self, *args)
@@ -19878,7 +19754,7 @@ class Instrument(INode):
         """
         getDetectorMask(Instrument self) -> DetectorMask
 
-        const DetectorMask * Instrument::getDetectorMask() const 
+        const DetectorMask * Instrument::getDetectorMask() const
 
         """
         return _libBornAgainCore.Instrument_getDetectorMask(self)
@@ -20142,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):
         """
@@ -20184,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
@@ -20248,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
@@ -20299,7 +20167,7 @@ class InterferenceFunction1DLattice(IInterferenceFunction):
         """
         getLatticeParameters(InterferenceFunction1DLattice self) -> Lattice1DParameters
 
-        Lattice1DParameters InterferenceFunction1DLattice::getLatticeParameters() const 
+        Lattice1DParameters InterferenceFunction1DLattice::getLatticeParameters() const
 
         """
         return _libBornAgainCore.InterferenceFunction1DLattice_getLatticeParameters(self)
@@ -20373,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):
@@ -20452,7 +20320,7 @@ class InterferenceFunctionRadialParaCrystal(IInterferenceFunction):
         """
         domainSize(InterferenceFunctionRadialParaCrystal self) -> double
 
-        double InterferenceFunctionRadialParaCrystal::domainSize() const 
+        double InterferenceFunctionRadialParaCrystal::domainSize() const
 
         """
         return _libBornAgainCore.InterferenceFunctionRadialParaCrystal_domainSize(self)
@@ -20474,7 +20342,7 @@ class InterferenceFunctionRadialParaCrystal(IInterferenceFunction):
         """
         FTPDF(InterferenceFunctionRadialParaCrystal self, double qpar) -> complex_t
 
-        complex_t InterferenceFunctionRadialParaCrystal::FTPDF(double qpar) const 
+        complex_t InterferenceFunctionRadialParaCrystal::FTPDF(double qpar) const
 
         """
         return _libBornAgainCore.InterferenceFunctionRadialParaCrystal_FTPDF(self, qpar)
@@ -20502,7 +20370,7 @@ class InterferenceFunctionRadialParaCrystal(IInterferenceFunction):
         """
         peakDistance(InterferenceFunctionRadialParaCrystal self) -> double
 
-        double InterferenceFunctionRadialParaCrystal::peakDistance() const 
+        double InterferenceFunctionRadialParaCrystal::peakDistance() const
 
         """
         return _libBornAgainCore.InterferenceFunctionRadialParaCrystal_peakDistance(self)
@@ -20512,7 +20380,7 @@ class InterferenceFunctionRadialParaCrystal(IInterferenceFunction):
         """
         dampingLength(InterferenceFunctionRadialParaCrystal self) -> double
 
-        double InterferenceFunctionRadialParaCrystal::dampingLength() const 
+        double InterferenceFunctionRadialParaCrystal::dampingLength() const
 
         """
         return _libBornAgainCore.InterferenceFunctionRadialParaCrystal_dampingLength(self)
@@ -20583,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
@@ -20619,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):
         """
@@ -20630,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):
         """
@@ -20678,7 +20542,7 @@ class InterferenceFunction2DLattice(IInterferenceFunction):
         """
         integrationOverXi(InterferenceFunction2DLattice self) -> bool
 
-        bool InterferenceFunction2DLattice::integrationOverXi() const 
+        bool InterferenceFunction2DLattice::integrationOverXi() const
 
         """
         return _libBornAgainCore.InterferenceFunction2DLattice_integrationOverXi(self)
@@ -20688,7 +20552,7 @@ class InterferenceFunction2DLattice(IInterferenceFunction):
         """
         lattice(InterferenceFunction2DLattice self) -> Lattice2D
 
-        const Lattice2D & InterferenceFunction2DLattice::lattice() const 
+        const Lattice2D & InterferenceFunction2DLattice::lattice() const
 
         """
         return _libBornAgainCore.InterferenceFunction2DLattice_lattice(self)
@@ -20722,7 +20586,7 @@ class InterferenceFunction2DLattice(IInterferenceFunction):
         """
         onChange(InterferenceFunction2DLattice self)
 
-        void InterferenceFunction2DLattice::onChange() overridefinal
+        void InterferenceFunction2DLattice::onChange() override final
 
         Action to be taken in inherited class when a parameter has changed. 
 
@@ -20802,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
@@ -20840,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):
         """
@@ -20853,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):
         """
@@ -20933,7 +20793,7 @@ class InterferenceFunction2DParaCrystal(IInterferenceFunction):
         """
         domainSizes(InterferenceFunction2DParaCrystal self) -> vdouble1d_t
 
-        std::vector< double > InterferenceFunction2DParaCrystal::domainSizes() const 
+        std::vector< double > InterferenceFunction2DParaCrystal::domainSizes() const
 
         """
         return _libBornAgainCore.InterferenceFunction2DParaCrystal_domainSizes(self)
@@ -20961,7 +20821,7 @@ class InterferenceFunction2DParaCrystal(IInterferenceFunction):
         """
         integrationOverXi(InterferenceFunction2DParaCrystal self) -> bool
 
-        bool InterferenceFunction2DParaCrystal::integrationOverXi() const 
+        bool InterferenceFunction2DParaCrystal::integrationOverXi() const
 
         """
         return _libBornAgainCore.InterferenceFunction2DParaCrystal_integrationOverXi(self)
@@ -20971,7 +20831,7 @@ class InterferenceFunction2DParaCrystal(IInterferenceFunction):
         """
         dampingLength(InterferenceFunction2DParaCrystal self) -> double
 
-        double InterferenceFunction2DParaCrystal::dampingLength() const 
+        double InterferenceFunction2DParaCrystal::dampingLength() const
 
         """
         return _libBornAgainCore.InterferenceFunction2DParaCrystal_dampingLength(self)
@@ -20981,7 +20841,7 @@ class InterferenceFunction2DParaCrystal(IInterferenceFunction):
         """
         lattice(InterferenceFunction2DParaCrystal self) -> Lattice2D
 
-        const Lattice2D & InterferenceFunction2DParaCrystal::lattice() const 
+        const Lattice2D & InterferenceFunction2DParaCrystal::lattice() const
 
         """
         return _libBornAgainCore.InterferenceFunction2DParaCrystal_lattice(self)
@@ -21061,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):
@@ -21209,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):
@@ -21285,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
@@ -21374,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):
@@ -21434,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
@@ -21587,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):
         """
@@ -21657,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
@@ -21742,7 +21598,7 @@ class Lattice2D(ICloneable, INode):
         """
         rotationAngle(Lattice2D self) -> double
 
-        double Lattice2D::rotationAngle() const 
+        double Lattice2D::rotationAngle() const
 
         """
         return _libBornAgainCore.Lattice2D_rotationAngle(self)
@@ -21752,7 +21608,7 @@ class Lattice2D(ICloneable, INode):
         """
         reciprocalBases(Lattice2D self) -> Lattice2D::ReciprocalBases
 
-        Lattice2D::ReciprocalBases Lattice2D::reciprocalBases() const 
+        Lattice2D::ReciprocalBases Lattice2D::reciprocalBases() const
 
         """
         return _libBornAgainCore.Lattice2D_reciprocalBases(self)
@@ -21796,14 +21652,14 @@ 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):
         """
         clone(BasicLattice self) -> BasicLattice
 
-        BasicLattice * BasicLattice::clone() const 
+        BasicLattice * BasicLattice::clone() const
 
         """
         return _libBornAgainCore.BasicLattice_clone(self)
@@ -21825,7 +21681,7 @@ class BasicLattice(Lattice2D):
         """
         length1(BasicLattice self) -> double
 
-        virtual double BasicLattice::length1() const 
+        virtual double BasicLattice::length1() const
 
         """
         return _libBornAgainCore.BasicLattice_length1(self)
@@ -21835,7 +21691,7 @@ class BasicLattice(Lattice2D):
         """
         length2(BasicLattice self) -> double
 
-        virtual double BasicLattice::length2() const 
+        virtual double BasicLattice::length2() const
 
         """
         return _libBornAgainCore.BasicLattice_length2(self)
@@ -21845,7 +21701,7 @@ class BasicLattice(Lattice2D):
         """
         latticeAngle(BasicLattice self) -> double
 
-        virtual double BasicLattice::latticeAngle() const 
+        virtual double BasicLattice::latticeAngle() const
 
         """
         return _libBornAgainCore.BasicLattice_latticeAngle(self)
@@ -21855,7 +21711,7 @@ class BasicLattice(Lattice2D):
         """
         unitCellArea(BasicLattice self) -> double
 
-        double BasicLattice::unitCellArea() const 
+        double BasicLattice::unitCellArea() const
 
         """
         return _libBornAgainCore.BasicLattice_unitCellArea(self)
@@ -21889,14 +21745,14 @@ 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):
         """
         clone(SquareLattice self) -> SquareLattice
 
-        SquareLattice * SquareLattice::clone() const 
+        SquareLattice * SquareLattice::clone() const
 
         """
         return _libBornAgainCore.SquareLattice_clone(self)
@@ -21918,7 +21774,7 @@ class SquareLattice(Lattice2D):
         """
         length1(SquareLattice self) -> double
 
-        virtual double SquareLattice::length1() const 
+        virtual double SquareLattice::length1() const
 
         """
         return _libBornAgainCore.SquareLattice_length1(self)
@@ -21928,7 +21784,7 @@ class SquareLattice(Lattice2D):
         """
         length2(SquareLattice self) -> double
 
-        virtual double SquareLattice::length2() const 
+        virtual double SquareLattice::length2() const
 
         """
         return _libBornAgainCore.SquareLattice_length2(self)
@@ -21938,7 +21794,7 @@ class SquareLattice(Lattice2D):
         """
         latticeAngle(SquareLattice self) -> double
 
-        double SquareLattice::latticeAngle() const 
+        double SquareLattice::latticeAngle() const
 
         """
         return _libBornAgainCore.SquareLattice_latticeAngle(self)
@@ -21948,7 +21804,7 @@ class SquareLattice(Lattice2D):
         """
         unitCellArea(SquareLattice self) -> double
 
-        double SquareLattice::unitCellArea() const 
+        double SquareLattice::unitCellArea() const
 
         """
         return _libBornAgainCore.SquareLattice_unitCellArea(self)
@@ -21982,14 +21838,14 @@ 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):
         """
         clone(HexagonalLattice self) -> HexagonalLattice
 
-        HexagonalLattice * HexagonalLattice::clone() const 
+        HexagonalLattice * HexagonalLattice::clone() const
 
         """
         return _libBornAgainCore.HexagonalLattice_clone(self)
@@ -22011,7 +21867,7 @@ class HexagonalLattice(Lattice2D):
         """
         length1(HexagonalLattice self) -> double
 
-        virtual double HexagonalLattice::length1() const 
+        virtual double HexagonalLattice::length1() const
 
         """
         return _libBornAgainCore.HexagonalLattice_length1(self)
@@ -22021,7 +21877,7 @@ class HexagonalLattice(Lattice2D):
         """
         length2(HexagonalLattice self) -> double
 
-        virtual double HexagonalLattice::length2() const 
+        virtual double HexagonalLattice::length2() const
 
         """
         return _libBornAgainCore.HexagonalLattice_length2(self)
@@ -22031,7 +21887,7 @@ class HexagonalLattice(Lattice2D):
         """
         latticeAngle(HexagonalLattice self) -> double
 
-        double HexagonalLattice::latticeAngle() const 
+        double HexagonalLattice::latticeAngle() const
 
         """
         return _libBornAgainCore.HexagonalLattice_latticeAngle(self)
@@ -22041,7 +21897,7 @@ class HexagonalLattice(Lattice2D):
         """
         unitCellArea(HexagonalLattice self) -> double
 
-        double HexagonalLattice::unitCellArea() const 
+        double HexagonalLattice::unitCellArea() const
 
         """
         return _libBornAgainCore.HexagonalLattice_unitCellArea(self)
@@ -22077,10 +21933,10 @@ class Layer(ISample):
 
     def __init__(self, material, thickness=0):
         """
-        __init__(Layer self, HomogeneousMaterial material, double thickness=0) -> Layer
-        __init__(Layer self, HomogeneousMaterial material) -> Layer
+        __init__(Layer self, Material material, double thickness=0) -> Layer
+        __init__(Layer self, Material material) -> Layer
 
-        Layer::Layer(HomogeneousMaterial material, double thickness=0)
+        Layer::Layer(Material material, double thickness=0)
 
         Constructor of a layer with thickness and material
 
@@ -22097,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
@@ -22106,7 +21962,7 @@ class Layer(ISample):
         """
         clone(Layer self) -> Layer
 
-        Layer * Layer::clone() const overridefinal
+        Layer * Layer::clone() const override final
 
         Returns a clone of this  ISample object. 
 
@@ -22118,7 +21974,7 @@ class Layer(ISample):
         """
         cloneInvertB(Layer self) -> Layer
 
-        Layer * Layer::cloneInvertB() const 
+        Layer * Layer::cloneInvertB() const
 
         """
         return _libBornAgainCore.Layer_cloneInvertB(self)
@@ -22128,7 +21984,7 @@ class Layer(ISample):
         """
         accept(Layer self, INodeVisitor visitor)
 
-        void Layer::accept(INodeVisitor *visitor) const overridefinal
+        void Layer::accept(INodeVisitor *visitor) const override final
 
         Calls the  INodeVisitor's visit method. 
 
@@ -22152,7 +22008,7 @@ class Layer(ISample):
         """
         thickness(Layer self) -> double
 
-        double Layer::thickness() const 
+        double Layer::thickness() const
 
         """
         return _libBornAgainCore.Layer_thickness(self)
@@ -22160,9 +22016,9 @@ class Layer(ISample):
 
     def material(self):
         """
-        material(Layer self) -> HomogeneousMaterial
+        material(Layer self) -> Material
 
-        const HomogeneousMaterial* Layer::material() const overridefinal
+        const Material* Layer::material() const override final
 
         Returns nullptr, unless overwritten to return a specific material. 
 
@@ -22172,9 +22028,9 @@ class Layer(ISample):
 
     def setMaterial(self, material):
         """
-        setMaterial(Layer self, HomogeneousMaterial material)
+        setMaterial(Layer self, Material material)
 
-        void Layer::setMaterial(HomogeneousMaterial material)
+        void Layer::setMaterial(Material material)
 
         """
         return _libBornAgainCore.Layer_setMaterial(self, material)
@@ -22194,7 +22050,7 @@ class Layer(ISample):
         """
         numberOfLayouts(Layer self) -> size_t
 
-        size_t Layer::numberOfLayouts() const 
+        size_t Layer::numberOfLayouts() const
 
         """
         return _libBornAgainCore.Layer_numberOfLayouts(self)
@@ -22204,7 +22060,7 @@ class Layer(ISample):
         """
         layouts(Layer self) -> std::vector< ILayout const *,std::allocator< ILayout const * > >
 
-        std::vector< const ILayout * > Layer::layouts() const 
+        std::vector< const ILayout * > Layer::layouts() const
 
         """
         return _libBornAgainCore.Layer_layouts(self)
@@ -22214,7 +22070,7 @@ class Layer(ISample):
         """
         getChildren(Layer self) -> swig_dummy_type_const_inode_vector
 
-        std::vector< const INode * > Layer::getChildren() const overridefinal
+        std::vector< const INode * > Layer::getChildren() const override final
 
         Returns a vector of children (const). 
 
@@ -22247,7 +22103,7 @@ class Layer(ISample):
         """
         numberOfSlices(Layer self) -> unsigned int
 
-        unsigned int Layer::numberOfSlices() const 
+        unsigned int Layer::numberOfSlices() const
 
         """
         return _libBornAgainCore.Layer_numberOfSlices(self)
@@ -22257,7 +22113,7 @@ class Layer(ISample):
         """
         slice(Layer self, ZLimits limits, Layer::ELayerType layer_type) -> SafePointerVector< Layer >
 
-        SafePointerVector< Layer > Layer::slice(ZLimits limits, ELayerType layer_type) const 
+        SafePointerVector< Layer > Layer::slice(ZLimits limits, ELayerType layer_type) const
 
         """
         return _libBornAgainCore.Layer_slice(self, limits, layer_type)
@@ -22337,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):
@@ -22498,14 +22354,14 @@ 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):
         """
         clone(Line self) -> Line
 
-        Line* Line::clone() const 
+        Line* Line::clone() const
 
         """
         return _libBornAgainCore.Line_clone(self)
@@ -22564,14 +22420,14 @@ class VerticalLine(IShape2D):
         this = _libBornAgainCore.new_VerticalLine(x)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
         """
         clone(VerticalLine self) -> VerticalLine
 
-        VerticalLine* VerticalLine::clone() const 
+        VerticalLine* VerticalLine::clone() const
 
         """
         return _libBornAgainCore.VerticalLine_clone(self)
@@ -22594,7 +22450,7 @@ class VerticalLine(IShape2D):
         """
         getXpos(VerticalLine self) -> double
 
-        double VerticalLine::getXpos() const 
+        double VerticalLine::getXpos() const
 
         """
         return _libBornAgainCore.VerticalLine_getXpos(self)
@@ -22640,14 +22496,14 @@ class HorizontalLine(IShape2D):
         this = _libBornAgainCore.new_HorizontalLine(y)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
         """
         clone(HorizontalLine self) -> HorizontalLine
 
-        HorizontalLine* HorizontalLine::clone() const 
+        HorizontalLine* HorizontalLine::clone() const
 
         """
         return _libBornAgainCore.HorizontalLine_clone(self)
@@ -22670,7 +22526,7 @@ class HorizontalLine(IShape2D):
         """
         getYpos(HorizontalLine self) -> double
 
-        double HorizontalLine::getYpos() const 
+        double HorizontalLine::getYpos() const
 
         """
         return _libBornAgainCore.HorizontalLine_getYpos(self)
@@ -22680,6 +22536,234 @@ class HorizontalLine(IShape2D):
 HorizontalLine_swigregister = _libBornAgainCore.HorizontalLine_swigregister
 HorizontalLine_swigregister(HorizontalLine)
 
+class Material(_object):
+    """
+
+
+    A wrapper for underlying material implementation
+
+    C++ includes: Material.h
+
+    """
+
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, Material, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, Material, name)
+    __repr__ = _swig_repr
+
+    def __init__(self, *args):
+        """
+        __init__(Material self, Material material) -> Material
+        __init__(Material self, Material material) -> Material
+
+        Material::Material(std::unique_ptr< BaseMaterialImpl > material_impl)
+
+        Creates material with particular material implementation. 
+
+        """
+        this = _libBornAgainCore.new_Material(*args)
+        try:
+            self.this.append(this)
+        except __builtin__.Exception:
+            self.this = this
+
+    def inverted(self):
+        """
+        inverted(Material self) -> Material
+
+        Material Material::inverted() const
+
+        Constructs a material with inverted magnetization. 
+
+        """
+        return _libBornAgainCore.Material_inverted(self)
+
+
+    def refractiveIndex(self, wavelength):
+        """
+        refractiveIndex(Material self, double wavelength) -> complex_t
+
+        complex_t Material::refractiveIndex(double wavelength) const
+
+        Returns refractive index. 
+
+        """
+        return _libBornAgainCore.Material_refractiveIndex(self, wavelength)
+
+
+    def refractiveIndex2(self, wavelength):
+        """
+        refractiveIndex2(Material self, double wavelength) -> complex_t
+
+        complex_t Material::refractiveIndex2(double wavelength) const
+
+        Returns squared refractive index. 
+
+        """
+        return _libBornAgainCore.Material_refractiveIndex2(self, wavelength)
+
+
+    def isScalarMaterial(self):
+        """
+        isScalarMaterial(Material self) -> bool
+
+        bool Material::isScalarMaterial() const
+
+        Indicates whether the interaction with the material is scalar. This means that different polarization states will be diffracted equally 
+
+        """
+        return _libBornAgainCore.Material_isScalarMaterial(self)
+
+
+    def isMagneticMaterial(self):
+        """
+        isMagneticMaterial(Material self) -> bool
+
+        bool Material::isMagneticMaterial() const
+
+        """
+        return _libBornAgainCore.Material_isMagneticMaterial(self)
+
+
+    def getName(self):
+        """
+        getName(Material self) -> std::string
+
+        std::string Material::getName() const
+
+        Returns the name of material. 
+
+        """
+        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
+
+        kvector_t Material::magnetization() const
+
+        Get the magnetization (in A/m) 
+
+        """
+        return _libBornAgainCore.Material_magnetization(self)
+
+
+    def materialData(self):
+        """
+        materialData(Material self) -> complex_t
+
+        complex_t Material::materialData() const
+
+        Returns underlying material data. 
+
+        """
+        return _libBornAgainCore.Material_materialData(self)
+
+
+    def isEmpty(self):
+        """
+        isEmpty(Material self) -> bool
+
+        bool Material::isEmpty() const
+
+        Returns true if material underlying data is nullptr. 
+
+        """
+        return _libBornAgainCore.Material_isEmpty(self)
+
+
+    def scalarSubtrSLD(self, wavevectors):
+        """
+        scalarSubtrSLD(Material self, WavevectorInfo wavevectors) -> complex_t
+
+        complex_t Material::scalarSubtrSLD(const WavevectorInfo &wavevectors) const
+
+        Returns (  $ \\pi/\\lambda^2 $ - sld), sld (in  $nm^{-2}$) being the scattering length density. 
+
+        """
+        return _libBornAgainCore.Material_scalarSubtrSLD(self, wavevectors)
+
+
+    def transformedMaterial(self, transform):
+        """
+        transformedMaterial(Material self, Transform3D const & transform) -> Material
+
+        Material Material::transformedMaterial(const Transform3D &transform) const
+
+        """
+        return _libBornAgainCore.Material_transformedMaterial(self, transform)
+
+    __swig_destroy__ = _libBornAgainCore.delete_Material
+    __del__ = lambda self: None
+Material_swigregister = _libBornAgainCore.Material_swigregister
+Material_swigregister(Material)
+
+
+def HomogeneousMaterial(*args):
+    """
+    HomogeneousMaterial(std::string const & name, complex_t refractive_index, kvector_t magnetization) -> Material
+    HomogeneousMaterial(std::string const & name, complex_t refractive_index) -> Material
+    HomogeneousMaterial(std::string const & name, double delta, double beta, kvector_t magnetization) -> Material
+    HomogeneousMaterial(std::string const & name, double delta, double beta) -> Material
+    HomogeneousMaterial() -> Material
+
+    BA_CORE_API_ Material HomogeneousMaterial()
+
+    Constructs vacuum material based on refractive coefficients. Though in practice there is no difference between vacuum materials produced with  MaterialBySLD() and  HomogeneousMaterial(), they are not equal because of the difference in the type of underlying data 
+
+    """
+    return _libBornAgainCore.HomogeneousMaterial(*args)
+
+def MaterialByAbsCX(*args):
+    """
+    MaterialByAbsCX(std::string const & name, double sld, double abs_cx, kvector_t magnetization) -> Material
+    MaterialByAbsCX(std::string const & name, double sld, double abs_cx) -> Material
+
+    BA_CORE_API_ Material MaterialByAbsCX(const std::string &name, double sld, double abs_cx, kvector_t magnetization=kvector_t())
+
+    Constructs a wavelength-independent material with given sld and absorptive term As opposed to MaterialBySLD, absorptive term is the product of number density and absorptive cross-section  $ \\sigma_0 $ at  $ \\lambda = 1.798197$ Angstroms. The latter corresponds to 2200 m/s neutrons.
+
+    Parameters:
+    -----------
+
+    sld: 
+    scattering length density,  $ nm^{-2} $
+
+    abs_cx: 
+    absorptive term at  $ \\lambda = 1.798197$ Angstroms,  $ nm^{-1} $
+
+    magnetization: 
+    magnetization (in A/m) 
+
+    """
+    return _libBornAgainCore.MaterialByAbsCX(*args)
+
+def MaterialBySLD(*args):
+    """
+    MaterialBySLD(std::string const & name, double sld, double abs_term, kvector_t magnetization) -> Material
+    MaterialBySLD(std::string const & name, double sld, double abs_term) -> Material
+    MaterialBySLD() -> Material
+
+    BA_CORE_API_ Material MaterialBySLD()
+
+    Constructs wavelength-independent vacuum material. Though in practice there is no difference between vacuum materials produced with  MaterialBySLD() and  HomogeneousMaterial(), they are not equal because of the difference in the type of underlying data 
+
+    """
+    return _libBornAgainCore.MaterialBySLD(*args)
 class MesoCrystal(IParticle):
     """
 
@@ -22710,7 +22794,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
@@ -22719,7 +22803,7 @@ class MesoCrystal(IParticle):
         """
         clone(MesoCrystal self) -> MesoCrystal
 
-        MesoCrystal * MesoCrystal::clone() const overridefinal
+        MesoCrystal * MesoCrystal::clone() const override final
 
         Returns a clone of this  ISample object. 
 
@@ -22731,7 +22815,7 @@ class MesoCrystal(IParticle):
         """
         accept(MesoCrystal self, INodeVisitor visitor)
 
-        void MesoCrystal::accept(INodeVisitor *visitor) const overridefinal
+        void MesoCrystal::accept(INodeVisitor *visitor) const override final
 
         Calls the  INodeVisitor's visit method. 
 
@@ -22743,7 +22827,7 @@ class MesoCrystal(IParticle):
         """
         createSlicedParticle(MesoCrystal self, ZLimits limits) -> SlicedParticle
 
-        SlicedParticle MesoCrystal::createSlicedParticle(ZLimits limits) const overridefinal
+        SlicedParticle MesoCrystal::createSlicedParticle(ZLimits limits) const override final
 
         Create a sliced form factor for this particle. 
 
@@ -22755,7 +22839,7 @@ class MesoCrystal(IParticle):
         """
         getChildren(MesoCrystal self) -> swig_dummy_type_const_inode_vector
 
-        std::vector< const INode * > MesoCrystal::getChildren() const overridefinal
+        std::vector< const INode * > MesoCrystal::getChildren() const override final
 
         Returns a vector of children (const). 
 
@@ -22797,7 +22881,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
@@ -22806,7 +22890,7 @@ class MultiLayer(ISample):
         """
         accept(MultiLayer self, INodeVisitor visitor)
 
-        virtual void MultiLayer::accept(INodeVisitor *visitor) const finaloverride
+        virtual void MultiLayer::accept(INodeVisitor *visitor) const final override
 
         Calls the  INodeVisitor's visit method. 
 
@@ -22818,7 +22902,7 @@ class MultiLayer(ISample):
         """
         numberOfLayers(MultiLayer self) -> size_t
 
-        size_t MultiLayer::numberOfLayers() const 
+        size_t MultiLayer::numberOfLayers() const
 
         """
         return _libBornAgainCore.MultiLayer_numberOfLayers(self)
@@ -22828,7 +22912,7 @@ class MultiLayer(ISample):
         """
         numberOfInterfaces(MultiLayer self) -> size_t
 
-        size_t MultiLayer::numberOfInterfaces() const 
+        size_t MultiLayer::numberOfInterfaces() const
 
         """
         return _libBornAgainCore.MultiLayer_numberOfInterfaces(self)
@@ -22950,9 +23034,9 @@ class MultiLayer(ISample):
 
     def layerMaterial(self, i_layer):
         """
-        layerMaterial(MultiLayer self, size_t i_layer) -> HomogeneousMaterial
+        layerMaterial(MultiLayer self, size_t i_layer) -> Material
 
-        HomogeneousMaterial MultiLayer::layerMaterial(size_t i_layer) const
+        Material MultiLayer::layerMaterial(size_t i_layer) const
 
         Returns layer material. 
 
@@ -22962,9 +23046,9 @@ class MultiLayer(ISample):
 
     def setLayerMaterial(self, i_layer, material):
         """
-        setLayerMaterial(MultiLayer self, size_t i_layer, HomogeneousMaterial material)
+        setLayerMaterial(MultiLayer self, size_t i_layer, Material material)
 
-        void MultiLayer::setLayerMaterial(size_t i_layer, HomogeneousMaterial material)
+        void MultiLayer::setLayerMaterial(size_t i_layer, Material material)
 
         Changes a layer's material. 
 
@@ -22976,7 +23060,7 @@ class MultiLayer(ISample):
         """
         clone(MultiLayer self) -> MultiLayer
 
-        MultiLayer * MultiLayer::clone() const finaloverride
+        MultiLayer * MultiLayer::clone() const final override
 
         Returns a clone of multilayer with clones of all layers and recreated interfaces between layers 
 
@@ -23122,7 +23206,7 @@ class MultiLayer(ISample):
         """
         containsMagneticMaterial(MultiLayer self) -> bool
 
-        bool MultiLayer::containsMagneticMaterial() const 
+        bool MultiLayer::containsMagneticMaterial() const
 
         """
         return _libBornAgainCore.MultiLayer_containsMagneticMaterial(self)
@@ -23144,7 +23228,7 @@ class MultiLayer(ISample):
         """
         hasRoughness(MultiLayer self) -> bool
 
-        bool MultiLayer::hasRoughness() const 
+        bool MultiLayer::hasRoughness() const
 
         """
         return _libBornAgainCore.MultiLayer_hasRoughness(self)
@@ -23154,7 +23238,7 @@ class MultiLayer(ISample):
         """
         totalNofLayouts(MultiLayer self) -> size_t
 
-        size_t MultiLayer::totalNofLayouts() const 
+        size_t MultiLayer::totalNofLayouts() const
 
         """
         return _libBornAgainCore.MultiLayer_totalNofLayouts(self)
@@ -23164,7 +23248,7 @@ class MultiLayer(ISample):
         """
         getChildren(MultiLayer self) -> swig_dummy_type_const_inode_vector
 
-        std::vector< const INode * > MultiLayer::getChildren() const finaloverride
+        std::vector< const INode * > MultiLayer::getChildren() const final override
 
         Returns a vector of children (const). 
 
@@ -23206,7 +23290,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
@@ -23215,7 +23299,7 @@ class OffSpecSimulation(Simulation):
         """
         clone(OffSpecSimulation self) -> OffSpecSimulation
 
-        OffSpecSimulation* OffSpecSimulation::clone() const 
+        OffSpecSimulation* OffSpecSimulation::clone() const
 
         """
         return _libBornAgainCore.OffSpecSimulation_clone(self)
@@ -23334,7 +23418,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
@@ -23343,7 +23427,7 @@ class IntensityData(_object):
         """
         clone(IntensityData self) -> IntensityData
 
-        OutputData< T > * OutputData< T >::clone() const 
+        OutputData< T > * OutputData< T >::clone() const
 
         """
         return _libBornAgainCore.IntensityData_clone(self)
@@ -23363,7 +23447,7 @@ class IntensityData(_object):
         """
         meanValues(IntensityData self) -> IntensityData
 
-        OutputData< double > * OutputData< T >::meanValues() const 
+        OutputData< double > * OutputData< T >::meanValues() const
 
         """
         return _libBornAgainCore.IntensityData_meanValues(self)
@@ -23725,9 +23809,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):
@@ -23817,7 +23902,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
@@ -23907,7 +23992,7 @@ class ParameterDistribution(IParameterized):
         """
         getLimits(ParameterDistribution self) -> RealLimits
 
-        RealLimits ParameterDistribution::getLimits() const 
+        RealLimits ParameterDistribution::getLimits() const
 
         """
         return _libBornAgainCore.ParameterDistribution_getLimits(self)
@@ -23917,7 +24002,7 @@ class ParameterDistribution(IParameterized):
         """
         getMinValue(ParameterDistribution self) -> double
 
-        double ParameterDistribution::getMinValue() const 
+        double ParameterDistribution::getMinValue() const
 
         """
         return _libBornAgainCore.ParameterDistribution_getMinValue(self)
@@ -23927,7 +24012,7 @@ class ParameterDistribution(IParameterized):
         """
         getMaxValue(ParameterDistribution self) -> double
 
-        double ParameterDistribution::getMaxValue() const 
+        double ParameterDistribution::getMaxValue() const
 
         """
         return _libBornAgainCore.ParameterDistribution_getMaxValue(self)
@@ -23967,7 +24052,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
@@ -24123,7 +24208,7 @@ class ParameterPool(ICloneable):
         """
         parameterNames(ParameterPool self) -> vector_string_t
 
-        std::vector< std::string > ParameterPool::parameterNames() const 
+        std::vector< std::string > ParameterPool::parameterNames() const
 
         """
         return _libBornAgainCore.ParameterPool_parameterNames(self)
@@ -24180,7 +24265,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
@@ -24354,7 +24439,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):
@@ -24430,24 +24515,24 @@ class Particle(IParticle):
     def __init__(self, *args):
         """
         __init__(Particle self) -> Particle
-        __init__(Particle self, HomogeneousMaterial material) -> Particle
-        __init__(Particle self, HomogeneousMaterial material, IFormFactor form_factor) -> Particle
-        __init__(Particle self, HomogeneousMaterial material, IFormFactor form_factor, IRotation rotation) -> Particle
+        __init__(Particle self, Material material) -> Particle
+        __init__(Particle self, Material material, IFormFactor form_factor) -> Particle
+        __init__(Particle self, Material material, IFormFactor form_factor, IRotation rotation) -> Particle
 
-        Particle::Particle(HomogeneousMaterial material, const IFormFactor &form_factor, const IRotation &rotation)
+        Particle::Particle(Material material, const IFormFactor &form_factor, const IRotation &rotation)
 
         """
         this = _libBornAgainCore.new_Particle(*args)
         try:
             self.this.append(this)
-        except Exception:
+        except __builtin__.Exception:
             self.this = this
 
     def clone(self):
         """
         clone(Particle self) -> Particle
 
-        Particle * Particle::clone() const overridefinal
+        Particle * Particle::clone() const override final
 
         Returns a clone of this  ISample object. 
 
@@ -24459,7 +24544,7 @@ class Particle(IParticle):
         """
         accept(Particle self, INodeVisitor visitor)
 
-        void Particle::accept(INodeVisitor *visitor) const overridefinal
+        void Particle::accept(INodeVisitor *visitor) const override final
 
         Calls the  INodeVisitor's visit method. 
 
@@ -24471,7 +24556,7 @@ class Particle(IParticle):
         """
         createSlicedParticle(Particle self, ZLimits limits) -> SlicedParticle
 
-        SlicedParticle Particle::createSlicedParticle(ZLimits limits) const overridefinal
+        SlicedParticle Particle::createSlicedParticle(ZLimits limits) const override final
 
         Create a sliced form factor for this particle. 
 
@@ -24481,9 +24566,9 @@ class Particle(IParticle):
 
     def setMaterial(self, material):
         """
-        setMaterial(Particle self, HomogeneousMaterial material)
+        setMaterial(Particle self, Material material)
 
-        void Particle::setMaterial(HomogeneousMaterial material)
+        void Particle::setMaterial(Material material)
 
         """
         return _libBornAgainCore.Particle_setMaterial(self, material)
@@ -24491,9 +24576,9 @@ class Particle(IParticle):
 
     def material(self):
         """
-        material(Particle self) -> HomogeneousMaterial
+        material(Particle self) -> Material
 
-        const HomogeneousMaterial* Particle::material() const overridefinal
+        const Material* Particle::material() const override final
 
         Returns nullptr, unless overwritten to return a specific material. 
 
@@ -24515,7 +24600,7 @@ class Particle(IParticle):
         """
         getChildren(Particle self) -> swig_dummy_type_const_inode_vector
 
-        std::vector< const INode * > Particle::getChildren() const overridefinal
+        std::vector< const INode * > Particle::getChildren() const override final
 
         Returns a vector of children (const). 
 
@@ -24558,7 +24643,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
@@ -24567,7 +24652,7 @@ class ParticleComposition(IParticle):
         """
         clone(ParticleComposition self) -> ParticleComposition
 
-        ParticleComposition * ParticleComposition::clone() const overridefinal
+        ParticleComposition * ParticleComposition::clone() const override final
 
         Returns a clone of this  ISample object. 
 
@@ -24579,7 +24664,7 @@ class ParticleComposition(IParticle):
         """
         accept(ParticleComposition self, INodeVisitor visitor)
 
-        void ParticleComposition::accept(INodeVisitor *visitor) const overridefinal
+        void ParticleComposition::accept(INodeVisitor *visitor) const override final
 
         Calls the  INodeVisitor's visit method. 
 
@@ -24591,7 +24676,7 @@ class ParticleComposition(IParticle):
         """
         createFormFactor(ParticleComposition self) -> IFormFactor
 
-        IFormFactor * ParticleComposition::createFormFactor() const overridefinal
+        IFormFactor * ParticleComposition::createFormFactor() const override final
 
         Create a form factor for this particle. 
 
@@ -24636,7 +24721,7 @@ class ParticleComposition(IParticle):
         """
         getChildren(ParticleComposition self) -> swig_dummy_type_const_inode_vector
 
-        std::vector< const INode * > ParticleComposition::getChildren() const overridefinal
+        std::vector< const INode * > ParticleComposition::getChildren() const override final
 
         Returns a vector of children (const). 
 
@@ -24648,7 +24733,7 @@ class ParticleComposition(IParticle):
         """
         decompose(ParticleComposition self) -> SafePointerVector< IParticle >
 
-        SafePointerVector< IParticle > ParticleComposition::decompose() const overridefinal
+        SafePointerVector< IParticle > ParticleComposition::decompose() const override final
 
         Decompose in constituent  IParticle objects. 
 
@@ -24660,7 +24745,7 @@ class ParticleComposition(IParticle):
         """
         bottomTopZ(ParticleComposition self) -> ParticleLimits
 
-        ParticleLimits ParticleComposition::bottomTopZ() const overridefinal
+        ParticleLimits ParticleComposition::bottomTopZ() const override final
 
         Top and bottom z-coordinate. 
 
@@ -24701,7 +24786,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
@@ -24710,7 +24795,7 @@ class ParticleCoreShell(IParticle):
         """
         clone(ParticleCoreShell self) -> ParticleCoreShell
 
-        ParticleCoreShell * ParticleCoreShell::clone() const overridefinal
+        ParticleCoreShell * ParticleCoreShell::clone() const override final
 
         Returns a clone of this  ISample object. 
 
@@ -24722,7 +24807,7 @@ class ParticleCoreShell(IParticle):
         """
         accept(ParticleCoreShell self, INodeVisitor visitor)
 
-        void ParticleCoreShell::accept(INodeVisitor *visitor) const overridefinal
+        void ParticleCoreShell::accept(INodeVisitor *visitor) const override final
 
         Calls the  INodeVisitor's visit method. 
 
@@ -24734,7 +24819,7 @@ class ParticleCoreShell(IParticle):
         """
         createSlicedParticle(ParticleCoreShell self, ZLimits limits) -> SlicedParticle
 
-        SlicedParticle ParticleCoreShell::createSlicedParticle(ZLimits limits) const overridefinal
+        SlicedParticle ParticleCoreShell::createSlicedParticle(ZLimits limits) const override final
 
         Create a sliced form factor for this particle. 
 
@@ -24746,7 +24831,7 @@ class ParticleCoreShell(IParticle):
         """
         coreParticle(ParticleCoreShell self) -> Particle
 
-        const Particle * ParticleCoreShell::coreParticle() const 
+        const Particle * ParticleCoreShell::coreParticle() const
 
         """
         return _libBornAgainCore.ParticleCoreShell_coreParticle(self)
@@ -24756,7 +24841,7 @@ class ParticleCoreShell(IParticle):
         """
         shellParticle(ParticleCoreShell self) -> Particle
 
-        const Particle * ParticleCoreShell::shellParticle() const 
+        const Particle * ParticleCoreShell::shellParticle() const
 
         """
         return _libBornAgainCore.ParticleCoreShell_shellParticle(self)
@@ -24766,7 +24851,7 @@ class ParticleCoreShell(IParticle):
         """
         getChildren(ParticleCoreShell self) -> swig_dummy_type_const_inode_vector
 
-        std::vector< const INode * > ParticleCoreShell::getChildren() const overridefinal
+        std::vector< const INode * > ParticleCoreShell::getChildren() const override final
 
         Returns a vector of children (const). 
 
@@ -24806,14 +24891,14 @@ 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):
         """
         clone(ParticleDistribution self) -> ParticleDistribution
 
-        ParticleDistribution * ParticleDistribution::clone() const finaloverride
+        ParticleDistribution * ParticleDistribution::clone() const final override
 
         Returns a clone of this  ISample object. 
 
@@ -24825,7 +24910,7 @@ class ParticleDistribution(IAbstractParticle):
         """
         accept(ParticleDistribution self, INodeVisitor visitor)
 
-        void ParticleDistribution::accept(INodeVisitor *visitor) const finaloverride
+        void ParticleDistribution::accept(INodeVisitor *visitor) const final override
 
         Calls the  INodeVisitor's visit method. 
 
@@ -24837,7 +24922,7 @@ class ParticleDistribution(IAbstractParticle):
         """
         translate(ParticleDistribution self, kvector_t translation)
 
-        void ParticleDistribution::translate(kvector_t translation) finaloverride
+        void ParticleDistribution::translate(kvector_t translation) final override
 
         Translates the particle with the given vector. 
 
@@ -24887,7 +24972,7 @@ class ParticleDistribution(IAbstractParticle):
         """
         getChildren(ParticleDistribution self) -> swig_dummy_type_const_inode_vector
 
-        std::vector< const INode * > ParticleDistribution::getChildren() const finaloverride
+        std::vector< const INode * > ParticleDistribution::getChildren() const final override
 
         Returns a vector of children (const). 
 
@@ -24931,7 +25016,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
@@ -24940,7 +25025,7 @@ class ParticleLayout(ILayout):
         """
         clone(ParticleLayout self) -> ParticleLayout
 
-        ParticleLayout * ParticleLayout::clone() const finaloverride
+        ParticleLayout * ParticleLayout::clone() const final override
 
         Returns a clone of this  ISample object. 
 
@@ -24952,7 +25037,7 @@ class ParticleLayout(ILayout):
         """
         cloneWithOffset(ParticleLayout self, double offset) -> ParticleLayout
 
-        ParticleLayout * ParticleLayout::cloneWithOffset(double offset) const finaloverride
+        ParticleLayout * ParticleLayout::cloneWithOffset(double offset) const final override
 
         """
         return _libBornAgainCore.ParticleLayout_cloneWithOffset(self, offset)
@@ -24962,7 +25047,7 @@ class ParticleLayout(ILayout):
         """
         accept(ParticleLayout self, INodeVisitor visitor)
 
-        void ParticleLayout::accept(INodeVisitor *visitor) const finaloverride
+        void ParticleLayout::accept(INodeVisitor *visitor) const final override
 
         Calls the  INodeVisitor's visit method. 
 
@@ -25004,7 +25089,7 @@ class ParticleLayout(ILayout):
         """
         particles(ParticleLayout self) -> SafePointerVector< IParticle const >
 
-        SafePointerVector< const IParticle > ParticleLayout::particles() const finaloverride
+        SafePointerVector< const IParticle > ParticleLayout::particles() const final override
 
         Returns information on all particles (type and abundance) and generates new particles if an  IAbstractParticle denotes a collection 
 
@@ -25016,7 +25101,7 @@ class ParticleLayout(ILayout):
         """
         getTotalAbundance(ParticleLayout self) -> double
 
-        double ParticleLayout::getTotalAbundance() const finaloverride
+        double ParticleLayout::getTotalAbundance() const final override
 
         Get total abundance of all particles. 
 
@@ -25040,7 +25125,7 @@ class ParticleLayout(ILayout):
         """
         totalParticleSurfaceDensity(ParticleLayout self) -> double
 
-        double ParticleLayout::totalParticleSurfaceDensity() const finaloverride
+        double ParticleLayout::totalParticleSurfaceDensity() const final override
 
         Returns surface density of all particles. 
 
@@ -25052,7 +25137,7 @@ class ParticleLayout(ILayout):
         """
         setTotalParticleSurfaceDensity(ParticleLayout self, double particle_density)
 
-        void ParticleLayout::setTotalParticleSurfaceDensity(double particle_density) finaloverride
+        void ParticleLayout::setTotalParticleSurfaceDensity(double particle_density) final override
 
         Sets total particle surface density.  particle_density: number of particles per square nanometer 
 
@@ -25064,7 +25149,7 @@ class ParticleLayout(ILayout):
         """
         getChildren(ParticleLayout self) -> swig_dummy_type_const_inode_vector
 
-        std::vector< const INode * > ParticleLayout::getChildren() const finaloverride
+        std::vector< const INode * > ParticleLayout::getChildren() const final override
 
         Returns a vector of children (const). 
 
@@ -25106,7 +25191,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
@@ -25115,7 +25200,7 @@ class Polygon(IShape2D):
         """
         clone(Polygon self) -> Polygon
 
-        virtual Polygon* Polygon::clone() const 
+        virtual Polygon* Polygon::clone() const
 
         """
         return _libBornAgainCore.Polygon_clone(self)
@@ -25138,7 +25223,7 @@ class Polygon(IShape2D):
         """
         getArea(Polygon self) -> double
 
-        double Polygon::getArea() const 
+        double Polygon::getArea() const
 
         """
         return _libBornAgainCore.Polygon_getArea(self)
@@ -25148,7 +25233,7 @@ class Polygon(IShape2D):
         """
         getPoints(Polygon self, vdouble1d_t xpos, vdouble1d_t ypos)
 
-        void Polygon::getPoints(std::vector< double > &xpos, std::vector< double > &ypos) const 
+        void Polygon::getPoints(std::vector< double > &xpos, std::vector< double > &ypos) const
 
         """
         return _libBornAgainCore.Polygon_getPoints(self, xpos, ypos)
@@ -25190,7 +25275,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):
@@ -25198,7 +25283,7 @@ class RealParameter(IParameterReal):
         clone(RealParameter self, std::string const & new_name) -> RealParameter
         clone(RealParameter self) -> RealParameter
 
-        RealParameter * RealParameter::clone(const std::string &new_name="") const 
+        RealParameter * RealParameter::clone(const std::string &new_name="") const
 
         """
         return _libBornAgainCore.RealParameter_clone(self, *args)
@@ -25242,7 +25327,7 @@ class RealParameter(IParameterReal):
         """
         limits(RealParameter self) -> RealLimits
 
-        RealLimits RealParameter::limits() const 
+        RealLimits RealParameter::limits() const
 
         """
         return _libBornAgainCore.RealParameter_limits(self)
@@ -25292,7 +25377,7 @@ class RealParameter(IParameterReal):
         """
         unit(RealParameter self) -> std::string
 
-        std::string RealParameter::unit() const 
+        std::string RealParameter::unit() const
 
         """
         return _libBornAgainCore.RealParameter_unit(self)
@@ -25347,14 +25432,14 @@ 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):
         """
         clone(Rectangle self) -> Rectangle
 
-        Rectangle* Rectangle::clone() const 
+        Rectangle* Rectangle::clone() const
 
         """
         return _libBornAgainCore.Rectangle_clone(self)
@@ -25377,7 +25462,7 @@ class Rectangle(IShape2D):
         """
         getArea(Rectangle self) -> double
 
-        double Rectangle::getArea() const 
+        double Rectangle::getArea() const
 
         """
         return _libBornAgainCore.Rectangle_getArea(self)
@@ -25387,7 +25472,7 @@ class Rectangle(IShape2D):
         """
         getXlow(Rectangle self) -> double
 
-        double Rectangle::getXlow() const 
+        double Rectangle::getXlow() const
 
         """
         return _libBornAgainCore.Rectangle_getXlow(self)
@@ -25397,7 +25482,7 @@ class Rectangle(IShape2D):
         """
         getYlow(Rectangle self) -> double
 
-        double Rectangle::getYlow() const 
+        double Rectangle::getYlow() const
 
         """
         return _libBornAgainCore.Rectangle_getYlow(self)
@@ -25407,7 +25492,7 @@ class Rectangle(IShape2D):
         """
         getXup(Rectangle self) -> double
 
-        double Rectangle::getXup() const 
+        double Rectangle::getXup() const
 
         """
         return _libBornAgainCore.Rectangle_getXup(self)
@@ -25417,7 +25502,7 @@ class Rectangle(IShape2D):
         """
         getYup(Rectangle self) -> double
 
-        double Rectangle::getYup() const 
+        double Rectangle::getYup() const
 
         """
         return _libBornAgainCore.Rectangle_getYup(self)
@@ -25463,7 +25548,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):
@@ -25507,7 +25592,7 @@ class RectangularDetector(IDetector2D):
         setPosition(RectangularDetector self, kvector_t normal_to_detector, double u0, double v0, kvector_t direction)
         setPosition(RectangularDetector self, kvector_t normal_to_detector, double u0, double v0)
 
-        void RectangularDetector::setPosition(const kvector_t normal_to_detector, double u0, double v0, const kvector_t direction=kvector_t(0.0,-1.0, 0.0))
+        void RectangularDetector::setPosition(const kvector_t normal_to_detector, double u0, double v0, const kvector_t direction=kvector_t(0.0, -1.0, 0.0))
 
         """
         return _libBornAgainCore.RectangularDetector_setPosition(self, *args)
@@ -25559,7 +25644,7 @@ class RectangularDetector(IDetector2D):
         """
         getWidth(RectangularDetector self) -> double
 
-        double RectangularDetector::getWidth() const 
+        double RectangularDetector::getWidth() const
 
         """
         return _libBornAgainCore.RectangularDetector_getWidth(self)
@@ -25569,7 +25654,7 @@ class RectangularDetector(IDetector2D):
         """
         getHeight(RectangularDetector self) -> double
 
-        double RectangularDetector::getHeight() const 
+        double RectangularDetector::getHeight() const
 
         """
         return _libBornAgainCore.RectangularDetector_getHeight(self)
@@ -25579,7 +25664,7 @@ class RectangularDetector(IDetector2D):
         """
         getNbinsX(RectangularDetector self) -> size_t
 
-        size_t RectangularDetector::getNbinsX() const 
+        size_t RectangularDetector::getNbinsX() const
 
         """
         return _libBornAgainCore.RectangularDetector_getNbinsX(self)
@@ -25589,7 +25674,7 @@ class RectangularDetector(IDetector2D):
         """
         getNbinsY(RectangularDetector self) -> size_t
 
-        size_t RectangularDetector::getNbinsY() const 
+        size_t RectangularDetector::getNbinsY() const
 
         """
         return _libBornAgainCore.RectangularDetector_getNbinsY(self)
@@ -25599,7 +25684,7 @@ class RectangularDetector(IDetector2D):
         """
         getNormalVector(RectangularDetector self) -> kvector_t
 
-        kvector_t RectangularDetector::getNormalVector() const 
+        kvector_t RectangularDetector::getNormalVector() const
 
         """
         return _libBornAgainCore.RectangularDetector_getNormalVector(self)
@@ -25609,7 +25694,7 @@ class RectangularDetector(IDetector2D):
         """
         getU0(RectangularDetector self) -> double
 
-        double RectangularDetector::getU0() const 
+        double RectangularDetector::getU0() const
 
         """
         return _libBornAgainCore.RectangularDetector_getU0(self)
@@ -25619,7 +25704,7 @@ class RectangularDetector(IDetector2D):
         """
         getV0(RectangularDetector self) -> double
 
-        double RectangularDetector::getV0() const 
+        double RectangularDetector::getV0() const
 
         """
         return _libBornAgainCore.RectangularDetector_getV0(self)
@@ -25629,7 +25714,7 @@ class RectangularDetector(IDetector2D):
         """
         getDirectionVector(RectangularDetector self) -> kvector_t
 
-        kvector_t RectangularDetector::getDirectionVector() const 
+        kvector_t RectangularDetector::getDirectionVector() const
 
         """
         return _libBornAgainCore.RectangularDetector_getDirectionVector(self)
@@ -25639,7 +25724,7 @@ class RectangularDetector(IDetector2D):
         """
         getDistance(RectangularDetector self) -> double
 
-        double RectangularDetector::getDistance() const 
+        double RectangularDetector::getDistance() const
 
         """
         return _libBornAgainCore.RectangularDetector_getDistance(self)
@@ -25649,7 +25734,7 @@ class RectangularDetector(IDetector2D):
         """
         getDirectBeamU0(RectangularDetector self) -> double
 
-        double RectangularDetector::getDirectBeamU0() const 
+        double RectangularDetector::getDirectBeamU0() const
 
         """
         return _libBornAgainCore.RectangularDetector_getDirectBeamU0(self)
@@ -25659,7 +25744,7 @@ class RectangularDetector(IDetector2D):
         """
         getDirectBeamV0(RectangularDetector self) -> double
 
-        double RectangularDetector::getDirectBeamV0() const 
+        double RectangularDetector::getDirectBeamV0() const
 
         """
         return _libBornAgainCore.RectangularDetector_getDirectBeamV0(self)
@@ -25669,7 +25754,7 @@ class RectangularDetector(IDetector2D):
         """
         getDetectorArrangment(RectangularDetector self) -> RectangularDetector::EDetectorArrangement
 
-        RectangularDetector::EDetectorArrangement RectangularDetector::getDetectorArrangment() const 
+        RectangularDetector::EDetectorArrangement RectangularDetector::getDetectorArrangment() const
 
         """
         return _libBornAgainCore.RectangularDetector_getDetectorArrangment(self)
@@ -25724,7 +25809,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
@@ -25811,14 +25896,14 @@ 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):
         """
         evaluateCDF(ResolutionFunction2DGaussian self, double x, double y) -> double
 
-        double ResolutionFunction2DGaussian::evaluateCDF(double x, double y) const 
+        double ResolutionFunction2DGaussian::evaluateCDF(double x, double y) const
 
         """
         return _libBornAgainCore.ResolutionFunction2DGaussian_evaluateCDF(self, x, y)
@@ -25828,7 +25913,7 @@ class ResolutionFunction2DGaussian(IResolutionFunction2D):
         """
         clone(ResolutionFunction2DGaussian self) -> ResolutionFunction2DGaussian
 
-        ResolutionFunction2DGaussian* ResolutionFunction2DGaussian::clone() const 
+        ResolutionFunction2DGaussian* ResolutionFunction2DGaussian::clone() const
 
         """
         return _libBornAgainCore.ResolutionFunction2DGaussian_clone(self)
@@ -25850,7 +25935,7 @@ class ResolutionFunction2DGaussian(IResolutionFunction2D):
         """
         getSigmaX(ResolutionFunction2DGaussian self) -> double
 
-        double ResolutionFunction2DGaussian::getSigmaX() const 
+        double ResolutionFunction2DGaussian::getSigmaX() const
 
         """
         return _libBornAgainCore.ResolutionFunction2DGaussian_getSigmaX(self)
@@ -25860,7 +25945,7 @@ class ResolutionFunction2DGaussian(IResolutionFunction2D):
         """
         getSigmaY(ResolutionFunction2DGaussian self) -> double
 
-        double ResolutionFunction2DGaussian::getSigmaY() const 
+        double ResolutionFunction2DGaussian::getSigmaY() const
 
         """
         return _libBornAgainCore.ResolutionFunction2DGaussian_getSigmaY(self)
@@ -25902,7 +25987,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
@@ -25911,7 +25996,7 @@ class SpecularSimulation(ICloneable, IParameterized):
         """
         clone(SpecularSimulation self) -> SpecularSimulation
 
-        SpecularSimulation * SpecularSimulation::clone() const 
+        SpecularSimulation * SpecularSimulation::clone() const
 
         """
         return _libBornAgainCore.SpecularSimulation_clone(self)
@@ -26040,7 +26125,7 @@ class SpecularSimulation(ICloneable, IParameterized):
         """
         getLayerRTCoefficients(SpecularSimulation self, size_t i_alpha, size_t i_layer) -> SpecularSimulation::LayerRTCoefficients_t
 
-        SpecularSimulation::LayerRTCoefficients_t SpecularSimulation::getLayerRTCoefficients(size_t i_alpha, size_t i_layer) const 
+        SpecularSimulation::LayerRTCoefficients_t SpecularSimulation::getLayerRTCoefficients(size_t i_alpha, size_t i_layer) const
 
         """
         return _libBornAgainCore.SpecularSimulation_getLayerRTCoefficients(self, i_alpha, i_layer)
@@ -26091,7 +26176,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
@@ -26140,7 +26225,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):
@@ -26196,7 +26281,7 @@ class SampleBuilderFactoryTemp(_object):
         """
         begin(SampleBuilderFactoryTemp self) -> IFactory< std::string,IMultiLayerBuilder >::const_iterator
 
-        const_iterator IFactory< Key, AbstractProduct >::begin() const 
+        const_iterator IFactory< Key, AbstractProduct >::begin() const
 
         """
         return _libBornAgainCore.SampleBuilderFactoryTemp_begin(self)
@@ -26206,7 +26291,7 @@ class SampleBuilderFactoryTemp(_object):
         """
         end(SampleBuilderFactoryTemp self) -> IFactory< std::string,IMultiLayerBuilder >::const_iterator
 
-        const_iterator IFactory< Key, AbstractProduct >::end() const 
+        const_iterator IFactory< Key, AbstractProduct >::end() const
 
         """
         return _libBornAgainCore.SampleBuilderFactoryTemp_end(self)
@@ -26244,7 +26329,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):
@@ -26289,7 +26374,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):
@@ -26345,7 +26430,7 @@ class SimulationFactoryTemp(_object):
         """
         begin(SimulationFactoryTemp self) -> IFactory< std::string,GISASSimulation >::const_iterator
 
-        const_iterator IFactory< Key, AbstractProduct >::begin() const 
+        const_iterator IFactory< Key, AbstractProduct >::begin() const
 
         """
         return _libBornAgainCore.SimulationFactoryTemp_begin(self)
@@ -26355,7 +26440,7 @@ class SimulationFactoryTemp(_object):
         """
         end(SimulationFactoryTemp self) -> IFactory< std::string,GISASSimulation >::const_iterator
 
-        const_iterator IFactory< Key, AbstractProduct >::end() const 
+        const_iterator IFactory< Key, AbstractProduct >::end() const
 
         """
         return _libBornAgainCore.SimulationFactoryTemp_end(self)
@@ -26393,7 +26478,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 258f2fcceff..ab465e8f63b 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
@@ -3560,73 +3557,73 @@ namespace Swig {
 #define SWIGTYPE_p_HexagonalLattice swig_types[103]
 #define SWIGTYPE_p_Histogram1D swig_types[104]
 #define SWIGTYPE_p_Histogram2D swig_types[105]
-#define SWIGTYPE_p_HomogeneousMaterial swig_types[106]
-#define SWIGTYPE_p_HorizontalLine swig_types[107]
-#define SWIGTYPE_p_IAbstractParticle swig_types[108]
-#define SWIGTYPE_p_IAxis swig_types[109]
-#define SWIGTYPE_p_IChiSquaredModule swig_types[110]
-#define SWIGTYPE_p_ICloneable swig_types[111]
-#define SWIGTYPE_p_IClusteredParticles swig_types[112]
-#define SWIGTYPE_p_IDetector2D swig_types[113]
-#define SWIGTYPE_p_IDetectorResolution swig_types[114]
-#define SWIGTYPE_p_IDistribution1D swig_types[115]
-#define SWIGTYPE_p_IFTDecayFunction1D swig_types[116]
-#define SWIGTYPE_p_IFTDecayFunction2D swig_types[117]
-#define SWIGTYPE_p_IFTDistribution1D swig_types[118]
-#define SWIGTYPE_p_IFTDistribution2D swig_types[119]
-#define SWIGTYPE_p_IFactoryT_std__string_GISASSimulation_t swig_types[120]
-#define SWIGTYPE_p_IFactoryT_std__string_IMultiLayerBuilder_t swig_types[121]
-#define SWIGTYPE_p_IFitObserver swig_types[122]
-#define SWIGTYPE_p_IFitParameter swig_types[123]
-#define SWIGTYPE_p_IFitStrategy swig_types[124]
-#define SWIGTYPE_p_IFormFactor swig_types[125]
-#define SWIGTYPE_p_IFormFactorBorn swig_types[126]
-#define SWIGTYPE_p_IFormFactorDecorator swig_types[127]
-#define SWIGTYPE_p_IHistogram swig_types[128]
-#define SWIGTYPE_p_IIntensityFunction swig_types[129]
-#define SWIGTYPE_p_IIntensityNormalizer swig_types[130]
-#define SWIGTYPE_p_IInterferenceFunction swig_types[131]
-#define SWIGTYPE_p_ILayerRTCoefficients swig_types[132]
-#define SWIGTYPE_p_ILayout swig_types[133]
-#define SWIGTYPE_p_IMinimizer swig_types[134]
-#define SWIGTYPE_p_IMultiLayerBuilder swig_types[135]
-#define SWIGTYPE_p_INamed swig_types[136]
-#define SWIGTYPE_p_INode swig_types[137]
-#define SWIGTYPE_p_INodeVisitor swig_types[138]
-#define SWIGTYPE_p_INoncopyable swig_types[139]
-#define SWIGTYPE_p_IObservable swig_types[140]
-#define SWIGTYPE_p_IObserver swig_types[141]
-#define SWIGTYPE_p_IParameterT_double_t swig_types[142]
-#define SWIGTYPE_p_IParameterized swig_types[143]
-#define SWIGTYPE_p_IParticle swig_types[144]
-#define SWIGTYPE_p_IPixel swig_types[145]
-#define SWIGTYPE_p_IResolutionFunction2D swig_types[146]
-#define SWIGTYPE_p_IRotation swig_types[147]
-#define SWIGTYPE_p_ISample swig_types[148]
-#define SWIGTYPE_p_ISelectionRule swig_types[149]
-#define SWIGTYPE_p_IShape2D swig_types[150]
-#define SWIGTYPE_p_ISquaredFunction swig_types[151]
-#define SWIGTYPE_p_Instrument swig_types[152]
-#define SWIGTYPE_p_IntensityDataIOFactory swig_types[153]
-#define SWIGTYPE_p_IntensityFunctionLog swig_types[154]
-#define SWIGTYPE_p_IntensityFunctionSqrt swig_types[155]
-#define SWIGTYPE_p_IntensityNormalizer swig_types[156]
-#define SWIGTYPE_p_IntensityScaleAndShiftNormalizer swig_types[157]
-#define SWIGTYPE_p_InterferenceFunction1DLattice swig_types[158]
-#define SWIGTYPE_p_InterferenceFunction2DLattice swig_types[159]
-#define SWIGTYPE_p_InterferenceFunction2DParaCrystal swig_types[160]
-#define SWIGTYPE_p_InterferenceFunctionNone swig_types[161]
-#define SWIGTYPE_p_InterferenceFunctionRadialParaCrystal swig_types[162]
-#define SWIGTYPE_p_IsGISAXSDetector swig_types[163]
-#define SWIGTYPE_p_Lattice swig_types[164]
-#define SWIGTYPE_p_Lattice1DParameters swig_types[165]
-#define SWIGTYPE_p_Lattice2D swig_types[166]
-#define SWIGTYPE_p_Lattice2D__ReciprocalBases swig_types[167]
-#define SWIGTYPE_p_Layer swig_types[168]
-#define SWIGTYPE_p_LayerInterface swig_types[169]
-#define SWIGTYPE_p_LayerRTCoefficients_t swig_types[170]
-#define SWIGTYPE_p_LayerRoughness swig_types[171]
-#define SWIGTYPE_p_Line swig_types[172]
+#define SWIGTYPE_p_HorizontalLine swig_types[106]
+#define SWIGTYPE_p_IAbstractParticle swig_types[107]
+#define SWIGTYPE_p_IAxis swig_types[108]
+#define SWIGTYPE_p_IChiSquaredModule swig_types[109]
+#define SWIGTYPE_p_ICloneable swig_types[110]
+#define SWIGTYPE_p_IClusteredParticles swig_types[111]
+#define SWIGTYPE_p_IDetector2D swig_types[112]
+#define SWIGTYPE_p_IDetectorResolution swig_types[113]
+#define SWIGTYPE_p_IDistribution1D swig_types[114]
+#define SWIGTYPE_p_IFTDecayFunction1D swig_types[115]
+#define SWIGTYPE_p_IFTDecayFunction2D swig_types[116]
+#define SWIGTYPE_p_IFTDistribution1D swig_types[117]
+#define SWIGTYPE_p_IFTDistribution2D swig_types[118]
+#define SWIGTYPE_p_IFactoryT_std__string_GISASSimulation_t swig_types[119]
+#define SWIGTYPE_p_IFactoryT_std__string_IMultiLayerBuilder_t swig_types[120]
+#define SWIGTYPE_p_IFitObserver swig_types[121]
+#define SWIGTYPE_p_IFitParameter swig_types[122]
+#define SWIGTYPE_p_IFitStrategy swig_types[123]
+#define SWIGTYPE_p_IFormFactor swig_types[124]
+#define SWIGTYPE_p_IFormFactorBorn swig_types[125]
+#define SWIGTYPE_p_IFormFactorDecorator swig_types[126]
+#define SWIGTYPE_p_IHistogram swig_types[127]
+#define SWIGTYPE_p_IIntensityFunction swig_types[128]
+#define SWIGTYPE_p_IIntensityNormalizer swig_types[129]
+#define SWIGTYPE_p_IInterferenceFunction swig_types[130]
+#define SWIGTYPE_p_ILayerRTCoefficients swig_types[131]
+#define SWIGTYPE_p_ILayout swig_types[132]
+#define SWIGTYPE_p_IMinimizer swig_types[133]
+#define SWIGTYPE_p_IMultiLayerBuilder swig_types[134]
+#define SWIGTYPE_p_INamed swig_types[135]
+#define SWIGTYPE_p_INode swig_types[136]
+#define SWIGTYPE_p_INodeVisitor swig_types[137]
+#define SWIGTYPE_p_INoncopyable swig_types[138]
+#define SWIGTYPE_p_IObservable swig_types[139]
+#define SWIGTYPE_p_IObserver swig_types[140]
+#define SWIGTYPE_p_IParameterT_double_t swig_types[141]
+#define SWIGTYPE_p_IParameterized swig_types[142]
+#define SWIGTYPE_p_IParticle swig_types[143]
+#define SWIGTYPE_p_IPixel swig_types[144]
+#define SWIGTYPE_p_IResolutionFunction2D swig_types[145]
+#define SWIGTYPE_p_IRotation swig_types[146]
+#define SWIGTYPE_p_ISample swig_types[147]
+#define SWIGTYPE_p_ISelectionRule swig_types[148]
+#define SWIGTYPE_p_IShape2D swig_types[149]
+#define SWIGTYPE_p_ISquaredFunction swig_types[150]
+#define SWIGTYPE_p_Instrument swig_types[151]
+#define SWIGTYPE_p_IntensityDataIOFactory swig_types[152]
+#define SWIGTYPE_p_IntensityFunctionLog swig_types[153]
+#define SWIGTYPE_p_IntensityFunctionSqrt swig_types[154]
+#define SWIGTYPE_p_IntensityNormalizer swig_types[155]
+#define SWIGTYPE_p_IntensityScaleAndShiftNormalizer swig_types[156]
+#define SWIGTYPE_p_InterferenceFunction1DLattice swig_types[157]
+#define SWIGTYPE_p_InterferenceFunction2DLattice swig_types[158]
+#define SWIGTYPE_p_InterferenceFunction2DParaCrystal swig_types[159]
+#define SWIGTYPE_p_InterferenceFunctionNone swig_types[160]
+#define SWIGTYPE_p_InterferenceFunctionRadialParaCrystal swig_types[161]
+#define SWIGTYPE_p_IsGISAXSDetector swig_types[162]
+#define SWIGTYPE_p_Lattice swig_types[163]
+#define SWIGTYPE_p_Lattice1DParameters swig_types[164]
+#define SWIGTYPE_p_Lattice2D swig_types[165]
+#define SWIGTYPE_p_Lattice2D__ReciprocalBases swig_types[166]
+#define SWIGTYPE_p_Layer swig_types[167]
+#define SWIGTYPE_p_LayerInterface swig_types[168]
+#define SWIGTYPE_p_LayerRTCoefficients_t swig_types[169]
+#define SWIGTYPE_p_LayerRoughness swig_types[170]
+#define SWIGTYPE_p_Line swig_types[171]
+#define SWIGTYPE_p_Material swig_types[172]
 #define SWIGTYPE_p_MesoCrystal swig_types[173]
 #define SWIGTYPE_p_MultiLayer swig_types[174]
 #define SWIGTYPE_p_MultiLayerRTCoefficients_t swig_types[175]
@@ -3735,14 +3732,14 @@ namespace Swig {
 #define SWIGTYPE_p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t swig_types[278]
 #define SWIGTYPE_p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t__const_iterator swig_types[279]
 #define SWIGTYPE_p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t__iterator swig_types[280]
-#define SWIGTYPE_p_std__vectorT_HomogeneousMaterial_const_p_std__allocatorT_HomogeneousMaterial_const_p_t_t swig_types[281]
-#define SWIGTYPE_p_std__vectorT_HomogeneousRegion_std__allocatorT_HomogeneousRegion_t_t swig_types[282]
-#define SWIGTYPE_p_std__vectorT_IDetector2D__EAxesUnits_std__allocatorT_IDetector2D__EAxesUnits_t_t swig_types[283]
-#define SWIGTYPE_p_std__vectorT_IFormFactor_p_std__allocatorT_IFormFactor_p_t_t swig_types[284]
-#define SWIGTYPE_p_std__vectorT_ILayout_const_p_std__allocatorT_ILayout_const_p_t_t swig_types[285]
-#define SWIGTYPE_p_std__vectorT_INode_const_p_std__allocatorT_INode_const_p_t_t swig_types[286]
-#define SWIGTYPE_p_std__vectorT_INode_p_std__allocatorT_INode_p_t_t swig_types[287]
-#define SWIGTYPE_p_std__vectorT_IParticle_const_p_std__allocatorT_IParticle_const_p_t_t swig_types[288]
+#define SWIGTYPE_p_std__vectorT_HomogeneousRegion_std__allocatorT_HomogeneousRegion_t_t swig_types[281]
+#define SWIGTYPE_p_std__vectorT_IDetector2D__EAxesUnits_std__allocatorT_IDetector2D__EAxesUnits_t_t swig_types[282]
+#define SWIGTYPE_p_std__vectorT_IFormFactor_p_std__allocatorT_IFormFactor_p_t_t swig_types[283]
+#define SWIGTYPE_p_std__vectorT_ILayout_const_p_std__allocatorT_ILayout_const_p_t_t swig_types[284]
+#define SWIGTYPE_p_std__vectorT_INode_const_p_std__allocatorT_INode_const_p_t_t swig_types[285]
+#define SWIGTYPE_p_std__vectorT_INode_p_std__allocatorT_INode_p_t_t swig_types[286]
+#define SWIGTYPE_p_std__vectorT_IParticle_const_p_std__allocatorT_IParticle_const_p_t_t swig_types[287]
+#define SWIGTYPE_p_std__vectorT_Material_const_p_std__allocatorT_Material_const_p_t_t swig_types[288]
 #define SWIGTYPE_p_std__vectorT_ParameterSample_std__allocatorT_ParameterSample_t_t swig_types[289]
 #define SWIGTYPE_p_std__vectorT_PolygonalTopology_std__allocatorT_PolygonalTopology_t_t swig_types[290]
 #define SWIGTYPE_p_std__vectorT_RealParameter_p_std__allocatorT_RealParameter_p_t_t swig_types[291]
@@ -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
@@ -6515,7 +6704,6 @@ SWIGINTERN void std_vector_Sl_std_string_Sg__insert__SWIG_1(std::vector< std::st
 #include "GISASSimulation.h"
 #include "Histogram1D.h"
 #include "Histogram2D.h"
-#include "HomogeneousMaterial.h"
 #include "IAbstractParticle.h"
 #include "ICloneable.h"
 #include "IClusteredParticles.h"
@@ -6562,6 +6750,7 @@ SWIGINTERN void std_vector_Sl_std_string_Sg__insert__SWIG_1(std::vector< std::st
 #include "LayerInterface.h"
 #include "LayerRoughness.h"
 #include "Line.h"
+#include "MaterialFactoryFuncs.h"
 #include "MathFunctions.h"
 #include "MesoCrystal.h"
 #include "MultiLayer.h"
@@ -6598,7 +6787,6 @@ SWIGINTERN void std_vector_Sl_std_string_Sg__insert__SWIG_1(std::vector< std::st
 #include "IIntensityFunction.h"
 #include "IIntensityNormalizer.h"
 #include "ISquaredFunction.h"
-#include "MathFunctions.h"
 #include "AdjustMinimizerStrategy.h"
 
 
@@ -7067,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){
@@ -7416,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);
@@ -7444,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);
@@ -7480,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);
@@ -7508,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);
@@ -7531,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);
@@ -7553,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);
@@ -7586,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);
@@ -7616,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);
@@ -7652,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);
@@ -7680,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);
@@ -7706,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);
@@ -7734,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);
@@ -7757,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);
@@ -7779,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);
@@ -7809,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);
@@ -7840,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);
@@ -7855,19 +8005,19 @@ void SwigDirector_ISample::setParent(INode const *newParent) {
 }
 
 
-HomogeneousMaterial const *SwigDirector_ISample::material() const {
+Material const *SwigDirector_ISample::material() const {
   void *swig_argp ;
   int swig_res ;
   swig_owntype own ;
   
-  HomogeneousMaterial *c_result;
+  Material *c_result;
   if (!swig_get_self()) {
     Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call ISample.__init__.");
   }
 #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);
@@ -7878,13 +8028,13 @@ HomogeneousMaterial const *SwigDirector_ISample::material() const {
       Swig::DirectorMethodException::raise("Error detected when calling 'ISample.material'");
     }
   }
-  swig_res = SWIG_ConvertPtrAndOwn(result, &swig_argp, SWIGTYPE_p_HomogeneousMaterial,  0  | SWIG_POINTER_DISOWN, &own);
+  swig_res = SWIG_ConvertPtrAndOwn(result, &swig_argp, SWIGTYPE_p_Material,  0  | SWIG_POINTER_DISOWN, &own);
   if (!SWIG_IsOK(swig_res)) {
-    Swig::DirectorTypeMismatchException::raise(SWIG_ErrorType(SWIG_ArgError(swig_res)), "in output value of type '""HomogeneousMaterial const *""'");
+    Swig::DirectorTypeMismatchException::raise(SWIG_ErrorType(SWIG_ArgError(swig_res)), "in output value of type '""Material const *""'");
   }
-  c_result = reinterpret_cast< HomogeneousMaterial * >(swig_argp);
+  c_result = reinterpret_cast< Material * >(swig_argp);
   swig_acquire_ownership_obj(SWIG_as_voidptr(c_result), own /* & TODO: SWIG_POINTER_OWN */);
-  return (HomogeneousMaterial const *) c_result;
+  return (Material const *) c_result;
 }
 
 
@@ -7900,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);
@@ -7927,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);
@@ -7960,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);
@@ -7983,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);
@@ -8019,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);
@@ -8047,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);
@@ -8073,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);
@@ -8108,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);
@@ -8137,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);
@@ -8180,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);
@@ -8208,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);
@@ -8234,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);
@@ -8262,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);
@@ -8285,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);
@@ -8307,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);
@@ -8337,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);
@@ -8368,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);
@@ -8383,19 +8533,19 @@ void SwigDirector_IFormFactor::setParent(INode const *newParent) {
 }
 
 
-HomogeneousMaterial const *SwigDirector_IFormFactor::material() const {
+Material const *SwigDirector_IFormFactor::material() const {
   void *swig_argp ;
   int swig_res ;
   swig_owntype own ;
   
-  HomogeneousMaterial *c_result;
+  Material *c_result;
   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 = 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);
@@ -8406,26 +8556,26 @@ HomogeneousMaterial const *SwigDirector_IFormFactor::material() const {
       Swig::DirectorMethodException::raise("Error detected when calling 'IFormFactor.material'");
     }
   }
-  swig_res = SWIG_ConvertPtrAndOwn(result, &swig_argp, SWIGTYPE_p_HomogeneousMaterial,  0  | SWIG_POINTER_DISOWN, &own);
+  swig_res = SWIG_ConvertPtrAndOwn(result, &swig_argp, SWIGTYPE_p_Material,  0  | SWIG_POINTER_DISOWN, &own);
   if (!SWIG_IsOK(swig_res)) {
-    Swig::DirectorTypeMismatchException::raise(SWIG_ErrorType(SWIG_ArgError(swig_res)), "in output value of type '""HomogeneousMaterial const *""'");
+    Swig::DirectorTypeMismatchException::raise(SWIG_ErrorType(SWIG_ArgError(swig_res)), "in output value of type '""Material const *""'");
   }
-  c_result = reinterpret_cast< HomogeneousMaterial * >(swig_argp);
+  c_result = reinterpret_cast< Material * >(swig_argp);
   swig_acquire_ownership_obj(SWIG_as_voidptr(c_result), own /* & TODO: SWIG_POINTER_OWN */);
-  return (HomogeneousMaterial const *) c_result;
+  return (Material const *) c_result;
 }
 
 
-void SwigDirector_IFormFactor::setAmbientMaterial(HomogeneousMaterial arg0) {
+void SwigDirector_IFormFactor::setAmbientMaterial(Material arg0) {
   swig::SwigVar_PyObject obj0;
-  obj0 = SWIG_NewPointerObj(SWIG_as_voidptr(&arg0), SWIGTYPE_p_HomogeneousMaterial,  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);
@@ -8448,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);
@@ -8477,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);
@@ -8506,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);
@@ -8537,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);
@@ -8568,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);
@@ -8600,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);
@@ -8625,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);
@@ -8655,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);
@@ -8710,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);
@@ -8738,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);
@@ -8764,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);
@@ -8792,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);
@@ -8815,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);
@@ -8837,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);
@@ -8867,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);
@@ -8898,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);
@@ -8913,19 +9063,19 @@ void SwigDirector_IFormFactorBorn::setParent(INode const *newParent) {
 }
 
 
-HomogeneousMaterial const *SwigDirector_IFormFactorBorn::material() const {
+Material const *SwigDirector_IFormFactorBorn::material() const {
   void *swig_argp ;
   int swig_res ;
   swig_owntype own ;
   
-  HomogeneousMaterial *c_result;
+  Material *c_result;
   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 = 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);
@@ -8936,26 +9086,26 @@ HomogeneousMaterial const *SwigDirector_IFormFactorBorn::material() const {
       Swig::DirectorMethodException::raise("Error detected when calling 'IFormFactorBorn.material'");
     }
   }
-  swig_res = SWIG_ConvertPtrAndOwn(result, &swig_argp, SWIGTYPE_p_HomogeneousMaterial,  0  | SWIG_POINTER_DISOWN, &own);
+  swig_res = SWIG_ConvertPtrAndOwn(result, &swig_argp, SWIGTYPE_p_Material,  0  | SWIG_POINTER_DISOWN, &own);
   if (!SWIG_IsOK(swig_res)) {
-    Swig::DirectorTypeMismatchException::raise(SWIG_ErrorType(SWIG_ArgError(swig_res)), "in output value of type '""HomogeneousMaterial const *""'");
+    Swig::DirectorTypeMismatchException::raise(SWIG_ErrorType(SWIG_ArgError(swig_res)), "in output value of type '""Material const *""'");
   }
-  c_result = reinterpret_cast< HomogeneousMaterial * >(swig_argp);
+  c_result = reinterpret_cast< Material * >(swig_argp);
   swig_acquire_ownership_obj(SWIG_as_voidptr(c_result), own /* & TODO: SWIG_POINTER_OWN */);
-  return (HomogeneousMaterial const *) c_result;
+  return (Material const *) c_result;
 }
 
 
-void SwigDirector_IFormFactorBorn::setAmbientMaterial(HomogeneousMaterial arg0) {
+void SwigDirector_IFormFactorBorn::setAmbientMaterial(Material arg0) {
   swig::SwigVar_PyObject obj0;
-  obj0 = SWIG_NewPointerObj(SWIG_as_voidptr(&arg0), SWIGTYPE_p_HomogeneousMaterial,  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);
@@ -8978,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);
@@ -9007,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);
@@ -9036,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);
@@ -9067,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);
@@ -9098,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);
@@ -9130,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);
@@ -9155,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);
@@ -9185,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);
@@ -9222,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);
@@ -9271,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);
@@ -9299,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);
@@ -9325,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);
@@ -9353,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);
@@ -9376,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);
@@ -9398,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);
@@ -9428,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);
@@ -9459,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);
@@ -9474,19 +9624,19 @@ void SwigDirector_IInterferenceFunction::setParent(INode const *newParent) {
 }
 
 
-HomogeneousMaterial const *SwigDirector_IInterferenceFunction::material() const {
+Material const *SwigDirector_IInterferenceFunction::material() const {
   void *swig_argp ;
   int swig_res ;
   swig_owntype own ;
   
-  HomogeneousMaterial *c_result;
+  Material *c_result;
   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 = 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);
@@ -9497,27 +9647,27 @@ HomogeneousMaterial const *SwigDirector_IInterferenceFunction::material() const
       Swig::DirectorMethodException::raise("Error detected when calling 'IInterferenceFunction.material'");
     }
   }
-  swig_res = SWIG_ConvertPtrAndOwn(result, &swig_argp, SWIGTYPE_p_HomogeneousMaterial,  0  | SWIG_POINTER_DISOWN, &own);
+  swig_res = SWIG_ConvertPtrAndOwn(result, &swig_argp, SWIGTYPE_p_Material,  0  | SWIG_POINTER_DISOWN, &own);
   if (!SWIG_IsOK(swig_res)) {
-    Swig::DirectorTypeMismatchException::raise(SWIG_ErrorType(SWIG_ArgError(swig_res)), "in output value of type '""HomogeneousMaterial const *""'");
+    Swig::DirectorTypeMismatchException::raise(SWIG_ErrorType(SWIG_ArgError(swig_res)), "in output value of type '""Material const *""'");
   }
-  c_result = reinterpret_cast< HomogeneousMaterial * >(swig_argp);
+  c_result = reinterpret_cast< Material * >(swig_argp);
   swig_acquire_ownership_obj(SWIG_as_voidptr(c_result), own /* & TODO: SWIG_POINTER_OWN */);
-  return (HomogeneousMaterial const *) c_result;
+  return (Material const *) c_result;
 }
 
 
 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);
@@ -9545,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);
@@ -9574,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);
@@ -10444,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 ;
@@ -12373,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();
 }
@@ -14321,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();
 }
@@ -16239,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();
 }
@@ -18187,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();
 }
@@ -20105,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();
 }
@@ -22023,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();
 }
@@ -23971,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();
 }
@@ -24159,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();
 }
@@ -24230,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();
 }
@@ -24405,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();
 }
@@ -24886,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();
 }
@@ -25332,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();
 }
@@ -27229,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();
 }
@@ -29126,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();
 }
@@ -29934,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();
 }
@@ -31850,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();
 }
@@ -32396,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();
 }
@@ -34312,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();
 }
@@ -34957,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();
 }
@@ -35334,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();
 }
@@ -35595,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();
 }
@@ -35967,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();
 }
@@ -36305,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();
 }
@@ -36804,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();
 }
@@ -37219,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();
 }
@@ -37365,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();
 }
@@ -37564,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();
 }
@@ -37760,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();
 }
@@ -37816,7 +37955,7 @@ SWIGINTERN PyObject *_wrap_ISample_material(PyObject *SWIGUNUSEDPARM(self), PyOb
   PyObject * obj0 = 0 ;
   Swig::Director *director = 0;
   bool upcall = false;
-  HomogeneousMaterial *result = 0 ;
+  Material *result = 0 ;
   
   if (!PyArg_ParseTuple(args,(char *)"O:ISample_material",&obj0)) SWIG_fail;
   res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ISample, 0 |  0 );
@@ -37828,14 +37967,14 @@ SWIGINTERN PyObject *_wrap_ISample_material(PyObject *SWIGUNUSEDPARM(self), PyOb
   upcall = (director && (director->swig_get_self()==obj0));
   try {
     if (upcall) {
-      result = (HomogeneousMaterial *)((ISample const *)arg1)->ISample::material();
+      result = (Material *)((ISample const *)arg1)->ISample::material();
     } else {
-      result = (HomogeneousMaterial *)((ISample const *)arg1)->material();
+      result = (Material *)((ISample const *)arg1)->material();
     }
   } catch (Swig::DirectorException&) {
     SWIG_fail;
   }
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_HomogeneousMaterial, 0 |  0 );
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Material, 0 |  0 );
   if (director) {
     SWIG_AcquirePtr(resultobj, director->swig_release_ownership(SWIG_as_voidptr(result)));
   }
@@ -37851,7 +37990,7 @@ SWIGINTERN PyObject *_wrap_ISample_containedMaterials(PyObject *SWIGUNUSEDPARM(s
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject * obj0 = 0 ;
-  SwigValueWrapper< std::vector< HomogeneousMaterial const *,std::allocator< HomogeneousMaterial const * > > > result;
+  SwigValueWrapper< std::vector< Material const *,std::allocator< Material const * > > > result;
   
   if (!PyArg_ParseTuple(args,(char *)"O:ISample_containedMaterials",&obj0)) SWIG_fail;
   res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_ISample, 0 |  0 );
@@ -37860,7 +37999,7 @@ SWIGINTERN PyObject *_wrap_ISample_containedMaterials(PyObject *SWIGUNUSEDPARM(s
   }
   arg1 = reinterpret_cast< ISample * >(argp1);
   result = ((ISample const *)arg1)->containedMaterials();
-  resultobj = SWIG_NewPointerObj((new std::vector< HomogeneousMaterial const *,std::allocator< HomogeneousMaterial const * > >(static_cast< const std::vector< HomogeneousMaterial const *,std::allocator< HomogeneousMaterial const * > >& >(result))), SWIGTYPE_p_std__vectorT_HomogeneousMaterial_const_p_std__allocatorT_HomogeneousMaterial_const_p_t_t, SWIG_POINTER_OWN |  0 );
+  resultobj = SWIG_NewPointerObj((new std::vector< Material const *,std::allocator< Material const * > >(static_cast< const std::vector< Material const *,std::allocator< Material const * > >& >(result))), SWIGTYPE_p_std__vectorT_Material_const_p_std__allocatorT_Material_const_p_t_t, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
   return NULL;
@@ -37938,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();
 }
@@ -38349,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();
 }
@@ -38431,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();
 }
@@ -38585,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();
 }
@@ -38804,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();
 }
@@ -38905,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();
 }
@@ -38989,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();
 }
@@ -39070,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();
 }
@@ -39164,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();
 }
@@ -39258,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();
 }
@@ -39405,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();
 }
@@ -39700,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();
 }
@@ -39928,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();
 }
@@ -40147,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();
 }
@@ -40379,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();
 }
@@ -40509,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();
 }
@@ -40639,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();
 }
@@ -40769,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();
 }
@@ -40899,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();
 }
@@ -41075,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();
 }
@@ -41659,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();
 }
@@ -41804,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();
 }
@@ -42489,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();
 }
@@ -44657,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();
 }
@@ -45555,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();
 }
@@ -46103,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 ;
@@ -46863,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();
 }
@@ -47387,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();
 }
@@ -52360,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();
 }
@@ -52589,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();
 }
@@ -52933,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();
 }
@@ -53560,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();
 }
@@ -54004,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();
 }
@@ -54426,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();
 }
@@ -54848,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();
 }
@@ -55345,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();
 }
@@ -55767,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();
 }
@@ -56263,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();
 }
@@ -56723,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();
 }
@@ -57220,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();
 }
@@ -57323,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();
 }
@@ -57456,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();
 }
@@ -57589,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();
 }
@@ -57722,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();
 }
@@ -57886,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();
 }
@@ -58184,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();
 }
@@ -58435,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();
 }
@@ -58686,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();
 }
@@ -58989,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();
 }
@@ -59122,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();
 }
@@ -59255,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();
 }
@@ -59388,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();
 }
@@ -59521,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();
 }
@@ -59654,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();
 }
@@ -59787,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();
 }
@@ -59951,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();
 }
@@ -60159,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();
 }
@@ -60410,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();
 }
@@ -60661,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();
 }
@@ -60912,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();
 }
@@ -61163,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();
 }
@@ -61466,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();
 }
@@ -61846,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();
 }
@@ -62016,7 +62133,7 @@ fail:
 SWIGINTERN PyObject *_wrap_IFormFactor_setAmbientMaterial(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   IFormFactor *arg1 = (IFormFactor *) 0 ;
-  HomogeneousMaterial arg2 ;
+  SwigValueWrapper< Material > arg2 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   void *argp2 ;
@@ -62033,14 +62150,14 @@ SWIGINTERN PyObject *_wrap_IFormFactor_setAmbientMaterial(PyObject *SWIGUNUSEDPA
   }
   arg1 = reinterpret_cast< IFormFactor * >(argp1);
   {
-    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_HomogeneousMaterial,  0  | 0);
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_Material,  0  | 0);
     if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IFormFactor_setAmbientMaterial" "', argument " "2"" of type '" "HomogeneousMaterial""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IFormFactor_setAmbientMaterial" "', argument " "2"" of type '" "Material""'"); 
     }  
     if (!argp2) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "IFormFactor_setAmbientMaterial" "', argument " "2"" of type '" "HomogeneousMaterial""'");
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "IFormFactor_setAmbientMaterial" "', argument " "2"" of type '" "Material""'");
     } else {
-      HomogeneousMaterial * temp = reinterpret_cast< HomogeneousMaterial * >(argp2);
+      Material * temp = reinterpret_cast< Material * >(argp2);
       arg2 = *temp;
       if (SWIG_IsNewObj(res2)) delete temp;
     }
@@ -62494,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();
 }
@@ -64445,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();
 }
@@ -64540,7 +64657,7 @@ fail:
 SWIGINTERN PyObject *_wrap_IFormFactorBorn_setAmbientMaterial(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   IFormFactorBorn *arg1 = (IFormFactorBorn *) 0 ;
-  HomogeneousMaterial arg2 ;
+  SwigValueWrapper< Material > arg2 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   void *argp2 ;
@@ -64557,14 +64674,14 @@ SWIGINTERN PyObject *_wrap_IFormFactorBorn_setAmbientMaterial(PyObject *SWIGUNUS
   }
   arg1 = reinterpret_cast< IFormFactorBorn * >(argp1);
   {
-    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_HomogeneousMaterial,  0  | 0);
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_Material,  0  | 0);
     if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IFormFactorBorn_setAmbientMaterial" "', argument " "2"" of type '" "HomogeneousMaterial""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IFormFactorBorn_setAmbientMaterial" "', argument " "2"" of type '" "Material""'"); 
     }  
     if (!argp2) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "IFormFactorBorn_setAmbientMaterial" "', argument " "2"" of type '" "HomogeneousMaterial""'");
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "IFormFactorBorn_setAmbientMaterial" "', argument " "2"" of type '" "Material""'");
     } else {
-      HomogeneousMaterial * temp = reinterpret_cast< HomogeneousMaterial * >(argp2);
+      Material * temp = reinterpret_cast< Material * >(argp2);
       arg2 = *temp;
       if (SWIG_IsNewObj(res2)) delete temp;
     }
@@ -64950,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();
 }
@@ -65147,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();
 }
@@ -65228,7 +65345,7 @@ fail:
 SWIGINTERN PyObject *_wrap_IFormFactorDecorator_setAmbientMaterial(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   IFormFactorDecorator *arg1 = (IFormFactorDecorator *) 0 ;
-  HomogeneousMaterial arg2 ;
+  SwigValueWrapper< Material > arg2 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   void *argp2 ;
@@ -65243,14 +65360,14 @@ SWIGINTERN PyObject *_wrap_IFormFactorDecorator_setAmbientMaterial(PyObject *SWI
   }
   arg1 = reinterpret_cast< IFormFactorDecorator * >(argp1);
   {
-    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_HomogeneousMaterial,  0  | 0);
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_Material,  0  | 0);
     if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IFormFactorDecorator_setAmbientMaterial" "', argument " "2"" of type '" "HomogeneousMaterial""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IFormFactorDecorator_setAmbientMaterial" "', argument " "2"" of type '" "Material""'"); 
     }  
     if (!argp2) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "IFormFactorDecorator_setAmbientMaterial" "', argument " "2"" of type '" "HomogeneousMaterial""'");
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "IFormFactorDecorator_setAmbientMaterial" "', argument " "2"" of type '" "Material""'");
     } else {
-      HomogeneousMaterial * temp = reinterpret_cast< HomogeneousMaterial * >(argp2);
+      Material * temp = reinterpret_cast< Material * >(argp2);
       arg2 = *temp;
       if (SWIG_IsNewObj(res2)) delete temp;
     }
@@ -65377,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();
 }
@@ -65522,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();
 }
@@ -65667,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();
 }
@@ -65921,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();
 }
@@ -66401,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();
 }
@@ -66572,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();
 }
@@ -66705,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();
 }
@@ -66816,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();
 }
@@ -67033,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();
 }
@@ -67280,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();
 }
@@ -67527,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();
 }
@@ -67713,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();
 }
@@ -67843,7 +67960,7 @@ fail:
 SWIGINTERN PyObject *_wrap_FormFactorCrystal_setAmbientMaterial(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   FormFactorCrystal *arg1 = (FormFactorCrystal *) 0 ;
-  HomogeneousMaterial arg2 ;
+  SwigValueWrapper< Material > arg2 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   void *argp2 ;
@@ -67858,14 +67975,14 @@ SWIGINTERN PyObject *_wrap_FormFactorCrystal_setAmbientMaterial(PyObject *SWIGUN
   }
   arg1 = reinterpret_cast< FormFactorCrystal * >(argp1);
   {
-    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_HomogeneousMaterial,  0  | 0);
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_Material,  0  | 0);
     if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "FormFactorCrystal_setAmbientMaterial" "', argument " "2"" of type '" "HomogeneousMaterial""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "FormFactorCrystal_setAmbientMaterial" "', argument " "2"" of type '" "Material""'"); 
     }  
     if (!argp2) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "FormFactorCrystal_setAmbientMaterial" "', argument " "2"" of type '" "HomogeneousMaterial""'");
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "FormFactorCrystal_setAmbientMaterial" "', argument " "2"" of type '" "Material""'");
     } else {
-      HomogeneousMaterial * temp = reinterpret_cast< HomogeneousMaterial * >(argp2);
+      Material * temp = reinterpret_cast< Material * >(argp2);
       arg2 = *temp;
       if (SWIG_IsNewObj(res2)) delete temp;
     }
@@ -68026,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();
 }
@@ -68243,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();
 }
@@ -68459,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();
 }
@@ -68706,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();
 }
@@ -68830,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();
 }
@@ -68984,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();
 }
@@ -69231,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();
 }
@@ -69484,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();
 }
@@ -69700,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();
 }
@@ -69986,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();
 }
@@ -70233,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();
 }
@@ -70357,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();
 }
@@ -70604,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();
 }
@@ -70851,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();
 }
@@ -71098,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();
 }
@@ -71345,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();
 }
@@ -71623,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();
 }
@@ -71901,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();
 }
@@ -72187,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();
 }
@@ -72320,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();
 }
@@ -72453,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();
 }
@@ -72639,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();
 }
@@ -72886,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();
 }
@@ -73164,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();
 }
@@ -73336,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();
 }
@@ -73517,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();
 }
@@ -73689,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();
 }
@@ -73875,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();
 }
@@ -74030,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();
 }
@@ -74368,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();
 }
@@ -74758,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();
 }
@@ -75071,7 +75188,7 @@ fail:
 SWIGINTERN PyObject *_wrap_FormFactorWeighted_setAmbientMaterial(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   FormFactorWeighted *arg1 = (FormFactorWeighted *) 0 ;
-  HomogeneousMaterial arg2 ;
+  SwigValueWrapper< Material > arg2 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   void *argp2 ;
@@ -75086,14 +75203,14 @@ SWIGINTERN PyObject *_wrap_FormFactorWeighted_setAmbientMaterial(PyObject *SWIGU
   }
   arg1 = reinterpret_cast< FormFactorWeighted * >(argp1);
   {
-    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_HomogeneousMaterial,  0  | 0);
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_Material,  0  | 0);
     if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "FormFactorWeighted_setAmbientMaterial" "', argument " "2"" of type '" "HomogeneousMaterial""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "FormFactorWeighted_setAmbientMaterial" "', argument " "2"" of type '" "Material""'"); 
     }  
     if (!argp2) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "FormFactorWeighted_setAmbientMaterial" "', argument " "2"" of type '" "HomogeneousMaterial""'");
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "FormFactorWeighted_setAmbientMaterial" "', argument " "2"" of type '" "Material""'");
     } else {
-      HomogeneousMaterial * temp = reinterpret_cast< HomogeneousMaterial * >(argp2);
+      Material * temp = reinterpret_cast< Material * >(argp2);
       arg2 = *temp;
       if (SWIG_IsNewObj(res2)) delete temp;
     }
@@ -75142,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();
 }
@@ -76340,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();
 }
@@ -76868,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();
 }
@@ -77700,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();
 }
@@ -79690,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();
 }
@@ -80289,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();
 }
@@ -81329,773 +81446,184 @@ 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();
 }
 
-SWIGINTERN PyObject *_wrap_new_HomogeneousMaterial__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_IDetector2D_clone(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  HomogeneousMaterial *result = 0 ;
+  IDetector2D *arg1 = (IDetector2D *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  IDetector2D *result = 0 ;
   
-  if (!PyArg_ParseTuple(args,(char *)":new_HomogeneousMaterial")) SWIG_fail;
-  result = (HomogeneousMaterial *)new HomogeneousMaterial();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_HomogeneousMaterial, SWIG_POINTER_NEW |  0 );
+  if (!PyArg_ParseTuple(args,(char *)"O:IDetector2D_clone",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IDetector2D, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IDetector2D_clone" "', argument " "1"" of type '" "IDetector2D const *""'"); 
+  }
+  arg1 = reinterpret_cast< IDetector2D * >(argp1);
+  result = (IDetector2D *)((IDetector2D const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IDetector2D, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_HomogeneousMaterial__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_IDetector2D(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  std::string *arg1 = 0 ;
-  complex_t arg2 ;
-  kvector_t arg3 ;
-  int res1 = SWIG_OLDOBJ ;
-  std::complex< double > val2 ;
-  int ecode2 = 0 ;
-  void *argp3 ;
-  int res3 = 0 ;
+  IDetector2D *arg1 = (IDetector2D *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
   PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  PyObject * obj2 = 0 ;
-  HomogeneousMaterial *result = 0 ;
   
-  if (!PyArg_ParseTuple(args,(char *)"OOO:new_HomogeneousMaterial",&obj0,&obj1,&obj2)) SWIG_fail;
-  {
-    std::string *ptr = (std::string *)0;
-    res1 = SWIG_AsPtr_std_string(obj0, &ptr);
-    if (!SWIG_IsOK(res1)) {
-      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_HomogeneousMaterial" "', argument " "1"" of type '" "std::string const &""'"); 
-    }
-    if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_HomogeneousMaterial" "', argument " "1"" of type '" "std::string const &""'"); 
-    }
-    arg1 = ptr;
-  }
-  ecode2 = SWIG_AsVal_std_complex_Sl_double_Sg_(obj1, &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_HomogeneousMaterial" "', argument " "2"" of type '" "complex_t""'");
-  } 
-  arg2 = static_cast< complex_t >(val2);
-  {
-    res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_BasicVector3DT_double_t,  0  | 0);
-    if (!SWIG_IsOK(res3)) {
-      SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "new_HomogeneousMaterial" "', argument " "3"" of type '" "kvector_t""'"); 
-    }  
-    if (!argp3) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_HomogeneousMaterial" "', argument " "3"" of type '" "kvector_t""'");
-    } else {
-      kvector_t * temp = reinterpret_cast< kvector_t * >(argp3);
-      arg3 = *temp;
-      if (SWIG_IsNewObj(res3)) delete temp;
-    }
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_IDetector2D",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IDetector2D, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_IDetector2D" "', argument " "1"" of type '" "IDetector2D *""'"); 
   }
-  result = (HomogeneousMaterial *)new HomogeneousMaterial((std::string const &)*arg1,arg2,arg3);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_HomogeneousMaterial, SWIG_POINTER_NEW |  0 );
-  if (SWIG_IsNewObj(res1)) delete arg1;
+  arg1 = reinterpret_cast< IDetector2D * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
   return resultobj;
 fail:
-  if (SWIG_IsNewObj(res1)) delete arg1;
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_HomogeneousMaterial__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_IDetector2D_init(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  std::string *arg1 = 0 ;
-  complex_t arg2 ;
-  int res1 = SWIG_OLDOBJ ;
-  std::complex< double > val2 ;
-  int ecode2 = 0 ;
+  IDetector2D *arg1 = (IDetector2D *) 0 ;
+  Beam *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
   PyObject * obj0 = 0 ;
   PyObject * obj1 = 0 ;
-  HomogeneousMaterial *result = 0 ;
   
-  if (!PyArg_ParseTuple(args,(char *)"OO:new_HomogeneousMaterial",&obj0,&obj1)) SWIG_fail;
-  {
-    std::string *ptr = (std::string *)0;
-    res1 = SWIG_AsPtr_std_string(obj0, &ptr);
-    if (!SWIG_IsOK(res1)) {
-      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_HomogeneousMaterial" "', argument " "1"" of type '" "std::string const &""'"); 
-    }
-    if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_HomogeneousMaterial" "', argument " "1"" of type '" "std::string const &""'"); 
-    }
-    arg1 = ptr;
+  if (!PyArg_ParseTuple(args,(char *)"OO:IDetector2D_init",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IDetector2D, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IDetector2D_init" "', argument " "1"" of type '" "IDetector2D *""'"); 
   }
-  ecode2 = SWIG_AsVal_std_complex_Sl_double_Sg_(obj1, &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_HomogeneousMaterial" "', argument " "2"" of type '" "complex_t""'");
-  } 
-  arg2 = static_cast< complex_t >(val2);
-  result = (HomogeneousMaterial *)new HomogeneousMaterial((std::string const &)*arg1,arg2);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_HomogeneousMaterial, SWIG_POINTER_NEW |  0 );
-  if (SWIG_IsNewObj(res1)) delete arg1;
+  arg1 = reinterpret_cast< IDetector2D * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_Beam,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IDetector2D_init" "', argument " "2"" of type '" "Beam const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "IDetector2D_init" "', argument " "2"" of type '" "Beam const &""'"); 
+  }
+  arg2 = reinterpret_cast< Beam * >(argp2);
+  (arg1)->init((Beam const &)*arg2);
+  resultobj = SWIG_Py_Void();
   return resultobj;
 fail:
-  if (SWIG_IsNewObj(res1)) delete arg1;
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_HomogeneousMaterial__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_IDetector2D_addAxis(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  std::string *arg1 = 0 ;
-  double arg2 ;
-  double arg3 ;
-  kvector_t arg4 ;
-  int res1 = SWIG_OLDOBJ ;
-  double val2 ;
-  int ecode2 = 0 ;
-  double val3 ;
-  int ecode3 = 0 ;
-  void *argp4 ;
-  int res4 = 0 ;
+  IDetector2D *arg1 = (IDetector2D *) 0 ;
+  IAxis *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
   PyObject * obj0 = 0 ;
   PyObject * obj1 = 0 ;
-  PyObject * obj2 = 0 ;
-  PyObject * obj3 = 0 ;
-  HomogeneousMaterial *result = 0 ;
   
-  if (!PyArg_ParseTuple(args,(char *)"OOOO:new_HomogeneousMaterial",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
-  {
-    std::string *ptr = (std::string *)0;
-    res1 = SWIG_AsPtr_std_string(obj0, &ptr);
-    if (!SWIG_IsOK(res1)) {
-      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_HomogeneousMaterial" "', argument " "1"" of type '" "std::string const &""'"); 
-    }
-    if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_HomogeneousMaterial" "', argument " "1"" of type '" "std::string const &""'"); 
-    }
-    arg1 = ptr;
+  if (!PyArg_ParseTuple(args,(char *)"OO:IDetector2D_addAxis",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IDetector2D, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IDetector2D_addAxis" "', argument " "1"" of type '" "IDetector2D *""'"); 
   }
-  ecode2 = SWIG_AsVal_double(obj1, &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_HomogeneousMaterial" "', argument " "2"" of type '" "double""'");
-  } 
-  arg2 = static_cast< double >(val2);
-  ecode3 = SWIG_AsVal_double(obj2, &val3);
-  if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_HomogeneousMaterial" "', argument " "3"" of type '" "double""'");
-  } 
-  arg3 = static_cast< double >(val3);
-  {
-    res4 = SWIG_ConvertPtr(obj3, &argp4, SWIGTYPE_p_BasicVector3DT_double_t,  0  | 0);
-    if (!SWIG_IsOK(res4)) {
-      SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "new_HomogeneousMaterial" "', argument " "4"" of type '" "kvector_t""'"); 
-    }  
-    if (!argp4) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_HomogeneousMaterial" "', argument " "4"" of type '" "kvector_t""'");
-    } else {
-      kvector_t * temp = reinterpret_cast< kvector_t * >(argp4);
-      arg4 = *temp;
-      if (SWIG_IsNewObj(res4)) delete temp;
-    }
+  arg1 = reinterpret_cast< IDetector2D * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_IAxis,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IDetector2D_addAxis" "', argument " "2"" of type '" "IAxis const &""'"); 
   }
-  result = (HomogeneousMaterial *)new HomogeneousMaterial((std::string const &)*arg1,arg2,arg3,arg4);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_HomogeneousMaterial, SWIG_POINTER_NEW |  0 );
-  if (SWIG_IsNewObj(res1)) delete arg1;
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "IDetector2D_addAxis" "', argument " "2"" of type '" "IAxis const &""'"); 
+  }
+  arg2 = reinterpret_cast< IAxis * >(argp2);
+  (arg1)->addAxis((IAxis const &)*arg2);
+  resultobj = SWIG_Py_Void();
   return resultobj;
 fail:
-  if (SWIG_IsNewObj(res1)) delete arg1;
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_HomogeneousMaterial__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_IDetector2D_getAxis(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  std::string *arg1 = 0 ;
-  double arg2 ;
-  double arg3 ;
-  int res1 = SWIG_OLDOBJ ;
-  double val2 ;
+  IDetector2D *arg1 = (IDetector2D *) 0 ;
+  size_t arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  size_t val2 ;
   int ecode2 = 0 ;
-  double val3 ;
-  int ecode3 = 0 ;
   PyObject * obj0 = 0 ;
   PyObject * obj1 = 0 ;
-  PyObject * obj2 = 0 ;
-  HomogeneousMaterial *result = 0 ;
+  IAxis *result = 0 ;
   
-  if (!PyArg_ParseTuple(args,(char *)"OOO:new_HomogeneousMaterial",&obj0,&obj1,&obj2)) SWIG_fail;
-  {
-    std::string *ptr = (std::string *)0;
-    res1 = SWIG_AsPtr_std_string(obj0, &ptr);
-    if (!SWIG_IsOK(res1)) {
-      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_HomogeneousMaterial" "', argument " "1"" of type '" "std::string const &""'"); 
-    }
-    if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_HomogeneousMaterial" "', argument " "1"" of type '" "std::string const &""'"); 
-    }
-    arg1 = ptr;
+  if (!PyArg_ParseTuple(args,(char *)"OO:IDetector2D_getAxis",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IDetector2D, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IDetector2D_getAxis" "', argument " "1"" of type '" "IDetector2D const *""'"); 
   }
-  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  arg1 = reinterpret_cast< IDetector2D * >(argp1);
+  ecode2 = SWIG_AsVal_size_t(obj1, &val2);
   if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_HomogeneousMaterial" "', argument " "2"" of type '" "double""'");
-  } 
-  arg2 = static_cast< double >(val2);
-  ecode3 = SWIG_AsVal_double(obj2, &val3);
-  if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_HomogeneousMaterial" "', argument " "3"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "IDetector2D_getAxis" "', argument " "2"" of type '" "size_t""'");
   } 
-  arg3 = static_cast< double >(val3);
-  result = (HomogeneousMaterial *)new HomogeneousMaterial((std::string const &)*arg1,arg2,arg3);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_HomogeneousMaterial, SWIG_POINTER_NEW |  0 );
-  if (SWIG_IsNewObj(res1)) delete arg1;
+  arg2 = static_cast< size_t >(val2);
+  result = (IAxis *) &((IDetector2D const *)arg1)->getAxis(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IAxis, 0 |  0 );
   return resultobj;
 fail:
-  if (SWIG_IsNewObj(res1)) delete arg1;
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_HomogeneousMaterial(PyObject *self, PyObject *args) {
-  Py_ssize_t argc;
-  PyObject *argv[5] = {
-    0
-  };
-  Py_ssize_t ii;
+SWIGINTERN PyObject *_wrap_IDetector2D_getDimension(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  IDetector2D *arg1 = (IDetector2D *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  size_t result;
   
-  if (!PyTuple_Check(args)) SWIG_fail;
-  argc = args ? PyObject_Length(args) : 0;
-  for (ii = 0; (ii < 4) && (ii < argc); ii++) {
-    argv[ii] = PyTuple_GET_ITEM(args,ii);
-  }
-  if (argc == 0) {
-    return _wrap_new_HomogeneousMaterial__SWIG_0(self, args);
+  if (!PyArg_ParseTuple(args,(char *)"O:IDetector2D_getDimension",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IDetector2D, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IDetector2D_getDimension" "', argument " "1"" of type '" "IDetector2D const *""'"); 
   }
-  if (argc == 2) {
-    int _v;
-    int res = SWIG_AsPtr_std_string(argv[0], (std::string**)(0));
-    _v = SWIG_CheckState(res);
-    if (_v) {
-      {
-        int res = SWIG_AsVal_std_complex_Sl_double_Sg_(argv[1], NULL);
-        _v = SWIG_CheckState(res);
-      }
-      if (_v) {
-        return _wrap_new_HomogeneousMaterial__SWIG_2(self, args);
-      }
-    }
-  }
-  if (argc == 3) {
-    int _v;
-    int res = SWIG_AsPtr_std_string(argv[0], (std::string**)(0));
-    _v = SWIG_CheckState(res);
-    if (_v) {
-      {
-        int res = SWIG_AsVal_double(argv[1], NULL);
-        _v = SWIG_CheckState(res);
-      }
-      if (_v) {
-        {
-          int res = SWIG_AsVal_double(argv[2], NULL);
-          _v = SWIG_CheckState(res);
-        }
-        if (_v) {
-          return _wrap_new_HomogeneousMaterial__SWIG_4(self, args);
-        }
-      }
-    }
-  }
-  if (argc == 3) {
-    int _v;
-    int res = SWIG_AsPtr_std_string(argv[0], (std::string**)(0));
-    _v = SWIG_CheckState(res);
-    if (_v) {
-      {
-        int res = SWIG_AsVal_std_complex_Sl_double_Sg_(argv[1], NULL);
-        _v = SWIG_CheckState(res);
-      }
-      if (_v) {
-        int res = SWIG_ConvertPtr(argv[2], 0, SWIGTYPE_p_BasicVector3DT_double_t, 0);
-        _v = SWIG_CheckState(res);
-        if (_v) {
-          return _wrap_new_HomogeneousMaterial__SWIG_1(self, args);
-        }
-      }
-    }
-  }
-  if (argc == 4) {
-    int _v;
-    int res = SWIG_AsPtr_std_string(argv[0], (std::string**)(0));
-    _v = SWIG_CheckState(res);
-    if (_v) {
-      {
-        int res = SWIG_AsVal_double(argv[1], NULL);
-        _v = SWIG_CheckState(res);
-      }
-      if (_v) {
-        {
-          int res = SWIG_AsVal_double(argv[2], NULL);
-          _v = SWIG_CheckState(res);
-        }
-        if (_v) {
-          int res = SWIG_ConvertPtr(argv[3], 0, SWIGTYPE_p_BasicVector3DT_double_t, 0);
-          _v = SWIG_CheckState(res);
-          if (_v) {
-            return _wrap_new_HomogeneousMaterial__SWIG_3(self, args);
-          }
-        }
-      }
-    }
-  }
-  
-fail:
-  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'new_HomogeneousMaterial'.\n"
-    "  Possible C/C++ prototypes are:\n"
-    "    HomogeneousMaterial::HomogeneousMaterial()\n"
-    "    HomogeneousMaterial::HomogeneousMaterial(std::string const &,complex_t const,kvector_t)\n"
-    "    HomogeneousMaterial::HomogeneousMaterial(std::string const &,complex_t const)\n"
-    "    HomogeneousMaterial::HomogeneousMaterial(std::string const &,double,double,kvector_t)\n"
-    "    HomogeneousMaterial::HomogeneousMaterial(std::string const &,double,double)\n");
-  return 0;
-}
-
-
-SWIGINTERN PyObject *_wrap_delete_HomogeneousMaterial(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  HomogeneousMaterial *arg1 = (HomogeneousMaterial *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:delete_HomogeneousMaterial",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_HomogeneousMaterial, SWIG_POINTER_DISOWN |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_HomogeneousMaterial" "', argument " "1"" of type '" "HomogeneousMaterial *""'"); 
-  }
-  arg1 = reinterpret_cast< HomogeneousMaterial * >(argp1);
-  delete arg1;
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_HomogeneousMaterial_inverted(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  HomogeneousMaterial *arg1 = (HomogeneousMaterial *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  HomogeneousMaterial result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:HomogeneousMaterial_inverted",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_HomogeneousMaterial, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HomogeneousMaterial_inverted" "', argument " "1"" of type '" "HomogeneousMaterial const *""'"); 
-  }
-  arg1 = reinterpret_cast< HomogeneousMaterial * >(argp1);
-  result = ((HomogeneousMaterial const *)arg1)->inverted();
-  resultobj = SWIG_NewPointerObj((new HomogeneousMaterial(static_cast< const HomogeneousMaterial& >(result))), SWIGTYPE_p_HomogeneousMaterial, SWIG_POINTER_OWN |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_HomogeneousMaterial_refractiveIndex(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  HomogeneousMaterial *arg1 = (HomogeneousMaterial *) 0 ;
-  double arg2 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  double val2 ;
-  int ecode2 = 0 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  complex_t result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:HomogeneousMaterial_refractiveIndex",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_HomogeneousMaterial, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HomogeneousMaterial_refractiveIndex" "', argument " "1"" of type '" "HomogeneousMaterial const *""'"); 
-  }
-  arg1 = reinterpret_cast< HomogeneousMaterial * >(argp1);
-  ecode2 = SWIG_AsVal_double(obj1, &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "HomogeneousMaterial_refractiveIndex" "', argument " "2"" of type '" "double""'");
-  } 
-  arg2 = static_cast< double >(val2);
-  result = ((HomogeneousMaterial const *)arg1)->refractiveIndex(arg2);
-  resultobj = SWIG_From_std_complex_Sl_double_Sg_(static_cast< std::complex<double> >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_HomogeneousMaterial_refractiveIndex2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  HomogeneousMaterial *arg1 = (HomogeneousMaterial *) 0 ;
-  double arg2 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  double val2 ;
-  int ecode2 = 0 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  complex_t result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:HomogeneousMaterial_refractiveIndex2",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_HomogeneousMaterial, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HomogeneousMaterial_refractiveIndex2" "', argument " "1"" of type '" "HomogeneousMaterial const *""'"); 
-  }
-  arg1 = reinterpret_cast< HomogeneousMaterial * >(argp1);
-  ecode2 = SWIG_AsVal_double(obj1, &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "HomogeneousMaterial_refractiveIndex2" "', argument " "2"" of type '" "double""'");
-  } 
-  arg2 = static_cast< double >(val2);
-  result = ((HomogeneousMaterial const *)arg1)->refractiveIndex2(arg2);
-  resultobj = SWIG_From_std_complex_Sl_double_Sg_(static_cast< std::complex<double> >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_HomogeneousMaterial_isScalarMaterial(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  HomogeneousMaterial *arg1 = (HomogeneousMaterial *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  bool result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:HomogeneousMaterial_isScalarMaterial",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_HomogeneousMaterial, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HomogeneousMaterial_isScalarMaterial" "', argument " "1"" of type '" "HomogeneousMaterial const *""'"); 
-  }
-  arg1 = reinterpret_cast< HomogeneousMaterial * >(argp1);
-  result = (bool)((HomogeneousMaterial const *)arg1)->isScalarMaterial();
-  resultobj = SWIG_From_bool(static_cast< bool >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_HomogeneousMaterial_isMagneticMaterial(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  HomogeneousMaterial *arg1 = (HomogeneousMaterial *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  bool result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:HomogeneousMaterial_isMagneticMaterial",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_HomogeneousMaterial, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HomogeneousMaterial_isMagneticMaterial" "', argument " "1"" of type '" "HomogeneousMaterial const *""'"); 
-  }
-  arg1 = reinterpret_cast< HomogeneousMaterial * >(argp1);
-  result = (bool)((HomogeneousMaterial const *)arg1)->isMagneticMaterial();
-  resultobj = SWIG_From_bool(static_cast< bool >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_HomogeneousMaterial_magnetization(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  HomogeneousMaterial *arg1 = (HomogeneousMaterial *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  kvector_t result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:HomogeneousMaterial_magnetization",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_HomogeneousMaterial, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HomogeneousMaterial_magnetization" "', argument " "1"" of type '" "HomogeneousMaterial const *""'"); 
-  }
-  arg1 = reinterpret_cast< HomogeneousMaterial * >(argp1);
-  result = ((HomogeneousMaterial const *)arg1)->magnetization();
-  resultobj = SWIG_NewPointerObj((new kvector_t(static_cast< const kvector_t& >(result))), SWIGTYPE_p_BasicVector3DT_double_t, SWIG_POINTER_OWN |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_HomogeneousMaterial_materialData(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  HomogeneousMaterial *arg1 = (HomogeneousMaterial *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  complex_t result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:HomogeneousMaterial_materialData",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_HomogeneousMaterial, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HomogeneousMaterial_materialData" "', argument " "1"" of type '" "HomogeneousMaterial const *""'"); 
-  }
-  arg1 = reinterpret_cast< HomogeneousMaterial * >(argp1);
-  result = ((HomogeneousMaterial const *)arg1)->materialData();
-  resultobj = SWIG_From_std_complex_Sl_double_Sg_(static_cast< std::complex<double> >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_HomogeneousMaterial_scalarSubtrSLD(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  HomogeneousMaterial *arg1 = (HomogeneousMaterial *) 0 ;
-  WavevectorInfo *arg2 = 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  void *argp2 = 0 ;
-  int res2 = 0 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  complex_t result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:HomogeneousMaterial_scalarSubtrSLD",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_HomogeneousMaterial, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HomogeneousMaterial_scalarSubtrSLD" "', argument " "1"" of type '" "HomogeneousMaterial const *""'"); 
-  }
-  arg1 = reinterpret_cast< HomogeneousMaterial * >(argp1);
-  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_WavevectorInfo,  0  | 0);
-  if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "HomogeneousMaterial_scalarSubtrSLD" "', argument " "2"" of type '" "WavevectorInfo const &""'"); 
-  }
-  if (!argp2) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "HomogeneousMaterial_scalarSubtrSLD" "', argument " "2"" of type '" "WavevectorInfo const &""'"); 
-  }
-  arg2 = reinterpret_cast< WavevectorInfo * >(argp2);
-  result = ((HomogeneousMaterial const *)arg1)->scalarSubtrSLD((WavevectorInfo const &)*arg2);
-  resultobj = SWIG_From_std_complex_Sl_double_Sg_(static_cast< std::complex<double> >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_HomogeneousMaterial_transformedMaterial(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  HomogeneousMaterial *arg1 = (HomogeneousMaterial *) 0 ;
-  Transform3D *arg2 = 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  void *argp2 = 0 ;
-  int res2 = 0 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  HomogeneousMaterial result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:HomogeneousMaterial_transformedMaterial",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_HomogeneousMaterial, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HomogeneousMaterial_transformedMaterial" "', argument " "1"" of type '" "HomogeneousMaterial const *""'"); 
-  }
-  arg1 = reinterpret_cast< HomogeneousMaterial * >(argp1);
-  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_Transform3D,  0  | 0);
-  if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "HomogeneousMaterial_transformedMaterial" "', argument " "2"" of type '" "Transform3D const &""'"); 
-  }
-  if (!argp2) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "HomogeneousMaterial_transformedMaterial" "', argument " "2"" of type '" "Transform3D const &""'"); 
-  }
-  arg2 = reinterpret_cast< Transform3D * >(argp2);
-  result = ((HomogeneousMaterial const *)arg1)->transformedMaterial((Transform3D const &)*arg2);
-  resultobj = SWIG_NewPointerObj((new HomogeneousMaterial(static_cast< const HomogeneousMaterial& >(result))), SWIGTYPE_p_HomogeneousMaterial, SWIG_POINTER_OWN |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *HomogeneousMaterial_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_HomogeneousMaterial, SWIG_NewClientData(obj));
-  return SWIG_Py_Void();
-}
-
-SWIGINTERN PyObject *_wrap_IDetector2D_clone(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  IDetector2D *arg1 = (IDetector2D *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  IDetector2D *result = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:IDetector2D_clone",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IDetector2D, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IDetector2D_clone" "', argument " "1"" of type '" "IDetector2D const *""'"); 
-  }
-  arg1 = reinterpret_cast< IDetector2D * >(argp1);
-  result = (IDetector2D *)((IDetector2D const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IDetector2D, 0 |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_delete_IDetector2D(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  IDetector2D *arg1 = (IDetector2D *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:delete_IDetector2D",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IDetector2D, SWIG_POINTER_DISOWN |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_IDetector2D" "', argument " "1"" of type '" "IDetector2D *""'"); 
-  }
-  arg1 = reinterpret_cast< IDetector2D * >(argp1);
-  delete arg1;
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_IDetector2D_init(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  IDetector2D *arg1 = (IDetector2D *) 0 ;
-  Beam *arg2 = 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  void *argp2 = 0 ;
-  int res2 = 0 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:IDetector2D_init",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IDetector2D, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IDetector2D_init" "', argument " "1"" of type '" "IDetector2D *""'"); 
-  }
-  arg1 = reinterpret_cast< IDetector2D * >(argp1);
-  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_Beam,  0  | 0);
-  if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IDetector2D_init" "', argument " "2"" of type '" "Beam const &""'"); 
-  }
-  if (!argp2) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "IDetector2D_init" "', argument " "2"" of type '" "Beam const &""'"); 
-  }
-  arg2 = reinterpret_cast< Beam * >(argp2);
-  (arg1)->init((Beam const &)*arg2);
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_IDetector2D_addAxis(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  IDetector2D *arg1 = (IDetector2D *) 0 ;
-  IAxis *arg2 = 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  void *argp2 = 0 ;
-  int res2 = 0 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:IDetector2D_addAxis",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IDetector2D, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IDetector2D_addAxis" "', argument " "1"" of type '" "IDetector2D *""'"); 
-  }
-  arg1 = reinterpret_cast< IDetector2D * >(argp1);
-  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_IAxis,  0  | 0);
-  if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IDetector2D_addAxis" "', argument " "2"" of type '" "IAxis const &""'"); 
-  }
-  if (!argp2) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "IDetector2D_addAxis" "', argument " "2"" of type '" "IAxis const &""'"); 
-  }
-  arg2 = reinterpret_cast< IAxis * >(argp2);
-  (arg1)->addAxis((IAxis const &)*arg2);
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_IDetector2D_getAxis(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  IDetector2D *arg1 = (IDetector2D *) 0 ;
-  size_t arg2 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  size_t val2 ;
-  int ecode2 = 0 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  IAxis *result = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:IDetector2D_getAxis",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IDetector2D, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IDetector2D_getAxis" "', argument " "1"" of type '" "IDetector2D const *""'"); 
-  }
-  arg1 = reinterpret_cast< IDetector2D * >(argp1);
-  ecode2 = SWIG_AsVal_size_t(obj1, &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "IDetector2D_getAxis" "', argument " "2"" of type '" "size_t""'");
-  } 
-  arg2 = static_cast< size_t >(val2);
-  result = (IAxis *) &((IDetector2D const *)arg1)->getAxis(arg2);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IAxis, 0 |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_IDetector2D_getDimension(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  IDetector2D *arg1 = (IDetector2D *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  size_t result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:IDetector2D_getDimension",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IDetector2D, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IDetector2D_getDimension" "', argument " "1"" of type '" "IDetector2D const *""'"); 
-  }
-  arg1 = reinterpret_cast< IDetector2D * >(argp1);
-  result = ((IDetector2D const *)arg1)->getDimension();
-  resultobj = SWIG_From_size_t(static_cast< size_t >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_IDetector2D_clear(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  IDetector2D *arg1 = (IDetector2D *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:IDetector2D_clear",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IDetector2D, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IDetector2D_clear" "', argument " "1"" of type '" "IDetector2D *""'"); 
+  arg1 = reinterpret_cast< IDetector2D * >(argp1);
+  result = ((IDetector2D const *)arg1)->getDimension();
+  resultobj = SWIG_From_size_t(static_cast< size_t >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_IDetector2D_clear(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  IDetector2D *arg1 = (IDetector2D *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:IDetector2D_clear",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IDetector2D, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IDetector2D_clear" "', argument " "1"" of type '" "IDetector2D *""'"); 
   }
   arg1 = reinterpret_cast< IDetector2D * >(argp1);
   (arg1)->clear();
@@ -83246,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();
 }
@@ -83326,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();
 }
@@ -83606,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();
 }
@@ -83865,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();
 }
@@ -84035,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();
 }
@@ -84278,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();
 }
@@ -84423,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();
 }
@@ -85129,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();
 }
@@ -85219,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();
 }
@@ -85403,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();
 }
@@ -85633,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();
 }
@@ -85801,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();
 }
@@ -86017,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();
 }
@@ -86247,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();
 }
@@ -86331,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();
 }
@@ -86464,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();
 }
@@ -87704,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();
 }
@@ -88410,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();
 }
@@ -88637,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();
 }
@@ -89091,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();
 }
@@ -89779,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();
 }
@@ -91138,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();
 }
@@ -91270,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();
 }
@@ -91471,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();
 }
@@ -91774,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();
 }
@@ -92022,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();
 }
@@ -92281,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();
 }
@@ -92922,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();
 }
@@ -93139,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();
 }
@@ -93351,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();
 }
@@ -93680,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();
 }
@@ -93949,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();
 }
@@ -94218,14 +93746,14 @@ 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();
 }
 
 SWIGINTERN PyObject *_wrap_new_Layer__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  HomogeneousMaterial arg1 ;
+  SwigValueWrapper< Material > arg1 ;
   double arg2 ;
   void *argp1 ;
   int res1 = 0 ;
@@ -94237,14 +93765,14 @@ SWIGINTERN PyObject *_wrap_new_Layer__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyO
   
   if (!PyArg_ParseTuple(args,(char *)"OO:new_Layer",&obj0,&obj1)) SWIG_fail;
   {
-    res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_HomogeneousMaterial,  0  | 0);
+    res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_Material,  0  | 0);
     if (!SWIG_IsOK(res1)) {
-      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_Layer" "', argument " "1"" of type '" "HomogeneousMaterial""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_Layer" "', argument " "1"" of type '" "Material""'"); 
     }  
     if (!argp1) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_Layer" "', argument " "1"" of type '" "HomogeneousMaterial""'");
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_Layer" "', argument " "1"" of type '" "Material""'");
     } else {
-      HomogeneousMaterial * temp = reinterpret_cast< HomogeneousMaterial * >(argp1);
+      Material * temp = reinterpret_cast< Material * >(argp1);
       arg1 = *temp;
       if (SWIG_IsNewObj(res1)) delete temp;
     }
@@ -94264,7 +93792,7 @@ fail:
 
 SWIGINTERN PyObject *_wrap_new_Layer__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  HomogeneousMaterial arg1 ;
+  SwigValueWrapper< Material > arg1 ;
   void *argp1 ;
   int res1 = 0 ;
   PyObject * obj0 = 0 ;
@@ -94272,14 +93800,14 @@ SWIGINTERN PyObject *_wrap_new_Layer__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyO
   
   if (!PyArg_ParseTuple(args,(char *)"O:new_Layer",&obj0)) SWIG_fail;
   {
-    res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_HomogeneousMaterial,  0  | 0);
+    res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_Material,  0  | 0);
     if (!SWIG_IsOK(res1)) {
-      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_Layer" "', argument " "1"" of type '" "HomogeneousMaterial""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_Layer" "', argument " "1"" of type '" "Material""'"); 
     }  
     if (!argp1) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_Layer" "', argument " "1"" of type '" "HomogeneousMaterial""'");
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_Layer" "', argument " "1"" of type '" "Material""'");
     } else {
-      HomogeneousMaterial * temp = reinterpret_cast< HomogeneousMaterial * >(argp1);
+      Material * temp = reinterpret_cast< Material * >(argp1);
       arg1 = *temp;
       if (SWIG_IsNewObj(res1)) delete temp;
     }
@@ -94306,7 +93834,7 @@ SWIGINTERN PyObject *_wrap_new_Layer(PyObject *self, PyObject *args) {
   }
   if (argc == 1) {
     int _v;
-    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_HomogeneousMaterial, 0);
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_Material, 0);
     _v = SWIG_CheckState(res);
     if (_v) {
       return _wrap_new_Layer__SWIG_1(self, args);
@@ -94314,7 +93842,7 @@ SWIGINTERN PyObject *_wrap_new_Layer(PyObject *self, PyObject *args) {
   }
   if (argc == 2) {
     int _v;
-    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_HomogeneousMaterial, 0);
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_Material, 0);
     _v = SWIG_CheckState(res);
     if (_v) {
       {
@@ -94330,8 +93858,8 @@ SWIGINTERN PyObject *_wrap_new_Layer(PyObject *self, PyObject *args) {
 fail:
   SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'new_Layer'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    Layer::Layer(HomogeneousMaterial,double)\n"
-    "    Layer::Layer(HomogeneousMaterial)\n");
+    "    Layer::Layer(Material,double)\n"
+    "    Layer::Layer(Material)\n");
   return 0;
 }
 
@@ -94489,7 +94017,7 @@ SWIGINTERN PyObject *_wrap_Layer_material(PyObject *SWIGUNUSEDPARM(self), PyObje
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject * obj0 = 0 ;
-  HomogeneousMaterial *result = 0 ;
+  Material *result = 0 ;
   
   if (!PyArg_ParseTuple(args,(char *)"O:Layer_material",&obj0)) SWIG_fail;
   res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_Layer, 0 |  0 );
@@ -94497,8 +94025,8 @@ SWIGINTERN PyObject *_wrap_Layer_material(PyObject *SWIGUNUSEDPARM(self), PyObje
     SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Layer_material" "', argument " "1"" of type '" "Layer const *""'"); 
   }
   arg1 = reinterpret_cast< Layer * >(argp1);
-  result = (HomogeneousMaterial *)((Layer const *)arg1)->material();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_HomogeneousMaterial, 0 |  0 );
+  result = (Material *)((Layer const *)arg1)->material();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Material, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
@@ -94508,7 +94036,7 @@ fail:
 SWIGINTERN PyObject *_wrap_Layer_setMaterial(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   Layer *arg1 = (Layer *) 0 ;
-  HomogeneousMaterial arg2 ;
+  SwigValueWrapper< Material > arg2 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   void *argp2 ;
@@ -94523,14 +94051,14 @@ SWIGINTERN PyObject *_wrap_Layer_setMaterial(PyObject *SWIGUNUSEDPARM(self), PyO
   }
   arg1 = reinterpret_cast< Layer * >(argp1);
   {
-    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_HomogeneousMaterial,  0  | 0);
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_Material,  0  | 0);
     if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Layer_setMaterial" "', argument " "2"" of type '" "HomogeneousMaterial""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Layer_setMaterial" "', argument " "2"" of type '" "Material""'"); 
     }  
     if (!argp2) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Layer_setMaterial" "', argument " "2"" of type '" "HomogeneousMaterial""'");
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Layer_setMaterial" "', argument " "2"" of type '" "Material""'");
     } else {
-      HomogeneousMaterial * temp = reinterpret_cast< HomogeneousMaterial * >(argp2);
+      Material * temp = reinterpret_cast< Material * >(argp2);
       arg2 = *temp;
       if (SWIG_IsNewObj(res2)) delete temp;
     }
@@ -94936,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();
 }
@@ -95350,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();
 }
@@ -95595,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();
 }
@@ -95835,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();
 }
@@ -96075,11 +95603,1126 @@ 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();
 }
 
+SWIGINTERN PyObject *_wrap_new_Material__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  Material *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  Material *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_Material",&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 '" "new_Material" "', argument " "1"" of type '" "Material const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_Material" "', argument " "1"" of type '" "Material const &""'"); 
+  }
+  arg1 = reinterpret_cast< Material * >(argp1);
+  result = (Material *)new Material((Material const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Material, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_Material__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  Material *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  Material *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:new_Material",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_Material,  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_Material" "', argument " "1"" of type '" "Material &&""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_Material" "', argument " "1"" of type '" "Material &&""'"); 
+  }
+  arg1 = reinterpret_cast< Material * >(argp1);
+  result = (Material *)new Material((Material &&)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Material, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_Material(PyObject *self, PyObject *args) {
+  Py_ssize_t argc;
+  PyObject *argv[2] = {
+    0
+  };
+  Py_ssize_t ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = args ? PyObject_Length(args) : 0;
+  for (ii = 0; (ii < 1) && (ii < argc); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_Material, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_Material__SWIG_0(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_Material, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_Material__SWIG_1(self, args);
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'new_Material'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Material::Material(Material const &)\n"
+    "    Material::Material(Material &&)\n");
+  return 0;
+}
+
+
+SWIGINTERN PyObject *_wrap_Material_inverted(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  Material *arg1 = (Material *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  SwigValueWrapper< Material > result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:Material_inverted",&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_inverted" "', argument " "1"" of type '" "Material const *""'"); 
+  }
+  arg1 = reinterpret_cast< Material * >(argp1);
+  result = ((Material const *)arg1)->inverted();
+  resultobj = SWIG_NewPointerObj((new Material(static_cast< const Material& >(result))), SWIGTYPE_p_Material, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_Material_refractiveIndex(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  Material *arg1 = (Material *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  complex_t result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:Material_refractiveIndex",&obj0,&obj1)) 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_refractiveIndex" "', argument " "1"" of type '" "Material const *""'"); 
+  }
+  arg1 = reinterpret_cast< Material * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "Material_refractiveIndex" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = ((Material const *)arg1)->refractiveIndex(arg2);
+  resultobj = SWIG_From_std_complex_Sl_double_Sg_(static_cast< std::complex<double> >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_Material_refractiveIndex2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  Material *arg1 = (Material *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  complex_t result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:Material_refractiveIndex2",&obj0,&obj1)) 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_refractiveIndex2" "', argument " "1"" of type '" "Material const *""'"); 
+  }
+  arg1 = reinterpret_cast< Material * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "Material_refractiveIndex2" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = ((Material const *)arg1)->refractiveIndex2(arg2);
+  resultobj = SWIG_From_std_complex_Sl_double_Sg_(static_cast< std::complex<double> >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_Material_isScalarMaterial(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  Material *arg1 = (Material *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:Material_isScalarMaterial",&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_isScalarMaterial" "', argument " "1"" of type '" "Material const *""'"); 
+  }
+  arg1 = reinterpret_cast< Material * >(argp1);
+  result = (bool)((Material const *)arg1)->isScalarMaterial();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_Material_isMagneticMaterial(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  Material *arg1 = (Material *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:Material_isMagneticMaterial",&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_isMagneticMaterial" "', argument " "1"" of type '" "Material const *""'"); 
+  }
+  arg1 = reinterpret_cast< Material * >(argp1);
+  result = (bool)((Material const *)arg1)->isMagneticMaterial();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_Material_getName(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  Material *arg1 = (Material *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  std::string result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:Material_getName",&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_getName" "', argument " "1"" of type '" "Material const *""'"); 
+  }
+  arg1 = reinterpret_cast< Material * >(argp1);
+  result = ((Material const *)arg1)->getName();
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+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 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  kvector_t result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:Material_magnetization",&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_magnetization" "', argument " "1"" of type '" "Material const *""'"); 
+  }
+  arg1 = reinterpret_cast< Material * >(argp1);
+  result = ((Material const *)arg1)->magnetization();
+  resultobj = SWIG_NewPointerObj((new kvector_t(static_cast< const kvector_t& >(result))), SWIGTYPE_p_BasicVector3DT_double_t, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_Material_materialData(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  Material *arg1 = (Material *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  complex_t result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:Material_materialData",&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_materialData" "', argument " "1"" of type '" "Material const *""'"); 
+  }
+  arg1 = reinterpret_cast< Material * >(argp1);
+  result = ((Material const *)arg1)->materialData();
+  resultobj = SWIG_From_std_complex_Sl_double_Sg_(static_cast< std::complex<double> >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_Material_isEmpty(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  Material *arg1 = (Material *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:Material_isEmpty",&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_isEmpty" "', argument " "1"" of type '" "Material const *""'"); 
+  }
+  arg1 = reinterpret_cast< Material * >(argp1);
+  result = (bool)((Material const *)arg1)->isEmpty();
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_Material_scalarSubtrSLD(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  Material *arg1 = (Material *) 0 ;
+  WavevectorInfo *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  complex_t result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:Material_scalarSubtrSLD",&obj0,&obj1)) 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_scalarSubtrSLD" "', argument " "1"" of type '" "Material const *""'"); 
+  }
+  arg1 = reinterpret_cast< Material * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_WavevectorInfo,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Material_scalarSubtrSLD" "', argument " "2"" of type '" "WavevectorInfo const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Material_scalarSubtrSLD" "', argument " "2"" of type '" "WavevectorInfo const &""'"); 
+  }
+  arg2 = reinterpret_cast< WavevectorInfo * >(argp2);
+  result = ((Material const *)arg1)->scalarSubtrSLD((WavevectorInfo const &)*arg2);
+  resultobj = SWIG_From_std_complex_Sl_double_Sg_(static_cast< std::complex<double> >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_Material_transformedMaterial(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  Material *arg1 = (Material *) 0 ;
+  Transform3D *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  SwigValueWrapper< Material > result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:Material_transformedMaterial",&obj0,&obj1)) 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_transformedMaterial" "', argument " "1"" of type '" "Material const *""'"); 
+  }
+  arg1 = reinterpret_cast< Material * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_Transform3D,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Material_transformedMaterial" "', argument " "2"" of type '" "Transform3D const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Material_transformedMaterial" "', argument " "2"" of type '" "Transform3D const &""'"); 
+  }
+  arg2 = reinterpret_cast< Transform3D * >(argp2);
+  result = ((Material const *)arg1)->transformedMaterial((Transform3D const &)*arg2);
+  resultobj = SWIG_NewPointerObj((new Material(static_cast< const Material& >(result))), SWIGTYPE_p_Material, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_Material(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  Material *arg1 = (Material *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_Material",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_Material, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Material" "', argument " "1"" of type '" "Material *""'"); 
+  }
+  arg1 = reinterpret_cast< Material * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *Material_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_Material, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_HomogeneousMaterial__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  complex_t arg2 ;
+  kvector_t arg3 ;
+  int res1 = SWIG_OLDOBJ ;
+  std::complex< double > val2 ;
+  int ecode2 = 0 ;
+  void *argp3 ;
+  int res3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  SwigValueWrapper< Material > result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:HomogeneousMaterial",&obj0,&obj1,&obj2)) SWIG_fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_AsPtr_std_string(obj0, &ptr);
+    if (!SWIG_IsOK(res1)) {
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HomogeneousMaterial" "', argument " "1"" of type '" "std::string const &""'"); 
+    }
+    if (!ptr) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "HomogeneousMaterial" "', argument " "1"" of type '" "std::string const &""'"); 
+    }
+    arg1 = ptr;
+  }
+  ecode2 = SWIG_AsVal_std_complex_Sl_double_Sg_(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "HomogeneousMaterial" "', argument " "2"" of type '" "complex_t""'");
+  } 
+  arg2 = static_cast< complex_t >(val2);
+  {
+    res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_BasicVector3DT_double_t,  0  | 0);
+    if (!SWIG_IsOK(res3)) {
+      SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "HomogeneousMaterial" "', argument " "3"" of type '" "kvector_t""'"); 
+    }  
+    if (!argp3) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "HomogeneousMaterial" "', argument " "3"" of type '" "kvector_t""'");
+    } else {
+      kvector_t * temp = reinterpret_cast< kvector_t * >(argp3);
+      arg3 = *temp;
+      if (SWIG_IsNewObj(res3)) delete temp;
+    }
+  }
+  result = HomogeneousMaterial((std::string const &)*arg1,arg2,arg3);
+  resultobj = SWIG_NewPointerObj((new Material(static_cast< const Material& >(result))), SWIGTYPE_p_Material, SWIG_POINTER_OWN |  0 );
+  if (SWIG_IsNewObj(res1)) delete arg1;
+  return resultobj;
+fail:
+  if (SWIG_IsNewObj(res1)) delete arg1;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_HomogeneousMaterial__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  complex_t arg2 ;
+  int res1 = SWIG_OLDOBJ ;
+  std::complex< double > val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  SwigValueWrapper< Material > result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:HomogeneousMaterial",&obj0,&obj1)) SWIG_fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_AsPtr_std_string(obj0, &ptr);
+    if (!SWIG_IsOK(res1)) {
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HomogeneousMaterial" "', argument " "1"" of type '" "std::string const &""'"); 
+    }
+    if (!ptr) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "HomogeneousMaterial" "', argument " "1"" of type '" "std::string const &""'"); 
+    }
+    arg1 = ptr;
+  }
+  ecode2 = SWIG_AsVal_std_complex_Sl_double_Sg_(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "HomogeneousMaterial" "', argument " "2"" of type '" "complex_t""'");
+  } 
+  arg2 = static_cast< complex_t >(val2);
+  result = HomogeneousMaterial((std::string const &)*arg1,arg2);
+  resultobj = SWIG_NewPointerObj((new Material(static_cast< const Material& >(result))), SWIGTYPE_p_Material, SWIG_POINTER_OWN |  0 );
+  if (SWIG_IsNewObj(res1)) delete arg1;
+  return resultobj;
+fail:
+  if (SWIG_IsNewObj(res1)) delete arg1;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_HomogeneousMaterial__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  double arg2 ;
+  double arg3 ;
+  kvector_t arg4 ;
+  int res1 = SWIG_OLDOBJ ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  void *argp4 ;
+  int res4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  SwigValueWrapper< Material > result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:HomogeneousMaterial",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_AsPtr_std_string(obj0, &ptr);
+    if (!SWIG_IsOK(res1)) {
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HomogeneousMaterial" "', argument " "1"" of type '" "std::string const &""'"); 
+    }
+    if (!ptr) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "HomogeneousMaterial" "', argument " "1"" of type '" "std::string const &""'"); 
+    }
+    arg1 = ptr;
+  }
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "HomogeneousMaterial" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "HomogeneousMaterial" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  {
+    res4 = SWIG_ConvertPtr(obj3, &argp4, SWIGTYPE_p_BasicVector3DT_double_t,  0  | 0);
+    if (!SWIG_IsOK(res4)) {
+      SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "HomogeneousMaterial" "', argument " "4"" of type '" "kvector_t""'"); 
+    }  
+    if (!argp4) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "HomogeneousMaterial" "', argument " "4"" of type '" "kvector_t""'");
+    } else {
+      kvector_t * temp = reinterpret_cast< kvector_t * >(argp4);
+      arg4 = *temp;
+      if (SWIG_IsNewObj(res4)) delete temp;
+    }
+  }
+  result = HomogeneousMaterial((std::string const &)*arg1,arg2,arg3,arg4);
+  resultobj = SWIG_NewPointerObj((new Material(static_cast< const Material& >(result))), SWIGTYPE_p_Material, SWIG_POINTER_OWN |  0 );
+  if (SWIG_IsNewObj(res1)) delete arg1;
+  return resultobj;
+fail:
+  if (SWIG_IsNewObj(res1)) delete arg1;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_HomogeneousMaterial__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  double arg2 ;
+  double arg3 ;
+  int res1 = SWIG_OLDOBJ ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  SwigValueWrapper< Material > result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:HomogeneousMaterial",&obj0,&obj1,&obj2)) SWIG_fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_AsPtr_std_string(obj0, &ptr);
+    if (!SWIG_IsOK(res1)) {
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HomogeneousMaterial" "', argument " "1"" of type '" "std::string const &""'"); 
+    }
+    if (!ptr) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "HomogeneousMaterial" "', argument " "1"" of type '" "std::string const &""'"); 
+    }
+    arg1 = ptr;
+  }
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "HomogeneousMaterial" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "HomogeneousMaterial" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  result = HomogeneousMaterial((std::string const &)*arg1,arg2,arg3);
+  resultobj = SWIG_NewPointerObj((new Material(static_cast< const Material& >(result))), SWIGTYPE_p_Material, SWIG_POINTER_OWN |  0 );
+  if (SWIG_IsNewObj(res1)) delete arg1;
+  return resultobj;
+fail:
+  if (SWIG_IsNewObj(res1)) delete arg1;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_HomogeneousMaterial__SWIG_4(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  SwigValueWrapper< Material > result;
+  
+  if (!PyArg_ParseTuple(args,(char *)":HomogeneousMaterial")) SWIG_fail;
+  result = HomogeneousMaterial();
+  resultobj = SWIG_NewPointerObj((new Material(static_cast< const Material& >(result))), SWIGTYPE_p_Material, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_HomogeneousMaterial(PyObject *self, PyObject *args) {
+  Py_ssize_t argc;
+  PyObject *argv[5] = {
+    0
+  };
+  Py_ssize_t ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = args ? PyObject_Length(args) : 0;
+  for (ii = 0; (ii < 4) && (ii < argc); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 0) {
+    return _wrap_HomogeneousMaterial__SWIG_4(self, args);
+  }
+  if (argc == 2) {
+    int _v;
+    int res = SWIG_AsPtr_std_string(argv[0], (std::string**)(0));
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_std_complex_Sl_double_Sg_(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_HomogeneousMaterial__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    int res = SWIG_AsPtr_std_string(argv[0], (std::string**)(0));
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_HomogeneousMaterial__SWIG_3(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    int res = SWIG_AsPtr_std_string(argv[0], (std::string**)(0));
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_std_complex_Sl_double_Sg_(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        int res = SWIG_ConvertPtr(argv[2], 0, SWIGTYPE_p_BasicVector3DT_double_t, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_HomogeneousMaterial__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    int res = SWIG_AsPtr_std_string(argv[0], (std::string**)(0));
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          int res = SWIG_ConvertPtr(argv[3], 0, SWIGTYPE_p_BasicVector3DT_double_t, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            return _wrap_HomogeneousMaterial__SWIG_2(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'HomogeneousMaterial'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    HomogeneousMaterial(std::string const &,complex_t,kvector_t)\n"
+    "    HomogeneousMaterial(std::string const &,complex_t)\n"
+    "    HomogeneousMaterial(std::string const &,double,double,kvector_t)\n"
+    "    HomogeneousMaterial(std::string const &,double,double)\n"
+    "    HomogeneousMaterial()\n");
+  return 0;
+}
+
+
+SWIGINTERN PyObject *_wrap_MaterialBySLD__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  double arg2 ;
+  double arg3 ;
+  kvector_t arg4 ;
+  int res1 = SWIG_OLDOBJ ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  void *argp4 ;
+  int res4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  SwigValueWrapper< Material > result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:MaterialBySLD",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_AsPtr_std_string(obj0, &ptr);
+    if (!SWIG_IsOK(res1)) {
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MaterialBySLD" "', argument " "1"" of type '" "std::string const &""'"); 
+    }
+    if (!ptr) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "MaterialBySLD" "', argument " "1"" of type '" "std::string const &""'"); 
+    }
+    arg1 = ptr;
+  }
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MaterialBySLD" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "MaterialBySLD" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  {
+    res4 = SWIG_ConvertPtr(obj3, &argp4, SWIGTYPE_p_BasicVector3DT_double_t,  0  | 0);
+    if (!SWIG_IsOK(res4)) {
+      SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "MaterialBySLD" "', argument " "4"" of type '" "kvector_t""'"); 
+    }  
+    if (!argp4) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "MaterialBySLD" "', argument " "4"" of type '" "kvector_t""'");
+    } else {
+      kvector_t * temp = reinterpret_cast< kvector_t * >(argp4);
+      arg4 = *temp;
+      if (SWIG_IsNewObj(res4)) delete temp;
+    }
+  }
+  result = MaterialBySLD((std::string const &)*arg1,arg2,arg3,arg4);
+  resultobj = SWIG_NewPointerObj((new Material(static_cast< const Material& >(result))), SWIGTYPE_p_Material, SWIG_POINTER_OWN |  0 );
+  if (SWIG_IsNewObj(res1)) delete arg1;
+  return resultobj;
+fail:
+  if (SWIG_IsNewObj(res1)) delete arg1;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MaterialBySLD__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  double arg2 ;
+  double arg3 ;
+  int res1 = SWIG_OLDOBJ ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  SwigValueWrapper< Material > result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:MaterialBySLD",&obj0,&obj1,&obj2)) SWIG_fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_AsPtr_std_string(obj0, &ptr);
+    if (!SWIG_IsOK(res1)) {
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MaterialBySLD" "', argument " "1"" of type '" "std::string const &""'"); 
+    }
+    if (!ptr) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "MaterialBySLD" "', argument " "1"" of type '" "std::string const &""'"); 
+    }
+    arg1 = ptr;
+  }
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MaterialBySLD" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "MaterialBySLD" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  result = MaterialBySLD((std::string const &)*arg1,arg2,arg3);
+  resultobj = SWIG_NewPointerObj((new Material(static_cast< const Material& >(result))), SWIGTYPE_p_Material, SWIG_POINTER_OWN |  0 );
+  if (SWIG_IsNewObj(res1)) delete arg1;
+  return resultobj;
+fail:
+  if (SWIG_IsNewObj(res1)) delete arg1;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MaterialByAbsCX__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  double arg2 ;
+  double arg3 ;
+  kvector_t arg4 ;
+  int res1 = SWIG_OLDOBJ ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  void *argp4 ;
+  int res4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  SwigValueWrapper< Material > result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:MaterialByAbsCX",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_AsPtr_std_string(obj0, &ptr);
+    if (!SWIG_IsOK(res1)) {
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MaterialByAbsCX" "', argument " "1"" of type '" "std::string const &""'"); 
+    }
+    if (!ptr) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "MaterialByAbsCX" "', argument " "1"" of type '" "std::string const &""'"); 
+    }
+    arg1 = ptr;
+  }
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MaterialByAbsCX" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "MaterialByAbsCX" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  {
+    res4 = SWIG_ConvertPtr(obj3, &argp4, SWIGTYPE_p_BasicVector3DT_double_t,  0  | 0);
+    if (!SWIG_IsOK(res4)) {
+      SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "MaterialByAbsCX" "', argument " "4"" of type '" "kvector_t""'"); 
+    }  
+    if (!argp4) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "MaterialByAbsCX" "', argument " "4"" of type '" "kvector_t""'");
+    } else {
+      kvector_t * temp = reinterpret_cast< kvector_t * >(argp4);
+      arg4 = *temp;
+      if (SWIG_IsNewObj(res4)) delete temp;
+    }
+  }
+  result = MaterialByAbsCX((std::string const &)*arg1,arg2,arg3,arg4);
+  resultobj = SWIG_NewPointerObj((new Material(static_cast< const Material& >(result))), SWIGTYPE_p_Material, SWIG_POINTER_OWN |  0 );
+  if (SWIG_IsNewObj(res1)) delete arg1;
+  return resultobj;
+fail:
+  if (SWIG_IsNewObj(res1)) delete arg1;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MaterialByAbsCX__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  double arg2 ;
+  double arg3 ;
+  int res1 = SWIG_OLDOBJ ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  SwigValueWrapper< Material > result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:MaterialByAbsCX",&obj0,&obj1,&obj2)) SWIG_fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_AsPtr_std_string(obj0, &ptr);
+    if (!SWIG_IsOK(res1)) {
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MaterialByAbsCX" "', argument " "1"" of type '" "std::string const &""'"); 
+    }
+    if (!ptr) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "MaterialByAbsCX" "', argument " "1"" of type '" "std::string const &""'"); 
+    }
+    arg1 = ptr;
+  }
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MaterialByAbsCX" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "MaterialByAbsCX" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  result = MaterialByAbsCX((std::string const &)*arg1,arg2,arg3);
+  resultobj = SWIG_NewPointerObj((new Material(static_cast< const Material& >(result))), SWIGTYPE_p_Material, SWIG_POINTER_OWN |  0 );
+  if (SWIG_IsNewObj(res1)) delete arg1;
+  return resultobj;
+fail:
+  if (SWIG_IsNewObj(res1)) delete arg1;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MaterialByAbsCX(PyObject *self, PyObject *args) {
+  Py_ssize_t argc;
+  PyObject *argv[5] = {
+    0
+  };
+  Py_ssize_t ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = args ? PyObject_Length(args) : 0;
+  for (ii = 0; (ii < 4) && (ii < argc); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 3) {
+    int _v;
+    int res = SWIG_AsPtr_std_string(argv[0], (std::string**)(0));
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_MaterialByAbsCX__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    int res = SWIG_AsPtr_std_string(argv[0], (std::string**)(0));
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          int res = SWIG_ConvertPtr(argv[3], 0, SWIGTYPE_p_BasicVector3DT_double_t, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            return _wrap_MaterialByAbsCX__SWIG_0(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'MaterialByAbsCX'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    MaterialByAbsCX(std::string const &,double,double,kvector_t)\n"
+    "    MaterialByAbsCX(std::string const &,double,double)\n");
+  return 0;
+}
+
+
+SWIGINTERN PyObject *_wrap_MaterialBySLD__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  SwigValueWrapper< Material > result;
+  
+  if (!PyArg_ParseTuple(args,(char *)":MaterialBySLD")) SWIG_fail;
+  result = MaterialBySLD();
+  resultobj = SWIG_NewPointerObj((new Material(static_cast< const Material& >(result))), SWIGTYPE_p_Material, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MaterialBySLD(PyObject *self, PyObject *args) {
+  Py_ssize_t argc;
+  PyObject *argv[5] = {
+    0
+  };
+  Py_ssize_t ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = args ? PyObject_Length(args) : 0;
+  for (ii = 0; (ii < 4) && (ii < argc); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 0) {
+    return _wrap_MaterialBySLD__SWIG_2(self, args);
+  }
+  if (argc == 3) {
+    int _v;
+    int res = SWIG_AsPtr_std_string(argv[0], (std::string**)(0));
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_MaterialBySLD__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    int res = SWIG_AsPtr_std_string(argv[0], (std::string**)(0));
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          int res = SWIG_ConvertPtr(argv[3], 0, SWIGTYPE_p_BasicVector3DT_double_t, 0);
+          _v = SWIG_CheckState(res);
+          if (_v) {
+            return _wrap_MaterialBySLD__SWIG_0(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'MaterialBySLD'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    MaterialBySLD(std::string const &,double,double,kvector_t)\n"
+    "    MaterialBySLD(std::string const &,double,double)\n"
+    "    MaterialBySLD()\n");
+  return 0;
+}
+
+
 SWIGINTERN PyObject *_wrap_new_MesoCrystal(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   IClusteredParticles *arg1 = 0 ;
@@ -96255,7 +96898,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();
 }
@@ -96673,7 +97316,7 @@ SWIGINTERN PyObject *_wrap_MultiLayer_layerMaterial(PyObject *SWIGUNUSEDPARM(sel
   int ecode2 = 0 ;
   PyObject * obj0 = 0 ;
   PyObject * obj1 = 0 ;
-  HomogeneousMaterial result;
+  SwigValueWrapper< Material > result;
   
   if (!PyArg_ParseTuple(args,(char *)"OO:MultiLayer_layerMaterial",&obj0,&obj1)) SWIG_fail;
   res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MultiLayer, 0 |  0 );
@@ -96687,7 +97330,7 @@ SWIGINTERN PyObject *_wrap_MultiLayer_layerMaterial(PyObject *SWIGUNUSEDPARM(sel
   } 
   arg2 = static_cast< size_t >(val2);
   result = ((MultiLayer const *)arg1)->layerMaterial(arg2);
-  resultobj = SWIG_NewPointerObj((new HomogeneousMaterial(static_cast< const HomogeneousMaterial& >(result))), SWIGTYPE_p_HomogeneousMaterial, SWIG_POINTER_OWN |  0 );
+  resultobj = SWIG_NewPointerObj((new Material(static_cast< const Material& >(result))), SWIGTYPE_p_Material, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
   return NULL;
@@ -96698,7 +97341,7 @@ SWIGINTERN PyObject *_wrap_MultiLayer_setLayerMaterial(PyObject *SWIGUNUSEDPARM(
   PyObject *resultobj = 0;
   MultiLayer *arg1 = (MultiLayer *) 0 ;
   size_t arg2 ;
-  HomogeneousMaterial arg3 ;
+  SwigValueWrapper< Material > arg3 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   size_t val2 ;
@@ -96721,14 +97364,14 @@ SWIGINTERN PyObject *_wrap_MultiLayer_setLayerMaterial(PyObject *SWIGUNUSEDPARM(
   } 
   arg2 = static_cast< size_t >(val2);
   {
-    res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_HomogeneousMaterial,  0  | 0);
+    res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_Material,  0  | 0);
     if (!SWIG_IsOK(res3)) {
-      SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "MultiLayer_setLayerMaterial" "', argument " "3"" of type '" "HomogeneousMaterial""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "MultiLayer_setLayerMaterial" "', argument " "3"" of type '" "Material""'"); 
     }  
     if (!argp3) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "MultiLayer_setLayerMaterial" "', argument " "3"" of type '" "HomogeneousMaterial""'");
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "MultiLayer_setLayerMaterial" "', argument " "3"" of type '" "Material""'");
     } else {
-      HomogeneousMaterial * temp = reinterpret_cast< HomogeneousMaterial * >(argp3);
+      Material * temp = reinterpret_cast< Material * >(argp3);
       arg3 = *temp;
       if (SWIG_IsNewObj(res3)) delete temp;
     }
@@ -97211,7 +97854,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();
 }
@@ -97687,7 +98330,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();
 }
@@ -99233,7 +99876,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 ;
@@ -99245,18 +99888,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);
@@ -99470,7 +100113,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();
 }
@@ -100197,7 +100840,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();
 }
@@ -100831,7 +101474,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();
 }
@@ -101081,7 +101724,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();
 }
@@ -102997,7 +103640,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();
 }
@@ -103017,7 +103660,7 @@ fail:
 
 SWIGINTERN PyObject *_wrap_new_Particle__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  HomogeneousMaterial arg1 ;
+  SwigValueWrapper< Material > arg1 ;
   void *argp1 ;
   int res1 = 0 ;
   PyObject * obj0 = 0 ;
@@ -103025,14 +103668,14 @@ SWIGINTERN PyObject *_wrap_new_Particle__SWIG_1(PyObject *SWIGUNUSEDPARM(self),
   
   if (!PyArg_ParseTuple(args,(char *)"O:new_Particle",&obj0)) SWIG_fail;
   {
-    res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_HomogeneousMaterial,  0  | 0);
+    res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_Material,  0  | 0);
     if (!SWIG_IsOK(res1)) {
-      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_Particle" "', argument " "1"" of type '" "HomogeneousMaterial""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_Particle" "', argument " "1"" of type '" "Material""'"); 
     }  
     if (!argp1) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_Particle" "', argument " "1"" of type '" "HomogeneousMaterial""'");
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_Particle" "', argument " "1"" of type '" "Material""'");
     } else {
-      HomogeneousMaterial * temp = reinterpret_cast< HomogeneousMaterial * >(argp1);
+      Material * temp = reinterpret_cast< Material * >(argp1);
       arg1 = *temp;
       if (SWIG_IsNewObj(res1)) delete temp;
     }
@@ -103047,7 +103690,7 @@ fail:
 
 SWIGINTERN PyObject *_wrap_new_Particle__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  HomogeneousMaterial arg1 ;
+  SwigValueWrapper< Material > arg1 ;
   IFormFactor *arg2 = 0 ;
   void *argp1 ;
   int res1 = 0 ;
@@ -103059,14 +103702,14 @@ SWIGINTERN PyObject *_wrap_new_Particle__SWIG_2(PyObject *SWIGUNUSEDPARM(self),
   
   if (!PyArg_ParseTuple(args,(char *)"OO:new_Particle",&obj0,&obj1)) SWIG_fail;
   {
-    res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_HomogeneousMaterial,  0  | 0);
+    res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_Material,  0  | 0);
     if (!SWIG_IsOK(res1)) {
-      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_Particle" "', argument " "1"" of type '" "HomogeneousMaterial""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_Particle" "', argument " "1"" of type '" "Material""'"); 
     }  
     if (!argp1) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_Particle" "', argument " "1"" of type '" "HomogeneousMaterial""'");
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_Particle" "', argument " "1"" of type '" "Material""'");
     } else {
-      HomogeneousMaterial * temp = reinterpret_cast< HomogeneousMaterial * >(argp1);
+      Material * temp = reinterpret_cast< Material * >(argp1);
       arg1 = *temp;
       if (SWIG_IsNewObj(res1)) delete temp;
     }
@@ -103089,7 +103732,7 @@ fail:
 
 SWIGINTERN PyObject *_wrap_new_Particle__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  HomogeneousMaterial arg1 ;
+  SwigValueWrapper< Material > arg1 ;
   IFormFactor *arg2 = 0 ;
   IRotation *arg3 = 0 ;
   void *argp1 ;
@@ -103105,14 +103748,14 @@ SWIGINTERN PyObject *_wrap_new_Particle__SWIG_3(PyObject *SWIGUNUSEDPARM(self),
   
   if (!PyArg_ParseTuple(args,(char *)"OOO:new_Particle",&obj0,&obj1,&obj2)) SWIG_fail;
   {
-    res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_HomogeneousMaterial,  0  | 0);
+    res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_Material,  0  | 0);
     if (!SWIG_IsOK(res1)) {
-      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_Particle" "', argument " "1"" of type '" "HomogeneousMaterial""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_Particle" "', argument " "1"" of type '" "Material""'"); 
     }  
     if (!argp1) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_Particle" "', argument " "1"" of type '" "HomogeneousMaterial""'");
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_Particle" "', argument " "1"" of type '" "Material""'");
     } else {
-      HomogeneousMaterial * temp = reinterpret_cast< HomogeneousMaterial * >(argp1);
+      Material * temp = reinterpret_cast< Material * >(argp1);
       arg1 = *temp;
       if (SWIG_IsNewObj(res1)) delete temp;
     }
@@ -103158,7 +103801,7 @@ SWIGINTERN PyObject *_wrap_new_Particle(PyObject *self, PyObject *args) {
   }
   if (argc == 1) {
     int _v;
-    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_HomogeneousMaterial, 0);
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_Material, 0);
     _v = SWIG_CheckState(res);
     if (_v) {
       return _wrap_new_Particle__SWIG_1(self, args);
@@ -103166,7 +103809,7 @@ SWIGINTERN PyObject *_wrap_new_Particle(PyObject *self, PyObject *args) {
   }
   if (argc == 2) {
     int _v;
-    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_HomogeneousMaterial, 0);
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_Material, 0);
     _v = SWIG_CheckState(res);
     if (_v) {
       int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_IFormFactor, 0);
@@ -103178,7 +103821,7 @@ SWIGINTERN PyObject *_wrap_new_Particle(PyObject *self, PyObject *args) {
   }
   if (argc == 3) {
     int _v;
-    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_HomogeneousMaterial, 0);
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_Material, 0);
     _v = SWIG_CheckState(res);
     if (_v) {
       int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_IFormFactor, 0);
@@ -103197,9 +103840,9 @@ fail:
   SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'new_Particle'.\n"
     "  Possible C/C++ prototypes are:\n"
     "    Particle::Particle()\n"
-    "    Particle::Particle(HomogeneousMaterial)\n"
-    "    Particle::Particle(HomogeneousMaterial,IFormFactor const &)\n"
-    "    Particle::Particle(HomogeneousMaterial,IFormFactor const &,IRotation const &)\n");
+    "    Particle::Particle(Material)\n"
+    "    Particle::Particle(Material,IFormFactor const &)\n"
+    "    Particle::Particle(Material,IFormFactor const &,IRotation const &)\n");
   return 0;
 }
 
@@ -103300,7 +103943,7 @@ fail:
 SWIGINTERN PyObject *_wrap_Particle_setMaterial(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   Particle *arg1 = (Particle *) 0 ;
-  HomogeneousMaterial arg2 ;
+  SwigValueWrapper< Material > arg2 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   void *argp2 ;
@@ -103315,14 +103958,14 @@ SWIGINTERN PyObject *_wrap_Particle_setMaterial(PyObject *SWIGUNUSEDPARM(self),
   }
   arg1 = reinterpret_cast< Particle * >(argp1);
   {
-    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_HomogeneousMaterial,  0  | 0);
+    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_Material,  0  | 0);
     if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Particle_setMaterial" "', argument " "2"" of type '" "HomogeneousMaterial""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Particle_setMaterial" "', argument " "2"" of type '" "Material""'"); 
     }  
     if (!argp2) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Particle_setMaterial" "', argument " "2"" of type '" "HomogeneousMaterial""'");
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Particle_setMaterial" "', argument " "2"" of type '" "Material""'");
     } else {
-      HomogeneousMaterial * temp = reinterpret_cast< HomogeneousMaterial * >(argp2);
+      Material * temp = reinterpret_cast< Material * >(argp2);
       arg2 = *temp;
       if (SWIG_IsNewObj(res2)) delete temp;
     }
@@ -103341,7 +103984,7 @@ SWIGINTERN PyObject *_wrap_Particle_material(PyObject *SWIGUNUSEDPARM(self), PyO
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject * obj0 = 0 ;
-  HomogeneousMaterial *result = 0 ;
+  Material *result = 0 ;
   
   if (!PyArg_ParseTuple(args,(char *)"O:Particle_material",&obj0)) SWIG_fail;
   res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_Particle, 0 |  0 );
@@ -103349,8 +103992,8 @@ SWIGINTERN PyObject *_wrap_Particle_material(PyObject *SWIGUNUSEDPARM(self), PyO
     SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Particle_material" "', argument " "1"" of type '" "Particle const *""'"); 
   }
   arg1 = reinterpret_cast< Particle * >(argp1);
-  result = (HomogeneousMaterial *)((Particle const *)arg1)->material();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_HomogeneousMaterial, 0 |  0 );
+  result = (Material *)((Particle const *)arg1)->material();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Material, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
@@ -103435,7 +104078,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();
 }
@@ -103897,7 +104540,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();
 }
@@ -104225,7 +104868,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();
 }
@@ -104468,7 +105111,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();
 }
@@ -105161,7 +105804,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();
 }
@@ -105557,7 +106200,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();
 }
@@ -106397,7 +107040,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();
 }
@@ -106752,7 +107395,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();
 }
@@ -107848,7 +108491,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();
 }
@@ -108113,7 +108756,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();
 }
@@ -108308,7 +108951,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();
 }
@@ -108955,7 +109598,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();
 }
@@ -109204,7 +109847,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();
 }
@@ -109583,7 +110226,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();
 }
@@ -109662,7 +110305,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();
 }
@@ -110031,7 +110674,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();
 }
@@ -110072,7 +110715,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();
 }
@@ -110106,7 +110749,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"},
@@ -110641,7 +111283,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"INamed_getName", _wrap_INamed_getName, METH_VARARGS, (char *)"\n"
 		"INamed_getName(INamed self) -> std::string\n"
 		"\n"
-		"std::string INamed::getName() const \n"
+		"std::string INamed::getName() const\n"
 		"\n"
 		""},
 	 { (char *)"disown_INamed", _wrap_disown_INamed, METH_VARARGS, NULL},
@@ -111402,31 +112044,31 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"WavevectorInfo_transformed", _wrap_WavevectorInfo_transformed, METH_VARARGS, (char *)"\n"
 		"WavevectorInfo_transformed(WavevectorInfo self, Transform3D const & transform) -> WavevectorInfo\n"
 		"\n"
-		"WavevectorInfo WavevectorInfo::transformed(const Transform3D &transform) const \n"
+		"WavevectorInfo WavevectorInfo::transformed(const Transform3D &transform) const\n"
 		"\n"
 		""},
 	 { (char *)"WavevectorInfo_getKi", _wrap_WavevectorInfo_getKi, METH_VARARGS, (char *)"\n"
 		"WavevectorInfo_getKi(WavevectorInfo self) -> cvector_t\n"
 		"\n"
-		"cvector_t WavevectorInfo::getKi() const \n"
+		"cvector_t WavevectorInfo::getKi() const\n"
 		"\n"
 		""},
 	 { (char *)"WavevectorInfo_getKf", _wrap_WavevectorInfo_getKf, METH_VARARGS, (char *)"\n"
 		"WavevectorInfo_getKf(WavevectorInfo self) -> cvector_t\n"
 		"\n"
-		"cvector_t WavevectorInfo::getKf() const \n"
+		"cvector_t WavevectorInfo::getKf() const\n"
 		"\n"
 		""},
 	 { (char *)"WavevectorInfo_getQ", _wrap_WavevectorInfo_getQ, METH_VARARGS, (char *)"\n"
 		"WavevectorInfo_getQ(WavevectorInfo self) -> cvector_t\n"
 		"\n"
-		"cvector_t WavevectorInfo::getQ() const \n"
+		"cvector_t WavevectorInfo::getQ() const\n"
 		"\n"
 		""},
 	 { (char *)"WavevectorInfo_getWavelength", _wrap_WavevectorInfo_getWavelength, METH_VARARGS, (char *)"\n"
 		"WavevectorInfo_getWavelength(WavevectorInfo self) -> double\n"
 		"\n"
-		"double WavevectorInfo::getWavelength() const \n"
+		"double WavevectorInfo::getWavelength() const\n"
 		"\n"
 		""},
 	 { (char *)"delete_WavevectorInfo", _wrap_delete_WavevectorInfo, METH_VARARGS, (char *)"delete_WavevectorInfo(WavevectorInfo self)"},
@@ -111484,23 +112126,28 @@ static PyMethodDef SwigMethods[] = {
 		"Sets the polarization density matrix according to the given Bloch vector. \n"
 		"\n"
 		""},
-	 { (char *)"Beam_getBlochVector", _wrap_Beam_getBlochVector, METH_VARARGS, (char *)"Beam_getBlochVector(Beam self) -> kvector_t"},
+	 { (char *)"Beam_getBlochVector", _wrap_Beam_getBlochVector, METH_VARARGS, (char *)"\n"
+		"Beam_getBlochVector(Beam self) -> kvector_t\n"
+		"\n"
+		"kvector_t Beam::getBlochVector() const\n"
+		"\n"
+		""},
 	 { (char *)"Beam_getWavelength", _wrap_Beam_getWavelength, METH_VARARGS, (char *)"\n"
 		"Beam_getWavelength(Beam self) -> double\n"
 		"\n"
-		"double Beam::getWavelength() const \n"
+		"double Beam::getWavelength() const\n"
 		"\n"
 		""},
 	 { (char *)"Beam_getAlpha", _wrap_Beam_getAlpha, METH_VARARGS, (char *)"\n"
 		"Beam_getAlpha(Beam self) -> double\n"
 		"\n"
-		"double Beam::getAlpha() const \n"
+		"double Beam::getAlpha() const\n"
 		"\n"
 		""},
 	 { (char *)"Beam_getPhi", _wrap_Beam_getPhi, METH_VARARGS, (char *)"\n"
 		"Beam_getPhi(Beam self) -> double\n"
 		"\n"
-		"double Beam::getPhi() const \n"
+		"double Beam::getPhi() const\n"
 		"\n"
 		""},
 	 { (char *)"Beam_accept", _wrap_Beam_accept, METH_VARARGS, (char *)"\n"
@@ -111526,13 +112173,13 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"Bin1D_getMidPoint", _wrap_Bin1D_getMidPoint, METH_VARARGS, (char *)"\n"
 		"Bin1D_getMidPoint(Bin1D self) -> double\n"
 		"\n"
-		"double Bin1D::getMidPoint() const \n"
+		"double Bin1D::getMidPoint() const\n"
 		"\n"
 		""},
 	 { (char *)"Bin1D_getBinSize", _wrap_Bin1D_getBinSize, METH_VARARGS, (char *)"\n"
 		"Bin1D_getBinSize(Bin1D self) -> double\n"
 		"\n"
-		"double Bin1D::getBinSize() const \n"
+		"double Bin1D::getBinSize() const\n"
 		"\n"
 		""},
 	 { (char *)"delete_Bin1D", _wrap_delete_Bin1D, METH_VARARGS, (char *)"delete_Bin1D(Bin1D self)"},
@@ -111558,13 +112205,13 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"Bin1DKVector_getMidPoint", _wrap_Bin1DKVector_getMidPoint, METH_VARARGS, (char *)"\n"
 		"Bin1DKVector_getMidPoint(Bin1DKVector self) -> kvector_t\n"
 		"\n"
-		"kvector_t Bin1DKVector::getMidPoint() const \n"
+		"kvector_t Bin1DKVector::getMidPoint() const\n"
 		"\n"
 		""},
 	 { (char *)"Bin1DKVector_getDelta", _wrap_Bin1DKVector_getDelta, METH_VARARGS, (char *)"\n"
 		"Bin1DKVector_getDelta(Bin1DKVector self) -> kvector_t\n"
 		"\n"
-		"kvector_t Bin1DKVector::getDelta() const \n"
+		"kvector_t Bin1DKVector::getDelta() const\n"
 		"\n"
 		""},
 	 { (char *)"Bin1DKVector_m_q_lower_set", _wrap_Bin1DKVector_m_q_lower_set, METH_VARARGS, (char *)"Bin1DKVector_m_q_lower_set(Bin1DKVector self, kvector_t m_q_lower)"},
@@ -111586,13 +112233,13 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"Bin1DCVector_getMidPoint", _wrap_Bin1DCVector_getMidPoint, METH_VARARGS, (char *)"\n"
 		"Bin1DCVector_getMidPoint(Bin1DCVector self) -> cvector_t\n"
 		"\n"
-		"cvector_t Bin1DCVector::getMidPoint() const \n"
+		"cvector_t Bin1DCVector::getMidPoint() const\n"
 		"\n"
 		""},
 	 { (char *)"Bin1DCVector_getDelta", _wrap_Bin1DCVector_getDelta, METH_VARARGS, (char *)"\n"
 		"Bin1DCVector_getDelta(Bin1DCVector self) -> cvector_t\n"
 		"\n"
-		"cvector_t Bin1DCVector::getDelta() const \n"
+		"cvector_t Bin1DCVector::getDelta() const\n"
 		"\n"
 		""},
 	 { (char *)"Bin1DCVector_m_q_lower_set", _wrap_Bin1DCVector_m_q_lower_set, METH_VARARGS, (char *)"Bin1DCVector_m_q_lower_set(Bin1DCVector self, cvector_t m_q_lower)"},
@@ -111700,13 +112347,13 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"IAxis_getBinCenters", _wrap_IAxis_getBinCenters, METH_VARARGS, (char *)"\n"
 		"IAxis_getBinCenters(IAxis self) -> vdouble1d_t\n"
 		"\n"
-		"std::vector< double > IAxis::getBinCenters() const \n"
+		"std::vector< double > IAxis::getBinCenters() const\n"
 		"\n"
 		""},
 	 { (char *)"IAxis_getBinBoundaries", _wrap_IAxis_getBinBoundaries, METH_VARARGS, (char *)"\n"
 		"IAxis_getBinBoundaries(IAxis self) -> vdouble1d_t\n"
 		"\n"
-		"std::vector< double > IAxis::getBinBoundaries() const \n"
+		"std::vector< double > IAxis::getBinBoundaries() const\n"
 		"\n"
 		""},
 	 { (char *)"IAxis_createClippedAxis", _wrap_IAxis_createClippedAxis, METH_VARARGS, (char *)"\n"
@@ -111803,7 +112450,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"VariableBinAxis_getBinCenter", _wrap_VariableBinAxis_getBinCenter, METH_VARARGS, (char *)"\n"
 		"VariableBinAxis_getBinCenter(VariableBinAxis self, size_t index) -> double\n"
 		"\n"
-		"double VariableBinAxis::getBinCenter(size_t index) const \n"
+		"double VariableBinAxis::getBinCenter(size_t index) const\n"
 		"\n"
 		""},
 	 { (char *)"VariableBinAxis_findClosestIndex", _wrap_VariableBinAxis_findClosestIndex, METH_VARARGS, (char *)"\n"
@@ -111817,13 +112464,13 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"VariableBinAxis_getBinCenters", _wrap_VariableBinAxis_getBinCenters, METH_VARARGS, (char *)"\n"
 		"VariableBinAxis_getBinCenters(VariableBinAxis self) -> vdouble1d_t\n"
 		"\n"
-		"std::vector< double > VariableBinAxis::getBinCenters() const \n"
+		"std::vector< double > VariableBinAxis::getBinCenters() const\n"
 		"\n"
 		""},
 	 { (char *)"VariableBinAxis_getBinBoundaries", _wrap_VariableBinAxis_getBinBoundaries, METH_VARARGS, (char *)"\n"
 		"VariableBinAxis_getBinBoundaries(VariableBinAxis self) -> vdouble1d_t\n"
 		"\n"
-		"std::vector<double> VariableBinAxis::getBinBoundaries() const \n"
+		"std::vector<double> VariableBinAxis::getBinBoundaries() const\n"
 		"\n"
 		""},
 	 { (char *)"VariableBinAxis_createClippedAxis", _wrap_VariableBinAxis_createClippedAxis, METH_VARARGS, (char *)"\n"
@@ -111930,7 +112577,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"CustomBinAxis_getBinCenters", _wrap_CustomBinAxis_getBinCenters, METH_VARARGS, (char *)"\n"
 		"CustomBinAxis_getBinCenters(CustomBinAxis self) -> vdouble1d_t\n"
 		"\n"
-		"std::vector< double > CustomBinAxis::getBinCenters() const \n"
+		"std::vector< double > CustomBinAxis::getBinCenters() const\n"
 		"\n"
 		""},
 	 { (char *)"CustomBinAxis_createClippedAxis", _wrap_CustomBinAxis_createClippedAxis, METH_VARARGS, (char *)"\n"
@@ -111968,17 +112615,17 @@ static PyMethodDef SwigMethods[] = {
 		"\n"
 		""},
 	 { (char *)"ISample_material", _wrap_ISample_material, METH_VARARGS, (char *)"\n"
-		"ISample_material(ISample self) -> HomogeneousMaterial\n"
+		"ISample_material(ISample self) -> Material\n"
 		"\n"
-		"virtual const HomogeneousMaterial* ISample::material() const\n"
+		"virtual const Material* ISample::material() const\n"
 		"\n"
 		"Returns nullptr, unless overwritten to return a specific material. \n"
 		"\n"
 		""},
 	 { (char *)"ISample_containedMaterials", _wrap_ISample_containedMaterials, METH_VARARGS, (char *)"\n"
-		"ISample_containedMaterials(ISample self) -> std::vector< HomogeneousMaterial const *,std::allocator< HomogeneousMaterial const * > >\n"
+		"ISample_containedMaterials(ISample self) -> std::vector< Material const *,std::allocator< Material const * > >\n"
 		"\n"
-		"std::vector< const HomogeneousMaterial * > ISample::containedMaterials() const\n"
+		"std::vector< const Material * > ISample::containedMaterials() const\n"
 		"\n"
 		"Returns set of unique materials contained in this  ISample. \n"
 		"\n"
@@ -112173,7 +112820,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FitStrategyDefault_clone", _wrap_FitStrategyDefault_clone, METH_VARARGS, (char *)"\n"
 		"FitStrategyDefault_clone(FitStrategyDefault self) -> FitStrategyDefault\n"
 		"\n"
-		"FitStrategyDefault * FitStrategyDefault::clone() const \n"
+		"FitStrategyDefault * FitStrategyDefault::clone() const\n"
 		"\n"
 		""},
 	 { (char *)"FitStrategyDefault_execute", _wrap_FitStrategyDefault_execute, METH_VARARGS, (char *)"\n"
@@ -112212,13 +112859,13 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"IntensityFunctionLog_clone", _wrap_IntensityFunctionLog_clone, METH_VARARGS, (char *)"\n"
 		"IntensityFunctionLog_clone(IntensityFunctionLog self) -> IntensityFunctionLog\n"
 		"\n"
-		"virtual IntensityFunctionLog* IntensityFunctionLog::clone() const \n"
+		"virtual IntensityFunctionLog* IntensityFunctionLog::clone() const\n"
 		"\n"
 		""},
 	 { (char *)"IntensityFunctionLog_evaluate", _wrap_IntensityFunctionLog_evaluate, METH_VARARGS, (char *)"\n"
 		"IntensityFunctionLog_evaluate(IntensityFunctionLog self, double value) -> double\n"
 		"\n"
-		"double IntensityFunctionLog::evaluate(double value) const \n"
+		"double IntensityFunctionLog::evaluate(double value) const\n"
 		"\n"
 		""},
 	 { (char *)"new_IntensityFunctionLog", _wrap_new_IntensityFunctionLog, METH_VARARGS, (char *)"\n"
@@ -112241,13 +112888,13 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"IntensityFunctionSqrt_clone", _wrap_IntensityFunctionSqrt_clone, METH_VARARGS, (char *)"\n"
 		"IntensityFunctionSqrt_clone(IntensityFunctionSqrt self) -> IntensityFunctionSqrt\n"
 		"\n"
-		"virtual IntensityFunctionSqrt* IntensityFunctionSqrt::clone() const \n"
+		"virtual IntensityFunctionSqrt* IntensityFunctionSqrt::clone() const\n"
 		"\n"
 		""},
 	 { (char *)"IntensityFunctionSqrt_evaluate", _wrap_IntensityFunctionSqrt_evaluate, METH_VARARGS, (char *)"\n"
 		"IntensityFunctionSqrt_evaluate(IntensityFunctionSqrt self, double value) -> double\n"
 		"\n"
-		"double IntensityFunctionSqrt::evaluate(double value) const \n"
+		"double IntensityFunctionSqrt::evaluate(double value) const\n"
 		"\n"
 		""},
 	 { (char *)"new_IntensityFunctionSqrt", _wrap_new_IntensityFunctionSqrt, METH_VARARGS, (char *)"\n"
@@ -112309,7 +112956,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"IntensityNormalizer_clone", _wrap_IntensityNormalizer_clone, METH_VARARGS, (char *)"\n"
 		"IntensityNormalizer_clone(IntensityNormalizer self) -> IntensityNormalizer\n"
 		"\n"
-		"IntensityNormalizer * IntensityNormalizer::clone() const \n"
+		"IntensityNormalizer * IntensityNormalizer::clone() const\n"
 		"\n"
 		""},
 	 { (char *)"IntensityNormalizer_accept", _wrap_IntensityNormalizer_accept, METH_VARARGS, (char *)"\n"
@@ -112323,7 +112970,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"IntensityNormalizer_createNormalizedData", _wrap_IntensityNormalizer_createNormalizedData, METH_VARARGS, (char *)"\n"
 		"IntensityNormalizer_createNormalizedData(IntensityNormalizer self, IntensityData data) -> IntensityData\n"
 		"\n"
-		"OutputData< double > * IntensityNormalizer::createNormalizedData(const OutputData< double > &data) const \n"
+		"OutputData< double > * IntensityNormalizer::createNormalizedData(const OutputData< double > &data) const\n"
 		"\n"
 		""},
 	 { (char *)"IntensityNormalizer_apply", _wrap_IntensityNormalizer_apply, METH_VARARGS, (char *)"\n"
@@ -112674,7 +113321,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FitObject_getDefaultAxisUnits", _wrap_FitObject_getDefaultAxisUnits, METH_VARARGS, (char *)"\n"
 		"FitObject_getDefaultAxisUnits(FitObject self) -> std::string\n"
 		"\n"
-		"std::string FitObject::getDefaultAxisUnits() const \n"
+		"std::string FitObject::getDefaultAxisUnits() const\n"
 		"\n"
 		""},
 	 { (char *)"FitObject_swigregister", FitObject_swigregister, METH_VARARGS, NULL},
@@ -112706,7 +113353,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FitParameter_clone", _wrap_FitParameter_clone, METH_VARARGS, (char *)"\n"
 		"FitParameter_clone(FitParameter self) -> FitParameter\n"
 		"\n"
-		"FitParameter * FitParameter::clone() const \n"
+		"FitParameter * FitParameter::clone() const\n"
 		"\n"
 		""},
 	 { (char *)"FitParameter_setValue", _wrap_FitParameter_setValue, METH_VARARGS, (char *)"\n"
@@ -112744,7 +113391,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FitParameter_patterns", _wrap_FitParameter_patterns, METH_VARARGS, (char *)"\n"
 		"FitParameter_patterns(FitParameter self) -> vector_string_t\n"
 		"\n"
-		"std::vector< std::string > FitParameter::patterns() const \n"
+		"std::vector< std::string > FitParameter::patterns() const\n"
 		"\n"
 		""},
 	 { (char *)"FitParameter_matchedParameterNames", _wrap_FitParameter_matchedParameterNames, METH_VARARGS, (char *)"\n"
@@ -113018,21 +113665,21 @@ static PyMethodDef SwigMethods[] = {
 		"getRealOutputData(size_t i_item=0) -> IntensityData\n"
 		"FitSuite_getRealOutputData(FitSuite self) -> IntensityData\n"
 		"\n"
-		"const OutputData< double > * FitSuite::getRealOutputData(size_t i_item=0) const \n"
+		"const OutputData< double > * FitSuite::getRealOutputData(size_t i_item=0) const\n"
 		"\n"
 		""},
 	 { (char *)"FitSuite_getSimulationOutputData", _wrap_FitSuite_getSimulationOutputData, METH_VARARGS, (char *)"\n"
 		"getSimulationOutputData(size_t i_item=0) -> IntensityData\n"
 		"FitSuite_getSimulationOutputData(FitSuite self) -> IntensityData\n"
 		"\n"
-		"const OutputData< double > * FitSuite::getSimulationOutputData(size_t i_item=0) const \n"
+		"const OutputData< double > * FitSuite::getSimulationOutputData(size_t i_item=0) const\n"
 		"\n"
 		""},
 	 { (char *)"FitSuite_getChiSquaredOutputData", _wrap_FitSuite_getChiSquaredOutputData, METH_VARARGS, (char *)"\n"
 		"getChiSquaredOutputData(size_t i_item=0) -> IntensityData\n"
 		"FitSuite_getChiSquaredOutputData(FitSuite self) -> IntensityData\n"
 		"\n"
-		"const OutputData< double > * FitSuite::getChiSquaredOutputData(size_t i_item=0) const \n"
+		"const OutputData< double > * FitSuite::getChiSquaredOutputData(size_t i_item=0) const\n"
 		"\n"
 		""},
 	 { (char *)"FitSuite_parametersToString", _wrap_FitSuite_parametersToString, METH_VARARGS, (char *)"\n"
@@ -113201,7 +113848,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FitSuiteObjects_size", _wrap_FitSuiteObjects_size, METH_VARARGS, (char *)"\n"
 		"FitSuiteObjects_size(FitSuiteObjects self) -> size_t\n"
 		"\n"
-		"size_t FitSuiteObjects::size() const \n"
+		"size_t FitSuiteObjects::size() const\n"
 		"\n"
 		""},
 	 { (char *)"FitSuiteObjects_begin", _wrap_FitSuiteObjects_begin, METH_VARARGS, (char *)"\n"
@@ -113228,7 +113875,7 @@ static PyMethodDef SwigMethods[] = {
 		"getDefaultAxesUnits(size_t i_item=0) -> std::string\n"
 		"FitSuiteObjects_getDefaultAxesUnits(FitSuiteObjects self) -> std::string\n"
 		"\n"
-		"std::string FitSuiteObjects::getDefaultAxesUnits(size_t i_item=0) const \n"
+		"std::string FitSuiteObjects::getDefaultAxesUnits(size_t i_item=0) const\n"
 		"\n"
 		""},
 	 { (char *)"FitSuiteObjects_swigregister", FitSuiteObjects_swigregister, METH_VARARGS, NULL},
@@ -113316,8 +113963,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"
@@ -113365,7 +114010,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"AdjustMinimizerStrategy_clone", _wrap_AdjustMinimizerStrategy_clone, METH_VARARGS, (char *)"\n"
 		"AdjustMinimizerStrategy_clone(AdjustMinimizerStrategy self) -> AdjustMinimizerStrategy\n"
 		"\n"
-		"AdjustMinimizerStrategy * AdjustMinimizerStrategy::clone() const \n"
+		"AdjustMinimizerStrategy * AdjustMinimizerStrategy::clone() const\n"
 		"\n"
 		""},
 	 { (char *)"AdjustMinimizerStrategy_setMinimizer", _wrap_AdjustMinimizerStrategy_setMinimizer, METH_VARARGS, (char *)"\n"
@@ -113626,7 +114271,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"Crystal_clone", _wrap_Crystal_clone, METH_VARARGS, (char *)"\n"
 		"Crystal_clone(Crystal self) -> Crystal\n"
 		"\n"
-		"Crystal * Crystal::clone() const overridefinal\n"
+		"Crystal * Crystal::clone() const override final\n"
 		"\n"
 		"Returns a clone of this  ISample object. \n"
 		"\n"
@@ -113634,7 +114279,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"Crystal_accept", _wrap_Crystal_accept, METH_VARARGS, (char *)"\n"
 		"Crystal_accept(Crystal self, INodeVisitor visitor)\n"
 		"\n"
-		"void Crystal::accept(INodeVisitor *visitor) const overridefinal\n"
+		"void Crystal::accept(INodeVisitor *visitor) const override final\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -113642,7 +114287,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"Crystal_createTotalFormFactor", _wrap_Crystal_createTotalFormFactor, METH_VARARGS, (char *)"\n"
 		"Crystal_createTotalFormFactor(Crystal self, IFormFactor meso_crystal_form_factor, IRotation p_rotation, kvector_t translation) -> IFormFactor\n"
 		"\n"
-		"IFormFactor * Crystal::createTotalFormFactor(const IFormFactor &meso_crystal_form_factor, const IRotation *p_rotation, const kvector_t &translation) const overridefinal\n"
+		"IFormFactor * Crystal::createTotalFormFactor(const IFormFactor &meso_crystal_form_factor, const IRotation *p_rotation, const kvector_t &translation) const override final\n"
 		"\n"
 		"Creates a total form factor for the mesocrystal with a specific shape and content The bulk content of the mesocrystal is encapsulated by the  IClusteredParticles object itself \n"
 		"\n"
@@ -113650,7 +114295,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"Crystal_homogeneousRegions", _wrap_Crystal_homogeneousRegions, METH_VARARGS, (char *)"\n"
 		"Crystal_homogeneousRegions(Crystal self) -> std::vector< HomogeneousRegion,std::allocator< HomogeneousRegion > >\n"
 		"\n"
-		"std::vector< HomogeneousRegion > Crystal::homogeneousRegions() const overridefinal\n"
+		"std::vector< HomogeneousRegion > Crystal::homogeneousRegions() const override final\n"
 		"\n"
 		"Creates region information with volumetric densities instead of absolute volume These densities need to be multiplied by the total mesocrystal volume \n"
 		"\n"
@@ -113659,7 +114304,7 @@ static PyMethodDef SwigMethods[] = {
 		"transformedLattice(IRotation p_rotation=None) -> Lattice\n"
 		"Crystal_transformedLattice(Crystal self) -> Lattice\n"
 		"\n"
-		"Lattice Crystal::transformedLattice(const IRotation *p_rotation=nullptr) const \n"
+		"Lattice Crystal::transformedLattice(const IRotation *p_rotation=nullptr) const\n"
 		"\n"
 		""},
 	 { (char *)"Crystal_setDWFactor", _wrap_Crystal_setDWFactor, METH_VARARGS, (char *)"\n"
@@ -113671,7 +114316,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"Crystal_getChildren", _wrap_Crystal_getChildren, METH_VARARGS, (char *)"\n"
 		"Crystal_getChildren(Crystal self) -> swig_dummy_type_const_inode_vector\n"
 		"\n"
-		"std::vector< const INode * > Crystal::getChildren() const overridefinal\n"
+		"std::vector< const INode * > Crystal::getChildren() const override final\n"
 		"\n"
 		"Returns a vector of children (const). \n"
 		"\n"
@@ -113795,13 +114440,13 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"DistributionGate_getMin", _wrap_DistributionGate_getMin, METH_VARARGS, (char *)"\n"
 		"DistributionGate_getMin(DistributionGate self) -> double\n"
 		"\n"
-		"double DistributionGate::getMin() const \n"
+		"double DistributionGate::getMin() const\n"
 		"\n"
 		""},
 	 { (char *)"DistributionGate_getMax", _wrap_DistributionGate_getMax, METH_VARARGS, (char *)"\n"
 		"DistributionGate_getMax(DistributionGate self) -> double\n"
 		"\n"
-		"double DistributionGate::getMax() const \n"
+		"double DistributionGate::getMax() const\n"
 		"\n"
 		""},
 	 { (char *)"DistributionGate_equidistantPoints", _wrap_DistributionGate_equidistantPoints, METH_VARARGS, (char *)"\n"
@@ -113868,7 +114513,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"DistributionLorentz_getHWHM", _wrap_DistributionLorentz_getHWHM, METH_VARARGS, (char *)"\n"
 		"DistributionLorentz_getHWHM(DistributionLorentz self) -> double\n"
 		"\n"
-		"double DistributionLorentz::getHWHM() const \n"
+		"double DistributionLorentz::getHWHM() const\n"
 		"\n"
 		""},
 	 { (char *)"DistributionLorentz_equidistantPoints", _wrap_DistributionLorentz_equidistantPoints, METH_VARARGS, (char *)"\n"
@@ -113935,7 +114580,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"DistributionGaussian_getStdDev", _wrap_DistributionGaussian_getStdDev, METH_VARARGS, (char *)"\n"
 		"DistributionGaussian_getStdDev(DistributionGaussian self) -> double\n"
 		"\n"
-		"double DistributionGaussian::getStdDev() const \n"
+		"double DistributionGaussian::getStdDev() const\n"
 		"\n"
 		""},
 	 { (char *)"DistributionGaussian_equidistantPoints", _wrap_DistributionGaussian_equidistantPoints, METH_VARARGS, (char *)"\n"
@@ -114002,13 +114647,13 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"DistributionLogNormal_getMedian", _wrap_DistributionLogNormal_getMedian, METH_VARARGS, (char *)"\n"
 		"DistributionLogNormal_getMedian(DistributionLogNormal self) -> double\n"
 		"\n"
-		"double DistributionLogNormal::getMedian() const \n"
+		"double DistributionLogNormal::getMedian() const\n"
 		"\n"
 		""},
 	 { (char *)"DistributionLogNormal_getScalePar", _wrap_DistributionLogNormal_getScalePar, METH_VARARGS, (char *)"\n"
 		"DistributionLogNormal_getScalePar(DistributionLogNormal self) -> double\n"
 		"\n"
-		"double DistributionLogNormal::getScalePar() const \n"
+		"double DistributionLogNormal::getScalePar() const\n"
 		"\n"
 		""},
 	 { (char *)"DistributionLogNormal_equidistantPoints", _wrap_DistributionLogNormal_equidistantPoints, METH_VARARGS, (char *)"\n"
@@ -114083,7 +114728,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"DistributionCosine_getSigma", _wrap_DistributionCosine_getSigma, METH_VARARGS, (char *)"\n"
 		"DistributionCosine_getSigma(DistributionCosine self) -> double\n"
 		"\n"
-		"double DistributionCosine::getSigma() const \n"
+		"double DistributionCosine::getSigma() const\n"
 		"\n"
 		""},
 	 { (char *)"DistributionCosine_equidistantPoints", _wrap_DistributionCosine_equidistantPoints, METH_VARARGS, (char *)"\n"
@@ -114150,19 +114795,19 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"DistributionTrapezoid_getLeftWidth", _wrap_DistributionTrapezoid_getLeftWidth, METH_VARARGS, (char *)"\n"
 		"DistributionTrapezoid_getLeftWidth(DistributionTrapezoid self) -> double\n"
 		"\n"
-		"double DistributionTrapezoid::getLeftWidth() const \n"
+		"double DistributionTrapezoid::getLeftWidth() const\n"
 		"\n"
 		""},
 	 { (char *)"DistributionTrapezoid_getMiddleWidth", _wrap_DistributionTrapezoid_getMiddleWidth, METH_VARARGS, (char *)"\n"
 		"DistributionTrapezoid_getMiddleWidth(DistributionTrapezoid self) -> double\n"
 		"\n"
-		"double DistributionTrapezoid::getMiddleWidth() const \n"
+		"double DistributionTrapezoid::getMiddleWidth() const\n"
 		"\n"
 		""},
 	 { (char *)"DistributionTrapezoid_getRightWidth", _wrap_DistributionTrapezoid_getRightWidth, METH_VARARGS, (char *)"\n"
 		"DistributionTrapezoid_getRightWidth(DistributionTrapezoid self) -> double\n"
 		"\n"
-		"double DistributionTrapezoid::getRightWidth() const \n"
+		"double DistributionTrapezoid::getRightWidth() const\n"
 		"\n"
 		""},
 	 { (char *)"DistributionTrapezoid_equidistantPoints", _wrap_DistributionTrapezoid_equidistantPoints, METH_VARARGS, (char *)"\n"
@@ -114225,19 +114870,19 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"DetectorMask_isMasked", _wrap_DetectorMask_isMasked, METH_VARARGS, (char *)"\n"
 		"DetectorMask_isMasked(DetectorMask self, size_t index) -> bool\n"
 		"\n"
-		"bool DetectorMask::isMasked(size_t index) const \n"
+		"bool DetectorMask::isMasked(size_t index) const\n"
 		"\n"
 		""},
 	 { (char *)"DetectorMask_getMaskData", _wrap_DetectorMask_getMaskData, METH_VARARGS, (char *)"\n"
 		"DetectorMask_getMaskData(DetectorMask self) -> OutputData< bool > const *\n"
 		"\n"
-		"const OutputData<bool>* DetectorMask::getMaskData() const \n"
+		"const OutputData<bool>* DetectorMask::getMaskData() const\n"
 		"\n"
 		""},
 	 { (char *)"DetectorMask_createHistogram", _wrap_DetectorMask_createHistogram, METH_VARARGS, (char *)"\n"
 		"DetectorMask_createHistogram(DetectorMask self) -> Histogram2D\n"
 		"\n"
-		"Histogram2D * DetectorMask::createHistogram() const \n"
+		"Histogram2D * DetectorMask::createHistogram() const\n"
 		"\n"
 		""},
 	 { (char *)"DetectorMask_removeMasks", _wrap_DetectorMask_removeMasks, METH_VARARGS, (char *)"\n"
@@ -114259,19 +114904,19 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"DetectorMask_numberOfMaskedChannels", _wrap_DetectorMask_numberOfMaskedChannels, METH_VARARGS, (char *)"\n"
 		"DetectorMask_numberOfMaskedChannels(DetectorMask self) -> int\n"
 		"\n"
-		"int DetectorMask::numberOfMaskedChannels() const \n"
+		"int DetectorMask::numberOfMaskedChannels() const\n"
 		"\n"
 		""},
 	 { (char *)"DetectorMask_numberOfMasks", _wrap_DetectorMask_numberOfMasks, METH_VARARGS, (char *)"\n"
 		"DetectorMask_numberOfMasks(DetectorMask self) -> size_t\n"
 		"\n"
-		"size_t DetectorMask::numberOfMasks() const \n"
+		"size_t DetectorMask::numberOfMasks() const\n"
 		"\n"
 		""},
 	 { (char *)"DetectorMask_getMaskShape", _wrap_DetectorMask_getMaskShape, METH_VARARGS, (char *)"\n"
 		"DetectorMask_getMaskShape(DetectorMask self, size_t mask_index, bool & mask_value) -> IShape2D\n"
 		"\n"
-		"const IShape2D * DetectorMask::getMaskShape(size_t mask_index, bool &mask_value) const \n"
+		"const IShape2D * DetectorMask::getMaskShape(size_t mask_index, bool &mask_value) const\n"
 		"\n"
 		""},
 	 { (char *)"delete_DetectorMask", _wrap_delete_DetectorMask, METH_VARARGS, (char *)"delete_DetectorMask(DetectorMask self)"},
@@ -114304,7 +114949,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"Ellipse_clone", _wrap_Ellipse_clone, METH_VARARGS, (char *)"\n"
 		"Ellipse_clone(Ellipse self) -> Ellipse\n"
 		"\n"
-		"Ellipse* Ellipse::clone() const \n"
+		"Ellipse* Ellipse::clone() const\n"
 		"\n"
 		""},
 	 { (char *)"Ellipse_contains", _wrap_Ellipse_contains, METH_VARARGS, (char *)"\n"
@@ -114319,31 +114964,31 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"Ellipse_getCenterX", _wrap_Ellipse_getCenterX, METH_VARARGS, (char *)"\n"
 		"Ellipse_getCenterX(Ellipse self) -> double\n"
 		"\n"
-		"double Ellipse::getCenterX() const \n"
+		"double Ellipse::getCenterX() const\n"
 		"\n"
 		""},
 	 { (char *)"Ellipse_getCenterY", _wrap_Ellipse_getCenterY, METH_VARARGS, (char *)"\n"
 		"Ellipse_getCenterY(Ellipse self) -> double\n"
 		"\n"
-		"double Ellipse::getCenterY() const \n"
+		"double Ellipse::getCenterY() const\n"
 		"\n"
 		""},
 	 { (char *)"Ellipse_getRadiusX", _wrap_Ellipse_getRadiusX, METH_VARARGS, (char *)"\n"
 		"Ellipse_getRadiusX(Ellipse self) -> double\n"
 		"\n"
-		"double Ellipse::getRadiusX() const \n"
+		"double Ellipse::getRadiusX() const\n"
 		"\n"
 		""},
 	 { (char *)"Ellipse_getRadiusY", _wrap_Ellipse_getRadiusY, METH_VARARGS, (char *)"\n"
 		"Ellipse_getRadiusY(Ellipse self) -> double\n"
 		"\n"
-		"double Ellipse::getRadiusY() const \n"
+		"double Ellipse::getRadiusY() const\n"
 		"\n"
 		""},
 	 { (char *)"Ellipse_getTheta", _wrap_Ellipse_getTheta, METH_VARARGS, (char *)"\n"
 		"Ellipse_getTheta(Ellipse self) -> double\n"
 		"\n"
-		"double Ellipse::getTheta() const \n"
+		"double Ellipse::getTheta() const\n"
 		"\n"
 		""},
 	 { (char *)"delete_Ellipse", _wrap_delete_Ellipse, METH_VARARGS, (char *)"delete_Ellipse(Ellipse self)"},
@@ -114363,7 +115008,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"IFTDecayFunction1D_decayLength", _wrap_IFTDecayFunction1D_decayLength, METH_VARARGS, (char *)"\n"
 		"IFTDecayFunction1D_decayLength(IFTDecayFunction1D self) -> double\n"
 		"\n"
-		"double IFTDecayFunction1D::decayLength() const \n"
+		"double IFTDecayFunction1D::decayLength() const\n"
 		"\n"
 		""},
 	 { (char *)"delete_IFTDecayFunction1D", _wrap_delete_IFTDecayFunction1D, METH_VARARGS, (char *)"delete_IFTDecayFunction1D(IFTDecayFunction1D self)"},
@@ -114377,7 +115022,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FTDecayFunction1DCauchy_clone", _wrap_FTDecayFunction1DCauchy_clone, METH_VARARGS, (char *)"\n"
 		"FTDecayFunction1DCauchy_clone(FTDecayFunction1DCauchy self) -> FTDecayFunction1DCauchy\n"
 		"\n"
-		"FTDecayFunction1DCauchy * FTDecayFunction1DCauchy::clone() const \n"
+		"FTDecayFunction1DCauchy * FTDecayFunction1DCauchy::clone() const\n"
 		"\n"
 		""},
 	 { (char *)"FTDecayFunction1DCauchy_accept", _wrap_FTDecayFunction1DCauchy_accept, METH_VARARGS, (char *)"\n"
@@ -114405,7 +115050,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FTDecayFunction1DGauss_clone", _wrap_FTDecayFunction1DGauss_clone, METH_VARARGS, (char *)"\n"
 		"FTDecayFunction1DGauss_clone(FTDecayFunction1DGauss self) -> FTDecayFunction1DGauss\n"
 		"\n"
-		"FTDecayFunction1DGauss * FTDecayFunction1DGauss::clone() const \n"
+		"FTDecayFunction1DGauss * FTDecayFunction1DGauss::clone() const\n"
 		"\n"
 		""},
 	 { (char *)"FTDecayFunction1DGauss_accept", _wrap_FTDecayFunction1DGauss_accept, METH_VARARGS, (char *)"\n"
@@ -114433,7 +115078,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FTDecayFunction1DTriangle_clone", _wrap_FTDecayFunction1DTriangle_clone, METH_VARARGS, (char *)"\n"
 		"FTDecayFunction1DTriangle_clone(FTDecayFunction1DTriangle self) -> FTDecayFunction1DTriangle\n"
 		"\n"
-		"FTDecayFunction1DTriangle * FTDecayFunction1DTriangle::clone() const \n"
+		"FTDecayFunction1DTriangle * FTDecayFunction1DTriangle::clone() const\n"
 		"\n"
 		""},
 	 { (char *)"FTDecayFunction1DTriangle_accept", _wrap_FTDecayFunction1DTriangle_accept, METH_VARARGS, (char *)"\n"
@@ -114472,7 +115117,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FTDecayFunction1DVoigt_clone", _wrap_FTDecayFunction1DVoigt_clone, METH_VARARGS, (char *)"\n"
 		"FTDecayFunction1DVoigt_clone(FTDecayFunction1DVoigt self) -> FTDecayFunction1DVoigt\n"
 		"\n"
-		"FTDecayFunction1DVoigt * FTDecayFunction1DVoigt::clone() const \n"
+		"FTDecayFunction1DVoigt * FTDecayFunction1DVoigt::clone() const\n"
 		"\n"
 		""},
 	 { (char *)"FTDecayFunction1DVoigt_accept", _wrap_FTDecayFunction1DVoigt_accept, METH_VARARGS, (char *)"\n"
@@ -114492,7 +115137,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FTDecayFunction1DVoigt_eEta", _wrap_FTDecayFunction1DVoigt_eEta, METH_VARARGS, (char *)"\n"
 		"FTDecayFunction1DVoigt_eEta(FTDecayFunction1DVoigt self) -> double\n"
 		"\n"
-		"double FTDecayFunction1DVoigt::eEta() const \n"
+		"double FTDecayFunction1DVoigt::eEta() const\n"
 		"\n"
 		""},
 	 { (char *)"delete_FTDecayFunction1DVoigt", _wrap_delete_FTDecayFunction1DVoigt, METH_VARARGS, (char *)"delete_FTDecayFunction1DVoigt(FTDecayFunction1DVoigt self)"},
@@ -114571,7 +115216,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FTDecayFunction2DCauchy_clone", _wrap_FTDecayFunction2DCauchy_clone, METH_VARARGS, (char *)"\n"
 		"FTDecayFunction2DCauchy_clone(FTDecayFunction2DCauchy self) -> FTDecayFunction2DCauchy\n"
 		"\n"
-		"FTDecayFunction2DCauchy * FTDecayFunction2DCauchy::clone() const \n"
+		"FTDecayFunction2DCauchy * FTDecayFunction2DCauchy::clone() const\n"
 		"\n"
 		""},
 	 { (char *)"FTDecayFunction2DCauchy_accept", _wrap_FTDecayFunction2DCauchy_accept, METH_VARARGS, (char *)"\n"
@@ -114602,7 +115247,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FTDecayFunction2DGauss_clone", _wrap_FTDecayFunction2DGauss_clone, METH_VARARGS, (char *)"\n"
 		"FTDecayFunction2DGauss_clone(FTDecayFunction2DGauss self) -> FTDecayFunction2DGauss\n"
 		"\n"
-		"FTDecayFunction2DGauss * FTDecayFunction2DGauss::clone() const \n"
+		"FTDecayFunction2DGauss * FTDecayFunction2DGauss::clone() const\n"
 		"\n"
 		""},
 	 { (char *)"FTDecayFunction2DGauss_accept", _wrap_FTDecayFunction2DGauss_accept, METH_VARARGS, (char *)"\n"
@@ -114650,7 +115295,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FTDecayFunction2DVoigt_clone", _wrap_FTDecayFunction2DVoigt_clone, METH_VARARGS, (char *)"\n"
 		"FTDecayFunction2DVoigt_clone(FTDecayFunction2DVoigt self) -> FTDecayFunction2DVoigt\n"
 		"\n"
-		"FTDecayFunction2DVoigt * FTDecayFunction2DVoigt::clone() const \n"
+		"FTDecayFunction2DVoigt * FTDecayFunction2DVoigt::clone() const\n"
 		"\n"
 		""},
 	 { (char *)"FTDecayFunction2DVoigt_accept", _wrap_FTDecayFunction2DVoigt_accept, METH_VARARGS, (char *)"\n"
@@ -114672,7 +115317,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FTDecayFunction2DVoigt_eta", _wrap_FTDecayFunction2DVoigt_eta, METH_VARARGS, (char *)"\n"
 		"FTDecayFunction2DVoigt_eta(FTDecayFunction2DVoigt self) -> double\n"
 		"\n"
-		"double FTDecayFunction2DVoigt::eta() const \n"
+		"double FTDecayFunction2DVoigt::eta() const\n"
 		"\n"
 		""},
 	 { (char *)"delete_FTDecayFunction2DVoigt", _wrap_delete_FTDecayFunction2DVoigt, METH_VARARGS, (char *)"delete_FTDecayFunction2DVoigt(FTDecayFunction2DVoigt self)"},
@@ -114700,7 +115345,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"IFTDistribution1D_omega", _wrap_IFTDistribution1D_omega, METH_VARARGS, (char *)"\n"
 		"IFTDistribution1D_omega(IFTDistribution1D self) -> double\n"
 		"\n"
-		"double IFTDistribution1D::omega() const \n"
+		"double IFTDistribution1D::omega() const\n"
 		"\n"
 		""},
 	 { (char *)"delete_IFTDistribution1D", _wrap_delete_IFTDistribution1D, METH_VARARGS, (char *)"delete_IFTDistribution1D(IFTDistribution1D self)"},
@@ -114897,7 +115542,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FTDistribution1DVoigt_eta", _wrap_FTDistribution1DVoigt_eta, METH_VARARGS, (char *)"\n"
 		"FTDistribution1DVoigt_eta(FTDistribution1DVoigt self) -> double\n"
 		"\n"
-		"double FTDistribution1DVoigt::eta() const \n"
+		"double FTDistribution1DVoigt::eta() const\n"
 		"\n"
 		""},
 	 { (char *)"delete_FTDistribution1DVoigt", _wrap_delete_FTDistribution1DVoigt, METH_VARARGS, (char *)"delete_FTDistribution1DVoigt(FTDistribution1DVoigt self)"},
@@ -114917,25 +115562,25 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"IFTDistribution2D_gamma", _wrap_IFTDistribution2D_gamma, METH_VARARGS, (char *)"\n"
 		"IFTDistribution2D_gamma(IFTDistribution2D self) -> double\n"
 		"\n"
-		"double IFTDistribution2D::gamma() const \n"
+		"double IFTDistribution2D::gamma() const\n"
 		"\n"
 		""},
 	 { (char *)"IFTDistribution2D_delta", _wrap_IFTDistribution2D_delta, METH_VARARGS, (char *)"\n"
 		"IFTDistribution2D_delta(IFTDistribution2D self) -> double\n"
 		"\n"
-		"double IFTDistribution2D::delta() const \n"
+		"double IFTDistribution2D::delta() const\n"
 		"\n"
 		""},
 	 { (char *)"IFTDistribution2D_omegaX", _wrap_IFTDistribution2D_omegaX, METH_VARARGS, (char *)"\n"
 		"IFTDistribution2D_omegaX(IFTDistribution2D self) -> double\n"
 		"\n"
-		"double IFTDistribution2D::omegaX() const \n"
+		"double IFTDistribution2D::omegaX() const\n"
 		"\n"
 		""},
 	 { (char *)"IFTDistribution2D_omegaY", _wrap_IFTDistribution2D_omegaY, METH_VARARGS, (char *)"\n"
 		"IFTDistribution2D_omegaY(IFTDistribution2D self) -> double\n"
 		"\n"
-		"double IFTDistribution2D::omegaY() const \n"
+		"double IFTDistribution2D::omegaY() const\n"
 		"\n"
 		""},
 	 { (char *)"IFTDistribution2D_evaluate", _wrap_IFTDistribution2D_evaluate, METH_VARARGS, (char *)"\n"
@@ -115121,7 +115766,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FTDistribution2DVoigt_eta", _wrap_FTDistribution2DVoigt_eta, METH_VARARGS, (char *)"\n"
 		"FTDistribution2DVoigt_eta(FTDistribution2DVoigt self) -> double\n"
 		"\n"
-		"double FTDistribution2DVoigt::eta() const \n"
+		"double FTDistribution2DVoigt::eta() const\n"
 		"\n"
 		""},
 	 { (char *)"delete_FTDistribution2DVoigt", _wrap_delete_FTDistribution2DVoigt, METH_VARARGS, (char *)"delete_FTDistribution2DVoigt(FTDistribution2DVoigt self)"},
@@ -115198,7 +115843,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FixedBinAxis_getBinCenter", _wrap_FixedBinAxis_getBinCenter, METH_VARARGS, (char *)"\n"
 		"FixedBinAxis_getBinCenter(FixedBinAxis self, size_t index) -> double\n"
 		"\n"
-		"double FixedBinAxis::getBinCenter(size_t index) const \n"
+		"double FixedBinAxis::getBinCenter(size_t index) const\n"
 		"\n"
 		""},
 	 { (char *)"FixedBinAxis_findClosestIndex", _wrap_FixedBinAxis_findClosestIndex, METH_VARARGS, (char *)"\n"
@@ -115212,13 +115857,13 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FixedBinAxis_getBinCenters", _wrap_FixedBinAxis_getBinCenters, METH_VARARGS, (char *)"\n"
 		"FixedBinAxis_getBinCenters(FixedBinAxis self) -> vdouble1d_t\n"
 		"\n"
-		"std::vector< double > FixedBinAxis::getBinCenters() const \n"
+		"std::vector< double > FixedBinAxis::getBinCenters() const\n"
 		"\n"
 		""},
 	 { (char *)"FixedBinAxis_getBinBoundaries", _wrap_FixedBinAxis_getBinBoundaries, METH_VARARGS, (char *)"\n"
 		"FixedBinAxis_getBinBoundaries(FixedBinAxis self) -> vdouble1d_t\n"
 		"\n"
-		"std::vector< double > FixedBinAxis::getBinBoundaries() const \n"
+		"std::vector< double > FixedBinAxis::getBinBoundaries() const\n"
 		"\n"
 		""},
 	 { (char *)"FixedBinAxis_createClippedAxis", _wrap_FixedBinAxis_createClippedAxis, METH_VARARGS, (char *)"\n"
@@ -115260,11 +115905,11 @@ static PyMethodDef SwigMethods[] = {
 		"\n"
 		""},
 	 { (char *)"IFormFactor_setAmbientMaterial", _wrap_IFormFactor_setAmbientMaterial, METH_VARARGS, (char *)"\n"
-		"IFormFactor_setAmbientMaterial(IFormFactor self, HomogeneousMaterial arg0)\n"
+		"IFormFactor_setAmbientMaterial(IFormFactor self, Material arg0)\n"
 		"\n"
-		"virtual void IFormFactor::setAmbientMaterial(HomogeneousMaterial)=0\n"
+		"virtual void IFormFactor::setAmbientMaterial(Material)=0\n"
 		"\n"
-		"Passes the refractive index of the ambient material in which this particle is embedded. \n"
+		"Passes the material in which this particle is embedded. \n"
 		"\n"
 		""},
 	 { (char *)"IFormFactor_evaluate", _wrap_IFormFactor_evaluate, METH_VARARGS, (char *)"\n"
@@ -115414,11 +116059,11 @@ static PyMethodDef SwigMethods[] = {
 		"\n"
 		""},
 	 { (char *)"IFormFactorBorn_setAmbientMaterial", _wrap_IFormFactorBorn_setAmbientMaterial, METH_VARARGS, (char *)"\n"
-		"IFormFactorBorn_setAmbientMaterial(IFormFactorBorn self, HomogeneousMaterial arg0)\n"
+		"IFormFactorBorn_setAmbientMaterial(IFormFactorBorn self, Material arg0)\n"
 		"\n"
-		"void IFormFactorBorn::setAmbientMaterial(HomogeneousMaterial) override\n"
+		"void IFormFactorBorn::setAmbientMaterial(Material) override\n"
 		"\n"
-		"Passes the refractive index of the ambient material in which this particle is embedded. \n"
+		"Passes the material in which this particle is embedded. \n"
 		"\n"
 		""},
 	 { (char *)"IFormFactorBorn_evaluate", _wrap_IFormFactorBorn_evaluate, METH_VARARGS, (char *)"\n"
@@ -115498,11 +116143,11 @@ static PyMethodDef SwigMethods[] = {
 		"\n"
 		""},
 	 { (char *)"IFormFactorDecorator_setAmbientMaterial", _wrap_IFormFactorDecorator_setAmbientMaterial, METH_VARARGS, (char *)"\n"
-		"IFormFactorDecorator_setAmbientMaterial(IFormFactorDecorator self, HomogeneousMaterial material)\n"
+		"IFormFactorDecorator_setAmbientMaterial(IFormFactorDecorator self, Material material)\n"
 		"\n"
-		"void IFormFactorDecorator::setAmbientMaterial(HomogeneousMaterial material) override\n"
+		"void IFormFactorDecorator::setAmbientMaterial(Material material) override\n"
 		"\n"
-		"Passes the refractive index of the ambient material in which this particle is embedded. \n"
+		"Passes the material in which this particle is embedded. \n"
 		"\n"
 		""},
 	 { (char *)"IFormFactorDecorator_volume", _wrap_IFormFactorDecorator_volume, METH_VARARGS, (char *)"\n"
@@ -115579,25 +116224,25 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"PolyhedralEdge_E", _wrap_PolyhedralEdge_E, METH_VARARGS, (char *)"\n"
 		"PolyhedralEdge_E(PolyhedralEdge self) -> kvector_t\n"
 		"\n"
-		"kvector_t PolyhedralEdge::E() const \n"
+		"kvector_t PolyhedralEdge::E() const\n"
 		"\n"
 		""},
 	 { (char *)"PolyhedralEdge_R", _wrap_PolyhedralEdge_R, METH_VARARGS, (char *)"\n"
 		"PolyhedralEdge_R(PolyhedralEdge self) -> kvector_t\n"
 		"\n"
-		"kvector_t PolyhedralEdge::R() const \n"
+		"kvector_t PolyhedralEdge::R() const\n"
 		"\n"
 		""},
 	 { (char *)"PolyhedralEdge_qE", _wrap_PolyhedralEdge_qE, METH_VARARGS, (char *)"\n"
 		"PolyhedralEdge_qE(PolyhedralEdge self, cvector_t q) -> complex_t\n"
 		"\n"
-		"complex_t PolyhedralEdge::qE(cvector_t q) const \n"
+		"complex_t PolyhedralEdge::qE(cvector_t q) const\n"
 		"\n"
 		""},
 	 { (char *)"PolyhedralEdge_qR", _wrap_PolyhedralEdge_qR, METH_VARARGS, (char *)"\n"
 		"PolyhedralEdge_qR(PolyhedralEdge self, cvector_t q) -> complex_t\n"
 		"\n"
-		"complex_t PolyhedralEdge::qR(cvector_t q) const \n"
+		"complex_t PolyhedralEdge::qR(cvector_t q) const\n"
 		"\n"
 		""},
 	 { (char *)"PolyhedralEdge_contrib", _wrap_PolyhedralEdge_contrib, METH_VARARGS, (char *)"\n"
@@ -115633,25 +116278,25 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"PolyhedralFace_area", _wrap_PolyhedralFace_area, METH_VARARGS, (char *)"\n"
 		"PolyhedralFace_area(PolyhedralFace self) -> double\n"
 		"\n"
-		"double PolyhedralFace::area() const \n"
+		"double PolyhedralFace::area() const\n"
 		"\n"
 		""},
 	 { (char *)"PolyhedralFace_center", _wrap_PolyhedralFace_center, METH_VARARGS, (char *)"\n"
 		"PolyhedralFace_center(PolyhedralFace self) -> kvector_t\n"
 		"\n"
-		"kvector_t PolyhedralFace::center() const \n"
+		"kvector_t PolyhedralFace::center() const\n"
 		"\n"
 		""},
 	 { (char *)"PolyhedralFace_pyramidalVolume", _wrap_PolyhedralFace_pyramidalVolume, METH_VARARGS, (char *)"\n"
 		"PolyhedralFace_pyramidalVolume(PolyhedralFace self) -> double\n"
 		"\n"
-		"double PolyhedralFace::pyramidalVolume() const \n"
+		"double PolyhedralFace::pyramidalVolume() const\n"
 		"\n"
 		""},
 	 { (char *)"PolyhedralFace_radius3d", _wrap_PolyhedralFace_radius3d, METH_VARARGS, (char *)"\n"
 		"PolyhedralFace_radius3d(PolyhedralFace self) -> double\n"
 		"\n"
-		"double PolyhedralFace::radius3d() const \n"
+		"double PolyhedralFace::radius3d() const\n"
 		"\n"
 		""},
 	 { (char *)"PolyhedralFace_normalProjectionConj", _wrap_PolyhedralFace_normalProjectionConj, METH_VARARGS, (char *)"\n"
@@ -115699,7 +116344,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorPolyhedron_evaluate_for_q", _wrap_FormFactorPolyhedron_evaluate_for_q, METH_VARARGS, (char *)"\n"
 		"FormFactorPolyhedron_evaluate_for_q(FormFactorPolyhedron self, cvector_t q) -> complex_t\n"
 		"\n"
-		"complex_t FormFactorPolyhedron::evaluate_for_q(cvector_t q) const overridefinal\n"
+		"complex_t FormFactorPolyhedron::evaluate_for_q(cvector_t q) const override final\n"
 		"\n"
 		"Returns the form factor F(q) of this polyhedron, respecting the offset z_origin. \n"
 		"\n"
@@ -115715,7 +116360,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorPolyhedron_volume", _wrap_FormFactorPolyhedron_volume, METH_VARARGS, (char *)"\n"
 		"FormFactorPolyhedron_volume(FormFactorPolyhedron self) -> double\n"
 		"\n"
-		"double FormFactorPolyhedron::volume() const overridefinal\n"
+		"double FormFactorPolyhedron::volume() const override final\n"
 		"\n"
 		"Returns the total volume of the particle of this form factor's shape. \n"
 		"\n"
@@ -115723,7 +116368,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorPolyhedron_radialExtension", _wrap_FormFactorPolyhedron_radialExtension, METH_VARARGS, (char *)"\n"
 		"FormFactorPolyhedron_radialExtension(FormFactorPolyhedron self) -> double\n"
 		"\n"
-		"double FormFactorPolyhedron::radialExtension() const overridefinal\n"
+		"double FormFactorPolyhedron::radialExtension() const override final\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
@@ -115741,7 +116386,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorPolygonalPrism_evaluate_for_q", _wrap_FormFactorPolygonalPrism_evaluate_for_q, METH_VARARGS, (char *)"\n"
 		"FormFactorPolygonalPrism_evaluate_for_q(FormFactorPolygonalPrism self, cvector_t q) -> complex_t\n"
 		"\n"
-		"complex_t FormFactorPolygonalPrism::evaluate_for_q(cvector_t q) const overridefinal\n"
+		"complex_t FormFactorPolygonalPrism::evaluate_for_q(cvector_t q) const override final\n"
 		"\n"
 		"Returns the form factor F(q) of this polyhedron, respecting the offset height/2. \n"
 		"\n"
@@ -115749,7 +116394,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorPolygonalPrism_volume", _wrap_FormFactorPolygonalPrism_volume, METH_VARARGS, (char *)"\n"
 		"FormFactorPolygonalPrism_volume(FormFactorPolygonalPrism self) -> double\n"
 		"\n"
-		"double FormFactorPolygonalPrism::volume() const overridefinal\n"
+		"double FormFactorPolygonalPrism::volume() const override final\n"
 		"\n"
 		"Returns the volume of this prism. \n"
 		"\n"
@@ -115757,13 +116402,13 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorPolygonalPrism_getHeight", _wrap_FormFactorPolygonalPrism_getHeight, METH_VARARGS, (char *)"\n"
 		"FormFactorPolygonalPrism_getHeight(FormFactorPolygonalPrism self) -> double\n"
 		"\n"
-		"double FormFactorPolygonalPrism::getHeight() const \n"
+		"double FormFactorPolygonalPrism::getHeight() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorPolygonalPrism_radialExtension", _wrap_FormFactorPolygonalPrism_radialExtension, METH_VARARGS, (char *)"\n"
 		"FormFactorPolygonalPrism_radialExtension(FormFactorPolygonalPrism self) -> double\n"
 		"\n"
-		"double FormFactorPolygonalPrism::radialExtension() const overridefinal\n"
+		"double FormFactorPolygonalPrism::radialExtension() const override final\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
@@ -115773,7 +116418,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorPolygonalSurface_evaluate_for_q", _wrap_FormFactorPolygonalSurface_evaluate_for_q, METH_VARARGS, (char *)"\n"
 		"FormFactorPolygonalSurface_evaluate_for_q(FormFactorPolygonalSurface self, cvector_t q) -> complex_t\n"
 		"\n"
-		"complex_t FormFactorPolygonalSurface::evaluate_for_q(cvector_t q) const overridefinal\n"
+		"complex_t FormFactorPolygonalSurface::evaluate_for_q(cvector_t q) const override final\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -115789,7 +116434,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorPolygonalSurface_radialExtension", _wrap_FormFactorPolygonalSurface_radialExtension, METH_VARARGS, (char *)"\n"
 		"FormFactorPolygonalSurface_radialExtension(FormFactorPolygonalSurface self) -> double\n"
 		"\n"
-		"double FormFactorPolygonalSurface::radialExtension() const overridefinal\n"
+		"double FormFactorPolygonalSurface::radialExtension() const override final\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
@@ -115822,7 +116467,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorAnisoPyramid_clone", _wrap_FormFactorAnisoPyramid_clone, METH_VARARGS, (char *)"\n"
 		"FormFactorAnisoPyramid_clone(FormFactorAnisoPyramid self) -> FormFactorAnisoPyramid\n"
 		"\n"
-		"FormFactorAnisoPyramid* FormFactorAnisoPyramid::clone() const overridefinal\n"
+		"FormFactorAnisoPyramid* FormFactorAnisoPyramid::clone() const override final\n"
 		"\n"
 		"Returns a clone of this  ISample object. \n"
 		"\n"
@@ -115830,7 +116475,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorAnisoPyramid_accept", _wrap_FormFactorAnisoPyramid_accept, METH_VARARGS, (char *)"\n"
 		"FormFactorAnisoPyramid_accept(FormFactorAnisoPyramid self, INodeVisitor visitor)\n"
 		"\n"
-		"void FormFactorAnisoPyramid::accept(INodeVisitor *visitor) const overridefinal\n"
+		"void FormFactorAnisoPyramid::accept(INodeVisitor *visitor) const override final\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -115838,25 +116483,25 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorAnisoPyramid_getLength", _wrap_FormFactorAnisoPyramid_getLength, METH_VARARGS, (char *)"\n"
 		"FormFactorAnisoPyramid_getLength(FormFactorAnisoPyramid self) -> double\n"
 		"\n"
-		"double FormFactorAnisoPyramid::getLength() const \n"
+		"double FormFactorAnisoPyramid::getLength() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorAnisoPyramid_getWidth", _wrap_FormFactorAnisoPyramid_getWidth, METH_VARARGS, (char *)"\n"
 		"FormFactorAnisoPyramid_getWidth(FormFactorAnisoPyramid self) -> double\n"
 		"\n"
-		"double FormFactorAnisoPyramid::getWidth() const \n"
+		"double FormFactorAnisoPyramid::getWidth() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorAnisoPyramid_getHeight", _wrap_FormFactorAnisoPyramid_getHeight, METH_VARARGS, (char *)"\n"
 		"FormFactorAnisoPyramid_getHeight(FormFactorAnisoPyramid self) -> double\n"
 		"\n"
-		"double FormFactorAnisoPyramid::getHeight() const \n"
+		"double FormFactorAnisoPyramid::getHeight() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorAnisoPyramid_getAlpha", _wrap_FormFactorAnisoPyramid_getAlpha, METH_VARARGS, (char *)"\n"
 		"FormFactorAnisoPyramid_getAlpha(FormFactorAnisoPyramid self) -> double\n"
 		"\n"
-		"double FormFactorAnisoPyramid::getAlpha() const \n"
+		"double FormFactorAnisoPyramid::getAlpha() const\n"
 		"\n"
 		""},
 	 { (char *)"delete_FormFactorAnisoPyramid", _wrap_delete_FormFactorAnisoPyramid, METH_VARARGS, (char *)"delete_FormFactorAnisoPyramid(FormFactorAnisoPyramid self)"},
@@ -115884,7 +116529,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorBox_clone", _wrap_FormFactorBox_clone, METH_VARARGS, (char *)"\n"
 		"FormFactorBox_clone(FormFactorBox self) -> FormFactorBox\n"
 		"\n"
-		"FormFactorBox* FormFactorBox::clone() const overridefinal\n"
+		"FormFactorBox* FormFactorBox::clone() const override final\n"
 		"\n"
 		"Returns a clone of this  ISample object. \n"
 		"\n"
@@ -115892,7 +116537,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorBox_accept", _wrap_FormFactorBox_accept, METH_VARARGS, (char *)"\n"
 		"FormFactorBox_accept(FormFactorBox self, INodeVisitor visitor)\n"
 		"\n"
-		"void FormFactorBox::accept(INodeVisitor *visitor) const overridefinal\n"
+		"void FormFactorBox::accept(INodeVisitor *visitor) const override final\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -115900,25 +116545,25 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorBox_getLength", _wrap_FormFactorBox_getLength, METH_VARARGS, (char *)"\n"
 		"FormFactorBox_getLength(FormFactorBox self) -> double\n"
 		"\n"
-		"double FormFactorBox::getLength() const \n"
+		"double FormFactorBox::getLength() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorBox_getHeight", _wrap_FormFactorBox_getHeight, METH_VARARGS, (char *)"\n"
 		"FormFactorBox_getHeight(FormFactorBox self) -> double\n"
 		"\n"
-		"double FormFactorBox::getHeight() const \n"
+		"double FormFactorBox::getHeight() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorBox_getWidth", _wrap_FormFactorBox_getWidth, METH_VARARGS, (char *)"\n"
 		"FormFactorBox_getWidth(FormFactorBox self) -> double\n"
 		"\n"
-		"double FormFactorBox::getWidth() const \n"
+		"double FormFactorBox::getWidth() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorBox_radialExtension", _wrap_FormFactorBox_radialExtension, METH_VARARGS, (char *)"\n"
 		"FormFactorBox_radialExtension(FormFactorBox self) -> double\n"
 		"\n"
-		"double FormFactorBox::radialExtension() const overridefinal\n"
+		"double FormFactorBox::radialExtension() const override final\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
@@ -115926,7 +116571,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorBox_evaluate_for_q", _wrap_FormFactorBox_evaluate_for_q, METH_VARARGS, (char *)"\n"
 		"FormFactorBox_evaluate_for_q(FormFactorBox self, cvector_t q) -> complex_t\n"
 		"\n"
-		"complex_t FormFactorBox::evaluate_for_q(cvector_t q) const overridefinal\n"
+		"complex_t FormFactorBox::evaluate_for_q(cvector_t q) const override final\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -115956,7 +116601,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorCone_clone", _wrap_FormFactorCone_clone, METH_VARARGS, (char *)"\n"
 		"FormFactorCone_clone(FormFactorCone self) -> FormFactorCone\n"
 		"\n"
-		"FormFactorCone* FormFactorCone::clone() const overridefinal\n"
+		"FormFactorCone* FormFactorCone::clone() const override final\n"
 		"\n"
 		"Returns a clone of this  ISample object. \n"
 		"\n"
@@ -115964,7 +116609,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorCone_accept", _wrap_FormFactorCone_accept, METH_VARARGS, (char *)"\n"
 		"FormFactorCone_accept(FormFactorCone self, INodeVisitor visitor)\n"
 		"\n"
-		"void FormFactorCone::accept(INodeVisitor *visitor) const overridefinal\n"
+		"void FormFactorCone::accept(INodeVisitor *visitor) const override final\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -115972,25 +116617,25 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorCone_getHeight", _wrap_FormFactorCone_getHeight, METH_VARARGS, (char *)"\n"
 		"FormFactorCone_getHeight(FormFactorCone self) -> double\n"
 		"\n"
-		"double FormFactorCone::getHeight() const \n"
+		"double FormFactorCone::getHeight() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorCone_getAlpha", _wrap_FormFactorCone_getAlpha, METH_VARARGS, (char *)"\n"
 		"FormFactorCone_getAlpha(FormFactorCone self) -> double\n"
 		"\n"
-		"double FormFactorCone::getAlpha() const \n"
+		"double FormFactorCone::getAlpha() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorCone_getRadius", _wrap_FormFactorCone_getRadius, METH_VARARGS, (char *)"\n"
 		"FormFactorCone_getRadius(FormFactorCone self) -> double\n"
 		"\n"
-		"double FormFactorCone::getRadius() const \n"
+		"double FormFactorCone::getRadius() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorCone_radialExtension", _wrap_FormFactorCone_radialExtension, METH_VARARGS, (char *)"\n"
 		"FormFactorCone_radialExtension(FormFactorCone self) -> double\n"
 		"\n"
-		"double FormFactorCone::radialExtension() const overridefinal\n"
+		"double FormFactorCone::radialExtension() const override final\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
@@ -115998,7 +116643,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorCone_evaluate_for_q", _wrap_FormFactorCone_evaluate_for_q, METH_VARARGS, (char *)"\n"
 		"FormFactorCone_evaluate_for_q(FormFactorCone self, cvector_t q) -> complex_t\n"
 		"\n"
-		"complex_t FormFactorCone::evaluate_for_q(cvector_t q) const overridefinal\n"
+		"complex_t FormFactorCone::evaluate_for_q(cvector_t q) const override final\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -116028,7 +116673,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorCone6_clone", _wrap_FormFactorCone6_clone, METH_VARARGS, (char *)"\n"
 		"FormFactorCone6_clone(FormFactorCone6 self) -> FormFactorCone6\n"
 		"\n"
-		"FormFactorCone6* FormFactorCone6::clone() const overridefinal\n"
+		"FormFactorCone6* FormFactorCone6::clone() const override final\n"
 		"\n"
 		"Returns a clone of this  ISample object. \n"
 		"\n"
@@ -116036,7 +116681,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorCone6_accept", _wrap_FormFactorCone6_accept, METH_VARARGS, (char *)"\n"
 		"FormFactorCone6_accept(FormFactorCone6 self, INodeVisitor visitor)\n"
 		"\n"
-		"void FormFactorCone6::accept(INodeVisitor *visitor) const overridefinal\n"
+		"void FormFactorCone6::accept(INodeVisitor *visitor) const override final\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -116044,19 +116689,19 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorCone6_getBaseEdge", _wrap_FormFactorCone6_getBaseEdge, METH_VARARGS, (char *)"\n"
 		"FormFactorCone6_getBaseEdge(FormFactorCone6 self) -> double\n"
 		"\n"
-		"double FormFactorCone6::getBaseEdge() const \n"
+		"double FormFactorCone6::getBaseEdge() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorCone6_getHeight", _wrap_FormFactorCone6_getHeight, METH_VARARGS, (char *)"\n"
 		"FormFactorCone6_getHeight(FormFactorCone6 self) -> double\n"
 		"\n"
-		"double FormFactorCone6::getHeight() const \n"
+		"double FormFactorCone6::getHeight() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorCone6_getAlpha", _wrap_FormFactorCone6_getAlpha, METH_VARARGS, (char *)"\n"
 		"FormFactorCone6_getAlpha(FormFactorCone6 self) -> double\n"
 		"\n"
-		"double FormFactorCone6::getAlpha() const \n"
+		"double FormFactorCone6::getAlpha() const\n"
 		"\n"
 		""},
 	 { (char *)"delete_FormFactorCone6", _wrap_delete_FormFactorCone6, METH_VARARGS, (char *)"delete_FormFactorCone6(FormFactorCone6 self)"},
@@ -116070,13 +116715,13 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"delete_FormFactorCrystal", _wrap_delete_FormFactorCrystal, METH_VARARGS, (char *)"\n"
 		"delete_FormFactorCrystal(FormFactorCrystal self)\n"
 		"\n"
-		"FormFactorCrystal::~FormFactorCrystal() overridefinal\n"
+		"FormFactorCrystal::~FormFactorCrystal() override final\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorCrystal_clone", _wrap_FormFactorCrystal_clone, METH_VARARGS, (char *)"\n"
 		"FormFactorCrystal_clone(FormFactorCrystal self) -> FormFactorCrystal\n"
 		"\n"
-		"FormFactorCrystal* FormFactorCrystal::clone() const overridefinal\n"
+		"FormFactorCrystal* FormFactorCrystal::clone() const override final\n"
 		"\n"
 		"Returns a clone of this  ISample object. \n"
 		"\n"
@@ -116084,23 +116729,23 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorCrystal_accept", _wrap_FormFactorCrystal_accept, METH_VARARGS, (char *)"\n"
 		"FormFactorCrystal_accept(FormFactorCrystal self, INodeVisitor visitor)\n"
 		"\n"
-		"void FormFactorCrystal::accept(INodeVisitor *visitor) const overridefinal\n"
+		"void FormFactorCrystal::accept(INodeVisitor *visitor) const override final\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
 		""},
 	 { (char *)"FormFactorCrystal_setAmbientMaterial", _wrap_FormFactorCrystal_setAmbientMaterial, METH_VARARGS, (char *)"\n"
-		"FormFactorCrystal_setAmbientMaterial(FormFactorCrystal self, HomogeneousMaterial material)\n"
+		"FormFactorCrystal_setAmbientMaterial(FormFactorCrystal self, Material material)\n"
 		"\n"
-		"void FormFactorCrystal::setAmbientMaterial(HomogeneousMaterial material) override\n"
+		"void FormFactorCrystal::setAmbientMaterial(Material material) override\n"
 		"\n"
-		"Passes the refractive index of the ambient material in which this particle is embedded. \n"
+		"Passes the material in which this particle is embedded. \n"
 		"\n"
 		""},
 	 { (char *)"FormFactorCrystal_volume", _wrap_FormFactorCrystal_volume, METH_VARARGS, (char *)"\n"
 		"FormFactorCrystal_volume(FormFactorCrystal self) -> double\n"
 		"\n"
-		"double FormFactorCrystal::volume() const overridefinal\n"
+		"double FormFactorCrystal::volume() const override final\n"
 		"\n"
 		"Returns the total volume of the particle of this form factor's shape. \n"
 		"\n"
@@ -116108,7 +116753,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorCrystal_radialExtension", _wrap_FormFactorCrystal_radialExtension, METH_VARARGS, (char *)"\n"
 		"FormFactorCrystal_radialExtension(FormFactorCrystal self) -> double\n"
 		"\n"
-		"double FormFactorCrystal::radialExtension() const overridefinal\n"
+		"double FormFactorCrystal::radialExtension() const override final\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
@@ -116124,7 +116769,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorCrystal_topZ", _wrap_FormFactorCrystal_topZ, METH_VARARGS, (char *)"\n"
 		"FormFactorCrystal_topZ(FormFactorCrystal self, IRotation rotation) -> double\n"
 		"\n"
-		"double FormFactorCrystal::topZ(const IRotation &rotation) const overridefinal\n"
+		"double FormFactorCrystal::topZ(const IRotation &rotation) const override final\n"
 		"\n"
 		"Returns the z-coordinate of the lowest point in this shape after a given rotation. \n"
 		"\n"
@@ -116132,7 +116777,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorCrystal_evaluate", _wrap_FormFactorCrystal_evaluate, METH_VARARGS, (char *)"\n"
 		"FormFactorCrystal_evaluate(FormFactorCrystal self, WavevectorInfo wavevectors) -> complex_t\n"
 		"\n"
-		"complex_t FormFactorCrystal::evaluate(const WavevectorInfo &wavevectors) const overridefinal\n"
+		"complex_t FormFactorCrystal::evaluate(const WavevectorInfo &wavevectors) const override final\n"
 		"\n"
 		"Returns scattering amplitude for complex wavevectors ki, kf. \n"
 		"\n"
@@ -116164,7 +116809,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorCuboctahedron_clone", _wrap_FormFactorCuboctahedron_clone, METH_VARARGS, (char *)"\n"
 		"FormFactorCuboctahedron_clone(FormFactorCuboctahedron self) -> FormFactorCuboctahedron\n"
 		"\n"
-		"FormFactorCuboctahedron* FormFactorCuboctahedron::clone() const overridefinal\n"
+		"FormFactorCuboctahedron* FormFactorCuboctahedron::clone() const override final\n"
 		"\n"
 		"Returns a clone of this  ISample object. \n"
 		"\n"
@@ -116172,7 +116817,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorCuboctahedron_accept", _wrap_FormFactorCuboctahedron_accept, METH_VARARGS, (char *)"\n"
 		"FormFactorCuboctahedron_accept(FormFactorCuboctahedron self, INodeVisitor visitor)\n"
 		"\n"
-		"void FormFactorCuboctahedron::accept(INodeVisitor *visitor) const overridefinal\n"
+		"void FormFactorCuboctahedron::accept(INodeVisitor *visitor) const override final\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -116180,25 +116825,25 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorCuboctahedron_getLength", _wrap_FormFactorCuboctahedron_getLength, METH_VARARGS, (char *)"\n"
 		"FormFactorCuboctahedron_getLength(FormFactorCuboctahedron self) -> double\n"
 		"\n"
-		"double FormFactorCuboctahedron::getLength() const \n"
+		"double FormFactorCuboctahedron::getLength() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorCuboctahedron_getHeight", _wrap_FormFactorCuboctahedron_getHeight, METH_VARARGS, (char *)"\n"
 		"FormFactorCuboctahedron_getHeight(FormFactorCuboctahedron self) -> double\n"
 		"\n"
-		"double FormFactorCuboctahedron::getHeight() const \n"
+		"double FormFactorCuboctahedron::getHeight() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorCuboctahedron_getHeightRatio", _wrap_FormFactorCuboctahedron_getHeightRatio, METH_VARARGS, (char *)"\n"
 		"FormFactorCuboctahedron_getHeightRatio(FormFactorCuboctahedron self) -> double\n"
 		"\n"
-		"double FormFactorCuboctahedron::getHeightRatio() const \n"
+		"double FormFactorCuboctahedron::getHeightRatio() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorCuboctahedron_getAlpha", _wrap_FormFactorCuboctahedron_getAlpha, METH_VARARGS, (char *)"\n"
 		"FormFactorCuboctahedron_getAlpha(FormFactorCuboctahedron self) -> double\n"
 		"\n"
-		"double FormFactorCuboctahedron::getAlpha() const \n"
+		"double FormFactorCuboctahedron::getAlpha() const\n"
 		"\n"
 		""},
 	 { (char *)"delete_FormFactorCuboctahedron", _wrap_delete_FormFactorCuboctahedron, METH_VARARGS, (char *)"delete_FormFactorCuboctahedron(FormFactorCuboctahedron self)"},
@@ -116223,7 +116868,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorCylinder_clone", _wrap_FormFactorCylinder_clone, METH_VARARGS, (char *)"\n"
 		"FormFactorCylinder_clone(FormFactorCylinder self) -> FormFactorCylinder\n"
 		"\n"
-		"FormFactorCylinder* FormFactorCylinder::clone() const overridefinal\n"
+		"FormFactorCylinder* FormFactorCylinder::clone() const override final\n"
 		"\n"
 		"Returns a clone of this  ISample object. \n"
 		"\n"
@@ -116231,7 +116876,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorCylinder_accept", _wrap_FormFactorCylinder_accept, METH_VARARGS, (char *)"\n"
 		"FormFactorCylinder_accept(FormFactorCylinder self, INodeVisitor visitor)\n"
 		"\n"
-		"void FormFactorCylinder::accept(INodeVisitor *visitor) const overridefinal\n"
+		"void FormFactorCylinder::accept(INodeVisitor *visitor) const override final\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -116239,19 +116884,19 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorCylinder_getHeight", _wrap_FormFactorCylinder_getHeight, METH_VARARGS, (char *)"\n"
 		"FormFactorCylinder_getHeight(FormFactorCylinder self) -> double\n"
 		"\n"
-		"double FormFactorCylinder::getHeight() const \n"
+		"double FormFactorCylinder::getHeight() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorCylinder_getRadius", _wrap_FormFactorCylinder_getRadius, METH_VARARGS, (char *)"\n"
 		"FormFactorCylinder_getRadius(FormFactorCylinder self) -> double\n"
 		"\n"
-		"double FormFactorCylinder::getRadius() const \n"
+		"double FormFactorCylinder::getRadius() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorCylinder_radialExtension", _wrap_FormFactorCylinder_radialExtension, METH_VARARGS, (char *)"\n"
 		"FormFactorCylinder_radialExtension(FormFactorCylinder self) -> double\n"
 		"\n"
-		"double FormFactorCylinder::radialExtension() const overridefinal\n"
+		"double FormFactorCylinder::radialExtension() const override final\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
@@ -116259,7 +116904,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorCylinder_evaluate_for_q", _wrap_FormFactorCylinder_evaluate_for_q, METH_VARARGS, (char *)"\n"
 		"FormFactorCylinder_evaluate_for_q(FormFactorCylinder self, cvector_t q) -> complex_t\n"
 		"\n"
-		"complex_t FormFactorCylinder::evaluate_for_q(cvector_t q) const overridefinal\n"
+		"complex_t FormFactorCylinder::evaluate_for_q(cvector_t q) const override final\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -116278,7 +116923,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorDecoratorDebyeWaller_clone", _wrap_FormFactorDecoratorDebyeWaller_clone, METH_VARARGS, (char *)"\n"
 		"FormFactorDecoratorDebyeWaller_clone(FormFactorDecoratorDebyeWaller self) -> FormFactorDecoratorDebyeWaller\n"
 		"\n"
-		"FormFactorDecoratorDebyeWaller* FormFactorDecoratorDebyeWaller::clone() const overridefinal\n"
+		"FormFactorDecoratorDebyeWaller* FormFactorDecoratorDebyeWaller::clone() const override final\n"
 		"\n"
 		"Returns a clone of this  ISample object. \n"
 		"\n"
@@ -116286,7 +116931,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorDecoratorDebyeWaller_accept", _wrap_FormFactorDecoratorDebyeWaller_accept, METH_VARARGS, (char *)"\n"
 		"FormFactorDecoratorDebyeWaller_accept(FormFactorDecoratorDebyeWaller self, INodeVisitor visitor)\n"
 		"\n"
-		"void FormFactorDecoratorDebyeWaller::accept(INodeVisitor *visitor) const overridefinal\n"
+		"void FormFactorDecoratorDebyeWaller::accept(INodeVisitor *visitor) const override final\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -116294,7 +116939,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorDecoratorDebyeWaller_evaluate", _wrap_FormFactorDecoratorDebyeWaller_evaluate, METH_VARARGS, (char *)"\n"
 		"FormFactorDecoratorDebyeWaller_evaluate(FormFactorDecoratorDebyeWaller self, WavevectorInfo wavevectors) -> complex_t\n"
 		"\n"
-		"complex_t FormFactorDecoratorDebyeWaller::evaluate(const WavevectorInfo &wavevectors) const overridefinal\n"
+		"complex_t FormFactorDecoratorDebyeWaller::evaluate(const WavevectorInfo &wavevectors) const override final\n"
 		"\n"
 		"Returns scattering amplitude for complex wavevectors ki, kf. \n"
 		"\n"
@@ -116326,7 +116971,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorDodecahedron_clone", _wrap_FormFactorDodecahedron_clone, METH_VARARGS, (char *)"\n"
 		"FormFactorDodecahedron_clone(FormFactorDodecahedron self) -> FormFactorDodecahedron\n"
 		"\n"
-		"FormFactorDodecahedron* FormFactorDodecahedron::clone() const overridefinal\n"
+		"FormFactorDodecahedron* FormFactorDodecahedron::clone() const override final\n"
 		"\n"
 		"Returns a clone of this  ISample object. \n"
 		"\n"
@@ -116334,7 +116979,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorDodecahedron_accept", _wrap_FormFactorDodecahedron_accept, METH_VARARGS, (char *)"\n"
 		"FormFactorDodecahedron_accept(FormFactorDodecahedron self, INodeVisitor visitor)\n"
 		"\n"
-		"void FormFactorDodecahedron::accept(INodeVisitor *visitor) const overridefinal\n"
+		"void FormFactorDodecahedron::accept(INodeVisitor *visitor) const override final\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -116342,7 +116987,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorDodecahedron_getEdge", _wrap_FormFactorDodecahedron_getEdge, METH_VARARGS, (char *)"\n"
 		"FormFactorDodecahedron_getEdge(FormFactorDodecahedron self) -> double\n"
 		"\n"
-		"double FormFactorDodecahedron::getEdge() const \n"
+		"double FormFactorDodecahedron::getEdge() const\n"
 		"\n"
 		""},
 	 { (char *)"delete_FormFactorDodecahedron", _wrap_delete_FormFactorDodecahedron, METH_VARARGS, (char *)"delete_FormFactorDodecahedron(FormFactorDodecahedron self)"},
@@ -116356,7 +117001,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorDot_clone", _wrap_FormFactorDot_clone, METH_VARARGS, (char *)"\n"
 		"FormFactorDot_clone(FormFactorDot self) -> FormFactorDot\n"
 		"\n"
-		"FormFactorDot* FormFactorDot::clone() const overridefinal\n"
+		"FormFactorDot* FormFactorDot::clone() const override final\n"
 		"\n"
 		"Returns a clone of this  ISample object. \n"
 		"\n"
@@ -116364,7 +117009,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorDot_accept", _wrap_FormFactorDot_accept, METH_VARARGS, (char *)"\n"
 		"FormFactorDot_accept(FormFactorDot self, INodeVisitor visitor)\n"
 		"\n"
-		"void FormFactorDot::accept(INodeVisitor *visitor) const overridefinal\n"
+		"void FormFactorDot::accept(INodeVisitor *visitor) const override final\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -116372,7 +117017,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorDot_radialExtension", _wrap_FormFactorDot_radialExtension, METH_VARARGS, (char *)"\n"
 		"FormFactorDot_radialExtension(FormFactorDot self) -> double\n"
 		"\n"
-		"double FormFactorDot::radialExtension() const overridefinal\n"
+		"double FormFactorDot::radialExtension() const override final\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
@@ -116380,7 +117025,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorDot_evaluate_for_q", _wrap_FormFactorDot_evaluate_for_q, METH_VARARGS, (char *)"\n"
 		"FormFactorDot_evaluate_for_q(FormFactorDot self, cvector_t arg3) -> complex_t\n"
 		"\n"
-		"complex_t FormFactorDot::evaluate_for_q(cvector_t) const overridefinal\n"
+		"complex_t FormFactorDot::evaluate_for_q(cvector_t) const override final\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -116410,7 +117055,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorEllipsoidalCylinder_clone", _wrap_FormFactorEllipsoidalCylinder_clone, METH_VARARGS, (char *)"\n"
 		"FormFactorEllipsoidalCylinder_clone(FormFactorEllipsoidalCylinder self) -> FormFactorEllipsoidalCylinder\n"
 		"\n"
-		"FormFactorEllipsoidalCylinder* FormFactorEllipsoidalCylinder::clone() const overridefinal\n"
+		"FormFactorEllipsoidalCylinder* FormFactorEllipsoidalCylinder::clone() const override final\n"
 		"\n"
 		"Returns a clone of this  ISample object. \n"
 		"\n"
@@ -116418,7 +117063,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorEllipsoidalCylinder_accept", _wrap_FormFactorEllipsoidalCylinder_accept, METH_VARARGS, (char *)"\n"
 		"FormFactorEllipsoidalCylinder_accept(FormFactorEllipsoidalCylinder self, INodeVisitor visitor)\n"
 		"\n"
-		"void FormFactorEllipsoidalCylinder::accept(INodeVisitor *visitor) const overridefinal\n"
+		"void FormFactorEllipsoidalCylinder::accept(INodeVisitor *visitor) const override final\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -116426,25 +117071,25 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorEllipsoidalCylinder_getRadiusX", _wrap_FormFactorEllipsoidalCylinder_getRadiusX, METH_VARARGS, (char *)"\n"
 		"FormFactorEllipsoidalCylinder_getRadiusX(FormFactorEllipsoidalCylinder self) -> double\n"
 		"\n"
-		"double FormFactorEllipsoidalCylinder::getRadiusX() const \n"
+		"double FormFactorEllipsoidalCylinder::getRadiusX() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorEllipsoidalCylinder_getRadiusY", _wrap_FormFactorEllipsoidalCylinder_getRadiusY, METH_VARARGS, (char *)"\n"
 		"FormFactorEllipsoidalCylinder_getRadiusY(FormFactorEllipsoidalCylinder self) -> double\n"
 		"\n"
-		"double FormFactorEllipsoidalCylinder::getRadiusY() const \n"
+		"double FormFactorEllipsoidalCylinder::getRadiusY() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorEllipsoidalCylinder_getHeight", _wrap_FormFactorEllipsoidalCylinder_getHeight, METH_VARARGS, (char *)"\n"
 		"FormFactorEllipsoidalCylinder_getHeight(FormFactorEllipsoidalCylinder self) -> double\n"
 		"\n"
-		"double FormFactorEllipsoidalCylinder::getHeight() const \n"
+		"double FormFactorEllipsoidalCylinder::getHeight() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorEllipsoidalCylinder_radialExtension", _wrap_FormFactorEllipsoidalCylinder_radialExtension, METH_VARARGS, (char *)"\n"
 		"FormFactorEllipsoidalCylinder_radialExtension(FormFactorEllipsoidalCylinder self) -> double\n"
 		"\n"
-		"double FormFactorEllipsoidalCylinder::radialExtension() const overridefinal\n"
+		"double FormFactorEllipsoidalCylinder::radialExtension() const override final\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
@@ -116452,7 +117097,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorEllipsoidalCylinder_evaluate_for_q", _wrap_FormFactorEllipsoidalCylinder_evaluate_for_q, METH_VARARGS, (char *)"\n"
 		"FormFactorEllipsoidalCylinder_evaluate_for_q(FormFactorEllipsoidalCylinder self, cvector_t q) -> complex_t\n"
 		"\n"
-		"complex_t FormFactorEllipsoidalCylinder::evaluate_for_q(cvector_t q) const overridefinal\n"
+		"complex_t FormFactorEllipsoidalCylinder::evaluate_for_q(cvector_t q) const override final\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -116476,7 +117121,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorFullSphere_clone", _wrap_FormFactorFullSphere_clone, METH_VARARGS, (char *)"\n"
 		"FormFactorFullSphere_clone(FormFactorFullSphere self) -> FormFactorFullSphere\n"
 		"\n"
-		"FormFactorFullSphere* FormFactorFullSphere::clone() const overridefinal\n"
+		"FormFactorFullSphere* FormFactorFullSphere::clone() const override final\n"
 		"\n"
 		"Returns a clone of this  ISample object. \n"
 		"\n"
@@ -116484,7 +117129,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorFullSphere_accept", _wrap_FormFactorFullSphere_accept, METH_VARARGS, (char *)"\n"
 		"FormFactorFullSphere_accept(FormFactorFullSphere self, INodeVisitor visitor)\n"
 		"\n"
-		"void FormFactorFullSphere::accept(INodeVisitor *visitor) const overridefinal\n"
+		"void FormFactorFullSphere::accept(INodeVisitor *visitor) const override final\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -116492,13 +117137,13 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorFullSphere_getRadius", _wrap_FormFactorFullSphere_getRadius, METH_VARARGS, (char *)"\n"
 		"FormFactorFullSphere_getRadius(FormFactorFullSphere self) -> double\n"
 		"\n"
-		"double FormFactorFullSphere::getRadius() const \n"
+		"double FormFactorFullSphere::getRadius() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorFullSphere_radialExtension", _wrap_FormFactorFullSphere_radialExtension, METH_VARARGS, (char *)"\n"
 		"FormFactorFullSphere_radialExtension(FormFactorFullSphere self) -> double\n"
 		"\n"
-		"double FormFactorFullSphere::radialExtension() const overridefinal\n"
+		"double FormFactorFullSphere::radialExtension() const override final\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
@@ -116506,7 +117151,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorFullSphere_bottomZ", _wrap_FormFactorFullSphere_bottomZ, METH_VARARGS, (char *)"\n"
 		"FormFactorFullSphere_bottomZ(FormFactorFullSphere self, IRotation rotation) -> double\n"
 		"\n"
-		"double FormFactorFullSphere::bottomZ(const IRotation &rotation) const overridefinal\n"
+		"double FormFactorFullSphere::bottomZ(const IRotation &rotation) const override final\n"
 		"\n"
 		"Returns the z-coordinate of the lowest point in this shape after a given rotation. \n"
 		"\n"
@@ -116514,7 +117159,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorFullSphere_topZ", _wrap_FormFactorFullSphere_topZ, METH_VARARGS, (char *)"\n"
 		"FormFactorFullSphere_topZ(FormFactorFullSphere self, IRotation rotation) -> double\n"
 		"\n"
-		"double FormFactorFullSphere::topZ(const IRotation &rotation) const overridefinal\n"
+		"double FormFactorFullSphere::topZ(const IRotation &rotation) const override final\n"
 		"\n"
 		"Returns the z-coordinate of the lowest point in this shape after a given rotation. \n"
 		"\n"
@@ -116522,7 +117167,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorFullSphere_evaluate_for_q", _wrap_FormFactorFullSphere_evaluate_for_q, METH_VARARGS, (char *)"\n"
 		"FormFactorFullSphere_evaluate_for_q(FormFactorFullSphere self, cvector_t q) -> complex_t\n"
 		"\n"
-		"complex_t FormFactorFullSphere::evaluate_for_q(cvector_t q) const overridefinal\n"
+		"complex_t FormFactorFullSphere::evaluate_for_q(cvector_t q) const override final\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -116549,7 +117194,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorFullSpheroid_clone", _wrap_FormFactorFullSpheroid_clone, METH_VARARGS, (char *)"\n"
 		"FormFactorFullSpheroid_clone(FormFactorFullSpheroid self) -> FormFactorFullSpheroid\n"
 		"\n"
-		"FormFactorFullSpheroid* FormFactorFullSpheroid::clone() const overridefinal\n"
+		"FormFactorFullSpheroid* FormFactorFullSpheroid::clone() const override final\n"
 		"\n"
 		"Returns a clone of this  ISample object. \n"
 		"\n"
@@ -116557,7 +117202,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorFullSpheroid_accept", _wrap_FormFactorFullSpheroid_accept, METH_VARARGS, (char *)"\n"
 		"FormFactorFullSpheroid_accept(FormFactorFullSpheroid self, INodeVisitor visitor)\n"
 		"\n"
-		"void FormFactorFullSpheroid::accept(INodeVisitor *visitor) const overridefinal\n"
+		"void FormFactorFullSpheroid::accept(INodeVisitor *visitor) const override final\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -116565,19 +117210,19 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorFullSpheroid_getHeight", _wrap_FormFactorFullSpheroid_getHeight, METH_VARARGS, (char *)"\n"
 		"FormFactorFullSpheroid_getHeight(FormFactorFullSpheroid self) -> double\n"
 		"\n"
-		"double FormFactorFullSpheroid::getHeight() const \n"
+		"double FormFactorFullSpheroid::getHeight() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorFullSpheroid_getRadius", _wrap_FormFactorFullSpheroid_getRadius, METH_VARARGS, (char *)"\n"
 		"FormFactorFullSpheroid_getRadius(FormFactorFullSpheroid self) -> double\n"
 		"\n"
-		"double FormFactorFullSpheroid::getRadius() const \n"
+		"double FormFactorFullSpheroid::getRadius() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorFullSpheroid_radialExtension", _wrap_FormFactorFullSpheroid_radialExtension, METH_VARARGS, (char *)"\n"
 		"FormFactorFullSpheroid_radialExtension(FormFactorFullSpheroid self) -> double\n"
 		"\n"
-		"double FormFactorFullSpheroid::radialExtension() const overridefinal\n"
+		"double FormFactorFullSpheroid::radialExtension() const override final\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
@@ -116585,7 +117230,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorFullSpheroid_evaluate_for_q", _wrap_FormFactorFullSpheroid_evaluate_for_q, METH_VARARGS, (char *)"\n"
 		"FormFactorFullSpheroid_evaluate_for_q(FormFactorFullSpheroid self, cvector_t q) -> complex_t\n"
 		"\n"
-		"complex_t FormFactorFullSpheroid::evaluate_for_q(cvector_t q) const overridefinal\n"
+		"complex_t FormFactorFullSpheroid::evaluate_for_q(cvector_t q) const override final\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -116602,7 +117247,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorGauss_clone", _wrap_FormFactorGauss_clone, METH_VARARGS, (char *)"\n"
 		"FormFactorGauss_clone(FormFactorGauss self) -> FormFactorGauss\n"
 		"\n"
-		"FormFactorGauss* FormFactorGauss::clone() const overridefinal\n"
+		"FormFactorGauss* FormFactorGauss::clone() const override final\n"
 		"\n"
 		"Returns a clone of this  ISample object. \n"
 		"\n"
@@ -116610,7 +117255,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorGauss_accept", _wrap_FormFactorGauss_accept, METH_VARARGS, (char *)"\n"
 		"FormFactorGauss_accept(FormFactorGauss self, INodeVisitor visitor)\n"
 		"\n"
-		"void FormFactorGauss::accept(INodeVisitor *visitor) const overridefinal\n"
+		"void FormFactorGauss::accept(INodeVisitor *visitor) const override final\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -116618,19 +117263,19 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorGauss_getWidth", _wrap_FormFactorGauss_getWidth, METH_VARARGS, (char *)"\n"
 		"FormFactorGauss_getWidth(FormFactorGauss self) -> double\n"
 		"\n"
-		"double FormFactorGauss::getWidth() const \n"
+		"double FormFactorGauss::getWidth() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorGauss_getHeight", _wrap_FormFactorGauss_getHeight, METH_VARARGS, (char *)"\n"
 		"FormFactorGauss_getHeight(FormFactorGauss self) -> double\n"
 		"\n"
-		"double FormFactorGauss::getHeight() const \n"
+		"double FormFactorGauss::getHeight() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorGauss_radialExtension", _wrap_FormFactorGauss_radialExtension, METH_VARARGS, (char *)"\n"
 		"FormFactorGauss_radialExtension(FormFactorGauss self) -> double\n"
 		"\n"
-		"double FormFactorGauss::radialExtension() const overridefinal\n"
+		"double FormFactorGauss::radialExtension() const override final\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
@@ -116638,7 +117283,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorGauss_evaluate_for_q", _wrap_FormFactorGauss_evaluate_for_q, METH_VARARGS, (char *)"\n"
 		"FormFactorGauss_evaluate_for_q(FormFactorGauss self, cvector_t q) -> complex_t\n"
 		"\n"
-		"complex_t FormFactorGauss::evaluate_for_q(cvector_t q) const overridefinal\n"
+		"complex_t FormFactorGauss::evaluate_for_q(cvector_t q) const override final\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -116674,7 +117319,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorHemiEllipsoid_clone", _wrap_FormFactorHemiEllipsoid_clone, METH_VARARGS, (char *)"\n"
 		"FormFactorHemiEllipsoid_clone(FormFactorHemiEllipsoid self) -> FormFactorHemiEllipsoid\n"
 		"\n"
-		"FormFactorHemiEllipsoid* FormFactorHemiEllipsoid::clone() const overridefinal\n"
+		"FormFactorHemiEllipsoid* FormFactorHemiEllipsoid::clone() const override final\n"
 		"\n"
 		"Returns a clone of this  ISample object. \n"
 		"\n"
@@ -116682,7 +117327,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorHemiEllipsoid_accept", _wrap_FormFactorHemiEllipsoid_accept, METH_VARARGS, (char *)"\n"
 		"FormFactorHemiEllipsoid_accept(FormFactorHemiEllipsoid self, INodeVisitor visitor)\n"
 		"\n"
-		"void FormFactorHemiEllipsoid::accept(INodeVisitor *visitor) const overridefinal\n"
+		"void FormFactorHemiEllipsoid::accept(INodeVisitor *visitor) const override final\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -116690,25 +117335,25 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorHemiEllipsoid_getHeight", _wrap_FormFactorHemiEllipsoid_getHeight, METH_VARARGS, (char *)"\n"
 		"FormFactorHemiEllipsoid_getHeight(FormFactorHemiEllipsoid self) -> double\n"
 		"\n"
-		"double FormFactorHemiEllipsoid::getHeight() const \n"
+		"double FormFactorHemiEllipsoid::getHeight() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorHemiEllipsoid_getRadiusX", _wrap_FormFactorHemiEllipsoid_getRadiusX, METH_VARARGS, (char *)"\n"
 		"FormFactorHemiEllipsoid_getRadiusX(FormFactorHemiEllipsoid self) -> double\n"
 		"\n"
-		"double FormFactorHemiEllipsoid::getRadiusX() const \n"
+		"double FormFactorHemiEllipsoid::getRadiusX() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorHemiEllipsoid_getRadiusY", _wrap_FormFactorHemiEllipsoid_getRadiusY, METH_VARARGS, (char *)"\n"
 		"FormFactorHemiEllipsoid_getRadiusY(FormFactorHemiEllipsoid self) -> double\n"
 		"\n"
-		"double FormFactorHemiEllipsoid::getRadiusY() const \n"
+		"double FormFactorHemiEllipsoid::getRadiusY() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorHemiEllipsoid_radialExtension", _wrap_FormFactorHemiEllipsoid_radialExtension, METH_VARARGS, (char *)"\n"
 		"FormFactorHemiEllipsoid_radialExtension(FormFactorHemiEllipsoid self) -> double\n"
 		"\n"
-		"double FormFactorHemiEllipsoid::radialExtension() const overridefinal\n"
+		"double FormFactorHemiEllipsoid::radialExtension() const override final\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
@@ -116716,7 +117361,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorHemiEllipsoid_evaluate_for_q", _wrap_FormFactorHemiEllipsoid_evaluate_for_q, METH_VARARGS, (char *)"\n"
 		"FormFactorHemiEllipsoid_evaluate_for_q(FormFactorHemiEllipsoid self, cvector_t q) -> complex_t\n"
 		"\n"
-		"complex_t FormFactorHemiEllipsoid::evaluate_for_q(cvector_t q) const overridefinal\n"
+		"complex_t FormFactorHemiEllipsoid::evaluate_for_q(cvector_t q) const override final\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -116739,7 +117384,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorIcosahedron_clone", _wrap_FormFactorIcosahedron_clone, METH_VARARGS, (char *)"\n"
 		"FormFactorIcosahedron_clone(FormFactorIcosahedron self) -> FormFactorIcosahedron\n"
 		"\n"
-		"FormFactorIcosahedron* FormFactorIcosahedron::clone() const overridefinal\n"
+		"FormFactorIcosahedron* FormFactorIcosahedron::clone() const override final\n"
 		"\n"
 		"Returns a clone of this  ISample object. \n"
 		"\n"
@@ -116747,7 +117392,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorIcosahedron_accept", _wrap_FormFactorIcosahedron_accept, METH_VARARGS, (char *)"\n"
 		"FormFactorIcosahedron_accept(FormFactorIcosahedron self, INodeVisitor visitor)\n"
 		"\n"
-		"void FormFactorIcosahedron::accept(INodeVisitor *visitor) const overridefinal\n"
+		"void FormFactorIcosahedron::accept(INodeVisitor *visitor) const override final\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -116755,7 +117400,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorIcosahedron_getEdge", _wrap_FormFactorIcosahedron_getEdge, METH_VARARGS, (char *)"\n"
 		"FormFactorIcosahedron_getEdge(FormFactorIcosahedron self) -> double\n"
 		"\n"
-		"double FormFactorIcosahedron::getEdge() const \n"
+		"double FormFactorIcosahedron::getEdge() const\n"
 		"\n"
 		""},
 	 { (char *)"delete_FormFactorIcosahedron", _wrap_delete_FormFactorIcosahedron, METH_VARARGS, (char *)"delete_FormFactorIcosahedron(FormFactorIcosahedron self)"},
@@ -116783,7 +117428,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorLongBoxGauss_clone", _wrap_FormFactorLongBoxGauss_clone, METH_VARARGS, (char *)"\n"
 		"FormFactorLongBoxGauss_clone(FormFactorLongBoxGauss self) -> FormFactorLongBoxGauss\n"
 		"\n"
-		"FormFactorLongBoxGauss* FormFactorLongBoxGauss::clone() const overridefinal\n"
+		"FormFactorLongBoxGauss* FormFactorLongBoxGauss::clone() const override final\n"
 		"\n"
 		"Returns a clone of this  ISample object. \n"
 		"\n"
@@ -116791,7 +117436,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorLongBoxGauss_accept", _wrap_FormFactorLongBoxGauss_accept, METH_VARARGS, (char *)"\n"
 		"FormFactorLongBoxGauss_accept(FormFactorLongBoxGauss self, INodeVisitor visitor)\n"
 		"\n"
-		"void FormFactorLongBoxGauss::accept(INodeVisitor *visitor) const overridefinal\n"
+		"void FormFactorLongBoxGauss::accept(INodeVisitor *visitor) const override final\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -116799,25 +117444,25 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorLongBoxGauss_getLength", _wrap_FormFactorLongBoxGauss_getLength, METH_VARARGS, (char *)"\n"
 		"FormFactorLongBoxGauss_getLength(FormFactorLongBoxGauss self) -> double\n"
 		"\n"
-		"double FormFactorLongBoxGauss::getLength() const \n"
+		"double FormFactorLongBoxGauss::getLength() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorLongBoxGauss_getHeight", _wrap_FormFactorLongBoxGauss_getHeight, METH_VARARGS, (char *)"\n"
 		"FormFactorLongBoxGauss_getHeight(FormFactorLongBoxGauss self) -> double\n"
 		"\n"
-		"double FormFactorLongBoxGauss::getHeight() const \n"
+		"double FormFactorLongBoxGauss::getHeight() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorLongBoxGauss_getWidth", _wrap_FormFactorLongBoxGauss_getWidth, METH_VARARGS, (char *)"\n"
 		"FormFactorLongBoxGauss_getWidth(FormFactorLongBoxGauss self) -> double\n"
 		"\n"
-		"double FormFactorLongBoxGauss::getWidth() const \n"
+		"double FormFactorLongBoxGauss::getWidth() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorLongBoxGauss_radialExtension", _wrap_FormFactorLongBoxGauss_radialExtension, METH_VARARGS, (char *)"\n"
 		"FormFactorLongBoxGauss_radialExtension(FormFactorLongBoxGauss self) -> double\n"
 		"\n"
-		"double FormFactorLongBoxGauss::radialExtension() const overridefinal\n"
+		"double FormFactorLongBoxGauss::radialExtension() const override final\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
@@ -116825,7 +117470,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorLongBoxGauss_evaluate_for_q", _wrap_FormFactorLongBoxGauss_evaluate_for_q, METH_VARARGS, (char *)"\n"
 		"FormFactorLongBoxGauss_evaluate_for_q(FormFactorLongBoxGauss self, cvector_t q) -> complex_t\n"
 		"\n"
-		"complex_t FormFactorLongBoxGauss::evaluate_for_q(cvector_t q) const overridefinal\n"
+		"complex_t FormFactorLongBoxGauss::evaluate_for_q(cvector_t q) const override final\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -116855,7 +117500,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorLongBoxLorentz_clone", _wrap_FormFactorLongBoxLorentz_clone, METH_VARARGS, (char *)"\n"
 		"FormFactorLongBoxLorentz_clone(FormFactorLongBoxLorentz self) -> FormFactorLongBoxLorentz\n"
 		"\n"
-		"FormFactorLongBoxLorentz* FormFactorLongBoxLorentz::clone() const overridefinal\n"
+		"FormFactorLongBoxLorentz* FormFactorLongBoxLorentz::clone() const override final\n"
 		"\n"
 		"Returns a clone of this  ISample object. \n"
 		"\n"
@@ -116863,7 +117508,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorLongBoxLorentz_accept", _wrap_FormFactorLongBoxLorentz_accept, METH_VARARGS, (char *)"\n"
 		"FormFactorLongBoxLorentz_accept(FormFactorLongBoxLorentz self, INodeVisitor visitor)\n"
 		"\n"
-		"void FormFactorLongBoxLorentz::accept(INodeVisitor *visitor) const overridefinal\n"
+		"void FormFactorLongBoxLorentz::accept(INodeVisitor *visitor) const override final\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -116871,25 +117516,25 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorLongBoxLorentz_getLength", _wrap_FormFactorLongBoxLorentz_getLength, METH_VARARGS, (char *)"\n"
 		"FormFactorLongBoxLorentz_getLength(FormFactorLongBoxLorentz self) -> double\n"
 		"\n"
-		"double FormFactorLongBoxLorentz::getLength() const \n"
+		"double FormFactorLongBoxLorentz::getLength() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorLongBoxLorentz_getHeight", _wrap_FormFactorLongBoxLorentz_getHeight, METH_VARARGS, (char *)"\n"
 		"FormFactorLongBoxLorentz_getHeight(FormFactorLongBoxLorentz self) -> double\n"
 		"\n"
-		"double FormFactorLongBoxLorentz::getHeight() const \n"
+		"double FormFactorLongBoxLorentz::getHeight() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorLongBoxLorentz_getWidth", _wrap_FormFactorLongBoxLorentz_getWidth, METH_VARARGS, (char *)"\n"
 		"FormFactorLongBoxLorentz_getWidth(FormFactorLongBoxLorentz self) -> double\n"
 		"\n"
-		"double FormFactorLongBoxLorentz::getWidth() const \n"
+		"double FormFactorLongBoxLorentz::getWidth() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorLongBoxLorentz_radialExtension", _wrap_FormFactorLongBoxLorentz_radialExtension, METH_VARARGS, (char *)"\n"
 		"FormFactorLongBoxLorentz_radialExtension(FormFactorLongBoxLorentz self) -> double\n"
 		"\n"
-		"double FormFactorLongBoxLorentz::radialExtension() const overridefinal\n"
+		"double FormFactorLongBoxLorentz::radialExtension() const override final\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
@@ -116897,7 +117542,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorLongBoxLorentz_evaluate_for_q", _wrap_FormFactorLongBoxLorentz_evaluate_for_q, METH_VARARGS, (char *)"\n"
 		"FormFactorLongBoxLorentz_evaluate_for_q(FormFactorLongBoxLorentz self, cvector_t q) -> complex_t\n"
 		"\n"
-		"complex_t FormFactorLongBoxLorentz::evaluate_for_q(cvector_t q) const overridefinal\n"
+		"complex_t FormFactorLongBoxLorentz::evaluate_for_q(cvector_t q) const override final\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -116927,7 +117572,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorLongRipple1Gauss_clone", _wrap_FormFactorLongRipple1Gauss_clone, METH_VARARGS, (char *)"\n"
 		"FormFactorLongRipple1Gauss_clone(FormFactorLongRipple1Gauss self) -> FormFactorLongRipple1Gauss\n"
 		"\n"
-		"FormFactorLongRipple1Gauss* FormFactorLongRipple1Gauss::clone() const overridefinal\n"
+		"FormFactorLongRipple1Gauss* FormFactorLongRipple1Gauss::clone() const override final\n"
 		"\n"
 		"Returns a clone of this  ISample object. \n"
 		"\n"
@@ -116935,7 +117580,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorLongRipple1Gauss_accept", _wrap_FormFactorLongRipple1Gauss_accept, METH_VARARGS, (char *)"\n"
 		"FormFactorLongRipple1Gauss_accept(FormFactorLongRipple1Gauss self, INodeVisitor visitor)\n"
 		"\n"
-		"void FormFactorLongRipple1Gauss::accept(INodeVisitor *visitor) const overridefinal\n"
+		"void FormFactorLongRipple1Gauss::accept(INodeVisitor *visitor) const override final\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -116943,25 +117588,25 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorLongRipple1Gauss_getHeight", _wrap_FormFactorLongRipple1Gauss_getHeight, METH_VARARGS, (char *)"\n"
 		"FormFactorLongRipple1Gauss_getHeight(FormFactorLongRipple1Gauss self) -> double\n"
 		"\n"
-		"double FormFactorLongRipple1Gauss::getHeight() const \n"
+		"double FormFactorLongRipple1Gauss::getHeight() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorLongRipple1Gauss_getWidth", _wrap_FormFactorLongRipple1Gauss_getWidth, METH_VARARGS, (char *)"\n"
 		"FormFactorLongRipple1Gauss_getWidth(FormFactorLongRipple1Gauss self) -> double\n"
 		"\n"
-		"double FormFactorLongRipple1Gauss::getWidth() const \n"
+		"double FormFactorLongRipple1Gauss::getWidth() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorLongRipple1Gauss_getLength", _wrap_FormFactorLongRipple1Gauss_getLength, METH_VARARGS, (char *)"\n"
 		"FormFactorLongRipple1Gauss_getLength(FormFactorLongRipple1Gauss self) -> double\n"
 		"\n"
-		"double FormFactorLongRipple1Gauss::getLength() const \n"
+		"double FormFactorLongRipple1Gauss::getLength() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorLongRipple1Gauss_radialExtension", _wrap_FormFactorLongRipple1Gauss_radialExtension, METH_VARARGS, (char *)"\n"
 		"FormFactorLongRipple1Gauss_radialExtension(FormFactorLongRipple1Gauss self) -> double\n"
 		"\n"
-		"double FormFactorLongRipple1Gauss::radialExtension() const overridefinal\n"
+		"double FormFactorLongRipple1Gauss::radialExtension() const override final\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
@@ -116969,7 +117614,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorLongRipple1Gauss_evaluate_for_q", _wrap_FormFactorLongRipple1Gauss_evaluate_for_q, METH_VARARGS, (char *)"\n"
 		"FormFactorLongRipple1Gauss_evaluate_for_q(FormFactorLongRipple1Gauss self, cvector_t q) -> complex_t\n"
 		"\n"
-		"complex_t FormFactorLongRipple1Gauss::evaluate_for_q(cvector_t q) const overridefinal\n"
+		"complex_t FormFactorLongRipple1Gauss::evaluate_for_q(cvector_t q) const override final\n"
 		"\n"
 		"Complex formfactor. \n"
 		"\n"
@@ -116999,7 +117644,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorLongRipple1Lorentz_clone", _wrap_FormFactorLongRipple1Lorentz_clone, METH_VARARGS, (char *)"\n"
 		"FormFactorLongRipple1Lorentz_clone(FormFactorLongRipple1Lorentz self) -> FormFactorLongRipple1Lorentz\n"
 		"\n"
-		"FormFactorLongRipple1Lorentz* FormFactorLongRipple1Lorentz::clone() const overridefinal\n"
+		"FormFactorLongRipple1Lorentz* FormFactorLongRipple1Lorentz::clone() const override final\n"
 		"\n"
 		"Returns a clone of this  ISample object. \n"
 		"\n"
@@ -117007,7 +117652,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorLongRipple1Lorentz_accept", _wrap_FormFactorLongRipple1Lorentz_accept, METH_VARARGS, (char *)"\n"
 		"FormFactorLongRipple1Lorentz_accept(FormFactorLongRipple1Lorentz self, INodeVisitor visitor)\n"
 		"\n"
-		"void FormFactorLongRipple1Lorentz::accept(INodeVisitor *visitor) const overridefinal\n"
+		"void FormFactorLongRipple1Lorentz::accept(INodeVisitor *visitor) const override final\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -117015,7 +117660,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorLongRipple1Lorentz_radialExtension", _wrap_FormFactorLongRipple1Lorentz_radialExtension, METH_VARARGS, (char *)"\n"
 		"FormFactorLongRipple1Lorentz_radialExtension(FormFactorLongRipple1Lorentz self) -> double\n"
 		"\n"
-		"double FormFactorLongRipple1Lorentz::radialExtension() const overridefinal\n"
+		"double FormFactorLongRipple1Lorentz::radialExtension() const override final\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
@@ -117023,25 +117668,25 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorLongRipple1Lorentz_getHeight", _wrap_FormFactorLongRipple1Lorentz_getHeight, METH_VARARGS, (char *)"\n"
 		"FormFactorLongRipple1Lorentz_getHeight(FormFactorLongRipple1Lorentz self) -> double\n"
 		"\n"
-		"double FormFactorLongRipple1Lorentz::getHeight() const \n"
+		"double FormFactorLongRipple1Lorentz::getHeight() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorLongRipple1Lorentz_getWidth", _wrap_FormFactorLongRipple1Lorentz_getWidth, METH_VARARGS, (char *)"\n"
 		"FormFactorLongRipple1Lorentz_getWidth(FormFactorLongRipple1Lorentz self) -> double\n"
 		"\n"
-		"double FormFactorLongRipple1Lorentz::getWidth() const \n"
+		"double FormFactorLongRipple1Lorentz::getWidth() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorLongRipple1Lorentz_getLength", _wrap_FormFactorLongRipple1Lorentz_getLength, METH_VARARGS, (char *)"\n"
 		"FormFactorLongRipple1Lorentz_getLength(FormFactorLongRipple1Lorentz self) -> double\n"
 		"\n"
-		"double FormFactorLongRipple1Lorentz::getLength() const \n"
+		"double FormFactorLongRipple1Lorentz::getLength() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorLongRipple1Lorentz_evaluate_for_q", _wrap_FormFactorLongRipple1Lorentz_evaluate_for_q, METH_VARARGS, (char *)"\n"
 		"FormFactorLongRipple1Lorentz_evaluate_for_q(FormFactorLongRipple1Lorentz self, cvector_t q) -> complex_t\n"
 		"\n"
-		"complex_t FormFactorLongRipple1Lorentz::evaluate_for_q(cvector_t q) const overridefinal\n"
+		"complex_t FormFactorLongRipple1Lorentz::evaluate_for_q(cvector_t q) const override final\n"
 		"\n"
 		"Complex formfactor. \n"
 		"\n"
@@ -117074,7 +117719,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorLongRipple2Gauss_clone", _wrap_FormFactorLongRipple2Gauss_clone, METH_VARARGS, (char *)"\n"
 		"FormFactorLongRipple2Gauss_clone(FormFactorLongRipple2Gauss self) -> FormFactorLongRipple2Gauss\n"
 		"\n"
-		"FormFactorLongRipple2Gauss* FormFactorLongRipple2Gauss::clone() const overridefinal\n"
+		"FormFactorLongRipple2Gauss* FormFactorLongRipple2Gauss::clone() const override final\n"
 		"\n"
 		"Returns a clone of this  ISample object. \n"
 		"\n"
@@ -117082,7 +117727,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorLongRipple2Gauss_accept", _wrap_FormFactorLongRipple2Gauss_accept, METH_VARARGS, (char *)"\n"
 		"FormFactorLongRipple2Gauss_accept(FormFactorLongRipple2Gauss self, INodeVisitor visitor)\n"
 		"\n"
-		"void FormFactorLongRipple2Gauss::accept(INodeVisitor *visitor) const overridefinal\n"
+		"void FormFactorLongRipple2Gauss::accept(INodeVisitor *visitor) const override final\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -117090,31 +117735,31 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorLongRipple2Gauss_getHeight", _wrap_FormFactorLongRipple2Gauss_getHeight, METH_VARARGS, (char *)"\n"
 		"FormFactorLongRipple2Gauss_getHeight(FormFactorLongRipple2Gauss self) -> double\n"
 		"\n"
-		"double FormFactorLongRipple2Gauss::getHeight() const \n"
+		"double FormFactorLongRipple2Gauss::getHeight() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorLongRipple2Gauss_getWidth", _wrap_FormFactorLongRipple2Gauss_getWidth, METH_VARARGS, (char *)"\n"
 		"FormFactorLongRipple2Gauss_getWidth(FormFactorLongRipple2Gauss self) -> double\n"
 		"\n"
-		"double FormFactorLongRipple2Gauss::getWidth() const \n"
+		"double FormFactorLongRipple2Gauss::getWidth() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorLongRipple2Gauss_getLength", _wrap_FormFactorLongRipple2Gauss_getLength, METH_VARARGS, (char *)"\n"
 		"FormFactorLongRipple2Gauss_getLength(FormFactorLongRipple2Gauss self) -> double\n"
 		"\n"
-		"double FormFactorLongRipple2Gauss::getLength() const \n"
+		"double FormFactorLongRipple2Gauss::getLength() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorLongRipple2Gauss_getAsymmetry", _wrap_FormFactorLongRipple2Gauss_getAsymmetry, METH_VARARGS, (char *)"\n"
 		"FormFactorLongRipple2Gauss_getAsymmetry(FormFactorLongRipple2Gauss self) -> double\n"
 		"\n"
-		"double FormFactorLongRipple2Gauss::getAsymmetry() const \n"
+		"double FormFactorLongRipple2Gauss::getAsymmetry() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorLongRipple2Gauss_radialExtension", _wrap_FormFactorLongRipple2Gauss_radialExtension, METH_VARARGS, (char *)"\n"
 		"FormFactorLongRipple2Gauss_radialExtension(FormFactorLongRipple2Gauss self) -> double\n"
 		"\n"
-		"double FormFactorLongRipple2Gauss::radialExtension() const overridefinal\n"
+		"double FormFactorLongRipple2Gauss::radialExtension() const override final\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
@@ -117122,7 +117767,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorLongRipple2Gauss_evaluate_for_q", _wrap_FormFactorLongRipple2Gauss_evaluate_for_q, METH_VARARGS, (char *)"\n"
 		"FormFactorLongRipple2Gauss_evaluate_for_q(FormFactorLongRipple2Gauss self, cvector_t q) -> complex_t\n"
 		"\n"
-		"complex_t FormFactorLongRipple2Gauss::evaluate_for_q(cvector_t q) const overridefinal\n"
+		"complex_t FormFactorLongRipple2Gauss::evaluate_for_q(cvector_t q) const override final\n"
 		"\n"
 		"Complex formfactor. \n"
 		"\n"
@@ -117153,7 +117798,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorLongRipple2Lorentz_clone", _wrap_FormFactorLongRipple2Lorentz_clone, METH_VARARGS, (char *)"\n"
 		"FormFactorLongRipple2Lorentz_clone(FormFactorLongRipple2Lorentz self) -> FormFactorLongRipple2Lorentz\n"
 		"\n"
-		"FormFactorLongRipple2Lorentz* FormFactorLongRipple2Lorentz::clone() const overridefinal\n"
+		"FormFactorLongRipple2Lorentz* FormFactorLongRipple2Lorentz::clone() const override final\n"
 		"\n"
 		"Returns a clone of this  ISample object. \n"
 		"\n"
@@ -117161,7 +117806,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorLongRipple2Lorentz_accept", _wrap_FormFactorLongRipple2Lorentz_accept, METH_VARARGS, (char *)"\n"
 		"FormFactorLongRipple2Lorentz_accept(FormFactorLongRipple2Lorentz self, INodeVisitor visitor)\n"
 		"\n"
-		"void FormFactorLongRipple2Lorentz::accept(INodeVisitor *visitor) const overridefinal\n"
+		"void FormFactorLongRipple2Lorentz::accept(INodeVisitor *visitor) const override final\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -117169,31 +117814,31 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorLongRipple2Lorentz_getHeight", _wrap_FormFactorLongRipple2Lorentz_getHeight, METH_VARARGS, (char *)"\n"
 		"FormFactorLongRipple2Lorentz_getHeight(FormFactorLongRipple2Lorentz self) -> double\n"
 		"\n"
-		"double FormFactorLongRipple2Lorentz::getHeight() const \n"
+		"double FormFactorLongRipple2Lorentz::getHeight() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorLongRipple2Lorentz_getWidth", _wrap_FormFactorLongRipple2Lorentz_getWidth, METH_VARARGS, (char *)"\n"
 		"FormFactorLongRipple2Lorentz_getWidth(FormFactorLongRipple2Lorentz self) -> double\n"
 		"\n"
-		"double FormFactorLongRipple2Lorentz::getWidth() const \n"
+		"double FormFactorLongRipple2Lorentz::getWidth() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorLongRipple2Lorentz_getLength", _wrap_FormFactorLongRipple2Lorentz_getLength, METH_VARARGS, (char *)"\n"
 		"FormFactorLongRipple2Lorentz_getLength(FormFactorLongRipple2Lorentz self) -> double\n"
 		"\n"
-		"double FormFactorLongRipple2Lorentz::getLength() const \n"
+		"double FormFactorLongRipple2Lorentz::getLength() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorLongRipple2Lorentz_getAsymmetry", _wrap_FormFactorLongRipple2Lorentz_getAsymmetry, METH_VARARGS, (char *)"\n"
 		"FormFactorLongRipple2Lorentz_getAsymmetry(FormFactorLongRipple2Lorentz self) -> double\n"
 		"\n"
-		"double FormFactorLongRipple2Lorentz::getAsymmetry() const \n"
+		"double FormFactorLongRipple2Lorentz::getAsymmetry() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorLongRipple2Lorentz_radialExtension", _wrap_FormFactorLongRipple2Lorentz_radialExtension, METH_VARARGS, (char *)"\n"
 		"FormFactorLongRipple2Lorentz_radialExtension(FormFactorLongRipple2Lorentz self) -> double\n"
 		"\n"
-		"double FormFactorLongRipple2Lorentz::radialExtension() const overridefinal\n"
+		"double FormFactorLongRipple2Lorentz::radialExtension() const override final\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
@@ -117201,7 +117846,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorLongRipple2Lorentz_evaluate_for_q", _wrap_FormFactorLongRipple2Lorentz_evaluate_for_q, METH_VARARGS, (char *)"\n"
 		"FormFactorLongRipple2Lorentz_evaluate_for_q(FormFactorLongRipple2Lorentz self, cvector_t q) -> complex_t\n"
 		"\n"
-		"complex_t FormFactorLongRipple2Lorentz::evaluate_for_q(cvector_t q) const overridefinal\n"
+		"complex_t FormFactorLongRipple2Lorentz::evaluate_for_q(cvector_t q) const override final\n"
 		"\n"
 		"Complex formfactor. \n"
 		"\n"
@@ -117218,7 +117863,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorLorentz_clone", _wrap_FormFactorLorentz_clone, METH_VARARGS, (char *)"\n"
 		"FormFactorLorentz_clone(FormFactorLorentz self) -> FormFactorLorentz\n"
 		"\n"
-		"FormFactorLorentz* FormFactorLorentz::clone() const overridefinal\n"
+		"FormFactorLorentz* FormFactorLorentz::clone() const override final\n"
 		"\n"
 		"Returns a clone of this  ISample object. \n"
 		"\n"
@@ -117226,7 +117871,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorLorentz_accept", _wrap_FormFactorLorentz_accept, METH_VARARGS, (char *)"\n"
 		"FormFactorLorentz_accept(FormFactorLorentz self, INodeVisitor visitor)\n"
 		"\n"
-		"void FormFactorLorentz::accept(INodeVisitor *visitor) const overridefinal\n"
+		"void FormFactorLorentz::accept(INodeVisitor *visitor) const override final\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -117234,19 +117879,19 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorLorentz_getWidth", _wrap_FormFactorLorentz_getWidth, METH_VARARGS, (char *)"\n"
 		"FormFactorLorentz_getWidth(FormFactorLorentz self) -> double\n"
 		"\n"
-		"double FormFactorLorentz::getWidth() const \n"
+		"double FormFactorLorentz::getWidth() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorLorentz_getHeight", _wrap_FormFactorLorentz_getHeight, METH_VARARGS, (char *)"\n"
 		"FormFactorLorentz_getHeight(FormFactorLorentz self) -> double\n"
 		"\n"
-		"double FormFactorLorentz::getHeight() const \n"
+		"double FormFactorLorentz::getHeight() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorLorentz_radialExtension", _wrap_FormFactorLorentz_radialExtension, METH_VARARGS, (char *)"\n"
 		"FormFactorLorentz_radialExtension(FormFactorLorentz self) -> double\n"
 		"\n"
-		"double FormFactorLorentz::radialExtension() const overridefinal\n"
+		"double FormFactorLorentz::radialExtension() const override final\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
@@ -117254,7 +117899,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorLorentz_evaluate_for_q", _wrap_FormFactorLorentz_evaluate_for_q, METH_VARARGS, (char *)"\n"
 		"FormFactorLorentz_evaluate_for_q(FormFactorLorentz self, cvector_t q) -> complex_t\n"
 		"\n"
-		"complex_t FormFactorLorentz::evaluate_for_q(cvector_t q) const overridefinal\n"
+		"complex_t FormFactorLorentz::evaluate_for_q(cvector_t q) const override final\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -117281,7 +117926,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorPrism3_clone", _wrap_FormFactorPrism3_clone, METH_VARARGS, (char *)"\n"
 		"FormFactorPrism3_clone(FormFactorPrism3 self) -> FormFactorPrism3\n"
 		"\n"
-		"FormFactorPrism3* FormFactorPrism3::clone() const overridefinal\n"
+		"FormFactorPrism3* FormFactorPrism3::clone() const override final\n"
 		"\n"
 		"Returns a clone of this  ISample object. \n"
 		"\n"
@@ -117289,7 +117934,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorPrism3_accept", _wrap_FormFactorPrism3_accept, METH_VARARGS, (char *)"\n"
 		"FormFactorPrism3_accept(FormFactorPrism3 self, INodeVisitor visitor)\n"
 		"\n"
-		"void FormFactorPrism3::accept(INodeVisitor *visitor) const overridefinal\n"
+		"void FormFactorPrism3::accept(INodeVisitor *visitor) const override final\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -117297,7 +117942,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorPrism3_getBaseEdge", _wrap_FormFactorPrism3_getBaseEdge, METH_VARARGS, (char *)"\n"
 		"FormFactorPrism3_getBaseEdge(FormFactorPrism3 self) -> double\n"
 		"\n"
-		"double FormFactorPrism3::getBaseEdge() const \n"
+		"double FormFactorPrism3::getBaseEdge() const\n"
 		"\n"
 		""},
 	 { (char *)"delete_FormFactorPrism3", _wrap_delete_FormFactorPrism3, METH_VARARGS, (char *)"delete_FormFactorPrism3(FormFactorPrism3 self)"},
@@ -117322,7 +117967,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorPrism6_clone", _wrap_FormFactorPrism6_clone, METH_VARARGS, (char *)"\n"
 		"FormFactorPrism6_clone(FormFactorPrism6 self) -> FormFactorPrism6\n"
 		"\n"
-		"FormFactorPrism6* FormFactorPrism6::clone() const overridefinal\n"
+		"FormFactorPrism6* FormFactorPrism6::clone() const override final\n"
 		"\n"
 		"Returns a clone of this  ISample object. \n"
 		"\n"
@@ -117330,7 +117975,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorPrism6_accept", _wrap_FormFactorPrism6_accept, METH_VARARGS, (char *)"\n"
 		"FormFactorPrism6_accept(FormFactorPrism6 self, INodeVisitor visitor)\n"
 		"\n"
-		"void FormFactorPrism6::accept(INodeVisitor *visitor) const overridefinal\n"
+		"void FormFactorPrism6::accept(INodeVisitor *visitor) const override final\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -117338,7 +117983,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorPrism6_getBaseEdge", _wrap_FormFactorPrism6_getBaseEdge, METH_VARARGS, (char *)"\n"
 		"FormFactorPrism6_getBaseEdge(FormFactorPrism6 self) -> double\n"
 		"\n"
-		"double FormFactorPrism6::getBaseEdge() const \n"
+		"double FormFactorPrism6::getBaseEdge() const\n"
 		"\n"
 		""},
 	 { (char *)"delete_FormFactorPrism6", _wrap_delete_FormFactorPrism6, METH_VARARGS, (char *)"delete_FormFactorPrism6(FormFactorPrism6 self)"},
@@ -117366,7 +118011,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorPyramid_clone", _wrap_FormFactorPyramid_clone, METH_VARARGS, (char *)"\n"
 		"FormFactorPyramid_clone(FormFactorPyramid self) -> FormFactorPyramid\n"
 		"\n"
-		"FormFactorPyramid* FormFactorPyramid::clone() const overridefinal\n"
+		"FormFactorPyramid* FormFactorPyramid::clone() const override final\n"
 		"\n"
 		"Returns a clone of this  ISample object. \n"
 		"\n"
@@ -117374,7 +118019,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorPyramid_accept", _wrap_FormFactorPyramid_accept, METH_VARARGS, (char *)"\n"
 		"FormFactorPyramid_accept(FormFactorPyramid self, INodeVisitor visitor)\n"
 		"\n"
-		"void FormFactorPyramid::accept(INodeVisitor *visitor) const overridefinal\n"
+		"void FormFactorPyramid::accept(INodeVisitor *visitor) const override final\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -117382,19 +118027,19 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorPyramid_getHeight", _wrap_FormFactorPyramid_getHeight, METH_VARARGS, (char *)"\n"
 		"FormFactorPyramid_getHeight(FormFactorPyramid self) -> double\n"
 		"\n"
-		"double FormFactorPyramid::getHeight() const \n"
+		"double FormFactorPyramid::getHeight() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorPyramid_getBaseEdge", _wrap_FormFactorPyramid_getBaseEdge, METH_VARARGS, (char *)"\n"
 		"FormFactorPyramid_getBaseEdge(FormFactorPyramid self) -> double\n"
 		"\n"
-		"double FormFactorPyramid::getBaseEdge() const \n"
+		"double FormFactorPyramid::getBaseEdge() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorPyramid_getAlpha", _wrap_FormFactorPyramid_getAlpha, METH_VARARGS, (char *)"\n"
 		"FormFactorPyramid_getAlpha(FormFactorPyramid self) -> double\n"
 		"\n"
-		"double FormFactorPyramid::getAlpha() const \n"
+		"double FormFactorPyramid::getAlpha() const\n"
 		"\n"
 		""},
 	 { (char *)"delete_FormFactorPyramid", _wrap_delete_FormFactorPyramid, METH_VARARGS, (char *)"delete_FormFactorPyramid(FormFactorPyramid self)"},
@@ -117422,7 +118067,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorRipple1_clone", _wrap_FormFactorRipple1_clone, METH_VARARGS, (char *)"\n"
 		"FormFactorRipple1_clone(FormFactorRipple1 self) -> FormFactorRipple1\n"
 		"\n"
-		"FormFactorRipple1* FormFactorRipple1::clone() const overridefinal\n"
+		"FormFactorRipple1* FormFactorRipple1::clone() const override final\n"
 		"\n"
 		"Returns a clone of this  ISample object. \n"
 		"\n"
@@ -117430,7 +118075,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorRipple1_accept", _wrap_FormFactorRipple1_accept, METH_VARARGS, (char *)"\n"
 		"FormFactorRipple1_accept(FormFactorRipple1 self, INodeVisitor visitor)\n"
 		"\n"
-		"void FormFactorRipple1::accept(INodeVisitor *visitor) const overridefinal\n"
+		"void FormFactorRipple1::accept(INodeVisitor *visitor) const override final\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -117438,25 +118083,25 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorRipple1_getLength", _wrap_FormFactorRipple1_getLength, METH_VARARGS, (char *)"\n"
 		"FormFactorRipple1_getLength(FormFactorRipple1 self) -> double\n"
 		"\n"
-		"double FormFactorRipple1::getLength() const \n"
+		"double FormFactorRipple1::getLength() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorRipple1_getHeight", _wrap_FormFactorRipple1_getHeight, METH_VARARGS, (char *)"\n"
 		"FormFactorRipple1_getHeight(FormFactorRipple1 self) -> double\n"
 		"\n"
-		"double FormFactorRipple1::getHeight() const \n"
+		"double FormFactorRipple1::getHeight() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorRipple1_getWidth", _wrap_FormFactorRipple1_getWidth, METH_VARARGS, (char *)"\n"
 		"FormFactorRipple1_getWidth(FormFactorRipple1 self) -> double\n"
 		"\n"
-		"double FormFactorRipple1::getWidth() const \n"
+		"double FormFactorRipple1::getWidth() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorRipple1_radialExtension", _wrap_FormFactorRipple1_radialExtension, METH_VARARGS, (char *)"\n"
 		"FormFactorRipple1_radialExtension(FormFactorRipple1 self) -> double\n"
 		"\n"
-		"double FormFactorRipple1::radialExtension() const overridefinal\n"
+		"double FormFactorRipple1::radialExtension() const override final\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
@@ -117464,7 +118109,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorRipple1_evaluate_for_q", _wrap_FormFactorRipple1_evaluate_for_q, METH_VARARGS, (char *)"\n"
 		"FormFactorRipple1_evaluate_for_q(FormFactorRipple1 self, cvector_t q) -> complex_t\n"
 		"\n"
-		"complex_t FormFactorRipple1::evaluate_for_q(cvector_t q) const overridefinal\n"
+		"complex_t FormFactorRipple1::evaluate_for_q(cvector_t q) const override final\n"
 		"\n"
 		"Complex formfactor. \n"
 		"\n"
@@ -117497,7 +118142,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorRipple2_clone", _wrap_FormFactorRipple2_clone, METH_VARARGS, (char *)"\n"
 		"FormFactorRipple2_clone(FormFactorRipple2 self) -> FormFactorRipple2\n"
 		"\n"
-		"FormFactorRipple2* FormFactorRipple2::clone() const overridefinal\n"
+		"FormFactorRipple2* FormFactorRipple2::clone() const override final\n"
 		"\n"
 		"Returns a clone of this  ISample object. \n"
 		"\n"
@@ -117505,7 +118150,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorRipple2_accept", _wrap_FormFactorRipple2_accept, METH_VARARGS, (char *)"\n"
 		"FormFactorRipple2_accept(FormFactorRipple2 self, INodeVisitor visitor)\n"
 		"\n"
-		"void FormFactorRipple2::accept(INodeVisitor *visitor) const overridefinal\n"
+		"void FormFactorRipple2::accept(INodeVisitor *visitor) const override final\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -117513,31 +118158,31 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorRipple2_getHeight", _wrap_FormFactorRipple2_getHeight, METH_VARARGS, (char *)"\n"
 		"FormFactorRipple2_getHeight(FormFactorRipple2 self) -> double\n"
 		"\n"
-		"double FormFactorRipple2::getHeight() const \n"
+		"double FormFactorRipple2::getHeight() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorRipple2_getWidth", _wrap_FormFactorRipple2_getWidth, METH_VARARGS, (char *)"\n"
 		"FormFactorRipple2_getWidth(FormFactorRipple2 self) -> double\n"
 		"\n"
-		"double FormFactorRipple2::getWidth() const \n"
+		"double FormFactorRipple2::getWidth() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorRipple2_getLength", _wrap_FormFactorRipple2_getLength, METH_VARARGS, (char *)"\n"
 		"FormFactorRipple2_getLength(FormFactorRipple2 self) -> double\n"
 		"\n"
-		"double FormFactorRipple2::getLength() const \n"
+		"double FormFactorRipple2::getLength() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorRipple2_getAsymmetry", _wrap_FormFactorRipple2_getAsymmetry, METH_VARARGS, (char *)"\n"
 		"FormFactorRipple2_getAsymmetry(FormFactorRipple2 self) -> double\n"
 		"\n"
-		"double FormFactorRipple2::getAsymmetry() const \n"
+		"double FormFactorRipple2::getAsymmetry() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorRipple2_radialExtension", _wrap_FormFactorRipple2_radialExtension, METH_VARARGS, (char *)"\n"
 		"FormFactorRipple2_radialExtension(FormFactorRipple2 self) -> double\n"
 		"\n"
-		"double FormFactorRipple2::radialExtension() const overridefinal\n"
+		"double FormFactorRipple2::radialExtension() const override final\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
@@ -117545,7 +118190,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorRipple2_evaluate_for_q", _wrap_FormFactorRipple2_evaluate_for_q, METH_VARARGS, (char *)"\n"
 		"FormFactorRipple2_evaluate_for_q(FormFactorRipple2 self, cvector_t q) -> complex_t\n"
 		"\n"
-		"complex_t FormFactorRipple2::evaluate_for_q(cvector_t q) const overridefinal\n"
+		"complex_t FormFactorRipple2::evaluate_for_q(cvector_t q) const override final\n"
 		"\n"
 		"Complex formfactor. \n"
 		"\n"
@@ -117561,7 +118206,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorSphereGaussianRadius_clone", _wrap_FormFactorSphereGaussianRadius_clone, METH_VARARGS, (char *)"\n"
 		"FormFactorSphereGaussianRadius_clone(FormFactorSphereGaussianRadius self) -> FormFactorSphereGaussianRadius\n"
 		"\n"
-		"FormFactorSphereGaussianRadius* FormFactorSphereGaussianRadius::clone() const overridefinal\n"
+		"FormFactorSphereGaussianRadius* FormFactorSphereGaussianRadius::clone() const override final\n"
 		"\n"
 		"Returns a clone of this  ISample object. \n"
 		"\n"
@@ -117569,7 +118214,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorSphereGaussianRadius_accept", _wrap_FormFactorSphereGaussianRadius_accept, METH_VARARGS, (char *)"\n"
 		"FormFactorSphereGaussianRadius_accept(FormFactorSphereGaussianRadius self, INodeVisitor visitor)\n"
 		"\n"
-		"void FormFactorSphereGaussianRadius::accept(INodeVisitor *visitor) const overridefinal\n"
+		"void FormFactorSphereGaussianRadius::accept(INodeVisitor *visitor) const override final\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -117577,7 +118222,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorSphereGaussianRadius_radialExtension", _wrap_FormFactorSphereGaussianRadius_radialExtension, METH_VARARGS, (char *)"\n"
 		"FormFactorSphereGaussianRadius_radialExtension(FormFactorSphereGaussianRadius self) -> double\n"
 		"\n"
-		"double FormFactorSphereGaussianRadius::radialExtension() const overridefinal\n"
+		"double FormFactorSphereGaussianRadius::radialExtension() const override final\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
@@ -117585,7 +118230,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorSphereGaussianRadius_evaluate_for_q", _wrap_FormFactorSphereGaussianRadius_evaluate_for_q, METH_VARARGS, (char *)"\n"
 		"FormFactorSphereGaussianRadius_evaluate_for_q(FormFactorSphereGaussianRadius self, cvector_t q) -> complex_t\n"
 		"\n"
-		"complex_t FormFactorSphereGaussianRadius::evaluate_for_q(cvector_t q) const overridefinal\n"
+		"complex_t FormFactorSphereGaussianRadius::evaluate_for_q(cvector_t q) const override final\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -117601,7 +118246,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorSphereLogNormalRadius_clone", _wrap_FormFactorSphereLogNormalRadius_clone, METH_VARARGS, (char *)"\n"
 		"FormFactorSphereLogNormalRadius_clone(FormFactorSphereLogNormalRadius self) -> FormFactorSphereLogNormalRadius\n"
 		"\n"
-		"FormFactorSphereLogNormalRadius* FormFactorSphereLogNormalRadius::clone() const overridefinal\n"
+		"FormFactorSphereLogNormalRadius* FormFactorSphereLogNormalRadius::clone() const override final\n"
 		"\n"
 		"Returns a clone of this  ISample object. \n"
 		"\n"
@@ -117609,7 +118254,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorSphereLogNormalRadius_accept", _wrap_FormFactorSphereLogNormalRadius_accept, METH_VARARGS, (char *)"\n"
 		"FormFactorSphereLogNormalRadius_accept(FormFactorSphereLogNormalRadius self, INodeVisitor visitor)\n"
 		"\n"
-		"void FormFactorSphereLogNormalRadius::accept(INodeVisitor *visitor) const overridefinal\n"
+		"void FormFactorSphereLogNormalRadius::accept(INodeVisitor *visitor) const override final\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -117617,7 +118262,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorSphereLogNormalRadius_radialExtension", _wrap_FormFactorSphereLogNormalRadius_radialExtension, METH_VARARGS, (char *)"\n"
 		"FormFactorSphereLogNormalRadius_radialExtension(FormFactorSphereLogNormalRadius self) -> double\n"
 		"\n"
-		"double FormFactorSphereLogNormalRadius::radialExtension() const overridefinal\n"
+		"double FormFactorSphereLogNormalRadius::radialExtension() const override final\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
@@ -117625,7 +118270,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorSphereLogNormalRadius_evaluate_for_q", _wrap_FormFactorSphereLogNormalRadius_evaluate_for_q, METH_VARARGS, (char *)"\n"
 		"FormFactorSphereLogNormalRadius_evaluate_for_q(FormFactorSphereLogNormalRadius self, cvector_t q) -> complex_t\n"
 		"\n"
-		"complex_t FormFactorSphereLogNormalRadius::evaluate_for_q(cvector_t q) const overridefinal\n"
+		"complex_t FormFactorSphereLogNormalRadius::evaluate_for_q(cvector_t q) const override final\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -117641,7 +118286,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorSphereUniformRadius_clone", _wrap_FormFactorSphereUniformRadius_clone, METH_VARARGS, (char *)"\n"
 		"FormFactorSphereUniformRadius_clone(FormFactorSphereUniformRadius self) -> FormFactorSphereUniformRadius\n"
 		"\n"
-		"FormFactorSphereUniformRadius* FormFactorSphereUniformRadius::clone() const overridefinal\n"
+		"FormFactorSphereUniformRadius* FormFactorSphereUniformRadius::clone() const override final\n"
 		"\n"
 		"Returns a clone of this  ISample object. \n"
 		"\n"
@@ -117649,7 +118294,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorSphereUniformRadius_accept", _wrap_FormFactorSphereUniformRadius_accept, METH_VARARGS, (char *)"\n"
 		"FormFactorSphereUniformRadius_accept(FormFactorSphereUniformRadius self, INodeVisitor visitor)\n"
 		"\n"
-		"void FormFactorSphereUniformRadius::accept(INodeVisitor *visitor) const overridefinal\n"
+		"void FormFactorSphereUniformRadius::accept(INodeVisitor *visitor) const override final\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -117657,7 +118302,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorSphereUniformRadius_radialExtension", _wrap_FormFactorSphereUniformRadius_radialExtension, METH_VARARGS, (char *)"\n"
 		"FormFactorSphereUniformRadius_radialExtension(FormFactorSphereUniformRadius self) -> double\n"
 		"\n"
-		"double FormFactorSphereUniformRadius::radialExtension() const overridefinal\n"
+		"double FormFactorSphereUniformRadius::radialExtension() const override final\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
@@ -117665,7 +118310,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorSphereUniformRadius_evaluate_for_q", _wrap_FormFactorSphereUniformRadius_evaluate_for_q, METH_VARARGS, (char *)"\n"
 		"FormFactorSphereUniformRadius_evaluate_for_q(FormFactorSphereUniformRadius self, cvector_t q) -> complex_t\n"
 		"\n"
-		"complex_t FormFactorSphereUniformRadius::evaluate_for_q(cvector_t q) const overridefinal\n"
+		"complex_t FormFactorSphereUniformRadius::evaluate_for_q(cvector_t q) const override final\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -117695,7 +118340,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorTetrahedron_clone", _wrap_FormFactorTetrahedron_clone, METH_VARARGS, (char *)"\n"
 		"FormFactorTetrahedron_clone(FormFactorTetrahedron self) -> FormFactorTetrahedron\n"
 		"\n"
-		"FormFactorTetrahedron* FormFactorTetrahedron::clone() const overridefinal\n"
+		"FormFactorTetrahedron* FormFactorTetrahedron::clone() const override final\n"
 		"\n"
 		"Returns a clone of this  ISample object. \n"
 		"\n"
@@ -117703,7 +118348,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorTetrahedron_accept", _wrap_FormFactorTetrahedron_accept, METH_VARARGS, (char *)"\n"
 		"FormFactorTetrahedron_accept(FormFactorTetrahedron self, INodeVisitor visitor)\n"
 		"\n"
-		"void FormFactorTetrahedron::accept(INodeVisitor *visitor) const overridefinal\n"
+		"void FormFactorTetrahedron::accept(INodeVisitor *visitor) const override final\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -117711,19 +118356,19 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorTetrahedron_getBaseEdge", _wrap_FormFactorTetrahedron_getBaseEdge, METH_VARARGS, (char *)"\n"
 		"FormFactorTetrahedron_getBaseEdge(FormFactorTetrahedron self) -> double\n"
 		"\n"
-		"double FormFactorTetrahedron::getBaseEdge() const \n"
+		"double FormFactorTetrahedron::getBaseEdge() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorTetrahedron_getHeight", _wrap_FormFactorTetrahedron_getHeight, METH_VARARGS, (char *)"\n"
 		"FormFactorTetrahedron_getHeight(FormFactorTetrahedron self) -> double\n"
 		"\n"
-		"double FormFactorTetrahedron::getHeight() const \n"
+		"double FormFactorTetrahedron::getHeight() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorTetrahedron_getAlpha", _wrap_FormFactorTetrahedron_getAlpha, METH_VARARGS, (char *)"\n"
 		"FormFactorTetrahedron_getAlpha(FormFactorTetrahedron self) -> double\n"
 		"\n"
-		"double FormFactorTetrahedron::getAlpha() const \n"
+		"double FormFactorTetrahedron::getAlpha() const\n"
 		"\n"
 		""},
 	 { (char *)"delete_FormFactorTetrahedron", _wrap_delete_FormFactorTetrahedron, METH_VARARGS, (char *)"delete_FormFactorTetrahedron(FormFactorTetrahedron self)"},
@@ -117748,7 +118393,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorTruncatedCube_clone", _wrap_FormFactorTruncatedCube_clone, METH_VARARGS, (char *)"\n"
 		"FormFactorTruncatedCube_clone(FormFactorTruncatedCube self) -> FormFactorTruncatedCube\n"
 		"\n"
-		"FormFactorTruncatedCube* FormFactorTruncatedCube::clone() const overridefinal\n"
+		"FormFactorTruncatedCube* FormFactorTruncatedCube::clone() const override final\n"
 		"\n"
 		"Returns a clone of this  ISample object. \n"
 		"\n"
@@ -117756,7 +118401,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorTruncatedCube_accept", _wrap_FormFactorTruncatedCube_accept, METH_VARARGS, (char *)"\n"
 		"FormFactorTruncatedCube_accept(FormFactorTruncatedCube self, INodeVisitor visitor)\n"
 		"\n"
-		"void FormFactorTruncatedCube::accept(INodeVisitor *visitor) const overridefinal\n"
+		"void FormFactorTruncatedCube::accept(INodeVisitor *visitor) const override final\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -117764,13 +118409,13 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorTruncatedCube_getLength", _wrap_FormFactorTruncatedCube_getLength, METH_VARARGS, (char *)"\n"
 		"FormFactorTruncatedCube_getLength(FormFactorTruncatedCube self) -> double\n"
 		"\n"
-		"double FormFactorTruncatedCube::getLength() const \n"
+		"double FormFactorTruncatedCube::getLength() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorTruncatedCube_getRemovedLength", _wrap_FormFactorTruncatedCube_getRemovedLength, METH_VARARGS, (char *)"\n"
 		"FormFactorTruncatedCube_getRemovedLength(FormFactorTruncatedCube self) -> double\n"
 		"\n"
-		"double FormFactorTruncatedCube::getRemovedLength() const \n"
+		"double FormFactorTruncatedCube::getRemovedLength() const\n"
 		"\n"
 		""},
 	 { (char *)"delete_FormFactorTruncatedCube", _wrap_delete_FormFactorTruncatedCube, METH_VARARGS, (char *)"delete_FormFactorTruncatedCube(FormFactorTruncatedCube self)"},
@@ -117799,7 +118444,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorTruncatedSphere_clone", _wrap_FormFactorTruncatedSphere_clone, METH_VARARGS, (char *)"\n"
 		"FormFactorTruncatedSphere_clone(FormFactorTruncatedSphere self) -> FormFactorTruncatedSphere\n"
 		"\n"
-		"FormFactorTruncatedSphere* FormFactorTruncatedSphere::clone() const overridefinal\n"
+		"FormFactorTruncatedSphere* FormFactorTruncatedSphere::clone() const override final\n"
 		"\n"
 		"Returns a clone of this  ISample object. \n"
 		"\n"
@@ -117807,7 +118452,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorTruncatedSphere_accept", _wrap_FormFactorTruncatedSphere_accept, METH_VARARGS, (char *)"\n"
 		"FormFactorTruncatedSphere_accept(FormFactorTruncatedSphere self, INodeVisitor visitor)\n"
 		"\n"
-		"void FormFactorTruncatedSphere::accept(INodeVisitor *visitor) const overridefinal\n"
+		"void FormFactorTruncatedSphere::accept(INodeVisitor *visitor) const override final\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -117815,25 +118460,25 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorTruncatedSphere_getHeight", _wrap_FormFactorTruncatedSphere_getHeight, METH_VARARGS, (char *)"\n"
 		"FormFactorTruncatedSphere_getHeight(FormFactorTruncatedSphere self) -> double\n"
 		"\n"
-		"double FormFactorTruncatedSphere::getHeight() const \n"
+		"double FormFactorTruncatedSphere::getHeight() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorTruncatedSphere_getRadius", _wrap_FormFactorTruncatedSphere_getRadius, METH_VARARGS, (char *)"\n"
 		"FormFactorTruncatedSphere_getRadius(FormFactorTruncatedSphere self) -> double\n"
 		"\n"
-		"double FormFactorTruncatedSphere::getRadius() const \n"
+		"double FormFactorTruncatedSphere::getRadius() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorTruncatedSphere_getRemovedTop", _wrap_FormFactorTruncatedSphere_getRemovedTop, METH_VARARGS, (char *)"\n"
 		"FormFactorTruncatedSphere_getRemovedTop(FormFactorTruncatedSphere self) -> double\n"
 		"\n"
-		"double FormFactorTruncatedSphere::getRemovedTop() const \n"
+		"double FormFactorTruncatedSphere::getRemovedTop() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorTruncatedSphere_radialExtension", _wrap_FormFactorTruncatedSphere_radialExtension, METH_VARARGS, (char *)"\n"
 		"FormFactorTruncatedSphere_radialExtension(FormFactorTruncatedSphere self) -> double\n"
 		"\n"
-		"double FormFactorTruncatedSphere::radialExtension() const overridefinal\n"
+		"double FormFactorTruncatedSphere::radialExtension() const override final\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
@@ -117841,7 +118486,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorTruncatedSphere_evaluate_for_q", _wrap_FormFactorTruncatedSphere_evaluate_for_q, METH_VARARGS, (char *)"\n"
 		"FormFactorTruncatedSphere_evaluate_for_q(FormFactorTruncatedSphere self, cvector_t q) -> complex_t\n"
 		"\n"
-		"complex_t FormFactorTruncatedSphere::evaluate_for_q(cvector_t q) const overridefinal\n"
+		"complex_t FormFactorTruncatedSphere::evaluate_for_q(cvector_t q) const override final\n"
 		"\n"
 		"Complex formfactor. \n"
 		"\n"
@@ -117875,7 +118520,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorTruncatedSpheroid_clone", _wrap_FormFactorTruncatedSpheroid_clone, METH_VARARGS, (char *)"\n"
 		"FormFactorTruncatedSpheroid_clone(FormFactorTruncatedSpheroid self) -> FormFactorTruncatedSpheroid\n"
 		"\n"
-		"FormFactorTruncatedSpheroid* FormFactorTruncatedSpheroid::clone() const overridefinal\n"
+		"FormFactorTruncatedSpheroid* FormFactorTruncatedSpheroid::clone() const override final\n"
 		"\n"
 		"Returns a clone of this  ISample object. \n"
 		"\n"
@@ -117883,7 +118528,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorTruncatedSpheroid_accept", _wrap_FormFactorTruncatedSpheroid_accept, METH_VARARGS, (char *)"\n"
 		"FormFactorTruncatedSpheroid_accept(FormFactorTruncatedSpheroid self, INodeVisitor visitor)\n"
 		"\n"
-		"void FormFactorTruncatedSpheroid::accept(INodeVisitor *visitor) const overridefinal\n"
+		"void FormFactorTruncatedSpheroid::accept(INodeVisitor *visitor) const override final\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -117891,31 +118536,31 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorTruncatedSpheroid_getRadius", _wrap_FormFactorTruncatedSpheroid_getRadius, METH_VARARGS, (char *)"\n"
 		"FormFactorTruncatedSpheroid_getRadius(FormFactorTruncatedSpheroid self) -> double\n"
 		"\n"
-		"double FormFactorTruncatedSpheroid::getRadius() const \n"
+		"double FormFactorTruncatedSpheroid::getRadius() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorTruncatedSpheroid_getHeight", _wrap_FormFactorTruncatedSpheroid_getHeight, METH_VARARGS, (char *)"\n"
 		"FormFactorTruncatedSpheroid_getHeight(FormFactorTruncatedSpheroid self) -> double\n"
 		"\n"
-		"double FormFactorTruncatedSpheroid::getHeight() const \n"
+		"double FormFactorTruncatedSpheroid::getHeight() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorTruncatedSpheroid_getHeightFlattening", _wrap_FormFactorTruncatedSpheroid_getHeightFlattening, METH_VARARGS, (char *)"\n"
 		"FormFactorTruncatedSpheroid_getHeightFlattening(FormFactorTruncatedSpheroid self) -> double\n"
 		"\n"
-		"double FormFactorTruncatedSpheroid::getHeightFlattening() const \n"
+		"double FormFactorTruncatedSpheroid::getHeightFlattening() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorTruncatedSpheroid_getRemovedTop", _wrap_FormFactorTruncatedSpheroid_getRemovedTop, METH_VARARGS, (char *)"\n"
 		"FormFactorTruncatedSpheroid_getRemovedTop(FormFactorTruncatedSpheroid self) -> double\n"
 		"\n"
-		"double FormFactorTruncatedSpheroid::getRemovedTop() const \n"
+		"double FormFactorTruncatedSpheroid::getRemovedTop() const\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorTruncatedSpheroid_radialExtension", _wrap_FormFactorTruncatedSpheroid_radialExtension, METH_VARARGS, (char *)"\n"
 		"FormFactorTruncatedSpheroid_radialExtension(FormFactorTruncatedSpheroid self) -> double\n"
 		"\n"
-		"double FormFactorTruncatedSpheroid::radialExtension() const overridefinal\n"
+		"double FormFactorTruncatedSpheroid::radialExtension() const override final\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
@@ -117923,7 +118568,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorTruncatedSpheroid_evaluate_for_q", _wrap_FormFactorTruncatedSpheroid_evaluate_for_q, METH_VARARGS, (char *)"\n"
 		"FormFactorTruncatedSpheroid_evaluate_for_q(FormFactorTruncatedSpheroid self, cvector_t q) -> complex_t\n"
 		"\n"
-		"complex_t FormFactorTruncatedSpheroid::evaluate_for_q(cvector_t q) const overridefinal\n"
+		"complex_t FormFactorTruncatedSpheroid::evaluate_for_q(cvector_t q) const override final\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -117939,13 +118584,13 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"delete_FormFactorWeighted", _wrap_delete_FormFactorWeighted, METH_VARARGS, (char *)"\n"
 		"delete_FormFactorWeighted(FormFactorWeighted self)\n"
 		"\n"
-		"FormFactorWeighted::~FormFactorWeighted() overridefinal\n"
+		"FormFactorWeighted::~FormFactorWeighted() override final\n"
 		"\n"
 		""},
 	 { (char *)"FormFactorWeighted_clone", _wrap_FormFactorWeighted_clone, METH_VARARGS, (char *)"\n"
 		"FormFactorWeighted_clone(FormFactorWeighted self) -> FormFactorWeighted\n"
 		"\n"
-		"FormFactorWeighted * FormFactorWeighted::clone() const overridefinal\n"
+		"FormFactorWeighted * FormFactorWeighted::clone() const override final\n"
 		"\n"
 		"Returns a clone of this  ISample object. \n"
 		"\n"
@@ -117953,7 +118598,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorWeighted_accept", _wrap_FormFactorWeighted_accept, METH_VARARGS, (char *)"\n"
 		"FormFactorWeighted_accept(FormFactorWeighted self, INodeVisitor visitor)\n"
 		"\n"
-		"void FormFactorWeighted::accept(INodeVisitor *visitor) const overridefinal\n"
+		"void FormFactorWeighted::accept(INodeVisitor *visitor) const override final\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -117961,7 +118606,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorWeighted_radialExtension", _wrap_FormFactorWeighted_radialExtension, METH_VARARGS, (char *)"\n"
 		"FormFactorWeighted_radialExtension(FormFactorWeighted self) -> double\n"
 		"\n"
-		"double FormFactorWeighted::radialExtension() const overridefinal\n"
+		"double FormFactorWeighted::radialExtension() const override final\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
@@ -117969,7 +118614,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorWeighted_bottomZ", _wrap_FormFactorWeighted_bottomZ, METH_VARARGS, (char *)"\n"
 		"FormFactorWeighted_bottomZ(FormFactorWeighted self, IRotation rotation) -> double\n"
 		"\n"
-		"double FormFactorWeighted::bottomZ(const IRotation &rotation) const overridefinal\n"
+		"double FormFactorWeighted::bottomZ(const IRotation &rotation) const override final\n"
 		"\n"
 		"Returns the z-coordinate of the lowest point in this shape after a given rotation. \n"
 		"\n"
@@ -117977,7 +118622,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FormFactorWeighted_topZ", _wrap_FormFactorWeighted_topZ, METH_VARARGS, (char *)"\n"
 		"FormFactorWeighted_topZ(FormFactorWeighted self, IRotation rotation) -> double\n"
 		"\n"
-		"double FormFactorWeighted::topZ(const IRotation &rotation) const overridefinal\n"
+		"double FormFactorWeighted::topZ(const IRotation &rotation) const override final\n"
 		"\n"
 		"Returns the z-coordinate of the lowest point in this shape after a given rotation. \n"
 		"\n"
@@ -117990,17 +118635,17 @@ static PyMethodDef SwigMethods[] = {
 		"\n"
 		""},
 	 { (char *)"FormFactorWeighted_setAmbientMaterial", _wrap_FormFactorWeighted_setAmbientMaterial, METH_VARARGS, (char *)"\n"
-		"FormFactorWeighted_setAmbientMaterial(FormFactorWeighted self, HomogeneousMaterial material)\n"
+		"FormFactorWeighted_setAmbientMaterial(FormFactorWeighted self, Material material)\n"
 		"\n"
-		"void FormFactorWeighted::setAmbientMaterial(HomogeneousMaterial material) overridefinal\n"
+		"void FormFactorWeighted::setAmbientMaterial(Material material) override final\n"
 		"\n"
-		"Passes the refractive index of the ambient material in which this particle is embedded. \n"
+		"Passes the material in which this particle is embedded. \n"
 		"\n"
 		""},
 	 { (char *)"FormFactorWeighted_evaluate", _wrap_FormFactorWeighted_evaluate, METH_VARARGS, (char *)"\n"
 		"FormFactorWeighted_evaluate(FormFactorWeighted self, WavevectorInfo wavevectors) -> complex_t\n"
 		"\n"
-		"complex_t FormFactorWeighted::evaluate(const WavevectorInfo &wavevectors) const overridefinal\n"
+		"complex_t FormFactorWeighted::evaluate(const WavevectorInfo &wavevectors) const override final\n"
 		"\n"
 		"Returns scattering amplitude for complex wavevectors ki, kf. \n"
 		"\n"
@@ -118058,7 +118703,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"Simulation_getBeamIntensity", _wrap_Simulation_getBeamIntensity, METH_VARARGS, (char *)"\n"
 		"Simulation_getBeamIntensity(Simulation self) -> double\n"
 		"\n"
-		"double Simulation::getBeamIntensity() const \n"
+		"double Simulation::getBeamIntensity() const\n"
 		"\n"
 		""},
 	 { (char *)"Simulation_setBeamPolarization", _wrap_Simulation_setBeamPolarization, METH_VARARGS, (char *)"\n"
@@ -118100,7 +118745,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"Simulation_sample", _wrap_Simulation_sample, METH_VARARGS, (char *)"\n"
 		"Simulation_sample(Simulation self) -> MultiLayer\n"
 		"\n"
-		"const MultiLayer * Simulation::sample() const \n"
+		"const MultiLayer * Simulation::sample() const\n"
 		"\n"
 		""},
 	 { (char *)"Simulation_setSampleBuilderCpp", _wrap_Simulation_setSampleBuilderCpp, METH_VARARGS, (char *)"\n"
@@ -118136,7 +118781,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"Simulation_getDistributionHandler", _wrap_Simulation_getDistributionHandler, METH_VARARGS, (char *)"\n"
 		"Simulation_getDistributionHandler(Simulation self) -> DistributionHandler const &\n"
 		"\n"
-		"const DistributionHandler& Simulation::getDistributionHandler() const \n"
+		"const DistributionHandler& Simulation::getDistributionHandler() const\n"
 		"\n"
 		""},
 	 { (char *)"Simulation_setOptions", _wrap_Simulation_setOptions, METH_VARARGS, (char *)"\n"
@@ -118184,13 +118829,13 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"SimulationOptions_isIntegrate", _wrap_SimulationOptions_isIntegrate, METH_VARARGS, (char *)"\n"
 		"SimulationOptions_isIntegrate(SimulationOptions self) -> bool\n"
 		"\n"
-		"bool SimulationOptions::isIntegrate() const \n"
+		"bool SimulationOptions::isIntegrate() const\n"
 		"\n"
 		""},
 	 { (char *)"SimulationOptions_getMcPoints", _wrap_SimulationOptions_getMcPoints, METH_VARARGS, (char *)"\n"
 		"SimulationOptions_getMcPoints(SimulationOptions self) -> size_t\n"
 		"\n"
-		"size_t SimulationOptions::getMcPoints() const \n"
+		"size_t SimulationOptions::getMcPoints() const\n"
 		"\n"
 		""},
 	 { (char *)"SimulationOptions_setMonteCarloIntegration", _wrap_SimulationOptions_setMonteCarloIntegration, METH_VARARGS, (char *)"\n"
@@ -118223,7 +118868,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"SimulationOptions_getNumberOfThreads", _wrap_SimulationOptions_getNumberOfThreads, METH_VARARGS, (char *)"\n"
 		"SimulationOptions_getNumberOfThreads(SimulationOptions self) -> int\n"
 		"\n"
-		"int SimulationOptions::getNumberOfThreads() const \n"
+		"int SimulationOptions::getNumberOfThreads() const\n"
 		"\n"
 		""},
 	 { (char *)"SimulationOptions_setNumberOfBatches", _wrap_SimulationOptions_setNumberOfBatches, METH_VARARGS, (char *)"\n"
@@ -118237,13 +118882,13 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"SimulationOptions_getNumberOfBatches", _wrap_SimulationOptions_getNumberOfBatches, METH_VARARGS, (char *)"\n"
 		"SimulationOptions_getNumberOfBatches(SimulationOptions self) -> int\n"
 		"\n"
-		"int SimulationOptions::getNumberOfBatches() const \n"
+		"int SimulationOptions::getNumberOfBatches() const\n"
 		"\n"
 		""},
 	 { (char *)"SimulationOptions_getCurrentBatch", _wrap_SimulationOptions_getCurrentBatch, METH_VARARGS, (char *)"\n"
 		"SimulationOptions_getCurrentBatch(SimulationOptions self) -> int\n"
 		"\n"
-		"int SimulationOptions::getCurrentBatch() const \n"
+		"int SimulationOptions::getCurrentBatch() const\n"
 		"\n"
 		""},
 	 { (char *)"SimulationOptions_setThreadInfo", _wrap_SimulationOptions_setThreadInfo, METH_VARARGS, (char *)"\n"
@@ -118257,7 +118902,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"SimulationOptions_getHardwareConcurrency", _wrap_SimulationOptions_getHardwareConcurrency, METH_VARARGS, (char *)"\n"
 		"SimulationOptions_getHardwareConcurrency(SimulationOptions self) -> int\n"
 		"\n"
-		"int SimulationOptions::getHardwareConcurrency() const \n"
+		"int SimulationOptions::getHardwareConcurrency() const\n"
 		"\n"
 		""},
 	 { (char *)"SimulationOptions_setIncludeSpecular", _wrap_SimulationOptions_setIncludeSpecular, METH_VARARGS, (char *)"\n"
@@ -118269,7 +118914,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"SimulationOptions_includeSpecular", _wrap_SimulationOptions_includeSpecular, METH_VARARGS, (char *)"\n"
 		"SimulationOptions_includeSpecular(SimulationOptions self) -> bool\n"
 		"\n"
-		"bool SimulationOptions::includeSpecular() const \n"
+		"bool SimulationOptions::includeSpecular() const\n"
 		"\n"
 		""},
 	 { (char *)"SimulationOptions_setUseAvgMaterials", _wrap_SimulationOptions_setUseAvgMaterials, METH_VARARGS, (char *)"\n"
@@ -118281,7 +118926,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"SimulationOptions_useAvgMaterials", _wrap_SimulationOptions_useAvgMaterials, METH_VARARGS, (char *)"\n"
 		"SimulationOptions_useAvgMaterials(SimulationOptions self) -> bool\n"
 		"\n"
-		"bool SimulationOptions::useAvgMaterials() const \n"
+		"bool SimulationOptions::useAvgMaterials() const\n"
 		"\n"
 		""},
 	 { (char *)"delete_SimulationOptions", _wrap_delete_SimulationOptions, METH_VARARGS, (char *)"delete_SimulationOptions(SimulationOptions self)"},
@@ -118303,7 +118948,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"GISASSimulation_clone", _wrap_GISASSimulation_clone, METH_VARARGS, (char *)"\n"
 		"GISASSimulation_clone(GISASSimulation self) -> GISASSimulation\n"
 		"\n"
-		"GISASSimulation* GISASSimulation::clone() const \n"
+		"GISASSimulation* GISASSimulation::clone() const\n"
 		"\n"
 		""},
 	 { (char *)"GISASSimulation_accept", _wrap_GISASSimulation_accept, METH_VARARGS, (char *)"\n"
@@ -118821,7 +119466,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"IHistogram_axesUnits", _wrap_IHistogram_axesUnits, METH_VARARGS, (char *)"\n"
 		"IHistogram_axesUnits(IHistogram self) -> std::string\n"
 		"\n"
-		"std::string IHistogram::axesUnits() const \n"
+		"std::string IHistogram::axesUnits() const\n"
 		"\n"
 		""},
 	 { (char *)"IHistogram_swigregister", IHistogram_swigregister, METH_VARARGS, NULL},
@@ -119001,75 +119646,6 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"Histogram2D_dynamicCast", _wrap_Histogram2D_dynamicCast, METH_VARARGS, (char *)"Histogram2D_dynamicCast(IHistogram pHistogram) -> Histogram2D"},
 	 { (char *)"delete_Histogram2D", _wrap_delete_Histogram2D, METH_VARARGS, (char *)"delete_Histogram2D(Histogram2D self)"},
 	 { (char *)"Histogram2D_swigregister", Histogram2D_swigregister, METH_VARARGS, NULL},
-	 { (char *)"new_HomogeneousMaterial", _wrap_new_HomogeneousMaterial, METH_VARARGS, (char *)"\n"
-		"HomogeneousMaterial()\n"
-		"HomogeneousMaterial(std::string const & name, complex_t const refractive_index, kvector_t magnetization)\n"
-		"HomogeneousMaterial(std::string const & name, complex_t const refractive_index)\n"
-		"HomogeneousMaterial(std::string const & name, double refractive_index_delta, double refractive_index_beta, kvector_t magnetization)\n"
-		"new_HomogeneousMaterial(std::string const & name, double refractive_index_delta, double refractive_index_beta) -> HomogeneousMaterial\n"
-		"\n"
-		"HomogeneousMaterial::HomogeneousMaterial(const std::string &name, double refractive_index_delta, double refractive_index_beta, kvector_t magnetization=kvector_t())\n"
-		"\n"
-		"Constructs a material with  name and refractive_index parameters delta and beta (n = 1 - delta + i*beta). \n"
-		"\n"
-		""},
-	 { (char *)"delete_HomogeneousMaterial", _wrap_delete_HomogeneousMaterial, METH_VARARGS, (char *)"\n"
-		"delete_HomogeneousMaterial(HomogeneousMaterial self)\n"
-		"\n"
-		"HomogeneousMaterial::~HomogeneousMaterial()\n"
-		"\n"
-		""},
-	 { (char *)"HomogeneousMaterial_inverted", _wrap_HomogeneousMaterial_inverted, METH_VARARGS, (char *)"\n"
-		"HomogeneousMaterial_inverted(HomogeneousMaterial self) -> HomogeneousMaterial\n"
-		"\n"
-		"HomogeneousMaterial HomogeneousMaterial::inverted() const\n"
-		"\n"
-		"Constructs a material with inverted magnetization. \n"
-		"\n"
-		""},
-	 { (char *)"HomogeneousMaterial_refractiveIndex", _wrap_HomogeneousMaterial_refractiveIndex, METH_VARARGS, (char *)"\n"
-		"HomogeneousMaterial_refractiveIndex(HomogeneousMaterial self, double wavelength) -> complex_t\n"
-		"\n"
-		"complex_t HomogeneousMaterial::refractiveIndex() const \n"
-		"\n"
-		""},
-	 { (char *)"HomogeneousMaterial_refractiveIndex2", _wrap_HomogeneousMaterial_refractiveIndex2, METH_VARARGS, (char *)"\n"
-		"HomogeneousMaterial_refractiveIndex2(HomogeneousMaterial self, double wavelength) -> complex_t\n"
-		"\n"
-		"complex_t HomogeneousMaterial::refractiveIndex2() const \n"
-		"\n"
-		""},
-	 { (char *)"HomogeneousMaterial_isScalarMaterial", _wrap_HomogeneousMaterial_isScalarMaterial, METH_VARARGS, (char *)"\n"
-		"HomogeneousMaterial_isScalarMaterial(HomogeneousMaterial self) -> bool\n"
-		"\n"
-		"bool HomogeneousMaterial::isScalarMaterial() const\n"
-		"\n"
-		"Indicates whether the interaction with the material is scalar. This means that different polarization states will be diffracted equally \n"
-		"\n"
-		""},
-	 { (char *)"HomogeneousMaterial_isMagneticMaterial", _wrap_HomogeneousMaterial_isMagneticMaterial, METH_VARARGS, (char *)"\n"
-		"HomogeneousMaterial_isMagneticMaterial(HomogeneousMaterial self) -> bool\n"
-		"\n"
-		"bool HomogeneousMaterial::isMagneticMaterial() const \n"
-		"\n"
-		""},
-	 { (char *)"HomogeneousMaterial_magnetization", _wrap_HomogeneousMaterial_magnetization, METH_VARARGS, (char *)"\n"
-		"HomogeneousMaterial_magnetization(HomogeneousMaterial self) -> kvector_t\n"
-		"\n"
-		"kvector_t HomogeneousMaterial::magnetization() const\n"
-		"\n"
-		"Get the magnetization (in A/m) \n"
-		"\n"
-		""},
-	 { (char *)"HomogeneousMaterial_materialData", _wrap_HomogeneousMaterial_materialData, METH_VARARGS, (char *)"HomogeneousMaterial_materialData(HomogeneousMaterial self) -> complex_t"},
-	 { (char *)"HomogeneousMaterial_scalarSubtrSLD", _wrap_HomogeneousMaterial_scalarSubtrSLD, METH_VARARGS, (char *)"HomogeneousMaterial_scalarSubtrSLD(HomogeneousMaterial self, WavevectorInfo wavevectors) -> complex_t"},
-	 { (char *)"HomogeneousMaterial_transformedMaterial", _wrap_HomogeneousMaterial_transformedMaterial, METH_VARARGS, (char *)"\n"
-		"HomogeneousMaterial_transformedMaterial(HomogeneousMaterial self, Transform3D const & transform) -> HomogeneousMaterial\n"
-		"\n"
-		"HomogeneousMaterial HomogeneousMaterial::transformedMaterial(const Transform3D &transform) const \n"
-		"\n"
-		""},
-	 { (char *)"HomogeneousMaterial_swigregister", HomogeneousMaterial_swigregister, METH_VARARGS, NULL},
 	 { (char *)"IDetector2D_clone", _wrap_IDetector2D_clone, METH_VARARGS, (char *)"\n"
 		"IDetector2D_clone(IDetector2D self) -> IDetector2D\n"
 		"\n"
@@ -119099,13 +119675,13 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"IDetector2D_getAxis", _wrap_IDetector2D_getAxis, METH_VARARGS, (char *)"\n"
 		"IDetector2D_getAxis(IDetector2D self, size_t index) -> IAxis\n"
 		"\n"
-		"const IAxis & IDetector2D::getAxis(size_t index) const \n"
+		"const IAxis & IDetector2D::getAxis(size_t index) const\n"
 		"\n"
 		""},
 	 { (char *)"IDetector2D_getDimension", _wrap_IDetector2D_getDimension, METH_VARARGS, (char *)"\n"
 		"IDetector2D_getDimension(IDetector2D self) -> size_t\n"
 		"\n"
-		"size_t IDetector2D::getDimension() const \n"
+		"size_t IDetector2D::getDimension() const\n"
 		"\n"
 		""},
 	 { (char *)"IDetector2D_clear", _wrap_IDetector2D_clear, METH_VARARGS, (char *)"\n"
@@ -119163,7 +119739,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"IDetector2D_detectorResolution", _wrap_IDetector2D_detectorResolution, METH_VARARGS, (char *)"\n"
 		"IDetector2D_detectorResolution(IDetector2D self) -> IDetectorResolution\n"
 		"\n"
-		"const IDetectorResolution * IDetector2D::detectorResolution() const \n"
+		"const IDetectorResolution * IDetector2D::detectorResolution() const\n"
 		"\n"
 		""},
 	 { (char *)"IDetector2D_setAnalyzerProperties", _wrap_IDetector2D_setAnalyzerProperties, METH_VARARGS, (char *)"\n"
@@ -119174,9 +119750,28 @@ static PyMethodDef SwigMethods[] = {
 		"Sets the polarization analyzer characteristics of the detector. \n"
 		"\n"
 		""},
-	 { (char *)"IDetector2D_analyzerDirection", _wrap_IDetector2D_analyzerDirection, METH_VARARGS, (char *)"IDetector2D_analyzerDirection(IDetector2D self) -> kvector_t"},
-	 { (char *)"IDetector2D_analyzerEfficiency", _wrap_IDetector2D_analyzerEfficiency, METH_VARARGS, (char *)"IDetector2D_analyzerEfficiency(IDetector2D self) -> double"},
-	 { (char *)"IDetector2D_analyzerTotalTransmission", _wrap_IDetector2D_analyzerTotalTransmission, METH_VARARGS, (char *)"IDetector2D_analyzerTotalTransmission(IDetector2D self) -> double"},
+	 { (char *)"IDetector2D_analyzerDirection", _wrap_IDetector2D_analyzerDirection, METH_VARARGS, (char *)"\n"
+		"IDetector2D_analyzerDirection(IDetector2D self) -> kvector_t\n"
+		"\n"
+		"kvector_t IDetector2D::analyzerDirection() const\n"
+		"\n"
+		"Get analyzer properties. \n"
+		"\n"
+		""},
+	 { (char *)"IDetector2D_analyzerEfficiency", _wrap_IDetector2D_analyzerEfficiency, METH_VARARGS, (char *)"\n"
+		"IDetector2D_analyzerEfficiency(IDetector2D self) -> double\n"
+		"\n"
+		"double IDetector2D::analyzerEfficiency() const\n"
+		"\n"
+		"will always return a positive number \n"
+		"\n"
+		""},
+	 { (char *)"IDetector2D_analyzerTotalTransmission", _wrap_IDetector2D_analyzerTotalTransmission, METH_VARARGS, (char *)"\n"
+		"IDetector2D_analyzerTotalTransmission(IDetector2D self) -> double\n"
+		"\n"
+		"double IDetector2D::analyzerTotalTransmission() const\n"
+		"\n"
+		""},
 	 { (char *)"IDetector2D_removeMasks", _wrap_IDetector2D_removeMasks, METH_VARARGS, (char *)"\n"
 		"IDetector2D_removeMasks(IDetector2D self)\n"
 		"\n"
@@ -119214,19 +119809,19 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"IDetector2D_getDetectorMask", _wrap_IDetector2D_getDetectorMask, METH_VARARGS, (char *)"\n"
 		"IDetector2D_getDetectorMask(IDetector2D self) -> DetectorMask\n"
 		"\n"
-		"const DetectorMask * IDetector2D::getDetectorMask() const \n"
+		"const DetectorMask * IDetector2D::getDetectorMask() const\n"
 		"\n"
 		""},
 	 { (char *)"IDetector2D_numberOfMaskedChannels", _wrap_IDetector2D_numberOfMaskedChannels, METH_VARARGS, (char *)"\n"
 		"IDetector2D_numberOfMaskedChannels(IDetector2D self) -> size_t\n"
 		"\n"
-		"size_t IDetector2D::numberOfMaskedChannels() const \n"
+		"size_t IDetector2D::numberOfMaskedChannels() const\n"
 		"\n"
 		""},
 	 { (char *)"IDetector2D_isMasked", _wrap_IDetector2D_isMasked, METH_VARARGS, (char *)"\n"
 		"IDetector2D_isMasked(IDetector2D self, size_t index) -> bool\n"
 		"\n"
-		"bool IDetector2D::isMasked(size_t index) const \n"
+		"bool IDetector2D::isMasked(size_t index) const\n"
 		"\n"
 		""},
 	 { (char *)"IDetector2D_hasMasks", _wrap_IDetector2D_hasMasks, METH_VARARGS, (char *)"\n"
@@ -119516,7 +120111,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"IAbstractParticle_abundance", _wrap_IAbstractParticle_abundance, METH_VARARGS, (char *)"\n"
 		"IAbstractParticle_abundance(IAbstractParticle self) -> double\n"
 		"\n"
-		"double IAbstractParticle::abundance() const \n"
+		"double IAbstractParticle::abundance() const\n"
 		"\n"
 		""},
 	 { (char *)"IAbstractParticle_setAbundance", _wrap_IAbstractParticle_setAbundance, METH_VARARGS, (char *)"\n"
@@ -119560,7 +120155,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"IParameterReal_getData", _wrap_IParameterReal_getData, METH_VARARGS, (char *)"\n"
 		"IParameterReal_getData(IParameterReal self) -> double &\n"
 		"\n"
-		"T& IParameter< T >::getData() const \n"
+		"T& IParameter< T >::getData() const\n"
 		"\n"
 		""},
 	 { (char *)"IParameterReal_setData", _wrap_IParameterReal_setData, METH_VARARGS, (char *)"\n"
@@ -119656,7 +120251,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"IParticle_translate", _wrap_IParticle_translate, METH_VARARGS, (char *)"\n"
 		"IParticle_translate(IParticle self, kvector_t translation)\n"
 		"\n"
-		"void IParticle::translate(kvector_t translation) overridefinal\n"
+		"void IParticle::translate(kvector_t translation) override final\n"
 		"\n"
 		"Translates the particle. \n"
 		"\n"
@@ -119849,7 +120444,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"RotationX_getAngle", _wrap_RotationX_getAngle, METH_VARARGS, (char *)"\n"
 		"RotationX_getAngle(RotationX self) -> double\n"
 		"\n"
-		"double RotationX::getAngle() const \n"
+		"double RotationX::getAngle() const\n"
 		"\n"
 		""},
 	 { (char *)"RotationX_getTransform3D", _wrap_RotationX_getTransform3D, METH_VARARGS, (char *)"\n"
@@ -119903,7 +120498,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"RotationY_getAngle", _wrap_RotationY_getAngle, METH_VARARGS, (char *)"\n"
 		"RotationY_getAngle(RotationY self) -> double\n"
 		"\n"
-		"double RotationY::getAngle() const \n"
+		"double RotationY::getAngle() const\n"
 		"\n"
 		""},
 	 { (char *)"RotationY_getTransform3D", _wrap_RotationY_getTransform3D, METH_VARARGS, (char *)"\n"
@@ -119958,7 +120553,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"RotationZ_getAngle", _wrap_RotationZ_getAngle, METH_VARARGS, (char *)"\n"
 		"RotationZ_getAngle(RotationZ self) -> double\n"
 		"\n"
-		"double RotationZ::getAngle() const \n"
+		"double RotationZ::getAngle() const\n"
 		"\n"
 		""},
 	 { (char *)"RotationZ_getTransform3D", _wrap_RotationZ_getTransform3D, METH_VARARGS, (char *)"\n"
@@ -120018,19 +120613,19 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"RotationEuler_getAlpha", _wrap_RotationEuler_getAlpha, METH_VARARGS, (char *)"\n"
 		"RotationEuler_getAlpha(RotationEuler self) -> double\n"
 		"\n"
-		"double RotationEuler::getAlpha() const \n"
+		"double RotationEuler::getAlpha() const\n"
 		"\n"
 		""},
 	 { (char *)"RotationEuler_getBeta", _wrap_RotationEuler_getBeta, METH_VARARGS, (char *)"\n"
 		"RotationEuler_getBeta(RotationEuler self) -> double\n"
 		"\n"
-		"double RotationEuler::getBeta() const \n"
+		"double RotationEuler::getBeta() const\n"
 		"\n"
 		""},
 	 { (char *)"RotationEuler_getGamma", _wrap_RotationEuler_getGamma, METH_VARARGS, (char *)"\n"
 		"RotationEuler_getGamma(RotationEuler self) -> double\n"
 		"\n"
-		"double RotationEuler::getGamma() const \n"
+		"double RotationEuler::getGamma() const\n"
 		"\n"
 		""},
 	 { (char *)"RotationEuler_getTransform3D", _wrap_RotationEuler_getTransform3D, METH_VARARGS, (char *)"\n"
@@ -120077,13 +120672,13 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"SimpleSelectionRule_clone", _wrap_SimpleSelectionRule_clone, METH_VARARGS, (char *)"\n"
 		"SimpleSelectionRule_clone(SimpleSelectionRule self) -> SimpleSelectionRule\n"
 		"\n"
-		"SimpleSelectionRule * SimpleSelectionRule::clone() const \n"
+		"SimpleSelectionRule * SimpleSelectionRule::clone() const\n"
 		"\n"
 		""},
 	 { (char *)"SimpleSelectionRule_coordinateSelected", _wrap_SimpleSelectionRule_coordinateSelected, METH_VARARGS, (char *)"\n"
 		"SimpleSelectionRule_coordinateSelected(SimpleSelectionRule self, ivector_t const & coordinate) -> bool\n"
 		"\n"
-		"bool SimpleSelectionRule::coordinateSelected(const ivector_t &coordinate) const \n"
+		"bool SimpleSelectionRule::coordinateSelected(const ivector_t &coordinate) const\n"
 		"\n"
 		""},
 	 { (char *)"SimpleSelectionRule_swigregister", SimpleSelectionRule_swigregister, METH_VARARGS, NULL},
@@ -120112,7 +120707,7 @@ static PyMethodDef SwigMethods[] = {
 		"getBeam() -> Beam\n"
 		"Instrument_getBeam(Instrument self) -> Beam\n"
 		"\n"
-		"const Beam& Instrument::getBeam() const \n"
+		"const Beam& Instrument::getBeam() const\n"
 		"\n"
 		""},
 	 { (char *)"Instrument_setBeam", _wrap_Instrument_setBeam, METH_VARARGS, (char *)"\n"
@@ -120163,7 +120758,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"Instrument_getDetectorMask", _wrap_Instrument_getDetectorMask, METH_VARARGS, (char *)"\n"
 		"Instrument_getDetectorMask(Instrument self) -> DetectorMask\n"
 		"\n"
-		"const DetectorMask * Instrument::getDetectorMask() const \n"
+		"const DetectorMask * Instrument::getDetectorMask() const\n"
 		"\n"
 		""},
 	 { (char *)"Instrument_getDetectorAxis", _wrap_Instrument_getDetectorAxis, METH_VARARGS, (char *)"\n"
@@ -120401,7 +120996,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"InterferenceFunction1DLattice_getLatticeParameters", _wrap_InterferenceFunction1DLattice_getLatticeParameters, METH_VARARGS, (char *)"\n"
 		"InterferenceFunction1DLattice_getLatticeParameters(InterferenceFunction1DLattice self) -> Lattice1DParameters\n"
 		"\n"
-		"Lattice1DParameters InterferenceFunction1DLattice::getLatticeParameters() const \n"
+		"Lattice1DParameters InterferenceFunction1DLattice::getLatticeParameters() const\n"
 		"\n"
 		""},
 	 { (char *)"InterferenceFunction1DLattice_evaluate", _wrap_InterferenceFunction1DLattice_evaluate, METH_VARARGS, (char *)"\n"
@@ -120494,7 +121089,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"InterferenceFunctionRadialParaCrystal_domainSize", _wrap_InterferenceFunctionRadialParaCrystal_domainSize, METH_VARARGS, (char *)"\n"
 		"InterferenceFunctionRadialParaCrystal_domainSize(InterferenceFunctionRadialParaCrystal self) -> double\n"
 		"\n"
-		"double InterferenceFunctionRadialParaCrystal::domainSize() const \n"
+		"double InterferenceFunctionRadialParaCrystal::domainSize() const\n"
 		"\n"
 		""},
 	 { (char *)"InterferenceFunctionRadialParaCrystal_evaluate", _wrap_InterferenceFunctionRadialParaCrystal_evaluate, METH_VARARGS, (char *)"\n"
@@ -120508,7 +121103,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"InterferenceFunctionRadialParaCrystal_FTPDF", _wrap_InterferenceFunctionRadialParaCrystal_FTPDF, METH_VARARGS, (char *)"\n"
 		"InterferenceFunctionRadialParaCrystal_FTPDF(InterferenceFunctionRadialParaCrystal self, double qpar) -> complex_t\n"
 		"\n"
-		"complex_t InterferenceFunctionRadialParaCrystal::FTPDF(double qpar) const \n"
+		"complex_t InterferenceFunctionRadialParaCrystal::FTPDF(double qpar) const\n"
 		"\n"
 		""},
 	 { (char *)"InterferenceFunctionRadialParaCrystal_setProbabilityDistribution", _wrap_InterferenceFunctionRadialParaCrystal_setProbabilityDistribution, METH_VARARGS, (char *)"\n"
@@ -120528,13 +121123,13 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"InterferenceFunctionRadialParaCrystal_peakDistance", _wrap_InterferenceFunctionRadialParaCrystal_peakDistance, METH_VARARGS, (char *)"\n"
 		"InterferenceFunctionRadialParaCrystal_peakDistance(InterferenceFunctionRadialParaCrystal self) -> double\n"
 		"\n"
-		"double InterferenceFunctionRadialParaCrystal::peakDistance() const \n"
+		"double InterferenceFunctionRadialParaCrystal::peakDistance() const\n"
 		"\n"
 		""},
 	 { (char *)"InterferenceFunctionRadialParaCrystal_dampingLength", _wrap_InterferenceFunctionRadialParaCrystal_dampingLength, METH_VARARGS, (char *)"\n"
 		"InterferenceFunctionRadialParaCrystal_dampingLength(InterferenceFunctionRadialParaCrystal self) -> double\n"
 		"\n"
-		"double InterferenceFunctionRadialParaCrystal::dampingLength() const \n"
+		"double InterferenceFunctionRadialParaCrystal::dampingLength() const\n"
 		"\n"
 		""},
 	 { (char *)"InterferenceFunctionRadialParaCrystal_getChildren", _wrap_InterferenceFunctionRadialParaCrystal_getChildren, METH_VARARGS, (char *)"\n"
@@ -120633,13 +121228,13 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"InterferenceFunction2DLattice_integrationOverXi", _wrap_InterferenceFunction2DLattice_integrationOverXi, METH_VARARGS, (char *)"\n"
 		"InterferenceFunction2DLattice_integrationOverXi(InterferenceFunction2DLattice self) -> bool\n"
 		"\n"
-		"bool InterferenceFunction2DLattice::integrationOverXi() const \n"
+		"bool InterferenceFunction2DLattice::integrationOverXi() const\n"
 		"\n"
 		""},
 	 { (char *)"InterferenceFunction2DLattice_lattice", _wrap_InterferenceFunction2DLattice_lattice, METH_VARARGS, (char *)"\n"
 		"InterferenceFunction2DLattice_lattice(InterferenceFunction2DLattice self) -> Lattice2D\n"
 		"\n"
-		"const Lattice2D & InterferenceFunction2DLattice::lattice() const \n"
+		"const Lattice2D & InterferenceFunction2DLattice::lattice() const\n"
 		"\n"
 		""},
 	 { (char *)"InterferenceFunction2DLattice_getParticleDensity", _wrap_InterferenceFunction2DLattice_getParticleDensity, METH_VARARGS, (char *)"\n"
@@ -120661,7 +121256,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"InterferenceFunction2DLattice_onChange", _wrap_InterferenceFunction2DLattice_onChange, METH_VARARGS, (char *)"\n"
 		"InterferenceFunction2DLattice_onChange(InterferenceFunction2DLattice self)\n"
 		"\n"
-		"void InterferenceFunction2DLattice::onChange() overridefinal\n"
+		"void InterferenceFunction2DLattice::onChange() override final\n"
 		"\n"
 		"Action to be taken in inherited class when a parameter has changed. \n"
 		"\n"
@@ -120792,7 +121387,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"InterferenceFunction2DParaCrystal_domainSizes", _wrap_InterferenceFunction2DParaCrystal_domainSizes, METH_VARARGS, (char *)"\n"
 		"InterferenceFunction2DParaCrystal_domainSizes(InterferenceFunction2DParaCrystal self) -> vdouble1d_t\n"
 		"\n"
-		"std::vector< double > InterferenceFunction2DParaCrystal::domainSizes() const \n"
+		"std::vector< double > InterferenceFunction2DParaCrystal::domainSizes() const\n"
 		"\n"
 		""},
 	 { (char *)"InterferenceFunction2DParaCrystal_setIntegrationOverXi", _wrap_InterferenceFunction2DParaCrystal_setIntegrationOverXi, METH_VARARGS, (char *)"\n"
@@ -120812,19 +121407,19 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"InterferenceFunction2DParaCrystal_integrationOverXi", _wrap_InterferenceFunction2DParaCrystal_integrationOverXi, METH_VARARGS, (char *)"\n"
 		"InterferenceFunction2DParaCrystal_integrationOverXi(InterferenceFunction2DParaCrystal self) -> bool\n"
 		"\n"
-		"bool InterferenceFunction2DParaCrystal::integrationOverXi() const \n"
+		"bool InterferenceFunction2DParaCrystal::integrationOverXi() const\n"
 		"\n"
 		""},
 	 { (char *)"InterferenceFunction2DParaCrystal_dampingLength", _wrap_InterferenceFunction2DParaCrystal_dampingLength, METH_VARARGS, (char *)"\n"
 		"InterferenceFunction2DParaCrystal_dampingLength(InterferenceFunction2DParaCrystal self) -> double\n"
 		"\n"
-		"double InterferenceFunction2DParaCrystal::dampingLength() const \n"
+		"double InterferenceFunction2DParaCrystal::dampingLength() const\n"
 		"\n"
 		""},
 	 { (char *)"InterferenceFunction2DParaCrystal_lattice", _wrap_InterferenceFunction2DParaCrystal_lattice, METH_VARARGS, (char *)"\n"
 		"InterferenceFunction2DParaCrystal_lattice(InterferenceFunction2DParaCrystal self) -> Lattice2D\n"
 		"\n"
-		"const Lattice2D & InterferenceFunction2DParaCrystal::lattice() const \n"
+		"const Lattice2D & InterferenceFunction2DParaCrystal::lattice() const\n"
 		"\n"
 		""},
 	 { (char *)"InterferenceFunction2DParaCrystal_getParticleDensity", _wrap_InterferenceFunction2DParaCrystal_getParticleDensity, METH_VARARGS, (char *)"\n"
@@ -121200,13 +121795,13 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"Lattice2D_rotationAngle", _wrap_Lattice2D_rotationAngle, METH_VARARGS, (char *)"\n"
 		"Lattice2D_rotationAngle(Lattice2D self) -> double\n"
 		"\n"
-		"double Lattice2D::rotationAngle() const \n"
+		"double Lattice2D::rotationAngle() const\n"
 		"\n"
 		""},
 	 { (char *)"Lattice2D_reciprocalBases", _wrap_Lattice2D_reciprocalBases, METH_VARARGS, (char *)"\n"
 		"Lattice2D_reciprocalBases(Lattice2D self) -> Lattice2D::ReciprocalBases\n"
 		"\n"
-		"Lattice2D::ReciprocalBases Lattice2D::reciprocalBases() const \n"
+		"Lattice2D::ReciprocalBases Lattice2D::reciprocalBases() const\n"
 		"\n"
 		""},
 	 { (char *)"Lattice2D_setRotationEnabled", _wrap_Lattice2D_setRotationEnabled, METH_VARARGS, (char *)"\n"
@@ -121227,7 +121822,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"BasicLattice_clone", _wrap_BasicLattice_clone, METH_VARARGS, (char *)"\n"
 		"BasicLattice_clone(BasicLattice self) -> BasicLattice\n"
 		"\n"
-		"BasicLattice * BasicLattice::clone() const \n"
+		"BasicLattice * BasicLattice::clone() const\n"
 		"\n"
 		""},
 	 { (char *)"BasicLattice_accept", _wrap_BasicLattice_accept, METH_VARARGS, (char *)"\n"
@@ -121241,25 +121836,25 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"BasicLattice_length1", _wrap_BasicLattice_length1, METH_VARARGS, (char *)"\n"
 		"BasicLattice_length1(BasicLattice self) -> double\n"
 		"\n"
-		"virtual double BasicLattice::length1() const \n"
+		"virtual double BasicLattice::length1() const\n"
 		"\n"
 		""},
 	 { (char *)"BasicLattice_length2", _wrap_BasicLattice_length2, METH_VARARGS, (char *)"\n"
 		"BasicLattice_length2(BasicLattice self) -> double\n"
 		"\n"
-		"virtual double BasicLattice::length2() const \n"
+		"virtual double BasicLattice::length2() const\n"
 		"\n"
 		""},
 	 { (char *)"BasicLattice_latticeAngle", _wrap_BasicLattice_latticeAngle, METH_VARARGS, (char *)"\n"
 		"BasicLattice_latticeAngle(BasicLattice self) -> double\n"
 		"\n"
-		"virtual double BasicLattice::latticeAngle() const \n"
+		"virtual double BasicLattice::latticeAngle() const\n"
 		"\n"
 		""},
 	 { (char *)"BasicLattice_unitCellArea", _wrap_BasicLattice_unitCellArea, METH_VARARGS, (char *)"\n"
 		"BasicLattice_unitCellArea(BasicLattice self) -> double\n"
 		"\n"
-		"double BasicLattice::unitCellArea() const \n"
+		"double BasicLattice::unitCellArea() const\n"
 		"\n"
 		""},
 	 { (char *)"delete_BasicLattice", _wrap_delete_BasicLattice, METH_VARARGS, (char *)"delete_BasicLattice(BasicLattice self)"},
@@ -121274,7 +121869,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"SquareLattice_clone", _wrap_SquareLattice_clone, METH_VARARGS, (char *)"\n"
 		"SquareLattice_clone(SquareLattice self) -> SquareLattice\n"
 		"\n"
-		"SquareLattice * SquareLattice::clone() const \n"
+		"SquareLattice * SquareLattice::clone() const\n"
 		"\n"
 		""},
 	 { (char *)"SquareLattice_accept", _wrap_SquareLattice_accept, METH_VARARGS, (char *)"\n"
@@ -121288,25 +121883,25 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"SquareLattice_length1", _wrap_SquareLattice_length1, METH_VARARGS, (char *)"\n"
 		"SquareLattice_length1(SquareLattice self) -> double\n"
 		"\n"
-		"virtual double SquareLattice::length1() const \n"
+		"virtual double SquareLattice::length1() const\n"
 		"\n"
 		""},
 	 { (char *)"SquareLattice_length2", _wrap_SquareLattice_length2, METH_VARARGS, (char *)"\n"
 		"SquareLattice_length2(SquareLattice self) -> double\n"
 		"\n"
-		"virtual double SquareLattice::length2() const \n"
+		"virtual double SquareLattice::length2() const\n"
 		"\n"
 		""},
 	 { (char *)"SquareLattice_latticeAngle", _wrap_SquareLattice_latticeAngle, METH_VARARGS, (char *)"\n"
 		"SquareLattice_latticeAngle(SquareLattice self) -> double\n"
 		"\n"
-		"double SquareLattice::latticeAngle() const \n"
+		"double SquareLattice::latticeAngle() const\n"
 		"\n"
 		""},
 	 { (char *)"SquareLattice_unitCellArea", _wrap_SquareLattice_unitCellArea, METH_VARARGS, (char *)"\n"
 		"SquareLattice_unitCellArea(SquareLattice self) -> double\n"
 		"\n"
-		"double SquareLattice::unitCellArea() const \n"
+		"double SquareLattice::unitCellArea() const\n"
 		"\n"
 		""},
 	 { (char *)"delete_SquareLattice", _wrap_delete_SquareLattice, METH_VARARGS, (char *)"delete_SquareLattice(SquareLattice self)"},
@@ -121321,7 +121916,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"HexagonalLattice_clone", _wrap_HexagonalLattice_clone, METH_VARARGS, (char *)"\n"
 		"HexagonalLattice_clone(HexagonalLattice self) -> HexagonalLattice\n"
 		"\n"
-		"HexagonalLattice * HexagonalLattice::clone() const \n"
+		"HexagonalLattice * HexagonalLattice::clone() const\n"
 		"\n"
 		""},
 	 { (char *)"HexagonalLattice_accept", _wrap_HexagonalLattice_accept, METH_VARARGS, (char *)"\n"
@@ -121335,34 +121930,34 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"HexagonalLattice_length1", _wrap_HexagonalLattice_length1, METH_VARARGS, (char *)"\n"
 		"HexagonalLattice_length1(HexagonalLattice self) -> double\n"
 		"\n"
-		"virtual double HexagonalLattice::length1() const \n"
+		"virtual double HexagonalLattice::length1() const\n"
 		"\n"
 		""},
 	 { (char *)"HexagonalLattice_length2", _wrap_HexagonalLattice_length2, METH_VARARGS, (char *)"\n"
 		"HexagonalLattice_length2(HexagonalLattice self) -> double\n"
 		"\n"
-		"virtual double HexagonalLattice::length2() const \n"
+		"virtual double HexagonalLattice::length2() const\n"
 		"\n"
 		""},
 	 { (char *)"HexagonalLattice_latticeAngle", _wrap_HexagonalLattice_latticeAngle, METH_VARARGS, (char *)"\n"
 		"HexagonalLattice_latticeAngle(HexagonalLattice self) -> double\n"
 		"\n"
-		"double HexagonalLattice::latticeAngle() const \n"
+		"double HexagonalLattice::latticeAngle() const\n"
 		"\n"
 		""},
 	 { (char *)"HexagonalLattice_unitCellArea", _wrap_HexagonalLattice_unitCellArea, METH_VARARGS, (char *)"\n"
 		"HexagonalLattice_unitCellArea(HexagonalLattice self) -> double\n"
 		"\n"
-		"double HexagonalLattice::unitCellArea() const \n"
+		"double HexagonalLattice::unitCellArea() const\n"
 		"\n"
 		""},
 	 { (char *)"delete_HexagonalLattice", _wrap_delete_HexagonalLattice, METH_VARARGS, (char *)"delete_HexagonalLattice(HexagonalLattice self)"},
 	 { (char *)"HexagonalLattice_swigregister", HexagonalLattice_swigregister, METH_VARARGS, NULL},
 	 { (char *)"new_Layer", _wrap_new_Layer, METH_VARARGS, (char *)"\n"
-		"Layer(HomogeneousMaterial material, double thickness=0)\n"
-		"new_Layer(HomogeneousMaterial material) -> Layer\n"
+		"Layer(Material material, double thickness=0)\n"
+		"new_Layer(Material material) -> Layer\n"
 		"\n"
-		"Layer::Layer(HomogeneousMaterial material, double thickness=0)\n"
+		"Layer::Layer(Material material, double thickness=0)\n"
 		"\n"
 		"Constructor of a layer with thickness and material\n"
 		"\n"
@@ -121385,7 +121980,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"Layer_clone", _wrap_Layer_clone, METH_VARARGS, (char *)"\n"
 		"Layer_clone(Layer self) -> Layer\n"
 		"\n"
-		"Layer * Layer::clone() const overridefinal\n"
+		"Layer * Layer::clone() const override final\n"
 		"\n"
 		"Returns a clone of this  ISample object. \n"
 		"\n"
@@ -121393,13 +121988,13 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"Layer_cloneInvertB", _wrap_Layer_cloneInvertB, METH_VARARGS, (char *)"\n"
 		"Layer_cloneInvertB(Layer self) -> Layer\n"
 		"\n"
-		"Layer * Layer::cloneInvertB() const \n"
+		"Layer * Layer::cloneInvertB() const\n"
 		"\n"
 		""},
 	 { (char *)"Layer_accept", _wrap_Layer_accept, METH_VARARGS, (char *)"\n"
 		"Layer_accept(Layer self, INodeVisitor visitor)\n"
 		"\n"
-		"void Layer::accept(INodeVisitor *visitor) const overridefinal\n"
+		"void Layer::accept(INodeVisitor *visitor) const override final\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -121415,21 +122010,21 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"Layer_thickness", _wrap_Layer_thickness, METH_VARARGS, (char *)"\n"
 		"Layer_thickness(Layer self) -> double\n"
 		"\n"
-		"double Layer::thickness() const \n"
+		"double Layer::thickness() const\n"
 		"\n"
 		""},
 	 { (char *)"Layer_material", _wrap_Layer_material, METH_VARARGS, (char *)"\n"
-		"Layer_material(Layer self) -> HomogeneousMaterial\n"
+		"Layer_material(Layer self) -> Material\n"
 		"\n"
-		"const HomogeneousMaterial* Layer::material() const overridefinal\n"
+		"const Material* Layer::material() const override final\n"
 		"\n"
 		"Returns nullptr, unless overwritten to return a specific material. \n"
 		"\n"
 		""},
 	 { (char *)"Layer_setMaterial", _wrap_Layer_setMaterial, METH_VARARGS, (char *)"\n"
-		"Layer_setMaterial(Layer self, HomogeneousMaterial material)\n"
+		"Layer_setMaterial(Layer self, Material material)\n"
 		"\n"
-		"void Layer::setMaterial(HomogeneousMaterial material)\n"
+		"void Layer::setMaterial(Material material)\n"
 		"\n"
 		""},
 	 { (char *)"Layer_addLayout", _wrap_Layer_addLayout, METH_VARARGS, (char *)"\n"
@@ -121441,19 +122036,19 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"Layer_numberOfLayouts", _wrap_Layer_numberOfLayouts, METH_VARARGS, (char *)"\n"
 		"Layer_numberOfLayouts(Layer self) -> size_t\n"
 		"\n"
-		"size_t Layer::numberOfLayouts() const \n"
+		"size_t Layer::numberOfLayouts() const\n"
 		"\n"
 		""},
 	 { (char *)"Layer_layouts", _wrap_Layer_layouts, METH_VARARGS, (char *)"\n"
 		"Layer_layouts(Layer self) -> std::vector< ILayout const *,std::allocator< ILayout const * > >\n"
 		"\n"
-		"std::vector< const ILayout * > Layer::layouts() const \n"
+		"std::vector< const ILayout * > Layer::layouts() const\n"
 		"\n"
 		""},
 	 { (char *)"Layer_getChildren", _wrap_Layer_getChildren, METH_VARARGS, (char *)"\n"
 		"Layer_getChildren(Layer self) -> swig_dummy_type_const_inode_vector\n"
 		"\n"
-		"std::vector< const INode * > Layer::getChildren() const overridefinal\n"
+		"std::vector< const INode * > Layer::getChildren() const override final\n"
 		"\n"
 		"Returns a vector of children (const). \n"
 		"\n"
@@ -121474,13 +122069,13 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"Layer_numberOfSlices", _wrap_Layer_numberOfSlices, METH_VARARGS, (char *)"\n"
 		"Layer_numberOfSlices(Layer self) -> unsigned int\n"
 		"\n"
-		"unsigned int Layer::numberOfSlices() const \n"
+		"unsigned int Layer::numberOfSlices() const\n"
 		"\n"
 		""},
 	 { (char *)"Layer_slice", _wrap_Layer_slice, METH_VARARGS, (char *)"\n"
 		"Layer_slice(Layer self, ZLimits limits, Layer::ELayerType layer_type) -> SafePointerVector< Layer >\n"
 		"\n"
-		"SafePointerVector< Layer > Layer::slice(ZLimits limits, ELayerType layer_type) const \n"
+		"SafePointerVector< Layer > Layer::slice(ZLimits limits, ELayerType layer_type) const\n"
 		"\n"
 		""},
 	 { (char *)"Layer_scalarReducedPotential", _wrap_Layer_scalarReducedPotential, METH_VARARGS, (char *)"\n"
@@ -121616,7 +122211,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"Line_clone", _wrap_Line_clone, METH_VARARGS, (char *)"\n"
 		"Line_clone(Line self) -> Line\n"
 		"\n"
-		"Line* Line::clone() const \n"
+		"Line* Line::clone() const\n"
 		"\n"
 		""},
 	 { (char *)"Line_contains", _wrap_Line_contains, METH_VARARGS, (char *)"\n"
@@ -121645,7 +122240,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"VerticalLine_clone", _wrap_VerticalLine_clone, METH_VARARGS, (char *)"\n"
 		"VerticalLine_clone(VerticalLine self) -> VerticalLine\n"
 		"\n"
-		"VerticalLine* VerticalLine::clone() const \n"
+		"VerticalLine* VerticalLine::clone() const\n"
 		"\n"
 		""},
 	 { (char *)"VerticalLine_contains", _wrap_VerticalLine_contains, METH_VARARGS, (char *)"\n"
@@ -121660,7 +122255,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"VerticalLine_getXpos", _wrap_VerticalLine_getXpos, METH_VARARGS, (char *)"\n"
 		"VerticalLine_getXpos(VerticalLine self) -> double\n"
 		"\n"
-		"double VerticalLine::getXpos() const \n"
+		"double VerticalLine::getXpos() const\n"
 		"\n"
 		""},
 	 { (char *)"delete_VerticalLine", _wrap_delete_VerticalLine, METH_VARARGS, (char *)"delete_VerticalLine(VerticalLine self)"},
@@ -121680,7 +122275,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"HorizontalLine_clone", _wrap_HorizontalLine_clone, METH_VARARGS, (char *)"\n"
 		"HorizontalLine_clone(HorizontalLine self) -> HorizontalLine\n"
 		"\n"
-		"HorizontalLine* HorizontalLine::clone() const \n"
+		"HorizontalLine* HorizontalLine::clone() const\n"
 		"\n"
 		""},
 	 { (char *)"HorizontalLine_contains", _wrap_HorizontalLine_contains, METH_VARARGS, (char *)"\n"
@@ -121695,11 +122290,157 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"HorizontalLine_getYpos", _wrap_HorizontalLine_getYpos, METH_VARARGS, (char *)"\n"
 		"HorizontalLine_getYpos(HorizontalLine self) -> double\n"
 		"\n"
-		"double HorizontalLine::getYpos() const \n"
+		"double HorizontalLine::getYpos() const\n"
 		"\n"
 		""},
 	 { (char *)"delete_HorizontalLine", _wrap_delete_HorizontalLine, METH_VARARGS, (char *)"delete_HorizontalLine(HorizontalLine self)"},
 	 { (char *)"HorizontalLine_swigregister", HorizontalLine_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_Material", _wrap_new_Material, METH_VARARGS, (char *)"\n"
+		"Material(Material material)\n"
+		"new_Material(Material material) -> Material\n"
+		"\n"
+		"Material::Material(std::unique_ptr< BaseMaterialImpl > material_impl)\n"
+		"\n"
+		"Creates material with particular material implementation. \n"
+		"\n"
+		""},
+	 { (char *)"Material_inverted", _wrap_Material_inverted, METH_VARARGS, (char *)"\n"
+		"Material_inverted(Material self) -> Material\n"
+		"\n"
+		"Material Material::inverted() const\n"
+		"\n"
+		"Constructs a material with inverted magnetization. \n"
+		"\n"
+		""},
+	 { (char *)"Material_refractiveIndex", _wrap_Material_refractiveIndex, METH_VARARGS, (char *)"\n"
+		"Material_refractiveIndex(Material self, double wavelength) -> complex_t\n"
+		"\n"
+		"complex_t Material::refractiveIndex(double wavelength) const\n"
+		"\n"
+		"Returns refractive index. \n"
+		"\n"
+		""},
+	 { (char *)"Material_refractiveIndex2", _wrap_Material_refractiveIndex2, METH_VARARGS, (char *)"\n"
+		"Material_refractiveIndex2(Material self, double wavelength) -> complex_t\n"
+		"\n"
+		"complex_t Material::refractiveIndex2(double wavelength) const\n"
+		"\n"
+		"Returns squared refractive index. \n"
+		"\n"
+		""},
+	 { (char *)"Material_isScalarMaterial", _wrap_Material_isScalarMaterial, METH_VARARGS, (char *)"\n"
+		"Material_isScalarMaterial(Material self) -> bool\n"
+		"\n"
+		"bool Material::isScalarMaterial() const\n"
+		"\n"
+		"Indicates whether the interaction with the material is scalar. This means that different polarization states will be diffracted equally \n"
+		"\n"
+		""},
+	 { (char *)"Material_isMagneticMaterial", _wrap_Material_isMagneticMaterial, METH_VARARGS, (char *)"\n"
+		"Material_isMagneticMaterial(Material self) -> bool\n"
+		"\n"
+		"bool Material::isMagneticMaterial() const\n"
+		"\n"
+		""},
+	 { (char *)"Material_getName", _wrap_Material_getName, METH_VARARGS, (char *)"\n"
+		"Material_getName(Material self) -> std::string\n"
+		"\n"
+		"std::string Material::getName() const\n"
+		"\n"
+		"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"
+		"kvector_t Material::magnetization() const\n"
+		"\n"
+		"Get the magnetization (in A/m) \n"
+		"\n"
+		""},
+	 { (char *)"Material_materialData", _wrap_Material_materialData, METH_VARARGS, (char *)"\n"
+		"Material_materialData(Material self) -> complex_t\n"
+		"\n"
+		"complex_t Material::materialData() const\n"
+		"\n"
+		"Returns underlying material data. \n"
+		"\n"
+		""},
+	 { (char *)"Material_isEmpty", _wrap_Material_isEmpty, METH_VARARGS, (char *)"\n"
+		"Material_isEmpty(Material self) -> bool\n"
+		"\n"
+		"bool Material::isEmpty() const\n"
+		"\n"
+		"Returns true if material underlying data is nullptr. \n"
+		"\n"
+		""},
+	 { (char *)"Material_scalarSubtrSLD", _wrap_Material_scalarSubtrSLD, METH_VARARGS, (char *)"\n"
+		"Material_scalarSubtrSLD(Material self, WavevectorInfo wavevectors) -> complex_t\n"
+		"\n"
+		"complex_t Material::scalarSubtrSLD(const WavevectorInfo &wavevectors) const\n"
+		"\n"
+		"Returns (  $ \\\\pi/\\\\lambda^2 $ - sld), sld (in  $nm^{-2}$) being the scattering length density. \n"
+		"\n"
+		""},
+	 { (char *)"Material_transformedMaterial", _wrap_Material_transformedMaterial, METH_VARARGS, (char *)"\n"
+		"Material_transformedMaterial(Material self, Transform3D const & transform) -> Material\n"
+		"\n"
+		"Material Material::transformedMaterial(const Transform3D &transform) const\n"
+		"\n"
+		""},
+	 { (char *)"delete_Material", _wrap_delete_Material, METH_VARARGS, (char *)"delete_Material(Material self)"},
+	 { (char *)"Material_swigregister", Material_swigregister, METH_VARARGS, NULL},
+	 { (char *)"HomogeneousMaterial", _wrap_HomogeneousMaterial, METH_VARARGS, (char *)"\n"
+		"HomogeneousMaterial(std::string const & name, complex_t refractive_index, kvector_t magnetization) -> Material\n"
+		"HomogeneousMaterial(std::string const & name, complex_t refractive_index) -> Material\n"
+		"HomogeneousMaterial(std::string const & name, double delta, double beta, kvector_t magnetization) -> Material\n"
+		"HomogeneousMaterial(std::string const & name, double delta, double beta) -> Material\n"
+		"HomogeneousMaterial() -> Material\n"
+		"\n"
+		"BA_CORE_API_ Material HomogeneousMaterial()\n"
+		"\n"
+		"Constructs vacuum material based on refractive coefficients. Though in practice there is no difference between vacuum materials produced with  MaterialBySLD() and  HomogeneousMaterial(), they are not equal because of the difference in the type of underlying data \n"
+		"\n"
+		""},
+	 { (char *)"MaterialByAbsCX", _wrap_MaterialByAbsCX, METH_VARARGS, (char *)"\n"
+		"MaterialByAbsCX(std::string const & name, double sld, double abs_cx, kvector_t magnetization) -> Material\n"
+		"MaterialByAbsCX(std::string const & name, double sld, double abs_cx) -> Material\n"
+		"\n"
+		"BA_CORE_API_ Material MaterialByAbsCX(const std::string &name, double sld, double abs_cx, kvector_t magnetization=kvector_t())\n"
+		"\n"
+		"Constructs a wavelength-independent material with given sld and absorptive term As opposed to MaterialBySLD, absorptive term is the product of number density and absorptive cross-section  $ \\\\sigma_0 $ at  $ \\\\lambda = 1.798197$ Angstroms. The latter corresponds to 2200 m/s neutrons.\n"
+		"\n"
+		"Parameters:\n"
+		"-----------\n"
+		"\n"
+		"sld: \n"
+		"scattering length density,  $ nm^{-2} $\n"
+		"\n"
+		"abs_cx: \n"
+		"absorptive term at  $ \\\\lambda = 1.798197$ Angstroms,  $ nm^{-1} $\n"
+		"\n"
+		"magnetization: \n"
+		"magnetization (in A/m) \n"
+		"\n"
+		""},
+	 { (char *)"MaterialBySLD", _wrap_MaterialBySLD, METH_VARARGS, (char *)"\n"
+		"MaterialBySLD(std::string const & name, double sld, double abs_term, kvector_t magnetization) -> Material\n"
+		"MaterialBySLD(std::string const & name, double sld, double abs_term) -> Material\n"
+		"MaterialBySLD() -> Material\n"
+		"\n"
+		"BA_CORE_API_ Material MaterialBySLD()\n"
+		"\n"
+		"Constructs wavelength-independent vacuum material. Though in practice there is no difference between vacuum materials produced with  MaterialBySLD() and  HomogeneousMaterial(), they are not equal because of the difference in the type of underlying data \n"
+		"\n"
+		""},
 	 { (char *)"new_MesoCrystal", _wrap_new_MesoCrystal, METH_VARARGS, (char *)"\n"
 		"new_MesoCrystal(IClusteredParticles particle_structure, IFormFactor form_factor) -> MesoCrystal\n"
 		"\n"
@@ -121715,7 +122456,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"MesoCrystal_clone", _wrap_MesoCrystal_clone, METH_VARARGS, (char *)"\n"
 		"MesoCrystal_clone(MesoCrystal self) -> MesoCrystal\n"
 		"\n"
-		"MesoCrystal * MesoCrystal::clone() const overridefinal\n"
+		"MesoCrystal * MesoCrystal::clone() const override final\n"
 		"\n"
 		"Returns a clone of this  ISample object. \n"
 		"\n"
@@ -121723,7 +122464,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"MesoCrystal_accept", _wrap_MesoCrystal_accept, METH_VARARGS, (char *)"\n"
 		"MesoCrystal_accept(MesoCrystal self, INodeVisitor visitor)\n"
 		"\n"
-		"void MesoCrystal::accept(INodeVisitor *visitor) const overridefinal\n"
+		"void MesoCrystal::accept(INodeVisitor *visitor) const override final\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -121731,7 +122472,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"MesoCrystal_createSlicedParticle", _wrap_MesoCrystal_createSlicedParticle, METH_VARARGS, (char *)"\n"
 		"MesoCrystal_createSlicedParticle(MesoCrystal self, ZLimits limits) -> SlicedParticle\n"
 		"\n"
-		"SlicedParticle MesoCrystal::createSlicedParticle(ZLimits limits) const overridefinal\n"
+		"SlicedParticle MesoCrystal::createSlicedParticle(ZLimits limits) const override final\n"
 		"\n"
 		"Create a sliced form factor for this particle. \n"
 		"\n"
@@ -121739,7 +122480,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"MesoCrystal_getChildren", _wrap_MesoCrystal_getChildren, METH_VARARGS, (char *)"\n"
 		"MesoCrystal_getChildren(MesoCrystal self) -> swig_dummy_type_const_inode_vector\n"
 		"\n"
-		"std::vector< const INode * > MesoCrystal::getChildren() const overridefinal\n"
+		"std::vector< const INode * > MesoCrystal::getChildren() const override final\n"
 		"\n"
 		"Returns a vector of children (const). \n"
 		"\n"
@@ -121760,7 +122501,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"MultiLayer_accept", _wrap_MultiLayer_accept, METH_VARARGS, (char *)"\n"
 		"MultiLayer_accept(MultiLayer self, INodeVisitor visitor)\n"
 		"\n"
-		"virtual void MultiLayer::accept(INodeVisitor *visitor) const finaloverride\n"
+		"virtual void MultiLayer::accept(INodeVisitor *visitor) const final override\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -121768,13 +122509,13 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"MultiLayer_numberOfLayers", _wrap_MultiLayer_numberOfLayers, METH_VARARGS, (char *)"\n"
 		"MultiLayer_numberOfLayers(MultiLayer self) -> size_t\n"
 		"\n"
-		"size_t MultiLayer::numberOfLayers() const \n"
+		"size_t MultiLayer::numberOfLayers() const\n"
 		"\n"
 		""},
 	 { (char *)"MultiLayer_numberOfInterfaces", _wrap_MultiLayer_numberOfInterfaces, METH_VARARGS, (char *)"\n"
 		"MultiLayer_numberOfInterfaces(MultiLayer self) -> size_t\n"
 		"\n"
-		"size_t MultiLayer::numberOfInterfaces() const \n"
+		"size_t MultiLayer::numberOfInterfaces() const\n"
 		"\n"
 		""},
 	 { (char *)"MultiLayer_addLayer", _wrap_MultiLayer_addLayer, METH_VARARGS, (char *)"\n"
@@ -121856,17 +122597,17 @@ static PyMethodDef SwigMethods[] = {
 		"\n"
 		""},
 	 { (char *)"MultiLayer_layerMaterial", _wrap_MultiLayer_layerMaterial, METH_VARARGS, (char *)"\n"
-		"MultiLayer_layerMaterial(MultiLayer self, size_t i_layer) -> HomogeneousMaterial\n"
+		"MultiLayer_layerMaterial(MultiLayer self, size_t i_layer) -> Material\n"
 		"\n"
-		"HomogeneousMaterial MultiLayer::layerMaterial(size_t i_layer) const\n"
+		"Material MultiLayer::layerMaterial(size_t i_layer) const\n"
 		"\n"
 		"Returns layer material. \n"
 		"\n"
 		""},
 	 { (char *)"MultiLayer_setLayerMaterial", _wrap_MultiLayer_setLayerMaterial, METH_VARARGS, (char *)"\n"
-		"MultiLayer_setLayerMaterial(MultiLayer self, size_t i_layer, HomogeneousMaterial material)\n"
+		"MultiLayer_setLayerMaterial(MultiLayer self, size_t i_layer, Material material)\n"
 		"\n"
-		"void MultiLayer::setLayerMaterial(size_t i_layer, HomogeneousMaterial material)\n"
+		"void MultiLayer::setLayerMaterial(size_t i_layer, Material material)\n"
 		"\n"
 		"Changes a layer's material. \n"
 		"\n"
@@ -121874,7 +122615,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"MultiLayer_clone", _wrap_MultiLayer_clone, METH_VARARGS, (char *)"\n"
 		"MultiLayer_clone(MultiLayer self) -> MultiLayer\n"
 		"\n"
-		"MultiLayer * MultiLayer::clone() const finaloverride\n"
+		"MultiLayer * MultiLayer::clone() const final override\n"
 		"\n"
 		"Returns a clone of multilayer with clones of all layers and recreated interfaces between layers \n"
 		"\n"
@@ -121972,7 +122713,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"MultiLayer_containsMagneticMaterial", _wrap_MultiLayer_containsMagneticMaterial, METH_VARARGS, (char *)"\n"
 		"MultiLayer_containsMagneticMaterial(MultiLayer self) -> bool\n"
 		"\n"
-		"bool MultiLayer::containsMagneticMaterial() const \n"
+		"bool MultiLayer::containsMagneticMaterial() const\n"
 		"\n"
 		""},
 	 { (char *)"MultiLayer_initBFields", _wrap_MultiLayer_initBFields, METH_VARARGS, (char *)"\n"
@@ -121986,19 +122727,19 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"MultiLayer_hasRoughness", _wrap_MultiLayer_hasRoughness, METH_VARARGS, (char *)"\n"
 		"MultiLayer_hasRoughness(MultiLayer self) -> bool\n"
 		"\n"
-		"bool MultiLayer::hasRoughness() const \n"
+		"bool MultiLayer::hasRoughness() const\n"
 		"\n"
 		""},
 	 { (char *)"MultiLayer_totalNofLayouts", _wrap_MultiLayer_totalNofLayouts, METH_VARARGS, (char *)"\n"
 		"MultiLayer_totalNofLayouts(MultiLayer self) -> size_t\n"
 		"\n"
-		"size_t MultiLayer::totalNofLayouts() const \n"
+		"size_t MultiLayer::totalNofLayouts() const\n"
 		"\n"
 		""},
 	 { (char *)"MultiLayer_getChildren", _wrap_MultiLayer_getChildren, METH_VARARGS, (char *)"\n"
 		"MultiLayer_getChildren(MultiLayer self) -> swig_dummy_type_const_inode_vector\n"
 		"\n"
-		"std::vector< const INode * > MultiLayer::getChildren() const finaloverride\n"
+		"std::vector< const INode * > MultiLayer::getChildren() const final override\n"
 		"\n"
 		"Returns a vector of children (const). \n"
 		"\n"
@@ -122021,7 +122762,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"OffSpecSimulation_clone", _wrap_OffSpecSimulation_clone, METH_VARARGS, (char *)"\n"
 		"OffSpecSimulation_clone(OffSpecSimulation self) -> OffSpecSimulation\n"
 		"\n"
-		"OffSpecSimulation* OffSpecSimulation::clone() const \n"
+		"OffSpecSimulation* OffSpecSimulation::clone() const\n"
 		"\n"
 		""},
 	 { (char *)"OffSpecSimulation_accept", _wrap_OffSpecSimulation_accept, METH_VARARGS, (char *)"\n"
@@ -122097,7 +122838,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"IntensityData_clone", _wrap_IntensityData_clone, METH_VARARGS, (char *)"\n"
 		"IntensityData_clone(IntensityData self) -> IntensityData\n"
 		"\n"
-		"OutputData< T > * OutputData< T >::clone() const \n"
+		"OutputData< T > * OutputData< T >::clone() const\n"
 		"\n"
 		""},
 	 { (char *)"IntensityData_copyFrom", _wrap_IntensityData_copyFrom, METH_VARARGS, (char *)"\n"
@@ -122109,7 +122850,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"IntensityData_meanValues", _wrap_IntensityData_meanValues, METH_VARARGS, (char *)"\n"
 		"IntensityData_meanValues(IntensityData self) -> IntensityData\n"
 		"\n"
-		"OutputData< double > * OutputData< T >::meanValues() const \n"
+		"OutputData< double > * OutputData< T >::meanValues() const\n"
 		"\n"
 		""},
 	 { (char *)"IntensityData_addAxis", _wrap_IntensityData_addAxis, METH_VARARGS, (char *)"\n"
@@ -122368,7 +123109,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"
@@ -122472,19 +123213,19 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"ParameterDistribution_getLimits", _wrap_ParameterDistribution_getLimits, METH_VARARGS, (char *)"\n"
 		"ParameterDistribution_getLimits(ParameterDistribution self) -> RealLimits\n"
 		"\n"
-		"RealLimits ParameterDistribution::getLimits() const \n"
+		"RealLimits ParameterDistribution::getLimits() const\n"
 		"\n"
 		""},
 	 { (char *)"ParameterDistribution_getMinValue", _wrap_ParameterDistribution_getMinValue, METH_VARARGS, (char *)"\n"
 		"ParameterDistribution_getMinValue(ParameterDistribution self) -> double\n"
 		"\n"
-		"double ParameterDistribution::getMinValue() const \n"
+		"double ParameterDistribution::getMinValue() const\n"
 		"\n"
 		""},
 	 { (char *)"ParameterDistribution_getMaxValue", _wrap_ParameterDistribution_getMaxValue, METH_VARARGS, (char *)"\n"
 		"ParameterDistribution_getMaxValue(ParameterDistribution self) -> double\n"
 		"\n"
-		"double ParameterDistribution::getMaxValue() const \n"
+		"double ParameterDistribution::getMaxValue() const\n"
 		"\n"
 		""},
 	 { (char *)"ParameterDistribution_swigregister", ParameterDistribution_swigregister, METH_VARARGS, NULL},
@@ -122604,7 +123345,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"ParameterPool_parameterNames", _wrap_ParameterPool_parameterNames, METH_VARARGS, (char *)"\n"
 		"ParameterPool_parameterNames(ParameterPool self) -> vector_string_t\n"
 		"\n"
-		"std::vector< std::string > ParameterPool::parameterNames() const \n"
+		"std::vector< std::string > ParameterPool::parameterNames() const\n"
 		"\n"
 		""},
 	 { (char *)"ParameterPool_removeParameter", _wrap_ParameterPool_removeParameter, METH_VARARGS, (char *)"\n"
@@ -122701,17 +123442,17 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"ParameterSampleVector_swigregister", ParameterSampleVector_swigregister, METH_VARARGS, NULL},
 	 { (char *)"new_Particle", _wrap_new_Particle, METH_VARARGS, (char *)"\n"
 		"Particle()\n"
-		"Particle(HomogeneousMaterial material)\n"
-		"Particle(HomogeneousMaterial material, IFormFactor form_factor)\n"
-		"new_Particle(HomogeneousMaterial material, IFormFactor form_factor, IRotation rotation) -> Particle\n"
+		"Particle(Material material)\n"
+		"Particle(Material material, IFormFactor form_factor)\n"
+		"new_Particle(Material material, IFormFactor form_factor, IRotation rotation) -> Particle\n"
 		"\n"
-		"Particle::Particle(HomogeneousMaterial material, const IFormFactor &form_factor, const IRotation &rotation)\n"
+		"Particle::Particle(Material material, const IFormFactor &form_factor, const IRotation &rotation)\n"
 		"\n"
 		""},
 	 { (char *)"Particle_clone", _wrap_Particle_clone, METH_VARARGS, (char *)"\n"
 		"Particle_clone(Particle self) -> Particle\n"
 		"\n"
-		"Particle * Particle::clone() const overridefinal\n"
+		"Particle * Particle::clone() const override final\n"
 		"\n"
 		"Returns a clone of this  ISample object. \n"
 		"\n"
@@ -122719,7 +123460,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"Particle_accept", _wrap_Particle_accept, METH_VARARGS, (char *)"\n"
 		"Particle_accept(Particle self, INodeVisitor visitor)\n"
 		"\n"
-		"void Particle::accept(INodeVisitor *visitor) const overridefinal\n"
+		"void Particle::accept(INodeVisitor *visitor) const override final\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -122727,21 +123468,21 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"Particle_createSlicedParticle", _wrap_Particle_createSlicedParticle, METH_VARARGS, (char *)"\n"
 		"Particle_createSlicedParticle(Particle self, ZLimits limits) -> SlicedParticle\n"
 		"\n"
-		"SlicedParticle Particle::createSlicedParticle(ZLimits limits) const overridefinal\n"
+		"SlicedParticle Particle::createSlicedParticle(ZLimits limits) const override final\n"
 		"\n"
 		"Create a sliced form factor for this particle. \n"
 		"\n"
 		""},
 	 { (char *)"Particle_setMaterial", _wrap_Particle_setMaterial, METH_VARARGS, (char *)"\n"
-		"Particle_setMaterial(Particle self, HomogeneousMaterial material)\n"
+		"Particle_setMaterial(Particle self, Material material)\n"
 		"\n"
-		"void Particle::setMaterial(HomogeneousMaterial material)\n"
+		"void Particle::setMaterial(Material material)\n"
 		"\n"
 		""},
 	 { (char *)"Particle_material", _wrap_Particle_material, METH_VARARGS, (char *)"\n"
-		"Particle_material(Particle self) -> HomogeneousMaterial\n"
+		"Particle_material(Particle self) -> Material\n"
 		"\n"
-		"const HomogeneousMaterial* Particle::material() const overridefinal\n"
+		"const Material* Particle::material() const override final\n"
 		"\n"
 		"Returns nullptr, unless overwritten to return a specific material. \n"
 		"\n"
@@ -122755,7 +123496,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"Particle_getChildren", _wrap_Particle_getChildren, METH_VARARGS, (char *)"\n"
 		"Particle_getChildren(Particle self) -> swig_dummy_type_const_inode_vector\n"
 		"\n"
-		"std::vector< const INode * > Particle::getChildren() const overridefinal\n"
+		"std::vector< const INode * > Particle::getChildren() const override final\n"
 		"\n"
 		"Returns a vector of children (const). \n"
 		"\n"
@@ -122778,7 +123519,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"ParticleComposition_clone", _wrap_ParticleComposition_clone, METH_VARARGS, (char *)"\n"
 		"ParticleComposition_clone(ParticleComposition self) -> ParticleComposition\n"
 		"\n"
-		"ParticleComposition * ParticleComposition::clone() const overridefinal\n"
+		"ParticleComposition * ParticleComposition::clone() const override final\n"
 		"\n"
 		"Returns a clone of this  ISample object. \n"
 		"\n"
@@ -122786,7 +123527,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"ParticleComposition_accept", _wrap_ParticleComposition_accept, METH_VARARGS, (char *)"\n"
 		"ParticleComposition_accept(ParticleComposition self, INodeVisitor visitor)\n"
 		"\n"
-		"void ParticleComposition::accept(INodeVisitor *visitor) const overridefinal\n"
+		"void ParticleComposition::accept(INodeVisitor *visitor) const override final\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -122794,7 +123535,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"ParticleComposition_createFormFactor", _wrap_ParticleComposition_createFormFactor, METH_VARARGS, (char *)"\n"
 		"ParticleComposition_createFormFactor(ParticleComposition self) -> IFormFactor\n"
 		"\n"
-		"IFormFactor * ParticleComposition::createFormFactor() const overridefinal\n"
+		"IFormFactor * ParticleComposition::createFormFactor() const override final\n"
 		"\n"
 		"Create a form factor for this particle. \n"
 		"\n"
@@ -122823,7 +123564,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"ParticleComposition_getChildren", _wrap_ParticleComposition_getChildren, METH_VARARGS, (char *)"\n"
 		"ParticleComposition_getChildren(ParticleComposition self) -> swig_dummy_type_const_inode_vector\n"
 		"\n"
-		"std::vector< const INode * > ParticleComposition::getChildren() const overridefinal\n"
+		"std::vector< const INode * > ParticleComposition::getChildren() const override final\n"
 		"\n"
 		"Returns a vector of children (const). \n"
 		"\n"
@@ -122831,7 +123572,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"ParticleComposition_decompose", _wrap_ParticleComposition_decompose, METH_VARARGS, (char *)"\n"
 		"ParticleComposition_decompose(ParticleComposition self) -> SafePointerVector< IParticle >\n"
 		"\n"
-		"SafePointerVector< IParticle > ParticleComposition::decompose() const overridefinal\n"
+		"SafePointerVector< IParticle > ParticleComposition::decompose() const override final\n"
 		"\n"
 		"Decompose in constituent  IParticle objects. \n"
 		"\n"
@@ -122839,7 +123580,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"ParticleComposition_bottomTopZ", _wrap_ParticleComposition_bottomTopZ, METH_VARARGS, (char *)"\n"
 		"ParticleComposition_bottomTopZ(ParticleComposition self) -> ParticleLimits\n"
 		"\n"
-		"ParticleLimits ParticleComposition::bottomTopZ() const overridefinal\n"
+		"ParticleLimits ParticleComposition::bottomTopZ() const override final\n"
 		"\n"
 		"Top and bottom z-coordinate. \n"
 		"\n"
@@ -122861,7 +123602,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"ParticleCoreShell_clone", _wrap_ParticleCoreShell_clone, METH_VARARGS, (char *)"\n"
 		"ParticleCoreShell_clone(ParticleCoreShell self) -> ParticleCoreShell\n"
 		"\n"
-		"ParticleCoreShell * ParticleCoreShell::clone() const overridefinal\n"
+		"ParticleCoreShell * ParticleCoreShell::clone() const override final\n"
 		"\n"
 		"Returns a clone of this  ISample object. \n"
 		"\n"
@@ -122869,7 +123610,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"ParticleCoreShell_accept", _wrap_ParticleCoreShell_accept, METH_VARARGS, (char *)"\n"
 		"ParticleCoreShell_accept(ParticleCoreShell self, INodeVisitor visitor)\n"
 		"\n"
-		"void ParticleCoreShell::accept(INodeVisitor *visitor) const overridefinal\n"
+		"void ParticleCoreShell::accept(INodeVisitor *visitor) const override final\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -122877,7 +123618,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"ParticleCoreShell_createSlicedParticle", _wrap_ParticleCoreShell_createSlicedParticle, METH_VARARGS, (char *)"\n"
 		"ParticleCoreShell_createSlicedParticle(ParticleCoreShell self, ZLimits limits) -> SlicedParticle\n"
 		"\n"
-		"SlicedParticle ParticleCoreShell::createSlicedParticle(ZLimits limits) const overridefinal\n"
+		"SlicedParticle ParticleCoreShell::createSlicedParticle(ZLimits limits) const override final\n"
 		"\n"
 		"Create a sliced form factor for this particle. \n"
 		"\n"
@@ -122885,19 +123626,19 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"ParticleCoreShell_coreParticle", _wrap_ParticleCoreShell_coreParticle, METH_VARARGS, (char *)"\n"
 		"ParticleCoreShell_coreParticle(ParticleCoreShell self) -> Particle\n"
 		"\n"
-		"const Particle * ParticleCoreShell::coreParticle() const \n"
+		"const Particle * ParticleCoreShell::coreParticle() const\n"
 		"\n"
 		""},
 	 { (char *)"ParticleCoreShell_shellParticle", _wrap_ParticleCoreShell_shellParticle, METH_VARARGS, (char *)"\n"
 		"ParticleCoreShell_shellParticle(ParticleCoreShell self) -> Particle\n"
 		"\n"
-		"const Particle * ParticleCoreShell::shellParticle() const \n"
+		"const Particle * ParticleCoreShell::shellParticle() const\n"
 		"\n"
 		""},
 	 { (char *)"ParticleCoreShell_getChildren", _wrap_ParticleCoreShell_getChildren, METH_VARARGS, (char *)"\n"
 		"ParticleCoreShell_getChildren(ParticleCoreShell self) -> swig_dummy_type_const_inode_vector\n"
 		"\n"
-		"std::vector< const INode * > ParticleCoreShell::getChildren() const overridefinal\n"
+		"std::vector< const INode * > ParticleCoreShell::getChildren() const override final\n"
 		"\n"
 		"Returns a vector of children (const). \n"
 		"\n"
@@ -122912,7 +123653,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"ParticleDistribution_clone", _wrap_ParticleDistribution_clone, METH_VARARGS, (char *)"\n"
 		"ParticleDistribution_clone(ParticleDistribution self) -> ParticleDistribution\n"
 		"\n"
-		"ParticleDistribution * ParticleDistribution::clone() const finaloverride\n"
+		"ParticleDistribution * ParticleDistribution::clone() const final override\n"
 		"\n"
 		"Returns a clone of this  ISample object. \n"
 		"\n"
@@ -122920,7 +123661,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"ParticleDistribution_accept", _wrap_ParticleDistribution_accept, METH_VARARGS, (char *)"\n"
 		"ParticleDistribution_accept(ParticleDistribution self, INodeVisitor visitor)\n"
 		"\n"
-		"void ParticleDistribution::accept(INodeVisitor *visitor) const finaloverride\n"
+		"void ParticleDistribution::accept(INodeVisitor *visitor) const final override\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -122928,7 +123669,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"ParticleDistribution_translate", _wrap_ParticleDistribution_translate, METH_VARARGS, (char *)"\n"
 		"ParticleDistribution_translate(ParticleDistribution self, kvector_t translation)\n"
 		"\n"
-		"void ParticleDistribution::translate(kvector_t translation) finaloverride\n"
+		"void ParticleDistribution::translate(kvector_t translation) final override\n"
 		"\n"
 		"Translates the particle with the given vector. \n"
 		"\n"
@@ -122962,7 +123703,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"ParticleDistribution_getChildren", _wrap_ParticleDistribution_getChildren, METH_VARARGS, (char *)"\n"
 		"ParticleDistribution_getChildren(ParticleDistribution self) -> swig_dummy_type_const_inode_vector\n"
 		"\n"
-		"std::vector< const INode * > ParticleDistribution::getChildren() const finaloverride\n"
+		"std::vector< const INode * > ParticleDistribution::getChildren() const final override\n"
 		"\n"
 		"Returns a vector of children (const). \n"
 		"\n"
@@ -122986,7 +123727,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"ParticleLayout_clone", _wrap_ParticleLayout_clone, METH_VARARGS, (char *)"\n"
 		"ParticleLayout_clone(ParticleLayout self) -> ParticleLayout\n"
 		"\n"
-		"ParticleLayout * ParticleLayout::clone() const finaloverride\n"
+		"ParticleLayout * ParticleLayout::clone() const final override\n"
 		"\n"
 		"Returns a clone of this  ISample object. \n"
 		"\n"
@@ -122994,13 +123735,13 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"ParticleLayout_cloneWithOffset", _wrap_ParticleLayout_cloneWithOffset, METH_VARARGS, (char *)"\n"
 		"ParticleLayout_cloneWithOffset(ParticleLayout self, double offset) -> ParticleLayout\n"
 		"\n"
-		"ParticleLayout * ParticleLayout::cloneWithOffset(double offset) const finaloverride\n"
+		"ParticleLayout * ParticleLayout::cloneWithOffset(double offset) const final override\n"
 		"\n"
 		""},
 	 { (char *)"ParticleLayout_accept", _wrap_ParticleLayout_accept, METH_VARARGS, (char *)"\n"
 		"ParticleLayout_accept(ParticleLayout self, INodeVisitor visitor)\n"
 		"\n"
-		"void ParticleLayout::accept(INodeVisitor *visitor) const finaloverride\n"
+		"void ParticleLayout::accept(INodeVisitor *visitor) const final override\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -123034,7 +123775,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"ParticleLayout_particles", _wrap_ParticleLayout_particles, METH_VARARGS, (char *)"\n"
 		"ParticleLayout_particles(ParticleLayout self) -> SafePointerVector< IParticle const >\n"
 		"\n"
-		"SafePointerVector< const IParticle > ParticleLayout::particles() const finaloverride\n"
+		"SafePointerVector< const IParticle > ParticleLayout::particles() const final override\n"
 		"\n"
 		"Returns information on all particles (type and abundance) and generates new particles if an  IAbstractParticle denotes a collection \n"
 		"\n"
@@ -123042,7 +123783,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"ParticleLayout_getTotalAbundance", _wrap_ParticleLayout_getTotalAbundance, METH_VARARGS, (char *)"\n"
 		"ParticleLayout_getTotalAbundance(ParticleLayout self) -> double\n"
 		"\n"
-		"double ParticleLayout::getTotalAbundance() const finaloverride\n"
+		"double ParticleLayout::getTotalAbundance() const final override\n"
 		"\n"
 		"Get total abundance of all particles. \n"
 		"\n"
@@ -123058,7 +123799,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"ParticleLayout_totalParticleSurfaceDensity", _wrap_ParticleLayout_totalParticleSurfaceDensity, METH_VARARGS, (char *)"\n"
 		"ParticleLayout_totalParticleSurfaceDensity(ParticleLayout self) -> double\n"
 		"\n"
-		"double ParticleLayout::totalParticleSurfaceDensity() const finaloverride\n"
+		"double ParticleLayout::totalParticleSurfaceDensity() const final override\n"
 		"\n"
 		"Returns surface density of all particles. \n"
 		"\n"
@@ -123066,7 +123807,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"ParticleLayout_setTotalParticleSurfaceDensity", _wrap_ParticleLayout_setTotalParticleSurfaceDensity, METH_VARARGS, (char *)"\n"
 		"ParticleLayout_setTotalParticleSurfaceDensity(ParticleLayout self, double particle_density)\n"
 		"\n"
-		"void ParticleLayout::setTotalParticleSurfaceDensity(double particle_density) finaloverride\n"
+		"void ParticleLayout::setTotalParticleSurfaceDensity(double particle_density) final override\n"
 		"\n"
 		"Sets total particle surface density.  particle_density: number of particles per square nanometer \n"
 		"\n"
@@ -123074,7 +123815,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"ParticleLayout_getChildren", _wrap_ParticleLayout_getChildren, METH_VARARGS, (char *)"\n"
 		"ParticleLayout_getChildren(ParticleLayout self) -> swig_dummy_type_const_inode_vector\n"
 		"\n"
-		"std::vector< const INode * > ParticleLayout::getChildren() const finaloverride\n"
+		"std::vector< const INode * > ParticleLayout::getChildren() const final override\n"
 		"\n"
 		"Returns a vector of children (const). \n"
 		"\n"
@@ -123097,7 +123838,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"Polygon_clone", _wrap_Polygon_clone, METH_VARARGS, (char *)"\n"
 		"Polygon_clone(Polygon self) -> Polygon\n"
 		"\n"
-		"virtual Polygon* Polygon::clone() const \n"
+		"virtual Polygon* Polygon::clone() const\n"
 		"\n"
 		""},
 	 { (char *)"Polygon_contains", _wrap_Polygon_contains, METH_VARARGS, (char *)"\n"
@@ -123112,13 +123853,13 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"Polygon_getArea", _wrap_Polygon_getArea, METH_VARARGS, (char *)"\n"
 		"Polygon_getArea(Polygon self) -> double\n"
 		"\n"
-		"double Polygon::getArea() const \n"
+		"double Polygon::getArea() const\n"
 		"\n"
 		""},
 	 { (char *)"Polygon_getPoints", _wrap_Polygon_getPoints, METH_VARARGS, (char *)"\n"
 		"Polygon_getPoints(Polygon self, vdouble1d_t xpos, vdouble1d_t ypos)\n"
 		"\n"
-		"void Polygon::getPoints(std::vector< double > &xpos, std::vector< double > &ypos) const \n"
+		"void Polygon::getPoints(std::vector< double > &xpos, std::vector< double > &ypos) const\n"
 		"\n"
 		""},
 	 { (char *)"Polygon_swigregister", Polygon_swigregister, METH_VARARGS, NULL},
@@ -123136,7 +123877,7 @@ static PyMethodDef SwigMethods[] = {
 		"clone(std::string const & new_name) -> RealParameter\n"
 		"RealParameter_clone(RealParameter self) -> RealParameter\n"
 		"\n"
-		"RealParameter * RealParameter::clone(const std::string &new_name=\"\") const \n"
+		"RealParameter * RealParameter::clone(const std::string &new_name=\"\") const\n"
 		"\n"
 		""},
 	 { (char *)"RealParameter_setValue", _wrap_RealParameter_setValue, METH_VARARGS, (char *)"\n"
@@ -123164,7 +123905,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"RealParameter_limits", _wrap_RealParameter_limits, METH_VARARGS, (char *)"\n"
 		"RealParameter_limits(RealParameter self) -> RealLimits\n"
 		"\n"
-		"RealLimits RealParameter::limits() const \n"
+		"RealLimits RealParameter::limits() const\n"
 		"\n"
 		""},
 	 { (char *)"RealParameter_setLimited", _wrap_RealParameter_setLimited, METH_VARARGS, (char *)"\n"
@@ -123194,7 +123935,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"RealParameter_unit", _wrap_RealParameter_unit, METH_VARARGS, (char *)"\n"
 		"RealParameter_unit(RealParameter self) -> std::string\n"
 		"\n"
-		"std::string RealParameter::unit() const \n"
+		"std::string RealParameter::unit() const\n"
 		"\n"
 		""},
 	 { (char *)"delete_RealParameter", _wrap_delete_RealParameter, METH_VARARGS, (char *)"delete_RealParameter(RealParameter self)"},
@@ -123223,7 +123964,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"Rectangle_clone", _wrap_Rectangle_clone, METH_VARARGS, (char *)"\n"
 		"Rectangle_clone(Rectangle self) -> Rectangle\n"
 		"\n"
-		"Rectangle* Rectangle::clone() const \n"
+		"Rectangle* Rectangle::clone() const\n"
 		"\n"
 		""},
 	 { (char *)"Rectangle_contains", _wrap_Rectangle_contains, METH_VARARGS, (char *)"\n"
@@ -123238,31 +123979,31 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"Rectangle_getArea", _wrap_Rectangle_getArea, METH_VARARGS, (char *)"\n"
 		"Rectangle_getArea(Rectangle self) -> double\n"
 		"\n"
-		"double Rectangle::getArea() const \n"
+		"double Rectangle::getArea() const\n"
 		"\n"
 		""},
 	 { (char *)"Rectangle_getXlow", _wrap_Rectangle_getXlow, METH_VARARGS, (char *)"\n"
 		"Rectangle_getXlow(Rectangle self) -> double\n"
 		"\n"
-		"double Rectangle::getXlow() const \n"
+		"double Rectangle::getXlow() const\n"
 		"\n"
 		""},
 	 { (char *)"Rectangle_getYlow", _wrap_Rectangle_getYlow, METH_VARARGS, (char *)"\n"
 		"Rectangle_getYlow(Rectangle self) -> double\n"
 		"\n"
-		"double Rectangle::getYlow() const \n"
+		"double Rectangle::getYlow() const\n"
 		"\n"
 		""},
 	 { (char *)"Rectangle_getXup", _wrap_Rectangle_getXup, METH_VARARGS, (char *)"\n"
 		"Rectangle_getXup(Rectangle self) -> double\n"
 		"\n"
-		"double Rectangle::getXup() const \n"
+		"double Rectangle::getXup() const\n"
 		"\n"
 		""},
 	 { (char *)"Rectangle_getYup", _wrap_Rectangle_getYup, METH_VARARGS, (char *)"\n"
 		"Rectangle_getYup(Rectangle self) -> double\n"
 		"\n"
-		"double Rectangle::getYup() const \n"
+		"double Rectangle::getYup() const\n"
 		"\n"
 		""},
 	 { (char *)"delete_Rectangle", _wrap_delete_Rectangle, METH_VARARGS, (char *)"delete_Rectangle(Rectangle self)"},
@@ -123306,7 +124047,7 @@ static PyMethodDef SwigMethods[] = {
 		"setPosition(kvector_t normal_to_detector, double u0, double v0, kvector_t direction)\n"
 		"RectangularDetector_setPosition(RectangularDetector self, kvector_t normal_to_detector, double u0, double v0)\n"
 		"\n"
-		"void RectangularDetector::setPosition(const kvector_t normal_to_detector, double u0, double v0, const kvector_t direction=kvector_t(0.0,-1.0, 0.0))\n"
+		"void RectangularDetector::setPosition(const kvector_t normal_to_detector, double u0, double v0, const kvector_t direction=kvector_t(0.0, -1.0, 0.0))\n"
 		"\n"
 		""},
 	 { (char *)"RectangularDetector_setPerpendicularToSampleX", _wrap_RectangularDetector_setPerpendicularToSampleX, METH_VARARGS, (char *)"\n"
@@ -123338,73 +124079,73 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"RectangularDetector_getWidth", _wrap_RectangularDetector_getWidth, METH_VARARGS, (char *)"\n"
 		"RectangularDetector_getWidth(RectangularDetector self) -> double\n"
 		"\n"
-		"double RectangularDetector::getWidth() const \n"
+		"double RectangularDetector::getWidth() const\n"
 		"\n"
 		""},
 	 { (char *)"RectangularDetector_getHeight", _wrap_RectangularDetector_getHeight, METH_VARARGS, (char *)"\n"
 		"RectangularDetector_getHeight(RectangularDetector self) -> double\n"
 		"\n"
-		"double RectangularDetector::getHeight() const \n"
+		"double RectangularDetector::getHeight() const\n"
 		"\n"
 		""},
 	 { (char *)"RectangularDetector_getNbinsX", _wrap_RectangularDetector_getNbinsX, METH_VARARGS, (char *)"\n"
 		"RectangularDetector_getNbinsX(RectangularDetector self) -> size_t\n"
 		"\n"
-		"size_t RectangularDetector::getNbinsX() const \n"
+		"size_t RectangularDetector::getNbinsX() const\n"
 		"\n"
 		""},
 	 { (char *)"RectangularDetector_getNbinsY", _wrap_RectangularDetector_getNbinsY, METH_VARARGS, (char *)"\n"
 		"RectangularDetector_getNbinsY(RectangularDetector self) -> size_t\n"
 		"\n"
-		"size_t RectangularDetector::getNbinsY() const \n"
+		"size_t RectangularDetector::getNbinsY() const\n"
 		"\n"
 		""},
 	 { (char *)"RectangularDetector_getNormalVector", _wrap_RectangularDetector_getNormalVector, METH_VARARGS, (char *)"\n"
 		"RectangularDetector_getNormalVector(RectangularDetector self) -> kvector_t\n"
 		"\n"
-		"kvector_t RectangularDetector::getNormalVector() const \n"
+		"kvector_t RectangularDetector::getNormalVector() const\n"
 		"\n"
 		""},
 	 { (char *)"RectangularDetector_getU0", _wrap_RectangularDetector_getU0, METH_VARARGS, (char *)"\n"
 		"RectangularDetector_getU0(RectangularDetector self) -> double\n"
 		"\n"
-		"double RectangularDetector::getU0() const \n"
+		"double RectangularDetector::getU0() const\n"
 		"\n"
 		""},
 	 { (char *)"RectangularDetector_getV0", _wrap_RectangularDetector_getV0, METH_VARARGS, (char *)"\n"
 		"RectangularDetector_getV0(RectangularDetector self) -> double\n"
 		"\n"
-		"double RectangularDetector::getV0() const \n"
+		"double RectangularDetector::getV0() const\n"
 		"\n"
 		""},
 	 { (char *)"RectangularDetector_getDirectionVector", _wrap_RectangularDetector_getDirectionVector, METH_VARARGS, (char *)"\n"
 		"RectangularDetector_getDirectionVector(RectangularDetector self) -> kvector_t\n"
 		"\n"
-		"kvector_t RectangularDetector::getDirectionVector() const \n"
+		"kvector_t RectangularDetector::getDirectionVector() const\n"
 		"\n"
 		""},
 	 { (char *)"RectangularDetector_getDistance", _wrap_RectangularDetector_getDistance, METH_VARARGS, (char *)"\n"
 		"RectangularDetector_getDistance(RectangularDetector self) -> double\n"
 		"\n"
-		"double RectangularDetector::getDistance() const \n"
+		"double RectangularDetector::getDistance() const\n"
 		"\n"
 		""},
 	 { (char *)"RectangularDetector_getDirectBeamU0", _wrap_RectangularDetector_getDirectBeamU0, METH_VARARGS, (char *)"\n"
 		"RectangularDetector_getDirectBeamU0(RectangularDetector self) -> double\n"
 		"\n"
-		"double RectangularDetector::getDirectBeamU0() const \n"
+		"double RectangularDetector::getDirectBeamU0() const\n"
 		"\n"
 		""},
 	 { (char *)"RectangularDetector_getDirectBeamV0", _wrap_RectangularDetector_getDirectBeamV0, METH_VARARGS, (char *)"\n"
 		"RectangularDetector_getDirectBeamV0(RectangularDetector self) -> double\n"
 		"\n"
-		"double RectangularDetector::getDirectBeamV0() const \n"
+		"double RectangularDetector::getDirectBeamV0() const\n"
 		"\n"
 		""},
 	 { (char *)"RectangularDetector_getDetectorArrangment", _wrap_RectangularDetector_getDetectorArrangment, METH_VARARGS, (char *)"\n"
 		"RectangularDetector_getDetectorArrangment(RectangularDetector self) -> RectangularDetector::EDetectorArrangement\n"
 		"\n"
-		"RectangularDetector::EDetectorArrangement RectangularDetector::getDetectorArrangment() const \n"
+		"RectangularDetector::EDetectorArrangement RectangularDetector::getDetectorArrangment() const\n"
 		"\n"
 		""},
 	 { (char *)"RectangularDetector_getValidAxesUnits", _wrap_RectangularDetector_getValidAxesUnits, METH_VARARGS, (char *)"\n"
@@ -123476,13 +124217,13 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"ResolutionFunction2DGaussian_evaluateCDF", _wrap_ResolutionFunction2DGaussian_evaluateCDF, METH_VARARGS, (char *)"\n"
 		"ResolutionFunction2DGaussian_evaluateCDF(ResolutionFunction2DGaussian self, double x, double y) -> double\n"
 		"\n"
-		"double ResolutionFunction2DGaussian::evaluateCDF(double x, double y) const \n"
+		"double ResolutionFunction2DGaussian::evaluateCDF(double x, double y) const\n"
 		"\n"
 		""},
 	 { (char *)"ResolutionFunction2DGaussian_clone", _wrap_ResolutionFunction2DGaussian_clone, METH_VARARGS, (char *)"\n"
 		"ResolutionFunction2DGaussian_clone(ResolutionFunction2DGaussian self) -> ResolutionFunction2DGaussian\n"
 		"\n"
-		"ResolutionFunction2DGaussian* ResolutionFunction2DGaussian::clone() const \n"
+		"ResolutionFunction2DGaussian* ResolutionFunction2DGaussian::clone() const\n"
 		"\n"
 		""},
 	 { (char *)"ResolutionFunction2DGaussian_accept", _wrap_ResolutionFunction2DGaussian_accept, METH_VARARGS, (char *)"\n"
@@ -123496,13 +124237,13 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"ResolutionFunction2DGaussian_getSigmaX", _wrap_ResolutionFunction2DGaussian_getSigmaX, METH_VARARGS, (char *)"\n"
 		"ResolutionFunction2DGaussian_getSigmaX(ResolutionFunction2DGaussian self) -> double\n"
 		"\n"
-		"double ResolutionFunction2DGaussian::getSigmaX() const \n"
+		"double ResolutionFunction2DGaussian::getSigmaX() const\n"
 		"\n"
 		""},
 	 { (char *)"ResolutionFunction2DGaussian_getSigmaY", _wrap_ResolutionFunction2DGaussian_getSigmaY, METH_VARARGS, (char *)"\n"
 		"ResolutionFunction2DGaussian_getSigmaY(ResolutionFunction2DGaussian self) -> double\n"
 		"\n"
-		"double ResolutionFunction2DGaussian::getSigmaY() const \n"
+		"double ResolutionFunction2DGaussian::getSigmaY() const\n"
 		"\n"
 		""},
 	 { (char *)"delete_ResolutionFunction2DGaussian", _wrap_delete_ResolutionFunction2DGaussian, METH_VARARGS, (char *)"delete_ResolutionFunction2DGaussian(ResolutionFunction2DGaussian self)"},
@@ -123524,7 +124265,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"SpecularSimulation_clone", _wrap_SpecularSimulation_clone, METH_VARARGS, (char *)"\n"
 		"SpecularSimulation_clone(SpecularSimulation self) -> SpecularSimulation\n"
 		"\n"
-		"SpecularSimulation * SpecularSimulation::clone() const \n"
+		"SpecularSimulation * SpecularSimulation::clone() const\n"
 		"\n"
 		""},
 	 { (char *)"SpecularSimulation_runSimulation", _wrap_SpecularSimulation_runSimulation, METH_VARARGS, (char *)"\n"
@@ -123609,7 +124350,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"SpecularSimulation_getLayerRTCoefficients", _wrap_SpecularSimulation_getLayerRTCoefficients, METH_VARARGS, (char *)"\n"
 		"SpecularSimulation_getLayerRTCoefficients(SpecularSimulation self, size_t i_alpha, size_t i_layer) -> SpecularSimulation::LayerRTCoefficients_t\n"
 		"\n"
-		"SpecularSimulation::LayerRTCoefficients_t SpecularSimulation::getLayerRTCoefficients(size_t i_alpha, size_t i_layer) const \n"
+		"SpecularSimulation::LayerRTCoefficients_t SpecularSimulation::getLayerRTCoefficients(size_t i_alpha, size_t i_layer) const\n"
 		"\n"
 		""},
 	 { (char *)"SpecularSimulation_prepareSimulation", _wrap_SpecularSimulation_prepareSimulation, METH_VARARGS, (char *)"\n"
@@ -123683,13 +124424,13 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"SampleBuilderFactoryTemp_begin", _wrap_SampleBuilderFactoryTemp_begin, METH_VARARGS, (char *)"\n"
 		"SampleBuilderFactoryTemp_begin(SampleBuilderFactoryTemp self) -> IFactory< std::string,IMultiLayerBuilder >::const_iterator\n"
 		"\n"
-		"const_iterator IFactory< Key, AbstractProduct >::begin() const \n"
+		"const_iterator IFactory< Key, AbstractProduct >::begin() const\n"
 		"\n"
 		""},
 	 { (char *)"SampleBuilderFactoryTemp_end", _wrap_SampleBuilderFactoryTemp_end, METH_VARARGS, (char *)"\n"
 		"SampleBuilderFactoryTemp_end(SampleBuilderFactoryTemp self) -> IFactory< std::string,IMultiLayerBuilder >::const_iterator\n"
 		"\n"
-		"const_iterator IFactory< Key, AbstractProduct >::end() const \n"
+		"const_iterator IFactory< Key, AbstractProduct >::end() const\n"
 		"\n"
 		""},
 	 { (char *)"SampleBuilderFactoryTemp_swigregister", SampleBuilderFactoryTemp_swigregister, METH_VARARGS, NULL},
@@ -123755,13 +124496,13 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"SimulationFactoryTemp_begin", _wrap_SimulationFactoryTemp_begin, METH_VARARGS, (char *)"\n"
 		"SimulationFactoryTemp_begin(SimulationFactoryTemp self) -> IFactory< std::string,GISASSimulation >::const_iterator\n"
 		"\n"
-		"const_iterator IFactory< Key, AbstractProduct >::begin() const \n"
+		"const_iterator IFactory< Key, AbstractProduct >::begin() const\n"
 		"\n"
 		""},
 	 { (char *)"SimulationFactoryTemp_end", _wrap_SimulationFactoryTemp_end, METH_VARARGS, (char *)"\n"
 		"SimulationFactoryTemp_end(SimulationFactoryTemp self) -> IFactory< std::string,GISASSimulation >::const_iterator\n"
 		"\n"
-		"const_iterator IFactory< Key, AbstractProduct >::end() const \n"
+		"const_iterator IFactory< Key, AbstractProduct >::end() const\n"
 		"\n"
 		""},
 	 { (char *)"SimulationFactoryTemp_swigregister", SimulationFactoryTemp_swigregister, METH_VARARGS, NULL},
@@ -125016,9 +125757,6 @@ static void *_p_LayerTo_p_INamed(void *x, int *SWIGUNUSEDPARM(newmemory)) {
 static void *_p_FormFactorRipple1To_p_INamed(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INamed *) (IParameterized *)(INode *)(ISample *)(IFormFactor *)(IFormFactorBorn *) ((FormFactorRipple1 *) x));
 }
-static void *_p_HomogeneousMaterialTo_p_INamed(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INamed *)  ((HomogeneousMaterial *) x));
-}
 static void *_p_FormFactorAnisoPyramidTo_p_INamed(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INamed *) (IParameterized *)(INode *)(ISample *)(IFormFactor *)(IFormFactorBorn *)(FormFactorPolyhedron *) ((FormFactorAnisoPyramid *) x));
 }
@@ -126529,7 +127267,6 @@ static swig_type_info _swigt__p_GISASSimulation = {"_p_GISASSimulation", "GISASS
 static swig_type_info _swigt__p_HexagonalLattice = {"_p_HexagonalLattice", "HexagonalLattice *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_Histogram1D = {"_p_Histogram1D", "Histogram1D *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_Histogram2D = {"_p_Histogram2D", "Histogram2D *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_HomogeneousMaterial = {"_p_HomogeneousMaterial", "HomogeneousMaterial *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_HorizontalLine = {"_p_HorizontalLine", "HorizontalLine *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_IAbstractParticle = {"_p_IAbstractParticle", "IAbstractParticle *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_IAxis = {"_p_IAxis", "IAxis *", 0, 0, (void*)0, 0};
@@ -126596,6 +127333,7 @@ static swig_type_info _swigt__p_LayerInterface = {"_p_LayerInterface", "LayerInt
 static swig_type_info _swigt__p_LayerRTCoefficients_t = {"_p_LayerRTCoefficients_t", "LayerRTCoefficients_t *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_LayerRoughness = {"_p_LayerRoughness", "LayerRoughness *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_Line = {"_p_Line", "Line *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Material = {"_p_Material", "Material *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_MesoCrystal = {"_p_MesoCrystal", "MesoCrystal *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_MultiLayer = {"_p_MultiLayer", "MultiLayer *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_MultiLayerRTCoefficients_t = {"_p_MultiLayerRTCoefficients_t", "MultiLayerRTCoefficients_t *", 0, 0, (void*)0, 0};
@@ -126704,7 +127442,6 @@ static swig_type_info _swigt__p_std__vectorT_BasicVector3DT_std__complexT_double
 static swig_type_info _swigt__p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t = {"_p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t", "std::vector< FitElement,std::allocator< FitElement > > *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t__const_iterator = {"_p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t__const_iterator", "std::vector< FitElement,std::allocator< FitElement > >::const_iterator *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t__iterator = {"_p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t__iterator", "std::vector< FitElement,std::allocator< FitElement > >::iterator *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_std__vectorT_HomogeneousMaterial_const_p_std__allocatorT_HomogeneousMaterial_const_p_t_t = {"_p_std__vectorT_HomogeneousMaterial_const_p_std__allocatorT_HomogeneousMaterial_const_p_t_t", "std::vector< HomogeneousMaterial const *,std::allocator< HomogeneousMaterial const * > > *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_std__vectorT_HomogeneousRegion_std__allocatorT_HomogeneousRegion_t_t = {"_p_std__vectorT_HomogeneousRegion_std__allocatorT_HomogeneousRegion_t_t", "std::vector< HomogeneousRegion,std::allocator< HomogeneousRegion > > *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_std__vectorT_IDetector2D__EAxesUnits_std__allocatorT_IDetector2D__EAxesUnits_t_t = {"_p_std__vectorT_IDetector2D__EAxesUnits_std__allocatorT_IDetector2D__EAxesUnits_t_t", "std::vector< IDetector2D::EAxesUnits,std::allocator< IDetector2D::EAxesUnits > > *|std::vector< enum IDetector2D::EAxesUnits,std::allocator< enum IDetector2D::EAxesUnits > > *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_std__vectorT_IFormFactor_p_std__allocatorT_IFormFactor_p_t_t = {"_p_std__vectorT_IFormFactor_p_std__allocatorT_IFormFactor_p_t_t", "std::vector< IFormFactor *,std::allocator< IFormFactor * > > *|std::vector< IFormFactor * > *", 0, 0, (void*)0, 0};
@@ -126712,6 +127449,7 @@ static swig_type_info _swigt__p_std__vectorT_ILayout_const_p_std__allocatorT_ILa
 static swig_type_info _swigt__p_std__vectorT_INode_const_p_std__allocatorT_INode_const_p_t_t = {"_p_std__vectorT_INode_const_p_std__allocatorT_INode_const_p_t_t", "std::vector< INode const *,std::allocator< INode const * > > *|std::vector< INode const * > *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_std__vectorT_INode_p_std__allocatorT_INode_p_t_t = {"_p_std__vectorT_INode_p_std__allocatorT_INode_p_t_t", "std::vector< INode *,std::allocator< INode * > > *|std::vector< INode * > *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_std__vectorT_IParticle_const_p_std__allocatorT_IParticle_const_p_t_t = {"_p_std__vectorT_IParticle_const_p_std__allocatorT_IParticle_const_p_t_t", "std::vector< IParticle const *,std::allocator< IParticle const * > > *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_std__vectorT_Material_const_p_std__allocatorT_Material_const_p_t_t = {"_p_std__vectorT_Material_const_p_std__allocatorT_Material_const_p_t_t", "std::vector< Material const *,std::allocator< Material const * > > *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_std__vectorT_ParameterSample_std__allocatorT_ParameterSample_t_t = {"_p_std__vectorT_ParameterSample_std__allocatorT_ParameterSample_t_t", "std::vector< ParameterSample,std::allocator< ParameterSample > > *|std::vector< ParameterSample > *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_std__vectorT_PolygonalTopology_std__allocatorT_PolygonalTopology_t_t = {"_p_std__vectorT_PolygonalTopology_std__allocatorT_PolygonalTopology_t_t", "std::vector< PolygonalTopology,std::allocator< PolygonalTopology > > *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_std__vectorT_RealParameter_p_std__allocatorT_RealParameter_p_t_t = {"_p_std__vectorT_RealParameter_p_std__allocatorT_RealParameter_p_t_t", "std::vector< RealParameter *,std::allocator< RealParameter * > > *", 0, 0, (void*)0, 0};
@@ -126839,7 +127577,6 @@ static swig_type_info *swig_type_initial[] = {
   &_swigt__p_HexagonalLattice,
   &_swigt__p_Histogram1D,
   &_swigt__p_Histogram2D,
-  &_swigt__p_HomogeneousMaterial,
   &_swigt__p_HorizontalLine,
   &_swigt__p_IAbstractParticle,
   &_swigt__p_IAxis,
@@ -126906,6 +127643,7 @@ static swig_type_info *swig_type_initial[] = {
   &_swigt__p_LayerRTCoefficients_t,
   &_swigt__p_LayerRoughness,
   &_swigt__p_Line,
+  &_swigt__p_Material,
   &_swigt__p_MesoCrystal,
   &_swigt__p_MultiLayer,
   &_swigt__p_MultiLayerRTCoefficients_t,
@@ -127014,7 +127752,6 @@ static swig_type_info *swig_type_initial[] = {
   &_swigt__p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t,
   &_swigt__p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t__const_iterator,
   &_swigt__p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t__iterator,
-  &_swigt__p_std__vectorT_HomogeneousMaterial_const_p_std__allocatorT_HomogeneousMaterial_const_p_t_t,
   &_swigt__p_std__vectorT_HomogeneousRegion_std__allocatorT_HomogeneousRegion_t_t,
   &_swigt__p_std__vectorT_IDetector2D__EAxesUnits_std__allocatorT_IDetector2D__EAxesUnits_t_t,
   &_swigt__p_std__vectorT_IFormFactor_p_std__allocatorT_IFormFactor_p_t_t,
@@ -127022,6 +127759,7 @@ static swig_type_info *swig_type_initial[] = {
   &_swigt__p_std__vectorT_INode_const_p_std__allocatorT_INode_const_p_t_t,
   &_swigt__p_std__vectorT_INode_p_std__allocatorT_INode_p_t_t,
   &_swigt__p_std__vectorT_IParticle_const_p_std__allocatorT_IParticle_const_p_t_t,
+  &_swigt__p_std__vectorT_Material_const_p_std__allocatorT_Material_const_p_t_t,
   &_swigt__p_std__vectorT_ParameterSample_std__allocatorT_ParameterSample_t_t,
   &_swigt__p_std__vectorT_PolygonalTopology_std__allocatorT_PolygonalTopology_t_t,
   &_swigt__p_std__vectorT_RealParameter_p_std__allocatorT_RealParameter_p_t_t,
@@ -127149,7 +127887,6 @@ static swig_cast_info _swigc__p_GISASSimulation[] = {  {&_swigt__p_GISASSimulati
 static swig_cast_info _swigc__p_HexagonalLattice[] = {  {&_swigt__p_HexagonalLattice, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_Histogram1D[] = {  {&_swigt__p_Histogram1D, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_Histogram2D[] = {  {&_swigt__p_Histogram2D, 0, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_HomogeneousMaterial[] = {  {&_swigt__p_HomogeneousMaterial, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_HorizontalLine[] = {  {&_swigt__p_HorizontalLine, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IAbstractParticle[] = {  {&_swigt__p_ParticleComposition, _p_ParticleCompositionTo_p_IAbstractParticle, 0, 0},  {&_swigt__p_ParticleDistribution, _p_ParticleDistributionTo_p_IAbstractParticle, 0, 0},  {&_swigt__p_MesoCrystal, _p_MesoCrystalTo_p_IAbstractParticle, 0, 0},  {&_swigt__p_IAbstractParticle, 0, 0, 0},  {&_swigt__p_IParticle, _p_IParticleTo_p_IAbstractParticle, 0, 0},  {&_swigt__p_Particle, _p_ParticleTo_p_IAbstractParticle, 0, 0},  {&_swigt__p_ParticleCoreShell, _p_ParticleCoreShellTo_p_IAbstractParticle, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IAxis[] = {  {&_swigt__p_IAxis, 0, 0, 0},  {&_swigt__p_VariableBinAxis, _p_VariableBinAxisTo_p_IAxis, 0, 0},  {&_swigt__p_ConstKBinAxis, _p_ConstKBinAxisTo_p_IAxis, 0, 0},  {&_swigt__p_CustomBinAxis, _p_CustomBinAxisTo_p_IAxis, 0, 0},  {&_swigt__p_FixedBinAxis, _p_FixedBinAxisTo_p_IAxis, 0, 0},{0, 0, 0, 0}};
@@ -127179,7 +127916,7 @@ static swig_cast_info _swigc__p_ILayerRTCoefficients[] = {  {&_swigt__p_ILayerRT
 static swig_cast_info _swigc__p_ILayout[] = {  {&_swigt__p_ILayout, 0, 0, 0},  {&_swigt__p_ParticleLayout, _p_ParticleLayoutTo_p_ILayout, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IMinimizer[] = {  {&_swigt__p_IMinimizer, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IMultiLayerBuilder[] = {  {&_swigt__p_IMultiLayerBuilder, 0, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_INamed[] = {  {&_swigt__p_FormFactorBox, _p_FormFactorBoxTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorSphereGaussianRadius, _p_FormFactorSphereGaussianRadiusTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorSphereLogNormalRadius, _p_FormFactorSphereLogNormalRadiusTo_p_INamed, 0, 0},  {&_swigt__p_MultiLayer, _p_MultiLayerTo_p_INamed, 0, 0},  {&_swigt__p_ParameterDistribution, _p_ParameterDistributionTo_p_INamed, 0, 0},  {&_swigt__p_ParticleDistribution, _p_ParticleDistributionTo_p_INamed, 0, 0},  {&_swigt__p_FTDistribution1DGauss, _p_FTDistribution1DGaussTo_p_INamed, 0, 0},  {&_swigt__p_FTDecayFunction1DGauss, _p_FTDecayFunction1DGaussTo_p_INamed, 0, 0},  {&_swigt__p_InterferenceFunctionNone, _p_InterferenceFunctionNoneTo_p_INamed, 0, 0},  {&_swigt__p_Polygon, _p_PolygonTo_p_INamed, 0, 0},  {&_swigt__p_IDetector2D, _p_IDetector2DTo_p_INamed, 0, 0},  {&_swigt__p_Ellipse, _p_EllipseTo_p_INamed, 0, 0},  {&_swigt__p_ILayout, _p_ILayoutTo_p_INamed, 0, 0},  {&_swigt__p_ParticleLayout, _p_ParticleLayoutTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorHemiEllipsoid, _p_FormFactorHemiEllipsoidTo_p_INamed, 0, 0},  {&_swigt__p_IntensityScaleAndShiftNormalizer, _p_IntensityScaleAndShiftNormalizerTo_p_INamed, 0, 0},  {&_swigt__p_IntensityNormalizer, _p_IntensityNormalizerTo_p_INamed, 0, 0},  {&_swigt__p_IIntensityNormalizer, _p_IIntensityNormalizerTo_p_INamed, 0, 0},  {&_swigt__p_HorizontalLine, _p_HorizontalLineTo_p_INamed, 0, 0},  {&_swigt__p_IsGISAXSDetector, _p_IsGISAXSDetectorTo_p_INamed, 0, 0},  {&_swigt__p_SphericalDetector, _p_SphericalDetectorTo_p_INamed, 0, 0},  {&_swigt__p_RectangularDetector, _p_RectangularDetectorTo_p_INamed, 0, 0},  {&_swigt__p_INode, _p_INodeTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorPrism3, _p_FormFactorPrism3To_p_INamed, 0, 0},  {&_swigt__p_DistributionTrapezoid, _p_DistributionTrapezoidTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorIcosahedron, _p_FormFactorIcosahedronTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorDodecahedron, _p_FormFactorDodecahedronTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorCuboctahedron, _p_FormFactorCuboctahedronTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorPolyhedron, _p_FormFactorPolyhedronTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorTetrahedron, _p_FormFactorTetrahedronTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorPrism6, _p_FormFactorPrism6To_p_INamed, 0, 0},  {&_swigt__p_OffSpecSimulation, _p_OffSpecSimulationTo_p_INamed, 0, 0},  {&_swigt__p_GISASSimulation, _p_GISASSimulationTo_p_INamed, 0, 0},  {&_swigt__p_Simulation, _p_SimulationTo_p_INamed, 0, 0},  {&_swigt__p_SpecularSimulation, _p_SpecularSimulationTo_p_INamed, 0, 0},  {&_swigt__p_FTDistribution2DCone, _p_FTDistribution2DConeTo_p_INamed, 0, 0},  {&_swigt__p_ParticleCoreShell, _p_ParticleCoreShellTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorTruncatedSphere, _p_FormFactorTruncatedSphereTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorFullSphere, _p_FormFactorFullSphereTo_p_INamed, 0, 0},  {&_swigt__p_IFormFactor, _p_IFormFactorTo_p_INamed, 0, 0},  {&_swigt__p_ISample, _p_ISampleTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorPolygonalSurface, _p_FormFactorPolygonalSurfaceTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorLongBoxGauss, _p_FormFactorLongBoxGaussTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorPolygonalPrism, _p_FormFactorPolygonalPrismTo_p_INamed, 0, 0},  {&_swigt__p_FitSuiteObjects, _p_FitSuiteObjectsTo_p_INamed, 0, 0},  {&_swigt__p_FTDistribution2DGate, _p_FTDistribution2DGateTo_p_INamed, 0, 0},  {&_swigt__p_DistributionLogNormal, _p_DistributionLogNormalTo_p_INamed, 0, 0},  {&_swigt__p_Instrument, _p_InstrumentTo_p_INamed, 0, 0},  {&_swigt__p_FTDistribution1DVoigt, _p_FTDistribution1DVoigtTo_p_INamed, 0, 0},  {&_swigt__p_FTDecayFunction1DVoigt, _p_FTDecayFunction1DVoigtTo_p_INamed, 0, 0},  {&_swigt__p_IRotation, _p_IRotationTo_p_INamed, 0, 0},  {&_swigt__p_RotationX, _p_RotationXTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorTruncatedSpheroid, _p_FormFactorTruncatedSpheroidTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorFullSpheroid, _p_FormFactorFullSpheroidTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorTruncatedCube, _p_FormFactorTruncatedCubeTo_p_INamed, 0, 0},  {&_swigt__p_RotationY, _p_RotationYTo_p_INamed, 0, 0},  {&_swigt__p_FTDecayFunction2DGauss, _p_FTDecayFunction2DGaussTo_p_INamed, 0, 0},  {&_swigt__p_FTDistribution2DGauss, _p_FTDistribution2DGaussTo_p_INamed, 0, 0},  {&_swigt__p_IShape2D, _p_IShape2DTo_p_INamed, 0, 0},  {&_swigt__p_RotationZ, _p_RotationZTo_p_INamed, 0, 0},  {&_swigt__p_Rectangle, _p_RectangleTo_p_INamed, 0, 0},  {&_swigt__p_FitStrategyDefault, _p_FitStrategyDefaultTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorGauss, _p_FormFactorGaussTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorLongRipple2Gauss, _p_FormFactorLongRipple2GaussTo_p_INamed, 0, 0},  {&_swigt__p_VerticalLine, _p_VerticalLineTo_p_INamed, 0, 0},  {&_swigt__p_IFormFactorBorn, _p_IFormFactorBornTo_p_INamed, 0, 0},  {&_swigt__p_IDetectorResolution, _p_IDetectorResolutionTo_p_INamed, 0, 0},  {&_swigt__p_IClusteredParticles, _p_IClusteredParticlesTo_p_INamed, 0, 0},  {&_swigt__p_IMultiLayerBuilder, _p_IMultiLayerBuilderTo_p_INamed, 0, 0},  {&_swigt__p_Particle, _p_ParticleTo_p_INamed, 0, 0},  {&_swigt__p_IParticle, _p_IParticleTo_p_INamed, 0, 0},  {&_swigt__p_IAbstractParticle, _p_IAbstractParticleTo_p_INamed, 0, 0},  {&_swigt__p_Lattice2D, _p_Lattice2DTo_p_INamed, 0, 0},  {&_swigt__p_INamed, 0, 0, 0},  {&_swigt__p_DistributionGate, _p_DistributionGateTo_p_INamed, 0, 0},  {&_swigt__p_IFTDistribution1D, _p_IFTDistribution1DTo_p_INamed, 0, 0},  {&_swigt__p_IFTDecayFunction1D, _p_IFTDecayFunction1DTo_p_INamed, 0, 0},  {&_swigt__p_IDistribution1D, _p_IDistribution1DTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorCone, _p_FormFactorConeTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorRipple1, _p_FormFactorRipple1To_p_INamed, 0, 0},  {&_swigt__p_Layer, _p_LayerTo_p_INamed, 0, 0},  {&_swigt__p_HomogeneousMaterial, _p_HomogeneousMaterialTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorPyramid, _p_FormFactorPyramidTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorAnisoPyramid, _p_FormFactorAnisoPyramidTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorDecoratorDebyeWaller, _p_FormFactorDecoratorDebyeWallerTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorRipple2, _p_FormFactorRipple2To_p_INamed, 0, 0},  {&_swigt__p_FormFactorEllipsoidalCylinder, _p_FormFactorEllipsoidalCylinderTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorCylinder, _p_FormFactorCylinderTo_p_INamed, 0, 0},  {&_swigt__p_IParameterT_double_t, _p_IParameterT_double_tTo_p_INamed, 0, 0},  {&_swigt__p_DistributionGaussian, _p_DistributionGaussianTo_p_INamed, 0, 0},  {&_swigt__p_ResolutionFunction2DGaussian, _p_ResolutionFunction2DGaussianTo_p_INamed, 0, 0},  {&_swigt__p_ParticleComposition, _p_ParticleCompositionTo_p_INamed, 0, 0},  {&_swigt__p_Line, _p_LineTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorSphereUniformRadius, _p_FormFactorSphereUniformRadiusTo_p_INamed, 0, 0},  {&_swigt__p_FTDistribution1DCosine, _p_FTDistribution1DCosineTo_p_INamed, 0, 0},  {&_swigt__p_FTDistribution1DGate, _p_FTDistribution1DGateTo_p_INamed, 0, 0},  {&_swigt__p_DistributionCosine, _p_DistributionCosineTo_p_INamed, 0, 0},  {&_swigt__p_FTDistribution2DVoigt, _p_FTDistribution2DVoigtTo_p_INamed, 0, 0},  {&_swigt__p_FTDecayFunction2DVoigt, _p_FTDecayFunction2DVoigtTo_p_INamed, 0, 0},  {&_swigt__p_FTDistribution1DCauchy, _p_FTDistribution1DCauchyTo_p_INamed, 0, 0},  {&_swigt__p_FTDecayFunction1DCauchy, _p_FTDecayFunction1DCauchyTo_p_INamed, 0, 0},  {&_swigt__p_FTDecayFunction2DCauchy, _p_FTDecayFunction2DCauchyTo_p_INamed, 0, 0},  {&_swigt__p_FTDistribution2DCauchy, _p_FTDistribution2DCauchyTo_p_INamed, 0, 0},  {&_swigt__p_IInterferenceFunction, _p_IInterferenceFunctionTo_p_INamed, 0, 0},  {&_swigt__p_FitObject, _p_FitObjectTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorCone6, _p_FormFactorCone6To_p_INamed, 0, 0},  {&_swigt__p_FormFactorLongRipple1Gauss, _p_FormFactorLongRipple1GaussTo_p_INamed, 0, 0},  {&_swigt__p_Beam, _p_BeamTo_p_INamed, 0, 0},  {&_swigt__p_AdjustMinimizerStrategy, _p_AdjustMinimizerStrategyTo_p_INamed, 0, 0},  {&_swigt__p_IFitStrategy, _p_IFitStrategyTo_p_INamed, 0, 0},  {&_swigt__p_IFormFactorDecorator, _p_IFormFactorDecoratorTo_p_INamed, 0, 0},  {&_swigt__p_IParameterized, _p_IParameterizedTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorDot, _p_FormFactorDotTo_p_INamed, 0, 0},  {&_swigt__p_LayerRoughness, _p_LayerRoughnessTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorCrystal, _p_FormFactorCrystalTo_p_INamed, 0, 0},  {&_swigt__p_MesoCrystal, _p_MesoCrystalTo_p_INamed, 0, 0},  {&_swigt__p_InterferenceFunction2DParaCrystal, _p_InterferenceFunction2DParaCrystalTo_p_INamed, 0, 0},  {&_swigt__p_InterferenceFunctionRadialParaCrystal, _p_InterferenceFunctionRadialParaCrystalTo_p_INamed, 0, 0},  {&_swigt__p_Crystal, _p_CrystalTo_p_INamed, 0, 0},  {&_swigt__p_IFTDecayFunction2D, _p_IFTDecayFunction2DTo_p_INamed, 0, 0},  {&_swigt__p_IFTDistribution2D, _p_IFTDistribution2DTo_p_INamed, 0, 0},  {&_swigt__p_IResolutionFunction2D, _p_IResolutionFunction2DTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorWeighted, _p_FormFactorWeightedTo_p_INamed, 0, 0},  {&_swigt__p_RealParameter, _p_RealParameterTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorLorentz, _p_FormFactorLorentzTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorLongRipple2Lorentz, _p_FormFactorLongRipple2LorentzTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorLongRipple1Lorentz, _p_FormFactorLongRipple1LorentzTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorLongBoxLorentz, _p_FormFactorLongBoxLorentzTo_p_INamed, 0, 0},  {&_swigt__p_InterferenceFunction1DLattice, _p_InterferenceFunction1DLatticeTo_p_INamed, 0, 0},  {&_swigt__p_InterferenceFunction2DLattice, _p_InterferenceFunction2DLatticeTo_p_INamed, 0, 0},  {&_swigt__p_BasicLattice, _p_BasicLatticeTo_p_INamed, 0, 0},  {&_swigt__p_SquareLattice, _p_SquareLatticeTo_p_INamed, 0, 0},  {&_swigt__p_HexagonalLattice, _p_HexagonalLatticeTo_p_INamed, 0, 0},  {&_swigt__p_DistributionLorentz, _p_DistributionLorentzTo_p_INamed, 0, 0},  {&_swigt__p_Lattice, _p_LatticeTo_p_INamed, 0, 0},  {&_swigt__p_FTDistribution1DTriangle, _p_FTDistribution1DTriangleTo_p_INamed, 0, 0},  {&_swigt__p_FTDecayFunction1DTriangle, _p_FTDecayFunction1DTriangleTo_p_INamed, 0, 0},  {&_swigt__p_RotationEuler, _p_RotationEulerTo_p_INamed, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_INamed[] = {  {&_swigt__p_FormFactorBox, _p_FormFactorBoxTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorSphereGaussianRadius, _p_FormFactorSphereGaussianRadiusTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorSphereLogNormalRadius, _p_FormFactorSphereLogNormalRadiusTo_p_INamed, 0, 0},  {&_swigt__p_MultiLayer, _p_MultiLayerTo_p_INamed, 0, 0},  {&_swigt__p_ParameterDistribution, _p_ParameterDistributionTo_p_INamed, 0, 0},  {&_swigt__p_ParticleDistribution, _p_ParticleDistributionTo_p_INamed, 0, 0},  {&_swigt__p_FTDistribution1DGauss, _p_FTDistribution1DGaussTo_p_INamed, 0, 0},  {&_swigt__p_FTDecayFunction1DGauss, _p_FTDecayFunction1DGaussTo_p_INamed, 0, 0},  {&_swigt__p_InterferenceFunctionNone, _p_InterferenceFunctionNoneTo_p_INamed, 0, 0},  {&_swigt__p_Polygon, _p_PolygonTo_p_INamed, 0, 0},  {&_swigt__p_IDetector2D, _p_IDetector2DTo_p_INamed, 0, 0},  {&_swigt__p_Ellipse, _p_EllipseTo_p_INamed, 0, 0},  {&_swigt__p_ILayout, _p_ILayoutTo_p_INamed, 0, 0},  {&_swigt__p_ParticleLayout, _p_ParticleLayoutTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorHemiEllipsoid, _p_FormFactorHemiEllipsoidTo_p_INamed, 0, 0},  {&_swigt__p_IntensityScaleAndShiftNormalizer, _p_IntensityScaleAndShiftNormalizerTo_p_INamed, 0, 0},  {&_swigt__p_IntensityNormalizer, _p_IntensityNormalizerTo_p_INamed, 0, 0},  {&_swigt__p_IIntensityNormalizer, _p_IIntensityNormalizerTo_p_INamed, 0, 0},  {&_swigt__p_HorizontalLine, _p_HorizontalLineTo_p_INamed, 0, 0},  {&_swigt__p_IsGISAXSDetector, _p_IsGISAXSDetectorTo_p_INamed, 0, 0},  {&_swigt__p_SphericalDetector, _p_SphericalDetectorTo_p_INamed, 0, 0},  {&_swigt__p_RectangularDetector, _p_RectangularDetectorTo_p_INamed, 0, 0},  {&_swigt__p_INode, _p_INodeTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorPrism3, _p_FormFactorPrism3To_p_INamed, 0, 0},  {&_swigt__p_DistributionTrapezoid, _p_DistributionTrapezoidTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorIcosahedron, _p_FormFactorIcosahedronTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorDodecahedron, _p_FormFactorDodecahedronTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorCuboctahedron, _p_FormFactorCuboctahedronTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorPolyhedron, _p_FormFactorPolyhedronTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorTetrahedron, _p_FormFactorTetrahedronTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorPrism6, _p_FormFactorPrism6To_p_INamed, 0, 0},  {&_swigt__p_OffSpecSimulation, _p_OffSpecSimulationTo_p_INamed, 0, 0},  {&_swigt__p_GISASSimulation, _p_GISASSimulationTo_p_INamed, 0, 0},  {&_swigt__p_Simulation, _p_SimulationTo_p_INamed, 0, 0},  {&_swigt__p_SpecularSimulation, _p_SpecularSimulationTo_p_INamed, 0, 0},  {&_swigt__p_FTDistribution2DCone, _p_FTDistribution2DConeTo_p_INamed, 0, 0},  {&_swigt__p_ParticleCoreShell, _p_ParticleCoreShellTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorTruncatedSphere, _p_FormFactorTruncatedSphereTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorFullSphere, _p_FormFactorFullSphereTo_p_INamed, 0, 0},  {&_swigt__p_IFormFactor, _p_IFormFactorTo_p_INamed, 0, 0},  {&_swigt__p_ISample, _p_ISampleTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorPolygonalSurface, _p_FormFactorPolygonalSurfaceTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorLongBoxGauss, _p_FormFactorLongBoxGaussTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorPolygonalPrism, _p_FormFactorPolygonalPrismTo_p_INamed, 0, 0},  {&_swigt__p_FitSuiteObjects, _p_FitSuiteObjectsTo_p_INamed, 0, 0},  {&_swigt__p_FTDistribution2DGate, _p_FTDistribution2DGateTo_p_INamed, 0, 0},  {&_swigt__p_DistributionLogNormal, _p_DistributionLogNormalTo_p_INamed, 0, 0},  {&_swigt__p_Instrument, _p_InstrumentTo_p_INamed, 0, 0},  {&_swigt__p_FTDistribution1DVoigt, _p_FTDistribution1DVoigtTo_p_INamed, 0, 0},  {&_swigt__p_FTDecayFunction1DVoigt, _p_FTDecayFunction1DVoigtTo_p_INamed, 0, 0},  {&_swigt__p_IRotation, _p_IRotationTo_p_INamed, 0, 0},  {&_swigt__p_RotationX, _p_RotationXTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorTruncatedSpheroid, _p_FormFactorTruncatedSpheroidTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorFullSpheroid, _p_FormFactorFullSpheroidTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorTruncatedCube, _p_FormFactorTruncatedCubeTo_p_INamed, 0, 0},  {&_swigt__p_RotationY, _p_RotationYTo_p_INamed, 0, 0},  {&_swigt__p_FTDecayFunction2DGauss, _p_FTDecayFunction2DGaussTo_p_INamed, 0, 0},  {&_swigt__p_FTDistribution2DGauss, _p_FTDistribution2DGaussTo_p_INamed, 0, 0},  {&_swigt__p_IShape2D, _p_IShape2DTo_p_INamed, 0, 0},  {&_swigt__p_RotationZ, _p_RotationZTo_p_INamed, 0, 0},  {&_swigt__p_Rectangle, _p_RectangleTo_p_INamed, 0, 0},  {&_swigt__p_FitStrategyDefault, _p_FitStrategyDefaultTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorGauss, _p_FormFactorGaussTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorLongRipple2Gauss, _p_FormFactorLongRipple2GaussTo_p_INamed, 0, 0},  {&_swigt__p_VerticalLine, _p_VerticalLineTo_p_INamed, 0, 0},  {&_swigt__p_IFormFactorBorn, _p_IFormFactorBornTo_p_INamed, 0, 0},  {&_swigt__p_IDetectorResolution, _p_IDetectorResolutionTo_p_INamed, 0, 0},  {&_swigt__p_IClusteredParticles, _p_IClusteredParticlesTo_p_INamed, 0, 0},  {&_swigt__p_IMultiLayerBuilder, _p_IMultiLayerBuilderTo_p_INamed, 0, 0},  {&_swigt__p_Particle, _p_ParticleTo_p_INamed, 0, 0},  {&_swigt__p_IParticle, _p_IParticleTo_p_INamed, 0, 0},  {&_swigt__p_IAbstractParticle, _p_IAbstractParticleTo_p_INamed, 0, 0},  {&_swigt__p_Lattice2D, _p_Lattice2DTo_p_INamed, 0, 0},  {&_swigt__p_INamed, 0, 0, 0},  {&_swigt__p_DistributionGate, _p_DistributionGateTo_p_INamed, 0, 0},  {&_swigt__p_IFTDistribution1D, _p_IFTDistribution1DTo_p_INamed, 0, 0},  {&_swigt__p_IFTDecayFunction1D, _p_IFTDecayFunction1DTo_p_INamed, 0, 0},  {&_swigt__p_IDistribution1D, _p_IDistribution1DTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorCone, _p_FormFactorConeTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorRipple1, _p_FormFactorRipple1To_p_INamed, 0, 0},  {&_swigt__p_Layer, _p_LayerTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorPyramid, _p_FormFactorPyramidTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorAnisoPyramid, _p_FormFactorAnisoPyramidTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorDecoratorDebyeWaller, _p_FormFactorDecoratorDebyeWallerTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorRipple2, _p_FormFactorRipple2To_p_INamed, 0, 0},  {&_swigt__p_FormFactorEllipsoidalCylinder, _p_FormFactorEllipsoidalCylinderTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorCylinder, _p_FormFactorCylinderTo_p_INamed, 0, 0},  {&_swigt__p_IParameterT_double_t, _p_IParameterT_double_tTo_p_INamed, 0, 0},  {&_swigt__p_DistributionGaussian, _p_DistributionGaussianTo_p_INamed, 0, 0},  {&_swigt__p_ResolutionFunction2DGaussian, _p_ResolutionFunction2DGaussianTo_p_INamed, 0, 0},  {&_swigt__p_ParticleComposition, _p_ParticleCompositionTo_p_INamed, 0, 0},  {&_swigt__p_Line, _p_LineTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorSphereUniformRadius, _p_FormFactorSphereUniformRadiusTo_p_INamed, 0, 0},  {&_swigt__p_FTDistribution1DCosine, _p_FTDistribution1DCosineTo_p_INamed, 0, 0},  {&_swigt__p_FTDistribution1DGate, _p_FTDistribution1DGateTo_p_INamed, 0, 0},  {&_swigt__p_DistributionCosine, _p_DistributionCosineTo_p_INamed, 0, 0},  {&_swigt__p_FTDistribution2DVoigt, _p_FTDistribution2DVoigtTo_p_INamed, 0, 0},  {&_swigt__p_FTDecayFunction2DVoigt, _p_FTDecayFunction2DVoigtTo_p_INamed, 0, 0},  {&_swigt__p_FTDistribution1DCauchy, _p_FTDistribution1DCauchyTo_p_INamed, 0, 0},  {&_swigt__p_FTDecayFunction1DCauchy, _p_FTDecayFunction1DCauchyTo_p_INamed, 0, 0},  {&_swigt__p_FTDecayFunction2DCauchy, _p_FTDecayFunction2DCauchyTo_p_INamed, 0, 0},  {&_swigt__p_FTDistribution2DCauchy, _p_FTDistribution2DCauchyTo_p_INamed, 0, 0},  {&_swigt__p_IInterferenceFunction, _p_IInterferenceFunctionTo_p_INamed, 0, 0},  {&_swigt__p_FitObject, _p_FitObjectTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorCone6, _p_FormFactorCone6To_p_INamed, 0, 0},  {&_swigt__p_FormFactorLongRipple1Gauss, _p_FormFactorLongRipple1GaussTo_p_INamed, 0, 0},  {&_swigt__p_Beam, _p_BeamTo_p_INamed, 0, 0},  {&_swigt__p_AdjustMinimizerStrategy, _p_AdjustMinimizerStrategyTo_p_INamed, 0, 0},  {&_swigt__p_IFitStrategy, _p_IFitStrategyTo_p_INamed, 0, 0},  {&_swigt__p_IFormFactorDecorator, _p_IFormFactorDecoratorTo_p_INamed, 0, 0},  {&_swigt__p_IParameterized, _p_IParameterizedTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorDot, _p_FormFactorDotTo_p_INamed, 0, 0},  {&_swigt__p_LayerRoughness, _p_LayerRoughnessTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorCrystal, _p_FormFactorCrystalTo_p_INamed, 0, 0},  {&_swigt__p_MesoCrystal, _p_MesoCrystalTo_p_INamed, 0, 0},  {&_swigt__p_InterferenceFunction2DParaCrystal, _p_InterferenceFunction2DParaCrystalTo_p_INamed, 0, 0},  {&_swigt__p_InterferenceFunctionRadialParaCrystal, _p_InterferenceFunctionRadialParaCrystalTo_p_INamed, 0, 0},  {&_swigt__p_Crystal, _p_CrystalTo_p_INamed, 0, 0},  {&_swigt__p_IFTDecayFunction2D, _p_IFTDecayFunction2DTo_p_INamed, 0, 0},  {&_swigt__p_IFTDistribution2D, _p_IFTDistribution2DTo_p_INamed, 0, 0},  {&_swigt__p_IResolutionFunction2D, _p_IResolutionFunction2DTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorWeighted, _p_FormFactorWeightedTo_p_INamed, 0, 0},  {&_swigt__p_RealParameter, _p_RealParameterTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorLorentz, _p_FormFactorLorentzTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorLongRipple2Lorentz, _p_FormFactorLongRipple2LorentzTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorLongRipple1Lorentz, _p_FormFactorLongRipple1LorentzTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorLongBoxLorentz, _p_FormFactorLongBoxLorentzTo_p_INamed, 0, 0},  {&_swigt__p_InterferenceFunction1DLattice, _p_InterferenceFunction1DLatticeTo_p_INamed, 0, 0},  {&_swigt__p_InterferenceFunction2DLattice, _p_InterferenceFunction2DLatticeTo_p_INamed, 0, 0},  {&_swigt__p_BasicLattice, _p_BasicLatticeTo_p_INamed, 0, 0},  {&_swigt__p_SquareLattice, _p_SquareLatticeTo_p_INamed, 0, 0},  {&_swigt__p_HexagonalLattice, _p_HexagonalLatticeTo_p_INamed, 0, 0},  {&_swigt__p_DistributionLorentz, _p_DistributionLorentzTo_p_INamed, 0, 0},  {&_swigt__p_Lattice, _p_LatticeTo_p_INamed, 0, 0},  {&_swigt__p_FTDistribution1DTriangle, _p_FTDistribution1DTriangleTo_p_INamed, 0, 0},  {&_swigt__p_FTDecayFunction1DTriangle, _p_FTDecayFunction1DTriangleTo_p_INamed, 0, 0},  {&_swigt__p_RotationEuler, _p_RotationEulerTo_p_INamed, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_INode[] = {  {&_swigt__p_FormFactorBox, _p_FormFactorBoxTo_p_INode, 0, 0},  {&_swigt__p_FormFactorSphereLogNormalRadius, _p_FormFactorSphereLogNormalRadiusTo_p_INode, 0, 0},  {&_swigt__p_FormFactorSphereGaussianRadius, _p_FormFactorSphereGaussianRadiusTo_p_INode, 0, 0},  {&_swigt__p_MultiLayer, _p_MultiLayerTo_p_INode, 0, 0},  {&_swigt__p_ParticleDistribution, _p_ParticleDistributionTo_p_INode, 0, 0},  {&_swigt__p_FTDecayFunction1DGauss, _p_FTDecayFunction1DGaussTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution1DGauss, _p_FTDistribution1DGaussTo_p_INode, 0, 0},  {&_swigt__p_InterferenceFunctionNone, _p_InterferenceFunctionNoneTo_p_INode, 0, 0},  {&_swigt__p_IDetector2D, _p_IDetector2DTo_p_INode, 0, 0},  {&_swigt__p_ParticleLayout, _p_ParticleLayoutTo_p_INode, 0, 0},  {&_swigt__p_ILayout, _p_ILayoutTo_p_INode, 0, 0},  {&_swigt__p_FormFactorHemiEllipsoid, _p_FormFactorHemiEllipsoidTo_p_INode, 0, 0},  {&_swigt__p_IntensityScaleAndShiftNormalizer, _p_IntensityScaleAndShiftNormalizerTo_p_INode, 0, 0},  {&_swigt__p_IntensityNormalizer, _p_IntensityNormalizerTo_p_INode, 0, 0},  {&_swigt__p_IIntensityNormalizer, _p_IIntensityNormalizerTo_p_INode, 0, 0},  {&_swigt__p_RectangularDetector, _p_RectangularDetectorTo_p_INode, 0, 0},  {&_swigt__p_IsGISAXSDetector, _p_IsGISAXSDetectorTo_p_INode, 0, 0},  {&_swigt__p_SphericalDetector, _p_SphericalDetectorTo_p_INode, 0, 0},  {&_swigt__p_INode, 0, 0, 0},  {&_swigt__p_FormFactorPrism3, _p_FormFactorPrism3To_p_INode, 0, 0},  {&_swigt__p_DistributionTrapezoid, _p_DistributionTrapezoidTo_p_INode, 0, 0},  {&_swigt__p_FormFactorIcosahedron, _p_FormFactorIcosahedronTo_p_INode, 0, 0},  {&_swigt__p_FormFactorDodecahedron, _p_FormFactorDodecahedronTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCuboctahedron, _p_FormFactorCuboctahedronTo_p_INode, 0, 0},  {&_swigt__p_FormFactorPolyhedron, _p_FormFactorPolyhedronTo_p_INode, 0, 0},  {&_swigt__p_FormFactorTetrahedron, _p_FormFactorTetrahedronTo_p_INode, 0, 0},  {&_swigt__p_FormFactorPrism6, _p_FormFactorPrism6To_p_INode, 0, 0},  {&_swigt__p_Simulation, _p_SimulationTo_p_INode, 0, 0},  {&_swigt__p_GISASSimulation, _p_GISASSimulationTo_p_INode, 0, 0},  {&_swigt__p_OffSpecSimulation, _p_OffSpecSimulationTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution2DCone, _p_FTDistribution2DConeTo_p_INode, 0, 0},  {&_swigt__p_ParticleCoreShell, _p_ParticleCoreShellTo_p_INode, 0, 0},  {&_swigt__p_FormFactorTruncatedSphere, _p_FormFactorTruncatedSphereTo_p_INode, 0, 0},  {&_swigt__p_FormFactorFullSphere, _p_FormFactorFullSphereTo_p_INode, 0, 0},  {&_swigt__p_IFormFactor, _p_IFormFactorTo_p_INode, 0, 0},  {&_swigt__p_ISample, _p_ISampleTo_p_INode, 0, 0},  {&_swigt__p_FormFactorPolygonalSurface, _p_FormFactorPolygonalSurfaceTo_p_INode, 0, 0},  {&_swigt__p_FormFactorLongBoxGauss, _p_FormFactorLongBoxGaussTo_p_INode, 0, 0},  {&_swigt__p_FormFactorPolygonalPrism, _p_FormFactorPolygonalPrismTo_p_INode, 0, 0},  {&_swigt__p_FitSuiteObjects, _p_FitSuiteObjectsTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution2DGate, _p_FTDistribution2DGateTo_p_INode, 0, 0},  {&_swigt__p_DistributionLogNormal, _p_DistributionLogNormalTo_p_INode, 0, 0},  {&_swigt__p_Instrument, _p_InstrumentTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution1DVoigt, _p_FTDistribution1DVoigtTo_p_INode, 0, 0},  {&_swigt__p_FTDecayFunction1DVoigt, _p_FTDecayFunction1DVoigtTo_p_INode, 0, 0},  {&_swigt__p_IRotation, _p_IRotationTo_p_INode, 0, 0},  {&_swigt__p_RotationX, _p_RotationXTo_p_INode, 0, 0},  {&_swigt__p_FormFactorTruncatedSpheroid, _p_FormFactorTruncatedSpheroidTo_p_INode, 0, 0},  {&_swigt__p_FormFactorFullSpheroid, _p_FormFactorFullSpheroidTo_p_INode, 0, 0},  {&_swigt__p_FormFactorTruncatedCube, _p_FormFactorTruncatedCubeTo_p_INode, 0, 0},  {&_swigt__p_RotationY, _p_RotationYTo_p_INode, 0, 0},  {&_swigt__p_FTDecayFunction2DGauss, _p_FTDecayFunction2DGaussTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution2DGauss, _p_FTDistribution2DGaussTo_p_INode, 0, 0},  {&_swigt__p_RotationZ, _p_RotationZTo_p_INode, 0, 0},  {&_swigt__p_FormFactorGauss, _p_FormFactorGaussTo_p_INode, 0, 0},  {&_swigt__p_FormFactorLongRipple2Gauss, _p_FormFactorLongRipple2GaussTo_p_INode, 0, 0},  {&_swigt__p_IFormFactorBorn, _p_IFormFactorBornTo_p_INode, 0, 0},  {&_swigt__p_IDetectorResolution, _p_IDetectorResolutionTo_p_INode, 0, 0},  {&_swigt__p_IClusteredParticles, _p_IClusteredParticlesTo_p_INode, 0, 0},  {&_swigt__p_Particle, _p_ParticleTo_p_INode, 0, 0},  {&_swigt__p_IParticle, _p_IParticleTo_p_INode, 0, 0},  {&_swigt__p_IAbstractParticle, _p_IAbstractParticleTo_p_INode, 0, 0},  {&_swigt__p_Lattice2D, _p_Lattice2DTo_p_INode, 0, 0},  {&_swigt__p_DistributionGate, _p_DistributionGateTo_p_INode, 0, 0},  {&_swigt__p_IFTDistribution1D, _p_IFTDistribution1DTo_p_INode, 0, 0},  {&_swigt__p_IFTDecayFunction1D, _p_IFTDecayFunction1DTo_p_INode, 0, 0},  {&_swigt__p_IDistribution1D, _p_IDistribution1DTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCone, _p_FormFactorConeTo_p_INode, 0, 0},  {&_swigt__p_FormFactorRipple1, _p_FormFactorRipple1To_p_INode, 0, 0},  {&_swigt__p_Layer, _p_LayerTo_p_INode, 0, 0},  {&_swigt__p_FormFactorAnisoPyramid, _p_FormFactorAnisoPyramidTo_p_INode, 0, 0},  {&_swigt__p_FormFactorPyramid, _p_FormFactorPyramidTo_p_INode, 0, 0},  {&_swigt__p_FormFactorDecoratorDebyeWaller, _p_FormFactorDecoratorDebyeWallerTo_p_INode, 0, 0},  {&_swigt__p_FormFactorRipple2, _p_FormFactorRipple2To_p_INode, 0, 0},  {&_swigt__p_FormFactorEllipsoidalCylinder, _p_FormFactorEllipsoidalCylinderTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCylinder, _p_FormFactorCylinderTo_p_INode, 0, 0},  {&_swigt__p_DistributionGaussian, _p_DistributionGaussianTo_p_INode, 0, 0},  {&_swigt__p_ResolutionFunction2DGaussian, _p_ResolutionFunction2DGaussianTo_p_INode, 0, 0},  {&_swigt__p_ParticleComposition, _p_ParticleCompositionTo_p_INode, 0, 0},  {&_swigt__p_FormFactorSphereUniformRadius, _p_FormFactorSphereUniformRadiusTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution1DCosine, _p_FTDistribution1DCosineTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution1DGate, _p_FTDistribution1DGateTo_p_INode, 0, 0},  {&_swigt__p_DistributionCosine, _p_DistributionCosineTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution2DVoigt, _p_FTDistribution2DVoigtTo_p_INode, 0, 0},  {&_swigt__p_FTDecayFunction2DVoigt, _p_FTDecayFunction2DVoigtTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution1DCauchy, _p_FTDistribution1DCauchyTo_p_INode, 0, 0},  {&_swigt__p_FTDecayFunction1DCauchy, _p_FTDecayFunction1DCauchyTo_p_INode, 0, 0},  {&_swigt__p_FTDecayFunction2DCauchy, _p_FTDecayFunction2DCauchyTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution2DCauchy, _p_FTDistribution2DCauchyTo_p_INode, 0, 0},  {&_swigt__p_IInterferenceFunction, _p_IInterferenceFunctionTo_p_INode, 0, 0},  {&_swigt__p_FitObject, _p_FitObjectTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCone6, _p_FormFactorCone6To_p_INode, 0, 0},  {&_swigt__p_FormFactorLongRipple1Gauss, _p_FormFactorLongRipple1GaussTo_p_INode, 0, 0},  {&_swigt__p_Beam, _p_BeamTo_p_INode, 0, 0},  {&_swigt__p_IFormFactorDecorator, _p_IFormFactorDecoratorTo_p_INode, 0, 0},  {&_swigt__p_FormFactorDot, _p_FormFactorDotTo_p_INode, 0, 0},  {&_swigt__p_LayerRoughness, _p_LayerRoughnessTo_p_INode, 0, 0},  {&_swigt__p_Crystal, _p_CrystalTo_p_INode, 0, 0},  {&_swigt__p_InterferenceFunctionRadialParaCrystal, _p_InterferenceFunctionRadialParaCrystalTo_p_INode, 0, 0},  {&_swigt__p_InterferenceFunction2DParaCrystal, _p_InterferenceFunction2DParaCrystalTo_p_INode, 0, 0},  {&_swigt__p_MesoCrystal, _p_MesoCrystalTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCrystal, _p_FormFactorCrystalTo_p_INode, 0, 0},  {&_swigt__p_IFTDecayFunction2D, _p_IFTDecayFunction2DTo_p_INode, 0, 0},  {&_swigt__p_IFTDistribution2D, _p_IFTDistribution2DTo_p_INode, 0, 0},  {&_swigt__p_IResolutionFunction2D, _p_IResolutionFunction2DTo_p_INode, 0, 0},  {&_swigt__p_FormFactorWeighted, _p_FormFactorWeightedTo_p_INode, 0, 0},  {&_swigt__p_FormFactorLorentz, _p_FormFactorLorentzTo_p_INode, 0, 0},  {&_swigt__p_FormFactorLongRipple2Lorentz, _p_FormFactorLongRipple2LorentzTo_p_INode, 0, 0},  {&_swigt__p_FormFactorLongRipple1Lorentz, _p_FormFactorLongRipple1LorentzTo_p_INode, 0, 0},  {&_swigt__p_FormFactorLongBoxLorentz, _p_FormFactorLongBoxLorentzTo_p_INode, 0, 0},  {&_swigt__p_InterferenceFunction1DLattice, _p_InterferenceFunction1DLatticeTo_p_INode, 0, 0},  {&_swigt__p_InterferenceFunction2DLattice, _p_InterferenceFunction2DLatticeTo_p_INode, 0, 0},  {&_swigt__p_BasicLattice, _p_BasicLatticeTo_p_INode, 0, 0},  {&_swigt__p_SquareLattice, _p_SquareLatticeTo_p_INode, 0, 0},  {&_swigt__p_HexagonalLattice, _p_HexagonalLatticeTo_p_INode, 0, 0},  {&_swigt__p_DistributionLorentz, _p_DistributionLorentzTo_p_INode, 0, 0},  {&_swigt__p_Lattice, _p_LatticeTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution1DTriangle, _p_FTDistribution1DTriangleTo_p_INode, 0, 0},  {&_swigt__p_FTDecayFunction1DTriangle, _p_FTDecayFunction1DTriangleTo_p_INode, 0, 0},  {&_swigt__p_RotationEuler, _p_RotationEulerTo_p_INode, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_INodeVisitor[] = {  {&_swigt__p_INodeVisitor, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_INoncopyable[] = {  {&_swigt__p_FormFactorBox, _p_FormFactorBoxTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorSphereGaussianRadius, _p_FormFactorSphereGaussianRadiusTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorSphereLogNormalRadius, _p_FormFactorSphereLogNormalRadiusTo_p_INoncopyable, 0, 0},  {&_swigt__p_MultiLayer, _p_MultiLayerTo_p_INoncopyable, 0, 0},  {&_swigt__p_ParticleDistribution, _p_ParticleDistributionTo_p_INoncopyable, 0, 0},  {&_swigt__p_FTDecayFunction1DGauss, _p_FTDecayFunction1DGaussTo_p_INoncopyable, 0, 0},  {&_swigt__p_FTDistribution1DGauss, _p_FTDistribution1DGaussTo_p_INoncopyable, 0, 0},  {&_swigt__p_InterferenceFunctionNone, _p_InterferenceFunctionNoneTo_p_INoncopyable, 0, 0},  {&_swigt__p_Polygon, _p_PolygonTo_p_INoncopyable, 0, 0},  {&_swigt__p_IDetector2D, _p_IDetector2DTo_p_INoncopyable, 0, 0},  {&_swigt__p_Ellipse, _p_EllipseTo_p_INoncopyable, 0, 0},  {&_swigt__p_ILayout, _p_ILayoutTo_p_INoncopyable, 0, 0},  {&_swigt__p_ParticleLayout, _p_ParticleLayoutTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorHemiEllipsoid, _p_FormFactorHemiEllipsoidTo_p_INoncopyable, 0, 0},  {&_swigt__p_IntensityScaleAndShiftNormalizer, _p_IntensityScaleAndShiftNormalizerTo_p_INoncopyable, 0, 0},  {&_swigt__p_IntensityNormalizer, _p_IntensityNormalizerTo_p_INoncopyable, 0, 0},  {&_swigt__p_IIntensityNormalizer, _p_IIntensityNormalizerTo_p_INoncopyable, 0, 0},  {&_swigt__p_ChiSquaredModule, _p_ChiSquaredModuleTo_p_INoncopyable, 0, 0},  {&_swigt__p_IChiSquaredModule, _p_IChiSquaredModuleTo_p_INoncopyable, 0, 0},  {&_swigt__p_HorizontalLine, _p_HorizontalLineTo_p_INoncopyable, 0, 0},  {&_swigt__p_RectangularDetector, _p_RectangularDetectorTo_p_INoncopyable, 0, 0},  {&_swigt__p_IsGISAXSDetector, _p_IsGISAXSDetectorTo_p_INoncopyable, 0, 0},  {&_swigt__p_SphericalDetector, _p_SphericalDetectorTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorPrism3, _p_FormFactorPrism3To_p_INoncopyable, 0, 0},  {&_swigt__p_DistributionTrapezoid, _p_DistributionTrapezoidTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorIcosahedron, _p_FormFactorIcosahedronTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorDodecahedron, _p_FormFactorDodecahedronTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorCuboctahedron, _p_FormFactorCuboctahedronTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorPolyhedron, _p_FormFactorPolyhedronTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorTetrahedron, _p_FormFactorTetrahedronTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorPrism6, _p_FormFactorPrism6To_p_INoncopyable, 0, 0},  {&_swigt__p_Simulation, _p_SimulationTo_p_INoncopyable, 0, 0},  {&_swigt__p_GISASSimulation, _p_GISASSimulationTo_p_INoncopyable, 0, 0},  {&_swigt__p_OffSpecSimulation, _p_OffSpecSimulationTo_p_INoncopyable, 0, 0},  {&_swigt__p_SpecularSimulation, _p_SpecularSimulationTo_p_INoncopyable, 0, 0},  {&_swigt__p_FTDistribution2DCone, _p_FTDistribution2DConeTo_p_INoncopyable, 0, 0},  {&_swigt__p_ParticleCoreShell, _p_ParticleCoreShellTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorFullSphere, _p_FormFactorFullSphereTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorTruncatedSphere, _p_FormFactorTruncatedSphereTo_p_INoncopyable, 0, 0},  {&_swigt__p_IFormFactor, _p_IFormFactorTo_p_INoncopyable, 0, 0},  {&_swigt__p_ISample, _p_ISampleTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorPolygonalSurface, _p_FormFactorPolygonalSurfaceTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorLongBoxGauss, _p_FormFactorLongBoxGaussTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorPolygonalPrism, _p_FormFactorPolygonalPrismTo_p_INoncopyable, 0, 0},  {&_swigt__p_FitSuiteObjects, _p_FitSuiteObjectsTo_p_INoncopyable, 0, 0},  {&_swigt__p_FTDistribution2DGate, _p_FTDistribution2DGateTo_p_INoncopyable, 0, 0},  {&_swigt__p_DistributionLogNormal, _p_DistributionLogNormalTo_p_INoncopyable, 0, 0},  {&_swigt__p_FTDecayFunction1DVoigt, _p_FTDecayFunction1DVoigtTo_p_INoncopyable, 0, 0},  {&_swigt__p_FTDistribution1DVoigt, _p_FTDistribution1DVoigtTo_p_INoncopyable, 0, 0},  {&_swigt__p_IRotation, _p_IRotationTo_p_INoncopyable, 0, 0},  {&_swigt__p_RotationX, _p_RotationXTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorTruncatedSpheroid, _p_FormFactorTruncatedSpheroidTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorFullSpheroid, _p_FormFactorFullSpheroidTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorTruncatedCube, _p_FormFactorTruncatedCubeTo_p_INoncopyable, 0, 0},  {&_swigt__p_RotationY, _p_RotationYTo_p_INoncopyable, 0, 0},  {&_swigt__p_IShape2D, _p_IShape2DTo_p_INoncopyable, 0, 0},  {&_swigt__p_FTDecayFunction2DGauss, _p_FTDecayFunction2DGaussTo_p_INoncopyable, 0, 0},  {&_swigt__p_FTDistribution2DGauss, _p_FTDistribution2DGaussTo_p_INoncopyable, 0, 0},  {&_swigt__p_RotationZ, _p_RotationZTo_p_INoncopyable, 0, 0},  {&_swigt__p_Rectangle, _p_RectangleTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorGauss, _p_FormFactorGaussTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorLongRipple2Gauss, _p_FormFactorLongRipple2GaussTo_p_INoncopyable, 0, 0},  {&_swigt__p_VerticalLine, _p_VerticalLineTo_p_INoncopyable, 0, 0},  {&_swigt__p_IFormFactorBorn, _p_IFormFactorBornTo_p_INoncopyable, 0, 0},  {&_swigt__p_IDetectorResolution, _p_IDetectorResolutionTo_p_INoncopyable, 0, 0},  {&_swigt__p_IClusteredParticles, _p_IClusteredParticlesTo_p_INoncopyable, 0, 0},  {&_swigt__p_Particle, _p_ParticleTo_p_INoncopyable, 0, 0},  {&_swigt__p_IParticle, _p_IParticleTo_p_INoncopyable, 0, 0},  {&_swigt__p_IAbstractParticle, _p_IAbstractParticleTo_p_INoncopyable, 0, 0},  {&_swigt__p_Lattice2D, _p_Lattice2DTo_p_INoncopyable, 0, 0},  {&_swigt__p_DistributionGate, _p_DistributionGateTo_p_INoncopyable, 0, 0},  {&_swigt__p_IDistribution1D, _p_IDistribution1DTo_p_INoncopyable, 0, 0},  {&_swigt__p_IFTDecayFunction1D, _p_IFTDecayFunction1DTo_p_INoncopyable, 0, 0},  {&_swigt__p_IFTDistribution1D, _p_IFTDistribution1DTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorCone, _p_FormFactorConeTo_p_INoncopyable, 0, 0},  {&_swigt__p_INoncopyable, 0, 0, 0},  {&_swigt__p_FormFactorRipple1, _p_FormFactorRipple1To_p_INoncopyable, 0, 0},  {&_swigt__p_Layer, _p_LayerTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorPyramid, _p_FormFactorPyramidTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorAnisoPyramid, _p_FormFactorAnisoPyramidTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorDecoratorDebyeWaller, _p_FormFactorDecoratorDebyeWallerTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorRipple2, _p_FormFactorRipple2To_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorEllipsoidalCylinder, _p_FormFactorEllipsoidalCylinderTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorCylinder, _p_FormFactorCylinderTo_p_INoncopyable, 0, 0},  {&_swigt__p_IParameterT_double_t, _p_IParameterT_double_tTo_p_INoncopyable, 0, 0},  {&_swigt__p_DistributionGaussian, _p_DistributionGaussianTo_p_INoncopyable, 0, 0},  {&_swigt__p_ResolutionFunction2DGaussian, _p_ResolutionFunction2DGaussianTo_p_INoncopyable, 0, 0},  {&_swigt__p_ParticleComposition, _p_ParticleCompositionTo_p_INoncopyable, 0, 0},  {&_swigt__p_Line, _p_LineTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorSphereUniformRadius, _p_FormFactorSphereUniformRadiusTo_p_INoncopyable, 0, 0},  {&_swigt__p_DistributionCosine, _p_DistributionCosineTo_p_INoncopyable, 0, 0},  {&_swigt__p_FTDistribution1DCosine, _p_FTDistribution1DCosineTo_p_INoncopyable, 0, 0},  {&_swigt__p_FTDistribution1DGate, _p_FTDistribution1DGateTo_p_INoncopyable, 0, 0},  {&_swigt__p_FTDistribution2DVoigt, _p_FTDistribution2DVoigtTo_p_INoncopyable, 0, 0},  {&_swigt__p_FTDecayFunction2DVoigt, _p_FTDecayFunction2DVoigtTo_p_INoncopyable, 0, 0},  {&_swigt__p_FTDecayFunction1DCauchy, _p_FTDecayFunction1DCauchyTo_p_INoncopyable, 0, 0},  {&_swigt__p_FTDistribution1DCauchy, _p_FTDistribution1DCauchyTo_p_INoncopyable, 0, 0},  {&_swigt__p_FTDistribution2DCauchy, _p_FTDistribution2DCauchyTo_p_INoncopyable, 0, 0},  {&_swigt__p_FTDecayFunction2DCauchy, _p_FTDecayFunction2DCauchyTo_p_INoncopyable, 0, 0},  {&_swigt__p_IInterferenceFunction, _p_IInterferenceFunctionTo_p_INoncopyable, 0, 0},  {&_swigt__p_FitObject, _p_FitObjectTo_p_INoncopyable, 0, 0},  {&_swigt__p_ParameterPool, _p_ParameterPoolTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorCone6, _p_FormFactorCone6To_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorLongRipple1Gauss, _p_FormFactorLongRipple1GaussTo_p_INoncopyable, 0, 0},  {&_swigt__p_IFormFactorDecorator, _p_IFormFactorDecoratorTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorDot, _p_FormFactorDotTo_p_INoncopyable, 0, 0},  {&_swigt__p_LayerRoughness, _p_LayerRoughnessTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorCrystal, _p_FormFactorCrystalTo_p_INoncopyable, 0, 0},  {&_swigt__p_MesoCrystal, _p_MesoCrystalTo_p_INoncopyable, 0, 0},  {&_swigt__p_InterferenceFunction2DParaCrystal, _p_InterferenceFunction2DParaCrystalTo_p_INoncopyable, 0, 0},  {&_swigt__p_InterferenceFunctionRadialParaCrystal, _p_InterferenceFunctionRadialParaCrystalTo_p_INoncopyable, 0, 0},  {&_swigt__p_Crystal, _p_CrystalTo_p_INoncopyable, 0, 0},  {&_swigt__p_IFTDistribution2D, _p_IFTDistribution2DTo_p_INoncopyable, 0, 0},  {&_swigt__p_IFTDecayFunction2D, _p_IFTDecayFunction2DTo_p_INoncopyable, 0, 0},  {&_swigt__p_IResolutionFunction2D, _p_IResolutionFunction2DTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorWeighted, _p_FormFactorWeightedTo_p_INoncopyable, 0, 0},  {&_swigt__p_RealParameter, _p_RealParameterTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorLorentz, _p_FormFactorLorentzTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorLongRipple2Lorentz, _p_FormFactorLongRipple2LorentzTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorLongRipple1Lorentz, _p_FormFactorLongRipple1LorentzTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorLongBoxLorentz, _p_FormFactorLongBoxLorentzTo_p_INoncopyable, 0, 0},  {&_swigt__p_InterferenceFunction1DLattice, _p_InterferenceFunction1DLatticeTo_p_INoncopyable, 0, 0},  {&_swigt__p_InterferenceFunction2DLattice, _p_InterferenceFunction2DLatticeTo_p_INoncopyable, 0, 0},  {&_swigt__p_BasicLattice, _p_BasicLatticeTo_p_INoncopyable, 0, 0},  {&_swigt__p_SquareLattice, _p_SquareLatticeTo_p_INoncopyable, 0, 0},  {&_swigt__p_HexagonalLattice, _p_HexagonalLatticeTo_p_INoncopyable, 0, 0},  {&_swigt__p_DistributionLorentz, _p_DistributionLorentzTo_p_INoncopyable, 0, 0},  {&_swigt__p_FTDecayFunction1DTriangle, _p_FTDecayFunction1DTriangleTo_p_INoncopyable, 0, 0},  {&_swigt__p_FTDistribution1DTriangle, _p_FTDistribution1DTriangleTo_p_INoncopyable, 0, 0},  {&_swigt__p_RotationEuler, _p_RotationEulerTo_p_INoncopyable, 0, 0},  {&_swigt__p_ICloneable, _p_ICloneableTo_p_INoncopyable, 0, 0},{0, 0, 0, 0}};
@@ -127216,6 +127953,7 @@ static swig_cast_info _swigc__p_LayerInterface[] = {  {&_swigt__p_LayerInterface
 static swig_cast_info _swigc__p_LayerRTCoefficients_t[] = {  {&_swigt__p_LayerRTCoefficients_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_LayerRoughness[] = {  {&_swigt__p_LayerRoughness, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_Line[] = {  {&_swigt__p_Line, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Material[] = {  {&_swigt__p_Material, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_MesoCrystal[] = {  {&_swigt__p_MesoCrystal, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_MultiLayer[] = {  {&_swigt__p_MultiLayer, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_MultiLayerRTCoefficients_t[] = {  {&_swigt__p_MultiLayerRTCoefficients_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -127324,7 +128062,6 @@ static swig_cast_info _swigc__p_std__vectorT_BasicVector3DT_std__complexT_double
 static swig_cast_info _swigc__p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t[] = {  {&_swigt__p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t__const_iterator[] = {  {&_swigt__p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t__const_iterator, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t__iterator[] = {  {&_swigt__p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t__iterator, 0, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_std__vectorT_HomogeneousMaterial_const_p_std__allocatorT_HomogeneousMaterial_const_p_t_t[] = {  {&_swigt__p_std__vectorT_HomogeneousMaterial_const_p_std__allocatorT_HomogeneousMaterial_const_p_t_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_std__vectorT_HomogeneousRegion_std__allocatorT_HomogeneousRegion_t_t[] = {  {&_swigt__p_std__vectorT_HomogeneousRegion_std__allocatorT_HomogeneousRegion_t_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_std__vectorT_IDetector2D__EAxesUnits_std__allocatorT_IDetector2D__EAxesUnits_t_t[] = {  {&_swigt__p_std__vectorT_IDetector2D__EAxesUnits_std__allocatorT_IDetector2D__EAxesUnits_t_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_std__vectorT_IFormFactor_p_std__allocatorT_IFormFactor_p_t_t[] = {  {&_swigt__p_std__vectorT_IFormFactor_p_std__allocatorT_IFormFactor_p_t_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -127332,6 +128069,7 @@ static swig_cast_info _swigc__p_std__vectorT_ILayout_const_p_std__allocatorT_ILa
 static swig_cast_info _swigc__p_std__vectorT_INode_const_p_std__allocatorT_INode_const_p_t_t[] = {  {&_swigt__p_std__vectorT_INode_const_p_std__allocatorT_INode_const_p_t_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_std__vectorT_INode_p_std__allocatorT_INode_p_t_t[] = {  {&_swigt__p_std__vectorT_INode_p_std__allocatorT_INode_p_t_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_std__vectorT_IParticle_const_p_std__allocatorT_IParticle_const_p_t_t[] = {  {&_swigt__p_std__vectorT_IParticle_const_p_std__allocatorT_IParticle_const_p_t_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_std__vectorT_Material_const_p_std__allocatorT_Material_const_p_t_t[] = {  {&_swigt__p_std__vectorT_Material_const_p_std__allocatorT_Material_const_p_t_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_std__vectorT_ParameterSample_std__allocatorT_ParameterSample_t_t[] = {  {&_swigt__p_std__vectorT_ParameterSample_std__allocatorT_ParameterSample_t_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_std__vectorT_PolygonalTopology_std__allocatorT_PolygonalTopology_t_t[] = {  {&_swigt__p_std__vectorT_PolygonalTopology_std__allocatorT_PolygonalTopology_t_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_std__vectorT_RealParameter_p_std__allocatorT_RealParameter_p_t_t[] = {  {&_swigt__p_std__vectorT_RealParameter_p_std__allocatorT_RealParameter_p_t_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -127459,7 +128197,6 @@ static swig_cast_info *swig_cast_initial[] = {
   _swigc__p_HexagonalLattice,
   _swigc__p_Histogram1D,
   _swigc__p_Histogram2D,
-  _swigc__p_HomogeneousMaterial,
   _swigc__p_HorizontalLine,
   _swigc__p_IAbstractParticle,
   _swigc__p_IAxis,
@@ -127526,6 +128263,7 @@ static swig_cast_info *swig_cast_initial[] = {
   _swigc__p_LayerRTCoefficients_t,
   _swigc__p_LayerRoughness,
   _swigc__p_Line,
+  _swigc__p_Material,
   _swigc__p_MesoCrystal,
   _swigc__p_MultiLayer,
   _swigc__p_MultiLayerRTCoefficients_t,
@@ -127634,7 +128372,6 @@ static swig_cast_info *swig_cast_initial[] = {
   _swigc__p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t,
   _swigc__p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t__const_iterator,
   _swigc__p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t__iterator,
-  _swigc__p_std__vectorT_HomogeneousMaterial_const_p_std__allocatorT_HomogeneousMaterial_const_p_t_t,
   _swigc__p_std__vectorT_HomogeneousRegion_std__allocatorT_HomogeneousRegion_t_t,
   _swigc__p_std__vectorT_IDetector2D__EAxesUnits_std__allocatorT_IDetector2D__EAxesUnits_t_t,
   _swigc__p_std__vectorT_IFormFactor_p_std__allocatorT_IFormFactor_p_t_t,
@@ -127642,6 +128379,7 @@ static swig_cast_info *swig_cast_initial[] = {
   _swigc__p_std__vectorT_INode_const_p_std__allocatorT_INode_const_p_t_t,
   _swigc__p_std__vectorT_INode_p_std__allocatorT_INode_p_t_t,
   _swigc__p_std__vectorT_IParticle_const_p_std__allocatorT_IParticle_const_p_t_t,
+  _swigc__p_std__vectorT_Material_const_p_std__allocatorT_Material_const_p_t_t,
   _swigc__p_std__vectorT_ParameterSample_std__allocatorT_ParameterSample_t_t,
   _swigc__p_std__vectorT_PolygonalTopology_std__allocatorT_PolygonalTopology_t_t,
   _swigc__p_std__vectorT_RealParameter_p_std__allocatorT_RealParameter_p_t_t,
@@ -128040,7 +128778,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
@@ -128272,13 +129009,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;
@@ -128293,14 +129030,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 */
@@ -128318,13 +129050,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;
@@ -128355,29 +129089,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 2074809c721..f35447d4844 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
@@ -140,7 +140,7 @@ public:
     virtual std::string treeToString() const;
     virtual std::vector< INode const *,std::allocator< INode const * > > getChildren() const;
     virtual void setParent(INode const *newParent);
-    virtual HomogeneousMaterial const *material() const;
+    virtual Material const *material() const;
 
 /* Internal director utilities */
 public:
@@ -322,8 +322,8 @@ public:
     virtual std::string treeToString() const;
     virtual std::vector< INode const *,std::allocator< INode const * > > getChildren() const;
     virtual void setParent(INode const *newParent);
-    virtual HomogeneousMaterial const *material() const;
-    virtual void setAmbientMaterial(HomogeneousMaterial arg0);
+    virtual Material const *material() const;
+    virtual void setAmbientMaterial(Material arg0);
     virtual complex_t evaluate(WavevectorInfo const &wavevectors) const;
     virtual double volume() const;
     virtual double radialExtension() const;
@@ -387,8 +387,8 @@ public:
     virtual std::string treeToString() const;
     virtual std::vector< INode const *,std::allocator< INode const * > > getChildren() const;
     virtual void setParent(INode const *newParent);
-    virtual HomogeneousMaterial const *material() const;
-    virtual void setAmbientMaterial(HomogeneousMaterial arg0);
+    virtual Material const *material() const;
+    virtual void setAmbientMaterial(Material arg0);
     virtual complex_t evaluate(WavevectorInfo const &wavevectors) const;
     virtual double volume() const;
     virtual double radialExtension() const;
@@ -453,7 +453,7 @@ public:
     virtual std::string treeToString() const;
     virtual std::vector< INode const *,std::allocator< INode const * > > getChildren() const;
     virtual void setParent(INode const *newParent);
-    virtual HomogeneousMaterial const *material() const;
+    virtual Material const *material() const;
     virtual double evaluate(kvector_t const q) const;
     virtual double kappa() const;
     virtual double getParticleDensity() const;
diff --git a/auto/Wrap/swig_runtime.h b/auto/Wrap/swig_runtime.h
index 96d50bdb9a2..de3fda43582 100644
--- a/auto/Wrap/swig_runtime.h
+++ b/auto/Wrap/swig_runtime.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
@@ -75,9 +75,11 @@
 #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
 
@@ -642,16 +644,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;
@@ -816,10 +818,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
@@ -934,6 +932,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
 /* -----------------------------------------------------------------------------
  * error manipulation
@@ -1878,7 +1877,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
@@ -1889,7 +1887,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
@@ -1897,7 +1895,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
@@ -1907,7 +1905,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 */
@@ -2070,7 +2068,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
-- 
GitLab