diff --git a/Core/Multilayer/MultiLayer.cpp b/Core/Multilayer/MultiLayer.cpp
index 9a51390d1b173e94a63e516be62503385e11f789..1624d466884734f89e5f88edf477a8b26d14a7a3 100644
--- a/Core/Multilayer/MultiLayer.cpp
+++ b/Core/Multilayer/MultiLayer.cpp
@@ -45,19 +45,6 @@ void MultiLayer::init_parameters()
 
 MultiLayer* MultiLayer::clone() const
 {
-    return genericClone( [](const Layer* p_layer) { return p_layer->clone(); } );
-}
-
-MultiLayer* MultiLayer::cloneInvertB() const
-{
-    return genericClone( [](const Layer* p_layer) { return p_layer->cloneInvertB(); } );
-}
-
-std::unique_ptr<MultiLayer> MultiLayer::cloneSliced(bool use_average_layers) const
-{
-    if (!use_average_layers || numberOfLayers()==0)
-        return std::unique_ptr<MultiLayer>(clone());
-    auto layer_limits = MultiLayerUtils::ParticleRegions(*this, true);
     std::unique_ptr<MultiLayer> P_result(new MultiLayer());
     P_result->setCrossCorrLength(crossCorrLength());
     P_result->setExternalField(externalField());
@@ -65,22 +52,13 @@ std::unique_ptr<MultiLayer> MultiLayer::cloneSliced(bool use_average_layers) con
     {
         auto p_interface = i>0 ? m_interfaces[i-1]
                                : nullptr;
-        auto layer_type = (numberOfLayers()==1) ? Layer::ONLYLAYER
-                        : (i==0) ? Layer::TOPLAYER
-                        : (i==numberOfLayers()-1) ? Layer::BOTTOMLAYER
-                        : Layer::INTERMEDIATELAYER;
-        SafePointerVector<Layer> sliced_layers =
-                m_layers[i]->slice(layer_limits[i], layer_type);
-        if (sliced_layers.size()==0)
-            throw std::runtime_error("MultiLayer::cloneSliced: slicing layer produced empty list.");
+        std::unique_ptr<Layer> P_layer(m_layers[i]->clone());
         if (i>0 && p_interface->getRoughness())
-            P_result->addLayerWithTopRoughness(*sliced_layers[0], *p_interface->getRoughness());
+            P_result->addLayerWithTopRoughness(*P_layer, *p_interface->getRoughness());
         else
-            P_result->addLayer(*sliced_layers[0]);
-        for (size_t j=1; j<sliced_layers.size(); ++j)
-            P_result->addLayer(*sliced_layers[j]);
+            P_result->addLayer(*P_layer);
     }
-    return P_result;
+    return P_result.release();
 }
 
 const LayerRoughness* MultiLayer::layerTopRoughness(size_t i_layer) const
@@ -104,17 +82,6 @@ const LayerInterface* MultiLayer::layerBottomInterface(size_t i_layer) const
     return i_layer<m_interfaces.size() ? m_interfaces[ check_interface_index(i_layer) ] : nullptr;
 }
 
-Material MultiLayer::layerMaterial(size_t i_layer) const
-{
-    return *layer(i_layer)->material();
-}
-
-void MultiLayer::setLayerMaterial(size_t i_layer, Material material)
-{
-    auto p_layer = m_layers[check_layer_index(i_layer)];
-    p_layer->setMaterial(std::move(material));
-}
-
 //! Adds layer with top roughness
 void MultiLayer::addLayerWithTopRoughness(const Layer& layer, const LayerRoughness& roughness)
 {
@@ -128,9 +95,6 @@ void MultiLayer::addLayerWithTopRoughness(const Layer& layer, const LayerRoughne
         else
             interface = LayerInterface::createSmoothInterface(p_last_layer, p_new_layer);
         addAndRegisterInterface(interface);
-        double bottomz = (numberOfLayers()==1) ? 0.0
-                             : m_layers_bottomz.back() - p_last_layer->thickness();
-        m_layers_bottomz.push_back(bottomz);
     } else {
         // the top layer
         if (p_new_layer->thickness() != 0.0)
@@ -249,71 +213,6 @@ size_t MultiLayer::check_interface_index(size_t i_interface) const
     return i_interface;
 }
 
-MultiLayer* MultiLayer::genericClone(const std::function<Layer*(const Layer*)>& layer_clone) const
-{
-    std::unique_ptr<MultiLayer> P_result(new MultiLayer());
-    P_result->setCrossCorrLength(crossCorrLength());
-    P_result->setExternalField(externalField());
-    for (size_t i=0; i<numberOfLayers(); ++i)
-    {
-        auto p_interface = i>0 ? m_interfaces[i-1]
-                               : nullptr;
-        std::unique_ptr<Layer> P_layer(layer_clone(m_layers[i]));
-        if (i>0 && p_interface->getRoughness())
-            P_result->addLayerWithTopRoughness(*P_layer, *p_interface->getRoughness());
-        else
-            P_result->addLayer(*P_layer);
-    }
-    return P_result.release();
-}
-
-bool MultiLayer::requiresMatrixRTCoefficients() const
-{
-    for (auto p_layer: m_layers)
-        if (!(p_layer->material()->isScalarMaterial()))
-            return true;
-    return false;
-}
-
-size_t MultiLayer::bottomZToLayerIndex(double z_value) const
-{
-    size_t n_layers = numberOfLayers();
-    if (n_layers < 2)
-        return 0;
-    if (z_value < m_layers_bottomz[n_layers-2]) return numberOfLayers()-1;
-    auto top_limit = std::upper_bound(m_layers_bottomz.rbegin(), m_layers_bottomz.rend(), z_value);
-    size_t nbin = static_cast<size_t>(m_layers_bottomz.rend() - top_limit);
-    return nbin;
-}
-
-size_t MultiLayer::topZToLayerIndex(double z_value) const
-{
-    size_t n_layers = numberOfLayers();
-    if (n_layers < 2)
-        return 0;
-    if (z_value <= m_layers_bottomz[n_layers-2]) return numberOfLayers()-1;
-    auto bottom_limit = std::lower_bound(m_layers_bottomz.rbegin(), m_layers_bottomz.rend(), z_value);
-    size_t nbin = static_cast<size_t>(m_layers_bottomz.rend() - bottom_limit);
-    return nbin;
-}
-
-double MultiLayer::layerTopZ(size_t i_layer) const
-{
-    if (i_layer==0)
-        return 0.0;
-    return layerBottomZ(i_layer-1);
-}
-
-double MultiLayer::layerBottomZ(size_t i_layer) const
-{
-    if (numberOfLayers()<2)
-        return 0;
-    // Size of m_layers_z is numberOfLayers()-1:
-    if (i_layer>numberOfLayers()-2)
-        i_layer = numberOfLayers()-2;
-    return m_layers_bottomz[i_layer];
-}
-
 double MultiLayer::layerThickness(size_t i_layer) const
 {
     return m_layers[ check_layer_index(i_layer) ]->thickness();
diff --git a/Core/Multilayer/MultiLayer.h b/Core/Multilayer/MultiLayer.h
index 9f385f1222846581021040b789dec8c3f6b0fdea..52ca423fdab51934577e21d7c08bb977234d279c 100644
--- a/Core/Multilayer/MultiLayer.h
+++ b/Core/Multilayer/MultiLayer.h
@@ -64,12 +64,6 @@ public:
     const LayerInterface* layerInterface(size_t i_interface) const {
         return m_interfaces[check_interface_index(i_interface)]; }
 
-    //! Returns z-coordinate of the layer's top
-    double layerTopZ(size_t i_layer) const;
-
-    //! Returns z-coordinate of the layer's bottom
-    double layerBottomZ(size_t i_layer) const;
-
     //! Returns thickness of layer
     double layerThickness(size_t i_layer) const;
 
@@ -82,25 +76,10 @@ public:
     //! Returns bottom interface of layer
     const LayerInterface* layerBottomInterface(size_t i_layer) const;
 
-    //! Returns layer material
-    Material layerMaterial(size_t i_layer) const;
-
-    //! Changes a layer's material
-    void setLayerMaterial(size_t i_layer, Material material);
-
     //! Returns a clone of multilayer with clones of all layers and recreated
     //! interfaces between layers
     MultiLayer* clone() const final override;
 
-    //! Returns a clone with inverted magnetic fields
-    MultiLayer* cloneInvertB() const;
-
-#ifndef SWIG
-    //! Returns a clone of multilayer where the original layers may be sliced into several sublayers
-    //! for usage with the graded layer approximation
-    std::unique_ptr<MultiLayer> cloneSliced(bool use_average_layers) const;
-#endif // SWIG
-
     //! Sets cross correlation length of roughnesses between interfaces
     void setCrossCorrLength(double crossCorrLength);
 
@@ -116,17 +95,6 @@ public:
     //! returns layer index
     size_t indexOfLayer(const Layer* p_layer) const;
 
-    //! returns true if contains magnetic materials and matrix calculations are required
-    bool requiresMatrixRTCoefficients() const;
-
-    //! returns layer index corresponding to given global z coordinate
-    //! The top interface position of a layer is considered to belong to the layer above
-    size_t bottomZToLayerIndex(double z_value) const;
-
-    //! returns layer index corresponding to given global z coordinate
-    //! The top interface position of a layer is considered to belong to the layer beneath
-    size_t topZToLayerIndex(double z_value) const;
-
     bool containsMagneticMaterial() const;
 
     //! Returns true if the multilayer contains non-default materials of one type only
@@ -160,13 +128,8 @@ private:
     //! Checks index of interface w.r.t. vector length
     size_t check_interface_index(size_t i_interface) const;
 
-    //! Shared implementation for different clones
-    MultiLayer* genericClone(const std::function<Layer*(const Layer*)>& layer_clone) const;
-
     //! stack of layers [nlayers]
     SafePointerVector<Layer> m_layers;
-    //! coordinate of layer's bottoms [nlayers-1]
-    std::vector<double> m_layers_bottomz;
     //! stack of layer interfaces [nlayers-1]
     SafePointerVector<LayerInterface> m_interfaces;
     //! cross correlation length (in z direction) between different layers
diff --git a/Core/Multilayer/MultiLayerSlicer.cpp b/Core/Multilayer/MultiLayerSlicer.cpp
deleted file mode 100644
index a26c910b462335682a6bc180a1b7dca9c73ee241..0000000000000000000000000000000000000000
--- a/Core/Multilayer/MultiLayerSlicer.cpp
+++ /dev/null
@@ -1,45 +0,0 @@
-// ************************************************************************** //
-//
-//  BornAgain: simulate and fit scattering at grazing incidence
-//
-//! @file      Core/Multilayer/MultiLayerSlicer.cpp
-//! @brief     Implements class MultiLayerSlicer.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-// ************************************************************************** //
-
-#include "MultiLayerSlicer.h"
-#include "MultiLayer.h"
-#include "Layer.h"
-
-#include <sstream>
-
-MultiLayerSlicer::MultiLayerSlicer(const MultiLayer& multilayer)
-    : mP_multilayer{multilayer.clone()}
-{}
-
-std::vector<double> MultiLayerSlicer::slicedThicknesses() const
-{
-    std::vector<double> result;
-    auto P_sliced = mP_multilayer->cloneSliced(true);
-    for (unsigned i=0; i<P_sliced->numberOfLayers(); i++) {
-        result.push_back(P_sliced->layer(i)->thickness());
-    }
-    return result;
-}
-
-std::string MultiLayerSlicer::slicedRepresentation() const
-{
-    std::ostringstream rep;
-    auto thicknesses = slicedThicknesses();
-    for (unsigned i =0; i<thicknesses.size(); i++) {
-        rep << "Layer " << i << ", thickness: " << thicknesses[i] << std::endl;
-    }
-    return rep.str();
-}
-
-MultiLayerSlicer::~MultiLayerSlicer() =default;
diff --git a/Core/Multilayer/MultiLayerSlicer.h b/Core/Multilayer/MultiLayerSlicer.h
deleted file mode 100644
index f6752a5dcc17eee80be92ad45c28a57a1af5372e..0000000000000000000000000000000000000000
--- a/Core/Multilayer/MultiLayerSlicer.h
+++ /dev/null
@@ -1,41 +0,0 @@
-// ************************************************************************** //
-//
-//  BornAgain: simulate and fit scattering at grazing incidence
-//
-//! @file      Core/Multilayer/MultiLayerSlicer.h
-//! @brief     Defines class MultiLayerSlicer.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-// ************************************************************************** //
-
-#ifndef MULTILAYERSLICER_H
-#define MULTILAYERSLICER_H
-
-#include "WinDllMacros.h"
-#include <memory>
-#include <string>
-#include <vector>
-
-class MultiLayer;
-
-//! Helper class to test slicing functionality of MultiLayer
-class BA_CORE_API_ MultiLayerSlicer
-{
-public:
-    MultiLayerSlicer(const MultiLayer& multilayer);
-    ~MultiLayerSlicer();
-
-    //! Returns thicknesses of slices after slicing
-    std::vector<double> slicedThicknesses() const;
-
-    //! Returns a string representation of the sliced MultiLayer
-    std::string slicedRepresentation() const;
-private:
-    std::unique_ptr<MultiLayer> mP_multilayer;
-};
-
-#endif // MULTILAYERSLICER_H
diff --git a/Core/Particle/SlicedFormFactorList.cpp b/Core/Particle/SlicedFormFactorList.cpp
index 71b6b565c43c36bdfcef45d3d4c3a094ccaba64a..6686d12aa00ea6f0b609a10686ead293665fa33b 100644
--- a/Core/Particle/SlicedFormFactorList.cpp
+++ b/Core/Particle/SlicedFormFactorList.cpp
@@ -21,31 +21,15 @@
 
 namespace
 {
-std::pair<size_t, size_t> LayerIndicesLimits(const IParticle& particle,
-                                             const MultiLayer& multilayer, size_t ref_layer_index);
 std::pair<size_t, size_t> SliceIndexSpan(const IParticle& particle,
                                          const std::vector<Slice>& slices, double z_ref);
 size_t TopZToSliceIndex(double z, const std::vector<Slice>& slices);
 size_t BottomZToSliceIndex(double z, const std::vector<Slice>& slices);
 double SliceTopZ(size_t i, const std::vector<Slice>& slices);
-double ZDifference(const MultiLayer& multilayer, size_t layer_index, size_t ref_layer_index);
-ZLimits LayerZLimits(const MultiLayer& multilayer, size_t layer_index);
 ZLimits SlicesZLimits(const std::vector<Slice>& slices, size_t slice_index);
 void ScaleRegions(std::vector<HomogeneousRegion>& regions, double factor);
 } // namespace
 
-SlicedFormFactorList SlicedFormFactorList::CreateSlicedFormFactors(const IParticle& particle,
-                                                                   const MultiLayer& multilayer,
-                                                                   size_t ref_layer_index)
-{
-    SlicedFormFactorList result;
-    auto particles = particle.decompose();
-    for (auto p_particle : particles) {
-        result.addParticle(*p_particle, multilayer, ref_layer_index);
-    }
-    return result;
-}
-
 SlicedFormFactorList SlicedFormFactorList::CreateSlicedFormFactors(const IParticle& particle,
                                                                    const std::vector<Slice>& slices,
                                                                    double z_ref)
@@ -58,26 +42,6 @@ SlicedFormFactorList SlicedFormFactorList::CreateSlicedFormFactors(const IPartic
     return result;
 }
 
-void SlicedFormFactorList::addParticle(IParticle& particle, const MultiLayer& multilayer,
-                                       size_t ref_layer_index)
-{
-    auto layer_indices = LayerIndicesLimits(particle, multilayer, ref_layer_index);
-    bool single_layer = (layer_indices.first == layer_indices.second);
-    for (size_t i = layer_indices.first; i < layer_indices.second + 1; ++i) {
-        kvector_t translation(0.0, 0.0, -ZDifference(multilayer, i, ref_layer_index));
-        particle.translate(translation);
-        // if particle is contained in this layer, set limits to infinite:
-        ZLimits limits = single_layer ? ZLimits() : LayerZLimits(multilayer, i);
-        auto sliced_particle = particle.createSlicedParticle(limits);
-        m_ff_list.emplace_back(std::move(sliced_particle.mP_slicedff), i);
-        if (multilayer.layerThickness(i) != 0.0)
-            ScaleRegions(sliced_particle.m_regions, 1 / multilayer.layerThickness(i));
-        m_region_map[i].insert(m_region_map[i].end(), sliced_particle.m_regions.begin(),
-                               sliced_particle.m_regions.end());
-        ref_layer_index = i; // particle now has coordinates relative to layer i
-    }
-}
-
 void SlicedFormFactorList::addParticle(IParticle& particle, const std::vector<Slice>& slices,
                                        double z_ref)
 {
@@ -120,24 +84,6 @@ std::map<size_t, std::vector<HomogeneousRegion>> SlicedFormFactorList::regionMap
 
 namespace
 {
-std::pair<size_t, size_t> LayerIndicesLimits(const IParticle& particle,
-                                             const MultiLayer& multilayer, size_t ref_layer_index)
-{
-    double position_offset = multilayer.layerTopZ(ref_layer_index);
-    auto bottomTopZ = particle.bottomTopZ();
-    double zbottom = bottomTopZ.m_bottom;
-    double ztop = bottomTopZ.m_top;
-    double eps = (ztop - zbottom) * 1e-6; // allow for relatively small crossing due to numerical
-                                          // approximations (like rotation over 180 degrees)
-    double zmax = ztop + position_offset - eps;
-    double zmin = zbottom + position_offset + eps;
-    size_t top_index = multilayer.topZToLayerIndex(zmax);
-    size_t bottom_index = multilayer.bottomZToLayerIndex(zmin);
-    if (top_index > bottom_index) // happens for zero size particles
-        top_index = bottom_index;
-    return {top_index, bottom_index};
-}
-
 std::pair<size_t, size_t> SliceIndexSpan(const IParticle& particle,
                                          const std::vector<Slice>& slices, double z_ref)
 {
@@ -197,23 +143,6 @@ double SliceTopZ(size_t i, const std::vector<Slice>& slices)
     return top_z;
 }
 
-double ZDifference(const MultiLayer& multilayer, size_t layer_index, size_t ref_layer_index)
-{
-    return multilayer.layerTopZ(layer_index) - multilayer.layerTopZ(ref_layer_index);
-}
-
-ZLimits LayerZLimits(const MultiLayer& multilayer, size_t layer_index)
-{
-    size_t N = multilayer.numberOfLayers();
-    if (N < 2)
-        return ZLimits{};
-    if (layer_index == 0)
-        return ZLimits({false, 0}, {true, 0});
-    if (layer_index == N - 1)
-        return ZLimits({true, 0}, {false, 0});
-    return ZLimits(-multilayer.layerThickness(layer_index), 0.0);
-}
-
 ZLimits SlicesZLimits(const std::vector<Slice>& slices, size_t slice_index)
 {
     size_t N = slices.size();
diff --git a/Core/Particle/SlicedFormFactorList.h b/Core/Particle/SlicedFormFactorList.h
index bfee8fd01046b48495590f6d3ab53f24f9c7fcc9..a357a8f258b03c9d7b4ec0a971deb091e94ce9fd 100644
--- a/Core/Particle/SlicedFormFactorList.h
+++ b/Core/Particle/SlicedFormFactorList.h
@@ -15,8 +15,8 @@
 #ifndef SLICEDFORMFACTORLIST_H
 #define SLICEDFORMFACTORLIST_H
 
-#include "IFormFactor.h"
 #include "HomogeneousRegion.h"
+#include "IFormFactor.h"
 #include <map>
 #include <memory>
 
@@ -37,19 +37,16 @@ public:
     ~SlicedFormFactorList() = default;
 
     static SlicedFormFactorList CreateSlicedFormFactors(const IParticle& particle,
-                                                 const MultiLayer& multilayer,
-                                                 size_t ref_layer_index);
-    static SlicedFormFactorList CreateSlicedFormFactors(const IParticle& particle,
-                                                 const std::vector<Slice>& slices, double z_ref);
+                                                        const std::vector<Slice>& slices,
+                                                        double z_ref);
 
     size_t size() const;
 
     std::pair<const IFormFactor*, size_t> operator[](size_t index) const;
 
     std::map<size_t, std::vector<HomogeneousRegion>> regionMap() const;
+
 private:
-    void addParticle(IParticle& particle, const MultiLayer& multilayer,
-                       size_t ref_layer_index);
     void addParticle(IParticle& particle, const std::vector<Slice>& slices, double z_ref);
     std::vector<std::pair<std::unique_ptr<IFormFactor>, size_t>> m_ff_list;
     std::map<size_t, std::vector<HomogeneousRegion>> m_region_map;
diff --git a/Tests/UnitTests/Core/Sample/MultiLayerTest.cpp b/Tests/UnitTests/Core/Sample/MultiLayerTest.cpp
index 024761461d3a045522ed3e5a0da7a20639b2c3fc..8649d0d9eab244abc40297743dd131e857933150 100644
--- a/Tests/UnitTests/Core/Sample/MultiLayerTest.cpp
+++ b/Tests/UnitTests/Core/Sample/MultiLayerTest.cpp
@@ -75,12 +75,6 @@ TEST_F(MultiLayerTest, LayerThicknesses)
     EXPECT_EQ(20.0, mLayer.layerThickness(1));
     EXPECT_EQ(40.0, mLayer.layerThickness(2));
     EXPECT_EQ(0.0, mLayer.layerThickness(3));
-
-    // check bottomZ value
-    EXPECT_EQ(0.0, mLayer.layerBottomZ(0));
-    EXPECT_EQ(-20.0, mLayer.layerBottomZ(1));
-    EXPECT_EQ(-60.0, mLayer.layerBottomZ(2));
-    EXPECT_EQ(-60.0, mLayer.layerBottomZ(3));
 }
 
 TEST_F(MultiLayerTest, CheckAllLayers)
@@ -177,105 +171,6 @@ TEST_F(MultiLayerTest, Clone)
     EXPECT_EQ(layer2.thickness(), mLayerClone->layerThickness(2));
     EXPECT_EQ(substrate.thickness(), mLayerClone->layerThickness(3));
 
-    // check bottomZ value
-    EXPECT_EQ(mLayer.layerBottomZ(0), mLayerClone->layerBottomZ(0));
-    EXPECT_EQ(mLayer.layerBottomZ(1), mLayerClone->layerBottomZ(1));
-    EXPECT_EQ(mLayer.layerBottomZ(2), mLayerClone->layerBottomZ(2));
-    EXPECT_EQ(mLayer.layerBottomZ(3), mLayerClone->layerBottomZ(3));
-
-    // check individual layer
-    const Layer* layerCopy0 = mLayerClone->layer(0);
-    EXPECT_EQ(topLayer.getName(), layerCopy0->getName());
-    EXPECT_EQ(topLayer.thickness(), layerCopy0->thickness());
-    EXPECT_EQ(topLayer.material()->getName(), layerCopy0->material()->getName());
-
-    const Layer* layerCopy1 = mLayerClone->layer(1);
-    EXPECT_EQ(layer1.getName(), layerCopy1->getName());
-    EXPECT_EQ(layer1.thickness(), layerCopy1->thickness());
-    EXPECT_EQ(layer1.material()->getName(), layerCopy1->material()->getName());
-
-    const Layer* layerCopy2 = mLayerClone->layer(2);
-    EXPECT_EQ(layer2.getName(), layerCopy2->getName());
-    EXPECT_EQ(layer2.thickness(), layerCopy2->thickness());
-    EXPECT_EQ(layer2.material()->getName(), layerCopy2->material()->getName());
-
-    const Layer* layerCopy3 = mLayerClone->layer(3);
-    EXPECT_EQ(substrate.getName(), layerCopy3->getName());
-    EXPECT_EQ(substrate.thickness(), layerCopy3->thickness());
-    EXPECT_EQ(substrate.material()->getName(), layerCopy3->material()->getName());
-
-    // check interfaces
-    const LayerInterface* interface0 = mLayerClone->layerInterface(0);
-    EXPECT_TRUE(nullptr != interface0);
-    EXPECT_EQ(BornAgain::LayerInterfaceType, interface0->getName());
-    EXPECT_EQ(nullptr, interface0->getRoughness());
-    EXPECT_EQ(topLayer.material()->getName(), interface0->topLayer()->material()->getName());
-    EXPECT_EQ(layer1.material()->getName(), interface0->bottomLayer()->material()->getName());
-
-    const LayerInterface* interface1 = mLayerClone->layerInterface(1);
-    EXPECT_TRUE(nullptr != interface1);
-    EXPECT_EQ(BornAgain::LayerInterfaceType, interface1->getName());
-    EXPECT_EQ(nullptr, interface1->getRoughness());
-    EXPECT_EQ(layer1.material()->getName(), interface1->topLayer()->material()->getName());
-    EXPECT_EQ(layer2.material()->getName(), interface1->bottomLayer()->material()->getName());
-
-    const LayerInterface* interface2 = mLayerClone->layerInterface(2);
-    EXPECT_TRUE(nullptr != interface2);
-    EXPECT_EQ(BornAgain::LayerInterfaceType, interface2->getName());
-    EXPECT_EQ(nullptr, interface2->getRoughness());
-    EXPECT_EQ(layer2.material()->getName(), interface2->topLayer()->material()->getName());
-    EXPECT_EQ(substrate.material()->getName(), interface2->bottomLayer()->material()->getName());
-
-    // top interface
-    const LayerInterface* interfaceBottom = mLayerClone->layerTopInterface(1);
-    EXPECT_TRUE(nullptr != interfaceBottom);
-    EXPECT_EQ(BornAgain::LayerInterfaceType, interfaceBottom->getName());
-    EXPECT_EQ(nullptr, interfaceBottom->getRoughness());
-    EXPECT_EQ(topLayer.material()->getName(), interfaceBottom->topLayer()->material()->getName());
-    EXPECT_EQ(layer1.material()->getName(), interfaceBottom->bottomLayer()->material()->getName());
-
-    // Bottom interface
-    const LayerInterface* interfaceTop = mLayerClone->layerBottomInterface(2);
-    EXPECT_TRUE(nullptr != interfaceTop);
-    EXPECT_EQ(BornAgain::LayerInterfaceType, interfaceTop->getName());
-    EXPECT_EQ(nullptr, interfaceTop->getRoughness());
-    EXPECT_EQ(layer2.material()->getName(), interfaceTop->topLayer()->material()->getName());
-    EXPECT_EQ(substrate.material()->getName(), interfaceTop->bottomLayer()->material()->getName());
-
-    // null interface
-    const LayerInterface* interfaceTopNull = mLayerClone->layerTopInterface(0);
-    EXPECT_TRUE(nullptr == interfaceTopNull);
-
-    const LayerInterface* interfaceBottomNull = mLayerClone->layerBottomInterface(3);
-    EXPECT_TRUE(nullptr == interfaceBottomNull);
-
-    delete mLayerClone;
-}
-
-TEST_F(MultiLayerTest, CloneInvertB)
-{
-    set_four();
-
-    MultiLayer* mLayerClone = mLayer.cloneInvertB();
-
-    // check properties
-    EXPECT_EQ(BornAgain::MultiLayerType, mLayerClone->getName());
-    EXPECT_EQ(0.0, mLayerClone->crossCorrLength());
-    EXPECT_EQ(size_t(4), mLayerClone->numberOfLayers());
-    EXPECT_EQ(size_t(3), mLayerClone->numberOfInterfaces());
-
-    // check layer thickness
-    EXPECT_EQ(topLayer.thickness(), mLayerClone->layerThickness(0));
-    EXPECT_EQ(layer1.thickness(), mLayerClone->layerThickness(1));
-    EXPECT_EQ(layer2.thickness(), mLayerClone->layerThickness(2));
-    EXPECT_EQ(substrate.thickness(), mLayerClone->layerThickness(3));
-
-    // check bottomZ value
-    EXPECT_EQ(mLayer.layerBottomZ(0), mLayerClone->layerBottomZ(0));
-    EXPECT_EQ(mLayer.layerBottomZ(1), mLayerClone->layerBottomZ(1));
-    EXPECT_EQ(mLayer.layerBottomZ(2), mLayerClone->layerBottomZ(2));
-    EXPECT_EQ(mLayer.layerBottomZ(3), mLayerClone->layerBottomZ(3));
-
     // check individual layer
     const Layer* layerCopy0 = mLayerClone->layer(0);
     EXPECT_EQ(topLayer.getName(), layerCopy0->getName());
@@ -397,37 +292,6 @@ TEST_F(MultiLayerTest, CloneWithRoughness)
     delete mLayerClone;
 }
 
-TEST_F(MultiLayerTest, CloneInvertBWithRoughness)
-{
-    Layer layer1(iron, 20 * Units::nanometer);
-    Layer layer2(stone, 5 * Units::nanometer);
-
-    // LayerRoughness(double sigma, double hurstParameter, double lateralCorrLength);
-    LayerRoughness lr0(-2.1, 7.3, 12.1);
-    LayerRoughness lr1(1.1, -7.3, 0.1);
-
-    mLayer.addLayer(topLayer);
-    mLayer.addLayerWithTopRoughness(layer1, lr0);
-    mLayer.addLayerWithTopRoughness(layer2, lr1);
-
-    MultiLayer* mLayerClone = mLayer.cloneInvertB();
-
-    const LayerInterface* interface0 = mLayerClone->layerInterface(0);
-    const LayerInterface* interface1 = mLayerClone->layerInterface(1);
-    const LayerRoughness* roughness0 = interface0->getRoughness();
-    const LayerRoughness* roughness1 = interface1->getRoughness();
-
-    EXPECT_EQ(-2.1, roughness0->getSigma());
-    EXPECT_EQ(7.3, roughness0->getHurstParameter());
-    EXPECT_EQ(12.1, roughness0->getLatteralCorrLength());
-
-    EXPECT_EQ(1.1, roughness1->getSigma());
-    EXPECT_EQ(-7.3, roughness1->getHurstParameter());
-    EXPECT_EQ(0.1, roughness1->getLatteralCorrLength());
-
-    delete mLayerClone;
-}
-
 TEST_F(MultiLayerTest, WithMagneticMaterial)
 {
     kvector_t magnetic_field(0.0, 0.0, 1.0);
@@ -465,23 +329,6 @@ TEST_F(MultiLayerTest, CloneWithMagneticMaterial)
     delete mLayerClone;
 }
 
-TEST_F(MultiLayerTest, CloneInvertBMagneticMaterial)
-{
-    kvector_t magnetic_field(0.0, 0.0, 1.0);
-    Material magMaterial0 = HomogeneousMaterial("MagMat0", 6e-4, 2e-8, magnetic_field);
-
-    Layer layer1(iron, 20 * Units::nanometer);
-    Layer layer2(magMaterial0, 20 * Units::nanometer);
-
-    mLayer.addLayer(topLayer);
-    mLayer.addLayer(layer1);
-    mLayer.addLayer(layer2);
-
-    MultiLayer* mLayerClone = mLayer.cloneInvertB();
-    EXPECT_TRUE(mLayerClone->containsMagneticMaterial());
-    delete mLayerClone;
-}
-
 TEST_F(MultiLayerTest, MultiLayerCompositeTest)
 {
     MultiLayer mLayer;
@@ -527,38 +374,3 @@ TEST_F(MultiLayerTest, MultiLayerCompositeTest)
         EXPECT_EQ(double((i + 1) * 10), interface_buffer[i]->bottomLayer()->thickness());
     }
 }
-
-TEST_F(MultiLayerTest, MultiLayerZtoIndex)
-{
-    MultiLayer mLayer;
-
-    // index_0
-    // -----------------  0.0
-    // index_1
-    // -----------------  -10.0
-    // index_2
-    // -----------------  -30.0
-    // index_3
-    // -----------------  -60.0
-    // index_4
-    Layer layer1(air, 10 * Units::nanometer);
-    Layer layer2(air, 20 * Units::nanometer);
-    Layer layer3(air, 30 * Units::nanometer);
-    Layer layer4(air, 0 * Units::nanometer);
-    mLayer.addLayer(topLayer);
-    mLayer.addLayer(layer1);
-    mLayer.addLayer(layer2);
-    mLayer.addLayer(layer3);
-    mLayer.addLayer(layer4);
-
-    EXPECT_EQ(size_t(0), mLayer.bottomZToLayerIndex(1.0));
-    EXPECT_EQ(size_t(0), mLayer.bottomZToLayerIndex(0.0));
-    EXPECT_EQ(size_t(1), mLayer.bottomZToLayerIndex(-1.0));
-    EXPECT_EQ(size_t(1), mLayer.bottomZToLayerIndex(-9.0));
-    EXPECT_EQ(size_t(1), mLayer.bottomZToLayerIndex(-10.0));
-    EXPECT_EQ(size_t(2), mLayer.bottomZToLayerIndex(-11.0));
-    EXPECT_EQ(size_t(2), mLayer.bottomZToLayerIndex(-30.0));
-    EXPECT_EQ(size_t(3), mLayer.bottomZToLayerIndex(-31.0));
-    EXPECT_EQ(size_t(3), mLayer.bottomZToLayerIndex(-60.0));
-    EXPECT_EQ(size_t(4), mLayer.bottomZToLayerIndex(-61.0));
-}
diff --git a/Wrap/swig/libBornAgainCore.i b/Wrap/swig/libBornAgainCore.i
index 9c19bce3bb5963f18028e7b629d96972054695f4..974d4b0520c49438847e4a1825707fa6550726c8 100644
--- a/Wrap/swig/libBornAgainCore.i
+++ b/Wrap/swig/libBornAgainCore.i
@@ -194,7 +194,6 @@
 #include "MathFunctions.h"
 #include "MesoCrystal.h"
 #include "MultiLayer.h"
-#include "MultiLayerSlicer.h"
 #include "OffSpecSimulation.h"
 #include "OutputData.h"
 #include "ParameterDistribution.h"
@@ -448,7 +447,6 @@
 %include "MaterialFactoryFuncs.h"
 %include "MesoCrystal.h"
 %include "MultiLayer.h"
-%include "MultiLayerSlicer.h"
 %include "OffSpecSimulation.h"
 %include "IIntensityFunction.h"
 %include "OutputData.h"
diff --git a/auto/Wrap/libBornAgainCore.py b/auto/Wrap/libBornAgainCore.py
index 42f2d4e82a92b8f548f0d2466913915d14ff578a..1525f345da4b0a9c456329a415eea086d3f6c6a0 100644
--- a/auto/Wrap/libBornAgainCore.py
+++ b/auto/Wrap/libBornAgainCore.py
@@ -25386,30 +25386,6 @@ class MultiLayer(ISample):
         return _libBornAgainCore.MultiLayer_layerInterface(self, i_interface)
 
 
-    def layerTopZ(self, i_layer):
-        """
-        layerTopZ(MultiLayer self, size_t i_layer) -> double
-
-        double MultiLayer::layerTopZ(size_t i_layer) const
-
-        Returns z-coordinate of the layer's bottom. 
-
-        """
-        return _libBornAgainCore.MultiLayer_layerTopZ(self, i_layer)
-
-
-    def layerBottomZ(self, i_layer):
-        """
-        layerBottomZ(MultiLayer self, size_t i_layer) -> double
-
-        double MultiLayer::layerBottomZ(size_t i_layer) const
-
-        Returns z-coordinate of the layer's bottom. 
-
-        """
-        return _libBornAgainCore.MultiLayer_layerBottomZ(self, i_layer)
-
-
     def layerThickness(self, i_layer):
         """
         layerThickness(MultiLayer self, size_t i_layer) -> double
@@ -25455,30 +25431,6 @@ class MultiLayer(ISample):
         return _libBornAgainCore.MultiLayer_layerBottomInterface(self, i_layer)
 
 
-    def layerMaterial(self, i_layer):
-        """
-        layerMaterial(MultiLayer self, size_t i_layer) -> Material
-
-        Material MultiLayer::layerMaterial(size_t i_layer) const
-
-        Returns layer material. 
-
-        """
-        return _libBornAgainCore.MultiLayer_layerMaterial(self, i_layer)
-
-
-    def setLayerMaterial(self, i_layer, material):
-        """
-        setLayerMaterial(MultiLayer self, size_t i_layer, Material material)
-
-        void MultiLayer::setLayerMaterial(size_t i_layer, Material material)
-
-        Changes a layer's material. 
-
-        """
-        return _libBornAgainCore.MultiLayer_setLayerMaterial(self, i_layer, material)
-
-
     def clone(self):
         """
         clone(MultiLayer self) -> MultiLayer
@@ -25491,18 +25443,6 @@ class MultiLayer(ISample):
         return _libBornAgainCore.MultiLayer_clone(self)
 
 
-    def cloneInvertB(self):
-        """
-        cloneInvertB(MultiLayer self) -> MultiLayer
-
-        MultiLayer * MultiLayer::cloneInvertB() const
-
-        Returns a clone with inverted magnetic fields. 
-
-        """
-        return _libBornAgainCore.MultiLayer_cloneInvertB(self)
-
-
     def setCrossCorrLength(self, crossCorrLength):
         """
         setCrossCorrLength(MultiLayer self, double crossCorrLength)
@@ -25563,42 +25503,6 @@ class MultiLayer(ISample):
         return _libBornAgainCore.MultiLayer_indexOfLayer(self, p_layer)
 
 
-    def requiresMatrixRTCoefficients(self):
-        """
-        requiresMatrixRTCoefficients(MultiLayer self) -> bool
-
-        bool MultiLayer::requiresMatrixRTCoefficients() const
-
-        returns true if contains magnetic materials and matrix calculations are required 
-
-        """
-        return _libBornAgainCore.MultiLayer_requiresMatrixRTCoefficients(self)
-
-
-    def bottomZToLayerIndex(self, z_value):
-        """
-        bottomZToLayerIndex(MultiLayer self, double z_value) -> size_t
-
-        size_t MultiLayer::bottomZToLayerIndex(double z_value) const
-
-        returns layer index corresponding to given global z coordinate The top interface position of a layer is considered to belong to the layer above 
-
-        """
-        return _libBornAgainCore.MultiLayer_bottomZToLayerIndex(self, z_value)
-
-
-    def topZToLayerIndex(self, z_value):
-        """
-        topZToLayerIndex(MultiLayer self, double z_value) -> size_t
-
-        size_t MultiLayer::topZToLayerIndex(double z_value) const
-
-        returns layer index corresponding to given global z coordinate The top interface position of a layer is considered to belong to the layer beneath 
-
-        """
-        return _libBornAgainCore.MultiLayer_topZToLayerIndex(self, z_value)
-
-
     def containsMagneticMaterial(self):
         """
         containsMagneticMaterial(MultiLayer self) -> bool
@@ -25667,63 +25571,6 @@ class MultiLayer(ISample):
 MultiLayer_swigregister = _libBornAgainCore.MultiLayer_swigregister
 MultiLayer_swigregister(MultiLayer)
 
-class MultiLayerSlicer(_object):
-    """
-
-
-    Helper class to test slicing functionality of  MultiLayer.
-
-    C++ includes: MultiLayerSlicer.h
-
-    """
-
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, MultiLayerSlicer, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, MultiLayerSlicer, name)
-    __repr__ = _swig_repr
-
-    def __init__(self, multilayer):
-        """
-        __init__(MultiLayerSlicer self, MultiLayer multilayer) -> MultiLayerSlicer
-
-        MultiLayerSlicer::MultiLayerSlicer(const MultiLayer &multilayer)
-
-        """
-        this = _libBornAgainCore.new_MultiLayerSlicer(multilayer)
-        try:
-            self.this.append(this)
-        except __builtin__.Exception:
-            self.this = this
-    __swig_destroy__ = _libBornAgainCore.delete_MultiLayerSlicer
-    __del__ = lambda self: None
-
-    def slicedThicknesses(self):
-        """
-        slicedThicknesses(MultiLayerSlicer self) -> vdouble1d_t
-
-        std::vector< double > MultiLayerSlicer::slicedThicknesses() const
-
-        Returns thicknesses of slices after slicing. 
-
-        """
-        return _libBornAgainCore.MultiLayerSlicer_slicedThicknesses(self)
-
-
-    def slicedRepresentation(self):
-        """
-        slicedRepresentation(MultiLayerSlicer self) -> std::string
-
-        std::string MultiLayerSlicer::slicedRepresentation() const
-
-        Returns a string representation of the sliced  MultiLayer. 
-
-        """
-        return _libBornAgainCore.MultiLayerSlicer_slicedRepresentation(self)
-
-MultiLayerSlicer_swigregister = _libBornAgainCore.MultiLayerSlicer_swigregister
-MultiLayerSlicer_swigregister(MultiLayerSlicer)
-
 class OffSpecSimulation(Simulation2D):
     """
 
diff --git a/auto/Wrap/libBornAgainCore_wrap.cpp b/auto/Wrap/libBornAgainCore_wrap.cpp
index 3565d1673f2086e85c4115b87b0c685ce737e8d3..288b7c40beee84c4b646f68ffdd68d9988cd4192 100644
--- a/auto/Wrap/libBornAgainCore_wrap.cpp
+++ b/auto/Wrap/libBornAgainCore_wrap.cpp
@@ -3644,157 +3644,156 @@ namespace Swig {
 #define SWIGTYPE_p_MillerIndex swig_types[190]
 #define SWIGTYPE_p_MillerIndexOrientation swig_types[191]
 #define SWIGTYPE_p_MultiLayer swig_types[192]
-#define SWIGTYPE_p_MultiLayerSlicer swig_types[193]
-#define SWIGTYPE_p_OffSpecSimulation swig_types[194]
-#define SWIGTYPE_p_OutputDataIteratorT_double_OutputDataT_double_t_t swig_types[195]
-#define SWIGTYPE_p_OutputDataIteratorT_double_const_OutputDataT_double_t_const_t swig_types[196]
-#define SWIGTYPE_p_OutputDataT_CumulativeValue_t swig_types[197]
-#define SWIGTYPE_p_OutputDataT_bool_t swig_types[198]
-#define SWIGTYPE_p_OutputDataT_double_t swig_types[199]
-#define SWIGTYPE_p_ParameterDistribution swig_types[200]
-#define SWIGTYPE_p_ParameterPool swig_types[201]
-#define SWIGTYPE_p_ParameterSample swig_types[202]
-#define SWIGTYPE_p_Particle swig_types[203]
-#define SWIGTYPE_p_ParticleComposition swig_types[204]
-#define SWIGTYPE_p_ParticleCoreShell swig_types[205]
-#define SWIGTYPE_p_ParticleDistribution swig_types[206]
-#define SWIGTYPE_p_ParticleLayout swig_types[207]
-#define SWIGTYPE_p_ParticleLimits swig_types[208]
-#define SWIGTYPE_p_PoissonNoiseBackground swig_types[209]
-#define SWIGTYPE_p_Polygon swig_types[210]
-#define SWIGTYPE_p_PolygonPrivate swig_types[211]
-#define SWIGTYPE_p_PolygonalTopology swig_types[212]
-#define SWIGTYPE_p_PolyhedralEdge swig_types[213]
-#define SWIGTYPE_p_PolyhedralFace swig_types[214]
-#define SWIGTYPE_p_PolyhedralTopology swig_types[215]
-#define SWIGTYPE_p_ProgressHandler__Callback_t swig_types[216]
-#define SWIGTYPE_p_PyBuilderCallback swig_types[217]
-#define SWIGTYPE_p_PyObserverCallback swig_types[218]
-#define SWIGTYPE_p_QSpecScan swig_types[219]
-#define SWIGTYPE_p_RangedDistribution swig_types[220]
-#define SWIGTYPE_p_RangedDistributionCosine swig_types[221]
-#define SWIGTYPE_p_RangedDistributionGate swig_types[222]
-#define SWIGTYPE_p_RangedDistributionGaussian swig_types[223]
-#define SWIGTYPE_p_RangedDistributionLogNormal swig_types[224]
-#define SWIGTYPE_p_RangedDistributionLorentz swig_types[225]
-#define SWIGTYPE_p_RealLimits swig_types[226]
-#define SWIGTYPE_p_RealParameter swig_types[227]
-#define SWIGTYPE_p_Rectangle swig_types[228]
-#define SWIGTYPE_p_RectangularDetector swig_types[229]
-#define SWIGTYPE_p_RectangularPixel swig_types[230]
-#define SWIGTYPE_p_RegionOfInterest swig_types[231]
-#define SWIGTYPE_p_ResolutionFunction2DGaussian swig_types[232]
-#define SWIGTYPE_p_RotationEuler swig_types[233]
-#define SWIGTYPE_p_RotationX swig_types[234]
-#define SWIGTYPE_p_RotationY swig_types[235]
-#define SWIGTYPE_p_RotationZ swig_types[236]
-#define SWIGTYPE_p_SafePointerVectorT_IParticle_t swig_types[237]
-#define SWIGTYPE_p_SafePointerVectorT_Layer_t swig_types[238]
-#define SWIGTYPE_p_SampleBuilderFactory swig_types[239]
-#define SWIGTYPE_p_ScanResolution swig_types[240]
-#define SWIGTYPE_p_SimpleSelectionRule swig_types[241]
-#define SWIGTYPE_p_Simulation swig_types[242]
-#define SWIGTYPE_p_Simulation2D swig_types[243]
-#define SWIGTYPE_p_SimulationFactory swig_types[244]
-#define SWIGTYPE_p_SimulationOptions swig_types[245]
-#define SWIGTYPE_p_SimulationResult swig_types[246]
-#define SWIGTYPE_p_SlicedParticle swig_types[247]
-#define SWIGTYPE_p_SlicingEffects swig_types[248]
-#define SWIGTYPE_p_SpecularDetector1D swig_types[249]
-#define SWIGTYPE_p_SpecularSimulation swig_types[250]
-#define SWIGTYPE_p_SphericalDetector swig_types[251]
-#define SWIGTYPE_p_SphericalPixel swig_types[252]
-#define SWIGTYPE_p_SquareLattice swig_types[253]
-#define SWIGTYPE_p_ThreadInfo swig_types[254]
-#define SWIGTYPE_p_Transform3D swig_types[255]
-#define SWIGTYPE_p_VariableBinAxis swig_types[256]
-#define SWIGTYPE_p_VarianceConstantFunction swig_types[257]
-#define SWIGTYPE_p_VarianceSimFunction swig_types[258]
-#define SWIGTYPE_p_VerticalLine swig_types[259]
-#define SWIGTYPE_p_VonMisesFisherGaussPeakShape swig_types[260]
-#define SWIGTYPE_p_VonMisesGaussPeakShape swig_types[261]
-#define SWIGTYPE_p_WavevectorInfo swig_types[262]
-#define SWIGTYPE_p_ZLimits swig_types[263]
-#define SWIGTYPE_p_allocator_type swig_types[264]
-#define SWIGTYPE_p_bool swig_types[265]
-#define SWIGTYPE_p_char swig_types[266]
-#define SWIGTYPE_p_const_iterator swig_types[267]
-#define SWIGTYPE_p_const_reference swig_types[268]
-#define SWIGTYPE_p_corr_matrix_t swig_types[269]
-#define SWIGTYPE_p_difference_type swig_types[270]
-#define SWIGTYPE_p_double swig_types[271]
-#define SWIGTYPE_p_int swig_types[272]
-#define SWIGTYPE_p_iterator swig_types[273]
-#define SWIGTYPE_p_key_type swig_types[274]
-#define SWIGTYPE_p_long_long swig_types[275]
-#define SWIGTYPE_p_mapped_type swig_types[276]
-#define SWIGTYPE_p_observer_t swig_types[277]
-#define SWIGTYPE_p_p_PyObject swig_types[278]
-#define SWIGTYPE_p_parameters_t swig_types[279]
-#define SWIGTYPE_p_reference swig_types[280]
-#define SWIGTYPE_p_short swig_types[281]
-#define SWIGTYPE_p_signed_char swig_types[282]
-#define SWIGTYPE_p_size_type swig_types[283]
-#define SWIGTYPE_p_std__allocatorT_AxisInfo_t swig_types[284]
-#define SWIGTYPE_p_std__allocatorT_BasicVector3DT_double_t_t swig_types[285]
-#define SWIGTYPE_p_std__allocatorT_BasicVector3DT_std__complexT_double_t_t_t swig_types[286]
-#define SWIGTYPE_p_std__allocatorT_IFormFactor_p_t swig_types[287]
-#define SWIGTYPE_p_std__allocatorT_INode_const_p_t swig_types[288]
-#define SWIGTYPE_p_std__allocatorT_INode_p_t swig_types[289]
-#define SWIGTYPE_p_std__allocatorT_ParameterSample_t swig_types[290]
-#define SWIGTYPE_p_std__allocatorT_double_t swig_types[291]
-#define SWIGTYPE_p_std__allocatorT_int_t swig_types[292]
-#define SWIGTYPE_p_std__allocatorT_std__complexT_double_t_t swig_types[293]
-#define SWIGTYPE_p_std__allocatorT_std__pairT_double_double_t_t swig_types[294]
-#define SWIGTYPE_p_std__allocatorT_std__pairT_std__string_const_double_t_t swig_types[295]
-#define SWIGTYPE_p_std__allocatorT_std__string_t swig_types[296]
-#define SWIGTYPE_p_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t swig_types[297]
-#define SWIGTYPE_p_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t swig_types[298]
-#define SWIGTYPE_p_std__allocatorT_unsigned_long_t swig_types[299]
-#define SWIGTYPE_p_std__complexT_double_t swig_types[300]
-#define SWIGTYPE_p_std__functionT_IMultiLayerBuilder_pfF_t swig_types[301]
-#define SWIGTYPE_p_std__functionT_Simulation_pfF_t swig_types[302]
-#define SWIGTYPE_p_std__functionT_void_fF_t swig_types[303]
-#define SWIGTYPE_p_std__functionT_void_fSimulationAreaIterator_const_RF_t swig_types[304]
-#define SWIGTYPE_p_std__invalid_argument swig_types[305]
-#define SWIGTYPE_p_std__lessT_std__string_t swig_types[306]
-#define SWIGTYPE_p_std__mapT_std__string_double_std__lessT_std__string_t_std__allocatorT_std__pairT_std__string_const_double_t_t_t swig_types[307]
-#define SWIGTYPE_p_std__mapT_std__string_std__string_std__lessT_std__string_t_std__allocatorT_std__pairT_std__string_const_std__string_t_t_t__const_iterator swig_types[308]
-#define SWIGTYPE_p_std__pairT_double_double_t swig_types[309]
-#define SWIGTYPE_p_std__shared_ptrT_IMultiLayerBuilder_t swig_types[310]
-#define SWIGTYPE_p_std__shared_ptrT_IObserver_t swig_types[311]
-#define SWIGTYPE_p_std__vectorT_AxesUnitsWrap__AxesUnits_std__allocatorT_AxesUnitsWrap__AxesUnits_t_t swig_types[312]
-#define SWIGTYPE_p_std__vectorT_AxisInfo_std__allocatorT_AxisInfo_t_t swig_types[313]
-#define SWIGTYPE_p_std__vectorT_BasicVector3DT_double_t_std__allocatorT_BasicVector3DT_double_t_t_t swig_types[314]
-#define SWIGTYPE_p_std__vectorT_BasicVector3DT_std__complexT_double_t_t_std__allocatorT_BasicVector3DT_std__complexT_double_t_t_t_t swig_types[315]
-#define SWIGTYPE_p_std__vectorT_HomogeneousRegion_std__allocatorT_HomogeneousRegion_t_t swig_types[316]
-#define SWIGTYPE_p_std__vectorT_IFormFactor_p_std__allocatorT_IFormFactor_p_t_t swig_types[317]
-#define SWIGTYPE_p_std__vectorT_ILayout_const_p_std__allocatorT_ILayout_const_p_t_t swig_types[318]
-#define SWIGTYPE_p_std__vectorT_INode_const_p_std__allocatorT_INode_const_p_t_t swig_types[319]
-#define SWIGTYPE_p_std__vectorT_INode_p_std__allocatorT_INode_p_t_t swig_types[320]
-#define SWIGTYPE_p_std__vectorT_Material_const_p_std__allocatorT_Material_const_p_t_t swig_types[321]
-#define SWIGTYPE_p_std__vectorT_ParameterSample_std__allocatorT_ParameterSample_t_t swig_types[322]
-#define SWIGTYPE_p_std__vectorT_PolygonalTopology_std__allocatorT_PolygonalTopology_t_t swig_types[323]
-#define SWIGTYPE_p_std__vectorT_RealParameter_p_std__allocatorT_RealParameter_p_t_t swig_types[324]
-#define SWIGTYPE_p_std__vectorT_SimulationElement_std__allocatorT_SimulationElement_t_t swig_types[325]
-#define SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t swig_types[326]
-#define SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t swig_types[327]
-#define SWIGTYPE_p_std__vectorT_size_t_std__allocatorT_size_t_t_t swig_types[328]
-#define SWIGTYPE_p_std__vectorT_std__complexT_double_t_std__allocatorT_std__complexT_double_t_t_t swig_types[329]
-#define SWIGTYPE_p_std__vectorT_std__pairT_double_double_t_std__allocatorT_std__pairT_double_double_t_t_t swig_types[330]
-#define SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t swig_types[331]
-#define SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t swig_types[332]
-#define SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t swig_types[333]
-#define SWIGTYPE_p_std__vectorT_unsigned_int_std__allocatorT_unsigned_int_t_t swig_types[334]
-#define SWIGTYPE_p_std__vectorT_unsigned_long_std__allocatorT_unsigned_long_t_t swig_types[335]
-#define SWIGTYPE_p_swig__SwigPyIterator swig_types[336]
-#define SWIGTYPE_p_unsigned_char swig_types[337]
-#define SWIGTYPE_p_unsigned_int swig_types[338]
-#define SWIGTYPE_p_unsigned_long_long swig_types[339]
-#define SWIGTYPE_p_unsigned_short swig_types[340]
-#define SWIGTYPE_p_value_type swig_types[341]
-static swig_type_info *swig_types[343];
-static swig_module_info swig_module = {swig_types, 342, 0, 0, 0, 0};
+#define SWIGTYPE_p_OffSpecSimulation swig_types[193]
+#define SWIGTYPE_p_OutputDataIteratorT_double_OutputDataT_double_t_t swig_types[194]
+#define SWIGTYPE_p_OutputDataIteratorT_double_const_OutputDataT_double_t_const_t swig_types[195]
+#define SWIGTYPE_p_OutputDataT_CumulativeValue_t swig_types[196]
+#define SWIGTYPE_p_OutputDataT_bool_t swig_types[197]
+#define SWIGTYPE_p_OutputDataT_double_t swig_types[198]
+#define SWIGTYPE_p_ParameterDistribution swig_types[199]
+#define SWIGTYPE_p_ParameterPool swig_types[200]
+#define SWIGTYPE_p_ParameterSample swig_types[201]
+#define SWIGTYPE_p_Particle swig_types[202]
+#define SWIGTYPE_p_ParticleComposition swig_types[203]
+#define SWIGTYPE_p_ParticleCoreShell swig_types[204]
+#define SWIGTYPE_p_ParticleDistribution swig_types[205]
+#define SWIGTYPE_p_ParticleLayout swig_types[206]
+#define SWIGTYPE_p_ParticleLimits swig_types[207]
+#define SWIGTYPE_p_PoissonNoiseBackground swig_types[208]
+#define SWIGTYPE_p_Polygon swig_types[209]
+#define SWIGTYPE_p_PolygonPrivate swig_types[210]
+#define SWIGTYPE_p_PolygonalTopology swig_types[211]
+#define SWIGTYPE_p_PolyhedralEdge swig_types[212]
+#define SWIGTYPE_p_PolyhedralFace swig_types[213]
+#define SWIGTYPE_p_PolyhedralTopology swig_types[214]
+#define SWIGTYPE_p_ProgressHandler__Callback_t swig_types[215]
+#define SWIGTYPE_p_PyBuilderCallback swig_types[216]
+#define SWIGTYPE_p_PyObserverCallback swig_types[217]
+#define SWIGTYPE_p_QSpecScan swig_types[218]
+#define SWIGTYPE_p_RangedDistribution swig_types[219]
+#define SWIGTYPE_p_RangedDistributionCosine swig_types[220]
+#define SWIGTYPE_p_RangedDistributionGate swig_types[221]
+#define SWIGTYPE_p_RangedDistributionGaussian swig_types[222]
+#define SWIGTYPE_p_RangedDistributionLogNormal swig_types[223]
+#define SWIGTYPE_p_RangedDistributionLorentz swig_types[224]
+#define SWIGTYPE_p_RealLimits swig_types[225]
+#define SWIGTYPE_p_RealParameter swig_types[226]
+#define SWIGTYPE_p_Rectangle swig_types[227]
+#define SWIGTYPE_p_RectangularDetector swig_types[228]
+#define SWIGTYPE_p_RectangularPixel swig_types[229]
+#define SWIGTYPE_p_RegionOfInterest swig_types[230]
+#define SWIGTYPE_p_ResolutionFunction2DGaussian swig_types[231]
+#define SWIGTYPE_p_RotationEuler swig_types[232]
+#define SWIGTYPE_p_RotationX swig_types[233]
+#define SWIGTYPE_p_RotationY swig_types[234]
+#define SWIGTYPE_p_RotationZ swig_types[235]
+#define SWIGTYPE_p_SafePointerVectorT_IParticle_t swig_types[236]
+#define SWIGTYPE_p_SafePointerVectorT_Layer_t swig_types[237]
+#define SWIGTYPE_p_SampleBuilderFactory swig_types[238]
+#define SWIGTYPE_p_ScanResolution swig_types[239]
+#define SWIGTYPE_p_SimpleSelectionRule swig_types[240]
+#define SWIGTYPE_p_Simulation swig_types[241]
+#define SWIGTYPE_p_Simulation2D swig_types[242]
+#define SWIGTYPE_p_SimulationFactory swig_types[243]
+#define SWIGTYPE_p_SimulationOptions swig_types[244]
+#define SWIGTYPE_p_SimulationResult swig_types[245]
+#define SWIGTYPE_p_SlicedParticle swig_types[246]
+#define SWIGTYPE_p_SlicingEffects swig_types[247]
+#define SWIGTYPE_p_SpecularDetector1D swig_types[248]
+#define SWIGTYPE_p_SpecularSimulation swig_types[249]
+#define SWIGTYPE_p_SphericalDetector swig_types[250]
+#define SWIGTYPE_p_SphericalPixel swig_types[251]
+#define SWIGTYPE_p_SquareLattice swig_types[252]
+#define SWIGTYPE_p_ThreadInfo swig_types[253]
+#define SWIGTYPE_p_Transform3D swig_types[254]
+#define SWIGTYPE_p_VariableBinAxis swig_types[255]
+#define SWIGTYPE_p_VarianceConstantFunction swig_types[256]
+#define SWIGTYPE_p_VarianceSimFunction swig_types[257]
+#define SWIGTYPE_p_VerticalLine swig_types[258]
+#define SWIGTYPE_p_VonMisesFisherGaussPeakShape swig_types[259]
+#define SWIGTYPE_p_VonMisesGaussPeakShape swig_types[260]
+#define SWIGTYPE_p_WavevectorInfo swig_types[261]
+#define SWIGTYPE_p_ZLimits swig_types[262]
+#define SWIGTYPE_p_allocator_type swig_types[263]
+#define SWIGTYPE_p_bool swig_types[264]
+#define SWIGTYPE_p_char swig_types[265]
+#define SWIGTYPE_p_const_iterator swig_types[266]
+#define SWIGTYPE_p_const_reference swig_types[267]
+#define SWIGTYPE_p_corr_matrix_t swig_types[268]
+#define SWIGTYPE_p_difference_type swig_types[269]
+#define SWIGTYPE_p_double swig_types[270]
+#define SWIGTYPE_p_int swig_types[271]
+#define SWIGTYPE_p_iterator swig_types[272]
+#define SWIGTYPE_p_key_type swig_types[273]
+#define SWIGTYPE_p_long_long swig_types[274]
+#define SWIGTYPE_p_mapped_type swig_types[275]
+#define SWIGTYPE_p_observer_t swig_types[276]
+#define SWIGTYPE_p_p_PyObject swig_types[277]
+#define SWIGTYPE_p_parameters_t swig_types[278]
+#define SWIGTYPE_p_reference swig_types[279]
+#define SWIGTYPE_p_short swig_types[280]
+#define SWIGTYPE_p_signed_char swig_types[281]
+#define SWIGTYPE_p_size_type swig_types[282]
+#define SWIGTYPE_p_std__allocatorT_AxisInfo_t swig_types[283]
+#define SWIGTYPE_p_std__allocatorT_BasicVector3DT_double_t_t swig_types[284]
+#define SWIGTYPE_p_std__allocatorT_BasicVector3DT_std__complexT_double_t_t_t swig_types[285]
+#define SWIGTYPE_p_std__allocatorT_IFormFactor_p_t swig_types[286]
+#define SWIGTYPE_p_std__allocatorT_INode_const_p_t swig_types[287]
+#define SWIGTYPE_p_std__allocatorT_INode_p_t swig_types[288]
+#define SWIGTYPE_p_std__allocatorT_ParameterSample_t swig_types[289]
+#define SWIGTYPE_p_std__allocatorT_double_t swig_types[290]
+#define SWIGTYPE_p_std__allocatorT_int_t swig_types[291]
+#define SWIGTYPE_p_std__allocatorT_std__complexT_double_t_t swig_types[292]
+#define SWIGTYPE_p_std__allocatorT_std__pairT_double_double_t_t swig_types[293]
+#define SWIGTYPE_p_std__allocatorT_std__pairT_std__string_const_double_t_t swig_types[294]
+#define SWIGTYPE_p_std__allocatorT_std__string_t swig_types[295]
+#define SWIGTYPE_p_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t swig_types[296]
+#define SWIGTYPE_p_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t swig_types[297]
+#define SWIGTYPE_p_std__allocatorT_unsigned_long_t swig_types[298]
+#define SWIGTYPE_p_std__complexT_double_t swig_types[299]
+#define SWIGTYPE_p_std__functionT_IMultiLayerBuilder_pfF_t swig_types[300]
+#define SWIGTYPE_p_std__functionT_Simulation_pfF_t swig_types[301]
+#define SWIGTYPE_p_std__functionT_void_fF_t swig_types[302]
+#define SWIGTYPE_p_std__functionT_void_fSimulationAreaIterator_const_RF_t swig_types[303]
+#define SWIGTYPE_p_std__invalid_argument swig_types[304]
+#define SWIGTYPE_p_std__lessT_std__string_t swig_types[305]
+#define SWIGTYPE_p_std__mapT_std__string_double_std__lessT_std__string_t_std__allocatorT_std__pairT_std__string_const_double_t_t_t swig_types[306]
+#define SWIGTYPE_p_std__mapT_std__string_std__string_std__lessT_std__string_t_std__allocatorT_std__pairT_std__string_const_std__string_t_t_t__const_iterator swig_types[307]
+#define SWIGTYPE_p_std__pairT_double_double_t swig_types[308]
+#define SWIGTYPE_p_std__shared_ptrT_IMultiLayerBuilder_t swig_types[309]
+#define SWIGTYPE_p_std__shared_ptrT_IObserver_t swig_types[310]
+#define SWIGTYPE_p_std__vectorT_AxesUnitsWrap__AxesUnits_std__allocatorT_AxesUnitsWrap__AxesUnits_t_t swig_types[311]
+#define SWIGTYPE_p_std__vectorT_AxisInfo_std__allocatorT_AxisInfo_t_t swig_types[312]
+#define SWIGTYPE_p_std__vectorT_BasicVector3DT_double_t_std__allocatorT_BasicVector3DT_double_t_t_t swig_types[313]
+#define SWIGTYPE_p_std__vectorT_BasicVector3DT_std__complexT_double_t_t_std__allocatorT_BasicVector3DT_std__complexT_double_t_t_t_t swig_types[314]
+#define SWIGTYPE_p_std__vectorT_HomogeneousRegion_std__allocatorT_HomogeneousRegion_t_t swig_types[315]
+#define SWIGTYPE_p_std__vectorT_IFormFactor_p_std__allocatorT_IFormFactor_p_t_t swig_types[316]
+#define SWIGTYPE_p_std__vectorT_ILayout_const_p_std__allocatorT_ILayout_const_p_t_t swig_types[317]
+#define SWIGTYPE_p_std__vectorT_INode_const_p_std__allocatorT_INode_const_p_t_t swig_types[318]
+#define SWIGTYPE_p_std__vectorT_INode_p_std__allocatorT_INode_p_t_t swig_types[319]
+#define SWIGTYPE_p_std__vectorT_Material_const_p_std__allocatorT_Material_const_p_t_t swig_types[320]
+#define SWIGTYPE_p_std__vectorT_ParameterSample_std__allocatorT_ParameterSample_t_t swig_types[321]
+#define SWIGTYPE_p_std__vectorT_PolygonalTopology_std__allocatorT_PolygonalTopology_t_t swig_types[322]
+#define SWIGTYPE_p_std__vectorT_RealParameter_p_std__allocatorT_RealParameter_p_t_t swig_types[323]
+#define SWIGTYPE_p_std__vectorT_SimulationElement_std__allocatorT_SimulationElement_t_t swig_types[324]
+#define SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t swig_types[325]
+#define SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t swig_types[326]
+#define SWIGTYPE_p_std__vectorT_size_t_std__allocatorT_size_t_t_t swig_types[327]
+#define SWIGTYPE_p_std__vectorT_std__complexT_double_t_std__allocatorT_std__complexT_double_t_t_t swig_types[328]
+#define SWIGTYPE_p_std__vectorT_std__pairT_double_double_t_std__allocatorT_std__pairT_double_double_t_t_t swig_types[329]
+#define SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t swig_types[330]
+#define SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t swig_types[331]
+#define SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t swig_types[332]
+#define SWIGTYPE_p_std__vectorT_unsigned_int_std__allocatorT_unsigned_int_t_t swig_types[333]
+#define SWIGTYPE_p_std__vectorT_unsigned_long_std__allocatorT_unsigned_long_t_t swig_types[334]
+#define SWIGTYPE_p_swig__SwigPyIterator swig_types[335]
+#define SWIGTYPE_p_unsigned_char swig_types[336]
+#define SWIGTYPE_p_unsigned_int swig_types[337]
+#define SWIGTYPE_p_unsigned_long_long swig_types[338]
+#define SWIGTYPE_p_unsigned_short swig_types[339]
+#define SWIGTYPE_p_value_type swig_types[340]
+static swig_type_info *swig_types[342];
+static swig_module_info swig_module = {swig_types, 341, 0, 0, 0, 0};
 #define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
 #define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
 
@@ -7330,7 +7329,6 @@ SWIGINTERN void std_vector_Sl_std_pair_Sl_double_Sc_double_Sg__Sg__insert__SWIG_
 #include "MathFunctions.h"
 #include "MesoCrystal.h"
 #include "MultiLayer.h"
-#include "MultiLayerSlicer.h"
 #include "OffSpecSimulation.h"
 #include "OutputData.h"
 #include "ParameterDistribution.h"
@@ -107223,68 +107221,6 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_MultiLayer_layerTopZ(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MultiLayer *arg1 = (MultiLayer *) 0 ;
-  size_t arg2 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  size_t val2 ;
-  int ecode2 = 0 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  double result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:MultiLayer_layerTopZ",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MultiLayer, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MultiLayer_layerTopZ" "', argument " "1"" of type '" "MultiLayer const *""'"); 
-  }
-  arg1 = reinterpret_cast< MultiLayer * >(argp1);
-  ecode2 = SWIG_AsVal_size_t(obj1, &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MultiLayer_layerTopZ" "', argument " "2"" of type '" "size_t""'");
-  } 
-  arg2 = static_cast< size_t >(val2);
-  result = (double)((MultiLayer const *)arg1)->layerTopZ(arg2);
-  resultobj = SWIG_From_double(static_cast< double >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_MultiLayer_layerBottomZ(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MultiLayer *arg1 = (MultiLayer *) 0 ;
-  size_t arg2 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  size_t val2 ;
-  int ecode2 = 0 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  double result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:MultiLayer_layerBottomZ",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MultiLayer, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MultiLayer_layerBottomZ" "', argument " "1"" of type '" "MultiLayer const *""'"); 
-  }
-  arg1 = reinterpret_cast< MultiLayer * >(argp1);
-  ecode2 = SWIG_AsVal_size_t(obj1, &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MultiLayer_layerBottomZ" "', argument " "2"" of type '" "size_t""'");
-  } 
-  arg2 = static_cast< size_t >(val2);
-  result = (double)((MultiLayer const *)arg1)->layerBottomZ(arg2);
-  resultobj = SWIG_From_double(static_cast< double >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
 SWIGINTERN PyObject *_wrap_MultiLayer_layerThickness(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   MultiLayer *arg1 = (MultiLayer *) 0 ;
@@ -107409,84 +107345,6 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_MultiLayer_layerMaterial(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MultiLayer *arg1 = (MultiLayer *) 0 ;
-  size_t arg2 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  size_t val2 ;
-  int ecode2 = 0 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  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 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MultiLayer_layerMaterial" "', argument " "1"" of type '" "MultiLayer const *""'"); 
-  }
-  arg1 = reinterpret_cast< MultiLayer * >(argp1);
-  ecode2 = SWIG_AsVal_size_t(obj1, &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MultiLayer_layerMaterial" "', argument " "2"" of type '" "size_t""'");
-  } 
-  arg2 = static_cast< size_t >(val2);
-  result = ((MultiLayer const *)arg1)->layerMaterial(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_MultiLayer_setLayerMaterial(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MultiLayer *arg1 = (MultiLayer *) 0 ;
-  size_t arg2 ;
-  SwigValueWrapper< Material > arg3 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  size_t val2 ;
-  int ecode2 = 0 ;
-  void *argp3 ;
-  int res3 = 0 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  PyObject * obj2 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OOO:MultiLayer_setLayerMaterial",&obj0,&obj1,&obj2)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MultiLayer, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MultiLayer_setLayerMaterial" "', argument " "1"" of type '" "MultiLayer *""'"); 
-  }
-  arg1 = reinterpret_cast< MultiLayer * >(argp1);
-  ecode2 = SWIG_AsVal_size_t(obj1, &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MultiLayer_setLayerMaterial" "', argument " "2"" of type '" "size_t""'");
-  } 
-  arg2 = static_cast< size_t >(val2);
-  {
-    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 '" "Material""'"); 
-    }  
-    if (!argp3) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "MultiLayer_setLayerMaterial" "', argument " "3"" of type '" "Material""'");
-    } else {
-      Material * temp = reinterpret_cast< Material * >(argp3);
-      arg3 = *temp;
-      if (SWIG_IsNewObj(res3)) delete temp;
-    }
-  }
-  (arg1)->setLayerMaterial(arg2,arg3);
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
 SWIGINTERN PyObject *_wrap_MultiLayer_clone(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   MultiLayer *arg1 = (MultiLayer *) 0 ;
@@ -107509,28 +107367,6 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_MultiLayer_cloneInvertB(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MultiLayer *arg1 = (MultiLayer *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  MultiLayer *result = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:MultiLayer_cloneInvertB",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MultiLayer, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MultiLayer_cloneInvertB" "', argument " "1"" of type '" "MultiLayer const *""'"); 
-  }
-  arg1 = reinterpret_cast< MultiLayer * >(argp1);
-  result = (MultiLayer *)((MultiLayer const *)arg1)->cloneInvertB();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_MultiLayer, 0 |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
 SWIGINTERN PyObject *_wrap_MultiLayer_setCrossCorrLength(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   MultiLayer *arg1 = (MultiLayer *) 0 ;
@@ -107674,90 +107510,6 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_MultiLayer_requiresMatrixRTCoefficients(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MultiLayer *arg1 = (MultiLayer *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  bool result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:MultiLayer_requiresMatrixRTCoefficients",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MultiLayer, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MultiLayer_requiresMatrixRTCoefficients" "', argument " "1"" of type '" "MultiLayer const *""'"); 
-  }
-  arg1 = reinterpret_cast< MultiLayer * >(argp1);
-  result = (bool)((MultiLayer const *)arg1)->requiresMatrixRTCoefficients();
-  resultobj = SWIG_From_bool(static_cast< bool >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_MultiLayer_bottomZToLayerIndex(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MultiLayer *arg1 = (MultiLayer *) 0 ;
-  double arg2 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  double val2 ;
-  int ecode2 = 0 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  size_t result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:MultiLayer_bottomZToLayerIndex",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MultiLayer, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MultiLayer_bottomZToLayerIndex" "', argument " "1"" of type '" "MultiLayer const *""'"); 
-  }
-  arg1 = reinterpret_cast< MultiLayer * >(argp1);
-  ecode2 = SWIG_AsVal_double(obj1, &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MultiLayer_bottomZToLayerIndex" "', argument " "2"" of type '" "double""'");
-  } 
-  arg2 = static_cast< double >(val2);
-  result = ((MultiLayer const *)arg1)->bottomZToLayerIndex(arg2);
-  resultobj = SWIG_From_size_t(static_cast< size_t >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_MultiLayer_topZToLayerIndex(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MultiLayer *arg1 = (MultiLayer *) 0 ;
-  double arg2 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  double val2 ;
-  int ecode2 = 0 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  size_t result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:MultiLayer_topZToLayerIndex",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MultiLayer, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MultiLayer_topZToLayerIndex" "', argument " "1"" of type '" "MultiLayer const *""'"); 
-  }
-  arg1 = reinterpret_cast< MultiLayer * >(argp1);
-  ecode2 = SWIG_AsVal_double(obj1, &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MultiLayer_topZToLayerIndex" "', argument " "2"" of type '" "double""'");
-  } 
-  arg2 = static_cast< double >(val2);
-  result = ((MultiLayer const *)arg1)->topZToLayerIndex(arg2);
-  resultobj = SWIG_From_size_t(static_cast< size_t >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
 SWIGINTERN PyObject *_wrap_MultiLayer_containsMagneticMaterial(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   MultiLayer *arg1 = (MultiLayer *) 0 ;
@@ -107896,103 +107648,6 @@ SWIGINTERN PyObject *MultiLayer_swigregister(PyObject *SWIGUNUSEDPARM(self), PyO
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *_wrap_new_MultiLayerSlicer(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MultiLayer *arg1 = 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  MultiLayerSlicer *result = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:new_MultiLayerSlicer",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_MultiLayer,  0  | 0);
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_MultiLayerSlicer" "', argument " "1"" of type '" "MultiLayer const &""'"); 
-  }
-  if (!argp1) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_MultiLayerSlicer" "', argument " "1"" of type '" "MultiLayer const &""'"); 
-  }
-  arg1 = reinterpret_cast< MultiLayer * >(argp1);
-  result = (MultiLayerSlicer *)new MultiLayerSlicer((MultiLayer const &)*arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_MultiLayerSlicer, SWIG_POINTER_NEW |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_delete_MultiLayerSlicer(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MultiLayerSlicer *arg1 = (MultiLayerSlicer *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:delete_MultiLayerSlicer",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MultiLayerSlicer, SWIG_POINTER_DISOWN |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_MultiLayerSlicer" "', argument " "1"" of type '" "MultiLayerSlicer *""'"); 
-  }
-  arg1 = reinterpret_cast< MultiLayerSlicer * >(argp1);
-  delete arg1;
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_MultiLayerSlicer_slicedThicknesses(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MultiLayerSlicer *arg1 = (MultiLayerSlicer *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  std::vector< double,std::allocator< double > > result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:MultiLayerSlicer_slicedThicknesses",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MultiLayerSlicer, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MultiLayerSlicer_slicedThicknesses" "', argument " "1"" of type '" "MultiLayerSlicer const *""'"); 
-  }
-  arg1 = reinterpret_cast< MultiLayerSlicer * >(argp1);
-  result = ((MultiLayerSlicer const *)arg1)->slicedThicknesses();
-  resultobj = swig::from(static_cast< std::vector< double,std::allocator< double > > >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_MultiLayerSlicer_slicedRepresentation(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MultiLayerSlicer *arg1 = (MultiLayerSlicer *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  std::string result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:MultiLayerSlicer_slicedRepresentation",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MultiLayerSlicer, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MultiLayerSlicer_slicedRepresentation" "', argument " "1"" of type '" "MultiLayerSlicer const *""'"); 
-  }
-  arg1 = reinterpret_cast< MultiLayerSlicer * >(argp1);
-  result = ((MultiLayerSlicer const *)arg1)->slicedRepresentation();
-  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *MultiLayerSlicer_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_MultiLayerSlicer, SWIG_NewClientData(obj));
-  return SWIG_Py_Void();
-}
-
 SWIGINTERN PyObject *_wrap_new_OffSpecSimulation__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   OffSpecSimulation *result = 0 ;
@@ -137927,22 +137582,6 @@ static PyMethodDef SwigMethods[] = {
 		"Returns layer with given index. \n"
 		"\n"
 		""},
-	 { (char *)"MultiLayer_layerTopZ", _wrap_MultiLayer_layerTopZ, METH_VARARGS, (char *)"\n"
-		"MultiLayer_layerTopZ(MultiLayer self, size_t i_layer) -> double\n"
-		"\n"
-		"double MultiLayer::layerTopZ(size_t i_layer) const\n"
-		"\n"
-		"Returns z-coordinate of the layer's bottom. \n"
-		"\n"
-		""},
-	 { (char *)"MultiLayer_layerBottomZ", _wrap_MultiLayer_layerBottomZ, METH_VARARGS, (char *)"\n"
-		"MultiLayer_layerBottomZ(MultiLayer self, size_t i_layer) -> double\n"
-		"\n"
-		"double MultiLayer::layerBottomZ(size_t i_layer) const\n"
-		"\n"
-		"Returns z-coordinate of the layer's bottom. \n"
-		"\n"
-		""},
 	 { (char *)"MultiLayer_layerThickness", _wrap_MultiLayer_layerThickness, METH_VARARGS, (char *)"\n"
 		"MultiLayer_layerThickness(MultiLayer self, size_t i_layer) -> double\n"
 		"\n"
@@ -137972,22 +137611,6 @@ static PyMethodDef SwigMethods[] = {
 		"Returns pointer to the bottom interface of the layer. \n"
 		"\n"
 		""},
-	 { (char *)"MultiLayer_layerMaterial", _wrap_MultiLayer_layerMaterial, METH_VARARGS, (char *)"\n"
-		"MultiLayer_layerMaterial(MultiLayer self, size_t i_layer) -> Material\n"
-		"\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, Material material)\n"
-		"\n"
-		"void MultiLayer::setLayerMaterial(size_t i_layer, Material material)\n"
-		"\n"
-		"Changes a layer's material. \n"
-		"\n"
-		""},
 	 { (char *)"MultiLayer_clone", _wrap_MultiLayer_clone, METH_VARARGS, (char *)"\n"
 		"MultiLayer_clone(MultiLayer self) -> MultiLayer\n"
 		"\n"
@@ -137996,14 +137619,6 @@ static PyMethodDef SwigMethods[] = {
 		"Returns a clone of multilayer with clones of all layers and recreated interfaces between layers \n"
 		"\n"
 		""},
-	 { (char *)"MultiLayer_cloneInvertB", _wrap_MultiLayer_cloneInvertB, METH_VARARGS, (char *)"\n"
-		"MultiLayer_cloneInvertB(MultiLayer self) -> MultiLayer\n"
-		"\n"
-		"MultiLayer * MultiLayer::cloneInvertB() const\n"
-		"\n"
-		"Returns a clone with inverted magnetic fields. \n"
-		"\n"
-		""},
 	 { (char *)"MultiLayer_setCrossCorrLength", _wrap_MultiLayer_setCrossCorrLength, METH_VARARGS, (char *)"\n"
 		"MultiLayer_setCrossCorrLength(MultiLayer self, double crossCorrLength)\n"
 		"\n"
@@ -138044,30 +137659,6 @@ static PyMethodDef SwigMethods[] = {
 		"returns layer index \n"
 		"\n"
 		""},
-	 { (char *)"MultiLayer_requiresMatrixRTCoefficients", _wrap_MultiLayer_requiresMatrixRTCoefficients, METH_VARARGS, (char *)"\n"
-		"MultiLayer_requiresMatrixRTCoefficients(MultiLayer self) -> bool\n"
-		"\n"
-		"bool MultiLayer::requiresMatrixRTCoefficients() const\n"
-		"\n"
-		"returns true if contains magnetic materials and matrix calculations are required \n"
-		"\n"
-		""},
-	 { (char *)"MultiLayer_bottomZToLayerIndex", _wrap_MultiLayer_bottomZToLayerIndex, METH_VARARGS, (char *)"\n"
-		"MultiLayer_bottomZToLayerIndex(MultiLayer self, double z_value) -> size_t\n"
-		"\n"
-		"size_t MultiLayer::bottomZToLayerIndex(double z_value) const\n"
-		"\n"
-		"returns layer index corresponding to given global z coordinate The top interface position of a layer is considered to belong to the layer above \n"
-		"\n"
-		""},
-	 { (char *)"MultiLayer_topZToLayerIndex", _wrap_MultiLayer_topZToLayerIndex, METH_VARARGS, (char *)"\n"
-		"MultiLayer_topZToLayerIndex(MultiLayer self, double z_value) -> size_t\n"
-		"\n"
-		"size_t MultiLayer::topZToLayerIndex(double z_value) const\n"
-		"\n"
-		"returns layer index corresponding to given global z coordinate The top interface position of a layer is considered to belong to the layer beneath \n"
-		"\n"
-		""},
 	 { (char *)"MultiLayer_containsMagneticMaterial", _wrap_MultiLayer_containsMagneticMaterial, METH_VARARGS, (char *)"\n"
 		"MultiLayer_containsMagneticMaterial(MultiLayer self) -> bool\n"
 		"\n"
@@ -138111,35 +137702,6 @@ static PyMethodDef SwigMethods[] = {
 		"\n"
 		""},
 	 { (char *)"MultiLayer_swigregister", MultiLayer_swigregister, METH_VARARGS, NULL},
-	 { (char *)"new_MultiLayerSlicer", _wrap_new_MultiLayerSlicer, METH_VARARGS, (char *)"\n"
-		"new_MultiLayerSlicer(MultiLayer multilayer) -> MultiLayerSlicer\n"
-		"\n"
-		"MultiLayerSlicer::MultiLayerSlicer(const MultiLayer &multilayer)\n"
-		"\n"
-		""},
-	 { (char *)"delete_MultiLayerSlicer", _wrap_delete_MultiLayerSlicer, METH_VARARGS, (char *)"\n"
-		"delete_MultiLayerSlicer(MultiLayerSlicer self)\n"
-		"\n"
-		"MultiLayerSlicer::~MultiLayerSlicer()\n"
-		"\n"
-		""},
-	 { (char *)"MultiLayerSlicer_slicedThicknesses", _wrap_MultiLayerSlicer_slicedThicknesses, METH_VARARGS, (char *)"\n"
-		"MultiLayerSlicer_slicedThicknesses(MultiLayerSlicer self) -> vdouble1d_t\n"
-		"\n"
-		"std::vector< double > MultiLayerSlicer::slicedThicknesses() const\n"
-		"\n"
-		"Returns thicknesses of slices after slicing. \n"
-		"\n"
-		""},
-	 { (char *)"MultiLayerSlicer_slicedRepresentation", _wrap_MultiLayerSlicer_slicedRepresentation, METH_VARARGS, (char *)"\n"
-		"MultiLayerSlicer_slicedRepresentation(MultiLayerSlicer self) -> std::string\n"
-		"\n"
-		"std::string MultiLayerSlicer::slicedRepresentation() const\n"
-		"\n"
-		"Returns a string representation of the sliced  MultiLayer. \n"
-		"\n"
-		""},
-	 { (char *)"MultiLayerSlicer_swigregister", MultiLayerSlicer_swigregister, METH_VARARGS, NULL},
 	 { (char *)"new_OffSpecSimulation", _wrap_new_OffSpecSimulation, METH_VARARGS, (char *)"\n"
 		"OffSpecSimulation()\n"
 		"OffSpecSimulation(MultiLayer p_sample)\n"
@@ -143264,7 +142826,6 @@ static swig_type_info _swigt__p_MesoCrystal = {"_p_MesoCrystal", "MesoCrystal *"
 static swig_type_info _swigt__p_MillerIndex = {"_p_MillerIndex", "MillerIndex *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_MillerIndexOrientation = {"_p_MillerIndexOrientation", "MillerIndexOrientation *", 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_MultiLayerSlicer = {"_p_MultiLayerSlicer", "MultiLayerSlicer *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_OffSpecSimulation = {"_p_OffSpecSimulation", "OffSpecSimulation *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_OutputDataIteratorT_double_OutputDataT_double_t_t = {"_p_OutputDataIteratorT_double_OutputDataT_double_t_t", "OutputData< double >::iterator *|OutputDataIterator< double,OutputData< double > > *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_OutputDataIteratorT_double_const_OutputDataT_double_t_const_t = {"_p_OutputDataIteratorT_double_const_OutputDataT_double_t_const_t", "OutputDataIterator< double const,OutputData< double > const > *|OutputData< double >::const_iterator *", 0, 0, (void*)0, 0};
@@ -143608,7 +143169,6 @@ static swig_type_info *swig_type_initial[] = {
   &_swigt__p_MillerIndex,
   &_swigt__p_MillerIndexOrientation,
   &_swigt__p_MultiLayer,
-  &_swigt__p_MultiLayerSlicer,
   &_swigt__p_OffSpecSimulation,
   &_swigt__p_OutputDataIteratorT_double_OutputDataT_double_t_t,
   &_swigt__p_OutputDataIteratorT_double_const_OutputDataT_double_t_const_t,
@@ -143952,7 +143512,6 @@ static swig_cast_info _swigc__p_MesoCrystal[] = {  {&_swigt__p_MesoCrystal, 0, 0
 static swig_cast_info _swigc__p_MillerIndex[] = {  {&_swigt__p_MillerIndex, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_MillerIndexOrientation[] = {  {&_swigt__p_MillerIndexOrientation, 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_MultiLayerSlicer[] = {  {&_swigt__p_MultiLayerSlicer, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_OffSpecSimulation[] = {  {&_swigt__p_OffSpecSimulation, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_OutputDataIteratorT_double_OutputDataT_double_t_t[] = {  {&_swigt__p_OutputDataIteratorT_double_OutputDataT_double_t_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_OutputDataIteratorT_double_const_OutputDataT_double_t_const_t[] = {  {&_swigt__p_OutputDataIteratorT_double_const_OutputDataT_double_t_const_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -144296,7 +143855,6 @@ static swig_cast_info *swig_cast_initial[] = {
   _swigc__p_MillerIndex,
   _swigc__p_MillerIndexOrientation,
   _swigc__p_MultiLayer,
-  _swigc__p_MultiLayerSlicer,
   _swigc__p_OffSpecSimulation,
   _swigc__p_OutputDataIteratorT_double_OutputDataT_double_t_t,
   _swigc__p_OutputDataIteratorT_double_const_OutputDataT_double_t_const_t,