From e30cd4df3b47e9abc5202946f58548ddc104c457 Mon Sep 17 00:00:00 2001
From: "Joachim Wuttke (h)" <j.wuttke@fz-juelich.de>
Date: Tue, 13 Dec 2022 10:28:27 +0100
Subject: [PATCH] bundle classes in Polyhedra.h|cpp

---
 Sample/HardParticle/Bipyramid4.cpp            |    99 -
 Sample/HardParticle/Bipyramid4.h              |    68 -
 Sample/HardParticle/Box.cpp                   |    57 -
 Sample/HardParticle/Box.h                     |    75 -
 Sample/HardParticle/CantellatedCube.cpp       |    86 -
 Sample/HardParticle/CantellatedCube.h         |    59 -
 Sample/HardParticle/Dodecahedron.cpp          |    29 -
 Sample/HardParticle/Dodecahedron.h            |    53 -
 Sample/HardParticle/HardParticles.h           |    28 +-
 Sample/HardParticle/Icosahedron.cpp           |    29 -
 Sample/HardParticle/Icosahedron.h             |    53 -
 Sample/HardParticle/PlatonicOctahedron.cpp    |    31 -
 Sample/HardParticle/PlatonicOctahedron.h      |    58 -
 Sample/HardParticle/PlatonicTetrahedron.cpp   |    31 -
 Sample/HardParticle/PlatonicTetrahedron.h     |    57 -
 Sample/HardParticle/Polyhedra.cpp             |   721 +
 Sample/HardParticle/Polyhedra.h               |   857 +
 Sample/HardParticle/Prism3.cpp                |    30 -
 Sample/HardParticle/Prism3.h                  |    57 -
 Sample/HardParticle/Prism6.cpp                |    30 -
 Sample/HardParticle/Prism6.h                  |    57 -
 Sample/HardParticle/Pyramid2.cpp              |    34 -
 Sample/HardParticle/Pyramid2.h                |    69 -
 Sample/HardParticle/Pyramid3.cpp              |    33 -
 Sample/HardParticle/Pyramid3.h                |    63 -
 Sample/HardParticle/Pyramid4.cpp              |    76 -
 Sample/HardParticle/Pyramid4.h                |    65 -
 Sample/HardParticle/Pyramid6.cpp              |    87 -
 Sample/HardParticle/Pyramid6.h                |    64 -
 Sample/HardParticle/TruncatedCube.cpp         |    69 -
 Sample/HardParticle/TruncatedCube.h           |    59 -
 .../StandardSamples/BoxCompositionBuilder.cpp |     2 +-
 .../BoxesSquareLatticeBuilder.cpp             |     2 +-
 .../StandardSamples/CoreAndShellBuilder.cpp   |     2 +-
 .../CustomMorphologyBuilder.cpp               |     2 +-
 .../CylindersAndPrismsBuilder.cpp             |     2 +-
 .../StandardSamples/MultipleLayoutBuilder.cpp |     2 +-
 .../ParticleDistributionsBuilder.cpp          |     4 +-
 .../RotatedPyramidsBuilder.cpp                |     2 +-
 .../TransformationsBuilder.cpp                |     2 +-
 Tests/Unit/GUI/TestFormFactorItems.cpp        |     2 +-
 Tests/Unit/Sim/PythonFormattingTest.cpp       |    28 +-
 Wrap/Swig/libBornAgainSample.i                |    32 +-
 auto/Wrap/libBornAgainSample.py               |  1590 +-
 auto/Wrap/libBornAgainSample_wrap.cpp         | 13902 ++++++++--------
 45 files changed, 9369 insertions(+), 9389 deletions(-)
 delete mode 100644 Sample/HardParticle/Bipyramid4.cpp
 delete mode 100644 Sample/HardParticle/Bipyramid4.h
 delete mode 100644 Sample/HardParticle/Box.cpp
 delete mode 100644 Sample/HardParticle/Box.h
 delete mode 100644 Sample/HardParticle/CantellatedCube.cpp
 delete mode 100644 Sample/HardParticle/CantellatedCube.h
 delete mode 100644 Sample/HardParticle/Dodecahedron.cpp
 delete mode 100644 Sample/HardParticle/Dodecahedron.h
 delete mode 100644 Sample/HardParticle/Icosahedron.cpp
 delete mode 100644 Sample/HardParticle/Icosahedron.h
 delete mode 100644 Sample/HardParticle/PlatonicOctahedron.cpp
 delete mode 100644 Sample/HardParticle/PlatonicOctahedron.h
 delete mode 100644 Sample/HardParticle/PlatonicTetrahedron.cpp
 delete mode 100644 Sample/HardParticle/PlatonicTetrahedron.h
 create mode 100644 Sample/HardParticle/Polyhedra.cpp
 create mode 100644 Sample/HardParticle/Polyhedra.h
 delete mode 100644 Sample/HardParticle/Prism3.cpp
 delete mode 100644 Sample/HardParticle/Prism3.h
 delete mode 100644 Sample/HardParticle/Prism6.cpp
 delete mode 100644 Sample/HardParticle/Prism6.h
 delete mode 100644 Sample/HardParticle/Pyramid2.cpp
 delete mode 100644 Sample/HardParticle/Pyramid2.h
 delete mode 100644 Sample/HardParticle/Pyramid3.cpp
 delete mode 100644 Sample/HardParticle/Pyramid3.h
 delete mode 100644 Sample/HardParticle/Pyramid4.cpp
 delete mode 100644 Sample/HardParticle/Pyramid4.h
 delete mode 100644 Sample/HardParticle/Pyramid6.cpp
 delete mode 100644 Sample/HardParticle/Pyramid6.h
 delete mode 100644 Sample/HardParticle/TruncatedCube.cpp
 delete mode 100644 Sample/HardParticle/TruncatedCube.h

diff --git a/Sample/HardParticle/Bipyramid4.cpp b/Sample/HardParticle/Bipyramid4.cpp
deleted file mode 100644
index 1da6cbd8710..00000000000
--- a/Sample/HardParticle/Bipyramid4.cpp
+++ /dev/null
@@ -1,99 +0,0 @@
-//  ************************************************************************************************
-//
-//  BornAgain: simulate and fit reflection and scattering
-//
-//! @file      Sample/HardParticle/Bipyramid4.cpp
-//! @brief     Implements class Bipyramid4.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-//  ************************************************************************************************
-
-#include "Sample/HardParticle/Bipyramid4.h"
-#include "Base/Math/Constants.h"
-#include "Base/Math/Functions.h"
-#include "Sample/HardParticle/Pyramid4.h"
-
-const ff::Topology Bipyramid4::topology = {{{{3, 2, 1, 0}, true},
-                                            {{0, 1, 5, 4}, false},
-                                            {{1, 2, 6, 5}, false},
-                                            {{2, 3, 7, 6}, false},
-                                            {{3, 0, 4, 7}, false},
-                                            {{4, 5, 9, 8}, false},
-                                            {{5, 6, 10, 9}, false},
-                                            {{6, 7, 11, 10}, false},
-                                            {{7, 4, 8, 11}, false},
-                                            {{8, 9, 10, 11}, true}},
-                                           false};
-
-Bipyramid4::Bipyramid4(const std::vector<double> P)
-    : IFormFactorPolyhedron(P)
-    , m_length(m_P[0])
-    , m_height(m_P[1])
-    , m_height_ratio(m_P[2])
-    , m_alpha(m_P[3])
-{
-    validateOrThrow();
-}
-
-Bipyramid4::Bipyramid4(double length, double height, double height_ratio, double alpha)
-    : Bipyramid4(std::vector<double>{length, height, height_ratio, alpha})
-{
-}
-
-std::string Bipyramid4::validate() const
-{
-    std::vector<std::string> errs;
-    requestGt0(errs, m_length, "length");
-    requestGt0(errs, m_height, "height");
-    requestGt0(errs, m_height_ratio, "height_ratio");
-
-    const double cot_alpha = Math::cot(m_alpha);
-    if (m_alpha <= 0 || !std::isfinite(cot_alpha) || cot_alpha < 0)
-        errs.push_back("pyramid angle alpha=" + std::to_string(m_alpha) + " out of bounds");
-
-    if (!errs.empty())
-        return jointError(errs);
-
-    const double x = m_height_ratio;
-    const double r = cot_alpha * 2 * m_height / m_length;
-    if (std::max(1., x) * r > 1)
-        errs.push_back(
-            "parameters violate condition 2*height <= length*tan(alpha)*min(1,1/height_ratio)");
-    if (!errs.empty())
-        return jointError(errs);
-
-    const double a = m_length / 2 * (1 - r);
-    const double b = m_length / 2;
-    const double c = m_length / 2 * (1 - r * x);
-
-    const double dzcom =
-        m_height * ((x * x - 1) / 2 - 2 * r * (x * x * x - 1) / 3 + r * r * (x * x * x * x - 1) / 4)
-        / ((x + 1) - r * (x * x + 1) + r * r * (x * x * x + 1) / 3);
-    const double za = -dzcom - m_height;
-    const double zb = -dzcom;
-    const double zc = -dzcom + x * m_height;
-
-    setPolyhedron(topology, za,
-                  {// base:
-                   {-a, -a, za},
-                   {a, -a, za},
-                   {a, a, za},
-                   {-a, a, za},
-                   // middle
-                   {-b, -b, zb},
-                   {b, -b, zb},
-                   {b, b, zb},
-                   {-b, b, zb},
-                   // top
-                   {-c, -c, zc},
-                   {c, -c, zc},
-                   {c, c, zc},
-                   {-c, c, zc}});
-
-    m_validated = true;
-    return "";
-}
diff --git a/Sample/HardParticle/Bipyramid4.h b/Sample/HardParticle/Bipyramid4.h
deleted file mode 100644
index b45d35cb358..00000000000
--- a/Sample/HardParticle/Bipyramid4.h
+++ /dev/null
@@ -1,68 +0,0 @@
-//  ************************************************************************************************
-//
-//  BornAgain: simulate and fit reflection and scattering
-//
-//! @file      Sample/HardParticle/Bipyramid4.h
-//! @brief     Defines class Bipyramid4
-//!
-//! @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 BORNAGAIN_SAMPLE_HARDPARTICLE_BIPYRAMID4_H
-#define BORNAGAIN_SAMPLE_HARDPARTICLE_BIPYRAMID4_H
-
-#include "Sample/HardParticle/IFormFactorPolyhedron.h"
-
-//! A truncated bifrustum with quadratic base.
-//! @ingroup hardParticle
-
-class Bipyramid4 : public IFormFactorPolyhedron {
-public:
-    Bipyramid4(double length, double height, double height_ratio, double alpha);
-#ifndef USER_API
-    Bipyramid4(std::vector<double> P);
-    Bipyramid4* clone() const override
-    {
-        return new Bipyramid4(m_length, m_height, m_height_ratio, m_alpha);
-    }
-    std::string className() const final
-    {
-        return "Bipyramid4";
-    }
-    std::vector<ParaMeta> parDefs() const final
-    {
-        return {{"Length", "nm"}, {"Height", "nm"}, {"HeightRatio", ""}, {"Alpha", "rad"}};
-    }
-    double length() const
-    {
-        return m_length;
-    }
-    double height() const
-    {
-        return m_height;
-    }
-    double heightRatio() const
-    {
-        return m_height_ratio;
-    }
-    double alpha() const
-    {
-        return m_alpha;
-    }
-    std::string validate() const override;
-#endif // USER_API
-
-private:
-    static const ff::Topology topology;
-
-    const double& m_length;
-    const double& m_height;
-    const double& m_height_ratio;
-    const double& m_alpha;
-};
-
-#endif // BORNAGAIN_SAMPLE_HARDPARTICLE_BIPYRAMID4_H
diff --git a/Sample/HardParticle/Box.cpp b/Sample/HardParticle/Box.cpp
deleted file mode 100644
index 01bb8b056f1..00000000000
--- a/Sample/HardParticle/Box.cpp
+++ /dev/null
@@ -1,57 +0,0 @@
-//  ************************************************************************************************
-//
-//  BornAgain: simulate and fit reflection and scattering
-//
-//! @file      Sample/HardParticle/Box.cpp
-//! @brief     Implements class Box.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-//  ************************************************************************************************
-
-#include "Sample/HardParticle/Box.h"
-#include "Base/Math/Functions.h"
-#include "Base/Util/Assert.h"
-
-Box::Box(const std::vector<double> P)
-    : IFormFactorPrism(P)
-    , m_length(m_P[0])
-    , m_width(m_P[1])
-    , m_height(m_P[2])
-{
-    validateOrThrow();
-}
-
-Box::Box(double length, double width, double height)
-    : Box(std::vector<double>{length, width, height})
-{
-}
-
-complex_t Box::formfactor(C3 q) const
-{
-    ASSERT(m_validated);
-    complex_t qzHdiv2 = m_height / 2 * q.z();
-    return m_length * m_width * m_height * Math::sinc(m_length / 2 * q.x())
-           * Math::sinc(m_width / 2 * q.y()) * Math::sinc(qzHdiv2) * exp_I(qzHdiv2);
-}
-
-std::string Box::validate() const
-{
-    std::vector<std::string> errs;
-    requestGt0(errs, m_length, "length");
-    requestGt0(errs, m_width, "width");
-    requestGt0(errs, m_height, "height");
-    if (!errs.empty())
-        return jointError(errs);
-
-    double a = m_length / 2;
-    double b = m_width / 2;
-    std::vector<R3> base_vertices{{a, b, 0.}, {-a, b, 0.}, {-a, -b, 0.}, {a, -b, 0}};
-    setPrism(true, base_vertices);
-
-    m_validated = true;
-    return "";
-}
diff --git a/Sample/HardParticle/Box.h b/Sample/HardParticle/Box.h
deleted file mode 100644
index 944183a6c41..00000000000
--- a/Sample/HardParticle/Box.h
+++ /dev/null
@@ -1,75 +0,0 @@
-//  ************************************************************************************************
-//
-//  BornAgain: simulate and fit reflection and scattering
-//
-//! @file      Sample/HardParticle/Box.h
-//! @brief     Defines class Box.
-//!
-//! @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 BORNAGAIN_SAMPLE_HARDPARTICLE_BOX_H
-#define BORNAGAIN_SAMPLE_HARDPARTICLE_BOX_H
-
-#include "Sample/HardParticle/IFormFactorPrism.h"
-
-//! A rectangular prism (parallelepiped).
-//! @ingroup hardParticle
-
-class Box : public IFormFactorPrism {
-public:
-    Box(double length, double width, double height);
-#ifndef USER_API
-    Box(std::vector<double> P);
-
-    Box* clone() const override
-    {
-        return new Box(m_length, m_width, m_height);
-    }
-    std::string className() const final
-    {
-        return "Box";
-    }
-
-    std::vector<ParaMeta> parDefs() const final
-    {
-        return {{"Length", "nm"}, {"Width", "nm"}, {"Height", "nm"}};
-    }
-
-    double length() const
-    {
-        return m_length;
-    }
-    double width() const
-    {
-        return m_width;
-    }
-    double height() const override
-    {
-        return m_height;
-    }
-
-    double volume() const override
-    {
-        return m_length * m_height * m_width;
-    }
-    double radialExtension() const override
-    {
-        return m_length / 2.0;
-    }
-    complex_t formfactor(C3 q) const override;
-
-    std::string validate() const override;
-
-private:
-    const double& m_length;
-    const double& m_width;
-    const double& m_height;
-#endif // USER_API
-};
-
-#endif // BORNAGAIN_SAMPLE_HARDPARTICLE_BOX_H
diff --git a/Sample/HardParticle/CantellatedCube.cpp b/Sample/HardParticle/CantellatedCube.cpp
deleted file mode 100644
index 118ea85ed29..00000000000
--- a/Sample/HardParticle/CantellatedCube.cpp
+++ /dev/null
@@ -1,86 +0,0 @@
-//  ************************************************************************************************
-//
-//  BornAgain: simulate and fit reflection and scattering
-//
-//! @file      Sample/HardParticle/CantellatedCube.cpp
-//! @brief     Implements class CantellatedCube.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-//  ************************************************************************************************
-
-#include "Sample/HardParticle/CantellatedCube.h"
-
-const ff::Topology CantellatedCube::topology = {{
-                                                    /*  0 */ {{0, 1, 2, 3}, true},
-                                                    /*  1 */ {{0, 8, 5, 1}, true},
-                                                    /*  2 */ {{1, 9, 6, 2}, true},
-                                                    /*  3 */ {{2, 10, 7, 3}, true},
-                                                    /*  4 */ {{3, 11, 4, 0}, true},
-                                                    /*  5 */ {{0, 4, 8}, false},
-                                                    /*  6 */ {{1, 5, 9}, false},
-                                                    /*  7 */ {{2, 6, 10}, false},
-                                                    /*  8 */ {{3, 7, 11}, false},
-                                                    /*  9 */ {{4, 12, 16, 8}, true},
-                                                    /* 10 */ {{5, 13, 17, 9}, true},
-                                                    /* 11 */ {{4, 11, 19, 12}, true},
-                                                    /* 12 */ {{5, 8, 16, 13}, true},
-                                                    /* 13 */ {{7, 10, 18, 15}, true},
-                                                    /* 14 */ {{6, 9, 17, 14}, true},
-                                                    /* 15 */ {{7, 15, 19, 11}, true},
-                                                    /* 16 */ {{6, 14, 18, 10}, true},
-                                                    /* 17 */ {{13, 21, 17}, false},
-                                                    /* 18 */ {{12, 20, 16}, false},
-                                                    /* 19 */ {{15, 23, 19}, false},
-                                                    /* 20 */ {{14, 22, 18}, false},
-                                                    /* 21 */ {{14, 17, 21, 22}, true},
-                                                    /* 22 */ {{13, 16, 20, 21}, true},
-                                                    /* 23 */ {{12, 19, 23, 20}, true},
-                                                    /* 24 */ {{15, 18, 22, 23}, true},
-                                                    /* 25 */ {{20, 23, 22, 21}, true},
-                                                },
-                                                true};
-
-CantellatedCube::CantellatedCube(const std::vector<double> P)
-    : IFormFactorPolyhedron(P)
-    , m_length(m_P[0])
-    , m_removed_length(m_P[1])
-{
-    validateOrThrow();
-}
-
-CantellatedCube::CantellatedCube(double length, double removed_length)
-    : CantellatedCube(std::vector<double>{length, removed_length})
-{
-}
-
-std::string CantellatedCube::validate() const
-{
-    std::vector<std::string> errs;
-    requestGt0(errs, m_length, "length");
-    requestGe0(errs, m_removed_length, "removed_length");
-    if (!errs.empty())
-        return jointError(errs);
-
-    if (m_removed_length > 0.5 * m_length) {
-        errs.push_back("parameters violate condition removed_length <= 0.5*length");
-        return jointError(errs);
-    }
-
-    double a = m_length / 2;
-    double c = a - m_removed_length;
-
-    setPolyhedron(topology, -a, {{-c, -c, +a},                                           // point 0
-                                 {+c, -c, +a}, {+c, +c, +a}, {-c, +c, +a}, {-a, -c, +c}, // point 4
-                                 {+c, -a, +c}, {+a, +c, +c}, {-c, +a, +c}, {-c, -a, +c}, // point 8
-                                 {+a, -c, +c}, {+c, +a, +c}, {-a, +c, +c}, {-a, -c, -c}, // point 12
-                                 {+c, -a, -c}, {+a, +c, -c}, {-c, +a, -c}, {-c, -a, -c}, // point 16
-                                 {+a, -c, -c}, {+c, +a, -c}, {-a, +c, -c}, {-c, -c, -a}, // point 20
-                                 {+c, -c, -a}, {+c, +c, -a}, {-c, +c, -a}});
-
-    m_validated = true;
-    return "";
-}
diff --git a/Sample/HardParticle/CantellatedCube.h b/Sample/HardParticle/CantellatedCube.h
deleted file mode 100644
index 84e111af1b2..00000000000
--- a/Sample/HardParticle/CantellatedCube.h
+++ /dev/null
@@ -1,59 +0,0 @@
-//  ************************************************************************************************
-//
-//  BornAgain: simulate and fit reflection and scattering
-//
-//! @file      Sample/HardParticle/CantellatedCube.h
-//! @brief     Defines class CantellatedCube.
-//!
-//! @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 BORNAGAIN_SAMPLE_HARDPARTICLE_CANTELLATEDCUBE_H
-#define BORNAGAIN_SAMPLE_HARDPARTICLE_CANTELLATEDCUBE_H
-
-#include "Sample/HardParticle/IFormFactorPolyhedron.h"
-
-//! A cube, with truncation of all edges and corners, as in Croset (2017) Fig 7
-//! @ingroup hardParticle
-
-class CantellatedCube : public IFormFactorPolyhedron {
-public:
-    CantellatedCube(double length, double removed_length);
-#ifndef USER_API
-    CantellatedCube(std::vector<double> P);
-
-    CantellatedCube* clone() const override
-    {
-        return new CantellatedCube(m_length, m_removed_length);
-    }
-    std::string className() const final
-    {
-        return "CantellatedCube";
-    }
-    std::vector<ParaMeta> parDefs() const final
-    {
-        return {{"Length", "nm"}, {"RemovedLength", "nm"}};
-    }
-
-    double length() const
-    {
-        return m_length;
-    }
-    double removedLength() const
-    {
-        return m_removed_length;
-    }
-    std::string validate() const override;
-#endif // USER_API
-
-private:
-    static const ff::Topology topology;
-    const double& m_length;
-    const double& m_removed_length;
-};
-
-#endif // BORNAGAIN_SAMPLE_HARDPARTICLE_CANTELLATEDCUBE_H
diff --git a/Sample/HardParticle/Dodecahedron.cpp b/Sample/HardParticle/Dodecahedron.cpp
deleted file mode 100644
index e465bb766e8..00000000000
--- a/Sample/HardParticle/Dodecahedron.cpp
+++ /dev/null
@@ -1,29 +0,0 @@
-//  ************************************************************************************************
-//
-//  BornAgain: simulate and fit reflection and scattering
-//
-//! @file      Sample/HardParticle/Dodecahedron.cpp
-//! @brief     Implements class Dodecahedron.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-//  ************************************************************************************************
-
-#include "Sample/HardParticle/Dodecahedron.h"
-#include <ff/Make.h>
-
-Dodecahedron::Dodecahedron(const std::vector<double> P)
-    : IFormFactorPolyhedron(P)
-    , m_edge(m_P[0])
-{
-    pimpl.reset(ff::make::Dodecahedron(m_edge));
-    m_validated = true;
-}
-
-Dodecahedron::Dodecahedron(double edge)
-    : Dodecahedron(std::vector<double>{edge})
-{
-}
diff --git a/Sample/HardParticle/Dodecahedron.h b/Sample/HardParticle/Dodecahedron.h
deleted file mode 100644
index 375f15a7e11..00000000000
--- a/Sample/HardParticle/Dodecahedron.h
+++ /dev/null
@@ -1,53 +0,0 @@
-//  ************************************************************************************************
-//
-//  BornAgain: simulate and fit reflection and scattering
-//
-//! @file      Sample/HardParticle/Dodecahedron.h
-//! @brief     Defines class Dodecahedron.
-//!
-//! @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 BORNAGAIN_SAMPLE_HARDPARTICLE_DODECAHEDRON_H
-#define BORNAGAIN_SAMPLE_HARDPARTICLE_DODECAHEDRON_H
-
-#include "Sample/HardParticle/IFormFactorPolyhedron.h"
-
-//! A regular dodecahedron.
-//! @ingroup hardParticle
-
-class Dodecahedron : public IFormFactorPolyhedron {
-public:
-    Dodecahedron(double edge);
-#ifndef USER_API
-    Dodecahedron(std::vector<double> P);
-
-    Dodecahedron* clone() const override
-    {
-        return new Dodecahedron(m_edge);
-    }
-    std::string className() const final
-    {
-        return "Dodecahedron";
-    }
-    std::vector<ParaMeta> parDefs() const final
-    {
-        return {{"Edge", "nm"}};
-    }
-
-    double edge() const
-    {
-        return m_edge;
-    }
-
-private:
-    static const ff::Topology topology;
-    const double& m_edge;
-#endif // USER_API
-};
-
-#endif // BORNAGAIN_SAMPLE_HARDPARTICLE_DODECAHEDRON_H
diff --git a/Sample/HardParticle/HardParticles.h b/Sample/HardParticle/HardParticles.h
index 645fc146bd0..b2d415e5bd2 100644
--- a/Sample/HardParticle/HardParticles.h
+++ b/Sample/HardParticle/HardParticles.h
@@ -20,34 +20,24 @@
 #ifndef BORNAGAIN_SAMPLE_HARDPARTICLE_HARDPARTICLES_H
 #define BORNAGAIN_SAMPLE_HARDPARTICLE_HARDPARTICLES_H
 
-#include "Sample/HardParticle/Bar.h"
-#include "Sample/HardParticle/Bipyramid4.h"
-#include "Sample/HardParticle/Box.h"
-#include "Sample/HardParticle/CantellatedCube.h"
+#include "Sample/HardParticle/Polyhedra.h"
+
 #include "Sample/HardParticle/Cone.h"
-#include "Sample/HardParticle/CosineRipple.h"
 #include "Sample/HardParticle/Cylinder.h"
-#include "Sample/HardParticle/Dodecahedron.h"
 #include "Sample/HardParticle/EllipsoidalCylinder.h"
 #include "Sample/HardParticle/HemiEllipsoid.h"
 #include "Sample/HardParticle/HorizontalCylinder.h"
-#include "Sample/HardParticle/Icosahedron.h"
-#include "Sample/HardParticle/LongBoxGauss.h"
-#include "Sample/HardParticle/LongBoxLorentz.h"
-#include "Sample/HardParticle/PlatonicOctahedron.h"
-#include "Sample/HardParticle/PlatonicTetrahedron.h"
-#include "Sample/HardParticle/Prism3.h"
-#include "Sample/HardParticle/Prism6.h"
-#include "Sample/HardParticle/Pyramid2.h"
-#include "Sample/HardParticle/Pyramid3.h"
-#include "Sample/HardParticle/Pyramid4.h"
-#include "Sample/HardParticle/Pyramid6.h"
-#include "Sample/HardParticle/SawtoothRipple.h"
 #include "Sample/HardParticle/Sphere.h"
 #include "Sample/HardParticle/Spheroid.h"
-#include "Sample/HardParticle/TruncatedCube.h"
 #include "Sample/HardParticle/TruncatedSphere.h"
 #include "Sample/HardParticle/TruncatedSpheroid.h"
 
+#include "Sample/HardParticle/Bar.h"
+#include "Sample/HardParticle/CosineRipple.h"
+#include "Sample/HardParticle/SawtoothRipple.h"
+
+#include "Sample/HardParticle/LongBoxGauss.h"
+#include "Sample/HardParticle/LongBoxLorentz.h"
+
 #endif // BORNAGAIN_SAMPLE_HARDPARTICLE_HARDPARTICLES_H
 #endif // USER_API
diff --git a/Sample/HardParticle/Icosahedron.cpp b/Sample/HardParticle/Icosahedron.cpp
deleted file mode 100644
index 3b454171574..00000000000
--- a/Sample/HardParticle/Icosahedron.cpp
+++ /dev/null
@@ -1,29 +0,0 @@
-//  ************************************************************************************************
-//
-//  BornAgain: simulate and fit reflection and scattering
-//
-//! @file      Sample/HardParticle/Icosahedron.cpp
-//! @brief     Implements class Icosahedron.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-//  ************************************************************************************************
-
-#include "Sample/HardParticle/Icosahedron.h"
-#include <ff/Make.h>
-
-Icosahedron::Icosahedron(const std::vector<double> P)
-    : IFormFactorPolyhedron(P)
-    , m_edge(m_P[0])
-{
-    pimpl.reset(ff::make::Icosahedron(m_edge));
-    m_validated = true;
-}
-
-Icosahedron::Icosahedron(double edge)
-    : Icosahedron(std::vector<double>{edge})
-{
-}
diff --git a/Sample/HardParticle/Icosahedron.h b/Sample/HardParticle/Icosahedron.h
deleted file mode 100644
index f82d1b5aa9f..00000000000
--- a/Sample/HardParticle/Icosahedron.h
+++ /dev/null
@@ -1,53 +0,0 @@
-//  ************************************************************************************************
-//
-//  BornAgain: simulate and fit reflection and scattering
-//
-//! @file      Sample/HardParticle/Icosahedron.h
-//! @brief     Defines class Icosahedron.
-//!
-//! @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 BORNAGAIN_SAMPLE_HARDPARTICLE_ICOSAHEDRON_H
-#define BORNAGAIN_SAMPLE_HARDPARTICLE_ICOSAHEDRON_H
-
-#include "Sample/HardParticle/IFormFactorPolyhedron.h"
-
-//! A regular icosahedron.
-//! @ingroup hardParticle
-
-class Icosahedron : public IFormFactorPolyhedron {
-public:
-    Icosahedron(double edge);
-#ifndef USER_API
-    Icosahedron(std::vector<double> P);
-
-    Icosahedron* clone() const override
-    {
-        return new Icosahedron(m_edge);
-    }
-    std::string className() const final
-    {
-        return "Icosahedron";
-    }
-    std::vector<ParaMeta> parDefs() const final
-    {
-        return {{"Edge", "nm"}};
-    }
-
-    double edge() const
-    {
-        return m_edge;
-    }
-
-private:
-    static const ff::Topology topology;
-    const double& m_edge;
-#endif // USER_API
-};
-
-#endif // BORNAGAIN_SAMPLE_HARDPARTICLE_ICOSAHEDRON_H
diff --git a/Sample/HardParticle/PlatonicOctahedron.cpp b/Sample/HardParticle/PlatonicOctahedron.cpp
deleted file mode 100644
index ce3c045a44c..00000000000
--- a/Sample/HardParticle/PlatonicOctahedron.cpp
+++ /dev/null
@@ -1,31 +0,0 @@
-//  ************************************************************************************************
-//
-//  BornAgain: simulate and fit reflection and scattering
-//
-//! @file      Sample/HardParticle/PlatonicOctahedron.cpp
-//! @brief     Implements class PlatonicOctahedron.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-//  ************************************************************************************************
-
-#include "Sample/HardParticle/PlatonicOctahedron.h"
-#include "Base/Math/Constants.h"
-#include "Base/Math/Functions.h"
-#include <ff/Make.h>
-
-PlatonicOctahedron::PlatonicOctahedron(const std::vector<double> P)
-    : IFormFactorPolyhedron(P)
-    , m_edge(m_P[0])
-{
-    pimpl.reset(ff::make::Octahedron(m_edge));
-    m_validated = true;
-}
-
-PlatonicOctahedron::PlatonicOctahedron(double edge)
-    : PlatonicOctahedron(std::vector<double>{edge})
-{
-}
diff --git a/Sample/HardParticle/PlatonicOctahedron.h b/Sample/HardParticle/PlatonicOctahedron.h
deleted file mode 100644
index ad20c58df14..00000000000
--- a/Sample/HardParticle/PlatonicOctahedron.h
+++ /dev/null
@@ -1,58 +0,0 @@
-//  ************************************************************************************************
-//
-//  BornAgain: simulate and fit reflection and scattering
-//
-//! @file      Sample/HardParticle/PlatonicOctahedron.h
-//! @brief     Defines class PlatonicOctahedron
-//!
-//! @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 BORNAGAIN_SAMPLE_HARDPARTICLE_PLATONICOCTAHEDRON_H
-#define BORNAGAIN_SAMPLE_HARDPARTICLE_PLATONICOCTAHEDRON_H
-
-#include "Sample/HardParticle/IFormFactorPolyhedron.h"
-
-//! A truncated bifrustum with quadratic base.
-//! @ingroup hardParticle
-
-class PlatonicOctahedron : public IFormFactorPolyhedron {
-public:
-    PlatonicOctahedron(double edge);
-#ifndef USER_API
-    PlatonicOctahedron(std::vector<double> P);
-
-    PlatonicOctahedron* clone() const override
-    {
-        return new PlatonicOctahedron(m_edge);
-    }
-    std::string className() const final
-    {
-        return "PlatonicOctahedron";
-    }
-    std::vector<ParaMeta> parDefs() const final
-    {
-        return {{"Edge", "nm"}};
-    }
-
-    double edge() const
-    {
-        return m_edge;
-    }
-    double height() const
-    {
-        return sqrt(1 / 2.) * m_edge;
-    }
-
-private:
-    static const ff::Topology topology;
-
-    const double& m_edge;
-#endif // USER_API
-};
-
-#endif // BORNAGAIN_SAMPLE_HARDPARTICLE_PLATONICOCTAHEDRON_H
diff --git a/Sample/HardParticle/PlatonicTetrahedron.cpp b/Sample/HardParticle/PlatonicTetrahedron.cpp
deleted file mode 100644
index fcc76f7420d..00000000000
--- a/Sample/HardParticle/PlatonicTetrahedron.cpp
+++ /dev/null
@@ -1,31 +0,0 @@
-//  ************************************************************************************************
-//
-//  BornAgain: simulate and fit reflection and scattering
-//
-//! @file      Sample/HardParticle/PlatonicTetrahedron.cpp
-//! @brief     Implements class PlatonicTetrahedron.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-//  ************************************************************************************************
-
-#include "Sample/HardParticle/PlatonicTetrahedron.h"
-#include "Base/Math/Constants.h"
-#include "Base/Math/Functions.h"
-#include <ff/Make.h>
-
-PlatonicTetrahedron::PlatonicTetrahedron(const std::vector<double> P)
-    : IFormFactorPolyhedron(P)
-    , m_edge(m_P[0])
-{
-    pimpl.reset(ff::make::Tetrahedron(m_edge));
-    m_validated = true;
-}
-
-PlatonicTetrahedron::PlatonicTetrahedron(double edge)
-    : PlatonicTetrahedron(std::vector<double>{edge})
-{
-}
diff --git a/Sample/HardParticle/PlatonicTetrahedron.h b/Sample/HardParticle/PlatonicTetrahedron.h
deleted file mode 100644
index 6ce1075879b..00000000000
--- a/Sample/HardParticle/PlatonicTetrahedron.h
+++ /dev/null
@@ -1,57 +0,0 @@
-//  ************************************************************************************************
-//
-//  BornAgain: simulate and fit reflection and scattering
-//
-//! @file      Sample/HardParticle/PlatonicTetrahedron.h
-//! @brief     Defines class PlatonicTetrahedron
-//!
-//! @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 BORNAGAIN_SAMPLE_HARDPARTICLE_PLATONICTETRAHEDRON_H
-#define BORNAGAIN_SAMPLE_HARDPARTICLE_PLATONICTETRAHEDRON_H
-
-#include "Sample/HardParticle/IFormFactorPolyhedron.h"
-
-//! A frustum with equilateral trigonal base.
-//! @ingroup hardParticle
-
-class PlatonicTetrahedron : public IFormFactorPolyhedron {
-public:
-    PlatonicTetrahedron(double edge);
-#ifndef USER_API
-    PlatonicTetrahedron(std::vector<double> P);
-
-    PlatonicTetrahedron* clone() const override
-    {
-        return new PlatonicTetrahedron(m_edge);
-    }
-    std::string className() const final
-    {
-        return "PlatonicTetrahedron";
-    }
-    std::vector<ParaMeta> parDefs() const final
-    {
-        return {{"Edge", "nm"}};
-    }
-
-    double edge() const
-    {
-        return m_edge;
-    }
-    double height() const
-    {
-        return sqrt(2. / 3) * m_edge;
-    }
-
-private:
-    static const ff::Topology topology;
-    const double& m_edge;
-#endif // USER_API
-};
-
-#endif // BORNAGAIN_SAMPLE_HARDPARTICLE_PLATONICTETRAHEDRON_H
diff --git a/Sample/HardParticle/Polyhedra.cpp b/Sample/HardParticle/Polyhedra.cpp
new file mode 100644
index 00000000000..b18399a6d77
--- /dev/null
+++ b/Sample/HardParticle/Polyhedra.cpp
@@ -0,0 +1,721 @@
+//  ************************************************************************************************
+//
+//  BornAgain: simulate and fit reflection and scattering
+//
+//! @file      Sample/HardParticle/Box.cpp
+//! @brief     Implements class Box.
+//!
+//! @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 "Base/Math/Functions.h"
+#include "Base/Util/Assert.h"
+#include "Sample/HardParticle/Polyhedra.h"
+
+Box::Box(const std::vector<double> P)
+    : IFormFactorPrism(P)
+    , m_length(m_P[0])
+    , m_width(m_P[1])
+    , m_height(m_P[2])
+{
+    validateOrThrow();
+}
+
+Box::Box(double length, double width, double height)
+    : Box(std::vector<double>{length, width, height})
+{
+}
+
+complex_t Box::formfactor(C3 q) const
+{
+    ASSERT(m_validated);
+    complex_t qzHdiv2 = m_height / 2 * q.z();
+    return m_length * m_width * m_height * Math::sinc(m_length / 2 * q.x())
+           * Math::sinc(m_width / 2 * q.y()) * Math::sinc(qzHdiv2) * exp_I(qzHdiv2);
+}
+
+std::string Box::validate() const
+{
+    std::vector<std::string> errs;
+    requestGt0(errs, m_length, "length");
+    requestGt0(errs, m_width, "width");
+    requestGt0(errs, m_height, "height");
+    if (!errs.empty())
+        return jointError(errs);
+
+    double a = m_length / 2;
+    double b = m_width / 2;
+    std::vector<R3> base_vertices{{a, b, 0.}, {-a, b, 0.}, {-a, -b, 0.}, {a, -b, 0}};
+    setPrism(true, base_vertices);
+
+    m_validated = true;
+    return "";
+}
+//  ************************************************************************************************
+//
+//  BornAgain: simulate and fit reflection and scattering
+//
+//! @file      Sample/HardParticle/Prism3.cpp
+//! @brief     Implements class Prism3.
+//!
+//! @homepage  http://www.bornagainproject.org
+//! @license   GNU General Public License v3 or higher (see COPYING)
+//! @copyright Forschungszentrum Jülich GmbH 2018
+//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
+//
+//  ************************************************************************************************
+
+#include "Sample/HardParticle/Polyhedra.h"
+#include <ff/Make.h>
+
+Prism3::Prism3(const std::vector<double> P)
+    : IFormFactorPrism(P)
+    , m_base_edge(m_P[0])
+    , m_height(m_P[1])
+{
+    pimpl.reset(ff::make::Prism3(m_base_edge, m_height));
+    m_validated = true;
+}
+
+Prism3::Prism3(double base_edge, double height)
+    : Prism3(std::vector<double>{base_edge, height})
+{
+}
+//  ************************************************************************************************
+//
+//  BornAgain: simulate and fit reflection and scattering
+//
+//! @file      Sample/HardParticle/Prism6.cpp
+//! @brief     Implements class Prism6.
+//!
+//! @homepage  http://www.bornagainproject.org
+//! @license   GNU General Public License v3 or higher (see COPYING)
+//! @copyright Forschungszentrum Jülich GmbH 2018
+//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
+//
+//  ************************************************************************************************
+
+#include "Sample/HardParticle/Polyhedra.h"
+#include <ff/Make.h>
+
+Prism6::Prism6(const std::vector<double> P)
+    : IFormFactorPrism(P)
+    , m_base_edge(m_P[0])
+    , m_height(m_P[1])
+{
+    pimpl.reset(ff::make::Prism6(m_base_edge, m_height));
+    m_validated = true;
+}
+
+Prism6::Prism6(double base_edge, double height)
+    : Prism6(std::vector<double>{base_edge, height})
+{
+}
+//  ************************************************************************************************
+//
+//  BornAgain: simulate and fit reflection and scattering
+//
+//! @file      Sample/HardParticle/PlatonicTetrahedron.cpp
+//! @brief     Implements class PlatonicTetrahedron.
+//!
+//! @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 "Base/Math/Constants.h"
+#include "Base/Math/Functions.h"
+#include "Sample/HardParticle/Polyhedra.h"
+#include <ff/Make.h>
+
+PlatonicTetrahedron::PlatonicTetrahedron(const std::vector<double> P)
+    : IFormFactorPolyhedron(P)
+    , m_edge(m_P[0])
+{
+    pimpl.reset(ff::make::Tetrahedron(m_edge));
+    m_validated = true;
+}
+
+PlatonicTetrahedron::PlatonicTetrahedron(double edge)
+    : PlatonicTetrahedron(std::vector<double>{edge})
+{
+}
+//  ************************************************************************************************
+//
+//  BornAgain: simulate and fit reflection and scattering
+//
+//! @file      Sample/HardParticle/PlatonicOctahedron.cpp
+//! @brief     Implements class PlatonicOctahedron.
+//!
+//! @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 "Base/Math/Constants.h"
+#include "Base/Math/Functions.h"
+#include "Sample/HardParticle/Polyhedra.h"
+#include <ff/Make.h>
+
+PlatonicOctahedron::PlatonicOctahedron(const std::vector<double> P)
+    : IFormFactorPolyhedron(P)
+    , m_edge(m_P[0])
+{
+    pimpl.reset(ff::make::Octahedron(m_edge));
+    m_validated = true;
+}
+
+PlatonicOctahedron::PlatonicOctahedron(double edge)
+    : PlatonicOctahedron(std::vector<double>{edge})
+{
+}
+//  ************************************************************************************************
+//
+//  BornAgain: simulate and fit reflection and scattering
+//
+//! @file      Sample/HardParticle/Dodecahedron.cpp
+//! @brief     Implements class Dodecahedron.
+//!
+//! @homepage  http://www.bornagainproject.org
+//! @license   GNU General Public License v3 or higher (see COPYING)
+//! @copyright Forschungszentrum Jülich GmbH 2018
+//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
+//
+//  ************************************************************************************************
+
+#include "Sample/HardParticle/Polyhedra.h"
+#include <ff/Make.h>
+
+Dodecahedron::Dodecahedron(const std::vector<double> P)
+    : IFormFactorPolyhedron(P)
+    , m_edge(m_P[0])
+{
+    pimpl.reset(ff::make::Dodecahedron(m_edge));
+    m_validated = true;
+}
+
+Dodecahedron::Dodecahedron(double edge)
+    : Dodecahedron(std::vector<double>{edge})
+{
+}
+//  ************************************************************************************************
+//
+//  BornAgain: simulate and fit reflection and scattering
+//
+//! @file      Sample/HardParticle/Icosahedron.cpp
+//! @brief     Implements class Icosahedron.
+//!
+//! @homepage  http://www.bornagainproject.org
+//! @license   GNU General Public License v3 or higher (see COPYING)
+//! @copyright Forschungszentrum Jülich GmbH 2018
+//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
+//
+//  ************************************************************************************************
+
+#include "Sample/HardParticle/Polyhedra.h"
+#include <ff/Make.h>
+
+Icosahedron::Icosahedron(const std::vector<double> P)
+    : IFormFactorPolyhedron(P)
+    , m_edge(m_P[0])
+{
+    pimpl.reset(ff::make::Icosahedron(m_edge));
+    m_validated = true;
+}
+
+Icosahedron::Icosahedron(double edge)
+    : Icosahedron(std::vector<double>{edge})
+{
+}
+//  ************************************************************************************************
+//
+//  BornAgain: simulate and fit reflection and scattering
+//
+//! @file      Sample/HardParticle/Pyramid2.cpp
+//! @brief     Implements class Pyramid2.
+//!
+//! @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 "Base/Math/Constants.h"
+#include "Base/Math/Functions.h"
+#include "Sample/HardParticle/Polyhedra.h"
+#include <ff/Make.h>
+
+Pyramid2::Pyramid2(const std::vector<double> P)
+    : IFormFactorPolyhedron(P)
+    , m_length(m_P[0])
+    , m_width(m_P[1])
+    , m_height(m_P[2])
+    , m_alpha(m_P[3])
+{
+    pimpl.reset(ff::make::Pyramid2(m_length, m_width, m_height, m_alpha));
+    m_validated = true;
+}
+
+Pyramid2::Pyramid2(double length, double width, double height, double alpha)
+    : Pyramid2(std::vector<double>{length, width, height, alpha})
+{
+}
+//  ************************************************************************************************
+//
+//  BornAgain: simulate and fit reflection and scattering
+//
+//! @file      Sample/HardParticle/Pyramid3.cpp
+//! @brief     Implements class Pyramid3.
+//!
+//! @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 "Base/Math/Constants.h"
+#include "Base/Math/Functions.h"
+#include "Sample/HardParticle/Polyhedra.h"
+#include <ff/Make.h>
+
+Pyramid3::Pyramid3(const std::vector<double> P)
+    : IFormFactorPolyhedron(P)
+    , m_base_edge(m_P[0])
+    , m_height(m_P[1])
+    , m_alpha(m_P[2])
+{
+    pimpl.reset(ff::make::Pyramid3(m_base_edge, m_height, m_alpha));
+    m_validated = true;
+}
+
+Pyramid3::Pyramid3(double base_edge, double height, double alpha)
+    : Pyramid3(std::vector<double>{base_edge, height, alpha})
+{
+}
+//  ************************************************************************************************
+//
+//  BornAgain: simulate and fit reflection and scattering
+//
+//! @file      Sample/HardParticle/Pyramid4.cpp
+//! @brief     Implements class Pyramid4.
+//!
+//! @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 "Base/Math/Constants.h"
+#include "Base/Math/Functions.h"
+#include "Sample/HardParticle/Polyhedra.h"
+
+const ff::Topology Pyramid4::topology = {{{{3, 2, 1, 0}, true},
+                                          {{0, 1, 5, 4}, false},
+                                          {{1, 2, 6, 5}, false},
+                                          {{2, 3, 7, 6}, false},
+                                          {{3, 0, 4, 7}, false},
+                                          {{4, 5, 6, 7}, true}},
+                                         false};
+
+Pyramid4::Pyramid4(const std::vector<double> P)
+    : IFormFactorPolyhedron(P)
+    , m_base_edge(m_P[0])
+    , m_height(m_P[1])
+    , m_alpha(m_P[2])
+{
+    validateOrThrow();
+}
+
+Pyramid4::Pyramid4(double base_edge, double height, double alpha)
+    : Pyramid4(std::vector<double>{base_edge, height, alpha})
+{
+}
+
+std::string Pyramid4::validate() const
+{
+    std::vector<std::string> errs;
+    requestGt0(errs, m_base_edge, "base_edge");
+    requestGt0(errs, m_height, "height");
+    const double cot_alpha = Math::cot(m_alpha);
+    if (m_alpha <= 0 || !std::isfinite(cot_alpha) || cot_alpha < 0)
+        errs.push_back("pyramid angle alpha " + std::to_string(m_alpha) + " out of bounds");
+    if (!errs.empty())
+        return jointError(errs);
+
+    double r = cot_alpha * 2 * m_height / m_base_edge; // L(top)/L(base)
+    if (r > 1)
+        return jointError({"parameters violate condition 2*ctg(alpha) <= base_edge/height"});
+
+    double a = m_base_edge / 2;
+    double b = a * (1 - r);
+
+    // center of mass
+    double zcom = m_height / 4 * (a * a + 2 * a * b + 3 * b * b) / (a * a + a * b + b * b);
+
+    setPolyhedron(topology, -zcom,
+                  {// base:
+                   {-a, -a, -zcom},
+                   {a, -a, -zcom},
+                   {a, a, -zcom},
+                   {-a, a, -zcom},
+                   // top:
+                   {-b, -b, m_height - zcom},
+                   {b, -b, m_height - zcom},
+                   {b, b, m_height - zcom},
+                   {-b, b, m_height - zcom}});
+
+    m_validated = true;
+    return "";
+}
+//  ************************************************************************************************
+//
+//  BornAgain: simulate and fit reflection and scattering
+//
+//! @file      Sample/HardParticle/Pyramid6.cpp
+//! @brief     Implements class Pyramid6.
+//!
+//! @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 "Base/Math/Constants.h"
+#include "Base/Math/Functions.h"
+#include "Sample/HardParticle/Polyhedra.h"
+
+const ff::Topology Pyramid6::topology = {{{{5, 4, 3, 2, 1, 0}, true},
+                                          {{0, 1, 7, 6}, false},
+                                          {{1, 2, 8, 7}, false},
+                                          {{2, 3, 9, 8}, false},
+                                          {{3, 4, 10, 9}, false},
+                                          {{4, 5, 11, 10}, false},
+                                          {{5, 0, 6, 11}, false},
+                                          {{6, 7, 8, 9, 10, 11}, true}},
+                                         false};
+
+Pyramid6::Pyramid6(const std::vector<double> P)
+    : IFormFactorPolyhedron(P)
+    , m_base_edge(m_P[0])
+    , m_height(m_P[1])
+    , m_alpha(m_P[2])
+{
+    validateOrThrow();
+}
+
+Pyramid6::Pyramid6(double base_edge, double height, double alpha)
+    : Pyramid6(std::vector<double>{base_edge, height, alpha})
+{
+}
+
+std::string Pyramid6::validate() const
+{
+    std::vector<std::string> errs;
+    requestGt0(errs, m_base_edge, "base_edge");
+    requestGt0(errs, m_height, "height");
+    const double cot_alpha = Math::cot(m_alpha);
+    if (m_alpha <= 0 || !std::isfinite(cot_alpha) || cot_alpha < 0)
+        errs.push_back("pyramid angle alpha " + std::to_string(m_alpha) + " out of bounds");
+    if (!errs.empty())
+        return jointError(errs);
+
+    double r = cot_alpha * 2 / sqrt(3) * m_height / m_base_edge; // L(top)/L(base)
+    if (r > 1)
+        return jointError(
+            {"parameters violate condition 2/sqrt(3)*ctg(alpha) <= base_edge/height"});
+
+    double a = m_base_edge;
+    double as = a / 2;
+    double ac = a * sqrt(3) / 2;
+    double b = a * (1 - r);
+    double bs = b / 2;
+    double bc = b * sqrt(3) / 2;
+
+    double zcom = m_height / 4 * (a * a + 2 * a * b + 3 * b * b) / (a * a + a * b + b * b);
+
+    setPolyhedron(topology, -zcom,
+                  {// base:
+                   {a, 0., -zcom},
+                   {as, ac, -zcom},
+                   {-as, ac, -zcom},
+                   {-a, 0., -zcom},
+                   {-as, -ac, -zcom},
+                   {as, -ac, -zcom},
+                   // top:
+                   {b, 0., m_height - zcom},
+                   {bs, bc, m_height - zcom},
+                   {-bs, bc, m_height - zcom},
+                   {-b, 0., m_height - zcom},
+                   {-bs, -bc, m_height - zcom},
+                   {bs, -bc, m_height - zcom}});
+
+
+    m_validated = true;
+    return "";
+}
+//  ************************************************************************************************
+//
+//  BornAgain: simulate and fit reflection and scattering
+//
+//! @file      Sample/HardParticle/Bipyramid4.cpp
+//! @brief     Implements class Bipyramid4.
+//!
+//! @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 "Base/Math/Constants.h"
+#include "Base/Math/Functions.h"
+#include "Sample/HardParticle/Polyhedra.h"
+#include "Sample/HardParticle/Polyhedra.h"
+
+const ff::Topology Bipyramid4::topology = {{{{3, 2, 1, 0}, true},
+                                            {{0, 1, 5, 4}, false},
+                                            {{1, 2, 6, 5}, false},
+                                            {{2, 3, 7, 6}, false},
+                                            {{3, 0, 4, 7}, false},
+                                            {{4, 5, 9, 8}, false},
+                                            {{5, 6, 10, 9}, false},
+                                            {{6, 7, 11, 10}, false},
+                                            {{7, 4, 8, 11}, false},
+                                            {{8, 9, 10, 11}, true}},
+                                           false};
+
+Bipyramid4::Bipyramid4(const std::vector<double> P)
+    : IFormFactorPolyhedron(P)
+    , m_length(m_P[0])
+    , m_height(m_P[1])
+    , m_height_ratio(m_P[2])
+    , m_alpha(m_P[3])
+{
+    validateOrThrow();
+}
+
+Bipyramid4::Bipyramid4(double length, double height, double height_ratio, double alpha)
+    : Bipyramid4(std::vector<double>{length, height, height_ratio, alpha})
+{
+}
+
+std::string Bipyramid4::validate() const
+{
+    std::vector<std::string> errs;
+    requestGt0(errs, m_length, "length");
+    requestGt0(errs, m_height, "height");
+    requestGt0(errs, m_height_ratio, "height_ratio");
+
+    const double cot_alpha = Math::cot(m_alpha);
+    if (m_alpha <= 0 || !std::isfinite(cot_alpha) || cot_alpha < 0)
+        errs.push_back("pyramid angle alpha=" + std::to_string(m_alpha) + " out of bounds");
+
+    if (!errs.empty())
+        return jointError(errs);
+
+    const double x = m_height_ratio;
+    const double r = cot_alpha * 2 * m_height / m_length;
+    if (std::max(1., x) * r > 1)
+        errs.push_back(
+            "parameters violate condition 2*height <= length*tan(alpha)*min(1,1/height_ratio)");
+    if (!errs.empty())
+        return jointError(errs);
+
+    const double a = m_length / 2 * (1 - r);
+    const double b = m_length / 2;
+    const double c = m_length / 2 * (1 - r * x);
+
+    const double dzcom =
+        m_height * ((x * x - 1) / 2 - 2 * r * (x * x * x - 1) / 3 + r * r * (x * x * x * x - 1) / 4)
+        / ((x + 1) - r * (x * x + 1) + r * r * (x * x * x + 1) / 3);
+    const double za = -dzcom - m_height;
+    const double zb = -dzcom;
+    const double zc = -dzcom + x * m_height;
+
+    setPolyhedron(topology, za,
+                  {// base:
+                   {-a, -a, za},
+                   {a, -a, za},
+                   {a, a, za},
+                   {-a, a, za},
+                   // middle
+                   {-b, -b, zb},
+                   {b, -b, zb},
+                   {b, b, zb},
+                   {-b, b, zb},
+                   // top
+                   {-c, -c, zc},
+                   {c, -c, zc},
+                   {c, c, zc},
+                   {-c, c, zc}});
+
+    m_validated = true;
+    return "";
+}
+//  ************************************************************************************************
+//
+//  BornAgain: simulate and fit reflection and scattering
+//
+//! @file      Sample/HardParticle/CantellatedCube.cpp
+//! @brief     Implements class CantellatedCube.
+//!
+//! @homepage  http://www.bornagainproject.org
+//! @license   GNU General Public License v3 or higher (see COPYING)
+//! @copyright Forschungszentrum Jülich GmbH 2018
+//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
+//
+//  ************************************************************************************************
+
+#include "Sample/HardParticle/Polyhedra.h"
+
+const ff::Topology CantellatedCube::topology = {{
+                                                    /*  0 */ {{0, 1, 2, 3}, true},
+                                                    /*  1 */ {{0, 8, 5, 1}, true},
+                                                    /*  2 */ {{1, 9, 6, 2}, true},
+                                                    /*  3 */ {{2, 10, 7, 3}, true},
+                                                    /*  4 */ {{3, 11, 4, 0}, true},
+                                                    /*  5 */ {{0, 4, 8}, false},
+                                                    /*  6 */ {{1, 5, 9}, false},
+                                                    /*  7 */ {{2, 6, 10}, false},
+                                                    /*  8 */ {{3, 7, 11}, false},
+                                                    /*  9 */ {{4, 12, 16, 8}, true},
+                                                    /* 10 */ {{5, 13, 17, 9}, true},
+                                                    /* 11 */ {{4, 11, 19, 12}, true},
+                                                    /* 12 */ {{5, 8, 16, 13}, true},
+                                                    /* 13 */ {{7, 10, 18, 15}, true},
+                                                    /* 14 */ {{6, 9, 17, 14}, true},
+                                                    /* 15 */ {{7, 15, 19, 11}, true},
+                                                    /* 16 */ {{6, 14, 18, 10}, true},
+                                                    /* 17 */ {{13, 21, 17}, false},
+                                                    /* 18 */ {{12, 20, 16}, false},
+                                                    /* 19 */ {{15, 23, 19}, false},
+                                                    /* 20 */ {{14, 22, 18}, false},
+                                                    /* 21 */ {{14, 17, 21, 22}, true},
+                                                    /* 22 */ {{13, 16, 20, 21}, true},
+                                                    /* 23 */ {{12, 19, 23, 20}, true},
+                                                    /* 24 */ {{15, 18, 22, 23}, true},
+                                                    /* 25 */ {{20, 23, 22, 21}, true},
+                                                },
+                                                true};
+
+CantellatedCube::CantellatedCube(const std::vector<double> P)
+    : IFormFactorPolyhedron(P)
+    , m_length(m_P[0])
+    , m_removed_length(m_P[1])
+{
+    validateOrThrow();
+}
+
+CantellatedCube::CantellatedCube(double length, double removed_length)
+    : CantellatedCube(std::vector<double>{length, removed_length})
+{
+}
+
+std::string CantellatedCube::validate() const
+{
+    std::vector<std::string> errs;
+    requestGt0(errs, m_length, "length");
+    requestGe0(errs, m_removed_length, "removed_length");
+    if (!errs.empty())
+        return jointError(errs);
+
+    if (m_removed_length > 0.5 * m_length) {
+        errs.push_back("parameters violate condition removed_length <= 0.5*length");
+        return jointError(errs);
+    }
+
+    double a = m_length / 2;
+    double c = a - m_removed_length;
+
+    setPolyhedron(topology, -a, {{-c, -c, +a},                                           // point 0
+                                 {+c, -c, +a}, {+c, +c, +a}, {-c, +c, +a}, {-a, -c, +c}, // point 4
+                                 {+c, -a, +c}, {+a, +c, +c}, {-c, +a, +c}, {-c, -a, +c}, // point 8
+                                 {+a, -c, +c}, {+c, +a, +c}, {-a, +c, +c}, {-a, -c, -c}, // point 12
+                                 {+c, -a, -c}, {+a, +c, -c}, {-c, +a, -c}, {-c, -a, -c}, // point 16
+                                 {+a, -c, -c}, {+c, +a, -c}, {-a, +c, -c}, {-c, -c, -a}, // point 20
+                                 {+c, -c, -a}, {+c, +c, -a}, {-c, +c, -a}});
+
+    m_validated = true;
+    return "";
+}
+//  ************************************************************************************************
+//
+//  BornAgain: simulate and fit reflection and scattering
+//
+//! @file      Sample/HardParticle/TruncatedCube.cpp
+//! @brief     Implements class TruncatedCube.
+//!
+//! @homepage  http://www.bornagainproject.org
+//! @license   GNU General Public License v3 or higher (see COPYING)
+//! @copyright Forschungszentrum Jülich GmbH 2018
+//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
+//
+//  ************************************************************************************************
+
+#include "Sample/HardParticle/Polyhedra.h"
+
+const ff::Topology TruncatedCube::topology = {{{{0, 1, 7, 6, 9, 10, 4, 3}, true},
+                                               {{0, 2, 1}, false},
+                                               {{3, 4, 5}, false},
+                                               {{9, 11, 10}, false},
+                                               {{6, 7, 8}, false},
+                                               {{0, 3, 5, 17, 15, 12, 14, 2}, true},
+                                               {{4, 10, 11, 23, 22, 16, 17, 5}, true},
+                                               {{1, 2, 14, 13, 19, 20, 8, 7}, true},
+                                               {{6, 8, 20, 18, 21, 23, 11, 9}, true},
+                                               {{15, 17, 16}, false},
+                                               {{12, 13, 14}, false},
+                                               {{18, 20, 19}, false},
+                                               {{21, 22, 23}, false},
+                                               {{12, 15, 16, 22, 21, 18, 19, 13}, true}},
+                                              true};
+
+TruncatedCube::TruncatedCube(const std::vector<double> P)
+    : IFormFactorPolyhedron(P)
+    , m_length(m_P[0])
+    , m_removed_length(m_P[1])
+{
+    validateOrThrow();
+}
+
+TruncatedCube::TruncatedCube(double length, double removed_length)
+    : TruncatedCube(std::vector<double>{length, removed_length})
+{
+}
+
+std::string TruncatedCube::validate() const
+{
+    std::vector<std::string> errs;
+    requestGt0(errs, m_length, "length");
+    requestGe0(errs, m_removed_length, "removed_length");
+    if (!errs.empty())
+        return jointError(errs);
+
+    const double a = m_length / 2;
+    const double c = a - m_removed_length;
+    if (c < 0)
+        return jointError({"parameters violate condition removed_length <= 0.5*length"});
+
+
+    setPolyhedron(topology, -a,
+                  {{-c, -a, -a}, {-a, -c, -a}, {-a, -a, -c}, {c, -a, -a}, {a, -c, -a}, {a, -a, -c},
+                   {-c, a, -a},  {-a, c, -a},  {-a, a, -c},  {c, a, -a},  {a, c, -a},  {a, a, -c},
+                   {-c, -a, a},  {-a, -c, a},  {-a, -a, c},  {c, -a, a},  {a, -c, a},  {a, -a, c},
+                   {-c, a, a},   {-a, c, a},   {-a, a, c},   {c, a, a},   {a, c, a},   {a, a, c}});
+
+
+    m_validated = true;
+    return "";
+}
diff --git a/Sample/HardParticle/Polyhedra.h b/Sample/HardParticle/Polyhedra.h
new file mode 100644
index 00000000000..4d7be9ae37c
--- /dev/null
+++ b/Sample/HardParticle/Polyhedra.h
@@ -0,0 +1,857 @@
+//  ************************************************************************************************
+//
+//  BornAgain: simulate and fit reflection and scattering
+//
+//! @file      Sample/HardParticle/Box.h
+//! @brief     Defines class Box.
+//!
+//! @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 BORNAGAIN_SAMPLE_HARDPARTICLE_BOX_H
+#define BORNAGAIN_SAMPLE_HARDPARTICLE_BOX_H
+
+#include "Sample/HardParticle/IFormFactorPrism.h"
+
+//! A rectangular prism (parallelepiped).
+//! @ingroup hardParticle
+
+class Box : public IFormFactorPrism {
+public:
+    Box(double length, double width, double height);
+#ifndef USER_API
+    Box(std::vector<double> P);
+
+    Box* clone() const override
+    {
+        return new Box(m_length, m_width, m_height);
+    }
+    std::string className() const final
+    {
+        return "Box";
+    }
+
+    std::vector<ParaMeta> parDefs() const final
+    {
+        return {{"Length", "nm"}, {"Width", "nm"}, {"Height", "nm"}};
+    }
+
+    double length() const
+    {
+        return m_length;
+    }
+    double width() const
+    {
+        return m_width;
+    }
+    double height() const override
+    {
+        return m_height;
+    }
+
+    double volume() const override
+    {
+        return m_length * m_height * m_width;
+    }
+    double radialExtension() const override
+    {
+        return m_length / 2.0;
+    }
+    complex_t formfactor(C3 q) const override;
+
+    std::string validate() const override;
+
+private:
+    const double& m_length;
+    const double& m_width;
+    const double& m_height;
+#endif // USER_API
+};
+
+#endif // BORNAGAIN_SAMPLE_HARDPARTICLE_BOX_H
+//  ************************************************************************************************
+//
+//  BornAgain: simulate and fit reflection and scattering
+//
+//! @file      Sample/HardParticle/Prism3.h
+//! @brief     Defines class Prism3.
+//!
+//! @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 BORNAGAIN_SAMPLE_HARDPARTICLE_PRISM3_H
+#define BORNAGAIN_SAMPLE_HARDPARTICLE_PRISM3_H
+
+#include "Sample/HardParticle/IFormFactorPrism.h"
+
+//! A prism based on an equilateral triangle.
+//! @ingroup hardParticle
+
+class Prism3 : public IFormFactorPrism {
+public:
+    Prism3(double base_edge, double height);
+#ifndef USER_API
+    Prism3(std::vector<double> P);
+
+    Prism3* clone() const override
+    {
+        return new Prism3(m_base_edge, m_height);
+    }
+    std::string className() const final
+    {
+        return "Prism3";
+    }
+    std::vector<ParaMeta> parDefs() const final
+    {
+        return {{"BaseEdge", "nm"}, {"Height", "nm"}};
+    }
+
+    double baseEdge() const
+    {
+        return m_base_edge;
+    }
+    double height() const override
+    {
+        return m_height;
+    }
+
+private:
+    const double& m_base_edge;
+    const double& m_height;
+#endif // USER_API
+};
+
+#endif // BORNAGAIN_SAMPLE_HARDPARTICLE_PRISM3_H
+//  ************************************************************************************************
+//
+//  BornAgain: simulate and fit reflection and scattering
+//
+//! @file      Sample/HardParticle/Prism6.h
+//! @brief     Defines class Prism6.
+//!
+//! @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 BORNAGAIN_SAMPLE_HARDPARTICLE_PRISM6_H
+#define BORNAGAIN_SAMPLE_HARDPARTICLE_PRISM6_H
+
+#include "Sample/HardParticle/IFormFactorPrism.h"
+
+//! A prism based on a regular hexagonal.
+//! @ingroup hardParticle
+
+class Prism6 : public IFormFactorPrism {
+public:
+    Prism6(double base_edge, double height);
+#ifndef USER_API
+    Prism6(std::vector<double> P);
+
+    Prism6* clone() const override
+    {
+        return new Prism6(m_base_edge, m_height);
+    }
+    std::string className() const final
+    {
+        return "Prism6";
+    }
+    std::vector<ParaMeta> parDefs() const final
+    {
+        return {{"BaseEdge", "nm"}, {"Height", "nm"}};
+    }
+
+    double baseEdge() const
+    {
+        return m_base_edge;
+    }
+    double height() const override
+    {
+        return m_height;
+    }
+
+private:
+    const double& m_base_edge;
+    const double& m_height;
+#endif // USER_API
+};
+
+#endif // BORNAGAIN_SAMPLE_HARDPARTICLE_PRISM6_H
+//  ************************************************************************************************
+//
+//  BornAgain: simulate and fit reflection and scattering
+//
+//! @file      Sample/HardParticle/PlatonicTetrahedron.h
+//! @brief     Defines class PlatonicTetrahedron
+//!
+//! @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 BORNAGAIN_SAMPLE_HARDPARTICLE_PLATONICTETRAHEDRON_H
+#define BORNAGAIN_SAMPLE_HARDPARTICLE_PLATONICTETRAHEDRON_H
+
+#include "Sample/HardParticle/IFormFactorPolyhedron.h"
+
+//! A frustum with equilateral trigonal base.
+//! @ingroup hardParticle
+
+class PlatonicTetrahedron : public IFormFactorPolyhedron {
+public:
+    PlatonicTetrahedron(double edge);
+#ifndef USER_API
+    PlatonicTetrahedron(std::vector<double> P);
+
+    PlatonicTetrahedron* clone() const override
+    {
+        return new PlatonicTetrahedron(m_edge);
+    }
+    std::string className() const final
+    {
+        return "PlatonicTetrahedron";
+    }
+    std::vector<ParaMeta> parDefs() const final
+    {
+        return {{"Edge", "nm"}};
+    }
+
+    double edge() const
+    {
+        return m_edge;
+    }
+    double height() const
+    {
+        return sqrt(2. / 3) * m_edge;
+    }
+
+private:
+    static const ff::Topology topology;
+    const double& m_edge;
+#endif // USER_API
+};
+
+#endif // BORNAGAIN_SAMPLE_HARDPARTICLE_PLATONICTETRAHEDRON_H
+//  ************************************************************************************************
+//
+//  BornAgain: simulate and fit reflection and scattering
+//
+//! @file      Sample/HardParticle/PlatonicOctahedron.h
+//! @brief     Defines class PlatonicOctahedron
+//!
+//! @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 BORNAGAIN_SAMPLE_HARDPARTICLE_PLATONICOCTAHEDRON_H
+#define BORNAGAIN_SAMPLE_HARDPARTICLE_PLATONICOCTAHEDRON_H
+
+#include "Sample/HardParticle/IFormFactorPolyhedron.h"
+
+//! A truncated bifrustum with quadratic base.
+//! @ingroup hardParticle
+
+class PlatonicOctahedron : public IFormFactorPolyhedron {
+public:
+    PlatonicOctahedron(double edge);
+#ifndef USER_API
+    PlatonicOctahedron(std::vector<double> P);
+
+    PlatonicOctahedron* clone() const override
+    {
+        return new PlatonicOctahedron(m_edge);
+    }
+    std::string className() const final
+    {
+        return "PlatonicOctahedron";
+    }
+    std::vector<ParaMeta> parDefs() const final
+    {
+        return {{"Edge", "nm"}};
+    }
+
+    double edge() const
+    {
+        return m_edge;
+    }
+    double height() const
+    {
+        return sqrt(1 / 2.) * m_edge;
+    }
+
+private:
+    static const ff::Topology topology;
+
+    const double& m_edge;
+#endif // USER_API
+};
+
+#endif // BORNAGAIN_SAMPLE_HARDPARTICLE_PLATONICOCTAHEDRON_H
+//  ************************************************************************************************
+//
+//  BornAgain: simulate and fit reflection and scattering
+//
+//! @file      Sample/HardParticle/Dodecahedron.h
+//! @brief     Defines class Dodecahedron.
+//!
+//! @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 BORNAGAIN_SAMPLE_HARDPARTICLE_DODECAHEDRON_H
+#define BORNAGAIN_SAMPLE_HARDPARTICLE_DODECAHEDRON_H
+
+#include "Sample/HardParticle/IFormFactorPolyhedron.h"
+
+//! A regular dodecahedron.
+//! @ingroup hardParticle
+
+class Dodecahedron : public IFormFactorPolyhedron {
+public:
+    Dodecahedron(double edge);
+#ifndef USER_API
+    Dodecahedron(std::vector<double> P);
+
+    Dodecahedron* clone() const override
+    {
+        return new Dodecahedron(m_edge);
+    }
+    std::string className() const final
+    {
+        return "Dodecahedron";
+    }
+    std::vector<ParaMeta> parDefs() const final
+    {
+        return {{"Edge", "nm"}};
+    }
+
+    double edge() const
+    {
+        return m_edge;
+    }
+
+private:
+    static const ff::Topology topology;
+    const double& m_edge;
+#endif // USER_API
+};
+
+#endif // BORNAGAIN_SAMPLE_HARDPARTICLE_DODECAHEDRON_H
+//  ************************************************************************************************
+//
+//  BornAgain: simulate and fit reflection and scattering
+//
+//! @file      Sample/HardParticle/Icosahedron.h
+//! @brief     Defines class Icosahedron.
+//!
+//! @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 BORNAGAIN_SAMPLE_HARDPARTICLE_ICOSAHEDRON_H
+#define BORNAGAIN_SAMPLE_HARDPARTICLE_ICOSAHEDRON_H
+
+#include "Sample/HardParticle/IFormFactorPolyhedron.h"
+
+//! A regular icosahedron.
+//! @ingroup hardParticle
+
+class Icosahedron : public IFormFactorPolyhedron {
+public:
+    Icosahedron(double edge);
+#ifndef USER_API
+    Icosahedron(std::vector<double> P);
+
+    Icosahedron* clone() const override
+    {
+        return new Icosahedron(m_edge);
+    }
+    std::string className() const final
+    {
+        return "Icosahedron";
+    }
+    std::vector<ParaMeta> parDefs() const final
+    {
+        return {{"Edge", "nm"}};
+    }
+
+    double edge() const
+    {
+        return m_edge;
+    }
+
+private:
+    static const ff::Topology topology;
+    const double& m_edge;
+#endif // USER_API
+};
+
+#endif // BORNAGAIN_SAMPLE_HARDPARTICLE_ICOSAHEDRON_H
+//  ************************************************************************************************
+//
+//  BornAgain: simulate and fit reflection and scattering
+//
+//! @file      Sample/HardParticle/Pyramid2.h
+//! @brief     Defines class Pyramid2
+//!
+//! @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 BORNAGAIN_SAMPLE_HARDPARTICLE_PYRAMID2_H
+#define BORNAGAIN_SAMPLE_HARDPARTICLE_PYRAMID2_H
+
+#include "Sample/HardParticle/IFormFactorPolyhedron.h"
+
+//! A frustum (truncated pyramid) with rectangular base.
+//! @ingroup hardParticle
+
+class Pyramid2 : public IFormFactorPolyhedron {
+public:
+    Pyramid2(double length, double width, double height, double alpha);
+#ifndef USER_API
+    Pyramid2(std::vector<double> P);
+
+    Pyramid2* clone() const override
+    {
+        return new Pyramid2(m_length, m_width, m_height, m_alpha);
+    }
+    std::string className() const final
+    {
+        return "Pyramid2";
+    }
+    std::vector<ParaMeta> parDefs() const final
+    {
+        return {{"Length", "nm"}, {"Width", "nm"}, {"Height", "nm"}, {"Alpha", "rad"}};
+    }
+
+    double length() const
+    {
+        return m_length;
+    }
+    double width() const
+    {
+        return m_width;
+    }
+    double height() const
+    {
+        return m_height;
+    }
+    double alpha() const
+    {
+        return m_alpha;
+    }
+
+private:
+    static const ff::Topology topology;
+
+    const double& m_length;
+    const double& m_width;
+    const double& m_height;
+    const double& m_alpha;
+#endif // USER_API
+};
+
+#endif // BORNAGAIN_SAMPLE_HARDPARTICLE_PYRAMID2_H
+//  ************************************************************************************************
+//
+//  BornAgain: simulate and fit reflection and scattering
+//
+//! @file      Sample/HardParticle/Pyramid3.h
+//! @brief     Defines class Pyramid3
+//!
+//! @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 BORNAGAIN_SAMPLE_HARDPARTICLE_PYRAMID3_H
+#define BORNAGAIN_SAMPLE_HARDPARTICLE_PYRAMID3_H
+
+#include "Sample/HardParticle/IFormFactorPolyhedron.h"
+
+//! A frustum with equilateral trigonal base.
+//! @ingroup hardParticle
+
+class Pyramid3 : public IFormFactorPolyhedron {
+public:
+    Pyramid3(double base_edge, double height, double alpha);
+#ifndef USER_API
+    Pyramid3(std::vector<double> P);
+
+    Pyramid3* clone() const override
+    {
+        return new Pyramid3(m_base_edge, m_height, m_alpha);
+    }
+    std::string className() const final
+    {
+        return "Pyramid3";
+    }
+    std::vector<ParaMeta> parDefs() const final
+    {
+        return {{"BaseEdge", "nm"}, {"Height", "nm"}, {"Alpha", "rad"}};
+    }
+
+    double baseEdge() const
+    {
+        return m_base_edge;
+    }
+    double height() const
+    {
+        return m_height;
+    }
+    double alpha() const
+    {
+        return m_alpha;
+    }
+
+private:
+    static const ff::Topology topology;
+    const double& m_base_edge;
+    const double& m_height;
+    const double& m_alpha;
+#endif // USER_API
+};
+
+#endif // BORNAGAIN_SAMPLE_HARDPARTICLE_PYRAMID3_H
+//  ************************************************************************************************
+//
+//  BornAgain: simulate and fit reflection and scattering
+//
+//! @file      Sample/HardParticle/Pyramid4.h
+//! @brief     Defines class Pyramid4
+//!
+//! @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 BORNAGAIN_SAMPLE_HARDPARTICLE_PYRAMID4_H
+#define BORNAGAIN_SAMPLE_HARDPARTICLE_PYRAMID4_H
+
+#include "Sample/HardParticle/IFormFactorPolyhedron.h"
+
+//! A frustum with a quadratic base.
+//! @ingroup hardParticle
+
+class Pyramid4 : public IFormFactorPolyhedron {
+public:
+    Pyramid4(double base_edge, double height, double alpha);
+#ifndef USER_API
+    Pyramid4(std::vector<double> P);
+
+    Pyramid4* clone() const override
+    {
+        return new Pyramid4(m_base_edge, m_height, m_alpha);
+    }
+    std::string className() const final
+    {
+        return "Pyramid4";
+    }
+    std::vector<ParaMeta> parDefs() const final
+    {
+        return {{"BaseEdge", "nm"}, {"Height", "nm"}, {"Alpha", "rad"}};
+    }
+
+    double height() const
+    {
+        return m_height;
+    }
+    double baseEdge() const
+    {
+        return m_base_edge;
+    }
+    double alpha() const
+    {
+        return m_alpha;
+    }
+    std::string validate() const override;
+
+private:
+    static const ff::Topology topology;
+
+    const double& m_base_edge;
+    const double& m_height;
+    const double& m_alpha;
+#endif // USER_API
+};
+
+#endif // BORNAGAIN_SAMPLE_HARDPARTICLE_PYRAMID4_H
+//  ************************************************************************************************
+//
+//  BornAgain: simulate and fit reflection and scattering
+//
+//! @file      Sample/HardParticle/Pyramid6.h
+//! @brief     Defines class Pyramid6
+//!
+//! @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 BORNAGAIN_SAMPLE_HARDPARTICLE_PYRAMID6_H
+#define BORNAGAIN_SAMPLE_HARDPARTICLE_PYRAMID6_H
+
+#include "Sample/HardParticle/IFormFactorPolyhedron.h"
+
+//! A frustum (truncated pyramid) with regular hexagonal base.
+//! @ingroup hardParticle
+
+class Pyramid6 : public IFormFactorPolyhedron {
+public:
+    Pyramid6(double base_edge, double height, double alpha);
+#ifndef USER_API
+    Pyramid6(std::vector<double> P);
+
+    Pyramid6* clone() const override
+    {
+        return new Pyramid6(m_base_edge, m_height, m_alpha);
+    }
+    std::string className() const final
+    {
+        return "Pyramid6";
+    }
+    std::vector<ParaMeta> parDefs() const final
+    {
+        return {{"BaseEdge", "nm"}, {"Height", "nm"}, {"Alpha", "rad"}};
+    }
+
+    double baseEdge() const
+    {
+        return m_base_edge;
+    }
+    double height() const
+    {
+        return m_height;
+    }
+    double alpha() const
+    {
+        return m_alpha;
+    }
+    std::string validate() const override;
+
+private:
+    static const ff::Topology topology;
+    const double& m_base_edge;
+    const double& m_height;
+    const double& m_alpha;
+#endif // USER_API
+};
+
+#endif // BORNAGAIN_SAMPLE_HARDPARTICLE_PYRAMID6_H
+//  ************************************************************************************************
+//
+//  BornAgain: simulate and fit reflection and scattering
+//
+//! @file      Sample/HardParticle/Bipyramid4.h
+//! @brief     Defines class Bipyramid4
+//!
+//! @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 BORNAGAIN_SAMPLE_HARDPARTICLE_BIPYRAMID4_H
+#define BORNAGAIN_SAMPLE_HARDPARTICLE_BIPYRAMID4_H
+
+#include "Sample/HardParticle/IFormFactorPolyhedron.h"
+
+//! A truncated bifrustum with quadratic base.
+//! @ingroup hardParticle
+
+class Bipyramid4 : public IFormFactorPolyhedron {
+public:
+    Bipyramid4(double length, double height, double height_ratio, double alpha);
+#ifndef USER_API
+    Bipyramid4(std::vector<double> P);
+    Bipyramid4* clone() const override
+    {
+        return new Bipyramid4(m_length, m_height, m_height_ratio, m_alpha);
+    }
+    std::string className() const final
+    {
+        return "Bipyramid4";
+    }
+    std::vector<ParaMeta> parDefs() const final
+    {
+        return {{"Length", "nm"}, {"Height", "nm"}, {"HeightRatio", ""}, {"Alpha", "rad"}};
+    }
+    double length() const
+    {
+        return m_length;
+    }
+    double height() const
+    {
+        return m_height;
+    }
+    double heightRatio() const
+    {
+        return m_height_ratio;
+    }
+    double alpha() const
+    {
+        return m_alpha;
+    }
+    std::string validate() const override;
+#endif // USER_API
+
+private:
+    static const ff::Topology topology;
+
+    const double& m_length;
+    const double& m_height;
+    const double& m_height_ratio;
+    const double& m_alpha;
+};
+
+#endif // BORNAGAIN_SAMPLE_HARDPARTICLE_BIPYRAMID4_H
+//  ************************************************************************************************
+//
+//  BornAgain: simulate and fit reflection and scattering
+//
+//! @file      Sample/HardParticle/CantellatedCube.h
+//! @brief     Defines class CantellatedCube.
+//!
+//! @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 BORNAGAIN_SAMPLE_HARDPARTICLE_CANTELLATEDCUBE_H
+#define BORNAGAIN_SAMPLE_HARDPARTICLE_CANTELLATEDCUBE_H
+
+#include "Sample/HardParticle/IFormFactorPolyhedron.h"
+
+//! A cube, with truncation of all edges and corners, as in Croset (2017) Fig 7
+//! @ingroup hardParticle
+
+class CantellatedCube : public IFormFactorPolyhedron {
+public:
+    CantellatedCube(double length, double removed_length);
+#ifndef USER_API
+    CantellatedCube(std::vector<double> P);
+
+    CantellatedCube* clone() const override
+    {
+        return new CantellatedCube(m_length, m_removed_length);
+    }
+    std::string className() const final
+    {
+        return "CantellatedCube";
+    }
+    std::vector<ParaMeta> parDefs() const final
+    {
+        return {{"Length", "nm"}, {"RemovedLength", "nm"}};
+    }
+
+    double length() const
+    {
+        return m_length;
+    }
+    double removedLength() const
+    {
+        return m_removed_length;
+    }
+    std::string validate() const override;
+#endif // USER_API
+
+private:
+    static const ff::Topology topology;
+    const double& m_length;
+    const double& m_removed_length;
+};
+
+#endif // BORNAGAIN_SAMPLE_HARDPARTICLE_CANTELLATEDCUBE_H
+//  ************************************************************************************************
+//
+//  BornAgain: simulate and fit reflection and scattering
+//
+//! @file      Sample/HardParticle/TruncatedCube.h
+//! @brief     Defines class TruncatedCube.
+//!
+//! @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 BORNAGAIN_SAMPLE_HARDPARTICLE_TRUNCATEDCUBE_H
+#define BORNAGAIN_SAMPLE_HARDPARTICLE_TRUNCATEDCUBE_H
+
+#include "Sample/HardParticle/IFormFactorPolyhedron.h"
+
+//! A cube, with tetrahedral truncation of all corners
+//! @ingroup hardParticle
+
+class TruncatedCube : public IFormFactorPolyhedron {
+public:
+    TruncatedCube(double length, double removed_length);
+#ifndef USER_API
+    TruncatedCube(std::vector<double> P);
+
+    TruncatedCube* clone() const override
+    {
+        return new TruncatedCube(m_length, m_removed_length);
+    }
+    std::string className() const final
+    {
+        return "TruncatedCube";
+    }
+    std::vector<ParaMeta> parDefs() const final
+    {
+        return {{"Length", "nm"}, {"RemovedLength", "nm"}};
+    }
+
+    double length() const
+    {
+        return m_length;
+    }
+    double removedLength() const
+    {
+        return m_removed_length;
+    }
+    std::string validate() const override;
+
+private:
+    static const ff::Topology topology;
+    const double& m_length;
+    const double& m_removed_length;
+#endif // USER_API
+};
+
+#endif // BORNAGAIN_SAMPLE_HARDPARTICLE_TRUNCATEDCUBE_H
diff --git a/Sample/HardParticle/Prism3.cpp b/Sample/HardParticle/Prism3.cpp
deleted file mode 100644
index 0ce0be26f61..00000000000
--- a/Sample/HardParticle/Prism3.cpp
+++ /dev/null
@@ -1,30 +0,0 @@
-//  ************************************************************************************************
-//
-//  BornAgain: simulate and fit reflection and scattering
-//
-//! @file      Sample/HardParticle/Prism3.cpp
-//! @brief     Implements class Prism3.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-//  ************************************************************************************************
-
-#include "Sample/HardParticle/Prism3.h"
-#include <ff/Make.h>
-
-Prism3::Prism3(const std::vector<double> P)
-    : IFormFactorPrism(P)
-    , m_base_edge(m_P[0])
-    , m_height(m_P[1])
-{
-    pimpl.reset(ff::make::Prism3(m_base_edge, m_height));
-    m_validated = true;
-}
-
-Prism3::Prism3(double base_edge, double height)
-    : Prism3(std::vector<double>{base_edge, height})
-{
-}
diff --git a/Sample/HardParticle/Prism3.h b/Sample/HardParticle/Prism3.h
deleted file mode 100644
index e74696c3124..00000000000
--- a/Sample/HardParticle/Prism3.h
+++ /dev/null
@@ -1,57 +0,0 @@
-//  ************************************************************************************************
-//
-//  BornAgain: simulate and fit reflection and scattering
-//
-//! @file      Sample/HardParticle/Prism3.h
-//! @brief     Defines class Prism3.
-//!
-//! @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 BORNAGAIN_SAMPLE_HARDPARTICLE_PRISM3_H
-#define BORNAGAIN_SAMPLE_HARDPARTICLE_PRISM3_H
-
-#include "Sample/HardParticle/IFormFactorPrism.h"
-
-//! A prism based on an equilateral triangle.
-//! @ingroup hardParticle
-
-class Prism3 : public IFormFactorPrism {
-public:
-    Prism3(double base_edge, double height);
-#ifndef USER_API
-    Prism3(std::vector<double> P);
-
-    Prism3* clone() const override
-    {
-        return new Prism3(m_base_edge, m_height);
-    }
-    std::string className() const final
-    {
-        return "Prism3";
-    }
-    std::vector<ParaMeta> parDefs() const final
-    {
-        return {{"BaseEdge", "nm"}, {"Height", "nm"}};
-    }
-
-    double baseEdge() const
-    {
-        return m_base_edge;
-    }
-    double height() const override
-    {
-        return m_height;
-    }
-
-private:
-    const double& m_base_edge;
-    const double& m_height;
-#endif // USER_API
-};
-
-#endif // BORNAGAIN_SAMPLE_HARDPARTICLE_PRISM3_H
diff --git a/Sample/HardParticle/Prism6.cpp b/Sample/HardParticle/Prism6.cpp
deleted file mode 100644
index 355d070893f..00000000000
--- a/Sample/HardParticle/Prism6.cpp
+++ /dev/null
@@ -1,30 +0,0 @@
-//  ************************************************************************************************
-//
-//  BornAgain: simulate and fit reflection and scattering
-//
-//! @file      Sample/HardParticle/Prism6.cpp
-//! @brief     Implements class Prism6.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-//  ************************************************************************************************
-
-#include "Sample/HardParticle/Prism6.h"
-#include <ff/Make.h>
-
-Prism6::Prism6(const std::vector<double> P)
-    : IFormFactorPrism(P)
-    , m_base_edge(m_P[0])
-    , m_height(m_P[1])
-{
-    pimpl.reset(ff::make::Prism6(m_base_edge, m_height));
-    m_validated = true;
-}
-
-Prism6::Prism6(double base_edge, double height)
-    : Prism6(std::vector<double>{base_edge, height})
-{
-}
diff --git a/Sample/HardParticle/Prism6.h b/Sample/HardParticle/Prism6.h
deleted file mode 100644
index 171e0aa0614..00000000000
--- a/Sample/HardParticle/Prism6.h
+++ /dev/null
@@ -1,57 +0,0 @@
-//  ************************************************************************************************
-//
-//  BornAgain: simulate and fit reflection and scattering
-//
-//! @file      Sample/HardParticle/Prism6.h
-//! @brief     Defines class Prism6.
-//!
-//! @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 BORNAGAIN_SAMPLE_HARDPARTICLE_PRISM6_H
-#define BORNAGAIN_SAMPLE_HARDPARTICLE_PRISM6_H
-
-#include "Sample/HardParticle/IFormFactorPrism.h"
-
-//! A prism based on a regular hexagonal.
-//! @ingroup hardParticle
-
-class Prism6 : public IFormFactorPrism {
-public:
-    Prism6(double base_edge, double height);
-#ifndef USER_API
-    Prism6(std::vector<double> P);
-
-    Prism6* clone() const override
-    {
-        return new Prism6(m_base_edge, m_height);
-    }
-    std::string className() const final
-    {
-        return "Prism6";
-    }
-    std::vector<ParaMeta> parDefs() const final
-    {
-        return {{"BaseEdge", "nm"}, {"Height", "nm"}};
-    }
-
-    double baseEdge() const
-    {
-        return m_base_edge;
-    }
-    double height() const override
-    {
-        return m_height;
-    }
-
-private:
-    const double& m_base_edge;
-    const double& m_height;
-#endif // USER_API
-};
-
-#endif // BORNAGAIN_SAMPLE_HARDPARTICLE_PRISM6_H
diff --git a/Sample/HardParticle/Pyramid2.cpp b/Sample/HardParticle/Pyramid2.cpp
deleted file mode 100644
index 636236a9482..00000000000
--- a/Sample/HardParticle/Pyramid2.cpp
+++ /dev/null
@@ -1,34 +0,0 @@
-//  ************************************************************************************************
-//
-//  BornAgain: simulate and fit reflection and scattering
-//
-//! @file      Sample/HardParticle/Pyramid2.cpp
-//! @brief     Implements class Pyramid2.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-//  ************************************************************************************************
-
-#include "Sample/HardParticle/Pyramid2.h"
-#include "Base/Math/Constants.h"
-#include "Base/Math/Functions.h"
-#include <ff/Make.h>
-
-Pyramid2::Pyramid2(const std::vector<double> P)
-    : IFormFactorPolyhedron(P)
-    , m_length(m_P[0])
-    , m_width(m_P[1])
-    , m_height(m_P[2])
-    , m_alpha(m_P[3])
-{
-    pimpl.reset(ff::make::Pyramid2(m_length, m_width, m_height, m_alpha));
-    m_validated = true;
-}
-
-Pyramid2::Pyramid2(double length, double width, double height, double alpha)
-    : Pyramid2(std::vector<double>{length, width, height, alpha})
-{
-}
diff --git a/Sample/HardParticle/Pyramid2.h b/Sample/HardParticle/Pyramid2.h
deleted file mode 100644
index 8d035ab97c4..00000000000
--- a/Sample/HardParticle/Pyramid2.h
+++ /dev/null
@@ -1,69 +0,0 @@
-//  ************************************************************************************************
-//
-//  BornAgain: simulate and fit reflection and scattering
-//
-//! @file      Sample/HardParticle/Pyramid2.h
-//! @brief     Defines class Pyramid2
-//!
-//! @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 BORNAGAIN_SAMPLE_HARDPARTICLE_PYRAMID2_H
-#define BORNAGAIN_SAMPLE_HARDPARTICLE_PYRAMID2_H
-
-#include "Sample/HardParticle/IFormFactorPolyhedron.h"
-
-//! A frustum (truncated pyramid) with rectangular base.
-//! @ingroup hardParticle
-
-class Pyramid2 : public IFormFactorPolyhedron {
-public:
-    Pyramid2(double length, double width, double height, double alpha);
-#ifndef USER_API
-    Pyramid2(std::vector<double> P);
-
-    Pyramid2* clone() const override
-    {
-        return new Pyramid2(m_length, m_width, m_height, m_alpha);
-    }
-    std::string className() const final
-    {
-        return "Pyramid2";
-    }
-    std::vector<ParaMeta> parDefs() const final
-    {
-        return {{"Length", "nm"}, {"Width", "nm"}, {"Height", "nm"}, {"Alpha", "rad"}};
-    }
-
-    double length() const
-    {
-        return m_length;
-    }
-    double width() const
-    {
-        return m_width;
-    }
-    double height() const
-    {
-        return m_height;
-    }
-    double alpha() const
-    {
-        return m_alpha;
-    }
-
-private:
-    static const ff::Topology topology;
-
-    const double& m_length;
-    const double& m_width;
-    const double& m_height;
-    const double& m_alpha;
-#endif // USER_API
-};
-
-#endif // BORNAGAIN_SAMPLE_HARDPARTICLE_PYRAMID2_H
diff --git a/Sample/HardParticle/Pyramid3.cpp b/Sample/HardParticle/Pyramid3.cpp
deleted file mode 100644
index 8728838e661..00000000000
--- a/Sample/HardParticle/Pyramid3.cpp
+++ /dev/null
@@ -1,33 +0,0 @@
-//  ************************************************************************************************
-//
-//  BornAgain: simulate and fit reflection and scattering
-//
-//! @file      Sample/HardParticle/Pyramid3.cpp
-//! @brief     Implements class Pyramid3.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-//  ************************************************************************************************
-
-#include "Sample/HardParticle/Pyramid3.h"
-#include "Base/Math/Constants.h"
-#include "Base/Math/Functions.h"
-#include <ff/Make.h>
-
-Pyramid3::Pyramid3(const std::vector<double> P)
-    : IFormFactorPolyhedron(P)
-    , m_base_edge(m_P[0])
-    , m_height(m_P[1])
-    , m_alpha(m_P[2])
-{
-    pimpl.reset(ff::make::Pyramid3(m_base_edge, m_height, m_alpha));
-    m_validated = true;
-}
-
-Pyramid3::Pyramid3(double base_edge, double height, double alpha)
-    : Pyramid3(std::vector<double>{base_edge, height, alpha})
-{
-}
diff --git a/Sample/HardParticle/Pyramid3.h b/Sample/HardParticle/Pyramid3.h
deleted file mode 100644
index b7d2e6e090b..00000000000
--- a/Sample/HardParticle/Pyramid3.h
+++ /dev/null
@@ -1,63 +0,0 @@
-//  ************************************************************************************************
-//
-//  BornAgain: simulate and fit reflection and scattering
-//
-//! @file      Sample/HardParticle/Pyramid3.h
-//! @brief     Defines class Pyramid3
-//!
-//! @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 BORNAGAIN_SAMPLE_HARDPARTICLE_PYRAMID3_H
-#define BORNAGAIN_SAMPLE_HARDPARTICLE_PYRAMID3_H
-
-#include "Sample/HardParticle/IFormFactorPolyhedron.h"
-
-//! A frustum with equilateral trigonal base.
-//! @ingroup hardParticle
-
-class Pyramid3 : public IFormFactorPolyhedron {
-public:
-    Pyramid3(double base_edge, double height, double alpha);
-#ifndef USER_API
-    Pyramid3(std::vector<double> P);
-
-    Pyramid3* clone() const override
-    {
-        return new Pyramid3(m_base_edge, m_height, m_alpha);
-    }
-    std::string className() const final
-    {
-        return "Pyramid3";
-    }
-    std::vector<ParaMeta> parDefs() const final
-    {
-        return {{"BaseEdge", "nm"}, {"Height", "nm"}, {"Alpha", "rad"}};
-    }
-
-    double baseEdge() const
-    {
-        return m_base_edge;
-    }
-    double height() const
-    {
-        return m_height;
-    }
-    double alpha() const
-    {
-        return m_alpha;
-    }
-
-private:
-    static const ff::Topology topology;
-    const double& m_base_edge;
-    const double& m_height;
-    const double& m_alpha;
-#endif // USER_API
-};
-
-#endif // BORNAGAIN_SAMPLE_HARDPARTICLE_PYRAMID3_H
diff --git a/Sample/HardParticle/Pyramid4.cpp b/Sample/HardParticle/Pyramid4.cpp
deleted file mode 100644
index 4d087b858be..00000000000
--- a/Sample/HardParticle/Pyramid4.cpp
+++ /dev/null
@@ -1,76 +0,0 @@
-//  ************************************************************************************************
-//
-//  BornAgain: simulate and fit reflection and scattering
-//
-//! @file      Sample/HardParticle/Pyramid4.cpp
-//! @brief     Implements class Pyramid4.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-//  ************************************************************************************************
-
-#include "Sample/HardParticle/Pyramid4.h"
-#include "Base/Math/Constants.h"
-#include "Base/Math/Functions.h"
-
-const ff::Topology Pyramid4::topology = {{{{3, 2, 1, 0}, true},
-                                          {{0, 1, 5, 4}, false},
-                                          {{1, 2, 6, 5}, false},
-                                          {{2, 3, 7, 6}, false},
-                                          {{3, 0, 4, 7}, false},
-                                          {{4, 5, 6, 7}, true}},
-                                         false};
-
-Pyramid4::Pyramid4(const std::vector<double> P)
-    : IFormFactorPolyhedron(P)
-    , m_base_edge(m_P[0])
-    , m_height(m_P[1])
-    , m_alpha(m_P[2])
-{
-    validateOrThrow();
-}
-
-Pyramid4::Pyramid4(double base_edge, double height, double alpha)
-    : Pyramid4(std::vector<double>{base_edge, height, alpha})
-{
-}
-
-std::string Pyramid4::validate() const
-{
-    std::vector<std::string> errs;
-    requestGt0(errs, m_base_edge, "base_edge");
-    requestGt0(errs, m_height, "height");
-    const double cot_alpha = Math::cot(m_alpha);
-    if (m_alpha <= 0 || !std::isfinite(cot_alpha) || cot_alpha < 0)
-        errs.push_back("pyramid angle alpha " + std::to_string(m_alpha) + " out of bounds");
-    if (!errs.empty())
-        return jointError(errs);
-
-    double r = cot_alpha * 2 * m_height / m_base_edge; // L(top)/L(base)
-    if (r > 1)
-        return jointError({"parameters violate condition 2*ctg(alpha) <= base_edge/height"});
-
-    double a = m_base_edge / 2;
-    double b = a * (1 - r);
-
-    // center of mass
-    double zcom = m_height / 4 * (a * a + 2 * a * b + 3 * b * b) / (a * a + a * b + b * b);
-
-    setPolyhedron(topology, -zcom,
-                  {// base:
-                   {-a, -a, -zcom},
-                   {a, -a, -zcom},
-                   {a, a, -zcom},
-                   {-a, a, -zcom},
-                   // top:
-                   {-b, -b, m_height - zcom},
-                   {b, -b, m_height - zcom},
-                   {b, b, m_height - zcom},
-                   {-b, b, m_height - zcom}});
-
-    m_validated = true;
-    return "";
-}
diff --git a/Sample/HardParticle/Pyramid4.h b/Sample/HardParticle/Pyramid4.h
deleted file mode 100644
index eb6627a68f0..00000000000
--- a/Sample/HardParticle/Pyramid4.h
+++ /dev/null
@@ -1,65 +0,0 @@
-//  ************************************************************************************************
-//
-//  BornAgain: simulate and fit reflection and scattering
-//
-//! @file      Sample/HardParticle/Pyramid4.h
-//! @brief     Defines class Pyramid4
-//!
-//! @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 BORNAGAIN_SAMPLE_HARDPARTICLE_PYRAMID4_H
-#define BORNAGAIN_SAMPLE_HARDPARTICLE_PYRAMID4_H
-
-#include "Sample/HardParticle/IFormFactorPolyhedron.h"
-
-//! A frustum with a quadratic base.
-//! @ingroup hardParticle
-
-class Pyramid4 : public IFormFactorPolyhedron {
-public:
-    Pyramid4(double base_edge, double height, double alpha);
-#ifndef USER_API
-    Pyramid4(std::vector<double> P);
-
-    Pyramid4* clone() const override
-    {
-        return new Pyramid4(m_base_edge, m_height, m_alpha);
-    }
-    std::string className() const final
-    {
-        return "Pyramid4";
-    }
-    std::vector<ParaMeta> parDefs() const final
-    {
-        return {{"BaseEdge", "nm"}, {"Height", "nm"}, {"Alpha", "rad"}};
-    }
-
-    double height() const
-    {
-        return m_height;
-    }
-    double baseEdge() const
-    {
-        return m_base_edge;
-    }
-    double alpha() const
-    {
-        return m_alpha;
-    }
-    std::string validate() const override;
-
-private:
-    static const ff::Topology topology;
-
-    const double& m_base_edge;
-    const double& m_height;
-    const double& m_alpha;
-#endif // USER_API
-};
-
-#endif // BORNAGAIN_SAMPLE_HARDPARTICLE_PYRAMID4_H
diff --git a/Sample/HardParticle/Pyramid6.cpp b/Sample/HardParticle/Pyramid6.cpp
deleted file mode 100644
index a06441227dd..00000000000
--- a/Sample/HardParticle/Pyramid6.cpp
+++ /dev/null
@@ -1,87 +0,0 @@
-//  ************************************************************************************************
-//
-//  BornAgain: simulate and fit reflection and scattering
-//
-//! @file      Sample/HardParticle/Pyramid6.cpp
-//! @brief     Implements class Pyramid6.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-//  ************************************************************************************************
-
-#include "Sample/HardParticle/Pyramid6.h"
-#include "Base/Math/Constants.h"
-#include "Base/Math/Functions.h"
-
-const ff::Topology Pyramid6::topology = {{{{5, 4, 3, 2, 1, 0}, true},
-                                          {{0, 1, 7, 6}, false},
-                                          {{1, 2, 8, 7}, false},
-                                          {{2, 3, 9, 8}, false},
-                                          {{3, 4, 10, 9}, false},
-                                          {{4, 5, 11, 10}, false},
-                                          {{5, 0, 6, 11}, false},
-                                          {{6, 7, 8, 9, 10, 11}, true}},
-                                         false};
-
-Pyramid6::Pyramid6(const std::vector<double> P)
-    : IFormFactorPolyhedron(P)
-    , m_base_edge(m_P[0])
-    , m_height(m_P[1])
-    , m_alpha(m_P[2])
-{
-    validateOrThrow();
-}
-
-Pyramid6::Pyramid6(double base_edge, double height, double alpha)
-    : Pyramid6(std::vector<double>{base_edge, height, alpha})
-{
-}
-
-std::string Pyramid6::validate() const
-{
-    std::vector<std::string> errs;
-    requestGt0(errs, m_base_edge, "base_edge");
-    requestGt0(errs, m_height, "height");
-    const double cot_alpha = Math::cot(m_alpha);
-    if (m_alpha <= 0 || !std::isfinite(cot_alpha) || cot_alpha < 0)
-        errs.push_back("pyramid angle alpha " + std::to_string(m_alpha) + " out of bounds");
-    if (!errs.empty())
-        return jointError(errs);
-
-    double r = cot_alpha * 2 / sqrt(3) * m_height / m_base_edge; // L(top)/L(base)
-    if (r > 1)
-        return jointError(
-            {"parameters violate condition 2/sqrt(3)*ctg(alpha) <= base_edge/height"});
-
-    double a = m_base_edge;
-    double as = a / 2;
-    double ac = a * sqrt(3) / 2;
-    double b = a * (1 - r);
-    double bs = b / 2;
-    double bc = b * sqrt(3) / 2;
-
-    double zcom = m_height / 4 * (a * a + 2 * a * b + 3 * b * b) / (a * a + a * b + b * b);
-
-    setPolyhedron(topology, -zcom,
-                  {// base:
-                   {a, 0., -zcom},
-                   {as, ac, -zcom},
-                   {-as, ac, -zcom},
-                   {-a, 0., -zcom},
-                   {-as, -ac, -zcom},
-                   {as, -ac, -zcom},
-                   // top:
-                   {b, 0., m_height - zcom},
-                   {bs, bc, m_height - zcom},
-                   {-bs, bc, m_height - zcom},
-                   {-b, 0., m_height - zcom},
-                   {-bs, -bc, m_height - zcom},
-                   {bs, -bc, m_height - zcom}});
-
-
-    m_validated = true;
-    return "";
-}
diff --git a/Sample/HardParticle/Pyramid6.h b/Sample/HardParticle/Pyramid6.h
deleted file mode 100644
index 00bebfdebe4..00000000000
--- a/Sample/HardParticle/Pyramid6.h
+++ /dev/null
@@ -1,64 +0,0 @@
-//  ************************************************************************************************
-//
-//  BornAgain: simulate and fit reflection and scattering
-//
-//! @file      Sample/HardParticle/Pyramid6.h
-//! @brief     Defines class Pyramid6
-//!
-//! @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 BORNAGAIN_SAMPLE_HARDPARTICLE_PYRAMID6_H
-#define BORNAGAIN_SAMPLE_HARDPARTICLE_PYRAMID6_H
-
-#include "Sample/HardParticle/IFormFactorPolyhedron.h"
-
-//! A frustum (truncated pyramid) with regular hexagonal base.
-//! @ingroup hardParticle
-
-class Pyramid6 : public IFormFactorPolyhedron {
-public:
-    Pyramid6(double base_edge, double height, double alpha);
-#ifndef USER_API
-    Pyramid6(std::vector<double> P);
-
-    Pyramid6* clone() const override
-    {
-        return new Pyramid6(m_base_edge, m_height, m_alpha);
-    }
-    std::string className() const final
-    {
-        return "Pyramid6";
-    }
-    std::vector<ParaMeta> parDefs() const final
-    {
-        return {{"BaseEdge", "nm"}, {"Height", "nm"}, {"Alpha", "rad"}};
-    }
-
-    double baseEdge() const
-    {
-        return m_base_edge;
-    }
-    double height() const
-    {
-        return m_height;
-    }
-    double alpha() const
-    {
-        return m_alpha;
-    }
-    std::string validate() const override;
-
-private:
-    static const ff::Topology topology;
-    const double& m_base_edge;
-    const double& m_height;
-    const double& m_alpha;
-#endif // USER_API
-};
-
-#endif // BORNAGAIN_SAMPLE_HARDPARTICLE_PYRAMID6_H
diff --git a/Sample/HardParticle/TruncatedCube.cpp b/Sample/HardParticle/TruncatedCube.cpp
deleted file mode 100644
index 5d52990dadf..00000000000
--- a/Sample/HardParticle/TruncatedCube.cpp
+++ /dev/null
@@ -1,69 +0,0 @@
-//  ************************************************************************************************
-//
-//  BornAgain: simulate and fit reflection and scattering
-//
-//! @file      Sample/HardParticle/TruncatedCube.cpp
-//! @brief     Implements class TruncatedCube.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-//  ************************************************************************************************
-
-#include "Sample/HardParticle/TruncatedCube.h"
-
-const ff::Topology TruncatedCube::topology = {{{{0, 1, 7, 6, 9, 10, 4, 3}, true},
-                                               {{0, 2, 1}, false},
-                                               {{3, 4, 5}, false},
-                                               {{9, 11, 10}, false},
-                                               {{6, 7, 8}, false},
-                                               {{0, 3, 5, 17, 15, 12, 14, 2}, true},
-                                               {{4, 10, 11, 23, 22, 16, 17, 5}, true},
-                                               {{1, 2, 14, 13, 19, 20, 8, 7}, true},
-                                               {{6, 8, 20, 18, 21, 23, 11, 9}, true},
-                                               {{15, 17, 16}, false},
-                                               {{12, 13, 14}, false},
-                                               {{18, 20, 19}, false},
-                                               {{21, 22, 23}, false},
-                                               {{12, 15, 16, 22, 21, 18, 19, 13}, true}},
-                                              true};
-
-TruncatedCube::TruncatedCube(const std::vector<double> P)
-    : IFormFactorPolyhedron(P)
-    , m_length(m_P[0])
-    , m_removed_length(m_P[1])
-{
-    validateOrThrow();
-}
-
-TruncatedCube::TruncatedCube(double length, double removed_length)
-    : TruncatedCube(std::vector<double>{length, removed_length})
-{
-}
-
-std::string TruncatedCube::validate() const
-{
-    std::vector<std::string> errs;
-    requestGt0(errs, m_length, "length");
-    requestGe0(errs, m_removed_length, "removed_length");
-    if (!errs.empty())
-        return jointError(errs);
-
-    const double a = m_length / 2;
-    const double c = a - m_removed_length;
-    if (c < 0)
-        return jointError({"parameters violate condition removed_length <= 0.5*length"});
-
-
-    setPolyhedron(topology, -a,
-                  {{-c, -a, -a}, {-a, -c, -a}, {-a, -a, -c}, {c, -a, -a}, {a, -c, -a}, {a, -a, -c},
-                   {-c, a, -a},  {-a, c, -a},  {-a, a, -c},  {c, a, -a},  {a, c, -a},  {a, a, -c},
-                   {-c, -a, a},  {-a, -c, a},  {-a, -a, c},  {c, -a, a},  {a, -c, a},  {a, -a, c},
-                   {-c, a, a},   {-a, c, a},   {-a, a, c},   {c, a, a},   {a, c, a},   {a, a, c}});
-
-
-    m_validated = true;
-    return "";
-}
diff --git a/Sample/HardParticle/TruncatedCube.h b/Sample/HardParticle/TruncatedCube.h
deleted file mode 100644
index 4dca03b3eae..00000000000
--- a/Sample/HardParticle/TruncatedCube.h
+++ /dev/null
@@ -1,59 +0,0 @@
-//  ************************************************************************************************
-//
-//  BornAgain: simulate and fit reflection and scattering
-//
-//! @file      Sample/HardParticle/TruncatedCube.h
-//! @brief     Defines class TruncatedCube.
-//!
-//! @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 BORNAGAIN_SAMPLE_HARDPARTICLE_TRUNCATEDCUBE_H
-#define BORNAGAIN_SAMPLE_HARDPARTICLE_TRUNCATEDCUBE_H
-
-#include "Sample/HardParticle/IFormFactorPolyhedron.h"
-
-//! A cube, with tetrahedral truncation of all corners
-//! @ingroup hardParticle
-
-class TruncatedCube : public IFormFactorPolyhedron {
-public:
-    TruncatedCube(double length, double removed_length);
-#ifndef USER_API
-    TruncatedCube(std::vector<double> P);
-
-    TruncatedCube* clone() const override
-    {
-        return new TruncatedCube(m_length, m_removed_length);
-    }
-    std::string className() const final
-    {
-        return "TruncatedCube";
-    }
-    std::vector<ParaMeta> parDefs() const final
-    {
-        return {{"Length", "nm"}, {"RemovedLength", "nm"}};
-    }
-
-    double length() const
-    {
-        return m_length;
-    }
-    double removedLength() const
-    {
-        return m_removed_length;
-    }
-    std::string validate() const override;
-
-private:
-    static const ff::Topology topology;
-    const double& m_length;
-    const double& m_removed_length;
-#endif // USER_API
-};
-
-#endif // BORNAGAIN_SAMPLE_HARDPARTICLE_TRUNCATEDCUBE_H
diff --git a/Sample/StandardSamples/BoxCompositionBuilder.cpp b/Sample/StandardSamples/BoxCompositionBuilder.cpp
index 96cd6cb8294..94b13aa1eb9 100644
--- a/Sample/StandardSamples/BoxCompositionBuilder.cpp
+++ b/Sample/StandardSamples/BoxCompositionBuilder.cpp
@@ -15,7 +15,7 @@
 #include "Sample/StandardSamples/BoxCompositionBuilder.h"
 #include "Base/Const/Units.h"
 #include "Sample/Aggregate/ParticleLayout.h"
-#include "Sample/HardParticle/Box.h"
+#include "Sample/HardParticle/Polyhedra.h"
 #include "Sample/Multilayer/Layer.h"
 #include "Sample/Multilayer/MultiLayer.h"
 #include "Sample/Particle/Compound.h"
diff --git a/Sample/StandardSamples/BoxesSquareLatticeBuilder.cpp b/Sample/StandardSamples/BoxesSquareLatticeBuilder.cpp
index 80a305b8de3..5fb7f2b53bb 100644
--- a/Sample/StandardSamples/BoxesSquareLatticeBuilder.cpp
+++ b/Sample/StandardSamples/BoxesSquareLatticeBuilder.cpp
@@ -16,7 +16,7 @@
 #include "Sample/Aggregate/Interference2DLattice.h"
 #include "Sample/Aggregate/ParticleLayout.h"
 #include "Sample/Correlations/Profiles2D.h"
-#include "Sample/HardParticle/Box.h"
+#include "Sample/HardParticle/Polyhedra.h"
 #include "Sample/Multilayer/Layer.h"
 #include "Sample/Multilayer/MultiLayer.h"
 #include "Sample/Particle/Particle.h"
diff --git a/Sample/StandardSamples/CoreAndShellBuilder.cpp b/Sample/StandardSamples/CoreAndShellBuilder.cpp
index 3d7cf5119dd..b5a33c64e0e 100644
--- a/Sample/StandardSamples/CoreAndShellBuilder.cpp
+++ b/Sample/StandardSamples/CoreAndShellBuilder.cpp
@@ -15,7 +15,7 @@
 #include "Sample/StandardSamples/CoreAndShellBuilder.h"
 #include "Base/Const/Units.h"
 #include "Sample/Aggregate/ParticleLayout.h"
-#include "Sample/HardParticle/Box.h"
+#include "Sample/HardParticle/Polyhedra.h"
 #include "Sample/Multilayer/Layer.h"
 #include "Sample/Multilayer/MultiLayer.h"
 #include "Sample/Particle/CoreAndShell.h"
diff --git a/Sample/StandardSamples/CustomMorphologyBuilder.cpp b/Sample/StandardSamples/CustomMorphologyBuilder.cpp
index d09522f438e..f2b2c9e7e29 100644
--- a/Sample/StandardSamples/CustomMorphologyBuilder.cpp
+++ b/Sample/StandardSamples/CustomMorphologyBuilder.cpp
@@ -15,7 +15,7 @@
 #include "Sample/StandardSamples/CustomMorphologyBuilder.h"
 #include "Base/Const/Units.h"
 #include "Sample/Aggregate/ParticleLayout.h"
-#include "Sample/HardParticle/Box.h"
+#include "Sample/HardParticle/Polyhedra.h"
 #include "Sample/Multilayer/Layer.h"
 #include "Sample/Multilayer/MultiLayer.h"
 #include "Sample/Particle/Particle.h"
diff --git a/Sample/StandardSamples/CylindersAndPrismsBuilder.cpp b/Sample/StandardSamples/CylindersAndPrismsBuilder.cpp
index 441b654c193..b712bdfdb6e 100644
--- a/Sample/StandardSamples/CylindersAndPrismsBuilder.cpp
+++ b/Sample/StandardSamples/CylindersAndPrismsBuilder.cpp
@@ -15,7 +15,7 @@
 #include "Sample/StandardSamples/CylindersAndPrismsBuilder.h"
 #include "Sample/Aggregate/ParticleLayout.h"
 #include "Sample/HardParticle/Cylinder.h"
-#include "Sample/HardParticle/Prism3.h"
+#include "Sample/HardParticle/Polyhedra.h"
 #include "Sample/Multilayer/Layer.h"
 #include "Sample/Multilayer/MultiLayer.h"
 #include "Sample/Particle/Particle.h"
diff --git a/Sample/StandardSamples/MultipleLayoutBuilder.cpp b/Sample/StandardSamples/MultipleLayoutBuilder.cpp
index 1c5094e2b8a..f70025583d1 100644
--- a/Sample/StandardSamples/MultipleLayoutBuilder.cpp
+++ b/Sample/StandardSamples/MultipleLayoutBuilder.cpp
@@ -15,7 +15,7 @@
 #include "Sample/StandardSamples/MultipleLayoutBuilder.h"
 #include "Sample/Aggregate/ParticleLayout.h"
 #include "Sample/HardParticle/Cylinder.h"
-#include "Sample/HardParticle/Prism3.h"
+#include "Sample/HardParticle/Polyhedra.h"
 #include "Sample/Multilayer/Layer.h"
 #include "Sample/Multilayer/MultiLayer.h"
 #include "Sample/Particle/Particle.h"
diff --git a/Sample/StandardSamples/ParticleDistributionsBuilder.cpp b/Sample/StandardSamples/ParticleDistributionsBuilder.cpp
index 7eb08203aa6..317d8cb0ce0 100644
--- a/Sample/StandardSamples/ParticleDistributionsBuilder.cpp
+++ b/Sample/StandardSamples/ParticleDistributionsBuilder.cpp
@@ -15,10 +15,10 @@
 #include "Sample/StandardSamples/ParticleDistributionsBuilder.h"
 #include "Param/Distrib/Distributions.h"
 #include "Sample/Aggregate/ParticleLayout.h"
-#include "Sample/HardParticle/Box.h"
+#include "Sample/HardParticle/Polyhedra.h"
 #include "Sample/HardParticle/Cone.h"
 #include "Sample/HardParticle/Cylinder.h"
-#include "Sample/HardParticle/Pyramid4.h"
+#include "Sample/HardParticle/Polyhedra.h"
 #include "Sample/HardParticle/Sphere.h"
 #include "Sample/Multilayer/Layer.h"
 #include "Sample/Multilayer/MultiLayer.h"
diff --git a/Sample/StandardSamples/RotatedPyramidsBuilder.cpp b/Sample/StandardSamples/RotatedPyramidsBuilder.cpp
index 7952b005f9b..ee1badd3ce4 100644
--- a/Sample/StandardSamples/RotatedPyramidsBuilder.cpp
+++ b/Sample/StandardSamples/RotatedPyramidsBuilder.cpp
@@ -15,7 +15,7 @@
 #include "Sample/StandardSamples/RotatedPyramidsBuilder.h"
 #include "Base/Const/Units.h"
 #include "Sample/Aggregate/ParticleLayout.h"
-#include "Sample/HardParticle/Pyramid4.h"
+#include "Sample/HardParticle/Polyhedra.h"
 #include "Sample/Multilayer/Layer.h"
 #include "Sample/Multilayer/MultiLayer.h"
 #include "Sample/Particle/Particle.h"
diff --git a/Sample/StandardSamples/TransformationsBuilder.cpp b/Sample/StandardSamples/TransformationsBuilder.cpp
index 02bac97425b..48e32ba5dca 100644
--- a/Sample/StandardSamples/TransformationsBuilder.cpp
+++ b/Sample/StandardSamples/TransformationsBuilder.cpp
@@ -15,7 +15,7 @@
 #include "Sample/StandardSamples/TransformationsBuilder.h"
 #include "Base/Const/Units.h"
 #include "Sample/Aggregate/ParticleLayout.h"
-#include "Sample/HardParticle/Box.h"
+#include "Sample/HardParticle/Polyhedra.h"
 #include "Sample/Multilayer/Layer.h"
 #include "Sample/Multilayer/MultiLayer.h"
 #include "Sample/Particle/Particle.h"
diff --git a/Tests/Unit/GUI/TestFormFactorItems.cpp b/Tests/Unit/GUI/TestFormFactorItems.cpp
index 9d7af207ce0..7fb31827d89 100644
--- a/Tests/Unit/GUI/TestFormFactorItems.cpp
+++ b/Tests/Unit/GUI/TestFormFactorItems.cpp
@@ -1,7 +1,7 @@
 #include "Base/Const/Units.h"
 #include "Base/Util/Algorithms.h"
 #include "GUI/Model/Sample/FormFactorItems.h"
-#include "Sample/HardParticle/Pyramid2.h"
+#include "Sample/HardParticle/Polyhedra.h"
 #include "Tests/GTestWrapper/google_test.h"
 
 class TestFormFactorItems : public ::testing::Test {};
diff --git a/Tests/Unit/Sim/PythonFormattingTest.cpp b/Tests/Unit/Sim/PythonFormattingTest.cpp
index fc142b9e384..4c2bb6367ae 100644
--- a/Tests/Unit/Sim/PythonFormattingTest.cpp
+++ b/Tests/Unit/Sim/PythonFormattingTest.cpp
@@ -5,31 +5,31 @@
 #include "Sample/Correlations/Profiles1D.h"
 #include "Sample/Correlations/Profiles2D.h"
 #include "Sample/HardParticle/Bar.h"
-#include "Sample/HardParticle/Bipyramid4.h"
-#include "Sample/HardParticle/Box.h"
-#include "Sample/HardParticle/CantellatedCube.h"
+#include "Sample/HardParticle/Polyhedra.h"
+#include "Sample/HardParticle/Polyhedra.h"
+#include "Sample/HardParticle/Polyhedra.h"
 #include "Sample/HardParticle/Cone.h"
 #include "Sample/HardParticle/CosineRipple.h"
 #include "Sample/HardParticle/Cylinder.h"
-#include "Sample/HardParticle/Dodecahedron.h"
+#include "Sample/HardParticle/Polyhedra.h"
 #include "Sample/HardParticle/EllipsoidalCylinder.h"
 #include "Sample/HardParticle/HemiEllipsoid.h"
 #include "Sample/HardParticle/HorizontalCylinder.h"
-#include "Sample/HardParticle/Icosahedron.h"
+#include "Sample/HardParticle/Polyhedra.h"
 #include "Sample/HardParticle/LongBoxGauss.h"
 #include "Sample/HardParticle/LongBoxLorentz.h"
-#include "Sample/HardParticle/PlatonicOctahedron.h"
-#include "Sample/HardParticle/PlatonicTetrahedron.h"
-#include "Sample/HardParticle/Prism3.h"
-#include "Sample/HardParticle/Prism6.h"
-#include "Sample/HardParticle/Pyramid2.h"
-#include "Sample/HardParticle/Pyramid3.h"
-#include "Sample/HardParticle/Pyramid4.h"
-#include "Sample/HardParticle/Pyramid6.h"
+#include "Sample/HardParticle/Polyhedra.h"
+#include "Sample/HardParticle/Polyhedra.h"
+#include "Sample/HardParticle/Polyhedra.h"
+#include "Sample/HardParticle/Polyhedra.h"
+#include "Sample/HardParticle/Polyhedra.h"
+#include "Sample/HardParticle/Polyhedra.h"
+#include "Sample/HardParticle/Polyhedra.h"
+#include "Sample/HardParticle/Polyhedra.h"
 #include "Sample/HardParticle/SawtoothRipple.h"
 #include "Sample/HardParticle/Sphere.h"
 #include "Sample/HardParticle/Spheroid.h"
-#include "Sample/HardParticle/TruncatedCube.h"
+#include "Sample/HardParticle/Polyhedra.h"
 #include "Sample/HardParticle/TruncatedSphere.h"
 #include "Sample/HardParticle/TruncatedSpheroid.h"
 #include "Sample/Interface/LayerRoughness.h"
diff --git a/Wrap/Swig/libBornAgainSample.i b/Wrap/Swig/libBornAgainSample.i
index d8e95e84890..2aef923e189 100644
--- a/Wrap/Swig/libBornAgainSample.i
+++ b/Wrap/Swig/libBornAgainSample.i
@@ -124,35 +124,25 @@
 %include "Sample/HardParticle/IFormFactorPrism.h"
 %include "Sample/HardParticle/IProfileRipple.h"
 
-%include "Sample/HardParticle/Bar.h"
-%include "Sample/HardParticle/Bipyramid4.h"
-%include "Sample/HardParticle/Box.h"
-%include "Sample/HardParticle/CantellatedCube.h"
+%include "Sample/HardParticle/Polyhedra.h"
+
 %include "Sample/HardParticle/Cone.h"
-%include "Sample/HardParticle/CosineRipple.h"
 %include "Sample/HardParticle/Cylinder.h"
-%include "Sample/HardParticle/Dodecahedron.h"
 %include "Sample/HardParticle/EllipsoidalCylinder.h"
-%include "Sample/HardParticle/Sphere.h"
-%include "Sample/HardParticle/Spheroid.h"
 %include "Sample/HardParticle/HemiEllipsoid.h"
 %include "Sample/HardParticle/HorizontalCylinder.h"
-%include "Sample/HardParticle/Icosahedron.h"
-%include "Sample/HardParticle/LongBoxGauss.h"
-%include "Sample/HardParticle/LongBoxLorentz.h"
-%include "Sample/HardParticle/PlatonicOctahedron.h"
-%include "Sample/HardParticle/PlatonicTetrahedron.h"
-%include "Sample/HardParticle/Prism3.h"
-%include "Sample/HardParticle/Prism6.h"
-%include "Sample/HardParticle/Pyramid2.h"
-%include "Sample/HardParticle/Pyramid3.h"
-%include "Sample/HardParticle/Pyramid4.h"
-%include "Sample/HardParticle/Pyramid6.h"
-%include "Sample/HardParticle/SawtoothRipple.h"
-%include "Sample/HardParticle/TruncatedCube.h"
+%include "Sample/HardParticle/Sphere.h"
+%include "Sample/HardParticle/Spheroid.h"
 %include "Sample/HardParticle/TruncatedSphere.h"
 %include "Sample/HardParticle/TruncatedSpheroid.h"
 
+%include "Sample/HardParticle/Bar.h"
+%include "Sample/HardParticle/CosineRipple.h"
+%include "Sample/HardParticle/SawtoothRipple.h"
+
+%include "Sample/HardParticle/LongBoxGauss.h"
+%include "Sample/HardParticle/LongBoxLorentz.h"
+
 %include "Sample/SoftParticle/Gauss.h"
 %include "Sample/SoftParticle/FuzzySphere.h"
 
diff --git a/auto/Wrap/libBornAgainSample.py b/auto/Wrap/libBornAgainSample.py
index 379f81ecf29..2557cc62dca 100644
--- a/auto/Wrap/libBornAgainSample.py
+++ b/auto/Wrap/libBornAgainSample.py
@@ -4810,110 +4810,6 @@ class ISawtoothRipple(IProfileRipple):
 
 # Register ISawtoothRipple in _libBornAgainSample:
 _libBornAgainSample.ISawtoothRipple_swigregister(ISawtoothRipple)
-class BarGauss(IProfileRectangularRipple):
-    r"""Proxy of C++ BarGauss class."""
-
-    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
-    __repr__ = _swig_repr
-
-    def __init__(self, *args):
-        r"""
-        __init__(BarGauss self, double length, double width, double height) -> BarGauss
-        __init__(BarGauss self, vdouble1d_t P) -> BarGauss
-        """
-        _libBornAgainSample.BarGauss_swiginit(self, _libBornAgainSample.new_BarGauss(*args))
-
-    def clone(self):
-        r"""clone(BarGauss self) -> BarGauss"""
-        return _libBornAgainSample.BarGauss_clone(self)
-
-    def className(self):
-        r"""className(BarGauss self) -> std::string"""
-        return _libBornAgainSample.BarGauss_className(self)
-
-    def parDefs(self):
-        r"""parDefs(BarGauss self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
-        return _libBornAgainSample.BarGauss_parDefs(self)
-    __swig_destroy__ = _libBornAgainSample.delete_BarGauss
-
-# Register BarGauss in _libBornAgainSample:
-_libBornAgainSample.BarGauss_swigregister(BarGauss)
-class BarLorentz(IProfileRectangularRipple):
-    r"""Proxy of C++ BarLorentz class."""
-
-    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
-    __repr__ = _swig_repr
-
-    def __init__(self, *args):
-        r"""
-        __init__(BarLorentz self, double length, double width, double height) -> BarLorentz
-        __init__(BarLorentz self, vdouble1d_t P) -> BarLorentz
-        """
-        _libBornAgainSample.BarLorentz_swiginit(self, _libBornAgainSample.new_BarLorentz(*args))
-
-    def clone(self):
-        r"""clone(BarLorentz self) -> BarLorentz"""
-        return _libBornAgainSample.BarLorentz_clone(self)
-
-    def className(self):
-        r"""className(BarLorentz self) -> std::string"""
-        return _libBornAgainSample.BarLorentz_className(self)
-
-    def parDefs(self):
-        r"""parDefs(BarLorentz self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
-        return _libBornAgainSample.BarLorentz_parDefs(self)
-    __swig_destroy__ = _libBornAgainSample.delete_BarLorentz
-
-# Register BarLorentz in _libBornAgainSample:
-_libBornAgainSample.BarLorentz_swigregister(BarLorentz)
-class Bipyramid4(IFormFactorPolyhedron):
-    r"""Proxy of C++ Bipyramid4 class."""
-
-    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
-    __repr__ = _swig_repr
-
-    def __init__(self, *args):
-        r"""
-        __init__(Bipyramid4 self, double length, double height, double height_ratio, double alpha) -> Bipyramid4
-        __init__(Bipyramid4 self, vdouble1d_t P) -> Bipyramid4
-        """
-        _libBornAgainSample.Bipyramid4_swiginit(self, _libBornAgainSample.new_Bipyramid4(*args))
-
-    def clone(self):
-        r"""clone(Bipyramid4 self) -> Bipyramid4"""
-        return _libBornAgainSample.Bipyramid4_clone(self)
-
-    def className(self):
-        r"""className(Bipyramid4 self) -> std::string"""
-        return _libBornAgainSample.Bipyramid4_className(self)
-
-    def parDefs(self):
-        r"""parDefs(Bipyramid4 self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
-        return _libBornAgainSample.Bipyramid4_parDefs(self)
-
-    def length(self):
-        r"""length(Bipyramid4 self) -> double"""
-        return _libBornAgainSample.Bipyramid4_length(self)
-
-    def height(self):
-        r"""height(Bipyramid4 self) -> double"""
-        return _libBornAgainSample.Bipyramid4_height(self)
-
-    def heightRatio(self):
-        r"""heightRatio(Bipyramid4 self) -> double"""
-        return _libBornAgainSample.Bipyramid4_heightRatio(self)
-
-    def alpha(self):
-        r"""alpha(Bipyramid4 self) -> double"""
-        return _libBornAgainSample.Bipyramid4_alpha(self)
-
-    def validate(self):
-        r"""validate(Bipyramid4 self) -> std::string"""
-        return _libBornAgainSample.Bipyramid4_validate(self)
-    __swig_destroy__ = _libBornAgainSample.delete_Bipyramid4
-
-# Register Bipyramid4 in _libBornAgainSample:
-_libBornAgainSample.Bipyramid4_swigregister(Bipyramid4)
 class Box(IFormFactorPrism):
     r"""Proxy of C++ Box class."""
 
@@ -4970,230 +4866,150 @@ class Box(IFormFactorPrism):
 
 # Register Box in _libBornAgainSample:
 _libBornAgainSample.Box_swigregister(Box)
-class CantellatedCube(IFormFactorPolyhedron):
-    r"""Proxy of C++ CantellatedCube class."""
+class Prism3(IFormFactorPrism):
+    r"""Proxy of C++ Prism3 class."""
 
     thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
     __repr__ = _swig_repr
 
     def __init__(self, *args):
         r"""
-        __init__(CantellatedCube self, double length, double removed_length) -> CantellatedCube
-        __init__(CantellatedCube self, vdouble1d_t P) -> CantellatedCube
+        __init__(Prism3 self, double base_edge, double height) -> Prism3
+        __init__(Prism3 self, vdouble1d_t P) -> Prism3
         """
-        _libBornAgainSample.CantellatedCube_swiginit(self, _libBornAgainSample.new_CantellatedCube(*args))
+        _libBornAgainSample.Prism3_swiginit(self, _libBornAgainSample.new_Prism3(*args))
 
     def clone(self):
-        r"""clone(CantellatedCube self) -> CantellatedCube"""
-        return _libBornAgainSample.CantellatedCube_clone(self)
+        r"""clone(Prism3 self) -> Prism3"""
+        return _libBornAgainSample.Prism3_clone(self)
 
     def className(self):
-        r"""className(CantellatedCube self) -> std::string"""
-        return _libBornAgainSample.CantellatedCube_className(self)
+        r"""className(Prism3 self) -> std::string"""
+        return _libBornAgainSample.Prism3_className(self)
 
     def parDefs(self):
-        r"""parDefs(CantellatedCube self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
-        return _libBornAgainSample.CantellatedCube_parDefs(self)
-
-    def length(self):
-        r"""length(CantellatedCube self) -> double"""
-        return _libBornAgainSample.CantellatedCube_length(self)
+        r"""parDefs(Prism3 self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
+        return _libBornAgainSample.Prism3_parDefs(self)
 
-    def removedLength(self):
-        r"""removedLength(CantellatedCube self) -> double"""
-        return _libBornAgainSample.CantellatedCube_removedLength(self)
+    def baseEdge(self):
+        r"""baseEdge(Prism3 self) -> double"""
+        return _libBornAgainSample.Prism3_baseEdge(self)
 
-    def validate(self):
-        r"""validate(CantellatedCube self) -> std::string"""
-        return _libBornAgainSample.CantellatedCube_validate(self)
-    __swig_destroy__ = _libBornAgainSample.delete_CantellatedCube
+    def height(self):
+        r"""height(Prism3 self) -> double"""
+        return _libBornAgainSample.Prism3_height(self)
+    __swig_destroy__ = _libBornAgainSample.delete_Prism3
 
-# Register CantellatedCube in _libBornAgainSample:
-_libBornAgainSample.CantellatedCube_swigregister(CantellatedCube)
-class Cone(IFormFactor):
-    r"""Proxy of C++ Cone class."""
+# Register Prism3 in _libBornAgainSample:
+_libBornAgainSample.Prism3_swigregister(Prism3)
+class Prism6(IFormFactorPrism):
+    r"""Proxy of C++ Prism6 class."""
 
     thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
     __repr__ = _swig_repr
 
     def __init__(self, *args):
         r"""
-        __init__(Cone self, double radius, double height, double alpha) -> Cone
-        __init__(Cone self, vdouble1d_t P) -> Cone
+        __init__(Prism6 self, double base_edge, double height) -> Prism6
+        __init__(Prism6 self, vdouble1d_t P) -> Prism6
         """
-        _libBornAgainSample.Cone_swiginit(self, _libBornAgainSample.new_Cone(*args))
+        _libBornAgainSample.Prism6_swiginit(self, _libBornAgainSample.new_Prism6(*args))
 
     def clone(self):
-        r"""clone(Cone self) -> Cone"""
-        return _libBornAgainSample.Cone_clone(self)
+        r"""clone(Prism6 self) -> Prism6"""
+        return _libBornAgainSample.Prism6_clone(self)
 
     def className(self):
-        r"""className(Cone self) -> std::string"""
-        return _libBornAgainSample.Cone_className(self)
+        r"""className(Prism6 self) -> std::string"""
+        return _libBornAgainSample.Prism6_className(self)
 
     def parDefs(self):
-        r"""parDefs(Cone self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
-        return _libBornAgainSample.Cone_parDefs(self)
+        r"""parDefs(Prism6 self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
+        return _libBornAgainSample.Prism6_parDefs(self)
 
-    def radius(self):
-        r"""radius(Cone self) -> double"""
-        return _libBornAgainSample.Cone_radius(self)
+    def baseEdge(self):
+        r"""baseEdge(Prism6 self) -> double"""
+        return _libBornAgainSample.Prism6_baseEdge(self)
 
     def height(self):
-        r"""height(Cone self) -> double"""
-        return _libBornAgainSample.Cone_height(self)
-
-    def alpha(self):
-        r"""alpha(Cone self) -> double"""
-        return _libBornAgainSample.Cone_alpha(self)
-
-    def radialExtension(self):
-        r"""radialExtension(Cone self) -> double"""
-        return _libBornAgainSample.Cone_radialExtension(self)
-
-    def formfactor(self, q):
-        r"""formfactor(Cone self, C3 q) -> complex_t"""
-        return _libBornAgainSample.Cone_formfactor(self, q)
-
-    def validate(self):
-        r"""validate(Cone self) -> std::string"""
-        return _libBornAgainSample.Cone_validate(self)
-    __swig_destroy__ = _libBornAgainSample.delete_Cone
+        r"""height(Prism6 self) -> double"""
+        return _libBornAgainSample.Prism6_height(self)
+    __swig_destroy__ = _libBornAgainSample.delete_Prism6
 
-# Register Cone in _libBornAgainSample:
-_libBornAgainSample.Cone_swigregister(Cone)
-class CosineRippleBox(ICosineRipple):
-    r"""Proxy of C++ CosineRippleBox class."""
+# Register Prism6 in _libBornAgainSample:
+_libBornAgainSample.Prism6_swigregister(Prism6)
+class PlatonicTetrahedron(IFormFactorPolyhedron):
+    r"""Proxy of C++ PlatonicTetrahedron class."""
 
     thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
     __repr__ = _swig_repr
 
     def __init__(self, *args):
         r"""
-        __init__(CosineRippleBox self, double length, double width, double height) -> CosineRippleBox
-        __init__(CosineRippleBox self, vdouble1d_t P) -> CosineRippleBox
+        __init__(PlatonicTetrahedron self, double edge) -> PlatonicTetrahedron
+        __init__(PlatonicTetrahedron self, vdouble1d_t P) -> PlatonicTetrahedron
         """
-        _libBornAgainSample.CosineRippleBox_swiginit(self, _libBornAgainSample.new_CosineRippleBox(*args))
+        _libBornAgainSample.PlatonicTetrahedron_swiginit(self, _libBornAgainSample.new_PlatonicTetrahedron(*args))
 
     def clone(self):
-        r"""clone(CosineRippleBox self) -> CosineRippleBox"""
-        return _libBornAgainSample.CosineRippleBox_clone(self)
+        r"""clone(PlatonicTetrahedron self) -> PlatonicTetrahedron"""
+        return _libBornAgainSample.PlatonicTetrahedron_clone(self)
 
     def className(self):
-        r"""className(CosineRippleBox self) -> std::string"""
-        return _libBornAgainSample.CosineRippleBox_className(self)
+        r"""className(PlatonicTetrahedron self) -> std::string"""
+        return _libBornAgainSample.PlatonicTetrahedron_className(self)
 
     def parDefs(self):
-        r"""parDefs(CosineRippleBox self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
-        return _libBornAgainSample.CosineRippleBox_parDefs(self)
-    __swig_destroy__ = _libBornAgainSample.delete_CosineRippleBox
+        r"""parDefs(PlatonicTetrahedron self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
+        return _libBornAgainSample.PlatonicTetrahedron_parDefs(self)
 
-# Register CosineRippleBox in _libBornAgainSample:
-_libBornAgainSample.CosineRippleBox_swigregister(CosineRippleBox)
-class CosineRippleGauss(ICosineRipple):
-    r"""Proxy of C++ CosineRippleGauss class."""
+    def edge(self):
+        r"""edge(PlatonicTetrahedron self) -> double"""
+        return _libBornAgainSample.PlatonicTetrahedron_edge(self)
+
+    def height(self):
+        r"""height(PlatonicTetrahedron self) -> double"""
+        return _libBornAgainSample.PlatonicTetrahedron_height(self)
+    __swig_destroy__ = _libBornAgainSample.delete_PlatonicTetrahedron
+
+# Register PlatonicTetrahedron in _libBornAgainSample:
+_libBornAgainSample.PlatonicTetrahedron_swigregister(PlatonicTetrahedron)
+class PlatonicOctahedron(IFormFactorPolyhedron):
+    r"""Proxy of C++ PlatonicOctahedron class."""
 
     thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
     __repr__ = _swig_repr
 
     def __init__(self, *args):
         r"""
-        __init__(CosineRippleGauss self, double length, double width, double height) -> CosineRippleGauss
-        __init__(CosineRippleGauss self, vdouble1d_t P) -> CosineRippleGauss
+        __init__(PlatonicOctahedron self, double edge) -> PlatonicOctahedron
+        __init__(PlatonicOctahedron self, vdouble1d_t P) -> PlatonicOctahedron
         """
-        _libBornAgainSample.CosineRippleGauss_swiginit(self, _libBornAgainSample.new_CosineRippleGauss(*args))
+        _libBornAgainSample.PlatonicOctahedron_swiginit(self, _libBornAgainSample.new_PlatonicOctahedron(*args))
 
     def clone(self):
-        r"""clone(CosineRippleGauss self) -> CosineRippleGauss"""
-        return _libBornAgainSample.CosineRippleGauss_clone(self)
+        r"""clone(PlatonicOctahedron self) -> PlatonicOctahedron"""
+        return _libBornAgainSample.PlatonicOctahedron_clone(self)
 
     def className(self):
-        r"""className(CosineRippleGauss self) -> std::string"""
-        return _libBornAgainSample.CosineRippleGauss_className(self)
+        r"""className(PlatonicOctahedron self) -> std::string"""
+        return _libBornAgainSample.PlatonicOctahedron_className(self)
 
     def parDefs(self):
-        r"""parDefs(CosineRippleGauss self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
-        return _libBornAgainSample.CosineRippleGauss_parDefs(self)
-    __swig_destroy__ = _libBornAgainSample.delete_CosineRippleGauss
-
-# Register CosineRippleGauss in _libBornAgainSample:
-_libBornAgainSample.CosineRippleGauss_swigregister(CosineRippleGauss)
-class CosineRippleLorentz(ICosineRipple):
-    r"""Proxy of C++ CosineRippleLorentz class."""
-
-    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
-    __repr__ = _swig_repr
-
-    def __init__(self, *args):
-        r"""
-        __init__(CosineRippleLorentz self, double length, double width, double height) -> CosineRippleLorentz
-        __init__(CosineRippleLorentz self, vdouble1d_t P) -> CosineRippleLorentz
-        """
-        _libBornAgainSample.CosineRippleLorentz_swiginit(self, _libBornAgainSample.new_CosineRippleLorentz(*args))
-
-    def clone(self):
-        r"""clone(CosineRippleLorentz self) -> CosineRippleLorentz"""
-        return _libBornAgainSample.CosineRippleLorentz_clone(self)
-
-    def className(self):
-        r"""className(CosineRippleLorentz self) -> std::string"""
-        return _libBornAgainSample.CosineRippleLorentz_className(self)
-
-    def parDefs(self):
-        r"""parDefs(CosineRippleLorentz self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
-        return _libBornAgainSample.CosineRippleLorentz_parDefs(self)
-    __swig_destroy__ = _libBornAgainSample.delete_CosineRippleLorentz
-
-# Register CosineRippleLorentz in _libBornAgainSample:
-_libBornAgainSample.CosineRippleLorentz_swigregister(CosineRippleLorentz)
-class Cylinder(IFormFactor):
-    r"""Proxy of C++ Cylinder class."""
-
-    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
-    __repr__ = _swig_repr
-
-    def __init__(self, *args):
-        r"""
-        __init__(Cylinder self, double radius, double height) -> Cylinder
-        __init__(Cylinder self, vdouble1d_t P) -> Cylinder
-        """
-        _libBornAgainSample.Cylinder_swiginit(self, _libBornAgainSample.new_Cylinder(*args))
-
-    def clone(self):
-        r"""clone(Cylinder self) -> Cylinder"""
-        return _libBornAgainSample.Cylinder_clone(self)
-
-    def className(self):
-        r"""className(Cylinder self) -> std::string"""
-        return _libBornAgainSample.Cylinder_className(self)
+        r"""parDefs(PlatonicOctahedron self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
+        return _libBornAgainSample.PlatonicOctahedron_parDefs(self)
 
-    def parDefs(self):
-        r"""parDefs(Cylinder self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
-        return _libBornAgainSample.Cylinder_parDefs(self)
+    def edge(self):
+        r"""edge(PlatonicOctahedron self) -> double"""
+        return _libBornAgainSample.PlatonicOctahedron_edge(self)
 
     def height(self):
-        r"""height(Cylinder self) -> double"""
-        return _libBornAgainSample.Cylinder_height(self)
-
-    def radius(self):
-        r"""radius(Cylinder self) -> double"""
-        return _libBornAgainSample.Cylinder_radius(self)
-
-    def radialExtension(self):
-        r"""radialExtension(Cylinder self) -> double"""
-        return _libBornAgainSample.Cylinder_radialExtension(self)
-
-    def formfactor(self, q):
-        r"""formfactor(Cylinder self, C3 q) -> complex_t"""
-        return _libBornAgainSample.Cylinder_formfactor(self, q)
-
-    def validate(self):
-        r"""validate(Cylinder self) -> std::string"""
-        return _libBornAgainSample.Cylinder_validate(self)
-    __swig_destroy__ = _libBornAgainSample.delete_Cylinder
+        r"""height(PlatonicOctahedron self) -> double"""
+        return _libBornAgainSample.PlatonicOctahedron_height(self)
+    __swig_destroy__ = _libBornAgainSample.delete_PlatonicOctahedron
 
-# Register Cylinder in _libBornAgainSample:
-_libBornAgainSample.Cylinder_swigregister(Cylinder)
+# Register PlatonicOctahedron in _libBornAgainSample:
+_libBornAgainSample.PlatonicOctahedron_swigregister(PlatonicOctahedron)
 class Dodecahedron(IFormFactorPolyhedron):
     r"""Proxy of C++ Dodecahedron class."""
 
@@ -5226,711 +5042,939 @@ class Dodecahedron(IFormFactorPolyhedron):
 
 # Register Dodecahedron in _libBornAgainSample:
 _libBornAgainSample.Dodecahedron_swigregister(Dodecahedron)
-class EllipsoidalCylinder(IFormFactor):
-    r"""Proxy of C++ EllipsoidalCylinder class."""
+class Icosahedron(IFormFactorPolyhedron):
+    r"""Proxy of C++ Icosahedron class."""
 
     thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
     __repr__ = _swig_repr
 
     def __init__(self, *args):
         r"""
-        __init__(EllipsoidalCylinder self, double radius_x, double radius_y, double height) -> EllipsoidalCylinder
-        __init__(EllipsoidalCylinder self, vdouble1d_t P) -> EllipsoidalCylinder
+        __init__(Icosahedron self, double edge) -> Icosahedron
+        __init__(Icosahedron self, vdouble1d_t P) -> Icosahedron
         """
-        _libBornAgainSample.EllipsoidalCylinder_swiginit(self, _libBornAgainSample.new_EllipsoidalCylinder(*args))
+        _libBornAgainSample.Icosahedron_swiginit(self, _libBornAgainSample.new_Icosahedron(*args))
 
     def clone(self):
-        r"""clone(EllipsoidalCylinder self) -> EllipsoidalCylinder"""
-        return _libBornAgainSample.EllipsoidalCylinder_clone(self)
+        r"""clone(Icosahedron self) -> Icosahedron"""
+        return _libBornAgainSample.Icosahedron_clone(self)
 
     def className(self):
-        r"""className(EllipsoidalCylinder self) -> std::string"""
-        return _libBornAgainSample.EllipsoidalCylinder_className(self)
+        r"""className(Icosahedron self) -> std::string"""
+        return _libBornAgainSample.Icosahedron_className(self)
 
     def parDefs(self):
-        r"""parDefs(EllipsoidalCylinder self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
-        return _libBornAgainSample.EllipsoidalCylinder_parDefs(self)
-
-    def radiusX(self):
-        r"""radiusX(EllipsoidalCylinder self) -> double"""
-        return _libBornAgainSample.EllipsoidalCylinder_radiusX(self)
-
-    def radiusY(self):
-        r"""radiusY(EllipsoidalCylinder self) -> double"""
-        return _libBornAgainSample.EllipsoidalCylinder_radiusY(self)
-
-    def height(self):
-        r"""height(EllipsoidalCylinder self) -> double"""
-        return _libBornAgainSample.EllipsoidalCylinder_height(self)
-
-    def radialExtension(self):
-        r"""radialExtension(EllipsoidalCylinder self) -> double"""
-        return _libBornAgainSample.EllipsoidalCylinder_radialExtension(self)
-
-    def formfactor(self, q):
-        r"""formfactor(EllipsoidalCylinder self, C3 q) -> complex_t"""
-        return _libBornAgainSample.EllipsoidalCylinder_formfactor(self, q)
+        r"""parDefs(Icosahedron self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
+        return _libBornAgainSample.Icosahedron_parDefs(self)
 
-    def validate(self):
-        r"""validate(EllipsoidalCylinder self) -> std::string"""
-        return _libBornAgainSample.EllipsoidalCylinder_validate(self)
-    __swig_destroy__ = _libBornAgainSample.delete_EllipsoidalCylinder
+    def edge(self):
+        r"""edge(Icosahedron self) -> double"""
+        return _libBornAgainSample.Icosahedron_edge(self)
+    __swig_destroy__ = _libBornAgainSample.delete_Icosahedron
 
-# Register EllipsoidalCylinder in _libBornAgainSample:
-_libBornAgainSample.EllipsoidalCylinder_swigregister(EllipsoidalCylinder)
-class Sphere(IFormFactor):
-    r"""Proxy of C++ Sphere class."""
+# Register Icosahedron in _libBornAgainSample:
+_libBornAgainSample.Icosahedron_swigregister(Icosahedron)
+class Pyramid2(IFormFactorPolyhedron):
+    r"""Proxy of C++ Pyramid2 class."""
 
     thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
     __repr__ = _swig_repr
 
     def __init__(self, *args):
         r"""
-        __init__(Sphere self, double radius, bool position_at_center=False) -> Sphere
-        __init__(Sphere self, vdouble1d_t P, bool position_at_center=False) -> Sphere
+        __init__(Pyramid2 self, double length, double width, double height, double alpha) -> Pyramid2
+        __init__(Pyramid2 self, vdouble1d_t P) -> Pyramid2
         """
-        _libBornAgainSample.Sphere_swiginit(self, _libBornAgainSample.new_Sphere(*args))
+        _libBornAgainSample.Pyramid2_swiginit(self, _libBornAgainSample.new_Pyramid2(*args))
 
     def clone(self):
-        r"""clone(Sphere self) -> Sphere"""
-        return _libBornAgainSample.Sphere_clone(self)
+        r"""clone(Pyramid2 self) -> Pyramid2"""
+        return _libBornAgainSample.Pyramid2_clone(self)
 
     def className(self):
-        r"""className(Sphere self) -> std::string"""
-        return _libBornAgainSample.Sphere_className(self)
+        r"""className(Pyramid2 self) -> std::string"""
+        return _libBornAgainSample.Pyramid2_className(self)
 
     def parDefs(self):
-        r"""parDefs(Sphere self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
-        return _libBornAgainSample.Sphere_parDefs(self)
+        r"""parDefs(Pyramid2 self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
+        return _libBornAgainSample.Pyramid2_parDefs(self)
 
-    def radius(self):
-        r"""radius(Sphere self) -> double"""
-        return _libBornAgainSample.Sphere_radius(self)
+    def length(self):
+        r"""length(Pyramid2 self) -> double"""
+        return _libBornAgainSample.Pyramid2_length(self)
 
-    def radialExtension(self):
-        r"""radialExtension(Sphere self) -> double"""
-        return _libBornAgainSample.Sphere_radialExtension(self)
+    def width(self):
+        r"""width(Pyramid2 self) -> double"""
+        return _libBornAgainSample.Pyramid2_width(self)
 
-    def formfactor(self, q):
-        r"""formfactor(Sphere self, C3 q) -> complex_t"""
-        return _libBornAgainSample.Sphere_formfactor(self, q)
+    def height(self):
+        r"""height(Pyramid2 self) -> double"""
+        return _libBornAgainSample.Pyramid2_height(self)
 
-    def validate(self):
-        r"""validate(Sphere self) -> std::string"""
-        return _libBornAgainSample.Sphere_validate(self)
-    __swig_destroy__ = _libBornAgainSample.delete_Sphere
+    def alpha(self):
+        r"""alpha(Pyramid2 self) -> double"""
+        return _libBornAgainSample.Pyramid2_alpha(self)
+    __swig_destroy__ = _libBornAgainSample.delete_Pyramid2
 
-# Register Sphere in _libBornAgainSample:
-_libBornAgainSample.Sphere_swigregister(Sphere)
-class Spheroid(IFormFactor):
-    r"""Proxy of C++ Spheroid class."""
+# Register Pyramid2 in _libBornAgainSample:
+_libBornAgainSample.Pyramid2_swigregister(Pyramid2)
+class Pyramid3(IFormFactorPolyhedron):
+    r"""Proxy of C++ Pyramid3 class."""
 
     thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
     __repr__ = _swig_repr
 
     def __init__(self, *args):
         r"""
-        __init__(Spheroid self, double radius, double height) -> Spheroid
-        __init__(Spheroid self, vdouble1d_t P) -> Spheroid
+        __init__(Pyramid3 self, double base_edge, double height, double alpha) -> Pyramid3
+        __init__(Pyramid3 self, vdouble1d_t P) -> Pyramid3
         """
-        _libBornAgainSample.Spheroid_swiginit(self, _libBornAgainSample.new_Spheroid(*args))
+        _libBornAgainSample.Pyramid3_swiginit(self, _libBornAgainSample.new_Pyramid3(*args))
 
     def clone(self):
-        r"""clone(Spheroid self) -> Spheroid"""
-        return _libBornAgainSample.Spheroid_clone(self)
+        r"""clone(Pyramid3 self) -> Pyramid3"""
+        return _libBornAgainSample.Pyramid3_clone(self)
 
     def className(self):
-        r"""className(Spheroid self) -> std::string"""
-        return _libBornAgainSample.Spheroid_className(self)
+        r"""className(Pyramid3 self) -> std::string"""
+        return _libBornAgainSample.Pyramid3_className(self)
 
     def parDefs(self):
-        r"""parDefs(Spheroid self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
-        return _libBornAgainSample.Spheroid_parDefs(self)
-
-    def height(self):
-        r"""height(Spheroid self) -> double"""
-        return _libBornAgainSample.Spheroid_height(self)
-
-    def radius(self):
-        r"""radius(Spheroid self) -> double"""
-        return _libBornAgainSample.Spheroid_radius(self)
+        r"""parDefs(Pyramid3 self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
+        return _libBornAgainSample.Pyramid3_parDefs(self)
 
-    def radialExtension(self):
-        r"""radialExtension(Spheroid self) -> double"""
-        return _libBornAgainSample.Spheroid_radialExtension(self)
+    def baseEdge(self):
+        r"""baseEdge(Pyramid3 self) -> double"""
+        return _libBornAgainSample.Pyramid3_baseEdge(self)
 
-    def formfactor(self, q):
-        r"""formfactor(Spheroid self, C3 q) -> complex_t"""
-        return _libBornAgainSample.Spheroid_formfactor(self, q)
+    def height(self):
+        r"""height(Pyramid3 self) -> double"""
+        return _libBornAgainSample.Pyramid3_height(self)
 
-    def validate(self):
-        r"""validate(Spheroid self) -> std::string"""
-        return _libBornAgainSample.Spheroid_validate(self)
-    __swig_destroy__ = _libBornAgainSample.delete_Spheroid
+    def alpha(self):
+        r"""alpha(Pyramid3 self) -> double"""
+        return _libBornAgainSample.Pyramid3_alpha(self)
+    __swig_destroy__ = _libBornAgainSample.delete_Pyramid3
 
-# Register Spheroid in _libBornAgainSample:
-_libBornAgainSample.Spheroid_swigregister(Spheroid)
-class HemiEllipsoid(IFormFactor):
-    r"""Proxy of C++ HemiEllipsoid class."""
+# Register Pyramid3 in _libBornAgainSample:
+_libBornAgainSample.Pyramid3_swigregister(Pyramid3)
+class Pyramid4(IFormFactorPolyhedron):
+    r"""Proxy of C++ Pyramid4 class."""
 
     thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
     __repr__ = _swig_repr
 
     def __init__(self, *args):
         r"""
-        __init__(HemiEllipsoid self, double radius_x, double radius_y, double height) -> HemiEllipsoid
-        __init__(HemiEllipsoid self, vdouble1d_t P) -> HemiEllipsoid
+        __init__(Pyramid4 self, double base_edge, double height, double alpha) -> Pyramid4
+        __init__(Pyramid4 self, vdouble1d_t P) -> Pyramid4
         """
-        _libBornAgainSample.HemiEllipsoid_swiginit(self, _libBornAgainSample.new_HemiEllipsoid(*args))
-    __swig_destroy__ = _libBornAgainSample.delete_HemiEllipsoid
+        _libBornAgainSample.Pyramid4_swiginit(self, _libBornAgainSample.new_Pyramid4(*args))
 
     def clone(self):
-        r"""clone(HemiEllipsoid self) -> HemiEllipsoid"""
-        return _libBornAgainSample.HemiEllipsoid_clone(self)
+        r"""clone(Pyramid4 self) -> Pyramid4"""
+        return _libBornAgainSample.Pyramid4_clone(self)
 
     def className(self):
-        r"""className(HemiEllipsoid self) -> std::string"""
-        return _libBornAgainSample.HemiEllipsoid_className(self)
+        r"""className(Pyramid4 self) -> std::string"""
+        return _libBornAgainSample.Pyramid4_className(self)
 
     def parDefs(self):
-        r"""parDefs(HemiEllipsoid self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
-        return _libBornAgainSample.HemiEllipsoid_parDefs(self)
+        r"""parDefs(Pyramid4 self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
+        return _libBornAgainSample.Pyramid4_parDefs(self)
 
     def height(self):
-        r"""height(HemiEllipsoid self) -> double"""
-        return _libBornAgainSample.HemiEllipsoid_height(self)
-
-    def radiusX(self):
-        r"""radiusX(HemiEllipsoid self) -> double"""
-        return _libBornAgainSample.HemiEllipsoid_radiusX(self)
-
-    def radiusY(self):
-        r"""radiusY(HemiEllipsoid self) -> double"""
-        return _libBornAgainSample.HemiEllipsoid_radiusY(self)
+        r"""height(Pyramid4 self) -> double"""
+        return _libBornAgainSample.Pyramid4_height(self)
 
-    def radialExtension(self):
-        r"""radialExtension(HemiEllipsoid self) -> double"""
-        return _libBornAgainSample.HemiEllipsoid_radialExtension(self)
+    def baseEdge(self):
+        r"""baseEdge(Pyramid4 self) -> double"""
+        return _libBornAgainSample.Pyramid4_baseEdge(self)
 
-    def formfactor(self, q):
-        r"""formfactor(HemiEllipsoid self, C3 q) -> complex_t"""
-        return _libBornAgainSample.HemiEllipsoid_formfactor(self, q)
+    def alpha(self):
+        r"""alpha(Pyramid4 self) -> double"""
+        return _libBornAgainSample.Pyramid4_alpha(self)
 
     def validate(self):
-        r"""validate(HemiEllipsoid self) -> std::string"""
-        return _libBornAgainSample.HemiEllipsoid_validate(self)
+        r"""validate(Pyramid4 self) -> std::string"""
+        return _libBornAgainSample.Pyramid4_validate(self)
+    __swig_destroy__ = _libBornAgainSample.delete_Pyramid4
 
-# Register HemiEllipsoid in _libBornAgainSample:
-_libBornAgainSample.HemiEllipsoid_swigregister(HemiEllipsoid)
-class HorizontalCylinder(IFormFactor):
-    r"""Proxy of C++ HorizontalCylinder class."""
+# Register Pyramid4 in _libBornAgainSample:
+_libBornAgainSample.Pyramid4_swigregister(Pyramid4)
+class Pyramid6(IFormFactorPolyhedron):
+    r"""Proxy of C++ Pyramid6 class."""
 
     thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
     __repr__ = _swig_repr
 
     def __init__(self, *args):
         r"""
-        __init__(HorizontalCylinder self, double radius, double length, double slice_bottom, double slice_top) -> HorizontalCylinder
-        __init__(HorizontalCylinder self, double radius, double length) -> HorizontalCylinder
-        __init__(HorizontalCylinder self, vdouble1d_t P) -> HorizontalCylinder
+        __init__(Pyramid6 self, double base_edge, double height, double alpha) -> Pyramid6
+        __init__(Pyramid6 self, vdouble1d_t P) -> Pyramid6
         """
-        _libBornAgainSample.HorizontalCylinder_swiginit(self, _libBornAgainSample.new_HorizontalCylinder(*args))
+        _libBornAgainSample.Pyramid6_swiginit(self, _libBornAgainSample.new_Pyramid6(*args))
 
     def clone(self):
-        r"""clone(HorizontalCylinder self) -> HorizontalCylinder"""
-        return _libBornAgainSample.HorizontalCylinder_clone(self)
+        r"""clone(Pyramid6 self) -> Pyramid6"""
+        return _libBornAgainSample.Pyramid6_clone(self)
 
     def className(self):
-        r"""className(HorizontalCylinder self) -> std::string"""
-        return _libBornAgainSample.HorizontalCylinder_className(self)
+        r"""className(Pyramid6 self) -> std::string"""
+        return _libBornAgainSample.Pyramid6_className(self)
 
     def parDefs(self):
-        r"""parDefs(HorizontalCylinder self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
-        return _libBornAgainSample.HorizontalCylinder_parDefs(self)
-
-    def length(self):
-        r"""length(HorizontalCylinder self) -> double"""
-        return _libBornAgainSample.HorizontalCylinder_length(self)
-
-    def radius(self):
-        r"""radius(HorizontalCylinder self) -> double"""
-        return _libBornAgainSample.HorizontalCylinder_radius(self)
-
-    def slice_bottom(self):
-        r"""slice_bottom(HorizontalCylinder self) -> double"""
-        return _libBornAgainSample.HorizontalCylinder_slice_bottom(self)
+        r"""parDefs(Pyramid6 self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
+        return _libBornAgainSample.Pyramid6_parDefs(self)
 
-    def slice_top(self):
-        r"""slice_top(HorizontalCylinder self) -> double"""
-        return _libBornAgainSample.HorizontalCylinder_slice_top(self)
+    def baseEdge(self):
+        r"""baseEdge(Pyramid6 self) -> double"""
+        return _libBornAgainSample.Pyramid6_baseEdge(self)
 
-    def radialExtension(self):
-        r"""radialExtension(HorizontalCylinder self) -> double"""
-        return _libBornAgainSample.HorizontalCylinder_radialExtension(self)
+    def height(self):
+        r"""height(Pyramid6 self) -> double"""
+        return _libBornAgainSample.Pyramid6_height(self)
 
-    def formfactor(self, q):
-        r"""formfactor(HorizontalCylinder self, C3 q) -> complex_t"""
-        return _libBornAgainSample.HorizontalCylinder_formfactor(self, q)
+    def alpha(self):
+        r"""alpha(Pyramid6 self) -> double"""
+        return _libBornAgainSample.Pyramid6_alpha(self)
 
     def validate(self):
-        r"""validate(HorizontalCylinder self) -> std::string"""
-        return _libBornAgainSample.HorizontalCylinder_validate(self)
-    __swig_destroy__ = _libBornAgainSample.delete_HorizontalCylinder
+        r"""validate(Pyramid6 self) -> std::string"""
+        return _libBornAgainSample.Pyramid6_validate(self)
+    __swig_destroy__ = _libBornAgainSample.delete_Pyramid6
 
-# Register HorizontalCylinder in _libBornAgainSample:
-_libBornAgainSample.HorizontalCylinder_swigregister(HorizontalCylinder)
-class Icosahedron(IFormFactorPolyhedron):
-    r"""Proxy of C++ Icosahedron class."""
+# Register Pyramid6 in _libBornAgainSample:
+_libBornAgainSample.Pyramid6_swigregister(Pyramid6)
+class Bipyramid4(IFormFactorPolyhedron):
+    r"""Proxy of C++ Bipyramid4 class."""
 
     thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
     __repr__ = _swig_repr
 
     def __init__(self, *args):
         r"""
-        __init__(Icosahedron self, double edge) -> Icosahedron
-        __init__(Icosahedron self, vdouble1d_t P) -> Icosahedron
+        __init__(Bipyramid4 self, double length, double height, double height_ratio, double alpha) -> Bipyramid4
+        __init__(Bipyramid4 self, vdouble1d_t P) -> Bipyramid4
         """
-        _libBornAgainSample.Icosahedron_swiginit(self, _libBornAgainSample.new_Icosahedron(*args))
+        _libBornAgainSample.Bipyramid4_swiginit(self, _libBornAgainSample.new_Bipyramid4(*args))
 
     def clone(self):
-        r"""clone(Icosahedron self) -> Icosahedron"""
-        return _libBornAgainSample.Icosahedron_clone(self)
+        r"""clone(Bipyramid4 self) -> Bipyramid4"""
+        return _libBornAgainSample.Bipyramid4_clone(self)
 
     def className(self):
-        r"""className(Icosahedron self) -> std::string"""
-        return _libBornAgainSample.Icosahedron_className(self)
+        r"""className(Bipyramid4 self) -> std::string"""
+        return _libBornAgainSample.Bipyramid4_className(self)
 
     def parDefs(self):
-        r"""parDefs(Icosahedron self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
-        return _libBornAgainSample.Icosahedron_parDefs(self)
+        r"""parDefs(Bipyramid4 self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
+        return _libBornAgainSample.Bipyramid4_parDefs(self)
 
-    def edge(self):
-        r"""edge(Icosahedron self) -> double"""
-        return _libBornAgainSample.Icosahedron_edge(self)
-    __swig_destroy__ = _libBornAgainSample.delete_Icosahedron
+    def length(self):
+        r"""length(Bipyramid4 self) -> double"""
+        return _libBornAgainSample.Bipyramid4_length(self)
 
-# Register Icosahedron in _libBornAgainSample:
-_libBornAgainSample.Icosahedron_swigregister(Icosahedron)
-class LongBoxGauss(IFormFactor):
-    r"""Proxy of C++ LongBoxGauss class."""
+    def height(self):
+        r"""height(Bipyramid4 self) -> double"""
+        return _libBornAgainSample.Bipyramid4_height(self)
+
+    def heightRatio(self):
+        r"""heightRatio(Bipyramid4 self) -> double"""
+        return _libBornAgainSample.Bipyramid4_heightRatio(self)
+
+    def alpha(self):
+        r"""alpha(Bipyramid4 self) -> double"""
+        return _libBornAgainSample.Bipyramid4_alpha(self)
+
+    def validate(self):
+        r"""validate(Bipyramid4 self) -> std::string"""
+        return _libBornAgainSample.Bipyramid4_validate(self)
+    __swig_destroy__ = _libBornAgainSample.delete_Bipyramid4
+
+# Register Bipyramid4 in _libBornAgainSample:
+_libBornAgainSample.Bipyramid4_swigregister(Bipyramid4)
+class CantellatedCube(IFormFactorPolyhedron):
+    r"""Proxy of C++ CantellatedCube class."""
 
     thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
     __repr__ = _swig_repr
 
     def __init__(self, *args):
         r"""
-        __init__(LongBoxGauss self, double length, double width, double height) -> LongBoxGauss
-        __init__(LongBoxGauss self, vdouble1d_t P) -> LongBoxGauss
+        __init__(CantellatedCube self, double length, double removed_length) -> CantellatedCube
+        __init__(CantellatedCube self, vdouble1d_t P) -> CantellatedCube
         """
-        _libBornAgainSample.LongBoxGauss_swiginit(self, _libBornAgainSample.new_LongBoxGauss(*args))
+        _libBornAgainSample.CantellatedCube_swiginit(self, _libBornAgainSample.new_CantellatedCube(*args))
 
     def clone(self):
-        r"""clone(LongBoxGauss self) -> LongBoxGauss"""
-        return _libBornAgainSample.LongBoxGauss_clone(self)
+        r"""clone(CantellatedCube self) -> CantellatedCube"""
+        return _libBornAgainSample.CantellatedCube_clone(self)
 
     def className(self):
-        r"""className(LongBoxGauss self) -> std::string"""
-        return _libBornAgainSample.LongBoxGauss_className(self)
+        r"""className(CantellatedCube self) -> std::string"""
+        return _libBornAgainSample.CantellatedCube_className(self)
 
     def parDefs(self):
-        r"""parDefs(LongBoxGauss self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
-        return _libBornAgainSample.LongBoxGauss_parDefs(self)
+        r"""parDefs(CantellatedCube self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
+        return _libBornAgainSample.CantellatedCube_parDefs(self)
 
     def length(self):
-        r"""length(LongBoxGauss self) -> double"""
-        return _libBornAgainSample.LongBoxGauss_length(self)
-
-    def height(self):
-        r"""height(LongBoxGauss self) -> double"""
-        return _libBornAgainSample.LongBoxGauss_height(self)
-
-    def width(self):
-        r"""width(LongBoxGauss self) -> double"""
-        return _libBornAgainSample.LongBoxGauss_width(self)
-
-    def radialExtension(self):
-        r"""radialExtension(LongBoxGauss self) -> double"""
-        return _libBornAgainSample.LongBoxGauss_radialExtension(self)
+        r"""length(CantellatedCube self) -> double"""
+        return _libBornAgainSample.CantellatedCube_length(self)
 
-    def formfactor(self, q):
-        r"""formfactor(LongBoxGauss self, C3 q) -> complex_t"""
-        return _libBornAgainSample.LongBoxGauss_formfactor(self, q)
+    def removedLength(self):
+        r"""removedLength(CantellatedCube self) -> double"""
+        return _libBornAgainSample.CantellatedCube_removedLength(self)
 
     def validate(self):
-        r"""validate(LongBoxGauss self) -> std::string"""
-        return _libBornAgainSample.LongBoxGauss_validate(self)
-    __swig_destroy__ = _libBornAgainSample.delete_LongBoxGauss
+        r"""validate(CantellatedCube self) -> std::string"""
+        return _libBornAgainSample.CantellatedCube_validate(self)
+    __swig_destroy__ = _libBornAgainSample.delete_CantellatedCube
 
-# Register LongBoxGauss in _libBornAgainSample:
-_libBornAgainSample.LongBoxGauss_swigregister(LongBoxGauss)
-class LongBoxLorentz(IFormFactor):
-    r"""Proxy of C++ LongBoxLorentz class."""
+# Register CantellatedCube in _libBornAgainSample:
+_libBornAgainSample.CantellatedCube_swigregister(CantellatedCube)
+class TruncatedCube(IFormFactorPolyhedron):
+    r"""Proxy of C++ TruncatedCube class."""
 
     thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
     __repr__ = _swig_repr
 
     def __init__(self, *args):
         r"""
-        __init__(LongBoxLorentz self, double length, double width, double height) -> LongBoxLorentz
-        __init__(LongBoxLorentz self, vdouble1d_t P) -> LongBoxLorentz
+        __init__(TruncatedCube self, double length, double removed_length) -> TruncatedCube
+        __init__(TruncatedCube self, vdouble1d_t P) -> TruncatedCube
         """
-        _libBornAgainSample.LongBoxLorentz_swiginit(self, _libBornAgainSample.new_LongBoxLorentz(*args))
+        _libBornAgainSample.TruncatedCube_swiginit(self, _libBornAgainSample.new_TruncatedCube(*args))
 
     def clone(self):
-        r"""clone(LongBoxLorentz self) -> LongBoxLorentz"""
-        return _libBornAgainSample.LongBoxLorentz_clone(self)
+        r"""clone(TruncatedCube self) -> TruncatedCube"""
+        return _libBornAgainSample.TruncatedCube_clone(self)
 
     def className(self):
-        r"""className(LongBoxLorentz self) -> std::string"""
-        return _libBornAgainSample.LongBoxLorentz_className(self)
+        r"""className(TruncatedCube self) -> std::string"""
+        return _libBornAgainSample.TruncatedCube_className(self)
 
     def parDefs(self):
-        r"""parDefs(LongBoxLorentz self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
-        return _libBornAgainSample.LongBoxLorentz_parDefs(self)
+        r"""parDefs(TruncatedCube self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
+        return _libBornAgainSample.TruncatedCube_parDefs(self)
 
     def length(self):
-        r"""length(LongBoxLorentz self) -> double"""
-        return _libBornAgainSample.LongBoxLorentz_length(self)
+        r"""length(TruncatedCube self) -> double"""
+        return _libBornAgainSample.TruncatedCube_length(self)
 
-    def height(self):
-        r"""height(LongBoxLorentz self) -> double"""
-        return _libBornAgainSample.LongBoxLorentz_height(self)
+    def removedLength(self):
+        r"""removedLength(TruncatedCube self) -> double"""
+        return _libBornAgainSample.TruncatedCube_removedLength(self)
 
-    def width(self):
-        r"""width(LongBoxLorentz self) -> double"""
-        return _libBornAgainSample.LongBoxLorentz_width(self)
+    def validate(self):
+        r"""validate(TruncatedCube self) -> std::string"""
+        return _libBornAgainSample.TruncatedCube_validate(self)
+    __swig_destroy__ = _libBornAgainSample.delete_TruncatedCube
 
-    def radialExtension(self):
-        r"""radialExtension(LongBoxLorentz self) -> double"""
-        return _libBornAgainSample.LongBoxLorentz_radialExtension(self)
-
-    def formfactor(self, q):
-        r"""formfactor(LongBoxLorentz self, C3 q) -> complex_t"""
-        return _libBornAgainSample.LongBoxLorentz_formfactor(self, q)
-
-    def validate(self):
-        r"""validate(LongBoxLorentz self) -> std::string"""
-        return _libBornAgainSample.LongBoxLorentz_validate(self)
-    __swig_destroy__ = _libBornAgainSample.delete_LongBoxLorentz
-
-# Register LongBoxLorentz in _libBornAgainSample:
-_libBornAgainSample.LongBoxLorentz_swigregister(LongBoxLorentz)
-class PlatonicOctahedron(IFormFactorPolyhedron):
-    r"""Proxy of C++ PlatonicOctahedron class."""
+# Register TruncatedCube in _libBornAgainSample:
+_libBornAgainSample.TruncatedCube_swigregister(TruncatedCube)
+class Cone(IFormFactor):
+    r"""Proxy of C++ Cone class."""
 
     thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
     __repr__ = _swig_repr
 
     def __init__(self, *args):
         r"""
-        __init__(PlatonicOctahedron self, double edge) -> PlatonicOctahedron
-        __init__(PlatonicOctahedron self, vdouble1d_t P) -> PlatonicOctahedron
+        __init__(Cone self, double radius, double height, double alpha) -> Cone
+        __init__(Cone self, vdouble1d_t P) -> Cone
         """
-        _libBornAgainSample.PlatonicOctahedron_swiginit(self, _libBornAgainSample.new_PlatonicOctahedron(*args))
+        _libBornAgainSample.Cone_swiginit(self, _libBornAgainSample.new_Cone(*args))
 
     def clone(self):
-        r"""clone(PlatonicOctahedron self) -> PlatonicOctahedron"""
-        return _libBornAgainSample.PlatonicOctahedron_clone(self)
+        r"""clone(Cone self) -> Cone"""
+        return _libBornAgainSample.Cone_clone(self)
 
     def className(self):
-        r"""className(PlatonicOctahedron self) -> std::string"""
-        return _libBornAgainSample.PlatonicOctahedron_className(self)
+        r"""className(Cone self) -> std::string"""
+        return _libBornAgainSample.Cone_className(self)
 
     def parDefs(self):
-        r"""parDefs(PlatonicOctahedron self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
-        return _libBornAgainSample.PlatonicOctahedron_parDefs(self)
+        r"""parDefs(Cone self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
+        return _libBornAgainSample.Cone_parDefs(self)
 
-    def edge(self):
-        r"""edge(PlatonicOctahedron self) -> double"""
-        return _libBornAgainSample.PlatonicOctahedron_edge(self)
+    def radius(self):
+        r"""radius(Cone self) -> double"""
+        return _libBornAgainSample.Cone_radius(self)
 
     def height(self):
-        r"""height(PlatonicOctahedron self) -> double"""
-        return _libBornAgainSample.PlatonicOctahedron_height(self)
-    __swig_destroy__ = _libBornAgainSample.delete_PlatonicOctahedron
+        r"""height(Cone self) -> double"""
+        return _libBornAgainSample.Cone_height(self)
 
-# Register PlatonicOctahedron in _libBornAgainSample:
-_libBornAgainSample.PlatonicOctahedron_swigregister(PlatonicOctahedron)
-class PlatonicTetrahedron(IFormFactorPolyhedron):
-    r"""Proxy of C++ PlatonicTetrahedron class."""
+    def alpha(self):
+        r"""alpha(Cone self) -> double"""
+        return _libBornAgainSample.Cone_alpha(self)
+
+    def radialExtension(self):
+        r"""radialExtension(Cone self) -> double"""
+        return _libBornAgainSample.Cone_radialExtension(self)
+
+    def formfactor(self, q):
+        r"""formfactor(Cone self, C3 q) -> complex_t"""
+        return _libBornAgainSample.Cone_formfactor(self, q)
+
+    def validate(self):
+        r"""validate(Cone self) -> std::string"""
+        return _libBornAgainSample.Cone_validate(self)
+    __swig_destroy__ = _libBornAgainSample.delete_Cone
+
+# Register Cone in _libBornAgainSample:
+_libBornAgainSample.Cone_swigregister(Cone)
+class Cylinder(IFormFactor):
+    r"""Proxy of C++ Cylinder class."""
 
     thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
     __repr__ = _swig_repr
 
     def __init__(self, *args):
         r"""
-        __init__(PlatonicTetrahedron self, double edge) -> PlatonicTetrahedron
-        __init__(PlatonicTetrahedron self, vdouble1d_t P) -> PlatonicTetrahedron
+        __init__(Cylinder self, double radius, double height) -> Cylinder
+        __init__(Cylinder self, vdouble1d_t P) -> Cylinder
         """
-        _libBornAgainSample.PlatonicTetrahedron_swiginit(self, _libBornAgainSample.new_PlatonicTetrahedron(*args))
+        _libBornAgainSample.Cylinder_swiginit(self, _libBornAgainSample.new_Cylinder(*args))
 
     def clone(self):
-        r"""clone(PlatonicTetrahedron self) -> PlatonicTetrahedron"""
-        return _libBornAgainSample.PlatonicTetrahedron_clone(self)
+        r"""clone(Cylinder self) -> Cylinder"""
+        return _libBornAgainSample.Cylinder_clone(self)
 
     def className(self):
-        r"""className(PlatonicTetrahedron self) -> std::string"""
-        return _libBornAgainSample.PlatonicTetrahedron_className(self)
+        r"""className(Cylinder self) -> std::string"""
+        return _libBornAgainSample.Cylinder_className(self)
 
     def parDefs(self):
-        r"""parDefs(PlatonicTetrahedron self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
-        return _libBornAgainSample.PlatonicTetrahedron_parDefs(self)
-
-    def edge(self):
-        r"""edge(PlatonicTetrahedron self) -> double"""
-        return _libBornAgainSample.PlatonicTetrahedron_edge(self)
+        r"""parDefs(Cylinder self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
+        return _libBornAgainSample.Cylinder_parDefs(self)
 
     def height(self):
-        r"""height(PlatonicTetrahedron self) -> double"""
-        return _libBornAgainSample.PlatonicTetrahedron_height(self)
-    __swig_destroy__ = _libBornAgainSample.delete_PlatonicTetrahedron
+        r"""height(Cylinder self) -> double"""
+        return _libBornAgainSample.Cylinder_height(self)
 
-# Register PlatonicTetrahedron in _libBornAgainSample:
-_libBornAgainSample.PlatonicTetrahedron_swigregister(PlatonicTetrahedron)
-class Prism3(IFormFactorPrism):
-    r"""Proxy of C++ Prism3 class."""
+    def radius(self):
+        r"""radius(Cylinder self) -> double"""
+        return _libBornAgainSample.Cylinder_radius(self)
+
+    def radialExtension(self):
+        r"""radialExtension(Cylinder self) -> double"""
+        return _libBornAgainSample.Cylinder_radialExtension(self)
+
+    def formfactor(self, q):
+        r"""formfactor(Cylinder self, C3 q) -> complex_t"""
+        return _libBornAgainSample.Cylinder_formfactor(self, q)
+
+    def validate(self):
+        r"""validate(Cylinder self) -> std::string"""
+        return _libBornAgainSample.Cylinder_validate(self)
+    __swig_destroy__ = _libBornAgainSample.delete_Cylinder
+
+# Register Cylinder in _libBornAgainSample:
+_libBornAgainSample.Cylinder_swigregister(Cylinder)
+class EllipsoidalCylinder(IFormFactor):
+    r"""Proxy of C++ EllipsoidalCylinder class."""
 
     thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
     __repr__ = _swig_repr
 
     def __init__(self, *args):
         r"""
-        __init__(Prism3 self, double base_edge, double height) -> Prism3
-        __init__(Prism3 self, vdouble1d_t P) -> Prism3
+        __init__(EllipsoidalCylinder self, double radius_x, double radius_y, double height) -> EllipsoidalCylinder
+        __init__(EllipsoidalCylinder self, vdouble1d_t P) -> EllipsoidalCylinder
         """
-        _libBornAgainSample.Prism3_swiginit(self, _libBornAgainSample.new_Prism3(*args))
+        _libBornAgainSample.EllipsoidalCylinder_swiginit(self, _libBornAgainSample.new_EllipsoidalCylinder(*args))
 
     def clone(self):
-        r"""clone(Prism3 self) -> Prism3"""
-        return _libBornAgainSample.Prism3_clone(self)
+        r"""clone(EllipsoidalCylinder self) -> EllipsoidalCylinder"""
+        return _libBornAgainSample.EllipsoidalCylinder_clone(self)
 
     def className(self):
-        r"""className(Prism3 self) -> std::string"""
-        return _libBornAgainSample.Prism3_className(self)
+        r"""className(EllipsoidalCylinder self) -> std::string"""
+        return _libBornAgainSample.EllipsoidalCylinder_className(self)
 
     def parDefs(self):
-        r"""parDefs(Prism3 self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
-        return _libBornAgainSample.Prism3_parDefs(self)
+        r"""parDefs(EllipsoidalCylinder self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
+        return _libBornAgainSample.EllipsoidalCylinder_parDefs(self)
 
-    def baseEdge(self):
-        r"""baseEdge(Prism3 self) -> double"""
-        return _libBornAgainSample.Prism3_baseEdge(self)
+    def radiusX(self):
+        r"""radiusX(EllipsoidalCylinder self) -> double"""
+        return _libBornAgainSample.EllipsoidalCylinder_radiusX(self)
+
+    def radiusY(self):
+        r"""radiusY(EllipsoidalCylinder self) -> double"""
+        return _libBornAgainSample.EllipsoidalCylinder_radiusY(self)
 
     def height(self):
-        r"""height(Prism3 self) -> double"""
-        return _libBornAgainSample.Prism3_height(self)
-    __swig_destroy__ = _libBornAgainSample.delete_Prism3
+        r"""height(EllipsoidalCylinder self) -> double"""
+        return _libBornAgainSample.EllipsoidalCylinder_height(self)
 
-# Register Prism3 in _libBornAgainSample:
-_libBornAgainSample.Prism3_swigregister(Prism3)
-class Prism6(IFormFactorPrism):
-    r"""Proxy of C++ Prism6 class."""
+    def radialExtension(self):
+        r"""radialExtension(EllipsoidalCylinder self) -> double"""
+        return _libBornAgainSample.EllipsoidalCylinder_radialExtension(self)
+
+    def formfactor(self, q):
+        r"""formfactor(EllipsoidalCylinder self, C3 q) -> complex_t"""
+        return _libBornAgainSample.EllipsoidalCylinder_formfactor(self, q)
+
+    def validate(self):
+        r"""validate(EllipsoidalCylinder self) -> std::string"""
+        return _libBornAgainSample.EllipsoidalCylinder_validate(self)
+    __swig_destroy__ = _libBornAgainSample.delete_EllipsoidalCylinder
+
+# Register EllipsoidalCylinder in _libBornAgainSample:
+_libBornAgainSample.EllipsoidalCylinder_swigregister(EllipsoidalCylinder)
+class HemiEllipsoid(IFormFactor):
+    r"""Proxy of C++ HemiEllipsoid class."""
 
     thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
     __repr__ = _swig_repr
 
     def __init__(self, *args):
         r"""
-        __init__(Prism6 self, double base_edge, double height) -> Prism6
-        __init__(Prism6 self, vdouble1d_t P) -> Prism6
+        __init__(HemiEllipsoid self, double radius_x, double radius_y, double height) -> HemiEllipsoid
+        __init__(HemiEllipsoid self, vdouble1d_t P) -> HemiEllipsoid
         """
-        _libBornAgainSample.Prism6_swiginit(self, _libBornAgainSample.new_Prism6(*args))
+        _libBornAgainSample.HemiEllipsoid_swiginit(self, _libBornAgainSample.new_HemiEllipsoid(*args))
+    __swig_destroy__ = _libBornAgainSample.delete_HemiEllipsoid
 
     def clone(self):
-        r"""clone(Prism6 self) -> Prism6"""
-        return _libBornAgainSample.Prism6_clone(self)
+        r"""clone(HemiEllipsoid self) -> HemiEllipsoid"""
+        return _libBornAgainSample.HemiEllipsoid_clone(self)
 
     def className(self):
-        r"""className(Prism6 self) -> std::string"""
-        return _libBornAgainSample.Prism6_className(self)
+        r"""className(HemiEllipsoid self) -> std::string"""
+        return _libBornAgainSample.HemiEllipsoid_className(self)
 
     def parDefs(self):
-        r"""parDefs(Prism6 self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
-        return _libBornAgainSample.Prism6_parDefs(self)
-
-    def baseEdge(self):
-        r"""baseEdge(Prism6 self) -> double"""
-        return _libBornAgainSample.Prism6_baseEdge(self)
+        r"""parDefs(HemiEllipsoid self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
+        return _libBornAgainSample.HemiEllipsoid_parDefs(self)
 
     def height(self):
-        r"""height(Prism6 self) -> double"""
-        return _libBornAgainSample.Prism6_height(self)
-    __swig_destroy__ = _libBornAgainSample.delete_Prism6
+        r"""height(HemiEllipsoid self) -> double"""
+        return _libBornAgainSample.HemiEllipsoid_height(self)
 
-# Register Prism6 in _libBornAgainSample:
-_libBornAgainSample.Prism6_swigregister(Prism6)
-class Pyramid2(IFormFactorPolyhedron):
-    r"""Proxy of C++ Pyramid2 class."""
+    def radiusX(self):
+        r"""radiusX(HemiEllipsoid self) -> double"""
+        return _libBornAgainSample.HemiEllipsoid_radiusX(self)
+
+    def radiusY(self):
+        r"""radiusY(HemiEllipsoid self) -> double"""
+        return _libBornAgainSample.HemiEllipsoid_radiusY(self)
+
+    def radialExtension(self):
+        r"""radialExtension(HemiEllipsoid self) -> double"""
+        return _libBornAgainSample.HemiEllipsoid_radialExtension(self)
+
+    def formfactor(self, q):
+        r"""formfactor(HemiEllipsoid self, C3 q) -> complex_t"""
+        return _libBornAgainSample.HemiEllipsoid_formfactor(self, q)
+
+    def validate(self):
+        r"""validate(HemiEllipsoid self) -> std::string"""
+        return _libBornAgainSample.HemiEllipsoid_validate(self)
+
+# Register HemiEllipsoid in _libBornAgainSample:
+_libBornAgainSample.HemiEllipsoid_swigregister(HemiEllipsoid)
+class HorizontalCylinder(IFormFactor):
+    r"""Proxy of C++ HorizontalCylinder class."""
 
     thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
     __repr__ = _swig_repr
 
     def __init__(self, *args):
         r"""
-        __init__(Pyramid2 self, double length, double width, double height, double alpha) -> Pyramid2
-        __init__(Pyramid2 self, vdouble1d_t P) -> Pyramid2
+        __init__(HorizontalCylinder self, double radius, double length, double slice_bottom, double slice_top) -> HorizontalCylinder
+        __init__(HorizontalCylinder self, double radius, double length) -> HorizontalCylinder
+        __init__(HorizontalCylinder self, vdouble1d_t P) -> HorizontalCylinder
         """
-        _libBornAgainSample.Pyramid2_swiginit(self, _libBornAgainSample.new_Pyramid2(*args))
+        _libBornAgainSample.HorizontalCylinder_swiginit(self, _libBornAgainSample.new_HorizontalCylinder(*args))
 
     def clone(self):
-        r"""clone(Pyramid2 self) -> Pyramid2"""
-        return _libBornAgainSample.Pyramid2_clone(self)
+        r"""clone(HorizontalCylinder self) -> HorizontalCylinder"""
+        return _libBornAgainSample.HorizontalCylinder_clone(self)
 
     def className(self):
-        r"""className(Pyramid2 self) -> std::string"""
-        return _libBornAgainSample.Pyramid2_className(self)
+        r"""className(HorizontalCylinder self) -> std::string"""
+        return _libBornAgainSample.HorizontalCylinder_className(self)
 
     def parDefs(self):
-        r"""parDefs(Pyramid2 self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
-        return _libBornAgainSample.Pyramid2_parDefs(self)
+        r"""parDefs(HorizontalCylinder self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
+        return _libBornAgainSample.HorizontalCylinder_parDefs(self)
 
     def length(self):
-        r"""length(Pyramid2 self) -> double"""
-        return _libBornAgainSample.Pyramid2_length(self)
+        r"""length(HorizontalCylinder self) -> double"""
+        return _libBornAgainSample.HorizontalCylinder_length(self)
 
-    def width(self):
-        r"""width(Pyramid2 self) -> double"""
-        return _libBornAgainSample.Pyramid2_width(self)
+    def radius(self):
+        r"""radius(HorizontalCylinder self) -> double"""
+        return _libBornAgainSample.HorizontalCylinder_radius(self)
+
+    def slice_bottom(self):
+        r"""slice_bottom(HorizontalCylinder self) -> double"""
+        return _libBornAgainSample.HorizontalCylinder_slice_bottom(self)
+
+    def slice_top(self):
+        r"""slice_top(HorizontalCylinder self) -> double"""
+        return _libBornAgainSample.HorizontalCylinder_slice_top(self)
+
+    def radialExtension(self):
+        r"""radialExtension(HorizontalCylinder self) -> double"""
+        return _libBornAgainSample.HorizontalCylinder_radialExtension(self)
+
+    def formfactor(self, q):
+        r"""formfactor(HorizontalCylinder self, C3 q) -> complex_t"""
+        return _libBornAgainSample.HorizontalCylinder_formfactor(self, q)
+
+    def validate(self):
+        r"""validate(HorizontalCylinder self) -> std::string"""
+        return _libBornAgainSample.HorizontalCylinder_validate(self)
+    __swig_destroy__ = _libBornAgainSample.delete_HorizontalCylinder
+
+# Register HorizontalCylinder in _libBornAgainSample:
+_libBornAgainSample.HorizontalCylinder_swigregister(HorizontalCylinder)
+class Sphere(IFormFactor):
+    r"""Proxy of C++ Sphere class."""
+
+    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
+    __repr__ = _swig_repr
+
+    def __init__(self, *args):
+        r"""
+        __init__(Sphere self, double radius, bool position_at_center=False) -> Sphere
+        __init__(Sphere self, vdouble1d_t P, bool position_at_center=False) -> Sphere
+        """
+        _libBornAgainSample.Sphere_swiginit(self, _libBornAgainSample.new_Sphere(*args))
+
+    def clone(self):
+        r"""clone(Sphere self) -> Sphere"""
+        return _libBornAgainSample.Sphere_clone(self)
+
+    def className(self):
+        r"""className(Sphere self) -> std::string"""
+        return _libBornAgainSample.Sphere_className(self)
+
+    def parDefs(self):
+        r"""parDefs(Sphere self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
+        return _libBornAgainSample.Sphere_parDefs(self)
+
+    def radius(self):
+        r"""radius(Sphere self) -> double"""
+        return _libBornAgainSample.Sphere_radius(self)
+
+    def radialExtension(self):
+        r"""radialExtension(Sphere self) -> double"""
+        return _libBornAgainSample.Sphere_radialExtension(self)
+
+    def formfactor(self, q):
+        r"""formfactor(Sphere self, C3 q) -> complex_t"""
+        return _libBornAgainSample.Sphere_formfactor(self, q)
+
+    def validate(self):
+        r"""validate(Sphere self) -> std::string"""
+        return _libBornAgainSample.Sphere_validate(self)
+    __swig_destroy__ = _libBornAgainSample.delete_Sphere
+
+# Register Sphere in _libBornAgainSample:
+_libBornAgainSample.Sphere_swigregister(Sphere)
+class Spheroid(IFormFactor):
+    r"""Proxy of C++ Spheroid class."""
+
+    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
+    __repr__ = _swig_repr
+
+    def __init__(self, *args):
+        r"""
+        __init__(Spheroid self, double radius, double height) -> Spheroid
+        __init__(Spheroid self, vdouble1d_t P) -> Spheroid
+        """
+        _libBornAgainSample.Spheroid_swiginit(self, _libBornAgainSample.new_Spheroid(*args))
+
+    def clone(self):
+        r"""clone(Spheroid self) -> Spheroid"""
+        return _libBornAgainSample.Spheroid_clone(self)
+
+    def className(self):
+        r"""className(Spheroid self) -> std::string"""
+        return _libBornAgainSample.Spheroid_className(self)
+
+    def parDefs(self):
+        r"""parDefs(Spheroid self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
+        return _libBornAgainSample.Spheroid_parDefs(self)
 
     def height(self):
-        r"""height(Pyramid2 self) -> double"""
-        return _libBornAgainSample.Pyramid2_height(self)
+        r"""height(Spheroid self) -> double"""
+        return _libBornAgainSample.Spheroid_height(self)
 
-    def alpha(self):
-        r"""alpha(Pyramid2 self) -> double"""
-        return _libBornAgainSample.Pyramid2_alpha(self)
-    __swig_destroy__ = _libBornAgainSample.delete_Pyramid2
+    def radius(self):
+        r"""radius(Spheroid self) -> double"""
+        return _libBornAgainSample.Spheroid_radius(self)
 
-# Register Pyramid2 in _libBornAgainSample:
-_libBornAgainSample.Pyramid2_swigregister(Pyramid2)
-class Pyramid3(IFormFactorPolyhedron):
-    r"""Proxy of C++ Pyramid3 class."""
+    def radialExtension(self):
+        r"""radialExtension(Spheroid self) -> double"""
+        return _libBornAgainSample.Spheroid_radialExtension(self)
+
+    def formfactor(self, q):
+        r"""formfactor(Spheroid self, C3 q) -> complex_t"""
+        return _libBornAgainSample.Spheroid_formfactor(self, q)
+
+    def validate(self):
+        r"""validate(Spheroid self) -> std::string"""
+        return _libBornAgainSample.Spheroid_validate(self)
+    __swig_destroy__ = _libBornAgainSample.delete_Spheroid
+
+# Register Spheroid in _libBornAgainSample:
+_libBornAgainSample.Spheroid_swigregister(Spheroid)
+class TruncatedSphere(IFormFactor):
+    r"""Proxy of C++ TruncatedSphere class."""
 
     thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
     __repr__ = _swig_repr
 
     def __init__(self, *args):
         r"""
-        __init__(Pyramid3 self, double base_edge, double height, double alpha) -> Pyramid3
-        __init__(Pyramid3 self, vdouble1d_t P) -> Pyramid3
+        __init__(TruncatedSphere self, double radius, double height, double dh) -> TruncatedSphere
+        __init__(TruncatedSphere self, vdouble1d_t P) -> TruncatedSphere
         """
-        _libBornAgainSample.Pyramid3_swiginit(self, _libBornAgainSample.new_Pyramid3(*args))
+        _libBornAgainSample.TruncatedSphere_swiginit(self, _libBornAgainSample.new_TruncatedSphere(*args))
 
     def clone(self):
-        r"""clone(Pyramid3 self) -> Pyramid3"""
-        return _libBornAgainSample.Pyramid3_clone(self)
+        r"""clone(TruncatedSphere self) -> TruncatedSphere"""
+        return _libBornAgainSample.TruncatedSphere_clone(self)
 
     def className(self):
-        r"""className(Pyramid3 self) -> std::string"""
-        return _libBornAgainSample.Pyramid3_className(self)
+        r"""className(TruncatedSphere self) -> std::string"""
+        return _libBornAgainSample.TruncatedSphere_className(self)
 
     def parDefs(self):
-        r"""parDefs(Pyramid3 self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
-        return _libBornAgainSample.Pyramid3_parDefs(self)
+        r"""parDefs(TruncatedSphere self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
+        return _libBornAgainSample.TruncatedSphere_parDefs(self)
 
-    def baseEdge(self):
-        r"""baseEdge(Pyramid3 self) -> double"""
-        return _libBornAgainSample.Pyramid3_baseEdge(self)
+    def height(self):
+        r"""height(TruncatedSphere self) -> double"""
+        return _libBornAgainSample.TruncatedSphere_height(self)
+
+    def radius(self):
+        r"""radius(TruncatedSphere self) -> double"""
+        return _libBornAgainSample.TruncatedSphere_radius(self)
+
+    def removedTop(self):
+        r"""removedTop(TruncatedSphere self) -> double"""
+        return _libBornAgainSample.TruncatedSphere_removedTop(self)
+
+    def radialExtension(self):
+        r"""radialExtension(TruncatedSphere self) -> double"""
+        return _libBornAgainSample.TruncatedSphere_radialExtension(self)
+
+    def formfactor(self, q):
+        r"""formfactor(TruncatedSphere self, C3 q) -> complex_t"""
+        return _libBornAgainSample.TruncatedSphere_formfactor(self, q)
+
+    def validate(self):
+        r"""validate(TruncatedSphere self) -> std::string"""
+        return _libBornAgainSample.TruncatedSphere_validate(self)
+    __swig_destroy__ = _libBornAgainSample.delete_TruncatedSphere
+
+# Register TruncatedSphere in _libBornAgainSample:
+_libBornAgainSample.TruncatedSphere_swigregister(TruncatedSphere)
+class TruncatedSpheroid(IFormFactor):
+    r"""Proxy of C++ TruncatedSpheroid class."""
+
+    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
+    __repr__ = _swig_repr
+
+    def __init__(self, *args):
+        r"""
+        __init__(TruncatedSpheroid self, double radius, double height, double height_flattening, double dh) -> TruncatedSpheroid
+        __init__(TruncatedSpheroid self, vdouble1d_t P) -> TruncatedSpheroid
+        """
+        _libBornAgainSample.TruncatedSpheroid_swiginit(self, _libBornAgainSample.new_TruncatedSpheroid(*args))
+
+    def clone(self):
+        r"""clone(TruncatedSpheroid self) -> TruncatedSpheroid"""
+        return _libBornAgainSample.TruncatedSpheroid_clone(self)
+
+    def className(self):
+        r"""className(TruncatedSpheroid self) -> std::string"""
+        return _libBornAgainSample.TruncatedSpheroid_className(self)
+
+    def parDefs(self):
+        r"""parDefs(TruncatedSpheroid self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
+        return _libBornAgainSample.TruncatedSpheroid_parDefs(self)
+
+    def radius(self):
+        r"""radius(TruncatedSpheroid self) -> double"""
+        return _libBornAgainSample.TruncatedSpheroid_radius(self)
 
     def height(self):
-        r"""height(Pyramid3 self) -> double"""
-        return _libBornAgainSample.Pyramid3_height(self)
+        r"""height(TruncatedSpheroid self) -> double"""
+        return _libBornAgainSample.TruncatedSpheroid_height(self)
+
+    def heightFlattening(self):
+        r"""heightFlattening(TruncatedSpheroid self) -> double"""
+        return _libBornAgainSample.TruncatedSpheroid_heightFlattening(self)
+
+    def removedTop(self):
+        r"""removedTop(TruncatedSpheroid self) -> double"""
+        return _libBornAgainSample.TruncatedSpheroid_removedTop(self)
+
+    def radialExtension(self):
+        r"""radialExtension(TruncatedSpheroid self) -> double"""
+        return _libBornAgainSample.TruncatedSpheroid_radialExtension(self)
+
+    def formfactor(self, q):
+        r"""formfactor(TruncatedSpheroid self, C3 q) -> complex_t"""
+        return _libBornAgainSample.TruncatedSpheroid_formfactor(self, q)
+
+    def validate(self):
+        r"""validate(TruncatedSpheroid self) -> std::string"""
+        return _libBornAgainSample.TruncatedSpheroid_validate(self)
+    __swig_destroy__ = _libBornAgainSample.delete_TruncatedSpheroid
+
+# Register TruncatedSpheroid in _libBornAgainSample:
+_libBornAgainSample.TruncatedSpheroid_swigregister(TruncatedSpheroid)
+class BarGauss(IProfileRectangularRipple):
+    r"""Proxy of C++ BarGauss class."""
+
+    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
+    __repr__ = _swig_repr
+
+    def __init__(self, *args):
+        r"""
+        __init__(BarGauss self, double length, double width, double height) -> BarGauss
+        __init__(BarGauss self, vdouble1d_t P) -> BarGauss
+        """
+        _libBornAgainSample.BarGauss_swiginit(self, _libBornAgainSample.new_BarGauss(*args))
+
+    def clone(self):
+        r"""clone(BarGauss self) -> BarGauss"""
+        return _libBornAgainSample.BarGauss_clone(self)
+
+    def className(self):
+        r"""className(BarGauss self) -> std::string"""
+        return _libBornAgainSample.BarGauss_className(self)
+
+    def parDefs(self):
+        r"""parDefs(BarGauss self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
+        return _libBornAgainSample.BarGauss_parDefs(self)
+    __swig_destroy__ = _libBornAgainSample.delete_BarGauss
+
+# Register BarGauss in _libBornAgainSample:
+_libBornAgainSample.BarGauss_swigregister(BarGauss)
+class BarLorentz(IProfileRectangularRipple):
+    r"""Proxy of C++ BarLorentz class."""
+
+    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
+    __repr__ = _swig_repr
+
+    def __init__(self, *args):
+        r"""
+        __init__(BarLorentz self, double length, double width, double height) -> BarLorentz
+        __init__(BarLorentz self, vdouble1d_t P) -> BarLorentz
+        """
+        _libBornAgainSample.BarLorentz_swiginit(self, _libBornAgainSample.new_BarLorentz(*args))
+
+    def clone(self):
+        r"""clone(BarLorentz self) -> BarLorentz"""
+        return _libBornAgainSample.BarLorentz_clone(self)
+
+    def className(self):
+        r"""className(BarLorentz self) -> std::string"""
+        return _libBornAgainSample.BarLorentz_className(self)
+
+    def parDefs(self):
+        r"""parDefs(BarLorentz self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
+        return _libBornAgainSample.BarLorentz_parDefs(self)
+    __swig_destroy__ = _libBornAgainSample.delete_BarLorentz
+
+# Register BarLorentz in _libBornAgainSample:
+_libBornAgainSample.BarLorentz_swigregister(BarLorentz)
+class CosineRippleBox(ICosineRipple):
+    r"""Proxy of C++ CosineRippleBox class."""
+
+    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
+    __repr__ = _swig_repr
+
+    def __init__(self, *args):
+        r"""
+        __init__(CosineRippleBox self, double length, double width, double height) -> CosineRippleBox
+        __init__(CosineRippleBox self, vdouble1d_t P) -> CosineRippleBox
+        """
+        _libBornAgainSample.CosineRippleBox_swiginit(self, _libBornAgainSample.new_CosineRippleBox(*args))
+
+    def clone(self):
+        r"""clone(CosineRippleBox self) -> CosineRippleBox"""
+        return _libBornAgainSample.CosineRippleBox_clone(self)
+
+    def className(self):
+        r"""className(CosineRippleBox self) -> std::string"""
+        return _libBornAgainSample.CosineRippleBox_className(self)
 
-    def alpha(self):
-        r"""alpha(Pyramid3 self) -> double"""
-        return _libBornAgainSample.Pyramid3_alpha(self)
-    __swig_destroy__ = _libBornAgainSample.delete_Pyramid3
+    def parDefs(self):
+        r"""parDefs(CosineRippleBox self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
+        return _libBornAgainSample.CosineRippleBox_parDefs(self)
+    __swig_destroy__ = _libBornAgainSample.delete_CosineRippleBox
 
-# Register Pyramid3 in _libBornAgainSample:
-_libBornAgainSample.Pyramid3_swigregister(Pyramid3)
-class Pyramid4(IFormFactorPolyhedron):
-    r"""Proxy of C++ Pyramid4 class."""
+# Register CosineRippleBox in _libBornAgainSample:
+_libBornAgainSample.CosineRippleBox_swigregister(CosineRippleBox)
+class CosineRippleGauss(ICosineRipple):
+    r"""Proxy of C++ CosineRippleGauss class."""
 
     thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
     __repr__ = _swig_repr
 
     def __init__(self, *args):
         r"""
-        __init__(Pyramid4 self, double base_edge, double height, double alpha) -> Pyramid4
-        __init__(Pyramid4 self, vdouble1d_t P) -> Pyramid4
+        __init__(CosineRippleGauss self, double length, double width, double height) -> CosineRippleGauss
+        __init__(CosineRippleGauss self, vdouble1d_t P) -> CosineRippleGauss
         """
-        _libBornAgainSample.Pyramid4_swiginit(self, _libBornAgainSample.new_Pyramid4(*args))
+        _libBornAgainSample.CosineRippleGauss_swiginit(self, _libBornAgainSample.new_CosineRippleGauss(*args))
 
     def clone(self):
-        r"""clone(Pyramid4 self) -> Pyramid4"""
-        return _libBornAgainSample.Pyramid4_clone(self)
+        r"""clone(CosineRippleGauss self) -> CosineRippleGauss"""
+        return _libBornAgainSample.CosineRippleGauss_clone(self)
 
     def className(self):
-        r"""className(Pyramid4 self) -> std::string"""
-        return _libBornAgainSample.Pyramid4_className(self)
+        r"""className(CosineRippleGauss self) -> std::string"""
+        return _libBornAgainSample.CosineRippleGauss_className(self)
 
     def parDefs(self):
-        r"""parDefs(Pyramid4 self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
-        return _libBornAgainSample.Pyramid4_parDefs(self)
-
-    def height(self):
-        r"""height(Pyramid4 self) -> double"""
-        return _libBornAgainSample.Pyramid4_height(self)
-
-    def baseEdge(self):
-        r"""baseEdge(Pyramid4 self) -> double"""
-        return _libBornAgainSample.Pyramid4_baseEdge(self)
-
-    def alpha(self):
-        r"""alpha(Pyramid4 self) -> double"""
-        return _libBornAgainSample.Pyramid4_alpha(self)
-
-    def validate(self):
-        r"""validate(Pyramid4 self) -> std::string"""
-        return _libBornAgainSample.Pyramid4_validate(self)
-    __swig_destroy__ = _libBornAgainSample.delete_Pyramid4
+        r"""parDefs(CosineRippleGauss self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
+        return _libBornAgainSample.CosineRippleGauss_parDefs(self)
+    __swig_destroy__ = _libBornAgainSample.delete_CosineRippleGauss
 
-# Register Pyramid4 in _libBornAgainSample:
-_libBornAgainSample.Pyramid4_swigregister(Pyramid4)
-class Pyramid6(IFormFactorPolyhedron):
-    r"""Proxy of C++ Pyramid6 class."""
+# Register CosineRippleGauss in _libBornAgainSample:
+_libBornAgainSample.CosineRippleGauss_swigregister(CosineRippleGauss)
+class CosineRippleLorentz(ICosineRipple):
+    r"""Proxy of C++ CosineRippleLorentz class."""
 
     thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
     __repr__ = _swig_repr
 
     def __init__(self, *args):
         r"""
-        __init__(Pyramid6 self, double base_edge, double height, double alpha) -> Pyramid6
-        __init__(Pyramid6 self, vdouble1d_t P) -> Pyramid6
+        __init__(CosineRippleLorentz self, double length, double width, double height) -> CosineRippleLorentz
+        __init__(CosineRippleLorentz self, vdouble1d_t P) -> CosineRippleLorentz
         """
-        _libBornAgainSample.Pyramid6_swiginit(self, _libBornAgainSample.new_Pyramid6(*args))
+        _libBornAgainSample.CosineRippleLorentz_swiginit(self, _libBornAgainSample.new_CosineRippleLorentz(*args))
 
     def clone(self):
-        r"""clone(Pyramid6 self) -> Pyramid6"""
-        return _libBornAgainSample.Pyramid6_clone(self)
+        r"""clone(CosineRippleLorentz self) -> CosineRippleLorentz"""
+        return _libBornAgainSample.CosineRippleLorentz_clone(self)
 
     def className(self):
-        r"""className(Pyramid6 self) -> std::string"""
-        return _libBornAgainSample.Pyramid6_className(self)
+        r"""className(CosineRippleLorentz self) -> std::string"""
+        return _libBornAgainSample.CosineRippleLorentz_className(self)
 
     def parDefs(self):
-        r"""parDefs(Pyramid6 self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
-        return _libBornAgainSample.Pyramid6_parDefs(self)
-
-    def baseEdge(self):
-        r"""baseEdge(Pyramid6 self) -> double"""
-        return _libBornAgainSample.Pyramid6_baseEdge(self)
-
-    def height(self):
-        r"""height(Pyramid6 self) -> double"""
-        return _libBornAgainSample.Pyramid6_height(self)
-
-    def alpha(self):
-        r"""alpha(Pyramid6 self) -> double"""
-        return _libBornAgainSample.Pyramid6_alpha(self)
-
-    def validate(self):
-        r"""validate(Pyramid6 self) -> std::string"""
-        return _libBornAgainSample.Pyramid6_validate(self)
-    __swig_destroy__ = _libBornAgainSample.delete_Pyramid6
+        r"""parDefs(CosineRippleLorentz self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
+        return _libBornAgainSample.CosineRippleLorentz_parDefs(self)
+    __swig_destroy__ = _libBornAgainSample.delete_CosineRippleLorentz
 
-# Register Pyramid6 in _libBornAgainSample:
-_libBornAgainSample.Pyramid6_swigregister(Pyramid6)
+# Register CosineRippleLorentz in _libBornAgainSample:
+_libBornAgainSample.CosineRippleLorentz_swigregister(CosineRippleLorentz)
 class SawtoothRippleBox(ISawtoothRipple):
     r"""Proxy of C++ SawtoothRippleBox class."""
 
@@ -6015,154 +6059,110 @@ class SawtoothRippleLorentz(ISawtoothRipple):
 
 # Register SawtoothRippleLorentz in _libBornAgainSample:
 _libBornAgainSample.SawtoothRippleLorentz_swigregister(SawtoothRippleLorentz)
-class TruncatedCube(IFormFactorPolyhedron):
-    r"""Proxy of C++ TruncatedCube class."""
+class LongBoxGauss(IFormFactor):
+    r"""Proxy of C++ LongBoxGauss class."""
 
     thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
     __repr__ = _swig_repr
 
     def __init__(self, *args):
         r"""
-        __init__(TruncatedCube self, double length, double removed_length) -> TruncatedCube
-        __init__(TruncatedCube self, vdouble1d_t P) -> TruncatedCube
+        __init__(LongBoxGauss self, double length, double width, double height) -> LongBoxGauss
+        __init__(LongBoxGauss self, vdouble1d_t P) -> LongBoxGauss
         """
-        _libBornAgainSample.TruncatedCube_swiginit(self, _libBornAgainSample.new_TruncatedCube(*args))
+        _libBornAgainSample.LongBoxGauss_swiginit(self, _libBornAgainSample.new_LongBoxGauss(*args))
 
     def clone(self):
-        r"""clone(TruncatedCube self) -> TruncatedCube"""
-        return _libBornAgainSample.TruncatedCube_clone(self)
+        r"""clone(LongBoxGauss self) -> LongBoxGauss"""
+        return _libBornAgainSample.LongBoxGauss_clone(self)
 
     def className(self):
-        r"""className(TruncatedCube self) -> std::string"""
-        return _libBornAgainSample.TruncatedCube_className(self)
+        r"""className(LongBoxGauss self) -> std::string"""
+        return _libBornAgainSample.LongBoxGauss_className(self)
 
     def parDefs(self):
-        r"""parDefs(TruncatedCube self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
-        return _libBornAgainSample.TruncatedCube_parDefs(self)
+        r"""parDefs(LongBoxGauss self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
+        return _libBornAgainSample.LongBoxGauss_parDefs(self)
 
     def length(self):
-        r"""length(TruncatedCube self) -> double"""
-        return _libBornAgainSample.TruncatedCube_length(self)
-
-    def removedLength(self):
-        r"""removedLength(TruncatedCube self) -> double"""
-        return _libBornAgainSample.TruncatedCube_removedLength(self)
-
-    def validate(self):
-        r"""validate(TruncatedCube self) -> std::string"""
-        return _libBornAgainSample.TruncatedCube_validate(self)
-    __swig_destroy__ = _libBornAgainSample.delete_TruncatedCube
-
-# Register TruncatedCube in _libBornAgainSample:
-_libBornAgainSample.TruncatedCube_swigregister(TruncatedCube)
-class TruncatedSphere(IFormFactor):
-    r"""Proxy of C++ TruncatedSphere class."""
-
-    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
-    __repr__ = _swig_repr
-
-    def __init__(self, *args):
-        r"""
-        __init__(TruncatedSphere self, double radius, double height, double dh) -> TruncatedSphere
-        __init__(TruncatedSphere self, vdouble1d_t P) -> TruncatedSphere
-        """
-        _libBornAgainSample.TruncatedSphere_swiginit(self, _libBornAgainSample.new_TruncatedSphere(*args))
-
-    def clone(self):
-        r"""clone(TruncatedSphere self) -> TruncatedSphere"""
-        return _libBornAgainSample.TruncatedSphere_clone(self)
-
-    def className(self):
-        r"""className(TruncatedSphere self) -> std::string"""
-        return _libBornAgainSample.TruncatedSphere_className(self)
-
-    def parDefs(self):
-        r"""parDefs(TruncatedSphere self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
-        return _libBornAgainSample.TruncatedSphere_parDefs(self)
+        r"""length(LongBoxGauss self) -> double"""
+        return _libBornAgainSample.LongBoxGauss_length(self)
 
     def height(self):
-        r"""height(TruncatedSphere self) -> double"""
-        return _libBornAgainSample.TruncatedSphere_height(self)
-
-    def radius(self):
-        r"""radius(TruncatedSphere self) -> double"""
-        return _libBornAgainSample.TruncatedSphere_radius(self)
+        r"""height(LongBoxGauss self) -> double"""
+        return _libBornAgainSample.LongBoxGauss_height(self)
 
-    def removedTop(self):
-        r"""removedTop(TruncatedSphere self) -> double"""
-        return _libBornAgainSample.TruncatedSphere_removedTop(self)
+    def width(self):
+        r"""width(LongBoxGauss self) -> double"""
+        return _libBornAgainSample.LongBoxGauss_width(self)
 
     def radialExtension(self):
-        r"""radialExtension(TruncatedSphere self) -> double"""
-        return _libBornAgainSample.TruncatedSphere_radialExtension(self)
+        r"""radialExtension(LongBoxGauss self) -> double"""
+        return _libBornAgainSample.LongBoxGauss_radialExtension(self)
 
     def formfactor(self, q):
-        r"""formfactor(TruncatedSphere self, C3 q) -> complex_t"""
-        return _libBornAgainSample.TruncatedSphere_formfactor(self, q)
+        r"""formfactor(LongBoxGauss self, C3 q) -> complex_t"""
+        return _libBornAgainSample.LongBoxGauss_formfactor(self, q)
 
     def validate(self):
-        r"""validate(TruncatedSphere self) -> std::string"""
-        return _libBornAgainSample.TruncatedSphere_validate(self)
-    __swig_destroy__ = _libBornAgainSample.delete_TruncatedSphere
+        r"""validate(LongBoxGauss self) -> std::string"""
+        return _libBornAgainSample.LongBoxGauss_validate(self)
+    __swig_destroy__ = _libBornAgainSample.delete_LongBoxGauss
 
-# Register TruncatedSphere in _libBornAgainSample:
-_libBornAgainSample.TruncatedSphere_swigregister(TruncatedSphere)
-class TruncatedSpheroid(IFormFactor):
-    r"""Proxy of C++ TruncatedSpheroid class."""
+# Register LongBoxGauss in _libBornAgainSample:
+_libBornAgainSample.LongBoxGauss_swigregister(LongBoxGauss)
+class LongBoxLorentz(IFormFactor):
+    r"""Proxy of C++ LongBoxLorentz class."""
 
     thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
     __repr__ = _swig_repr
 
     def __init__(self, *args):
         r"""
-        __init__(TruncatedSpheroid self, double radius, double height, double height_flattening, double dh) -> TruncatedSpheroid
-        __init__(TruncatedSpheroid self, vdouble1d_t P) -> TruncatedSpheroid
+        __init__(LongBoxLorentz self, double length, double width, double height) -> LongBoxLorentz
+        __init__(LongBoxLorentz self, vdouble1d_t P) -> LongBoxLorentz
         """
-        _libBornAgainSample.TruncatedSpheroid_swiginit(self, _libBornAgainSample.new_TruncatedSpheroid(*args))
+        _libBornAgainSample.LongBoxLorentz_swiginit(self, _libBornAgainSample.new_LongBoxLorentz(*args))
 
     def clone(self):
-        r"""clone(TruncatedSpheroid self) -> TruncatedSpheroid"""
-        return _libBornAgainSample.TruncatedSpheroid_clone(self)
+        r"""clone(LongBoxLorentz self) -> LongBoxLorentz"""
+        return _libBornAgainSample.LongBoxLorentz_clone(self)
 
     def className(self):
-        r"""className(TruncatedSpheroid self) -> std::string"""
-        return _libBornAgainSample.TruncatedSpheroid_className(self)
+        r"""className(LongBoxLorentz self) -> std::string"""
+        return _libBornAgainSample.LongBoxLorentz_className(self)
 
     def parDefs(self):
-        r"""parDefs(TruncatedSpheroid self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
-        return _libBornAgainSample.TruncatedSpheroid_parDefs(self)
+        r"""parDefs(LongBoxLorentz self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
+        return _libBornAgainSample.LongBoxLorentz_parDefs(self)
 
-    def radius(self):
-        r"""radius(TruncatedSpheroid self) -> double"""
-        return _libBornAgainSample.TruncatedSpheroid_radius(self)
+    def length(self):
+        r"""length(LongBoxLorentz self) -> double"""
+        return _libBornAgainSample.LongBoxLorentz_length(self)
 
     def height(self):
-        r"""height(TruncatedSpheroid self) -> double"""
-        return _libBornAgainSample.TruncatedSpheroid_height(self)
-
-    def heightFlattening(self):
-        r"""heightFlattening(TruncatedSpheroid self) -> double"""
-        return _libBornAgainSample.TruncatedSpheroid_heightFlattening(self)
+        r"""height(LongBoxLorentz self) -> double"""
+        return _libBornAgainSample.LongBoxLorentz_height(self)
 
-    def removedTop(self):
-        r"""removedTop(TruncatedSpheroid self) -> double"""
-        return _libBornAgainSample.TruncatedSpheroid_removedTop(self)
+    def width(self):
+        r"""width(LongBoxLorentz self) -> double"""
+        return _libBornAgainSample.LongBoxLorentz_width(self)
 
     def radialExtension(self):
-        r"""radialExtension(TruncatedSpheroid self) -> double"""
-        return _libBornAgainSample.TruncatedSpheroid_radialExtension(self)
+        r"""radialExtension(LongBoxLorentz self) -> double"""
+        return _libBornAgainSample.LongBoxLorentz_radialExtension(self)
 
     def formfactor(self, q):
-        r"""formfactor(TruncatedSpheroid self, C3 q) -> complex_t"""
-        return _libBornAgainSample.TruncatedSpheroid_formfactor(self, q)
+        r"""formfactor(LongBoxLorentz self, C3 q) -> complex_t"""
+        return _libBornAgainSample.LongBoxLorentz_formfactor(self, q)
 
     def validate(self):
-        r"""validate(TruncatedSpheroid self) -> std::string"""
-        return _libBornAgainSample.TruncatedSpheroid_validate(self)
-    __swig_destroy__ = _libBornAgainSample.delete_TruncatedSpheroid
+        r"""validate(LongBoxLorentz self) -> std::string"""
+        return _libBornAgainSample.LongBoxLorentz_validate(self)
+    __swig_destroy__ = _libBornAgainSample.delete_LongBoxLorentz
 
-# Register TruncatedSpheroid in _libBornAgainSample:
-_libBornAgainSample.TruncatedSpheroid_swigregister(TruncatedSpheroid)
+# Register LongBoxLorentz in _libBornAgainSample:
+_libBornAgainSample.LongBoxLorentz_swigregister(LongBoxLorentz)
 class GaussSphere(IFormFactor):
     r"""Proxy of C++ GaussSphere class."""
 
diff --git a/auto/Wrap/libBornAgainSample_wrap.cpp b/auto/Wrap/libBornAgainSample_wrap.cpp
index 420be7307b2..247d38d6bd4 100644
--- a/auto/Wrap/libBornAgainSample_wrap.cpp
+++ b/auto/Wrap/libBornAgainSample_wrap.cpp
@@ -48532,7 +48532,7 @@ SWIGINTERN PyObject *ISawtoothRipple_swigregister(PyObject *SWIGUNUSEDPARM(self)
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *_wrap_new_BarGauss__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_Box__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
   double arg2 ;
@@ -48543,69 +48543,69 @@ SWIGINTERN PyObject *_wrap_new_BarGauss__SWIG_0(PyObject *self, Py_ssize_t nobjs
   int ecode2 = 0 ;
   double val3 ;
   int ecode3 = 0 ;
-  BarGauss *result = 0 ;
+  Box *result = 0 ;
   
   if ((nobjs < 3) || (nobjs > 3)) SWIG_fail;
   ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
   if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_BarGauss" "', argument " "1"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_Box" "', argument " "1"" of type '" "double""'");
   } 
   arg1 = static_cast< double >(val1);
   ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
   if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_BarGauss" "', argument " "2"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_Box" "', argument " "2"" of type '" "double""'");
   } 
   arg2 = static_cast< double >(val2);
   ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
   if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_BarGauss" "', argument " "3"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_Box" "', argument " "3"" of type '" "double""'");
   } 
   arg3 = static_cast< double >(val3);
-  result = (BarGauss *)new BarGauss(arg1,arg2,arg3);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_BarGauss, SWIG_POINTER_NEW |  0 );
+  result = (Box *)new Box(arg1,arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Box, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_BarGauss__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_Box__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   std::vector< double,std::allocator< double > > arg1 ;
-  BarGauss *result = 0 ;
+  Box *result = 0 ;
   
   if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
   {
     std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
     int res = swig::asptr(swig_obj[0], &ptr);
     if (!SWIG_IsOK(res) || !ptr) {
-      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_BarGauss" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
+      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_Box" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
     }
     arg1 = *ptr;
     if (SWIG_IsNewObj(res)) delete ptr;
   }
-  result = (BarGauss *)new BarGauss(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_BarGauss, SWIG_POINTER_NEW |  0 );
+  result = (Box *)new Box(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Box, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_BarGauss(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_Box(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
   PyObject *argv[4] = {
     0
   };
   
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_BarGauss", 0, 3, argv))) SWIG_fail;
+  if (!(argc = SWIG_Python_UnpackTuple(args, "new_Box", 0, 3, argv))) SWIG_fail;
   --argc;
   if (argc == 1) {
     int _v = 0;
     int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
     _v = SWIG_CheckState(res);
     if (_v) {
-      return _wrap_new_BarGauss__SWIG_1(self, argc, argv);
+      return _wrap_new_Box__SWIG_1(self, argc, argv);
     }
   }
   if (argc == 3) {
@@ -48625,47 +48625,47 @@ SWIGINTERN PyObject *_wrap_new_BarGauss(PyObject *self, PyObject *args) {
           _v = SWIG_CheckState(res);
         }
         if (_v) {
-          return _wrap_new_BarGauss__SWIG_0(self, argc, argv);
+          return _wrap_new_Box__SWIG_0(self, argc, argv);
         }
       }
     }
   }
   
 fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_BarGauss'.\n"
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_Box'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    BarGauss::BarGauss(double,double,double)\n"
-    "    BarGauss::BarGauss(std::vector< double,std::allocator< double > >)\n");
+    "    Box::Box(double,double,double)\n"
+    "    Box::Box(std::vector< double,std::allocator< double > >)\n");
   return 0;
 }
 
 
-SWIGINTERN PyObject *_wrap_BarGauss_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Box_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  BarGauss *arg1 = (BarGauss *) 0 ;
+  Box *arg1 = (Box *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  BarGauss *result = 0 ;
+  Box *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_BarGauss, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Box, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "BarGauss_clone" "', argument " "1"" of type '" "BarGauss const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Box_clone" "', argument " "1"" of type '" "Box const *""'"); 
   }
-  arg1 = reinterpret_cast< BarGauss * >(argp1);
-  result = (BarGauss *)((BarGauss const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_BarGauss, 0 |  0 );
+  arg1 = reinterpret_cast< Box * >(argp1);
+  result = (Box *)((Box const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Box, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_BarGauss_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Box_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  BarGauss *arg1 = (BarGauss *) 0 ;
+  Box *arg1 = (Box *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -48673,12 +48673,12 @@ SWIGINTERN PyObject *_wrap_BarGauss_className(PyObject *self, PyObject *args) {
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_BarGauss, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Box, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "BarGauss_className" "', argument " "1"" of type '" "BarGauss const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Box_className" "', argument " "1"" of type '" "Box const *""'"); 
   }
-  arg1 = reinterpret_cast< BarGauss * >(argp1);
-  result = ((BarGauss const *)arg1)->className();
+  arg1 = reinterpret_cast< Box * >(argp1);
+  result = ((Box const *)arg1)->className();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -48686,9 +48686,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_BarGauss_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Box_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  BarGauss *arg1 = (BarGauss *) 0 ;
+  Box *arg1 = (Box *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -48696,12 +48696,12 @@ SWIGINTERN PyObject *_wrap_BarGauss_parDefs(PyObject *self, PyObject *args) {
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_BarGauss, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Box, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "BarGauss_parDefs" "', argument " "1"" of type '" "BarGauss const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Box_parDefs" "', argument " "1"" of type '" "Box const *""'"); 
   }
-  arg1 = reinterpret_cast< BarGauss * >(argp1);
-  result = ((BarGauss const *)arg1)->parDefs();
+  arg1 = reinterpret_cast< Box * >(argp1);
+  result = ((Box const *)arg1)->parDefs();
   resultobj = SWIG_NewPointerObj((new std::vector< ParaMeta,std::allocator< ParaMeta > >(result)), SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
@@ -48709,230 +48709,196 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_BarGauss(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Box_length(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  BarGauss *arg1 = (BarGauss *) 0 ;
+  Box *arg1 = (Box *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
+  double result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_BarGauss, SWIG_POINTER_DISOWN |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Box, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_BarGauss" "', argument " "1"" of type '" "BarGauss *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Box_length" "', argument " "1"" of type '" "Box const *""'"); 
   }
-  arg1 = reinterpret_cast< BarGauss * >(argp1);
-  delete arg1;
-  resultobj = SWIG_Py_Void();
+  arg1 = reinterpret_cast< Box * >(argp1);
+  result = (double)((Box const *)arg1)->length();
+  resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *BarGauss_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *obj;
-  if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_BarGauss, SWIG_NewClientData(obj));
-  return SWIG_Py_Void();
-}
-
-SWIGINTERN PyObject *BarGauss_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  return SWIG_Python_InitShadowInstance(args);
-}
-
-SWIGINTERN PyObject *_wrap_new_BarLorentz__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_Box_width(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  double arg1 ;
-  double arg2 ;
-  double arg3 ;
-  double val1 ;
-  int ecode1 = 0 ;
-  double val2 ;
-  int ecode2 = 0 ;
-  double val3 ;
-  int ecode3 = 0 ;
-  BarLorentz *result = 0 ;
+  Box *arg1 = (Box *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  double result;
   
-  if ((nobjs < 3) || (nobjs > 3)) SWIG_fail;
-  ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
-  if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_BarLorentz" "', argument " "1"" of type '" "double""'");
-  } 
-  arg1 = static_cast< double >(val1);
-  ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_BarLorentz" "', argument " "2"" of type '" "double""'");
-  } 
-  arg2 = static_cast< double >(val2);
-  ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
-  if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_BarLorentz" "', argument " "3"" of type '" "double""'");
-  } 
-  arg3 = static_cast< double >(val3);
-  result = (BarLorentz *)new BarLorentz(arg1,arg2,arg3);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_BarLorentz, SWIG_POINTER_NEW |  0 );
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Box, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Box_width" "', argument " "1"" of type '" "Box const *""'"); 
+  }
+  arg1 = reinterpret_cast< Box * >(argp1);
+  result = (double)((Box const *)arg1)->width();
+  resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_BarLorentz__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_Box_height(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  std::vector< double,std::allocator< double > > arg1 ;
-  BarLorentz *result = 0 ;
+  Box *arg1 = (Box *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  double result;
   
-  if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
-  {
-    std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
-    int res = swig::asptr(swig_obj[0], &ptr);
-    if (!SWIG_IsOK(res) || !ptr) {
-      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_BarLorentz" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
-    }
-    arg1 = *ptr;
-    if (SWIG_IsNewObj(res)) delete ptr;
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Box, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Box_height" "', argument " "1"" of type '" "Box const *""'"); 
   }
-  result = (BarLorentz *)new BarLorentz(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_BarLorentz, SWIG_POINTER_NEW |  0 );
+  arg1 = reinterpret_cast< Box * >(argp1);
+  result = (double)((Box const *)arg1)->height();
+  resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_BarLorentz(PyObject *self, PyObject *args) {
-  Py_ssize_t argc;
-  PyObject *argv[4] = {
-    0
-  };
-  
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_BarLorentz", 0, 3, argv))) SWIG_fail;
-  --argc;
-  if (argc == 1) {
-    int _v = 0;
-    int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
-    _v = SWIG_CheckState(res);
-    if (_v) {
-      return _wrap_new_BarLorentz__SWIG_1(self, argc, argv);
-    }
-  }
-  if (argc == 3) {
-    int _v = 0;
-    {
-      int res = SWIG_AsVal_double(argv[0], NULL);
-      _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_BarLorentz__SWIG_0(self, argc, argv);
-        }
-      }
-    }
-  }
-  
-fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_BarLorentz'.\n"
-    "  Possible C/C++ prototypes are:\n"
-    "    BarLorentz::BarLorentz(double,double,double)\n"
-    "    BarLorentz::BarLorentz(std::vector< double,std::allocator< double > >)\n");
-  return 0;
-}
-
-
-SWIGINTERN PyObject *_wrap_BarLorentz_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Box_volume(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  BarLorentz *arg1 = (BarLorentz *) 0 ;
+  Box *arg1 = (Box *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  BarLorentz *result = 0 ;
+  double result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_BarLorentz, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Box, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "BarLorentz_clone" "', argument " "1"" of type '" "BarLorentz const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Box_volume" "', argument " "1"" of type '" "Box const *""'"); 
   }
-  arg1 = reinterpret_cast< BarLorentz * >(argp1);
-  result = (BarLorentz *)((BarLorentz const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_BarLorentz, 0 |  0 );
+  arg1 = reinterpret_cast< Box * >(argp1);
+  result = (double)((Box const *)arg1)->volume();
+  resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_BarLorentz_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Box_radialExtension(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  BarLorentz *arg1 = (BarLorentz *) 0 ;
+  Box *arg1 = (Box *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  std::string result;
+  double result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_BarLorentz, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Box, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "BarLorentz_className" "', argument " "1"" of type '" "BarLorentz const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Box_radialExtension" "', argument " "1"" of type '" "Box const *""'"); 
   }
-  arg1 = reinterpret_cast< BarLorentz * >(argp1);
-  result = ((BarLorentz const *)arg1)->className();
-  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  arg1 = reinterpret_cast< Box * >(argp1);
+  result = (double)((Box const *)arg1)->radialExtension();
+  resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_BarLorentz_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Box_formfactor(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  BarLorentz *arg1 = (BarLorentz *) 0 ;
+  Box *arg1 = (Box *) 0 ;
+  C3 arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  complex_t result;
+  
+  if (!SWIG_Python_UnpackTuple(args, "Box_formfactor", 2, 2, swig_obj)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Box, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Box_formfactor" "', argument " "1"" of type '" "Box const *""'"); 
+  }
+  arg1 = reinterpret_cast< Box * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_Vec3T_std__complexT_double_t_t,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Box_formfactor" "', argument " "2"" of type '" "C3""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Box_formfactor" "', argument " "2"" of type '" "C3""'");
+    } else {
+      C3 * temp = reinterpret_cast< C3 * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  result = ((Box const *)arg1)->formfactor(arg2);
+  resultobj = SWIG_From_std_complex_Sl_double_Sg_(static_cast< std::complex<double> >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_Box_validate(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  Box *arg1 = (Box *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  SwigValueWrapper< std::vector< ParaMeta,std::allocator< ParaMeta > > > result;
+  std::string result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_BarLorentz, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Box, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "BarLorentz_parDefs" "', argument " "1"" of type '" "BarLorentz const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Box_validate" "', argument " "1"" of type '" "Box const *""'"); 
   }
-  arg1 = reinterpret_cast< BarLorentz * >(argp1);
-  result = ((BarLorentz const *)arg1)->parDefs();
-  resultobj = SWIG_NewPointerObj((new std::vector< ParaMeta,std::allocator< ParaMeta > >(result)), SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, SWIG_POINTER_OWN |  0 );
+  arg1 = reinterpret_cast< Box * >(argp1);
+  result = ((Box const *)arg1)->validate();
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_BarLorentz(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_Box(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  BarLorentz *arg1 = (BarLorentz *) 0 ;
+  Box *arg1 = (Box *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_BarLorentz, SWIG_POINTER_DISOWN |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Box, SWIG_POINTER_DISOWN |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_BarLorentz" "', argument " "1"" of type '" "BarLorentz *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Box" "', argument " "1"" of type '" "Box *""'"); 
   }
-  arg1 = reinterpret_cast< BarLorentz * >(argp1);
+  arg1 = reinterpret_cast< Box * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -48941,102 +48907,86 @@ fail:
 }
 
 
-SWIGINTERN PyObject *BarLorentz_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *Box_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
   if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_BarLorentz, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_Box, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *BarLorentz_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *Box_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   return SWIG_Python_InitShadowInstance(args);
 }
 
-SWIGINTERN PyObject *_wrap_new_Bipyramid4__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_Prism3__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
   double arg2 ;
-  double arg3 ;
-  double arg4 ;
   double val1 ;
   int ecode1 = 0 ;
   double val2 ;
   int ecode2 = 0 ;
-  double val3 ;
-  int ecode3 = 0 ;
-  double val4 ;
-  int ecode4 = 0 ;
-  Bipyramid4 *result = 0 ;
+  Prism3 *result = 0 ;
   
-  if ((nobjs < 4) || (nobjs > 4)) SWIG_fail;
+  if ((nobjs < 2) || (nobjs > 2)) SWIG_fail;
   ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
   if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_Bipyramid4" "', argument " "1"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_Prism3" "', argument " "1"" of type '" "double""'");
   } 
   arg1 = static_cast< double >(val1);
   ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
   if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_Bipyramid4" "', argument " "2"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_Prism3" "', argument " "2"" of type '" "double""'");
   } 
   arg2 = static_cast< double >(val2);
-  ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
-  if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_Bipyramid4" "', argument " "3"" of type '" "double""'");
-  } 
-  arg3 = static_cast< double >(val3);
-  ecode4 = SWIG_AsVal_double(swig_obj[3], &val4);
-  if (!SWIG_IsOK(ecode4)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "new_Bipyramid4" "', argument " "4"" of type '" "double""'");
-  } 
-  arg4 = static_cast< double >(val4);
-  result = (Bipyramid4 *)new Bipyramid4(arg1,arg2,arg3,arg4);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Bipyramid4, SWIG_POINTER_NEW |  0 );
+  result = (Prism3 *)new Prism3(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Prism3, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_Bipyramid4__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_Prism3__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   std::vector< double,std::allocator< double > > arg1 ;
-  Bipyramid4 *result = 0 ;
+  Prism3 *result = 0 ;
   
   if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
   {
     std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
     int res = swig::asptr(swig_obj[0], &ptr);
     if (!SWIG_IsOK(res) || !ptr) {
-      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_Bipyramid4" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
+      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_Prism3" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
     }
     arg1 = *ptr;
     if (SWIG_IsNewObj(res)) delete ptr;
   }
-  result = (Bipyramid4 *)new Bipyramid4(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Bipyramid4, SWIG_POINTER_NEW |  0 );
+  result = (Prism3 *)new Prism3(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Prism3, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_Bipyramid4(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_Prism3(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
-  PyObject *argv[5] = {
+  PyObject *argv[3] = {
     0
   };
   
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_Bipyramid4", 0, 4, argv))) SWIG_fail;
+  if (!(argc = SWIG_Python_UnpackTuple(args, "new_Prism3", 0, 2, argv))) SWIG_fail;
   --argc;
   if (argc == 1) {
     int _v = 0;
     int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
     _v = SWIG_CheckState(res);
     if (_v) {
-      return _wrap_new_Bipyramid4__SWIG_1(self, argc, argv);
+      return _wrap_new_Prism3__SWIG_1(self, argc, argv);
     }
   }
-  if (argc == 4) {
+  if (argc == 2) {
     int _v = 0;
     {
       int res = SWIG_AsVal_double(argv[0], NULL);
@@ -49048,58 +48998,46 @@ SWIGINTERN PyObject *_wrap_new_Bipyramid4(PyObject *self, PyObject *args) {
         _v = SWIG_CheckState(res);
       }
       if (_v) {
-        {
-          int res = SWIG_AsVal_double(argv[2], NULL);
-          _v = SWIG_CheckState(res);
-        }
-        if (_v) {
-          {
-            int res = SWIG_AsVal_double(argv[3], NULL);
-            _v = SWIG_CheckState(res);
-          }
-          if (_v) {
-            return _wrap_new_Bipyramid4__SWIG_0(self, argc, argv);
-          }
-        }
+        return _wrap_new_Prism3__SWIG_0(self, argc, argv);
       }
     }
   }
   
 fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_Bipyramid4'.\n"
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_Prism3'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    Bipyramid4::Bipyramid4(double,double,double,double)\n"
-    "    Bipyramid4::Bipyramid4(std::vector< double,std::allocator< double > >)\n");
+    "    Prism3::Prism3(double,double)\n"
+    "    Prism3::Prism3(std::vector< double,std::allocator< double > >)\n");
   return 0;
 }
 
 
-SWIGINTERN PyObject *_wrap_Bipyramid4_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Prism3_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Bipyramid4 *arg1 = (Bipyramid4 *) 0 ;
+  Prism3 *arg1 = (Prism3 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  Bipyramid4 *result = 0 ;
+  Prism3 *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Bipyramid4, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Prism3, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Bipyramid4_clone" "', argument " "1"" of type '" "Bipyramid4 const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Prism3_clone" "', argument " "1"" of type '" "Prism3 const *""'"); 
   }
-  arg1 = reinterpret_cast< Bipyramid4 * >(argp1);
-  result = (Bipyramid4 *)((Bipyramid4 const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Bipyramid4, 0 |  0 );
+  arg1 = reinterpret_cast< Prism3 * >(argp1);
+  result = (Prism3 *)((Prism3 const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Prism3, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Bipyramid4_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Prism3_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Bipyramid4 *arg1 = (Bipyramid4 *) 0 ;
+  Prism3 *arg1 = (Prism3 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -49107,12 +49045,12 @@ SWIGINTERN PyObject *_wrap_Bipyramid4_className(PyObject *self, PyObject *args)
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Bipyramid4, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Prism3, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Bipyramid4_className" "', argument " "1"" of type '" "Bipyramid4 const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Prism3_className" "', argument " "1"" of type '" "Prism3 const *""'"); 
   }
-  arg1 = reinterpret_cast< Bipyramid4 * >(argp1);
-  result = ((Bipyramid4 const *)arg1)->className();
+  arg1 = reinterpret_cast< Prism3 * >(argp1);
+  result = ((Prism3 const *)arg1)->className();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -49120,9 +49058,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Bipyramid4_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Prism3_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Bipyramid4 *arg1 = (Bipyramid4 *) 0 ;
+  Prism3 *arg1 = (Prism3 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -49130,12 +49068,12 @@ SWIGINTERN PyObject *_wrap_Bipyramid4_parDefs(PyObject *self, PyObject *args) {
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Bipyramid4, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Prism3, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Bipyramid4_parDefs" "', argument " "1"" of type '" "Bipyramid4 const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Prism3_parDefs" "', argument " "1"" of type '" "Prism3 const *""'"); 
   }
-  arg1 = reinterpret_cast< Bipyramid4 * >(argp1);
-  result = ((Bipyramid4 const *)arg1)->parDefs();
+  arg1 = reinterpret_cast< Prism3 * >(argp1);
+  result = ((Prism3 const *)arg1)->parDefs();
   resultobj = SWIG_NewPointerObj((new std::vector< ParaMeta,std::allocator< ParaMeta > >(result)), SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
@@ -49143,9 +49081,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Bipyramid4_length(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Prism3_baseEdge(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Bipyramid4 *arg1 = (Bipyramid4 *) 0 ;
+  Prism3 *arg1 = (Prism3 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -49153,12 +49091,12 @@ SWIGINTERN PyObject *_wrap_Bipyramid4_length(PyObject *self, PyObject *args) {
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Bipyramid4, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Prism3, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Bipyramid4_length" "', argument " "1"" of type '" "Bipyramid4 const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Prism3_baseEdge" "', argument " "1"" of type '" "Prism3 const *""'"); 
   }
-  arg1 = reinterpret_cast< Bipyramid4 * >(argp1);
-  result = (double)((Bipyramid4 const *)arg1)->length();
+  arg1 = reinterpret_cast< Prism3 * >(argp1);
+  result = (double)((Prism3 const *)arg1)->baseEdge();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -49166,9 +49104,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Bipyramid4_height(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Prism3_height(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Bipyramid4 *arg1 = (Bipyramid4 *) 0 ;
+  Prism3 *arg1 = (Prism3 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -49176,12 +49114,12 @@ SWIGINTERN PyObject *_wrap_Bipyramid4_height(PyObject *self, PyObject *args) {
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Bipyramid4, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Prism3, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Bipyramid4_height" "', argument " "1"" of type '" "Bipyramid4 const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Prism3_height" "', argument " "1"" of type '" "Prism3 const *""'"); 
   }
-  arg1 = reinterpret_cast< Bipyramid4 * >(argp1);
-  result = (double)((Bipyramid4 const *)arg1)->height();
+  arg1 = reinterpret_cast< Prism3 * >(argp1);
+  result = (double)((Prism3 const *)arg1)->height();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -49189,185 +49127,108 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Bipyramid4_heightRatio(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_Prism3(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Bipyramid4 *arg1 = (Bipyramid4 *) 0 ;
+  Prism3 *arg1 = (Prism3 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  double result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Bipyramid4, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Prism3, SWIG_POINTER_DISOWN |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Bipyramid4_heightRatio" "', argument " "1"" of type '" "Bipyramid4 const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Prism3" "', argument " "1"" of type '" "Prism3 *""'"); 
   }
-  arg1 = reinterpret_cast< Bipyramid4 * >(argp1);
-  result = (double)((Bipyramid4 const *)arg1)->heightRatio();
-  resultobj = SWIG_From_double(static_cast< double >(result));
+  arg1 = reinterpret_cast< Prism3 * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Bipyramid4_alpha(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  Bipyramid4 *arg1 = (Bipyramid4 *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  double result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Bipyramid4, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Bipyramid4_alpha" "', argument " "1"" of type '" "Bipyramid4 const *""'"); 
-  }
-  arg1 = reinterpret_cast< Bipyramid4 * >(argp1);
-  result = (double)((Bipyramid4 const *)arg1)->alpha();
-  resultobj = SWIG_From_double(static_cast< double >(result));
-  return resultobj;
-fail:
-  return NULL;
+SWIGINTERN PyObject *Prism3_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_Prism3, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
 }
 
+SWIGINTERN PyObject *Prism3_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
 
-SWIGINTERN PyObject *_wrap_Bipyramid4_validate(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  Bipyramid4 *arg1 = (Bipyramid4 *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  std::string result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Bipyramid4, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Bipyramid4_validate" "', argument " "1"" of type '" "Bipyramid4 const *""'"); 
-  }
-  arg1 = reinterpret_cast< Bipyramid4 * >(argp1);
-  result = ((Bipyramid4 const *)arg1)->validate();
-  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_delete_Bipyramid4(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  Bipyramid4 *arg1 = (Bipyramid4 *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Bipyramid4, SWIG_POINTER_DISOWN |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Bipyramid4" "', argument " "1"" of type '" "Bipyramid4 *""'"); 
-  }
-  arg1 = reinterpret_cast< Bipyramid4 * >(argp1);
-  delete arg1;
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *Bipyramid4_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *obj;
-  if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_Bipyramid4, SWIG_NewClientData(obj));
-  return SWIG_Py_Void();
-}
-
-SWIGINTERN PyObject *Bipyramid4_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  return SWIG_Python_InitShadowInstance(args);
-}
-
-SWIGINTERN PyObject *_wrap_new_Box__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_Prism6__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
   double arg2 ;
-  double arg3 ;
   double val1 ;
   int ecode1 = 0 ;
   double val2 ;
   int ecode2 = 0 ;
-  double val3 ;
-  int ecode3 = 0 ;
-  Box *result = 0 ;
+  Prism6 *result = 0 ;
   
-  if ((nobjs < 3) || (nobjs > 3)) SWIG_fail;
+  if ((nobjs < 2) || (nobjs > 2)) SWIG_fail;
   ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
   if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_Box" "', argument " "1"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_Prism6" "', argument " "1"" of type '" "double""'");
   } 
   arg1 = static_cast< double >(val1);
   ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
   if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_Box" "', argument " "2"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_Prism6" "', argument " "2"" of type '" "double""'");
   } 
   arg2 = static_cast< double >(val2);
-  ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
-  if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_Box" "', argument " "3"" of type '" "double""'");
-  } 
-  arg3 = static_cast< double >(val3);
-  result = (Box *)new Box(arg1,arg2,arg3);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Box, SWIG_POINTER_NEW |  0 );
+  result = (Prism6 *)new Prism6(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Prism6, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_Box__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_Prism6__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   std::vector< double,std::allocator< double > > arg1 ;
-  Box *result = 0 ;
+  Prism6 *result = 0 ;
   
   if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
   {
     std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
     int res = swig::asptr(swig_obj[0], &ptr);
     if (!SWIG_IsOK(res) || !ptr) {
-      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_Box" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
+      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_Prism6" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
     }
     arg1 = *ptr;
     if (SWIG_IsNewObj(res)) delete ptr;
   }
-  result = (Box *)new Box(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Box, SWIG_POINTER_NEW |  0 );
+  result = (Prism6 *)new Prism6(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Prism6, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_Box(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_Prism6(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
-  PyObject *argv[4] = {
+  PyObject *argv[3] = {
     0
   };
   
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_Box", 0, 3, argv))) SWIG_fail;
+  if (!(argc = SWIG_Python_UnpackTuple(args, "new_Prism6", 0, 2, argv))) SWIG_fail;
   --argc;
   if (argc == 1) {
     int _v = 0;
     int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
     _v = SWIG_CheckState(res);
     if (_v) {
-      return _wrap_new_Box__SWIG_1(self, argc, argv);
+      return _wrap_new_Prism6__SWIG_1(self, argc, argv);
     }
   }
-  if (argc == 3) {
+  if (argc == 2) {
     int _v = 0;
     {
       int res = SWIG_AsVal_double(argv[0], NULL);
@@ -49379,52 +49240,46 @@ SWIGINTERN PyObject *_wrap_new_Box(PyObject *self, PyObject *args) {
         _v = SWIG_CheckState(res);
       }
       if (_v) {
-        {
-          int res = SWIG_AsVal_double(argv[2], NULL);
-          _v = SWIG_CheckState(res);
-        }
-        if (_v) {
-          return _wrap_new_Box__SWIG_0(self, argc, argv);
-        }
+        return _wrap_new_Prism6__SWIG_0(self, argc, argv);
       }
     }
   }
   
 fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_Box'.\n"
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_Prism6'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    Box::Box(double,double,double)\n"
-    "    Box::Box(std::vector< double,std::allocator< double > >)\n");
+    "    Prism6::Prism6(double,double)\n"
+    "    Prism6::Prism6(std::vector< double,std::allocator< double > >)\n");
   return 0;
 }
 
 
-SWIGINTERN PyObject *_wrap_Box_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Prism6_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Box *arg1 = (Box *) 0 ;
+  Prism6 *arg1 = (Prism6 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  Box *result = 0 ;
+  Prism6 *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Box, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Prism6, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Box_clone" "', argument " "1"" of type '" "Box const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Prism6_clone" "', argument " "1"" of type '" "Prism6 const *""'"); 
   }
-  arg1 = reinterpret_cast< Box * >(argp1);
-  result = (Box *)((Box const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Box, 0 |  0 );
+  arg1 = reinterpret_cast< Prism6 * >(argp1);
+  result = (Prism6 *)((Prism6 const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Prism6, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Box_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Prism6_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Box *arg1 = (Box *) 0 ;
+  Prism6 *arg1 = (Prism6 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -49432,12 +49287,12 @@ SWIGINTERN PyObject *_wrap_Box_className(PyObject *self, PyObject *args) {
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Box, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Prism6, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Box_className" "', argument " "1"" of type '" "Box const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Prism6_className" "', argument " "1"" of type '" "Prism6 const *""'"); 
   }
-  arg1 = reinterpret_cast< Box * >(argp1);
-  result = ((Box const *)arg1)->className();
+  arg1 = reinterpret_cast< Prism6 * >(argp1);
+  result = ((Prism6 const *)arg1)->className();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -49445,9 +49300,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Box_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Prism6_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Box *arg1 = (Box *) 0 ;
+  Prism6 *arg1 = (Prism6 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -49455,12 +49310,12 @@ SWIGINTERN PyObject *_wrap_Box_parDefs(PyObject *self, PyObject *args) {
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Box, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Prism6, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Box_parDefs" "', argument " "1"" of type '" "Box const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Prism6_parDefs" "', argument " "1"" of type '" "Prism6 const *""'"); 
   }
-  arg1 = reinterpret_cast< Box * >(argp1);
-  result = ((Box const *)arg1)->parDefs();
+  arg1 = reinterpret_cast< Prism6 * >(argp1);
+  result = ((Prism6 const *)arg1)->parDefs();
   resultobj = SWIG_NewPointerObj((new std::vector< ParaMeta,std::allocator< ParaMeta > >(result)), SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
@@ -49468,9 +49323,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Box_length(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Prism6_baseEdge(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Box *arg1 = (Box *) 0 ;
+  Prism6 *arg1 = (Prism6 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -49478,12 +49333,12 @@ SWIGINTERN PyObject *_wrap_Box_length(PyObject *self, PyObject *args) {
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Box, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Prism6, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Box_length" "', argument " "1"" of type '" "Box const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Prism6_baseEdge" "', argument " "1"" of type '" "Prism6 const *""'"); 
   }
-  arg1 = reinterpret_cast< Box * >(argp1);
-  result = (double)((Box const *)arg1)->length();
+  arg1 = reinterpret_cast< Prism6 * >(argp1);
+  result = (double)((Prism6 const *)arg1)->baseEdge();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -49491,9 +49346,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Box_width(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Prism6_height(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Box *arg1 = (Box *) 0 ;
+  Prism6 *arg1 = (Prism6 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -49501,12 +49356,12 @@ SWIGINTERN PyObject *_wrap_Box_width(PyObject *self, PyObject *args) {
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Box, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Prism6, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Box_width" "', argument " "1"" of type '" "Box const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Prism6_height" "', argument " "1"" of type '" "Prism6 const *""'"); 
   }
-  arg1 = reinterpret_cast< Box * >(argp1);
-  result = (double)((Box const *)arg1)->width();
+  arg1 = reinterpret_cast< Prism6 * >(argp1);
+  result = (double)((Prism6 const *)arg1)->height();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -49514,116 +49369,145 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Box_height(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_Prism6(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Box *arg1 = (Box *) 0 ;
+  Prism6 *arg1 = (Prism6 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  double result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Box, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Prism6, SWIG_POINTER_DISOWN |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Box_height" "', argument " "1"" of type '" "Box const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Prism6" "', argument " "1"" of type '" "Prism6 *""'"); 
   }
-  arg1 = reinterpret_cast< Box * >(argp1);
-  result = (double)((Box const *)arg1)->height();
-  resultobj = SWIG_From_double(static_cast< double >(result));
+  arg1 = reinterpret_cast< Prism6 * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Box_volume(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *Prism6_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_Prism6, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *Prism6_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+
+SWIGINTERN PyObject *_wrap_new_PlatonicTetrahedron__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
-  Box *arg1 = (Box *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  double result;
+  double arg1 ;
+  double val1 ;
+  int ecode1 = 0 ;
+  PlatonicTetrahedron *result = 0 ;
   
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Box, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Box_volume" "', argument " "1"" of type '" "Box const *""'"); 
-  }
-  arg1 = reinterpret_cast< Box * >(argp1);
-  result = (double)((Box const *)arg1)->volume();
-  resultobj = SWIG_From_double(static_cast< double >(result));
+  if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
+  ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_PlatonicTetrahedron" "', argument " "1"" of type '" "double""'");
+  } 
+  arg1 = static_cast< double >(val1);
+  result = (PlatonicTetrahedron *)new PlatonicTetrahedron(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_PlatonicTetrahedron, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Box_radialExtension(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_PlatonicTetrahedron__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
-  Box *arg1 = (Box *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  double result;
+  std::vector< double,std::allocator< double > > arg1 ;
+  PlatonicTetrahedron *result = 0 ;
   
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Box, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Box_radialExtension" "', argument " "1"" of type '" "Box const *""'"); 
+  if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
+  {
+    std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
+    int res = swig::asptr(swig_obj[0], &ptr);
+    if (!SWIG_IsOK(res) || !ptr) {
+      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_PlatonicTetrahedron" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
+    }
+    arg1 = *ptr;
+    if (SWIG_IsNewObj(res)) delete ptr;
   }
-  arg1 = reinterpret_cast< Box * >(argp1);
-  result = (double)((Box const *)arg1)->radialExtension();
-  resultobj = SWIG_From_double(static_cast< double >(result));
+  result = (PlatonicTetrahedron *)new PlatonicTetrahedron(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_PlatonicTetrahedron, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Box_formfactor(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  Box *arg1 = (Box *) 0 ;
-  C3 arg2 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  void *argp2 ;
-  int res2 = 0 ;
-  PyObject *swig_obj[2] ;
-  complex_t result;
+SWIGINTERN PyObject *_wrap_new_PlatonicTetrahedron(PyObject *self, PyObject *args) {
+  Py_ssize_t argc;
+  PyObject *argv[2] = {
+    0
+  };
   
-  if (!SWIG_Python_UnpackTuple(args, "Box_formfactor", 2, 2, swig_obj)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Box, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Box_formfactor" "', argument " "1"" of type '" "Box const *""'"); 
+  if (!(argc = SWIG_Python_UnpackTuple(args, "new_PlatonicTetrahedron", 0, 1, argv))) SWIG_fail;
+  --argc;
+  if (argc == 1) {
+    int _v = 0;
+    {
+      int res = SWIG_AsVal_double(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      return _wrap_new_PlatonicTetrahedron__SWIG_0(self, argc, argv);
+    }
   }
-  arg1 = reinterpret_cast< Box * >(argp1);
-  {
-    res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_Vec3T_std__complexT_double_t_t,  0  | 0);
-    if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Box_formfactor" "', argument " "2"" of type '" "C3""'"); 
-    }  
-    if (!argp2) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Box_formfactor" "', argument " "2"" of type '" "C3""'");
-    } else {
-      C3 * temp = reinterpret_cast< C3 * >(argp2);
-      arg2 = *temp;
-      if (SWIG_IsNewObj(res2)) delete temp;
+  if (argc == 1) {
+    int _v = 0;
+    int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_PlatonicTetrahedron__SWIG_1(self, argc, argv);
     }
   }
-  result = ((Box const *)arg1)->formfactor(arg2);
-  resultobj = SWIG_From_std_complex_Sl_double_Sg_(static_cast< std::complex<double> >(result));
+  
+fail:
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_PlatonicTetrahedron'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    PlatonicTetrahedron::PlatonicTetrahedron(double)\n"
+    "    PlatonicTetrahedron::PlatonicTetrahedron(std::vector< double,std::allocator< double > >)\n");
+  return 0;
+}
+
+
+SWIGINTERN PyObject *_wrap_PlatonicTetrahedron_clone(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  PlatonicTetrahedron *arg1 = (PlatonicTetrahedron *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  PlatonicTetrahedron *result = 0 ;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_PlatonicTetrahedron, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "PlatonicTetrahedron_clone" "', argument " "1"" of type '" "PlatonicTetrahedron const *""'"); 
+  }
+  arg1 = reinterpret_cast< PlatonicTetrahedron * >(argp1);
+  result = (PlatonicTetrahedron *)((PlatonicTetrahedron const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_PlatonicTetrahedron, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Box_validate(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_PlatonicTetrahedron_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Box *arg1 = (Box *) 0 ;
+  PlatonicTetrahedron *arg1 = (PlatonicTetrahedron *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -49631,12 +49515,12 @@ SWIGINTERN PyObject *_wrap_Box_validate(PyObject *self, PyObject *args) {
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Box, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_PlatonicTetrahedron, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Box_validate" "', argument " "1"" of type '" "Box const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "PlatonicTetrahedron_className" "', argument " "1"" of type '" "PlatonicTetrahedron const *""'"); 
   }
-  arg1 = reinterpret_cast< Box * >(argp1);
-  result = ((Box const *)arg1)->validate();
+  arg1 = reinterpret_cast< PlatonicTetrahedron * >(argp1);
+  result = ((PlatonicTetrahedron const *)arg1)->className();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -49644,20 +49528,89 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_Box(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_PlatonicTetrahedron_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Box *arg1 = (Box *) 0 ;
+  PlatonicTetrahedron *arg1 = (PlatonicTetrahedron *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
+  SwigValueWrapper< std::vector< ParaMeta,std::allocator< ParaMeta > > > result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Box, SWIG_POINTER_DISOWN |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_PlatonicTetrahedron, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Box" "', argument " "1"" of type '" "Box *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "PlatonicTetrahedron_parDefs" "', argument " "1"" of type '" "PlatonicTetrahedron const *""'"); 
   }
-  arg1 = reinterpret_cast< Box * >(argp1);
+  arg1 = reinterpret_cast< PlatonicTetrahedron * >(argp1);
+  result = ((PlatonicTetrahedron const *)arg1)->parDefs();
+  resultobj = SWIG_NewPointerObj((new std::vector< ParaMeta,std::allocator< ParaMeta > >(result)), SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_PlatonicTetrahedron_edge(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  PlatonicTetrahedron *arg1 = (PlatonicTetrahedron *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  double result;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_PlatonicTetrahedron, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "PlatonicTetrahedron_edge" "', argument " "1"" of type '" "PlatonicTetrahedron const *""'"); 
+  }
+  arg1 = reinterpret_cast< PlatonicTetrahedron * >(argp1);
+  result = (double)((PlatonicTetrahedron const *)arg1)->edge();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_PlatonicTetrahedron_height(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  PlatonicTetrahedron *arg1 = (PlatonicTetrahedron *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  double result;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_PlatonicTetrahedron, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "PlatonicTetrahedron_height" "', argument " "1"" of type '" "PlatonicTetrahedron const *""'"); 
+  }
+  arg1 = reinterpret_cast< PlatonicTetrahedron * >(argp1);
+  result = (double)((PlatonicTetrahedron const *)arg1)->height();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_PlatonicTetrahedron(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  PlatonicTetrahedron *arg1 = (PlatonicTetrahedron *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_PlatonicTetrahedron, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_PlatonicTetrahedron" "', argument " "1"" of type '" "PlatonicTetrahedron *""'"); 
+  }
+  arg1 = reinterpret_cast< PlatonicTetrahedron * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -49666,137 +49619,123 @@ fail:
 }
 
 
-SWIGINTERN PyObject *Box_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *PlatonicTetrahedron_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
   if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_Box, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_PlatonicTetrahedron, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *Box_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *PlatonicTetrahedron_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   return SWIG_Python_InitShadowInstance(args);
 }
 
-SWIGINTERN PyObject *_wrap_new_CantellatedCube__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_PlatonicOctahedron__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
-  double arg2 ;
   double val1 ;
   int ecode1 = 0 ;
-  double val2 ;
-  int ecode2 = 0 ;
-  CantellatedCube *result = 0 ;
+  PlatonicOctahedron *result = 0 ;
   
-  if ((nobjs < 2) || (nobjs > 2)) SWIG_fail;
+  if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
   ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
   if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CantellatedCube" "', argument " "1"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_PlatonicOctahedron" "', argument " "1"" of type '" "double""'");
   } 
   arg1 = static_cast< double >(val1);
-  ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CantellatedCube" "', argument " "2"" of type '" "double""'");
-  } 
-  arg2 = static_cast< double >(val2);
-  result = (CantellatedCube *)new CantellatedCube(arg1,arg2);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CantellatedCube, SWIG_POINTER_NEW |  0 );
+  result = (PlatonicOctahedron *)new PlatonicOctahedron(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_PlatonicOctahedron, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_CantellatedCube__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_PlatonicOctahedron__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   std::vector< double,std::allocator< double > > arg1 ;
-  CantellatedCube *result = 0 ;
+  PlatonicOctahedron *result = 0 ;
   
   if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
   {
     std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
     int res = swig::asptr(swig_obj[0], &ptr);
     if (!SWIG_IsOK(res) || !ptr) {
-      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_CantellatedCube" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
+      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_PlatonicOctahedron" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
     }
     arg1 = *ptr;
     if (SWIG_IsNewObj(res)) delete ptr;
   }
-  result = (CantellatedCube *)new CantellatedCube(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CantellatedCube, SWIG_POINTER_NEW |  0 );
+  result = (PlatonicOctahedron *)new PlatonicOctahedron(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_PlatonicOctahedron, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_CantellatedCube(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_PlatonicOctahedron(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
-  PyObject *argv[3] = {
+  PyObject *argv[2] = {
     0
   };
   
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_CantellatedCube", 0, 2, argv))) SWIG_fail;
+  if (!(argc = SWIG_Python_UnpackTuple(args, "new_PlatonicOctahedron", 0, 1, argv))) SWIG_fail;
   --argc;
   if (argc == 1) {
-    int _v = 0;
-    int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
-    _v = SWIG_CheckState(res);
-    if (_v) {
-      return _wrap_new_CantellatedCube__SWIG_1(self, argc, argv);
-    }
-  }
-  if (argc == 2) {
     int _v = 0;
     {
       int res = SWIG_AsVal_double(argv[0], NULL);
       _v = SWIG_CheckState(res);
     }
     if (_v) {
-      {
-        int res = SWIG_AsVal_double(argv[1], NULL);
-        _v = SWIG_CheckState(res);
-      }
-      if (_v) {
-        return _wrap_new_CantellatedCube__SWIG_0(self, argc, argv);
-      }
+      return _wrap_new_PlatonicOctahedron__SWIG_0(self, argc, argv);
+    }
+  }
+  if (argc == 1) {
+    int _v = 0;
+    int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_PlatonicOctahedron__SWIG_1(self, argc, argv);
     }
   }
   
 fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_CantellatedCube'.\n"
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_PlatonicOctahedron'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    CantellatedCube::CantellatedCube(double,double)\n"
-    "    CantellatedCube::CantellatedCube(std::vector< double,std::allocator< double > >)\n");
+    "    PlatonicOctahedron::PlatonicOctahedron(double)\n"
+    "    PlatonicOctahedron::PlatonicOctahedron(std::vector< double,std::allocator< double > >)\n");
   return 0;
 }
 
 
-SWIGINTERN PyObject *_wrap_CantellatedCube_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_PlatonicOctahedron_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  CantellatedCube *arg1 = (CantellatedCube *) 0 ;
+  PlatonicOctahedron *arg1 = (PlatonicOctahedron *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  CantellatedCube *result = 0 ;
+  PlatonicOctahedron *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_CantellatedCube, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_PlatonicOctahedron, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CantellatedCube_clone" "', argument " "1"" of type '" "CantellatedCube const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "PlatonicOctahedron_clone" "', argument " "1"" of type '" "PlatonicOctahedron const *""'"); 
   }
-  arg1 = reinterpret_cast< CantellatedCube * >(argp1);
-  result = (CantellatedCube *)((CantellatedCube const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CantellatedCube, 0 |  0 );
+  arg1 = reinterpret_cast< PlatonicOctahedron * >(argp1);
+  result = (PlatonicOctahedron *)((PlatonicOctahedron const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_PlatonicOctahedron, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_CantellatedCube_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_PlatonicOctahedron_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  CantellatedCube *arg1 = (CantellatedCube *) 0 ;
+  PlatonicOctahedron *arg1 = (PlatonicOctahedron *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -49804,12 +49743,12 @@ SWIGINTERN PyObject *_wrap_CantellatedCube_className(PyObject *self, PyObject *a
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_CantellatedCube, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_PlatonicOctahedron, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CantellatedCube_className" "', argument " "1"" of type '" "CantellatedCube const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "PlatonicOctahedron_className" "', argument " "1"" of type '" "PlatonicOctahedron const *""'"); 
   }
-  arg1 = reinterpret_cast< CantellatedCube * >(argp1);
-  result = ((CantellatedCube const *)arg1)->className();
+  arg1 = reinterpret_cast< PlatonicOctahedron * >(argp1);
+  result = ((PlatonicOctahedron const *)arg1)->className();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -49817,9 +49756,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_CantellatedCube_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_PlatonicOctahedron_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  CantellatedCube *arg1 = (CantellatedCube *) 0 ;
+  PlatonicOctahedron *arg1 = (PlatonicOctahedron *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -49827,12 +49766,12 @@ SWIGINTERN PyObject *_wrap_CantellatedCube_parDefs(PyObject *self, PyObject *arg
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_CantellatedCube, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_PlatonicOctahedron, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CantellatedCube_parDefs" "', argument " "1"" of type '" "CantellatedCube const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "PlatonicOctahedron_parDefs" "', argument " "1"" of type '" "PlatonicOctahedron const *""'"); 
   }
-  arg1 = reinterpret_cast< CantellatedCube * >(argp1);
-  result = ((CantellatedCube const *)arg1)->parDefs();
+  arg1 = reinterpret_cast< PlatonicOctahedron * >(argp1);
+  result = ((PlatonicOctahedron const *)arg1)->parDefs();
   resultobj = SWIG_NewPointerObj((new std::vector< ParaMeta,std::allocator< ParaMeta > >(result)), SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
@@ -49840,9 +49779,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_CantellatedCube_length(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_PlatonicOctahedron_edge(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  CantellatedCube *arg1 = (CantellatedCube *) 0 ;
+  PlatonicOctahedron *arg1 = (PlatonicOctahedron *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -49850,12 +49789,12 @@ SWIGINTERN PyObject *_wrap_CantellatedCube_length(PyObject *self, PyObject *args
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_CantellatedCube, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_PlatonicOctahedron, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CantellatedCube_length" "', argument " "1"" of type '" "CantellatedCube const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "PlatonicOctahedron_edge" "', argument " "1"" of type '" "PlatonicOctahedron const *""'"); 
   }
-  arg1 = reinterpret_cast< CantellatedCube * >(argp1);
-  result = (double)((CantellatedCube const *)arg1)->length();
+  arg1 = reinterpret_cast< PlatonicOctahedron * >(argp1);
+  result = (double)((PlatonicOctahedron const *)arg1)->edge();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -49863,9 +49802,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_CantellatedCube_removedLength(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_PlatonicOctahedron_height(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  CantellatedCube *arg1 = (CantellatedCube *) 0 ;
+  PlatonicOctahedron *arg1 = (PlatonicOctahedron *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -49873,12 +49812,12 @@ SWIGINTERN PyObject *_wrap_CantellatedCube_removedLength(PyObject *self, PyObjec
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_CantellatedCube, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_PlatonicOctahedron, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CantellatedCube_removedLength" "', argument " "1"" of type '" "CantellatedCube const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "PlatonicOctahedron_height" "', argument " "1"" of type '" "PlatonicOctahedron const *""'"); 
   }
-  arg1 = reinterpret_cast< CantellatedCube * >(argp1);
-  result = (double)((CantellatedCube const *)arg1)->removedLength();
+  arg1 = reinterpret_cast< PlatonicOctahedron * >(argp1);
+  result = (double)((PlatonicOctahedron const *)arg1)->height();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -49886,43 +49825,20 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_CantellatedCube_validate(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  CantellatedCube *arg1 = (CantellatedCube *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  std::string result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_CantellatedCube, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CantellatedCube_validate" "', argument " "1"" of type '" "CantellatedCube const *""'"); 
-  }
-  arg1 = reinterpret_cast< CantellatedCube * >(argp1);
-  result = ((CantellatedCube const *)arg1)->validate();
-  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_delete_CantellatedCube(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_PlatonicOctahedron(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  CantellatedCube *arg1 = (CantellatedCube *) 0 ;
+  PlatonicOctahedron *arg1 = (PlatonicOctahedron *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_CantellatedCube, SWIG_POINTER_DISOWN |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_PlatonicOctahedron, SWIG_POINTER_DISOWN |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CantellatedCube" "', argument " "1"" of type '" "CantellatedCube *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_PlatonicOctahedron" "', argument " "1"" of type '" "PlatonicOctahedron *""'"); 
   }
-  arg1 = reinterpret_cast< CantellatedCube * >(argp1);
+  arg1 = reinterpret_cast< PlatonicOctahedron * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -49931,151 +49847,123 @@ fail:
 }
 
 
-SWIGINTERN PyObject *CantellatedCube_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *PlatonicOctahedron_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
   if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_CantellatedCube, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_PlatonicOctahedron, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *CantellatedCube_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *PlatonicOctahedron_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   return SWIG_Python_InitShadowInstance(args);
 }
 
-SWIGINTERN PyObject *_wrap_new_Cone__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_Dodecahedron__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
-  double arg2 ;
-  double arg3 ;
   double val1 ;
   int ecode1 = 0 ;
-  double val2 ;
-  int ecode2 = 0 ;
-  double val3 ;
-  int ecode3 = 0 ;
-  Cone *result = 0 ;
+  Dodecahedron *result = 0 ;
   
-  if ((nobjs < 3) || (nobjs > 3)) SWIG_fail;
+  if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
   ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
   if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_Cone" "', argument " "1"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_Dodecahedron" "', argument " "1"" of type '" "double""'");
   } 
   arg1 = static_cast< double >(val1);
-  ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_Cone" "', argument " "2"" of type '" "double""'");
-  } 
-  arg2 = static_cast< double >(val2);
-  ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
-  if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_Cone" "', argument " "3"" of type '" "double""'");
-  } 
-  arg3 = static_cast< double >(val3);
-  result = (Cone *)new Cone(arg1,arg2,arg3);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Cone, SWIG_POINTER_NEW |  0 );
+  result = (Dodecahedron *)new Dodecahedron(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Dodecahedron, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_Cone__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_Dodecahedron__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   std::vector< double,std::allocator< double > > arg1 ;
-  Cone *result = 0 ;
+  Dodecahedron *result = 0 ;
   
   if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
   {
     std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
     int res = swig::asptr(swig_obj[0], &ptr);
     if (!SWIG_IsOK(res) || !ptr) {
-      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_Cone" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
+      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_Dodecahedron" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
     }
     arg1 = *ptr;
     if (SWIG_IsNewObj(res)) delete ptr;
   }
-  result = (Cone *)new Cone(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Cone, SWIG_POINTER_NEW |  0 );
+  result = (Dodecahedron *)new Dodecahedron(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Dodecahedron, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_Cone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_Dodecahedron(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
-  PyObject *argv[4] = {
+  PyObject *argv[2] = {
     0
   };
   
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_Cone", 0, 3, argv))) SWIG_fail;
+  if (!(argc = SWIG_Python_UnpackTuple(args, "new_Dodecahedron", 0, 1, argv))) SWIG_fail;
   --argc;
   if (argc == 1) {
-    int _v = 0;
-    int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
-    _v = SWIG_CheckState(res);
-    if (_v) {
-      return _wrap_new_Cone__SWIG_1(self, argc, argv);
-    }
-  }
-  if (argc == 3) {
     int _v = 0;
     {
       int res = SWIG_AsVal_double(argv[0], NULL);
       _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_Cone__SWIG_0(self, argc, argv);
-        }
-      }
+      return _wrap_new_Dodecahedron__SWIG_0(self, argc, argv);
+    }
+  }
+  if (argc == 1) {
+    int _v = 0;
+    int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_Dodecahedron__SWIG_1(self, argc, argv);
     }
   }
   
 fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_Cone'.\n"
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_Dodecahedron'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    Cone::Cone(double,double,double)\n"
-    "    Cone::Cone(std::vector< double,std::allocator< double > >)\n");
+    "    Dodecahedron::Dodecahedron(double)\n"
+    "    Dodecahedron::Dodecahedron(std::vector< double,std::allocator< double > >)\n");
   return 0;
 }
 
 
-SWIGINTERN PyObject *_wrap_Cone_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Dodecahedron_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Cone *arg1 = (Cone *) 0 ;
+  Dodecahedron *arg1 = (Dodecahedron *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  Cone *result = 0 ;
+  Dodecahedron *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Cone, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Dodecahedron, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Cone_clone" "', argument " "1"" of type '" "Cone const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Dodecahedron_clone" "', argument " "1"" of type '" "Dodecahedron const *""'"); 
   }
-  arg1 = reinterpret_cast< Cone * >(argp1);
-  result = (Cone *)((Cone const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Cone, 0 |  0 );
+  arg1 = reinterpret_cast< Dodecahedron * >(argp1);
+  result = (Dodecahedron *)((Dodecahedron const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Dodecahedron, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Cone_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Dodecahedron_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Cone *arg1 = (Cone *) 0 ;
+  Dodecahedron *arg1 = (Dodecahedron *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -50083,12 +49971,12 @@ SWIGINTERN PyObject *_wrap_Cone_className(PyObject *self, PyObject *args) {
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Cone, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Dodecahedron, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Cone_className" "', argument " "1"" of type '" "Cone const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Dodecahedron_className" "', argument " "1"" of type '" "Dodecahedron const *""'"); 
   }
-  arg1 = reinterpret_cast< Cone * >(argp1);
-  result = ((Cone const *)arg1)->className();
+  arg1 = reinterpret_cast< Dodecahedron * >(argp1);
+  result = ((Dodecahedron const *)arg1)->className();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -50096,9 +49984,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Cone_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Dodecahedron_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Cone *arg1 = (Cone *) 0 ;
+  Dodecahedron *arg1 = (Dodecahedron *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -50106,12 +49994,12 @@ SWIGINTERN PyObject *_wrap_Cone_parDefs(PyObject *self, PyObject *args) {
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Cone, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Dodecahedron, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Cone_parDefs" "', argument " "1"" of type '" "Cone const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Dodecahedron_parDefs" "', argument " "1"" of type '" "Dodecahedron const *""'"); 
   }
-  arg1 = reinterpret_cast< Cone * >(argp1);
-  result = ((Cone const *)arg1)->parDefs();
+  arg1 = reinterpret_cast< Dodecahedron * >(argp1);
+  result = ((Dodecahedron const *)arg1)->parDefs();
   resultobj = SWIG_NewPointerObj((new std::vector< ParaMeta,std::allocator< ParaMeta > >(result)), SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
@@ -50119,9 +50007,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Cone_radius(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Dodecahedron_edge(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Cone *arg1 = (Cone *) 0 ;
+  Dodecahedron *arg1 = (Dodecahedron *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -50129,12 +50017,12 @@ SWIGINTERN PyObject *_wrap_Cone_radius(PyObject *self, PyObject *args) {
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Cone, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Dodecahedron, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Cone_radius" "', argument " "1"" of type '" "Cone const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Dodecahedron_edge" "', argument " "1"" of type '" "Dodecahedron const *""'"); 
   }
-  arg1 = reinterpret_cast< Cone * >(argp1);
-  result = (double)((Cone const *)arg1)->radius();
+  arg1 = reinterpret_cast< Dodecahedron * >(argp1);
+  result = (double)((Dodecahedron const *)arg1)->edge();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -50142,150 +50030,225 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Cone_height(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_Dodecahedron(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Cone *arg1 = (Cone *) 0 ;
+  Dodecahedron *arg1 = (Dodecahedron *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  double result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Cone, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Dodecahedron, SWIG_POINTER_DISOWN |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Cone_height" "', argument " "1"" of type '" "Cone const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Dodecahedron" "', argument " "1"" of type '" "Dodecahedron *""'"); 
   }
-  arg1 = reinterpret_cast< Cone * >(argp1);
-  result = (double)((Cone const *)arg1)->height();
-  resultobj = SWIG_From_double(static_cast< double >(result));
+  arg1 = reinterpret_cast< Dodecahedron * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Cone_alpha(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  Cone *arg1 = (Cone *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  double result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Cone, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Cone_alpha" "', argument " "1"" of type '" "Cone const *""'"); 
-  }
-  arg1 = reinterpret_cast< Cone * >(argp1);
-  result = (double)((Cone const *)arg1)->alpha();
-  resultobj = SWIG_From_double(static_cast< double >(result));
-  return resultobj;
-fail:
-  return NULL;
+SWIGINTERN PyObject *Dodecahedron_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_Dodecahedron, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
 }
 
+SWIGINTERN PyObject *Dodecahedron_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
 
-SWIGINTERN PyObject *_wrap_Cone_radialExtension(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_Icosahedron__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
-  Cone *arg1 = (Cone *) 0 ;
+  double arg1 ;
+  double val1 ;
+  int ecode1 = 0 ;
+  Icosahedron *result = 0 ;
+  
+  if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
+  ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_Icosahedron" "', argument " "1"" of type '" "double""'");
+  } 
+  arg1 = static_cast< double >(val1);
+  result = (Icosahedron *)new Icosahedron(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Icosahedron, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_Icosahedron__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::vector< double,std::allocator< double > > arg1 ;
+  Icosahedron *result = 0 ;
+  
+  if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
+  {
+    std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
+    int res = swig::asptr(swig_obj[0], &ptr);
+    if (!SWIG_IsOK(res) || !ptr) {
+      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_Icosahedron" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
+    }
+    arg1 = *ptr;
+    if (SWIG_IsNewObj(res)) delete ptr;
+  }
+  result = (Icosahedron *)new Icosahedron(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Icosahedron, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_Icosahedron(PyObject *self, PyObject *args) {
+  Py_ssize_t argc;
+  PyObject *argv[2] = {
+    0
+  };
+  
+  if (!(argc = SWIG_Python_UnpackTuple(args, "new_Icosahedron", 0, 1, argv))) SWIG_fail;
+  --argc;
+  if (argc == 1) {
+    int _v = 0;
+    {
+      int res = SWIG_AsVal_double(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      return _wrap_new_Icosahedron__SWIG_0(self, argc, argv);
+    }
+  }
+  if (argc == 1) {
+    int _v = 0;
+    int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_Icosahedron__SWIG_1(self, argc, argv);
+    }
+  }
+  
+fail:
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_Icosahedron'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Icosahedron::Icosahedron(double)\n"
+    "    Icosahedron::Icosahedron(std::vector< double,std::allocator< double > >)\n");
+  return 0;
+}
+
+
+SWIGINTERN PyObject *_wrap_Icosahedron_clone(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  Icosahedron *arg1 = (Icosahedron *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  double result;
+  Icosahedron *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Cone, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Icosahedron, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Cone_radialExtension" "', argument " "1"" of type '" "Cone const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Icosahedron_clone" "', argument " "1"" of type '" "Icosahedron const *""'"); 
   }
-  arg1 = reinterpret_cast< Cone * >(argp1);
-  result = (double)((Cone const *)arg1)->radialExtension();
-  resultobj = SWIG_From_double(static_cast< double >(result));
+  arg1 = reinterpret_cast< Icosahedron * >(argp1);
+  result = (Icosahedron *)((Icosahedron const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Icosahedron, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Cone_formfactor(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Icosahedron_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Cone *arg1 = (Cone *) 0 ;
-  C3 arg2 ;
+  Icosahedron *arg1 = (Icosahedron *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
-  void *argp2 ;
-  int res2 = 0 ;
-  PyObject *swig_obj[2] ;
-  complex_t result;
+  PyObject *swig_obj[1] ;
+  std::string result;
   
-  if (!SWIG_Python_UnpackTuple(args, "Cone_formfactor", 2, 2, swig_obj)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Cone, 0 |  0 );
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Icosahedron, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Cone_formfactor" "', argument " "1"" of type '" "Cone const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Icosahedron_className" "', argument " "1"" of type '" "Icosahedron const *""'"); 
   }
-  arg1 = reinterpret_cast< Cone * >(argp1);
-  {
-    res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_Vec3T_std__complexT_double_t_t,  0  | 0);
-    if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Cone_formfactor" "', argument " "2"" of type '" "C3""'"); 
-    }  
-    if (!argp2) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Cone_formfactor" "', argument " "2"" of type '" "C3""'");
-    } else {
-      C3 * temp = reinterpret_cast< C3 * >(argp2);
-      arg2 = *temp;
-      if (SWIG_IsNewObj(res2)) delete temp;
-    }
+  arg1 = reinterpret_cast< Icosahedron * >(argp1);
+  result = ((Icosahedron const *)arg1)->className();
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_Icosahedron_parDefs(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  Icosahedron *arg1 = (Icosahedron *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  SwigValueWrapper< std::vector< ParaMeta,std::allocator< ParaMeta > > > result;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Icosahedron, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Icosahedron_parDefs" "', argument " "1"" of type '" "Icosahedron const *""'"); 
   }
-  result = ((Cone const *)arg1)->formfactor(arg2);
-  resultobj = SWIG_From_std_complex_Sl_double_Sg_(static_cast< std::complex<double> >(result));
+  arg1 = reinterpret_cast< Icosahedron * >(argp1);
+  result = ((Icosahedron const *)arg1)->parDefs();
+  resultobj = SWIG_NewPointerObj((new std::vector< ParaMeta,std::allocator< ParaMeta > >(result)), SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Cone_validate(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Icosahedron_edge(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Cone *arg1 = (Cone *) 0 ;
+  Icosahedron *arg1 = (Icosahedron *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  std::string result;
+  double result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Cone, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Icosahedron, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Cone_validate" "', argument " "1"" of type '" "Cone const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Icosahedron_edge" "', argument " "1"" of type '" "Icosahedron const *""'"); 
   }
-  arg1 = reinterpret_cast< Cone * >(argp1);
-  result = ((Cone const *)arg1)->validate();
-  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  arg1 = reinterpret_cast< Icosahedron * >(argp1);
+  result = (double)((Icosahedron const *)arg1)->edge();
+  resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_Cone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_Icosahedron(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Cone *arg1 = (Cone *) 0 ;
+  Icosahedron *arg1 = (Icosahedron *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Cone, SWIG_POINTER_DISOWN |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Icosahedron, SWIG_POINTER_DISOWN |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Cone" "', argument " "1"" of type '" "Cone *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Icosahedron" "', argument " "1"" of type '" "Icosahedron *""'"); 
   }
-  arg1 = reinterpret_cast< Cone * >(argp1);
+  arg1 = reinterpret_cast< Icosahedron * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -50294,94 +50257,102 @@ fail:
 }
 
 
-SWIGINTERN PyObject *Cone_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *Icosahedron_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
   if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_Cone, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_Icosahedron, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *Cone_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *Icosahedron_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   return SWIG_Python_InitShadowInstance(args);
 }
 
-SWIGINTERN PyObject *_wrap_new_CosineRippleBox__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_Pyramid2__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
   double arg2 ;
   double arg3 ;
+  double arg4 ;
   double val1 ;
   int ecode1 = 0 ;
   double val2 ;
   int ecode2 = 0 ;
   double val3 ;
   int ecode3 = 0 ;
-  CosineRippleBox *result = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  Pyramid2 *result = 0 ;
   
-  if ((nobjs < 3) || (nobjs > 3)) SWIG_fail;
+  if ((nobjs < 4) || (nobjs > 4)) SWIG_fail;
   ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
   if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CosineRippleBox" "', argument " "1"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_Pyramid2" "', argument " "1"" of type '" "double""'");
   } 
   arg1 = static_cast< double >(val1);
   ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
   if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CosineRippleBox" "', argument " "2"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_Pyramid2" "', argument " "2"" of type '" "double""'");
   } 
   arg2 = static_cast< double >(val2);
   ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
   if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_CosineRippleBox" "', argument " "3"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_Pyramid2" "', argument " "3"" of type '" "double""'");
   } 
   arg3 = static_cast< double >(val3);
-  result = (CosineRippleBox *)new CosineRippleBox(arg1,arg2,arg3);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CosineRippleBox, SWIG_POINTER_NEW |  0 );
+  ecode4 = SWIG_AsVal_double(swig_obj[3], &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "new_Pyramid2" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  result = (Pyramid2 *)new Pyramid2(arg1,arg2,arg3,arg4);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Pyramid2, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_CosineRippleBox__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_Pyramid2__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   std::vector< double,std::allocator< double > > arg1 ;
-  CosineRippleBox *result = 0 ;
+  Pyramid2 *result = 0 ;
   
   if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
   {
     std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
     int res = swig::asptr(swig_obj[0], &ptr);
     if (!SWIG_IsOK(res) || !ptr) {
-      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_CosineRippleBox" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
+      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_Pyramid2" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
     }
     arg1 = *ptr;
     if (SWIG_IsNewObj(res)) delete ptr;
   }
-  result = (CosineRippleBox *)new CosineRippleBox(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CosineRippleBox, SWIG_POINTER_NEW |  0 );
+  result = (Pyramid2 *)new Pyramid2(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Pyramid2, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_CosineRippleBox(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_Pyramid2(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
-  PyObject *argv[4] = {
+  PyObject *argv[5] = {
     0
   };
   
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_CosineRippleBox", 0, 3, argv))) SWIG_fail;
+  if (!(argc = SWIG_Python_UnpackTuple(args, "new_Pyramid2", 0, 4, argv))) SWIG_fail;
   --argc;
   if (argc == 1) {
     int _v = 0;
     int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
     _v = SWIG_CheckState(res);
     if (_v) {
-      return _wrap_new_CosineRippleBox__SWIG_1(self, argc, argv);
+      return _wrap_new_Pyramid2__SWIG_1(self, argc, argv);
     }
   }
-  if (argc == 3) {
+  if (argc == 4) {
     int _v = 0;
     {
       int res = SWIG_AsVal_double(argv[0], NULL);
@@ -50398,47 +50369,53 @@ SWIGINTERN PyObject *_wrap_new_CosineRippleBox(PyObject *self, PyObject *args) {
           _v = SWIG_CheckState(res);
         }
         if (_v) {
-          return _wrap_new_CosineRippleBox__SWIG_0(self, argc, argv);
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_new_Pyramid2__SWIG_0(self, argc, argv);
+          }
         }
       }
     }
   }
   
 fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_CosineRippleBox'.\n"
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_Pyramid2'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    CosineRippleBox::CosineRippleBox(double,double,double)\n"
-    "    CosineRippleBox::CosineRippleBox(std::vector< double,std::allocator< double > >)\n");
+    "    Pyramid2::Pyramid2(double,double,double,double)\n"
+    "    Pyramid2::Pyramid2(std::vector< double,std::allocator< double > >)\n");
   return 0;
 }
 
 
-SWIGINTERN PyObject *_wrap_CosineRippleBox_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Pyramid2_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  CosineRippleBox *arg1 = (CosineRippleBox *) 0 ;
+  Pyramid2 *arg1 = (Pyramid2 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  CosineRippleBox *result = 0 ;
+  Pyramid2 *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_CosineRippleBox, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid2, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CosineRippleBox_clone" "', argument " "1"" of type '" "CosineRippleBox const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid2_clone" "', argument " "1"" of type '" "Pyramid2 const *""'"); 
   }
-  arg1 = reinterpret_cast< CosineRippleBox * >(argp1);
-  result = (CosineRippleBox *)((CosineRippleBox const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CosineRippleBox, 0 |  0 );
+  arg1 = reinterpret_cast< Pyramid2 * >(argp1);
+  result = (Pyramid2 *)((Pyramid2 const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Pyramid2, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_CosineRippleBox_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Pyramid2_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  CosineRippleBox *arg1 = (CosineRippleBox *) 0 ;
+  Pyramid2 *arg1 = (Pyramid2 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -50446,12 +50423,12 @@ SWIGINTERN PyObject *_wrap_CosineRippleBox_className(PyObject *self, PyObject *a
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_CosineRippleBox, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid2, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CosineRippleBox_className" "', argument " "1"" of type '" "CosineRippleBox const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid2_className" "', argument " "1"" of type '" "Pyramid2 const *""'"); 
   }
-  arg1 = reinterpret_cast< CosineRippleBox * >(argp1);
-  result = ((CosineRippleBox const *)arg1)->className();
+  arg1 = reinterpret_cast< Pyramid2 * >(argp1);
+  result = ((Pyramid2 const *)arg1)->className();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -50459,9 +50436,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_CosineRippleBox_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Pyramid2_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  CosineRippleBox *arg1 = (CosineRippleBox *) 0 ;
+  Pyramid2 *arg1 = (Pyramid2 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -50469,12 +50446,12 @@ SWIGINTERN PyObject *_wrap_CosineRippleBox_parDefs(PyObject *self, PyObject *arg
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_CosineRippleBox, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid2, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CosineRippleBox_parDefs" "', argument " "1"" of type '" "CosineRippleBox const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid2_parDefs" "', argument " "1"" of type '" "Pyramid2 const *""'"); 
   }
-  arg1 = reinterpret_cast< CosineRippleBox * >(argp1);
-  result = ((CosineRippleBox const *)arg1)->parDefs();
+  arg1 = reinterpret_cast< Pyramid2 * >(argp1);
+  result = ((Pyramid2 const *)arg1)->parDefs();
   resultobj = SWIG_NewPointerObj((new std::vector< ParaMeta,std::allocator< ParaMeta > >(result)), SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
@@ -50482,20 +50459,112 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_CosineRippleBox(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Pyramid2_length(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  CosineRippleBox *arg1 = (CosineRippleBox *) 0 ;
+  Pyramid2 *arg1 = (Pyramid2 *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  double result;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid2, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid2_length" "', argument " "1"" of type '" "Pyramid2 const *""'"); 
+  }
+  arg1 = reinterpret_cast< Pyramid2 * >(argp1);
+  result = (double)((Pyramid2 const *)arg1)->length();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_Pyramid2_width(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  Pyramid2 *arg1 = (Pyramid2 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
+  double result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_CosineRippleBox, SWIG_POINTER_DISOWN |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid2, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CosineRippleBox" "', argument " "1"" of type '" "CosineRippleBox *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid2_width" "', argument " "1"" of type '" "Pyramid2 const *""'"); 
   }
-  arg1 = reinterpret_cast< CosineRippleBox * >(argp1);
+  arg1 = reinterpret_cast< Pyramid2 * >(argp1);
+  result = (double)((Pyramid2 const *)arg1)->width();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_Pyramid2_height(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  Pyramid2 *arg1 = (Pyramid2 *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  double result;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid2, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid2_height" "', argument " "1"" of type '" "Pyramid2 const *""'"); 
+  }
+  arg1 = reinterpret_cast< Pyramid2 * >(argp1);
+  result = (double)((Pyramid2 const *)arg1)->height();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_Pyramid2_alpha(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  Pyramid2 *arg1 = (Pyramid2 *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  double result;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid2, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid2_alpha" "', argument " "1"" of type '" "Pyramid2 const *""'"); 
+  }
+  arg1 = reinterpret_cast< Pyramid2 * >(argp1);
+  result = (double)((Pyramid2 const *)arg1)->alpha();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_Pyramid2(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  Pyramid2 *arg1 = (Pyramid2 *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid2, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Pyramid2" "', argument " "1"" of type '" "Pyramid2 *""'"); 
+  }
+  arg1 = reinterpret_cast< Pyramid2 * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -50504,18 +50573,18 @@ fail:
 }
 
 
-SWIGINTERN PyObject *CosineRippleBox_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *Pyramid2_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
   if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_CosineRippleBox, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_Pyramid2, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *CosineRippleBox_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *Pyramid2_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   return SWIG_Python_InitShadowInstance(args);
 }
 
-SWIGINTERN PyObject *_wrap_new_CosineRippleGauss__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_Pyramid3__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
   double arg2 ;
@@ -50526,69 +50595,69 @@ SWIGINTERN PyObject *_wrap_new_CosineRippleGauss__SWIG_0(PyObject *self, Py_ssiz
   int ecode2 = 0 ;
   double val3 ;
   int ecode3 = 0 ;
-  CosineRippleGauss *result = 0 ;
+  Pyramid3 *result = 0 ;
   
   if ((nobjs < 3) || (nobjs > 3)) SWIG_fail;
   ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
   if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CosineRippleGauss" "', argument " "1"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_Pyramid3" "', argument " "1"" of type '" "double""'");
   } 
   arg1 = static_cast< double >(val1);
   ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
   if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CosineRippleGauss" "', argument " "2"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_Pyramid3" "', argument " "2"" of type '" "double""'");
   } 
   arg2 = static_cast< double >(val2);
   ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
   if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_CosineRippleGauss" "', argument " "3"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_Pyramid3" "', argument " "3"" of type '" "double""'");
   } 
   arg3 = static_cast< double >(val3);
-  result = (CosineRippleGauss *)new CosineRippleGauss(arg1,arg2,arg3);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CosineRippleGauss, SWIG_POINTER_NEW |  0 );
+  result = (Pyramid3 *)new Pyramid3(arg1,arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Pyramid3, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_CosineRippleGauss__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_Pyramid3__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   std::vector< double,std::allocator< double > > arg1 ;
-  CosineRippleGauss *result = 0 ;
+  Pyramid3 *result = 0 ;
   
   if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
   {
     std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
     int res = swig::asptr(swig_obj[0], &ptr);
     if (!SWIG_IsOK(res) || !ptr) {
-      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_CosineRippleGauss" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
+      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_Pyramid3" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
     }
     arg1 = *ptr;
     if (SWIG_IsNewObj(res)) delete ptr;
   }
-  result = (CosineRippleGauss *)new CosineRippleGauss(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CosineRippleGauss, SWIG_POINTER_NEW |  0 );
+  result = (Pyramid3 *)new Pyramid3(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Pyramid3, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_CosineRippleGauss(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_Pyramid3(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
   PyObject *argv[4] = {
     0
   };
   
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_CosineRippleGauss", 0, 3, argv))) SWIG_fail;
+  if (!(argc = SWIG_Python_UnpackTuple(args, "new_Pyramid3", 0, 3, argv))) SWIG_fail;
   --argc;
   if (argc == 1) {
     int _v = 0;
     int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
     _v = SWIG_CheckState(res);
     if (_v) {
-      return _wrap_new_CosineRippleGauss__SWIG_1(self, argc, argv);
+      return _wrap_new_Pyramid3__SWIG_1(self, argc, argv);
     }
   }
   if (argc == 3) {
@@ -50608,47 +50677,47 @@ SWIGINTERN PyObject *_wrap_new_CosineRippleGauss(PyObject *self, PyObject *args)
           _v = SWIG_CheckState(res);
         }
         if (_v) {
-          return _wrap_new_CosineRippleGauss__SWIG_0(self, argc, argv);
+          return _wrap_new_Pyramid3__SWIG_0(self, argc, argv);
         }
       }
     }
   }
   
 fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_CosineRippleGauss'.\n"
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_Pyramid3'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    CosineRippleGauss::CosineRippleGauss(double,double,double)\n"
-    "    CosineRippleGauss::CosineRippleGauss(std::vector< double,std::allocator< double > >)\n");
+    "    Pyramid3::Pyramid3(double,double,double)\n"
+    "    Pyramid3::Pyramid3(std::vector< double,std::allocator< double > >)\n");
   return 0;
 }
 
 
-SWIGINTERN PyObject *_wrap_CosineRippleGauss_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Pyramid3_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  CosineRippleGauss *arg1 = (CosineRippleGauss *) 0 ;
+  Pyramid3 *arg1 = (Pyramid3 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  CosineRippleGauss *result = 0 ;
+  Pyramid3 *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_CosineRippleGauss, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid3, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CosineRippleGauss_clone" "', argument " "1"" of type '" "CosineRippleGauss const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid3_clone" "', argument " "1"" of type '" "Pyramid3 const *""'"); 
   }
-  arg1 = reinterpret_cast< CosineRippleGauss * >(argp1);
-  result = (CosineRippleGauss *)((CosineRippleGauss const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CosineRippleGauss, 0 |  0 );
+  arg1 = reinterpret_cast< Pyramid3 * >(argp1);
+  result = (Pyramid3 *)((Pyramid3 const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Pyramid3, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_CosineRippleGauss_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Pyramid3_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  CosineRippleGauss *arg1 = (CosineRippleGauss *) 0 ;
+  Pyramid3 *arg1 = (Pyramid3 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -50656,12 +50725,12 @@ SWIGINTERN PyObject *_wrap_CosineRippleGauss_className(PyObject *self, PyObject
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_CosineRippleGauss, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid3, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CosineRippleGauss_className" "', argument " "1"" of type '" "CosineRippleGauss const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid3_className" "', argument " "1"" of type '" "Pyramid3 const *""'"); 
   }
-  arg1 = reinterpret_cast< CosineRippleGauss * >(argp1);
-  result = ((CosineRippleGauss const *)arg1)->className();
+  arg1 = reinterpret_cast< Pyramid3 * >(argp1);
+  result = ((Pyramid3 const *)arg1)->className();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -50669,9 +50738,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_CosineRippleGauss_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Pyramid3_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  CosineRippleGauss *arg1 = (CosineRippleGauss *) 0 ;
+  Pyramid3 *arg1 = (Pyramid3 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -50679,12 +50748,12 @@ SWIGINTERN PyObject *_wrap_CosineRippleGauss_parDefs(PyObject *self, PyObject *a
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_CosineRippleGauss, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid3, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CosineRippleGauss_parDefs" "', argument " "1"" of type '" "CosineRippleGauss const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid3_parDefs" "', argument " "1"" of type '" "Pyramid3 const *""'"); 
   }
-  arg1 = reinterpret_cast< CosineRippleGauss * >(argp1);
-  result = ((CosineRippleGauss const *)arg1)->parDefs();
+  arg1 = reinterpret_cast< Pyramid3 * >(argp1);
+  result = ((Pyramid3 const *)arg1)->parDefs();
   resultobj = SWIG_NewPointerObj((new std::vector< ParaMeta,std::allocator< ParaMeta > >(result)), SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
@@ -50692,40 +50761,109 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_CosineRippleGauss(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Pyramid3_baseEdge(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  CosineRippleGauss *arg1 = (CosineRippleGauss *) 0 ;
+  Pyramid3 *arg1 = (Pyramid3 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
+  double result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_CosineRippleGauss, SWIG_POINTER_DISOWN |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid3, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CosineRippleGauss" "', argument " "1"" of type '" "CosineRippleGauss *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid3_baseEdge" "', argument " "1"" of type '" "Pyramid3 const *""'"); 
   }
-  arg1 = reinterpret_cast< CosineRippleGauss * >(argp1);
-  delete arg1;
-  resultobj = SWIG_Py_Void();
+  arg1 = reinterpret_cast< Pyramid3 * >(argp1);
+  result = (double)((Pyramid3 const *)arg1)->baseEdge();
+  resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *CosineRippleGauss_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *obj;
-  if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_CosineRippleGauss, SWIG_NewClientData(obj));
-  return SWIG_Py_Void();
+SWIGINTERN PyObject *_wrap_Pyramid3_height(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  Pyramid3 *arg1 = (Pyramid3 *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  double result;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid3, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid3_height" "', argument " "1"" of type '" "Pyramid3 const *""'"); 
+  }
+  arg1 = reinterpret_cast< Pyramid3 * >(argp1);
+  result = (double)((Pyramid3 const *)arg1)->height();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
 }
 
-SWIGINTERN PyObject *CosineRippleGauss_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  return SWIG_Python_InitShadowInstance(args);
-}
 
-SWIGINTERN PyObject *_wrap_new_CosineRippleLorentz__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_Pyramid3_alpha(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  Pyramid3 *arg1 = (Pyramid3 *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  double result;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid3, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid3_alpha" "', argument " "1"" of type '" "Pyramid3 const *""'"); 
+  }
+  arg1 = reinterpret_cast< Pyramid3 * >(argp1);
+  result = (double)((Pyramid3 const *)arg1)->alpha();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_Pyramid3(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  Pyramid3 *arg1 = (Pyramid3 *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid3, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Pyramid3" "', argument " "1"" of type '" "Pyramid3 *""'"); 
+  }
+  arg1 = reinterpret_cast< Pyramid3 * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *Pyramid3_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_Pyramid3, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *Pyramid3_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+
+SWIGINTERN PyObject *_wrap_new_Pyramid4__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
   double arg2 ;
@@ -50736,69 +50874,69 @@ SWIGINTERN PyObject *_wrap_new_CosineRippleLorentz__SWIG_0(PyObject *self, Py_ss
   int ecode2 = 0 ;
   double val3 ;
   int ecode3 = 0 ;
-  CosineRippleLorentz *result = 0 ;
+  Pyramid4 *result = 0 ;
   
   if ((nobjs < 3) || (nobjs > 3)) SWIG_fail;
   ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
   if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CosineRippleLorentz" "', argument " "1"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_Pyramid4" "', argument " "1"" of type '" "double""'");
   } 
   arg1 = static_cast< double >(val1);
   ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
   if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CosineRippleLorentz" "', argument " "2"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_Pyramid4" "', argument " "2"" of type '" "double""'");
   } 
   arg2 = static_cast< double >(val2);
   ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
   if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_CosineRippleLorentz" "', argument " "3"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_Pyramid4" "', argument " "3"" of type '" "double""'");
   } 
   arg3 = static_cast< double >(val3);
-  result = (CosineRippleLorentz *)new CosineRippleLorentz(arg1,arg2,arg3);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CosineRippleLorentz, SWIG_POINTER_NEW |  0 );
+  result = (Pyramid4 *)new Pyramid4(arg1,arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Pyramid4, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_CosineRippleLorentz__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_Pyramid4__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   std::vector< double,std::allocator< double > > arg1 ;
-  CosineRippleLorentz *result = 0 ;
+  Pyramid4 *result = 0 ;
   
   if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
   {
     std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
     int res = swig::asptr(swig_obj[0], &ptr);
     if (!SWIG_IsOK(res) || !ptr) {
-      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_CosineRippleLorentz" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
+      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_Pyramid4" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
     }
     arg1 = *ptr;
     if (SWIG_IsNewObj(res)) delete ptr;
   }
-  result = (CosineRippleLorentz *)new CosineRippleLorentz(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CosineRippleLorentz, SWIG_POINTER_NEW |  0 );
+  result = (Pyramid4 *)new Pyramid4(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Pyramid4, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_CosineRippleLorentz(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_Pyramid4(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
   PyObject *argv[4] = {
     0
   };
   
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_CosineRippleLorentz", 0, 3, argv))) SWIG_fail;
+  if (!(argc = SWIG_Python_UnpackTuple(args, "new_Pyramid4", 0, 3, argv))) SWIG_fail;
   --argc;
   if (argc == 1) {
     int _v = 0;
     int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
     _v = SWIG_CheckState(res);
     if (_v) {
-      return _wrap_new_CosineRippleLorentz__SWIG_1(self, argc, argv);
+      return _wrap_new_Pyramid4__SWIG_1(self, argc, argv);
     }
   }
   if (argc == 3) {
@@ -50818,47 +50956,47 @@ SWIGINTERN PyObject *_wrap_new_CosineRippleLorentz(PyObject *self, PyObject *arg
           _v = SWIG_CheckState(res);
         }
         if (_v) {
-          return _wrap_new_CosineRippleLorentz__SWIG_0(self, argc, argv);
+          return _wrap_new_Pyramid4__SWIG_0(self, argc, argv);
         }
       }
     }
   }
   
 fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_CosineRippleLorentz'.\n"
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_Pyramid4'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    CosineRippleLorentz::CosineRippleLorentz(double,double,double)\n"
-    "    CosineRippleLorentz::CosineRippleLorentz(std::vector< double,std::allocator< double > >)\n");
+    "    Pyramid4::Pyramid4(double,double,double)\n"
+    "    Pyramid4::Pyramid4(std::vector< double,std::allocator< double > >)\n");
   return 0;
 }
 
 
-SWIGINTERN PyObject *_wrap_CosineRippleLorentz_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Pyramid4_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  CosineRippleLorentz *arg1 = (CosineRippleLorentz *) 0 ;
+  Pyramid4 *arg1 = (Pyramid4 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  CosineRippleLorentz *result = 0 ;
+  Pyramid4 *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_CosineRippleLorentz, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid4, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CosineRippleLorentz_clone" "', argument " "1"" of type '" "CosineRippleLorentz const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid4_clone" "', argument " "1"" of type '" "Pyramid4 const *""'"); 
   }
-  arg1 = reinterpret_cast< CosineRippleLorentz * >(argp1);
-  result = (CosineRippleLorentz *)((CosineRippleLorentz const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CosineRippleLorentz, 0 |  0 );
+  arg1 = reinterpret_cast< Pyramid4 * >(argp1);
+  result = (Pyramid4 *)((Pyramid4 const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Pyramid4, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_CosineRippleLorentz_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Pyramid4_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  CosineRippleLorentz *arg1 = (CosineRippleLorentz *) 0 ;
+  Pyramid4 *arg1 = (Pyramid4 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -50866,12 +51004,12 @@ SWIGINTERN PyObject *_wrap_CosineRippleLorentz_className(PyObject *self, PyObjec
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_CosineRippleLorentz, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid4, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CosineRippleLorentz_className" "', argument " "1"" of type '" "CosineRippleLorentz const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid4_className" "', argument " "1"" of type '" "Pyramid4 const *""'"); 
   }
-  arg1 = reinterpret_cast< CosineRippleLorentz * >(argp1);
-  result = ((CosineRippleLorentz const *)arg1)->className();
+  arg1 = reinterpret_cast< Pyramid4 * >(argp1);
+  result = ((Pyramid4 const *)arg1)->className();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -50879,9 +51017,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_CosineRippleLorentz_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Pyramid4_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  CosineRippleLorentz *arg1 = (CosineRippleLorentz *) 0 ;
+  Pyramid4 *arg1 = (Pyramid4 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -50889,12 +51027,12 @@ SWIGINTERN PyObject *_wrap_CosineRippleLorentz_parDefs(PyObject *self, PyObject
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_CosineRippleLorentz, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid4, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CosineRippleLorentz_parDefs" "', argument " "1"" of type '" "CosineRippleLorentz const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid4_parDefs" "', argument " "1"" of type '" "Pyramid4 const *""'"); 
   }
-  arg1 = reinterpret_cast< CosineRippleLorentz * >(argp1);
-  result = ((CosineRippleLorentz const *)arg1)->parDefs();
+  arg1 = reinterpret_cast< Pyramid4 * >(argp1);
+  result = ((Pyramid4 const *)arg1)->parDefs();
   resultobj = SWIG_NewPointerObj((new std::vector< ParaMeta,std::allocator< ParaMeta > >(result)), SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
@@ -50902,20 +51040,112 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_CosineRippleLorentz(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Pyramid4_height(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  CosineRippleLorentz *arg1 = (CosineRippleLorentz *) 0 ;
+  Pyramid4 *arg1 = (Pyramid4 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
+  double result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_CosineRippleLorentz, SWIG_POINTER_DISOWN |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid4, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CosineRippleLorentz" "', argument " "1"" of type '" "CosineRippleLorentz *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid4_height" "', argument " "1"" of type '" "Pyramid4 const *""'"); 
   }
-  arg1 = reinterpret_cast< CosineRippleLorentz * >(argp1);
+  arg1 = reinterpret_cast< Pyramid4 * >(argp1);
+  result = (double)((Pyramid4 const *)arg1)->height();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_Pyramid4_baseEdge(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  Pyramid4 *arg1 = (Pyramid4 *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  double result;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid4, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid4_baseEdge" "', argument " "1"" of type '" "Pyramid4 const *""'"); 
+  }
+  arg1 = reinterpret_cast< Pyramid4 * >(argp1);
+  result = (double)((Pyramid4 const *)arg1)->baseEdge();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_Pyramid4_alpha(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  Pyramid4 *arg1 = (Pyramid4 *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  double result;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid4, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid4_alpha" "', argument " "1"" of type '" "Pyramid4 const *""'"); 
+  }
+  arg1 = reinterpret_cast< Pyramid4 * >(argp1);
+  result = (double)((Pyramid4 const *)arg1)->alpha();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_Pyramid4_validate(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  Pyramid4 *arg1 = (Pyramid4 *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  std::string result;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid4, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid4_validate" "', argument " "1"" of type '" "Pyramid4 const *""'"); 
+  }
+  arg1 = reinterpret_cast< Pyramid4 * >(argp1);
+  result = ((Pyramid4 const *)arg1)->validate();
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_Pyramid4(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  Pyramid4 *arg1 = (Pyramid4 *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid4, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Pyramid4" "', argument " "1"" of type '" "Pyramid4 *""'"); 
+  }
+  arg1 = reinterpret_cast< Pyramid4 * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -50924,86 +51154,94 @@ fail:
 }
 
 
-SWIGINTERN PyObject *CosineRippleLorentz_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *Pyramid4_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
   if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_CosineRippleLorentz, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_Pyramid4, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *CosineRippleLorentz_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *Pyramid4_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   return SWIG_Python_InitShadowInstance(args);
 }
 
-SWIGINTERN PyObject *_wrap_new_Cylinder__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_Pyramid6__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
   double arg2 ;
+  double arg3 ;
   double val1 ;
   int ecode1 = 0 ;
   double val2 ;
   int ecode2 = 0 ;
-  Cylinder *result = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  Pyramid6 *result = 0 ;
   
-  if ((nobjs < 2) || (nobjs > 2)) SWIG_fail;
+  if ((nobjs < 3) || (nobjs > 3)) SWIG_fail;
   ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
   if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_Cylinder" "', argument " "1"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_Pyramid6" "', argument " "1"" of type '" "double""'");
   } 
   arg1 = static_cast< double >(val1);
   ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
   if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_Cylinder" "', argument " "2"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_Pyramid6" "', argument " "2"" of type '" "double""'");
   } 
   arg2 = static_cast< double >(val2);
-  result = (Cylinder *)new Cylinder(arg1,arg2);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Cylinder, SWIG_POINTER_NEW |  0 );
+  ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_Pyramid6" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  result = (Pyramid6 *)new Pyramid6(arg1,arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Pyramid6, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_Cylinder__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_Pyramid6__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   std::vector< double,std::allocator< double > > arg1 ;
-  Cylinder *result = 0 ;
+  Pyramid6 *result = 0 ;
   
   if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
   {
     std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
     int res = swig::asptr(swig_obj[0], &ptr);
     if (!SWIG_IsOK(res) || !ptr) {
-      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_Cylinder" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
+      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_Pyramid6" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
     }
     arg1 = *ptr;
     if (SWIG_IsNewObj(res)) delete ptr;
   }
-  result = (Cylinder *)new Cylinder(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Cylinder, SWIG_POINTER_NEW |  0 );
+  result = (Pyramid6 *)new Pyramid6(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Pyramid6, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_Cylinder(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_Pyramid6(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
-  PyObject *argv[3] = {
+  PyObject *argv[4] = {
     0
   };
   
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_Cylinder", 0, 2, argv))) SWIG_fail;
+  if (!(argc = SWIG_Python_UnpackTuple(args, "new_Pyramid6", 0, 3, argv))) SWIG_fail;
   --argc;
   if (argc == 1) {
     int _v = 0;
     int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
     _v = SWIG_CheckState(res);
     if (_v) {
-      return _wrap_new_Cylinder__SWIG_1(self, argc, argv);
+      return _wrap_new_Pyramid6__SWIG_1(self, argc, argv);
     }
   }
-  if (argc == 2) {
+  if (argc == 3) {
     int _v = 0;
     {
       int res = SWIG_AsVal_double(argv[0], NULL);
@@ -51015,46 +51253,52 @@ SWIGINTERN PyObject *_wrap_new_Cylinder(PyObject *self, PyObject *args) {
         _v = SWIG_CheckState(res);
       }
       if (_v) {
-        return _wrap_new_Cylinder__SWIG_0(self, argc, argv);
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_new_Pyramid6__SWIG_0(self, argc, argv);
+        }
       }
     }
   }
   
 fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_Cylinder'.\n"
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_Pyramid6'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    Cylinder::Cylinder(double,double)\n"
-    "    Cylinder::Cylinder(std::vector< double,std::allocator< double > >)\n");
+    "    Pyramid6::Pyramid6(double,double,double)\n"
+    "    Pyramid6::Pyramid6(std::vector< double,std::allocator< double > >)\n");
   return 0;
 }
 
 
-SWIGINTERN PyObject *_wrap_Cylinder_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Pyramid6_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Cylinder *arg1 = (Cylinder *) 0 ;
+  Pyramid6 *arg1 = (Pyramid6 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  Cylinder *result = 0 ;
+  Pyramid6 *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Cylinder, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid6, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Cylinder_clone" "', argument " "1"" of type '" "Cylinder const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid6_clone" "', argument " "1"" of type '" "Pyramid6 const *""'"); 
   }
-  arg1 = reinterpret_cast< Cylinder * >(argp1);
-  result = (Cylinder *)((Cylinder const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Cylinder, 0 |  0 );
+  arg1 = reinterpret_cast< Pyramid6 * >(argp1);
+  result = (Pyramid6 *)((Pyramid6 const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Pyramid6, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Cylinder_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Pyramid6_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Cylinder *arg1 = (Cylinder *) 0 ;
+  Pyramid6 *arg1 = (Pyramid6 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -51062,12 +51306,12 @@ SWIGINTERN PyObject *_wrap_Cylinder_className(PyObject *self, PyObject *args) {
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Cylinder, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid6, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Cylinder_className" "', argument " "1"" of type '" "Cylinder const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid6_className" "', argument " "1"" of type '" "Pyramid6 const *""'"); 
   }
-  arg1 = reinterpret_cast< Cylinder * >(argp1);
-  result = ((Cylinder const *)arg1)->className();
+  arg1 = reinterpret_cast< Pyramid6 * >(argp1);
+  result = ((Pyramid6 const *)arg1)->className();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -51075,9 +51319,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Cylinder_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Pyramid6_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Cylinder *arg1 = (Cylinder *) 0 ;
+  Pyramid6 *arg1 = (Pyramid6 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -51085,12 +51329,12 @@ SWIGINTERN PyObject *_wrap_Cylinder_parDefs(PyObject *self, PyObject *args) {
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Cylinder, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid6, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Cylinder_parDefs" "', argument " "1"" of type '" "Cylinder const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid6_parDefs" "', argument " "1"" of type '" "Pyramid6 const *""'"); 
   }
-  arg1 = reinterpret_cast< Cylinder * >(argp1);
-  result = ((Cylinder const *)arg1)->parDefs();
+  arg1 = reinterpret_cast< Pyramid6 * >(argp1);
+  result = ((Pyramid6 const *)arg1)->parDefs();
   resultobj = SWIG_NewPointerObj((new std::vector< ParaMeta,std::allocator< ParaMeta > >(result)), SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
@@ -51098,9 +51342,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Cylinder_height(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Pyramid6_baseEdge(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Cylinder *arg1 = (Cylinder *) 0 ;
+  Pyramid6 *arg1 = (Pyramid6 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -51108,12 +51352,12 @@ SWIGINTERN PyObject *_wrap_Cylinder_height(PyObject *self, PyObject *args) {
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Cylinder, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid6, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Cylinder_height" "', argument " "1"" of type '" "Cylinder const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid6_baseEdge" "', argument " "1"" of type '" "Pyramid6 const *""'"); 
   }
-  arg1 = reinterpret_cast< Cylinder * >(argp1);
-  result = (double)((Cylinder const *)arg1)->height();
+  arg1 = reinterpret_cast< Pyramid6 * >(argp1);
+  result = (double)((Pyramid6 const *)arg1)->baseEdge();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -51121,9 +51365,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Cylinder_radius(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Pyramid6_height(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Cylinder *arg1 = (Cylinder *) 0 ;
+  Pyramid6 *arg1 = (Pyramid6 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -51131,12 +51375,12 @@ SWIGINTERN PyObject *_wrap_Cylinder_radius(PyObject *self, PyObject *args) {
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Cylinder, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid6, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Cylinder_radius" "', argument " "1"" of type '" "Cylinder const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid6_height" "', argument " "1"" of type '" "Pyramid6 const *""'"); 
   }
-  arg1 = reinterpret_cast< Cylinder * >(argp1);
-  result = (double)((Cylinder const *)arg1)->radius();
+  arg1 = reinterpret_cast< Pyramid6 * >(argp1);
+  result = (double)((Pyramid6 const *)arg1)->height();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -51144,9 +51388,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Cylinder_radialExtension(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Pyramid6_alpha(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Cylinder *arg1 = (Cylinder *) 0 ;
+  Pyramid6 *arg1 = (Pyramid6 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -51154,12 +51398,12 @@ SWIGINTERN PyObject *_wrap_Cylinder_radialExtension(PyObject *self, PyObject *ar
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Cylinder, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid6, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Cylinder_radialExtension" "', argument " "1"" of type '" "Cylinder const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid6_alpha" "', argument " "1"" of type '" "Pyramid6 const *""'"); 
   }
-  arg1 = reinterpret_cast< Cylinder * >(argp1);
-  result = (double)((Cylinder const *)arg1)->radialExtension();
+  arg1 = reinterpret_cast< Pyramid6 * >(argp1);
+  result = (double)((Pyramid6 const *)arg1)->alpha();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -51167,47 +51411,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Cylinder_formfactor(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  Cylinder *arg1 = (Cylinder *) 0 ;
-  C3 arg2 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  void *argp2 ;
-  int res2 = 0 ;
-  PyObject *swig_obj[2] ;
-  complex_t result;
-  
-  if (!SWIG_Python_UnpackTuple(args, "Cylinder_formfactor", 2, 2, swig_obj)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Cylinder, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Cylinder_formfactor" "', argument " "1"" of type '" "Cylinder const *""'"); 
-  }
-  arg1 = reinterpret_cast< Cylinder * >(argp1);
-  {
-    res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_Vec3T_std__complexT_double_t_t,  0  | 0);
-    if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Cylinder_formfactor" "', argument " "2"" of type '" "C3""'"); 
-    }  
-    if (!argp2) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Cylinder_formfactor" "', argument " "2"" of type '" "C3""'");
-    } else {
-      C3 * temp = reinterpret_cast< C3 * >(argp2);
-      arg2 = *temp;
-      if (SWIG_IsNewObj(res2)) delete temp;
-    }
-  }
-  result = ((Cylinder const *)arg1)->formfactor(arg2);
-  resultobj = SWIG_From_std_complex_Sl_double_Sg_(static_cast< std::complex<double> >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_Cylinder_validate(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Pyramid6_validate(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Cylinder *arg1 = (Cylinder *) 0 ;
+  Pyramid6 *arg1 = (Pyramid6 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -51215,12 +51421,12 @@ SWIGINTERN PyObject *_wrap_Cylinder_validate(PyObject *self, PyObject *args) {
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Cylinder, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid6, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Cylinder_validate" "', argument " "1"" of type '" "Cylinder const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid6_validate" "', argument " "1"" of type '" "Pyramid6 const *""'"); 
   }
-  arg1 = reinterpret_cast< Cylinder * >(argp1);
-  result = ((Cylinder const *)arg1)->validate();
+  arg1 = reinterpret_cast< Pyramid6 * >(argp1);
+  result = ((Pyramid6 const *)arg1)->validate();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -51228,20 +51434,20 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_Cylinder(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_Pyramid6(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Cylinder *arg1 = (Cylinder *) 0 ;
+  Pyramid6 *arg1 = (Pyramid6 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Cylinder, SWIG_POINTER_DISOWN |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid6, SWIG_POINTER_DISOWN |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Cylinder" "', argument " "1"" of type '" "Cylinder *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Pyramid6" "', argument " "1"" of type '" "Pyramid6 *""'"); 
   }
-  arg1 = reinterpret_cast< Cylinder * >(argp1);
+  arg1 = reinterpret_cast< Pyramid6 * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -51250,123 +51456,165 @@ fail:
 }
 
 
-SWIGINTERN PyObject *Cylinder_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *Pyramid6_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
   if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_Cylinder, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_Pyramid6, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *Cylinder_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *Pyramid6_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   return SWIG_Python_InitShadowInstance(args);
 }
 
-SWIGINTERN PyObject *_wrap_new_Dodecahedron__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_Bipyramid4__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
+  double arg2 ;
+  double arg3 ;
+  double arg4 ;
   double val1 ;
   int ecode1 = 0 ;
-  Dodecahedron *result = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  Bipyramid4 *result = 0 ;
   
-  if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
+  if ((nobjs < 4) || (nobjs > 4)) SWIG_fail;
   ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
   if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_Dodecahedron" "', argument " "1"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_Bipyramid4" "', argument " "1"" of type '" "double""'");
   } 
   arg1 = static_cast< double >(val1);
-  result = (Dodecahedron *)new Dodecahedron(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Dodecahedron, SWIG_POINTER_NEW |  0 );
+  ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_Bipyramid4" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_Bipyramid4" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_double(swig_obj[3], &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "new_Bipyramid4" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  result = (Bipyramid4 *)new Bipyramid4(arg1,arg2,arg3,arg4);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Bipyramid4, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_Dodecahedron__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_Bipyramid4__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   std::vector< double,std::allocator< double > > arg1 ;
-  Dodecahedron *result = 0 ;
+  Bipyramid4 *result = 0 ;
   
   if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
   {
     std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
     int res = swig::asptr(swig_obj[0], &ptr);
     if (!SWIG_IsOK(res) || !ptr) {
-      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_Dodecahedron" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
+      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_Bipyramid4" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
     }
     arg1 = *ptr;
     if (SWIG_IsNewObj(res)) delete ptr;
   }
-  result = (Dodecahedron *)new Dodecahedron(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Dodecahedron, SWIG_POINTER_NEW |  0 );
+  result = (Bipyramid4 *)new Bipyramid4(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Bipyramid4, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_Dodecahedron(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_Bipyramid4(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
-  PyObject *argv[2] = {
+  PyObject *argv[5] = {
     0
   };
   
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_Dodecahedron", 0, 1, argv))) SWIG_fail;
+  if (!(argc = SWIG_Python_UnpackTuple(args, "new_Bipyramid4", 0, 4, argv))) SWIG_fail;
   --argc;
-  if (argc == 1) {
-    int _v = 0;
-    {
-      int res = SWIG_AsVal_double(argv[0], NULL);
-      _v = SWIG_CheckState(res);
-    }
-    if (_v) {
-      return _wrap_new_Dodecahedron__SWIG_0(self, argc, argv);
-    }
-  }
   if (argc == 1) {
     int _v = 0;
     int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
     _v = SWIG_CheckState(res);
     if (_v) {
-      return _wrap_new_Dodecahedron__SWIG_1(self, argc, argv);
+      return _wrap_new_Bipyramid4__SWIG_1(self, argc, argv);
     }
   }
-  
-fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_Dodecahedron'.\n"
-    "  Possible C/C++ prototypes are:\n"
-    "    Dodecahedron::Dodecahedron(double)\n"
-    "    Dodecahedron::Dodecahedron(std::vector< double,std::allocator< double > >)\n");
-  return 0;
-}
+  if (argc == 4) {
+    int _v = 0;
+    {
+      int res = SWIG_AsVal_double(argv[0], NULL);
+      _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_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_new_Bipyramid4__SWIG_0(self, argc, argv);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_Bipyramid4'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Bipyramid4::Bipyramid4(double,double,double,double)\n"
+    "    Bipyramid4::Bipyramid4(std::vector< double,std::allocator< double > >)\n");
+  return 0;
+}
 
 
-SWIGINTERN PyObject *_wrap_Dodecahedron_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Bipyramid4_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Dodecahedron *arg1 = (Dodecahedron *) 0 ;
+  Bipyramid4 *arg1 = (Bipyramid4 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  Dodecahedron *result = 0 ;
+  Bipyramid4 *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Dodecahedron, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Bipyramid4, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Dodecahedron_clone" "', argument " "1"" of type '" "Dodecahedron const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Bipyramid4_clone" "', argument " "1"" of type '" "Bipyramid4 const *""'"); 
   }
-  arg1 = reinterpret_cast< Dodecahedron * >(argp1);
-  result = (Dodecahedron *)((Dodecahedron const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Dodecahedron, 0 |  0 );
+  arg1 = reinterpret_cast< Bipyramid4 * >(argp1);
+  result = (Bipyramid4 *)((Bipyramid4 const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Bipyramid4, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Dodecahedron_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Bipyramid4_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Dodecahedron *arg1 = (Dodecahedron *) 0 ;
+  Bipyramid4 *arg1 = (Bipyramid4 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -51374,12 +51622,12 @@ SWIGINTERN PyObject *_wrap_Dodecahedron_className(PyObject *self, PyObject *args
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Dodecahedron, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Bipyramid4, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Dodecahedron_className" "', argument " "1"" of type '" "Dodecahedron const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Bipyramid4_className" "', argument " "1"" of type '" "Bipyramid4 const *""'"); 
   }
-  arg1 = reinterpret_cast< Dodecahedron * >(argp1);
-  result = ((Dodecahedron const *)arg1)->className();
+  arg1 = reinterpret_cast< Bipyramid4 * >(argp1);
+  result = ((Bipyramid4 const *)arg1)->className();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -51387,9 +51635,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Dodecahedron_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Bipyramid4_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Dodecahedron *arg1 = (Dodecahedron *) 0 ;
+  Bipyramid4 *arg1 = (Bipyramid4 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -51397,12 +51645,12 @@ SWIGINTERN PyObject *_wrap_Dodecahedron_parDefs(PyObject *self, PyObject *args)
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Dodecahedron, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Bipyramid4, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Dodecahedron_parDefs" "', argument " "1"" of type '" "Dodecahedron const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Bipyramid4_parDefs" "', argument " "1"" of type '" "Bipyramid4 const *""'"); 
   }
-  arg1 = reinterpret_cast< Dodecahedron * >(argp1);
-  result = ((Dodecahedron const *)arg1)->parDefs();
+  arg1 = reinterpret_cast< Bipyramid4 * >(argp1);
+  result = ((Bipyramid4 const *)arg1)->parDefs();
   resultobj = SWIG_NewPointerObj((new std::vector< ParaMeta,std::allocator< ParaMeta > >(result)), SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
@@ -51410,9 +51658,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Dodecahedron_edge(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Bipyramid4_length(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Dodecahedron *arg1 = (Dodecahedron *) 0 ;
+  Bipyramid4 *arg1 = (Bipyramid4 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -51420,12 +51668,12 @@ SWIGINTERN PyObject *_wrap_Dodecahedron_edge(PyObject *self, PyObject *args) {
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Dodecahedron, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Bipyramid4, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Dodecahedron_edge" "', argument " "1"" of type '" "Dodecahedron const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Bipyramid4_length" "', argument " "1"" of type '" "Bipyramid4 const *""'"); 
   }
-  arg1 = reinterpret_cast< Dodecahedron * >(argp1);
-  result = (double)((Dodecahedron const *)arg1)->edge();
+  arg1 = reinterpret_cast< Bipyramid4 * >(argp1);
+  result = (double)((Bipyramid4 const *)arg1)->length();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -51433,20 +51681,112 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_Dodecahedron(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Bipyramid4_height(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Dodecahedron *arg1 = (Dodecahedron *) 0 ;
+  Bipyramid4 *arg1 = (Bipyramid4 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
+  double result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Dodecahedron, SWIG_POINTER_DISOWN |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Bipyramid4, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Dodecahedron" "', argument " "1"" of type '" "Dodecahedron *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Bipyramid4_height" "', argument " "1"" of type '" "Bipyramid4 const *""'"); 
   }
-  arg1 = reinterpret_cast< Dodecahedron * >(argp1);
+  arg1 = reinterpret_cast< Bipyramid4 * >(argp1);
+  result = (double)((Bipyramid4 const *)arg1)->height();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_Bipyramid4_heightRatio(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  Bipyramid4 *arg1 = (Bipyramid4 *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  double result;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Bipyramid4, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Bipyramid4_heightRatio" "', argument " "1"" of type '" "Bipyramid4 const *""'"); 
+  }
+  arg1 = reinterpret_cast< Bipyramid4 * >(argp1);
+  result = (double)((Bipyramid4 const *)arg1)->heightRatio();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_Bipyramid4_alpha(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  Bipyramid4 *arg1 = (Bipyramid4 *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  double result;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Bipyramid4, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Bipyramid4_alpha" "', argument " "1"" of type '" "Bipyramid4 const *""'"); 
+  }
+  arg1 = reinterpret_cast< Bipyramid4 * >(argp1);
+  result = (double)((Bipyramid4 const *)arg1)->alpha();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_Bipyramid4_validate(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  Bipyramid4 *arg1 = (Bipyramid4 *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  std::string result;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Bipyramid4, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Bipyramid4_validate" "', argument " "1"" of type '" "Bipyramid4 const *""'"); 
+  }
+  arg1 = reinterpret_cast< Bipyramid4 * >(argp1);
+  result = ((Bipyramid4 const *)arg1)->validate();
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_Bipyramid4(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  Bipyramid4 *arg1 = (Bipyramid4 *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Bipyramid4, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Bipyramid4" "', argument " "1"" of type '" "Bipyramid4 *""'"); 
+  }
+  arg1 = reinterpret_cast< Bipyramid4 * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -51455,94 +51795,86 @@ fail:
 }
 
 
-SWIGINTERN PyObject *Dodecahedron_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *Bipyramid4_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
   if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_Dodecahedron, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_Bipyramid4, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *Dodecahedron_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *Bipyramid4_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   return SWIG_Python_InitShadowInstance(args);
 }
 
-SWIGINTERN PyObject *_wrap_new_EllipsoidalCylinder__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_CantellatedCube__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
   double arg2 ;
-  double arg3 ;
   double val1 ;
   int ecode1 = 0 ;
   double val2 ;
   int ecode2 = 0 ;
-  double val3 ;
-  int ecode3 = 0 ;
-  EllipsoidalCylinder *result = 0 ;
+  CantellatedCube *result = 0 ;
   
-  if ((nobjs < 3) || (nobjs > 3)) SWIG_fail;
+  if ((nobjs < 2) || (nobjs > 2)) SWIG_fail;
   ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
   if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_EllipsoidalCylinder" "', argument " "1"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CantellatedCube" "', argument " "1"" of type '" "double""'");
   } 
   arg1 = static_cast< double >(val1);
   ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
   if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_EllipsoidalCylinder" "', argument " "2"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CantellatedCube" "', argument " "2"" of type '" "double""'");
   } 
   arg2 = static_cast< double >(val2);
-  ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
-  if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_EllipsoidalCylinder" "', argument " "3"" of type '" "double""'");
-  } 
-  arg3 = static_cast< double >(val3);
-  result = (EllipsoidalCylinder *)new EllipsoidalCylinder(arg1,arg2,arg3);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_EllipsoidalCylinder, SWIG_POINTER_NEW |  0 );
+  result = (CantellatedCube *)new CantellatedCube(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CantellatedCube, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_EllipsoidalCylinder__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_CantellatedCube__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   std::vector< double,std::allocator< double > > arg1 ;
-  EllipsoidalCylinder *result = 0 ;
+  CantellatedCube *result = 0 ;
   
   if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
   {
     std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
     int res = swig::asptr(swig_obj[0], &ptr);
     if (!SWIG_IsOK(res) || !ptr) {
-      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_EllipsoidalCylinder" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
+      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_CantellatedCube" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
     }
     arg1 = *ptr;
     if (SWIG_IsNewObj(res)) delete ptr;
   }
-  result = (EllipsoidalCylinder *)new EllipsoidalCylinder(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_EllipsoidalCylinder, SWIG_POINTER_NEW |  0 );
+  result = (CantellatedCube *)new CantellatedCube(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CantellatedCube, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_EllipsoidalCylinder(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_CantellatedCube(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
-  PyObject *argv[4] = {
+  PyObject *argv[3] = {
     0
   };
   
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_EllipsoidalCylinder", 0, 3, argv))) SWIG_fail;
+  if (!(argc = SWIG_Python_UnpackTuple(args, "new_CantellatedCube", 0, 2, argv))) SWIG_fail;
   --argc;
   if (argc == 1) {
     int _v = 0;
     int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
     _v = SWIG_CheckState(res);
     if (_v) {
-      return _wrap_new_EllipsoidalCylinder__SWIG_1(self, argc, argv);
+      return _wrap_new_CantellatedCube__SWIG_1(self, argc, argv);
     }
   }
-  if (argc == 3) {
+  if (argc == 2) {
     int _v = 0;
     {
       int res = SWIG_AsVal_double(argv[0], NULL);
@@ -51554,52 +51886,46 @@ SWIGINTERN PyObject *_wrap_new_EllipsoidalCylinder(PyObject *self, PyObject *arg
         _v = SWIG_CheckState(res);
       }
       if (_v) {
-        {
-          int res = SWIG_AsVal_double(argv[2], NULL);
-          _v = SWIG_CheckState(res);
-        }
-        if (_v) {
-          return _wrap_new_EllipsoidalCylinder__SWIG_0(self, argc, argv);
-        }
+        return _wrap_new_CantellatedCube__SWIG_0(self, argc, argv);
       }
     }
   }
   
 fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_EllipsoidalCylinder'.\n"
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_CantellatedCube'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    EllipsoidalCylinder::EllipsoidalCylinder(double,double,double)\n"
-    "    EllipsoidalCylinder::EllipsoidalCylinder(std::vector< double,std::allocator< double > >)\n");
+    "    CantellatedCube::CantellatedCube(double,double)\n"
+    "    CantellatedCube::CantellatedCube(std::vector< double,std::allocator< double > >)\n");
   return 0;
 }
 
 
-SWIGINTERN PyObject *_wrap_EllipsoidalCylinder_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_CantellatedCube_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  EllipsoidalCylinder *arg1 = (EllipsoidalCylinder *) 0 ;
+  CantellatedCube *arg1 = (CantellatedCube *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  EllipsoidalCylinder *result = 0 ;
+  CantellatedCube *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_EllipsoidalCylinder, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_CantellatedCube, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "EllipsoidalCylinder_clone" "', argument " "1"" of type '" "EllipsoidalCylinder const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CantellatedCube_clone" "', argument " "1"" of type '" "CantellatedCube const *""'"); 
   }
-  arg1 = reinterpret_cast< EllipsoidalCylinder * >(argp1);
-  result = (EllipsoidalCylinder *)((EllipsoidalCylinder const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_EllipsoidalCylinder, 0 |  0 );
+  arg1 = reinterpret_cast< CantellatedCube * >(argp1);
+  result = (CantellatedCube *)((CantellatedCube const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CantellatedCube, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_EllipsoidalCylinder_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_CantellatedCube_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  EllipsoidalCylinder *arg1 = (EllipsoidalCylinder *) 0 ;
+  CantellatedCube *arg1 = (CantellatedCube *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -51607,12 +51933,12 @@ SWIGINTERN PyObject *_wrap_EllipsoidalCylinder_className(PyObject *self, PyObjec
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_EllipsoidalCylinder, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_CantellatedCube, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "EllipsoidalCylinder_className" "', argument " "1"" of type '" "EllipsoidalCylinder const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CantellatedCube_className" "', argument " "1"" of type '" "CantellatedCube const *""'"); 
   }
-  arg1 = reinterpret_cast< EllipsoidalCylinder * >(argp1);
-  result = ((EllipsoidalCylinder const *)arg1)->className();
+  arg1 = reinterpret_cast< CantellatedCube * >(argp1);
+  result = ((CantellatedCube const *)arg1)->className();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -51620,9 +51946,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_EllipsoidalCylinder_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_CantellatedCube_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  EllipsoidalCylinder *arg1 = (EllipsoidalCylinder *) 0 ;
+  CantellatedCube *arg1 = (CantellatedCube *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -51630,12 +51956,12 @@ SWIGINTERN PyObject *_wrap_EllipsoidalCylinder_parDefs(PyObject *self, PyObject
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_EllipsoidalCylinder, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_CantellatedCube, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "EllipsoidalCylinder_parDefs" "', argument " "1"" of type '" "EllipsoidalCylinder const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CantellatedCube_parDefs" "', argument " "1"" of type '" "CantellatedCube const *""'"); 
   }
-  arg1 = reinterpret_cast< EllipsoidalCylinder * >(argp1);
-  result = ((EllipsoidalCylinder const *)arg1)->parDefs();
+  arg1 = reinterpret_cast< CantellatedCube * >(argp1);
+  result = ((CantellatedCube const *)arg1)->parDefs();
   resultobj = SWIG_NewPointerObj((new std::vector< ParaMeta,std::allocator< ParaMeta > >(result)), SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
@@ -51643,55 +51969,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_EllipsoidalCylinder_radiusX(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  EllipsoidalCylinder *arg1 = (EllipsoidalCylinder *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  double result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_EllipsoidalCylinder, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "EllipsoidalCylinder_radiusX" "', argument " "1"" of type '" "EllipsoidalCylinder const *""'"); 
-  }
-  arg1 = reinterpret_cast< EllipsoidalCylinder * >(argp1);
-  result = (double)((EllipsoidalCylinder const *)arg1)->radiusX();
-  resultobj = SWIG_From_double(static_cast< double >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_EllipsoidalCylinder_radiusY(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  EllipsoidalCylinder *arg1 = (EllipsoidalCylinder *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  double result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_EllipsoidalCylinder, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "EllipsoidalCylinder_radiusY" "', argument " "1"" of type '" "EllipsoidalCylinder const *""'"); 
-  }
-  arg1 = reinterpret_cast< EllipsoidalCylinder * >(argp1);
-  result = (double)((EllipsoidalCylinder const *)arg1)->radiusY();
-  resultobj = SWIG_From_double(static_cast< double >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_EllipsoidalCylinder_height(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_CantellatedCube_length(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  EllipsoidalCylinder *arg1 = (EllipsoidalCylinder *) 0 ;
+  CantellatedCube *arg1 = (CantellatedCube *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -51699,12 +51979,12 @@ SWIGINTERN PyObject *_wrap_EllipsoidalCylinder_height(PyObject *self, PyObject *
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_EllipsoidalCylinder, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_CantellatedCube, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "EllipsoidalCylinder_height" "', argument " "1"" of type '" "EllipsoidalCylinder const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CantellatedCube_length" "', argument " "1"" of type '" "CantellatedCube const *""'"); 
   }
-  arg1 = reinterpret_cast< EllipsoidalCylinder * >(argp1);
-  result = (double)((EllipsoidalCylinder const *)arg1)->height();
+  arg1 = reinterpret_cast< CantellatedCube * >(argp1);
+  result = (double)((CantellatedCube const *)arg1)->length();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -51712,9 +51992,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_EllipsoidalCylinder_radialExtension(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_CantellatedCube_removedLength(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  EllipsoidalCylinder *arg1 = (EllipsoidalCylinder *) 0 ;
+  CantellatedCube *arg1 = (CantellatedCube *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -51722,12 +52002,12 @@ SWIGINTERN PyObject *_wrap_EllipsoidalCylinder_radialExtension(PyObject *self, P
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_EllipsoidalCylinder, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_CantellatedCube, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "EllipsoidalCylinder_radialExtension" "', argument " "1"" of type '" "EllipsoidalCylinder const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CantellatedCube_removedLength" "', argument " "1"" of type '" "CantellatedCube const *""'"); 
   }
-  arg1 = reinterpret_cast< EllipsoidalCylinder * >(argp1);
-  result = (double)((EllipsoidalCylinder const *)arg1)->radialExtension();
+  arg1 = reinterpret_cast< CantellatedCube * >(argp1);
+  result = (double)((CantellatedCube const *)arg1)->removedLength();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -51735,47 +52015,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_EllipsoidalCylinder_formfactor(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  EllipsoidalCylinder *arg1 = (EllipsoidalCylinder *) 0 ;
-  C3 arg2 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  void *argp2 ;
-  int res2 = 0 ;
-  PyObject *swig_obj[2] ;
-  complex_t result;
-  
-  if (!SWIG_Python_UnpackTuple(args, "EllipsoidalCylinder_formfactor", 2, 2, swig_obj)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_EllipsoidalCylinder, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "EllipsoidalCylinder_formfactor" "', argument " "1"" of type '" "EllipsoidalCylinder const *""'"); 
-  }
-  arg1 = reinterpret_cast< EllipsoidalCylinder * >(argp1);
-  {
-    res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_Vec3T_std__complexT_double_t_t,  0  | 0);
-    if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "EllipsoidalCylinder_formfactor" "', argument " "2"" of type '" "C3""'"); 
-    }  
-    if (!argp2) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "EllipsoidalCylinder_formfactor" "', argument " "2"" of type '" "C3""'");
-    } else {
-      C3 * temp = reinterpret_cast< C3 * >(argp2);
-      arg2 = *temp;
-      if (SWIG_IsNewObj(res2)) delete temp;
-    }
-  }
-  result = ((EllipsoidalCylinder const *)arg1)->formfactor(arg2);
-  resultobj = SWIG_From_std_complex_Sl_double_Sg_(static_cast< std::complex<double> >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_EllipsoidalCylinder_validate(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_CantellatedCube_validate(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  EllipsoidalCylinder *arg1 = (EllipsoidalCylinder *) 0 ;
+  CantellatedCube *arg1 = (CantellatedCube *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -51783,12 +52025,12 @@ SWIGINTERN PyObject *_wrap_EllipsoidalCylinder_validate(PyObject *self, PyObject
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_EllipsoidalCylinder, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_CantellatedCube, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "EllipsoidalCylinder_validate" "', argument " "1"" of type '" "EllipsoidalCylinder const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CantellatedCube_validate" "', argument " "1"" of type '" "CantellatedCube const *""'"); 
   }
-  arg1 = reinterpret_cast< EllipsoidalCylinder * >(argp1);
-  result = ((EllipsoidalCylinder const *)arg1)->validate();
+  arg1 = reinterpret_cast< CantellatedCube * >(argp1);
+  result = ((CantellatedCube const *)arg1)->validate();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -51796,20 +52038,20 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_EllipsoidalCylinder(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_CantellatedCube(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  EllipsoidalCylinder *arg1 = (EllipsoidalCylinder *) 0 ;
+  CantellatedCube *arg1 = (CantellatedCube *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_EllipsoidalCylinder, SWIG_POINTER_DISOWN |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_CantellatedCube, SWIG_POINTER_DISOWN |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_EllipsoidalCylinder" "', argument " "1"" of type '" "EllipsoidalCylinder *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CantellatedCube" "', argument " "1"" of type '" "CantellatedCube *""'"); 
   }
-  arg1 = reinterpret_cast< EllipsoidalCylinder * >(argp1);
+  arg1 = reinterpret_cast< CantellatedCube * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -51818,145 +52060,83 @@ fail:
 }
 
 
-SWIGINTERN PyObject *EllipsoidalCylinder_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *CantellatedCube_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
   if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_EllipsoidalCylinder, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_CantellatedCube, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *EllipsoidalCylinder_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *CantellatedCube_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   return SWIG_Python_InitShadowInstance(args);
 }
 
-SWIGINTERN PyObject *_wrap_new_Sphere__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_TruncatedCube__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
-  bool arg2 ;
+  double arg2 ;
   double val1 ;
   int ecode1 = 0 ;
-  bool val2 ;
+  double val2 ;
   int ecode2 = 0 ;
-  Sphere *result = 0 ;
+  TruncatedCube *result = 0 ;
   
   if ((nobjs < 2) || (nobjs > 2)) SWIG_fail;
   ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
   if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_Sphere" "', argument " "1"" of type '" "double""'");
-  } 
-  arg1 = static_cast< double >(val1);
-  ecode2 = SWIG_AsVal_bool(swig_obj[1], &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_Sphere" "', argument " "2"" of type '" "bool""'");
-  } 
-  arg2 = static_cast< bool >(val2);
-  result = (Sphere *)new Sphere(arg1,arg2);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Sphere, SWIG_POINTER_NEW |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_new_Sphere__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
-  PyObject *resultobj = 0;
-  double arg1 ;
-  double val1 ;
-  int ecode1 = 0 ;
-  Sphere *result = 0 ;
-  
-  if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
-  ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
-  if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_Sphere" "', argument " "1"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_TruncatedCube" "', argument " "1"" of type '" "double""'");
   } 
   arg1 = static_cast< double >(val1);
-  result = (Sphere *)new Sphere(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Sphere, SWIG_POINTER_NEW |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_new_Sphere__SWIG_2(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
-  PyObject *resultobj = 0;
-  std::vector< double,std::allocator< double > > arg1 ;
-  bool arg2 ;
-  bool val2 ;
-  int ecode2 = 0 ;
-  Sphere *result = 0 ;
-  
-  if ((nobjs < 2) || (nobjs > 2)) SWIG_fail;
-  {
-    std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
-    int res = swig::asptr(swig_obj[0], &ptr);
-    if (!SWIG_IsOK(res) || !ptr) {
-      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_Sphere" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
-    }
-    arg1 = *ptr;
-    if (SWIG_IsNewObj(res)) delete ptr;
-  }
-  ecode2 = SWIG_AsVal_bool(swig_obj[1], &val2);
+  ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
   if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_Sphere" "', argument " "2"" of type '" "bool""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_TruncatedCube" "', argument " "2"" of type '" "double""'");
   } 
-  arg2 = static_cast< bool >(val2);
-  result = (Sphere *)new Sphere(arg1,arg2);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Sphere, SWIG_POINTER_NEW |  0 );
+  arg2 = static_cast< double >(val2);
+  result = (TruncatedCube *)new TruncatedCube(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_TruncatedCube, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_Sphere__SWIG_3(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_TruncatedCube__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   std::vector< double,std::allocator< double > > arg1 ;
-  Sphere *result = 0 ;
+  TruncatedCube *result = 0 ;
   
   if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
   {
     std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
     int res = swig::asptr(swig_obj[0], &ptr);
     if (!SWIG_IsOK(res) || !ptr) {
-      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_Sphere" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
+      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_TruncatedCube" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
     }
     arg1 = *ptr;
     if (SWIG_IsNewObj(res)) delete ptr;
   }
-  result = (Sphere *)new Sphere(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Sphere, SWIG_POINTER_NEW |  0 );
+  result = (TruncatedCube *)new TruncatedCube(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_TruncatedCube, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_Sphere(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_TruncatedCube(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
   PyObject *argv[3] = {
     0
   };
   
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_Sphere", 0, 2, argv))) SWIG_fail;
+  if (!(argc = SWIG_Python_UnpackTuple(args, "new_TruncatedCube", 0, 2, argv))) SWIG_fail;
   --argc;
-  if (argc == 1) {
-    int _v = 0;
-    {
-      int res = SWIG_AsVal_double(argv[0], NULL);
-      _v = SWIG_CheckState(res);
-    }
-    if (_v) {
-      return _wrap_new_Sphere__SWIG_1(self, argc, argv);
-    }
-  }
   if (argc == 1) {
     int _v = 0;
     int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
     _v = SWIG_CheckState(res);
     if (_v) {
-      return _wrap_new_Sphere__SWIG_3(self, argc, argv);
+      return _wrap_new_TruncatedCube__SWIG_1(self, argc, argv);
     }
   }
   if (argc == 2) {
@@ -51967,66 +52147,50 @@ SWIGINTERN PyObject *_wrap_new_Sphere(PyObject *self, PyObject *args) {
     }
     if (_v) {
       {
-        int res = SWIG_AsVal_bool(argv[1], NULL);
-        _v = SWIG_CheckState(res);
-      }
-      if (_v) {
-        return _wrap_new_Sphere__SWIG_0(self, argc, argv);
-      }
-    }
-  }
-  if (argc == 2) {
-    int _v = 0;
-    int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
-    _v = SWIG_CheckState(res);
-    if (_v) {
-      {
-        int res = SWIG_AsVal_bool(argv[1], NULL);
+        int res = SWIG_AsVal_double(argv[1], NULL);
         _v = SWIG_CheckState(res);
       }
       if (_v) {
-        return _wrap_new_Sphere__SWIG_2(self, argc, argv);
+        return _wrap_new_TruncatedCube__SWIG_0(self, argc, argv);
       }
     }
   }
   
 fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_Sphere'.\n"
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_TruncatedCube'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    Sphere::Sphere(double,bool)\n"
-    "    Sphere::Sphere(double)\n"
-    "    Sphere::Sphere(std::vector< double,std::allocator< double > >,bool)\n"
-    "    Sphere::Sphere(std::vector< double,std::allocator< double > >)\n");
+    "    TruncatedCube::TruncatedCube(double,double)\n"
+    "    TruncatedCube::TruncatedCube(std::vector< double,std::allocator< double > >)\n");
   return 0;
 }
 
 
-SWIGINTERN PyObject *_wrap_Sphere_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_TruncatedCube_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Sphere *arg1 = (Sphere *) 0 ;
+  TruncatedCube *arg1 = (TruncatedCube *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  Sphere *result = 0 ;
+  TruncatedCube *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Sphere, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedCube, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Sphere_clone" "', argument " "1"" of type '" "Sphere const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedCube_clone" "', argument " "1"" of type '" "TruncatedCube const *""'"); 
   }
-  arg1 = reinterpret_cast< Sphere * >(argp1);
-  result = (Sphere *)((Sphere const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Sphere, 0 |  0 );
+  arg1 = reinterpret_cast< TruncatedCube * >(argp1);
+  result = (TruncatedCube *)((TruncatedCube const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_TruncatedCube, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Sphere_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_TruncatedCube_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Sphere *arg1 = (Sphere *) 0 ;
+  TruncatedCube *arg1 = (TruncatedCube *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -52034,12 +52198,12 @@ SWIGINTERN PyObject *_wrap_Sphere_className(PyObject *self, PyObject *args) {
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Sphere, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedCube, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Sphere_className" "', argument " "1"" of type '" "Sphere const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedCube_className" "', argument " "1"" of type '" "TruncatedCube const *""'"); 
   }
-  arg1 = reinterpret_cast< Sphere * >(argp1);
-  result = ((Sphere const *)arg1)->className();
+  arg1 = reinterpret_cast< TruncatedCube * >(argp1);
+  result = ((TruncatedCube const *)arg1)->className();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -52047,9 +52211,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Sphere_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_TruncatedCube_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Sphere *arg1 = (Sphere *) 0 ;
+  TruncatedCube *arg1 = (TruncatedCube *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -52057,12 +52221,12 @@ SWIGINTERN PyObject *_wrap_Sphere_parDefs(PyObject *self, PyObject *args) {
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Sphere, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedCube, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Sphere_parDefs" "', argument " "1"" of type '" "Sphere const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedCube_parDefs" "', argument " "1"" of type '" "TruncatedCube const *""'"); 
   }
-  arg1 = reinterpret_cast< Sphere * >(argp1);
-  result = ((Sphere const *)arg1)->parDefs();
+  arg1 = reinterpret_cast< TruncatedCube * >(argp1);
+  result = ((TruncatedCube const *)arg1)->parDefs();
   resultobj = SWIG_NewPointerObj((new std::vector< ParaMeta,std::allocator< ParaMeta > >(result)), SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
@@ -52070,9 +52234,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Sphere_radius(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_TruncatedCube_length(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Sphere *arg1 = (Sphere *) 0 ;
+  TruncatedCube *arg1 = (TruncatedCube *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -52080,12 +52244,12 @@ SWIGINTERN PyObject *_wrap_Sphere_radius(PyObject *self, PyObject *args) {
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Sphere, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedCube, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Sphere_radius" "', argument " "1"" of type '" "Sphere const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedCube_length" "', argument " "1"" of type '" "TruncatedCube const *""'"); 
   }
-  arg1 = reinterpret_cast< Sphere * >(argp1);
-  result = (double)((Sphere const *)arg1)->radius();
+  arg1 = reinterpret_cast< TruncatedCube * >(argp1);
+  result = (double)((TruncatedCube const *)arg1)->length();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -52093,9 +52257,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Sphere_radialExtension(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_TruncatedCube_removedLength(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Sphere *arg1 = (Sphere *) 0 ;
+  TruncatedCube *arg1 = (TruncatedCube *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -52103,12 +52267,12 @@ SWIGINTERN PyObject *_wrap_Sphere_radialExtension(PyObject *self, PyObject *args
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Sphere, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedCube, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Sphere_radialExtension" "', argument " "1"" of type '" "Sphere const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedCube_removedLength" "', argument " "1"" of type '" "TruncatedCube const *""'"); 
   }
-  arg1 = reinterpret_cast< Sphere * >(argp1);
-  result = (double)((Sphere const *)arg1)->radialExtension();
+  arg1 = reinterpret_cast< TruncatedCube * >(argp1);
+  result = (double)((TruncatedCube const *)arg1)->removedLength();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -52116,47 +52280,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Sphere_formfactor(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  Sphere *arg1 = (Sphere *) 0 ;
-  C3 arg2 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  void *argp2 ;
-  int res2 = 0 ;
-  PyObject *swig_obj[2] ;
-  complex_t result;
-  
-  if (!SWIG_Python_UnpackTuple(args, "Sphere_formfactor", 2, 2, swig_obj)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Sphere, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Sphere_formfactor" "', argument " "1"" of type '" "Sphere const *""'"); 
-  }
-  arg1 = reinterpret_cast< Sphere * >(argp1);
-  {
-    res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_Vec3T_std__complexT_double_t_t,  0  | 0);
-    if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Sphere_formfactor" "', argument " "2"" of type '" "C3""'"); 
-    }  
-    if (!argp2) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Sphere_formfactor" "', argument " "2"" of type '" "C3""'");
-    } else {
-      C3 * temp = reinterpret_cast< C3 * >(argp2);
-      arg2 = *temp;
-      if (SWIG_IsNewObj(res2)) delete temp;
-    }
-  }
-  result = ((Sphere const *)arg1)->formfactor(arg2);
-  resultobj = SWIG_From_std_complex_Sl_double_Sg_(static_cast< std::complex<double> >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_Sphere_validate(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_TruncatedCube_validate(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Sphere *arg1 = (Sphere *) 0 ;
+  TruncatedCube *arg1 = (TruncatedCube *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -52164,12 +52290,12 @@ SWIGINTERN PyObject *_wrap_Sphere_validate(PyObject *self, PyObject *args) {
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Sphere, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedCube, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Sphere_validate" "', argument " "1"" of type '" "Sphere const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedCube_validate" "', argument " "1"" of type '" "TruncatedCube const *""'"); 
   }
-  arg1 = reinterpret_cast< Sphere * >(argp1);
-  result = ((Sphere const *)arg1)->validate();
+  arg1 = reinterpret_cast< TruncatedCube * >(argp1);
+  result = ((TruncatedCube const *)arg1)->validate();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -52177,20 +52303,20 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_Sphere(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_TruncatedCube(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Sphere *arg1 = (Sphere *) 0 ;
+  TruncatedCube *arg1 = (TruncatedCube *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Sphere, SWIG_POINTER_DISOWN |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedCube, SWIG_POINTER_DISOWN |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Sphere" "', argument " "1"" of type '" "Sphere *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_TruncatedCube" "', argument " "1"" of type '" "TruncatedCube *""'"); 
   }
-  arg1 = reinterpret_cast< Sphere * >(argp1);
+  arg1 = reinterpret_cast< TruncatedCube * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -52199,86 +52325,94 @@ fail:
 }
 
 
-SWIGINTERN PyObject *Sphere_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *TruncatedCube_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
   if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_Sphere, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_TruncatedCube, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *Sphere_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *TruncatedCube_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   return SWIG_Python_InitShadowInstance(args);
 }
 
-SWIGINTERN PyObject *_wrap_new_Spheroid__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_Cone__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
   double arg2 ;
+  double arg3 ;
   double val1 ;
   int ecode1 = 0 ;
   double val2 ;
   int ecode2 = 0 ;
-  Spheroid *result = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  Cone *result = 0 ;
   
-  if ((nobjs < 2) || (nobjs > 2)) SWIG_fail;
+  if ((nobjs < 3) || (nobjs > 3)) SWIG_fail;
   ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
   if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_Spheroid" "', argument " "1"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_Cone" "', argument " "1"" of type '" "double""'");
   } 
   arg1 = static_cast< double >(val1);
   ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
   if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_Spheroid" "', argument " "2"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_Cone" "', argument " "2"" of type '" "double""'");
   } 
   arg2 = static_cast< double >(val2);
-  result = (Spheroid *)new Spheroid(arg1,arg2);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Spheroid, SWIG_POINTER_NEW |  0 );
+  ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_Cone" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  result = (Cone *)new Cone(arg1,arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Cone, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_Spheroid__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_Cone__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   std::vector< double,std::allocator< double > > arg1 ;
-  Spheroid *result = 0 ;
+  Cone *result = 0 ;
   
   if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
   {
     std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
     int res = swig::asptr(swig_obj[0], &ptr);
     if (!SWIG_IsOK(res) || !ptr) {
-      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_Spheroid" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
+      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_Cone" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
     }
     arg1 = *ptr;
     if (SWIG_IsNewObj(res)) delete ptr;
   }
-  result = (Spheroid *)new Spheroid(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Spheroid, SWIG_POINTER_NEW |  0 );
+  result = (Cone *)new Cone(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Cone, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_Spheroid(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_Cone(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
-  PyObject *argv[3] = {
+  PyObject *argv[4] = {
     0
   };
   
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_Spheroid", 0, 2, argv))) SWIG_fail;
+  if (!(argc = SWIG_Python_UnpackTuple(args, "new_Cone", 0, 3, argv))) SWIG_fail;
   --argc;
   if (argc == 1) {
     int _v = 0;
     int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
     _v = SWIG_CheckState(res);
     if (_v) {
-      return _wrap_new_Spheroid__SWIG_1(self, argc, argv);
+      return _wrap_new_Cone__SWIG_1(self, argc, argv);
     }
   }
-  if (argc == 2) {
+  if (argc == 3) {
     int _v = 0;
     {
       int res = SWIG_AsVal_double(argv[0], NULL);
@@ -52290,46 +52424,52 @@ SWIGINTERN PyObject *_wrap_new_Spheroid(PyObject *self, PyObject *args) {
         _v = SWIG_CheckState(res);
       }
       if (_v) {
-        return _wrap_new_Spheroid__SWIG_0(self, argc, argv);
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_new_Cone__SWIG_0(self, argc, argv);
+        }
       }
     }
   }
   
 fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_Spheroid'.\n"
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_Cone'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    Spheroid::Spheroid(double,double)\n"
-    "    Spheroid::Spheroid(std::vector< double,std::allocator< double > >)\n");
+    "    Cone::Cone(double,double,double)\n"
+    "    Cone::Cone(std::vector< double,std::allocator< double > >)\n");
   return 0;
 }
 
 
-SWIGINTERN PyObject *_wrap_Spheroid_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Cone_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Spheroid *arg1 = (Spheroid *) 0 ;
+  Cone *arg1 = (Cone *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  Spheroid *result = 0 ;
+  Cone *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Spheroid, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Cone, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Spheroid_clone" "', argument " "1"" of type '" "Spheroid const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Cone_clone" "', argument " "1"" of type '" "Cone const *""'"); 
   }
-  arg1 = reinterpret_cast< Spheroid * >(argp1);
-  result = (Spheroid *)((Spheroid const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Spheroid, 0 |  0 );
+  arg1 = reinterpret_cast< Cone * >(argp1);
+  result = (Cone *)((Cone const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Cone, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Spheroid_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Cone_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Spheroid *arg1 = (Spheroid *) 0 ;
+  Cone *arg1 = (Cone *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -52337,12 +52477,12 @@ SWIGINTERN PyObject *_wrap_Spheroid_className(PyObject *self, PyObject *args) {
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Spheroid, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Cone, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Spheroid_className" "', argument " "1"" of type '" "Spheroid const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Cone_className" "', argument " "1"" of type '" "Cone const *""'"); 
   }
-  arg1 = reinterpret_cast< Spheroid * >(argp1);
-  result = ((Spheroid const *)arg1)->className();
+  arg1 = reinterpret_cast< Cone * >(argp1);
+  result = ((Cone const *)arg1)->className();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -52350,9 +52490,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Spheroid_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Cone_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Spheroid *arg1 = (Spheroid *) 0 ;
+  Cone *arg1 = (Cone *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -52360,12 +52500,12 @@ SWIGINTERN PyObject *_wrap_Spheroid_parDefs(PyObject *self, PyObject *args) {
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Spheroid, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Cone, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Spheroid_parDefs" "', argument " "1"" of type '" "Spheroid const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Cone_parDefs" "', argument " "1"" of type '" "Cone const *""'"); 
   }
-  arg1 = reinterpret_cast< Spheroid * >(argp1);
-  result = ((Spheroid const *)arg1)->parDefs();
+  arg1 = reinterpret_cast< Cone * >(argp1);
+  result = ((Cone const *)arg1)->parDefs();
   resultobj = SWIG_NewPointerObj((new std::vector< ParaMeta,std::allocator< ParaMeta > >(result)), SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
@@ -52373,9 +52513,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Spheroid_height(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Cone_radius(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Spheroid *arg1 = (Spheroid *) 0 ;
+  Cone *arg1 = (Cone *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -52383,12 +52523,12 @@ SWIGINTERN PyObject *_wrap_Spheroid_height(PyObject *self, PyObject *args) {
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Spheroid, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Cone, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Spheroid_height" "', argument " "1"" of type '" "Spheroid const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Cone_radius" "', argument " "1"" of type '" "Cone const *""'"); 
   }
-  arg1 = reinterpret_cast< Spheroid * >(argp1);
-  result = (double)((Spheroid const *)arg1)->height();
+  arg1 = reinterpret_cast< Cone * >(argp1);
+  result = (double)((Cone const *)arg1)->radius();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -52396,9 +52536,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Spheroid_radius(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Cone_height(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Spheroid *arg1 = (Spheroid *) 0 ;
+  Cone *arg1 = (Cone *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -52406,12 +52546,12 @@ SWIGINTERN PyObject *_wrap_Spheroid_radius(PyObject *self, PyObject *args) {
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Spheroid, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Cone, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Spheroid_radius" "', argument " "1"" of type '" "Spheroid const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Cone_height" "', argument " "1"" of type '" "Cone const *""'"); 
   }
-  arg1 = reinterpret_cast< Spheroid * >(argp1);
-  result = (double)((Spheroid const *)arg1)->radius();
+  arg1 = reinterpret_cast< Cone * >(argp1);
+  result = (double)((Cone const *)arg1)->height();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -52419,9 +52559,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Spheroid_radialExtension(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Cone_alpha(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Spheroid *arg1 = (Spheroid *) 0 ;
+  Cone *arg1 = (Cone *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -52429,12 +52569,12 @@ SWIGINTERN PyObject *_wrap_Spheroid_radialExtension(PyObject *self, PyObject *ar
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Spheroid, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Cone, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Spheroid_radialExtension" "', argument " "1"" of type '" "Spheroid const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Cone_alpha" "', argument " "1"" of type '" "Cone const *""'"); 
   }
-  arg1 = reinterpret_cast< Spheroid * >(argp1);
-  result = (double)((Spheroid const *)arg1)->radialExtension();
+  arg1 = reinterpret_cast< Cone * >(argp1);
+  result = (double)((Cone const *)arg1)->alpha();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -52442,9 +52582,32 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Spheroid_formfactor(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Cone_radialExtension(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Spheroid *arg1 = (Spheroid *) 0 ;
+  Cone *arg1 = (Cone *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  double result;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Cone, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Cone_radialExtension" "', argument " "1"" of type '" "Cone const *""'"); 
+  }
+  arg1 = reinterpret_cast< Cone * >(argp1);
+  result = (double)((Cone const *)arg1)->radialExtension();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_Cone_formfactor(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  Cone *arg1 = (Cone *) 0 ;
   C3 arg2 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
@@ -52453,26 +52616,26 @@ SWIGINTERN PyObject *_wrap_Spheroid_formfactor(PyObject *self, PyObject *args) {
   PyObject *swig_obj[2] ;
   complex_t result;
   
-  if (!SWIG_Python_UnpackTuple(args, "Spheroid_formfactor", 2, 2, swig_obj)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Spheroid, 0 |  0 );
+  if (!SWIG_Python_UnpackTuple(args, "Cone_formfactor", 2, 2, swig_obj)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Cone, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Spheroid_formfactor" "', argument " "1"" of type '" "Spheroid const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Cone_formfactor" "', argument " "1"" of type '" "Cone const *""'"); 
   }
-  arg1 = reinterpret_cast< Spheroid * >(argp1);
+  arg1 = reinterpret_cast< Cone * >(argp1);
   {
     res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_Vec3T_std__complexT_double_t_t,  0  | 0);
     if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Spheroid_formfactor" "', argument " "2"" of type '" "C3""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Cone_formfactor" "', argument " "2"" of type '" "C3""'"); 
     }  
     if (!argp2) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Spheroid_formfactor" "', argument " "2"" of type '" "C3""'");
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Cone_formfactor" "', argument " "2"" of type '" "C3""'");
     } else {
       C3 * temp = reinterpret_cast< C3 * >(argp2);
       arg2 = *temp;
       if (SWIG_IsNewObj(res2)) delete temp;
     }
   }
-  result = ((Spheroid const *)arg1)->formfactor(arg2);
+  result = ((Cone const *)arg1)->formfactor(arg2);
   resultobj = SWIG_From_std_complex_Sl_double_Sg_(static_cast< std::complex<double> >(result));
   return resultobj;
 fail:
@@ -52480,9 +52643,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Spheroid_validate(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Cone_validate(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Spheroid *arg1 = (Spheroid *) 0 ;
+  Cone *arg1 = (Cone *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -52490,12 +52653,12 @@ SWIGINTERN PyObject *_wrap_Spheroid_validate(PyObject *self, PyObject *args) {
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Spheroid, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Cone, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Spheroid_validate" "', argument " "1"" of type '" "Spheroid const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Cone_validate" "', argument " "1"" of type '" "Cone const *""'"); 
   }
-  arg1 = reinterpret_cast< Spheroid * >(argp1);
-  result = ((Spheroid const *)arg1)->validate();
+  arg1 = reinterpret_cast< Cone * >(argp1);
+  result = ((Cone const *)arg1)->validate();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -52503,20 +52666,20 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_Spheroid(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_Cone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Spheroid *arg1 = (Spheroid *) 0 ;
+  Cone *arg1 = (Cone *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Spheroid, SWIG_POINTER_DISOWN |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Cone, SWIG_POINTER_DISOWN |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Spheroid" "', argument " "1"" of type '" "Spheroid *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Cone" "', argument " "1"" of type '" "Cone *""'"); 
   }
-  arg1 = reinterpret_cast< Spheroid * >(argp1);
+  arg1 = reinterpret_cast< Cone * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -52525,94 +52688,86 @@ fail:
 }
 
 
-SWIGINTERN PyObject *Spheroid_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *Cone_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
   if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_Spheroid, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_Cone, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *Spheroid_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *Cone_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   return SWIG_Python_InitShadowInstance(args);
 }
 
-SWIGINTERN PyObject *_wrap_new_HemiEllipsoid__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_Cylinder__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
   double arg2 ;
-  double arg3 ;
   double val1 ;
   int ecode1 = 0 ;
   double val2 ;
   int ecode2 = 0 ;
-  double val3 ;
-  int ecode3 = 0 ;
-  HemiEllipsoid *result = 0 ;
+  Cylinder *result = 0 ;
   
-  if ((nobjs < 3) || (nobjs > 3)) SWIG_fail;
+  if ((nobjs < 2) || (nobjs > 2)) SWIG_fail;
   ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
   if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_HemiEllipsoid" "', argument " "1"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_Cylinder" "', argument " "1"" of type '" "double""'");
   } 
   arg1 = static_cast< double >(val1);
   ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
   if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_HemiEllipsoid" "', argument " "2"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_Cylinder" "', argument " "2"" of type '" "double""'");
   } 
   arg2 = static_cast< double >(val2);
-  ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
-  if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_HemiEllipsoid" "', argument " "3"" of type '" "double""'");
-  } 
-  arg3 = static_cast< double >(val3);
-  result = (HemiEllipsoid *)new HemiEllipsoid(arg1,arg2,arg3);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_HemiEllipsoid, SWIG_POINTER_NEW |  0 );
+  result = (Cylinder *)new Cylinder(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Cylinder, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_HemiEllipsoid__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_Cylinder__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   std::vector< double,std::allocator< double > > arg1 ;
-  HemiEllipsoid *result = 0 ;
+  Cylinder *result = 0 ;
   
   if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
   {
     std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
     int res = swig::asptr(swig_obj[0], &ptr);
     if (!SWIG_IsOK(res) || !ptr) {
-      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_HemiEllipsoid" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
+      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_Cylinder" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
     }
     arg1 = *ptr;
     if (SWIG_IsNewObj(res)) delete ptr;
   }
-  result = (HemiEllipsoid *)new HemiEllipsoid(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_HemiEllipsoid, SWIG_POINTER_NEW |  0 );
+  result = (Cylinder *)new Cylinder(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Cylinder, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_HemiEllipsoid(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_Cylinder(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
-  PyObject *argv[4] = {
+  PyObject *argv[3] = {
     0
   };
   
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_HemiEllipsoid", 0, 3, argv))) SWIG_fail;
+  if (!(argc = SWIG_Python_UnpackTuple(args, "new_Cylinder", 0, 2, argv))) SWIG_fail;
   --argc;
   if (argc == 1) {
     int _v = 0;
     int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
     _v = SWIG_CheckState(res);
     if (_v) {
-      return _wrap_new_HemiEllipsoid__SWIG_1(self, argc, argv);
+      return _wrap_new_Cylinder__SWIG_1(self, argc, argv);
     }
   }
-  if (argc == 3) {
+  if (argc == 2) {
     int _v = 0;
     {
       int res = SWIG_AsVal_double(argv[0], NULL);
@@ -52624,120 +52779,115 @@ SWIGINTERN PyObject *_wrap_new_HemiEllipsoid(PyObject *self, PyObject *args) {
         _v = SWIG_CheckState(res);
       }
       if (_v) {
-        {
-          int res = SWIG_AsVal_double(argv[2], NULL);
-          _v = SWIG_CheckState(res);
-        }
-        if (_v) {
-          return _wrap_new_HemiEllipsoid__SWIG_0(self, argc, argv);
-        }
+        return _wrap_new_Cylinder__SWIG_0(self, argc, argv);
       }
     }
   }
   
 fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_HemiEllipsoid'.\n"
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_Cylinder'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    HemiEllipsoid::HemiEllipsoid(double,double,double)\n"
-    "    HemiEllipsoid::HemiEllipsoid(std::vector< double,std::allocator< double > >)\n");
+    "    Cylinder::Cylinder(double,double)\n"
+    "    Cylinder::Cylinder(std::vector< double,std::allocator< double > >)\n");
   return 0;
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_HemiEllipsoid(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Cylinder_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  HemiEllipsoid *arg1 = (HemiEllipsoid *) 0 ;
+  Cylinder *arg1 = (Cylinder *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
+  Cylinder *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HemiEllipsoid, SWIG_POINTER_DISOWN |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Cylinder, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_HemiEllipsoid" "', argument " "1"" of type '" "HemiEllipsoid *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Cylinder_clone" "', argument " "1"" of type '" "Cylinder const *""'"); 
   }
-  arg1 = reinterpret_cast< HemiEllipsoid * >(argp1);
-  delete arg1;
-  resultobj = SWIG_Py_Void();
+  arg1 = reinterpret_cast< Cylinder * >(argp1);
+  result = (Cylinder *)((Cylinder const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Cylinder, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_HemiEllipsoid_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Cylinder_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  HemiEllipsoid *arg1 = (HemiEllipsoid *) 0 ;
+  Cylinder *arg1 = (Cylinder *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  HemiEllipsoid *result = 0 ;
+  std::string result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HemiEllipsoid, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Cylinder, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HemiEllipsoid_clone" "', argument " "1"" of type '" "HemiEllipsoid const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Cylinder_className" "', argument " "1"" of type '" "Cylinder const *""'"); 
   }
-  arg1 = reinterpret_cast< HemiEllipsoid * >(argp1);
-  result = (HemiEllipsoid *)((HemiEllipsoid const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_HemiEllipsoid, 0 |  0 );
+  arg1 = reinterpret_cast< Cylinder * >(argp1);
+  result = ((Cylinder const *)arg1)->className();
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_HemiEllipsoid_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Cylinder_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  HemiEllipsoid *arg1 = (HemiEllipsoid *) 0 ;
+  Cylinder *arg1 = (Cylinder *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  std::string result;
+  SwigValueWrapper< std::vector< ParaMeta,std::allocator< ParaMeta > > > result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HemiEllipsoid, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Cylinder, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HemiEllipsoid_className" "', argument " "1"" of type '" "HemiEllipsoid const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Cylinder_parDefs" "', argument " "1"" of type '" "Cylinder const *""'"); 
   }
-  arg1 = reinterpret_cast< HemiEllipsoid * >(argp1);
-  result = ((HemiEllipsoid const *)arg1)->className();
-  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  arg1 = reinterpret_cast< Cylinder * >(argp1);
+  result = ((Cylinder const *)arg1)->parDefs();
+  resultobj = SWIG_NewPointerObj((new std::vector< ParaMeta,std::allocator< ParaMeta > >(result)), SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_HemiEllipsoid_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Cylinder_height(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  HemiEllipsoid *arg1 = (HemiEllipsoid *) 0 ;
+  Cylinder *arg1 = (Cylinder *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  SwigValueWrapper< std::vector< ParaMeta,std::allocator< ParaMeta > > > result;
+  double result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HemiEllipsoid, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Cylinder, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HemiEllipsoid_parDefs" "', argument " "1"" of type '" "HemiEllipsoid const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Cylinder_height" "', argument " "1"" of type '" "Cylinder const *""'"); 
   }
-  arg1 = reinterpret_cast< HemiEllipsoid * >(argp1);
-  result = ((HemiEllipsoid const *)arg1)->parDefs();
-  resultobj = SWIG_NewPointerObj((new std::vector< ParaMeta,std::allocator< ParaMeta > >(result)), SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, SWIG_POINTER_OWN |  0 );
+  arg1 = reinterpret_cast< Cylinder * >(argp1);
+  result = (double)((Cylinder const *)arg1)->height();
+  resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_HemiEllipsoid_height(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Cylinder_radius(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  HemiEllipsoid *arg1 = (HemiEllipsoid *) 0 ;
+  Cylinder *arg1 = (Cylinder *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -52745,12 +52895,12 @@ SWIGINTERN PyObject *_wrap_HemiEllipsoid_height(PyObject *self, PyObject *args)
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HemiEllipsoid, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Cylinder, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HemiEllipsoid_height" "', argument " "1"" of type '" "HemiEllipsoid const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Cylinder_radius" "', argument " "1"" of type '" "Cylinder const *""'"); 
   }
-  arg1 = reinterpret_cast< HemiEllipsoid * >(argp1);
-  result = (double)((HemiEllipsoid const *)arg1)->height();
+  arg1 = reinterpret_cast< Cylinder * >(argp1);
+  result = (double)((Cylinder const *)arg1)->radius();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -52758,9 +52908,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_HemiEllipsoid_radiusX(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Cylinder_radialExtension(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  HemiEllipsoid *arg1 = (HemiEllipsoid *) 0 ;
+  Cylinder *arg1 = (Cylinder *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -52768,58 +52918,12 @@ SWIGINTERN PyObject *_wrap_HemiEllipsoid_radiusX(PyObject *self, PyObject *args)
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HemiEllipsoid, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Cylinder, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HemiEllipsoid_radiusX" "', argument " "1"" of type '" "HemiEllipsoid const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Cylinder_radialExtension" "', argument " "1"" of type '" "Cylinder const *""'"); 
   }
-  arg1 = reinterpret_cast< HemiEllipsoid * >(argp1);
-  result = (double)((HemiEllipsoid const *)arg1)->radiusX();
-  resultobj = SWIG_From_double(static_cast< double >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_HemiEllipsoid_radiusY(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  HemiEllipsoid *arg1 = (HemiEllipsoid *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  double result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HemiEllipsoid, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HemiEllipsoid_radiusY" "', argument " "1"" of type '" "HemiEllipsoid const *""'"); 
-  }
-  arg1 = reinterpret_cast< HemiEllipsoid * >(argp1);
-  result = (double)((HemiEllipsoid const *)arg1)->radiusY();
-  resultobj = SWIG_From_double(static_cast< double >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_HemiEllipsoid_radialExtension(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  HemiEllipsoid *arg1 = (HemiEllipsoid *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  double result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HemiEllipsoid, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HemiEllipsoid_radialExtension" "', argument " "1"" of type '" "HemiEllipsoid const *""'"); 
-  }
-  arg1 = reinterpret_cast< HemiEllipsoid * >(argp1);
-  result = (double)((HemiEllipsoid const *)arg1)->radialExtension();
+  arg1 = reinterpret_cast< Cylinder * >(argp1);
+  result = (double)((Cylinder const *)arg1)->radialExtension();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -52827,9 +52931,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_HemiEllipsoid_formfactor(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Cylinder_formfactor(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  HemiEllipsoid *arg1 = (HemiEllipsoid *) 0 ;
+  Cylinder *arg1 = (Cylinder *) 0 ;
   C3 arg2 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
@@ -52838,26 +52942,26 @@ SWIGINTERN PyObject *_wrap_HemiEllipsoid_formfactor(PyObject *self, PyObject *ar
   PyObject *swig_obj[2] ;
   complex_t result;
   
-  if (!SWIG_Python_UnpackTuple(args, "HemiEllipsoid_formfactor", 2, 2, swig_obj)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HemiEllipsoid, 0 |  0 );
+  if (!SWIG_Python_UnpackTuple(args, "Cylinder_formfactor", 2, 2, swig_obj)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Cylinder, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HemiEllipsoid_formfactor" "', argument " "1"" of type '" "HemiEllipsoid const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Cylinder_formfactor" "', argument " "1"" of type '" "Cylinder const *""'"); 
   }
-  arg1 = reinterpret_cast< HemiEllipsoid * >(argp1);
+  arg1 = reinterpret_cast< Cylinder * >(argp1);
   {
     res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_Vec3T_std__complexT_double_t_t,  0  | 0);
     if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "HemiEllipsoid_formfactor" "', argument " "2"" of type '" "C3""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Cylinder_formfactor" "', argument " "2"" of type '" "C3""'"); 
     }  
     if (!argp2) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "HemiEllipsoid_formfactor" "', argument " "2"" of type '" "C3""'");
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Cylinder_formfactor" "', argument " "2"" of type '" "C3""'");
     } else {
       C3 * temp = reinterpret_cast< C3 * >(argp2);
       arg2 = *temp;
       if (SWIG_IsNewObj(res2)) delete temp;
     }
   }
-  result = ((HemiEllipsoid const *)arg1)->formfactor(arg2);
+  result = ((Cylinder const *)arg1)->formfactor(arg2);
   resultobj = SWIG_From_std_complex_Sl_double_Sg_(static_cast< std::complex<double> >(result));
   return resultobj;
 fail:
@@ -52865,9 +52969,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_HemiEllipsoid_validate(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Cylinder_validate(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  HemiEllipsoid *arg1 = (HemiEllipsoid *) 0 ;
+  Cylinder *arg1 = (Cylinder *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -52875,12 +52979,12 @@ SWIGINTERN PyObject *_wrap_HemiEllipsoid_validate(PyObject *self, PyObject *args
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HemiEllipsoid, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Cylinder, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HemiEllipsoid_validate" "', argument " "1"" of type '" "HemiEllipsoid const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Cylinder_validate" "', argument " "1"" of type '" "Cylinder const *""'"); 
   }
-  arg1 = reinterpret_cast< HemiEllipsoid * >(argp1);
-  result = ((HemiEllipsoid const *)arg1)->validate();
+  arg1 = reinterpret_cast< Cylinder * >(argp1);
+  result = ((Cylinder const *)arg1)->validate();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -52888,147 +52992,116 @@ fail:
 }
 
 
-SWIGINTERN PyObject *HemiEllipsoid_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_Cylinder(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  Cylinder *arg1 = (Cylinder *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Cylinder, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Cylinder" "', argument " "1"" of type '" "Cylinder *""'"); 
+  }
+  arg1 = reinterpret_cast< Cylinder * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *Cylinder_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
   if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_HemiEllipsoid, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_Cylinder, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *HemiEllipsoid_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *Cylinder_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   return SWIG_Python_InitShadowInstance(args);
 }
 
-SWIGINTERN PyObject *_wrap_new_HorizontalCylinder__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_EllipsoidalCylinder__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
   double arg2 ;
   double arg3 ;
-  double arg4 ;
   double val1 ;
   int ecode1 = 0 ;
   double val2 ;
   int ecode2 = 0 ;
   double val3 ;
   int ecode3 = 0 ;
-  double val4 ;
-  int ecode4 = 0 ;
-  HorizontalCylinder *result = 0 ;
+  EllipsoidalCylinder *result = 0 ;
   
-  if ((nobjs < 4) || (nobjs > 4)) SWIG_fail;
+  if ((nobjs < 3) || (nobjs > 3)) SWIG_fail;
   ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
   if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_HorizontalCylinder" "', argument " "1"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_EllipsoidalCylinder" "', argument " "1"" of type '" "double""'");
   } 
   arg1 = static_cast< double >(val1);
   ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
   if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_HorizontalCylinder" "', argument " "2"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_EllipsoidalCylinder" "', argument " "2"" of type '" "double""'");
   } 
   arg2 = static_cast< double >(val2);
   ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
   if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_HorizontalCylinder" "', argument " "3"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_EllipsoidalCylinder" "', argument " "3"" of type '" "double""'");
   } 
   arg3 = static_cast< double >(val3);
-  ecode4 = SWIG_AsVal_double(swig_obj[3], &val4);
-  if (!SWIG_IsOK(ecode4)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "new_HorizontalCylinder" "', argument " "4"" of type '" "double""'");
-  } 
-  arg4 = static_cast< double >(val4);
-  result = (HorizontalCylinder *)new HorizontalCylinder(arg1,arg2,arg3,arg4);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_HorizontalCylinder, SWIG_POINTER_NEW |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_new_HorizontalCylinder__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
-  PyObject *resultobj = 0;
-  double arg1 ;
-  double arg2 ;
-  double val1 ;
-  int ecode1 = 0 ;
-  double val2 ;
-  int ecode2 = 0 ;
-  HorizontalCylinder *result = 0 ;
-  
-  if ((nobjs < 2) || (nobjs > 2)) SWIG_fail;
-  ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
-  if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_HorizontalCylinder" "', argument " "1"" of type '" "double""'");
-  } 
-  arg1 = static_cast< double >(val1);
-  ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_HorizontalCylinder" "', argument " "2"" of type '" "double""'");
-  } 
-  arg2 = static_cast< double >(val2);
-  result = (HorizontalCylinder *)new HorizontalCylinder(arg1,arg2);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_HorizontalCylinder, SWIG_POINTER_NEW |  0 );
+  result = (EllipsoidalCylinder *)new EllipsoidalCylinder(arg1,arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_EllipsoidalCylinder, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_HorizontalCylinder__SWIG_2(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_EllipsoidalCylinder__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   std::vector< double,std::allocator< double > > arg1 ;
-  HorizontalCylinder *result = 0 ;
+  EllipsoidalCylinder *result = 0 ;
   
   if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
   {
     std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
     int res = swig::asptr(swig_obj[0], &ptr);
     if (!SWIG_IsOK(res) || !ptr) {
-      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_HorizontalCylinder" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
+      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_EllipsoidalCylinder" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
     }
     arg1 = *ptr;
     if (SWIG_IsNewObj(res)) delete ptr;
   }
-  result = (HorizontalCylinder *)new HorizontalCylinder(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_HorizontalCylinder, SWIG_POINTER_NEW |  0 );
+  result = (EllipsoidalCylinder *)new EllipsoidalCylinder(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_EllipsoidalCylinder, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_HorizontalCylinder(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_EllipsoidalCylinder(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
-  PyObject *argv[5] = {
+  PyObject *argv[4] = {
     0
   };
   
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_HorizontalCylinder", 0, 4, argv))) SWIG_fail;
+  if (!(argc = SWIG_Python_UnpackTuple(args, "new_EllipsoidalCylinder", 0, 3, argv))) SWIG_fail;
   --argc;
   if (argc == 1) {
     int _v = 0;
     int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
     _v = SWIG_CheckState(res);
     if (_v) {
-      return _wrap_new_HorizontalCylinder__SWIG_2(self, argc, argv);
-    }
-  }
-  if (argc == 2) {
-    int _v = 0;
-    {
-      int res = SWIG_AsVal_double(argv[0], NULL);
-      _v = SWIG_CheckState(res);
-    }
-    if (_v) {
-      {
-        int res = SWIG_AsVal_double(argv[1], NULL);
-        _v = SWIG_CheckState(res);
-      }
-      if (_v) {
-        return _wrap_new_HorizontalCylinder__SWIG_1(self, argc, argv);
-      }
+      return _wrap_new_EllipsoidalCylinder__SWIG_1(self, argc, argv);
     }
   }
-  if (argc == 4) {
+  if (argc == 3) {
     int _v = 0;
     {
       int res = SWIG_AsVal_double(argv[0], NULL);
@@ -53045,54 +53118,47 @@ SWIGINTERN PyObject *_wrap_new_HorizontalCylinder(PyObject *self, PyObject *args
           _v = SWIG_CheckState(res);
         }
         if (_v) {
-          {
-            int res = SWIG_AsVal_double(argv[3], NULL);
-            _v = SWIG_CheckState(res);
-          }
-          if (_v) {
-            return _wrap_new_HorizontalCylinder__SWIG_0(self, argc, argv);
-          }
+          return _wrap_new_EllipsoidalCylinder__SWIG_0(self, argc, argv);
         }
       }
     }
   }
   
 fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_HorizontalCylinder'.\n"
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_EllipsoidalCylinder'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    HorizontalCylinder::HorizontalCylinder(double,double,double,double)\n"
-    "    HorizontalCylinder::HorizontalCylinder(double,double)\n"
-    "    HorizontalCylinder::HorizontalCylinder(std::vector< double,std::allocator< double > >)\n");
+    "    EllipsoidalCylinder::EllipsoidalCylinder(double,double,double)\n"
+    "    EllipsoidalCylinder::EllipsoidalCylinder(std::vector< double,std::allocator< double > >)\n");
   return 0;
 }
 
 
-SWIGINTERN PyObject *_wrap_HorizontalCylinder_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_EllipsoidalCylinder_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  HorizontalCylinder *arg1 = (HorizontalCylinder *) 0 ;
+  EllipsoidalCylinder *arg1 = (EllipsoidalCylinder *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  HorizontalCylinder *result = 0 ;
+  EllipsoidalCylinder *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HorizontalCylinder, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_EllipsoidalCylinder, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HorizontalCylinder_clone" "', argument " "1"" of type '" "HorizontalCylinder const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "EllipsoidalCylinder_clone" "', argument " "1"" of type '" "EllipsoidalCylinder const *""'"); 
   }
-  arg1 = reinterpret_cast< HorizontalCylinder * >(argp1);
-  result = (HorizontalCylinder *)((HorizontalCylinder const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_HorizontalCylinder, 0 |  0 );
+  arg1 = reinterpret_cast< EllipsoidalCylinder * >(argp1);
+  result = (EllipsoidalCylinder *)((EllipsoidalCylinder const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_EllipsoidalCylinder, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_HorizontalCylinder_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_EllipsoidalCylinder_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  HorizontalCylinder *arg1 = (HorizontalCylinder *) 0 ;
+  EllipsoidalCylinder *arg1 = (EllipsoidalCylinder *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -53100,12 +53166,12 @@ SWIGINTERN PyObject *_wrap_HorizontalCylinder_className(PyObject *self, PyObject
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HorizontalCylinder, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_EllipsoidalCylinder, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HorizontalCylinder_className" "', argument " "1"" of type '" "HorizontalCylinder const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "EllipsoidalCylinder_className" "', argument " "1"" of type '" "EllipsoidalCylinder const *""'"); 
   }
-  arg1 = reinterpret_cast< HorizontalCylinder * >(argp1);
-  result = ((HorizontalCylinder const *)arg1)->className();
+  arg1 = reinterpret_cast< EllipsoidalCylinder * >(argp1);
+  result = ((EllipsoidalCylinder const *)arg1)->className();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -53113,9 +53179,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_HorizontalCylinder_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_EllipsoidalCylinder_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  HorizontalCylinder *arg1 = (HorizontalCylinder *) 0 ;
+  EllipsoidalCylinder *arg1 = (EllipsoidalCylinder *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -53123,12 +53189,12 @@ SWIGINTERN PyObject *_wrap_HorizontalCylinder_parDefs(PyObject *self, PyObject *
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HorizontalCylinder, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_EllipsoidalCylinder, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HorizontalCylinder_parDefs" "', argument " "1"" of type '" "HorizontalCylinder const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "EllipsoidalCylinder_parDefs" "', argument " "1"" of type '" "EllipsoidalCylinder const *""'"); 
   }
-  arg1 = reinterpret_cast< HorizontalCylinder * >(argp1);
-  result = ((HorizontalCylinder const *)arg1)->parDefs();
+  arg1 = reinterpret_cast< EllipsoidalCylinder * >(argp1);
+  result = ((EllipsoidalCylinder const *)arg1)->parDefs();
   resultobj = SWIG_NewPointerObj((new std::vector< ParaMeta,std::allocator< ParaMeta > >(result)), SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
@@ -53136,9 +53202,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_HorizontalCylinder_length(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_EllipsoidalCylinder_radiusX(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  HorizontalCylinder *arg1 = (HorizontalCylinder *) 0 ;
+  EllipsoidalCylinder *arg1 = (EllipsoidalCylinder *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -53146,35 +53212,12 @@ SWIGINTERN PyObject *_wrap_HorizontalCylinder_length(PyObject *self, PyObject *a
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HorizontalCylinder, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_EllipsoidalCylinder, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HorizontalCylinder_length" "', argument " "1"" of type '" "HorizontalCylinder const *""'"); 
-  }
-  arg1 = reinterpret_cast< HorizontalCylinder * >(argp1);
-  result = (double)((HorizontalCylinder const *)arg1)->length();
-  resultobj = SWIG_From_double(static_cast< double >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_HorizontalCylinder_radius(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  HorizontalCylinder *arg1 = (HorizontalCylinder *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  double result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HorizontalCylinder, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HorizontalCylinder_radius" "', argument " "1"" of type '" "HorizontalCylinder const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "EllipsoidalCylinder_radiusX" "', argument " "1"" of type '" "EllipsoidalCylinder const *""'"); 
   }
-  arg1 = reinterpret_cast< HorizontalCylinder * >(argp1);
-  result = (double)((HorizontalCylinder const *)arg1)->radius();
+  arg1 = reinterpret_cast< EllipsoidalCylinder * >(argp1);
+  result = (double)((EllipsoidalCylinder const *)arg1)->radiusX();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -53182,9 +53225,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_HorizontalCylinder_slice_bottom(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_EllipsoidalCylinder_radiusY(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  HorizontalCylinder *arg1 = (HorizontalCylinder *) 0 ;
+  EllipsoidalCylinder *arg1 = (EllipsoidalCylinder *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -53192,12 +53235,12 @@ SWIGINTERN PyObject *_wrap_HorizontalCylinder_slice_bottom(PyObject *self, PyObj
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HorizontalCylinder, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_EllipsoidalCylinder, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HorizontalCylinder_slice_bottom" "', argument " "1"" of type '" "HorizontalCylinder const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "EllipsoidalCylinder_radiusY" "', argument " "1"" of type '" "EllipsoidalCylinder const *""'"); 
   }
-  arg1 = reinterpret_cast< HorizontalCylinder * >(argp1);
-  result = (double)((HorizontalCylinder const *)arg1)->slice_bottom();
+  arg1 = reinterpret_cast< EllipsoidalCylinder * >(argp1);
+  result = (double)((EllipsoidalCylinder const *)arg1)->radiusY();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -53205,9 +53248,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_HorizontalCylinder_slice_top(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_EllipsoidalCylinder_height(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  HorizontalCylinder *arg1 = (HorizontalCylinder *) 0 ;
+  EllipsoidalCylinder *arg1 = (EllipsoidalCylinder *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -53215,12 +53258,12 @@ SWIGINTERN PyObject *_wrap_HorizontalCylinder_slice_top(PyObject *self, PyObject
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HorizontalCylinder, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_EllipsoidalCylinder, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HorizontalCylinder_slice_top" "', argument " "1"" of type '" "HorizontalCylinder const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "EllipsoidalCylinder_height" "', argument " "1"" of type '" "EllipsoidalCylinder const *""'"); 
   }
-  arg1 = reinterpret_cast< HorizontalCylinder * >(argp1);
-  result = (double)((HorizontalCylinder const *)arg1)->slice_top();
+  arg1 = reinterpret_cast< EllipsoidalCylinder * >(argp1);
+  result = (double)((EllipsoidalCylinder const *)arg1)->height();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -53228,9 +53271,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_HorizontalCylinder_radialExtension(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_EllipsoidalCylinder_radialExtension(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  HorizontalCylinder *arg1 = (HorizontalCylinder *) 0 ;
+  EllipsoidalCylinder *arg1 = (EllipsoidalCylinder *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -53238,12 +53281,12 @@ SWIGINTERN PyObject *_wrap_HorizontalCylinder_radialExtension(PyObject *self, Py
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HorizontalCylinder, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_EllipsoidalCylinder, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HorizontalCylinder_radialExtension" "', argument " "1"" of type '" "HorizontalCylinder const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "EllipsoidalCylinder_radialExtension" "', argument " "1"" of type '" "EllipsoidalCylinder const *""'"); 
   }
-  arg1 = reinterpret_cast< HorizontalCylinder * >(argp1);
-  result = (double)((HorizontalCylinder const *)arg1)->radialExtension();
+  arg1 = reinterpret_cast< EllipsoidalCylinder * >(argp1);
+  result = (double)((EllipsoidalCylinder const *)arg1)->radialExtension();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -53251,9 +53294,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_HorizontalCylinder_formfactor(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_EllipsoidalCylinder_formfactor(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  HorizontalCylinder *arg1 = (HorizontalCylinder *) 0 ;
+  EllipsoidalCylinder *arg1 = (EllipsoidalCylinder *) 0 ;
   C3 arg2 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
@@ -53262,26 +53305,26 @@ SWIGINTERN PyObject *_wrap_HorizontalCylinder_formfactor(PyObject *self, PyObjec
   PyObject *swig_obj[2] ;
   complex_t result;
   
-  if (!SWIG_Python_UnpackTuple(args, "HorizontalCylinder_formfactor", 2, 2, swig_obj)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HorizontalCylinder, 0 |  0 );
+  if (!SWIG_Python_UnpackTuple(args, "EllipsoidalCylinder_formfactor", 2, 2, swig_obj)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_EllipsoidalCylinder, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HorizontalCylinder_formfactor" "', argument " "1"" of type '" "HorizontalCylinder const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "EllipsoidalCylinder_formfactor" "', argument " "1"" of type '" "EllipsoidalCylinder const *""'"); 
   }
-  arg1 = reinterpret_cast< HorizontalCylinder * >(argp1);
+  arg1 = reinterpret_cast< EllipsoidalCylinder * >(argp1);
   {
     res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_Vec3T_std__complexT_double_t_t,  0  | 0);
     if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "HorizontalCylinder_formfactor" "', argument " "2"" of type '" "C3""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "EllipsoidalCylinder_formfactor" "', argument " "2"" of type '" "C3""'"); 
     }  
     if (!argp2) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "HorizontalCylinder_formfactor" "', argument " "2"" of type '" "C3""'");
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "EllipsoidalCylinder_formfactor" "', argument " "2"" of type '" "C3""'");
     } else {
       C3 * temp = reinterpret_cast< C3 * >(argp2);
       arg2 = *temp;
       if (SWIG_IsNewObj(res2)) delete temp;
     }
   }
-  result = ((HorizontalCylinder const *)arg1)->formfactor(arg2);
+  result = ((EllipsoidalCylinder const *)arg1)->formfactor(arg2);
   resultobj = SWIG_From_std_complex_Sl_double_Sg_(static_cast< std::complex<double> >(result));
   return resultobj;
 fail:
@@ -53289,9 +53332,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_HorizontalCylinder_validate(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_EllipsoidalCylinder_validate(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  HorizontalCylinder *arg1 = (HorizontalCylinder *) 0 ;
+  EllipsoidalCylinder *arg1 = (EllipsoidalCylinder *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -53299,12 +53342,12 @@ SWIGINTERN PyObject *_wrap_HorizontalCylinder_validate(PyObject *self, PyObject
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HorizontalCylinder, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_EllipsoidalCylinder, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HorizontalCylinder_validate" "', argument " "1"" of type '" "HorizontalCylinder const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "EllipsoidalCylinder_validate" "', argument " "1"" of type '" "EllipsoidalCylinder const *""'"); 
   }
-  arg1 = reinterpret_cast< HorizontalCylinder * >(argp1);
-  result = ((HorizontalCylinder const *)arg1)->validate();
+  arg1 = reinterpret_cast< EllipsoidalCylinder * >(argp1);
+  result = ((EllipsoidalCylinder const *)arg1)->validate();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -53312,20 +53355,20 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_HorizontalCylinder(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_EllipsoidalCylinder(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  HorizontalCylinder *arg1 = (HorizontalCylinder *) 0 ;
+  EllipsoidalCylinder *arg1 = (EllipsoidalCylinder *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HorizontalCylinder, SWIG_POINTER_DISOWN |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_EllipsoidalCylinder, SWIG_POINTER_DISOWN |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_HorizontalCylinder" "', argument " "1"" of type '" "HorizontalCylinder *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_EllipsoidalCylinder" "', argument " "1"" of type '" "EllipsoidalCylinder *""'"); 
   }
-  arg1 = reinterpret_cast< HorizontalCylinder * >(argp1);
+  arg1 = reinterpret_cast< EllipsoidalCylinder * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -53334,299 +53377,510 @@ fail:
 }
 
 
-SWIGINTERN PyObject *HorizontalCylinder_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *EllipsoidalCylinder_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
   if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_HorizontalCylinder, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_EllipsoidalCylinder, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *HorizontalCylinder_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *EllipsoidalCylinder_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   return SWIG_Python_InitShadowInstance(args);
 }
 
-SWIGINTERN PyObject *_wrap_new_Icosahedron__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_HemiEllipsoid__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
+  double arg2 ;
+  double arg3 ;
   double val1 ;
   int ecode1 = 0 ;
-  Icosahedron *result = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  HemiEllipsoid *result = 0 ;
   
-  if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
+  if ((nobjs < 3) || (nobjs > 3)) SWIG_fail;
   ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
   if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_Icosahedron" "', argument " "1"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_HemiEllipsoid" "', argument " "1"" of type '" "double""'");
   } 
   arg1 = static_cast< double >(val1);
-  result = (Icosahedron *)new Icosahedron(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Icosahedron, SWIG_POINTER_NEW |  0 );
+  ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_HemiEllipsoid" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_HemiEllipsoid" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  result = (HemiEllipsoid *)new HemiEllipsoid(arg1,arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_HemiEllipsoid, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_Icosahedron__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_HemiEllipsoid__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   std::vector< double,std::allocator< double > > arg1 ;
-  Icosahedron *result = 0 ;
+  HemiEllipsoid *result = 0 ;
   
   if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
   {
     std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
     int res = swig::asptr(swig_obj[0], &ptr);
     if (!SWIG_IsOK(res) || !ptr) {
-      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_Icosahedron" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
+      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_HemiEllipsoid" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
     }
     arg1 = *ptr;
     if (SWIG_IsNewObj(res)) delete ptr;
   }
-  result = (Icosahedron *)new Icosahedron(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Icosahedron, SWIG_POINTER_NEW |  0 );
+  result = (HemiEllipsoid *)new HemiEllipsoid(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_HemiEllipsoid, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_Icosahedron(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_HemiEllipsoid(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
-  PyObject *argv[2] = {
+  PyObject *argv[4] = {
     0
   };
   
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_Icosahedron", 0, 1, argv))) SWIG_fail;
+  if (!(argc = SWIG_Python_UnpackTuple(args, "new_HemiEllipsoid", 0, 3, argv))) SWIG_fail;
   --argc;
   if (argc == 1) {
     int _v = 0;
-    {
-      int res = SWIG_AsVal_double(argv[0], NULL);
-      _v = SWIG_CheckState(res);
-    }
+    int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
+    _v = SWIG_CheckState(res);
     if (_v) {
-      return _wrap_new_Icosahedron__SWIG_0(self, argc, argv);
+      return _wrap_new_HemiEllipsoid__SWIG_1(self, argc, argv);
     }
   }
-  if (argc == 1) {
+  if (argc == 3) {
     int _v = 0;
-    int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
-    _v = SWIG_CheckState(res);
+    {
+      int res = SWIG_AsVal_double(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
     if (_v) {
-      return _wrap_new_Icosahedron__SWIG_1(self, argc, argv);
+      {
+        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_HemiEllipsoid__SWIG_0(self, argc, argv);
+        }
+      }
     }
   }
   
 fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_Icosahedron'.\n"
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_HemiEllipsoid'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    Icosahedron::Icosahedron(double)\n"
-    "    Icosahedron::Icosahedron(std::vector< double,std::allocator< double > >)\n");
+    "    HemiEllipsoid::HemiEllipsoid(double,double,double)\n"
+    "    HemiEllipsoid::HemiEllipsoid(std::vector< double,std::allocator< double > >)\n");
   return 0;
 }
 
 
-SWIGINTERN PyObject *_wrap_Icosahedron_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_HemiEllipsoid(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Icosahedron *arg1 = (Icosahedron *) 0 ;
+  HemiEllipsoid *arg1 = (HemiEllipsoid *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  Icosahedron *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Icosahedron, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HemiEllipsoid, SWIG_POINTER_DISOWN |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Icosahedron_clone" "', argument " "1"" of type '" "Icosahedron const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_HemiEllipsoid" "', argument " "1"" of type '" "HemiEllipsoid *""'"); 
   }
-  arg1 = reinterpret_cast< Icosahedron * >(argp1);
-  result = (Icosahedron *)((Icosahedron const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Icosahedron, 0 |  0 );
+  arg1 = reinterpret_cast< HemiEllipsoid * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Icosahedron_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_HemiEllipsoid_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Icosahedron *arg1 = (Icosahedron *) 0 ;
+  HemiEllipsoid *arg1 = (HemiEllipsoid *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  std::string result;
+  HemiEllipsoid *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Icosahedron, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HemiEllipsoid, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Icosahedron_className" "', argument " "1"" of type '" "Icosahedron const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HemiEllipsoid_clone" "', argument " "1"" of type '" "HemiEllipsoid const *""'"); 
   }
-  arg1 = reinterpret_cast< Icosahedron * >(argp1);
-  result = ((Icosahedron const *)arg1)->className();
-  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  arg1 = reinterpret_cast< HemiEllipsoid * >(argp1);
+  result = (HemiEllipsoid *)((HemiEllipsoid const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_HemiEllipsoid, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Icosahedron_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_HemiEllipsoid_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Icosahedron *arg1 = (Icosahedron *) 0 ;
+  HemiEllipsoid *arg1 = (HemiEllipsoid *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  SwigValueWrapper< std::vector< ParaMeta,std::allocator< ParaMeta > > > result;
+  std::string result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Icosahedron, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HemiEllipsoid, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Icosahedron_parDefs" "', argument " "1"" of type '" "Icosahedron const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HemiEllipsoid_className" "', argument " "1"" of type '" "HemiEllipsoid const *""'"); 
   }
-  arg1 = reinterpret_cast< Icosahedron * >(argp1);
-  result = ((Icosahedron const *)arg1)->parDefs();
-  resultobj = SWIG_NewPointerObj((new std::vector< ParaMeta,std::allocator< ParaMeta > >(result)), SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, SWIG_POINTER_OWN |  0 );
+  arg1 = reinterpret_cast< HemiEllipsoid * >(argp1);
+  result = ((HemiEllipsoid const *)arg1)->className();
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Icosahedron_edge(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_HemiEllipsoid_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Icosahedron *arg1 = (Icosahedron *) 0 ;
+  HemiEllipsoid *arg1 = (HemiEllipsoid *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  double result;
+  SwigValueWrapper< std::vector< ParaMeta,std::allocator< ParaMeta > > > result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Icosahedron, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HemiEllipsoid, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Icosahedron_edge" "', argument " "1"" of type '" "Icosahedron const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HemiEllipsoid_parDefs" "', argument " "1"" of type '" "HemiEllipsoid const *""'"); 
   }
-  arg1 = reinterpret_cast< Icosahedron * >(argp1);
-  result = (double)((Icosahedron const *)arg1)->edge();
-  resultobj = SWIG_From_double(static_cast< double >(result));
+  arg1 = reinterpret_cast< HemiEllipsoid * >(argp1);
+  result = ((HemiEllipsoid const *)arg1)->parDefs();
+  resultobj = SWIG_NewPointerObj((new std::vector< ParaMeta,std::allocator< ParaMeta > >(result)), SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_Icosahedron(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_HemiEllipsoid_height(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Icosahedron *arg1 = (Icosahedron *) 0 ;
+  HemiEllipsoid *arg1 = (HemiEllipsoid *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
+  double result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Icosahedron, SWIG_POINTER_DISOWN |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HemiEllipsoid, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Icosahedron" "', argument " "1"" of type '" "Icosahedron *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HemiEllipsoid_height" "', argument " "1"" of type '" "HemiEllipsoid const *""'"); 
   }
-  arg1 = reinterpret_cast< Icosahedron * >(argp1);
-  delete arg1;
-  resultobj = SWIG_Py_Void();
+  arg1 = reinterpret_cast< HemiEllipsoid * >(argp1);
+  result = (double)((HemiEllipsoid const *)arg1)->height();
+  resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *Icosahedron_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_HemiEllipsoid_radiusX(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  HemiEllipsoid *arg1 = (HemiEllipsoid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  double result;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HemiEllipsoid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HemiEllipsoid_radiusX" "', argument " "1"" of type '" "HemiEllipsoid const *""'"); 
+  }
+  arg1 = reinterpret_cast< HemiEllipsoid * >(argp1);
+  result = (double)((HemiEllipsoid const *)arg1)->radiusX();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_HemiEllipsoid_radiusY(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  HemiEllipsoid *arg1 = (HemiEllipsoid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  double result;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HemiEllipsoid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HemiEllipsoid_radiusY" "', argument " "1"" of type '" "HemiEllipsoid const *""'"); 
+  }
+  arg1 = reinterpret_cast< HemiEllipsoid * >(argp1);
+  result = (double)((HemiEllipsoid const *)arg1)->radiusY();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_HemiEllipsoid_radialExtension(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  HemiEllipsoid *arg1 = (HemiEllipsoid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  double result;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HemiEllipsoid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HemiEllipsoid_radialExtension" "', argument " "1"" of type '" "HemiEllipsoid const *""'"); 
+  }
+  arg1 = reinterpret_cast< HemiEllipsoid * >(argp1);
+  result = (double)((HemiEllipsoid const *)arg1)->radialExtension();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_HemiEllipsoid_formfactor(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  HemiEllipsoid *arg1 = (HemiEllipsoid *) 0 ;
+  C3 arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  complex_t result;
+  
+  if (!SWIG_Python_UnpackTuple(args, "HemiEllipsoid_formfactor", 2, 2, swig_obj)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HemiEllipsoid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HemiEllipsoid_formfactor" "', argument " "1"" of type '" "HemiEllipsoid const *""'"); 
+  }
+  arg1 = reinterpret_cast< HemiEllipsoid * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_Vec3T_std__complexT_double_t_t,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "HemiEllipsoid_formfactor" "', argument " "2"" of type '" "C3""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "HemiEllipsoid_formfactor" "', argument " "2"" of type '" "C3""'");
+    } else {
+      C3 * temp = reinterpret_cast< C3 * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  result = ((HemiEllipsoid const *)arg1)->formfactor(arg2);
+  resultobj = SWIG_From_std_complex_Sl_double_Sg_(static_cast< std::complex<double> >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_HemiEllipsoid_validate(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  HemiEllipsoid *arg1 = (HemiEllipsoid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  std::string result;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HemiEllipsoid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HemiEllipsoid_validate" "', argument " "1"" of type '" "HemiEllipsoid const *""'"); 
+  }
+  arg1 = reinterpret_cast< HemiEllipsoid * >(argp1);
+  result = ((HemiEllipsoid const *)arg1)->validate();
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *HemiEllipsoid_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
   if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_Icosahedron, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_HemiEllipsoid, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *Icosahedron_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *HemiEllipsoid_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   return SWIG_Python_InitShadowInstance(args);
 }
 
-SWIGINTERN PyObject *_wrap_new_LongBoxGauss__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_HorizontalCylinder__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
   double arg2 ;
   double arg3 ;
+  double arg4 ;
   double val1 ;
   int ecode1 = 0 ;
   double val2 ;
   int ecode2 = 0 ;
   double val3 ;
   int ecode3 = 0 ;
-  LongBoxGauss *result = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  HorizontalCylinder *result = 0 ;
   
-  if ((nobjs < 3) || (nobjs > 3)) SWIG_fail;
+  if ((nobjs < 4) || (nobjs > 4)) SWIG_fail;
   ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
   if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_LongBoxGauss" "', argument " "1"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_HorizontalCylinder" "', argument " "1"" of type '" "double""'");
   } 
   arg1 = static_cast< double >(val1);
   ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
   if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_LongBoxGauss" "', argument " "2"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_HorizontalCylinder" "', argument " "2"" of type '" "double""'");
   } 
   arg2 = static_cast< double >(val2);
   ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
   if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_LongBoxGauss" "', argument " "3"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_HorizontalCylinder" "', argument " "3"" of type '" "double""'");
   } 
   arg3 = static_cast< double >(val3);
-  result = (LongBoxGauss *)new LongBoxGauss(arg1,arg2,arg3);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_LongBoxGauss, SWIG_POINTER_NEW |  0 );
+  ecode4 = SWIG_AsVal_double(swig_obj[3], &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "new_HorizontalCylinder" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  result = (HorizontalCylinder *)new HorizontalCylinder(arg1,arg2,arg3,arg4);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_HorizontalCylinder, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_LongBoxGauss__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_HorizontalCylinder__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  double arg1 ;
+  double arg2 ;
+  double val1 ;
+  int ecode1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  HorizontalCylinder *result = 0 ;
+  
+  if ((nobjs < 2) || (nobjs > 2)) SWIG_fail;
+  ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_HorizontalCylinder" "', argument " "1"" of type '" "double""'");
+  } 
+  arg1 = static_cast< double >(val1);
+  ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_HorizontalCylinder" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (HorizontalCylinder *)new HorizontalCylinder(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_HorizontalCylinder, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_HorizontalCylinder__SWIG_2(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   std::vector< double,std::allocator< double > > arg1 ;
-  LongBoxGauss *result = 0 ;
+  HorizontalCylinder *result = 0 ;
   
   if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
   {
     std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
     int res = swig::asptr(swig_obj[0], &ptr);
     if (!SWIG_IsOK(res) || !ptr) {
-      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_LongBoxGauss" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
+      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_HorizontalCylinder" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
     }
     arg1 = *ptr;
     if (SWIG_IsNewObj(res)) delete ptr;
   }
-  result = (LongBoxGauss *)new LongBoxGauss(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_LongBoxGauss, SWIG_POINTER_NEW |  0 );
+  result = (HorizontalCylinder *)new HorizontalCylinder(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_HorizontalCylinder, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_LongBoxGauss(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_HorizontalCylinder(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
-  PyObject *argv[4] = {
+  PyObject *argv[5] = {
     0
   };
   
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_LongBoxGauss", 0, 3, argv))) SWIG_fail;
+  if (!(argc = SWIG_Python_UnpackTuple(args, "new_HorizontalCylinder", 0, 4, argv))) SWIG_fail;
   --argc;
   if (argc == 1) {
     int _v = 0;
     int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
     _v = SWIG_CheckState(res);
     if (_v) {
-      return _wrap_new_LongBoxGauss__SWIG_1(self, argc, argv);
+      return _wrap_new_HorizontalCylinder__SWIG_2(self, argc, argv);
     }
   }
-  if (argc == 3) {
+  if (argc == 2) {
+    int _v = 0;
+    {
+      int res = SWIG_AsVal_double(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_new_HorizontalCylinder__SWIG_1(self, argc, argv);
+      }
+    }
+  }
+  if (argc == 4) {
     int _v = 0;
     {
       int res = SWIG_AsVal_double(argv[0], NULL);
@@ -53643,47 +53897,54 @@ SWIGINTERN PyObject *_wrap_new_LongBoxGauss(PyObject *self, PyObject *args) {
           _v = SWIG_CheckState(res);
         }
         if (_v) {
-          return _wrap_new_LongBoxGauss__SWIG_0(self, argc, argv);
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_new_HorizontalCylinder__SWIG_0(self, argc, argv);
+          }
         }
       }
     }
   }
   
 fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_LongBoxGauss'.\n"
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_HorizontalCylinder'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    LongBoxGauss::LongBoxGauss(double,double,double)\n"
-    "    LongBoxGauss::LongBoxGauss(std::vector< double,std::allocator< double > >)\n");
+    "    HorizontalCylinder::HorizontalCylinder(double,double,double,double)\n"
+    "    HorizontalCylinder::HorizontalCylinder(double,double)\n"
+    "    HorizontalCylinder::HorizontalCylinder(std::vector< double,std::allocator< double > >)\n");
   return 0;
 }
 
 
-SWIGINTERN PyObject *_wrap_LongBoxGauss_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_HorizontalCylinder_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  LongBoxGauss *arg1 = (LongBoxGauss *) 0 ;
+  HorizontalCylinder *arg1 = (HorizontalCylinder *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  LongBoxGauss *result = 0 ;
+  HorizontalCylinder *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_LongBoxGauss, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HorizontalCylinder, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LongBoxGauss_clone" "', argument " "1"" of type '" "LongBoxGauss const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HorizontalCylinder_clone" "', argument " "1"" of type '" "HorizontalCylinder const *""'"); 
   }
-  arg1 = reinterpret_cast< LongBoxGauss * >(argp1);
-  result = (LongBoxGauss *)((LongBoxGauss const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_LongBoxGauss, 0 |  0 );
+  arg1 = reinterpret_cast< HorizontalCylinder * >(argp1);
+  result = (HorizontalCylinder *)((HorizontalCylinder const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_HorizontalCylinder, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_LongBoxGauss_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_HorizontalCylinder_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  LongBoxGauss *arg1 = (LongBoxGauss *) 0 ;
+  HorizontalCylinder *arg1 = (HorizontalCylinder *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -53691,12 +53952,12 @@ SWIGINTERN PyObject *_wrap_LongBoxGauss_className(PyObject *self, PyObject *args
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_LongBoxGauss, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HorizontalCylinder, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LongBoxGauss_className" "', argument " "1"" of type '" "LongBoxGauss const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HorizontalCylinder_className" "', argument " "1"" of type '" "HorizontalCylinder const *""'"); 
   }
-  arg1 = reinterpret_cast< LongBoxGauss * >(argp1);
-  result = ((LongBoxGauss const *)arg1)->className();
+  arg1 = reinterpret_cast< HorizontalCylinder * >(argp1);
+  result = ((HorizontalCylinder const *)arg1)->className();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -53704,9 +53965,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_LongBoxGauss_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_HorizontalCylinder_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  LongBoxGauss *arg1 = (LongBoxGauss *) 0 ;
+  HorizontalCylinder *arg1 = (HorizontalCylinder *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -53714,12 +53975,12 @@ SWIGINTERN PyObject *_wrap_LongBoxGauss_parDefs(PyObject *self, PyObject *args)
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_LongBoxGauss, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HorizontalCylinder, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LongBoxGauss_parDefs" "', argument " "1"" of type '" "LongBoxGauss const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HorizontalCylinder_parDefs" "', argument " "1"" of type '" "HorizontalCylinder const *""'"); 
   }
-  arg1 = reinterpret_cast< LongBoxGauss * >(argp1);
-  result = ((LongBoxGauss const *)arg1)->parDefs();
+  arg1 = reinterpret_cast< HorizontalCylinder * >(argp1);
+  result = ((HorizontalCylinder const *)arg1)->parDefs();
   resultobj = SWIG_NewPointerObj((new std::vector< ParaMeta,std::allocator< ParaMeta > >(result)), SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
@@ -53727,9 +53988,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_LongBoxGauss_length(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_HorizontalCylinder_length(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  LongBoxGauss *arg1 = (LongBoxGauss *) 0 ;
+  HorizontalCylinder *arg1 = (HorizontalCylinder *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -53737,12 +53998,12 @@ SWIGINTERN PyObject *_wrap_LongBoxGauss_length(PyObject *self, PyObject *args) {
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_LongBoxGauss, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HorizontalCylinder, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LongBoxGauss_length" "', argument " "1"" of type '" "LongBoxGauss const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HorizontalCylinder_length" "', argument " "1"" of type '" "HorizontalCylinder const *""'"); 
   }
-  arg1 = reinterpret_cast< LongBoxGauss * >(argp1);
-  result = (double)((LongBoxGauss const *)arg1)->length();
+  arg1 = reinterpret_cast< HorizontalCylinder * >(argp1);
+  result = (double)((HorizontalCylinder const *)arg1)->length();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -53750,9 +54011,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_LongBoxGauss_height(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_HorizontalCylinder_radius(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  LongBoxGauss *arg1 = (LongBoxGauss *) 0 ;
+  HorizontalCylinder *arg1 = (HorizontalCylinder *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -53760,12 +54021,12 @@ SWIGINTERN PyObject *_wrap_LongBoxGauss_height(PyObject *self, PyObject *args) {
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_LongBoxGauss, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HorizontalCylinder, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LongBoxGauss_height" "', argument " "1"" of type '" "LongBoxGauss const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HorizontalCylinder_radius" "', argument " "1"" of type '" "HorizontalCylinder const *""'"); 
   }
-  arg1 = reinterpret_cast< LongBoxGauss * >(argp1);
-  result = (double)((LongBoxGauss const *)arg1)->height();
+  arg1 = reinterpret_cast< HorizontalCylinder * >(argp1);
+  result = (double)((HorizontalCylinder const *)arg1)->radius();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -53773,9 +54034,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_LongBoxGauss_width(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_HorizontalCylinder_slice_bottom(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  LongBoxGauss *arg1 = (LongBoxGauss *) 0 ;
+  HorizontalCylinder *arg1 = (HorizontalCylinder *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -53783,12 +54044,12 @@ SWIGINTERN PyObject *_wrap_LongBoxGauss_width(PyObject *self, PyObject *args) {
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_LongBoxGauss, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HorizontalCylinder, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LongBoxGauss_width" "', argument " "1"" of type '" "LongBoxGauss const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HorizontalCylinder_slice_bottom" "', argument " "1"" of type '" "HorizontalCylinder const *""'"); 
   }
-  arg1 = reinterpret_cast< LongBoxGauss * >(argp1);
-  result = (double)((LongBoxGauss const *)arg1)->width();
+  arg1 = reinterpret_cast< HorizontalCylinder * >(argp1);
+  result = (double)((HorizontalCylinder const *)arg1)->slice_bottom();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -53796,9 +54057,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_LongBoxGauss_radialExtension(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_HorizontalCylinder_slice_top(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  LongBoxGauss *arg1 = (LongBoxGauss *) 0 ;
+  HorizontalCylinder *arg1 = (HorizontalCylinder *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -53806,12 +54067,12 @@ SWIGINTERN PyObject *_wrap_LongBoxGauss_radialExtension(PyObject *self, PyObject
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_LongBoxGauss, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HorizontalCylinder, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LongBoxGauss_radialExtension" "', argument " "1"" of type '" "LongBoxGauss const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HorizontalCylinder_slice_top" "', argument " "1"" of type '" "HorizontalCylinder const *""'"); 
   }
-  arg1 = reinterpret_cast< LongBoxGauss * >(argp1);
-  result = (double)((LongBoxGauss const *)arg1)->radialExtension();
+  arg1 = reinterpret_cast< HorizontalCylinder * >(argp1);
+  result = (double)((HorizontalCylinder const *)arg1)->slice_top();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -53819,9 +54080,32 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_LongBoxGauss_formfactor(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_HorizontalCylinder_radialExtension(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  LongBoxGauss *arg1 = (LongBoxGauss *) 0 ;
+  HorizontalCylinder *arg1 = (HorizontalCylinder *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  double result;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HorizontalCylinder, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HorizontalCylinder_radialExtension" "', argument " "1"" of type '" "HorizontalCylinder const *""'"); 
+  }
+  arg1 = reinterpret_cast< HorizontalCylinder * >(argp1);
+  result = (double)((HorizontalCylinder const *)arg1)->radialExtension();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_HorizontalCylinder_formfactor(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  HorizontalCylinder *arg1 = (HorizontalCylinder *) 0 ;
   C3 arg2 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
@@ -53830,26 +54114,26 @@ SWIGINTERN PyObject *_wrap_LongBoxGauss_formfactor(PyObject *self, PyObject *arg
   PyObject *swig_obj[2] ;
   complex_t result;
   
-  if (!SWIG_Python_UnpackTuple(args, "LongBoxGauss_formfactor", 2, 2, swig_obj)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_LongBoxGauss, 0 |  0 );
+  if (!SWIG_Python_UnpackTuple(args, "HorizontalCylinder_formfactor", 2, 2, swig_obj)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HorizontalCylinder, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LongBoxGauss_formfactor" "', argument " "1"" of type '" "LongBoxGauss const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HorizontalCylinder_formfactor" "', argument " "1"" of type '" "HorizontalCylinder const *""'"); 
   }
-  arg1 = reinterpret_cast< LongBoxGauss * >(argp1);
+  arg1 = reinterpret_cast< HorizontalCylinder * >(argp1);
   {
     res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_Vec3T_std__complexT_double_t_t,  0  | 0);
     if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "LongBoxGauss_formfactor" "', argument " "2"" of type '" "C3""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "HorizontalCylinder_formfactor" "', argument " "2"" of type '" "C3""'"); 
     }  
     if (!argp2) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "LongBoxGauss_formfactor" "', argument " "2"" of type '" "C3""'");
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "HorizontalCylinder_formfactor" "', argument " "2"" of type '" "C3""'");
     } else {
       C3 * temp = reinterpret_cast< C3 * >(argp2);
       arg2 = *temp;
       if (SWIG_IsNewObj(res2)) delete temp;
     }
   }
-  result = ((LongBoxGauss const *)arg1)->formfactor(arg2);
+  result = ((HorizontalCylinder const *)arg1)->formfactor(arg2);
   resultobj = SWIG_From_std_complex_Sl_double_Sg_(static_cast< std::complex<double> >(result));
   return resultobj;
 fail:
@@ -53857,9 +54141,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_LongBoxGauss_validate(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_HorizontalCylinder_validate(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  LongBoxGauss *arg1 = (LongBoxGauss *) 0 ;
+  HorizontalCylinder *arg1 = (HorizontalCylinder *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -53867,12 +54151,12 @@ SWIGINTERN PyObject *_wrap_LongBoxGauss_validate(PyObject *self, PyObject *args)
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_LongBoxGauss, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HorizontalCylinder, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LongBoxGauss_validate" "', argument " "1"" of type '" "LongBoxGauss const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HorizontalCylinder_validate" "', argument " "1"" of type '" "HorizontalCylinder const *""'"); 
   }
-  arg1 = reinterpret_cast< LongBoxGauss * >(argp1);
-  result = ((LongBoxGauss const *)arg1)->validate();
+  arg1 = reinterpret_cast< HorizontalCylinder * >(argp1);
+  result = ((HorizontalCylinder const *)arg1)->validate();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -53880,20 +54164,20 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_LongBoxGauss(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_HorizontalCylinder(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  LongBoxGauss *arg1 = (LongBoxGauss *) 0 ;
+  HorizontalCylinder *arg1 = (HorizontalCylinder *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_LongBoxGauss, SWIG_POINTER_DISOWN |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HorizontalCylinder, SWIG_POINTER_DISOWN |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_LongBoxGauss" "', argument " "1"" of type '" "LongBoxGauss *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_HorizontalCylinder" "', argument " "1"" of type '" "HorizontalCylinder *""'"); 
   }
-  arg1 = reinterpret_cast< LongBoxGauss * >(argp1);
+  arg1 = reinterpret_cast< HorizontalCylinder * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -53902,94 +54186,148 @@ fail:
 }
 
 
-SWIGINTERN PyObject *LongBoxGauss_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *HorizontalCylinder_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
   if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_LongBoxGauss, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_HorizontalCylinder, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *LongBoxGauss_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *HorizontalCylinder_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   return SWIG_Python_InitShadowInstance(args);
 }
 
-SWIGINTERN PyObject *_wrap_new_LongBoxLorentz__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_Sphere__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
-  double arg2 ;
-  double arg3 ;
+  bool arg2 ;
   double val1 ;
   int ecode1 = 0 ;
-  double val2 ;
+  bool val2 ;
   int ecode2 = 0 ;
-  double val3 ;
-  int ecode3 = 0 ;
-  LongBoxLorentz *result = 0 ;
+  Sphere *result = 0 ;
   
-  if ((nobjs < 3) || (nobjs > 3)) SWIG_fail;
+  if ((nobjs < 2) || (nobjs > 2)) SWIG_fail;
   ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
   if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_LongBoxLorentz" "', argument " "1"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_Sphere" "', argument " "1"" of type '" "double""'");
   } 
   arg1 = static_cast< double >(val1);
-  ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
+  ecode2 = SWIG_AsVal_bool(swig_obj[1], &val2);
   if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_LongBoxLorentz" "', argument " "2"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_Sphere" "', argument " "2"" of type '" "bool""'");
   } 
-  arg2 = static_cast< double >(val2);
-  ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
-  if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_LongBoxLorentz" "', argument " "3"" of type '" "double""'");
+  arg2 = static_cast< bool >(val2);
+  result = (Sphere *)new Sphere(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Sphere, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_Sphere__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  double arg1 ;
+  double val1 ;
+  int ecode1 = 0 ;
+  Sphere *result = 0 ;
+  
+  if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
+  ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_Sphere" "', argument " "1"" of type '" "double""'");
   } 
-  arg3 = static_cast< double >(val3);
-  result = (LongBoxLorentz *)new LongBoxLorentz(arg1,arg2,arg3);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_LongBoxLorentz, SWIG_POINTER_NEW |  0 );
+  arg1 = static_cast< double >(val1);
+  result = (Sphere *)new Sphere(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Sphere, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_LongBoxLorentz__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_Sphere__SWIG_2(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   std::vector< double,std::allocator< double > > arg1 ;
-  LongBoxLorentz *result = 0 ;
+  bool arg2 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  Sphere *result = 0 ;
+  
+  if ((nobjs < 2) || (nobjs > 2)) SWIG_fail;
+  {
+    std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
+    int res = swig::asptr(swig_obj[0], &ptr);
+    if (!SWIG_IsOK(res) || !ptr) {
+      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_Sphere" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
+    }
+    arg1 = *ptr;
+    if (SWIG_IsNewObj(res)) delete ptr;
+  }
+  ecode2 = SWIG_AsVal_bool(swig_obj[1], &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_Sphere" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  result = (Sphere *)new Sphere(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Sphere, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_Sphere__SWIG_3(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::vector< double,std::allocator< double > > arg1 ;
+  Sphere *result = 0 ;
   
   if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
   {
     std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
     int res = swig::asptr(swig_obj[0], &ptr);
     if (!SWIG_IsOK(res) || !ptr) {
-      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_LongBoxLorentz" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
+      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_Sphere" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
     }
     arg1 = *ptr;
     if (SWIG_IsNewObj(res)) delete ptr;
   }
-  result = (LongBoxLorentz *)new LongBoxLorentz(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_LongBoxLorentz, SWIG_POINTER_NEW |  0 );
+  result = (Sphere *)new Sphere(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Sphere, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_LongBoxLorentz(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_Sphere(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
-  PyObject *argv[4] = {
+  PyObject *argv[3] = {
     0
   };
   
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_LongBoxLorentz", 0, 3, argv))) SWIG_fail;
+  if (!(argc = SWIG_Python_UnpackTuple(args, "new_Sphere", 0, 2, argv))) SWIG_fail;
   --argc;
   if (argc == 1) {
     int _v = 0;
-    int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
-    _v = SWIG_CheckState(res);
+    {
+      int res = SWIG_AsVal_double(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
     if (_v) {
-      return _wrap_new_LongBoxLorentz__SWIG_1(self, argc, argv);
+      return _wrap_new_Sphere__SWIG_1(self, argc, argv);
     }
   }
-  if (argc == 3) {
+  if (argc == 1) {
+    int _v = 0;
+    int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_Sphere__SWIG_3(self, argc, argv);
+    }
+  }
+  if (argc == 2) {
     int _v = 0;
     {
       int res = SWIG_AsVal_double(argv[0], NULL);
@@ -53997,56 +54335,66 @@ SWIGINTERN PyObject *_wrap_new_LongBoxLorentz(PyObject *self, PyObject *args) {
     }
     if (_v) {
       {
-        int res = SWIG_AsVal_double(argv[1], NULL);
+        int res = SWIG_AsVal_bool(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_LongBoxLorentz__SWIG_0(self, argc, argv);
-        }
+        return _wrap_new_Sphere__SWIG_0(self, argc, argv);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v = 0;
+    int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_bool(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_new_Sphere__SWIG_2(self, argc, argv);
       }
     }
   }
   
 fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_LongBoxLorentz'.\n"
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_Sphere'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    LongBoxLorentz::LongBoxLorentz(double,double,double)\n"
-    "    LongBoxLorentz::LongBoxLorentz(std::vector< double,std::allocator< double > >)\n");
+    "    Sphere::Sphere(double,bool)\n"
+    "    Sphere::Sphere(double)\n"
+    "    Sphere::Sphere(std::vector< double,std::allocator< double > >,bool)\n"
+    "    Sphere::Sphere(std::vector< double,std::allocator< double > >)\n");
   return 0;
 }
 
 
-SWIGINTERN PyObject *_wrap_LongBoxLorentz_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Sphere_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  LongBoxLorentz *arg1 = (LongBoxLorentz *) 0 ;
+  Sphere *arg1 = (Sphere *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  LongBoxLorentz *result = 0 ;
+  Sphere *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_LongBoxLorentz, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Sphere, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LongBoxLorentz_clone" "', argument " "1"" of type '" "LongBoxLorentz const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Sphere_clone" "', argument " "1"" of type '" "Sphere const *""'"); 
   }
-  arg1 = reinterpret_cast< LongBoxLorentz * >(argp1);
-  result = (LongBoxLorentz *)((LongBoxLorentz const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_LongBoxLorentz, 0 |  0 );
+  arg1 = reinterpret_cast< Sphere * >(argp1);
+  result = (Sphere *)((Sphere const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Sphere, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_LongBoxLorentz_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Sphere_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  LongBoxLorentz *arg1 = (LongBoxLorentz *) 0 ;
+  Sphere *arg1 = (Sphere *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -54054,12 +54402,12 @@ SWIGINTERN PyObject *_wrap_LongBoxLorentz_className(PyObject *self, PyObject *ar
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_LongBoxLorentz, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Sphere, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LongBoxLorentz_className" "', argument " "1"" of type '" "LongBoxLorentz const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Sphere_className" "', argument " "1"" of type '" "Sphere const *""'"); 
   }
-  arg1 = reinterpret_cast< LongBoxLorentz * >(argp1);
-  result = ((LongBoxLorentz const *)arg1)->className();
+  arg1 = reinterpret_cast< Sphere * >(argp1);
+  result = ((Sphere const *)arg1)->className();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -54067,9 +54415,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_LongBoxLorentz_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Sphere_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  LongBoxLorentz *arg1 = (LongBoxLorentz *) 0 ;
+  Sphere *arg1 = (Sphere *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -54077,12 +54425,12 @@ SWIGINTERN PyObject *_wrap_LongBoxLorentz_parDefs(PyObject *self, PyObject *args
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_LongBoxLorentz, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Sphere, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LongBoxLorentz_parDefs" "', argument " "1"" of type '" "LongBoxLorentz const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Sphere_parDefs" "', argument " "1"" of type '" "Sphere const *""'"); 
   }
-  arg1 = reinterpret_cast< LongBoxLorentz * >(argp1);
-  result = ((LongBoxLorentz const *)arg1)->parDefs();
+  arg1 = reinterpret_cast< Sphere * >(argp1);
+  result = ((Sphere const *)arg1)->parDefs();
   resultobj = SWIG_NewPointerObj((new std::vector< ParaMeta,std::allocator< ParaMeta > >(result)), SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
@@ -54090,55 +54438,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_LongBoxLorentz_length(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  LongBoxLorentz *arg1 = (LongBoxLorentz *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  double result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_LongBoxLorentz, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LongBoxLorentz_length" "', argument " "1"" of type '" "LongBoxLorentz const *""'"); 
-  }
-  arg1 = reinterpret_cast< LongBoxLorentz * >(argp1);
-  result = (double)((LongBoxLorentz const *)arg1)->length();
-  resultobj = SWIG_From_double(static_cast< double >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_LongBoxLorentz_height(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  LongBoxLorentz *arg1 = (LongBoxLorentz *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  double result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_LongBoxLorentz, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LongBoxLorentz_height" "', argument " "1"" of type '" "LongBoxLorentz const *""'"); 
-  }
-  arg1 = reinterpret_cast< LongBoxLorentz * >(argp1);
-  result = (double)((LongBoxLorentz const *)arg1)->height();
-  resultobj = SWIG_From_double(static_cast< double >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_LongBoxLorentz_width(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Sphere_radius(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  LongBoxLorentz *arg1 = (LongBoxLorentz *) 0 ;
+  Sphere *arg1 = (Sphere *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -54146,12 +54448,12 @@ SWIGINTERN PyObject *_wrap_LongBoxLorentz_width(PyObject *self, PyObject *args)
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_LongBoxLorentz, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Sphere, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LongBoxLorentz_width" "', argument " "1"" of type '" "LongBoxLorentz const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Sphere_radius" "', argument " "1"" of type '" "Sphere const *""'"); 
   }
-  arg1 = reinterpret_cast< LongBoxLorentz * >(argp1);
-  result = (double)((LongBoxLorentz const *)arg1)->width();
+  arg1 = reinterpret_cast< Sphere * >(argp1);
+  result = (double)((Sphere const *)arg1)->radius();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -54159,9 +54461,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_LongBoxLorentz_radialExtension(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Sphere_radialExtension(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  LongBoxLorentz *arg1 = (LongBoxLorentz *) 0 ;
+  Sphere *arg1 = (Sphere *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -54169,12 +54471,12 @@ SWIGINTERN PyObject *_wrap_LongBoxLorentz_radialExtension(PyObject *self, PyObje
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_LongBoxLorentz, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Sphere, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LongBoxLorentz_radialExtension" "', argument " "1"" of type '" "LongBoxLorentz const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Sphere_radialExtension" "', argument " "1"" of type '" "Sphere const *""'"); 
   }
-  arg1 = reinterpret_cast< LongBoxLorentz * >(argp1);
-  result = (double)((LongBoxLorentz const *)arg1)->radialExtension();
+  arg1 = reinterpret_cast< Sphere * >(argp1);
+  result = (double)((Sphere const *)arg1)->radialExtension();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -54182,9 +54484,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_LongBoxLorentz_formfactor(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Sphere_formfactor(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  LongBoxLorentz *arg1 = (LongBoxLorentz *) 0 ;
+  Sphere *arg1 = (Sphere *) 0 ;
   C3 arg2 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
@@ -54193,26 +54495,26 @@ SWIGINTERN PyObject *_wrap_LongBoxLorentz_formfactor(PyObject *self, PyObject *a
   PyObject *swig_obj[2] ;
   complex_t result;
   
-  if (!SWIG_Python_UnpackTuple(args, "LongBoxLorentz_formfactor", 2, 2, swig_obj)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_LongBoxLorentz, 0 |  0 );
+  if (!SWIG_Python_UnpackTuple(args, "Sphere_formfactor", 2, 2, swig_obj)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Sphere, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LongBoxLorentz_formfactor" "', argument " "1"" of type '" "LongBoxLorentz const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Sphere_formfactor" "', argument " "1"" of type '" "Sphere const *""'"); 
   }
-  arg1 = reinterpret_cast< LongBoxLorentz * >(argp1);
+  arg1 = reinterpret_cast< Sphere * >(argp1);
   {
     res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_Vec3T_std__complexT_double_t_t,  0  | 0);
     if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "LongBoxLorentz_formfactor" "', argument " "2"" of type '" "C3""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Sphere_formfactor" "', argument " "2"" of type '" "C3""'"); 
     }  
     if (!argp2) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "LongBoxLorentz_formfactor" "', argument " "2"" of type '" "C3""'");
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Sphere_formfactor" "', argument " "2"" of type '" "C3""'");
     } else {
       C3 * temp = reinterpret_cast< C3 * >(argp2);
       arg2 = *temp;
       if (SWIG_IsNewObj(res2)) delete temp;
     }
   }
-  result = ((LongBoxLorentz const *)arg1)->formfactor(arg2);
+  result = ((Sphere const *)arg1)->formfactor(arg2);
   resultobj = SWIG_From_std_complex_Sl_double_Sg_(static_cast< std::complex<double> >(result));
   return resultobj;
 fail:
@@ -54220,9 +54522,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_LongBoxLorentz_validate(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Sphere_validate(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  LongBoxLorentz *arg1 = (LongBoxLorentz *) 0 ;
+  Sphere *arg1 = (Sphere *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -54230,12 +54532,12 @@ SWIGINTERN PyObject *_wrap_LongBoxLorentz_validate(PyObject *self, PyObject *arg
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_LongBoxLorentz, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Sphere, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LongBoxLorentz_validate" "', argument " "1"" of type '" "LongBoxLorentz const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Sphere_validate" "', argument " "1"" of type '" "Sphere const *""'"); 
   }
-  arg1 = reinterpret_cast< LongBoxLorentz * >(argp1);
-  result = ((LongBoxLorentz const *)arg1)->validate();
+  arg1 = reinterpret_cast< Sphere * >(argp1);
+  result = ((Sphere const *)arg1)->validate();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -54243,20 +54545,20 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_LongBoxLorentz(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_Sphere(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  LongBoxLorentz *arg1 = (LongBoxLorentz *) 0 ;
+  Sphere *arg1 = (Sphere *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_LongBoxLorentz, SWIG_POINTER_DISOWN |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Sphere, SWIG_POINTER_DISOWN |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_LongBoxLorentz" "', argument " "1"" of type '" "LongBoxLorentz *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Sphere" "', argument " "1"" of type '" "Sphere *""'"); 
   }
-  arg1 = reinterpret_cast< LongBoxLorentz * >(argp1);
+  arg1 = reinterpret_cast< Sphere * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -54265,123 +54567,137 @@ fail:
 }
 
 
-SWIGINTERN PyObject *LongBoxLorentz_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *Sphere_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
   if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_LongBoxLorentz, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_Sphere, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *LongBoxLorentz_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *Sphere_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   return SWIG_Python_InitShadowInstance(args);
 }
 
-SWIGINTERN PyObject *_wrap_new_PlatonicOctahedron__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_Spheroid__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
+  double arg2 ;
   double val1 ;
   int ecode1 = 0 ;
-  PlatonicOctahedron *result = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  Spheroid *result = 0 ;
   
-  if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
+  if ((nobjs < 2) || (nobjs > 2)) SWIG_fail;
   ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
   if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_PlatonicOctahedron" "', argument " "1"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_Spheroid" "', argument " "1"" of type '" "double""'");
   } 
   arg1 = static_cast< double >(val1);
-  result = (PlatonicOctahedron *)new PlatonicOctahedron(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_PlatonicOctahedron, SWIG_POINTER_NEW |  0 );
+  ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_Spheroid" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (Spheroid *)new Spheroid(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Spheroid, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_PlatonicOctahedron__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_Spheroid__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   std::vector< double,std::allocator< double > > arg1 ;
-  PlatonicOctahedron *result = 0 ;
+  Spheroid *result = 0 ;
   
   if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
   {
     std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
     int res = swig::asptr(swig_obj[0], &ptr);
     if (!SWIG_IsOK(res) || !ptr) {
-      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_PlatonicOctahedron" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
+      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_Spheroid" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
     }
     arg1 = *ptr;
     if (SWIG_IsNewObj(res)) delete ptr;
   }
-  result = (PlatonicOctahedron *)new PlatonicOctahedron(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_PlatonicOctahedron, SWIG_POINTER_NEW |  0 );
+  result = (Spheroid *)new Spheroid(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Spheroid, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_PlatonicOctahedron(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_Spheroid(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
-  PyObject *argv[2] = {
+  PyObject *argv[3] = {
     0
   };
   
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_PlatonicOctahedron", 0, 1, argv))) SWIG_fail;
+  if (!(argc = SWIG_Python_UnpackTuple(args, "new_Spheroid", 0, 2, argv))) SWIG_fail;
   --argc;
   if (argc == 1) {
+    int _v = 0;
+    int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_Spheroid__SWIG_1(self, argc, argv);
+    }
+  }
+  if (argc == 2) {
     int _v = 0;
     {
       int res = SWIG_AsVal_double(argv[0], NULL);
       _v = SWIG_CheckState(res);
     }
     if (_v) {
-      return _wrap_new_PlatonicOctahedron__SWIG_0(self, argc, argv);
-    }
-  }
-  if (argc == 1) {
-    int _v = 0;
-    int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
-    _v = SWIG_CheckState(res);
-    if (_v) {
-      return _wrap_new_PlatonicOctahedron__SWIG_1(self, argc, argv);
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_new_Spheroid__SWIG_0(self, argc, argv);
+      }
     }
   }
   
 fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_PlatonicOctahedron'.\n"
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_Spheroid'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    PlatonicOctahedron::PlatonicOctahedron(double)\n"
-    "    PlatonicOctahedron::PlatonicOctahedron(std::vector< double,std::allocator< double > >)\n");
+    "    Spheroid::Spheroid(double,double)\n"
+    "    Spheroid::Spheroid(std::vector< double,std::allocator< double > >)\n");
   return 0;
 }
 
 
-SWIGINTERN PyObject *_wrap_PlatonicOctahedron_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Spheroid_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  PlatonicOctahedron *arg1 = (PlatonicOctahedron *) 0 ;
+  Spheroid *arg1 = (Spheroid *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  PlatonicOctahedron *result = 0 ;
+  Spheroid *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_PlatonicOctahedron, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Spheroid, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "PlatonicOctahedron_clone" "', argument " "1"" of type '" "PlatonicOctahedron const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Spheroid_clone" "', argument " "1"" of type '" "Spheroid const *""'"); 
   }
-  arg1 = reinterpret_cast< PlatonicOctahedron * >(argp1);
-  result = (PlatonicOctahedron *)((PlatonicOctahedron const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_PlatonicOctahedron, 0 |  0 );
+  arg1 = reinterpret_cast< Spheroid * >(argp1);
+  result = (Spheroid *)((Spheroid const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Spheroid, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_PlatonicOctahedron_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Spheroid_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  PlatonicOctahedron *arg1 = (PlatonicOctahedron *) 0 ;
+  Spheroid *arg1 = (Spheroid *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -54389,12 +54705,12 @@ SWIGINTERN PyObject *_wrap_PlatonicOctahedron_className(PyObject *self, PyObject
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_PlatonicOctahedron, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Spheroid, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "PlatonicOctahedron_className" "', argument " "1"" of type '" "PlatonicOctahedron const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Spheroid_className" "', argument " "1"" of type '" "Spheroid const *""'"); 
   }
-  arg1 = reinterpret_cast< PlatonicOctahedron * >(argp1);
-  result = ((PlatonicOctahedron const *)arg1)->className();
+  arg1 = reinterpret_cast< Spheroid * >(argp1);
+  result = ((Spheroid const *)arg1)->className();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -54402,9 +54718,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_PlatonicOctahedron_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Spheroid_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  PlatonicOctahedron *arg1 = (PlatonicOctahedron *) 0 ;
+  Spheroid *arg1 = (Spheroid *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -54412,12 +54728,12 @@ SWIGINTERN PyObject *_wrap_PlatonicOctahedron_parDefs(PyObject *self, PyObject *
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_PlatonicOctahedron, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Spheroid, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "PlatonicOctahedron_parDefs" "', argument " "1"" of type '" "PlatonicOctahedron const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Spheroid_parDefs" "', argument " "1"" of type '" "Spheroid const *""'"); 
   }
-  arg1 = reinterpret_cast< PlatonicOctahedron * >(argp1);
-  result = ((PlatonicOctahedron const *)arg1)->parDefs();
+  arg1 = reinterpret_cast< Spheroid * >(argp1);
+  result = ((Spheroid const *)arg1)->parDefs();
   resultobj = SWIG_NewPointerObj((new std::vector< ParaMeta,std::allocator< ParaMeta > >(result)), SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
@@ -54425,9 +54741,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_PlatonicOctahedron_edge(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Spheroid_height(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  PlatonicOctahedron *arg1 = (PlatonicOctahedron *) 0 ;
+  Spheroid *arg1 = (Spheroid *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -54435,12 +54751,12 @@ SWIGINTERN PyObject *_wrap_PlatonicOctahedron_edge(PyObject *self, PyObject *arg
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_PlatonicOctahedron, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Spheroid, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "PlatonicOctahedron_edge" "', argument " "1"" of type '" "PlatonicOctahedron const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Spheroid_height" "', argument " "1"" of type '" "Spheroid const *""'"); 
   }
-  arg1 = reinterpret_cast< PlatonicOctahedron * >(argp1);
-  result = (double)((PlatonicOctahedron const *)arg1)->edge();
+  arg1 = reinterpret_cast< Spheroid * >(argp1);
+  result = (double)((Spheroid const *)arg1)->height();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -54448,9 +54764,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_PlatonicOctahedron_height(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Spheroid_radius(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  PlatonicOctahedron *arg1 = (PlatonicOctahedron *) 0 ;
+  Spheroid *arg1 = (Spheroid *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -54458,12 +54774,12 @@ SWIGINTERN PyObject *_wrap_PlatonicOctahedron_height(PyObject *self, PyObject *a
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_PlatonicOctahedron, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Spheroid, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "PlatonicOctahedron_height" "', argument " "1"" of type '" "PlatonicOctahedron const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Spheroid_radius" "', argument " "1"" of type '" "Spheroid const *""'"); 
   }
-  arg1 = reinterpret_cast< PlatonicOctahedron * >(argp1);
-  result = (double)((PlatonicOctahedron const *)arg1)->height();
+  arg1 = reinterpret_cast< Spheroid * >(argp1);
+  result = (double)((Spheroid const *)arg1)->radius();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -54471,20 +54787,104 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_PlatonicOctahedron(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Spheroid_radialExtension(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  PlatonicOctahedron *arg1 = (PlatonicOctahedron *) 0 ;
+  Spheroid *arg1 = (Spheroid *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
+  double result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_PlatonicOctahedron, SWIG_POINTER_DISOWN |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Spheroid, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_PlatonicOctahedron" "', argument " "1"" of type '" "PlatonicOctahedron *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Spheroid_radialExtension" "', argument " "1"" of type '" "Spheroid const *""'"); 
   }
-  arg1 = reinterpret_cast< PlatonicOctahedron * >(argp1);
+  arg1 = reinterpret_cast< Spheroid * >(argp1);
+  result = (double)((Spheroid const *)arg1)->radialExtension();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_Spheroid_formfactor(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  Spheroid *arg1 = (Spheroid *) 0 ;
+  C3 arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  complex_t result;
+  
+  if (!SWIG_Python_UnpackTuple(args, "Spheroid_formfactor", 2, 2, swig_obj)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Spheroid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Spheroid_formfactor" "', argument " "1"" of type '" "Spheroid const *""'"); 
+  }
+  arg1 = reinterpret_cast< Spheroid * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_Vec3T_std__complexT_double_t_t,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Spheroid_formfactor" "', argument " "2"" of type '" "C3""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Spheroid_formfactor" "', argument " "2"" of type '" "C3""'");
+    } else {
+      C3 * temp = reinterpret_cast< C3 * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  result = ((Spheroid const *)arg1)->formfactor(arg2);
+  resultobj = SWIG_From_std_complex_Sl_double_Sg_(static_cast< std::complex<double> >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_Spheroid_validate(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  Spheroid *arg1 = (Spheroid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  std::string result;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Spheroid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Spheroid_validate" "', argument " "1"" of type '" "Spheroid const *""'"); 
+  }
+  arg1 = reinterpret_cast< Spheroid * >(argp1);
+  result = ((Spheroid const *)arg1)->validate();
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_Spheroid(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  Spheroid *arg1 = (Spheroid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Spheroid, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Spheroid" "', argument " "1"" of type '" "Spheroid *""'"); 
+  }
+  arg1 = reinterpret_cast< Spheroid * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -54493,123 +54893,151 @@ fail:
 }
 
 
-SWIGINTERN PyObject *PlatonicOctahedron_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *Spheroid_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
   if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_PlatonicOctahedron, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_Spheroid, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *PlatonicOctahedron_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *Spheroid_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   return SWIG_Python_InitShadowInstance(args);
 }
 
-SWIGINTERN PyObject *_wrap_new_PlatonicTetrahedron__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_TruncatedSphere__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
+  double arg2 ;
+  double arg3 ;
   double val1 ;
   int ecode1 = 0 ;
-  PlatonicTetrahedron *result = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  TruncatedSphere *result = 0 ;
   
-  if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
+  if ((nobjs < 3) || (nobjs > 3)) SWIG_fail;
   ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
   if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_PlatonicTetrahedron" "', argument " "1"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_TruncatedSphere" "', argument " "1"" of type '" "double""'");
   } 
   arg1 = static_cast< double >(val1);
-  result = (PlatonicTetrahedron *)new PlatonicTetrahedron(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_PlatonicTetrahedron, SWIG_POINTER_NEW |  0 );
+  ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_TruncatedSphere" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_TruncatedSphere" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  result = (TruncatedSphere *)new TruncatedSphere(arg1,arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_TruncatedSphere, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_PlatonicTetrahedron__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_TruncatedSphere__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   std::vector< double,std::allocator< double > > arg1 ;
-  PlatonicTetrahedron *result = 0 ;
+  TruncatedSphere *result = 0 ;
   
   if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
   {
     std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
     int res = swig::asptr(swig_obj[0], &ptr);
     if (!SWIG_IsOK(res) || !ptr) {
-      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_PlatonicTetrahedron" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
+      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_TruncatedSphere" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
     }
     arg1 = *ptr;
     if (SWIG_IsNewObj(res)) delete ptr;
   }
-  result = (PlatonicTetrahedron *)new PlatonicTetrahedron(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_PlatonicTetrahedron, SWIG_POINTER_NEW |  0 );
+  result = (TruncatedSphere *)new TruncatedSphere(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_TruncatedSphere, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_PlatonicTetrahedron(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_TruncatedSphere(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
-  PyObject *argv[2] = {
+  PyObject *argv[4] = {
     0
   };
   
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_PlatonicTetrahedron", 0, 1, argv))) SWIG_fail;
+  if (!(argc = SWIG_Python_UnpackTuple(args, "new_TruncatedSphere", 0, 3, argv))) SWIG_fail;
   --argc;
   if (argc == 1) {
     int _v = 0;
-    {
-      int res = SWIG_AsVal_double(argv[0], NULL);
-      _v = SWIG_CheckState(res);
-    }
+    int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
+    _v = SWIG_CheckState(res);
     if (_v) {
-      return _wrap_new_PlatonicTetrahedron__SWIG_0(self, argc, argv);
+      return _wrap_new_TruncatedSphere__SWIG_1(self, argc, argv);
     }
   }
-  if (argc == 1) {
+  if (argc == 3) {
     int _v = 0;
-    int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
-    _v = SWIG_CheckState(res);
+    {
+      int res = SWIG_AsVal_double(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
     if (_v) {
-      return _wrap_new_PlatonicTetrahedron__SWIG_1(self, argc, argv);
+      {
+        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_TruncatedSphere__SWIG_0(self, argc, argv);
+        }
+      }
     }
   }
   
 fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_PlatonicTetrahedron'.\n"
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_TruncatedSphere'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    PlatonicTetrahedron::PlatonicTetrahedron(double)\n"
-    "    PlatonicTetrahedron::PlatonicTetrahedron(std::vector< double,std::allocator< double > >)\n");
+    "    TruncatedSphere::TruncatedSphere(double,double,double)\n"
+    "    TruncatedSphere::TruncatedSphere(std::vector< double,std::allocator< double > >)\n");
   return 0;
 }
 
 
-SWIGINTERN PyObject *_wrap_PlatonicTetrahedron_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_TruncatedSphere_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  PlatonicTetrahedron *arg1 = (PlatonicTetrahedron *) 0 ;
+  TruncatedSphere *arg1 = (TruncatedSphere *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  PlatonicTetrahedron *result = 0 ;
+  TruncatedSphere *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_PlatonicTetrahedron, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedSphere, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "PlatonicTetrahedron_clone" "', argument " "1"" of type '" "PlatonicTetrahedron const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedSphere_clone" "', argument " "1"" of type '" "TruncatedSphere const *""'"); 
   }
-  arg1 = reinterpret_cast< PlatonicTetrahedron * >(argp1);
-  result = (PlatonicTetrahedron *)((PlatonicTetrahedron const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_PlatonicTetrahedron, 0 |  0 );
+  arg1 = reinterpret_cast< TruncatedSphere * >(argp1);
+  result = (TruncatedSphere *)((TruncatedSphere const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_TruncatedSphere, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_PlatonicTetrahedron_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_TruncatedSphere_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  PlatonicTetrahedron *arg1 = (PlatonicTetrahedron *) 0 ;
+  TruncatedSphere *arg1 = (TruncatedSphere *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -54617,12 +55045,12 @@ SWIGINTERN PyObject *_wrap_PlatonicTetrahedron_className(PyObject *self, PyObjec
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_PlatonicTetrahedron, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedSphere, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "PlatonicTetrahedron_className" "', argument " "1"" of type '" "PlatonicTetrahedron const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedSphere_className" "', argument " "1"" of type '" "TruncatedSphere const *""'"); 
   }
-  arg1 = reinterpret_cast< PlatonicTetrahedron * >(argp1);
-  result = ((PlatonicTetrahedron const *)arg1)->className();
+  arg1 = reinterpret_cast< TruncatedSphere * >(argp1);
+  result = ((TruncatedSphere const *)arg1)->className();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -54630,9 +55058,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_PlatonicTetrahedron_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_TruncatedSphere_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  PlatonicTetrahedron *arg1 = (PlatonicTetrahedron *) 0 ;
+  TruncatedSphere *arg1 = (TruncatedSphere *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -54640,12 +55068,12 @@ SWIGINTERN PyObject *_wrap_PlatonicTetrahedron_parDefs(PyObject *self, PyObject
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_PlatonicTetrahedron, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedSphere, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "PlatonicTetrahedron_parDefs" "', argument " "1"" of type '" "PlatonicTetrahedron const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedSphere_parDefs" "', argument " "1"" of type '" "TruncatedSphere const *""'"); 
   }
-  arg1 = reinterpret_cast< PlatonicTetrahedron * >(argp1);
-  result = ((PlatonicTetrahedron const *)arg1)->parDefs();
+  arg1 = reinterpret_cast< TruncatedSphere * >(argp1);
+  result = ((TruncatedSphere const *)arg1)->parDefs();
   resultobj = SWIG_NewPointerObj((new std::vector< ParaMeta,std::allocator< ParaMeta > >(result)), SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
@@ -54653,9 +55081,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_PlatonicTetrahedron_edge(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_TruncatedSphere_height(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  PlatonicTetrahedron *arg1 = (PlatonicTetrahedron *) 0 ;
+  TruncatedSphere *arg1 = (TruncatedSphere *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -54663,12 +55091,12 @@ SWIGINTERN PyObject *_wrap_PlatonicTetrahedron_edge(PyObject *self, PyObject *ar
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_PlatonicTetrahedron, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedSphere, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "PlatonicTetrahedron_edge" "', argument " "1"" of type '" "PlatonicTetrahedron const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedSphere_height" "', argument " "1"" of type '" "TruncatedSphere const *""'"); 
   }
-  arg1 = reinterpret_cast< PlatonicTetrahedron * >(argp1);
-  result = (double)((PlatonicTetrahedron const *)arg1)->edge();
+  arg1 = reinterpret_cast< TruncatedSphere * >(argp1);
+  result = (double)((TruncatedSphere const *)arg1)->height();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -54676,9 +55104,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_PlatonicTetrahedron_height(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_TruncatedSphere_radius(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  PlatonicTetrahedron *arg1 = (PlatonicTetrahedron *) 0 ;
+  TruncatedSphere *arg1 = (TruncatedSphere *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -54686,12 +55114,12 @@ SWIGINTERN PyObject *_wrap_PlatonicTetrahedron_height(PyObject *self, PyObject *
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_PlatonicTetrahedron, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedSphere, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "PlatonicTetrahedron_height" "', argument " "1"" of type '" "PlatonicTetrahedron const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedSphere_radius" "', argument " "1"" of type '" "TruncatedSphere const *""'"); 
   }
-  arg1 = reinterpret_cast< PlatonicTetrahedron * >(argp1);
-  result = (double)((PlatonicTetrahedron const *)arg1)->height();
+  arg1 = reinterpret_cast< TruncatedSphere * >(argp1);
+  result = (double)((TruncatedSphere const *)arg1)->radius();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -54699,20 +55127,127 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_PlatonicTetrahedron(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_TruncatedSphere_removedTop(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  PlatonicTetrahedron *arg1 = (PlatonicTetrahedron *) 0 ;
+  TruncatedSphere *arg1 = (TruncatedSphere *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
+  double result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_PlatonicTetrahedron, SWIG_POINTER_DISOWN |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedSphere, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_PlatonicTetrahedron" "', argument " "1"" of type '" "PlatonicTetrahedron *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedSphere_removedTop" "', argument " "1"" of type '" "TruncatedSphere const *""'"); 
   }
-  arg1 = reinterpret_cast< PlatonicTetrahedron * >(argp1);
+  arg1 = reinterpret_cast< TruncatedSphere * >(argp1);
+  result = (double)((TruncatedSphere const *)arg1)->removedTop();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_TruncatedSphere_radialExtension(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  TruncatedSphere *arg1 = (TruncatedSphere *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  double result;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedSphere, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedSphere_radialExtension" "', argument " "1"" of type '" "TruncatedSphere const *""'"); 
+  }
+  arg1 = reinterpret_cast< TruncatedSphere * >(argp1);
+  result = (double)((TruncatedSphere const *)arg1)->radialExtension();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_TruncatedSphere_formfactor(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  TruncatedSphere *arg1 = (TruncatedSphere *) 0 ;
+  C3 arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  complex_t result;
+  
+  if (!SWIG_Python_UnpackTuple(args, "TruncatedSphere_formfactor", 2, 2, swig_obj)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedSphere, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedSphere_formfactor" "', argument " "1"" of type '" "TruncatedSphere const *""'"); 
+  }
+  arg1 = reinterpret_cast< TruncatedSphere * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_Vec3T_std__complexT_double_t_t,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "TruncatedSphere_formfactor" "', argument " "2"" of type '" "C3""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "TruncatedSphere_formfactor" "', argument " "2"" of type '" "C3""'");
+    } else {
+      C3 * temp = reinterpret_cast< C3 * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  result = ((TruncatedSphere const *)arg1)->formfactor(arg2);
+  resultobj = SWIG_From_std_complex_Sl_double_Sg_(static_cast< std::complex<double> >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_TruncatedSphere_validate(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  TruncatedSphere *arg1 = (TruncatedSphere *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  std::string result;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedSphere, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedSphere_validate" "', argument " "1"" of type '" "TruncatedSphere const *""'"); 
+  }
+  arg1 = reinterpret_cast< TruncatedSphere * >(argp1);
+  result = ((TruncatedSphere const *)arg1)->validate();
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_TruncatedSphere(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  TruncatedSphere *arg1 = (TruncatedSphere *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedSphere, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_TruncatedSphere" "', argument " "1"" of type '" "TruncatedSphere *""'"); 
+  }
+  arg1 = reinterpret_cast< TruncatedSphere * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -54721,86 +55256,102 @@ fail:
 }
 
 
-SWIGINTERN PyObject *PlatonicTetrahedron_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *TruncatedSphere_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
   if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_PlatonicTetrahedron, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_TruncatedSphere, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *PlatonicTetrahedron_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *TruncatedSphere_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   return SWIG_Python_InitShadowInstance(args);
 }
 
-SWIGINTERN PyObject *_wrap_new_Prism3__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_TruncatedSpheroid__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
   double arg2 ;
+  double arg3 ;
+  double arg4 ;
   double val1 ;
   int ecode1 = 0 ;
   double val2 ;
   int ecode2 = 0 ;
-  Prism3 *result = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  TruncatedSpheroid *result = 0 ;
   
-  if ((nobjs < 2) || (nobjs > 2)) SWIG_fail;
+  if ((nobjs < 4) || (nobjs > 4)) SWIG_fail;
   ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
   if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_Prism3" "', argument " "1"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_TruncatedSpheroid" "', argument " "1"" of type '" "double""'");
   } 
   arg1 = static_cast< double >(val1);
   ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
   if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_Prism3" "', argument " "2"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_TruncatedSpheroid" "', argument " "2"" of type '" "double""'");
   } 
   arg2 = static_cast< double >(val2);
-  result = (Prism3 *)new Prism3(arg1,arg2);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Prism3, SWIG_POINTER_NEW |  0 );
+  ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_TruncatedSpheroid" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_double(swig_obj[3], &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "new_TruncatedSpheroid" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  result = (TruncatedSpheroid *)new TruncatedSpheroid(arg1,arg2,arg3,arg4);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_TruncatedSpheroid, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_Prism3__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_TruncatedSpheroid__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   std::vector< double,std::allocator< double > > arg1 ;
-  Prism3 *result = 0 ;
+  TruncatedSpheroid *result = 0 ;
   
   if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
   {
     std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
     int res = swig::asptr(swig_obj[0], &ptr);
     if (!SWIG_IsOK(res) || !ptr) {
-      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_Prism3" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
+      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_TruncatedSpheroid" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
     }
     arg1 = *ptr;
     if (SWIG_IsNewObj(res)) delete ptr;
   }
-  result = (Prism3 *)new Prism3(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Prism3, SWIG_POINTER_NEW |  0 );
+  result = (TruncatedSpheroid *)new TruncatedSpheroid(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_TruncatedSpheroid, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_Prism3(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_TruncatedSpheroid(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
-  PyObject *argv[3] = {
+  PyObject *argv[5] = {
     0
   };
   
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_Prism3", 0, 2, argv))) SWIG_fail;
+  if (!(argc = SWIG_Python_UnpackTuple(args, "new_TruncatedSpheroid", 0, 4, argv))) SWIG_fail;
   --argc;
   if (argc == 1) {
     int _v = 0;
     int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
     _v = SWIG_CheckState(res);
     if (_v) {
-      return _wrap_new_Prism3__SWIG_1(self, argc, argv);
+      return _wrap_new_TruncatedSpheroid__SWIG_1(self, argc, argv);
     }
   }
-  if (argc == 2) {
+  if (argc == 4) {
     int _v = 0;
     {
       int res = SWIG_AsVal_double(argv[0], NULL);
@@ -54812,46 +55363,58 @@ SWIGINTERN PyObject *_wrap_new_Prism3(PyObject *self, PyObject *args) {
         _v = SWIG_CheckState(res);
       }
       if (_v) {
-        return _wrap_new_Prism3__SWIG_0(self, argc, argv);
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_new_TruncatedSpheroid__SWIG_0(self, argc, argv);
+          }
+        }
       }
     }
   }
   
 fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_Prism3'.\n"
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_TruncatedSpheroid'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    Prism3::Prism3(double,double)\n"
-    "    Prism3::Prism3(std::vector< double,std::allocator< double > >)\n");
+    "    TruncatedSpheroid::TruncatedSpheroid(double,double,double,double)\n"
+    "    TruncatedSpheroid::TruncatedSpheroid(std::vector< double,std::allocator< double > >)\n");
   return 0;
 }
 
 
-SWIGINTERN PyObject *_wrap_Prism3_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_TruncatedSpheroid_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Prism3 *arg1 = (Prism3 *) 0 ;
+  TruncatedSpheroid *arg1 = (TruncatedSpheroid *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  Prism3 *result = 0 ;
+  TruncatedSpheroid *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Prism3, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedSpheroid, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Prism3_clone" "', argument " "1"" of type '" "Prism3 const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedSpheroid_clone" "', argument " "1"" of type '" "TruncatedSpheroid const *""'"); 
   }
-  arg1 = reinterpret_cast< Prism3 * >(argp1);
-  result = (Prism3 *)((Prism3 const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Prism3, 0 |  0 );
+  arg1 = reinterpret_cast< TruncatedSpheroid * >(argp1);
+  result = (TruncatedSpheroid *)((TruncatedSpheroid const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_TruncatedSpheroid, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Prism3_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_TruncatedSpheroid_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Prism3 *arg1 = (Prism3 *) 0 ;
+  TruncatedSpheroid *arg1 = (TruncatedSpheroid *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -54859,12 +55422,12 @@ SWIGINTERN PyObject *_wrap_Prism3_className(PyObject *self, PyObject *args) {
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Prism3, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedSpheroid, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Prism3_className" "', argument " "1"" of type '" "Prism3 const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedSpheroid_className" "', argument " "1"" of type '" "TruncatedSpheroid const *""'"); 
   }
-  arg1 = reinterpret_cast< Prism3 * >(argp1);
-  result = ((Prism3 const *)arg1)->className();
+  arg1 = reinterpret_cast< TruncatedSpheroid * >(argp1);
+  result = ((TruncatedSpheroid const *)arg1)->className();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -54872,9 +55435,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Prism3_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_TruncatedSpheroid_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Prism3 *arg1 = (Prism3 *) 0 ;
+  TruncatedSpheroid *arg1 = (TruncatedSpheroid *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -54882,12 +55445,12 @@ SWIGINTERN PyObject *_wrap_Prism3_parDefs(PyObject *self, PyObject *args) {
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Prism3, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedSpheroid, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Prism3_parDefs" "', argument " "1"" of type '" "Prism3 const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedSpheroid_parDefs" "', argument " "1"" of type '" "TruncatedSpheroid const *""'"); 
   }
-  arg1 = reinterpret_cast< Prism3 * >(argp1);
-  result = ((Prism3 const *)arg1)->parDefs();
+  arg1 = reinterpret_cast< TruncatedSpheroid * >(argp1);
+  result = ((TruncatedSpheroid const *)arg1)->parDefs();
   resultobj = SWIG_NewPointerObj((new std::vector< ParaMeta,std::allocator< ParaMeta > >(result)), SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
@@ -54895,9 +55458,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Prism3_baseEdge(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_TruncatedSpheroid_radius(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Prism3 *arg1 = (Prism3 *) 0 ;
+  TruncatedSpheroid *arg1 = (TruncatedSpheroid *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -54905,12 +55468,12 @@ SWIGINTERN PyObject *_wrap_Prism3_baseEdge(PyObject *self, PyObject *args) {
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Prism3, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedSpheroid, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Prism3_baseEdge" "', argument " "1"" of type '" "Prism3 const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedSpheroid_radius" "', argument " "1"" of type '" "TruncatedSpheroid const *""'"); 
   }
-  arg1 = reinterpret_cast< Prism3 * >(argp1);
-  result = (double)((Prism3 const *)arg1)->baseEdge();
+  arg1 = reinterpret_cast< TruncatedSpheroid * >(argp1);
+  result = (double)((TruncatedSpheroid const *)arg1)->radius();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -54918,9 +55481,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Prism3_height(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_TruncatedSpheroid_height(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Prism3 *arg1 = (Prism3 *) 0 ;
+  TruncatedSpheroid *arg1 = (TruncatedSpheroid *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -54928,12 +55491,12 @@ SWIGINTERN PyObject *_wrap_Prism3_height(PyObject *self, PyObject *args) {
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Prism3, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedSpheroid, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Prism3_height" "', argument " "1"" of type '" "Prism3 const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedSpheroid_height" "', argument " "1"" of type '" "TruncatedSpheroid const *""'"); 
   }
-  arg1 = reinterpret_cast< Prism3 * >(argp1);
-  result = (double)((Prism3 const *)arg1)->height();
+  arg1 = reinterpret_cast< TruncatedSpheroid * >(argp1);
+  result = (double)((TruncatedSpheroid const *)arg1)->height();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -54941,20 +55504,150 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_Prism3(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_TruncatedSpheroid_heightFlattening(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Prism3 *arg1 = (Prism3 *) 0 ;
+  TruncatedSpheroid *arg1 = (TruncatedSpheroid *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
+  double result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Prism3, SWIG_POINTER_DISOWN |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedSpheroid, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Prism3" "', argument " "1"" of type '" "Prism3 *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedSpheroid_heightFlattening" "', argument " "1"" of type '" "TruncatedSpheroid const *""'"); 
   }
-  arg1 = reinterpret_cast< Prism3 * >(argp1);
+  arg1 = reinterpret_cast< TruncatedSpheroid * >(argp1);
+  result = (double)((TruncatedSpheroid const *)arg1)->heightFlattening();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_TruncatedSpheroid_removedTop(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  TruncatedSpheroid *arg1 = (TruncatedSpheroid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  double result;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedSpheroid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedSpheroid_removedTop" "', argument " "1"" of type '" "TruncatedSpheroid const *""'"); 
+  }
+  arg1 = reinterpret_cast< TruncatedSpheroid * >(argp1);
+  result = (double)((TruncatedSpheroid const *)arg1)->removedTop();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_TruncatedSpheroid_radialExtension(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  TruncatedSpheroid *arg1 = (TruncatedSpheroid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  double result;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedSpheroid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedSpheroid_radialExtension" "', argument " "1"" of type '" "TruncatedSpheroid const *""'"); 
+  }
+  arg1 = reinterpret_cast< TruncatedSpheroid * >(argp1);
+  result = (double)((TruncatedSpheroid const *)arg1)->radialExtension();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_TruncatedSpheroid_formfactor(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  TruncatedSpheroid *arg1 = (TruncatedSpheroid *) 0 ;
+  C3 arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  complex_t result;
+  
+  if (!SWIG_Python_UnpackTuple(args, "TruncatedSpheroid_formfactor", 2, 2, swig_obj)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedSpheroid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedSpheroid_formfactor" "', argument " "1"" of type '" "TruncatedSpheroid const *""'"); 
+  }
+  arg1 = reinterpret_cast< TruncatedSpheroid * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_Vec3T_std__complexT_double_t_t,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "TruncatedSpheroid_formfactor" "', argument " "2"" of type '" "C3""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "TruncatedSpheroid_formfactor" "', argument " "2"" of type '" "C3""'");
+    } else {
+      C3 * temp = reinterpret_cast< C3 * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  result = ((TruncatedSpheroid const *)arg1)->formfactor(arg2);
+  resultobj = SWIG_From_std_complex_Sl_double_Sg_(static_cast< std::complex<double> >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_TruncatedSpheroid_validate(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  TruncatedSpheroid *arg1 = (TruncatedSpheroid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  std::string result;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedSpheroid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedSpheroid_validate" "', argument " "1"" of type '" "TruncatedSpheroid const *""'"); 
+  }
+  arg1 = reinterpret_cast< TruncatedSpheroid * >(argp1);
+  result = ((TruncatedSpheroid const *)arg1)->validate();
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_TruncatedSpheroid(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  TruncatedSpheroid *arg1 = (TruncatedSpheroid *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedSpheroid, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_TruncatedSpheroid" "', argument " "1"" of type '" "TruncatedSpheroid *""'"); 
+  }
+  arg1 = reinterpret_cast< TruncatedSpheroid * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -54963,86 +55656,94 @@ fail:
 }
 
 
-SWIGINTERN PyObject *Prism3_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *TruncatedSpheroid_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
   if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_Prism3, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_TruncatedSpheroid, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *Prism3_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *TruncatedSpheroid_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   return SWIG_Python_InitShadowInstance(args);
 }
 
-SWIGINTERN PyObject *_wrap_new_Prism6__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_BarGauss__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
   double arg2 ;
+  double arg3 ;
   double val1 ;
   int ecode1 = 0 ;
   double val2 ;
   int ecode2 = 0 ;
-  Prism6 *result = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  BarGauss *result = 0 ;
   
-  if ((nobjs < 2) || (nobjs > 2)) SWIG_fail;
+  if ((nobjs < 3) || (nobjs > 3)) SWIG_fail;
   ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
   if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_Prism6" "', argument " "1"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_BarGauss" "', argument " "1"" of type '" "double""'");
   } 
   arg1 = static_cast< double >(val1);
   ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
   if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_Prism6" "', argument " "2"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_BarGauss" "', argument " "2"" of type '" "double""'");
   } 
   arg2 = static_cast< double >(val2);
-  result = (Prism6 *)new Prism6(arg1,arg2);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Prism6, SWIG_POINTER_NEW |  0 );
+  ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_BarGauss" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  result = (BarGauss *)new BarGauss(arg1,arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_BarGauss, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_Prism6__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_BarGauss__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   std::vector< double,std::allocator< double > > arg1 ;
-  Prism6 *result = 0 ;
+  BarGauss *result = 0 ;
   
   if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
   {
     std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
     int res = swig::asptr(swig_obj[0], &ptr);
     if (!SWIG_IsOK(res) || !ptr) {
-      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_Prism6" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
+      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_BarGauss" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
     }
     arg1 = *ptr;
     if (SWIG_IsNewObj(res)) delete ptr;
   }
-  result = (Prism6 *)new Prism6(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Prism6, SWIG_POINTER_NEW |  0 );
+  result = (BarGauss *)new BarGauss(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_BarGauss, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_Prism6(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_BarGauss(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
-  PyObject *argv[3] = {
+  PyObject *argv[4] = {
     0
   };
   
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_Prism6", 0, 2, argv))) SWIG_fail;
+  if (!(argc = SWIG_Python_UnpackTuple(args, "new_BarGauss", 0, 3, argv))) SWIG_fail;
   --argc;
   if (argc == 1) {
     int _v = 0;
     int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
     _v = SWIG_CheckState(res);
     if (_v) {
-      return _wrap_new_Prism6__SWIG_1(self, argc, argv);
+      return _wrap_new_BarGauss__SWIG_1(self, argc, argv);
     }
   }
-  if (argc == 2) {
+  if (argc == 3) {
     int _v = 0;
     {
       int res = SWIG_AsVal_double(argv[0], NULL);
@@ -55054,46 +55755,52 @@ SWIGINTERN PyObject *_wrap_new_Prism6(PyObject *self, PyObject *args) {
         _v = SWIG_CheckState(res);
       }
       if (_v) {
-        return _wrap_new_Prism6__SWIG_0(self, argc, argv);
-      }
-    }
-  }
-  
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_new_BarGauss__SWIG_0(self, argc, argv);
+        }
+      }
+    }
+  }
+  
 fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_Prism6'.\n"
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_BarGauss'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    Prism6::Prism6(double,double)\n"
-    "    Prism6::Prism6(std::vector< double,std::allocator< double > >)\n");
+    "    BarGauss::BarGauss(double,double,double)\n"
+    "    BarGauss::BarGauss(std::vector< double,std::allocator< double > >)\n");
   return 0;
 }
 
 
-SWIGINTERN PyObject *_wrap_Prism6_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_BarGauss_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Prism6 *arg1 = (Prism6 *) 0 ;
+  BarGauss *arg1 = (BarGauss *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  Prism6 *result = 0 ;
+  BarGauss *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Prism6, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_BarGauss, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Prism6_clone" "', argument " "1"" of type '" "Prism6 const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "BarGauss_clone" "', argument " "1"" of type '" "BarGauss const *""'"); 
   }
-  arg1 = reinterpret_cast< Prism6 * >(argp1);
-  result = (Prism6 *)((Prism6 const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Prism6, 0 |  0 );
+  arg1 = reinterpret_cast< BarGauss * >(argp1);
+  result = (BarGauss *)((BarGauss const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_BarGauss, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Prism6_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_BarGauss_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Prism6 *arg1 = (Prism6 *) 0 ;
+  BarGauss *arg1 = (BarGauss *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -55101,12 +55808,12 @@ SWIGINTERN PyObject *_wrap_Prism6_className(PyObject *self, PyObject *args) {
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Prism6, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_BarGauss, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Prism6_className" "', argument " "1"" of type '" "Prism6 const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "BarGauss_className" "', argument " "1"" of type '" "BarGauss const *""'"); 
   }
-  arg1 = reinterpret_cast< Prism6 * >(argp1);
-  result = ((Prism6 const *)arg1)->className();
+  arg1 = reinterpret_cast< BarGauss * >(argp1);
+  result = ((BarGauss const *)arg1)->className();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -55114,9 +55821,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Prism6_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_BarGauss_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Prism6 *arg1 = (Prism6 *) 0 ;
+  BarGauss *arg1 = (BarGauss *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -55124,12 +55831,12 @@ SWIGINTERN PyObject *_wrap_Prism6_parDefs(PyObject *self, PyObject *args) {
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Prism6, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_BarGauss, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Prism6_parDefs" "', argument " "1"" of type '" "Prism6 const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "BarGauss_parDefs" "', argument " "1"" of type '" "BarGauss const *""'"); 
   }
-  arg1 = reinterpret_cast< Prism6 * >(argp1);
-  result = ((Prism6 const *)arg1)->parDefs();
+  arg1 = reinterpret_cast< BarGauss * >(argp1);
+  result = ((BarGauss const *)arg1)->parDefs();
   resultobj = SWIG_NewPointerObj((new std::vector< ParaMeta,std::allocator< ParaMeta > >(result)), SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
@@ -55137,66 +55844,20 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Prism6_baseEdge(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  Prism6 *arg1 = (Prism6 *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  double result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Prism6, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Prism6_baseEdge" "', argument " "1"" of type '" "Prism6 const *""'"); 
-  }
-  arg1 = reinterpret_cast< Prism6 * >(argp1);
-  result = (double)((Prism6 const *)arg1)->baseEdge();
-  resultobj = SWIG_From_double(static_cast< double >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_Prism6_height(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  Prism6 *arg1 = (Prism6 *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  double result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Prism6, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Prism6_height" "', argument " "1"" of type '" "Prism6 const *""'"); 
-  }
-  arg1 = reinterpret_cast< Prism6 * >(argp1);
-  result = (double)((Prism6 const *)arg1)->height();
-  resultobj = SWIG_From_double(static_cast< double >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_delete_Prism6(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_BarGauss(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Prism6 *arg1 = (Prism6 *) 0 ;
+  BarGauss *arg1 = (BarGauss *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Prism6, SWIG_POINTER_DISOWN |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_BarGauss, SWIG_POINTER_DISOWN |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Prism6" "', argument " "1"" of type '" "Prism6 *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_BarGauss" "', argument " "1"" of type '" "BarGauss *""'"); 
   }
-  arg1 = reinterpret_cast< Prism6 * >(argp1);
+  arg1 = reinterpret_cast< BarGauss * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -55205,102 +55866,94 @@ fail:
 }
 
 
-SWIGINTERN PyObject *Prism6_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *BarGauss_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
   if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_Prism6, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_BarGauss, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *Prism6_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *BarGauss_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   return SWIG_Python_InitShadowInstance(args);
 }
 
-SWIGINTERN PyObject *_wrap_new_Pyramid2__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_BarLorentz__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
   double arg2 ;
   double arg3 ;
-  double arg4 ;
   double val1 ;
   int ecode1 = 0 ;
   double val2 ;
   int ecode2 = 0 ;
   double val3 ;
   int ecode3 = 0 ;
-  double val4 ;
-  int ecode4 = 0 ;
-  Pyramid2 *result = 0 ;
+  BarLorentz *result = 0 ;
   
-  if ((nobjs < 4) || (nobjs > 4)) SWIG_fail;
+  if ((nobjs < 3) || (nobjs > 3)) SWIG_fail;
   ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
   if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_Pyramid2" "', argument " "1"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_BarLorentz" "', argument " "1"" of type '" "double""'");
   } 
   arg1 = static_cast< double >(val1);
   ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
   if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_Pyramid2" "', argument " "2"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_BarLorentz" "', argument " "2"" of type '" "double""'");
   } 
   arg2 = static_cast< double >(val2);
   ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
   if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_Pyramid2" "', argument " "3"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_BarLorentz" "', argument " "3"" of type '" "double""'");
   } 
   arg3 = static_cast< double >(val3);
-  ecode4 = SWIG_AsVal_double(swig_obj[3], &val4);
-  if (!SWIG_IsOK(ecode4)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "new_Pyramid2" "', argument " "4"" of type '" "double""'");
-  } 
-  arg4 = static_cast< double >(val4);
-  result = (Pyramid2 *)new Pyramid2(arg1,arg2,arg3,arg4);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Pyramid2, SWIG_POINTER_NEW |  0 );
+  result = (BarLorentz *)new BarLorentz(arg1,arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_BarLorentz, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_Pyramid2__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_BarLorentz__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   std::vector< double,std::allocator< double > > arg1 ;
-  Pyramid2 *result = 0 ;
+  BarLorentz *result = 0 ;
   
   if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
   {
     std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
     int res = swig::asptr(swig_obj[0], &ptr);
     if (!SWIG_IsOK(res) || !ptr) {
-      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_Pyramid2" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
+      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_BarLorentz" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
     }
     arg1 = *ptr;
     if (SWIG_IsNewObj(res)) delete ptr;
   }
-  result = (Pyramid2 *)new Pyramid2(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Pyramid2, SWIG_POINTER_NEW |  0 );
+  result = (BarLorentz *)new BarLorentz(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_BarLorentz, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_Pyramid2(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_BarLorentz(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
-  PyObject *argv[5] = {
+  PyObject *argv[4] = {
     0
   };
   
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_Pyramid2", 0, 4, argv))) SWIG_fail;
+  if (!(argc = SWIG_Python_UnpackTuple(args, "new_BarLorentz", 0, 3, argv))) SWIG_fail;
   --argc;
   if (argc == 1) {
     int _v = 0;
     int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
     _v = SWIG_CheckState(res);
     if (_v) {
-      return _wrap_new_Pyramid2__SWIG_1(self, argc, argv);
+      return _wrap_new_BarLorentz__SWIG_1(self, argc, argv);
     }
   }
-  if (argc == 4) {
+  if (argc == 3) {
     int _v = 0;
     {
       int res = SWIG_AsVal_double(argv[0], NULL);
@@ -55317,53 +55970,47 @@ SWIGINTERN PyObject *_wrap_new_Pyramid2(PyObject *self, PyObject *args) {
           _v = SWIG_CheckState(res);
         }
         if (_v) {
-          {
-            int res = SWIG_AsVal_double(argv[3], NULL);
-            _v = SWIG_CheckState(res);
-          }
-          if (_v) {
-            return _wrap_new_Pyramid2__SWIG_0(self, argc, argv);
-          }
+          return _wrap_new_BarLorentz__SWIG_0(self, argc, argv);
         }
       }
     }
   }
   
 fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_Pyramid2'.\n"
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_BarLorentz'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    Pyramid2::Pyramid2(double,double,double,double)\n"
-    "    Pyramid2::Pyramid2(std::vector< double,std::allocator< double > >)\n");
+    "    BarLorentz::BarLorentz(double,double,double)\n"
+    "    BarLorentz::BarLorentz(std::vector< double,std::allocator< double > >)\n");
   return 0;
 }
 
 
-SWIGINTERN PyObject *_wrap_Pyramid2_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_BarLorentz_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Pyramid2 *arg1 = (Pyramid2 *) 0 ;
+  BarLorentz *arg1 = (BarLorentz *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  Pyramid2 *result = 0 ;
+  BarLorentz *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid2, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_BarLorentz, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid2_clone" "', argument " "1"" of type '" "Pyramid2 const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "BarLorentz_clone" "', argument " "1"" of type '" "BarLorentz const *""'"); 
   }
-  arg1 = reinterpret_cast< Pyramid2 * >(argp1);
-  result = (Pyramid2 *)((Pyramid2 const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Pyramid2, 0 |  0 );
+  arg1 = reinterpret_cast< BarLorentz * >(argp1);
+  result = (BarLorentz *)((BarLorentz const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_BarLorentz, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Pyramid2_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_BarLorentz_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Pyramid2 *arg1 = (Pyramid2 *) 0 ;
+  BarLorentz *arg1 = (BarLorentz *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -55371,12 +56018,12 @@ SWIGINTERN PyObject *_wrap_Pyramid2_className(PyObject *self, PyObject *args) {
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid2, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_BarLorentz, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid2_className" "', argument " "1"" of type '" "Pyramid2 const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "BarLorentz_className" "', argument " "1"" of type '" "BarLorentz const *""'"); 
   }
-  arg1 = reinterpret_cast< Pyramid2 * >(argp1);
-  result = ((Pyramid2 const *)arg1)->className();
+  arg1 = reinterpret_cast< BarLorentz * >(argp1);
+  result = ((BarLorentz const *)arg1)->className();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -55384,9 +56031,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Pyramid2_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_BarLorentz_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Pyramid2 *arg1 = (Pyramid2 *) 0 ;
+  BarLorentz *arg1 = (BarLorentz *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -55394,12 +56041,12 @@ SWIGINTERN PyObject *_wrap_Pyramid2_parDefs(PyObject *self, PyObject *args) {
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid2, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_BarLorentz, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid2_parDefs" "', argument " "1"" of type '" "Pyramid2 const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "BarLorentz_parDefs" "', argument " "1"" of type '" "BarLorentz const *""'"); 
   }
-  arg1 = reinterpret_cast< Pyramid2 * >(argp1);
-  result = ((Pyramid2 const *)arg1)->parDefs();
+  arg1 = reinterpret_cast< BarLorentz * >(argp1);
+  result = ((BarLorentz const *)arg1)->parDefs();
   resultobj = SWIG_NewPointerObj((new std::vector< ParaMeta,std::allocator< ParaMeta > >(result)), SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
@@ -55407,112 +56054,230 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Pyramid2_length(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_BarLorentz(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Pyramid2 *arg1 = (Pyramid2 *) 0 ;
+  BarLorentz *arg1 = (BarLorentz *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  double result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid2, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_BarLorentz, SWIG_POINTER_DISOWN |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid2_length" "', argument " "1"" of type '" "Pyramid2 const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_BarLorentz" "', argument " "1"" of type '" "BarLorentz *""'"); 
   }
-  arg1 = reinterpret_cast< Pyramid2 * >(argp1);
-  result = (double)((Pyramid2 const *)arg1)->length();
-  resultobj = SWIG_From_double(static_cast< double >(result));
+  arg1 = reinterpret_cast< BarLorentz * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Pyramid2_width(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *BarLorentz_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_BarLorentz, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *BarLorentz_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+
+SWIGINTERN PyObject *_wrap_new_CosineRippleBox__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
-  Pyramid2 *arg1 = (Pyramid2 *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  double result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid2, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid2_width" "', argument " "1"" of type '" "Pyramid2 const *""'"); 
+  double arg1 ;
+  double arg2 ;
+  double arg3 ;
+  double val1 ;
+  int ecode1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  CosineRippleBox *result = 0 ;
+  
+  if ((nobjs < 3) || (nobjs > 3)) SWIG_fail;
+  ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CosineRippleBox" "', argument " "1"" of type '" "double""'");
+  } 
+  arg1 = static_cast< double >(val1);
+  ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CosineRippleBox" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_CosineRippleBox" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  result = (CosineRippleBox *)new CosineRippleBox(arg1,arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CosineRippleBox, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CosineRippleBox__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::vector< double,std::allocator< double > > arg1 ;
+  CosineRippleBox *result = 0 ;
+  
+  if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
+  {
+    std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
+    int res = swig::asptr(swig_obj[0], &ptr);
+    if (!SWIG_IsOK(res) || !ptr) {
+      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_CosineRippleBox" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
+    }
+    arg1 = *ptr;
+    if (SWIG_IsNewObj(res)) delete ptr;
   }
-  arg1 = reinterpret_cast< Pyramid2 * >(argp1);
-  result = (double)((Pyramid2 const *)arg1)->width();
-  resultobj = SWIG_From_double(static_cast< double >(result));
+  result = (CosineRippleBox *)new CosineRippleBox(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CosineRippleBox, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Pyramid2_height(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_CosineRippleBox(PyObject *self, PyObject *args) {
+  Py_ssize_t argc;
+  PyObject *argv[4] = {
+    0
+  };
+  
+  if (!(argc = SWIG_Python_UnpackTuple(args, "new_CosineRippleBox", 0, 3, argv))) SWIG_fail;
+  --argc;
+  if (argc == 1) {
+    int _v = 0;
+    int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_CosineRippleBox__SWIG_1(self, argc, argv);
+    }
+  }
+  if (argc == 3) {
+    int _v = 0;
+    {
+      int res = SWIG_AsVal_double(argv[0], NULL);
+      _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_CosineRippleBox__SWIG_0(self, argc, argv);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_CosineRippleBox'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    CosineRippleBox::CosineRippleBox(double,double,double)\n"
+    "    CosineRippleBox::CosineRippleBox(std::vector< double,std::allocator< double > >)\n");
+  return 0;
+}
+
+
+SWIGINTERN PyObject *_wrap_CosineRippleBox_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Pyramid2 *arg1 = (Pyramid2 *) 0 ;
+  CosineRippleBox *arg1 = (CosineRippleBox *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  double result;
+  CosineRippleBox *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid2, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_CosineRippleBox, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid2_height" "', argument " "1"" of type '" "Pyramid2 const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CosineRippleBox_clone" "', argument " "1"" of type '" "CosineRippleBox const *""'"); 
   }
-  arg1 = reinterpret_cast< Pyramid2 * >(argp1);
-  result = (double)((Pyramid2 const *)arg1)->height();
-  resultobj = SWIG_From_double(static_cast< double >(result));
+  arg1 = reinterpret_cast< CosineRippleBox * >(argp1);
+  result = (CosineRippleBox *)((CosineRippleBox const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CosineRippleBox, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Pyramid2_alpha(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_CosineRippleBox_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Pyramid2 *arg1 = (Pyramid2 *) 0 ;
+  CosineRippleBox *arg1 = (CosineRippleBox *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  double result;
+  std::string result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid2, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_CosineRippleBox, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid2_alpha" "', argument " "1"" of type '" "Pyramid2 const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CosineRippleBox_className" "', argument " "1"" of type '" "CosineRippleBox const *""'"); 
   }
-  arg1 = reinterpret_cast< Pyramid2 * >(argp1);
-  result = (double)((Pyramid2 const *)arg1)->alpha();
-  resultobj = SWIG_From_double(static_cast< double >(result));
+  arg1 = reinterpret_cast< CosineRippleBox * >(argp1);
+  result = ((CosineRippleBox const *)arg1)->className();
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_Pyramid2(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_CosineRippleBox_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Pyramid2 *arg1 = (Pyramid2 *) 0 ;
+  CosineRippleBox *arg1 = (CosineRippleBox *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
+  SwigValueWrapper< std::vector< ParaMeta,std::allocator< ParaMeta > > > result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid2, SWIG_POINTER_DISOWN |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_CosineRippleBox, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Pyramid2" "', argument " "1"" of type '" "Pyramid2 *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CosineRippleBox_parDefs" "', argument " "1"" of type '" "CosineRippleBox const *""'"); 
   }
-  arg1 = reinterpret_cast< Pyramid2 * >(argp1);
+  arg1 = reinterpret_cast< CosineRippleBox * >(argp1);
+  result = ((CosineRippleBox const *)arg1)->parDefs();
+  resultobj = SWIG_NewPointerObj((new std::vector< ParaMeta,std::allocator< ParaMeta > >(result)), SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CosineRippleBox(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  CosineRippleBox *arg1 = (CosineRippleBox *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_CosineRippleBox, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CosineRippleBox" "', argument " "1"" of type '" "CosineRippleBox *""'"); 
+  }
+  arg1 = reinterpret_cast< CosineRippleBox * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -55521,18 +56286,18 @@ fail:
 }
 
 
-SWIGINTERN PyObject *Pyramid2_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *CosineRippleBox_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
   if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_Pyramid2, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_CosineRippleBox, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *Pyramid2_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *CosineRippleBox_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   return SWIG_Python_InitShadowInstance(args);
 }
 
-SWIGINTERN PyObject *_wrap_new_Pyramid3__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_CosineRippleGauss__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
   double arg2 ;
@@ -55543,69 +56308,69 @@ SWIGINTERN PyObject *_wrap_new_Pyramid3__SWIG_0(PyObject *self, Py_ssize_t nobjs
   int ecode2 = 0 ;
   double val3 ;
   int ecode3 = 0 ;
-  Pyramid3 *result = 0 ;
+  CosineRippleGauss *result = 0 ;
   
   if ((nobjs < 3) || (nobjs > 3)) SWIG_fail;
   ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
   if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_Pyramid3" "', argument " "1"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CosineRippleGauss" "', argument " "1"" of type '" "double""'");
   } 
   arg1 = static_cast< double >(val1);
   ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
   if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_Pyramid3" "', argument " "2"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CosineRippleGauss" "', argument " "2"" of type '" "double""'");
   } 
   arg2 = static_cast< double >(val2);
   ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
   if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_Pyramid3" "', argument " "3"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_CosineRippleGauss" "', argument " "3"" of type '" "double""'");
   } 
   arg3 = static_cast< double >(val3);
-  result = (Pyramid3 *)new Pyramid3(arg1,arg2,arg3);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Pyramid3, SWIG_POINTER_NEW |  0 );
+  result = (CosineRippleGauss *)new CosineRippleGauss(arg1,arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CosineRippleGauss, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_Pyramid3__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_CosineRippleGauss__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   std::vector< double,std::allocator< double > > arg1 ;
-  Pyramid3 *result = 0 ;
+  CosineRippleGauss *result = 0 ;
   
   if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
   {
     std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
     int res = swig::asptr(swig_obj[0], &ptr);
     if (!SWIG_IsOK(res) || !ptr) {
-      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_Pyramid3" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
+      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_CosineRippleGauss" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
     }
     arg1 = *ptr;
     if (SWIG_IsNewObj(res)) delete ptr;
   }
-  result = (Pyramid3 *)new Pyramid3(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Pyramid3, SWIG_POINTER_NEW |  0 );
+  result = (CosineRippleGauss *)new CosineRippleGauss(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CosineRippleGauss, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_Pyramid3(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_CosineRippleGauss(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
   PyObject *argv[4] = {
     0
   };
   
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_Pyramid3", 0, 3, argv))) SWIG_fail;
+  if (!(argc = SWIG_Python_UnpackTuple(args, "new_CosineRippleGauss", 0, 3, argv))) SWIG_fail;
   --argc;
   if (argc == 1) {
     int _v = 0;
     int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
     _v = SWIG_CheckState(res);
     if (_v) {
-      return _wrap_new_Pyramid3__SWIG_1(self, argc, argv);
+      return _wrap_new_CosineRippleGauss__SWIG_1(self, argc, argv);
     }
   }
   if (argc == 3) {
@@ -55625,47 +56390,47 @@ SWIGINTERN PyObject *_wrap_new_Pyramid3(PyObject *self, PyObject *args) {
           _v = SWIG_CheckState(res);
         }
         if (_v) {
-          return _wrap_new_Pyramid3__SWIG_0(self, argc, argv);
+          return _wrap_new_CosineRippleGauss__SWIG_0(self, argc, argv);
         }
       }
     }
   }
   
 fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_Pyramid3'.\n"
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_CosineRippleGauss'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    Pyramid3::Pyramid3(double,double,double)\n"
-    "    Pyramid3::Pyramid3(std::vector< double,std::allocator< double > >)\n");
+    "    CosineRippleGauss::CosineRippleGauss(double,double,double)\n"
+    "    CosineRippleGauss::CosineRippleGauss(std::vector< double,std::allocator< double > >)\n");
   return 0;
 }
 
 
-SWIGINTERN PyObject *_wrap_Pyramid3_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_CosineRippleGauss_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Pyramid3 *arg1 = (Pyramid3 *) 0 ;
+  CosineRippleGauss *arg1 = (CosineRippleGauss *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  Pyramid3 *result = 0 ;
+  CosineRippleGauss *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid3, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_CosineRippleGauss, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid3_clone" "', argument " "1"" of type '" "Pyramid3 const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CosineRippleGauss_clone" "', argument " "1"" of type '" "CosineRippleGauss const *""'"); 
   }
-  arg1 = reinterpret_cast< Pyramid3 * >(argp1);
-  result = (Pyramid3 *)((Pyramid3 const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Pyramid3, 0 |  0 );
+  arg1 = reinterpret_cast< CosineRippleGauss * >(argp1);
+  result = (CosineRippleGauss *)((CosineRippleGauss const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CosineRippleGauss, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Pyramid3_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_CosineRippleGauss_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Pyramid3 *arg1 = (Pyramid3 *) 0 ;
+  CosineRippleGauss *arg1 = (CosineRippleGauss *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -55673,12 +56438,12 @@ SWIGINTERN PyObject *_wrap_Pyramid3_className(PyObject *self, PyObject *args) {
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid3, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_CosineRippleGauss, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid3_className" "', argument " "1"" of type '" "Pyramid3 const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CosineRippleGauss_className" "', argument " "1"" of type '" "CosineRippleGauss const *""'"); 
   }
-  arg1 = reinterpret_cast< Pyramid3 * >(argp1);
-  result = ((Pyramid3 const *)arg1)->className();
+  arg1 = reinterpret_cast< CosineRippleGauss * >(argp1);
+  result = ((CosineRippleGauss const *)arg1)->className();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -55686,9 +56451,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Pyramid3_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_CosineRippleGauss_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Pyramid3 *arg1 = (Pyramid3 *) 0 ;
+  CosineRippleGauss *arg1 = (CosineRippleGauss *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -55696,12 +56461,12 @@ SWIGINTERN PyObject *_wrap_Pyramid3_parDefs(PyObject *self, PyObject *args) {
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid3, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_CosineRippleGauss, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid3_parDefs" "', argument " "1"" of type '" "Pyramid3 const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CosineRippleGauss_parDefs" "', argument " "1"" of type '" "CosineRippleGauss const *""'"); 
   }
-  arg1 = reinterpret_cast< Pyramid3 * >(argp1);
-  result = ((Pyramid3 const *)arg1)->parDefs();
+  arg1 = reinterpret_cast< CosineRippleGauss * >(argp1);
+  result = ((CosineRippleGauss const *)arg1)->parDefs();
   resultobj = SWIG_NewPointerObj((new std::vector< ParaMeta,std::allocator< ParaMeta > >(result)), SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
@@ -55709,89 +56474,20 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Pyramid3_baseEdge(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_CosineRippleGauss(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Pyramid3 *arg1 = (Pyramid3 *) 0 ;
+  CosineRippleGauss *arg1 = (CosineRippleGauss *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  double result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid3, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid3_baseEdge" "', argument " "1"" of type '" "Pyramid3 const *""'"); 
-  }
-  arg1 = reinterpret_cast< Pyramid3 * >(argp1);
-  result = (double)((Pyramid3 const *)arg1)->baseEdge();
-  resultobj = SWIG_From_double(static_cast< double >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_Pyramid3_height(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  Pyramid3 *arg1 = (Pyramid3 *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  double result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid3, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid3_height" "', argument " "1"" of type '" "Pyramid3 const *""'"); 
-  }
-  arg1 = reinterpret_cast< Pyramid3 * >(argp1);
-  result = (double)((Pyramid3 const *)arg1)->height();
-  resultobj = SWIG_From_double(static_cast< double >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_Pyramid3_alpha(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  Pyramid3 *arg1 = (Pyramid3 *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  double result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid3, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid3_alpha" "', argument " "1"" of type '" "Pyramid3 const *""'"); 
-  }
-  arg1 = reinterpret_cast< Pyramid3 * >(argp1);
-  result = (double)((Pyramid3 const *)arg1)->alpha();
-  resultobj = SWIG_From_double(static_cast< double >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_delete_Pyramid3(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  Pyramid3 *arg1 = (Pyramid3 *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid3, SWIG_POINTER_DISOWN |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_CosineRippleGauss, SWIG_POINTER_DISOWN |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Pyramid3" "', argument " "1"" of type '" "Pyramid3 *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CosineRippleGauss" "', argument " "1"" of type '" "CosineRippleGauss *""'"); 
   }
-  arg1 = reinterpret_cast< Pyramid3 * >(argp1);
+  arg1 = reinterpret_cast< CosineRippleGauss * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -55800,18 +56496,18 @@ fail:
 }
 
 
-SWIGINTERN PyObject *Pyramid3_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *CosineRippleGauss_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
   if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_Pyramid3, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_CosineRippleGauss, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *Pyramid3_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *CosineRippleGauss_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   return SWIG_Python_InitShadowInstance(args);
 }
 
-SWIGINTERN PyObject *_wrap_new_Pyramid4__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_CosineRippleLorentz__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
   double arg2 ;
@@ -55822,69 +56518,69 @@ SWIGINTERN PyObject *_wrap_new_Pyramid4__SWIG_0(PyObject *self, Py_ssize_t nobjs
   int ecode2 = 0 ;
   double val3 ;
   int ecode3 = 0 ;
-  Pyramid4 *result = 0 ;
+  CosineRippleLorentz *result = 0 ;
   
   if ((nobjs < 3) || (nobjs > 3)) SWIG_fail;
   ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
   if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_Pyramid4" "', argument " "1"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CosineRippleLorentz" "', argument " "1"" of type '" "double""'");
   } 
   arg1 = static_cast< double >(val1);
   ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
   if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_Pyramid4" "', argument " "2"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_CosineRippleLorentz" "', argument " "2"" of type '" "double""'");
   } 
   arg2 = static_cast< double >(val2);
   ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
   if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_Pyramid4" "', argument " "3"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_CosineRippleLorentz" "', argument " "3"" of type '" "double""'");
   } 
   arg3 = static_cast< double >(val3);
-  result = (Pyramid4 *)new Pyramid4(arg1,arg2,arg3);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Pyramid4, SWIG_POINTER_NEW |  0 );
+  result = (CosineRippleLorentz *)new CosineRippleLorentz(arg1,arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CosineRippleLorentz, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_Pyramid4__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_CosineRippleLorentz__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   std::vector< double,std::allocator< double > > arg1 ;
-  Pyramid4 *result = 0 ;
+  CosineRippleLorentz *result = 0 ;
   
   if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
   {
     std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
     int res = swig::asptr(swig_obj[0], &ptr);
     if (!SWIG_IsOK(res) || !ptr) {
-      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_Pyramid4" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
+      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_CosineRippleLorentz" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
     }
     arg1 = *ptr;
     if (SWIG_IsNewObj(res)) delete ptr;
   }
-  result = (Pyramid4 *)new Pyramid4(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Pyramid4, SWIG_POINTER_NEW |  0 );
+  result = (CosineRippleLorentz *)new CosineRippleLorentz(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CosineRippleLorentz, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_Pyramid4(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_CosineRippleLorentz(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
   PyObject *argv[4] = {
     0
   };
   
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_Pyramid4", 0, 3, argv))) SWIG_fail;
+  if (!(argc = SWIG_Python_UnpackTuple(args, "new_CosineRippleLorentz", 0, 3, argv))) SWIG_fail;
   --argc;
   if (argc == 1) {
     int _v = 0;
     int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
     _v = SWIG_CheckState(res);
     if (_v) {
-      return _wrap_new_Pyramid4__SWIG_1(self, argc, argv);
+      return _wrap_new_CosineRippleLorentz__SWIG_1(self, argc, argv);
     }
   }
   if (argc == 3) {
@@ -55904,47 +56600,47 @@ SWIGINTERN PyObject *_wrap_new_Pyramid4(PyObject *self, PyObject *args) {
           _v = SWIG_CheckState(res);
         }
         if (_v) {
-          return _wrap_new_Pyramid4__SWIG_0(self, argc, argv);
+          return _wrap_new_CosineRippleLorentz__SWIG_0(self, argc, argv);
         }
       }
     }
   }
   
 fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_Pyramid4'.\n"
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_CosineRippleLorentz'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    Pyramid4::Pyramid4(double,double,double)\n"
-    "    Pyramid4::Pyramid4(std::vector< double,std::allocator< double > >)\n");
+    "    CosineRippleLorentz::CosineRippleLorentz(double,double,double)\n"
+    "    CosineRippleLorentz::CosineRippleLorentz(std::vector< double,std::allocator< double > >)\n");
   return 0;
 }
 
 
-SWIGINTERN PyObject *_wrap_Pyramid4_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_CosineRippleLorentz_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Pyramid4 *arg1 = (Pyramid4 *) 0 ;
+  CosineRippleLorentz *arg1 = (CosineRippleLorentz *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  Pyramid4 *result = 0 ;
+  CosineRippleLorentz *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid4, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_CosineRippleLorentz, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid4_clone" "', argument " "1"" of type '" "Pyramid4 const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CosineRippleLorentz_clone" "', argument " "1"" of type '" "CosineRippleLorentz const *""'"); 
   }
-  arg1 = reinterpret_cast< Pyramid4 * >(argp1);
-  result = (Pyramid4 *)((Pyramid4 const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Pyramid4, 0 |  0 );
+  arg1 = reinterpret_cast< CosineRippleLorentz * >(argp1);
+  result = (CosineRippleLorentz *)((CosineRippleLorentz const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CosineRippleLorentz, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Pyramid4_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_CosineRippleLorentz_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Pyramid4 *arg1 = (Pyramid4 *) 0 ;
+  CosineRippleLorentz *arg1 = (CosineRippleLorentz *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -55952,12 +56648,12 @@ SWIGINTERN PyObject *_wrap_Pyramid4_className(PyObject *self, PyObject *args) {
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid4, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_CosineRippleLorentz, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid4_className" "', argument " "1"" of type '" "Pyramid4 const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CosineRippleLorentz_className" "', argument " "1"" of type '" "CosineRippleLorentz const *""'"); 
   }
-  arg1 = reinterpret_cast< Pyramid4 * >(argp1);
-  result = ((Pyramid4 const *)arg1)->className();
+  arg1 = reinterpret_cast< CosineRippleLorentz * >(argp1);
+  result = ((CosineRippleLorentz const *)arg1)->className();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -55965,9 +56661,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Pyramid4_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_CosineRippleLorentz_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Pyramid4 *arg1 = (Pyramid4 *) 0 ;
+  CosineRippleLorentz *arg1 = (CosineRippleLorentz *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -55975,12 +56671,12 @@ SWIGINTERN PyObject *_wrap_Pyramid4_parDefs(PyObject *self, PyObject *args) {
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid4, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_CosineRippleLorentz, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid4_parDefs" "', argument " "1"" of type '" "Pyramid4 const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CosineRippleLorentz_parDefs" "', argument " "1"" of type '" "CosineRippleLorentz const *""'"); 
   }
-  arg1 = reinterpret_cast< Pyramid4 * >(argp1);
-  result = ((Pyramid4 const *)arg1)->parDefs();
+  arg1 = reinterpret_cast< CosineRippleLorentz * >(argp1);
+  result = ((CosineRippleLorentz const *)arg1)->parDefs();
   resultobj = SWIG_NewPointerObj((new std::vector< ParaMeta,std::allocator< ParaMeta > >(result)), SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
@@ -55988,78 +56684,187 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Pyramid4_height(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_CosineRippleLorentz(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Pyramid4 *arg1 = (Pyramid4 *) 0 ;
+  CosineRippleLorentz *arg1 = (CosineRippleLorentz *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  double result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid4, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_CosineRippleLorentz, SWIG_POINTER_DISOWN |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid4_height" "', argument " "1"" of type '" "Pyramid4 const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CosineRippleLorentz" "', argument " "1"" of type '" "CosineRippleLorentz *""'"); 
   }
-  arg1 = reinterpret_cast< Pyramid4 * >(argp1);
-  result = (double)((Pyramid4 const *)arg1)->height();
-  resultobj = SWIG_From_double(static_cast< double >(result));
+  arg1 = reinterpret_cast< CosineRippleLorentz * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Pyramid4_baseEdge(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  Pyramid4 *arg1 = (Pyramid4 *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  double result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid4, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid4_baseEdge" "', argument " "1"" of type '" "Pyramid4 const *""'"); 
-  }
-  arg1 = reinterpret_cast< Pyramid4 * >(argp1);
-  result = (double)((Pyramid4 const *)arg1)->baseEdge();
-  resultobj = SWIG_From_double(static_cast< double >(result));
-  return resultobj;
-fail:
-  return NULL;
+SWIGINTERN PyObject *CosineRippleLorentz_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_CosineRippleLorentz, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
 }
 
+SWIGINTERN PyObject *CosineRippleLorentz_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
 
-SWIGINTERN PyObject *_wrap_Pyramid4_alpha(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_SawtoothRippleBox__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
-  Pyramid4 *arg1 = (Pyramid4 *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  double result;
+  double arg1 ;
+  double arg2 ;
+  double arg3 ;
+  double arg4 ;
+  double val1 ;
+  int ecode1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  SawtoothRippleBox *result = 0 ;
   
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid4, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid4_alpha" "', argument " "1"" of type '" "Pyramid4 const *""'"); 
-  }
-  arg1 = reinterpret_cast< Pyramid4 * >(argp1);
-  result = (double)((Pyramid4 const *)arg1)->alpha();
-  resultobj = SWIG_From_double(static_cast< double >(result));
+  if ((nobjs < 4) || (nobjs > 4)) SWIG_fail;
+  ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_SawtoothRippleBox" "', argument " "1"" of type '" "double""'");
+  } 
+  arg1 = static_cast< double >(val1);
+  ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_SawtoothRippleBox" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_SawtoothRippleBox" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_double(swig_obj[3], &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "new_SawtoothRippleBox" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  result = (SawtoothRippleBox *)new SawtoothRippleBox(arg1,arg2,arg3,arg4);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SawtoothRippleBox, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Pyramid4_validate(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_SawtoothRippleBox__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
-  Pyramid4 *arg1 = (Pyramid4 *) 0 ;
+  std::vector< double,std::allocator< double > > arg1 ;
+  SawtoothRippleBox *result = 0 ;
+  
+  if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
+  {
+    std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
+    int res = swig::asptr(swig_obj[0], &ptr);
+    if (!SWIG_IsOK(res) || !ptr) {
+      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_SawtoothRippleBox" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
+    }
+    arg1 = *ptr;
+    if (SWIG_IsNewObj(res)) delete ptr;
+  }
+  result = (SawtoothRippleBox *)new SawtoothRippleBox(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SawtoothRippleBox, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_SawtoothRippleBox(PyObject *self, PyObject *args) {
+  Py_ssize_t argc;
+  PyObject *argv[5] = {
+    0
+  };
+  
+  if (!(argc = SWIG_Python_UnpackTuple(args, "new_SawtoothRippleBox", 0, 4, argv))) SWIG_fail;
+  --argc;
+  if (argc == 1) {
+    int _v = 0;
+    int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_SawtoothRippleBox__SWIG_1(self, argc, argv);
+    }
+  }
+  if (argc == 4) {
+    int _v = 0;
+    {
+      int res = SWIG_AsVal_double(argv[0], NULL);
+      _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_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_new_SawtoothRippleBox__SWIG_0(self, argc, argv);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_SawtoothRippleBox'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    SawtoothRippleBox::SawtoothRippleBox(double,double,double,double)\n"
+    "    SawtoothRippleBox::SawtoothRippleBox(std::vector< double,std::allocator< double > >)\n");
+  return 0;
+}
+
+
+SWIGINTERN PyObject *_wrap_SawtoothRippleBox_clone(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  SawtoothRippleBox *arg1 = (SawtoothRippleBox *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  SawtoothRippleBox *result = 0 ;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SawtoothRippleBox, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SawtoothRippleBox_clone" "', argument " "1"" of type '" "SawtoothRippleBox const *""'"); 
+  }
+  arg1 = reinterpret_cast< SawtoothRippleBox * >(argp1);
+  result = (SawtoothRippleBox *)((SawtoothRippleBox const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SawtoothRippleBox, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SawtoothRippleBox_className(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  SawtoothRippleBox *arg1 = (SawtoothRippleBox *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -56067,12 +56872,12 @@ SWIGINTERN PyObject *_wrap_Pyramid4_validate(PyObject *self, PyObject *args) {
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid4, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SawtoothRippleBox, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid4_validate" "', argument " "1"" of type '" "Pyramid4 const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SawtoothRippleBox_className" "', argument " "1"" of type '" "SawtoothRippleBox const *""'"); 
   }
-  arg1 = reinterpret_cast< Pyramid4 * >(argp1);
-  result = ((Pyramid4 const *)arg1)->validate();
+  arg1 = reinterpret_cast< SawtoothRippleBox * >(argp1);
+  result = ((SawtoothRippleBox const *)arg1)->className();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -56080,20 +56885,43 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_Pyramid4(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_SawtoothRippleBox_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Pyramid4 *arg1 = (Pyramid4 *) 0 ;
+  SawtoothRippleBox *arg1 = (SawtoothRippleBox *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
+  SwigValueWrapper< std::vector< ParaMeta,std::allocator< ParaMeta > > > result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid4, SWIG_POINTER_DISOWN |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SawtoothRippleBox, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Pyramid4" "', argument " "1"" of type '" "Pyramid4 *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SawtoothRippleBox_parDefs" "', argument " "1"" of type '" "SawtoothRippleBox const *""'"); 
   }
-  arg1 = reinterpret_cast< Pyramid4 * >(argp1);
+  arg1 = reinterpret_cast< SawtoothRippleBox * >(argp1);
+  result = ((SawtoothRippleBox const *)arg1)->parDefs();
+  resultobj = SWIG_NewPointerObj((new std::vector< ParaMeta,std::allocator< ParaMeta > >(result)), SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_SawtoothRippleBox(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  SawtoothRippleBox *arg1 = (SawtoothRippleBox *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SawtoothRippleBox, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_SawtoothRippleBox" "', argument " "1"" of type '" "SawtoothRippleBox *""'"); 
+  }
+  arg1 = reinterpret_cast< SawtoothRippleBox * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -56102,94 +56930,102 @@ fail:
 }
 
 
-SWIGINTERN PyObject *Pyramid4_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *SawtoothRippleBox_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
   if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_Pyramid4, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_SawtoothRippleBox, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *Pyramid4_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *SawtoothRippleBox_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   return SWIG_Python_InitShadowInstance(args);
 }
 
-SWIGINTERN PyObject *_wrap_new_Pyramid6__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_SawtoothRippleGauss__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
   double arg2 ;
   double arg3 ;
+  double arg4 ;
   double val1 ;
   int ecode1 = 0 ;
   double val2 ;
   int ecode2 = 0 ;
   double val3 ;
   int ecode3 = 0 ;
-  Pyramid6 *result = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  SawtoothRippleGauss *result = 0 ;
   
-  if ((nobjs < 3) || (nobjs > 3)) SWIG_fail;
+  if ((nobjs < 4) || (nobjs > 4)) SWIG_fail;
   ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
   if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_Pyramid6" "', argument " "1"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_SawtoothRippleGauss" "', argument " "1"" of type '" "double""'");
   } 
   arg1 = static_cast< double >(val1);
   ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
   if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_Pyramid6" "', argument " "2"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_SawtoothRippleGauss" "', argument " "2"" of type '" "double""'");
   } 
   arg2 = static_cast< double >(val2);
   ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
   if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_Pyramid6" "', argument " "3"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_SawtoothRippleGauss" "', argument " "3"" of type '" "double""'");
   } 
   arg3 = static_cast< double >(val3);
-  result = (Pyramid6 *)new Pyramid6(arg1,arg2,arg3);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Pyramid6, SWIG_POINTER_NEW |  0 );
+  ecode4 = SWIG_AsVal_double(swig_obj[3], &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "new_SawtoothRippleGauss" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  result = (SawtoothRippleGauss *)new SawtoothRippleGauss(arg1,arg2,arg3,arg4);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SawtoothRippleGauss, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_Pyramid6__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_SawtoothRippleGauss__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   std::vector< double,std::allocator< double > > arg1 ;
-  Pyramid6 *result = 0 ;
+  SawtoothRippleGauss *result = 0 ;
   
   if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
   {
     std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
     int res = swig::asptr(swig_obj[0], &ptr);
     if (!SWIG_IsOK(res) || !ptr) {
-      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_Pyramid6" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
+      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_SawtoothRippleGauss" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
     }
     arg1 = *ptr;
     if (SWIG_IsNewObj(res)) delete ptr;
   }
-  result = (Pyramid6 *)new Pyramid6(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Pyramid6, SWIG_POINTER_NEW |  0 );
+  result = (SawtoothRippleGauss *)new SawtoothRippleGauss(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SawtoothRippleGauss, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_Pyramid6(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_SawtoothRippleGauss(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
-  PyObject *argv[4] = {
+  PyObject *argv[5] = {
     0
   };
   
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_Pyramid6", 0, 3, argv))) SWIG_fail;
+  if (!(argc = SWIG_Python_UnpackTuple(args, "new_SawtoothRippleGauss", 0, 4, argv))) SWIG_fail;
   --argc;
   if (argc == 1) {
     int _v = 0;
     int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
     _v = SWIG_CheckState(res);
     if (_v) {
-      return _wrap_new_Pyramid6__SWIG_1(self, argc, argv);
+      return _wrap_new_SawtoothRippleGauss__SWIG_1(self, argc, argv);
     }
   }
-  if (argc == 3) {
+  if (argc == 4) {
     int _v = 0;
     {
       int res = SWIG_AsVal_double(argv[0], NULL);
@@ -56206,47 +57042,53 @@ SWIGINTERN PyObject *_wrap_new_Pyramid6(PyObject *self, PyObject *args) {
           _v = SWIG_CheckState(res);
         }
         if (_v) {
-          return _wrap_new_Pyramid6__SWIG_0(self, argc, argv);
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_new_SawtoothRippleGauss__SWIG_0(self, argc, argv);
+          }
         }
       }
     }
   }
   
 fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_Pyramid6'.\n"
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_SawtoothRippleGauss'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    Pyramid6::Pyramid6(double,double,double)\n"
-    "    Pyramid6::Pyramid6(std::vector< double,std::allocator< double > >)\n");
+    "    SawtoothRippleGauss::SawtoothRippleGauss(double,double,double,double)\n"
+    "    SawtoothRippleGauss::SawtoothRippleGauss(std::vector< double,std::allocator< double > >)\n");
   return 0;
 }
 
 
-SWIGINTERN PyObject *_wrap_Pyramid6_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_SawtoothRippleGauss_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Pyramid6 *arg1 = (Pyramid6 *) 0 ;
+  SawtoothRippleGauss *arg1 = (SawtoothRippleGauss *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  Pyramid6 *result = 0 ;
+  SawtoothRippleGauss *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid6, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SawtoothRippleGauss, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid6_clone" "', argument " "1"" of type '" "Pyramid6 const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SawtoothRippleGauss_clone" "', argument " "1"" of type '" "SawtoothRippleGauss const *""'"); 
   }
-  arg1 = reinterpret_cast< Pyramid6 * >(argp1);
-  result = (Pyramid6 *)((Pyramid6 const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Pyramid6, 0 |  0 );
+  arg1 = reinterpret_cast< SawtoothRippleGauss * >(argp1);
+  result = (SawtoothRippleGauss *)((SawtoothRippleGauss const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SawtoothRippleGauss, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Pyramid6_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_SawtoothRippleGauss_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Pyramid6 *arg1 = (Pyramid6 *) 0 ;
+  SawtoothRippleGauss *arg1 = (SawtoothRippleGauss *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -56254,12 +57096,12 @@ SWIGINTERN PyObject *_wrap_Pyramid6_className(PyObject *self, PyObject *args) {
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid6, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SawtoothRippleGauss, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid6_className" "', argument " "1"" of type '" "Pyramid6 const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SawtoothRippleGauss_className" "', argument " "1"" of type '" "SawtoothRippleGauss const *""'"); 
   }
-  arg1 = reinterpret_cast< Pyramid6 * >(argp1);
-  result = ((Pyramid6 const *)arg1)->className();
+  arg1 = reinterpret_cast< SawtoothRippleGauss * >(argp1);
+  result = ((SawtoothRippleGauss const *)arg1)->className();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -56267,9 +57109,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Pyramid6_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_SawtoothRippleGauss_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Pyramid6 *arg1 = (Pyramid6 *) 0 ;
+  SawtoothRippleGauss *arg1 = (SawtoothRippleGauss *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -56277,12 +57119,12 @@ SWIGINTERN PyObject *_wrap_Pyramid6_parDefs(PyObject *self, PyObject *args) {
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid6, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SawtoothRippleGauss, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid6_parDefs" "', argument " "1"" of type '" "Pyramid6 const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SawtoothRippleGauss_parDefs" "', argument " "1"" of type '" "SawtoothRippleGauss const *""'"); 
   }
-  arg1 = reinterpret_cast< Pyramid6 * >(argp1);
-  result = ((Pyramid6 const *)arg1)->parDefs();
+  arg1 = reinterpret_cast< SawtoothRippleGauss * >(argp1);
+  result = ((SawtoothRippleGauss const *)arg1)->parDefs();
   resultobj = SWIG_NewPointerObj((new std::vector< ParaMeta,std::allocator< ParaMeta > >(result)), SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
@@ -56290,112 +57132,20 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Pyramid6_baseEdge(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_SawtoothRippleGauss(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Pyramid6 *arg1 = (Pyramid6 *) 0 ;
+  SawtoothRippleGauss *arg1 = (SawtoothRippleGauss *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  double result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid6, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SawtoothRippleGauss, SWIG_POINTER_DISOWN |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid6_baseEdge" "', argument " "1"" of type '" "Pyramid6 const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_SawtoothRippleGauss" "', argument " "1"" of type '" "SawtoothRippleGauss *""'"); 
   }
-  arg1 = reinterpret_cast< Pyramid6 * >(argp1);
-  result = (double)((Pyramid6 const *)arg1)->baseEdge();
-  resultobj = SWIG_From_double(static_cast< double >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_Pyramid6_height(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  Pyramid6 *arg1 = (Pyramid6 *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  double result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid6, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid6_height" "', argument " "1"" of type '" "Pyramid6 const *""'"); 
-  }
-  arg1 = reinterpret_cast< Pyramid6 * >(argp1);
-  result = (double)((Pyramid6 const *)arg1)->height();
-  resultobj = SWIG_From_double(static_cast< double >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_Pyramid6_alpha(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  Pyramid6 *arg1 = (Pyramid6 *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  double result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid6, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid6_alpha" "', argument " "1"" of type '" "Pyramid6 const *""'"); 
-  }
-  arg1 = reinterpret_cast< Pyramid6 * >(argp1);
-  result = (double)((Pyramid6 const *)arg1)->alpha();
-  resultobj = SWIG_From_double(static_cast< double >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_Pyramid6_validate(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  Pyramid6 *arg1 = (Pyramid6 *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  std::string result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid6, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid6_validate" "', argument " "1"" of type '" "Pyramid6 const *""'"); 
-  }
-  arg1 = reinterpret_cast< Pyramid6 * >(argp1);
-  result = ((Pyramid6 const *)arg1)->validate();
-  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_delete_Pyramid6(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  Pyramid6 *arg1 = (Pyramid6 *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Pyramid6, SWIG_POINTER_DISOWN |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Pyramid6" "', argument " "1"" of type '" "Pyramid6 *""'"); 
-  }
-  arg1 = reinterpret_cast< Pyramid6 * >(argp1);
+  arg1 = reinterpret_cast< SawtoothRippleGauss * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -56404,18 +57154,18 @@ fail:
 }
 
 
-SWIGINTERN PyObject *Pyramid6_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *SawtoothRippleGauss_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
   if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_Pyramid6, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_SawtoothRippleGauss, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *Pyramid6_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *SawtoothRippleGauss_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   return SWIG_Python_InitShadowInstance(args);
 }
 
-SWIGINTERN PyObject *_wrap_new_SawtoothRippleBox__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_SawtoothRippleLorentz__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
   double arg2 ;
@@ -56429,74 +57179,74 @@ SWIGINTERN PyObject *_wrap_new_SawtoothRippleBox__SWIG_0(PyObject *self, Py_ssiz
   int ecode3 = 0 ;
   double val4 ;
   int ecode4 = 0 ;
-  SawtoothRippleBox *result = 0 ;
+  SawtoothRippleLorentz *result = 0 ;
   
   if ((nobjs < 4) || (nobjs > 4)) SWIG_fail;
   ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
   if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_SawtoothRippleBox" "', argument " "1"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_SawtoothRippleLorentz" "', argument " "1"" of type '" "double""'");
   } 
   arg1 = static_cast< double >(val1);
   ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
   if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_SawtoothRippleBox" "', argument " "2"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_SawtoothRippleLorentz" "', argument " "2"" of type '" "double""'");
   } 
   arg2 = static_cast< double >(val2);
   ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
   if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_SawtoothRippleBox" "', argument " "3"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_SawtoothRippleLorentz" "', argument " "3"" of type '" "double""'");
   } 
   arg3 = static_cast< double >(val3);
   ecode4 = SWIG_AsVal_double(swig_obj[3], &val4);
   if (!SWIG_IsOK(ecode4)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "new_SawtoothRippleBox" "', argument " "4"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "new_SawtoothRippleLorentz" "', argument " "4"" of type '" "double""'");
   } 
   arg4 = static_cast< double >(val4);
-  result = (SawtoothRippleBox *)new SawtoothRippleBox(arg1,arg2,arg3,arg4);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SawtoothRippleBox, SWIG_POINTER_NEW |  0 );
+  result = (SawtoothRippleLorentz *)new SawtoothRippleLorentz(arg1,arg2,arg3,arg4);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SawtoothRippleLorentz, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_SawtoothRippleBox__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_SawtoothRippleLorentz__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   std::vector< double,std::allocator< double > > arg1 ;
-  SawtoothRippleBox *result = 0 ;
+  SawtoothRippleLorentz *result = 0 ;
   
   if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
   {
     std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
     int res = swig::asptr(swig_obj[0], &ptr);
     if (!SWIG_IsOK(res) || !ptr) {
-      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_SawtoothRippleBox" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
+      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_SawtoothRippleLorentz" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
     }
     arg1 = *ptr;
     if (SWIG_IsNewObj(res)) delete ptr;
   }
-  result = (SawtoothRippleBox *)new SawtoothRippleBox(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SawtoothRippleBox, SWIG_POINTER_NEW |  0 );
+  result = (SawtoothRippleLorentz *)new SawtoothRippleLorentz(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SawtoothRippleLorentz, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_SawtoothRippleBox(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_SawtoothRippleLorentz(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
   PyObject *argv[5] = {
     0
   };
   
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_SawtoothRippleBox", 0, 4, argv))) SWIG_fail;
+  if (!(argc = SWIG_Python_UnpackTuple(args, "new_SawtoothRippleLorentz", 0, 4, argv))) SWIG_fail;
   --argc;
   if (argc == 1) {
     int _v = 0;
     int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
     _v = SWIG_CheckState(res);
     if (_v) {
-      return _wrap_new_SawtoothRippleBox__SWIG_1(self, argc, argv);
+      return _wrap_new_SawtoothRippleLorentz__SWIG_1(self, argc, argv);
     }
   }
   if (argc == 4) {
@@ -56521,7 +57271,7 @@ SWIGINTERN PyObject *_wrap_new_SawtoothRippleBox(PyObject *self, PyObject *args)
             _v = SWIG_CheckState(res);
           }
           if (_v) {
-            return _wrap_new_SawtoothRippleBox__SWIG_0(self, argc, argv);
+            return _wrap_new_SawtoothRippleLorentz__SWIG_0(self, argc, argv);
           }
         }
       }
@@ -56529,40 +57279,40 @@ SWIGINTERN PyObject *_wrap_new_SawtoothRippleBox(PyObject *self, PyObject *args)
   }
   
 fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_SawtoothRippleBox'.\n"
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_SawtoothRippleLorentz'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    SawtoothRippleBox::SawtoothRippleBox(double,double,double,double)\n"
-    "    SawtoothRippleBox::SawtoothRippleBox(std::vector< double,std::allocator< double > >)\n");
+    "    SawtoothRippleLorentz::SawtoothRippleLorentz(double,double,double,double)\n"
+    "    SawtoothRippleLorentz::SawtoothRippleLorentz(std::vector< double,std::allocator< double > >)\n");
   return 0;
 }
 
 
-SWIGINTERN PyObject *_wrap_SawtoothRippleBox_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_SawtoothRippleLorentz_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  SawtoothRippleBox *arg1 = (SawtoothRippleBox *) 0 ;
+  SawtoothRippleLorentz *arg1 = (SawtoothRippleLorentz *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  SawtoothRippleBox *result = 0 ;
+  SawtoothRippleLorentz *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SawtoothRippleBox, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SawtoothRippleLorentz, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SawtoothRippleBox_clone" "', argument " "1"" of type '" "SawtoothRippleBox const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SawtoothRippleLorentz_clone" "', argument " "1"" of type '" "SawtoothRippleLorentz const *""'"); 
   }
-  arg1 = reinterpret_cast< SawtoothRippleBox * >(argp1);
-  result = (SawtoothRippleBox *)((SawtoothRippleBox const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SawtoothRippleBox, 0 |  0 );
+  arg1 = reinterpret_cast< SawtoothRippleLorentz * >(argp1);
+  result = (SawtoothRippleLorentz *)((SawtoothRippleLorentz const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SawtoothRippleLorentz, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_SawtoothRippleBox_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_SawtoothRippleLorentz_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  SawtoothRippleBox *arg1 = (SawtoothRippleBox *) 0 ;
+  SawtoothRippleLorentz *arg1 = (SawtoothRippleLorentz *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -56570,12 +57320,12 @@ SWIGINTERN PyObject *_wrap_SawtoothRippleBox_className(PyObject *self, PyObject
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SawtoothRippleBox, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SawtoothRippleLorentz, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SawtoothRippleBox_className" "', argument " "1"" of type '" "SawtoothRippleBox const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SawtoothRippleLorentz_className" "', argument " "1"" of type '" "SawtoothRippleLorentz const *""'"); 
   }
-  arg1 = reinterpret_cast< SawtoothRippleBox * >(argp1);
-  result = ((SawtoothRippleBox const *)arg1)->className();
+  arg1 = reinterpret_cast< SawtoothRippleLorentz * >(argp1);
+  result = ((SawtoothRippleLorentz const *)arg1)->className();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -56583,9 +57333,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_SawtoothRippleBox_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_SawtoothRippleLorentz_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  SawtoothRippleBox *arg1 = (SawtoothRippleBox *) 0 ;
+  SawtoothRippleLorentz *arg1 = (SawtoothRippleLorentz *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -56593,12 +57343,12 @@ SWIGINTERN PyObject *_wrap_SawtoothRippleBox_parDefs(PyObject *self, PyObject *a
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SawtoothRippleBox, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SawtoothRippleLorentz, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SawtoothRippleBox_parDefs" "', argument " "1"" of type '" "SawtoothRippleBox const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SawtoothRippleLorentz_parDefs" "', argument " "1"" of type '" "SawtoothRippleLorentz const *""'"); 
   }
-  arg1 = reinterpret_cast< SawtoothRippleBox * >(argp1);
-  result = ((SawtoothRippleBox const *)arg1)->parDefs();
+  arg1 = reinterpret_cast< SawtoothRippleLorentz * >(argp1);
+  result = ((SawtoothRippleLorentz const *)arg1)->parDefs();
   resultobj = SWIG_NewPointerObj((new std::vector< ParaMeta,std::allocator< ParaMeta > >(result)), SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
@@ -56606,20 +57356,20 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_SawtoothRippleBox(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_SawtoothRippleLorentz(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  SawtoothRippleBox *arg1 = (SawtoothRippleBox *) 0 ;
+  SawtoothRippleLorentz *arg1 = (SawtoothRippleLorentz *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SawtoothRippleBox, SWIG_POINTER_DISOWN |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SawtoothRippleLorentz, SWIG_POINTER_DISOWN |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_SawtoothRippleBox" "', argument " "1"" of type '" "SawtoothRippleBox *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_SawtoothRippleLorentz" "', argument " "1"" of type '" "SawtoothRippleLorentz *""'"); 
   }
-  arg1 = reinterpret_cast< SawtoothRippleBox * >(argp1);
+  arg1 = reinterpret_cast< SawtoothRippleLorentz * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -56628,102 +57378,94 @@ fail:
 }
 
 
-SWIGINTERN PyObject *SawtoothRippleBox_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *SawtoothRippleLorentz_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
   if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_SawtoothRippleBox, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_SawtoothRippleLorentz, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *SawtoothRippleBox_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *SawtoothRippleLorentz_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   return SWIG_Python_InitShadowInstance(args);
 }
 
-SWIGINTERN PyObject *_wrap_new_SawtoothRippleGauss__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_LongBoxGauss__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
   double arg2 ;
   double arg3 ;
-  double arg4 ;
   double val1 ;
   int ecode1 = 0 ;
   double val2 ;
   int ecode2 = 0 ;
   double val3 ;
   int ecode3 = 0 ;
-  double val4 ;
-  int ecode4 = 0 ;
-  SawtoothRippleGauss *result = 0 ;
+  LongBoxGauss *result = 0 ;
   
-  if ((nobjs < 4) || (nobjs > 4)) SWIG_fail;
+  if ((nobjs < 3) || (nobjs > 3)) SWIG_fail;
   ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
   if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_SawtoothRippleGauss" "', argument " "1"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_LongBoxGauss" "', argument " "1"" of type '" "double""'");
   } 
   arg1 = static_cast< double >(val1);
   ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
   if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_SawtoothRippleGauss" "', argument " "2"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_LongBoxGauss" "', argument " "2"" of type '" "double""'");
   } 
   arg2 = static_cast< double >(val2);
   ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
   if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_SawtoothRippleGauss" "', argument " "3"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_LongBoxGauss" "', argument " "3"" of type '" "double""'");
   } 
   arg3 = static_cast< double >(val3);
-  ecode4 = SWIG_AsVal_double(swig_obj[3], &val4);
-  if (!SWIG_IsOK(ecode4)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "new_SawtoothRippleGauss" "', argument " "4"" of type '" "double""'");
-  } 
-  arg4 = static_cast< double >(val4);
-  result = (SawtoothRippleGauss *)new SawtoothRippleGauss(arg1,arg2,arg3,arg4);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SawtoothRippleGauss, SWIG_POINTER_NEW |  0 );
+  result = (LongBoxGauss *)new LongBoxGauss(arg1,arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_LongBoxGauss, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_SawtoothRippleGauss__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_LongBoxGauss__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   std::vector< double,std::allocator< double > > arg1 ;
-  SawtoothRippleGauss *result = 0 ;
+  LongBoxGauss *result = 0 ;
   
   if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
   {
     std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
     int res = swig::asptr(swig_obj[0], &ptr);
     if (!SWIG_IsOK(res) || !ptr) {
-      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_SawtoothRippleGauss" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
+      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_LongBoxGauss" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
     }
     arg1 = *ptr;
     if (SWIG_IsNewObj(res)) delete ptr;
   }
-  result = (SawtoothRippleGauss *)new SawtoothRippleGauss(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SawtoothRippleGauss, SWIG_POINTER_NEW |  0 );
+  result = (LongBoxGauss *)new LongBoxGauss(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_LongBoxGauss, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_SawtoothRippleGauss(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_LongBoxGauss(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
-  PyObject *argv[5] = {
+  PyObject *argv[4] = {
     0
   };
   
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_SawtoothRippleGauss", 0, 4, argv))) SWIG_fail;
+  if (!(argc = SWIG_Python_UnpackTuple(args, "new_LongBoxGauss", 0, 3, argv))) SWIG_fail;
   --argc;
   if (argc == 1) {
     int _v = 0;
     int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
     _v = SWIG_CheckState(res);
     if (_v) {
-      return _wrap_new_SawtoothRippleGauss__SWIG_1(self, argc, argv);
+      return _wrap_new_LongBoxGauss__SWIG_1(self, argc, argv);
     }
   }
-  if (argc == 4) {
+  if (argc == 3) {
     int _v = 0;
     {
       int res = SWIG_AsVal_double(argv[0], NULL);
@@ -56740,53 +57482,47 @@ SWIGINTERN PyObject *_wrap_new_SawtoothRippleGauss(PyObject *self, PyObject *arg
           _v = SWIG_CheckState(res);
         }
         if (_v) {
-          {
-            int res = SWIG_AsVal_double(argv[3], NULL);
-            _v = SWIG_CheckState(res);
-          }
-          if (_v) {
-            return _wrap_new_SawtoothRippleGauss__SWIG_0(self, argc, argv);
-          }
+          return _wrap_new_LongBoxGauss__SWIG_0(self, argc, argv);
         }
       }
     }
   }
   
 fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_SawtoothRippleGauss'.\n"
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_LongBoxGauss'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    SawtoothRippleGauss::SawtoothRippleGauss(double,double,double,double)\n"
-    "    SawtoothRippleGauss::SawtoothRippleGauss(std::vector< double,std::allocator< double > >)\n");
+    "    LongBoxGauss::LongBoxGauss(double,double,double)\n"
+    "    LongBoxGauss::LongBoxGauss(std::vector< double,std::allocator< double > >)\n");
   return 0;
 }
 
 
-SWIGINTERN PyObject *_wrap_SawtoothRippleGauss_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_LongBoxGauss_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  SawtoothRippleGauss *arg1 = (SawtoothRippleGauss *) 0 ;
+  LongBoxGauss *arg1 = (LongBoxGauss *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  SawtoothRippleGauss *result = 0 ;
+  LongBoxGauss *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SawtoothRippleGauss, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_LongBoxGauss, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SawtoothRippleGauss_clone" "', argument " "1"" of type '" "SawtoothRippleGauss const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LongBoxGauss_clone" "', argument " "1"" of type '" "LongBoxGauss const *""'"); 
   }
-  arg1 = reinterpret_cast< SawtoothRippleGauss * >(argp1);
-  result = (SawtoothRippleGauss *)((SawtoothRippleGauss const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SawtoothRippleGauss, 0 |  0 );
+  arg1 = reinterpret_cast< LongBoxGauss * >(argp1);
+  result = (LongBoxGauss *)((LongBoxGauss const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_LongBoxGauss, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_SawtoothRippleGauss_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_LongBoxGauss_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  SawtoothRippleGauss *arg1 = (SawtoothRippleGauss *) 0 ;
+  LongBoxGauss *arg1 = (LongBoxGauss *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -56794,12 +57530,12 @@ SWIGINTERN PyObject *_wrap_SawtoothRippleGauss_className(PyObject *self, PyObjec
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SawtoothRippleGauss, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_LongBoxGauss, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SawtoothRippleGauss_className" "', argument " "1"" of type '" "SawtoothRippleGauss const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LongBoxGauss_className" "', argument " "1"" of type '" "LongBoxGauss const *""'"); 
   }
-  arg1 = reinterpret_cast< SawtoothRippleGauss * >(argp1);
-  result = ((SawtoothRippleGauss const *)arg1)->className();
+  arg1 = reinterpret_cast< LongBoxGauss * >(argp1);
+  result = ((LongBoxGauss const *)arg1)->className();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -56807,9 +57543,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_SawtoothRippleGauss_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_LongBoxGauss_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  SawtoothRippleGauss *arg1 = (SawtoothRippleGauss *) 0 ;
+  LongBoxGauss *arg1 = (LongBoxGauss *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -56817,12 +57553,12 @@ SWIGINTERN PyObject *_wrap_SawtoothRippleGauss_parDefs(PyObject *self, PyObject
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SawtoothRippleGauss, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_LongBoxGauss, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SawtoothRippleGauss_parDefs" "', argument " "1"" of type '" "SawtoothRippleGauss const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LongBoxGauss_parDefs" "', argument " "1"" of type '" "LongBoxGauss const *""'"); 
   }
-  arg1 = reinterpret_cast< SawtoothRippleGauss * >(argp1);
-  result = ((SawtoothRippleGauss const *)arg1)->parDefs();
+  arg1 = reinterpret_cast< LongBoxGauss * >(argp1);
+  result = ((LongBoxGauss const *)arg1)->parDefs();
   resultobj = SWIG_NewPointerObj((new std::vector< ParaMeta,std::allocator< ParaMeta > >(result)), SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
@@ -56830,20 +57566,173 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_SawtoothRippleGauss(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_LongBoxGauss_length(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  SawtoothRippleGauss *arg1 = (SawtoothRippleGauss *) 0 ;
+  LongBoxGauss *arg1 = (LongBoxGauss *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
+  double result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SawtoothRippleGauss, SWIG_POINTER_DISOWN |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_LongBoxGauss, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_SawtoothRippleGauss" "', argument " "1"" of type '" "SawtoothRippleGauss *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LongBoxGauss_length" "', argument " "1"" of type '" "LongBoxGauss const *""'"); 
   }
-  arg1 = reinterpret_cast< SawtoothRippleGauss * >(argp1);
+  arg1 = reinterpret_cast< LongBoxGauss * >(argp1);
+  result = (double)((LongBoxGauss const *)arg1)->length();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_LongBoxGauss_height(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  LongBoxGauss *arg1 = (LongBoxGauss *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  double result;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_LongBoxGauss, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LongBoxGauss_height" "', argument " "1"" of type '" "LongBoxGauss const *""'"); 
+  }
+  arg1 = reinterpret_cast< LongBoxGauss * >(argp1);
+  result = (double)((LongBoxGauss const *)arg1)->height();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_LongBoxGauss_width(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  LongBoxGauss *arg1 = (LongBoxGauss *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  double result;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_LongBoxGauss, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LongBoxGauss_width" "', argument " "1"" of type '" "LongBoxGauss const *""'"); 
+  }
+  arg1 = reinterpret_cast< LongBoxGauss * >(argp1);
+  result = (double)((LongBoxGauss const *)arg1)->width();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_LongBoxGauss_radialExtension(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  LongBoxGauss *arg1 = (LongBoxGauss *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  double result;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_LongBoxGauss, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LongBoxGauss_radialExtension" "', argument " "1"" of type '" "LongBoxGauss const *""'"); 
+  }
+  arg1 = reinterpret_cast< LongBoxGauss * >(argp1);
+  result = (double)((LongBoxGauss const *)arg1)->radialExtension();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_LongBoxGauss_formfactor(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  LongBoxGauss *arg1 = (LongBoxGauss *) 0 ;
+  C3 arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  complex_t result;
+  
+  if (!SWIG_Python_UnpackTuple(args, "LongBoxGauss_formfactor", 2, 2, swig_obj)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_LongBoxGauss, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LongBoxGauss_formfactor" "', argument " "1"" of type '" "LongBoxGauss const *""'"); 
+  }
+  arg1 = reinterpret_cast< LongBoxGauss * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_Vec3T_std__complexT_double_t_t,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "LongBoxGauss_formfactor" "', argument " "2"" of type '" "C3""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "LongBoxGauss_formfactor" "', argument " "2"" of type '" "C3""'");
+    } else {
+      C3 * temp = reinterpret_cast< C3 * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  result = ((LongBoxGauss const *)arg1)->formfactor(arg2);
+  resultobj = SWIG_From_std_complex_Sl_double_Sg_(static_cast< std::complex<double> >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_LongBoxGauss_validate(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  LongBoxGauss *arg1 = (LongBoxGauss *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  std::string result;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_LongBoxGauss, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LongBoxGauss_validate" "', argument " "1"" of type '" "LongBoxGauss const *""'"); 
+  }
+  arg1 = reinterpret_cast< LongBoxGauss * >(argp1);
+  result = ((LongBoxGauss const *)arg1)->validate();
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_LongBoxGauss(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  LongBoxGauss *arg1 = (LongBoxGauss *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_LongBoxGauss, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_LongBoxGauss" "', argument " "1"" of type '" "LongBoxGauss *""'"); 
+  }
+  arg1 = reinterpret_cast< LongBoxGauss * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -56852,102 +57741,94 @@ fail:
 }
 
 
-SWIGINTERN PyObject *SawtoothRippleGauss_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *LongBoxGauss_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
   if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_SawtoothRippleGauss, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_LongBoxGauss, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *SawtoothRippleGauss_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *LongBoxGauss_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   return SWIG_Python_InitShadowInstance(args);
 }
 
-SWIGINTERN PyObject *_wrap_new_SawtoothRippleLorentz__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_LongBoxLorentz__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
   double arg2 ;
   double arg3 ;
-  double arg4 ;
   double val1 ;
   int ecode1 = 0 ;
   double val2 ;
   int ecode2 = 0 ;
   double val3 ;
   int ecode3 = 0 ;
-  double val4 ;
-  int ecode4 = 0 ;
-  SawtoothRippleLorentz *result = 0 ;
+  LongBoxLorentz *result = 0 ;
   
-  if ((nobjs < 4) || (nobjs > 4)) SWIG_fail;
+  if ((nobjs < 3) || (nobjs > 3)) SWIG_fail;
   ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
   if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_SawtoothRippleLorentz" "', argument " "1"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_LongBoxLorentz" "', argument " "1"" of type '" "double""'");
   } 
   arg1 = static_cast< double >(val1);
   ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
   if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_SawtoothRippleLorentz" "', argument " "2"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_LongBoxLorentz" "', argument " "2"" of type '" "double""'");
   } 
   arg2 = static_cast< double >(val2);
   ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
   if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_SawtoothRippleLorentz" "', argument " "3"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_LongBoxLorentz" "', argument " "3"" of type '" "double""'");
   } 
   arg3 = static_cast< double >(val3);
-  ecode4 = SWIG_AsVal_double(swig_obj[3], &val4);
-  if (!SWIG_IsOK(ecode4)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "new_SawtoothRippleLorentz" "', argument " "4"" of type '" "double""'");
-  } 
-  arg4 = static_cast< double >(val4);
-  result = (SawtoothRippleLorentz *)new SawtoothRippleLorentz(arg1,arg2,arg3,arg4);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SawtoothRippleLorentz, SWIG_POINTER_NEW |  0 );
+  result = (LongBoxLorentz *)new LongBoxLorentz(arg1,arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_LongBoxLorentz, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_SawtoothRippleLorentz__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_LongBoxLorentz__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   std::vector< double,std::allocator< double > > arg1 ;
-  SawtoothRippleLorentz *result = 0 ;
+  LongBoxLorentz *result = 0 ;
   
   if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
   {
     std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
     int res = swig::asptr(swig_obj[0], &ptr);
     if (!SWIG_IsOK(res) || !ptr) {
-      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_SawtoothRippleLorentz" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
+      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_LongBoxLorentz" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
     }
     arg1 = *ptr;
     if (SWIG_IsNewObj(res)) delete ptr;
   }
-  result = (SawtoothRippleLorentz *)new SawtoothRippleLorentz(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SawtoothRippleLorentz, SWIG_POINTER_NEW |  0 );
+  result = (LongBoxLorentz *)new LongBoxLorentz(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_LongBoxLorentz, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_SawtoothRippleLorentz(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_LongBoxLorentz(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
-  PyObject *argv[5] = {
+  PyObject *argv[4] = {
     0
   };
   
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_SawtoothRippleLorentz", 0, 4, argv))) SWIG_fail;
+  if (!(argc = SWIG_Python_UnpackTuple(args, "new_LongBoxLorentz", 0, 3, argv))) SWIG_fail;
   --argc;
   if (argc == 1) {
     int _v = 0;
     int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
     _v = SWIG_CheckState(res);
     if (_v) {
-      return _wrap_new_SawtoothRippleLorentz__SWIG_1(self, argc, argv);
+      return _wrap_new_LongBoxLorentz__SWIG_1(self, argc, argv);
     }
   }
-  if (argc == 4) {
+  if (argc == 3) {
     int _v = 0;
     {
       int res = SWIG_AsVal_double(argv[0], NULL);
@@ -56964,53 +57845,47 @@ SWIGINTERN PyObject *_wrap_new_SawtoothRippleLorentz(PyObject *self, PyObject *a
           _v = SWIG_CheckState(res);
         }
         if (_v) {
-          {
-            int res = SWIG_AsVal_double(argv[3], NULL);
-            _v = SWIG_CheckState(res);
-          }
-          if (_v) {
-            return _wrap_new_SawtoothRippleLorentz__SWIG_0(self, argc, argv);
-          }
+          return _wrap_new_LongBoxLorentz__SWIG_0(self, argc, argv);
         }
       }
     }
   }
   
 fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_SawtoothRippleLorentz'.\n"
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_LongBoxLorentz'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    SawtoothRippleLorentz::SawtoothRippleLorentz(double,double,double,double)\n"
-    "    SawtoothRippleLorentz::SawtoothRippleLorentz(std::vector< double,std::allocator< double > >)\n");
+    "    LongBoxLorentz::LongBoxLorentz(double,double,double)\n"
+    "    LongBoxLorentz::LongBoxLorentz(std::vector< double,std::allocator< double > >)\n");
   return 0;
 }
 
 
-SWIGINTERN PyObject *_wrap_SawtoothRippleLorentz_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_LongBoxLorentz_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  SawtoothRippleLorentz *arg1 = (SawtoothRippleLorentz *) 0 ;
+  LongBoxLorentz *arg1 = (LongBoxLorentz *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  SawtoothRippleLorentz *result = 0 ;
+  LongBoxLorentz *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SawtoothRippleLorentz, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_LongBoxLorentz, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SawtoothRippleLorentz_clone" "', argument " "1"" of type '" "SawtoothRippleLorentz const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LongBoxLorentz_clone" "', argument " "1"" of type '" "LongBoxLorentz const *""'"); 
   }
-  arg1 = reinterpret_cast< SawtoothRippleLorentz * >(argp1);
-  result = (SawtoothRippleLorentz *)((SawtoothRippleLorentz const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SawtoothRippleLorentz, 0 |  0 );
+  arg1 = reinterpret_cast< LongBoxLorentz * >(argp1);
+  result = (LongBoxLorentz *)((LongBoxLorentz const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_LongBoxLorentz, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_SawtoothRippleLorentz_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_LongBoxLorentz_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  SawtoothRippleLorentz *arg1 = (SawtoothRippleLorentz *) 0 ;
+  LongBoxLorentz *arg1 = (LongBoxLorentz *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -57018,12 +57893,12 @@ SWIGINTERN PyObject *_wrap_SawtoothRippleLorentz_className(PyObject *self, PyObj
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SawtoothRippleLorentz, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_LongBoxLorentz, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SawtoothRippleLorentz_className" "', argument " "1"" of type '" "SawtoothRippleLorentz const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LongBoxLorentz_className" "', argument " "1"" of type '" "LongBoxLorentz const *""'"); 
   }
-  arg1 = reinterpret_cast< SawtoothRippleLorentz * >(argp1);
-  result = ((SawtoothRippleLorentz const *)arg1)->className();
+  arg1 = reinterpret_cast< LongBoxLorentz * >(argp1);
+  result = ((LongBoxLorentz const *)arg1)->className();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -57031,9 +57906,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_SawtoothRippleLorentz_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_LongBoxLorentz_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  SawtoothRippleLorentz *arg1 = (SawtoothRippleLorentz *) 0 ;
+  LongBoxLorentz *arg1 = (LongBoxLorentz *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -57041,12 +57916,12 @@ SWIGINTERN PyObject *_wrap_SawtoothRippleLorentz_parDefs(PyObject *self, PyObjec
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SawtoothRippleLorentz, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_LongBoxLorentz, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SawtoothRippleLorentz_parDefs" "', argument " "1"" of type '" "SawtoothRippleLorentz const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LongBoxLorentz_parDefs" "', argument " "1"" of type '" "LongBoxLorentz const *""'"); 
   }
-  arg1 = reinterpret_cast< SawtoothRippleLorentz * >(argp1);
-  result = ((SawtoothRippleLorentz const *)arg1)->parDefs();
+  arg1 = reinterpret_cast< LongBoxLorentz * >(argp1);
+  result = ((LongBoxLorentz const *)arg1)->parDefs();
   resultobj = SWIG_NewPointerObj((new std::vector< ParaMeta,std::allocator< ParaMeta > >(result)), SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
@@ -57054,285 +57929,173 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_SawtoothRippleLorentz(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_LongBoxLorentz_length(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  SawtoothRippleLorentz *arg1 = (SawtoothRippleLorentz *) 0 ;
+  LongBoxLorentz *arg1 = (LongBoxLorentz *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
+  double result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SawtoothRippleLorentz, SWIG_POINTER_DISOWN |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_LongBoxLorentz, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_SawtoothRippleLorentz" "', argument " "1"" of type '" "SawtoothRippleLorentz *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LongBoxLorentz_length" "', argument " "1"" of type '" "LongBoxLorentz const *""'"); 
   }
-  arg1 = reinterpret_cast< SawtoothRippleLorentz * >(argp1);
-  delete arg1;
-  resultobj = SWIG_Py_Void();
+  arg1 = reinterpret_cast< LongBoxLorentz * >(argp1);
+  result = (double)((LongBoxLorentz const *)arg1)->length();
+  resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *SawtoothRippleLorentz_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *obj;
-  if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_SawtoothRippleLorentz, SWIG_NewClientData(obj));
-  return SWIG_Py_Void();
-}
-
-SWIGINTERN PyObject *SawtoothRippleLorentz_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  return SWIG_Python_InitShadowInstance(args);
-}
-
-SWIGINTERN PyObject *_wrap_new_TruncatedCube__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_LongBoxLorentz_height(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  double arg1 ;
-  double arg2 ;
-  double val1 ;
-  int ecode1 = 0 ;
-  double val2 ;
-  int ecode2 = 0 ;
-  TruncatedCube *result = 0 ;
+  LongBoxLorentz *arg1 = (LongBoxLorentz *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  double result;
   
-  if ((nobjs < 2) || (nobjs > 2)) SWIG_fail;
-  ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
-  if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_TruncatedCube" "', argument " "1"" of type '" "double""'");
-  } 
-  arg1 = static_cast< double >(val1);
-  ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_TruncatedCube" "', argument " "2"" of type '" "double""'");
-  } 
-  arg2 = static_cast< double >(val2);
-  result = (TruncatedCube *)new TruncatedCube(arg1,arg2);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_TruncatedCube, SWIG_POINTER_NEW |  0 );
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_LongBoxLorentz, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LongBoxLorentz_height" "', argument " "1"" of type '" "LongBoxLorentz const *""'"); 
+  }
+  arg1 = reinterpret_cast< LongBoxLorentz * >(argp1);
+  result = (double)((LongBoxLorentz const *)arg1)->height();
+  resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_TruncatedCube__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_LongBoxLorentz_width(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  std::vector< double,std::allocator< double > > arg1 ;
-  TruncatedCube *result = 0 ;
+  LongBoxLorentz *arg1 = (LongBoxLorentz *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  double result;
   
-  if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
-  {
-    std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
-    int res = swig::asptr(swig_obj[0], &ptr);
-    if (!SWIG_IsOK(res) || !ptr) {
-      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_TruncatedCube" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
-    }
-    arg1 = *ptr;
-    if (SWIG_IsNewObj(res)) delete ptr;
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_LongBoxLorentz, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LongBoxLorentz_width" "', argument " "1"" of type '" "LongBoxLorentz const *""'"); 
   }
-  result = (TruncatedCube *)new TruncatedCube(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_TruncatedCube, SWIG_POINTER_NEW |  0 );
+  arg1 = reinterpret_cast< LongBoxLorentz * >(argp1);
+  result = (double)((LongBoxLorentz const *)arg1)->width();
+  resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_TruncatedCube(PyObject *self, PyObject *args) {
-  Py_ssize_t argc;
-  PyObject *argv[3] = {
-    0
-  };
-  
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_TruncatedCube", 0, 2, argv))) SWIG_fail;
-  --argc;
-  if (argc == 1) {
-    int _v = 0;
-    int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
-    _v = SWIG_CheckState(res);
-    if (_v) {
-      return _wrap_new_TruncatedCube__SWIG_1(self, argc, argv);
-    }
-  }
-  if (argc == 2) {
-    int _v = 0;
-    {
-      int res = SWIG_AsVal_double(argv[0], NULL);
-      _v = SWIG_CheckState(res);
-    }
-    if (_v) {
-      {
-        int res = SWIG_AsVal_double(argv[1], NULL);
-        _v = SWIG_CheckState(res);
-      }
-      if (_v) {
-        return _wrap_new_TruncatedCube__SWIG_0(self, argc, argv);
-      }
-    }
-  }
-  
-fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_TruncatedCube'.\n"
-    "  Possible C/C++ prototypes are:\n"
-    "    TruncatedCube::TruncatedCube(double,double)\n"
-    "    TruncatedCube::TruncatedCube(std::vector< double,std::allocator< double > >)\n");
-  return 0;
-}
-
-
-SWIGINTERN PyObject *_wrap_TruncatedCube_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_LongBoxLorentz_radialExtension(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  TruncatedCube *arg1 = (TruncatedCube *) 0 ;
+  LongBoxLorentz *arg1 = (LongBoxLorentz *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  TruncatedCube *result = 0 ;
+  double result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedCube, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_LongBoxLorentz, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedCube_clone" "', argument " "1"" of type '" "TruncatedCube const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LongBoxLorentz_radialExtension" "', argument " "1"" of type '" "LongBoxLorentz const *""'"); 
   }
-  arg1 = reinterpret_cast< TruncatedCube * >(argp1);
-  result = (TruncatedCube *)((TruncatedCube const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_TruncatedCube, 0 |  0 );
+  arg1 = reinterpret_cast< LongBoxLorentz * >(argp1);
+  result = (double)((LongBoxLorentz const *)arg1)->radialExtension();
+  resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_TruncatedCube_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_LongBoxLorentz_formfactor(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  TruncatedCube *arg1 = (TruncatedCube *) 0 ;
+  LongBoxLorentz *arg1 = (LongBoxLorentz *) 0 ;
+  C3 arg2 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  std::string result;
+  void *argp2 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  complex_t result;
   
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedCube, 0 |  0 );
+  if (!SWIG_Python_UnpackTuple(args, "LongBoxLorentz_formfactor", 2, 2, swig_obj)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_LongBoxLorentz, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedCube_className" "', argument " "1"" of type '" "TruncatedCube const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LongBoxLorentz_formfactor" "', argument " "1"" of type '" "LongBoxLorentz const *""'"); 
   }
-  arg1 = reinterpret_cast< TruncatedCube * >(argp1);
-  result = ((TruncatedCube const *)arg1)->className();
-  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  arg1 = reinterpret_cast< LongBoxLorentz * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_Vec3T_std__complexT_double_t_t,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "LongBoxLorentz_formfactor" "', argument " "2"" of type '" "C3""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "LongBoxLorentz_formfactor" "', argument " "2"" of type '" "C3""'");
+    } else {
+      C3 * temp = reinterpret_cast< C3 * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  result = ((LongBoxLorentz const *)arg1)->formfactor(arg2);
+  resultobj = SWIG_From_std_complex_Sl_double_Sg_(static_cast< std::complex<double> >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_TruncatedCube_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_LongBoxLorentz_validate(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  TruncatedCube *arg1 = (TruncatedCube *) 0 ;
+  LongBoxLorentz *arg1 = (LongBoxLorentz *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  SwigValueWrapper< std::vector< ParaMeta,std::allocator< ParaMeta > > > result;
+  std::string result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedCube, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_LongBoxLorentz, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedCube_parDefs" "', argument " "1"" of type '" "TruncatedCube const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LongBoxLorentz_validate" "', argument " "1"" of type '" "LongBoxLorentz const *""'"); 
   }
-  arg1 = reinterpret_cast< TruncatedCube * >(argp1);
-  result = ((TruncatedCube const *)arg1)->parDefs();
-  resultobj = SWIG_NewPointerObj((new std::vector< ParaMeta,std::allocator< ParaMeta > >(result)), SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, SWIG_POINTER_OWN |  0 );
+  arg1 = reinterpret_cast< LongBoxLorentz * >(argp1);
+  result = ((LongBoxLorentz const *)arg1)->validate();
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_TruncatedCube_length(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_LongBoxLorentz(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  TruncatedCube *arg1 = (TruncatedCube *) 0 ;
+  LongBoxLorentz *arg1 = (LongBoxLorentz *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  double result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedCube, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_LongBoxLorentz, SWIG_POINTER_DISOWN |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedCube_length" "', argument " "1"" of type '" "TruncatedCube const *""'"); 
-  }
-  arg1 = reinterpret_cast< TruncatedCube * >(argp1);
-  result = (double)((TruncatedCube const *)arg1)->length();
-  resultobj = SWIG_From_double(static_cast< double >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_TruncatedCube_removedLength(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  TruncatedCube *arg1 = (TruncatedCube *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  double result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedCube, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedCube_removedLength" "', argument " "1"" of type '" "TruncatedCube const *""'"); 
-  }
-  arg1 = reinterpret_cast< TruncatedCube * >(argp1);
-  result = (double)((TruncatedCube const *)arg1)->removedLength();
-  resultobj = SWIG_From_double(static_cast< double >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_TruncatedCube_validate(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  TruncatedCube *arg1 = (TruncatedCube *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  std::string result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedCube, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedCube_validate" "', argument " "1"" of type '" "TruncatedCube const *""'"); 
-  }
-  arg1 = reinterpret_cast< TruncatedCube * >(argp1);
-  result = ((TruncatedCube const *)arg1)->validate();
-  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_delete_TruncatedCube(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  TruncatedCube *arg1 = (TruncatedCube *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedCube, SWIG_POINTER_DISOWN |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_TruncatedCube" "', argument " "1"" of type '" "TruncatedCube *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_LongBoxLorentz" "', argument " "1"" of type '" "LongBoxLorentz *""'"); 
   }
-  arg1 = reinterpret_cast< TruncatedCube * >(argp1);
+  arg1 = reinterpret_cast< LongBoxLorentz * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -57341,151 +58104,123 @@ fail:
 }
 
 
-SWIGINTERN PyObject *TruncatedCube_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *LongBoxLorentz_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
   if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_TruncatedCube, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_LongBoxLorentz, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *TruncatedCube_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *LongBoxLorentz_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   return SWIG_Python_InitShadowInstance(args);
 }
 
-SWIGINTERN PyObject *_wrap_new_TruncatedSphere__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
-  PyObject *resultobj = 0;
-  double arg1 ;
-  double arg2 ;
-  double arg3 ;
-  double val1 ;
-  int ecode1 = 0 ;
-  double val2 ;
-  int ecode2 = 0 ;
-  double val3 ;
-  int ecode3 = 0 ;
-  TruncatedSphere *result = 0 ;
-  
-  if ((nobjs < 3) || (nobjs > 3)) SWIG_fail;
-  ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
-  if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_TruncatedSphere" "', argument " "1"" of type '" "double""'");
-  } 
-  arg1 = static_cast< double >(val1);
-  ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_TruncatedSphere" "', argument " "2"" of type '" "double""'");
-  } 
-  arg2 = static_cast< double >(val2);
-  ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
-  if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_TruncatedSphere" "', argument " "3"" of type '" "double""'");
-  } 
-  arg3 = static_cast< double >(val3);
-  result = (TruncatedSphere *)new TruncatedSphere(arg1,arg2,arg3);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_TruncatedSphere, SWIG_POINTER_NEW |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_new_TruncatedSphere__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_GaussSphere__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   std::vector< double,std::allocator< double > > arg1 ;
-  TruncatedSphere *result = 0 ;
+  GaussSphere *result = 0 ;
   
   if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
   {
     std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
     int res = swig::asptr(swig_obj[0], &ptr);
     if (!SWIG_IsOK(res) || !ptr) {
-      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_TruncatedSphere" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
+      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_GaussSphere" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
     }
     arg1 = *ptr;
     if (SWIG_IsNewObj(res)) delete ptr;
   }
-  result = (TruncatedSphere *)new TruncatedSphere(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_TruncatedSphere, SWIG_POINTER_NEW |  0 );
+  result = (GaussSphere *)new GaussSphere(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GaussSphere, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_TruncatedSphere(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_GaussSphere__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  double arg1 ;
+  double val1 ;
+  int ecode1 = 0 ;
+  GaussSphere *result = 0 ;
+  
+  if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
+  ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_GaussSphere" "', argument " "1"" of type '" "double""'");
+  } 
+  arg1 = static_cast< double >(val1);
+  result = (GaussSphere *)new GaussSphere(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GaussSphere, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_GaussSphere(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
-  PyObject *argv[4] = {
+  PyObject *argv[2] = {
     0
   };
   
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_TruncatedSphere", 0, 3, argv))) SWIG_fail;
+  if (!(argc = SWIG_Python_UnpackTuple(args, "new_GaussSphere", 0, 1, argv))) SWIG_fail;
   --argc;
   if (argc == 1) {
-    int _v = 0;
-    int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
-    _v = SWIG_CheckState(res);
-    if (_v) {
-      return _wrap_new_TruncatedSphere__SWIG_1(self, argc, argv);
-    }
-  }
-  if (argc == 3) {
     int _v = 0;
     {
       int res = SWIG_AsVal_double(argv[0], NULL);
       _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_TruncatedSphere__SWIG_0(self, argc, argv);
-        }
-      }
+      return _wrap_new_GaussSphere__SWIG_1(self, argc, argv);
+    }
+  }
+  if (argc == 1) {
+    int _v = 0;
+    int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_GaussSphere__SWIG_0(self, argc, argv);
     }
   }
   
 fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_TruncatedSphere'.\n"
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_GaussSphere'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    TruncatedSphere::TruncatedSphere(double,double,double)\n"
-    "    TruncatedSphere::TruncatedSphere(std::vector< double,std::allocator< double > >)\n");
+    "    GaussSphere::GaussSphere(std::vector< double,std::allocator< double > >)\n"
+    "    GaussSphere::GaussSphere(double)\n");
   return 0;
 }
 
 
-SWIGINTERN PyObject *_wrap_TruncatedSphere_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_GaussSphere_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  TruncatedSphere *arg1 = (TruncatedSphere *) 0 ;
+  GaussSphere *arg1 = (GaussSphere *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  TruncatedSphere *result = 0 ;
+  GaussSphere *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedSphere, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_GaussSphere, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedSphere_clone" "', argument " "1"" of type '" "TruncatedSphere const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "GaussSphere_clone" "', argument " "1"" of type '" "GaussSphere const *""'"); 
   }
-  arg1 = reinterpret_cast< TruncatedSphere * >(argp1);
-  result = (TruncatedSphere *)((TruncatedSphere const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_TruncatedSphere, 0 |  0 );
+  arg1 = reinterpret_cast< GaussSphere * >(argp1);
+  result = (GaussSphere *)((GaussSphere const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GaussSphere, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_TruncatedSphere_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_GaussSphere_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  TruncatedSphere *arg1 = (TruncatedSphere *) 0 ;
+  GaussSphere *arg1 = (GaussSphere *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -57493,12 +58228,12 @@ SWIGINTERN PyObject *_wrap_TruncatedSphere_className(PyObject *self, PyObject *a
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedSphere, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_GaussSphere, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedSphere_className" "', argument " "1"" of type '" "TruncatedSphere const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "GaussSphere_className" "', argument " "1"" of type '" "GaussSphere const *""'"); 
   }
-  arg1 = reinterpret_cast< TruncatedSphere * >(argp1);
-  result = ((TruncatedSphere const *)arg1)->className();
+  arg1 = reinterpret_cast< GaussSphere * >(argp1);
+  result = ((GaussSphere const *)arg1)->className();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -57506,9 +58241,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_TruncatedSphere_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_GaussSphere_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  TruncatedSphere *arg1 = (TruncatedSphere *) 0 ;
+  GaussSphere *arg1 = (GaussSphere *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -57516,12 +58251,12 @@ SWIGINTERN PyObject *_wrap_TruncatedSphere_parDefs(PyObject *self, PyObject *arg
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedSphere, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_GaussSphere, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedSphere_parDefs" "', argument " "1"" of type '" "TruncatedSphere const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "GaussSphere_parDefs" "', argument " "1"" of type '" "GaussSphere const *""'"); 
   }
-  arg1 = reinterpret_cast< TruncatedSphere * >(argp1);
-  result = ((TruncatedSphere const *)arg1)->parDefs();
+  arg1 = reinterpret_cast< GaussSphere * >(argp1);
+  result = ((GaussSphere const *)arg1)->parDefs();
   resultobj = SWIG_NewPointerObj((new std::vector< ParaMeta,std::allocator< ParaMeta > >(result)), SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
@@ -57529,9 +58264,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_TruncatedSphere_height(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_GaussSphere_meanRadius(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  TruncatedSphere *arg1 = (TruncatedSphere *) 0 ;
+  GaussSphere *arg1 = (GaussSphere *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -57539,12 +58274,12 @@ SWIGINTERN PyObject *_wrap_TruncatedSphere_height(PyObject *self, PyObject *args
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedSphere, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_GaussSphere, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedSphere_height" "', argument " "1"" of type '" "TruncatedSphere const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "GaussSphere_meanRadius" "', argument " "1"" of type '" "GaussSphere const *""'"); 
   }
-  arg1 = reinterpret_cast< TruncatedSphere * >(argp1);
-  result = (double)((TruncatedSphere const *)arg1)->height();
+  arg1 = reinterpret_cast< GaussSphere * >(argp1);
+  result = (double)((GaussSphere const *)arg1)->meanRadius();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -57552,9 +58287,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_TruncatedSphere_radius(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_GaussSphere_radialExtension(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  TruncatedSphere *arg1 = (TruncatedSphere *) 0 ;
+  GaussSphere *arg1 = (GaussSphere *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -57562,12 +58297,12 @@ SWIGINTERN PyObject *_wrap_TruncatedSphere_radius(PyObject *self, PyObject *args
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedSphere, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_GaussSphere, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedSphere_radius" "', argument " "1"" of type '" "TruncatedSphere const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "GaussSphere_radialExtension" "', argument " "1"" of type '" "GaussSphere const *""'"); 
   }
-  arg1 = reinterpret_cast< TruncatedSphere * >(argp1);
-  result = (double)((TruncatedSphere const *)arg1)->radius();
+  arg1 = reinterpret_cast< GaussSphere * >(argp1);
+  result = (double)((GaussSphere const *)arg1)->radialExtension();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -57575,56 +58310,10 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_TruncatedSphere_removedTop(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_GaussSphere_formfactor(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  TruncatedSphere *arg1 = (TruncatedSphere *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  double result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedSphere, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedSphere_removedTop" "', argument " "1"" of type '" "TruncatedSphere const *""'"); 
-  }
-  arg1 = reinterpret_cast< TruncatedSphere * >(argp1);
-  result = (double)((TruncatedSphere const *)arg1)->removedTop();
-  resultobj = SWIG_From_double(static_cast< double >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_TruncatedSphere_radialExtension(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  TruncatedSphere *arg1 = (TruncatedSphere *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  double result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedSphere, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedSphere_radialExtension" "', argument " "1"" of type '" "TruncatedSphere const *""'"); 
-  }
-  arg1 = reinterpret_cast< TruncatedSphere * >(argp1);
-  result = (double)((TruncatedSphere const *)arg1)->radialExtension();
-  resultobj = SWIG_From_double(static_cast< double >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_TruncatedSphere_formfactor(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  TruncatedSphere *arg1 = (TruncatedSphere *) 0 ;
-  C3 arg2 ;
+  GaussSphere *arg1 = (GaussSphere *) 0 ;
+  C3 arg2 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   void *argp2 ;
@@ -57632,26 +58321,26 @@ SWIGINTERN PyObject *_wrap_TruncatedSphere_formfactor(PyObject *self, PyObject *
   PyObject *swig_obj[2] ;
   complex_t result;
   
-  if (!SWIG_Python_UnpackTuple(args, "TruncatedSphere_formfactor", 2, 2, swig_obj)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedSphere, 0 |  0 );
+  if (!SWIG_Python_UnpackTuple(args, "GaussSphere_formfactor", 2, 2, swig_obj)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_GaussSphere, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedSphere_formfactor" "', argument " "1"" of type '" "TruncatedSphere const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "GaussSphere_formfactor" "', argument " "1"" of type '" "GaussSphere const *""'"); 
   }
-  arg1 = reinterpret_cast< TruncatedSphere * >(argp1);
+  arg1 = reinterpret_cast< GaussSphere * >(argp1);
   {
     res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_Vec3T_std__complexT_double_t_t,  0  | 0);
     if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "TruncatedSphere_formfactor" "', argument " "2"" of type '" "C3""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "GaussSphere_formfactor" "', argument " "2"" of type '" "C3""'"); 
     }  
     if (!argp2) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "TruncatedSphere_formfactor" "', argument " "2"" of type '" "C3""'");
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "GaussSphere_formfactor" "', argument " "2"" of type '" "C3""'");
     } else {
       C3 * temp = reinterpret_cast< C3 * >(argp2);
       arg2 = *temp;
       if (SWIG_IsNewObj(res2)) delete temp;
     }
   }
-  result = ((TruncatedSphere const *)arg1)->formfactor(arg2);
+  result = ((GaussSphere const *)arg1)->formfactor(arg2);
   resultobj = SWIG_From_std_complex_Sl_double_Sg_(static_cast< std::complex<double> >(result));
   return resultobj;
 fail:
@@ -57659,9 +58348,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_TruncatedSphere_validate(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_GaussSphere_validate(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  TruncatedSphere *arg1 = (TruncatedSphere *) 0 ;
+  GaussSphere *arg1 = (GaussSphere *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -57669,12 +58358,12 @@ SWIGINTERN PyObject *_wrap_TruncatedSphere_validate(PyObject *self, PyObject *ar
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedSphere, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_GaussSphere, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedSphere_validate" "', argument " "1"" of type '" "TruncatedSphere const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "GaussSphere_validate" "', argument " "1"" of type '" "GaussSphere const *""'"); 
   }
-  arg1 = reinterpret_cast< TruncatedSphere * >(argp1);
-  result = ((TruncatedSphere const *)arg1)->validate();
+  arg1 = reinterpret_cast< GaussSphere * >(argp1);
+  result = ((GaussSphere const *)arg1)->validate();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -57682,20 +58371,20 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_TruncatedSphere(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_GaussSphere(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  TruncatedSphere *arg1 = (TruncatedSphere *) 0 ;
+  GaussSphere *arg1 = (GaussSphere *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedSphere, SWIG_POINTER_DISOWN |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_GaussSphere, SWIG_POINTER_DISOWN |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_TruncatedSphere" "', argument " "1"" of type '" "TruncatedSphere *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_GaussSphere" "', argument " "1"" of type '" "GaussSphere *""'"); 
   }
-  arg1 = reinterpret_cast< TruncatedSphere * >(argp1);
+  arg1 = reinterpret_cast< GaussSphere * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -57704,102 +58393,86 @@ fail:
 }
 
 
-SWIGINTERN PyObject *TruncatedSphere_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *GaussSphere_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
   if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_TruncatedSphere, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_GaussSphere, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *TruncatedSphere_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *GaussSphere_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   return SWIG_Python_InitShadowInstance(args);
 }
 
-SWIGINTERN PyObject *_wrap_new_TruncatedSpheroid__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_FuzzySphere__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  std::vector< double,std::allocator< double > > arg1 ;
+  FuzzySphere *result = 0 ;
+  
+  if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
+  {
+    std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
+    int res = swig::asptr(swig_obj[0], &ptr);
+    if (!SWIG_IsOK(res) || !ptr) {
+      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_FuzzySphere" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
+    }
+    arg1 = *ptr;
+    if (SWIG_IsNewObj(res)) delete ptr;
+  }
+  result = (FuzzySphere *)new FuzzySphere(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_FuzzySphere, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_FuzzySphere__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
   double arg2 ;
-  double arg3 ;
-  double arg4 ;
   double val1 ;
   int ecode1 = 0 ;
   double val2 ;
   int ecode2 = 0 ;
-  double val3 ;
-  int ecode3 = 0 ;
-  double val4 ;
-  int ecode4 = 0 ;
-  TruncatedSpheroid *result = 0 ;
+  FuzzySphere *result = 0 ;
   
-  if ((nobjs < 4) || (nobjs > 4)) SWIG_fail;
+  if ((nobjs < 2) || (nobjs > 2)) SWIG_fail;
   ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
   if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_TruncatedSpheroid" "', argument " "1"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_FuzzySphere" "', argument " "1"" of type '" "double""'");
   } 
   arg1 = static_cast< double >(val1);
   ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
   if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_TruncatedSpheroid" "', argument " "2"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_FuzzySphere" "', argument " "2"" of type '" "double""'");
   } 
   arg2 = static_cast< double >(val2);
-  ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
-  if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_TruncatedSpheroid" "', argument " "3"" of type '" "double""'");
-  } 
-  arg3 = static_cast< double >(val3);
-  ecode4 = SWIG_AsVal_double(swig_obj[3], &val4);
-  if (!SWIG_IsOK(ecode4)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "new_TruncatedSpheroid" "', argument " "4"" of type '" "double""'");
-  } 
-  arg4 = static_cast< double >(val4);
-  result = (TruncatedSpheroid *)new TruncatedSpheroid(arg1,arg2,arg3,arg4);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_TruncatedSpheroid, SWIG_POINTER_NEW |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_new_TruncatedSpheroid__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
-  PyObject *resultobj = 0;
-  std::vector< double,std::allocator< double > > arg1 ;
-  TruncatedSpheroid *result = 0 ;
-  
-  if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
-  {
-    std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
-    int res = swig::asptr(swig_obj[0], &ptr);
-    if (!SWIG_IsOK(res) || !ptr) {
-      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_TruncatedSpheroid" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
-    }
-    arg1 = *ptr;
-    if (SWIG_IsNewObj(res)) delete ptr;
-  }
-  result = (TruncatedSpheroid *)new TruncatedSpheroid(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_TruncatedSpheroid, SWIG_POINTER_NEW |  0 );
+  result = (FuzzySphere *)new FuzzySphere(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_FuzzySphere, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_TruncatedSpheroid(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_FuzzySphere(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
-  PyObject *argv[5] = {
+  PyObject *argv[3] = {
     0
   };
   
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_TruncatedSpheroid", 0, 4, argv))) SWIG_fail;
+  if (!(argc = SWIG_Python_UnpackTuple(args, "new_FuzzySphere", 0, 2, argv))) SWIG_fail;
   --argc;
   if (argc == 1) {
     int _v = 0;
     int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
     _v = SWIG_CheckState(res);
     if (_v) {
-      return _wrap_new_TruncatedSpheroid__SWIG_1(self, argc, argv);
+      return _wrap_new_FuzzySphere__SWIG_0(self, argc, argv);
     }
   }
-  if (argc == 4) {
+  if (argc == 2) {
     int _v = 0;
     {
       int res = SWIG_AsVal_double(argv[0], NULL);
@@ -57811,58 +58484,46 @@ SWIGINTERN PyObject *_wrap_new_TruncatedSpheroid(PyObject *self, PyObject *args)
         _v = SWIG_CheckState(res);
       }
       if (_v) {
-        {
-          int res = SWIG_AsVal_double(argv[2], NULL);
-          _v = SWIG_CheckState(res);
-        }
-        if (_v) {
-          {
-            int res = SWIG_AsVal_double(argv[3], NULL);
-            _v = SWIG_CheckState(res);
-          }
-          if (_v) {
-            return _wrap_new_TruncatedSpheroid__SWIG_0(self, argc, argv);
-          }
-        }
+        return _wrap_new_FuzzySphere__SWIG_1(self, argc, argv);
       }
     }
   }
   
 fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_TruncatedSpheroid'.\n"
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_FuzzySphere'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    TruncatedSpheroid::TruncatedSpheroid(double,double,double,double)\n"
-    "    TruncatedSpheroid::TruncatedSpheroid(std::vector< double,std::allocator< double > >)\n");
+    "    FuzzySphere::FuzzySphere(std::vector< double,std::allocator< double > >)\n"
+    "    FuzzySphere::FuzzySphere(double,double)\n");
   return 0;
 }
 
 
-SWIGINTERN PyObject *_wrap_TruncatedSpheroid_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_FuzzySphere_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  TruncatedSpheroid *arg1 = (TruncatedSpheroid *) 0 ;
+  FuzzySphere *arg1 = (FuzzySphere *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  TruncatedSpheroid *result = 0 ;
+  FuzzySphere *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedSpheroid, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_FuzzySphere, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedSpheroid_clone" "', argument " "1"" of type '" "TruncatedSpheroid const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FuzzySphere_clone" "', argument " "1"" of type '" "FuzzySphere const *""'"); 
   }
-  arg1 = reinterpret_cast< TruncatedSpheroid * >(argp1);
-  result = (TruncatedSpheroid *)((TruncatedSpheroid const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_TruncatedSpheroid, 0 |  0 );
+  arg1 = reinterpret_cast< FuzzySphere * >(argp1);
+  result = (FuzzySphere *)((FuzzySphere const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_FuzzySphere, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_TruncatedSpheroid_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_FuzzySphere_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  TruncatedSpheroid *arg1 = (TruncatedSpheroid *) 0 ;
+  FuzzySphere *arg1 = (FuzzySphere *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -57870,12 +58531,12 @@ SWIGINTERN PyObject *_wrap_TruncatedSpheroid_className(PyObject *self, PyObject
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedSpheroid, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_FuzzySphere, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedSpheroid_className" "', argument " "1"" of type '" "TruncatedSpheroid const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FuzzySphere_className" "', argument " "1"" of type '" "FuzzySphere const *""'"); 
   }
-  arg1 = reinterpret_cast< TruncatedSpheroid * >(argp1);
-  result = ((TruncatedSpheroid const *)arg1)->className();
+  arg1 = reinterpret_cast< FuzzySphere * >(argp1);
+  result = ((FuzzySphere const *)arg1)->className();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -57883,9 +58544,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_TruncatedSpheroid_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_FuzzySphere_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  TruncatedSpheroid *arg1 = (TruncatedSpheroid *) 0 ;
+  FuzzySphere *arg1 = (FuzzySphere *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -57893,12 +58554,12 @@ SWIGINTERN PyObject *_wrap_TruncatedSpheroid_parDefs(PyObject *self, PyObject *a
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedSpheroid, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_FuzzySphere, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedSpheroid_parDefs" "', argument " "1"" of type '" "TruncatedSpheroid const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FuzzySphere_parDefs" "', argument " "1"" of type '" "FuzzySphere const *""'"); 
   }
-  arg1 = reinterpret_cast< TruncatedSpheroid * >(argp1);
-  result = ((TruncatedSpheroid const *)arg1)->parDefs();
+  arg1 = reinterpret_cast< FuzzySphere * >(argp1);
+  result = ((FuzzySphere const *)arg1)->parDefs();
   resultobj = SWIG_NewPointerObj((new std::vector< ParaMeta,std::allocator< ParaMeta > >(result)), SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
@@ -57906,9 +58567,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_TruncatedSpheroid_radius(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_FuzzySphere_radialExtension(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  TruncatedSpheroid *arg1 = (TruncatedSpheroid *) 0 ;
+  FuzzySphere *arg1 = (FuzzySphere *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -57916,12 +58577,12 @@ SWIGINTERN PyObject *_wrap_TruncatedSpheroid_radius(PyObject *self, PyObject *ar
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedSpheroid, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_FuzzySphere, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedSpheroid_radius" "', argument " "1"" of type '" "TruncatedSpheroid const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FuzzySphere_radialExtension" "', argument " "1"" of type '" "FuzzySphere const *""'"); 
   }
-  arg1 = reinterpret_cast< TruncatedSpheroid * >(argp1);
-  result = (double)((TruncatedSpheroid const *)arg1)->radius();
+  arg1 = reinterpret_cast< FuzzySphere * >(argp1);
+  result = (double)((FuzzySphere const *)arg1)->radialExtension();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -57929,102 +58590,10 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_TruncatedSpheroid_height(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_FuzzySphere_formfactor(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  TruncatedSpheroid *arg1 = (TruncatedSpheroid *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  double result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedSpheroid, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedSpheroid_height" "', argument " "1"" of type '" "TruncatedSpheroid const *""'"); 
-  }
-  arg1 = reinterpret_cast< TruncatedSpheroid * >(argp1);
-  result = (double)((TruncatedSpheroid const *)arg1)->height();
-  resultobj = SWIG_From_double(static_cast< double >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_TruncatedSpheroid_heightFlattening(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  TruncatedSpheroid *arg1 = (TruncatedSpheroid *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  double result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedSpheroid, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedSpheroid_heightFlattening" "', argument " "1"" of type '" "TruncatedSpheroid const *""'"); 
-  }
-  arg1 = reinterpret_cast< TruncatedSpheroid * >(argp1);
-  result = (double)((TruncatedSpheroid const *)arg1)->heightFlattening();
-  resultobj = SWIG_From_double(static_cast< double >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_TruncatedSpheroid_removedTop(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  TruncatedSpheroid *arg1 = (TruncatedSpheroid *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  double result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedSpheroid, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedSpheroid_removedTop" "', argument " "1"" of type '" "TruncatedSpheroid const *""'"); 
-  }
-  arg1 = reinterpret_cast< TruncatedSpheroid * >(argp1);
-  result = (double)((TruncatedSpheroid const *)arg1)->removedTop();
-  resultobj = SWIG_From_double(static_cast< double >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_TruncatedSpheroid_radialExtension(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  TruncatedSpheroid *arg1 = (TruncatedSpheroid *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  double result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedSpheroid, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedSpheroid_radialExtension" "', argument " "1"" of type '" "TruncatedSpheroid const *""'"); 
-  }
-  arg1 = reinterpret_cast< TruncatedSpheroid * >(argp1);
-  result = (double)((TruncatedSpheroid const *)arg1)->radialExtension();
-  resultobj = SWIG_From_double(static_cast< double >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_TruncatedSpheroid_formfactor(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  TruncatedSpheroid *arg1 = (TruncatedSpheroid *) 0 ;
-  C3 arg2 ;
+  FuzzySphere *arg1 = (FuzzySphere *) 0 ;
+  C3 arg2 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   void *argp2 ;
@@ -58032,26 +58601,26 @@ SWIGINTERN PyObject *_wrap_TruncatedSpheroid_formfactor(PyObject *self, PyObject
   PyObject *swig_obj[2] ;
   complex_t result;
   
-  if (!SWIG_Python_UnpackTuple(args, "TruncatedSpheroid_formfactor", 2, 2, swig_obj)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedSpheroid, 0 |  0 );
+  if (!SWIG_Python_UnpackTuple(args, "FuzzySphere_formfactor", 2, 2, swig_obj)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_FuzzySphere, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedSpheroid_formfactor" "', argument " "1"" of type '" "TruncatedSpheroid const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FuzzySphere_formfactor" "', argument " "1"" of type '" "FuzzySphere const *""'"); 
   }
-  arg1 = reinterpret_cast< TruncatedSpheroid * >(argp1);
+  arg1 = reinterpret_cast< FuzzySphere * >(argp1);
   {
     res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_Vec3T_std__complexT_double_t_t,  0  | 0);
     if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "TruncatedSpheroid_formfactor" "', argument " "2"" of type '" "C3""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "FuzzySphere_formfactor" "', argument " "2"" of type '" "C3""'"); 
     }  
     if (!argp2) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "TruncatedSpheroid_formfactor" "', argument " "2"" of type '" "C3""'");
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "FuzzySphere_formfactor" "', argument " "2"" of type '" "C3""'");
     } else {
       C3 * temp = reinterpret_cast< C3 * >(argp2);
       arg2 = *temp;
       if (SWIG_IsNewObj(res2)) delete temp;
     }
   }
-  result = ((TruncatedSpheroid const *)arg1)->formfactor(arg2);
+  result = ((FuzzySphere const *)arg1)->formfactor(arg2);
   resultobj = SWIG_From_std_complex_Sl_double_Sg_(static_cast< std::complex<double> >(result));
   return resultobj;
 fail:
@@ -58059,9 +58628,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_TruncatedSpheroid_validate(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_FuzzySphere_validate(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  TruncatedSpheroid *arg1 = (TruncatedSpheroid *) 0 ;
+  FuzzySphere *arg1 = (FuzzySphere *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -58069,12 +58638,12 @@ SWIGINTERN PyObject *_wrap_TruncatedSpheroid_validate(PyObject *self, PyObject *
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedSpheroid, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_FuzzySphere, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedSpheroid_validate" "', argument " "1"" of type '" "TruncatedSpheroid const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FuzzySphere_validate" "', argument " "1"" of type '" "FuzzySphere const *""'"); 
   }
-  arg1 = reinterpret_cast< TruncatedSpheroid * >(argp1);
-  result = ((TruncatedSpheroid const *)arg1)->validate();
+  arg1 = reinterpret_cast< FuzzySphere * >(argp1);
+  result = ((FuzzySphere const *)arg1)->validate();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -58082,20 +58651,20 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_TruncatedSpheroid(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_FuzzySphere(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  TruncatedSpheroid *arg1 = (TruncatedSpheroid *) 0 ;
+  FuzzySphere *arg1 = (FuzzySphere *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_TruncatedSpheroid, SWIG_POINTER_DISOWN |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_FuzzySphere, SWIG_POINTER_DISOWN |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_TruncatedSpheroid" "', argument " "1"" of type '" "TruncatedSpheroid *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_FuzzySphere" "', argument " "1"" of type '" "FuzzySphere *""'"); 
   }
-  arg1 = reinterpret_cast< TruncatedSpheroid * >(argp1);
+  arg1 = reinterpret_cast< FuzzySphere * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -58104,426 +58673,389 @@ fail:
 }
 
 
-SWIGINTERN PyObject *TruncatedSpheroid_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *FuzzySphere_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
   if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_TruncatedSpheroid, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_FuzzySphere, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *TruncatedSpheroid_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *FuzzySphere_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   return SWIG_Python_InitShadowInstance(args);
 }
 
-SWIGINTERN PyObject *_wrap_new_GaussSphere__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
-  PyObject *resultobj = 0;
-  std::vector< double,std::allocator< double > > arg1 ;
-  GaussSphere *result = 0 ;
-  
-  if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
-  {
-    std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
-    int res = swig::asptr(swig_obj[0], &ptr);
-    if (!SWIG_IsOK(res) || !ptr) {
-      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_GaussSphere" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
-    }
-    arg1 = *ptr;
-    if (SWIG_IsNewObj(res)) delete ptr;
-  }
-  result = (GaussSphere *)new GaussSphere(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GaussSphere, SWIG_POINTER_NEW |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_new_GaussSphere__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
-  PyObject *resultobj = 0;
-  double arg1 ;
-  double val1 ;
-  int ecode1 = 0 ;
-  GaussSphere *result = 0 ;
-  
-  if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
-  ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
-  if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_GaussSphere" "', argument " "1"" of type '" "double""'");
-  } 
-  arg1 = static_cast< double >(val1);
-  result = (GaussSphere *)new GaussSphere(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GaussSphere, SWIG_POINTER_NEW |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_new_GaussSphere(PyObject *self, PyObject *args) {
-  Py_ssize_t argc;
-  PyObject *argv[2] = {
-    0
-  };
-  
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_GaussSphere", 0, 1, argv))) SWIG_fail;
-  --argc;
-  if (argc == 1) {
-    int _v = 0;
-    {
-      int res = SWIG_AsVal_double(argv[0], NULL);
-      _v = SWIG_CheckState(res);
-    }
-    if (_v) {
-      return _wrap_new_GaussSphere__SWIG_1(self, argc, argv);
-    }
-  }
-  if (argc == 1) {
-    int _v = 0;
-    int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
-    _v = SWIG_CheckState(res);
-    if (_v) {
-      return _wrap_new_GaussSphere__SWIG_0(self, argc, argv);
-    }
-  }
-  
-fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_GaussSphere'.\n"
-    "  Possible C/C++ prototypes are:\n"
-    "    GaussSphere::GaussSphere(std::vector< double,std::allocator< double > >)\n"
-    "    GaussSphere::GaussSphere(double)\n");
-  return 0;
-}
-
-
-SWIGINTERN PyObject *_wrap_GaussSphere_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_ISelectionRule(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  GaussSphere *arg1 = (GaussSphere *) 0 ;
+  ISelectionRule *arg1 = (ISelectionRule *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  GaussSphere *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_GaussSphere, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ISelectionRule, SWIG_POINTER_DISOWN |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "GaussSphere_clone" "', argument " "1"" of type '" "GaussSphere const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_ISelectionRule" "', argument " "1"" of type '" "ISelectionRule *""'"); 
   }
-  arg1 = reinterpret_cast< GaussSphere * >(argp1);
-  result = (GaussSphere *)((GaussSphere const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GaussSphere, 0 |  0 );
+  arg1 = reinterpret_cast< ISelectionRule * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_GaussSphere_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_ISelectionRule_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  GaussSphere *arg1 = (GaussSphere *) 0 ;
+  ISelectionRule *arg1 = (ISelectionRule *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  std::string result;
+  ISelectionRule *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_GaussSphere, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ISelectionRule, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "GaussSphere_className" "', argument " "1"" of type '" "GaussSphere const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ISelectionRule_clone" "', argument " "1"" of type '" "ISelectionRule const *""'"); 
   }
-  arg1 = reinterpret_cast< GaussSphere * >(argp1);
-  result = ((GaussSphere const *)arg1)->className();
-  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  arg1 = reinterpret_cast< ISelectionRule * >(argp1);
+  result = (ISelectionRule *)((ISelectionRule const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_ISelectionRule, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_GaussSphere_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_ISelectionRule_coordinateSelected(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  GaussSphere *arg1 = (GaussSphere *) 0 ;
+  ISelectionRule *arg1 = (ISelectionRule *) 0 ;
+  I3 *arg2 = 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  SwigValueWrapper< std::vector< ParaMeta,std::allocator< ParaMeta > > > result;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  bool result;
   
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_GaussSphere, 0 |  0 );
+  if (!SWIG_Python_UnpackTuple(args, "ISelectionRule_coordinateSelected", 2, 2, swig_obj)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ISelectionRule, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "GaussSphere_parDefs" "', argument " "1"" of type '" "GaussSphere const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ISelectionRule_coordinateSelected" "', argument " "1"" of type '" "ISelectionRule const *""'"); 
   }
-  arg1 = reinterpret_cast< GaussSphere * >(argp1);
-  result = ((GaussSphere const *)arg1)->parDefs();
-  resultobj = SWIG_NewPointerObj((new std::vector< ParaMeta,std::allocator< ParaMeta > >(result)), SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, SWIG_POINTER_OWN |  0 );
+  arg1 = reinterpret_cast< ISelectionRule * >(argp1);
+  res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_Vec3T_int_t,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ISelectionRule_coordinateSelected" "', argument " "2"" of type '" "I3 const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "ISelectionRule_coordinateSelected" "', argument " "2"" of type '" "I3 const &""'"); 
+  }
+  arg2 = reinterpret_cast< I3 * >(argp2);
+  result = (bool)((ISelectionRule const *)arg1)->coordinateSelected((I3 const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_GaussSphere_meanRadius(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *ISelectionRule_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_ISelectionRule, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_SimpleSelectionRule(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  GaussSphere *arg1 = (GaussSphere *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  double result;
+  int arg1 ;
+  int arg2 ;
+  int arg3 ;
+  int arg4 ;
+  int val1 ;
+  int ecode1 = 0 ;
+  int val2 ;
+  int ecode2 = 0 ;
+  int val3 ;
+  int ecode3 = 0 ;
+  int val4 ;
+  int ecode4 = 0 ;
+  PyObject *swig_obj[4] ;
+  SimpleSelectionRule *result = 0 ;
   
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_GaussSphere, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "GaussSphere_meanRadius" "', argument " "1"" of type '" "GaussSphere const *""'"); 
-  }
-  arg1 = reinterpret_cast< GaussSphere * >(argp1);
-  result = (double)((GaussSphere const *)arg1)->meanRadius();
-  resultobj = SWIG_From_double(static_cast< double >(result));
+  if (!SWIG_Python_UnpackTuple(args, "new_SimpleSelectionRule", 4, 4, swig_obj)) SWIG_fail;
+  ecode1 = SWIG_AsVal_int(swig_obj[0], &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_SimpleSelectionRule" "', argument " "1"" of type '" "int""'");
+  } 
+  arg1 = static_cast< int >(val1);
+  ecode2 = SWIG_AsVal_int(swig_obj[1], &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_SimpleSelectionRule" "', argument " "2"" of type '" "int""'");
+  } 
+  arg2 = static_cast< int >(val2);
+  ecode3 = SWIG_AsVal_int(swig_obj[2], &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_SimpleSelectionRule" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = static_cast< int >(val3);
+  ecode4 = SWIG_AsVal_int(swig_obj[3], &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "new_SimpleSelectionRule" "', argument " "4"" of type '" "int""'");
+  } 
+  arg4 = static_cast< int >(val4);
+  result = (SimpleSelectionRule *)new SimpleSelectionRule(arg1,arg2,arg3,arg4);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SimpleSelectionRule, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_GaussSphere_radialExtension(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_SimpleSelectionRule(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  GaussSphere *arg1 = (GaussSphere *) 0 ;
+  SimpleSelectionRule *arg1 = (SimpleSelectionRule *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  double result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_GaussSphere, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "GaussSphere_radialExtension" "', argument " "1"" of type '" "GaussSphere const *""'"); 
-  }
-  arg1 = reinterpret_cast< GaussSphere * >(argp1);
-  result = (double)((GaussSphere const *)arg1)->radialExtension();
-  resultobj = SWIG_From_double(static_cast< double >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_GaussSphere_formfactor(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  GaussSphere *arg1 = (GaussSphere *) 0 ;
-  C3 arg2 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  void *argp2 ;
-  int res2 = 0 ;
-  PyObject *swig_obj[2] ;
-  complex_t result;
-  
-  if (!SWIG_Python_UnpackTuple(args, "GaussSphere_formfactor", 2, 2, swig_obj)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_GaussSphere, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SimpleSelectionRule, SWIG_POINTER_DISOWN |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "GaussSphere_formfactor" "', argument " "1"" of type '" "GaussSphere const *""'"); 
-  }
-  arg1 = reinterpret_cast< GaussSphere * >(argp1);
-  {
-    res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_Vec3T_std__complexT_double_t_t,  0  | 0);
-    if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "GaussSphere_formfactor" "', argument " "2"" of type '" "C3""'"); 
-    }  
-    if (!argp2) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "GaussSphere_formfactor" "', argument " "2"" of type '" "C3""'");
-    } else {
-      C3 * temp = reinterpret_cast< C3 * >(argp2);
-      arg2 = *temp;
-      if (SWIG_IsNewObj(res2)) delete temp;
-    }
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_SimpleSelectionRule" "', argument " "1"" of type '" "SimpleSelectionRule *""'"); 
   }
-  result = ((GaussSphere const *)arg1)->formfactor(arg2);
-  resultobj = SWIG_From_std_complex_Sl_double_Sg_(static_cast< std::complex<double> >(result));
+  arg1 = reinterpret_cast< SimpleSelectionRule * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_GaussSphere_validate(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_SimpleSelectionRule_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  GaussSphere *arg1 = (GaussSphere *) 0 ;
+  SimpleSelectionRule *arg1 = (SimpleSelectionRule *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  std::string result;
+  SimpleSelectionRule *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_GaussSphere, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SimpleSelectionRule, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "GaussSphere_validate" "', argument " "1"" of type '" "GaussSphere const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SimpleSelectionRule_clone" "', argument " "1"" of type '" "SimpleSelectionRule const *""'"); 
   }
-  arg1 = reinterpret_cast< GaussSphere * >(argp1);
-  result = ((GaussSphere const *)arg1)->validate();
-  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  arg1 = reinterpret_cast< SimpleSelectionRule * >(argp1);
+  result = (SimpleSelectionRule *)((SimpleSelectionRule const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SimpleSelectionRule, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_GaussSphere(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_SimpleSelectionRule_coordinateSelected(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  GaussSphere *arg1 = (GaussSphere *) 0 ;
+  SimpleSelectionRule *arg1 = (SimpleSelectionRule *) 0 ;
+  I3 *arg2 = 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
-  PyObject *swig_obj[1] ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  bool result;
   
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_GaussSphere, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_Python_UnpackTuple(args, "SimpleSelectionRule_coordinateSelected", 2, 2, swig_obj)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SimpleSelectionRule, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_GaussSphere" "', argument " "1"" of type '" "GaussSphere *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SimpleSelectionRule_coordinateSelected" "', argument " "1"" of type '" "SimpleSelectionRule const *""'"); 
   }
-  arg1 = reinterpret_cast< GaussSphere * >(argp1);
-  delete arg1;
-  resultobj = SWIG_Py_Void();
+  arg1 = reinterpret_cast< SimpleSelectionRule * >(argp1);
+  res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_Vec3T_int_t,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SimpleSelectionRule_coordinateSelected" "', argument " "2"" of type '" "I3 const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SimpleSelectionRule_coordinateSelected" "', argument " "2"" of type '" "I3 const &""'"); 
+  }
+  arg2 = reinterpret_cast< I3 * >(argp2);
+  result = (bool)((SimpleSelectionRule const *)arg1)->coordinateSelected((I3 const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *GaussSphere_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *SimpleSelectionRule_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
   if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_GaussSphere, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_SimpleSelectionRule, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *GaussSphere_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *SimpleSelectionRule_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   return SWIG_Python_InitShadowInstance(args);
 }
 
-SWIGINTERN PyObject *_wrap_new_FuzzySphere__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_Lattice3D__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
-  std::vector< double,std::allocator< double > > arg1 ;
-  FuzzySphere *result = 0 ;
+  R3 arg1 ;
+  R3 arg2 ;
+  R3 arg3 ;
+  void *argp1 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  void *argp3 ;
+  int res3 = 0 ;
+  Lattice3D *result = 0 ;
   
-  if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
+  if ((nobjs < 3) || (nobjs > 3)) SWIG_fail;
   {
-    std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
-    int res = swig::asptr(swig_obj[0], &ptr);
-    if (!SWIG_IsOK(res) || !ptr) {
-      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "new_FuzzySphere" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
+    res1 = SWIG_ConvertPtr(swig_obj[0], &argp1, SWIGTYPE_p_Vec3T_double_t,  0  | 0);
+    if (!SWIG_IsOK(res1)) {
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_Lattice3D" "', argument " "1"" of type '" "R3""'"); 
+    }  
+    if (!argp1) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_Lattice3D" "', argument " "1"" of type '" "R3""'");
+    } else {
+      R3 * temp = reinterpret_cast< R3 * >(argp1);
+      arg1 = *temp;
+      if (SWIG_IsNewObj(res1)) delete temp;
     }
-    arg1 = *ptr;
-    if (SWIG_IsNewObj(res)) delete ptr;
   }
-  result = (FuzzySphere *)new FuzzySphere(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_FuzzySphere, SWIG_POINTER_NEW |  0 );
+  {
+    res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_Vec3T_double_t,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "new_Lattice3D" "', argument " "2"" of type '" "R3""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_Lattice3D" "', argument " "2"" of type '" "R3""'");
+    } else {
+      R3 * temp = reinterpret_cast< R3 * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  {
+    res3 = SWIG_ConvertPtr(swig_obj[2], &argp3, SWIGTYPE_p_Vec3T_double_t,  0  | 0);
+    if (!SWIG_IsOK(res3)) {
+      SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "new_Lattice3D" "', argument " "3"" of type '" "R3""'"); 
+    }  
+    if (!argp3) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_Lattice3D" "', argument " "3"" of type '" "R3""'");
+    } else {
+      R3 * temp = reinterpret_cast< R3 * >(argp3);
+      arg3 = *temp;
+      if (SWIG_IsNewObj(res3)) delete temp;
+    }
+  }
+  result = (Lattice3D *)new Lattice3D(arg1,arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Lattice3D, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_FuzzySphere__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_Lattice3D__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
-  double arg1 ;
-  double arg2 ;
-  double val1 ;
-  int ecode1 = 0 ;
-  double val2 ;
-  int ecode2 = 0 ;
-  FuzzySphere *result = 0 ;
-  
-  if ((nobjs < 2) || (nobjs > 2)) SWIG_fail;
-  ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
-  if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_FuzzySphere" "', argument " "1"" of type '" "double""'");
-  } 
-  arg1 = static_cast< double >(val1);
-  ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_FuzzySphere" "', argument " "2"" of type '" "double""'");
-  } 
-  arg2 = static_cast< double >(val2);
-  result = (FuzzySphere *)new FuzzySphere(arg1,arg2);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_FuzzySphere, SWIG_POINTER_NEW |  0 );
+  Lattice3D *arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  Lattice3D *result = 0 ;
+  
+  if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1, SWIGTYPE_p_Lattice3D,  0  | 0);
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_Lattice3D" "', argument " "1"" of type '" "Lattice3D const &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_Lattice3D" "', argument " "1"" of type '" "Lattice3D const &""'"); 
+  }
+  arg1 = reinterpret_cast< Lattice3D * >(argp1);
+  result = (Lattice3D *)new Lattice3D((Lattice3D const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Lattice3D, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_FuzzySphere(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_Lattice3D(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
-  PyObject *argv[3] = {
+  PyObject *argv[4] = {
     0
   };
   
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_FuzzySphere", 0, 2, argv))) SWIG_fail;
+  if (!(argc = SWIG_Python_UnpackTuple(args, "new_Lattice3D", 0, 3, argv))) SWIG_fail;
   --argc;
   if (argc == 1) {
     int _v = 0;
-    int res = swig::asptr(argv[0], (std::vector< double,std::allocator< double > >**)(0));
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_Lattice3D, SWIG_POINTER_NO_NULL | 0);
     _v = SWIG_CheckState(res);
     if (_v) {
-      return _wrap_new_FuzzySphere__SWIG_0(self, argc, argv);
+      return _wrap_new_Lattice3D__SWIG_1(self, argc, argv);
     }
   }
-  if (argc == 2) {
+  if (argc == 3) {
     int _v = 0;
-    {
-      int res = SWIG_AsVal_double(argv[0], NULL);
-      _v = SWIG_CheckState(res);
-    }
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_Vec3T_double_t, SWIG_POINTER_NO_NULL | 0);
+    _v = SWIG_CheckState(res);
     if (_v) {
-      {
-        int res = SWIG_AsVal_double(argv[1], NULL);
-        _v = SWIG_CheckState(res);
-      }
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_Vec3T_double_t, SWIG_POINTER_NO_NULL | 0);
+      _v = SWIG_CheckState(res);
       if (_v) {
-        return _wrap_new_FuzzySphere__SWIG_1(self, argc, argv);
+        int res = SWIG_ConvertPtr(argv[2], 0, SWIGTYPE_p_Vec3T_double_t, SWIG_POINTER_NO_NULL | 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_new_Lattice3D__SWIG_0(self, argc, argv);
+        }
       }
     }
   }
   
 fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_FuzzySphere'.\n"
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_Lattice3D'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    FuzzySphere::FuzzySphere(std::vector< double,std::allocator< double > >)\n"
-    "    FuzzySphere::FuzzySphere(double,double)\n");
+    "    Lattice3D::Lattice3D(R3,R3,R3)\n"
+    "    Lattice3D::Lattice3D(Lattice3D const &)\n");
   return 0;
 }
 
 
-SWIGINTERN PyObject *_wrap_FuzzySphere_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_Lattice3D(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  FuzzySphere *arg1 = (FuzzySphere *) 0 ;
+  Lattice3D *arg1 = (Lattice3D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  FuzzySphere *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_FuzzySphere, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Lattice3D, SWIG_POINTER_DISOWN |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FuzzySphere_clone" "', argument " "1"" of type '" "FuzzySphere const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Lattice3D" "', argument " "1"" of type '" "Lattice3D *""'"); 
   }
-  arg1 = reinterpret_cast< FuzzySphere * >(argp1);
-  result = (FuzzySphere *)((FuzzySphere const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_FuzzySphere, 0 |  0 );
+  arg1 = reinterpret_cast< Lattice3D * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_FuzzySphere_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Lattice3D_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  FuzzySphere *arg1 = (FuzzySphere *) 0 ;
+  Lattice3D *arg1 = (Lattice3D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -58531,12 +59063,12 @@ SWIGINTERN PyObject *_wrap_FuzzySphere_className(PyObject *self, PyObject *args)
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_FuzzySphere, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Lattice3D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FuzzySphere_className" "', argument " "1"" of type '" "FuzzySphere const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Lattice3D_className" "', argument " "1"" of type '" "Lattice3D const *""'"); 
   }
-  arg1 = reinterpret_cast< FuzzySphere * >(argp1);
-  result = ((FuzzySphere const *)arg1)->className();
+  arg1 = reinterpret_cast< Lattice3D * >(argp1);
+  result = ((Lattice3D const *)arg1)->className();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -58544,292 +59076,340 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_FuzzySphere_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Lattice3D_rotated(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  FuzzySphere *arg1 = (FuzzySphere *) 0 ;
+  Lattice3D *arg1 = (Lattice3D *) 0 ;
+  RotMatrix *arg2 = 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  SwigValueWrapper< std::vector< ParaMeta,std::allocator< ParaMeta > > > result;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
+  SwigValueWrapper< Lattice3D > result;
   
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_FuzzySphere, 0 |  0 );
+  if (!SWIG_Python_UnpackTuple(args, "Lattice3D_rotated", 2, 2, swig_obj)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Lattice3D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FuzzySphere_parDefs" "', argument " "1"" of type '" "FuzzySphere const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Lattice3D_rotated" "', argument " "1"" of type '" "Lattice3D const *""'"); 
   }
-  arg1 = reinterpret_cast< FuzzySphere * >(argp1);
-  result = ((FuzzySphere const *)arg1)->parDefs();
-  resultobj = SWIG_NewPointerObj((new std::vector< ParaMeta,std::allocator< ParaMeta > >(result)), SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, SWIG_POINTER_OWN |  0 );
+  arg1 = reinterpret_cast< Lattice3D * >(argp1);
+  res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_Rotation3DT_double_t,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Lattice3D_rotated" "', argument " "2"" of type '" "RotMatrix const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Lattice3D_rotated" "', argument " "2"" of type '" "RotMatrix const &""'"); 
+  }
+  arg2 = reinterpret_cast< RotMatrix * >(argp2);
+  result = ((Lattice3D const *)arg1)->rotated((RotMatrix const &)*arg2);
+  resultobj = SWIG_NewPointerObj((new Lattice3D(result)), SWIGTYPE_p_Lattice3D, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_FuzzySphere_radialExtension(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Lattice3D_basisVectorA(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  FuzzySphere *arg1 = (FuzzySphere *) 0 ;
+  Lattice3D *arg1 = (Lattice3D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  double result;
+  R3 result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_FuzzySphere, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Lattice3D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FuzzySphere_radialExtension" "', argument " "1"" of type '" "FuzzySphere const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Lattice3D_basisVectorA" "', argument " "1"" of type '" "Lattice3D const *""'"); 
   }
-  arg1 = reinterpret_cast< FuzzySphere * >(argp1);
-  result = (double)((FuzzySphere const *)arg1)->radialExtension();
-  resultobj = SWIG_From_double(static_cast< double >(result));
+  arg1 = reinterpret_cast< Lattice3D * >(argp1);
+  result = ((Lattice3D const *)arg1)->basisVectorA();
+  resultobj = SWIG_NewPointerObj((new R3(result)), SWIGTYPE_p_Vec3T_double_t, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_FuzzySphere_formfactor(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Lattice3D_basisVectorB(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  FuzzySphere *arg1 = (FuzzySphere *) 0 ;
-  C3 arg2 ;
+  Lattice3D *arg1 = (Lattice3D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
-  void *argp2 ;
-  int res2 = 0 ;
-  PyObject *swig_obj[2] ;
-  complex_t result;
+  PyObject *swig_obj[1] ;
+  R3 result;
   
-  if (!SWIG_Python_UnpackTuple(args, "FuzzySphere_formfactor", 2, 2, swig_obj)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_FuzzySphere, 0 |  0 );
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Lattice3D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FuzzySphere_formfactor" "', argument " "1"" of type '" "FuzzySphere const *""'"); 
-  }
-  arg1 = reinterpret_cast< FuzzySphere * >(argp1);
-  {
-    res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_Vec3T_std__complexT_double_t_t,  0  | 0);
-    if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "FuzzySphere_formfactor" "', argument " "2"" of type '" "C3""'"); 
-    }  
-    if (!argp2) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "FuzzySphere_formfactor" "', argument " "2"" of type '" "C3""'");
-    } else {
-      C3 * temp = reinterpret_cast< C3 * >(argp2);
-      arg2 = *temp;
-      if (SWIG_IsNewObj(res2)) delete temp;
-    }
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Lattice3D_basisVectorB" "', argument " "1"" of type '" "Lattice3D const *""'"); 
   }
-  result = ((FuzzySphere const *)arg1)->formfactor(arg2);
-  resultobj = SWIG_From_std_complex_Sl_double_Sg_(static_cast< std::complex<double> >(result));
+  arg1 = reinterpret_cast< Lattice3D * >(argp1);
+  result = ((Lattice3D const *)arg1)->basisVectorB();
+  resultobj = SWIG_NewPointerObj((new R3(result)), SWIGTYPE_p_Vec3T_double_t, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_FuzzySphere_validate(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Lattice3D_basisVectorC(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  FuzzySphere *arg1 = (FuzzySphere *) 0 ;
+  Lattice3D *arg1 = (Lattice3D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  std::string result;
+  R3 result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_FuzzySphere, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Lattice3D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FuzzySphere_validate" "', argument " "1"" of type '" "FuzzySphere const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Lattice3D_basisVectorC" "', argument " "1"" of type '" "Lattice3D const *""'"); 
   }
-  arg1 = reinterpret_cast< FuzzySphere * >(argp1);
-  result = ((FuzzySphere const *)arg1)->validate();
-  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  arg1 = reinterpret_cast< Lattice3D * >(argp1);
+  result = ((Lattice3D const *)arg1)->basisVectorC();
+  resultobj = SWIG_NewPointerObj((new R3(result)), SWIGTYPE_p_Vec3T_double_t, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_FuzzySphere(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Lattice3D_getMillerDirection(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  FuzzySphere *arg1 = (FuzzySphere *) 0 ;
+  Lattice3D *arg1 = (Lattice3D *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  double arg4 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
-  PyObject *swig_obj[1] ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  PyObject *swig_obj[4] ;
+  R3 result;
   
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_FuzzySphere, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_Python_UnpackTuple(args, "Lattice3D_getMillerDirection", 4, 4, swig_obj)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Lattice3D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_FuzzySphere" "', argument " "1"" of type '" "FuzzySphere *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Lattice3D_getMillerDirection" "', argument " "1"" of type '" "Lattice3D const *""'"); 
   }
-  arg1 = reinterpret_cast< FuzzySphere * >(argp1);
-  delete arg1;
-  resultobj = SWIG_Py_Void();
+  arg1 = reinterpret_cast< Lattice3D * >(argp1);
+  ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "Lattice3D_getMillerDirection" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "Lattice3D_getMillerDirection" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  ecode4 = SWIG_AsVal_double(swig_obj[3], &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "Lattice3D_getMillerDirection" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  result = ((Lattice3D const *)arg1)->getMillerDirection(arg2,arg3,arg4);
+  resultobj = SWIG_NewPointerObj((new R3(result)), SWIGTYPE_p_Vec3T_double_t, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *FuzzySphere_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *obj;
-  if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_FuzzySphere, SWIG_NewClientData(obj));
-  return SWIG_Py_Void();
-}
-
-SWIGINTERN PyObject *FuzzySphere_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  return SWIG_Python_InitShadowInstance(args);
-}
-
-SWIGINTERN PyObject *_wrap_delete_ISelectionRule(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Lattice3D_unitCellVolume(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  ISelectionRule *arg1 = (ISelectionRule *) 0 ;
+  Lattice3D *arg1 = (Lattice3D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
+  double result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ISelectionRule, SWIG_POINTER_DISOWN |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Lattice3D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_ISelectionRule" "', argument " "1"" of type '" "ISelectionRule *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Lattice3D_unitCellVolume" "', argument " "1"" of type '" "Lattice3D const *""'"); 
   }
-  arg1 = reinterpret_cast< ISelectionRule * >(argp1);
-  delete arg1;
-  resultobj = SWIG_Py_Void();
+  arg1 = reinterpret_cast< Lattice3D * >(argp1);
+  result = (double)((Lattice3D const *)arg1)->unitCellVolume();
+  resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_ISelectionRule_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Lattice3D_reciprocalLatticeBasis(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  ISelectionRule *arg1 = (ISelectionRule *) 0 ;
+  Lattice3D *arg1 = (Lattice3D *) 0 ;
+  R3 *arg2 = 0 ;
+  R3 *arg3 = 0 ;
+  R3 *arg4 = 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  ISelectionRule *result = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  void *argp4 = 0 ;
+  int res4 = 0 ;
+  PyObject *swig_obj[4] ;
   
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ISelectionRule, 0 |  0 );
+  if (!SWIG_Python_UnpackTuple(args, "Lattice3D_reciprocalLatticeBasis", 4, 4, swig_obj)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Lattice3D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ISelectionRule_clone" "', argument " "1"" of type '" "ISelectionRule const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Lattice3D_reciprocalLatticeBasis" "', argument " "1"" of type '" "Lattice3D const *""'"); 
   }
-  arg1 = reinterpret_cast< ISelectionRule * >(argp1);
-  result = (ISelectionRule *)((ISelectionRule const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_ISelectionRule, 0 |  0 );
+  arg1 = reinterpret_cast< Lattice3D * >(argp1);
+  res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_Vec3T_double_t,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Lattice3D_reciprocalLatticeBasis" "', argument " "2"" of type '" "R3 &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Lattice3D_reciprocalLatticeBasis" "', argument " "2"" of type '" "R3 &""'"); 
+  }
+  arg2 = reinterpret_cast< R3 * >(argp2);
+  res3 = SWIG_ConvertPtr(swig_obj[2], &argp3, SWIGTYPE_p_Vec3T_double_t,  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "Lattice3D_reciprocalLatticeBasis" "', argument " "3"" of type '" "R3 &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Lattice3D_reciprocalLatticeBasis" "', argument " "3"" of type '" "R3 &""'"); 
+  }
+  arg3 = reinterpret_cast< R3 * >(argp3);
+  res4 = SWIG_ConvertPtr(swig_obj[3], &argp4, SWIGTYPE_p_Vec3T_double_t,  0 );
+  if (!SWIG_IsOK(res4)) {
+    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "Lattice3D_reciprocalLatticeBasis" "', argument " "4"" of type '" "R3 &""'"); 
+  }
+  if (!argp4) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Lattice3D_reciprocalLatticeBasis" "', argument " "4"" of type '" "R3 &""'"); 
+  }
+  arg4 = reinterpret_cast< R3 * >(argp4);
+  ((Lattice3D const *)arg1)->reciprocalLatticeBasis(*arg2,*arg3,*arg4);
+  resultobj = SWIG_Py_Void();
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_ISelectionRule_coordinateSelected(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Lattice3D_nearestReciprocalLatticeVectorCoordinates(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  ISelectionRule *arg1 = (ISelectionRule *) 0 ;
-  I3 *arg2 = 0 ;
+  Lattice3D *arg1 = (Lattice3D *) 0 ;
+  R3 arg2 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
-  void *argp2 = 0 ;
+  void *argp2 ;
   int res2 = 0 ;
   PyObject *swig_obj[2] ;
-  bool result;
+  SwigValueWrapper< Vec3< int > > result;
   
-  if (!SWIG_Python_UnpackTuple(args, "ISelectionRule_coordinateSelected", 2, 2, swig_obj)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ISelectionRule, 0 |  0 );
+  if (!SWIG_Python_UnpackTuple(args, "Lattice3D_nearestReciprocalLatticeVectorCoordinates", 2, 2, swig_obj)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Lattice3D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ISelectionRule_coordinateSelected" "', argument " "1"" of type '" "ISelectionRule const *""'"); 
-  }
-  arg1 = reinterpret_cast< ISelectionRule * >(argp1);
-  res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_Vec3T_int_t,  0  | 0);
-  if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ISelectionRule_coordinateSelected" "', argument " "2"" of type '" "I3 const &""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Lattice3D_nearestReciprocalLatticeVectorCoordinates" "', argument " "1"" of type '" "Lattice3D const *""'"); 
   }
-  if (!argp2) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "ISelectionRule_coordinateSelected" "', argument " "2"" of type '" "I3 const &""'"); 
+  arg1 = reinterpret_cast< Lattice3D * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_Vec3T_double_t,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Lattice3D_nearestReciprocalLatticeVectorCoordinates" "', argument " "2"" of type '" "R3""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Lattice3D_nearestReciprocalLatticeVectorCoordinates" "', argument " "2"" of type '" "R3""'");
+    } else {
+      R3 * temp = reinterpret_cast< R3 * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
   }
-  arg2 = reinterpret_cast< I3 * >(argp2);
-  result = (bool)((ISelectionRule const *)arg1)->coordinateSelected((I3 const &)*arg2);
-  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  result = ((Lattice3D const *)arg1)->nearestReciprocalLatticeVectorCoordinates(arg2);
+  resultobj = SWIG_NewPointerObj((new I3(result)), SWIGTYPE_p_Vec3T_int_t, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *ISelectionRule_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *obj;
-  if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_ISelectionRule, SWIG_NewClientData(obj));
-  return SWIG_Py_Void();
-}
-
-SWIGINTERN PyObject *_wrap_new_SimpleSelectionRule(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Lattice3D_reciprocalLatticeVectorsWithinRadius(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  int arg1 ;
-  int arg2 ;
-  int arg3 ;
-  int arg4 ;
-  int val1 ;
-  int ecode1 = 0 ;
-  int val2 ;
-  int ecode2 = 0 ;
-  int val3 ;
+  Lattice3D *arg1 = (Lattice3D *) 0 ;
+  R3 arg2 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 ;
+  int res2 = 0 ;
+  double val3 ;
   int ecode3 = 0 ;
-  int val4 ;
-  int ecode4 = 0 ;
-  PyObject *swig_obj[4] ;
-  SimpleSelectionRule *result = 0 ;
+  PyObject *swig_obj[3] ;
+  std::vector< R3,std::allocator< R3 > > result;
   
-  if (!SWIG_Python_UnpackTuple(args, "new_SimpleSelectionRule", 4, 4, swig_obj)) SWIG_fail;
-  ecode1 = SWIG_AsVal_int(swig_obj[0], &val1);
-  if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_SimpleSelectionRule" "', argument " "1"" of type '" "int""'");
-  } 
-  arg1 = static_cast< int >(val1);
-  ecode2 = SWIG_AsVal_int(swig_obj[1], &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_SimpleSelectionRule" "', argument " "2"" of type '" "int""'");
-  } 
-  arg2 = static_cast< int >(val2);
-  ecode3 = SWIG_AsVal_int(swig_obj[2], &val3);
+  if (!SWIG_Python_UnpackTuple(args, "Lattice3D_reciprocalLatticeVectorsWithinRadius", 3, 3, swig_obj)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Lattice3D, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Lattice3D_reciprocalLatticeVectorsWithinRadius" "', argument " "1"" of type '" "Lattice3D const *""'"); 
+  }
+  arg1 = reinterpret_cast< Lattice3D * >(argp1);
+  {
+    res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_Vec3T_double_t,  0  | 0);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Lattice3D_reciprocalLatticeVectorsWithinRadius" "', argument " "2"" of type '" "R3""'"); 
+    }  
+    if (!argp2) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Lattice3D_reciprocalLatticeVectorsWithinRadius" "', argument " "2"" of type '" "R3""'");
+    } else {
+      R3 * temp = reinterpret_cast< R3 * >(argp2);
+      arg2 = *temp;
+      if (SWIG_IsNewObj(res2)) delete temp;
+    }
+  }
+  ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
   if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_SimpleSelectionRule" "', argument " "3"" of type '" "int""'");
-  } 
-  arg3 = static_cast< int >(val3);
-  ecode4 = SWIG_AsVal_int(swig_obj[3], &val4);
-  if (!SWIG_IsOK(ecode4)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "new_SimpleSelectionRule" "', argument " "4"" of type '" "int""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "Lattice3D_reciprocalLatticeVectorsWithinRadius" "', argument " "3"" of type '" "double""'");
   } 
-  arg4 = static_cast< int >(val4);
-  result = (SimpleSelectionRule *)new SimpleSelectionRule(arg1,arg2,arg3,arg4);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SimpleSelectionRule, SWIG_POINTER_NEW |  0 );
+  arg3 = static_cast< double >(val3);
+  result = ((Lattice3D const *)arg1)->reciprocalLatticeVectorsWithinRadius(arg2,arg3);
+  resultobj = swig::from(static_cast< std::vector< Vec3< double >,std::allocator< Vec3< double > > > >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_SimpleSelectionRule(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Lattice3D_setSelectionRule(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  SimpleSelectionRule *arg1 = (SimpleSelectionRule *) 0 ;
+  Lattice3D *arg1 = (Lattice3D *) 0 ;
+  ISelectionRule *arg2 = 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
-  PyObject *swig_obj[1] ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject *swig_obj[2] ;
   
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SimpleSelectionRule, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_Python_UnpackTuple(args, "Lattice3D_setSelectionRule", 2, 2, swig_obj)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Lattice3D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_SimpleSelectionRule" "', argument " "1"" of type '" "SimpleSelectionRule *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Lattice3D_setSelectionRule" "', argument " "1"" of type '" "Lattice3D *""'"); 
   }
-  arg1 = reinterpret_cast< SimpleSelectionRule * >(argp1);
-  delete arg1;
+  arg1 = reinterpret_cast< Lattice3D * >(argp1);
+  res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_ISelectionRule,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Lattice3D_setSelectionRule" "', argument " "2"" of type '" "ISelectionRule const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Lattice3D_setSelectionRule" "', argument " "2"" of type '" "ISelectionRule const &""'"); 
+  }
+  arg2 = reinterpret_cast< ISelectionRule * >(argp2);
+  (arg1)->setSelectionRule((ISelectionRule const &)*arg2);
   resultobj = SWIG_Py_Void();
   return resultobj;
 fail:
@@ -58837,355 +59417,244 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_SimpleSelectionRule_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *Lattice3D_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_Lattice3D, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *Lattice3D_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+
+SWIGINTERN PyObject *_wrap_Lattice2D_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  SimpleSelectionRule *arg1 = (SimpleSelectionRule *) 0 ;
+  Lattice2D *arg1 = (Lattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  SimpleSelectionRule *result = 0 ;
+  Lattice2D *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SimpleSelectionRule, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Lattice2D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SimpleSelectionRule_clone" "', argument " "1"" of type '" "SimpleSelectionRule const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Lattice2D_clone" "', argument " "1"" of type '" "Lattice2D const *""'"); 
   }
-  arg1 = reinterpret_cast< SimpleSelectionRule * >(argp1);
-  result = (SimpleSelectionRule *)((SimpleSelectionRule const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SimpleSelectionRule, 0 |  0 );
+  arg1 = reinterpret_cast< Lattice2D * >(argp1);
+  result = (Lattice2D *)((Lattice2D const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Lattice2D, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_SimpleSelectionRule_coordinateSelected(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Lattice2D_length1(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  SimpleSelectionRule *arg1 = (SimpleSelectionRule *) 0 ;
-  I3 *arg2 = 0 ;
+  Lattice2D *arg1 = (Lattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
-  void *argp2 = 0 ;
-  int res2 = 0 ;
-  PyObject *swig_obj[2] ;
-  bool result;
+  PyObject *swig_obj[1] ;
+  double result;
   
-  if (!SWIG_Python_UnpackTuple(args, "SimpleSelectionRule_coordinateSelected", 2, 2, swig_obj)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SimpleSelectionRule, 0 |  0 );
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Lattice2D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SimpleSelectionRule_coordinateSelected" "', argument " "1"" of type '" "SimpleSelectionRule const *""'"); 
-  }
-  arg1 = reinterpret_cast< SimpleSelectionRule * >(argp1);
-  res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_Vec3T_int_t,  0  | 0);
-  if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SimpleSelectionRule_coordinateSelected" "', argument " "2"" of type '" "I3 const &""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Lattice2D_length1" "', argument " "1"" of type '" "Lattice2D const *""'"); 
   }
-  if (!argp2) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SimpleSelectionRule_coordinateSelected" "', argument " "2"" of type '" "I3 const &""'"); 
-  }
-  arg2 = reinterpret_cast< I3 * >(argp2);
-  result = (bool)((SimpleSelectionRule const *)arg1)->coordinateSelected((I3 const &)*arg2);
-  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  arg1 = reinterpret_cast< Lattice2D * >(argp1);
+  result = (double)((Lattice2D const *)arg1)->length1();
+  resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *SimpleSelectionRule_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *obj;
-  if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_SimpleSelectionRule, SWIG_NewClientData(obj));
-  return SWIG_Py_Void();
-}
-
-SWIGINTERN PyObject *SimpleSelectionRule_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  return SWIG_Python_InitShadowInstance(args);
-}
-
-SWIGINTERN PyObject *_wrap_new_Lattice3D__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_Lattice2D_length2(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  R3 arg1 ;
-  R3 arg2 ;
-  R3 arg3 ;
-  void *argp1 ;
+  Lattice2D *arg1 = (Lattice2D *) 0 ;
+  void *argp1 = 0 ;
   int res1 = 0 ;
-  void *argp2 ;
-  int res2 = 0 ;
-  void *argp3 ;
-  int res3 = 0 ;
-  Lattice3D *result = 0 ;
+  PyObject *swig_obj[1] ;
+  double result;
   
-  if ((nobjs < 3) || (nobjs > 3)) SWIG_fail;
-  {
-    res1 = SWIG_ConvertPtr(swig_obj[0], &argp1, SWIGTYPE_p_Vec3T_double_t,  0  | 0);
-    if (!SWIG_IsOK(res1)) {
-      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_Lattice3D" "', argument " "1"" of type '" "R3""'"); 
-    }  
-    if (!argp1) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_Lattice3D" "', argument " "1"" of type '" "R3""'");
-    } else {
-      R3 * temp = reinterpret_cast< R3 * >(argp1);
-      arg1 = *temp;
-      if (SWIG_IsNewObj(res1)) delete temp;
-    }
-  }
-  {
-    res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_Vec3T_double_t,  0  | 0);
-    if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "new_Lattice3D" "', argument " "2"" of type '" "R3""'"); 
-    }  
-    if (!argp2) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_Lattice3D" "', argument " "2"" of type '" "R3""'");
-    } else {
-      R3 * temp = reinterpret_cast< R3 * >(argp2);
-      arg2 = *temp;
-      if (SWIG_IsNewObj(res2)) delete temp;
-    }
-  }
-  {
-    res3 = SWIG_ConvertPtr(swig_obj[2], &argp3, SWIGTYPE_p_Vec3T_double_t,  0  | 0);
-    if (!SWIG_IsOK(res3)) {
-      SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "new_Lattice3D" "', argument " "3"" of type '" "R3""'"); 
-    }  
-    if (!argp3) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_Lattice3D" "', argument " "3"" of type '" "R3""'");
-    } else {
-      R3 * temp = reinterpret_cast< R3 * >(argp3);
-      arg3 = *temp;
-      if (SWIG_IsNewObj(res3)) delete temp;
-    }
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Lattice2D, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Lattice2D_length2" "', argument " "1"" of type '" "Lattice2D const *""'"); 
   }
-  result = (Lattice3D *)new Lattice3D(arg1,arg2,arg3);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Lattice3D, SWIG_POINTER_NEW |  0 );
+  arg1 = reinterpret_cast< Lattice2D * >(argp1);
+  result = (double)((Lattice2D const *)arg1)->length2();
+  resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_Lattice3D__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_Lattice2D_latticeAngle(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Lattice3D *arg1 = 0 ;
+  Lattice2D *arg1 = (Lattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
-  Lattice3D *result = 0 ;
+  PyObject *swig_obj[1] ;
+  double result;
   
-  if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1, SWIGTYPE_p_Lattice3D,  0  | 0);
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Lattice2D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_Lattice3D" "', argument " "1"" of type '" "Lattice3D const &""'"); 
-  }
-  if (!argp1) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_Lattice3D" "', argument " "1"" of type '" "Lattice3D const &""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Lattice2D_latticeAngle" "', argument " "1"" of type '" "Lattice2D const *""'"); 
   }
-  arg1 = reinterpret_cast< Lattice3D * >(argp1);
-  result = (Lattice3D *)new Lattice3D((Lattice3D const &)*arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Lattice3D, SWIG_POINTER_NEW |  0 );
+  arg1 = reinterpret_cast< Lattice2D * >(argp1);
+  result = (double)((Lattice2D const *)arg1)->latticeAngle();
+  resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_Lattice3D(PyObject *self, PyObject *args) {
-  Py_ssize_t argc;
-  PyObject *argv[4] = {
-    0
-  };
-  
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_Lattice3D", 0, 3, argv))) SWIG_fail;
-  --argc;
-  if (argc == 1) {
-    int _v = 0;
-    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_Lattice3D, SWIG_POINTER_NO_NULL | 0);
-    _v = SWIG_CheckState(res);
-    if (_v) {
-      return _wrap_new_Lattice3D__SWIG_1(self, argc, argv);
-    }
-  }
-  if (argc == 3) {
-    int _v = 0;
-    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_Vec3T_double_t, SWIG_POINTER_NO_NULL | 0);
-    _v = SWIG_CheckState(res);
-    if (_v) {
-      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_Vec3T_double_t, SWIG_POINTER_NO_NULL | 0);
-      _v = SWIG_CheckState(res);
-      if (_v) {
-        int res = SWIG_ConvertPtr(argv[2], 0, SWIGTYPE_p_Vec3T_double_t, SWIG_POINTER_NO_NULL | 0);
-        _v = SWIG_CheckState(res);
-        if (_v) {
-          return _wrap_new_Lattice3D__SWIG_0(self, argc, argv);
-        }
-      }
-    }
-  }
-  
-fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_Lattice3D'.\n"
-    "  Possible C/C++ prototypes are:\n"
-    "    Lattice3D::Lattice3D(R3,R3,R3)\n"
-    "    Lattice3D::Lattice3D(Lattice3D const &)\n");
-  return 0;
-}
-
-
-SWIGINTERN PyObject *_wrap_delete_Lattice3D(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Lattice2D_unitCellArea(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Lattice3D *arg1 = (Lattice3D *) 0 ;
+  Lattice2D *arg1 = (Lattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
+  double result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Lattice3D, SWIG_POINTER_DISOWN |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Lattice2D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Lattice3D" "', argument " "1"" of type '" "Lattice3D *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Lattice2D_unitCellArea" "', argument " "1"" of type '" "Lattice2D const *""'"); 
   }
-  arg1 = reinterpret_cast< Lattice3D * >(argp1);
-  delete arg1;
-  resultobj = SWIG_Py_Void();
+  arg1 = reinterpret_cast< Lattice2D * >(argp1);
+  result = (double)((Lattice2D const *)arg1)->unitCellArea();
+  resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Lattice3D_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Lattice2D_rotationAngle(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Lattice3D *arg1 = (Lattice3D *) 0 ;
+  Lattice2D *arg1 = (Lattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  std::string result;
+  double result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Lattice3D, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Lattice2D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Lattice3D_className" "', argument " "1"" of type '" "Lattice3D const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Lattice2D_rotationAngle" "', argument " "1"" of type '" "Lattice2D const *""'"); 
   }
-  arg1 = reinterpret_cast< Lattice3D * >(argp1);
-  result = ((Lattice3D const *)arg1)->className();
-  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  arg1 = reinterpret_cast< Lattice2D * >(argp1);
+  result = (double)((Lattice2D const *)arg1)->rotationAngle();
+  resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Lattice3D_rotated(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Lattice2D_reciprocalBases(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Lattice3D *arg1 = (Lattice3D *) 0 ;
-  RotMatrix *arg2 = 0 ;
+  Lattice2D *arg1 = (Lattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
-  void *argp2 = 0 ;
-  int res2 = 0 ;
-  PyObject *swig_obj[2] ;
-  SwigValueWrapper< Lattice3D > result;
+  PyObject *swig_obj[1] ;
+  Lattice2D::ReciprocalBases result;
   
-  if (!SWIG_Python_UnpackTuple(args, "Lattice3D_rotated", 2, 2, swig_obj)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Lattice3D, 0 |  0 );
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Lattice2D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Lattice3D_rotated" "', argument " "1"" of type '" "Lattice3D const *""'"); 
-  }
-  arg1 = reinterpret_cast< Lattice3D * >(argp1);
-  res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_Rotation3DT_double_t,  0  | 0);
-  if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Lattice3D_rotated" "', argument " "2"" of type '" "RotMatrix const &""'"); 
-  }
-  if (!argp2) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Lattice3D_rotated" "', argument " "2"" of type '" "RotMatrix const &""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Lattice2D_reciprocalBases" "', argument " "1"" of type '" "Lattice2D const *""'"); 
   }
-  arg2 = reinterpret_cast< RotMatrix * >(argp2);
-  result = ((Lattice3D const *)arg1)->rotated((RotMatrix const &)*arg2);
-  resultobj = SWIG_NewPointerObj((new Lattice3D(result)), SWIGTYPE_p_Lattice3D, SWIG_POINTER_OWN |  0 );
+  arg1 = reinterpret_cast< Lattice2D * >(argp1);
+  result = ((Lattice2D const *)arg1)->reciprocalBases();
+  resultobj = SWIG_NewPointerObj((new Lattice2D::ReciprocalBases(result)), SWIGTYPE_p_Lattice2D__ReciprocalBases, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Lattice3D_basisVectorA(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Lattice2D_setRotationEnabled(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Lattice3D *arg1 = (Lattice3D *) 0 ;
+  Lattice2D *arg1 = (Lattice2D *) 0 ;
+  bool arg2 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  R3 result;
+  bool val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
   
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Lattice3D, 0 |  0 );
+  if (!SWIG_Python_UnpackTuple(args, "Lattice2D_setRotationEnabled", 2, 2, swig_obj)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Lattice2D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Lattice3D_basisVectorA" "', argument " "1"" of type '" "Lattice3D const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Lattice2D_setRotationEnabled" "', argument " "1"" of type '" "Lattice2D *""'"); 
   }
-  arg1 = reinterpret_cast< Lattice3D * >(argp1);
-  result = ((Lattice3D const *)arg1)->basisVectorA();
-  resultobj = SWIG_NewPointerObj((new R3(result)), SWIGTYPE_p_Vec3T_double_t, SWIG_POINTER_OWN |  0 );
+  arg1 = reinterpret_cast< Lattice2D * >(argp1);
+  ecode2 = SWIG_AsVal_bool(swig_obj[1], &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "Lattice2D_setRotationEnabled" "', argument " "2"" of type '" "bool""'");
+  } 
+  arg2 = static_cast< bool >(val2);
+  (arg1)->setRotationEnabled(arg2);
+  resultobj = SWIG_Py_Void();
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Lattice3D_basisVectorB(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_Lattice2D(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Lattice3D *arg1 = (Lattice3D *) 0 ;
+  Lattice2D *arg1 = (Lattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  R3 result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Lattice3D, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Lattice2D, SWIG_POINTER_DISOWN |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Lattice3D_basisVectorB" "', argument " "1"" of type '" "Lattice3D const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Lattice2D" "', argument " "1"" of type '" "Lattice2D *""'"); 
   }
-  arg1 = reinterpret_cast< Lattice3D * >(argp1);
-  result = ((Lattice3D const *)arg1)->basisVectorB();
-  resultobj = SWIG_NewPointerObj((new R3(result)), SWIGTYPE_p_Vec3T_double_t, SWIG_POINTER_OWN |  0 );
+  arg1 = reinterpret_cast< Lattice2D * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Lattice3D_basisVectorC(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  Lattice3D *arg1 = (Lattice3D *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  R3 result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Lattice3D, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Lattice3D_basisVectorC" "', argument " "1"" of type '" "Lattice3D const *""'"); 
-  }
-  arg1 = reinterpret_cast< Lattice3D * >(argp1);
-  result = ((Lattice3D const *)arg1)->basisVectorC();
-  resultobj = SWIG_NewPointerObj((new R3(result)), SWIGTYPE_p_Vec3T_double_t, SWIG_POINTER_OWN |  0 );
-  return resultobj;
-fail:
-  return NULL;
+SWIGINTERN PyObject *Lattice2D_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_Lattice2D, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
 }
 
-
-SWIGINTERN PyObject *_wrap_Lattice3D_getMillerDirection(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_BasicLattice2D(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Lattice3D *arg1 = (Lattice3D *) 0 ;
+  double arg1 ;
   double arg2 ;
   double arg3 ;
   double arg4 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
+  double val1 ;
+  int ecode1 = 0 ;
   double val2 ;
   int ecode2 = 0 ;
   double val3 ;
@@ -59193,267 +59662,178 @@ SWIGINTERN PyObject *_wrap_Lattice3D_getMillerDirection(PyObject *self, PyObject
   double val4 ;
   int ecode4 = 0 ;
   PyObject *swig_obj[4] ;
-  R3 result;
+  BasicLattice2D *result = 0 ;
   
-  if (!SWIG_Python_UnpackTuple(args, "Lattice3D_getMillerDirection", 4, 4, swig_obj)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Lattice3D, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Lattice3D_getMillerDirection" "', argument " "1"" of type '" "Lattice3D const *""'"); 
-  }
-  arg1 = reinterpret_cast< Lattice3D * >(argp1);
+  if (!SWIG_Python_UnpackTuple(args, "new_BasicLattice2D", 4, 4, swig_obj)) SWIG_fail;
+  ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_BasicLattice2D" "', argument " "1"" of type '" "double""'");
+  } 
+  arg1 = static_cast< double >(val1);
   ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
   if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "Lattice3D_getMillerDirection" "', argument " "2"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_BasicLattice2D" "', argument " "2"" of type '" "double""'");
   } 
   arg2 = static_cast< double >(val2);
   ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
   if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "Lattice3D_getMillerDirection" "', argument " "3"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_BasicLattice2D" "', argument " "3"" of type '" "double""'");
   } 
   arg3 = static_cast< double >(val3);
   ecode4 = SWIG_AsVal_double(swig_obj[3], &val4);
   if (!SWIG_IsOK(ecode4)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "Lattice3D_getMillerDirection" "', argument " "4"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "new_BasicLattice2D" "', argument " "4"" of type '" "double""'");
   } 
   arg4 = static_cast< double >(val4);
-  result = ((Lattice3D const *)arg1)->getMillerDirection(arg2,arg3,arg4);
-  resultobj = SWIG_NewPointerObj((new R3(result)), SWIGTYPE_p_Vec3T_double_t, SWIG_POINTER_OWN |  0 );
+  result = (BasicLattice2D *)new BasicLattice2D(arg1,arg2,arg3,arg4);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_BasicLattice2D, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Lattice3D_unitCellVolume(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_BasicLattice2D_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Lattice3D *arg1 = (Lattice3D *) 0 ;
+  BasicLattice2D *arg1 = (BasicLattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  double result;
+  BasicLattice2D *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Lattice3D, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_BasicLattice2D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Lattice3D_unitCellVolume" "', argument " "1"" of type '" "Lattice3D const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "BasicLattice2D_clone" "', argument " "1"" of type '" "BasicLattice2D const *""'"); 
   }
-  arg1 = reinterpret_cast< Lattice3D * >(argp1);
-  result = (double)((Lattice3D const *)arg1)->unitCellVolume();
-  resultobj = SWIG_From_double(static_cast< double >(result));
+  arg1 = reinterpret_cast< BasicLattice2D * >(argp1);
+  result = (BasicLattice2D *)((BasicLattice2D const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_BasicLattice2D, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Lattice3D_reciprocalLatticeBasis(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_BasicLattice2D_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Lattice3D *arg1 = (Lattice3D *) 0 ;
-  R3 *arg2 = 0 ;
-  R3 *arg3 = 0 ;
-  R3 *arg4 = 0 ;
+  BasicLattice2D *arg1 = (BasicLattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
-  void *argp2 = 0 ;
-  int res2 = 0 ;
-  void *argp3 = 0 ;
-  int res3 = 0 ;
-  void *argp4 = 0 ;
-  int res4 = 0 ;
-  PyObject *swig_obj[4] ;
+  PyObject *swig_obj[1] ;
+  std::string result;
   
-  if (!SWIG_Python_UnpackTuple(args, "Lattice3D_reciprocalLatticeBasis", 4, 4, swig_obj)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Lattice3D, 0 |  0 );
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_BasicLattice2D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Lattice3D_reciprocalLatticeBasis" "', argument " "1"" of type '" "Lattice3D const *""'"); 
-  }
-  arg1 = reinterpret_cast< Lattice3D * >(argp1);
-  res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_Vec3T_double_t,  0 );
-  if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Lattice3D_reciprocalLatticeBasis" "', argument " "2"" of type '" "R3 &""'"); 
-  }
-  if (!argp2) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Lattice3D_reciprocalLatticeBasis" "', argument " "2"" of type '" "R3 &""'"); 
-  }
-  arg2 = reinterpret_cast< R3 * >(argp2);
-  res3 = SWIG_ConvertPtr(swig_obj[2], &argp3, SWIGTYPE_p_Vec3T_double_t,  0 );
-  if (!SWIG_IsOK(res3)) {
-    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "Lattice3D_reciprocalLatticeBasis" "', argument " "3"" of type '" "R3 &""'"); 
-  }
-  if (!argp3) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Lattice3D_reciprocalLatticeBasis" "', argument " "3"" of type '" "R3 &""'"); 
-  }
-  arg3 = reinterpret_cast< R3 * >(argp3);
-  res4 = SWIG_ConvertPtr(swig_obj[3], &argp4, SWIGTYPE_p_Vec3T_double_t,  0 );
-  if (!SWIG_IsOK(res4)) {
-    SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "Lattice3D_reciprocalLatticeBasis" "', argument " "4"" of type '" "R3 &""'"); 
-  }
-  if (!argp4) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Lattice3D_reciprocalLatticeBasis" "', argument " "4"" of type '" "R3 &""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "BasicLattice2D_className" "', argument " "1"" of type '" "BasicLattice2D const *""'"); 
   }
-  arg4 = reinterpret_cast< R3 * >(argp4);
-  ((Lattice3D const *)arg1)->reciprocalLatticeBasis(*arg2,*arg3,*arg4);
-  resultobj = SWIG_Py_Void();
+  arg1 = reinterpret_cast< BasicLattice2D * >(argp1);
+  result = ((BasicLattice2D const *)arg1)->className();
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Lattice3D_nearestReciprocalLatticeVectorCoordinates(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_BasicLattice2D_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Lattice3D *arg1 = (Lattice3D *) 0 ;
-  R3 arg2 ;
+  BasicLattice2D *arg1 = (BasicLattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
-  void *argp2 ;
-  int res2 = 0 ;
-  PyObject *swig_obj[2] ;
-  SwigValueWrapper< Vec3< int > > result;
+  PyObject *swig_obj[1] ;
+  SwigValueWrapper< std::vector< ParaMeta,std::allocator< ParaMeta > > > result;
   
-  if (!SWIG_Python_UnpackTuple(args, "Lattice3D_nearestReciprocalLatticeVectorCoordinates", 2, 2, swig_obj)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Lattice3D, 0 |  0 );
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_BasicLattice2D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Lattice3D_nearestReciprocalLatticeVectorCoordinates" "', argument " "1"" of type '" "Lattice3D const *""'"); 
-  }
-  arg1 = reinterpret_cast< Lattice3D * >(argp1);
-  {
-    res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_Vec3T_double_t,  0  | 0);
-    if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Lattice3D_nearestReciprocalLatticeVectorCoordinates" "', argument " "2"" of type '" "R3""'"); 
-    }  
-    if (!argp2) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Lattice3D_nearestReciprocalLatticeVectorCoordinates" "', argument " "2"" of type '" "R3""'");
-    } else {
-      R3 * temp = reinterpret_cast< R3 * >(argp2);
-      arg2 = *temp;
-      if (SWIG_IsNewObj(res2)) delete temp;
-    }
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "BasicLattice2D_parDefs" "', argument " "1"" of type '" "BasicLattice2D const *""'"); 
   }
-  result = ((Lattice3D const *)arg1)->nearestReciprocalLatticeVectorCoordinates(arg2);
-  resultobj = SWIG_NewPointerObj((new I3(result)), SWIGTYPE_p_Vec3T_int_t, SWIG_POINTER_OWN |  0 );
+  arg1 = reinterpret_cast< BasicLattice2D * >(argp1);
+  result = ((BasicLattice2D const *)arg1)->parDefs();
+  resultobj = SWIG_NewPointerObj((new std::vector< ParaMeta,std::allocator< ParaMeta > >(result)), SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Lattice3D_reciprocalLatticeVectorsWithinRadius(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_BasicLattice2D_length1(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Lattice3D *arg1 = (Lattice3D *) 0 ;
-  R3 arg2 ;
-  double arg3 ;
+  BasicLattice2D *arg1 = (BasicLattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
-  void *argp2 ;
-  int res2 = 0 ;
-  double val3 ;
-  int ecode3 = 0 ;
-  PyObject *swig_obj[3] ;
-  std::vector< R3,std::allocator< R3 > > result;
+  PyObject *swig_obj[1] ;
+  double result;
   
-  if (!SWIG_Python_UnpackTuple(args, "Lattice3D_reciprocalLatticeVectorsWithinRadius", 3, 3, swig_obj)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Lattice3D, 0 |  0 );
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_BasicLattice2D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Lattice3D_reciprocalLatticeVectorsWithinRadius" "', argument " "1"" of type '" "Lattice3D const *""'"); 
-  }
-  arg1 = reinterpret_cast< Lattice3D * >(argp1);
-  {
-    res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_Vec3T_double_t,  0  | 0);
-    if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Lattice3D_reciprocalLatticeVectorsWithinRadius" "', argument " "2"" of type '" "R3""'"); 
-    }  
-    if (!argp2) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Lattice3D_reciprocalLatticeVectorsWithinRadius" "', argument " "2"" of type '" "R3""'");
-    } else {
-      R3 * temp = reinterpret_cast< R3 * >(argp2);
-      arg2 = *temp;
-      if (SWIG_IsNewObj(res2)) delete temp;
-    }
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "BasicLattice2D_length1" "', argument " "1"" of type '" "BasicLattice2D const *""'"); 
   }
-  ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
-  if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "Lattice3D_reciprocalLatticeVectorsWithinRadius" "', argument " "3"" of type '" "double""'");
-  } 
-  arg3 = static_cast< double >(val3);
-  result = ((Lattice3D const *)arg1)->reciprocalLatticeVectorsWithinRadius(arg2,arg3);
-  resultobj = swig::from(static_cast< std::vector< Vec3< double >,std::allocator< Vec3< double > > > >(result));
+  arg1 = reinterpret_cast< BasicLattice2D * >(argp1);
+  result = (double)((BasicLattice2D const *)arg1)->length1();
+  resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Lattice3D_setSelectionRule(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_BasicLattice2D_length2(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Lattice3D *arg1 = (Lattice3D *) 0 ;
-  ISelectionRule *arg2 = 0 ;
+  BasicLattice2D *arg1 = (BasicLattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
-  void *argp2 = 0 ;
-  int res2 = 0 ;
-  PyObject *swig_obj[2] ;
+  PyObject *swig_obj[1] ;
+  double result;
   
-  if (!SWIG_Python_UnpackTuple(args, "Lattice3D_setSelectionRule", 2, 2, swig_obj)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Lattice3D, 0 |  0 );
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_BasicLattice2D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Lattice3D_setSelectionRule" "', argument " "1"" of type '" "Lattice3D *""'"); 
-  }
-  arg1 = reinterpret_cast< Lattice3D * >(argp1);
-  res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_ISelectionRule,  0  | 0);
-  if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Lattice3D_setSelectionRule" "', argument " "2"" of type '" "ISelectionRule const &""'"); 
-  }
-  if (!argp2) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Lattice3D_setSelectionRule" "', argument " "2"" of type '" "ISelectionRule const &""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "BasicLattice2D_length2" "', argument " "1"" of type '" "BasicLattice2D const *""'"); 
   }
-  arg2 = reinterpret_cast< ISelectionRule * >(argp2);
-  (arg1)->setSelectionRule((ISelectionRule const &)*arg2);
-  resultobj = SWIG_Py_Void();
+  arg1 = reinterpret_cast< BasicLattice2D * >(argp1);
+  result = (double)((BasicLattice2D const *)arg1)->length2();
+  resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *Lattice3D_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *obj;
-  if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_Lattice3D, SWIG_NewClientData(obj));
-  return SWIG_Py_Void();
-}
-
-SWIGINTERN PyObject *Lattice3D_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  return SWIG_Python_InitShadowInstance(args);
-}
-
-SWIGINTERN PyObject *_wrap_Lattice2D_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_BasicLattice2D_latticeAngle(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Lattice2D *arg1 = (Lattice2D *) 0 ;
+  BasicLattice2D *arg1 = (BasicLattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  Lattice2D *result = 0 ;
+  double result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Lattice2D, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_BasicLattice2D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Lattice2D_clone" "', argument " "1"" of type '" "Lattice2D const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "BasicLattice2D_latticeAngle" "', argument " "1"" of type '" "BasicLattice2D const *""'"); 
   }
-  arg1 = reinterpret_cast< Lattice2D * >(argp1);
-  result = (Lattice2D *)((Lattice2D const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Lattice2D, 0 |  0 );
+  arg1 = reinterpret_cast< BasicLattice2D * >(argp1);
+  result = (double)((BasicLattice2D const *)arg1)->latticeAngle();
+  resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Lattice2D_length1(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_BasicLattice2D_unitCellArea(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Lattice2D *arg1 = (Lattice2D *) 0 ;
+  BasicLattice2D *arg1 = (BasicLattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -59461,12 +59841,12 @@ SWIGINTERN PyObject *_wrap_Lattice2D_length1(PyObject *self, PyObject *args) {
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Lattice2D, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_BasicLattice2D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Lattice2D_length1" "', argument " "1"" of type '" "Lattice2D const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "BasicLattice2D_unitCellArea" "', argument " "1"" of type '" "BasicLattice2D const *""'"); 
   }
-  arg1 = reinterpret_cast< Lattice2D * >(argp1);
-  result = (double)((Lattice2D const *)arg1)->length1();
+  arg1 = reinterpret_cast< BasicLattice2D * >(argp1);
+  result = (double)((BasicLattice2D const *)arg1)->unitCellArea();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -59474,251 +59854,429 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Lattice2D_length2(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_BasicLattice2D_validate(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Lattice2D *arg1 = (Lattice2D *) 0 ;
+  BasicLattice2D *arg1 = (BasicLattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  double result;
+  std::string result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Lattice2D, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_BasicLattice2D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Lattice2D_length2" "', argument " "1"" of type '" "Lattice2D const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "BasicLattice2D_validate" "', argument " "1"" of type '" "BasicLattice2D const *""'"); 
   }
-  arg1 = reinterpret_cast< Lattice2D * >(argp1);
-  result = (double)((Lattice2D const *)arg1)->length2();
-  resultobj = SWIG_From_double(static_cast< double >(result));
+  arg1 = reinterpret_cast< BasicLattice2D * >(argp1);
+  result = ((BasicLattice2D const *)arg1)->validate();
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Lattice2D_latticeAngle(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_BasicLattice2D(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Lattice2D *arg1 = (Lattice2D *) 0 ;
+  BasicLattice2D *arg1 = (BasicLattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  double result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Lattice2D, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_BasicLattice2D, SWIG_POINTER_DISOWN |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Lattice2D_latticeAngle" "', argument " "1"" of type '" "Lattice2D const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_BasicLattice2D" "', argument " "1"" of type '" "BasicLattice2D *""'"); 
   }
-  arg1 = reinterpret_cast< Lattice2D * >(argp1);
-  result = (double)((Lattice2D const *)arg1)->latticeAngle();
-  resultobj = SWIG_From_double(static_cast< double >(result));
+  arg1 = reinterpret_cast< BasicLattice2D * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Lattice2D_unitCellArea(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *BasicLattice2D_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_BasicLattice2D, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *BasicLattice2D_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+
+SWIGINTERN PyObject *_wrap_new_SquareLattice2D__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
-  Lattice2D *arg1 = (Lattice2D *) 0 ;
+  double arg1 ;
+  double arg2 ;
+  double val1 ;
+  int ecode1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  SquareLattice2D *result = 0 ;
+  
+  if ((nobjs < 2) || (nobjs > 2)) SWIG_fail;
+  ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_SquareLattice2D" "', argument " "1"" of type '" "double""'");
+  } 
+  arg1 = static_cast< double >(val1);
+  ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_SquareLattice2D" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (SquareLattice2D *)new SquareLattice2D(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SquareLattice2D, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_SquareLattice2D__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  double arg1 ;
+  double val1 ;
+  int ecode1 = 0 ;
+  SquareLattice2D *result = 0 ;
+  
+  if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
+  ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_SquareLattice2D" "', argument " "1"" of type '" "double""'");
+  } 
+  arg1 = static_cast< double >(val1);
+  result = (SquareLattice2D *)new SquareLattice2D(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SquareLattice2D, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_SquareLattice2D(PyObject *self, PyObject *args) {
+  Py_ssize_t argc;
+  PyObject *argv[3] = {
+    0
+  };
+  
+  if (!(argc = SWIG_Python_UnpackTuple(args, "new_SquareLattice2D", 0, 2, argv))) SWIG_fail;
+  --argc;
+  if (argc == 1) {
+    int _v = 0;
+    {
+      int res = SWIG_AsVal_double(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      return _wrap_new_SquareLattice2D__SWIG_1(self, argc, argv);
+    }
+  }
+  if (argc == 2) {
+    int _v = 0;
+    {
+      int res = SWIG_AsVal_double(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_new_SquareLattice2D__SWIG_0(self, argc, argv);
+      }
+    }
+  }
+  
+fail:
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_SquareLattice2D'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    SquareLattice2D::SquareLattice2D(double,double)\n"
+    "    SquareLattice2D::SquareLattice2D(double)\n");
+  return 0;
+}
+
+
+SWIGINTERN PyObject *_wrap_SquareLattice2D_clone(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  SquareLattice2D *arg1 = (SquareLattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  double result;
+  SquareLattice2D *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Lattice2D, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SquareLattice2D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Lattice2D_unitCellArea" "', argument " "1"" of type '" "Lattice2D const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SquareLattice2D_clone" "', argument " "1"" of type '" "SquareLattice2D const *""'"); 
   }
-  arg1 = reinterpret_cast< Lattice2D * >(argp1);
-  result = (double)((Lattice2D const *)arg1)->unitCellArea();
-  resultobj = SWIG_From_double(static_cast< double >(result));
+  arg1 = reinterpret_cast< SquareLattice2D * >(argp1);
+  result = (SquareLattice2D *)((SquareLattice2D const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SquareLattice2D, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Lattice2D_rotationAngle(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_SquareLattice2D_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Lattice2D *arg1 = (Lattice2D *) 0 ;
+  SquareLattice2D *arg1 = (SquareLattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  double result;
+  std::string result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Lattice2D, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SquareLattice2D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Lattice2D_rotationAngle" "', argument " "1"" of type '" "Lattice2D const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SquareLattice2D_className" "', argument " "1"" of type '" "SquareLattice2D const *""'"); 
   }
-  arg1 = reinterpret_cast< Lattice2D * >(argp1);
-  result = (double)((Lattice2D const *)arg1)->rotationAngle();
-  resultobj = SWIG_From_double(static_cast< double >(result));
+  arg1 = reinterpret_cast< SquareLattice2D * >(argp1);
+  result = ((SquareLattice2D const *)arg1)->className();
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Lattice2D_reciprocalBases(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_SquareLattice2D_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Lattice2D *arg1 = (Lattice2D *) 0 ;
+  SquareLattice2D *arg1 = (SquareLattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  Lattice2D::ReciprocalBases result;
+  SwigValueWrapper< std::vector< ParaMeta,std::allocator< ParaMeta > > > result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Lattice2D, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SquareLattice2D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Lattice2D_reciprocalBases" "', argument " "1"" of type '" "Lattice2D const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SquareLattice2D_parDefs" "', argument " "1"" of type '" "SquareLattice2D const *""'"); 
   }
-  arg1 = reinterpret_cast< Lattice2D * >(argp1);
-  result = ((Lattice2D const *)arg1)->reciprocalBases();
-  resultobj = SWIG_NewPointerObj((new Lattice2D::ReciprocalBases(result)), SWIGTYPE_p_Lattice2D__ReciprocalBases, SWIG_POINTER_OWN |  0 );
+  arg1 = reinterpret_cast< SquareLattice2D * >(argp1);
+  result = ((SquareLattice2D const *)arg1)->parDefs();
+  resultobj = SWIG_NewPointerObj((new std::vector< ParaMeta,std::allocator< ParaMeta > >(result)), SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Lattice2D_setRotationEnabled(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_SquareLattice2D_length1(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Lattice2D *arg1 = (Lattice2D *) 0 ;
-  bool arg2 ;
+  SquareLattice2D *arg1 = (SquareLattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
-  bool val2 ;
-  int ecode2 = 0 ;
-  PyObject *swig_obj[2] ;
+  PyObject *swig_obj[1] ;
+  double result;
   
-  if (!SWIG_Python_UnpackTuple(args, "Lattice2D_setRotationEnabled", 2, 2, swig_obj)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Lattice2D, 0 |  0 );
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SquareLattice2D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Lattice2D_setRotationEnabled" "', argument " "1"" of type '" "Lattice2D *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SquareLattice2D_length1" "', argument " "1"" of type '" "SquareLattice2D const *""'"); 
   }
-  arg1 = reinterpret_cast< Lattice2D * >(argp1);
-  ecode2 = SWIG_AsVal_bool(swig_obj[1], &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "Lattice2D_setRotationEnabled" "', argument " "2"" of type '" "bool""'");
-  } 
-  arg2 = static_cast< bool >(val2);
-  (arg1)->setRotationEnabled(arg2);
-  resultobj = SWIG_Py_Void();
+  arg1 = reinterpret_cast< SquareLattice2D * >(argp1);
+  result = (double)((SquareLattice2D const *)arg1)->length1();
+  resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_Lattice2D(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_SquareLattice2D_length2(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Lattice2D *arg1 = (Lattice2D *) 0 ;
+  SquareLattice2D *arg1 = (SquareLattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
+  double result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_Lattice2D, SWIG_POINTER_DISOWN |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SquareLattice2D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Lattice2D" "', argument " "1"" of type '" "Lattice2D *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SquareLattice2D_length2" "', argument " "1"" of type '" "SquareLattice2D const *""'"); 
   }
-  arg1 = reinterpret_cast< Lattice2D * >(argp1);
-  delete arg1;
-  resultobj = SWIG_Py_Void();
+  arg1 = reinterpret_cast< SquareLattice2D * >(argp1);
+  result = (double)((SquareLattice2D const *)arg1)->length2();
+  resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *Lattice2D_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *obj;
-  if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_Lattice2D, SWIG_NewClientData(obj));
-  return SWIG_Py_Void();
-}
-
-SWIGINTERN PyObject *_wrap_new_BasicLattice2D(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_SquareLattice2D_latticeAngle(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  SquareLattice2D *arg1 = (SquareLattice2D *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  double result;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SquareLattice2D, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SquareLattice2D_latticeAngle" "', argument " "1"" of type '" "SquareLattice2D const *""'"); 
+  }
+  arg1 = reinterpret_cast< SquareLattice2D * >(argp1);
+  result = (double)((SquareLattice2D const *)arg1)->latticeAngle();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SquareLattice2D_unitCellArea(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  SquareLattice2D *arg1 = (SquareLattice2D *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  double result;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SquareLattice2D, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SquareLattice2D_unitCellArea" "', argument " "1"" of type '" "SquareLattice2D const *""'"); 
+  }
+  arg1 = reinterpret_cast< SquareLattice2D * >(argp1);
+  result = (double)((SquareLattice2D const *)arg1)->unitCellArea();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SquareLattice2D_validate(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  SquareLattice2D *arg1 = (SquareLattice2D *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  std::string result;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SquareLattice2D, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SquareLattice2D_validate" "', argument " "1"" of type '" "SquareLattice2D const *""'"); 
+  }
+  arg1 = reinterpret_cast< SquareLattice2D * >(argp1);
+  result = ((SquareLattice2D const *)arg1)->validate();
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_SquareLattice2D(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  SquareLattice2D *arg1 = (SquareLattice2D *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SquareLattice2D, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_SquareLattice2D" "', argument " "1"" of type '" "SquareLattice2D *""'"); 
+  }
+  arg1 = reinterpret_cast< SquareLattice2D * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *SquareLattice2D_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_SquareLattice2D, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *SquareLattice2D_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  return SWIG_Python_InitShadowInstance(args);
+}
+
+SWIGINTERN PyObject *_wrap_new_HexagonalLattice2D(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
   double arg1 ;
   double arg2 ;
-  double arg3 ;
-  double arg4 ;
   double val1 ;
   int ecode1 = 0 ;
   double val2 ;
   int ecode2 = 0 ;
-  double val3 ;
-  int ecode3 = 0 ;
-  double val4 ;
-  int ecode4 = 0 ;
-  PyObject *swig_obj[4] ;
-  BasicLattice2D *result = 0 ;
+  PyObject *swig_obj[2] ;
+  HexagonalLattice2D *result = 0 ;
   
-  if (!SWIG_Python_UnpackTuple(args, "new_BasicLattice2D", 4, 4, swig_obj)) SWIG_fail;
+  if (!SWIG_Python_UnpackTuple(args, "new_HexagonalLattice2D", 2, 2, swig_obj)) SWIG_fail;
   ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
   if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_BasicLattice2D" "', argument " "1"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_HexagonalLattice2D" "', argument " "1"" of type '" "double""'");
   } 
   arg1 = static_cast< double >(val1);
   ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
   if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_BasicLattice2D" "', argument " "2"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_HexagonalLattice2D" "', argument " "2"" of type '" "double""'");
   } 
   arg2 = static_cast< double >(val2);
-  ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
-  if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_BasicLattice2D" "', argument " "3"" of type '" "double""'");
-  } 
-  arg3 = static_cast< double >(val3);
-  ecode4 = SWIG_AsVal_double(swig_obj[3], &val4);
-  if (!SWIG_IsOK(ecode4)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "new_BasicLattice2D" "', argument " "4"" of type '" "double""'");
-  } 
-  arg4 = static_cast< double >(val4);
-  result = (BasicLattice2D *)new BasicLattice2D(arg1,arg2,arg3,arg4);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_BasicLattice2D, SWIG_POINTER_NEW |  0 );
+  result = (HexagonalLattice2D *)new HexagonalLattice2D(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_HexagonalLattice2D, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_BasicLattice2D_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_HexagonalLattice2D_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  BasicLattice2D *arg1 = (BasicLattice2D *) 0 ;
+  HexagonalLattice2D *arg1 = (HexagonalLattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  BasicLattice2D *result = 0 ;
+  HexagonalLattice2D *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_BasicLattice2D, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HexagonalLattice2D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "BasicLattice2D_clone" "', argument " "1"" of type '" "BasicLattice2D const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HexagonalLattice2D_clone" "', argument " "1"" of type '" "HexagonalLattice2D const *""'"); 
   }
-  arg1 = reinterpret_cast< BasicLattice2D * >(argp1);
-  result = (BasicLattice2D *)((BasicLattice2D const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_BasicLattice2D, 0 |  0 );
+  arg1 = reinterpret_cast< HexagonalLattice2D * >(argp1);
+  result = (HexagonalLattice2D *)((HexagonalLattice2D const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_HexagonalLattice2D, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_BasicLattice2D_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_HexagonalLattice2D_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  BasicLattice2D *arg1 = (BasicLattice2D *) 0 ;
+  HexagonalLattice2D *arg1 = (HexagonalLattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -59726,12 +60284,12 @@ SWIGINTERN PyObject *_wrap_BasicLattice2D_className(PyObject *self, PyObject *ar
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_BasicLattice2D, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HexagonalLattice2D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "BasicLattice2D_className" "', argument " "1"" of type '" "BasicLattice2D const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HexagonalLattice2D_className" "', argument " "1"" of type '" "HexagonalLattice2D const *""'"); 
   }
-  arg1 = reinterpret_cast< BasicLattice2D * >(argp1);
-  result = ((BasicLattice2D const *)arg1)->className();
+  arg1 = reinterpret_cast< HexagonalLattice2D * >(argp1);
+  result = ((HexagonalLattice2D const *)arg1)->className();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -59739,9 +60297,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_BasicLattice2D_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_HexagonalLattice2D_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  BasicLattice2D *arg1 = (BasicLattice2D *) 0 ;
+  HexagonalLattice2D *arg1 = (HexagonalLattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -59749,12 +60307,12 @@ SWIGINTERN PyObject *_wrap_BasicLattice2D_parDefs(PyObject *self, PyObject *args
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_BasicLattice2D, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HexagonalLattice2D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "BasicLattice2D_parDefs" "', argument " "1"" of type '" "BasicLattice2D const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HexagonalLattice2D_parDefs" "', argument " "1"" of type '" "HexagonalLattice2D const *""'"); 
   }
-  arg1 = reinterpret_cast< BasicLattice2D * >(argp1);
-  result = ((BasicLattice2D const *)arg1)->parDefs();
+  arg1 = reinterpret_cast< HexagonalLattice2D * >(argp1);
+  result = ((HexagonalLattice2D const *)arg1)->parDefs();
   resultobj = SWIG_NewPointerObj((new std::vector< ParaMeta,std::allocator< ParaMeta > >(result)), SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
@@ -59762,9 +60320,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_BasicLattice2D_length1(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_HexagonalLattice2D_length1(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  BasicLattice2D *arg1 = (BasicLattice2D *) 0 ;
+  HexagonalLattice2D *arg1 = (HexagonalLattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -59772,12 +60330,12 @@ SWIGINTERN PyObject *_wrap_BasicLattice2D_length1(PyObject *self, PyObject *args
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_BasicLattice2D, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HexagonalLattice2D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "BasicLattice2D_length1" "', argument " "1"" of type '" "BasicLattice2D const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HexagonalLattice2D_length1" "', argument " "1"" of type '" "HexagonalLattice2D const *""'"); 
   }
-  arg1 = reinterpret_cast< BasicLattice2D * >(argp1);
-  result = (double)((BasicLattice2D const *)arg1)->length1();
+  arg1 = reinterpret_cast< HexagonalLattice2D * >(argp1);
+  result = (double)((HexagonalLattice2D const *)arg1)->length1();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -59785,9 +60343,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_BasicLattice2D_length2(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_HexagonalLattice2D_length2(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  BasicLattice2D *arg1 = (BasicLattice2D *) 0 ;
+  HexagonalLattice2D *arg1 = (HexagonalLattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -59795,12 +60353,12 @@ SWIGINTERN PyObject *_wrap_BasicLattice2D_length2(PyObject *self, PyObject *args
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_BasicLattice2D, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HexagonalLattice2D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "BasicLattice2D_length2" "', argument " "1"" of type '" "BasicLattice2D const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HexagonalLattice2D_length2" "', argument " "1"" of type '" "HexagonalLattice2D const *""'"); 
   }
-  arg1 = reinterpret_cast< BasicLattice2D * >(argp1);
-  result = (double)((BasicLattice2D const *)arg1)->length2();
+  arg1 = reinterpret_cast< HexagonalLattice2D * >(argp1);
+  result = (double)((HexagonalLattice2D const *)arg1)->length2();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -59808,9 +60366,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_BasicLattice2D_latticeAngle(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_HexagonalLattice2D_latticeAngle(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  BasicLattice2D *arg1 = (BasicLattice2D *) 0 ;
+  HexagonalLattice2D *arg1 = (HexagonalLattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -59818,12 +60376,12 @@ SWIGINTERN PyObject *_wrap_BasicLattice2D_latticeAngle(PyObject *self, PyObject
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_BasicLattice2D, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HexagonalLattice2D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "BasicLattice2D_latticeAngle" "', argument " "1"" of type '" "BasicLattice2D const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HexagonalLattice2D_latticeAngle" "', argument " "1"" of type '" "HexagonalLattice2D const *""'"); 
   }
-  arg1 = reinterpret_cast< BasicLattice2D * >(argp1);
-  result = (double)((BasicLattice2D const *)arg1)->latticeAngle();
+  arg1 = reinterpret_cast< HexagonalLattice2D * >(argp1);
+  result = (double)((HexagonalLattice2D const *)arg1)->latticeAngle();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -59831,9 +60389,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_BasicLattice2D_unitCellArea(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_HexagonalLattice2D_unitCellArea(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  BasicLattice2D *arg1 = (BasicLattice2D *) 0 ;
+  HexagonalLattice2D *arg1 = (HexagonalLattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -59841,12 +60399,12 @@ SWIGINTERN PyObject *_wrap_BasicLattice2D_unitCellArea(PyObject *self, PyObject
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_BasicLattice2D, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HexagonalLattice2D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "BasicLattice2D_unitCellArea" "', argument " "1"" of type '" "BasicLattice2D const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HexagonalLattice2D_unitCellArea" "', argument " "1"" of type '" "HexagonalLattice2D const *""'"); 
   }
-  arg1 = reinterpret_cast< BasicLattice2D * >(argp1);
-  result = (double)((BasicLattice2D const *)arg1)->unitCellArea();
+  arg1 = reinterpret_cast< HexagonalLattice2D * >(argp1);
+  result = (double)((HexagonalLattice2D const *)arg1)->unitCellArea();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -59854,9 +60412,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_BasicLattice2D_validate(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_HexagonalLattice2D_validate(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  BasicLattice2D *arg1 = (BasicLattice2D *) 0 ;
+  HexagonalLattice2D *arg1 = (HexagonalLattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -59864,12 +60422,12 @@ SWIGINTERN PyObject *_wrap_BasicLattice2D_validate(PyObject *self, PyObject *arg
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_BasicLattice2D, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HexagonalLattice2D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "BasicLattice2D_validate" "', argument " "1"" of type '" "BasicLattice2D const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HexagonalLattice2D_validate" "', argument " "1"" of type '" "HexagonalLattice2D const *""'"); 
   }
-  arg1 = reinterpret_cast< BasicLattice2D * >(argp1);
-  result = ((BasicLattice2D const *)arg1)->validate();
+  arg1 = reinterpret_cast< HexagonalLattice2D * >(argp1);
+  result = ((HexagonalLattice2D const *)arg1)->validate();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -59877,20 +60435,20 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_BasicLattice2D(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_HexagonalLattice2D(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  BasicLattice2D *arg1 = (BasicLattice2D *) 0 ;
+  HexagonalLattice2D *arg1 = (HexagonalLattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_BasicLattice2D, SWIG_POINTER_DISOWN |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HexagonalLattice2D, SWIG_POINTER_DISOWN |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_BasicLattice2D" "', argument " "1"" of type '" "BasicLattice2D *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_HexagonalLattice2D" "', argument " "1"" of type '" "HexagonalLattice2D *""'"); 
   }
-  arg1 = reinterpret_cast< BasicLattice2D * >(argp1);
+  arg1 = reinterpret_cast< HexagonalLattice2D * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -59899,2518 +60457,1694 @@ fail:
 }
 
 
-SWIGINTERN PyObject *BasicLattice2D_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *HexagonalLattice2D_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
   if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_BasicLattice2D, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_HexagonalLattice2D, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *BasicLattice2D_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *HexagonalLattice2D_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   return SWIG_Python_InitShadowInstance(args);
 }
 
-SWIGINTERN PyObject *_wrap_new_SquareLattice2D__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_CubicLattice(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
   double arg1 ;
-  double arg2 ;
   double val1 ;
   int ecode1 = 0 ;
-  double val2 ;
-  int ecode2 = 0 ;
-  SquareLattice2D *result = 0 ;
+  PyObject *swig_obj[1] ;
+  SwigValueWrapper< Lattice3D > result;
   
-  if ((nobjs < 2) || (nobjs > 2)) SWIG_fail;
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
   ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
   if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_SquareLattice2D" "', argument " "1"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "CubicLattice" "', argument " "1"" of type '" "double""'");
   } 
   arg1 = static_cast< double >(val1);
-  ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_SquareLattice2D" "', argument " "2"" of type '" "double""'");
-  } 
-  arg2 = static_cast< double >(val2);
-  result = (SquareLattice2D *)new SquareLattice2D(arg1,arg2);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SquareLattice2D, SWIG_POINTER_NEW |  0 );
+  result = bake::CubicLattice(arg1);
+  resultobj = SWIG_NewPointerObj((new Lattice3D(result)), SWIGTYPE_p_Lattice3D, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_SquareLattice2D__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_FCCLattice(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
   double arg1 ;
   double val1 ;
   int ecode1 = 0 ;
-  SquareLattice2D *result = 0 ;
+  PyObject *swig_obj[1] ;
+  SwigValueWrapper< Lattice3D > result;
   
-  if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
   ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
   if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_SquareLattice2D" "', argument " "1"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "FCCLattice" "', argument " "1"" of type '" "double""'");
   } 
   arg1 = static_cast< double >(val1);
-  result = (SquareLattice2D *)new SquareLattice2D(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SquareLattice2D, SWIG_POINTER_NEW |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_new_SquareLattice2D(PyObject *self, PyObject *args) {
-  Py_ssize_t argc;
-  PyObject *argv[3] = {
-    0
-  };
-  
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_SquareLattice2D", 0, 2, argv))) SWIG_fail;
-  --argc;
-  if (argc == 1) {
-    int _v = 0;
-    {
-      int res = SWIG_AsVal_double(argv[0], NULL);
-      _v = SWIG_CheckState(res);
-    }
-    if (_v) {
-      return _wrap_new_SquareLattice2D__SWIG_1(self, argc, argv);
-    }
-  }
-  if (argc == 2) {
-    int _v = 0;
-    {
-      int res = SWIG_AsVal_double(argv[0], NULL);
-      _v = SWIG_CheckState(res);
-    }
-    if (_v) {
-      {
-        int res = SWIG_AsVal_double(argv[1], NULL);
-        _v = SWIG_CheckState(res);
-      }
-      if (_v) {
-        return _wrap_new_SquareLattice2D__SWIG_0(self, argc, argv);
-      }
-    }
-  }
-  
-fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_SquareLattice2D'.\n"
-    "  Possible C/C++ prototypes are:\n"
-    "    SquareLattice2D::SquareLattice2D(double,double)\n"
-    "    SquareLattice2D::SquareLattice2D(double)\n");
-  return 0;
-}
-
-
-SWIGINTERN PyObject *_wrap_SquareLattice2D_clone(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  SquareLattice2D *arg1 = (SquareLattice2D *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  SquareLattice2D *result = 0 ;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SquareLattice2D, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SquareLattice2D_clone" "', argument " "1"" of type '" "SquareLattice2D const *""'"); 
-  }
-  arg1 = reinterpret_cast< SquareLattice2D * >(argp1);
-  result = (SquareLattice2D *)((SquareLattice2D const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SquareLattice2D, 0 |  0 );
+  result = bake::FCCLattice(arg1);
+  resultobj = SWIG_NewPointerObj((new Lattice3D(result)), SWIGTYPE_p_Lattice3D, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_SquareLattice2D_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_HexagonalLattice(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  SquareLattice2D *arg1 = (SquareLattice2D *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  std::string result;
+  double arg1 ;
+  double arg2 ;
+  double val1 ;
+  int ecode1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
+  SwigValueWrapper< Lattice3D > result;
   
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SquareLattice2D, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SquareLattice2D_className" "', argument " "1"" of type '" "SquareLattice2D const *""'"); 
-  }
-  arg1 = reinterpret_cast< SquareLattice2D * >(argp1);
-  result = ((SquareLattice2D const *)arg1)->className();
-  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  if (!SWIG_Python_UnpackTuple(args, "HexagonalLattice", 2, 2, swig_obj)) SWIG_fail;
+  ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "HexagonalLattice" "', argument " "1"" of type '" "double""'");
+  } 
+  arg1 = static_cast< double >(val1);
+  ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "HexagonalLattice" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = bake::HexagonalLattice(arg1,arg2);
+  resultobj = SWIG_NewPointerObj((new Lattice3D(result)), SWIGTYPE_p_Lattice3D, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_SquareLattice2D_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_HCPLattice(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  SquareLattice2D *arg1 = (SquareLattice2D *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  SwigValueWrapper< std::vector< ParaMeta,std::allocator< ParaMeta > > > result;
+  double arg1 ;
+  double arg2 ;
+  double val1 ;
+  int ecode1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
+  SwigValueWrapper< Lattice3D > result;
   
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SquareLattice2D, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SquareLattice2D_parDefs" "', argument " "1"" of type '" "SquareLattice2D const *""'"); 
-  }
-  arg1 = reinterpret_cast< SquareLattice2D * >(argp1);
-  result = ((SquareLattice2D const *)arg1)->parDefs();
-  resultobj = SWIG_NewPointerObj((new std::vector< ParaMeta,std::allocator< ParaMeta > >(result)), SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, SWIG_POINTER_OWN |  0 );
+  if (!SWIG_Python_UnpackTuple(args, "HCPLattice", 2, 2, swig_obj)) SWIG_fail;
+  ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "HCPLattice" "', argument " "1"" of type '" "double""'");
+  } 
+  arg1 = static_cast< double >(val1);
+  ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "HCPLattice" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = bake::HCPLattice(arg1,arg2);
+  resultobj = SWIG_NewPointerObj((new Lattice3D(result)), SWIGTYPE_p_Lattice3D, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_SquareLattice2D_length1(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_TetragonalLattice(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  SquareLattice2D *arg1 = (SquareLattice2D *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  double result;
+  double arg1 ;
+  double arg2 ;
+  double val1 ;
+  int ecode1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
+  SwigValueWrapper< Lattice3D > result;
   
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SquareLattice2D, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SquareLattice2D_length1" "', argument " "1"" of type '" "SquareLattice2D const *""'"); 
-  }
-  arg1 = reinterpret_cast< SquareLattice2D * >(argp1);
-  result = (double)((SquareLattice2D const *)arg1)->length1();
-  resultobj = SWIG_From_double(static_cast< double >(result));
+  if (!SWIG_Python_UnpackTuple(args, "TetragonalLattice", 2, 2, swig_obj)) SWIG_fail;
+  ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "TetragonalLattice" "', argument " "1"" of type '" "double""'");
+  } 
+  arg1 = static_cast< double >(val1);
+  ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "TetragonalLattice" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = bake::TetragonalLattice(arg1,arg2);
+  resultobj = SWIG_NewPointerObj((new Lattice3D(result)), SWIGTYPE_p_Lattice3D, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_SquareLattice2D_length2(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_BCTLattice(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  SquareLattice2D *arg1 = (SquareLattice2D *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  double result;
+  double arg1 ;
+  double arg2 ;
+  double val1 ;
+  int ecode1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject *swig_obj[2] ;
+  SwigValueWrapper< Lattice3D > result;
   
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SquareLattice2D, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SquareLattice2D_length2" "', argument " "1"" of type '" "SquareLattice2D const *""'"); 
-  }
-  arg1 = reinterpret_cast< SquareLattice2D * >(argp1);
-  result = (double)((SquareLattice2D const *)arg1)->length2();
-  resultobj = SWIG_From_double(static_cast< double >(result));
+  if (!SWIG_Python_UnpackTuple(args, "BCTLattice", 2, 2, swig_obj)) SWIG_fail;
+  ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "BCTLattice" "', argument " "1"" of type '" "double""'");
+  } 
+  arg1 = static_cast< double >(val1);
+  ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "BCTLattice" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = bake::BCTLattice(arg1,arg2);
+  resultobj = SWIG_NewPointerObj((new Lattice3D(result)), SWIGTYPE_p_Lattice3D, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_SquareLattice2D_latticeAngle(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  SquareLattice2D *arg1 = (SquareLattice2D *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  double result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SquareLattice2D, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SquareLattice2D_latticeAngle" "', argument " "1"" of type '" "SquareLattice2D const *""'"); 
-  }
-  arg1 = reinterpret_cast< SquareLattice2D * >(argp1);
-  result = (double)((SquareLattice2D const *)arg1)->latticeAngle();
-  resultobj = SWIG_From_double(static_cast< double >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_SquareLattice2D_unitCellArea(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  SquareLattice2D *arg1 = (SquareLattice2D *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  double result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SquareLattice2D, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SquareLattice2D_unitCellArea" "', argument " "1"" of type '" "SquareLattice2D const *""'"); 
-  }
-  arg1 = reinterpret_cast< SquareLattice2D * >(argp1);
-  result = (double)((SquareLattice2D const *)arg1)->unitCellArea();
-  resultobj = SWIG_From_double(static_cast< double >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_SquareLattice2D_validate(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  SquareLattice2D *arg1 = (SquareLattice2D *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  std::string result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SquareLattice2D, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SquareLattice2D_validate" "', argument " "1"" of type '" "SquareLattice2D const *""'"); 
-  }
-  arg1 = reinterpret_cast< SquareLattice2D * >(argp1);
-  result = ((SquareLattice2D const *)arg1)->validate();
-  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_delete_SquareLattice2D(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  SquareLattice2D *arg1 = (SquareLattice2D *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SquareLattice2D, SWIG_POINTER_DISOWN |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_SquareLattice2D" "', argument " "1"" of type '" "SquareLattice2D *""'"); 
-  }
-  arg1 = reinterpret_cast< SquareLattice2D * >(argp1);
-  delete arg1;
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *SquareLattice2D_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *obj;
-  if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_SquareLattice2D, SWIG_NewClientData(obj));
-  return SWIG_Py_Void();
-}
-
-SWIGINTERN PyObject *SquareLattice2D_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  return SWIG_Python_InitShadowInstance(args);
-}
-
-SWIGINTERN PyObject *_wrap_new_HexagonalLattice2D(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  double arg1 ;
-  double arg2 ;
-  double val1 ;
-  int ecode1 = 0 ;
-  double val2 ;
-  int ecode2 = 0 ;
-  PyObject *swig_obj[2] ;
-  HexagonalLattice2D *result = 0 ;
-  
-  if (!SWIG_Python_UnpackTuple(args, "new_HexagonalLattice2D", 2, 2, swig_obj)) SWIG_fail;
-  ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
-  if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_HexagonalLattice2D" "', argument " "1"" of type '" "double""'");
-  } 
-  arg1 = static_cast< double >(val1);
-  ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_HexagonalLattice2D" "', argument " "2"" of type '" "double""'");
-  } 
-  arg2 = static_cast< double >(val2);
-  result = (HexagonalLattice2D *)new HexagonalLattice2D(arg1,arg2);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_HexagonalLattice2D, SWIG_POINTER_NEW |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_HexagonalLattice2D_clone(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  HexagonalLattice2D *arg1 = (HexagonalLattice2D *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  HexagonalLattice2D *result = 0 ;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HexagonalLattice2D, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HexagonalLattice2D_clone" "', argument " "1"" of type '" "HexagonalLattice2D const *""'"); 
-  }
-  arg1 = reinterpret_cast< HexagonalLattice2D * >(argp1);
-  result = (HexagonalLattice2D *)((HexagonalLattice2D const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_HexagonalLattice2D, 0 |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_HexagonalLattice2D_className(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  HexagonalLattice2D *arg1 = (HexagonalLattice2D *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  std::string result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HexagonalLattice2D, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HexagonalLattice2D_className" "', argument " "1"" of type '" "HexagonalLattice2D const *""'"); 
-  }
-  arg1 = reinterpret_cast< HexagonalLattice2D * >(argp1);
-  result = ((HexagonalLattice2D const *)arg1)->className();
-  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_HexagonalLattice2D_parDefs(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  HexagonalLattice2D *arg1 = (HexagonalLattice2D *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  SwigValueWrapper< std::vector< ParaMeta,std::allocator< ParaMeta > > > result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HexagonalLattice2D, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HexagonalLattice2D_parDefs" "', argument " "1"" of type '" "HexagonalLattice2D const *""'"); 
-  }
-  arg1 = reinterpret_cast< HexagonalLattice2D * >(argp1);
-  result = ((HexagonalLattice2D const *)arg1)->parDefs();
-  resultobj = SWIG_NewPointerObj((new std::vector< ParaMeta,std::allocator< ParaMeta > >(result)), SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t, SWIG_POINTER_OWN |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_HexagonalLattice2D_length1(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  HexagonalLattice2D *arg1 = (HexagonalLattice2D *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  double result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HexagonalLattice2D, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HexagonalLattice2D_length1" "', argument " "1"" of type '" "HexagonalLattice2D const *""'"); 
-  }
-  arg1 = reinterpret_cast< HexagonalLattice2D * >(argp1);
-  result = (double)((HexagonalLattice2D const *)arg1)->length1();
-  resultobj = SWIG_From_double(static_cast< double >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_HexagonalLattice2D_length2(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  HexagonalLattice2D *arg1 = (HexagonalLattice2D *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  double result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HexagonalLattice2D, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HexagonalLattice2D_length2" "', argument " "1"" of type '" "HexagonalLattice2D const *""'"); 
-  }
-  arg1 = reinterpret_cast< HexagonalLattice2D * >(argp1);
-  result = (double)((HexagonalLattice2D const *)arg1)->length2();
-  resultobj = SWIG_From_double(static_cast< double >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_HexagonalLattice2D_latticeAngle(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  HexagonalLattice2D *arg1 = (HexagonalLattice2D *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  double result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HexagonalLattice2D, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HexagonalLattice2D_latticeAngle" "', argument " "1"" of type '" "HexagonalLattice2D const *""'"); 
-  }
-  arg1 = reinterpret_cast< HexagonalLattice2D * >(argp1);
-  result = (double)((HexagonalLattice2D const *)arg1)->latticeAngle();
-  resultobj = SWIG_From_double(static_cast< double >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_HexagonalLattice2D_unitCellArea(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  HexagonalLattice2D *arg1 = (HexagonalLattice2D *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  double result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HexagonalLattice2D, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HexagonalLattice2D_unitCellArea" "', argument " "1"" of type '" "HexagonalLattice2D const *""'"); 
-  }
-  arg1 = reinterpret_cast< HexagonalLattice2D * >(argp1);
-  result = (double)((HexagonalLattice2D const *)arg1)->unitCellArea();
-  resultobj = SWIG_From_double(static_cast< double >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_HexagonalLattice2D_validate(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  HexagonalLattice2D *arg1 = (HexagonalLattice2D *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  std::string result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HexagonalLattice2D, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HexagonalLattice2D_validate" "', argument " "1"" of type '" "HexagonalLattice2D const *""'"); 
-  }
-  arg1 = reinterpret_cast< HexagonalLattice2D * >(argp1);
-  result = ((HexagonalLattice2D const *)arg1)->validate();
-  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_delete_HexagonalLattice2D(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  HexagonalLattice2D *arg1 = (HexagonalLattice2D *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HexagonalLattice2D, SWIG_POINTER_DISOWN |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_HexagonalLattice2D" "', argument " "1"" of type '" "HexagonalLattice2D *""'"); 
-  }
-  arg1 = reinterpret_cast< HexagonalLattice2D * >(argp1);
-  delete arg1;
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *HexagonalLattice2D_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *obj;
-  if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_HexagonalLattice2D, SWIG_NewClientData(obj));
-  return SWIG_Py_Void();
-}
-
-SWIGINTERN PyObject *HexagonalLattice2D_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  return SWIG_Python_InitShadowInstance(args);
-}
-
-SWIGINTERN PyObject *_wrap_CubicLattice(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  double arg1 ;
-  double val1 ;
-  int ecode1 = 0 ;
-  PyObject *swig_obj[1] ;
-  SwigValueWrapper< Lattice3D > result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
-  if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "CubicLattice" "', argument " "1"" of type '" "double""'");
-  } 
-  arg1 = static_cast< double >(val1);
-  result = bake::CubicLattice(arg1);
-  resultobj = SWIG_NewPointerObj((new Lattice3D(result)), SWIGTYPE_p_Lattice3D, SWIG_POINTER_OWN |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_FCCLattice(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  double arg1 ;
-  double val1 ;
-  int ecode1 = 0 ;
-  PyObject *swig_obj[1] ;
-  SwigValueWrapper< Lattice3D > result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
-  if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "FCCLattice" "', argument " "1"" of type '" "double""'");
-  } 
-  arg1 = static_cast< double >(val1);
-  result = bake::FCCLattice(arg1);
-  resultobj = SWIG_NewPointerObj((new Lattice3D(result)), SWIGTYPE_p_Lattice3D, SWIG_POINTER_OWN |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_HexagonalLattice(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  double arg1 ;
-  double arg2 ;
-  double val1 ;
-  int ecode1 = 0 ;
-  double val2 ;
-  int ecode2 = 0 ;
-  PyObject *swig_obj[2] ;
-  SwigValueWrapper< Lattice3D > result;
-  
-  if (!SWIG_Python_UnpackTuple(args, "HexagonalLattice", 2, 2, swig_obj)) SWIG_fail;
-  ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
-  if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "HexagonalLattice" "', argument " "1"" of type '" "double""'");
-  } 
-  arg1 = static_cast< double >(val1);
-  ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "HexagonalLattice" "', argument " "2"" of type '" "double""'");
-  } 
-  arg2 = static_cast< double >(val2);
-  result = bake::HexagonalLattice(arg1,arg2);
-  resultobj = SWIG_NewPointerObj((new Lattice3D(result)), SWIGTYPE_p_Lattice3D, SWIG_POINTER_OWN |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_HCPLattice(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  double arg1 ;
-  double arg2 ;
-  double val1 ;
-  int ecode1 = 0 ;
-  double val2 ;
-  int ecode2 = 0 ;
-  PyObject *swig_obj[2] ;
-  SwigValueWrapper< Lattice3D > result;
-  
-  if (!SWIG_Python_UnpackTuple(args, "HCPLattice", 2, 2, swig_obj)) SWIG_fail;
-  ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
-  if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "HCPLattice" "', argument " "1"" of type '" "double""'");
-  } 
-  arg1 = static_cast< double >(val1);
-  ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "HCPLattice" "', argument " "2"" of type '" "double""'");
-  } 
-  arg2 = static_cast< double >(val2);
-  result = bake::HCPLattice(arg1,arg2);
-  resultobj = SWIG_NewPointerObj((new Lattice3D(result)), SWIGTYPE_p_Lattice3D, SWIG_POINTER_OWN |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_TetragonalLattice(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  double arg1 ;
-  double arg2 ;
-  double val1 ;
-  int ecode1 = 0 ;
-  double val2 ;
-  int ecode2 = 0 ;
-  PyObject *swig_obj[2] ;
-  SwigValueWrapper< Lattice3D > result;
-  
-  if (!SWIG_Python_UnpackTuple(args, "TetragonalLattice", 2, 2, swig_obj)) SWIG_fail;
-  ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
-  if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "TetragonalLattice" "', argument " "1"" of type '" "double""'");
-  } 
-  arg1 = static_cast< double >(val1);
-  ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "TetragonalLattice" "', argument " "2"" of type '" "double""'");
-  } 
-  arg2 = static_cast< double >(val2);
-  result = bake::TetragonalLattice(arg1,arg2);
-  resultobj = SWIG_NewPointerObj((new Lattice3D(result)), SWIGTYPE_p_Lattice3D, SWIG_POINTER_OWN |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_BCTLattice(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  double arg1 ;
-  double arg2 ;
-  double val1 ;
-  int ecode1 = 0 ;
-  double val2 ;
-  int ecode2 = 0 ;
-  PyObject *swig_obj[2] ;
-  SwigValueWrapper< Lattice3D > result;
-  
-  if (!SWIG_Python_UnpackTuple(args, "BCTLattice", 2, 2, swig_obj)) SWIG_fail;
-  ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
-  if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "BCTLattice" "', argument " "1"" of type '" "double""'");
-  } 
-  arg1 = static_cast< double >(val1);
-  ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "BCTLattice" "', argument " "2"" of type '" "double""'");
-  } 
-  arg2 = static_cast< double >(val2);
-  result = bake::BCTLattice(arg1,arg2);
-  resultobj = SWIG_NewPointerObj((new Lattice3D(result)), SWIGTYPE_p_Lattice3D, SWIG_POINTER_OWN |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-static PyMethodDef SwigMethods[] = {
-	 { "delete_SwigPyIterator", _wrap_delete_SwigPyIterator, METH_O, "delete_SwigPyIterator(SwigPyIterator self)"},
-	 { "SwigPyIterator_value", _wrap_SwigPyIterator_value, METH_O, "SwigPyIterator_value(SwigPyIterator self) -> PyObject *"},
-	 { "SwigPyIterator_incr", _wrap_SwigPyIterator_incr, METH_VARARGS, "SwigPyIterator_incr(SwigPyIterator self, size_t n=1) -> SwigPyIterator"},
-	 { "SwigPyIterator_decr", _wrap_SwigPyIterator_decr, METH_VARARGS, "SwigPyIterator_decr(SwigPyIterator self, size_t n=1) -> SwigPyIterator"},
-	 { "SwigPyIterator_distance", _wrap_SwigPyIterator_distance, METH_VARARGS, "SwigPyIterator_distance(SwigPyIterator self, SwigPyIterator x) -> ptrdiff_t"},
-	 { "SwigPyIterator_equal", _wrap_SwigPyIterator_equal, METH_VARARGS, "SwigPyIterator_equal(SwigPyIterator self, SwigPyIterator x) -> bool"},
-	 { "SwigPyIterator_copy", _wrap_SwigPyIterator_copy, METH_O, "SwigPyIterator_copy(SwigPyIterator self) -> SwigPyIterator"},
-	 { "SwigPyIterator_next", _wrap_SwigPyIterator_next, METH_O, "SwigPyIterator_next(SwigPyIterator self) -> PyObject *"},
-	 { "SwigPyIterator___next__", _wrap_SwigPyIterator___next__, METH_O, "SwigPyIterator___next__(SwigPyIterator self) -> PyObject *"},
-	 { "SwigPyIterator_previous", _wrap_SwigPyIterator_previous, METH_O, "SwigPyIterator_previous(SwigPyIterator self) -> PyObject *"},
-	 { "SwigPyIterator_advance", _wrap_SwigPyIterator_advance, METH_VARARGS, "SwigPyIterator_advance(SwigPyIterator self, ptrdiff_t n) -> SwigPyIterator"},
-	 { "SwigPyIterator___eq__", _wrap_SwigPyIterator___eq__, METH_VARARGS, "SwigPyIterator___eq__(SwigPyIterator self, SwigPyIterator x) -> bool"},
-	 { "SwigPyIterator___ne__", _wrap_SwigPyIterator___ne__, METH_VARARGS, "SwigPyIterator___ne__(SwigPyIterator self, SwigPyIterator x) -> bool"},
-	 { "SwigPyIterator___iadd__", _wrap_SwigPyIterator___iadd__, METH_VARARGS, "SwigPyIterator___iadd__(SwigPyIterator self, ptrdiff_t n) -> SwigPyIterator"},
-	 { "SwigPyIterator___isub__", _wrap_SwigPyIterator___isub__, METH_VARARGS, "SwigPyIterator___isub__(SwigPyIterator self, ptrdiff_t n) -> SwigPyIterator"},
-	 { "SwigPyIterator___add__", _wrap_SwigPyIterator___add__, METH_VARARGS, "SwigPyIterator___add__(SwigPyIterator self, ptrdiff_t n) -> SwigPyIterator"},
-	 { "SwigPyIterator___sub__", _wrap_SwigPyIterator___sub__, METH_VARARGS, "\n"
-		"SwigPyIterator___sub__(SwigPyIterator self, ptrdiff_t n) -> SwigPyIterator\n"
-		"SwigPyIterator___sub__(SwigPyIterator self, SwigPyIterator x) -> ptrdiff_t\n"
-		""},
-	 { "SwigPyIterator_swigregister", SwigPyIterator_swigregister, METH_O, NULL},
-	 { "vdouble1d_t_iterator", _wrap_vdouble1d_t_iterator, METH_O, "vdouble1d_t_iterator(vdouble1d_t self) -> SwigPyIterator"},
-	 { "vdouble1d_t___nonzero__", _wrap_vdouble1d_t___nonzero__, METH_O, "vdouble1d_t___nonzero__(vdouble1d_t self) -> bool"},
-	 { "vdouble1d_t___bool__", _wrap_vdouble1d_t___bool__, METH_O, "vdouble1d_t___bool__(vdouble1d_t self) -> bool"},
-	 { "vdouble1d_t___len__", _wrap_vdouble1d_t___len__, METH_O, "vdouble1d_t___len__(vdouble1d_t self) -> std::vector< double >::size_type"},
-	 { "vdouble1d_t___getslice__", _wrap_vdouble1d_t___getslice__, METH_VARARGS, "vdouble1d_t___getslice__(vdouble1d_t self, std::vector< double >::difference_type i, std::vector< double >::difference_type j) -> vdouble1d_t"},
-	 { "vdouble1d_t___setslice__", _wrap_vdouble1d_t___setslice__, METH_VARARGS, "\n"
-		"vdouble1d_t___setslice__(vdouble1d_t self, std::vector< double >::difference_type i, std::vector< double >::difference_type j)\n"
-		"vdouble1d_t___setslice__(vdouble1d_t self, std::vector< double >::difference_type i, std::vector< double >::difference_type j, vdouble1d_t v)\n"
-		""},
-	 { "vdouble1d_t___delslice__", _wrap_vdouble1d_t___delslice__, METH_VARARGS, "vdouble1d_t___delslice__(vdouble1d_t self, std::vector< double >::difference_type i, std::vector< double >::difference_type j)"},
-	 { "vdouble1d_t___delitem__", _wrap_vdouble1d_t___delitem__, METH_VARARGS, "\n"
-		"vdouble1d_t___delitem__(vdouble1d_t self, std::vector< double >::difference_type i)\n"
-		"vdouble1d_t___delitem__(vdouble1d_t self, SWIGPY_SLICEOBJECT * slice)\n"
-		""},
-	 { "vdouble1d_t___getitem__", _wrap_vdouble1d_t___getitem__, METH_VARARGS, "\n"
-		"vdouble1d_t___getitem__(vdouble1d_t self, SWIGPY_SLICEOBJECT * slice) -> vdouble1d_t\n"
-		"vdouble1d_t___getitem__(vdouble1d_t self, std::vector< double >::difference_type i) -> std::vector< double >::value_type const &\n"
-		""},
-	 { "vdouble1d_t___setitem__", _wrap_vdouble1d_t___setitem__, METH_VARARGS, "\n"
-		"vdouble1d_t___setitem__(vdouble1d_t self, SWIGPY_SLICEOBJECT * slice, vdouble1d_t v)\n"
-		"vdouble1d_t___setitem__(vdouble1d_t self, SWIGPY_SLICEOBJECT * slice)\n"
-		"vdouble1d_t___setitem__(vdouble1d_t self, std::vector< double >::difference_type i, std::vector< double >::value_type const & x)\n"
-		""},
-	 { "vdouble1d_t_pop", _wrap_vdouble1d_t_pop, METH_O, "vdouble1d_t_pop(vdouble1d_t self) -> std::vector< double >::value_type"},
-	 { "vdouble1d_t_append", _wrap_vdouble1d_t_append, METH_VARARGS, "vdouble1d_t_append(vdouble1d_t self, std::vector< double >::value_type const & x)"},
-	 { "vdouble1d_t_empty", _wrap_vdouble1d_t_empty, METH_O, "vdouble1d_t_empty(vdouble1d_t self) -> bool"},
-	 { "vdouble1d_t_size", _wrap_vdouble1d_t_size, METH_O, "vdouble1d_t_size(vdouble1d_t self) -> std::vector< double >::size_type"},
-	 { "vdouble1d_t_swap", _wrap_vdouble1d_t_swap, METH_VARARGS, "vdouble1d_t_swap(vdouble1d_t self, vdouble1d_t v)"},
-	 { "vdouble1d_t_begin", _wrap_vdouble1d_t_begin, METH_O, "vdouble1d_t_begin(vdouble1d_t self) -> std::vector< double >::iterator"},
-	 { "vdouble1d_t_end", _wrap_vdouble1d_t_end, METH_O, "vdouble1d_t_end(vdouble1d_t self) -> std::vector< double >::iterator"},
-	 { "vdouble1d_t_rbegin", _wrap_vdouble1d_t_rbegin, METH_O, "vdouble1d_t_rbegin(vdouble1d_t self) -> std::vector< double >::reverse_iterator"},
-	 { "vdouble1d_t_rend", _wrap_vdouble1d_t_rend, METH_O, "vdouble1d_t_rend(vdouble1d_t self) -> std::vector< double >::reverse_iterator"},
-	 { "vdouble1d_t_clear", _wrap_vdouble1d_t_clear, METH_O, "vdouble1d_t_clear(vdouble1d_t self)"},
-	 { "vdouble1d_t_get_allocator", _wrap_vdouble1d_t_get_allocator, METH_O, "vdouble1d_t_get_allocator(vdouble1d_t self) -> std::vector< double >::allocator_type"},
-	 { "vdouble1d_t_pop_back", _wrap_vdouble1d_t_pop_back, METH_O, "vdouble1d_t_pop_back(vdouble1d_t self)"},
-	 { "vdouble1d_t_erase", _wrap_vdouble1d_t_erase, METH_VARARGS, "\n"
-		"vdouble1d_t_erase(vdouble1d_t self, std::vector< double >::iterator pos) -> std::vector< double >::iterator\n"
-		"vdouble1d_t_erase(vdouble1d_t self, std::vector< double >::iterator first, std::vector< double >::iterator last) -> std::vector< double >::iterator\n"
-		""},
-	 { "new_vdouble1d_t", _wrap_new_vdouble1d_t, METH_VARARGS, "\n"
-		"vdouble1d_t()\n"
-		"vdouble1d_t(vdouble1d_t other)\n"
-		"vdouble1d_t(std::vector< double >::size_type size)\n"
-		"new_vdouble1d_t(std::vector< double >::size_type size, std::vector< double >::value_type const & value) -> vdouble1d_t\n"
-		""},
-	 { "vdouble1d_t_push_back", _wrap_vdouble1d_t_push_back, METH_VARARGS, "vdouble1d_t_push_back(vdouble1d_t self, std::vector< double >::value_type const & x)"},
-	 { "vdouble1d_t_front", _wrap_vdouble1d_t_front, METH_O, "vdouble1d_t_front(vdouble1d_t self) -> std::vector< double >::value_type const &"},
-	 { "vdouble1d_t_back", _wrap_vdouble1d_t_back, METH_O, "vdouble1d_t_back(vdouble1d_t self) -> std::vector< double >::value_type const &"},
-	 { "vdouble1d_t_assign", _wrap_vdouble1d_t_assign, METH_VARARGS, "vdouble1d_t_assign(vdouble1d_t self, std::vector< double >::size_type n, std::vector< double >::value_type const & x)"},
-	 { "vdouble1d_t_resize", _wrap_vdouble1d_t_resize, METH_VARARGS, "\n"
-		"vdouble1d_t_resize(vdouble1d_t self, std::vector< double >::size_type new_size)\n"
-		"vdouble1d_t_resize(vdouble1d_t self, std::vector< double >::size_type new_size, std::vector< double >::value_type const & x)\n"
-		""},
-	 { "vdouble1d_t_insert", _wrap_vdouble1d_t_insert, METH_VARARGS, "\n"
-		"vdouble1d_t_insert(vdouble1d_t self, std::vector< double >::iterator pos, std::vector< double >::value_type const & x) -> std::vector< double >::iterator\n"
-		"vdouble1d_t_insert(vdouble1d_t self, std::vector< double >::iterator pos, std::vector< double >::size_type n, std::vector< double >::value_type const & x)\n"
-		""},
-	 { "vdouble1d_t_reserve", _wrap_vdouble1d_t_reserve, METH_VARARGS, "vdouble1d_t_reserve(vdouble1d_t self, std::vector< double >::size_type n)"},
-	 { "vdouble1d_t_capacity", _wrap_vdouble1d_t_capacity, METH_O, "vdouble1d_t_capacity(vdouble1d_t self) -> std::vector< double >::size_type"},
-	 { "delete_vdouble1d_t", _wrap_delete_vdouble1d_t, METH_O, "delete_vdouble1d_t(vdouble1d_t self)"},
-	 { "vdouble1d_t_swigregister", vdouble1d_t_swigregister, METH_O, NULL},
-	 { "vdouble1d_t_swiginit", vdouble1d_t_swiginit, METH_VARARGS, NULL},
-	 { "vdouble2d_t_iterator", _wrap_vdouble2d_t_iterator, METH_O, "vdouble2d_t_iterator(vdouble2d_t self) -> SwigPyIterator"},
-	 { "vdouble2d_t___nonzero__", _wrap_vdouble2d_t___nonzero__, METH_O, "vdouble2d_t___nonzero__(vdouble2d_t self) -> bool"},
-	 { "vdouble2d_t___bool__", _wrap_vdouble2d_t___bool__, METH_O, "vdouble2d_t___bool__(vdouble2d_t self) -> bool"},
-	 { "vdouble2d_t___len__", _wrap_vdouble2d_t___len__, METH_O, "vdouble2d_t___len__(vdouble2d_t self) -> std::vector< std::vector< double > >::size_type"},
-	 { "vdouble2d_t___getslice__", _wrap_vdouble2d_t___getslice__, METH_VARARGS, "vdouble2d_t___getslice__(vdouble2d_t self, std::vector< std::vector< double > >::difference_type i, std::vector< std::vector< double > >::difference_type j) -> vdouble2d_t"},
-	 { "vdouble2d_t___setslice__", _wrap_vdouble2d_t___setslice__, METH_VARARGS, "\n"
-		"vdouble2d_t___setslice__(vdouble2d_t self, std::vector< std::vector< double > >::difference_type i, std::vector< std::vector< double > >::difference_type j)\n"
-		"vdouble2d_t___setslice__(vdouble2d_t self, std::vector< std::vector< double > >::difference_type i, std::vector< std::vector< double > >::difference_type j, vdouble2d_t v)\n"
-		""},
-	 { "vdouble2d_t___delslice__", _wrap_vdouble2d_t___delslice__, METH_VARARGS, "vdouble2d_t___delslice__(vdouble2d_t self, std::vector< std::vector< double > >::difference_type i, std::vector< std::vector< double > >::difference_type j)"},
-	 { "vdouble2d_t___delitem__", _wrap_vdouble2d_t___delitem__, METH_VARARGS, "\n"
-		"vdouble2d_t___delitem__(vdouble2d_t self, std::vector< std::vector< double > >::difference_type i)\n"
-		"vdouble2d_t___delitem__(vdouble2d_t self, SWIGPY_SLICEOBJECT * slice)\n"
-		""},
-	 { "vdouble2d_t___getitem__", _wrap_vdouble2d_t___getitem__, METH_VARARGS, "\n"
-		"vdouble2d_t___getitem__(vdouble2d_t self, SWIGPY_SLICEOBJECT * slice) -> vdouble2d_t\n"
-		"vdouble2d_t___getitem__(vdouble2d_t self, std::vector< std::vector< double > >::difference_type i) -> vdouble1d_t\n"
-		""},
-	 { "vdouble2d_t___setitem__", _wrap_vdouble2d_t___setitem__, METH_VARARGS, "\n"
-		"vdouble2d_t___setitem__(vdouble2d_t self, SWIGPY_SLICEOBJECT * slice, vdouble2d_t v)\n"
-		"vdouble2d_t___setitem__(vdouble2d_t self, SWIGPY_SLICEOBJECT * slice)\n"
-		"vdouble2d_t___setitem__(vdouble2d_t self, std::vector< std::vector< double > >::difference_type i, vdouble1d_t x)\n"
-		""},
-	 { "vdouble2d_t_pop", _wrap_vdouble2d_t_pop, METH_O, "vdouble2d_t_pop(vdouble2d_t self) -> vdouble1d_t"},
-	 { "vdouble2d_t_append", _wrap_vdouble2d_t_append, METH_VARARGS, "vdouble2d_t_append(vdouble2d_t self, vdouble1d_t x)"},
-	 { "vdouble2d_t_empty", _wrap_vdouble2d_t_empty, METH_O, "vdouble2d_t_empty(vdouble2d_t self) -> bool"},
-	 { "vdouble2d_t_size", _wrap_vdouble2d_t_size, METH_O, "vdouble2d_t_size(vdouble2d_t self) -> std::vector< std::vector< double > >::size_type"},
-	 { "vdouble2d_t_swap", _wrap_vdouble2d_t_swap, METH_VARARGS, "vdouble2d_t_swap(vdouble2d_t self, vdouble2d_t v)"},
-	 { "vdouble2d_t_begin", _wrap_vdouble2d_t_begin, METH_O, "vdouble2d_t_begin(vdouble2d_t self) -> std::vector< std::vector< double > >::iterator"},
-	 { "vdouble2d_t_end", _wrap_vdouble2d_t_end, METH_O, "vdouble2d_t_end(vdouble2d_t self) -> std::vector< std::vector< double > >::iterator"},
-	 { "vdouble2d_t_rbegin", _wrap_vdouble2d_t_rbegin, METH_O, "vdouble2d_t_rbegin(vdouble2d_t self) -> std::vector< std::vector< double > >::reverse_iterator"},
-	 { "vdouble2d_t_rend", _wrap_vdouble2d_t_rend, METH_O, "vdouble2d_t_rend(vdouble2d_t self) -> std::vector< std::vector< double > >::reverse_iterator"},
-	 { "vdouble2d_t_clear", _wrap_vdouble2d_t_clear, METH_O, "vdouble2d_t_clear(vdouble2d_t self)"},
-	 { "vdouble2d_t_get_allocator", _wrap_vdouble2d_t_get_allocator, METH_O, "vdouble2d_t_get_allocator(vdouble2d_t self) -> std::vector< std::vector< double > >::allocator_type"},
-	 { "vdouble2d_t_pop_back", _wrap_vdouble2d_t_pop_back, METH_O, "vdouble2d_t_pop_back(vdouble2d_t self)"},
-	 { "vdouble2d_t_erase", _wrap_vdouble2d_t_erase, METH_VARARGS, "\n"
-		"vdouble2d_t_erase(vdouble2d_t self, std::vector< std::vector< double > >::iterator pos) -> std::vector< std::vector< double > >::iterator\n"
-		"vdouble2d_t_erase(vdouble2d_t self, std::vector< std::vector< double > >::iterator first, std::vector< std::vector< double > >::iterator last) -> std::vector< std::vector< double > >::iterator\n"
-		""},
-	 { "new_vdouble2d_t", _wrap_new_vdouble2d_t, METH_VARARGS, "\n"
-		"vdouble2d_t()\n"
-		"vdouble2d_t(vdouble2d_t other)\n"
-		"vdouble2d_t(std::vector< std::vector< double > >::size_type size)\n"
-		"new_vdouble2d_t(std::vector< std::vector< double > >::size_type size, vdouble1d_t value) -> vdouble2d_t\n"
-		""},
-	 { "vdouble2d_t_push_back", _wrap_vdouble2d_t_push_back, METH_VARARGS, "vdouble2d_t_push_back(vdouble2d_t self, vdouble1d_t x)"},
-	 { "vdouble2d_t_front", _wrap_vdouble2d_t_front, METH_O, "vdouble2d_t_front(vdouble2d_t self) -> vdouble1d_t"},
-	 { "vdouble2d_t_back", _wrap_vdouble2d_t_back, METH_O, "vdouble2d_t_back(vdouble2d_t self) -> vdouble1d_t"},
-	 { "vdouble2d_t_assign", _wrap_vdouble2d_t_assign, METH_VARARGS, "vdouble2d_t_assign(vdouble2d_t self, std::vector< std::vector< double > >::size_type n, vdouble1d_t x)"},
-	 { "vdouble2d_t_resize", _wrap_vdouble2d_t_resize, METH_VARARGS, "\n"
-		"vdouble2d_t_resize(vdouble2d_t self, std::vector< std::vector< double > >::size_type new_size)\n"
-		"vdouble2d_t_resize(vdouble2d_t self, std::vector< std::vector< double > >::size_type new_size, vdouble1d_t x)\n"
-		""},
-	 { "vdouble2d_t_insert", _wrap_vdouble2d_t_insert, METH_VARARGS, "\n"
-		"vdouble2d_t_insert(vdouble2d_t self, std::vector< std::vector< double > >::iterator pos, vdouble1d_t x) -> std::vector< std::vector< double > >::iterator\n"
-		"vdouble2d_t_insert(vdouble2d_t self, std::vector< std::vector< double > >::iterator pos, std::vector< std::vector< double > >::size_type n, vdouble1d_t x)\n"
-		""},
-	 { "vdouble2d_t_reserve", _wrap_vdouble2d_t_reserve, METH_VARARGS, "vdouble2d_t_reserve(vdouble2d_t self, std::vector< std::vector< double > >::size_type n)"},
-	 { "vdouble2d_t_capacity", _wrap_vdouble2d_t_capacity, METH_O, "vdouble2d_t_capacity(vdouble2d_t self) -> std::vector< std::vector< double > >::size_type"},
-	 { "delete_vdouble2d_t", _wrap_delete_vdouble2d_t, METH_O, "delete_vdouble2d_t(vdouble2d_t self)"},
-	 { "vdouble2d_t_swigregister", vdouble2d_t_swigregister, METH_O, NULL},
-	 { "vdouble2d_t_swiginit", vdouble2d_t_swiginit, METH_VARARGS, NULL},
-	 { "vector_integer_t_iterator", _wrap_vector_integer_t_iterator, METH_O, "vector_integer_t_iterator(vector_integer_t self) -> SwigPyIterator"},
-	 { "vector_integer_t___nonzero__", _wrap_vector_integer_t___nonzero__, METH_O, "vector_integer_t___nonzero__(vector_integer_t self) -> bool"},
-	 { "vector_integer_t___bool__", _wrap_vector_integer_t___bool__, METH_O, "vector_integer_t___bool__(vector_integer_t self) -> bool"},
-	 { "vector_integer_t___len__", _wrap_vector_integer_t___len__, METH_O, "vector_integer_t___len__(vector_integer_t self) -> std::vector< int >::size_type"},
-	 { "vector_integer_t___getslice__", _wrap_vector_integer_t___getslice__, METH_VARARGS, "vector_integer_t___getslice__(vector_integer_t self, std::vector< int >::difference_type i, std::vector< int >::difference_type j) -> vector_integer_t"},
-	 { "vector_integer_t___setslice__", _wrap_vector_integer_t___setslice__, METH_VARARGS, "\n"
-		"vector_integer_t___setslice__(vector_integer_t self, std::vector< int >::difference_type i, std::vector< int >::difference_type j)\n"
-		"vector_integer_t___setslice__(vector_integer_t self, std::vector< int >::difference_type i, std::vector< int >::difference_type j, vector_integer_t v)\n"
-		""},
-	 { "vector_integer_t___delslice__", _wrap_vector_integer_t___delslice__, METH_VARARGS, "vector_integer_t___delslice__(vector_integer_t self, std::vector< int >::difference_type i, std::vector< int >::difference_type j)"},
-	 { "vector_integer_t___delitem__", _wrap_vector_integer_t___delitem__, METH_VARARGS, "\n"
-		"vector_integer_t___delitem__(vector_integer_t self, std::vector< int >::difference_type i)\n"
-		"vector_integer_t___delitem__(vector_integer_t self, SWIGPY_SLICEOBJECT * slice)\n"
-		""},
-	 { "vector_integer_t___getitem__", _wrap_vector_integer_t___getitem__, METH_VARARGS, "\n"
-		"vector_integer_t___getitem__(vector_integer_t self, SWIGPY_SLICEOBJECT * slice) -> vector_integer_t\n"
-		"vector_integer_t___getitem__(vector_integer_t self, std::vector< int >::difference_type i) -> std::vector< int >::value_type const &\n"
-		""},
-	 { "vector_integer_t___setitem__", _wrap_vector_integer_t___setitem__, METH_VARARGS, "\n"
-		"vector_integer_t___setitem__(vector_integer_t self, SWIGPY_SLICEOBJECT * slice, vector_integer_t v)\n"
-		"vector_integer_t___setitem__(vector_integer_t self, SWIGPY_SLICEOBJECT * slice)\n"
-		"vector_integer_t___setitem__(vector_integer_t self, std::vector< int >::difference_type i, std::vector< int >::value_type const & x)\n"
-		""},
-	 { "vector_integer_t_pop", _wrap_vector_integer_t_pop, METH_O, "vector_integer_t_pop(vector_integer_t self) -> std::vector< int >::value_type"},
-	 { "vector_integer_t_append", _wrap_vector_integer_t_append, METH_VARARGS, "vector_integer_t_append(vector_integer_t self, std::vector< int >::value_type const & x)"},
-	 { "vector_integer_t_empty", _wrap_vector_integer_t_empty, METH_O, "vector_integer_t_empty(vector_integer_t self) -> bool"},
-	 { "vector_integer_t_size", _wrap_vector_integer_t_size, METH_O, "vector_integer_t_size(vector_integer_t self) -> std::vector< int >::size_type"},
-	 { "vector_integer_t_swap", _wrap_vector_integer_t_swap, METH_VARARGS, "vector_integer_t_swap(vector_integer_t self, vector_integer_t v)"},
-	 { "vector_integer_t_begin", _wrap_vector_integer_t_begin, METH_O, "vector_integer_t_begin(vector_integer_t self) -> std::vector< int >::iterator"},
-	 { "vector_integer_t_end", _wrap_vector_integer_t_end, METH_O, "vector_integer_t_end(vector_integer_t self) -> std::vector< int >::iterator"},
-	 { "vector_integer_t_rbegin", _wrap_vector_integer_t_rbegin, METH_O, "vector_integer_t_rbegin(vector_integer_t self) -> std::vector< int >::reverse_iterator"},
-	 { "vector_integer_t_rend", _wrap_vector_integer_t_rend, METH_O, "vector_integer_t_rend(vector_integer_t self) -> std::vector< int >::reverse_iterator"},
-	 { "vector_integer_t_clear", _wrap_vector_integer_t_clear, METH_O, "vector_integer_t_clear(vector_integer_t self)"},
-	 { "vector_integer_t_get_allocator", _wrap_vector_integer_t_get_allocator, METH_O, "vector_integer_t_get_allocator(vector_integer_t self) -> std::vector< int >::allocator_type"},
-	 { "vector_integer_t_pop_back", _wrap_vector_integer_t_pop_back, METH_O, "vector_integer_t_pop_back(vector_integer_t self)"},
-	 { "vector_integer_t_erase", _wrap_vector_integer_t_erase, METH_VARARGS, "\n"
-		"vector_integer_t_erase(vector_integer_t self, std::vector< int >::iterator pos) -> std::vector< int >::iterator\n"
-		"vector_integer_t_erase(vector_integer_t self, std::vector< int >::iterator first, std::vector< int >::iterator last) -> std::vector< int >::iterator\n"
-		""},
-	 { "new_vector_integer_t", _wrap_new_vector_integer_t, METH_VARARGS, "\n"
-		"vector_integer_t()\n"
-		"vector_integer_t(vector_integer_t other)\n"
-		"vector_integer_t(std::vector< int >::size_type size)\n"
-		"new_vector_integer_t(std::vector< int >::size_type size, std::vector< int >::value_type const & value) -> vector_integer_t\n"
-		""},
-	 { "vector_integer_t_push_back", _wrap_vector_integer_t_push_back, METH_VARARGS, "vector_integer_t_push_back(vector_integer_t self, std::vector< int >::value_type const & x)"},
-	 { "vector_integer_t_front", _wrap_vector_integer_t_front, METH_O, "vector_integer_t_front(vector_integer_t self) -> std::vector< int >::value_type const &"},
-	 { "vector_integer_t_back", _wrap_vector_integer_t_back, METH_O, "vector_integer_t_back(vector_integer_t self) -> std::vector< int >::value_type const &"},
-	 { "vector_integer_t_assign", _wrap_vector_integer_t_assign, METH_VARARGS, "vector_integer_t_assign(vector_integer_t self, std::vector< int >::size_type n, std::vector< int >::value_type const & x)"},
-	 { "vector_integer_t_resize", _wrap_vector_integer_t_resize, METH_VARARGS, "\n"
-		"vector_integer_t_resize(vector_integer_t self, std::vector< int >::size_type new_size)\n"
-		"vector_integer_t_resize(vector_integer_t self, std::vector< int >::size_type new_size, std::vector< int >::value_type const & x)\n"
-		""},
-	 { "vector_integer_t_insert", _wrap_vector_integer_t_insert, METH_VARARGS, "\n"
-		"vector_integer_t_insert(vector_integer_t self, std::vector< int >::iterator pos, std::vector< int >::value_type const & x) -> std::vector< int >::iterator\n"
-		"vector_integer_t_insert(vector_integer_t self, std::vector< int >::iterator pos, std::vector< int >::size_type n, std::vector< int >::value_type const & x)\n"
-		""},
-	 { "vector_integer_t_reserve", _wrap_vector_integer_t_reserve, METH_VARARGS, "vector_integer_t_reserve(vector_integer_t self, std::vector< int >::size_type n)"},
-	 { "vector_integer_t_capacity", _wrap_vector_integer_t_capacity, METH_O, "vector_integer_t_capacity(vector_integer_t self) -> std::vector< int >::size_type"},
-	 { "delete_vector_integer_t", _wrap_delete_vector_integer_t, METH_O, "delete_vector_integer_t(vector_integer_t self)"},
-	 { "vector_integer_t_swigregister", vector_integer_t_swigregister, METH_O, NULL},
-	 { "vector_integer_t_swiginit", vector_integer_t_swiginit, METH_VARARGS, NULL},
-	 { "vinteger2d_t_iterator", _wrap_vinteger2d_t_iterator, METH_O, "vinteger2d_t_iterator(vinteger2d_t self) -> SwigPyIterator"},
-	 { "vinteger2d_t___nonzero__", _wrap_vinteger2d_t___nonzero__, METH_O, "vinteger2d_t___nonzero__(vinteger2d_t self) -> bool"},
-	 { "vinteger2d_t___bool__", _wrap_vinteger2d_t___bool__, METH_O, "vinteger2d_t___bool__(vinteger2d_t self) -> bool"},
-	 { "vinteger2d_t___len__", _wrap_vinteger2d_t___len__, METH_O, "vinteger2d_t___len__(vinteger2d_t self) -> std::vector< std::vector< int > >::size_type"},
-	 { "vinteger2d_t___getslice__", _wrap_vinteger2d_t___getslice__, METH_VARARGS, "vinteger2d_t___getslice__(vinteger2d_t self, std::vector< std::vector< int > >::difference_type i, std::vector< std::vector< int > >::difference_type j) -> vinteger2d_t"},
-	 { "vinteger2d_t___setslice__", _wrap_vinteger2d_t___setslice__, METH_VARARGS, "\n"
-		"vinteger2d_t___setslice__(vinteger2d_t self, std::vector< std::vector< int > >::difference_type i, std::vector< std::vector< int > >::difference_type j)\n"
-		"vinteger2d_t___setslice__(vinteger2d_t self, std::vector< std::vector< int > >::difference_type i, std::vector< std::vector< int > >::difference_type j, vinteger2d_t v)\n"
-		""},
-	 { "vinteger2d_t___delslice__", _wrap_vinteger2d_t___delslice__, METH_VARARGS, "vinteger2d_t___delslice__(vinteger2d_t self, std::vector< std::vector< int > >::difference_type i, std::vector< std::vector< int > >::difference_type j)"},
-	 { "vinteger2d_t___delitem__", _wrap_vinteger2d_t___delitem__, METH_VARARGS, "\n"
-		"vinteger2d_t___delitem__(vinteger2d_t self, std::vector< std::vector< int > >::difference_type i)\n"
-		"vinteger2d_t___delitem__(vinteger2d_t self, SWIGPY_SLICEOBJECT * slice)\n"
-		""},
-	 { "vinteger2d_t___getitem__", _wrap_vinteger2d_t___getitem__, METH_VARARGS, "\n"
-		"vinteger2d_t___getitem__(vinteger2d_t self, SWIGPY_SLICEOBJECT * slice) -> vinteger2d_t\n"
-		"vinteger2d_t___getitem__(vinteger2d_t self, std::vector< std::vector< int > >::difference_type i) -> vector_integer_t\n"
-		""},
-	 { "vinteger2d_t___setitem__", _wrap_vinteger2d_t___setitem__, METH_VARARGS, "\n"
-		"vinteger2d_t___setitem__(vinteger2d_t self, SWIGPY_SLICEOBJECT * slice, vinteger2d_t v)\n"
-		"vinteger2d_t___setitem__(vinteger2d_t self, SWIGPY_SLICEOBJECT * slice)\n"
-		"vinteger2d_t___setitem__(vinteger2d_t self, std::vector< std::vector< int > >::difference_type i, vector_integer_t x)\n"
-		""},
-	 { "vinteger2d_t_pop", _wrap_vinteger2d_t_pop, METH_O, "vinteger2d_t_pop(vinteger2d_t self) -> vector_integer_t"},
-	 { "vinteger2d_t_append", _wrap_vinteger2d_t_append, METH_VARARGS, "vinteger2d_t_append(vinteger2d_t self, vector_integer_t x)"},
-	 { "vinteger2d_t_empty", _wrap_vinteger2d_t_empty, METH_O, "vinteger2d_t_empty(vinteger2d_t self) -> bool"},
-	 { "vinteger2d_t_size", _wrap_vinteger2d_t_size, METH_O, "vinteger2d_t_size(vinteger2d_t self) -> std::vector< std::vector< int > >::size_type"},
-	 { "vinteger2d_t_swap", _wrap_vinteger2d_t_swap, METH_VARARGS, "vinteger2d_t_swap(vinteger2d_t self, vinteger2d_t v)"},
-	 { "vinteger2d_t_begin", _wrap_vinteger2d_t_begin, METH_O, "vinteger2d_t_begin(vinteger2d_t self) -> std::vector< std::vector< int > >::iterator"},
-	 { "vinteger2d_t_end", _wrap_vinteger2d_t_end, METH_O, "vinteger2d_t_end(vinteger2d_t self) -> std::vector< std::vector< int > >::iterator"},
-	 { "vinteger2d_t_rbegin", _wrap_vinteger2d_t_rbegin, METH_O, "vinteger2d_t_rbegin(vinteger2d_t self) -> std::vector< std::vector< int > >::reverse_iterator"},
-	 { "vinteger2d_t_rend", _wrap_vinteger2d_t_rend, METH_O, "vinteger2d_t_rend(vinteger2d_t self) -> std::vector< std::vector< int > >::reverse_iterator"},
-	 { "vinteger2d_t_clear", _wrap_vinteger2d_t_clear, METH_O, "vinteger2d_t_clear(vinteger2d_t self)"},
-	 { "vinteger2d_t_get_allocator", _wrap_vinteger2d_t_get_allocator, METH_O, "vinteger2d_t_get_allocator(vinteger2d_t self) -> std::vector< std::vector< int > >::allocator_type"},
-	 { "vinteger2d_t_pop_back", _wrap_vinteger2d_t_pop_back, METH_O, "vinteger2d_t_pop_back(vinteger2d_t self)"},
-	 { "vinteger2d_t_erase", _wrap_vinteger2d_t_erase, METH_VARARGS, "\n"
-		"vinteger2d_t_erase(vinteger2d_t self, std::vector< std::vector< int > >::iterator pos) -> std::vector< std::vector< int > >::iterator\n"
-		"vinteger2d_t_erase(vinteger2d_t self, std::vector< std::vector< int > >::iterator first, std::vector< std::vector< int > >::iterator last) -> std::vector< std::vector< int > >::iterator\n"
-		""},
-	 { "new_vinteger2d_t", _wrap_new_vinteger2d_t, METH_VARARGS, "\n"
-		"vinteger2d_t()\n"
-		"vinteger2d_t(vinteger2d_t other)\n"
-		"vinteger2d_t(std::vector< std::vector< int > >::size_type size)\n"
-		"new_vinteger2d_t(std::vector< std::vector< int > >::size_type size, vector_integer_t value) -> vinteger2d_t\n"
-		""},
-	 { "vinteger2d_t_push_back", _wrap_vinteger2d_t_push_back, METH_VARARGS, "vinteger2d_t_push_back(vinteger2d_t self, vector_integer_t x)"},
-	 { "vinteger2d_t_front", _wrap_vinteger2d_t_front, METH_O, "vinteger2d_t_front(vinteger2d_t self) -> vector_integer_t"},
-	 { "vinteger2d_t_back", _wrap_vinteger2d_t_back, METH_O, "vinteger2d_t_back(vinteger2d_t self) -> vector_integer_t"},
-	 { "vinteger2d_t_assign", _wrap_vinteger2d_t_assign, METH_VARARGS, "vinteger2d_t_assign(vinteger2d_t self, std::vector< std::vector< int > >::size_type n, vector_integer_t x)"},
-	 { "vinteger2d_t_resize", _wrap_vinteger2d_t_resize, METH_VARARGS, "\n"
-		"vinteger2d_t_resize(vinteger2d_t self, std::vector< std::vector< int > >::size_type new_size)\n"
-		"vinteger2d_t_resize(vinteger2d_t self, std::vector< std::vector< int > >::size_type new_size, vector_integer_t x)\n"
-		""},
-	 { "vinteger2d_t_insert", _wrap_vinteger2d_t_insert, METH_VARARGS, "\n"
-		"vinteger2d_t_insert(vinteger2d_t self, std::vector< std::vector< int > >::iterator pos, vector_integer_t x) -> std::vector< std::vector< int > >::iterator\n"
-		"vinteger2d_t_insert(vinteger2d_t self, std::vector< std::vector< int > >::iterator pos, std::vector< std::vector< int > >::size_type n, vector_integer_t x)\n"
-		""},
-	 { "vinteger2d_t_reserve", _wrap_vinteger2d_t_reserve, METH_VARARGS, "vinteger2d_t_reserve(vinteger2d_t self, std::vector< std::vector< int > >::size_type n)"},
-	 { "vinteger2d_t_capacity", _wrap_vinteger2d_t_capacity, METH_O, "vinteger2d_t_capacity(vinteger2d_t self) -> std::vector< std::vector< int > >::size_type"},
-	 { "delete_vinteger2d_t", _wrap_delete_vinteger2d_t, METH_O, "delete_vinteger2d_t(vinteger2d_t self)"},
-	 { "vinteger2d_t_swigregister", vinteger2d_t_swigregister, METH_O, NULL},
-	 { "vinteger2d_t_swiginit", vinteger2d_t_swiginit, METH_VARARGS, NULL},
-	 { "vector_longinteger_t_iterator", _wrap_vector_longinteger_t_iterator, METH_O, "vector_longinteger_t_iterator(vector_longinteger_t self) -> SwigPyIterator"},
-	 { "vector_longinteger_t___nonzero__", _wrap_vector_longinteger_t___nonzero__, METH_O, "vector_longinteger_t___nonzero__(vector_longinteger_t self) -> bool"},
-	 { "vector_longinteger_t___bool__", _wrap_vector_longinteger_t___bool__, METH_O, "vector_longinteger_t___bool__(vector_longinteger_t self) -> bool"},
-	 { "vector_longinteger_t___len__", _wrap_vector_longinteger_t___len__, METH_O, "vector_longinteger_t___len__(vector_longinteger_t self) -> std::vector< unsigned long >::size_type"},
-	 { "vector_longinteger_t___getslice__", _wrap_vector_longinteger_t___getslice__, METH_VARARGS, "vector_longinteger_t___getslice__(vector_longinteger_t self, std::vector< unsigned long >::difference_type i, std::vector< unsigned long >::difference_type j) -> vector_longinteger_t"},
-	 { "vector_longinteger_t___setslice__", _wrap_vector_longinteger_t___setslice__, METH_VARARGS, "\n"
-		"vector_longinteger_t___setslice__(vector_longinteger_t self, std::vector< unsigned long >::difference_type i, std::vector< unsigned long >::difference_type j)\n"
-		"vector_longinteger_t___setslice__(vector_longinteger_t self, std::vector< unsigned long >::difference_type i, std::vector< unsigned long >::difference_type j, vector_longinteger_t v)\n"
-		""},
-	 { "vector_longinteger_t___delslice__", _wrap_vector_longinteger_t___delslice__, METH_VARARGS, "vector_longinteger_t___delslice__(vector_longinteger_t self, std::vector< unsigned long >::difference_type i, std::vector< unsigned long >::difference_type j)"},
-	 { "vector_longinteger_t___delitem__", _wrap_vector_longinteger_t___delitem__, METH_VARARGS, "\n"
-		"vector_longinteger_t___delitem__(vector_longinteger_t self, std::vector< unsigned long >::difference_type i)\n"
-		"vector_longinteger_t___delitem__(vector_longinteger_t self, SWIGPY_SLICEOBJECT * slice)\n"
-		""},
-	 { "vector_longinteger_t___getitem__", _wrap_vector_longinteger_t___getitem__, METH_VARARGS, "\n"
-		"vector_longinteger_t___getitem__(vector_longinteger_t self, SWIGPY_SLICEOBJECT * slice) -> vector_longinteger_t\n"
-		"vector_longinteger_t___getitem__(vector_longinteger_t self, std::vector< unsigned long >::difference_type i) -> std::vector< unsigned long >::value_type const &\n"
-		""},
-	 { "vector_longinteger_t___setitem__", _wrap_vector_longinteger_t___setitem__, METH_VARARGS, "\n"
-		"vector_longinteger_t___setitem__(vector_longinteger_t self, SWIGPY_SLICEOBJECT * slice, vector_longinteger_t v)\n"
-		"vector_longinteger_t___setitem__(vector_longinteger_t self, SWIGPY_SLICEOBJECT * slice)\n"
-		"vector_longinteger_t___setitem__(vector_longinteger_t self, std::vector< unsigned long >::difference_type i, std::vector< unsigned long >::value_type const & x)\n"
-		""},
-	 { "vector_longinteger_t_pop", _wrap_vector_longinteger_t_pop, METH_O, "vector_longinteger_t_pop(vector_longinteger_t self) -> std::vector< unsigned long >::value_type"},
-	 { "vector_longinteger_t_append", _wrap_vector_longinteger_t_append, METH_VARARGS, "vector_longinteger_t_append(vector_longinteger_t self, std::vector< unsigned long >::value_type const & x)"},
-	 { "vector_longinteger_t_empty", _wrap_vector_longinteger_t_empty, METH_O, "vector_longinteger_t_empty(vector_longinteger_t self) -> bool"},
-	 { "vector_longinteger_t_size", _wrap_vector_longinteger_t_size, METH_O, "vector_longinteger_t_size(vector_longinteger_t self) -> std::vector< unsigned long >::size_type"},
-	 { "vector_longinteger_t_swap", _wrap_vector_longinteger_t_swap, METH_VARARGS, "vector_longinteger_t_swap(vector_longinteger_t self, vector_longinteger_t v)"},
-	 { "vector_longinteger_t_begin", _wrap_vector_longinteger_t_begin, METH_O, "vector_longinteger_t_begin(vector_longinteger_t self) -> std::vector< unsigned long >::iterator"},
-	 { "vector_longinteger_t_end", _wrap_vector_longinteger_t_end, METH_O, "vector_longinteger_t_end(vector_longinteger_t self) -> std::vector< unsigned long >::iterator"},
-	 { "vector_longinteger_t_rbegin", _wrap_vector_longinteger_t_rbegin, METH_O, "vector_longinteger_t_rbegin(vector_longinteger_t self) -> std::vector< unsigned long >::reverse_iterator"},
-	 { "vector_longinteger_t_rend", _wrap_vector_longinteger_t_rend, METH_O, "vector_longinteger_t_rend(vector_longinteger_t self) -> std::vector< unsigned long >::reverse_iterator"},
-	 { "vector_longinteger_t_clear", _wrap_vector_longinteger_t_clear, METH_O, "vector_longinteger_t_clear(vector_longinteger_t self)"},
-	 { "vector_longinteger_t_get_allocator", _wrap_vector_longinteger_t_get_allocator, METH_O, "vector_longinteger_t_get_allocator(vector_longinteger_t self) -> std::vector< unsigned long >::allocator_type"},
-	 { "vector_longinteger_t_pop_back", _wrap_vector_longinteger_t_pop_back, METH_O, "vector_longinteger_t_pop_back(vector_longinteger_t self)"},
-	 { "vector_longinteger_t_erase", _wrap_vector_longinteger_t_erase, METH_VARARGS, "\n"
-		"vector_longinteger_t_erase(vector_longinteger_t self, std::vector< unsigned long >::iterator pos) -> std::vector< unsigned long >::iterator\n"
-		"vector_longinteger_t_erase(vector_longinteger_t self, std::vector< unsigned long >::iterator first, std::vector< unsigned long >::iterator last) -> std::vector< unsigned long >::iterator\n"
-		""},
-	 { "new_vector_longinteger_t", _wrap_new_vector_longinteger_t, METH_VARARGS, "\n"
-		"vector_longinteger_t()\n"
-		"vector_longinteger_t(vector_longinteger_t other)\n"
-		"vector_longinteger_t(std::vector< unsigned long >::size_type size)\n"
-		"new_vector_longinteger_t(std::vector< unsigned long >::size_type size, std::vector< unsigned long >::value_type const & value) -> vector_longinteger_t\n"
-		""},
-	 { "vector_longinteger_t_push_back", _wrap_vector_longinteger_t_push_back, METH_VARARGS, "vector_longinteger_t_push_back(vector_longinteger_t self, std::vector< unsigned long >::value_type const & x)"},
-	 { "vector_longinteger_t_front", _wrap_vector_longinteger_t_front, METH_O, "vector_longinteger_t_front(vector_longinteger_t self) -> std::vector< unsigned long >::value_type const &"},
-	 { "vector_longinteger_t_back", _wrap_vector_longinteger_t_back, METH_O, "vector_longinteger_t_back(vector_longinteger_t self) -> std::vector< unsigned long >::value_type const &"},
-	 { "vector_longinteger_t_assign", _wrap_vector_longinteger_t_assign, METH_VARARGS, "vector_longinteger_t_assign(vector_longinteger_t self, std::vector< unsigned long >::size_type n, std::vector< unsigned long >::value_type const & x)"},
-	 { "vector_longinteger_t_resize", _wrap_vector_longinteger_t_resize, METH_VARARGS, "\n"
-		"vector_longinteger_t_resize(vector_longinteger_t self, std::vector< unsigned long >::size_type new_size)\n"
-		"vector_longinteger_t_resize(vector_longinteger_t self, std::vector< unsigned long >::size_type new_size, std::vector< unsigned long >::value_type const & x)\n"
-		""},
-	 { "vector_longinteger_t_insert", _wrap_vector_longinteger_t_insert, METH_VARARGS, "\n"
-		"vector_longinteger_t_insert(vector_longinteger_t self, std::vector< unsigned long >::iterator pos, std::vector< unsigned long >::value_type const & x) -> std::vector< unsigned long >::iterator\n"
-		"vector_longinteger_t_insert(vector_longinteger_t self, std::vector< unsigned long >::iterator pos, std::vector< unsigned long >::size_type n, std::vector< unsigned long >::value_type const & x)\n"
-		""},
-	 { "vector_longinteger_t_reserve", _wrap_vector_longinteger_t_reserve, METH_VARARGS, "vector_longinteger_t_reserve(vector_longinteger_t self, std::vector< unsigned long >::size_type n)"},
-	 { "vector_longinteger_t_capacity", _wrap_vector_longinteger_t_capacity, METH_O, "vector_longinteger_t_capacity(vector_longinteger_t self) -> std::vector< unsigned long >::size_type"},
-	 { "delete_vector_longinteger_t", _wrap_delete_vector_longinteger_t, METH_O, "delete_vector_longinteger_t(vector_longinteger_t self)"},
-	 { "vector_longinteger_t_swigregister", vector_longinteger_t_swigregister, METH_O, NULL},
-	 { "vector_longinteger_t_swiginit", vector_longinteger_t_swiginit, METH_VARARGS, NULL},
-	 { "vector_complex_t_iterator", _wrap_vector_complex_t_iterator, METH_O, "vector_complex_t_iterator(vector_complex_t self) -> SwigPyIterator"},
-	 { "vector_complex_t___nonzero__", _wrap_vector_complex_t___nonzero__, METH_O, "vector_complex_t___nonzero__(vector_complex_t self) -> bool"},
-	 { "vector_complex_t___bool__", _wrap_vector_complex_t___bool__, METH_O, "vector_complex_t___bool__(vector_complex_t self) -> bool"},
-	 { "vector_complex_t___len__", _wrap_vector_complex_t___len__, METH_O, "vector_complex_t___len__(vector_complex_t self) -> std::vector< std::complex< double > >::size_type"},
-	 { "vector_complex_t___getslice__", _wrap_vector_complex_t___getslice__, METH_VARARGS, "vector_complex_t___getslice__(vector_complex_t self, std::vector< std::complex< double > >::difference_type i, std::vector< std::complex< double > >::difference_type j) -> vector_complex_t"},
-	 { "vector_complex_t___setslice__", _wrap_vector_complex_t___setslice__, METH_VARARGS, "\n"
-		"vector_complex_t___setslice__(vector_complex_t self, std::vector< std::complex< double > >::difference_type i, std::vector< std::complex< double > >::difference_type j)\n"
-		"vector_complex_t___setslice__(vector_complex_t self, std::vector< std::complex< double > >::difference_type i, std::vector< std::complex< double > >::difference_type j, vector_complex_t v)\n"
+static PyMethodDef SwigMethods[] = {
+	 { "delete_SwigPyIterator", _wrap_delete_SwigPyIterator, METH_O, "delete_SwigPyIterator(SwigPyIterator self)"},
+	 { "SwigPyIterator_value", _wrap_SwigPyIterator_value, METH_O, "SwigPyIterator_value(SwigPyIterator self) -> PyObject *"},
+	 { "SwigPyIterator_incr", _wrap_SwigPyIterator_incr, METH_VARARGS, "SwigPyIterator_incr(SwigPyIterator self, size_t n=1) -> SwigPyIterator"},
+	 { "SwigPyIterator_decr", _wrap_SwigPyIterator_decr, METH_VARARGS, "SwigPyIterator_decr(SwigPyIterator self, size_t n=1) -> SwigPyIterator"},
+	 { "SwigPyIterator_distance", _wrap_SwigPyIterator_distance, METH_VARARGS, "SwigPyIterator_distance(SwigPyIterator self, SwigPyIterator x) -> ptrdiff_t"},
+	 { "SwigPyIterator_equal", _wrap_SwigPyIterator_equal, METH_VARARGS, "SwigPyIterator_equal(SwigPyIterator self, SwigPyIterator x) -> bool"},
+	 { "SwigPyIterator_copy", _wrap_SwigPyIterator_copy, METH_O, "SwigPyIterator_copy(SwigPyIterator self) -> SwigPyIterator"},
+	 { "SwigPyIterator_next", _wrap_SwigPyIterator_next, METH_O, "SwigPyIterator_next(SwigPyIterator self) -> PyObject *"},
+	 { "SwigPyIterator___next__", _wrap_SwigPyIterator___next__, METH_O, "SwigPyIterator___next__(SwigPyIterator self) -> PyObject *"},
+	 { "SwigPyIterator_previous", _wrap_SwigPyIterator_previous, METH_O, "SwigPyIterator_previous(SwigPyIterator self) -> PyObject *"},
+	 { "SwigPyIterator_advance", _wrap_SwigPyIterator_advance, METH_VARARGS, "SwigPyIterator_advance(SwigPyIterator self, ptrdiff_t n) -> SwigPyIterator"},
+	 { "SwigPyIterator___eq__", _wrap_SwigPyIterator___eq__, METH_VARARGS, "SwigPyIterator___eq__(SwigPyIterator self, SwigPyIterator x) -> bool"},
+	 { "SwigPyIterator___ne__", _wrap_SwigPyIterator___ne__, METH_VARARGS, "SwigPyIterator___ne__(SwigPyIterator self, SwigPyIterator x) -> bool"},
+	 { "SwigPyIterator___iadd__", _wrap_SwigPyIterator___iadd__, METH_VARARGS, "SwigPyIterator___iadd__(SwigPyIterator self, ptrdiff_t n) -> SwigPyIterator"},
+	 { "SwigPyIterator___isub__", _wrap_SwigPyIterator___isub__, METH_VARARGS, "SwigPyIterator___isub__(SwigPyIterator self, ptrdiff_t n) -> SwigPyIterator"},
+	 { "SwigPyIterator___add__", _wrap_SwigPyIterator___add__, METH_VARARGS, "SwigPyIterator___add__(SwigPyIterator self, ptrdiff_t n) -> SwigPyIterator"},
+	 { "SwigPyIterator___sub__", _wrap_SwigPyIterator___sub__, METH_VARARGS, "\n"
+		"SwigPyIterator___sub__(SwigPyIterator self, ptrdiff_t n) -> SwigPyIterator\n"
+		"SwigPyIterator___sub__(SwigPyIterator self, SwigPyIterator x) -> ptrdiff_t\n"
 		""},
-	 { "vector_complex_t___delslice__", _wrap_vector_complex_t___delslice__, METH_VARARGS, "vector_complex_t___delslice__(vector_complex_t self, std::vector< std::complex< double > >::difference_type i, std::vector< std::complex< double > >::difference_type j)"},
-	 { "vector_complex_t___delitem__", _wrap_vector_complex_t___delitem__, METH_VARARGS, "\n"
-		"vector_complex_t___delitem__(vector_complex_t self, std::vector< std::complex< double > >::difference_type i)\n"
-		"vector_complex_t___delitem__(vector_complex_t self, SWIGPY_SLICEOBJECT * slice)\n"
+	 { "SwigPyIterator_swigregister", SwigPyIterator_swigregister, METH_O, NULL},
+	 { "vdouble1d_t_iterator", _wrap_vdouble1d_t_iterator, METH_O, "vdouble1d_t_iterator(vdouble1d_t self) -> SwigPyIterator"},
+	 { "vdouble1d_t___nonzero__", _wrap_vdouble1d_t___nonzero__, METH_O, "vdouble1d_t___nonzero__(vdouble1d_t self) -> bool"},
+	 { "vdouble1d_t___bool__", _wrap_vdouble1d_t___bool__, METH_O, "vdouble1d_t___bool__(vdouble1d_t self) -> bool"},
+	 { "vdouble1d_t___len__", _wrap_vdouble1d_t___len__, METH_O, "vdouble1d_t___len__(vdouble1d_t self) -> std::vector< double >::size_type"},
+	 { "vdouble1d_t___getslice__", _wrap_vdouble1d_t___getslice__, METH_VARARGS, "vdouble1d_t___getslice__(vdouble1d_t self, std::vector< double >::difference_type i, std::vector< double >::difference_type j) -> vdouble1d_t"},
+	 { "vdouble1d_t___setslice__", _wrap_vdouble1d_t___setslice__, METH_VARARGS, "\n"
+		"vdouble1d_t___setslice__(vdouble1d_t self, std::vector< double >::difference_type i, std::vector< double >::difference_type j)\n"
+		"vdouble1d_t___setslice__(vdouble1d_t self, std::vector< double >::difference_type i, std::vector< double >::difference_type j, vdouble1d_t v)\n"
 		""},
-	 { "vector_complex_t___getitem__", _wrap_vector_complex_t___getitem__, METH_VARARGS, "\n"
-		"vector_complex_t___getitem__(vector_complex_t self, SWIGPY_SLICEOBJECT * slice) -> vector_complex_t\n"
-		"vector_complex_t___getitem__(vector_complex_t self, std::vector< std::complex< double > >::difference_type i) -> std::vector< std::complex< double > >::value_type const &\n"
+	 { "vdouble1d_t___delslice__", _wrap_vdouble1d_t___delslice__, METH_VARARGS, "vdouble1d_t___delslice__(vdouble1d_t self, std::vector< double >::difference_type i, std::vector< double >::difference_type j)"},
+	 { "vdouble1d_t___delitem__", _wrap_vdouble1d_t___delitem__, METH_VARARGS, "\n"
+		"vdouble1d_t___delitem__(vdouble1d_t self, std::vector< double >::difference_type i)\n"
+		"vdouble1d_t___delitem__(vdouble1d_t self, SWIGPY_SLICEOBJECT * slice)\n"
 		""},
-	 { "vector_complex_t___setitem__", _wrap_vector_complex_t___setitem__, METH_VARARGS, "\n"
-		"vector_complex_t___setitem__(vector_complex_t self, SWIGPY_SLICEOBJECT * slice, vector_complex_t v)\n"
-		"vector_complex_t___setitem__(vector_complex_t self, SWIGPY_SLICEOBJECT * slice)\n"
-		"vector_complex_t___setitem__(vector_complex_t self, std::vector< std::complex< double > >::difference_type i, std::vector< std::complex< double > >::value_type const & x)\n"
+	 { "vdouble1d_t___getitem__", _wrap_vdouble1d_t___getitem__, METH_VARARGS, "\n"
+		"vdouble1d_t___getitem__(vdouble1d_t self, SWIGPY_SLICEOBJECT * slice) -> vdouble1d_t\n"
+		"vdouble1d_t___getitem__(vdouble1d_t self, std::vector< double >::difference_type i) -> std::vector< double >::value_type const &\n"
 		""},
-	 { "vector_complex_t_pop", _wrap_vector_complex_t_pop, METH_O, "vector_complex_t_pop(vector_complex_t self) -> std::vector< std::complex< double > >::value_type"},
-	 { "vector_complex_t_append", _wrap_vector_complex_t_append, METH_VARARGS, "vector_complex_t_append(vector_complex_t self, std::vector< std::complex< double > >::value_type const & x)"},
-	 { "vector_complex_t_empty", _wrap_vector_complex_t_empty, METH_O, "vector_complex_t_empty(vector_complex_t self) -> bool"},
-	 { "vector_complex_t_size", _wrap_vector_complex_t_size, METH_O, "vector_complex_t_size(vector_complex_t self) -> std::vector< std::complex< double > >::size_type"},
-	 { "vector_complex_t_swap", _wrap_vector_complex_t_swap, METH_VARARGS, "vector_complex_t_swap(vector_complex_t self, vector_complex_t v)"},
-	 { "vector_complex_t_begin", _wrap_vector_complex_t_begin, METH_O, "vector_complex_t_begin(vector_complex_t self) -> std::vector< std::complex< double > >::iterator"},
-	 { "vector_complex_t_end", _wrap_vector_complex_t_end, METH_O, "vector_complex_t_end(vector_complex_t self) -> std::vector< std::complex< double > >::iterator"},
-	 { "vector_complex_t_rbegin", _wrap_vector_complex_t_rbegin, METH_O, "vector_complex_t_rbegin(vector_complex_t self) -> std::vector< std::complex< double > >::reverse_iterator"},
-	 { "vector_complex_t_rend", _wrap_vector_complex_t_rend, METH_O, "vector_complex_t_rend(vector_complex_t self) -> std::vector< std::complex< double > >::reverse_iterator"},
-	 { "vector_complex_t_clear", _wrap_vector_complex_t_clear, METH_O, "vector_complex_t_clear(vector_complex_t self)"},
-	 { "vector_complex_t_get_allocator", _wrap_vector_complex_t_get_allocator, METH_O, "vector_complex_t_get_allocator(vector_complex_t self) -> std::vector< std::complex< double > >::allocator_type"},
-	 { "vector_complex_t_pop_back", _wrap_vector_complex_t_pop_back, METH_O, "vector_complex_t_pop_back(vector_complex_t self)"},
-	 { "vector_complex_t_erase", _wrap_vector_complex_t_erase, METH_VARARGS, "\n"
-		"vector_complex_t_erase(vector_complex_t self, std::vector< std::complex< double > >::iterator pos) -> std::vector< std::complex< double > >::iterator\n"
-		"vector_complex_t_erase(vector_complex_t self, std::vector< std::complex< double > >::iterator first, std::vector< std::complex< double > >::iterator last) -> std::vector< std::complex< double > >::iterator\n"
+	 { "vdouble1d_t___setitem__", _wrap_vdouble1d_t___setitem__, METH_VARARGS, "\n"
+		"vdouble1d_t___setitem__(vdouble1d_t self, SWIGPY_SLICEOBJECT * slice, vdouble1d_t v)\n"
+		"vdouble1d_t___setitem__(vdouble1d_t self, SWIGPY_SLICEOBJECT * slice)\n"
+		"vdouble1d_t___setitem__(vdouble1d_t self, std::vector< double >::difference_type i, std::vector< double >::value_type const & x)\n"
 		""},
-	 { "new_vector_complex_t", _wrap_new_vector_complex_t, METH_VARARGS, "\n"
-		"vector_complex_t()\n"
-		"vector_complex_t(vector_complex_t other)\n"
-		"vector_complex_t(std::vector< std::complex< double > >::size_type size)\n"
-		"new_vector_complex_t(std::vector< std::complex< double > >::size_type size, std::vector< std::complex< double > >::value_type const & value) -> vector_complex_t\n"
+	 { "vdouble1d_t_pop", _wrap_vdouble1d_t_pop, METH_O, "vdouble1d_t_pop(vdouble1d_t self) -> std::vector< double >::value_type"},
+	 { "vdouble1d_t_append", _wrap_vdouble1d_t_append, METH_VARARGS, "vdouble1d_t_append(vdouble1d_t self, std::vector< double >::value_type const & x)"},
+	 { "vdouble1d_t_empty", _wrap_vdouble1d_t_empty, METH_O, "vdouble1d_t_empty(vdouble1d_t self) -> bool"},
+	 { "vdouble1d_t_size", _wrap_vdouble1d_t_size, METH_O, "vdouble1d_t_size(vdouble1d_t self) -> std::vector< double >::size_type"},
+	 { "vdouble1d_t_swap", _wrap_vdouble1d_t_swap, METH_VARARGS, "vdouble1d_t_swap(vdouble1d_t self, vdouble1d_t v)"},
+	 { "vdouble1d_t_begin", _wrap_vdouble1d_t_begin, METH_O, "vdouble1d_t_begin(vdouble1d_t self) -> std::vector< double >::iterator"},
+	 { "vdouble1d_t_end", _wrap_vdouble1d_t_end, METH_O, "vdouble1d_t_end(vdouble1d_t self) -> std::vector< double >::iterator"},
+	 { "vdouble1d_t_rbegin", _wrap_vdouble1d_t_rbegin, METH_O, "vdouble1d_t_rbegin(vdouble1d_t self) -> std::vector< double >::reverse_iterator"},
+	 { "vdouble1d_t_rend", _wrap_vdouble1d_t_rend, METH_O, "vdouble1d_t_rend(vdouble1d_t self) -> std::vector< double >::reverse_iterator"},
+	 { "vdouble1d_t_clear", _wrap_vdouble1d_t_clear, METH_O, "vdouble1d_t_clear(vdouble1d_t self)"},
+	 { "vdouble1d_t_get_allocator", _wrap_vdouble1d_t_get_allocator, METH_O, "vdouble1d_t_get_allocator(vdouble1d_t self) -> std::vector< double >::allocator_type"},
+	 { "vdouble1d_t_pop_back", _wrap_vdouble1d_t_pop_back, METH_O, "vdouble1d_t_pop_back(vdouble1d_t self)"},
+	 { "vdouble1d_t_erase", _wrap_vdouble1d_t_erase, METH_VARARGS, "\n"
+		"vdouble1d_t_erase(vdouble1d_t self, std::vector< double >::iterator pos) -> std::vector< double >::iterator\n"
+		"vdouble1d_t_erase(vdouble1d_t self, std::vector< double >::iterator first, std::vector< double >::iterator last) -> std::vector< double >::iterator\n"
 		""},
-	 { "vector_complex_t_push_back", _wrap_vector_complex_t_push_back, METH_VARARGS, "vector_complex_t_push_back(vector_complex_t self, std::vector< std::complex< double > >::value_type const & x)"},
-	 { "vector_complex_t_front", _wrap_vector_complex_t_front, METH_O, "vector_complex_t_front(vector_complex_t self) -> std::vector< std::complex< double > >::value_type const &"},
-	 { "vector_complex_t_back", _wrap_vector_complex_t_back, METH_O, "vector_complex_t_back(vector_complex_t self) -> std::vector< std::complex< double > >::value_type const &"},
-	 { "vector_complex_t_assign", _wrap_vector_complex_t_assign, METH_VARARGS, "vector_complex_t_assign(vector_complex_t self, std::vector< std::complex< double > >::size_type n, std::vector< std::complex< double > >::value_type const & x)"},
-	 { "vector_complex_t_resize", _wrap_vector_complex_t_resize, METH_VARARGS, "\n"
-		"vector_complex_t_resize(vector_complex_t self, std::vector< std::complex< double > >::size_type new_size)\n"
-		"vector_complex_t_resize(vector_complex_t self, std::vector< std::complex< double > >::size_type new_size, std::vector< std::complex< double > >::value_type const & x)\n"
+	 { "new_vdouble1d_t", _wrap_new_vdouble1d_t, METH_VARARGS, "\n"
+		"vdouble1d_t()\n"
+		"vdouble1d_t(vdouble1d_t other)\n"
+		"vdouble1d_t(std::vector< double >::size_type size)\n"
+		"new_vdouble1d_t(std::vector< double >::size_type size, std::vector< double >::value_type const & value) -> vdouble1d_t\n"
 		""},
-	 { "vector_complex_t_insert", _wrap_vector_complex_t_insert, METH_VARARGS, "\n"
-		"vector_complex_t_insert(vector_complex_t self, std::vector< std::complex< double > >::iterator pos, std::vector< std::complex< double > >::value_type const & x) -> std::vector< std::complex< double > >::iterator\n"
-		"vector_complex_t_insert(vector_complex_t self, std::vector< std::complex< double > >::iterator pos, std::vector< std::complex< double > >::size_type n, std::vector< std::complex< double > >::value_type const & x)\n"
+	 { "vdouble1d_t_push_back", _wrap_vdouble1d_t_push_back, METH_VARARGS, "vdouble1d_t_push_back(vdouble1d_t self, std::vector< double >::value_type const & x)"},
+	 { "vdouble1d_t_front", _wrap_vdouble1d_t_front, METH_O, "vdouble1d_t_front(vdouble1d_t self) -> std::vector< double >::value_type const &"},
+	 { "vdouble1d_t_back", _wrap_vdouble1d_t_back, METH_O, "vdouble1d_t_back(vdouble1d_t self) -> std::vector< double >::value_type const &"},
+	 { "vdouble1d_t_assign", _wrap_vdouble1d_t_assign, METH_VARARGS, "vdouble1d_t_assign(vdouble1d_t self, std::vector< double >::size_type n, std::vector< double >::value_type const & x)"},
+	 { "vdouble1d_t_resize", _wrap_vdouble1d_t_resize, METH_VARARGS, "\n"
+		"vdouble1d_t_resize(vdouble1d_t self, std::vector< double >::size_type new_size)\n"
+		"vdouble1d_t_resize(vdouble1d_t self, std::vector< double >::size_type new_size, std::vector< double >::value_type const & x)\n"
 		""},
-	 { "vector_complex_t_reserve", _wrap_vector_complex_t_reserve, METH_VARARGS, "vector_complex_t_reserve(vector_complex_t self, std::vector< std::complex< double > >::size_type n)"},
-	 { "vector_complex_t_capacity", _wrap_vector_complex_t_capacity, METH_O, "vector_complex_t_capacity(vector_complex_t self) -> std::vector< std::complex< double > >::size_type"},
-	 { "delete_vector_complex_t", _wrap_delete_vector_complex_t, METH_O, "delete_vector_complex_t(vector_complex_t self)"},
-	 { "vector_complex_t_swigregister", vector_complex_t_swigregister, METH_O, NULL},
-	 { "vector_complex_t_swiginit", vector_complex_t_swiginit, METH_VARARGS, NULL},
-	 { "vector_string_t_iterator", _wrap_vector_string_t_iterator, METH_O, "vector_string_t_iterator(vector_string_t self) -> SwigPyIterator"},
-	 { "vector_string_t___nonzero__", _wrap_vector_string_t___nonzero__, METH_O, "vector_string_t___nonzero__(vector_string_t self) -> bool"},
-	 { "vector_string_t___bool__", _wrap_vector_string_t___bool__, METH_O, "vector_string_t___bool__(vector_string_t self) -> bool"},
-	 { "vector_string_t___len__", _wrap_vector_string_t___len__, METH_O, "vector_string_t___len__(vector_string_t self) -> std::vector< std::string >::size_type"},
-	 { "vector_string_t___getslice__", _wrap_vector_string_t___getslice__, METH_VARARGS, "vector_string_t___getslice__(vector_string_t self, std::vector< std::string >::difference_type i, std::vector< std::string >::difference_type j) -> vector_string_t"},
-	 { "vector_string_t___setslice__", _wrap_vector_string_t___setslice__, METH_VARARGS, "\n"
-		"vector_string_t___setslice__(vector_string_t self, std::vector< std::string >::difference_type i, std::vector< std::string >::difference_type j)\n"
-		"vector_string_t___setslice__(vector_string_t self, std::vector< std::string >::difference_type i, std::vector< std::string >::difference_type j, vector_string_t v)\n"
+	 { "vdouble1d_t_insert", _wrap_vdouble1d_t_insert, METH_VARARGS, "\n"
+		"vdouble1d_t_insert(vdouble1d_t self, std::vector< double >::iterator pos, std::vector< double >::value_type const & x) -> std::vector< double >::iterator\n"
+		"vdouble1d_t_insert(vdouble1d_t self, std::vector< double >::iterator pos, std::vector< double >::size_type n, std::vector< double >::value_type const & x)\n"
 		""},
-	 { "vector_string_t___delslice__", _wrap_vector_string_t___delslice__, METH_VARARGS, "vector_string_t___delslice__(vector_string_t self, std::vector< std::string >::difference_type i, std::vector< std::string >::difference_type j)"},
-	 { "vector_string_t___delitem__", _wrap_vector_string_t___delitem__, METH_VARARGS, "\n"
-		"vector_string_t___delitem__(vector_string_t self, std::vector< std::string >::difference_type i)\n"
-		"vector_string_t___delitem__(vector_string_t self, SWIGPY_SLICEOBJECT * slice)\n"
+	 { "vdouble1d_t_reserve", _wrap_vdouble1d_t_reserve, METH_VARARGS, "vdouble1d_t_reserve(vdouble1d_t self, std::vector< double >::size_type n)"},
+	 { "vdouble1d_t_capacity", _wrap_vdouble1d_t_capacity, METH_O, "vdouble1d_t_capacity(vdouble1d_t self) -> std::vector< double >::size_type"},
+	 { "delete_vdouble1d_t", _wrap_delete_vdouble1d_t, METH_O, "delete_vdouble1d_t(vdouble1d_t self)"},
+	 { "vdouble1d_t_swigregister", vdouble1d_t_swigregister, METH_O, NULL},
+	 { "vdouble1d_t_swiginit", vdouble1d_t_swiginit, METH_VARARGS, NULL},
+	 { "vdouble2d_t_iterator", _wrap_vdouble2d_t_iterator, METH_O, "vdouble2d_t_iterator(vdouble2d_t self) -> SwigPyIterator"},
+	 { "vdouble2d_t___nonzero__", _wrap_vdouble2d_t___nonzero__, METH_O, "vdouble2d_t___nonzero__(vdouble2d_t self) -> bool"},
+	 { "vdouble2d_t___bool__", _wrap_vdouble2d_t___bool__, METH_O, "vdouble2d_t___bool__(vdouble2d_t self) -> bool"},
+	 { "vdouble2d_t___len__", _wrap_vdouble2d_t___len__, METH_O, "vdouble2d_t___len__(vdouble2d_t self) -> std::vector< std::vector< double > >::size_type"},
+	 { "vdouble2d_t___getslice__", _wrap_vdouble2d_t___getslice__, METH_VARARGS, "vdouble2d_t___getslice__(vdouble2d_t self, std::vector< std::vector< double > >::difference_type i, std::vector< std::vector< double > >::difference_type j) -> vdouble2d_t"},
+	 { "vdouble2d_t___setslice__", _wrap_vdouble2d_t___setslice__, METH_VARARGS, "\n"
+		"vdouble2d_t___setslice__(vdouble2d_t self, std::vector< std::vector< double > >::difference_type i, std::vector< std::vector< double > >::difference_type j)\n"
+		"vdouble2d_t___setslice__(vdouble2d_t self, std::vector< std::vector< double > >::difference_type i, std::vector< std::vector< double > >::difference_type j, vdouble2d_t v)\n"
 		""},
-	 { "vector_string_t___getitem__", _wrap_vector_string_t___getitem__, METH_VARARGS, "\n"
-		"vector_string_t___getitem__(vector_string_t self, SWIGPY_SLICEOBJECT * slice) -> vector_string_t\n"
-		"vector_string_t___getitem__(vector_string_t self, std::vector< std::string >::difference_type i) -> std::vector< std::string >::value_type const &\n"
+	 { "vdouble2d_t___delslice__", _wrap_vdouble2d_t___delslice__, METH_VARARGS, "vdouble2d_t___delslice__(vdouble2d_t self, std::vector< std::vector< double > >::difference_type i, std::vector< std::vector< double > >::difference_type j)"},
+	 { "vdouble2d_t___delitem__", _wrap_vdouble2d_t___delitem__, METH_VARARGS, "\n"
+		"vdouble2d_t___delitem__(vdouble2d_t self, std::vector< std::vector< double > >::difference_type i)\n"
+		"vdouble2d_t___delitem__(vdouble2d_t self, SWIGPY_SLICEOBJECT * slice)\n"
 		""},
-	 { "vector_string_t___setitem__", _wrap_vector_string_t___setitem__, METH_VARARGS, "\n"
-		"vector_string_t___setitem__(vector_string_t self, SWIGPY_SLICEOBJECT * slice, vector_string_t v)\n"
-		"vector_string_t___setitem__(vector_string_t self, SWIGPY_SLICEOBJECT * slice)\n"
-		"vector_string_t___setitem__(vector_string_t self, std::vector< std::string >::difference_type i, std::vector< std::string >::value_type const & x)\n"
+	 { "vdouble2d_t___getitem__", _wrap_vdouble2d_t___getitem__, METH_VARARGS, "\n"
+		"vdouble2d_t___getitem__(vdouble2d_t self, SWIGPY_SLICEOBJECT * slice) -> vdouble2d_t\n"
+		"vdouble2d_t___getitem__(vdouble2d_t self, std::vector< std::vector< double > >::difference_type i) -> vdouble1d_t\n"
 		""},
-	 { "vector_string_t_pop", _wrap_vector_string_t_pop, METH_O, "vector_string_t_pop(vector_string_t self) -> std::vector< std::string >::value_type"},
-	 { "vector_string_t_append", _wrap_vector_string_t_append, METH_VARARGS, "vector_string_t_append(vector_string_t self, std::vector< std::string >::value_type const & x)"},
-	 { "vector_string_t_empty", _wrap_vector_string_t_empty, METH_O, "vector_string_t_empty(vector_string_t self) -> bool"},
-	 { "vector_string_t_size", _wrap_vector_string_t_size, METH_O, "vector_string_t_size(vector_string_t self) -> std::vector< std::string >::size_type"},
-	 { "vector_string_t_swap", _wrap_vector_string_t_swap, METH_VARARGS, "vector_string_t_swap(vector_string_t self, vector_string_t v)"},
-	 { "vector_string_t_begin", _wrap_vector_string_t_begin, METH_O, "vector_string_t_begin(vector_string_t self) -> std::vector< std::string >::iterator"},
-	 { "vector_string_t_end", _wrap_vector_string_t_end, METH_O, "vector_string_t_end(vector_string_t self) -> std::vector< std::string >::iterator"},
-	 { "vector_string_t_rbegin", _wrap_vector_string_t_rbegin, METH_O, "vector_string_t_rbegin(vector_string_t self) -> std::vector< std::string >::reverse_iterator"},
-	 { "vector_string_t_rend", _wrap_vector_string_t_rend, METH_O, "vector_string_t_rend(vector_string_t self) -> std::vector< std::string >::reverse_iterator"},
-	 { "vector_string_t_clear", _wrap_vector_string_t_clear, METH_O, "vector_string_t_clear(vector_string_t self)"},
-	 { "vector_string_t_get_allocator", _wrap_vector_string_t_get_allocator, METH_O, "vector_string_t_get_allocator(vector_string_t self) -> std::vector< std::string >::allocator_type"},
-	 { "vector_string_t_pop_back", _wrap_vector_string_t_pop_back, METH_O, "vector_string_t_pop_back(vector_string_t self)"},
-	 { "vector_string_t_erase", _wrap_vector_string_t_erase, METH_VARARGS, "\n"
-		"vector_string_t_erase(vector_string_t self, std::vector< std::string >::iterator pos) -> std::vector< std::string >::iterator\n"
-		"vector_string_t_erase(vector_string_t self, std::vector< std::string >::iterator first, std::vector< std::string >::iterator last) -> std::vector< std::string >::iterator\n"
+	 { "vdouble2d_t___setitem__", _wrap_vdouble2d_t___setitem__, METH_VARARGS, "\n"
+		"vdouble2d_t___setitem__(vdouble2d_t self, SWIGPY_SLICEOBJECT * slice, vdouble2d_t v)\n"
+		"vdouble2d_t___setitem__(vdouble2d_t self, SWIGPY_SLICEOBJECT * slice)\n"
+		"vdouble2d_t___setitem__(vdouble2d_t self, std::vector< std::vector< double > >::difference_type i, vdouble1d_t x)\n"
 		""},
-	 { "new_vector_string_t", _wrap_new_vector_string_t, METH_VARARGS, "\n"
-		"vector_string_t()\n"
-		"vector_string_t(vector_string_t other)\n"
-		"vector_string_t(std::vector< std::string >::size_type size)\n"
-		"new_vector_string_t(std::vector< std::string >::size_type size, std::vector< std::string >::value_type const & value) -> vector_string_t\n"
+	 { "vdouble2d_t_pop", _wrap_vdouble2d_t_pop, METH_O, "vdouble2d_t_pop(vdouble2d_t self) -> vdouble1d_t"},
+	 { "vdouble2d_t_append", _wrap_vdouble2d_t_append, METH_VARARGS, "vdouble2d_t_append(vdouble2d_t self, vdouble1d_t x)"},
+	 { "vdouble2d_t_empty", _wrap_vdouble2d_t_empty, METH_O, "vdouble2d_t_empty(vdouble2d_t self) -> bool"},
+	 { "vdouble2d_t_size", _wrap_vdouble2d_t_size, METH_O, "vdouble2d_t_size(vdouble2d_t self) -> std::vector< std::vector< double > >::size_type"},
+	 { "vdouble2d_t_swap", _wrap_vdouble2d_t_swap, METH_VARARGS, "vdouble2d_t_swap(vdouble2d_t self, vdouble2d_t v)"},
+	 { "vdouble2d_t_begin", _wrap_vdouble2d_t_begin, METH_O, "vdouble2d_t_begin(vdouble2d_t self) -> std::vector< std::vector< double > >::iterator"},
+	 { "vdouble2d_t_end", _wrap_vdouble2d_t_end, METH_O, "vdouble2d_t_end(vdouble2d_t self) -> std::vector< std::vector< double > >::iterator"},
+	 { "vdouble2d_t_rbegin", _wrap_vdouble2d_t_rbegin, METH_O, "vdouble2d_t_rbegin(vdouble2d_t self) -> std::vector< std::vector< double > >::reverse_iterator"},
+	 { "vdouble2d_t_rend", _wrap_vdouble2d_t_rend, METH_O, "vdouble2d_t_rend(vdouble2d_t self) -> std::vector< std::vector< double > >::reverse_iterator"},
+	 { "vdouble2d_t_clear", _wrap_vdouble2d_t_clear, METH_O, "vdouble2d_t_clear(vdouble2d_t self)"},
+	 { "vdouble2d_t_get_allocator", _wrap_vdouble2d_t_get_allocator, METH_O, "vdouble2d_t_get_allocator(vdouble2d_t self) -> std::vector< std::vector< double > >::allocator_type"},
+	 { "vdouble2d_t_pop_back", _wrap_vdouble2d_t_pop_back, METH_O, "vdouble2d_t_pop_back(vdouble2d_t self)"},
+	 { "vdouble2d_t_erase", _wrap_vdouble2d_t_erase, METH_VARARGS, "\n"
+		"vdouble2d_t_erase(vdouble2d_t self, std::vector< std::vector< double > >::iterator pos) -> std::vector< std::vector< double > >::iterator\n"
+		"vdouble2d_t_erase(vdouble2d_t self, std::vector< std::vector< double > >::iterator first, std::vector< std::vector< double > >::iterator last) -> std::vector< std::vector< double > >::iterator\n"
 		""},
-	 { "vector_string_t_push_back", _wrap_vector_string_t_push_back, METH_VARARGS, "vector_string_t_push_back(vector_string_t self, std::vector< std::string >::value_type const & x)"},
-	 { "vector_string_t_front", _wrap_vector_string_t_front, METH_O, "vector_string_t_front(vector_string_t self) -> std::vector< std::string >::value_type const &"},
-	 { "vector_string_t_back", _wrap_vector_string_t_back, METH_O, "vector_string_t_back(vector_string_t self) -> std::vector< std::string >::value_type const &"},
-	 { "vector_string_t_assign", _wrap_vector_string_t_assign, METH_VARARGS, "vector_string_t_assign(vector_string_t self, std::vector< std::string >::size_type n, std::vector< std::string >::value_type const & x)"},
-	 { "vector_string_t_resize", _wrap_vector_string_t_resize, METH_VARARGS, "\n"
-		"vector_string_t_resize(vector_string_t self, std::vector< std::string >::size_type new_size)\n"
-		"vector_string_t_resize(vector_string_t self, std::vector< std::string >::size_type new_size, std::vector< std::string >::value_type const & x)\n"
+	 { "new_vdouble2d_t", _wrap_new_vdouble2d_t, METH_VARARGS, "\n"
+		"vdouble2d_t()\n"
+		"vdouble2d_t(vdouble2d_t other)\n"
+		"vdouble2d_t(std::vector< std::vector< double > >::size_type size)\n"
+		"new_vdouble2d_t(std::vector< std::vector< double > >::size_type size, vdouble1d_t value) -> vdouble2d_t\n"
 		""},
-	 { "vector_string_t_insert", _wrap_vector_string_t_insert, METH_VARARGS, "\n"
-		"vector_string_t_insert(vector_string_t self, std::vector< std::string >::iterator pos, std::vector< std::string >::value_type const & x) -> std::vector< std::string >::iterator\n"
-		"vector_string_t_insert(vector_string_t self, std::vector< std::string >::iterator pos, std::vector< std::string >::size_type n, std::vector< std::string >::value_type const & x)\n"
+	 { "vdouble2d_t_push_back", _wrap_vdouble2d_t_push_back, METH_VARARGS, "vdouble2d_t_push_back(vdouble2d_t self, vdouble1d_t x)"},
+	 { "vdouble2d_t_front", _wrap_vdouble2d_t_front, METH_O, "vdouble2d_t_front(vdouble2d_t self) -> vdouble1d_t"},
+	 { "vdouble2d_t_back", _wrap_vdouble2d_t_back, METH_O, "vdouble2d_t_back(vdouble2d_t self) -> vdouble1d_t"},
+	 { "vdouble2d_t_assign", _wrap_vdouble2d_t_assign, METH_VARARGS, "vdouble2d_t_assign(vdouble2d_t self, std::vector< std::vector< double > >::size_type n, vdouble1d_t x)"},
+	 { "vdouble2d_t_resize", _wrap_vdouble2d_t_resize, METH_VARARGS, "\n"
+		"vdouble2d_t_resize(vdouble2d_t self, std::vector< std::vector< double > >::size_type new_size)\n"
+		"vdouble2d_t_resize(vdouble2d_t self, std::vector< std::vector< double > >::size_type new_size, vdouble1d_t x)\n"
 		""},
-	 { "vector_string_t_reserve", _wrap_vector_string_t_reserve, METH_VARARGS, "vector_string_t_reserve(vector_string_t self, std::vector< std::string >::size_type n)"},
-	 { "vector_string_t_capacity", _wrap_vector_string_t_capacity, METH_O, "vector_string_t_capacity(vector_string_t self) -> std::vector< std::string >::size_type"},
-	 { "delete_vector_string_t", _wrap_delete_vector_string_t, METH_O, "delete_vector_string_t(vector_string_t self)"},
-	 { "vector_string_t_swigregister", vector_string_t_swigregister, METH_O, NULL},
-	 { "vector_string_t_swiginit", vector_string_t_swiginit, METH_VARARGS, NULL},
-	 { "map_string_double_t_iterator", _wrap_map_string_double_t_iterator, METH_O, "map_string_double_t_iterator(map_string_double_t self) -> SwigPyIterator"},
-	 { "map_string_double_t___nonzero__", _wrap_map_string_double_t___nonzero__, METH_O, "map_string_double_t___nonzero__(map_string_double_t self) -> bool"},
-	 { "map_string_double_t___bool__", _wrap_map_string_double_t___bool__, METH_O, "map_string_double_t___bool__(map_string_double_t self) -> bool"},
-	 { "map_string_double_t___len__", _wrap_map_string_double_t___len__, METH_O, "map_string_double_t___len__(map_string_double_t self) -> std::map< std::string,double >::size_type"},
-	 { "map_string_double_t___getitem__", _wrap_map_string_double_t___getitem__, METH_VARARGS, "map_string_double_t___getitem__(map_string_double_t self, std::map< std::string,double >::key_type const & key) -> std::map< std::string,double >::mapped_type const &"},
-	 { "map_string_double_t___delitem__", _wrap_map_string_double_t___delitem__, METH_VARARGS, "map_string_double_t___delitem__(map_string_double_t self, std::map< std::string,double >::key_type const & key)"},
-	 { "map_string_double_t_has_key", _wrap_map_string_double_t_has_key, METH_VARARGS, "map_string_double_t_has_key(map_string_double_t self, std::map< std::string,double >::key_type const & key) -> bool"},
-	 { "map_string_double_t_keys", _wrap_map_string_double_t_keys, METH_O, "map_string_double_t_keys(map_string_double_t self) -> PyObject *"},
-	 { "map_string_double_t_values", _wrap_map_string_double_t_values, METH_O, "map_string_double_t_values(map_string_double_t self) -> PyObject *"},
-	 { "map_string_double_t_items", _wrap_map_string_double_t_items, METH_O, "map_string_double_t_items(map_string_double_t self) -> PyObject *"},
-	 { "map_string_double_t___contains__", _wrap_map_string_double_t___contains__, METH_VARARGS, "map_string_double_t___contains__(map_string_double_t self, std::map< std::string,double >::key_type const & key) -> bool"},
-	 { "map_string_double_t_key_iterator", _wrap_map_string_double_t_key_iterator, METH_O, "map_string_double_t_key_iterator(map_string_double_t self) -> SwigPyIterator"},
-	 { "map_string_double_t_value_iterator", _wrap_map_string_double_t_value_iterator, METH_O, "map_string_double_t_value_iterator(map_string_double_t self) -> SwigPyIterator"},
-	 { "map_string_double_t___setitem__", _wrap_map_string_double_t___setitem__, METH_VARARGS, "\n"
-		"map_string_double_t___setitem__(map_string_double_t self, std::map< std::string,double >::key_type const & key)\n"
-		"map_string_double_t___setitem__(map_string_double_t self, std::map< std::string,double >::key_type const & key, std::map< std::string,double >::mapped_type const & x)\n"
+	 { "vdouble2d_t_insert", _wrap_vdouble2d_t_insert, METH_VARARGS, "\n"
+		"vdouble2d_t_insert(vdouble2d_t self, std::vector< std::vector< double > >::iterator pos, vdouble1d_t x) -> std::vector< std::vector< double > >::iterator\n"
+		"vdouble2d_t_insert(vdouble2d_t self, std::vector< std::vector< double > >::iterator pos, std::vector< std::vector< double > >::size_type n, vdouble1d_t x)\n"
 		""},
-	 { "map_string_double_t_asdict", _wrap_map_string_double_t_asdict, METH_O, "map_string_double_t_asdict(map_string_double_t self) -> PyObject *"},
-	 { "new_map_string_double_t", _wrap_new_map_string_double_t, METH_VARARGS, "\n"
-		"map_string_double_t(std::less< std::string > const & other)\n"
-		"map_string_double_t()\n"
-		"new_map_string_double_t(map_string_double_t other) -> map_string_double_t\n"
+	 { "vdouble2d_t_reserve", _wrap_vdouble2d_t_reserve, METH_VARARGS, "vdouble2d_t_reserve(vdouble2d_t self, std::vector< std::vector< double > >::size_type n)"},
+	 { "vdouble2d_t_capacity", _wrap_vdouble2d_t_capacity, METH_O, "vdouble2d_t_capacity(vdouble2d_t self) -> std::vector< std::vector< double > >::size_type"},
+	 { "delete_vdouble2d_t", _wrap_delete_vdouble2d_t, METH_O, "delete_vdouble2d_t(vdouble2d_t self)"},
+	 { "vdouble2d_t_swigregister", vdouble2d_t_swigregister, METH_O, NULL},
+	 { "vdouble2d_t_swiginit", vdouble2d_t_swiginit, METH_VARARGS, NULL},
+	 { "vector_integer_t_iterator", _wrap_vector_integer_t_iterator, METH_O, "vector_integer_t_iterator(vector_integer_t self) -> SwigPyIterator"},
+	 { "vector_integer_t___nonzero__", _wrap_vector_integer_t___nonzero__, METH_O, "vector_integer_t___nonzero__(vector_integer_t self) -> bool"},
+	 { "vector_integer_t___bool__", _wrap_vector_integer_t___bool__, METH_O, "vector_integer_t___bool__(vector_integer_t self) -> bool"},
+	 { "vector_integer_t___len__", _wrap_vector_integer_t___len__, METH_O, "vector_integer_t___len__(vector_integer_t self) -> std::vector< int >::size_type"},
+	 { "vector_integer_t___getslice__", _wrap_vector_integer_t___getslice__, METH_VARARGS, "vector_integer_t___getslice__(vector_integer_t self, std::vector< int >::difference_type i, std::vector< int >::difference_type j) -> vector_integer_t"},
+	 { "vector_integer_t___setslice__", _wrap_vector_integer_t___setslice__, METH_VARARGS, "\n"
+		"vector_integer_t___setslice__(vector_integer_t self, std::vector< int >::difference_type i, std::vector< int >::difference_type j)\n"
+		"vector_integer_t___setslice__(vector_integer_t self, std::vector< int >::difference_type i, std::vector< int >::difference_type j, vector_integer_t v)\n"
 		""},
-	 { "map_string_double_t_empty", _wrap_map_string_double_t_empty, METH_O, "map_string_double_t_empty(map_string_double_t self) -> bool"},
-	 { "map_string_double_t_size", _wrap_map_string_double_t_size, METH_O, "map_string_double_t_size(map_string_double_t self) -> std::map< std::string,double >::size_type"},
-	 { "map_string_double_t_swap", _wrap_map_string_double_t_swap, METH_VARARGS, "map_string_double_t_swap(map_string_double_t self, map_string_double_t v)"},
-	 { "map_string_double_t_begin", _wrap_map_string_double_t_begin, METH_O, "map_string_double_t_begin(map_string_double_t self) -> std::map< std::string,double >::iterator"},
-	 { "map_string_double_t_end", _wrap_map_string_double_t_end, METH_O, "map_string_double_t_end(map_string_double_t self) -> std::map< std::string,double >::iterator"},
-	 { "map_string_double_t_rbegin", _wrap_map_string_double_t_rbegin, METH_O, "map_string_double_t_rbegin(map_string_double_t self) -> std::map< std::string,double >::reverse_iterator"},
-	 { "map_string_double_t_rend", _wrap_map_string_double_t_rend, METH_O, "map_string_double_t_rend(map_string_double_t self) -> std::map< std::string,double >::reverse_iterator"},
-	 { "map_string_double_t_clear", _wrap_map_string_double_t_clear, METH_O, "map_string_double_t_clear(map_string_double_t self)"},
-	 { "map_string_double_t_get_allocator", _wrap_map_string_double_t_get_allocator, METH_O, "map_string_double_t_get_allocator(map_string_double_t self) -> std::map< std::string,double >::allocator_type"},
-	 { "map_string_double_t_count", _wrap_map_string_double_t_count, METH_VARARGS, "map_string_double_t_count(map_string_double_t self, std::map< std::string,double >::key_type const & x) -> std::map< std::string,double >::size_type"},
-	 { "map_string_double_t_erase", _wrap_map_string_double_t_erase, METH_VARARGS, "\n"
-		"map_string_double_t_erase(map_string_double_t self, std::map< std::string,double >::key_type const & x) -> std::map< std::string,double >::size_type\n"
-		"map_string_double_t_erase(map_string_double_t self, std::map< std::string,double >::iterator position)\n"
-		"map_string_double_t_erase(map_string_double_t self, std::map< std::string,double >::iterator first, std::map< std::string,double >::iterator last)\n"
+	 { "vector_integer_t___delslice__", _wrap_vector_integer_t___delslice__, METH_VARARGS, "vector_integer_t___delslice__(vector_integer_t self, std::vector< int >::difference_type i, std::vector< int >::difference_type j)"},
+	 { "vector_integer_t___delitem__", _wrap_vector_integer_t___delitem__, METH_VARARGS, "\n"
+		"vector_integer_t___delitem__(vector_integer_t self, std::vector< int >::difference_type i)\n"
+		"vector_integer_t___delitem__(vector_integer_t self, SWIGPY_SLICEOBJECT * slice)\n"
 		""},
-	 { "map_string_double_t_find", _wrap_map_string_double_t_find, METH_VARARGS, "map_string_double_t_find(map_string_double_t self, std::map< std::string,double >::key_type const & x) -> std::map< std::string,double >::iterator"},
-	 { "map_string_double_t_lower_bound", _wrap_map_string_double_t_lower_bound, METH_VARARGS, "map_string_double_t_lower_bound(map_string_double_t self, std::map< std::string,double >::key_type const & x) -> std::map< std::string,double >::iterator"},
-	 { "map_string_double_t_upper_bound", _wrap_map_string_double_t_upper_bound, METH_VARARGS, "map_string_double_t_upper_bound(map_string_double_t self, std::map< std::string,double >::key_type const & x) -> std::map< std::string,double >::iterator"},
-	 { "delete_map_string_double_t", _wrap_delete_map_string_double_t, METH_O, "delete_map_string_double_t(map_string_double_t self)"},
-	 { "map_string_double_t_swigregister", map_string_double_t_swigregister, METH_O, NULL},
-	 { "map_string_double_t_swiginit", map_string_double_t_swiginit, METH_VARARGS, NULL},
-	 { "new_pvacuum_double_t", _wrap_new_pvacuum_double_t, METH_VARARGS, "\n"
-		"pvacuum_double_t()\n"
-		"pvacuum_double_t(double first, double second)\n"
-		"new_pvacuum_double_t(pvacuum_double_t other) -> pvacuum_double_t\n"
+	 { "vector_integer_t___getitem__", _wrap_vector_integer_t___getitem__, METH_VARARGS, "\n"
+		"vector_integer_t___getitem__(vector_integer_t self, SWIGPY_SLICEOBJECT * slice) -> vector_integer_t\n"
+		"vector_integer_t___getitem__(vector_integer_t self, std::vector< int >::difference_type i) -> std::vector< int >::value_type const &\n"
 		""},
-	 { "pvacuum_double_t_first_set", _wrap_pvacuum_double_t_first_set, METH_VARARGS, "pvacuum_double_t_first_set(pvacuum_double_t self, double first)"},
-	 { "pvacuum_double_t_first_get", _wrap_pvacuum_double_t_first_get, METH_O, "pvacuum_double_t_first_get(pvacuum_double_t self) -> double"},
-	 { "pvacuum_double_t_second_set", _wrap_pvacuum_double_t_second_set, METH_VARARGS, "pvacuum_double_t_second_set(pvacuum_double_t self, double second)"},
-	 { "pvacuum_double_t_second_get", _wrap_pvacuum_double_t_second_get, METH_O, "pvacuum_double_t_second_get(pvacuum_double_t self) -> double"},
-	 { "delete_pvacuum_double_t", _wrap_delete_pvacuum_double_t, METH_O, "delete_pvacuum_double_t(pvacuum_double_t self)"},
-	 { "pvacuum_double_t_swigregister", pvacuum_double_t_swigregister, METH_O, NULL},
-	 { "pvacuum_double_t_swiginit", pvacuum_double_t_swiginit, METH_VARARGS, NULL},
-	 { "vector_pvacuum_double_t_iterator", _wrap_vector_pvacuum_double_t_iterator, METH_O, "vector_pvacuum_double_t_iterator(vector_pvacuum_double_t self) -> SwigPyIterator"},
-	 { "vector_pvacuum_double_t___nonzero__", _wrap_vector_pvacuum_double_t___nonzero__, METH_O, "vector_pvacuum_double_t___nonzero__(vector_pvacuum_double_t self) -> bool"},
-	 { "vector_pvacuum_double_t___bool__", _wrap_vector_pvacuum_double_t___bool__, METH_O, "vector_pvacuum_double_t___bool__(vector_pvacuum_double_t self) -> bool"},
-	 { "vector_pvacuum_double_t___len__", _wrap_vector_pvacuum_double_t___len__, METH_O, "vector_pvacuum_double_t___len__(vector_pvacuum_double_t self) -> std::vector< std::pair< double,double > >::size_type"},
-	 { "vector_pvacuum_double_t___getslice__", _wrap_vector_pvacuum_double_t___getslice__, METH_VARARGS, "vector_pvacuum_double_t___getslice__(vector_pvacuum_double_t self, std::vector< std::pair< double,double > >::difference_type i, std::vector< std::pair< double,double > >::difference_type j) -> vector_pvacuum_double_t"},
-	 { "vector_pvacuum_double_t___setslice__", _wrap_vector_pvacuum_double_t___setslice__, METH_VARARGS, "\n"
-		"vector_pvacuum_double_t___setslice__(vector_pvacuum_double_t self, std::vector< std::pair< double,double > >::difference_type i, std::vector< std::pair< double,double > >::difference_type j)\n"
-		"vector_pvacuum_double_t___setslice__(vector_pvacuum_double_t self, std::vector< std::pair< double,double > >::difference_type i, std::vector< std::pair< double,double > >::difference_type j, vector_pvacuum_double_t v)\n"
+	 { "vector_integer_t___setitem__", _wrap_vector_integer_t___setitem__, METH_VARARGS, "\n"
+		"vector_integer_t___setitem__(vector_integer_t self, SWIGPY_SLICEOBJECT * slice, vector_integer_t v)\n"
+		"vector_integer_t___setitem__(vector_integer_t self, SWIGPY_SLICEOBJECT * slice)\n"
+		"vector_integer_t___setitem__(vector_integer_t self, std::vector< int >::difference_type i, std::vector< int >::value_type const & x)\n"
 		""},
-	 { "vector_pvacuum_double_t___delslice__", _wrap_vector_pvacuum_double_t___delslice__, METH_VARARGS, "vector_pvacuum_double_t___delslice__(vector_pvacuum_double_t self, std::vector< std::pair< double,double > >::difference_type i, std::vector< std::pair< double,double > >::difference_type j)"},
-	 { "vector_pvacuum_double_t___delitem__", _wrap_vector_pvacuum_double_t___delitem__, METH_VARARGS, "\n"
-		"vector_pvacuum_double_t___delitem__(vector_pvacuum_double_t self, std::vector< std::pair< double,double > >::difference_type i)\n"
-		"vector_pvacuum_double_t___delitem__(vector_pvacuum_double_t self, SWIGPY_SLICEOBJECT * slice)\n"
+	 { "vector_integer_t_pop", _wrap_vector_integer_t_pop, METH_O, "vector_integer_t_pop(vector_integer_t self) -> std::vector< int >::value_type"},
+	 { "vector_integer_t_append", _wrap_vector_integer_t_append, METH_VARARGS, "vector_integer_t_append(vector_integer_t self, std::vector< int >::value_type const & x)"},
+	 { "vector_integer_t_empty", _wrap_vector_integer_t_empty, METH_O, "vector_integer_t_empty(vector_integer_t self) -> bool"},
+	 { "vector_integer_t_size", _wrap_vector_integer_t_size, METH_O, "vector_integer_t_size(vector_integer_t self) -> std::vector< int >::size_type"},
+	 { "vector_integer_t_swap", _wrap_vector_integer_t_swap, METH_VARARGS, "vector_integer_t_swap(vector_integer_t self, vector_integer_t v)"},
+	 { "vector_integer_t_begin", _wrap_vector_integer_t_begin, METH_O, "vector_integer_t_begin(vector_integer_t self) -> std::vector< int >::iterator"},
+	 { "vector_integer_t_end", _wrap_vector_integer_t_end, METH_O, "vector_integer_t_end(vector_integer_t self) -> std::vector< int >::iterator"},
+	 { "vector_integer_t_rbegin", _wrap_vector_integer_t_rbegin, METH_O, "vector_integer_t_rbegin(vector_integer_t self) -> std::vector< int >::reverse_iterator"},
+	 { "vector_integer_t_rend", _wrap_vector_integer_t_rend, METH_O, "vector_integer_t_rend(vector_integer_t self) -> std::vector< int >::reverse_iterator"},
+	 { "vector_integer_t_clear", _wrap_vector_integer_t_clear, METH_O, "vector_integer_t_clear(vector_integer_t self)"},
+	 { "vector_integer_t_get_allocator", _wrap_vector_integer_t_get_allocator, METH_O, "vector_integer_t_get_allocator(vector_integer_t self) -> std::vector< int >::allocator_type"},
+	 { "vector_integer_t_pop_back", _wrap_vector_integer_t_pop_back, METH_O, "vector_integer_t_pop_back(vector_integer_t self)"},
+	 { "vector_integer_t_erase", _wrap_vector_integer_t_erase, METH_VARARGS, "\n"
+		"vector_integer_t_erase(vector_integer_t self, std::vector< int >::iterator pos) -> std::vector< int >::iterator\n"
+		"vector_integer_t_erase(vector_integer_t self, std::vector< int >::iterator first, std::vector< int >::iterator last) -> std::vector< int >::iterator\n"
 		""},
-	 { "vector_pvacuum_double_t___getitem__", _wrap_vector_pvacuum_double_t___getitem__, METH_VARARGS, "\n"
-		"vector_pvacuum_double_t___getitem__(vector_pvacuum_double_t self, SWIGPY_SLICEOBJECT * slice) -> vector_pvacuum_double_t\n"
-		"vector_pvacuum_double_t___getitem__(vector_pvacuum_double_t self, std::vector< std::pair< double,double > >::difference_type i) -> pvacuum_double_t\n"
+	 { "new_vector_integer_t", _wrap_new_vector_integer_t, METH_VARARGS, "\n"
+		"vector_integer_t()\n"
+		"vector_integer_t(vector_integer_t other)\n"
+		"vector_integer_t(std::vector< int >::size_type size)\n"
+		"new_vector_integer_t(std::vector< int >::size_type size, std::vector< int >::value_type const & value) -> vector_integer_t\n"
 		""},
-	 { "vector_pvacuum_double_t___setitem__", _wrap_vector_pvacuum_double_t___setitem__, METH_VARARGS, "\n"
-		"vector_pvacuum_double_t___setitem__(vector_pvacuum_double_t self, SWIGPY_SLICEOBJECT * slice, vector_pvacuum_double_t v)\n"
-		"vector_pvacuum_double_t___setitem__(vector_pvacuum_double_t self, SWIGPY_SLICEOBJECT * slice)\n"
-		"vector_pvacuum_double_t___setitem__(vector_pvacuum_double_t self, std::vector< std::pair< double,double > >::difference_type i, pvacuum_double_t x)\n"
+	 { "vector_integer_t_push_back", _wrap_vector_integer_t_push_back, METH_VARARGS, "vector_integer_t_push_back(vector_integer_t self, std::vector< int >::value_type const & x)"},
+	 { "vector_integer_t_front", _wrap_vector_integer_t_front, METH_O, "vector_integer_t_front(vector_integer_t self) -> std::vector< int >::value_type const &"},
+	 { "vector_integer_t_back", _wrap_vector_integer_t_back, METH_O, "vector_integer_t_back(vector_integer_t self) -> std::vector< int >::value_type const &"},
+	 { "vector_integer_t_assign", _wrap_vector_integer_t_assign, METH_VARARGS, "vector_integer_t_assign(vector_integer_t self, std::vector< int >::size_type n, std::vector< int >::value_type const & x)"},
+	 { "vector_integer_t_resize", _wrap_vector_integer_t_resize, METH_VARARGS, "\n"
+		"vector_integer_t_resize(vector_integer_t self, std::vector< int >::size_type new_size)\n"
+		"vector_integer_t_resize(vector_integer_t self, std::vector< int >::size_type new_size, std::vector< int >::value_type const & x)\n"
 		""},
-	 { "vector_pvacuum_double_t_pop", _wrap_vector_pvacuum_double_t_pop, METH_O, "vector_pvacuum_double_t_pop(vector_pvacuum_double_t self) -> pvacuum_double_t"},
-	 { "vector_pvacuum_double_t_append", _wrap_vector_pvacuum_double_t_append, METH_VARARGS, "vector_pvacuum_double_t_append(vector_pvacuum_double_t self, pvacuum_double_t x)"},
-	 { "vector_pvacuum_double_t_empty", _wrap_vector_pvacuum_double_t_empty, METH_O, "vector_pvacuum_double_t_empty(vector_pvacuum_double_t self) -> bool"},
-	 { "vector_pvacuum_double_t_size", _wrap_vector_pvacuum_double_t_size, METH_O, "vector_pvacuum_double_t_size(vector_pvacuum_double_t self) -> std::vector< std::pair< double,double > >::size_type"},
-	 { "vector_pvacuum_double_t_swap", _wrap_vector_pvacuum_double_t_swap, METH_VARARGS, "vector_pvacuum_double_t_swap(vector_pvacuum_double_t self, vector_pvacuum_double_t v)"},
-	 { "vector_pvacuum_double_t_begin", _wrap_vector_pvacuum_double_t_begin, METH_O, "vector_pvacuum_double_t_begin(vector_pvacuum_double_t self) -> std::vector< std::pair< double,double > >::iterator"},
-	 { "vector_pvacuum_double_t_end", _wrap_vector_pvacuum_double_t_end, METH_O, "vector_pvacuum_double_t_end(vector_pvacuum_double_t self) -> std::vector< std::pair< double,double > >::iterator"},
-	 { "vector_pvacuum_double_t_rbegin", _wrap_vector_pvacuum_double_t_rbegin, METH_O, "vector_pvacuum_double_t_rbegin(vector_pvacuum_double_t self) -> std::vector< std::pair< double,double > >::reverse_iterator"},
-	 { "vector_pvacuum_double_t_rend", _wrap_vector_pvacuum_double_t_rend, METH_O, "vector_pvacuum_double_t_rend(vector_pvacuum_double_t self) -> std::vector< std::pair< double,double > >::reverse_iterator"},
-	 { "vector_pvacuum_double_t_clear", _wrap_vector_pvacuum_double_t_clear, METH_O, "vector_pvacuum_double_t_clear(vector_pvacuum_double_t self)"},
-	 { "vector_pvacuum_double_t_get_allocator", _wrap_vector_pvacuum_double_t_get_allocator, METH_O, "vector_pvacuum_double_t_get_allocator(vector_pvacuum_double_t self) -> std::vector< std::pair< double,double > >::allocator_type"},
-	 { "vector_pvacuum_double_t_pop_back", _wrap_vector_pvacuum_double_t_pop_back, METH_O, "vector_pvacuum_double_t_pop_back(vector_pvacuum_double_t self)"},
-	 { "vector_pvacuum_double_t_erase", _wrap_vector_pvacuum_double_t_erase, METH_VARARGS, "\n"
-		"vector_pvacuum_double_t_erase(vector_pvacuum_double_t self, std::vector< std::pair< double,double > >::iterator pos) -> std::vector< std::pair< double,double > >::iterator\n"
-		"vector_pvacuum_double_t_erase(vector_pvacuum_double_t self, std::vector< std::pair< double,double > >::iterator first, std::vector< std::pair< double,double > >::iterator last) -> std::vector< std::pair< double,double > >::iterator\n"
+	 { "vector_integer_t_insert", _wrap_vector_integer_t_insert, METH_VARARGS, "\n"
+		"vector_integer_t_insert(vector_integer_t self, std::vector< int >::iterator pos, std::vector< int >::value_type const & x) -> std::vector< int >::iterator\n"
+		"vector_integer_t_insert(vector_integer_t self, std::vector< int >::iterator pos, std::vector< int >::size_type n, std::vector< int >::value_type const & x)\n"
 		""},
-	 { "new_vector_pvacuum_double_t", _wrap_new_vector_pvacuum_double_t, METH_VARARGS, "\n"
-		"vector_pvacuum_double_t()\n"
-		"vector_pvacuum_double_t(vector_pvacuum_double_t other)\n"
-		"vector_pvacuum_double_t(std::vector< std::pair< double,double > >::size_type size)\n"
-		"new_vector_pvacuum_double_t(std::vector< std::pair< double,double > >::size_type size, pvacuum_double_t value) -> vector_pvacuum_double_t\n"
+	 { "vector_integer_t_reserve", _wrap_vector_integer_t_reserve, METH_VARARGS, "vector_integer_t_reserve(vector_integer_t self, std::vector< int >::size_type n)"},
+	 { "vector_integer_t_capacity", _wrap_vector_integer_t_capacity, METH_O, "vector_integer_t_capacity(vector_integer_t self) -> std::vector< int >::size_type"},
+	 { "delete_vector_integer_t", _wrap_delete_vector_integer_t, METH_O, "delete_vector_integer_t(vector_integer_t self)"},
+	 { "vector_integer_t_swigregister", vector_integer_t_swigregister, METH_O, NULL},
+	 { "vector_integer_t_swiginit", vector_integer_t_swiginit, METH_VARARGS, NULL},
+	 { "vinteger2d_t_iterator", _wrap_vinteger2d_t_iterator, METH_O, "vinteger2d_t_iterator(vinteger2d_t self) -> SwigPyIterator"},
+	 { "vinteger2d_t___nonzero__", _wrap_vinteger2d_t___nonzero__, METH_O, "vinteger2d_t___nonzero__(vinteger2d_t self) -> bool"},
+	 { "vinteger2d_t___bool__", _wrap_vinteger2d_t___bool__, METH_O, "vinteger2d_t___bool__(vinteger2d_t self) -> bool"},
+	 { "vinteger2d_t___len__", _wrap_vinteger2d_t___len__, METH_O, "vinteger2d_t___len__(vinteger2d_t self) -> std::vector< std::vector< int > >::size_type"},
+	 { "vinteger2d_t___getslice__", _wrap_vinteger2d_t___getslice__, METH_VARARGS, "vinteger2d_t___getslice__(vinteger2d_t self, std::vector< std::vector< int > >::difference_type i, std::vector< std::vector< int > >::difference_type j) -> vinteger2d_t"},
+	 { "vinteger2d_t___setslice__", _wrap_vinteger2d_t___setslice__, METH_VARARGS, "\n"
+		"vinteger2d_t___setslice__(vinteger2d_t self, std::vector< std::vector< int > >::difference_type i, std::vector< std::vector< int > >::difference_type j)\n"
+		"vinteger2d_t___setslice__(vinteger2d_t self, std::vector< std::vector< int > >::difference_type i, std::vector< std::vector< int > >::difference_type j, vinteger2d_t v)\n"
 		""},
-	 { "vector_pvacuum_double_t_push_back", _wrap_vector_pvacuum_double_t_push_back, METH_VARARGS, "vector_pvacuum_double_t_push_back(vector_pvacuum_double_t self, pvacuum_double_t x)"},
-	 { "vector_pvacuum_double_t_front", _wrap_vector_pvacuum_double_t_front, METH_O, "vector_pvacuum_double_t_front(vector_pvacuum_double_t self) -> pvacuum_double_t"},
-	 { "vector_pvacuum_double_t_back", _wrap_vector_pvacuum_double_t_back, METH_O, "vector_pvacuum_double_t_back(vector_pvacuum_double_t self) -> pvacuum_double_t"},
-	 { "vector_pvacuum_double_t_assign", _wrap_vector_pvacuum_double_t_assign, METH_VARARGS, "vector_pvacuum_double_t_assign(vector_pvacuum_double_t self, std::vector< std::pair< double,double > >::size_type n, pvacuum_double_t x)"},
-	 { "vector_pvacuum_double_t_resize", _wrap_vector_pvacuum_double_t_resize, METH_VARARGS, "\n"
-		"vector_pvacuum_double_t_resize(vector_pvacuum_double_t self, std::vector< std::pair< double,double > >::size_type new_size)\n"
-		"vector_pvacuum_double_t_resize(vector_pvacuum_double_t self, std::vector< std::pair< double,double > >::size_type new_size, pvacuum_double_t x)\n"
+	 { "vinteger2d_t___delslice__", _wrap_vinteger2d_t___delslice__, METH_VARARGS, "vinteger2d_t___delslice__(vinteger2d_t self, std::vector< std::vector< int > >::difference_type i, std::vector< std::vector< int > >::difference_type j)"},
+	 { "vinteger2d_t___delitem__", _wrap_vinteger2d_t___delitem__, METH_VARARGS, "\n"
+		"vinteger2d_t___delitem__(vinteger2d_t self, std::vector< std::vector< int > >::difference_type i)\n"
+		"vinteger2d_t___delitem__(vinteger2d_t self, SWIGPY_SLICEOBJECT * slice)\n"
 		""},
-	 { "vector_pvacuum_double_t_insert", _wrap_vector_pvacuum_double_t_insert, METH_VARARGS, "\n"
-		"vector_pvacuum_double_t_insert(vector_pvacuum_double_t self, std::vector< std::pair< double,double > >::iterator pos, pvacuum_double_t x) -> std::vector< std::pair< double,double > >::iterator\n"
-		"vector_pvacuum_double_t_insert(vector_pvacuum_double_t self, std::vector< std::pair< double,double > >::iterator pos, std::vector< std::pair< double,double > >::size_type n, pvacuum_double_t x)\n"
+	 { "vinteger2d_t___getitem__", _wrap_vinteger2d_t___getitem__, METH_VARARGS, "\n"
+		"vinteger2d_t___getitem__(vinteger2d_t self, SWIGPY_SLICEOBJECT * slice) -> vinteger2d_t\n"
+		"vinteger2d_t___getitem__(vinteger2d_t self, std::vector< std::vector< int > >::difference_type i) -> vector_integer_t\n"
 		""},
-	 { "vector_pvacuum_double_t_reserve", _wrap_vector_pvacuum_double_t_reserve, METH_VARARGS, "vector_pvacuum_double_t_reserve(vector_pvacuum_double_t self, std::vector< std::pair< double,double > >::size_type n)"},
-	 { "vector_pvacuum_double_t_capacity", _wrap_vector_pvacuum_double_t_capacity, METH_O, "vector_pvacuum_double_t_capacity(vector_pvacuum_double_t self) -> std::vector< std::pair< double,double > >::size_type"},
-	 { "delete_vector_pvacuum_double_t", _wrap_delete_vector_pvacuum_double_t, METH_O, "delete_vector_pvacuum_double_t(vector_pvacuum_double_t self)"},
-	 { "vector_pvacuum_double_t_swigregister", vector_pvacuum_double_t_swigregister, METH_O, NULL},
-	 { "vector_pvacuum_double_t_swiginit", vector_pvacuum_double_t_swiginit, METH_VARARGS, NULL},
-	 { "new_R3", _wrap_new_R3, METH_VARARGS, "\n"
-		"R3(double const x_, double const y_, double const z_)\n"
-		"new_R3() -> R3\n"
+	 { "vinteger2d_t___setitem__", _wrap_vinteger2d_t___setitem__, METH_VARARGS, "\n"
+		"vinteger2d_t___setitem__(vinteger2d_t self, SWIGPY_SLICEOBJECT * slice, vinteger2d_t v)\n"
+		"vinteger2d_t___setitem__(vinteger2d_t self, SWIGPY_SLICEOBJECT * slice)\n"
+		"vinteger2d_t___setitem__(vinteger2d_t self, std::vector< std::vector< int > >::difference_type i, vector_integer_t x)\n"
 		""},
-	 { "R3_x", _wrap_R3_x, METH_O, "R3_x(R3 self) -> double"},
-	 { "R3_y", _wrap_R3_y, METH_O, "R3_y(R3 self) -> double"},
-	 { "R3_z", _wrap_R3_z, METH_O, "R3_z(R3 self) -> double"},
-	 { "R3_setX", _wrap_R3_setX, METH_VARARGS, "R3_setX(R3 self, double const & a)"},
-	 { "R3_setY", _wrap_R3_setY, METH_VARARGS, "R3_setY(R3 self, double const & a)"},
-	 { "R3_setZ", _wrap_R3_setZ, METH_VARARGS, "R3_setZ(R3 self, double const & a)"},
-	 { "R3___iadd__", _wrap_R3___iadd__, METH_VARARGS, "R3___iadd__(R3 self, R3 v) -> R3"},
-	 { "R3___isub__", _wrap_R3___isub__, METH_VARARGS, "R3___isub__(R3 self, R3 v) -> R3"},
-	 { "R3_conj", _wrap_R3_conj, METH_O, "R3_conj(R3 self) -> R3"},
-	 { "R3_mag2", _wrap_R3_mag2, METH_O, "R3_mag2(R3 self) -> double"},
-	 { "R3_mag", _wrap_R3_mag, METH_O, "R3_mag(R3 self) -> double"},
-	 { "R3_magxy2", _wrap_R3_magxy2, METH_O, "R3_magxy2(R3 self) -> double"},
-	 { "R3_magxy", _wrap_R3_magxy, METH_O, "R3_magxy(R3 self) -> double"},
-	 { "R3_unit", _wrap_R3_unit, METH_O, "R3_unit(R3 self) -> R3"},
-	 { "R3_complex", _wrap_R3_complex, METH_O, "R3_complex(R3 self) -> C3"},
-	 { "R3_real", _wrap_R3_real, METH_O, "R3_real(R3 self) -> R3"},
-	 { "R3___eq__", _wrap_R3___eq__, METH_VARARGS, "R3___eq__(R3 self, R3 other) -> bool"},
-	 { "R3___ne__", _wrap_R3___ne__, METH_VARARGS, "R3___ne__(R3 self, R3 other) -> bool"},
-	 { "R3_rotatedY", _wrap_R3_rotatedY, METH_VARARGS, "R3_rotatedY(R3 self, double a) -> R3"},
-	 { "R3_rotatedZ", _wrap_R3_rotatedZ, METH_VARARGS, "R3_rotatedZ(R3 self, double a) -> R3"},
-	 { "delete_R3", _wrap_delete_R3, METH_O, "delete_R3(R3 self)"},
-	 { "R3_swigregister", R3_swigregister, METH_O, NULL},
-	 { "R3_swiginit", R3_swiginit, METH_VARARGS, NULL},
-	 { "new_C3", _wrap_new_C3, METH_VARARGS, "\n"
-		"C3(std::complex< double > const x_, std::complex< double > const y_, std::complex< double > const z_)\n"
-		"new_C3() -> C3\n"
+	 { "vinteger2d_t_pop", _wrap_vinteger2d_t_pop, METH_O, "vinteger2d_t_pop(vinteger2d_t self) -> vector_integer_t"},
+	 { "vinteger2d_t_append", _wrap_vinteger2d_t_append, METH_VARARGS, "vinteger2d_t_append(vinteger2d_t self, vector_integer_t x)"},
+	 { "vinteger2d_t_empty", _wrap_vinteger2d_t_empty, METH_O, "vinteger2d_t_empty(vinteger2d_t self) -> bool"},
+	 { "vinteger2d_t_size", _wrap_vinteger2d_t_size, METH_O, "vinteger2d_t_size(vinteger2d_t self) -> std::vector< std::vector< int > >::size_type"},
+	 { "vinteger2d_t_swap", _wrap_vinteger2d_t_swap, METH_VARARGS, "vinteger2d_t_swap(vinteger2d_t self, vinteger2d_t v)"},
+	 { "vinteger2d_t_begin", _wrap_vinteger2d_t_begin, METH_O, "vinteger2d_t_begin(vinteger2d_t self) -> std::vector< std::vector< int > >::iterator"},
+	 { "vinteger2d_t_end", _wrap_vinteger2d_t_end, METH_O, "vinteger2d_t_end(vinteger2d_t self) -> std::vector< std::vector< int > >::iterator"},
+	 { "vinteger2d_t_rbegin", _wrap_vinteger2d_t_rbegin, METH_O, "vinteger2d_t_rbegin(vinteger2d_t self) -> std::vector< std::vector< int > >::reverse_iterator"},
+	 { "vinteger2d_t_rend", _wrap_vinteger2d_t_rend, METH_O, "vinteger2d_t_rend(vinteger2d_t self) -> std::vector< std::vector< int > >::reverse_iterator"},
+	 { "vinteger2d_t_clear", _wrap_vinteger2d_t_clear, METH_O, "vinteger2d_t_clear(vinteger2d_t self)"},
+	 { "vinteger2d_t_get_allocator", _wrap_vinteger2d_t_get_allocator, METH_O, "vinteger2d_t_get_allocator(vinteger2d_t self) -> std::vector< std::vector< int > >::allocator_type"},
+	 { "vinteger2d_t_pop_back", _wrap_vinteger2d_t_pop_back, METH_O, "vinteger2d_t_pop_back(vinteger2d_t self)"},
+	 { "vinteger2d_t_erase", _wrap_vinteger2d_t_erase, METH_VARARGS, "\n"
+		"vinteger2d_t_erase(vinteger2d_t self, std::vector< std::vector< int > >::iterator pos) -> std::vector< std::vector< int > >::iterator\n"
+		"vinteger2d_t_erase(vinteger2d_t self, std::vector< std::vector< int > >::iterator first, std::vector< std::vector< int > >::iterator last) -> std::vector< std::vector< int > >::iterator\n"
 		""},
-	 { "C3_x", _wrap_C3_x, METH_O, "C3_x(C3 self) -> std::complex< double >"},
-	 { "C3_y", _wrap_C3_y, METH_O, "C3_y(C3 self) -> std::complex< double >"},
-	 { "C3_z", _wrap_C3_z, METH_O, "C3_z(C3 self) -> std::complex< double >"},
-	 { "C3_setX", _wrap_C3_setX, METH_VARARGS, "C3_setX(C3 self, std::complex< double > const & a)"},
-	 { "C3_setY", _wrap_C3_setY, METH_VARARGS, "C3_setY(C3 self, std::complex< double > const & a)"},
-	 { "C3_setZ", _wrap_C3_setZ, METH_VARARGS, "C3_setZ(C3 self, std::complex< double > const & a)"},
-	 { "C3___iadd__", _wrap_C3___iadd__, METH_VARARGS, "C3___iadd__(C3 self, C3 v) -> C3"},
-	 { "C3___isub__", _wrap_C3___isub__, METH_VARARGS, "C3___isub__(C3 self, C3 v) -> C3"},
-	 { "C3_conj", _wrap_C3_conj, METH_O, "C3_conj(C3 self) -> C3"},
-	 { "C3_mag2", _wrap_C3_mag2, METH_O, "C3_mag2(C3 self) -> double"},
-	 { "C3_mag", _wrap_C3_mag, METH_O, "C3_mag(C3 self) -> double"},
-	 { "C3_magxy2", _wrap_C3_magxy2, METH_O, "C3_magxy2(C3 self) -> double"},
-	 { "C3_magxy", _wrap_C3_magxy, METH_O, "C3_magxy(C3 self) -> double"},
-	 { "C3_unit", _wrap_C3_unit, METH_O, "C3_unit(C3 self) -> C3"},
-	 { "C3_complex", _wrap_C3_complex, METH_O, "C3_complex(C3 self) -> C3"},
-	 { "C3_real", _wrap_C3_real, METH_O, "C3_real(C3 self) -> R3"},
-	 { "C3___eq__", _wrap_C3___eq__, METH_VARARGS, "C3___eq__(C3 self, C3 other) -> bool"},
-	 { "C3___ne__", _wrap_C3___ne__, METH_VARARGS, "C3___ne__(C3 self, C3 other) -> bool"},
-	 { "C3_rotatedY", _wrap_C3_rotatedY, METH_VARARGS, "C3_rotatedY(C3 self, double a) -> C3"},
-	 { "C3_rotatedZ", _wrap_C3_rotatedZ, METH_VARARGS, "C3_rotatedZ(C3 self, double a) -> C3"},
-	 { "delete_C3", _wrap_delete_C3, METH_O, "delete_C3(C3 self)"},
-	 { "C3_swigregister", C3_swigregister, METH_O, NULL},
-	 { "C3_swiginit", C3_swiginit, METH_VARARGS, NULL},
-	 { "vector_R3_iterator", _wrap_vector_R3_iterator, METH_O, "vector_R3_iterator(vector_R3 self) -> SwigPyIterator"},
-	 { "vector_R3___nonzero__", _wrap_vector_R3___nonzero__, METH_O, "vector_R3___nonzero__(vector_R3 self) -> bool"},
-	 { "vector_R3___bool__", _wrap_vector_R3___bool__, METH_O, "vector_R3___bool__(vector_R3 self) -> bool"},
-	 { "vector_R3___len__", _wrap_vector_R3___len__, METH_O, "vector_R3___len__(vector_R3 self) -> std::vector< Vec3< double > >::size_type"},
-	 { "vector_R3___getslice__", _wrap_vector_R3___getslice__, METH_VARARGS, "vector_R3___getslice__(vector_R3 self, std::vector< Vec3< double > >::difference_type i, std::vector< Vec3< double > >::difference_type j) -> vector_R3"},
-	 { "vector_R3___setslice__", _wrap_vector_R3___setslice__, METH_VARARGS, "\n"
-		"vector_R3___setslice__(vector_R3 self, std::vector< Vec3< double > >::difference_type i, std::vector< Vec3< double > >::difference_type j)\n"
-		"vector_R3___setslice__(vector_R3 self, std::vector< Vec3< double > >::difference_type i, std::vector< Vec3< double > >::difference_type j, vector_R3 v)\n"
+	 { "new_vinteger2d_t", _wrap_new_vinteger2d_t, METH_VARARGS, "\n"
+		"vinteger2d_t()\n"
+		"vinteger2d_t(vinteger2d_t other)\n"
+		"vinteger2d_t(std::vector< std::vector< int > >::size_type size)\n"
+		"new_vinteger2d_t(std::vector< std::vector< int > >::size_type size, vector_integer_t value) -> vinteger2d_t\n"
 		""},
-	 { "vector_R3___delslice__", _wrap_vector_R3___delslice__, METH_VARARGS, "vector_R3___delslice__(vector_R3 self, std::vector< Vec3< double > >::difference_type i, std::vector< Vec3< double > >::difference_type j)"},
-	 { "vector_R3___delitem__", _wrap_vector_R3___delitem__, METH_VARARGS, "\n"
-		"vector_R3___delitem__(vector_R3 self, std::vector< Vec3< double > >::difference_type i)\n"
-		"vector_R3___delitem__(vector_R3 self, SWIGPY_SLICEOBJECT * slice)\n"
+	 { "vinteger2d_t_push_back", _wrap_vinteger2d_t_push_back, METH_VARARGS, "vinteger2d_t_push_back(vinteger2d_t self, vector_integer_t x)"},
+	 { "vinteger2d_t_front", _wrap_vinteger2d_t_front, METH_O, "vinteger2d_t_front(vinteger2d_t self) -> vector_integer_t"},
+	 { "vinteger2d_t_back", _wrap_vinteger2d_t_back, METH_O, "vinteger2d_t_back(vinteger2d_t self) -> vector_integer_t"},
+	 { "vinteger2d_t_assign", _wrap_vinteger2d_t_assign, METH_VARARGS, "vinteger2d_t_assign(vinteger2d_t self, std::vector< std::vector< int > >::size_type n, vector_integer_t x)"},
+	 { "vinteger2d_t_resize", _wrap_vinteger2d_t_resize, METH_VARARGS, "\n"
+		"vinteger2d_t_resize(vinteger2d_t self, std::vector< std::vector< int > >::size_type new_size)\n"
+		"vinteger2d_t_resize(vinteger2d_t self, std::vector< std::vector< int > >::size_type new_size, vector_integer_t x)\n"
 		""},
-	 { "vector_R3___getitem__", _wrap_vector_R3___getitem__, METH_VARARGS, "\n"
-		"vector_R3___getitem__(vector_R3 self, SWIGPY_SLICEOBJECT * slice) -> vector_R3\n"
-		"vector_R3___getitem__(vector_R3 self, std::vector< Vec3< double > >::difference_type i) -> R3\n"
+	 { "vinteger2d_t_insert", _wrap_vinteger2d_t_insert, METH_VARARGS, "\n"
+		"vinteger2d_t_insert(vinteger2d_t self, std::vector< std::vector< int > >::iterator pos, vector_integer_t x) -> std::vector< std::vector< int > >::iterator\n"
+		"vinteger2d_t_insert(vinteger2d_t self, std::vector< std::vector< int > >::iterator pos, std::vector< std::vector< int > >::size_type n, vector_integer_t x)\n"
+		""},
+	 { "vinteger2d_t_reserve", _wrap_vinteger2d_t_reserve, METH_VARARGS, "vinteger2d_t_reserve(vinteger2d_t self, std::vector< std::vector< int > >::size_type n)"},
+	 { "vinteger2d_t_capacity", _wrap_vinteger2d_t_capacity, METH_O, "vinteger2d_t_capacity(vinteger2d_t self) -> std::vector< std::vector< int > >::size_type"},
+	 { "delete_vinteger2d_t", _wrap_delete_vinteger2d_t, METH_O, "delete_vinteger2d_t(vinteger2d_t self)"},
+	 { "vinteger2d_t_swigregister", vinteger2d_t_swigregister, METH_O, NULL},
+	 { "vinteger2d_t_swiginit", vinteger2d_t_swiginit, METH_VARARGS, NULL},
+	 { "vector_longinteger_t_iterator", _wrap_vector_longinteger_t_iterator, METH_O, "vector_longinteger_t_iterator(vector_longinteger_t self) -> SwigPyIterator"},
+	 { "vector_longinteger_t___nonzero__", _wrap_vector_longinteger_t___nonzero__, METH_O, "vector_longinteger_t___nonzero__(vector_longinteger_t self) -> bool"},
+	 { "vector_longinteger_t___bool__", _wrap_vector_longinteger_t___bool__, METH_O, "vector_longinteger_t___bool__(vector_longinteger_t self) -> bool"},
+	 { "vector_longinteger_t___len__", _wrap_vector_longinteger_t___len__, METH_O, "vector_longinteger_t___len__(vector_longinteger_t self) -> std::vector< unsigned long >::size_type"},
+	 { "vector_longinteger_t___getslice__", _wrap_vector_longinteger_t___getslice__, METH_VARARGS, "vector_longinteger_t___getslice__(vector_longinteger_t self, std::vector< unsigned long >::difference_type i, std::vector< unsigned long >::difference_type j) -> vector_longinteger_t"},
+	 { "vector_longinteger_t___setslice__", _wrap_vector_longinteger_t___setslice__, METH_VARARGS, "\n"
+		"vector_longinteger_t___setslice__(vector_longinteger_t self, std::vector< unsigned long >::difference_type i, std::vector< unsigned long >::difference_type j)\n"
+		"vector_longinteger_t___setslice__(vector_longinteger_t self, std::vector< unsigned long >::difference_type i, std::vector< unsigned long >::difference_type j, vector_longinteger_t v)\n"
 		""},
-	 { "vector_R3___setitem__", _wrap_vector_R3___setitem__, METH_VARARGS, "\n"
-		"vector_R3___setitem__(vector_R3 self, SWIGPY_SLICEOBJECT * slice, vector_R3 v)\n"
-		"vector_R3___setitem__(vector_R3 self, SWIGPY_SLICEOBJECT * slice)\n"
-		"vector_R3___setitem__(vector_R3 self, std::vector< Vec3< double > >::difference_type i, R3 x)\n"
+	 { "vector_longinteger_t___delslice__", _wrap_vector_longinteger_t___delslice__, METH_VARARGS, "vector_longinteger_t___delslice__(vector_longinteger_t self, std::vector< unsigned long >::difference_type i, std::vector< unsigned long >::difference_type j)"},
+	 { "vector_longinteger_t___delitem__", _wrap_vector_longinteger_t___delitem__, METH_VARARGS, "\n"
+		"vector_longinteger_t___delitem__(vector_longinteger_t self, std::vector< unsigned long >::difference_type i)\n"
+		"vector_longinteger_t___delitem__(vector_longinteger_t self, SWIGPY_SLICEOBJECT * slice)\n"
 		""},
-	 { "vector_R3_pop", _wrap_vector_R3_pop, METH_O, "vector_R3_pop(vector_R3 self) -> R3"},
-	 { "vector_R3_append", _wrap_vector_R3_append, METH_VARARGS, "vector_R3_append(vector_R3 self, R3 x)"},
-	 { "vector_R3_empty", _wrap_vector_R3_empty, METH_O, "vector_R3_empty(vector_R3 self) -> bool"},
-	 { "vector_R3_size", _wrap_vector_R3_size, METH_O, "vector_R3_size(vector_R3 self) -> std::vector< Vec3< double > >::size_type"},
-	 { "vector_R3_swap", _wrap_vector_R3_swap, METH_VARARGS, "vector_R3_swap(vector_R3 self, vector_R3 v)"},
-	 { "vector_R3_begin", _wrap_vector_R3_begin, METH_O, "vector_R3_begin(vector_R3 self) -> std::vector< Vec3< double > >::iterator"},
-	 { "vector_R3_end", _wrap_vector_R3_end, METH_O, "vector_R3_end(vector_R3 self) -> std::vector< Vec3< double > >::iterator"},
-	 { "vector_R3_rbegin", _wrap_vector_R3_rbegin, METH_O, "vector_R3_rbegin(vector_R3 self) -> std::vector< Vec3< double > >::reverse_iterator"},
-	 { "vector_R3_rend", _wrap_vector_R3_rend, METH_O, "vector_R3_rend(vector_R3 self) -> std::vector< Vec3< double > >::reverse_iterator"},
-	 { "vector_R3_clear", _wrap_vector_R3_clear, METH_O, "vector_R3_clear(vector_R3 self)"},
-	 { "vector_R3_get_allocator", _wrap_vector_R3_get_allocator, METH_O, "vector_R3_get_allocator(vector_R3 self) -> std::vector< Vec3< double > >::allocator_type"},
-	 { "vector_R3_pop_back", _wrap_vector_R3_pop_back, METH_O, "vector_R3_pop_back(vector_R3 self)"},
-	 { "vector_R3_erase", _wrap_vector_R3_erase, METH_VARARGS, "\n"
-		"vector_R3_erase(vector_R3 self, std::vector< Vec3< double > >::iterator pos) -> std::vector< Vec3< double > >::iterator\n"
-		"vector_R3_erase(vector_R3 self, std::vector< Vec3< double > >::iterator first, std::vector< Vec3< double > >::iterator last) -> std::vector< Vec3< double > >::iterator\n"
+	 { "vector_longinteger_t___getitem__", _wrap_vector_longinteger_t___getitem__, METH_VARARGS, "\n"
+		"vector_longinteger_t___getitem__(vector_longinteger_t self, SWIGPY_SLICEOBJECT * slice) -> vector_longinteger_t\n"
+		"vector_longinteger_t___getitem__(vector_longinteger_t self, std::vector< unsigned long >::difference_type i) -> std::vector< unsigned long >::value_type const &\n"
 		""},
-	 { "new_vector_R3", _wrap_new_vector_R3, METH_VARARGS, "\n"
-		"vector_R3()\n"
-		"vector_R3(vector_R3 other)\n"
-		"vector_R3(std::vector< Vec3< double > >::size_type size)\n"
-		"new_vector_R3(std::vector< Vec3< double > >::size_type size, R3 value) -> vector_R3\n"
+	 { "vector_longinteger_t___setitem__", _wrap_vector_longinteger_t___setitem__, METH_VARARGS, "\n"
+		"vector_longinteger_t___setitem__(vector_longinteger_t self, SWIGPY_SLICEOBJECT * slice, vector_longinteger_t v)\n"
+		"vector_longinteger_t___setitem__(vector_longinteger_t self, SWIGPY_SLICEOBJECT * slice)\n"
+		"vector_longinteger_t___setitem__(vector_longinteger_t self, std::vector< unsigned long >::difference_type i, std::vector< unsigned long >::value_type const & x)\n"
 		""},
-	 { "vector_R3_push_back", _wrap_vector_R3_push_back, METH_VARARGS, "vector_R3_push_back(vector_R3 self, R3 x)"},
-	 { "vector_R3_front", _wrap_vector_R3_front, METH_O, "vector_R3_front(vector_R3 self) -> R3"},
-	 { "vector_R3_back", _wrap_vector_R3_back, METH_O, "vector_R3_back(vector_R3 self) -> R3"},
-	 { "vector_R3_assign", _wrap_vector_R3_assign, METH_VARARGS, "vector_R3_assign(vector_R3 self, std::vector< Vec3< double > >::size_type n, R3 x)"},
-	 { "vector_R3_resize", _wrap_vector_R3_resize, METH_VARARGS, "\n"
-		"vector_R3_resize(vector_R3 self, std::vector< Vec3< double > >::size_type new_size)\n"
-		"vector_R3_resize(vector_R3 self, std::vector< Vec3< double > >::size_type new_size, R3 x)\n"
+	 { "vector_longinteger_t_pop", _wrap_vector_longinteger_t_pop, METH_O, "vector_longinteger_t_pop(vector_longinteger_t self) -> std::vector< unsigned long >::value_type"},
+	 { "vector_longinteger_t_append", _wrap_vector_longinteger_t_append, METH_VARARGS, "vector_longinteger_t_append(vector_longinteger_t self, std::vector< unsigned long >::value_type const & x)"},
+	 { "vector_longinteger_t_empty", _wrap_vector_longinteger_t_empty, METH_O, "vector_longinteger_t_empty(vector_longinteger_t self) -> bool"},
+	 { "vector_longinteger_t_size", _wrap_vector_longinteger_t_size, METH_O, "vector_longinteger_t_size(vector_longinteger_t self) -> std::vector< unsigned long >::size_type"},
+	 { "vector_longinteger_t_swap", _wrap_vector_longinteger_t_swap, METH_VARARGS, "vector_longinteger_t_swap(vector_longinteger_t self, vector_longinteger_t v)"},
+	 { "vector_longinteger_t_begin", _wrap_vector_longinteger_t_begin, METH_O, "vector_longinteger_t_begin(vector_longinteger_t self) -> std::vector< unsigned long >::iterator"},
+	 { "vector_longinteger_t_end", _wrap_vector_longinteger_t_end, METH_O, "vector_longinteger_t_end(vector_longinteger_t self) -> std::vector< unsigned long >::iterator"},
+	 { "vector_longinteger_t_rbegin", _wrap_vector_longinteger_t_rbegin, METH_O, "vector_longinteger_t_rbegin(vector_longinteger_t self) -> std::vector< unsigned long >::reverse_iterator"},
+	 { "vector_longinteger_t_rend", _wrap_vector_longinteger_t_rend, METH_O, "vector_longinteger_t_rend(vector_longinteger_t self) -> std::vector< unsigned long >::reverse_iterator"},
+	 { "vector_longinteger_t_clear", _wrap_vector_longinteger_t_clear, METH_O, "vector_longinteger_t_clear(vector_longinteger_t self)"},
+	 { "vector_longinteger_t_get_allocator", _wrap_vector_longinteger_t_get_allocator, METH_O, "vector_longinteger_t_get_allocator(vector_longinteger_t self) -> std::vector< unsigned long >::allocator_type"},
+	 { "vector_longinteger_t_pop_back", _wrap_vector_longinteger_t_pop_back, METH_O, "vector_longinteger_t_pop_back(vector_longinteger_t self)"},
+	 { "vector_longinteger_t_erase", _wrap_vector_longinteger_t_erase, METH_VARARGS, "\n"
+		"vector_longinteger_t_erase(vector_longinteger_t self, std::vector< unsigned long >::iterator pos) -> std::vector< unsigned long >::iterator\n"
+		"vector_longinteger_t_erase(vector_longinteger_t self, std::vector< unsigned long >::iterator first, std::vector< unsigned long >::iterator last) -> std::vector< unsigned long >::iterator\n"
 		""},
-	 { "vector_R3_insert", _wrap_vector_R3_insert, METH_VARARGS, "\n"
-		"vector_R3_insert(vector_R3 self, std::vector< Vec3< double > >::iterator pos, R3 x) -> std::vector< Vec3< double > >::iterator\n"
-		"vector_R3_insert(vector_R3 self, std::vector< Vec3< double > >::iterator pos, std::vector< Vec3< double > >::size_type n, R3 x)\n"
+	 { "new_vector_longinteger_t", _wrap_new_vector_longinteger_t, METH_VARARGS, "\n"
+		"vector_longinteger_t()\n"
+		"vector_longinteger_t(vector_longinteger_t other)\n"
+		"vector_longinteger_t(std::vector< unsigned long >::size_type size)\n"
+		"new_vector_longinteger_t(std::vector< unsigned long >::size_type size, std::vector< unsigned long >::value_type const & value) -> vector_longinteger_t\n"
 		""},
-	 { "vector_R3_reserve", _wrap_vector_R3_reserve, METH_VARARGS, "vector_R3_reserve(vector_R3 self, std::vector< Vec3< double > >::size_type n)"},
-	 { "vector_R3_capacity", _wrap_vector_R3_capacity, METH_O, "vector_R3_capacity(vector_R3 self) -> std::vector< Vec3< double > >::size_type"},
-	 { "delete_vector_R3", _wrap_delete_vector_R3, METH_O, "delete_vector_R3(vector_R3 self)"},
-	 { "vector_R3_swigregister", vector_R3_swigregister, METH_O, NULL},
-	 { "vector_R3_swiginit", vector_R3_swiginit, METH_VARARGS, NULL},
-	 { "swig_dummy_type_inode_vector_iterator", _wrap_swig_dummy_type_inode_vector_iterator, METH_O, "swig_dummy_type_inode_vector_iterator(swig_dummy_type_inode_vector self) -> SwigPyIterator"},
-	 { "swig_dummy_type_inode_vector___nonzero__", _wrap_swig_dummy_type_inode_vector___nonzero__, METH_O, "swig_dummy_type_inode_vector___nonzero__(swig_dummy_type_inode_vector self) -> bool"},
-	 { "swig_dummy_type_inode_vector___bool__", _wrap_swig_dummy_type_inode_vector___bool__, METH_O, "swig_dummy_type_inode_vector___bool__(swig_dummy_type_inode_vector self) -> bool"},
-	 { "swig_dummy_type_inode_vector___len__", _wrap_swig_dummy_type_inode_vector___len__, METH_O, "swig_dummy_type_inode_vector___len__(swig_dummy_type_inode_vector self) -> std::vector< INode * >::size_type"},
-	 { "swig_dummy_type_inode_vector___getslice__", _wrap_swig_dummy_type_inode_vector___getslice__, METH_VARARGS, "swig_dummy_type_inode_vector___getslice__(swig_dummy_type_inode_vector self, std::vector< INode * >::difference_type i, std::vector< INode * >::difference_type j) -> swig_dummy_type_inode_vector"},
-	 { "swig_dummy_type_inode_vector___setslice__", _wrap_swig_dummy_type_inode_vector___setslice__, METH_VARARGS, "\n"
-		"swig_dummy_type_inode_vector___setslice__(swig_dummy_type_inode_vector self, std::vector< INode * >::difference_type i, std::vector< INode * >::difference_type j)\n"
-		"swig_dummy_type_inode_vector___setslice__(swig_dummy_type_inode_vector self, std::vector< INode * >::difference_type i, std::vector< INode * >::difference_type j, swig_dummy_type_inode_vector v)\n"
+	 { "vector_longinteger_t_push_back", _wrap_vector_longinteger_t_push_back, METH_VARARGS, "vector_longinteger_t_push_back(vector_longinteger_t self, std::vector< unsigned long >::value_type const & x)"},
+	 { "vector_longinteger_t_front", _wrap_vector_longinteger_t_front, METH_O, "vector_longinteger_t_front(vector_longinteger_t self) -> std::vector< unsigned long >::value_type const &"},
+	 { "vector_longinteger_t_back", _wrap_vector_longinteger_t_back, METH_O, "vector_longinteger_t_back(vector_longinteger_t self) -> std::vector< unsigned long >::value_type const &"},
+	 { "vector_longinteger_t_assign", _wrap_vector_longinteger_t_assign, METH_VARARGS, "vector_longinteger_t_assign(vector_longinteger_t self, std::vector< unsigned long >::size_type n, std::vector< unsigned long >::value_type const & x)"},
+	 { "vector_longinteger_t_resize", _wrap_vector_longinteger_t_resize, METH_VARARGS, "\n"
+		"vector_longinteger_t_resize(vector_longinteger_t self, std::vector< unsigned long >::size_type new_size)\n"
+		"vector_longinteger_t_resize(vector_longinteger_t self, std::vector< unsigned long >::size_type new_size, std::vector< unsigned long >::value_type const & x)\n"
 		""},
-	 { "swig_dummy_type_inode_vector___delslice__", _wrap_swig_dummy_type_inode_vector___delslice__, METH_VARARGS, "swig_dummy_type_inode_vector___delslice__(swig_dummy_type_inode_vector self, std::vector< INode * >::difference_type i, std::vector< INode * >::difference_type j)"},
-	 { "swig_dummy_type_inode_vector___delitem__", _wrap_swig_dummy_type_inode_vector___delitem__, METH_VARARGS, "\n"
-		"swig_dummy_type_inode_vector___delitem__(swig_dummy_type_inode_vector self, std::vector< INode * >::difference_type i)\n"
-		"swig_dummy_type_inode_vector___delitem__(swig_dummy_type_inode_vector self, SWIGPY_SLICEOBJECT * slice)\n"
+	 { "vector_longinteger_t_insert", _wrap_vector_longinteger_t_insert, METH_VARARGS, "\n"
+		"vector_longinteger_t_insert(vector_longinteger_t self, std::vector< unsigned long >::iterator pos, std::vector< unsigned long >::value_type const & x) -> std::vector< unsigned long >::iterator\n"
+		"vector_longinteger_t_insert(vector_longinteger_t self, std::vector< unsigned long >::iterator pos, std::vector< unsigned long >::size_type n, std::vector< unsigned long >::value_type const & x)\n"
 		""},
-	 { "swig_dummy_type_inode_vector___getitem__", _wrap_swig_dummy_type_inode_vector___getitem__, METH_VARARGS, "\n"
-		"swig_dummy_type_inode_vector___getitem__(swig_dummy_type_inode_vector self, SWIGPY_SLICEOBJECT * slice) -> swig_dummy_type_inode_vector\n"
-		"swig_dummy_type_inode_vector___getitem__(swig_dummy_type_inode_vector self, std::vector< INode * >::difference_type i) -> INode\n"
+	 { "vector_longinteger_t_reserve", _wrap_vector_longinteger_t_reserve, METH_VARARGS, "vector_longinteger_t_reserve(vector_longinteger_t self, std::vector< unsigned long >::size_type n)"},
+	 { "vector_longinteger_t_capacity", _wrap_vector_longinteger_t_capacity, METH_O, "vector_longinteger_t_capacity(vector_longinteger_t self) -> std::vector< unsigned long >::size_type"},
+	 { "delete_vector_longinteger_t", _wrap_delete_vector_longinteger_t, METH_O, "delete_vector_longinteger_t(vector_longinteger_t self)"},
+	 { "vector_longinteger_t_swigregister", vector_longinteger_t_swigregister, METH_O, NULL},
+	 { "vector_longinteger_t_swiginit", vector_longinteger_t_swiginit, METH_VARARGS, NULL},
+	 { "vector_complex_t_iterator", _wrap_vector_complex_t_iterator, METH_O, "vector_complex_t_iterator(vector_complex_t self) -> SwigPyIterator"},
+	 { "vector_complex_t___nonzero__", _wrap_vector_complex_t___nonzero__, METH_O, "vector_complex_t___nonzero__(vector_complex_t self) -> bool"},
+	 { "vector_complex_t___bool__", _wrap_vector_complex_t___bool__, METH_O, "vector_complex_t___bool__(vector_complex_t self) -> bool"},
+	 { "vector_complex_t___len__", _wrap_vector_complex_t___len__, METH_O, "vector_complex_t___len__(vector_complex_t self) -> std::vector< std::complex< double > >::size_type"},
+	 { "vector_complex_t___getslice__", _wrap_vector_complex_t___getslice__, METH_VARARGS, "vector_complex_t___getslice__(vector_complex_t self, std::vector< std::complex< double > >::difference_type i, std::vector< std::complex< double > >::difference_type j) -> vector_complex_t"},
+	 { "vector_complex_t___setslice__", _wrap_vector_complex_t___setslice__, METH_VARARGS, "\n"
+		"vector_complex_t___setslice__(vector_complex_t self, std::vector< std::complex< double > >::difference_type i, std::vector< std::complex< double > >::difference_type j)\n"
+		"vector_complex_t___setslice__(vector_complex_t self, std::vector< std::complex< double > >::difference_type i, std::vector< std::complex< double > >::difference_type j, vector_complex_t v)\n"
 		""},
-	 { "swig_dummy_type_inode_vector___setitem__", _wrap_swig_dummy_type_inode_vector___setitem__, METH_VARARGS, "\n"
-		"swig_dummy_type_inode_vector___setitem__(swig_dummy_type_inode_vector self, SWIGPY_SLICEOBJECT * slice, swig_dummy_type_inode_vector v)\n"
-		"swig_dummy_type_inode_vector___setitem__(swig_dummy_type_inode_vector self, SWIGPY_SLICEOBJECT * slice)\n"
-		"swig_dummy_type_inode_vector___setitem__(swig_dummy_type_inode_vector self, std::vector< INode * >::difference_type i, INode x)\n"
+	 { "vector_complex_t___delslice__", _wrap_vector_complex_t___delslice__, METH_VARARGS, "vector_complex_t___delslice__(vector_complex_t self, std::vector< std::complex< double > >::difference_type i, std::vector< std::complex< double > >::difference_type j)"},
+	 { "vector_complex_t___delitem__", _wrap_vector_complex_t___delitem__, METH_VARARGS, "\n"
+		"vector_complex_t___delitem__(vector_complex_t self, std::vector< std::complex< double > >::difference_type i)\n"
+		"vector_complex_t___delitem__(vector_complex_t self, SWIGPY_SLICEOBJECT * slice)\n"
 		""},
-	 { "swig_dummy_type_inode_vector_pop", _wrap_swig_dummy_type_inode_vector_pop, METH_O, "swig_dummy_type_inode_vector_pop(swig_dummy_type_inode_vector self) -> INode"},
-	 { "swig_dummy_type_inode_vector_append", _wrap_swig_dummy_type_inode_vector_append, METH_VARARGS, "swig_dummy_type_inode_vector_append(swig_dummy_type_inode_vector self, INode x)"},
-	 { "swig_dummy_type_inode_vector_empty", _wrap_swig_dummy_type_inode_vector_empty, METH_O, "swig_dummy_type_inode_vector_empty(swig_dummy_type_inode_vector self) -> bool"},
-	 { "swig_dummy_type_inode_vector_size", _wrap_swig_dummy_type_inode_vector_size, METH_O, "swig_dummy_type_inode_vector_size(swig_dummy_type_inode_vector self) -> std::vector< INode * >::size_type"},
-	 { "swig_dummy_type_inode_vector_swap", _wrap_swig_dummy_type_inode_vector_swap, METH_VARARGS, "swig_dummy_type_inode_vector_swap(swig_dummy_type_inode_vector self, swig_dummy_type_inode_vector v)"},
-	 { "swig_dummy_type_inode_vector_begin", _wrap_swig_dummy_type_inode_vector_begin, METH_O, "swig_dummy_type_inode_vector_begin(swig_dummy_type_inode_vector self) -> std::vector< INode * >::iterator"},
-	 { "swig_dummy_type_inode_vector_end", _wrap_swig_dummy_type_inode_vector_end, METH_O, "swig_dummy_type_inode_vector_end(swig_dummy_type_inode_vector self) -> std::vector< INode * >::iterator"},
-	 { "swig_dummy_type_inode_vector_rbegin", _wrap_swig_dummy_type_inode_vector_rbegin, METH_O, "swig_dummy_type_inode_vector_rbegin(swig_dummy_type_inode_vector self) -> std::vector< INode * >::reverse_iterator"},
-	 { "swig_dummy_type_inode_vector_rend", _wrap_swig_dummy_type_inode_vector_rend, METH_O, "swig_dummy_type_inode_vector_rend(swig_dummy_type_inode_vector self) -> std::vector< INode * >::reverse_iterator"},
-	 { "swig_dummy_type_inode_vector_clear", _wrap_swig_dummy_type_inode_vector_clear, METH_O, "swig_dummy_type_inode_vector_clear(swig_dummy_type_inode_vector self)"},
-	 { "swig_dummy_type_inode_vector_get_allocator", _wrap_swig_dummy_type_inode_vector_get_allocator, METH_O, "swig_dummy_type_inode_vector_get_allocator(swig_dummy_type_inode_vector self) -> std::vector< INode * >::allocator_type"},
-	 { "swig_dummy_type_inode_vector_pop_back", _wrap_swig_dummy_type_inode_vector_pop_back, METH_O, "swig_dummy_type_inode_vector_pop_back(swig_dummy_type_inode_vector self)"},
-	 { "swig_dummy_type_inode_vector_erase", _wrap_swig_dummy_type_inode_vector_erase, METH_VARARGS, "\n"
-		"swig_dummy_type_inode_vector_erase(swig_dummy_type_inode_vector self, std::vector< INode * >::iterator pos) -> std::vector< INode * >::iterator\n"
-		"swig_dummy_type_inode_vector_erase(swig_dummy_type_inode_vector self, std::vector< INode * >::iterator first, std::vector< INode * >::iterator last) -> std::vector< INode * >::iterator\n"
+	 { "vector_complex_t___getitem__", _wrap_vector_complex_t___getitem__, METH_VARARGS, "\n"
+		"vector_complex_t___getitem__(vector_complex_t self, SWIGPY_SLICEOBJECT * slice) -> vector_complex_t\n"
+		"vector_complex_t___getitem__(vector_complex_t self, std::vector< std::complex< double > >::difference_type i) -> std::vector< std::complex< double > >::value_type const &\n"
 		""},
-	 { "new_swig_dummy_type_inode_vector", _wrap_new_swig_dummy_type_inode_vector, METH_VARARGS, "\n"
-		"swig_dummy_type_inode_vector()\n"
-		"swig_dummy_type_inode_vector(swig_dummy_type_inode_vector other)\n"
-		"swig_dummy_type_inode_vector(std::vector< INode * >::size_type size)\n"
-		"new_swig_dummy_type_inode_vector(std::vector< INode * >::size_type size, INode value) -> swig_dummy_type_inode_vector\n"
+	 { "vector_complex_t___setitem__", _wrap_vector_complex_t___setitem__, METH_VARARGS, "\n"
+		"vector_complex_t___setitem__(vector_complex_t self, SWIGPY_SLICEOBJECT * slice, vector_complex_t v)\n"
+		"vector_complex_t___setitem__(vector_complex_t self, SWIGPY_SLICEOBJECT * slice)\n"
+		"vector_complex_t___setitem__(vector_complex_t self, std::vector< std::complex< double > >::difference_type i, std::vector< std::complex< double > >::value_type const & x)\n"
 		""},
-	 { "swig_dummy_type_inode_vector_push_back", _wrap_swig_dummy_type_inode_vector_push_back, METH_VARARGS, "swig_dummy_type_inode_vector_push_back(swig_dummy_type_inode_vector self, INode x)"},
-	 { "swig_dummy_type_inode_vector_front", _wrap_swig_dummy_type_inode_vector_front, METH_O, "swig_dummy_type_inode_vector_front(swig_dummy_type_inode_vector self) -> INode"},
-	 { "swig_dummy_type_inode_vector_back", _wrap_swig_dummy_type_inode_vector_back, METH_O, "swig_dummy_type_inode_vector_back(swig_dummy_type_inode_vector self) -> INode"},
-	 { "swig_dummy_type_inode_vector_assign", _wrap_swig_dummy_type_inode_vector_assign, METH_VARARGS, "swig_dummy_type_inode_vector_assign(swig_dummy_type_inode_vector self, std::vector< INode * >::size_type n, INode x)"},
-	 { "swig_dummy_type_inode_vector_resize", _wrap_swig_dummy_type_inode_vector_resize, METH_VARARGS, "\n"
-		"swig_dummy_type_inode_vector_resize(swig_dummy_type_inode_vector self, std::vector< INode * >::size_type new_size)\n"
-		"swig_dummy_type_inode_vector_resize(swig_dummy_type_inode_vector self, std::vector< INode * >::size_type new_size, INode x)\n"
+	 { "vector_complex_t_pop", _wrap_vector_complex_t_pop, METH_O, "vector_complex_t_pop(vector_complex_t self) -> std::vector< std::complex< double > >::value_type"},
+	 { "vector_complex_t_append", _wrap_vector_complex_t_append, METH_VARARGS, "vector_complex_t_append(vector_complex_t self, std::vector< std::complex< double > >::value_type const & x)"},
+	 { "vector_complex_t_empty", _wrap_vector_complex_t_empty, METH_O, "vector_complex_t_empty(vector_complex_t self) -> bool"},
+	 { "vector_complex_t_size", _wrap_vector_complex_t_size, METH_O, "vector_complex_t_size(vector_complex_t self) -> std::vector< std::complex< double > >::size_type"},
+	 { "vector_complex_t_swap", _wrap_vector_complex_t_swap, METH_VARARGS, "vector_complex_t_swap(vector_complex_t self, vector_complex_t v)"},
+	 { "vector_complex_t_begin", _wrap_vector_complex_t_begin, METH_O, "vector_complex_t_begin(vector_complex_t self) -> std::vector< std::complex< double > >::iterator"},
+	 { "vector_complex_t_end", _wrap_vector_complex_t_end, METH_O, "vector_complex_t_end(vector_complex_t self) -> std::vector< std::complex< double > >::iterator"},
+	 { "vector_complex_t_rbegin", _wrap_vector_complex_t_rbegin, METH_O, "vector_complex_t_rbegin(vector_complex_t self) -> std::vector< std::complex< double > >::reverse_iterator"},
+	 { "vector_complex_t_rend", _wrap_vector_complex_t_rend, METH_O, "vector_complex_t_rend(vector_complex_t self) -> std::vector< std::complex< double > >::reverse_iterator"},
+	 { "vector_complex_t_clear", _wrap_vector_complex_t_clear, METH_O, "vector_complex_t_clear(vector_complex_t self)"},
+	 { "vector_complex_t_get_allocator", _wrap_vector_complex_t_get_allocator, METH_O, "vector_complex_t_get_allocator(vector_complex_t self) -> std::vector< std::complex< double > >::allocator_type"},
+	 { "vector_complex_t_pop_back", _wrap_vector_complex_t_pop_back, METH_O, "vector_complex_t_pop_back(vector_complex_t self)"},
+	 { "vector_complex_t_erase", _wrap_vector_complex_t_erase, METH_VARARGS, "\n"
+		"vector_complex_t_erase(vector_complex_t self, std::vector< std::complex< double > >::iterator pos) -> std::vector< std::complex< double > >::iterator\n"
+		"vector_complex_t_erase(vector_complex_t self, std::vector< std::complex< double > >::iterator first, std::vector< std::complex< double > >::iterator last) -> std::vector< std::complex< double > >::iterator\n"
 		""},
-	 { "swig_dummy_type_inode_vector_insert", _wrap_swig_dummy_type_inode_vector_insert, METH_VARARGS, "\n"
-		"swig_dummy_type_inode_vector_insert(swig_dummy_type_inode_vector self, std::vector< INode * >::iterator pos, INode x) -> std::vector< INode * >::iterator\n"
-		"swig_dummy_type_inode_vector_insert(swig_dummy_type_inode_vector self, std::vector< INode * >::iterator pos, std::vector< INode * >::size_type n, INode x)\n"
+	 { "new_vector_complex_t", _wrap_new_vector_complex_t, METH_VARARGS, "\n"
+		"vector_complex_t()\n"
+		"vector_complex_t(vector_complex_t other)\n"
+		"vector_complex_t(std::vector< std::complex< double > >::size_type size)\n"
+		"new_vector_complex_t(std::vector< std::complex< double > >::size_type size, std::vector< std::complex< double > >::value_type const & value) -> vector_complex_t\n"
 		""},
-	 { "swig_dummy_type_inode_vector_reserve", _wrap_swig_dummy_type_inode_vector_reserve, METH_VARARGS, "swig_dummy_type_inode_vector_reserve(swig_dummy_type_inode_vector self, std::vector< INode * >::size_type n)"},
-	 { "swig_dummy_type_inode_vector_capacity", _wrap_swig_dummy_type_inode_vector_capacity, METH_O, "swig_dummy_type_inode_vector_capacity(swig_dummy_type_inode_vector self) -> std::vector< INode * >::size_type"},
-	 { "delete_swig_dummy_type_inode_vector", _wrap_delete_swig_dummy_type_inode_vector, METH_O, "delete_swig_dummy_type_inode_vector(swig_dummy_type_inode_vector self)"},
-	 { "swig_dummy_type_inode_vector_swigregister", swig_dummy_type_inode_vector_swigregister, METH_O, NULL},
-	 { "swig_dummy_type_inode_vector_swiginit", swig_dummy_type_inode_vector_swiginit, METH_VARARGS, NULL},
-	 { "swig_dummy_type_const_inode_vector_iterator", _wrap_swig_dummy_type_const_inode_vector_iterator, METH_O, "swig_dummy_type_const_inode_vector_iterator(swig_dummy_type_const_inode_vector self) -> SwigPyIterator"},
-	 { "swig_dummy_type_const_inode_vector___nonzero__", _wrap_swig_dummy_type_const_inode_vector___nonzero__, METH_O, "swig_dummy_type_const_inode_vector___nonzero__(swig_dummy_type_const_inode_vector self) -> bool"},
-	 { "swig_dummy_type_const_inode_vector___bool__", _wrap_swig_dummy_type_const_inode_vector___bool__, METH_O, "swig_dummy_type_const_inode_vector___bool__(swig_dummy_type_const_inode_vector self) -> bool"},
-	 { "swig_dummy_type_const_inode_vector___len__", _wrap_swig_dummy_type_const_inode_vector___len__, METH_O, "swig_dummy_type_const_inode_vector___len__(swig_dummy_type_const_inode_vector self) -> std::vector< INode const * >::size_type"},
-	 { "swig_dummy_type_const_inode_vector___getslice__", _wrap_swig_dummy_type_const_inode_vector___getslice__, METH_VARARGS, "swig_dummy_type_const_inode_vector___getslice__(swig_dummy_type_const_inode_vector self, std::vector< INode const * >::difference_type i, std::vector< INode const * >::difference_type j) -> swig_dummy_type_const_inode_vector"},
-	 { "swig_dummy_type_const_inode_vector___setslice__", _wrap_swig_dummy_type_const_inode_vector___setslice__, METH_VARARGS, "\n"
-		"swig_dummy_type_const_inode_vector___setslice__(swig_dummy_type_const_inode_vector self, std::vector< INode const * >::difference_type i, std::vector< INode const * >::difference_type j)\n"
-		"swig_dummy_type_const_inode_vector___setslice__(swig_dummy_type_const_inode_vector self, std::vector< INode const * >::difference_type i, std::vector< INode const * >::difference_type j, swig_dummy_type_const_inode_vector v)\n"
+	 { "vector_complex_t_push_back", _wrap_vector_complex_t_push_back, METH_VARARGS, "vector_complex_t_push_back(vector_complex_t self, std::vector< std::complex< double > >::value_type const & x)"},
+	 { "vector_complex_t_front", _wrap_vector_complex_t_front, METH_O, "vector_complex_t_front(vector_complex_t self) -> std::vector< std::complex< double > >::value_type const &"},
+	 { "vector_complex_t_back", _wrap_vector_complex_t_back, METH_O, "vector_complex_t_back(vector_complex_t self) -> std::vector< std::complex< double > >::value_type const &"},
+	 { "vector_complex_t_assign", _wrap_vector_complex_t_assign, METH_VARARGS, "vector_complex_t_assign(vector_complex_t self, std::vector< std::complex< double > >::size_type n, std::vector< std::complex< double > >::value_type const & x)"},
+	 { "vector_complex_t_resize", _wrap_vector_complex_t_resize, METH_VARARGS, "\n"
+		"vector_complex_t_resize(vector_complex_t self, std::vector< std::complex< double > >::size_type new_size)\n"
+		"vector_complex_t_resize(vector_complex_t self, std::vector< std::complex< double > >::size_type new_size, std::vector< std::complex< double > >::value_type const & x)\n"
 		""},
-	 { "swig_dummy_type_const_inode_vector___delslice__", _wrap_swig_dummy_type_const_inode_vector___delslice__, METH_VARARGS, "swig_dummy_type_const_inode_vector___delslice__(swig_dummy_type_const_inode_vector self, std::vector< INode const * >::difference_type i, std::vector< INode const * >::difference_type j)"},
-	 { "swig_dummy_type_const_inode_vector___delitem__", _wrap_swig_dummy_type_const_inode_vector___delitem__, METH_VARARGS, "\n"
-		"swig_dummy_type_const_inode_vector___delitem__(swig_dummy_type_const_inode_vector self, std::vector< INode const * >::difference_type i)\n"
-		"swig_dummy_type_const_inode_vector___delitem__(swig_dummy_type_const_inode_vector self, SWIGPY_SLICEOBJECT * slice)\n"
+	 { "vector_complex_t_insert", _wrap_vector_complex_t_insert, METH_VARARGS, "\n"
+		"vector_complex_t_insert(vector_complex_t self, std::vector< std::complex< double > >::iterator pos, std::vector< std::complex< double > >::value_type const & x) -> std::vector< std::complex< double > >::iterator\n"
+		"vector_complex_t_insert(vector_complex_t self, std::vector< std::complex< double > >::iterator pos, std::vector< std::complex< double > >::size_type n, std::vector< std::complex< double > >::value_type const & x)\n"
 		""},
-	 { "swig_dummy_type_const_inode_vector___getitem__", _wrap_swig_dummy_type_const_inode_vector___getitem__, METH_VARARGS, "\n"
-		"swig_dummy_type_const_inode_vector___getitem__(swig_dummy_type_const_inode_vector self, SWIGPY_SLICEOBJECT * slice) -> swig_dummy_type_const_inode_vector\n"
-		"swig_dummy_type_const_inode_vector___getitem__(swig_dummy_type_const_inode_vector self, std::vector< INode const * >::difference_type i) -> INode\n"
+	 { "vector_complex_t_reserve", _wrap_vector_complex_t_reserve, METH_VARARGS, "vector_complex_t_reserve(vector_complex_t self, std::vector< std::complex< double > >::size_type n)"},
+	 { "vector_complex_t_capacity", _wrap_vector_complex_t_capacity, METH_O, "vector_complex_t_capacity(vector_complex_t self) -> std::vector< std::complex< double > >::size_type"},
+	 { "delete_vector_complex_t", _wrap_delete_vector_complex_t, METH_O, "delete_vector_complex_t(vector_complex_t self)"},
+	 { "vector_complex_t_swigregister", vector_complex_t_swigregister, METH_O, NULL},
+	 { "vector_complex_t_swiginit", vector_complex_t_swiginit, METH_VARARGS, NULL},
+	 { "vector_string_t_iterator", _wrap_vector_string_t_iterator, METH_O, "vector_string_t_iterator(vector_string_t self) -> SwigPyIterator"},
+	 { "vector_string_t___nonzero__", _wrap_vector_string_t___nonzero__, METH_O, "vector_string_t___nonzero__(vector_string_t self) -> bool"},
+	 { "vector_string_t___bool__", _wrap_vector_string_t___bool__, METH_O, "vector_string_t___bool__(vector_string_t self) -> bool"},
+	 { "vector_string_t___len__", _wrap_vector_string_t___len__, METH_O, "vector_string_t___len__(vector_string_t self) -> std::vector< std::string >::size_type"},
+	 { "vector_string_t___getslice__", _wrap_vector_string_t___getslice__, METH_VARARGS, "vector_string_t___getslice__(vector_string_t self, std::vector< std::string >::difference_type i, std::vector< std::string >::difference_type j) -> vector_string_t"},
+	 { "vector_string_t___setslice__", _wrap_vector_string_t___setslice__, METH_VARARGS, "\n"
+		"vector_string_t___setslice__(vector_string_t self, std::vector< std::string >::difference_type i, std::vector< std::string >::difference_type j)\n"
+		"vector_string_t___setslice__(vector_string_t self, std::vector< std::string >::difference_type i, std::vector< std::string >::difference_type j, vector_string_t v)\n"
 		""},
-	 { "swig_dummy_type_const_inode_vector___setitem__", _wrap_swig_dummy_type_const_inode_vector___setitem__, METH_VARARGS, "\n"
-		"swig_dummy_type_const_inode_vector___setitem__(swig_dummy_type_const_inode_vector self, SWIGPY_SLICEOBJECT * slice, swig_dummy_type_const_inode_vector v)\n"
-		"swig_dummy_type_const_inode_vector___setitem__(swig_dummy_type_const_inode_vector self, SWIGPY_SLICEOBJECT * slice)\n"
-		"swig_dummy_type_const_inode_vector___setitem__(swig_dummy_type_const_inode_vector self, std::vector< INode const * >::difference_type i, INode x)\n"
+	 { "vector_string_t___delslice__", _wrap_vector_string_t___delslice__, METH_VARARGS, "vector_string_t___delslice__(vector_string_t self, std::vector< std::string >::difference_type i, std::vector< std::string >::difference_type j)"},
+	 { "vector_string_t___delitem__", _wrap_vector_string_t___delitem__, METH_VARARGS, "\n"
+		"vector_string_t___delitem__(vector_string_t self, std::vector< std::string >::difference_type i)\n"
+		"vector_string_t___delitem__(vector_string_t self, SWIGPY_SLICEOBJECT * slice)\n"
 		""},
-	 { "swig_dummy_type_const_inode_vector_pop", _wrap_swig_dummy_type_const_inode_vector_pop, METH_O, "swig_dummy_type_const_inode_vector_pop(swig_dummy_type_const_inode_vector self) -> INode"},
-	 { "swig_dummy_type_const_inode_vector_append", _wrap_swig_dummy_type_const_inode_vector_append, METH_VARARGS, "swig_dummy_type_const_inode_vector_append(swig_dummy_type_const_inode_vector self, INode x)"},
-	 { "swig_dummy_type_const_inode_vector_empty", _wrap_swig_dummy_type_const_inode_vector_empty, METH_O, "swig_dummy_type_const_inode_vector_empty(swig_dummy_type_const_inode_vector self) -> bool"},
-	 { "swig_dummy_type_const_inode_vector_size", _wrap_swig_dummy_type_const_inode_vector_size, METH_O, "swig_dummy_type_const_inode_vector_size(swig_dummy_type_const_inode_vector self) -> std::vector< INode const * >::size_type"},
-	 { "swig_dummy_type_const_inode_vector_swap", _wrap_swig_dummy_type_const_inode_vector_swap, METH_VARARGS, "swig_dummy_type_const_inode_vector_swap(swig_dummy_type_const_inode_vector self, swig_dummy_type_const_inode_vector v)"},
-	 { "swig_dummy_type_const_inode_vector_begin", _wrap_swig_dummy_type_const_inode_vector_begin, METH_O, "swig_dummy_type_const_inode_vector_begin(swig_dummy_type_const_inode_vector self) -> std::vector< INode const * >::iterator"},
-	 { "swig_dummy_type_const_inode_vector_end", _wrap_swig_dummy_type_const_inode_vector_end, METH_O, "swig_dummy_type_const_inode_vector_end(swig_dummy_type_const_inode_vector self) -> std::vector< INode const * >::iterator"},
-	 { "swig_dummy_type_const_inode_vector_rbegin", _wrap_swig_dummy_type_const_inode_vector_rbegin, METH_O, "swig_dummy_type_const_inode_vector_rbegin(swig_dummy_type_const_inode_vector self) -> std::vector< INode const * >::reverse_iterator"},
-	 { "swig_dummy_type_const_inode_vector_rend", _wrap_swig_dummy_type_const_inode_vector_rend, METH_O, "swig_dummy_type_const_inode_vector_rend(swig_dummy_type_const_inode_vector self) -> std::vector< INode const * >::reverse_iterator"},
-	 { "swig_dummy_type_const_inode_vector_clear", _wrap_swig_dummy_type_const_inode_vector_clear, METH_O, "swig_dummy_type_const_inode_vector_clear(swig_dummy_type_const_inode_vector self)"},
-	 { "swig_dummy_type_const_inode_vector_get_allocator", _wrap_swig_dummy_type_const_inode_vector_get_allocator, METH_O, "swig_dummy_type_const_inode_vector_get_allocator(swig_dummy_type_const_inode_vector self) -> std::vector< INode const * >::allocator_type"},
-	 { "swig_dummy_type_const_inode_vector_pop_back", _wrap_swig_dummy_type_const_inode_vector_pop_back, METH_O, "swig_dummy_type_const_inode_vector_pop_back(swig_dummy_type_const_inode_vector self)"},
-	 { "swig_dummy_type_const_inode_vector_erase", _wrap_swig_dummy_type_const_inode_vector_erase, METH_VARARGS, "\n"
-		"swig_dummy_type_const_inode_vector_erase(swig_dummy_type_const_inode_vector self, std::vector< INode const * >::iterator pos) -> std::vector< INode const * >::iterator\n"
-		"swig_dummy_type_const_inode_vector_erase(swig_dummy_type_const_inode_vector self, std::vector< INode const * >::iterator first, std::vector< INode const * >::iterator last) -> std::vector< INode const * >::iterator\n"
+	 { "vector_string_t___getitem__", _wrap_vector_string_t___getitem__, METH_VARARGS, "\n"
+		"vector_string_t___getitem__(vector_string_t self, SWIGPY_SLICEOBJECT * slice) -> vector_string_t\n"
+		"vector_string_t___getitem__(vector_string_t self, std::vector< std::string >::difference_type i) -> std::vector< std::string >::value_type const &\n"
 		""},
-	 { "new_swig_dummy_type_const_inode_vector", _wrap_new_swig_dummy_type_const_inode_vector, METH_VARARGS, "\n"
-		"swig_dummy_type_const_inode_vector()\n"
-		"swig_dummy_type_const_inode_vector(swig_dummy_type_const_inode_vector other)\n"
-		"swig_dummy_type_const_inode_vector(std::vector< INode const * >::size_type size)\n"
-		"new_swig_dummy_type_const_inode_vector(std::vector< INode const * >::size_type size, INode value) -> swig_dummy_type_const_inode_vector\n"
+	 { "vector_string_t___setitem__", _wrap_vector_string_t___setitem__, METH_VARARGS, "\n"
+		"vector_string_t___setitem__(vector_string_t self, SWIGPY_SLICEOBJECT * slice, vector_string_t v)\n"
+		"vector_string_t___setitem__(vector_string_t self, SWIGPY_SLICEOBJECT * slice)\n"
+		"vector_string_t___setitem__(vector_string_t self, std::vector< std::string >::difference_type i, std::vector< std::string >::value_type const & x)\n"
 		""},
-	 { "swig_dummy_type_const_inode_vector_push_back", _wrap_swig_dummy_type_const_inode_vector_push_back, METH_VARARGS, "swig_dummy_type_const_inode_vector_push_back(swig_dummy_type_const_inode_vector self, INode x)"},
-	 { "swig_dummy_type_const_inode_vector_front", _wrap_swig_dummy_type_const_inode_vector_front, METH_O, "swig_dummy_type_const_inode_vector_front(swig_dummy_type_const_inode_vector self) -> INode"},
-	 { "swig_dummy_type_const_inode_vector_back", _wrap_swig_dummy_type_const_inode_vector_back, METH_O, "swig_dummy_type_const_inode_vector_back(swig_dummy_type_const_inode_vector self) -> INode"},
-	 { "swig_dummy_type_const_inode_vector_assign", _wrap_swig_dummy_type_const_inode_vector_assign, METH_VARARGS, "swig_dummy_type_const_inode_vector_assign(swig_dummy_type_const_inode_vector self, std::vector< INode const * >::size_type n, INode x)"},
-	 { "swig_dummy_type_const_inode_vector_resize", _wrap_swig_dummy_type_const_inode_vector_resize, METH_VARARGS, "\n"
-		"swig_dummy_type_const_inode_vector_resize(swig_dummy_type_const_inode_vector self, std::vector< INode const * >::size_type new_size)\n"
-		"swig_dummy_type_const_inode_vector_resize(swig_dummy_type_const_inode_vector self, std::vector< INode const * >::size_type new_size, INode x)\n"
+	 { "vector_string_t_pop", _wrap_vector_string_t_pop, METH_O, "vector_string_t_pop(vector_string_t self) -> std::vector< std::string >::value_type"},
+	 { "vector_string_t_append", _wrap_vector_string_t_append, METH_VARARGS, "vector_string_t_append(vector_string_t self, std::vector< std::string >::value_type const & x)"},
+	 { "vector_string_t_empty", _wrap_vector_string_t_empty, METH_O, "vector_string_t_empty(vector_string_t self) -> bool"},
+	 { "vector_string_t_size", _wrap_vector_string_t_size, METH_O, "vector_string_t_size(vector_string_t self) -> std::vector< std::string >::size_type"},
+	 { "vector_string_t_swap", _wrap_vector_string_t_swap, METH_VARARGS, "vector_string_t_swap(vector_string_t self, vector_string_t v)"},
+	 { "vector_string_t_begin", _wrap_vector_string_t_begin, METH_O, "vector_string_t_begin(vector_string_t self) -> std::vector< std::string >::iterator"},
+	 { "vector_string_t_end", _wrap_vector_string_t_end, METH_O, "vector_string_t_end(vector_string_t self) -> std::vector< std::string >::iterator"},
+	 { "vector_string_t_rbegin", _wrap_vector_string_t_rbegin, METH_O, "vector_string_t_rbegin(vector_string_t self) -> std::vector< std::string >::reverse_iterator"},
+	 { "vector_string_t_rend", _wrap_vector_string_t_rend, METH_O, "vector_string_t_rend(vector_string_t self) -> std::vector< std::string >::reverse_iterator"},
+	 { "vector_string_t_clear", _wrap_vector_string_t_clear, METH_O, "vector_string_t_clear(vector_string_t self)"},
+	 { "vector_string_t_get_allocator", _wrap_vector_string_t_get_allocator, METH_O, "vector_string_t_get_allocator(vector_string_t self) -> std::vector< std::string >::allocator_type"},
+	 { "vector_string_t_pop_back", _wrap_vector_string_t_pop_back, METH_O, "vector_string_t_pop_back(vector_string_t self)"},
+	 { "vector_string_t_erase", _wrap_vector_string_t_erase, METH_VARARGS, "\n"
+		"vector_string_t_erase(vector_string_t self, std::vector< std::string >::iterator pos) -> std::vector< std::string >::iterator\n"
+		"vector_string_t_erase(vector_string_t self, std::vector< std::string >::iterator first, std::vector< std::string >::iterator last) -> std::vector< std::string >::iterator\n"
 		""},
-	 { "swig_dummy_type_const_inode_vector_insert", _wrap_swig_dummy_type_const_inode_vector_insert, METH_VARARGS, "\n"
-		"swig_dummy_type_const_inode_vector_insert(swig_dummy_type_const_inode_vector self, std::vector< INode const * >::iterator pos, INode x) -> std::vector< INode const * >::iterator\n"
-		"swig_dummy_type_const_inode_vector_insert(swig_dummy_type_const_inode_vector self, std::vector< INode const * >::iterator pos, std::vector< INode const * >::size_type n, INode x)\n"
+	 { "new_vector_string_t", _wrap_new_vector_string_t, METH_VARARGS, "\n"
+		"vector_string_t()\n"
+		"vector_string_t(vector_string_t other)\n"
+		"vector_string_t(std::vector< std::string >::size_type size)\n"
+		"new_vector_string_t(std::vector< std::string >::size_type size, std::vector< std::string >::value_type const & value) -> vector_string_t\n"
 		""},
-	 { "swig_dummy_type_const_inode_vector_reserve", _wrap_swig_dummy_type_const_inode_vector_reserve, METH_VARARGS, "swig_dummy_type_const_inode_vector_reserve(swig_dummy_type_const_inode_vector self, std::vector< INode const * >::size_type n)"},
-	 { "swig_dummy_type_const_inode_vector_capacity", _wrap_swig_dummy_type_const_inode_vector_capacity, METH_O, "swig_dummy_type_const_inode_vector_capacity(swig_dummy_type_const_inode_vector self) -> std::vector< INode const * >::size_type"},
-	 { "delete_swig_dummy_type_const_inode_vector", _wrap_delete_swig_dummy_type_const_inode_vector, METH_O, "delete_swig_dummy_type_const_inode_vector(swig_dummy_type_const_inode_vector self)"},
-	 { "swig_dummy_type_const_inode_vector_swigregister", swig_dummy_type_const_inode_vector_swigregister, METH_O, NULL},
-	 { "swig_dummy_type_const_inode_vector_swiginit", swig_dummy_type_const_inode_vector_swiginit, METH_VARARGS, NULL},
-	 { "new_Material", _wrap_new_Material, METH_O, "new_Material(Material material) -> Material"},
-	 { "Material_inverted", _wrap_Material_inverted, METH_O, "Material_inverted(Material self) -> Material"},
-	 { "Material_refractiveIndex", _wrap_Material_refractiveIndex, METH_VARARGS, "Material_refractiveIndex(Material self, double wavelength) -> complex_t"},
-	 { "Material_refractiveIndex2", _wrap_Material_refractiveIndex2, METH_VARARGS, "Material_refractiveIndex2(Material self, double wavelength) -> complex_t"},
-	 { "Material_isScalarMaterial", _wrap_Material_isScalarMaterial, METH_O, "Material_isScalarMaterial(Material self) -> bool"},
-	 { "Material_isMagneticMaterial", _wrap_Material_isMagneticMaterial, METH_O, "Material_isMagneticMaterial(Material self) -> bool"},
-	 { "Material_materialName", _wrap_Material_materialName, METH_O, "Material_materialName(Material self) -> std::string"},
-	 { "Material_magnetization", _wrap_Material_magnetization, METH_O, "Material_magnetization(Material self) -> R3"},
-	 { "Material_materialData", _wrap_Material_materialData, METH_O, "Material_materialData(Material self) -> complex_t"},
-	 { "Material_isEmpty", _wrap_Material_isEmpty, METH_O, "Material_isEmpty(Material self) -> bool"},
-	 { "Material_isDefaultMaterial", _wrap_Material_isDefaultMaterial, METH_O, "Material_isDefaultMaterial(Material self) -> bool"},
-	 { "Material_scalarSubtrSLD", _wrap_Material_scalarSubtrSLD, METH_VARARGS, "Material_scalarSubtrSLD(Material self, WavevectorInfo const & wavevectors) -> complex_t"},
-	 { "Material_polarizedSubtrSLD", _wrap_Material_polarizedSubtrSLD, METH_VARARGS, "Material_polarizedSubtrSLD(Material self, WavevectorInfo const & wavevectors) -> SpinMatrix"},
-	 { "Material_rotatedMaterial", _wrap_Material_rotatedMaterial, METH_VARARGS, "Material_rotatedMaterial(Material self, RotMatrix const & transform) -> Material"},
-	 { "delete_Material", _wrap_delete_Material, METH_O, "delete_Material(Material self)"},
-	 { "Material_swigregister", Material_swigregister, METH_O, NULL},
-	 { "Material_swiginit", Material_swiginit, METH_VARARGS, NULL},
-	 { "RefractiveMaterial", _wrap_RefractiveMaterial, METH_VARARGS, "\n"
-		"RefractiveMaterial(std::string const & name, double delta, double beta, R3 magnetization={}) -> Material\n"
-		"RefractiveMaterial(std::string const & name, complex_t refractive_index, R3 magnetization={}) -> Material\n"
+	 { "vector_string_t_push_back", _wrap_vector_string_t_push_back, METH_VARARGS, "vector_string_t_push_back(vector_string_t self, std::vector< std::string >::value_type const & x)"},
+	 { "vector_string_t_front", _wrap_vector_string_t_front, METH_O, "vector_string_t_front(vector_string_t self) -> std::vector< std::string >::value_type const &"},
+	 { "vector_string_t_back", _wrap_vector_string_t_back, METH_O, "vector_string_t_back(vector_string_t self) -> std::vector< std::string >::value_type const &"},
+	 { "vector_string_t_assign", _wrap_vector_string_t_assign, METH_VARARGS, "vector_string_t_assign(vector_string_t self, std::vector< std::string >::size_type n, std::vector< std::string >::value_type const & x)"},
+	 { "vector_string_t_resize", _wrap_vector_string_t_resize, METH_VARARGS, "\n"
+		"vector_string_t_resize(vector_string_t self, std::vector< std::string >::size_type new_size)\n"
+		"vector_string_t_resize(vector_string_t self, std::vector< std::string >::size_type new_size, std::vector< std::string >::value_type const & x)\n"
 		""},
-	 { "Vacuum", _wrap_Vacuum, METH_NOARGS, "Vacuum() -> Material"},
-	 { "MaterialBySLD", _wrap_MaterialBySLD, METH_VARARGS, "\n"
-		"MaterialBySLD(std::string const & name, double sld_real, double sld_imag, R3 magnetization={}) -> Material\n"
-		"MaterialBySLD() -> Material\n"
+	 { "vector_string_t_insert", _wrap_vector_string_t_insert, METH_VARARGS, "\n"
+		"vector_string_t_insert(vector_string_t self, std::vector< std::string >::iterator pos, std::vector< std::string >::value_type const & x) -> std::vector< std::string >::iterator\n"
+		"vector_string_t_insert(vector_string_t self, std::vector< std::string >::iterator pos, std::vector< std::string >::size_type n, std::vector< std::string >::value_type const & x)\n"
 		""},
-	 { "delete_IMaterialImpl", _wrap_delete_IMaterialImpl, METH_O, "delete_IMaterialImpl(IMaterialImpl self)"},
-	 { "IMaterialImpl_clone", _wrap_IMaterialImpl_clone, METH_O, "IMaterialImpl_clone(IMaterialImpl self) -> IMaterialImpl"},
-	 { "IMaterialImpl_inverted", _wrap_IMaterialImpl_inverted, METH_O, "IMaterialImpl_inverted(IMaterialImpl self) -> IMaterialImpl"},
-	 { "IMaterialImpl_refractiveIndex", _wrap_IMaterialImpl_refractiveIndex, METH_VARARGS, "IMaterialImpl_refractiveIndex(IMaterialImpl self, double wavelength) -> complex_t"},
-	 { "IMaterialImpl_refractiveIndex2", _wrap_IMaterialImpl_refractiveIndex2, METH_VARARGS, "IMaterialImpl_refractiveIndex2(IMaterialImpl self, double wavelength) -> complex_t"},
-	 { "IMaterialImpl_materialData", _wrap_IMaterialImpl_materialData, METH_O, "IMaterialImpl_materialData(IMaterialImpl self) -> complex_t"},
-	 { "IMaterialImpl_typeID", _wrap_IMaterialImpl_typeID, METH_O, "IMaterialImpl_typeID(IMaterialImpl self) -> MATERIAL_TYPES"},
-	 { "IMaterialImpl_scalarSubtrSLD", _wrap_IMaterialImpl_scalarSubtrSLD, METH_VARARGS, "IMaterialImpl_scalarSubtrSLD(IMaterialImpl self, double lambda0) -> complex_t"},
-	 { "IMaterialImpl_isScalarMaterial", _wrap_IMaterialImpl_isScalarMaterial, METH_O, "IMaterialImpl_isScalarMaterial(IMaterialImpl self) -> bool"},
-	 { "IMaterialImpl_isMagneticMaterial", _wrap_IMaterialImpl_isMagneticMaterial, METH_O, "IMaterialImpl_isMagneticMaterial(IMaterialImpl self) -> bool"},
-	 { "IMaterialImpl_magnetization", _wrap_IMaterialImpl_magnetization, METH_O, "IMaterialImpl_magnetization(IMaterialImpl self) -> R3"},
-	 { "IMaterialImpl_polarizedSubtrSLD", _wrap_IMaterialImpl_polarizedSubtrSLD, METH_VARARGS, "IMaterialImpl_polarizedSubtrSLD(IMaterialImpl self, WavevectorInfo const & wavevectors) -> SpinMatrix"},
-	 { "IMaterialImpl_rotatedMaterial", _wrap_IMaterialImpl_rotatedMaterial, METH_VARARGS, "IMaterialImpl_rotatedMaterial(IMaterialImpl self, RotMatrix const & transform) -> IMaterialImpl"},
-	 { "IMaterialImpl__print", _wrap_IMaterialImpl__print, METH_O, "IMaterialImpl__print(IMaterialImpl self) -> std::string"},
-	 { "IMaterialImpl_matName", _wrap_IMaterialImpl_matName, METH_O, "IMaterialImpl_matName(IMaterialImpl self) -> std::string const &"},
-	 { "IMaterialImpl_swigregister", IMaterialImpl_swigregister, METH_O, NULL},
-	 { "delete_RefractiveMaterialImpl", _wrap_delete_RefractiveMaterialImpl, METH_O, "delete_RefractiveMaterialImpl(RefractiveMaterialImpl self)"},
-	 { "RefractiveMaterialImpl_clone", _wrap_RefractiveMaterialImpl_clone, METH_O, "RefractiveMaterialImpl_clone(RefractiveMaterialImpl self) -> RefractiveMaterialImpl"},
-	 { "RefractiveMaterialImpl_refractiveIndex", _wrap_RefractiveMaterialImpl_refractiveIndex, METH_VARARGS, "RefractiveMaterialImpl_refractiveIndex(RefractiveMaterialImpl self, double wavelength) -> complex_t"},
-	 { "RefractiveMaterialImpl_refractiveIndex2", _wrap_RefractiveMaterialImpl_refractiveIndex2, METH_VARARGS, "RefractiveMaterialImpl_refractiveIndex2(RefractiveMaterialImpl self, double wavelength) -> complex_t"},
-	 { "RefractiveMaterialImpl_materialData", _wrap_RefractiveMaterialImpl_materialData, METH_O, "RefractiveMaterialImpl_materialData(RefractiveMaterialImpl self) -> complex_t"},
-	 { "RefractiveMaterialImpl_typeID", _wrap_RefractiveMaterialImpl_typeID, METH_O, "RefractiveMaterialImpl_typeID(RefractiveMaterialImpl self) -> MATERIAL_TYPES"},
-	 { "RefractiveMaterialImpl_scalarSubtrSLD", _wrap_RefractiveMaterialImpl_scalarSubtrSLD, METH_VARARGS, "RefractiveMaterialImpl_scalarSubtrSLD(RefractiveMaterialImpl self, double lambda0) -> complex_t"},
-	 { "RefractiveMaterialImpl__print", _wrap_RefractiveMaterialImpl__print, METH_O, "RefractiveMaterialImpl__print(RefractiveMaterialImpl self) -> std::string"},
-	 { "RefractiveMaterialImpl_swigregister", RefractiveMaterialImpl_swigregister, METH_O, NULL},
-	 { "delete_MaterialBySLDImpl", _wrap_delete_MaterialBySLDImpl, METH_O, "delete_MaterialBySLDImpl(MaterialBySLDImpl self)"},
-	 { "MaterialBySLDImpl_clone", _wrap_MaterialBySLDImpl_clone, METH_O, "MaterialBySLDImpl_clone(MaterialBySLDImpl self) -> MaterialBySLDImpl"},
-	 { "MaterialBySLDImpl_refractiveIndex", _wrap_MaterialBySLDImpl_refractiveIndex, METH_VARARGS, "MaterialBySLDImpl_refractiveIndex(MaterialBySLDImpl self, double wavelength) -> complex_t"},
-	 { "MaterialBySLDImpl_refractiveIndex2", _wrap_MaterialBySLDImpl_refractiveIndex2, METH_VARARGS, "MaterialBySLDImpl_refractiveIndex2(MaterialBySLDImpl self, double wavelength) -> complex_t"},
-	 { "MaterialBySLDImpl_materialData", _wrap_MaterialBySLDImpl_materialData, METH_O, "MaterialBySLDImpl_materialData(MaterialBySLDImpl self) -> complex_t"},
-	 { "MaterialBySLDImpl_typeID", _wrap_MaterialBySLDImpl_typeID, METH_O, "MaterialBySLDImpl_typeID(MaterialBySLDImpl self) -> MATERIAL_TYPES"},
-	 { "MaterialBySLDImpl_scalarSubtrSLD", _wrap_MaterialBySLDImpl_scalarSubtrSLD, METH_VARARGS, "MaterialBySLDImpl_scalarSubtrSLD(MaterialBySLDImpl self, double lambda0) -> complex_t"},
-	 { "MaterialBySLDImpl__print", _wrap_MaterialBySLDImpl__print, METH_O, "MaterialBySLDImpl__print(MaterialBySLDImpl self) -> std::string"},
-	 { "MaterialBySLDImpl_swigregister", MaterialBySLDImpl_swigregister, METH_O, NULL},
-	 { "new_ISampleNode", _wrap_new_ISampleNode, METH_VARARGS, "\n"
-		"ISampleNode()\n"
-		"new_ISampleNode(PyObject * _self, vdouble1d_t PValues) -> ISampleNode\n"
+	 { "vector_string_t_reserve", _wrap_vector_string_t_reserve, METH_VARARGS, "vector_string_t_reserve(vector_string_t self, std::vector< std::string >::size_type n)"},
+	 { "vector_string_t_capacity", _wrap_vector_string_t_capacity, METH_O, "vector_string_t_capacity(vector_string_t self) -> std::vector< std::string >::size_type"},
+	 { "delete_vector_string_t", _wrap_delete_vector_string_t, METH_O, "delete_vector_string_t(vector_string_t self)"},
+	 { "vector_string_t_swigregister", vector_string_t_swigregister, METH_O, NULL},
+	 { "vector_string_t_swiginit", vector_string_t_swiginit, METH_VARARGS, NULL},
+	 { "map_string_double_t_iterator", _wrap_map_string_double_t_iterator, METH_O, "map_string_double_t_iterator(map_string_double_t self) -> SwigPyIterator"},
+	 { "map_string_double_t___nonzero__", _wrap_map_string_double_t___nonzero__, METH_O, "map_string_double_t___nonzero__(map_string_double_t self) -> bool"},
+	 { "map_string_double_t___bool__", _wrap_map_string_double_t___bool__, METH_O, "map_string_double_t___bool__(map_string_double_t self) -> bool"},
+	 { "map_string_double_t___len__", _wrap_map_string_double_t___len__, METH_O, "map_string_double_t___len__(map_string_double_t self) -> std::map< std::string,double >::size_type"},
+	 { "map_string_double_t___getitem__", _wrap_map_string_double_t___getitem__, METH_VARARGS, "map_string_double_t___getitem__(map_string_double_t self, std::map< std::string,double >::key_type const & key) -> std::map< std::string,double >::mapped_type const &"},
+	 { "map_string_double_t___delitem__", _wrap_map_string_double_t___delitem__, METH_VARARGS, "map_string_double_t___delitem__(map_string_double_t self, std::map< std::string,double >::key_type const & key)"},
+	 { "map_string_double_t_has_key", _wrap_map_string_double_t_has_key, METH_VARARGS, "map_string_double_t_has_key(map_string_double_t self, std::map< std::string,double >::key_type const & key) -> bool"},
+	 { "map_string_double_t_keys", _wrap_map_string_double_t_keys, METH_O, "map_string_double_t_keys(map_string_double_t self) -> PyObject *"},
+	 { "map_string_double_t_values", _wrap_map_string_double_t_values, METH_O, "map_string_double_t_values(map_string_double_t self) -> PyObject *"},
+	 { "map_string_double_t_items", _wrap_map_string_double_t_items, METH_O, "map_string_double_t_items(map_string_double_t self) -> PyObject *"},
+	 { "map_string_double_t___contains__", _wrap_map_string_double_t___contains__, METH_VARARGS, "map_string_double_t___contains__(map_string_double_t self, std::map< std::string,double >::key_type const & key) -> bool"},
+	 { "map_string_double_t_key_iterator", _wrap_map_string_double_t_key_iterator, METH_O, "map_string_double_t_key_iterator(map_string_double_t self) -> SwigPyIterator"},
+	 { "map_string_double_t_value_iterator", _wrap_map_string_double_t_value_iterator, METH_O, "map_string_double_t_value_iterator(map_string_double_t self) -> SwigPyIterator"},
+	 { "map_string_double_t___setitem__", _wrap_map_string_double_t___setitem__, METH_VARARGS, "\n"
+		"map_string_double_t___setitem__(map_string_double_t self, std::map< std::string,double >::key_type const & key)\n"
+		"map_string_double_t___setitem__(map_string_double_t self, std::map< std::string,double >::key_type const & key, std::map< std::string,double >::mapped_type const & x)\n"
 		""},
-	 { "ISampleNode_clone", _wrap_ISampleNode_clone, METH_O, "ISampleNode_clone(ISampleNode self) -> ISampleNode"},
-	 { "ISampleNode_material", _wrap_ISampleNode_material, METH_O, "ISampleNode_material(ISampleNode self) -> Material"},
-	 { "ISampleNode_containedMaterials", _wrap_ISampleNode_containedMaterials, METH_O, "ISampleNode_containedMaterials(ISampleNode self) -> std::vector< Material const *,std::allocator< Material const * > >"},
-	 { "ISampleNode_isMagnetic", _wrap_ISampleNode_isMagnetic, METH_O, "ISampleNode_isMagnetic(ISampleNode self) -> bool"},
-	 { "delete_ISampleNode", _wrap_delete_ISampleNode, METH_O, "delete_ISampleNode(ISampleNode self)"},
-	 { "disown_ISampleNode", _wrap_disown_ISampleNode, METH_O, NULL},
-	 { "ISampleNode_swigregister", ISampleNode_swigregister, METH_O, NULL},
-	 { "ISampleNode_swiginit", ISampleNode_swiginit, METH_VARARGS, NULL},
-	 { "new_IFormFactor", _wrap_new_IFormFactor, METH_VARARGS, "\n"
-		"IFormFactor()\n"
-		"new_IFormFactor(PyObject * _self, vdouble1d_t PValues) -> IFormFactor\n"
+	 { "map_string_double_t_asdict", _wrap_map_string_double_t_asdict, METH_O, "map_string_double_t_asdict(map_string_double_t self) -> PyObject *"},
+	 { "new_map_string_double_t", _wrap_new_map_string_double_t, METH_VARARGS, "\n"
+		"map_string_double_t(std::less< std::string > const & other)\n"
+		"map_string_double_t()\n"
+		"new_map_string_double_t(map_string_double_t other) -> map_string_double_t\n"
 		""},
-	 { "delete_IFormFactor", _wrap_delete_IFormFactor, METH_O, "delete_IFormFactor(IFormFactor self)"},
-	 { "IFormFactor_clone", _wrap_IFormFactor_clone, METH_O, "IFormFactor_clone(IFormFactor self) -> IFormFactor"},
-	 { "IFormFactor_volume", _wrap_IFormFactor_volume, METH_O, "IFormFactor_volume(IFormFactor self) -> double"},
-	 { "IFormFactor_radialExtension", _wrap_IFormFactor_radialExtension, METH_O, "IFormFactor_radialExtension(IFormFactor self) -> double"},
-	 { "IFormFactor_spanZ", _wrap_IFormFactor_spanZ, METH_VARARGS, "IFormFactor_spanZ(IFormFactor self, IRotation rotation) -> Span"},
-	 { "IFormFactor_pythonConstructor", _wrap_IFormFactor_pythonConstructor, METH_O, "IFormFactor_pythonConstructor(IFormFactor self) -> std::string"},
-	 { "IFormFactor_canSliceAnalytically", _wrap_IFormFactor_canSliceAnalytically, METH_VARARGS, "IFormFactor_canSliceAnalytically(IFormFactor self, IRotation rot) -> bool"},
-	 { "IFormFactor_theFF", _wrap_IFormFactor_theFF, METH_VARARGS, "IFormFactor_theFF(IFormFactor self, WavevectorInfo const & wavevectors) -> complex_t"},
-	 { "IFormFactor_thePolFF", _wrap_IFormFactor_thePolFF, METH_VARARGS, "IFormFactor_thePolFF(IFormFactor self, WavevectorInfo const & wavevectors) -> SpinMatrix"},
-	 { "IFormFactor_formfactor_pol", _wrap_IFormFactor_formfactor_pol, METH_VARARGS, "IFormFactor_formfactor_pol(IFormFactor self, C3 q) -> SpinMatrix"},
-	 { "IFormFactor_formfactor", _wrap_IFormFactor_formfactor, METH_VARARGS, "IFormFactor_formfactor(IFormFactor self, C3 q) -> complex_t"},
-	 { "IFormFactor_exec_spanZ", _wrap_IFormFactor_exec_spanZ, METH_VARARGS, "IFormFactor_exec_spanZ(IFormFactor self, IRotation rotation) -> Span"},
-	 { "disown_IFormFactor", _wrap_disown_IFormFactor, METH_O, NULL},
-	 { "IFormFactor_swigregister", IFormFactor_swigregister, METH_O, NULL},
-	 { "IFormFactor_swiginit", IFormFactor_swiginit, METH_VARARGS, NULL},
-	 { "IRotation_createRotation", _wrap_IRotation_createRotation, METH_O, "IRotation_createRotation(RotMatrix const & transform) -> IRotation"},
-	 { "IRotation_clone", _wrap_IRotation_clone, METH_O, "IRotation_clone(IRotation self) -> IRotation"},
-	 { "IRotation_createInverse", _wrap_IRotation_createInverse, METH_O, "IRotation_createInverse(IRotation self) -> IRotation"},
-	 { "IRotation_rotMatrix", _wrap_IRotation_rotMatrix, METH_O, "IRotation_rotMatrix(IRotation self) -> RotMatrix"},
-	 { "IRotation_transformed", _wrap_IRotation_transformed, METH_VARARGS, "IRotation_transformed(IRotation self, R3 v) -> R3"},
-	 { "IRotation_isIdentity", _wrap_IRotation_isIdentity, METH_O, "IRotation_isIdentity(IRotation self) -> bool"},
-	 { "IRotation_zInvariant", _wrap_IRotation_zInvariant, METH_O, "IRotation_zInvariant(IRotation self) -> bool"},
-	 { "delete_IRotation", _wrap_delete_IRotation, METH_O, "delete_IRotation(IRotation self)"},
-	 { "IRotation_swigregister", IRotation_swigregister, METH_O, NULL},
-	 { "createProduct", _wrap_createProduct, METH_VARARGS, "createProduct(IRotation left, IRotation right) -> IRotation"},
-	 { "new_IdentityRotation", _wrap_new_IdentityRotation, METH_NOARGS, "new_IdentityRotation() -> IdentityRotation"},
-	 { "IdentityRotation_clone", _wrap_IdentityRotation_clone, METH_O, "IdentityRotation_clone(IdentityRotation self) -> IdentityRotation"},
-	 { "IdentityRotation_className", _wrap_IdentityRotation_className, METH_O, "IdentityRotation_className(IdentityRotation self) -> std::string"},
-	 { "IdentityRotation_createInverse", _wrap_IdentityRotation_createInverse, METH_O, "IdentityRotation_createInverse(IdentityRotation self) -> IdentityRotation"},
-	 { "IdentityRotation_rotMatrix", _wrap_IdentityRotation_rotMatrix, METH_O, "IdentityRotation_rotMatrix(IdentityRotation self) -> RotMatrix"},
-	 { "IdentityRotation_isIdentity", _wrap_IdentityRotation_isIdentity, METH_O, "IdentityRotation_isIdentity(IdentityRotation self) -> bool"},
-	 { "delete_IdentityRotation", _wrap_delete_IdentityRotation, METH_O, "delete_IdentityRotation(IdentityRotation self)"},
-	 { "IdentityRotation_swigregister", IdentityRotation_swigregister, METH_O, NULL},
-	 { "IdentityRotation_swiginit", IdentityRotation_swiginit, METH_VARARGS, NULL},
-	 { "new_RotationX", _wrap_new_RotationX, METH_VARARGS, "\n"
-		"RotationX(vdouble1d_t P)\n"
-		"new_RotationX(double angle) -> RotationX\n"
+	 { "map_string_double_t_empty", _wrap_map_string_double_t_empty, METH_O, "map_string_double_t_empty(map_string_double_t self) -> bool"},
+	 { "map_string_double_t_size", _wrap_map_string_double_t_size, METH_O, "map_string_double_t_size(map_string_double_t self) -> std::map< std::string,double >::size_type"},
+	 { "map_string_double_t_swap", _wrap_map_string_double_t_swap, METH_VARARGS, "map_string_double_t_swap(map_string_double_t self, map_string_double_t v)"},
+	 { "map_string_double_t_begin", _wrap_map_string_double_t_begin, METH_O, "map_string_double_t_begin(map_string_double_t self) -> std::map< std::string,double >::iterator"},
+	 { "map_string_double_t_end", _wrap_map_string_double_t_end, METH_O, "map_string_double_t_end(map_string_double_t self) -> std::map< std::string,double >::iterator"},
+	 { "map_string_double_t_rbegin", _wrap_map_string_double_t_rbegin, METH_O, "map_string_double_t_rbegin(map_string_double_t self) -> std::map< std::string,double >::reverse_iterator"},
+	 { "map_string_double_t_rend", _wrap_map_string_double_t_rend, METH_O, "map_string_double_t_rend(map_string_double_t self) -> std::map< std::string,double >::reverse_iterator"},
+	 { "map_string_double_t_clear", _wrap_map_string_double_t_clear, METH_O, "map_string_double_t_clear(map_string_double_t self)"},
+	 { "map_string_double_t_get_allocator", _wrap_map_string_double_t_get_allocator, METH_O, "map_string_double_t_get_allocator(map_string_double_t self) -> std::map< std::string,double >::allocator_type"},
+	 { "map_string_double_t_count", _wrap_map_string_double_t_count, METH_VARARGS, "map_string_double_t_count(map_string_double_t self, std::map< std::string,double >::key_type const & x) -> std::map< std::string,double >::size_type"},
+	 { "map_string_double_t_erase", _wrap_map_string_double_t_erase, METH_VARARGS, "\n"
+		"map_string_double_t_erase(map_string_double_t self, std::map< std::string,double >::key_type const & x) -> std::map< std::string,double >::size_type\n"
+		"map_string_double_t_erase(map_string_double_t self, std::map< std::string,double >::iterator position)\n"
+		"map_string_double_t_erase(map_string_double_t self, std::map< std::string,double >::iterator first, std::map< std::string,double >::iterator last)\n"
 		""},
-	 { "RotationX_clone", _wrap_RotationX_clone, METH_O, "RotationX_clone(RotationX self) -> RotationX"},
-	 { "RotationX_className", _wrap_RotationX_className, METH_O, "RotationX_className(RotationX self) -> std::string"},
-	 { "RotationX_parDefs", _wrap_RotationX_parDefs, METH_O, "RotationX_parDefs(RotationX self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "RotationX_createInverse", _wrap_RotationX_createInverse, METH_O, "RotationX_createInverse(RotationX self) -> RotationX"},
-	 { "RotationX_angle", _wrap_RotationX_angle, METH_O, "RotationX_angle(RotationX self) -> double"},
-	 { "RotationX_rotMatrix", _wrap_RotationX_rotMatrix, METH_O, "RotationX_rotMatrix(RotationX self) -> RotMatrix"},
-	 { "delete_RotationX", _wrap_delete_RotationX, METH_O, "delete_RotationX(RotationX self)"},
-	 { "RotationX_swigregister", RotationX_swigregister, METH_O, NULL},
-	 { "RotationX_swiginit", RotationX_swiginit, METH_VARARGS, NULL},
-	 { "new_RotationY", _wrap_new_RotationY, METH_VARARGS, "\n"
-		"RotationY(vdouble1d_t P)\n"
-		"new_RotationY(double angle) -> RotationY\n"
+	 { "map_string_double_t_find", _wrap_map_string_double_t_find, METH_VARARGS, "map_string_double_t_find(map_string_double_t self, std::map< std::string,double >::key_type const & x) -> std::map< std::string,double >::iterator"},
+	 { "map_string_double_t_lower_bound", _wrap_map_string_double_t_lower_bound, METH_VARARGS, "map_string_double_t_lower_bound(map_string_double_t self, std::map< std::string,double >::key_type const & x) -> std::map< std::string,double >::iterator"},
+	 { "map_string_double_t_upper_bound", _wrap_map_string_double_t_upper_bound, METH_VARARGS, "map_string_double_t_upper_bound(map_string_double_t self, std::map< std::string,double >::key_type const & x) -> std::map< std::string,double >::iterator"},
+	 { "delete_map_string_double_t", _wrap_delete_map_string_double_t, METH_O, "delete_map_string_double_t(map_string_double_t self)"},
+	 { "map_string_double_t_swigregister", map_string_double_t_swigregister, METH_O, NULL},
+	 { "map_string_double_t_swiginit", map_string_double_t_swiginit, METH_VARARGS, NULL},
+	 { "new_pvacuum_double_t", _wrap_new_pvacuum_double_t, METH_VARARGS, "\n"
+		"pvacuum_double_t()\n"
+		"pvacuum_double_t(double first, double second)\n"
+		"new_pvacuum_double_t(pvacuum_double_t other) -> pvacuum_double_t\n"
 		""},
-	 { "RotationY_clone", _wrap_RotationY_clone, METH_O, "RotationY_clone(RotationY self) -> RotationY"},
-	 { "RotationY_className", _wrap_RotationY_className, METH_O, "RotationY_className(RotationY self) -> std::string"},
-	 { "RotationY_parDefs", _wrap_RotationY_parDefs, METH_O, "RotationY_parDefs(RotationY self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "RotationY_createInverse", _wrap_RotationY_createInverse, METH_O, "RotationY_createInverse(RotationY self) -> RotationY"},
-	 { "RotationY_angle", _wrap_RotationY_angle, METH_O, "RotationY_angle(RotationY self) -> double"},
-	 { "RotationY_rotMatrix", _wrap_RotationY_rotMatrix, METH_O, "RotationY_rotMatrix(RotationY self) -> RotMatrix"},
-	 { "delete_RotationY", _wrap_delete_RotationY, METH_O, "delete_RotationY(RotationY self)"},
-	 { "RotationY_swigregister", RotationY_swigregister, METH_O, NULL},
-	 { "RotationY_swiginit", RotationY_swiginit, METH_VARARGS, NULL},
-	 { "new_RotationZ", _wrap_new_RotationZ, METH_VARARGS, "\n"
-		"RotationZ(vdouble1d_t P)\n"
-		"new_RotationZ(double angle) -> RotationZ\n"
+	 { "pvacuum_double_t_first_set", _wrap_pvacuum_double_t_first_set, METH_VARARGS, "pvacuum_double_t_first_set(pvacuum_double_t self, double first)"},
+	 { "pvacuum_double_t_first_get", _wrap_pvacuum_double_t_first_get, METH_O, "pvacuum_double_t_first_get(pvacuum_double_t self) -> double"},
+	 { "pvacuum_double_t_second_set", _wrap_pvacuum_double_t_second_set, METH_VARARGS, "pvacuum_double_t_second_set(pvacuum_double_t self, double second)"},
+	 { "pvacuum_double_t_second_get", _wrap_pvacuum_double_t_second_get, METH_O, "pvacuum_double_t_second_get(pvacuum_double_t self) -> double"},
+	 { "delete_pvacuum_double_t", _wrap_delete_pvacuum_double_t, METH_O, "delete_pvacuum_double_t(pvacuum_double_t self)"},
+	 { "pvacuum_double_t_swigregister", pvacuum_double_t_swigregister, METH_O, NULL},
+	 { "pvacuum_double_t_swiginit", pvacuum_double_t_swiginit, METH_VARARGS, NULL},
+	 { "vector_pvacuum_double_t_iterator", _wrap_vector_pvacuum_double_t_iterator, METH_O, "vector_pvacuum_double_t_iterator(vector_pvacuum_double_t self) -> SwigPyIterator"},
+	 { "vector_pvacuum_double_t___nonzero__", _wrap_vector_pvacuum_double_t___nonzero__, METH_O, "vector_pvacuum_double_t___nonzero__(vector_pvacuum_double_t self) -> bool"},
+	 { "vector_pvacuum_double_t___bool__", _wrap_vector_pvacuum_double_t___bool__, METH_O, "vector_pvacuum_double_t___bool__(vector_pvacuum_double_t self) -> bool"},
+	 { "vector_pvacuum_double_t___len__", _wrap_vector_pvacuum_double_t___len__, METH_O, "vector_pvacuum_double_t___len__(vector_pvacuum_double_t self) -> std::vector< std::pair< double,double > >::size_type"},
+	 { "vector_pvacuum_double_t___getslice__", _wrap_vector_pvacuum_double_t___getslice__, METH_VARARGS, "vector_pvacuum_double_t___getslice__(vector_pvacuum_double_t self, std::vector< std::pair< double,double > >::difference_type i, std::vector< std::pair< double,double > >::difference_type j) -> vector_pvacuum_double_t"},
+	 { "vector_pvacuum_double_t___setslice__", _wrap_vector_pvacuum_double_t___setslice__, METH_VARARGS, "\n"
+		"vector_pvacuum_double_t___setslice__(vector_pvacuum_double_t self, std::vector< std::pair< double,double > >::difference_type i, std::vector< std::pair< double,double > >::difference_type j)\n"
+		"vector_pvacuum_double_t___setslice__(vector_pvacuum_double_t self, std::vector< std::pair< double,double > >::difference_type i, std::vector< std::pair< double,double > >::difference_type j, vector_pvacuum_double_t v)\n"
 		""},
-	 { "RotationZ_clone", _wrap_RotationZ_clone, METH_O, "RotationZ_clone(RotationZ self) -> RotationZ"},
-	 { "RotationZ_className", _wrap_RotationZ_className, METH_O, "RotationZ_className(RotationZ self) -> std::string"},
-	 { "RotationZ_parDefs", _wrap_RotationZ_parDefs, METH_O, "RotationZ_parDefs(RotationZ self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "RotationZ_createInverse", _wrap_RotationZ_createInverse, METH_O, "RotationZ_createInverse(RotationZ self) -> RotationZ"},
-	 { "RotationZ_angle", _wrap_RotationZ_angle, METH_O, "RotationZ_angle(RotationZ self) -> double"},
-	 { "RotationZ_rotMatrix", _wrap_RotationZ_rotMatrix, METH_O, "RotationZ_rotMatrix(RotationZ self) -> RotMatrix"},
-	 { "delete_RotationZ", _wrap_delete_RotationZ, METH_O, "delete_RotationZ(RotationZ self)"},
-	 { "RotationZ_swigregister", RotationZ_swigregister, METH_O, NULL},
-	 { "RotationZ_swiginit", RotationZ_swiginit, METH_VARARGS, NULL},
-	 { "new_RotationEuler", _wrap_new_RotationEuler, METH_VARARGS, "\n"
-		"RotationEuler(vdouble1d_t P)\n"
-		"new_RotationEuler(double alpha, double beta, double gamma) -> RotationEuler\n"
+	 { "vector_pvacuum_double_t___delslice__", _wrap_vector_pvacuum_double_t___delslice__, METH_VARARGS, "vector_pvacuum_double_t___delslice__(vector_pvacuum_double_t self, std::vector< std::pair< double,double > >::difference_type i, std::vector< std::pair< double,double > >::difference_type j)"},
+	 { "vector_pvacuum_double_t___delitem__", _wrap_vector_pvacuum_double_t___delitem__, METH_VARARGS, "\n"
+		"vector_pvacuum_double_t___delitem__(vector_pvacuum_double_t self, std::vector< std::pair< double,double > >::difference_type i)\n"
+		"vector_pvacuum_double_t___delitem__(vector_pvacuum_double_t self, SWIGPY_SLICEOBJECT * slice)\n"
 		""},
-	 { "RotationEuler_clone", _wrap_RotationEuler_clone, METH_O, "RotationEuler_clone(RotationEuler self) -> RotationEuler"},
-	 { "RotationEuler_className", _wrap_RotationEuler_className, METH_O, "RotationEuler_className(RotationEuler self) -> std::string"},
-	 { "RotationEuler_parDefs", _wrap_RotationEuler_parDefs, METH_O, "RotationEuler_parDefs(RotationEuler self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "RotationEuler_createInverse", _wrap_RotationEuler_createInverse, METH_O, "RotationEuler_createInverse(RotationEuler self) -> IRotation"},
-	 { "RotationEuler_alpha", _wrap_RotationEuler_alpha, METH_O, "RotationEuler_alpha(RotationEuler self) -> double"},
-	 { "RotationEuler_beta", _wrap_RotationEuler_beta, METH_O, "RotationEuler_beta(RotationEuler self) -> double"},
-	 { "RotationEuler_gamma", _wrap_RotationEuler_gamma, METH_O, "RotationEuler_gamma(RotationEuler self) -> double"},
-	 { "RotationEuler_rotMatrix", _wrap_RotationEuler_rotMatrix, METH_O, "RotationEuler_rotMatrix(RotationEuler self) -> RotMatrix"},
-	 { "delete_RotationEuler", _wrap_delete_RotationEuler, METH_O, "delete_RotationEuler(RotationEuler self)"},
-	 { "RotationEuler_swigregister", RotationEuler_swigregister, METH_O, NULL},
-	 { "RotationEuler_swiginit", RotationEuler_swiginit, METH_VARARGS, NULL},
-	 { "new_Crystal", _wrap_new_Crystal, METH_VARARGS, "Crystal(IParticle basis, Lattice3D lattice, double position_variance=0)"},
-	 { "delete_Crystal", _wrap_delete_Crystal, METH_O, "delete_Crystal(Crystal self)"},
-	 { "Crystal_clone", _wrap_Crystal_clone, METH_O, "Crystal_clone(Crystal self) -> Crystal"},
-	 { "Crystal_className", _wrap_Crystal_className, METH_O, "Crystal_className(Crystal self) -> std::string"},
-	 { "Crystal_nodeChildren", _wrap_Crystal_nodeChildren, METH_O, "Crystal_nodeChildren(Crystal self) -> swig_dummy_type_const_inode_vector"},
-	 { "Crystal_parDefs", _wrap_Crystal_parDefs, METH_O, "Crystal_parDefs(Crystal self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "Crystal_basis", _wrap_Crystal_basis, METH_O, "Crystal_basis(Crystal self) -> IParticle"},
-	 { "Crystal_lattice", _wrap_Crystal_lattice, METH_O, "Crystal_lattice(Crystal self) -> Lattice3D"},
-	 { "Crystal_position_variance", _wrap_Crystal_position_variance, METH_O, "Crystal_position_variance(Crystal self) -> double"},
-	 { "Crystal_transformed", _wrap_Crystal_transformed, METH_VARARGS, "Crystal_transformed(Crystal self, R3 translation, IRotation rotation) -> Crystal"},
-	 { "Crystal_validate", _wrap_Crystal_validate, METH_O, "Crystal_validate(Crystal self) -> std::string"},
-	 { "Crystal_swigregister", Crystal_swigregister, METH_O, NULL},
-	 { "Crystal_swiginit", Crystal_swiginit, METH_VARARGS, NULL},
-	 { "delete_IParticle", _wrap_delete_IParticle, METH_O, "delete_IParticle(IParticle self)"},
-	 { "IParticle_clone", _wrap_IParticle_clone, METH_O, "IParticle_clone(IParticle self) -> IParticle"},
-	 { "IParticle_nodeChildren", _wrap_IParticle_nodeChildren, METH_O, "IParticle_nodeChildren(IParticle self) -> swig_dummy_type_const_inode_vector"},
-	 { "IParticle_abundance", _wrap_IParticle_abundance, METH_O, "IParticle_abundance(IParticle self) -> double"},
-	 { "IParticle_setAbundance", _wrap_IParticle_setAbundance, METH_VARARGS, "IParticle_setAbundance(IParticle self, double abundance)"},
-	 { "IParticle_particlePosition", _wrap_IParticle_particlePosition, METH_O, "IParticle_particlePosition(IParticle self) -> R3"},
-	 { "IParticle_setParticlePosition", _wrap_IParticle_setParticlePosition, METH_VARARGS, "\n"
-		"IParticle_setParticlePosition(IParticle self, R3 position)\n"
-		"IParticle_setParticlePosition(IParticle self, double x, double y, double z)\n"
+	 { "vector_pvacuum_double_t___getitem__", _wrap_vector_pvacuum_double_t___getitem__, METH_VARARGS, "\n"
+		"vector_pvacuum_double_t___getitem__(vector_pvacuum_double_t self, SWIGPY_SLICEOBJECT * slice) -> vector_pvacuum_double_t\n"
+		"vector_pvacuum_double_t___getitem__(vector_pvacuum_double_t self, std::vector< std::pair< double,double > >::difference_type i) -> pvacuum_double_t\n"
 		""},
-	 { "IParticle_translate", _wrap_IParticle_translate, METH_VARARGS, "IParticle_translate(IParticle self, R3 translation) -> IParticle"},
-	 { "IParticle_rotation", _wrap_IParticle_rotation, METH_O, "IParticle_rotation(IParticle self) -> IRotation"},
-	 { "IParticle_setRotation", _wrap_IParticle_setRotation, METH_VARARGS, "IParticle_setRotation(IParticle self, IRotation rotation)"},
-	 { "IParticle_rotate", _wrap_IParticle_rotate, METH_VARARGS, "IParticle_rotate(IParticle self, IRotation rotation) -> IParticle"},
-	 { "IParticle_avgeMaterial", _wrap_IParticle_avgeMaterial, METH_O, "IParticle_avgeMaterial(IParticle self) -> Material"},
-	 { "IParticle_volume", _wrap_IParticle_volume, METH_O, "IParticle_volume(IParticle self) -> double"},
-	 { "IParticle_validate", _wrap_IParticle_validate, METH_O, "IParticle_validate(IParticle self) -> std::string"},
-	 { "IParticle_swigregister", IParticle_swigregister, METH_O, NULL},
-	 { "new_Mesocrystal", _wrap_new_Mesocrystal, METH_VARARGS, "new_Mesocrystal(Crystal crystal, IFormFactor formfactor) -> Mesocrystal"},
-	 { "delete_Mesocrystal", _wrap_delete_Mesocrystal, METH_O, "delete_Mesocrystal(Mesocrystal self)"},
-	 { "Mesocrystal_clone", _wrap_Mesocrystal_clone, METH_O, "Mesocrystal_clone(Mesocrystal self) -> Mesocrystal"},
-	 { "Mesocrystal_className", _wrap_Mesocrystal_className, METH_O, "Mesocrystal_className(Mesocrystal self) -> std::string"},
-	 { "Mesocrystal_nodeChildren", _wrap_Mesocrystal_nodeChildren, METH_O, "Mesocrystal_nodeChildren(Mesocrystal self) -> swig_dummy_type_const_inode_vector"},
-	 { "Mesocrystal_outerShape", _wrap_Mesocrystal_outerShape, METH_O, "Mesocrystal_outerShape(Mesocrystal self) -> IFormFactor"},
-	 { "Mesocrystal_particleStructure", _wrap_Mesocrystal_particleStructure, METH_O, "Mesocrystal_particleStructure(Mesocrystal self) -> Crystal"},
-	 { "Mesocrystal_validate", _wrap_Mesocrystal_validate, METH_O, "Mesocrystal_validate(Mesocrystal self) -> std::string"},
-	 { "Mesocrystal_swigregister", Mesocrystal_swigregister, METH_O, NULL},
-	 { "Mesocrystal_swiginit", Mesocrystal_swiginit, METH_VARARGS, NULL},
-	 { "new_Particle", _wrap_new_Particle, METH_VARARGS, "\n"
-		"Particle(Material material, IFormFactor formfactor)\n"
-		"new_Particle(Material material, IFormFactor formfactor, IRotation rotation) -> Particle\n"
+	 { "vector_pvacuum_double_t___setitem__", _wrap_vector_pvacuum_double_t___setitem__, METH_VARARGS, "\n"
+		"vector_pvacuum_double_t___setitem__(vector_pvacuum_double_t self, SWIGPY_SLICEOBJECT * slice, vector_pvacuum_double_t v)\n"
+		"vector_pvacuum_double_t___setitem__(vector_pvacuum_double_t self, SWIGPY_SLICEOBJECT * slice)\n"
+		"vector_pvacuum_double_t___setitem__(vector_pvacuum_double_t self, std::vector< std::pair< double,double > >::difference_type i, pvacuum_double_t x)\n"
 		""},
-	 { "delete_Particle", _wrap_delete_Particle, METH_O, "delete_Particle(Particle self)"},
-	 { "Particle_clone", _wrap_Particle_clone, METH_O, "Particle_clone(Particle self) -> Particle"},
-	 { "Particle_className", _wrap_Particle_className, METH_O, "Particle_className(Particle self) -> std::string"},
-	 { "Particle_nodeChildren", _wrap_Particle_nodeChildren, METH_O, "Particle_nodeChildren(Particle self) -> swig_dummy_type_const_inode_vector"},
-	 { "Particle_material", _wrap_Particle_material, METH_O, "Particle_material(Particle self) -> Material"},
-	 { "Particle_pFormfactor", _wrap_Particle_pFormfactor, METH_O, "Particle_pFormfactor(Particle self) -> IFormFactor"},
-	 { "Particle_validate", _wrap_Particle_validate, METH_O, "Particle_validate(Particle self) -> std::string"},
-	 { "Particle_avgeMaterial", _wrap_Particle_avgeMaterial, METH_O, "Particle_avgeMaterial(Particle self) -> Material"},
-	 { "Particle_volume", _wrap_Particle_volume, METH_O, "Particle_volume(Particle self) -> double"},
-	 { "Particle_swigregister", Particle_swigregister, METH_O, NULL},
-	 { "Particle_swiginit", Particle_swiginit, METH_VARARGS, NULL},
-	 { "new_Compound", _wrap_new_Compound, METH_NOARGS, "new_Compound() -> Compound"},
-	 { "delete_Compound", _wrap_delete_Compound, METH_O, "delete_Compound(Compound self)"},
-	 { "Compound_clone", _wrap_Compound_clone, METH_O, "Compound_clone(Compound self) -> Compound"},
-	 { "Compound_className", _wrap_Compound_className, METH_O, "Compound_className(Compound self) -> std::string"},
-	 { "Compound_nodeChildren", _wrap_Compound_nodeChildren, METH_O, "Compound_nodeChildren(Compound self) -> swig_dummy_type_const_inode_vector"},
-	 { "Compound_addParticle", _wrap_Compound_addParticle, METH_VARARGS, "\n"
-		"Compound_addParticle(Compound self, IParticle particle)\n"
-		"Compound_addParticle(Compound self, IParticle particle, R3 position)\n"
+	 { "vector_pvacuum_double_t_pop", _wrap_vector_pvacuum_double_t_pop, METH_O, "vector_pvacuum_double_t_pop(vector_pvacuum_double_t self) -> pvacuum_double_t"},
+	 { "vector_pvacuum_double_t_append", _wrap_vector_pvacuum_double_t_append, METH_VARARGS, "vector_pvacuum_double_t_append(vector_pvacuum_double_t self, pvacuum_double_t x)"},
+	 { "vector_pvacuum_double_t_empty", _wrap_vector_pvacuum_double_t_empty, METH_O, "vector_pvacuum_double_t_empty(vector_pvacuum_double_t self) -> bool"},
+	 { "vector_pvacuum_double_t_size", _wrap_vector_pvacuum_double_t_size, METH_O, "vector_pvacuum_double_t_size(vector_pvacuum_double_t self) -> std::vector< std::pair< double,double > >::size_type"},
+	 { "vector_pvacuum_double_t_swap", _wrap_vector_pvacuum_double_t_swap, METH_VARARGS, "vector_pvacuum_double_t_swap(vector_pvacuum_double_t self, vector_pvacuum_double_t v)"},
+	 { "vector_pvacuum_double_t_begin", _wrap_vector_pvacuum_double_t_begin, METH_O, "vector_pvacuum_double_t_begin(vector_pvacuum_double_t self) -> std::vector< std::pair< double,double > >::iterator"},
+	 { "vector_pvacuum_double_t_end", _wrap_vector_pvacuum_double_t_end, METH_O, "vector_pvacuum_double_t_end(vector_pvacuum_double_t self) -> std::vector< std::pair< double,double > >::iterator"},
+	 { "vector_pvacuum_double_t_rbegin", _wrap_vector_pvacuum_double_t_rbegin, METH_O, "vector_pvacuum_double_t_rbegin(vector_pvacuum_double_t self) -> std::vector< std::pair< double,double > >::reverse_iterator"},
+	 { "vector_pvacuum_double_t_rend", _wrap_vector_pvacuum_double_t_rend, METH_O, "vector_pvacuum_double_t_rend(vector_pvacuum_double_t self) -> std::vector< std::pair< double,double > >::reverse_iterator"},
+	 { "vector_pvacuum_double_t_clear", _wrap_vector_pvacuum_double_t_clear, METH_O, "vector_pvacuum_double_t_clear(vector_pvacuum_double_t self)"},
+	 { "vector_pvacuum_double_t_get_allocator", _wrap_vector_pvacuum_double_t_get_allocator, METH_O, "vector_pvacuum_double_t_get_allocator(vector_pvacuum_double_t self) -> std::vector< std::pair< double,double > >::allocator_type"},
+	 { "vector_pvacuum_double_t_pop_back", _wrap_vector_pvacuum_double_t_pop_back, METH_O, "vector_pvacuum_double_t_pop_back(vector_pvacuum_double_t self)"},
+	 { "vector_pvacuum_double_t_erase", _wrap_vector_pvacuum_double_t_erase, METH_VARARGS, "\n"
+		"vector_pvacuum_double_t_erase(vector_pvacuum_double_t self, std::vector< std::pair< double,double > >::iterator pos) -> std::vector< std::pair< double,double > >::iterator\n"
+		"vector_pvacuum_double_t_erase(vector_pvacuum_double_t self, std::vector< std::pair< double,double > >::iterator first, std::vector< std::pair< double,double > >::iterator last) -> std::vector< std::pair< double,double > >::iterator\n"
 		""},
-	 { "Compound_addParticles", _wrap_Compound_addParticles, METH_VARARGS, "Compound_addParticles(Compound self, IParticle particle, vector_R3 positions)"},
-	 { "Compound_nbrParticles", _wrap_Compound_nbrParticles, METH_O, "Compound_nbrParticles(Compound self) -> size_t"},
-	 { "Compound_particles", _wrap_Compound_particles, METH_O, "Compound_particles(Compound self) -> std::vector< IParticle const *,std::allocator< IParticle const * > >"},
-	 { "Compound_validate", _wrap_Compound_validate, METH_O, "Compound_validate(Compound self) -> std::string"},
-	 { "Compound_swigregister", Compound_swigregister, METH_O, NULL},
-	 { "Compound_swiginit", Compound_swiginit, METH_VARARGS, NULL},
-	 { "new_CoreAndShell", _wrap_new_CoreAndShell, METH_VARARGS, "CoreAndShell(Particle shell, Particle core, R3 relative_core_position=R3(0.0, 0.0, 0.0))"},
-	 { "delete_CoreAndShell", _wrap_delete_CoreAndShell, METH_O, "delete_CoreAndShell(CoreAndShell self)"},
-	 { "CoreAndShell_clone", _wrap_CoreAndShell_clone, METH_O, "CoreAndShell_clone(CoreAndShell self) -> CoreAndShell"},
-	 { "CoreAndShell_className", _wrap_CoreAndShell_className, METH_O, "CoreAndShell_className(CoreAndShell self) -> std::string"},
-	 { "CoreAndShell_nodeChildren", _wrap_CoreAndShell_nodeChildren, METH_O, "CoreAndShell_nodeChildren(CoreAndShell self) -> swig_dummy_type_const_inode_vector"},
-	 { "CoreAndShell_shellParticle", _wrap_CoreAndShell_shellParticle, METH_O, "CoreAndShell_shellParticle(CoreAndShell self) -> Particle"},
-	 { "CoreAndShell_coreParticle", _wrap_CoreAndShell_coreParticle, METH_O, "CoreAndShell_coreParticle(CoreAndShell self) -> Particle"},
-	 { "CoreAndShell_validate", _wrap_CoreAndShell_validate, METH_O, "CoreAndShell_validate(CoreAndShell self) -> std::string"},
-	 { "CoreAndShell_swigregister", CoreAndShell_swigregister, METH_O, NULL},
-	 { "CoreAndShell_swiginit", CoreAndShell_swiginit, METH_VARARGS, NULL},
-	 { "IProfile1D_clone", _wrap_IProfile1D_clone, METH_O, "IProfile1D_clone(IProfile1D self) -> IProfile1D"},
-	 { "IProfile1D_parDefs", _wrap_IProfile1D_parDefs, METH_O, "IProfile1D_parDefs(IProfile1D self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "IProfile1D_standardizedFT", _wrap_IProfile1D_standardizedFT, METH_VARARGS, "IProfile1D_standardizedFT(IProfile1D self, double q) -> double"},
-	 { "IProfile1D_decayFT", _wrap_IProfile1D_decayFT, METH_VARARGS, "IProfile1D_decayFT(IProfile1D self, double q) -> double"},
-	 { "IProfile1D_omega", _wrap_IProfile1D_omega, METH_O, "IProfile1D_omega(IProfile1D self) -> double"},
-	 { "IProfile1D_decayLength", _wrap_IProfile1D_decayLength, METH_O, "IProfile1D_decayLength(IProfile1D self) -> double"},
-	 { "IProfile1D_qSecondDerivative", _wrap_IProfile1D_qSecondDerivative, METH_O, "IProfile1D_qSecondDerivative(IProfile1D self) -> double"},
-	 { "IProfile1D_validate", _wrap_IProfile1D_validate, METH_O, "IProfile1D_validate(IProfile1D self) -> std::string"},
-	 { "delete_IProfile1D", _wrap_delete_IProfile1D, METH_O, "delete_IProfile1D(IProfile1D self)"},
-	 { "IProfile1D_swigregister", IProfile1D_swigregister, METH_O, NULL},
-	 { "new_Profile1DCauchy", _wrap_new_Profile1DCauchy, METH_VARARGS, "\n"
-		"Profile1DCauchy(vdouble1d_t P)\n"
-		"new_Profile1DCauchy(double omega) -> Profile1DCauchy\n"
+	 { "new_vector_pvacuum_double_t", _wrap_new_vector_pvacuum_double_t, METH_VARARGS, "\n"
+		"vector_pvacuum_double_t()\n"
+		"vector_pvacuum_double_t(vector_pvacuum_double_t other)\n"
+		"vector_pvacuum_double_t(std::vector< std::pair< double,double > >::size_type size)\n"
+		"new_vector_pvacuum_double_t(std::vector< std::pair< double,double > >::size_type size, pvacuum_double_t value) -> vector_pvacuum_double_t\n"
 		""},
-	 { "Profile1DCauchy_clone", _wrap_Profile1DCauchy_clone, METH_O, "Profile1DCauchy_clone(Profile1DCauchy self) -> Profile1DCauchy"},
-	 { "Profile1DCauchy_className", _wrap_Profile1DCauchy_className, METH_O, "Profile1DCauchy_className(Profile1DCauchy self) -> std::string"},
-	 { "Profile1DCauchy_standardizedFT", _wrap_Profile1DCauchy_standardizedFT, METH_VARARGS, "Profile1DCauchy_standardizedFT(Profile1DCauchy self, double q) -> double"},
-	 { "Profile1DCauchy_decayFT", _wrap_Profile1DCauchy_decayFT, METH_VARARGS, "Profile1DCauchy_decayFT(Profile1DCauchy self, double q) -> double"},
-	 { "Profile1DCauchy_qSecondDerivative", _wrap_Profile1DCauchy_qSecondDerivative, METH_O, "Profile1DCauchy_qSecondDerivative(Profile1DCauchy self) -> double"},
-	 { "delete_Profile1DCauchy", _wrap_delete_Profile1DCauchy, METH_O, "delete_Profile1DCauchy(Profile1DCauchy self)"},
-	 { "Profile1DCauchy_swigregister", Profile1DCauchy_swigregister, METH_O, NULL},
-	 { "Profile1DCauchy_swiginit", Profile1DCauchy_swiginit, METH_VARARGS, NULL},
-	 { "new_Profile1DGauss", _wrap_new_Profile1DGauss, METH_VARARGS, "\n"
-		"Profile1DGauss(vdouble1d_t P)\n"
-		"new_Profile1DGauss(double omega) -> Profile1DGauss\n"
+	 { "vector_pvacuum_double_t_push_back", _wrap_vector_pvacuum_double_t_push_back, METH_VARARGS, "vector_pvacuum_double_t_push_back(vector_pvacuum_double_t self, pvacuum_double_t x)"},
+	 { "vector_pvacuum_double_t_front", _wrap_vector_pvacuum_double_t_front, METH_O, "vector_pvacuum_double_t_front(vector_pvacuum_double_t self) -> pvacuum_double_t"},
+	 { "vector_pvacuum_double_t_back", _wrap_vector_pvacuum_double_t_back, METH_O, "vector_pvacuum_double_t_back(vector_pvacuum_double_t self) -> pvacuum_double_t"},
+	 { "vector_pvacuum_double_t_assign", _wrap_vector_pvacuum_double_t_assign, METH_VARARGS, "vector_pvacuum_double_t_assign(vector_pvacuum_double_t self, std::vector< std::pair< double,double > >::size_type n, pvacuum_double_t x)"},
+	 { "vector_pvacuum_double_t_resize", _wrap_vector_pvacuum_double_t_resize, METH_VARARGS, "\n"
+		"vector_pvacuum_double_t_resize(vector_pvacuum_double_t self, std::vector< std::pair< double,double > >::size_type new_size)\n"
+		"vector_pvacuum_double_t_resize(vector_pvacuum_double_t self, std::vector< std::pair< double,double > >::size_type new_size, pvacuum_double_t x)\n"
 		""},
-	 { "Profile1DGauss_clone", _wrap_Profile1DGauss_clone, METH_O, "Profile1DGauss_clone(Profile1DGauss self) -> Profile1DGauss"},
-	 { "Profile1DGauss_className", _wrap_Profile1DGauss_className, METH_O, "Profile1DGauss_className(Profile1DGauss self) -> std::string"},
-	 { "Profile1DGauss_standardizedFT", _wrap_Profile1DGauss_standardizedFT, METH_VARARGS, "Profile1DGauss_standardizedFT(Profile1DGauss self, double q) -> double"},
-	 { "Profile1DGauss_decayFT", _wrap_Profile1DGauss_decayFT, METH_VARARGS, "Profile1DGauss_decayFT(Profile1DGauss self, double q) -> double"},
-	 { "Profile1DGauss_qSecondDerivative", _wrap_Profile1DGauss_qSecondDerivative, METH_O, "Profile1DGauss_qSecondDerivative(Profile1DGauss self) -> double"},
-	 { "delete_Profile1DGauss", _wrap_delete_Profile1DGauss, METH_O, "delete_Profile1DGauss(Profile1DGauss self)"},
-	 { "Profile1DGauss_swigregister", Profile1DGauss_swigregister, METH_O, NULL},
-	 { "Profile1DGauss_swiginit", Profile1DGauss_swiginit, METH_VARARGS, NULL},
-	 { "new_Profile1DGate", _wrap_new_Profile1DGate, METH_VARARGS, "\n"
-		"Profile1DGate(vdouble1d_t P)\n"
-		"new_Profile1DGate(double omega) -> Profile1DGate\n"
+	 { "vector_pvacuum_double_t_insert", _wrap_vector_pvacuum_double_t_insert, METH_VARARGS, "\n"
+		"vector_pvacuum_double_t_insert(vector_pvacuum_double_t self, std::vector< std::pair< double,double > >::iterator pos, pvacuum_double_t x) -> std::vector< std::pair< double,double > >::iterator\n"
+		"vector_pvacuum_double_t_insert(vector_pvacuum_double_t self, std::vector< std::pair< double,double > >::iterator pos, std::vector< std::pair< double,double > >::size_type n, pvacuum_double_t x)\n"
 		""},
-	 { "Profile1DGate_clone", _wrap_Profile1DGate_clone, METH_O, "Profile1DGate_clone(Profile1DGate self) -> Profile1DGate"},
-	 { "Profile1DGate_className", _wrap_Profile1DGate_className, METH_O, "Profile1DGate_className(Profile1DGate self) -> std::string"},
-	 { "Profile1DGate_standardizedFT", _wrap_Profile1DGate_standardizedFT, METH_VARARGS, "Profile1DGate_standardizedFT(Profile1DGate self, double q) -> double"},
-	 { "Profile1DGate_decayFT", _wrap_Profile1DGate_decayFT, METH_VARARGS, "Profile1DGate_decayFT(Profile1DGate self, double q) -> double"},
-	 { "Profile1DGate_qSecondDerivative", _wrap_Profile1DGate_qSecondDerivative, METH_O, "Profile1DGate_qSecondDerivative(Profile1DGate self) -> double"},
-	 { "delete_Profile1DGate", _wrap_delete_Profile1DGate, METH_O, "delete_Profile1DGate(Profile1DGate self)"},
-	 { "Profile1DGate_swigregister", Profile1DGate_swigregister, METH_O, NULL},
-	 { "Profile1DGate_swiginit", Profile1DGate_swiginit, METH_VARARGS, NULL},
-	 { "new_Profile1DTriangle", _wrap_new_Profile1DTriangle, METH_VARARGS, "\n"
-		"Profile1DTriangle(vdouble1d_t P)\n"
-		"new_Profile1DTriangle(double omega) -> Profile1DTriangle\n"
+	 { "vector_pvacuum_double_t_reserve", _wrap_vector_pvacuum_double_t_reserve, METH_VARARGS, "vector_pvacuum_double_t_reserve(vector_pvacuum_double_t self, std::vector< std::pair< double,double > >::size_type n)"},
+	 { "vector_pvacuum_double_t_capacity", _wrap_vector_pvacuum_double_t_capacity, METH_O, "vector_pvacuum_double_t_capacity(vector_pvacuum_double_t self) -> std::vector< std::pair< double,double > >::size_type"},
+	 { "delete_vector_pvacuum_double_t", _wrap_delete_vector_pvacuum_double_t, METH_O, "delete_vector_pvacuum_double_t(vector_pvacuum_double_t self)"},
+	 { "vector_pvacuum_double_t_swigregister", vector_pvacuum_double_t_swigregister, METH_O, NULL},
+	 { "vector_pvacuum_double_t_swiginit", vector_pvacuum_double_t_swiginit, METH_VARARGS, NULL},
+	 { "new_R3", _wrap_new_R3, METH_VARARGS, "\n"
+		"R3(double const x_, double const y_, double const z_)\n"
+		"new_R3() -> R3\n"
 		""},
-	 { "Profile1DTriangle_clone", _wrap_Profile1DTriangle_clone, METH_O, "Profile1DTriangle_clone(Profile1DTriangle self) -> Profile1DTriangle"},
-	 { "Profile1DTriangle_className", _wrap_Profile1DTriangle_className, METH_O, "Profile1DTriangle_className(Profile1DTriangle self) -> std::string"},
-	 { "Profile1DTriangle_standardizedFT", _wrap_Profile1DTriangle_standardizedFT, METH_VARARGS, "Profile1DTriangle_standardizedFT(Profile1DTriangle self, double q) -> double"},
-	 { "Profile1DTriangle_decayFT", _wrap_Profile1DTriangle_decayFT, METH_VARARGS, "Profile1DTriangle_decayFT(Profile1DTriangle self, double q) -> double"},
-	 { "Profile1DTriangle_qSecondDerivative", _wrap_Profile1DTriangle_qSecondDerivative, METH_O, "Profile1DTriangle_qSecondDerivative(Profile1DTriangle self) -> double"},
-	 { "delete_Profile1DTriangle", _wrap_delete_Profile1DTriangle, METH_O, "delete_Profile1DTriangle(Profile1DTriangle self)"},
-	 { "Profile1DTriangle_swigregister", Profile1DTriangle_swigregister, METH_O, NULL},
-	 { "Profile1DTriangle_swiginit", Profile1DTriangle_swiginit, METH_VARARGS, NULL},
-	 { "new_Profile1DCosine", _wrap_new_Profile1DCosine, METH_VARARGS, "\n"
-		"Profile1DCosine(vdouble1d_t P)\n"
-		"new_Profile1DCosine(double omega) -> Profile1DCosine\n"
+	 { "R3_x", _wrap_R3_x, METH_O, "R3_x(R3 self) -> double"},
+	 { "R3_y", _wrap_R3_y, METH_O, "R3_y(R3 self) -> double"},
+	 { "R3_z", _wrap_R3_z, METH_O, "R3_z(R3 self) -> double"},
+	 { "R3_setX", _wrap_R3_setX, METH_VARARGS, "R3_setX(R3 self, double const & a)"},
+	 { "R3_setY", _wrap_R3_setY, METH_VARARGS, "R3_setY(R3 self, double const & a)"},
+	 { "R3_setZ", _wrap_R3_setZ, METH_VARARGS, "R3_setZ(R3 self, double const & a)"},
+	 { "R3___iadd__", _wrap_R3___iadd__, METH_VARARGS, "R3___iadd__(R3 self, R3 v) -> R3"},
+	 { "R3___isub__", _wrap_R3___isub__, METH_VARARGS, "R3___isub__(R3 self, R3 v) -> R3"},
+	 { "R3_conj", _wrap_R3_conj, METH_O, "R3_conj(R3 self) -> R3"},
+	 { "R3_mag2", _wrap_R3_mag2, METH_O, "R3_mag2(R3 self) -> double"},
+	 { "R3_mag", _wrap_R3_mag, METH_O, "R3_mag(R3 self) -> double"},
+	 { "R3_magxy2", _wrap_R3_magxy2, METH_O, "R3_magxy2(R3 self) -> double"},
+	 { "R3_magxy", _wrap_R3_magxy, METH_O, "R3_magxy(R3 self) -> double"},
+	 { "R3_unit", _wrap_R3_unit, METH_O, "R3_unit(R3 self) -> R3"},
+	 { "R3_complex", _wrap_R3_complex, METH_O, "R3_complex(R3 self) -> C3"},
+	 { "R3_real", _wrap_R3_real, METH_O, "R3_real(R3 self) -> R3"},
+	 { "R3___eq__", _wrap_R3___eq__, METH_VARARGS, "R3___eq__(R3 self, R3 other) -> bool"},
+	 { "R3___ne__", _wrap_R3___ne__, METH_VARARGS, "R3___ne__(R3 self, R3 other) -> bool"},
+	 { "R3_rotatedY", _wrap_R3_rotatedY, METH_VARARGS, "R3_rotatedY(R3 self, double a) -> R3"},
+	 { "R3_rotatedZ", _wrap_R3_rotatedZ, METH_VARARGS, "R3_rotatedZ(R3 self, double a) -> R3"},
+	 { "delete_R3", _wrap_delete_R3, METH_O, "delete_R3(R3 self)"},
+	 { "R3_swigregister", R3_swigregister, METH_O, NULL},
+	 { "R3_swiginit", R3_swiginit, METH_VARARGS, NULL},
+	 { "new_C3", _wrap_new_C3, METH_VARARGS, "\n"
+		"C3(std::complex< double > const x_, std::complex< double > const y_, std::complex< double > const z_)\n"
+		"new_C3() -> C3\n"
+		""},
+	 { "C3_x", _wrap_C3_x, METH_O, "C3_x(C3 self) -> std::complex< double >"},
+	 { "C3_y", _wrap_C3_y, METH_O, "C3_y(C3 self) -> std::complex< double >"},
+	 { "C3_z", _wrap_C3_z, METH_O, "C3_z(C3 self) -> std::complex< double >"},
+	 { "C3_setX", _wrap_C3_setX, METH_VARARGS, "C3_setX(C3 self, std::complex< double > const & a)"},
+	 { "C3_setY", _wrap_C3_setY, METH_VARARGS, "C3_setY(C3 self, std::complex< double > const & a)"},
+	 { "C3_setZ", _wrap_C3_setZ, METH_VARARGS, "C3_setZ(C3 self, std::complex< double > const & a)"},
+	 { "C3___iadd__", _wrap_C3___iadd__, METH_VARARGS, "C3___iadd__(C3 self, C3 v) -> C3"},
+	 { "C3___isub__", _wrap_C3___isub__, METH_VARARGS, "C3___isub__(C3 self, C3 v) -> C3"},
+	 { "C3_conj", _wrap_C3_conj, METH_O, "C3_conj(C3 self) -> C3"},
+	 { "C3_mag2", _wrap_C3_mag2, METH_O, "C3_mag2(C3 self) -> double"},
+	 { "C3_mag", _wrap_C3_mag, METH_O, "C3_mag(C3 self) -> double"},
+	 { "C3_magxy2", _wrap_C3_magxy2, METH_O, "C3_magxy2(C3 self) -> double"},
+	 { "C3_magxy", _wrap_C3_magxy, METH_O, "C3_magxy(C3 self) -> double"},
+	 { "C3_unit", _wrap_C3_unit, METH_O, "C3_unit(C3 self) -> C3"},
+	 { "C3_complex", _wrap_C3_complex, METH_O, "C3_complex(C3 self) -> C3"},
+	 { "C3_real", _wrap_C3_real, METH_O, "C3_real(C3 self) -> R3"},
+	 { "C3___eq__", _wrap_C3___eq__, METH_VARARGS, "C3___eq__(C3 self, C3 other) -> bool"},
+	 { "C3___ne__", _wrap_C3___ne__, METH_VARARGS, "C3___ne__(C3 self, C3 other) -> bool"},
+	 { "C3_rotatedY", _wrap_C3_rotatedY, METH_VARARGS, "C3_rotatedY(C3 self, double a) -> C3"},
+	 { "C3_rotatedZ", _wrap_C3_rotatedZ, METH_VARARGS, "C3_rotatedZ(C3 self, double a) -> C3"},
+	 { "delete_C3", _wrap_delete_C3, METH_O, "delete_C3(C3 self)"},
+	 { "C3_swigregister", C3_swigregister, METH_O, NULL},
+	 { "C3_swiginit", C3_swiginit, METH_VARARGS, NULL},
+	 { "vector_R3_iterator", _wrap_vector_R3_iterator, METH_O, "vector_R3_iterator(vector_R3 self) -> SwigPyIterator"},
+	 { "vector_R3___nonzero__", _wrap_vector_R3___nonzero__, METH_O, "vector_R3___nonzero__(vector_R3 self) -> bool"},
+	 { "vector_R3___bool__", _wrap_vector_R3___bool__, METH_O, "vector_R3___bool__(vector_R3 self) -> bool"},
+	 { "vector_R3___len__", _wrap_vector_R3___len__, METH_O, "vector_R3___len__(vector_R3 self) -> std::vector< Vec3< double > >::size_type"},
+	 { "vector_R3___getslice__", _wrap_vector_R3___getslice__, METH_VARARGS, "vector_R3___getslice__(vector_R3 self, std::vector< Vec3< double > >::difference_type i, std::vector< Vec3< double > >::difference_type j) -> vector_R3"},
+	 { "vector_R3___setslice__", _wrap_vector_R3___setslice__, METH_VARARGS, "\n"
+		"vector_R3___setslice__(vector_R3 self, std::vector< Vec3< double > >::difference_type i, std::vector< Vec3< double > >::difference_type j)\n"
+		"vector_R3___setslice__(vector_R3 self, std::vector< Vec3< double > >::difference_type i, std::vector< Vec3< double > >::difference_type j, vector_R3 v)\n"
+		""},
+	 { "vector_R3___delslice__", _wrap_vector_R3___delslice__, METH_VARARGS, "vector_R3___delslice__(vector_R3 self, std::vector< Vec3< double > >::difference_type i, std::vector< Vec3< double > >::difference_type j)"},
+	 { "vector_R3___delitem__", _wrap_vector_R3___delitem__, METH_VARARGS, "\n"
+		"vector_R3___delitem__(vector_R3 self, std::vector< Vec3< double > >::difference_type i)\n"
+		"vector_R3___delitem__(vector_R3 self, SWIGPY_SLICEOBJECT * slice)\n"
 		""},
-	 { "Profile1DCosine_clone", _wrap_Profile1DCosine_clone, METH_O, "Profile1DCosine_clone(Profile1DCosine self) -> Profile1DCosine"},
-	 { "Profile1DCosine_className", _wrap_Profile1DCosine_className, METH_O, "Profile1DCosine_className(Profile1DCosine self) -> std::string"},
-	 { "Profile1DCosine_standardizedFT", _wrap_Profile1DCosine_standardizedFT, METH_VARARGS, "Profile1DCosine_standardizedFT(Profile1DCosine self, double q) -> double"},
-	 { "Profile1DCosine_decayFT", _wrap_Profile1DCosine_decayFT, METH_VARARGS, "Profile1DCosine_decayFT(Profile1DCosine self, double q) -> double"},
-	 { "Profile1DCosine_qSecondDerivative", _wrap_Profile1DCosine_qSecondDerivative, METH_O, "Profile1DCosine_qSecondDerivative(Profile1DCosine self) -> double"},
-	 { "delete_Profile1DCosine", _wrap_delete_Profile1DCosine, METH_O, "delete_Profile1DCosine(Profile1DCosine self)"},
-	 { "Profile1DCosine_swigregister", Profile1DCosine_swigregister, METH_O, NULL},
-	 { "Profile1DCosine_swiginit", Profile1DCosine_swiginit, METH_VARARGS, NULL},
-	 { "new_Profile1DVoigt", _wrap_new_Profile1DVoigt, METH_VARARGS, "\n"
-		"Profile1DVoigt(vdouble1d_t P)\n"
-		"new_Profile1DVoigt(double omega, double eta) -> Profile1DVoigt\n"
+	 { "vector_R3___getitem__", _wrap_vector_R3___getitem__, METH_VARARGS, "\n"
+		"vector_R3___getitem__(vector_R3 self, SWIGPY_SLICEOBJECT * slice) -> vector_R3\n"
+		"vector_R3___getitem__(vector_R3 self, std::vector< Vec3< double > >::difference_type i) -> R3\n"
 		""},
-	 { "Profile1DVoigt_clone", _wrap_Profile1DVoigt_clone, METH_O, "Profile1DVoigt_clone(Profile1DVoigt self) -> Profile1DVoigt"},
-	 { "Profile1DVoigt_className", _wrap_Profile1DVoigt_className, METH_O, "Profile1DVoigt_className(Profile1DVoigt self) -> std::string"},
-	 { "Profile1DVoigt_parDefs", _wrap_Profile1DVoigt_parDefs, METH_O, "Profile1DVoigt_parDefs(Profile1DVoigt self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "Profile1DVoigt_standardizedFT", _wrap_Profile1DVoigt_standardizedFT, METH_VARARGS, "Profile1DVoigt_standardizedFT(Profile1DVoigt self, double q) -> double"},
-	 { "Profile1DVoigt_decayFT", _wrap_Profile1DVoigt_decayFT, METH_VARARGS, "Profile1DVoigt_decayFT(Profile1DVoigt self, double q) -> double"},
-	 { "Profile1DVoigt_eta", _wrap_Profile1DVoigt_eta, METH_O, "Profile1DVoigt_eta(Profile1DVoigt self) -> double"},
-	 { "Profile1DVoigt_qSecondDerivative", _wrap_Profile1DVoigt_qSecondDerivative, METH_O, "Profile1DVoigt_qSecondDerivative(Profile1DVoigt self) -> double"},
-	 { "Profile1DVoigt_validate", _wrap_Profile1DVoigt_validate, METH_O, "Profile1DVoigt_validate(Profile1DVoigt self) -> std::string"},
-	 { "delete_Profile1DVoigt", _wrap_delete_Profile1DVoigt, METH_O, "delete_Profile1DVoigt(Profile1DVoigt self)"},
-	 { "Profile1DVoigt_swigregister", Profile1DVoigt_swigregister, METH_O, NULL},
-	 { "Profile1DVoigt_swiginit", Profile1DVoigt_swiginit, METH_VARARGS, NULL},
-	 { "IProfile2D_clone", _wrap_IProfile2D_clone, METH_O, "IProfile2D_clone(IProfile2D self) -> IProfile2D"},
-	 { "IProfile2D_parDefs", _wrap_IProfile2D_parDefs, METH_O, "IProfile2D_parDefs(IProfile2D self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "IProfile2D_omegaX", _wrap_IProfile2D_omegaX, METH_O, "IProfile2D_omegaX(IProfile2D self) -> double"},
-	 { "IProfile2D_omegaY", _wrap_IProfile2D_omegaY, METH_O, "IProfile2D_omegaY(IProfile2D self) -> double"},
-	 { "IProfile2D_decayLengthX", _wrap_IProfile2D_decayLengthX, METH_O, "IProfile2D_decayLengthX(IProfile2D self) -> double"},
-	 { "IProfile2D_decayLengthY", _wrap_IProfile2D_decayLengthY, METH_O, "IProfile2D_decayLengthY(IProfile2D self) -> double"},
-	 { "IProfile2D_gamma", _wrap_IProfile2D_gamma, METH_O, "IProfile2D_gamma(IProfile2D self) -> double"},
-	 { "IProfile2D_delta", _wrap_IProfile2D_delta, METH_O, "IProfile2D_delta(IProfile2D self) -> double"},
-	 { "IProfile2D_standardizedFT2D", _wrap_IProfile2D_standardizedFT2D, METH_VARARGS, "IProfile2D_standardizedFT2D(IProfile2D self, double qx, double qy) -> double"},
-	 { "IProfile2D_decayFT2D", _wrap_IProfile2D_decayFT2D, METH_VARARGS, "IProfile2D_decayFT2D(IProfile2D self, double qx, double qy) -> double"},
-	 { "IProfile2D_validate", _wrap_IProfile2D_validate, METH_O, "IProfile2D_validate(IProfile2D self) -> std::string"},
-	 { "delete_IProfile2D", _wrap_delete_IProfile2D, METH_O, "delete_IProfile2D(IProfile2D self)"},
-	 { "IProfile2D_swigregister", IProfile2D_swigregister, METH_O, NULL},
-	 { "new_Profile2DCauchy", _wrap_new_Profile2DCauchy, METH_VARARGS, "\n"
-		"Profile2DCauchy(vdouble1d_t P)\n"
-		"new_Profile2DCauchy(double omega_x, double omega_y, double gamma) -> Profile2DCauchy\n"
+	 { "vector_R3___setitem__", _wrap_vector_R3___setitem__, METH_VARARGS, "\n"
+		"vector_R3___setitem__(vector_R3 self, SWIGPY_SLICEOBJECT * slice, vector_R3 v)\n"
+		"vector_R3___setitem__(vector_R3 self, SWIGPY_SLICEOBJECT * slice)\n"
+		"vector_R3___setitem__(vector_R3 self, std::vector< Vec3< double > >::difference_type i, R3 x)\n"
 		""},
-	 { "Profile2DCauchy_clone", _wrap_Profile2DCauchy_clone, METH_O, "Profile2DCauchy_clone(Profile2DCauchy self) -> Profile2DCauchy"},
-	 { "Profile2DCauchy_className", _wrap_Profile2DCauchy_className, METH_O, "Profile2DCauchy_className(Profile2DCauchy self) -> std::string"},
-	 { "Profile2DCauchy_standardizedFT2D", _wrap_Profile2DCauchy_standardizedFT2D, METH_VARARGS, "Profile2DCauchy_standardizedFT2D(Profile2DCauchy self, double qx, double qy) -> double"},
-	 { "Profile2DCauchy_decayFT2D", _wrap_Profile2DCauchy_decayFT2D, METH_VARARGS, "Profile2DCauchy_decayFT2D(Profile2DCauchy self, double qx, double qy) -> double"},
-	 { "delete_Profile2DCauchy", _wrap_delete_Profile2DCauchy, METH_O, "delete_Profile2DCauchy(Profile2DCauchy self)"},
-	 { "Profile2DCauchy_swigregister", Profile2DCauchy_swigregister, METH_O, NULL},
-	 { "Profile2DCauchy_swiginit", Profile2DCauchy_swiginit, METH_VARARGS, NULL},
-	 { "new_Profile2DGauss", _wrap_new_Profile2DGauss, METH_VARARGS, "\n"
-		"Profile2DGauss(vdouble1d_t P)\n"
-		"new_Profile2DGauss(double omega_x, double omega_y, double gamma) -> Profile2DGauss\n"
+	 { "vector_R3_pop", _wrap_vector_R3_pop, METH_O, "vector_R3_pop(vector_R3 self) -> R3"},
+	 { "vector_R3_append", _wrap_vector_R3_append, METH_VARARGS, "vector_R3_append(vector_R3 self, R3 x)"},
+	 { "vector_R3_empty", _wrap_vector_R3_empty, METH_O, "vector_R3_empty(vector_R3 self) -> bool"},
+	 { "vector_R3_size", _wrap_vector_R3_size, METH_O, "vector_R3_size(vector_R3 self) -> std::vector< Vec3< double > >::size_type"},
+	 { "vector_R3_swap", _wrap_vector_R3_swap, METH_VARARGS, "vector_R3_swap(vector_R3 self, vector_R3 v)"},
+	 { "vector_R3_begin", _wrap_vector_R3_begin, METH_O, "vector_R3_begin(vector_R3 self) -> std::vector< Vec3< double > >::iterator"},
+	 { "vector_R3_end", _wrap_vector_R3_end, METH_O, "vector_R3_end(vector_R3 self) -> std::vector< Vec3< double > >::iterator"},
+	 { "vector_R3_rbegin", _wrap_vector_R3_rbegin, METH_O, "vector_R3_rbegin(vector_R3 self) -> std::vector< Vec3< double > >::reverse_iterator"},
+	 { "vector_R3_rend", _wrap_vector_R3_rend, METH_O, "vector_R3_rend(vector_R3 self) -> std::vector< Vec3< double > >::reverse_iterator"},
+	 { "vector_R3_clear", _wrap_vector_R3_clear, METH_O, "vector_R3_clear(vector_R3 self)"},
+	 { "vector_R3_get_allocator", _wrap_vector_R3_get_allocator, METH_O, "vector_R3_get_allocator(vector_R3 self) -> std::vector< Vec3< double > >::allocator_type"},
+	 { "vector_R3_pop_back", _wrap_vector_R3_pop_back, METH_O, "vector_R3_pop_back(vector_R3 self)"},
+	 { "vector_R3_erase", _wrap_vector_R3_erase, METH_VARARGS, "\n"
+		"vector_R3_erase(vector_R3 self, std::vector< Vec3< double > >::iterator pos) -> std::vector< Vec3< double > >::iterator\n"
+		"vector_R3_erase(vector_R3 self, std::vector< Vec3< double > >::iterator first, std::vector< Vec3< double > >::iterator last) -> std::vector< Vec3< double > >::iterator\n"
 		""},
-	 { "Profile2DGauss_clone", _wrap_Profile2DGauss_clone, METH_O, "Profile2DGauss_clone(Profile2DGauss self) -> Profile2DGauss"},
-	 { "Profile2DGauss_className", _wrap_Profile2DGauss_className, METH_O, "Profile2DGauss_className(Profile2DGauss self) -> std::string"},
-	 { "Profile2DGauss_standardizedFT2D", _wrap_Profile2DGauss_standardizedFT2D, METH_VARARGS, "Profile2DGauss_standardizedFT2D(Profile2DGauss self, double qx, double qy) -> double"},
-	 { "Profile2DGauss_decayFT2D", _wrap_Profile2DGauss_decayFT2D, METH_VARARGS, "Profile2DGauss_decayFT2D(Profile2DGauss self, double qx, double qy) -> double"},
-	 { "delete_Profile2DGauss", _wrap_delete_Profile2DGauss, METH_O, "delete_Profile2DGauss(Profile2DGauss self)"},
-	 { "Profile2DGauss_swigregister", Profile2DGauss_swigregister, METH_O, NULL},
-	 { "Profile2DGauss_swiginit", Profile2DGauss_swiginit, METH_VARARGS, NULL},
-	 { "new_Profile2DGate", _wrap_new_Profile2DGate, METH_VARARGS, "\n"
-		"Profile2DGate(vdouble1d_t P)\n"
-		"new_Profile2DGate(double omega_x, double omega_y, double gamma) -> Profile2DGate\n"
+	 { "new_vector_R3", _wrap_new_vector_R3, METH_VARARGS, "\n"
+		"vector_R3()\n"
+		"vector_R3(vector_R3 other)\n"
+		"vector_R3(std::vector< Vec3< double > >::size_type size)\n"
+		"new_vector_R3(std::vector< Vec3< double > >::size_type size, R3 value) -> vector_R3\n"
 		""},
-	 { "Profile2DGate_clone", _wrap_Profile2DGate_clone, METH_O, "Profile2DGate_clone(Profile2DGate self) -> Profile2DGate"},
-	 { "Profile2DGate_className", _wrap_Profile2DGate_className, METH_O, "Profile2DGate_className(Profile2DGate self) -> std::string"},
-	 { "Profile2DGate_standardizedFT2D", _wrap_Profile2DGate_standardizedFT2D, METH_VARARGS, "Profile2DGate_standardizedFT2D(Profile2DGate self, double qx, double qy) -> double"},
-	 { "Profile2DGate_decayFT2D", _wrap_Profile2DGate_decayFT2D, METH_VARARGS, "Profile2DGate_decayFT2D(Profile2DGate self, double qx, double qy) -> double"},
-	 { "delete_Profile2DGate", _wrap_delete_Profile2DGate, METH_O, "delete_Profile2DGate(Profile2DGate self)"},
-	 { "Profile2DGate_swigregister", Profile2DGate_swigregister, METH_O, NULL},
-	 { "Profile2DGate_swiginit", Profile2DGate_swiginit, METH_VARARGS, NULL},
-	 { "new_Profile2DCone", _wrap_new_Profile2DCone, METH_VARARGS, "\n"
-		"Profile2DCone(vdouble1d_t P)\n"
-		"new_Profile2DCone(double omega_x, double omega_y, double gamma) -> Profile2DCone\n"
+	 { "vector_R3_push_back", _wrap_vector_R3_push_back, METH_VARARGS, "vector_R3_push_back(vector_R3 self, R3 x)"},
+	 { "vector_R3_front", _wrap_vector_R3_front, METH_O, "vector_R3_front(vector_R3 self) -> R3"},
+	 { "vector_R3_back", _wrap_vector_R3_back, METH_O, "vector_R3_back(vector_R3 self) -> R3"},
+	 { "vector_R3_assign", _wrap_vector_R3_assign, METH_VARARGS, "vector_R3_assign(vector_R3 self, std::vector< Vec3< double > >::size_type n, R3 x)"},
+	 { "vector_R3_resize", _wrap_vector_R3_resize, METH_VARARGS, "\n"
+		"vector_R3_resize(vector_R3 self, std::vector< Vec3< double > >::size_type new_size)\n"
+		"vector_R3_resize(vector_R3 self, std::vector< Vec3< double > >::size_type new_size, R3 x)\n"
 		""},
-	 { "Profile2DCone_clone", _wrap_Profile2DCone_clone, METH_O, "Profile2DCone_clone(Profile2DCone self) -> Profile2DCone"},
-	 { "Profile2DCone_className", _wrap_Profile2DCone_className, METH_O, "Profile2DCone_className(Profile2DCone self) -> std::string"},
-	 { "Profile2DCone_standardizedFT2D", _wrap_Profile2DCone_standardizedFT2D, METH_VARARGS, "Profile2DCone_standardizedFT2D(Profile2DCone self, double qx, double qy) -> double"},
-	 { "Profile2DCone_decayFT2D", _wrap_Profile2DCone_decayFT2D, METH_VARARGS, "Profile2DCone_decayFT2D(Profile2DCone self, double qx, double qy) -> double"},
-	 { "delete_Profile2DCone", _wrap_delete_Profile2DCone, METH_O, "delete_Profile2DCone(Profile2DCone self)"},
-	 { "Profile2DCone_swigregister", Profile2DCone_swigregister, METH_O, NULL},
-	 { "Profile2DCone_swiginit", Profile2DCone_swiginit, METH_VARARGS, NULL},
-	 { "new_Profile2DVoigt", _wrap_new_Profile2DVoigt, METH_VARARGS, "\n"
-		"Profile2DVoigt(vdouble1d_t P)\n"
-		"new_Profile2DVoigt(double omega_x, double omega_y, double gamma, double eta) -> Profile2DVoigt\n"
+	 { "vector_R3_insert", _wrap_vector_R3_insert, METH_VARARGS, "\n"
+		"vector_R3_insert(vector_R3 self, std::vector< Vec3< double > >::iterator pos, R3 x) -> std::vector< Vec3< double > >::iterator\n"
+		"vector_R3_insert(vector_R3 self, std::vector< Vec3< double > >::iterator pos, std::vector< Vec3< double > >::size_type n, R3 x)\n"
 		""},
-	 { "Profile2DVoigt_clone", _wrap_Profile2DVoigt_clone, METH_O, "Profile2DVoigt_clone(Profile2DVoigt self) -> Profile2DVoigt"},
-	 { "Profile2DVoigt_className", _wrap_Profile2DVoigt_className, METH_O, "Profile2DVoigt_className(Profile2DVoigt self) -> std::string"},
-	 { "Profile2DVoigt_parDefs", _wrap_Profile2DVoigt_parDefs, METH_O, "Profile2DVoigt_parDefs(Profile2DVoigt self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "Profile2DVoigt_standardizedFT2D", _wrap_Profile2DVoigt_standardizedFT2D, METH_VARARGS, "Profile2DVoigt_standardizedFT2D(Profile2DVoigt self, double qx, double qy) -> double"},
-	 { "Profile2DVoigt_decayFT2D", _wrap_Profile2DVoigt_decayFT2D, METH_VARARGS, "Profile2DVoigt_decayFT2D(Profile2DVoigt self, double qx, double qy) -> double"},
-	 { "Profile2DVoigt_eta", _wrap_Profile2DVoigt_eta, METH_O, "Profile2DVoigt_eta(Profile2DVoigt self) -> double"},
-	 { "Profile2DVoigt_validate", _wrap_Profile2DVoigt_validate, METH_O, "Profile2DVoigt_validate(Profile2DVoigt self) -> std::string"},
-	 { "delete_Profile2DVoigt", _wrap_delete_Profile2DVoigt, METH_O, "delete_Profile2DVoigt(Profile2DVoigt self)"},
-	 { "Profile2DVoigt_swigregister", Profile2DVoigt_swigregister, METH_O, NULL},
-	 { "Profile2DVoigt_swiginit", Profile2DVoigt_swiginit, METH_VARARGS, NULL},
-	 { "delete_IPeakShape", _wrap_delete_IPeakShape, METH_O, "delete_IPeakShape(IPeakShape self)"},
-	 { "IPeakShape_clone", _wrap_IPeakShape_clone, METH_O, "IPeakShape_clone(IPeakShape self) -> IPeakShape"},
-	 { "IPeakShape_peakDistribution", _wrap_IPeakShape_peakDistribution, METH_VARARGS, "IPeakShape_peakDistribution(IPeakShape self, R3 q, R3 q_lattice_point) -> double"},
-	 { "IPeakShape_angularDisorder", _wrap_IPeakShape_angularDisorder, METH_O, "IPeakShape_angularDisorder(IPeakShape self) -> bool"},
-	 { "IPeakShape_swigregister", IPeakShape_swigregister, METH_O, NULL},
-	 { "new_IsotropicGaussPeakShape", _wrap_new_IsotropicGaussPeakShape, METH_VARARGS, "new_IsotropicGaussPeakShape(double max_intensity, double domainsize) -> IsotropicGaussPeakShape"},
-	 { "delete_IsotropicGaussPeakShape", _wrap_delete_IsotropicGaussPeakShape, METH_O, "delete_IsotropicGaussPeakShape(IsotropicGaussPeakShape self)"},
-	 { "IsotropicGaussPeakShape_clone", _wrap_IsotropicGaussPeakShape_clone, METH_O, "IsotropicGaussPeakShape_clone(IsotropicGaussPeakShape self) -> IsotropicGaussPeakShape"},
-	 { "IsotropicGaussPeakShape_className", _wrap_IsotropicGaussPeakShape_className, METH_O, "IsotropicGaussPeakShape_className(IsotropicGaussPeakShape self) -> std::string"},
-	 { "IsotropicGaussPeakShape_parDefs", _wrap_IsotropicGaussPeakShape_parDefs, METH_O, "IsotropicGaussPeakShape_parDefs(IsotropicGaussPeakShape self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "IsotropicGaussPeakShape_peakDistribution", _wrap_IsotropicGaussPeakShape_peakDistribution, METH_VARARGS, "IsotropicGaussPeakShape_peakDistribution(IsotropicGaussPeakShape self, R3 q, R3 q_lattice_point) -> double"},
-	 { "IsotropicGaussPeakShape_swigregister", IsotropicGaussPeakShape_swigregister, METH_O, NULL},
-	 { "IsotropicGaussPeakShape_swiginit", IsotropicGaussPeakShape_swiginit, METH_VARARGS, NULL},
-	 { "new_IsotropicLorentzPeakShape", _wrap_new_IsotropicLorentzPeakShape, METH_VARARGS, "new_IsotropicLorentzPeakShape(double max_intensity, double domainsize) -> IsotropicLorentzPeakShape"},
-	 { "delete_IsotropicLorentzPeakShape", _wrap_delete_IsotropicLorentzPeakShape, METH_O, "delete_IsotropicLorentzPeakShape(IsotropicLorentzPeakShape self)"},
-	 { "IsotropicLorentzPeakShape_clone", _wrap_IsotropicLorentzPeakShape_clone, METH_O, "IsotropicLorentzPeakShape_clone(IsotropicLorentzPeakShape self) -> IsotropicLorentzPeakShape"},
-	 { "IsotropicLorentzPeakShape_className", _wrap_IsotropicLorentzPeakShape_className, METH_O, "IsotropicLorentzPeakShape_className(IsotropicLorentzPeakShape self) -> std::string"},
-	 { "IsotropicLorentzPeakShape_parDefs", _wrap_IsotropicLorentzPeakShape_parDefs, METH_O, "IsotropicLorentzPeakShape_parDefs(IsotropicLorentzPeakShape self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "IsotropicLorentzPeakShape_peakDistribution", _wrap_IsotropicLorentzPeakShape_peakDistribution, METH_VARARGS, "IsotropicLorentzPeakShape_peakDistribution(IsotropicLorentzPeakShape self, R3 q, R3 q_lattice_point) -> double"},
-	 { "IsotropicLorentzPeakShape_swigregister", IsotropicLorentzPeakShape_swigregister, METH_O, NULL},
-	 { "IsotropicLorentzPeakShape_swiginit", IsotropicLorentzPeakShape_swiginit, METH_VARARGS, NULL},
-	 { "new_GaussFisherPeakShape", _wrap_new_GaussFisherPeakShape, METH_VARARGS, "new_GaussFisherPeakShape(double max_intensity, double radial_size, double kappa) -> GaussFisherPeakShape"},
-	 { "delete_GaussFisherPeakShape", _wrap_delete_GaussFisherPeakShape, METH_O, "delete_GaussFisherPeakShape(GaussFisherPeakShape self)"},
-	 { "GaussFisherPeakShape_clone", _wrap_GaussFisherPeakShape_clone, METH_O, "GaussFisherPeakShape_clone(GaussFisherPeakShape self) -> GaussFisherPeakShape"},
-	 { "GaussFisherPeakShape_className", _wrap_GaussFisherPeakShape_className, METH_O, "GaussFisherPeakShape_className(GaussFisherPeakShape self) -> std::string"},
-	 { "GaussFisherPeakShape_parDefs", _wrap_GaussFisherPeakShape_parDefs, METH_O, "GaussFisherPeakShape_parDefs(GaussFisherPeakShape self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "GaussFisherPeakShape_peakDistribution", _wrap_GaussFisherPeakShape_peakDistribution, METH_VARARGS, "GaussFisherPeakShape_peakDistribution(GaussFisherPeakShape self, R3 q, R3 q_lattice_point) -> double"},
-	 { "GaussFisherPeakShape_angularDisorder", _wrap_GaussFisherPeakShape_angularDisorder, METH_O, "GaussFisherPeakShape_angularDisorder(GaussFisherPeakShape self) -> bool"},
-	 { "GaussFisherPeakShape_swigregister", GaussFisherPeakShape_swigregister, METH_O, NULL},
-	 { "GaussFisherPeakShape_swiginit", GaussFisherPeakShape_swiginit, METH_VARARGS, NULL},
-	 { "new_LorentzFisherPeakShape", _wrap_new_LorentzFisherPeakShape, METH_VARARGS, "new_LorentzFisherPeakShape(double max_intensity, double radial_size, double kappa) -> LorentzFisherPeakShape"},
-	 { "delete_LorentzFisherPeakShape", _wrap_delete_LorentzFisherPeakShape, METH_O, "delete_LorentzFisherPeakShape(LorentzFisherPeakShape self)"},
-	 { "LorentzFisherPeakShape_clone", _wrap_LorentzFisherPeakShape_clone, METH_O, "LorentzFisherPeakShape_clone(LorentzFisherPeakShape self) -> LorentzFisherPeakShape"},
-	 { "LorentzFisherPeakShape_className", _wrap_LorentzFisherPeakShape_className, METH_O, "LorentzFisherPeakShape_className(LorentzFisherPeakShape self) -> std::string"},
-	 { "LorentzFisherPeakShape_parDefs", _wrap_LorentzFisherPeakShape_parDefs, METH_O, "LorentzFisherPeakShape_parDefs(LorentzFisherPeakShape self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "LorentzFisherPeakShape_peakDistribution", _wrap_LorentzFisherPeakShape_peakDistribution, METH_VARARGS, "LorentzFisherPeakShape_peakDistribution(LorentzFisherPeakShape self, R3 q, R3 q_lattice_point) -> double"},
-	 { "LorentzFisherPeakShape_angularDisorder", _wrap_LorentzFisherPeakShape_angularDisorder, METH_O, "LorentzFisherPeakShape_angularDisorder(LorentzFisherPeakShape self) -> bool"},
-	 { "LorentzFisherPeakShape_swigregister", LorentzFisherPeakShape_swigregister, METH_O, NULL},
-	 { "LorentzFisherPeakShape_swiginit", LorentzFisherPeakShape_swiginit, METH_VARARGS, NULL},
-	 { "new_MisesFisherGaussPeakShape", _wrap_new_MisesFisherGaussPeakShape, METH_VARARGS, "new_MisesFisherGaussPeakShape(double max_intensity, double radial_size, R3 zenith, double kappa_1, double kappa_2) -> MisesFisherGaussPeakShape"},
-	 { "delete_MisesFisherGaussPeakShape", _wrap_delete_MisesFisherGaussPeakShape, METH_O, "delete_MisesFisherGaussPeakShape(MisesFisherGaussPeakShape self)"},
-	 { "MisesFisherGaussPeakShape_clone", _wrap_MisesFisherGaussPeakShape_clone, METH_O, "MisesFisherGaussPeakShape_clone(MisesFisherGaussPeakShape self) -> MisesFisherGaussPeakShape"},
-	 { "MisesFisherGaussPeakShape_className", _wrap_MisesFisherGaussPeakShape_className, METH_O, "MisesFisherGaussPeakShape_className(MisesFisherGaussPeakShape self) -> std::string"},
-	 { "MisesFisherGaussPeakShape_parDefs", _wrap_MisesFisherGaussPeakShape_parDefs, METH_O, "MisesFisherGaussPeakShape_parDefs(MisesFisherGaussPeakShape self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "MisesFisherGaussPeakShape_peakDistribution", _wrap_MisesFisherGaussPeakShape_peakDistribution, METH_VARARGS, "MisesFisherGaussPeakShape_peakDistribution(MisesFisherGaussPeakShape self, R3 q, R3 q_lattice_point) -> double"},
-	 { "MisesFisherGaussPeakShape_angularDisorder", _wrap_MisesFisherGaussPeakShape_angularDisorder, METH_O, "MisesFisherGaussPeakShape_angularDisorder(MisesFisherGaussPeakShape self) -> bool"},
-	 { "MisesFisherGaussPeakShape_swigregister", MisesFisherGaussPeakShape_swigregister, METH_O, NULL},
-	 { "MisesFisherGaussPeakShape_swiginit", MisesFisherGaussPeakShape_swiginit, METH_VARARGS, NULL},
-	 { "new_MisesGaussPeakShape", _wrap_new_MisesGaussPeakShape, METH_VARARGS, "new_MisesGaussPeakShape(double max_intensity, double radial_size, R3 zenith, double kappa) -> MisesGaussPeakShape"},
-	 { "delete_MisesGaussPeakShape", _wrap_delete_MisesGaussPeakShape, METH_O, "delete_MisesGaussPeakShape(MisesGaussPeakShape self)"},
-	 { "MisesGaussPeakShape_clone", _wrap_MisesGaussPeakShape_clone, METH_O, "MisesGaussPeakShape_clone(MisesGaussPeakShape self) -> MisesGaussPeakShape"},
-	 { "MisesGaussPeakShape_className", _wrap_MisesGaussPeakShape_className, METH_O, "MisesGaussPeakShape_className(MisesGaussPeakShape self) -> std::string"},
-	 { "MisesGaussPeakShape_parDefs", _wrap_MisesGaussPeakShape_parDefs, METH_O, "MisesGaussPeakShape_parDefs(MisesGaussPeakShape self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "MisesGaussPeakShape_peakDistribution", _wrap_MisesGaussPeakShape_peakDistribution, METH_VARARGS, "MisesGaussPeakShape_peakDistribution(MisesGaussPeakShape self, R3 q, R3 q_lattice_point) -> double"},
-	 { "MisesGaussPeakShape_angularDisorder", _wrap_MisesGaussPeakShape_angularDisorder, METH_O, "MisesGaussPeakShape_angularDisorder(MisesGaussPeakShape self) -> bool"},
-	 { "MisesGaussPeakShape_swigregister", MisesGaussPeakShape_swigregister, METH_O, NULL},
-	 { "MisesGaussPeakShape_swiginit", MisesGaussPeakShape_swiginit, METH_VARARGS, NULL},
-	 { "IInterference_clone", _wrap_IInterference_clone, METH_O, "IInterference_clone(IInterference self) -> IInterference"},
-	 { "IInterference_structureFactor", _wrap_IInterference_structureFactor, METH_VARARGS, "IInterference_structureFactor(IInterference self, R3 q, double outer_iff=1.0) -> double"},
-	 { "IInterference_setPositionVariance", _wrap_IInterference_setPositionVariance, METH_VARARGS, "IInterference_setPositionVariance(IInterference self, double var)"},
-	 { "IInterference_positionVariance", _wrap_IInterference_positionVariance, METH_O, "IInterference_positionVariance(IInterference self) -> double"},
-	 { "IInterference_particleDensity", _wrap_IInterference_particleDensity, METH_O, "IInterference_particleDensity(IInterference self) -> double"},
-	 { "IInterference_supportsMultilayer", _wrap_IInterference_supportsMultilayer, METH_O, "IInterference_supportsMultilayer(IInterference self) -> bool"},
-	 { "IInterference_DWfactor", _wrap_IInterference_DWfactor, METH_VARARGS, "IInterference_DWfactor(IInterference self, R3 q) -> double"},
-	 { "delete_IInterference", _wrap_delete_IInterference, METH_O, "delete_IInterference(IInterference self)"},
-	 { "IInterference_swigregister", IInterference_swigregister, METH_O, NULL},
-	 { "new_Interference1DLattice", _wrap_new_Interference1DLattice, METH_VARARGS, "new_Interference1DLattice(double length, double xi) -> Interference1DLattice"},
-	 { "delete_Interference1DLattice", _wrap_delete_Interference1DLattice, METH_O, "delete_Interference1DLattice(Interference1DLattice self)"},
-	 { "Interference1DLattice_clone", _wrap_Interference1DLattice_clone, METH_O, "Interference1DLattice_clone(Interference1DLattice self) -> Interference1DLattice"},
-	 { "Interference1DLattice_className", _wrap_Interference1DLattice_className, METH_O, "Interference1DLattice_className(Interference1DLattice self) -> std::string"},
-	 { "Interference1DLattice_parDefs", _wrap_Interference1DLattice_parDefs, METH_O, "Interference1DLattice_parDefs(Interference1DLattice self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "Interference1DLattice_setDecayFunction", _wrap_Interference1DLattice_setDecayFunction, METH_VARARGS, "Interference1DLattice_setDecayFunction(Interference1DLattice self, IProfile1D decay)"},
-	 { "Interference1DLattice_length", _wrap_Interference1DLattice_length, METH_O, "Interference1DLattice_length(Interference1DLattice self) -> double"},
-	 { "Interference1DLattice_xi", _wrap_Interference1DLattice_xi, METH_O, "Interference1DLattice_xi(Interference1DLattice self) -> double"},
-	 { "Interference1DLattice_nodeChildren", _wrap_Interference1DLattice_nodeChildren, METH_O, "Interference1DLattice_nodeChildren(Interference1DLattice self) -> swig_dummy_type_const_inode_vector"},
-	 { "Interference1DLattice_validate", _wrap_Interference1DLattice_validate, METH_O, "Interference1DLattice_validate(Interference1DLattice self) -> std::string"},
-	 { "Interference1DLattice_swigregister", Interference1DLattice_swigregister, METH_O, NULL},
-	 { "Interference1DLattice_swiginit", Interference1DLattice_swiginit, METH_VARARGS, NULL},
-	 { "new_Interference2DLattice", _wrap_new_Interference2DLattice, METH_O, "new_Interference2DLattice(Lattice2D lattice) -> Interference2DLattice"},
-	 { "delete_Interference2DLattice", _wrap_delete_Interference2DLattice, METH_O, "delete_Interference2DLattice(Interference2DLattice self)"},
-	 { "Interference2DLattice_clone", _wrap_Interference2DLattice_clone, METH_O, "Interference2DLattice_clone(Interference2DLattice self) -> Interference2DLattice"},
-	 { "Interference2DLattice_className", _wrap_Interference2DLattice_className, METH_O, "Interference2DLattice_className(Interference2DLattice self) -> std::string"},
-	 { "Interference2DLattice_setDecayFunction", _wrap_Interference2DLattice_setDecayFunction, METH_VARARGS, "Interference2DLattice_setDecayFunction(Interference2DLattice self, IProfile2D decay)"},
-	 { "Interference2DLattice_setIntegrationOverXi", _wrap_Interference2DLattice_setIntegrationOverXi, METH_VARARGS, "Interference2DLattice_setIntegrationOverXi(Interference2DLattice self, bool integrate_xi)"},
-	 { "Interference2DLattice_integrationOverXi", _wrap_Interference2DLattice_integrationOverXi, METH_O, "Interference2DLattice_integrationOverXi(Interference2DLattice self) -> bool"},
-	 { "Interference2DLattice_lattice", _wrap_Interference2DLattice_lattice, METH_O, "Interference2DLattice_lattice(Interference2DLattice self) -> Lattice2D"},
-	 { "Interference2DLattice_particleDensity", _wrap_Interference2DLattice_particleDensity, METH_O, "Interference2DLattice_particleDensity(Interference2DLattice self) -> double"},
-	 { "Interference2DLattice_nodeChildren", _wrap_Interference2DLattice_nodeChildren, METH_O, "Interference2DLattice_nodeChildren(Interference2DLattice self) -> swig_dummy_type_const_inode_vector"},
-	 { "Interference2DLattice_swigregister", Interference2DLattice_swigregister, METH_O, NULL},
-	 { "Interference2DLattice_swiginit", Interference2DLattice_swiginit, METH_VARARGS, NULL},
-	 { "new_Interference2DParacrystal", _wrap_new_Interference2DParacrystal, METH_VARARGS, "new_Interference2DParacrystal(Lattice2D lattice, double damping_length, double domain_size_1, double domain_size_2) -> Interference2DParacrystal"},
-	 { "delete_Interference2DParacrystal", _wrap_delete_Interference2DParacrystal, METH_O, "delete_Interference2DParacrystal(Interference2DParacrystal self)"},
-	 { "Interference2DParacrystal_clone", _wrap_Interference2DParacrystal_clone, METH_O, "Interference2DParacrystal_clone(Interference2DParacrystal self) -> Interference2DParacrystal"},
-	 { "Interference2DParacrystal_className", _wrap_Interference2DParacrystal_className, METH_O, "Interference2DParacrystal_className(Interference2DParacrystal self) -> std::string"},
-	 { "Interference2DParacrystal_parDefs", _wrap_Interference2DParacrystal_parDefs, METH_O, "Interference2DParacrystal_parDefs(Interference2DParacrystal self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "Interference2DParacrystal_setDomainSizes", _wrap_Interference2DParacrystal_setDomainSizes, METH_VARARGS, "Interference2DParacrystal_setDomainSizes(Interference2DParacrystal self, double size_1, double size_2)"},
-	 { "Interference2DParacrystal_setProbabilityDistributions", _wrap_Interference2DParacrystal_setProbabilityDistributions, METH_VARARGS, "Interference2DParacrystal_setProbabilityDistributions(Interference2DParacrystal self, IProfile2D pdf_1, IProfile2D pdf_2)"},
-	 { "Interference2DParacrystal_setDampingLength", _wrap_Interference2DParacrystal_setDampingLength, METH_VARARGS, "Interference2DParacrystal_setDampingLength(Interference2DParacrystal self, double damping_length)"},
-	 { "Interference2DParacrystal_domainSizes", _wrap_Interference2DParacrystal_domainSizes, METH_O, "Interference2DParacrystal_domainSizes(Interference2DParacrystal self) -> vdouble1d_t"},
-	 { "Interference2DParacrystal_setIntegrationOverXi", _wrap_Interference2DParacrystal_setIntegrationOverXi, METH_VARARGS, "Interference2DParacrystal_setIntegrationOverXi(Interference2DParacrystal self, bool integrate_xi)"},
-	 { "Interference2DParacrystal_integrationOverXi", _wrap_Interference2DParacrystal_integrationOverXi, METH_O, "Interference2DParacrystal_integrationOverXi(Interference2DParacrystal self) -> bool"},
-	 { "Interference2DParacrystal_dampingLength", _wrap_Interference2DParacrystal_dampingLength, METH_O, "Interference2DParacrystal_dampingLength(Interference2DParacrystal self) -> double"},
-	 { "Interference2DParacrystal_lattice", _wrap_Interference2DParacrystal_lattice, METH_O, "Interference2DParacrystal_lattice(Interference2DParacrystal self) -> Lattice2D"},
-	 { "Interference2DParacrystal_particleDensity", _wrap_Interference2DParacrystal_particleDensity, METH_O, "Interference2DParacrystal_particleDensity(Interference2DParacrystal self) -> double"},
-	 { "Interference2DParacrystal_nodeChildren", _wrap_Interference2DParacrystal_nodeChildren, METH_O, "Interference2DParacrystal_nodeChildren(Interference2DParacrystal self) -> swig_dummy_type_const_inode_vector"},
-	 { "Interference2DParacrystal_pdf1", _wrap_Interference2DParacrystal_pdf1, METH_O, "Interference2DParacrystal_pdf1(Interference2DParacrystal self) -> IProfile2D"},
-	 { "Interference2DParacrystal_pdf2", _wrap_Interference2DParacrystal_pdf2, METH_O, "Interference2DParacrystal_pdf2(Interference2DParacrystal self) -> IProfile2D"},
-	 { "Interference2DParacrystal_validate", _wrap_Interference2DParacrystal_validate, METH_O, "Interference2DParacrystal_validate(Interference2DParacrystal self) -> std::string"},
-	 { "Interference2DParacrystal_swigregister", Interference2DParacrystal_swigregister, METH_O, NULL},
-	 { "Interference2DParacrystal_swiginit", Interference2DParacrystal_swiginit, METH_VARARGS, NULL},
-	 { "new_Interference2DSuperLattice", _wrap_new_Interference2DSuperLattice, METH_VARARGS, "\n"
-		"Interference2DSuperLattice(Lattice2D lattice, unsigned int size_1, unsigned int size_2)\n"
-		"new_Interference2DSuperLattice(double length_1, double length_2, double alpha, double xi, unsigned int size_1, unsigned int size_2) -> Interference2DSuperLattice\n"
+	 { "vector_R3_reserve", _wrap_vector_R3_reserve, METH_VARARGS, "vector_R3_reserve(vector_R3 self, std::vector< Vec3< double > >::size_type n)"},
+	 { "vector_R3_capacity", _wrap_vector_R3_capacity, METH_O, "vector_R3_capacity(vector_R3 self) -> std::vector< Vec3< double > >::size_type"},
+	 { "delete_vector_R3", _wrap_delete_vector_R3, METH_O, "delete_vector_R3(vector_R3 self)"},
+	 { "vector_R3_swigregister", vector_R3_swigregister, METH_O, NULL},
+	 { "vector_R3_swiginit", vector_R3_swiginit, METH_VARARGS, NULL},
+	 { "swig_dummy_type_inode_vector_iterator", _wrap_swig_dummy_type_inode_vector_iterator, METH_O, "swig_dummy_type_inode_vector_iterator(swig_dummy_type_inode_vector self) -> SwigPyIterator"},
+	 { "swig_dummy_type_inode_vector___nonzero__", _wrap_swig_dummy_type_inode_vector___nonzero__, METH_O, "swig_dummy_type_inode_vector___nonzero__(swig_dummy_type_inode_vector self) -> bool"},
+	 { "swig_dummy_type_inode_vector___bool__", _wrap_swig_dummy_type_inode_vector___bool__, METH_O, "swig_dummy_type_inode_vector___bool__(swig_dummy_type_inode_vector self) -> bool"},
+	 { "swig_dummy_type_inode_vector___len__", _wrap_swig_dummy_type_inode_vector___len__, METH_O, "swig_dummy_type_inode_vector___len__(swig_dummy_type_inode_vector self) -> std::vector< INode * >::size_type"},
+	 { "swig_dummy_type_inode_vector___getslice__", _wrap_swig_dummy_type_inode_vector___getslice__, METH_VARARGS, "swig_dummy_type_inode_vector___getslice__(swig_dummy_type_inode_vector self, std::vector< INode * >::difference_type i, std::vector< INode * >::difference_type j) -> swig_dummy_type_inode_vector"},
+	 { "swig_dummy_type_inode_vector___setslice__", _wrap_swig_dummy_type_inode_vector___setslice__, METH_VARARGS, "\n"
+		"swig_dummy_type_inode_vector___setslice__(swig_dummy_type_inode_vector self, std::vector< INode * >::difference_type i, std::vector< INode * >::difference_type j)\n"
+		"swig_dummy_type_inode_vector___setslice__(swig_dummy_type_inode_vector self, std::vector< INode * >::difference_type i, std::vector< INode * >::difference_type j, swig_dummy_type_inode_vector v)\n"
+		""},
+	 { "swig_dummy_type_inode_vector___delslice__", _wrap_swig_dummy_type_inode_vector___delslice__, METH_VARARGS, "swig_dummy_type_inode_vector___delslice__(swig_dummy_type_inode_vector self, std::vector< INode * >::difference_type i, std::vector< INode * >::difference_type j)"},
+	 { "swig_dummy_type_inode_vector___delitem__", _wrap_swig_dummy_type_inode_vector___delitem__, METH_VARARGS, "\n"
+		"swig_dummy_type_inode_vector___delitem__(swig_dummy_type_inode_vector self, std::vector< INode * >::difference_type i)\n"
+		"swig_dummy_type_inode_vector___delitem__(swig_dummy_type_inode_vector self, SWIGPY_SLICEOBJECT * slice)\n"
 		""},
-	 { "delete_Interference2DSuperLattice", _wrap_delete_Interference2DSuperLattice, METH_O, "delete_Interference2DSuperLattice(Interference2DSuperLattice self)"},
-	 { "Interference2DSuperLattice_clone", _wrap_Interference2DSuperLattice_clone, METH_O, "Interference2DSuperLattice_clone(Interference2DSuperLattice self) -> Interference2DSuperLattice"},
-	 { "Interference2DSuperLattice_className", _wrap_Interference2DSuperLattice_className, METH_O, "Interference2DSuperLattice_className(Interference2DSuperLattice self) -> std::string"},
-	 { "Interference2DSuperLattice_parDefs", _wrap_Interference2DSuperLattice_parDefs, METH_O, "Interference2DSuperLattice_parDefs(Interference2DSuperLattice self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "Interference2DSuperLattice_setSubstructureIFF", _wrap_Interference2DSuperLattice_setSubstructureIFF, METH_VARARGS, "Interference2DSuperLattice_setSubstructureIFF(Interference2DSuperLattice self, IInterference sub_iff)"},
-	 { "Interference2DSuperLattice_substructureIFF", _wrap_Interference2DSuperLattice_substructureIFF, METH_O, "Interference2DSuperLattice_substructureIFF(Interference2DSuperLattice self) -> IInterference"},
-	 { "Interference2DSuperLattice_structureFactor", _wrap_Interference2DSuperLattice_structureFactor, METH_VARARGS, "Interference2DSuperLattice_structureFactor(Interference2DSuperLattice self, R3 q, double outer_iff=1.0) -> double"},
-	 { "Interference2DSuperLattice_domainSize1", _wrap_Interference2DSuperLattice_domainSize1, METH_O, "Interference2DSuperLattice_domainSize1(Interference2DSuperLattice self) -> unsigned int"},
-	 { "Interference2DSuperLattice_domainSize2", _wrap_Interference2DSuperLattice_domainSize2, METH_O, "Interference2DSuperLattice_domainSize2(Interference2DSuperLattice self) -> unsigned int"},
-	 { "Interference2DSuperLattice_setIntegrationOverXi", _wrap_Interference2DSuperLattice_setIntegrationOverXi, METH_VARARGS, "Interference2DSuperLattice_setIntegrationOverXi(Interference2DSuperLattice self, bool integrate_xi)"},
-	 { "Interference2DSuperLattice_integrationOverXi", _wrap_Interference2DSuperLattice_integrationOverXi, METH_O, "Interference2DSuperLattice_integrationOverXi(Interference2DSuperLattice self) -> bool"},
-	 { "Interference2DSuperLattice_lattice", _wrap_Interference2DSuperLattice_lattice, METH_O, "Interference2DSuperLattice_lattice(Interference2DSuperLattice self) -> Lattice2D"},
-	 { "Interference2DSuperLattice_nodeChildren", _wrap_Interference2DSuperLattice_nodeChildren, METH_O, "Interference2DSuperLattice_nodeChildren(Interference2DSuperLattice self) -> swig_dummy_type_const_inode_vector"},
-	 { "Interference2DSuperLattice_swigregister", Interference2DSuperLattice_swigregister, METH_O, NULL},
-	 { "Interference2DSuperLattice_swiginit", Interference2DSuperLattice_swiginit, METH_VARARGS, NULL},
-	 { "new_InterferenceFinite2DLattice", _wrap_new_InterferenceFinite2DLattice, METH_VARARGS, "new_InterferenceFinite2DLattice(Lattice2D lattice, unsigned int N_1, unsigned int N_2) -> InterferenceFinite2DLattice"},
-	 { "delete_InterferenceFinite2DLattice", _wrap_delete_InterferenceFinite2DLattice, METH_O, "delete_InterferenceFinite2DLattice(InterferenceFinite2DLattice self)"},
-	 { "InterferenceFinite2DLattice_clone", _wrap_InterferenceFinite2DLattice_clone, METH_O, "InterferenceFinite2DLattice_clone(InterferenceFinite2DLattice self) -> InterferenceFinite2DLattice"},
-	 { "InterferenceFinite2DLattice_className", _wrap_InterferenceFinite2DLattice_className, METH_O, "InterferenceFinite2DLattice_className(InterferenceFinite2DLattice self) -> std::string"},
-	 { "InterferenceFinite2DLattice_numberUnitCells1", _wrap_InterferenceFinite2DLattice_numberUnitCells1, METH_O, "InterferenceFinite2DLattice_numberUnitCells1(InterferenceFinite2DLattice self) -> unsigned int"},
-	 { "InterferenceFinite2DLattice_numberUnitCells2", _wrap_InterferenceFinite2DLattice_numberUnitCells2, METH_O, "InterferenceFinite2DLattice_numberUnitCells2(InterferenceFinite2DLattice self) -> unsigned int"},
-	 { "InterferenceFinite2DLattice_setIntegrationOverXi", _wrap_InterferenceFinite2DLattice_setIntegrationOverXi, METH_VARARGS, "InterferenceFinite2DLattice_setIntegrationOverXi(InterferenceFinite2DLattice self, bool integrate_xi)"},
-	 { "InterferenceFinite2DLattice_integrationOverXi", _wrap_InterferenceFinite2DLattice_integrationOverXi, METH_O, "InterferenceFinite2DLattice_integrationOverXi(InterferenceFinite2DLattice self) -> bool"},
-	 { "InterferenceFinite2DLattice_lattice", _wrap_InterferenceFinite2DLattice_lattice, METH_O, "InterferenceFinite2DLattice_lattice(InterferenceFinite2DLattice self) -> Lattice2D"},
-	 { "InterferenceFinite2DLattice_particleDensity", _wrap_InterferenceFinite2DLattice_particleDensity, METH_O, "InterferenceFinite2DLattice_particleDensity(InterferenceFinite2DLattice self) -> double"},
-	 { "InterferenceFinite2DLattice_nodeChildren", _wrap_InterferenceFinite2DLattice_nodeChildren, METH_O, "InterferenceFinite2DLattice_nodeChildren(InterferenceFinite2DLattice self) -> swig_dummy_type_const_inode_vector"},
-	 { "InterferenceFinite2DLattice_swigregister", InterferenceFinite2DLattice_swigregister, METH_O, NULL},
-	 { "InterferenceFinite2DLattice_swiginit", InterferenceFinite2DLattice_swiginit, METH_VARARGS, NULL},
-	 { "new_InterferenceHardDisk", _wrap_new_InterferenceHardDisk, METH_VARARGS, "InterferenceHardDisk(double radius, double density, double position_var=0)"},
-	 { "delete_InterferenceHardDisk", _wrap_delete_InterferenceHardDisk, METH_O, "delete_InterferenceHardDisk(InterferenceHardDisk self)"},
-	 { "InterferenceHardDisk_parDefs", _wrap_InterferenceHardDisk_parDefs, METH_O, "InterferenceHardDisk_parDefs(InterferenceHardDisk self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "InterferenceHardDisk_clone", _wrap_InterferenceHardDisk_clone, METH_O, "InterferenceHardDisk_clone(InterferenceHardDisk self) -> InterferenceHardDisk"},
-	 { "InterferenceHardDisk_className", _wrap_InterferenceHardDisk_className, METH_O, "InterferenceHardDisk_className(InterferenceHardDisk self) -> std::string"},
-	 { "InterferenceHardDisk_particleDensity", _wrap_InterferenceHardDisk_particleDensity, METH_O, "InterferenceHardDisk_particleDensity(InterferenceHardDisk self) -> double"},
-	 { "InterferenceHardDisk_radius", _wrap_InterferenceHardDisk_radius, METH_O, "InterferenceHardDisk_radius(InterferenceHardDisk self) -> double"},
-	 { "InterferenceHardDisk_density", _wrap_InterferenceHardDisk_density, METH_O, "InterferenceHardDisk_density(InterferenceHardDisk self) -> double"},
-	 { "InterferenceHardDisk_validate", _wrap_InterferenceHardDisk_validate, METH_O, "InterferenceHardDisk_validate(InterferenceHardDisk self) -> std::string"},
-	 { "InterferenceHardDisk_swigregister", InterferenceHardDisk_swigregister, METH_O, NULL},
-	 { "InterferenceHardDisk_swiginit", InterferenceHardDisk_swiginit, METH_VARARGS, NULL},
-	 { "new_InterferenceNone", _wrap_new_InterferenceNone, METH_NOARGS, "new_InterferenceNone() -> InterferenceNone"},
-	 { "InterferenceNone_clone", _wrap_InterferenceNone_clone, METH_O, "InterferenceNone_clone(InterferenceNone self) -> InterferenceNone"},
-	 { "InterferenceNone_className", _wrap_InterferenceNone_className, METH_O, "InterferenceNone_className(InterferenceNone self) -> std::string"},
-	 { "delete_InterferenceNone", _wrap_delete_InterferenceNone, METH_O, "delete_InterferenceNone(InterferenceNone self)"},
-	 { "InterferenceNone_swigregister", InterferenceNone_swigregister, METH_O, NULL},
-	 { "InterferenceNone_swiginit", InterferenceNone_swiginit, METH_VARARGS, NULL},
-	 { "new_InterferenceRadialParacrystal", _wrap_new_InterferenceRadialParacrystal, METH_VARARGS, "new_InterferenceRadialParacrystal(double peak_distance, double damping_length) -> InterferenceRadialParacrystal"},
-	 { "InterferenceRadialParacrystal_clone", _wrap_InterferenceRadialParacrystal_clone, METH_O, "InterferenceRadialParacrystal_clone(InterferenceRadialParacrystal self) -> InterferenceRadialParacrystal"},
-	 { "InterferenceRadialParacrystal_className", _wrap_InterferenceRadialParacrystal_className, METH_O, "InterferenceRadialParacrystal_className(InterferenceRadialParacrystal self) -> std::string"},
-	 { "InterferenceRadialParacrystal_parDefs", _wrap_InterferenceRadialParacrystal_parDefs, METH_O, "InterferenceRadialParacrystal_parDefs(InterferenceRadialParacrystal self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "InterferenceRadialParacrystal_setKappa", _wrap_InterferenceRadialParacrystal_setKappa, METH_VARARGS, "InterferenceRadialParacrystal_setKappa(InterferenceRadialParacrystal self, double kappa)"},
-	 { "InterferenceRadialParacrystal_kappa", _wrap_InterferenceRadialParacrystal_kappa, METH_O, "InterferenceRadialParacrystal_kappa(InterferenceRadialParacrystal self) -> double"},
-	 { "InterferenceRadialParacrystal_setDomainSize", _wrap_InterferenceRadialParacrystal_setDomainSize, METH_VARARGS, "InterferenceRadialParacrystal_setDomainSize(InterferenceRadialParacrystal self, double size)"},
-	 { "InterferenceRadialParacrystal_domainSize", _wrap_InterferenceRadialParacrystal_domainSize, METH_O, "InterferenceRadialParacrystal_domainSize(InterferenceRadialParacrystal self) -> double"},
-	 { "InterferenceRadialParacrystal_FTPDF", _wrap_InterferenceRadialParacrystal_FTPDF, METH_VARARGS, "InterferenceRadialParacrystal_FTPDF(InterferenceRadialParacrystal self, double qpar) -> complex_t"},
-	 { "InterferenceRadialParacrystal_setProbabilityDistribution", _wrap_InterferenceRadialParacrystal_setProbabilityDistribution, METH_VARARGS, "InterferenceRadialParacrystal_setProbabilityDistribution(InterferenceRadialParacrystal self, IProfile1D pdf)"},
-	 { "InterferenceRadialParacrystal_peakDistance", _wrap_InterferenceRadialParacrystal_peakDistance, METH_O, "InterferenceRadialParacrystal_peakDistance(InterferenceRadialParacrystal self) -> double"},
-	 { "InterferenceRadialParacrystal_dampingLength", _wrap_InterferenceRadialParacrystal_dampingLength, METH_O, "InterferenceRadialParacrystal_dampingLength(InterferenceRadialParacrystal self) -> double"},
-	 { "InterferenceRadialParacrystal_nodeChildren", _wrap_InterferenceRadialParacrystal_nodeChildren, METH_O, "InterferenceRadialParacrystal_nodeChildren(InterferenceRadialParacrystal self) -> swig_dummy_type_const_inode_vector"},
-	 { "InterferenceRadialParacrystal_randomSample", _wrap_InterferenceRadialParacrystal_randomSample, METH_O, "InterferenceRadialParacrystal_randomSample(InterferenceRadialParacrystal self) -> double"},
-	 { "InterferenceRadialParacrystal_validate", _wrap_InterferenceRadialParacrystal_validate, METH_O, "InterferenceRadialParacrystal_validate(InterferenceRadialParacrystal self) -> std::string"},
-	 { "delete_InterferenceRadialParacrystal", _wrap_delete_InterferenceRadialParacrystal, METH_O, "delete_InterferenceRadialParacrystal(InterferenceRadialParacrystal self)"},
-	 { "InterferenceRadialParacrystal_swigregister", InterferenceRadialParacrystal_swigregister, METH_O, NULL},
-	 { "InterferenceRadialParacrystal_swiginit", InterferenceRadialParacrystal_swiginit, METH_VARARGS, NULL},
-	 { "new_ParticleLayout", _wrap_new_ParticleLayout, METH_VARARGS, "\n"
-		"ParticleLayout()\n"
-		"ParticleLayout(IParticle particle, double abundance=-1.0)\n"
+	 { "swig_dummy_type_inode_vector___getitem__", _wrap_swig_dummy_type_inode_vector___getitem__, METH_VARARGS, "\n"
+		"swig_dummy_type_inode_vector___getitem__(swig_dummy_type_inode_vector self, SWIGPY_SLICEOBJECT * slice) -> swig_dummy_type_inode_vector\n"
+		"swig_dummy_type_inode_vector___getitem__(swig_dummy_type_inode_vector self, std::vector< INode * >::difference_type i) -> INode\n"
 		""},
-	 { "delete_ParticleLayout", _wrap_delete_ParticleLayout, METH_O, "delete_ParticleLayout(ParticleLayout self)"},
-	 { "ParticleLayout_clone", _wrap_ParticleLayout_clone, METH_O, "ParticleLayout_clone(ParticleLayout self) -> ParticleLayout"},
-	 { "ParticleLayout_className", _wrap_ParticleLayout_className, METH_O, "ParticleLayout_className(ParticleLayout self) -> std::string"},
-	 { "ParticleLayout_parDefs", _wrap_ParticleLayout_parDefs, METH_O, "ParticleLayout_parDefs(ParticleLayout self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "ParticleLayout_nodeChildren", _wrap_ParticleLayout_nodeChildren, METH_O, "ParticleLayout_nodeChildren(ParticleLayout self) -> swig_dummy_type_const_inode_vector"},
-	 { "ParticleLayout_addParticle", _wrap_ParticleLayout_addParticle, METH_VARARGS, "ParticleLayout_addParticle(ParticleLayout self, IParticle particle, double abundance=-1.0)"},
-	 { "ParticleLayout_particles", _wrap_ParticleLayout_particles, METH_O, "ParticleLayout_particles(ParticleLayout self) -> std::vector< IParticle const *,std::allocator< IParticle const * > >"},
-	 { "ParticleLayout_interferenceFunction", _wrap_ParticleLayout_interferenceFunction, METH_O, "ParticleLayout_interferenceFunction(ParticleLayout self) -> IInterference"},
-	 { "ParticleLayout_setInterference", _wrap_ParticleLayout_setInterference, METH_VARARGS, "ParticleLayout_setInterference(ParticleLayout self, IInterference interparticle)"},
-	 { "ParticleLayout_totalParticleSurfaceDensity", _wrap_ParticleLayout_totalParticleSurfaceDensity, METH_O, "ParticleLayout_totalParticleSurfaceDensity(ParticleLayout self) -> double"},
-	 { "ParticleLayout_setTotalParticleSurfaceDensity", _wrap_ParticleLayout_setTotalParticleSurfaceDensity, METH_VARARGS, "ParticleLayout_setTotalParticleSurfaceDensity(ParticleLayout self, double particle_density)"},
-	 { "ParticleLayout_totalAbundance", _wrap_ParticleLayout_totalAbundance, METH_O, "ParticleLayout_totalAbundance(ParticleLayout self) -> double"},
-	 { "ParticleLayout_validate", _wrap_ParticleLayout_validate, METH_O, "ParticleLayout_validate(ParticleLayout self) -> std::string"},
-	 { "ParticleLayout_swigregister", ParticleLayout_swigregister, METH_O, NULL},
-	 { "ParticleLayout_swiginit", ParticleLayout_swiginit, METH_VARARGS, NULL},
-	 { "new_LayerRoughness", _wrap_new_LayerRoughness, METH_VARARGS, "\n"
-		"LayerRoughness(double sigma, double hurstParameter=0, double lateralCorrLength=0)\n"
-		"new_LayerRoughness() -> LayerRoughness\n"
+	 { "swig_dummy_type_inode_vector___setitem__", _wrap_swig_dummy_type_inode_vector___setitem__, METH_VARARGS, "\n"
+		"swig_dummy_type_inode_vector___setitem__(swig_dummy_type_inode_vector self, SWIGPY_SLICEOBJECT * slice, swig_dummy_type_inode_vector v)\n"
+		"swig_dummy_type_inode_vector___setitem__(swig_dummy_type_inode_vector self, SWIGPY_SLICEOBJECT * slice)\n"
+		"swig_dummy_type_inode_vector___setitem__(swig_dummy_type_inode_vector self, std::vector< INode * >::difference_type i, INode x)\n"
+		""},
+	 { "swig_dummy_type_inode_vector_pop", _wrap_swig_dummy_type_inode_vector_pop, METH_O, "swig_dummy_type_inode_vector_pop(swig_dummy_type_inode_vector self) -> INode"},
+	 { "swig_dummy_type_inode_vector_append", _wrap_swig_dummy_type_inode_vector_append, METH_VARARGS, "swig_dummy_type_inode_vector_append(swig_dummy_type_inode_vector self, INode x)"},
+	 { "swig_dummy_type_inode_vector_empty", _wrap_swig_dummy_type_inode_vector_empty, METH_O, "swig_dummy_type_inode_vector_empty(swig_dummy_type_inode_vector self) -> bool"},
+	 { "swig_dummy_type_inode_vector_size", _wrap_swig_dummy_type_inode_vector_size, METH_O, "swig_dummy_type_inode_vector_size(swig_dummy_type_inode_vector self) -> std::vector< INode * >::size_type"},
+	 { "swig_dummy_type_inode_vector_swap", _wrap_swig_dummy_type_inode_vector_swap, METH_VARARGS, "swig_dummy_type_inode_vector_swap(swig_dummy_type_inode_vector self, swig_dummy_type_inode_vector v)"},
+	 { "swig_dummy_type_inode_vector_begin", _wrap_swig_dummy_type_inode_vector_begin, METH_O, "swig_dummy_type_inode_vector_begin(swig_dummy_type_inode_vector self) -> std::vector< INode * >::iterator"},
+	 { "swig_dummy_type_inode_vector_end", _wrap_swig_dummy_type_inode_vector_end, METH_O, "swig_dummy_type_inode_vector_end(swig_dummy_type_inode_vector self) -> std::vector< INode * >::iterator"},
+	 { "swig_dummy_type_inode_vector_rbegin", _wrap_swig_dummy_type_inode_vector_rbegin, METH_O, "swig_dummy_type_inode_vector_rbegin(swig_dummy_type_inode_vector self) -> std::vector< INode * >::reverse_iterator"},
+	 { "swig_dummy_type_inode_vector_rend", _wrap_swig_dummy_type_inode_vector_rend, METH_O, "swig_dummy_type_inode_vector_rend(swig_dummy_type_inode_vector self) -> std::vector< INode * >::reverse_iterator"},
+	 { "swig_dummy_type_inode_vector_clear", _wrap_swig_dummy_type_inode_vector_clear, METH_O, "swig_dummy_type_inode_vector_clear(swig_dummy_type_inode_vector self)"},
+	 { "swig_dummy_type_inode_vector_get_allocator", _wrap_swig_dummy_type_inode_vector_get_allocator, METH_O, "swig_dummy_type_inode_vector_get_allocator(swig_dummy_type_inode_vector self) -> std::vector< INode * >::allocator_type"},
+	 { "swig_dummy_type_inode_vector_pop_back", _wrap_swig_dummy_type_inode_vector_pop_back, METH_O, "swig_dummy_type_inode_vector_pop_back(swig_dummy_type_inode_vector self)"},
+	 { "swig_dummy_type_inode_vector_erase", _wrap_swig_dummy_type_inode_vector_erase, METH_VARARGS, "\n"
+		"swig_dummy_type_inode_vector_erase(swig_dummy_type_inode_vector self, std::vector< INode * >::iterator pos) -> std::vector< INode * >::iterator\n"
+		"swig_dummy_type_inode_vector_erase(swig_dummy_type_inode_vector self, std::vector< INode * >::iterator first, std::vector< INode * >::iterator last) -> std::vector< INode * >::iterator\n"
+		""},
+	 { "new_swig_dummy_type_inode_vector", _wrap_new_swig_dummy_type_inode_vector, METH_VARARGS, "\n"
+		"swig_dummy_type_inode_vector()\n"
+		"swig_dummy_type_inode_vector(swig_dummy_type_inode_vector other)\n"
+		"swig_dummy_type_inode_vector(std::vector< INode * >::size_type size)\n"
+		"new_swig_dummy_type_inode_vector(std::vector< INode * >::size_type size, INode value) -> swig_dummy_type_inode_vector\n"
+		""},
+	 { "swig_dummy_type_inode_vector_push_back", _wrap_swig_dummy_type_inode_vector_push_back, METH_VARARGS, "swig_dummy_type_inode_vector_push_back(swig_dummy_type_inode_vector self, INode x)"},
+	 { "swig_dummy_type_inode_vector_front", _wrap_swig_dummy_type_inode_vector_front, METH_O, "swig_dummy_type_inode_vector_front(swig_dummy_type_inode_vector self) -> INode"},
+	 { "swig_dummy_type_inode_vector_back", _wrap_swig_dummy_type_inode_vector_back, METH_O, "swig_dummy_type_inode_vector_back(swig_dummy_type_inode_vector self) -> INode"},
+	 { "swig_dummy_type_inode_vector_assign", _wrap_swig_dummy_type_inode_vector_assign, METH_VARARGS, "swig_dummy_type_inode_vector_assign(swig_dummy_type_inode_vector self, std::vector< INode * >::size_type n, INode x)"},
+	 { "swig_dummy_type_inode_vector_resize", _wrap_swig_dummy_type_inode_vector_resize, METH_VARARGS, "\n"
+		"swig_dummy_type_inode_vector_resize(swig_dummy_type_inode_vector self, std::vector< INode * >::size_type new_size)\n"
+		"swig_dummy_type_inode_vector_resize(swig_dummy_type_inode_vector self, std::vector< INode * >::size_type new_size, INode x)\n"
+		""},
+	 { "swig_dummy_type_inode_vector_insert", _wrap_swig_dummy_type_inode_vector_insert, METH_VARARGS, "\n"
+		"swig_dummy_type_inode_vector_insert(swig_dummy_type_inode_vector self, std::vector< INode * >::iterator pos, INode x) -> std::vector< INode * >::iterator\n"
+		"swig_dummy_type_inode_vector_insert(swig_dummy_type_inode_vector self, std::vector< INode * >::iterator pos, std::vector< INode * >::size_type n, INode x)\n"
+		""},
+	 { "swig_dummy_type_inode_vector_reserve", _wrap_swig_dummy_type_inode_vector_reserve, METH_VARARGS, "swig_dummy_type_inode_vector_reserve(swig_dummy_type_inode_vector self, std::vector< INode * >::size_type n)"},
+	 { "swig_dummy_type_inode_vector_capacity", _wrap_swig_dummy_type_inode_vector_capacity, METH_O, "swig_dummy_type_inode_vector_capacity(swig_dummy_type_inode_vector self) -> std::vector< INode * >::size_type"},
+	 { "delete_swig_dummy_type_inode_vector", _wrap_delete_swig_dummy_type_inode_vector, METH_O, "delete_swig_dummy_type_inode_vector(swig_dummy_type_inode_vector self)"},
+	 { "swig_dummy_type_inode_vector_swigregister", swig_dummy_type_inode_vector_swigregister, METH_O, NULL},
+	 { "swig_dummy_type_inode_vector_swiginit", swig_dummy_type_inode_vector_swiginit, METH_VARARGS, NULL},
+	 { "swig_dummy_type_const_inode_vector_iterator", _wrap_swig_dummy_type_const_inode_vector_iterator, METH_O, "swig_dummy_type_const_inode_vector_iterator(swig_dummy_type_const_inode_vector self) -> SwigPyIterator"},
+	 { "swig_dummy_type_const_inode_vector___nonzero__", _wrap_swig_dummy_type_const_inode_vector___nonzero__, METH_O, "swig_dummy_type_const_inode_vector___nonzero__(swig_dummy_type_const_inode_vector self) -> bool"},
+	 { "swig_dummy_type_const_inode_vector___bool__", _wrap_swig_dummy_type_const_inode_vector___bool__, METH_O, "swig_dummy_type_const_inode_vector___bool__(swig_dummy_type_const_inode_vector self) -> bool"},
+	 { "swig_dummy_type_const_inode_vector___len__", _wrap_swig_dummy_type_const_inode_vector___len__, METH_O, "swig_dummy_type_const_inode_vector___len__(swig_dummy_type_const_inode_vector self) -> std::vector< INode const * >::size_type"},
+	 { "swig_dummy_type_const_inode_vector___getslice__", _wrap_swig_dummy_type_const_inode_vector___getslice__, METH_VARARGS, "swig_dummy_type_const_inode_vector___getslice__(swig_dummy_type_const_inode_vector self, std::vector< INode const * >::difference_type i, std::vector< INode const * >::difference_type j) -> swig_dummy_type_const_inode_vector"},
+	 { "swig_dummy_type_const_inode_vector___setslice__", _wrap_swig_dummy_type_const_inode_vector___setslice__, METH_VARARGS, "\n"
+		"swig_dummy_type_const_inode_vector___setslice__(swig_dummy_type_const_inode_vector self, std::vector< INode const * >::difference_type i, std::vector< INode const * >::difference_type j)\n"
+		"swig_dummy_type_const_inode_vector___setslice__(swig_dummy_type_const_inode_vector self, std::vector< INode const * >::difference_type i, std::vector< INode const * >::difference_type j, swig_dummy_type_const_inode_vector v)\n"
+		""},
+	 { "swig_dummy_type_const_inode_vector___delslice__", _wrap_swig_dummy_type_const_inode_vector___delslice__, METH_VARARGS, "swig_dummy_type_const_inode_vector___delslice__(swig_dummy_type_const_inode_vector self, std::vector< INode const * >::difference_type i, std::vector< INode const * >::difference_type j)"},
+	 { "swig_dummy_type_const_inode_vector___delitem__", _wrap_swig_dummy_type_const_inode_vector___delitem__, METH_VARARGS, "\n"
+		"swig_dummy_type_const_inode_vector___delitem__(swig_dummy_type_const_inode_vector self, std::vector< INode const * >::difference_type i)\n"
+		"swig_dummy_type_const_inode_vector___delitem__(swig_dummy_type_const_inode_vector self, SWIGPY_SLICEOBJECT * slice)\n"
+		""},
+	 { "swig_dummy_type_const_inode_vector___getitem__", _wrap_swig_dummy_type_const_inode_vector___getitem__, METH_VARARGS, "\n"
+		"swig_dummy_type_const_inode_vector___getitem__(swig_dummy_type_const_inode_vector self, SWIGPY_SLICEOBJECT * slice) -> swig_dummy_type_const_inode_vector\n"
+		"swig_dummy_type_const_inode_vector___getitem__(swig_dummy_type_const_inode_vector self, std::vector< INode const * >::difference_type i) -> INode\n"
+		""},
+	 { "swig_dummy_type_const_inode_vector___setitem__", _wrap_swig_dummy_type_const_inode_vector___setitem__, METH_VARARGS, "\n"
+		"swig_dummy_type_const_inode_vector___setitem__(swig_dummy_type_const_inode_vector self, SWIGPY_SLICEOBJECT * slice, swig_dummy_type_const_inode_vector v)\n"
+		"swig_dummy_type_const_inode_vector___setitem__(swig_dummy_type_const_inode_vector self, SWIGPY_SLICEOBJECT * slice)\n"
+		"swig_dummy_type_const_inode_vector___setitem__(swig_dummy_type_const_inode_vector self, std::vector< INode const * >::difference_type i, INode x)\n"
+		""},
+	 { "swig_dummy_type_const_inode_vector_pop", _wrap_swig_dummy_type_const_inode_vector_pop, METH_O, "swig_dummy_type_const_inode_vector_pop(swig_dummy_type_const_inode_vector self) -> INode"},
+	 { "swig_dummy_type_const_inode_vector_append", _wrap_swig_dummy_type_const_inode_vector_append, METH_VARARGS, "swig_dummy_type_const_inode_vector_append(swig_dummy_type_const_inode_vector self, INode x)"},
+	 { "swig_dummy_type_const_inode_vector_empty", _wrap_swig_dummy_type_const_inode_vector_empty, METH_O, "swig_dummy_type_const_inode_vector_empty(swig_dummy_type_const_inode_vector self) -> bool"},
+	 { "swig_dummy_type_const_inode_vector_size", _wrap_swig_dummy_type_const_inode_vector_size, METH_O, "swig_dummy_type_const_inode_vector_size(swig_dummy_type_const_inode_vector self) -> std::vector< INode const * >::size_type"},
+	 { "swig_dummy_type_const_inode_vector_swap", _wrap_swig_dummy_type_const_inode_vector_swap, METH_VARARGS, "swig_dummy_type_const_inode_vector_swap(swig_dummy_type_const_inode_vector self, swig_dummy_type_const_inode_vector v)"},
+	 { "swig_dummy_type_const_inode_vector_begin", _wrap_swig_dummy_type_const_inode_vector_begin, METH_O, "swig_dummy_type_const_inode_vector_begin(swig_dummy_type_const_inode_vector self) -> std::vector< INode const * >::iterator"},
+	 { "swig_dummy_type_const_inode_vector_end", _wrap_swig_dummy_type_const_inode_vector_end, METH_O, "swig_dummy_type_const_inode_vector_end(swig_dummy_type_const_inode_vector self) -> std::vector< INode const * >::iterator"},
+	 { "swig_dummy_type_const_inode_vector_rbegin", _wrap_swig_dummy_type_const_inode_vector_rbegin, METH_O, "swig_dummy_type_const_inode_vector_rbegin(swig_dummy_type_const_inode_vector self) -> std::vector< INode const * >::reverse_iterator"},
+	 { "swig_dummy_type_const_inode_vector_rend", _wrap_swig_dummy_type_const_inode_vector_rend, METH_O, "swig_dummy_type_const_inode_vector_rend(swig_dummy_type_const_inode_vector self) -> std::vector< INode const * >::reverse_iterator"},
+	 { "swig_dummy_type_const_inode_vector_clear", _wrap_swig_dummy_type_const_inode_vector_clear, METH_O, "swig_dummy_type_const_inode_vector_clear(swig_dummy_type_const_inode_vector self)"},
+	 { "swig_dummy_type_const_inode_vector_get_allocator", _wrap_swig_dummy_type_const_inode_vector_get_allocator, METH_O, "swig_dummy_type_const_inode_vector_get_allocator(swig_dummy_type_const_inode_vector self) -> std::vector< INode const * >::allocator_type"},
+	 { "swig_dummy_type_const_inode_vector_pop_back", _wrap_swig_dummy_type_const_inode_vector_pop_back, METH_O, "swig_dummy_type_const_inode_vector_pop_back(swig_dummy_type_const_inode_vector self)"},
+	 { "swig_dummy_type_const_inode_vector_erase", _wrap_swig_dummy_type_const_inode_vector_erase, METH_VARARGS, "\n"
+		"swig_dummy_type_const_inode_vector_erase(swig_dummy_type_const_inode_vector self, std::vector< INode const * >::iterator pos) -> std::vector< INode const * >::iterator\n"
+		"swig_dummy_type_const_inode_vector_erase(swig_dummy_type_const_inode_vector self, std::vector< INode const * >::iterator first, std::vector< INode const * >::iterator last) -> std::vector< INode const * >::iterator\n"
+		""},
+	 { "new_swig_dummy_type_const_inode_vector", _wrap_new_swig_dummy_type_const_inode_vector, METH_VARARGS, "\n"
+		"swig_dummy_type_const_inode_vector()\n"
+		"swig_dummy_type_const_inode_vector(swig_dummy_type_const_inode_vector other)\n"
+		"swig_dummy_type_const_inode_vector(std::vector< INode const * >::size_type size)\n"
+		"new_swig_dummy_type_const_inode_vector(std::vector< INode const * >::size_type size, INode value) -> swig_dummy_type_const_inode_vector\n"
+		""},
+	 { "swig_dummy_type_const_inode_vector_push_back", _wrap_swig_dummy_type_const_inode_vector_push_back, METH_VARARGS, "swig_dummy_type_const_inode_vector_push_back(swig_dummy_type_const_inode_vector self, INode x)"},
+	 { "swig_dummy_type_const_inode_vector_front", _wrap_swig_dummy_type_const_inode_vector_front, METH_O, "swig_dummy_type_const_inode_vector_front(swig_dummy_type_const_inode_vector self) -> INode"},
+	 { "swig_dummy_type_const_inode_vector_back", _wrap_swig_dummy_type_const_inode_vector_back, METH_O, "swig_dummy_type_const_inode_vector_back(swig_dummy_type_const_inode_vector self) -> INode"},
+	 { "swig_dummy_type_const_inode_vector_assign", _wrap_swig_dummy_type_const_inode_vector_assign, METH_VARARGS, "swig_dummy_type_const_inode_vector_assign(swig_dummy_type_const_inode_vector self, std::vector< INode const * >::size_type n, INode x)"},
+	 { "swig_dummy_type_const_inode_vector_resize", _wrap_swig_dummy_type_const_inode_vector_resize, METH_VARARGS, "\n"
+		"swig_dummy_type_const_inode_vector_resize(swig_dummy_type_const_inode_vector self, std::vector< INode const * >::size_type new_size)\n"
+		"swig_dummy_type_const_inode_vector_resize(swig_dummy_type_const_inode_vector self, std::vector< INode const * >::size_type new_size, INode x)\n"
+		""},
+	 { "swig_dummy_type_const_inode_vector_insert", _wrap_swig_dummy_type_const_inode_vector_insert, METH_VARARGS, "\n"
+		"swig_dummy_type_const_inode_vector_insert(swig_dummy_type_const_inode_vector self, std::vector< INode const * >::iterator pos, INode x) -> std::vector< INode const * >::iterator\n"
+		"swig_dummy_type_const_inode_vector_insert(swig_dummy_type_const_inode_vector self, std::vector< INode const * >::iterator pos, std::vector< INode const * >::size_type n, INode x)\n"
+		""},
+	 { "swig_dummy_type_const_inode_vector_reserve", _wrap_swig_dummy_type_const_inode_vector_reserve, METH_VARARGS, "swig_dummy_type_const_inode_vector_reserve(swig_dummy_type_const_inode_vector self, std::vector< INode const * >::size_type n)"},
+	 { "swig_dummy_type_const_inode_vector_capacity", _wrap_swig_dummy_type_const_inode_vector_capacity, METH_O, "swig_dummy_type_const_inode_vector_capacity(swig_dummy_type_const_inode_vector self) -> std::vector< INode const * >::size_type"},
+	 { "delete_swig_dummy_type_const_inode_vector", _wrap_delete_swig_dummy_type_const_inode_vector, METH_O, "delete_swig_dummy_type_const_inode_vector(swig_dummy_type_const_inode_vector self)"},
+	 { "swig_dummy_type_const_inode_vector_swigregister", swig_dummy_type_const_inode_vector_swigregister, METH_O, NULL},
+	 { "swig_dummy_type_const_inode_vector_swiginit", swig_dummy_type_const_inode_vector_swiginit, METH_VARARGS, NULL},
+	 { "new_Material", _wrap_new_Material, METH_O, "new_Material(Material material) -> Material"},
+	 { "Material_inverted", _wrap_Material_inverted, METH_O, "Material_inverted(Material self) -> Material"},
+	 { "Material_refractiveIndex", _wrap_Material_refractiveIndex, METH_VARARGS, "Material_refractiveIndex(Material self, double wavelength) -> complex_t"},
+	 { "Material_refractiveIndex2", _wrap_Material_refractiveIndex2, METH_VARARGS, "Material_refractiveIndex2(Material self, double wavelength) -> complex_t"},
+	 { "Material_isScalarMaterial", _wrap_Material_isScalarMaterial, METH_O, "Material_isScalarMaterial(Material self) -> bool"},
+	 { "Material_isMagneticMaterial", _wrap_Material_isMagneticMaterial, METH_O, "Material_isMagneticMaterial(Material self) -> bool"},
+	 { "Material_materialName", _wrap_Material_materialName, METH_O, "Material_materialName(Material self) -> std::string"},
+	 { "Material_magnetization", _wrap_Material_magnetization, METH_O, "Material_magnetization(Material self) -> R3"},
+	 { "Material_materialData", _wrap_Material_materialData, METH_O, "Material_materialData(Material self) -> complex_t"},
+	 { "Material_isEmpty", _wrap_Material_isEmpty, METH_O, "Material_isEmpty(Material self) -> bool"},
+	 { "Material_isDefaultMaterial", _wrap_Material_isDefaultMaterial, METH_O, "Material_isDefaultMaterial(Material self) -> bool"},
+	 { "Material_scalarSubtrSLD", _wrap_Material_scalarSubtrSLD, METH_VARARGS, "Material_scalarSubtrSLD(Material self, WavevectorInfo const & wavevectors) -> complex_t"},
+	 { "Material_polarizedSubtrSLD", _wrap_Material_polarizedSubtrSLD, METH_VARARGS, "Material_polarizedSubtrSLD(Material self, WavevectorInfo const & wavevectors) -> SpinMatrix"},
+	 { "Material_rotatedMaterial", _wrap_Material_rotatedMaterial, METH_VARARGS, "Material_rotatedMaterial(Material self, RotMatrix const & transform) -> Material"},
+	 { "delete_Material", _wrap_delete_Material, METH_O, "delete_Material(Material self)"},
+	 { "Material_swigregister", Material_swigregister, METH_O, NULL},
+	 { "Material_swiginit", Material_swiginit, METH_VARARGS, NULL},
+	 { "RefractiveMaterial", _wrap_RefractiveMaterial, METH_VARARGS, "\n"
+		"RefractiveMaterial(std::string const & name, double delta, double beta, R3 magnetization={}) -> Material\n"
+		"RefractiveMaterial(std::string const & name, complex_t refractive_index, R3 magnetization={}) -> Material\n"
+		""},
+	 { "Vacuum", _wrap_Vacuum, METH_NOARGS, "Vacuum() -> Material"},
+	 { "MaterialBySLD", _wrap_MaterialBySLD, METH_VARARGS, "\n"
+		"MaterialBySLD(std::string const & name, double sld_real, double sld_imag, R3 magnetization={}) -> Material\n"
+		"MaterialBySLD() -> Material\n"
+		""},
+	 { "delete_IMaterialImpl", _wrap_delete_IMaterialImpl, METH_O, "delete_IMaterialImpl(IMaterialImpl self)"},
+	 { "IMaterialImpl_clone", _wrap_IMaterialImpl_clone, METH_O, "IMaterialImpl_clone(IMaterialImpl self) -> IMaterialImpl"},
+	 { "IMaterialImpl_inverted", _wrap_IMaterialImpl_inverted, METH_O, "IMaterialImpl_inverted(IMaterialImpl self) -> IMaterialImpl"},
+	 { "IMaterialImpl_refractiveIndex", _wrap_IMaterialImpl_refractiveIndex, METH_VARARGS, "IMaterialImpl_refractiveIndex(IMaterialImpl self, double wavelength) -> complex_t"},
+	 { "IMaterialImpl_refractiveIndex2", _wrap_IMaterialImpl_refractiveIndex2, METH_VARARGS, "IMaterialImpl_refractiveIndex2(IMaterialImpl self, double wavelength) -> complex_t"},
+	 { "IMaterialImpl_materialData", _wrap_IMaterialImpl_materialData, METH_O, "IMaterialImpl_materialData(IMaterialImpl self) -> complex_t"},
+	 { "IMaterialImpl_typeID", _wrap_IMaterialImpl_typeID, METH_O, "IMaterialImpl_typeID(IMaterialImpl self) -> MATERIAL_TYPES"},
+	 { "IMaterialImpl_scalarSubtrSLD", _wrap_IMaterialImpl_scalarSubtrSLD, METH_VARARGS, "IMaterialImpl_scalarSubtrSLD(IMaterialImpl self, double lambda0) -> complex_t"},
+	 { "IMaterialImpl_isScalarMaterial", _wrap_IMaterialImpl_isScalarMaterial, METH_O, "IMaterialImpl_isScalarMaterial(IMaterialImpl self) -> bool"},
+	 { "IMaterialImpl_isMagneticMaterial", _wrap_IMaterialImpl_isMagneticMaterial, METH_O, "IMaterialImpl_isMagneticMaterial(IMaterialImpl self) -> bool"},
+	 { "IMaterialImpl_magnetization", _wrap_IMaterialImpl_magnetization, METH_O, "IMaterialImpl_magnetization(IMaterialImpl self) -> R3"},
+	 { "IMaterialImpl_polarizedSubtrSLD", _wrap_IMaterialImpl_polarizedSubtrSLD, METH_VARARGS, "IMaterialImpl_polarizedSubtrSLD(IMaterialImpl self, WavevectorInfo const & wavevectors) -> SpinMatrix"},
+	 { "IMaterialImpl_rotatedMaterial", _wrap_IMaterialImpl_rotatedMaterial, METH_VARARGS, "IMaterialImpl_rotatedMaterial(IMaterialImpl self, RotMatrix const & transform) -> IMaterialImpl"},
+	 { "IMaterialImpl__print", _wrap_IMaterialImpl__print, METH_O, "IMaterialImpl__print(IMaterialImpl self) -> std::string"},
+	 { "IMaterialImpl_matName", _wrap_IMaterialImpl_matName, METH_O, "IMaterialImpl_matName(IMaterialImpl self) -> std::string const &"},
+	 { "IMaterialImpl_swigregister", IMaterialImpl_swigregister, METH_O, NULL},
+	 { "delete_RefractiveMaterialImpl", _wrap_delete_RefractiveMaterialImpl, METH_O, "delete_RefractiveMaterialImpl(RefractiveMaterialImpl self)"},
+	 { "RefractiveMaterialImpl_clone", _wrap_RefractiveMaterialImpl_clone, METH_O, "RefractiveMaterialImpl_clone(RefractiveMaterialImpl self) -> RefractiveMaterialImpl"},
+	 { "RefractiveMaterialImpl_refractiveIndex", _wrap_RefractiveMaterialImpl_refractiveIndex, METH_VARARGS, "RefractiveMaterialImpl_refractiveIndex(RefractiveMaterialImpl self, double wavelength) -> complex_t"},
+	 { "RefractiveMaterialImpl_refractiveIndex2", _wrap_RefractiveMaterialImpl_refractiveIndex2, METH_VARARGS, "RefractiveMaterialImpl_refractiveIndex2(RefractiveMaterialImpl self, double wavelength) -> complex_t"},
+	 { "RefractiveMaterialImpl_materialData", _wrap_RefractiveMaterialImpl_materialData, METH_O, "RefractiveMaterialImpl_materialData(RefractiveMaterialImpl self) -> complex_t"},
+	 { "RefractiveMaterialImpl_typeID", _wrap_RefractiveMaterialImpl_typeID, METH_O, "RefractiveMaterialImpl_typeID(RefractiveMaterialImpl self) -> MATERIAL_TYPES"},
+	 { "RefractiveMaterialImpl_scalarSubtrSLD", _wrap_RefractiveMaterialImpl_scalarSubtrSLD, METH_VARARGS, "RefractiveMaterialImpl_scalarSubtrSLD(RefractiveMaterialImpl self, double lambda0) -> complex_t"},
+	 { "RefractiveMaterialImpl__print", _wrap_RefractiveMaterialImpl__print, METH_O, "RefractiveMaterialImpl__print(RefractiveMaterialImpl self) -> std::string"},
+	 { "RefractiveMaterialImpl_swigregister", RefractiveMaterialImpl_swigregister, METH_O, NULL},
+	 { "delete_MaterialBySLDImpl", _wrap_delete_MaterialBySLDImpl, METH_O, "delete_MaterialBySLDImpl(MaterialBySLDImpl self)"},
+	 { "MaterialBySLDImpl_clone", _wrap_MaterialBySLDImpl_clone, METH_O, "MaterialBySLDImpl_clone(MaterialBySLDImpl self) -> MaterialBySLDImpl"},
+	 { "MaterialBySLDImpl_refractiveIndex", _wrap_MaterialBySLDImpl_refractiveIndex, METH_VARARGS, "MaterialBySLDImpl_refractiveIndex(MaterialBySLDImpl self, double wavelength) -> complex_t"},
+	 { "MaterialBySLDImpl_refractiveIndex2", _wrap_MaterialBySLDImpl_refractiveIndex2, METH_VARARGS, "MaterialBySLDImpl_refractiveIndex2(MaterialBySLDImpl self, double wavelength) -> complex_t"},
+	 { "MaterialBySLDImpl_materialData", _wrap_MaterialBySLDImpl_materialData, METH_O, "MaterialBySLDImpl_materialData(MaterialBySLDImpl self) -> complex_t"},
+	 { "MaterialBySLDImpl_typeID", _wrap_MaterialBySLDImpl_typeID, METH_O, "MaterialBySLDImpl_typeID(MaterialBySLDImpl self) -> MATERIAL_TYPES"},
+	 { "MaterialBySLDImpl_scalarSubtrSLD", _wrap_MaterialBySLDImpl_scalarSubtrSLD, METH_VARARGS, "MaterialBySLDImpl_scalarSubtrSLD(MaterialBySLDImpl self, double lambda0) -> complex_t"},
+	 { "MaterialBySLDImpl__print", _wrap_MaterialBySLDImpl__print, METH_O, "MaterialBySLDImpl__print(MaterialBySLDImpl self) -> std::string"},
+	 { "MaterialBySLDImpl_swigregister", MaterialBySLDImpl_swigregister, METH_O, NULL},
+	 { "new_ISampleNode", _wrap_new_ISampleNode, METH_VARARGS, "\n"
+		"ISampleNode()\n"
+		"new_ISampleNode(PyObject * _self, vdouble1d_t PValues) -> ISampleNode\n"
 		""},
-	 { "LayerRoughness_clone", _wrap_LayerRoughness_clone, METH_O, "LayerRoughness_clone(LayerRoughness self) -> LayerRoughness"},
-	 { "LayerRoughness_className", _wrap_LayerRoughness_className, METH_O, "LayerRoughness_className(LayerRoughness self) -> std::string"},
-	 { "LayerRoughness_parDefs", _wrap_LayerRoughness_parDefs, METH_O, "LayerRoughness_parDefs(LayerRoughness self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "LayerRoughness_spectralFunction", _wrap_LayerRoughness_spectralFunction, METH_VARARGS, "LayerRoughness_spectralFunction(LayerRoughness self, R3 kvec) -> double"},
-	 { "LayerRoughness_corrFunction", _wrap_LayerRoughness_corrFunction, METH_VARARGS, "LayerRoughness_corrFunction(LayerRoughness self, R3 k) -> double"},
-	 { "LayerRoughness_setSigma", _wrap_LayerRoughness_setSigma, METH_VARARGS, "LayerRoughness_setSigma(LayerRoughness self, double sigma)"},
-	 { "LayerRoughness_sigma", _wrap_LayerRoughness_sigma, METH_O, "LayerRoughness_sigma(LayerRoughness self) -> double"},
-	 { "LayerRoughness_setHurstParameter", _wrap_LayerRoughness_setHurstParameter, METH_VARARGS, "LayerRoughness_setHurstParameter(LayerRoughness self, double hurstParameter)"},
-	 { "LayerRoughness_hurst", _wrap_LayerRoughness_hurst, METH_O, "LayerRoughness_hurst(LayerRoughness self) -> double"},
-	 { "LayerRoughness_setLatteralCorrLength", _wrap_LayerRoughness_setLatteralCorrLength, METH_VARARGS, "LayerRoughness_setLatteralCorrLength(LayerRoughness self, double lateralCorrLength)"},
-	 { "LayerRoughness_lateralCorrLength", _wrap_LayerRoughness_lateralCorrLength, METH_O, "LayerRoughness_lateralCorrLength(LayerRoughness self) -> double"},
-	 { "LayerRoughness_validate", _wrap_LayerRoughness_validate, METH_O, "LayerRoughness_validate(LayerRoughness self) -> std::string"},
-	 { "delete_LayerRoughness", _wrap_delete_LayerRoughness, METH_O, "delete_LayerRoughness(LayerRoughness self)"},
-	 { "LayerRoughness_swigregister", LayerRoughness_swigregister, METH_O, NULL},
-	 { "LayerRoughness_swiginit", LayerRoughness_swiginit, METH_VARARGS, NULL},
-	 { "new_Layer", _wrap_new_Layer, METH_VARARGS, "Layer(Material material, double thickness=0)"},
-	 { "delete_Layer", _wrap_delete_Layer, METH_O, "delete_Layer(Layer self)"},
-	 { "Layer_clone", _wrap_Layer_clone, METH_O, "Layer_clone(Layer self) -> Layer"},
-	 { "Layer_className", _wrap_Layer_className, METH_O, "Layer_className(Layer self) -> std::string"},
-	 { "Layer_parDefs", _wrap_Layer_parDefs, METH_O, "Layer_parDefs(Layer self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "Layer_nodeChildren", _wrap_Layer_nodeChildren, METH_O, "Layer_nodeChildren(Layer self) -> swig_dummy_type_const_inode_vector"},
-	 { "Layer_material", _wrap_Layer_material, METH_O, "Layer_material(Layer self) -> Material"},
-	 { "Layer_thickness", _wrap_Layer_thickness, METH_O, "Layer_thickness(Layer self) -> double"},
-	 { "Layer_addLayout", _wrap_Layer_addLayout, METH_VARARGS, "Layer_addLayout(Layer self, ParticleLayout layout)"},
-	 { "Layer_numberOfLayouts", _wrap_Layer_numberOfLayouts, METH_O, "Layer_numberOfLayouts(Layer self) -> size_t"},
-	 { "Layer_layouts", _wrap_Layer_layouts, METH_O, "Layer_layouts(Layer self) -> std::vector< ParticleLayout const *,std::allocator< ParticleLayout const * > >"},
-	 { "Layer_setNumberOfSlices", _wrap_Layer_setNumberOfSlices, METH_VARARGS, "Layer_setNumberOfSlices(Layer self, unsigned int n_slices)"},
-	 { "Layer_numberOfSlices", _wrap_Layer_numberOfSlices, METH_O, "Layer_numberOfSlices(Layer self) -> unsigned int"},
-	 { "Layer_validate", _wrap_Layer_validate, METH_O, "Layer_validate(Layer self) -> std::string"},
-	 { "Layer_swigregister", Layer_swigregister, METH_O, NULL},
-	 { "Layer_swiginit", Layer_swiginit, METH_VARARGS, NULL},
-	 { "new_MultiLayer", _wrap_new_MultiLayer, METH_VARARGS, "MultiLayer(std::string name=\"Unnamed\")"},
-	 { "delete_MultiLayer", _wrap_delete_MultiLayer, METH_O, "delete_MultiLayer(MultiLayer self)"},
-	 { "MultiLayer_clone", _wrap_MultiLayer_clone, METH_O, "MultiLayer_clone(MultiLayer self) -> MultiLayer"},
-	 { "MultiLayer_className", _wrap_MultiLayer_className, METH_O, "MultiLayer_className(MultiLayer self) -> std::string"},
-	 { "MultiLayer_numberOfLayers", _wrap_MultiLayer_numberOfLayers, METH_O, "MultiLayer_numberOfLayers(MultiLayer self) -> size_t"},
-	 { "MultiLayer_addLayer", _wrap_MultiLayer_addLayer, METH_VARARGS, "MultiLayer_addLayer(MultiLayer self, Layer layer)"},
-	 { "MultiLayer_addLayerWithTopRoughness", _wrap_MultiLayer_addLayerWithTopRoughness, METH_VARARGS, "MultiLayer_addLayerWithTopRoughness(MultiLayer self, Layer layer, LayerRoughness roughness)"},
-	 { "MultiLayer_setRoughnessModel", _wrap_MultiLayer_setRoughnessModel, METH_VARARGS, "MultiLayer_setRoughnessModel(MultiLayer self, RoughnessModel roughnessModel)"},
-	 { "MultiLayer_setCrossCorrLength", _wrap_MultiLayer_setCrossCorrLength, METH_VARARGS, "MultiLayer_setCrossCorrLength(MultiLayer self, double crossCorrLength)"},
-	 { "MultiLayer_setExternalField", _wrap_MultiLayer_setExternalField, METH_VARARGS, "MultiLayer_setExternalField(MultiLayer self, R3 ext_field)"},
-	 { "MultiLayer_layer", _wrap_MultiLayer_layer, METH_VARARGS, "MultiLayer_layer(MultiLayer self, size_t i_layer) -> Layer"},
-	 { "MultiLayer_layerInterface", _wrap_MultiLayer_layerInterface, METH_VARARGS, "MultiLayer_layerInterface(MultiLayer self, size_t i_interface) -> LayerInterface const *"},
-	 { "MultiLayer_roughnessModel", _wrap_MultiLayer_roughnessModel, METH_O, "MultiLayer_roughnessModel(MultiLayer self) -> RoughnessModel"},
-	 { "MultiLayer_crossCorrLength", _wrap_MultiLayer_crossCorrLength, METH_O, "MultiLayer_crossCorrLength(MultiLayer self) -> double"},
-	 { "MultiLayer_externalField", _wrap_MultiLayer_externalField, METH_O, "MultiLayer_externalField(MultiLayer self) -> R3"},
-	 { "MultiLayer_nodeChildren", _wrap_MultiLayer_nodeChildren, METH_O, "MultiLayer_nodeChildren(MultiLayer self) -> swig_dummy_type_const_inode_vector"},
-	 { "MultiLayer_setSampleName", _wrap_MultiLayer_setSampleName, METH_VARARGS, "MultiLayer_setSampleName(MultiLayer self, std::string const & name)"},
-	 { "MultiLayer_sampleName", _wrap_MultiLayer_sampleName, METH_O, "MultiLayer_sampleName(MultiLayer self) -> std::string const &"},
-	 { "MultiLayer_validate", _wrap_MultiLayer_validate, METH_O, "MultiLayer_validate(MultiLayer self) -> std::string"},
-	 { "MultiLayer_hig", _wrap_MultiLayer_hig, METH_VARARGS, "MultiLayer_hig(MultiLayer self, size_t i) -> double"},
-	 { "MultiLayer_low", _wrap_MultiLayer_low, METH_VARARGS, "MultiLayer_low(MultiLayer self, size_t i) -> double"},
-	 { "MultiLayer_swigregister", MultiLayer_swigregister, METH_O, NULL},
-	 { "MultiLayer_swiginit", MultiLayer_swiginit, METH_VARARGS, NULL},
-	 { "delete_RoughnessModel", _wrap_delete_RoughnessModel, METH_O, "delete_RoughnessModel(RoughnessModel self)"},
-	 { "RoughnessModel_swigregister", RoughnessModel_swigregister, METH_O, NULL},
-	 { "delete_IFormFactorPolyhedron", _wrap_delete_IFormFactorPolyhedron, METH_O, "delete_IFormFactorPolyhedron(IFormFactorPolyhedron self)"},
-	 { "IFormFactorPolyhedron_volume", _wrap_IFormFactorPolyhedron_volume, METH_O, "IFormFactorPolyhedron_volume(IFormFactorPolyhedron self) -> double"},
-	 { "IFormFactorPolyhedron_radialExtension", _wrap_IFormFactorPolyhedron_radialExtension, METH_O, "IFormFactorPolyhedron_radialExtension(IFormFactorPolyhedron self) -> double"},
-	 { "IFormFactorPolyhedron_formfactor", _wrap_IFormFactorPolyhedron_formfactor, METH_VARARGS, "IFormFactorPolyhedron_formfactor(IFormFactorPolyhedron self, C3 q) -> complex_t"},
-	 { "IFormFactorPolyhedron_swigregister", IFormFactorPolyhedron_swigregister, METH_O, NULL},
-	 { "delete_IFormFactorPrism", _wrap_delete_IFormFactorPrism, METH_O, "delete_IFormFactorPrism(IFormFactorPrism self)"},
-	 { "IFormFactorPrism_height", _wrap_IFormFactorPrism_height, METH_O, "IFormFactorPrism_height(IFormFactorPrism self) -> double"},
-	 { "IFormFactorPrism_swigregister", IFormFactorPrism_swigregister, METH_O, NULL},
-	 { "IProfileRipple_length", _wrap_IProfileRipple_length, METH_O, "IProfileRipple_length(IProfileRipple self) -> double"},
-	 { "IProfileRipple_height", _wrap_IProfileRipple_height, METH_O, "IProfileRipple_height(IProfileRipple self) -> double"},
-	 { "IProfileRipple_width", _wrap_IProfileRipple_width, METH_O, "IProfileRipple_width(IProfileRipple self) -> double"},
-	 { "IProfileRipple_radialExtension", _wrap_IProfileRipple_radialExtension, METH_O, "IProfileRipple_radialExtension(IProfileRipple self) -> double"},
-	 { "IProfileRipple_formfactor", _wrap_IProfileRipple_formfactor, METH_VARARGS, "IProfileRipple_formfactor(IProfileRipple self, C3 q) -> complex_t"},
-	 { "IProfileRipple_validate", _wrap_IProfileRipple_validate, METH_O, "IProfileRipple_validate(IProfileRipple self) -> std::string"},
-	 { "delete_IProfileRipple", _wrap_delete_IProfileRipple, METH_O, "delete_IProfileRipple(IProfileRipple self)"},
-	 { "IProfileRipple_swigregister", IProfileRipple_swigregister, METH_O, NULL},
-	 { "delete_IProfileRectangularRipple", _wrap_delete_IProfileRectangularRipple, METH_O, "delete_IProfileRectangularRipple(IProfileRectangularRipple self)"},
-	 { "IProfileRectangularRipple_swigregister", IProfileRectangularRipple_swigregister, METH_O, NULL},
-	 { "delete_ICosineRipple", _wrap_delete_ICosineRipple, METH_O, "delete_ICosineRipple(ICosineRipple self)"},
-	 { "ICosineRipple_swigregister", ICosineRipple_swigregister, METH_O, NULL},
-	 { "ISawtoothRipple_asymmetry", _wrap_ISawtoothRipple_asymmetry, METH_O, "ISawtoothRipple_asymmetry(ISawtoothRipple self) -> double"},
-	 { "delete_ISawtoothRipple", _wrap_delete_ISawtoothRipple, METH_O, "delete_ISawtoothRipple(ISawtoothRipple self)"},
-	 { "ISawtoothRipple_swigregister", ISawtoothRipple_swigregister, METH_O, NULL},
-	 { "new_BarGauss", _wrap_new_BarGauss, METH_VARARGS, "\n"
-		"BarGauss(double length, double width, double height)\n"
-		"new_BarGauss(vdouble1d_t P) -> BarGauss\n"
+	 { "ISampleNode_clone", _wrap_ISampleNode_clone, METH_O, "ISampleNode_clone(ISampleNode self) -> ISampleNode"},
+	 { "ISampleNode_material", _wrap_ISampleNode_material, METH_O, "ISampleNode_material(ISampleNode self) -> Material"},
+	 { "ISampleNode_containedMaterials", _wrap_ISampleNode_containedMaterials, METH_O, "ISampleNode_containedMaterials(ISampleNode self) -> std::vector< Material const *,std::allocator< Material const * > >"},
+	 { "ISampleNode_isMagnetic", _wrap_ISampleNode_isMagnetic, METH_O, "ISampleNode_isMagnetic(ISampleNode self) -> bool"},
+	 { "delete_ISampleNode", _wrap_delete_ISampleNode, METH_O, "delete_ISampleNode(ISampleNode self)"},
+	 { "disown_ISampleNode", _wrap_disown_ISampleNode, METH_O, NULL},
+	 { "ISampleNode_swigregister", ISampleNode_swigregister, METH_O, NULL},
+	 { "ISampleNode_swiginit", ISampleNode_swiginit, METH_VARARGS, NULL},
+	 { "new_IFormFactor", _wrap_new_IFormFactor, METH_VARARGS, "\n"
+		"IFormFactor()\n"
+		"new_IFormFactor(PyObject * _self, vdouble1d_t PValues) -> IFormFactor\n"
 		""},
-	 { "BarGauss_clone", _wrap_BarGauss_clone, METH_O, "BarGauss_clone(BarGauss self) -> BarGauss"},
-	 { "BarGauss_className", _wrap_BarGauss_className, METH_O, "BarGauss_className(BarGauss self) -> std::string"},
-	 { "BarGauss_parDefs", _wrap_BarGauss_parDefs, METH_O, "BarGauss_parDefs(BarGauss self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "delete_BarGauss", _wrap_delete_BarGauss, METH_O, "delete_BarGauss(BarGauss self)"},
-	 { "BarGauss_swigregister", BarGauss_swigregister, METH_O, NULL},
-	 { "BarGauss_swiginit", BarGauss_swiginit, METH_VARARGS, NULL},
-	 { "new_BarLorentz", _wrap_new_BarLorentz, METH_VARARGS, "\n"
-		"BarLorentz(double length, double width, double height)\n"
-		"new_BarLorentz(vdouble1d_t P) -> BarLorentz\n"
+	 { "delete_IFormFactor", _wrap_delete_IFormFactor, METH_O, "delete_IFormFactor(IFormFactor self)"},
+	 { "IFormFactor_clone", _wrap_IFormFactor_clone, METH_O, "IFormFactor_clone(IFormFactor self) -> IFormFactor"},
+	 { "IFormFactor_volume", _wrap_IFormFactor_volume, METH_O, "IFormFactor_volume(IFormFactor self) -> double"},
+	 { "IFormFactor_radialExtension", _wrap_IFormFactor_radialExtension, METH_O, "IFormFactor_radialExtension(IFormFactor self) -> double"},
+	 { "IFormFactor_spanZ", _wrap_IFormFactor_spanZ, METH_VARARGS, "IFormFactor_spanZ(IFormFactor self, IRotation rotation) -> Span"},
+	 { "IFormFactor_pythonConstructor", _wrap_IFormFactor_pythonConstructor, METH_O, "IFormFactor_pythonConstructor(IFormFactor self) -> std::string"},
+	 { "IFormFactor_canSliceAnalytically", _wrap_IFormFactor_canSliceAnalytically, METH_VARARGS, "IFormFactor_canSliceAnalytically(IFormFactor self, IRotation rot) -> bool"},
+	 { "IFormFactor_theFF", _wrap_IFormFactor_theFF, METH_VARARGS, "IFormFactor_theFF(IFormFactor self, WavevectorInfo const & wavevectors) -> complex_t"},
+	 { "IFormFactor_thePolFF", _wrap_IFormFactor_thePolFF, METH_VARARGS, "IFormFactor_thePolFF(IFormFactor self, WavevectorInfo const & wavevectors) -> SpinMatrix"},
+	 { "IFormFactor_formfactor_pol", _wrap_IFormFactor_formfactor_pol, METH_VARARGS, "IFormFactor_formfactor_pol(IFormFactor self, C3 q) -> SpinMatrix"},
+	 { "IFormFactor_formfactor", _wrap_IFormFactor_formfactor, METH_VARARGS, "IFormFactor_formfactor(IFormFactor self, C3 q) -> complex_t"},
+	 { "IFormFactor_exec_spanZ", _wrap_IFormFactor_exec_spanZ, METH_VARARGS, "IFormFactor_exec_spanZ(IFormFactor self, IRotation rotation) -> Span"},
+	 { "disown_IFormFactor", _wrap_disown_IFormFactor, METH_O, NULL},
+	 { "IFormFactor_swigregister", IFormFactor_swigregister, METH_O, NULL},
+	 { "IFormFactor_swiginit", IFormFactor_swiginit, METH_VARARGS, NULL},
+	 { "IRotation_createRotation", _wrap_IRotation_createRotation, METH_O, "IRotation_createRotation(RotMatrix const & transform) -> IRotation"},
+	 { "IRotation_clone", _wrap_IRotation_clone, METH_O, "IRotation_clone(IRotation self) -> IRotation"},
+	 { "IRotation_createInverse", _wrap_IRotation_createInverse, METH_O, "IRotation_createInverse(IRotation self) -> IRotation"},
+	 { "IRotation_rotMatrix", _wrap_IRotation_rotMatrix, METH_O, "IRotation_rotMatrix(IRotation self) -> RotMatrix"},
+	 { "IRotation_transformed", _wrap_IRotation_transformed, METH_VARARGS, "IRotation_transformed(IRotation self, R3 v) -> R3"},
+	 { "IRotation_isIdentity", _wrap_IRotation_isIdentity, METH_O, "IRotation_isIdentity(IRotation self) -> bool"},
+	 { "IRotation_zInvariant", _wrap_IRotation_zInvariant, METH_O, "IRotation_zInvariant(IRotation self) -> bool"},
+	 { "delete_IRotation", _wrap_delete_IRotation, METH_O, "delete_IRotation(IRotation self)"},
+	 { "IRotation_swigregister", IRotation_swigregister, METH_O, NULL},
+	 { "createProduct", _wrap_createProduct, METH_VARARGS, "createProduct(IRotation left, IRotation right) -> IRotation"},
+	 { "new_IdentityRotation", _wrap_new_IdentityRotation, METH_NOARGS, "new_IdentityRotation() -> IdentityRotation"},
+	 { "IdentityRotation_clone", _wrap_IdentityRotation_clone, METH_O, "IdentityRotation_clone(IdentityRotation self) -> IdentityRotation"},
+	 { "IdentityRotation_className", _wrap_IdentityRotation_className, METH_O, "IdentityRotation_className(IdentityRotation self) -> std::string"},
+	 { "IdentityRotation_createInverse", _wrap_IdentityRotation_createInverse, METH_O, "IdentityRotation_createInverse(IdentityRotation self) -> IdentityRotation"},
+	 { "IdentityRotation_rotMatrix", _wrap_IdentityRotation_rotMatrix, METH_O, "IdentityRotation_rotMatrix(IdentityRotation self) -> RotMatrix"},
+	 { "IdentityRotation_isIdentity", _wrap_IdentityRotation_isIdentity, METH_O, "IdentityRotation_isIdentity(IdentityRotation self) -> bool"},
+	 { "delete_IdentityRotation", _wrap_delete_IdentityRotation, METH_O, "delete_IdentityRotation(IdentityRotation self)"},
+	 { "IdentityRotation_swigregister", IdentityRotation_swigregister, METH_O, NULL},
+	 { "IdentityRotation_swiginit", IdentityRotation_swiginit, METH_VARARGS, NULL},
+	 { "new_RotationX", _wrap_new_RotationX, METH_VARARGS, "\n"
+		"RotationX(vdouble1d_t P)\n"
+		"new_RotationX(double angle) -> RotationX\n"
 		""},
-	 { "BarLorentz_clone", _wrap_BarLorentz_clone, METH_O, "BarLorentz_clone(BarLorentz self) -> BarLorentz"},
-	 { "BarLorentz_className", _wrap_BarLorentz_className, METH_O, "BarLorentz_className(BarLorentz self) -> std::string"},
-	 { "BarLorentz_parDefs", _wrap_BarLorentz_parDefs, METH_O, "BarLorentz_parDefs(BarLorentz self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "delete_BarLorentz", _wrap_delete_BarLorentz, METH_O, "delete_BarLorentz(BarLorentz self)"},
-	 { "BarLorentz_swigregister", BarLorentz_swigregister, METH_O, NULL},
-	 { "BarLorentz_swiginit", BarLorentz_swiginit, METH_VARARGS, NULL},
-	 { "new_Bipyramid4", _wrap_new_Bipyramid4, METH_VARARGS, "\n"
-		"Bipyramid4(double length, double height, double height_ratio, double alpha)\n"
-		"new_Bipyramid4(vdouble1d_t P) -> Bipyramid4\n"
+	 { "RotationX_clone", _wrap_RotationX_clone, METH_O, "RotationX_clone(RotationX self) -> RotationX"},
+	 { "RotationX_className", _wrap_RotationX_className, METH_O, "RotationX_className(RotationX self) -> std::string"},
+	 { "RotationX_parDefs", _wrap_RotationX_parDefs, METH_O, "RotationX_parDefs(RotationX self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "RotationX_createInverse", _wrap_RotationX_createInverse, METH_O, "RotationX_createInverse(RotationX self) -> RotationX"},
+	 { "RotationX_angle", _wrap_RotationX_angle, METH_O, "RotationX_angle(RotationX self) -> double"},
+	 { "RotationX_rotMatrix", _wrap_RotationX_rotMatrix, METH_O, "RotationX_rotMatrix(RotationX self) -> RotMatrix"},
+	 { "delete_RotationX", _wrap_delete_RotationX, METH_O, "delete_RotationX(RotationX self)"},
+	 { "RotationX_swigregister", RotationX_swigregister, METH_O, NULL},
+	 { "RotationX_swiginit", RotationX_swiginit, METH_VARARGS, NULL},
+	 { "new_RotationY", _wrap_new_RotationY, METH_VARARGS, "\n"
+		"RotationY(vdouble1d_t P)\n"
+		"new_RotationY(double angle) -> RotationY\n"
 		""},
-	 { "Bipyramid4_clone", _wrap_Bipyramid4_clone, METH_O, "Bipyramid4_clone(Bipyramid4 self) -> Bipyramid4"},
-	 { "Bipyramid4_className", _wrap_Bipyramid4_className, METH_O, "Bipyramid4_className(Bipyramid4 self) -> std::string"},
-	 { "Bipyramid4_parDefs", _wrap_Bipyramid4_parDefs, METH_O, "Bipyramid4_parDefs(Bipyramid4 self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "Bipyramid4_length", _wrap_Bipyramid4_length, METH_O, "Bipyramid4_length(Bipyramid4 self) -> double"},
-	 { "Bipyramid4_height", _wrap_Bipyramid4_height, METH_O, "Bipyramid4_height(Bipyramid4 self) -> double"},
-	 { "Bipyramid4_heightRatio", _wrap_Bipyramid4_heightRatio, METH_O, "Bipyramid4_heightRatio(Bipyramid4 self) -> double"},
-	 { "Bipyramid4_alpha", _wrap_Bipyramid4_alpha, METH_O, "Bipyramid4_alpha(Bipyramid4 self) -> double"},
-	 { "Bipyramid4_validate", _wrap_Bipyramid4_validate, METH_O, "Bipyramid4_validate(Bipyramid4 self) -> std::string"},
-	 { "delete_Bipyramid4", _wrap_delete_Bipyramid4, METH_O, "delete_Bipyramid4(Bipyramid4 self)"},
-	 { "Bipyramid4_swigregister", Bipyramid4_swigregister, METH_O, NULL},
-	 { "Bipyramid4_swiginit", Bipyramid4_swiginit, METH_VARARGS, NULL},
-	 { "new_Box", _wrap_new_Box, METH_VARARGS, "\n"
-		"Box(double length, double width, double height)\n"
-		"new_Box(vdouble1d_t P) -> Box\n"
+	 { "RotationY_clone", _wrap_RotationY_clone, METH_O, "RotationY_clone(RotationY self) -> RotationY"},
+	 { "RotationY_className", _wrap_RotationY_className, METH_O, "RotationY_className(RotationY self) -> std::string"},
+	 { "RotationY_parDefs", _wrap_RotationY_parDefs, METH_O, "RotationY_parDefs(RotationY self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "RotationY_createInverse", _wrap_RotationY_createInverse, METH_O, "RotationY_createInverse(RotationY self) -> RotationY"},
+	 { "RotationY_angle", _wrap_RotationY_angle, METH_O, "RotationY_angle(RotationY self) -> double"},
+	 { "RotationY_rotMatrix", _wrap_RotationY_rotMatrix, METH_O, "RotationY_rotMatrix(RotationY self) -> RotMatrix"},
+	 { "delete_RotationY", _wrap_delete_RotationY, METH_O, "delete_RotationY(RotationY self)"},
+	 { "RotationY_swigregister", RotationY_swigregister, METH_O, NULL},
+	 { "RotationY_swiginit", RotationY_swiginit, METH_VARARGS, NULL},
+	 { "new_RotationZ", _wrap_new_RotationZ, METH_VARARGS, "\n"
+		"RotationZ(vdouble1d_t P)\n"
+		"new_RotationZ(double angle) -> RotationZ\n"
 		""},
-	 { "Box_clone", _wrap_Box_clone, METH_O, "Box_clone(Box self) -> Box"},
-	 { "Box_className", _wrap_Box_className, METH_O, "Box_className(Box self) -> std::string"},
-	 { "Box_parDefs", _wrap_Box_parDefs, METH_O, "Box_parDefs(Box self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "Box_length", _wrap_Box_length, METH_O, "Box_length(Box self) -> double"},
-	 { "Box_width", _wrap_Box_width, METH_O, "Box_width(Box self) -> double"},
-	 { "Box_height", _wrap_Box_height, METH_O, "Box_height(Box self) -> double"},
-	 { "Box_volume", _wrap_Box_volume, METH_O, "Box_volume(Box self) -> double"},
-	 { "Box_radialExtension", _wrap_Box_radialExtension, METH_O, "Box_radialExtension(Box self) -> double"},
-	 { "Box_formfactor", _wrap_Box_formfactor, METH_VARARGS, "Box_formfactor(Box self, C3 q) -> complex_t"},
-	 { "Box_validate", _wrap_Box_validate, METH_O, "Box_validate(Box self) -> std::string"},
-	 { "delete_Box", _wrap_delete_Box, METH_O, "delete_Box(Box self)"},
-	 { "Box_swigregister", Box_swigregister, METH_O, NULL},
-	 { "Box_swiginit", Box_swiginit, METH_VARARGS, NULL},
-	 { "new_CantellatedCube", _wrap_new_CantellatedCube, METH_VARARGS, "\n"
-		"CantellatedCube(double length, double removed_length)\n"
-		"new_CantellatedCube(vdouble1d_t P) -> CantellatedCube\n"
+	 { "RotationZ_clone", _wrap_RotationZ_clone, METH_O, "RotationZ_clone(RotationZ self) -> RotationZ"},
+	 { "RotationZ_className", _wrap_RotationZ_className, METH_O, "RotationZ_className(RotationZ self) -> std::string"},
+	 { "RotationZ_parDefs", _wrap_RotationZ_parDefs, METH_O, "RotationZ_parDefs(RotationZ self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "RotationZ_createInverse", _wrap_RotationZ_createInverse, METH_O, "RotationZ_createInverse(RotationZ self) -> RotationZ"},
+	 { "RotationZ_angle", _wrap_RotationZ_angle, METH_O, "RotationZ_angle(RotationZ self) -> double"},
+	 { "RotationZ_rotMatrix", _wrap_RotationZ_rotMatrix, METH_O, "RotationZ_rotMatrix(RotationZ self) -> RotMatrix"},
+	 { "delete_RotationZ", _wrap_delete_RotationZ, METH_O, "delete_RotationZ(RotationZ self)"},
+	 { "RotationZ_swigregister", RotationZ_swigregister, METH_O, NULL},
+	 { "RotationZ_swiginit", RotationZ_swiginit, METH_VARARGS, NULL},
+	 { "new_RotationEuler", _wrap_new_RotationEuler, METH_VARARGS, "\n"
+		"RotationEuler(vdouble1d_t P)\n"
+		"new_RotationEuler(double alpha, double beta, double gamma) -> RotationEuler\n"
+		""},
+	 { "RotationEuler_clone", _wrap_RotationEuler_clone, METH_O, "RotationEuler_clone(RotationEuler self) -> RotationEuler"},
+	 { "RotationEuler_className", _wrap_RotationEuler_className, METH_O, "RotationEuler_className(RotationEuler self) -> std::string"},
+	 { "RotationEuler_parDefs", _wrap_RotationEuler_parDefs, METH_O, "RotationEuler_parDefs(RotationEuler self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "RotationEuler_createInverse", _wrap_RotationEuler_createInverse, METH_O, "RotationEuler_createInverse(RotationEuler self) -> IRotation"},
+	 { "RotationEuler_alpha", _wrap_RotationEuler_alpha, METH_O, "RotationEuler_alpha(RotationEuler self) -> double"},
+	 { "RotationEuler_beta", _wrap_RotationEuler_beta, METH_O, "RotationEuler_beta(RotationEuler self) -> double"},
+	 { "RotationEuler_gamma", _wrap_RotationEuler_gamma, METH_O, "RotationEuler_gamma(RotationEuler self) -> double"},
+	 { "RotationEuler_rotMatrix", _wrap_RotationEuler_rotMatrix, METH_O, "RotationEuler_rotMatrix(RotationEuler self) -> RotMatrix"},
+	 { "delete_RotationEuler", _wrap_delete_RotationEuler, METH_O, "delete_RotationEuler(RotationEuler self)"},
+	 { "RotationEuler_swigregister", RotationEuler_swigregister, METH_O, NULL},
+	 { "RotationEuler_swiginit", RotationEuler_swiginit, METH_VARARGS, NULL},
+	 { "new_Crystal", _wrap_new_Crystal, METH_VARARGS, "Crystal(IParticle basis, Lattice3D lattice, double position_variance=0)"},
+	 { "delete_Crystal", _wrap_delete_Crystal, METH_O, "delete_Crystal(Crystal self)"},
+	 { "Crystal_clone", _wrap_Crystal_clone, METH_O, "Crystal_clone(Crystal self) -> Crystal"},
+	 { "Crystal_className", _wrap_Crystal_className, METH_O, "Crystal_className(Crystal self) -> std::string"},
+	 { "Crystal_nodeChildren", _wrap_Crystal_nodeChildren, METH_O, "Crystal_nodeChildren(Crystal self) -> swig_dummy_type_const_inode_vector"},
+	 { "Crystal_parDefs", _wrap_Crystal_parDefs, METH_O, "Crystal_parDefs(Crystal self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "Crystal_basis", _wrap_Crystal_basis, METH_O, "Crystal_basis(Crystal self) -> IParticle"},
+	 { "Crystal_lattice", _wrap_Crystal_lattice, METH_O, "Crystal_lattice(Crystal self) -> Lattice3D"},
+	 { "Crystal_position_variance", _wrap_Crystal_position_variance, METH_O, "Crystal_position_variance(Crystal self) -> double"},
+	 { "Crystal_transformed", _wrap_Crystal_transformed, METH_VARARGS, "Crystal_transformed(Crystal self, R3 translation, IRotation rotation) -> Crystal"},
+	 { "Crystal_validate", _wrap_Crystal_validate, METH_O, "Crystal_validate(Crystal self) -> std::string"},
+	 { "Crystal_swigregister", Crystal_swigregister, METH_O, NULL},
+	 { "Crystal_swiginit", Crystal_swiginit, METH_VARARGS, NULL},
+	 { "delete_IParticle", _wrap_delete_IParticle, METH_O, "delete_IParticle(IParticle self)"},
+	 { "IParticle_clone", _wrap_IParticle_clone, METH_O, "IParticle_clone(IParticle self) -> IParticle"},
+	 { "IParticle_nodeChildren", _wrap_IParticle_nodeChildren, METH_O, "IParticle_nodeChildren(IParticle self) -> swig_dummy_type_const_inode_vector"},
+	 { "IParticle_abundance", _wrap_IParticle_abundance, METH_O, "IParticle_abundance(IParticle self) -> double"},
+	 { "IParticle_setAbundance", _wrap_IParticle_setAbundance, METH_VARARGS, "IParticle_setAbundance(IParticle self, double abundance)"},
+	 { "IParticle_particlePosition", _wrap_IParticle_particlePosition, METH_O, "IParticle_particlePosition(IParticle self) -> R3"},
+	 { "IParticle_setParticlePosition", _wrap_IParticle_setParticlePosition, METH_VARARGS, "\n"
+		"IParticle_setParticlePosition(IParticle self, R3 position)\n"
+		"IParticle_setParticlePosition(IParticle self, double x, double y, double z)\n"
+		""},
+	 { "IParticle_translate", _wrap_IParticle_translate, METH_VARARGS, "IParticle_translate(IParticle self, R3 translation) -> IParticle"},
+	 { "IParticle_rotation", _wrap_IParticle_rotation, METH_O, "IParticle_rotation(IParticle self) -> IRotation"},
+	 { "IParticle_setRotation", _wrap_IParticle_setRotation, METH_VARARGS, "IParticle_setRotation(IParticle self, IRotation rotation)"},
+	 { "IParticle_rotate", _wrap_IParticle_rotate, METH_VARARGS, "IParticle_rotate(IParticle self, IRotation rotation) -> IParticle"},
+	 { "IParticle_avgeMaterial", _wrap_IParticle_avgeMaterial, METH_O, "IParticle_avgeMaterial(IParticle self) -> Material"},
+	 { "IParticle_volume", _wrap_IParticle_volume, METH_O, "IParticle_volume(IParticle self) -> double"},
+	 { "IParticle_validate", _wrap_IParticle_validate, METH_O, "IParticle_validate(IParticle self) -> std::string"},
+	 { "IParticle_swigregister", IParticle_swigregister, METH_O, NULL},
+	 { "new_Mesocrystal", _wrap_new_Mesocrystal, METH_VARARGS, "new_Mesocrystal(Crystal crystal, IFormFactor formfactor) -> Mesocrystal"},
+	 { "delete_Mesocrystal", _wrap_delete_Mesocrystal, METH_O, "delete_Mesocrystal(Mesocrystal self)"},
+	 { "Mesocrystal_clone", _wrap_Mesocrystal_clone, METH_O, "Mesocrystal_clone(Mesocrystal self) -> Mesocrystal"},
+	 { "Mesocrystal_className", _wrap_Mesocrystal_className, METH_O, "Mesocrystal_className(Mesocrystal self) -> std::string"},
+	 { "Mesocrystal_nodeChildren", _wrap_Mesocrystal_nodeChildren, METH_O, "Mesocrystal_nodeChildren(Mesocrystal self) -> swig_dummy_type_const_inode_vector"},
+	 { "Mesocrystal_outerShape", _wrap_Mesocrystal_outerShape, METH_O, "Mesocrystal_outerShape(Mesocrystal self) -> IFormFactor"},
+	 { "Mesocrystal_particleStructure", _wrap_Mesocrystal_particleStructure, METH_O, "Mesocrystal_particleStructure(Mesocrystal self) -> Crystal"},
+	 { "Mesocrystal_validate", _wrap_Mesocrystal_validate, METH_O, "Mesocrystal_validate(Mesocrystal self) -> std::string"},
+	 { "Mesocrystal_swigregister", Mesocrystal_swigregister, METH_O, NULL},
+	 { "Mesocrystal_swiginit", Mesocrystal_swiginit, METH_VARARGS, NULL},
+	 { "new_Particle", _wrap_new_Particle, METH_VARARGS, "\n"
+		"Particle(Material material, IFormFactor formfactor)\n"
+		"new_Particle(Material material, IFormFactor formfactor, IRotation rotation) -> Particle\n"
 		""},
-	 { "CantellatedCube_clone", _wrap_CantellatedCube_clone, METH_O, "CantellatedCube_clone(CantellatedCube self) -> CantellatedCube"},
-	 { "CantellatedCube_className", _wrap_CantellatedCube_className, METH_O, "CantellatedCube_className(CantellatedCube self) -> std::string"},
-	 { "CantellatedCube_parDefs", _wrap_CantellatedCube_parDefs, METH_O, "CantellatedCube_parDefs(CantellatedCube self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "CantellatedCube_length", _wrap_CantellatedCube_length, METH_O, "CantellatedCube_length(CantellatedCube self) -> double"},
-	 { "CantellatedCube_removedLength", _wrap_CantellatedCube_removedLength, METH_O, "CantellatedCube_removedLength(CantellatedCube self) -> double"},
-	 { "CantellatedCube_validate", _wrap_CantellatedCube_validate, METH_O, "CantellatedCube_validate(CantellatedCube self) -> std::string"},
-	 { "delete_CantellatedCube", _wrap_delete_CantellatedCube, METH_O, "delete_CantellatedCube(CantellatedCube self)"},
-	 { "CantellatedCube_swigregister", CantellatedCube_swigregister, METH_O, NULL},
-	 { "CantellatedCube_swiginit", CantellatedCube_swiginit, METH_VARARGS, NULL},
-	 { "new_Cone", _wrap_new_Cone, METH_VARARGS, "\n"
-		"Cone(double radius, double height, double alpha)\n"
-		"new_Cone(vdouble1d_t P) -> Cone\n"
+	 { "delete_Particle", _wrap_delete_Particle, METH_O, "delete_Particle(Particle self)"},
+	 { "Particle_clone", _wrap_Particle_clone, METH_O, "Particle_clone(Particle self) -> Particle"},
+	 { "Particle_className", _wrap_Particle_className, METH_O, "Particle_className(Particle self) -> std::string"},
+	 { "Particle_nodeChildren", _wrap_Particle_nodeChildren, METH_O, "Particle_nodeChildren(Particle self) -> swig_dummy_type_const_inode_vector"},
+	 { "Particle_material", _wrap_Particle_material, METH_O, "Particle_material(Particle self) -> Material"},
+	 { "Particle_pFormfactor", _wrap_Particle_pFormfactor, METH_O, "Particle_pFormfactor(Particle self) -> IFormFactor"},
+	 { "Particle_validate", _wrap_Particle_validate, METH_O, "Particle_validate(Particle self) -> std::string"},
+	 { "Particle_avgeMaterial", _wrap_Particle_avgeMaterial, METH_O, "Particle_avgeMaterial(Particle self) -> Material"},
+	 { "Particle_volume", _wrap_Particle_volume, METH_O, "Particle_volume(Particle self) -> double"},
+	 { "Particle_swigregister", Particle_swigregister, METH_O, NULL},
+	 { "Particle_swiginit", Particle_swiginit, METH_VARARGS, NULL},
+	 { "new_Compound", _wrap_new_Compound, METH_NOARGS, "new_Compound() -> Compound"},
+	 { "delete_Compound", _wrap_delete_Compound, METH_O, "delete_Compound(Compound self)"},
+	 { "Compound_clone", _wrap_Compound_clone, METH_O, "Compound_clone(Compound self) -> Compound"},
+	 { "Compound_className", _wrap_Compound_className, METH_O, "Compound_className(Compound self) -> std::string"},
+	 { "Compound_nodeChildren", _wrap_Compound_nodeChildren, METH_O, "Compound_nodeChildren(Compound self) -> swig_dummy_type_const_inode_vector"},
+	 { "Compound_addParticle", _wrap_Compound_addParticle, METH_VARARGS, "\n"
+		"Compound_addParticle(Compound self, IParticle particle)\n"
+		"Compound_addParticle(Compound self, IParticle particle, R3 position)\n"
 		""},
-	 { "Cone_clone", _wrap_Cone_clone, METH_O, "Cone_clone(Cone self) -> Cone"},
-	 { "Cone_className", _wrap_Cone_className, METH_O, "Cone_className(Cone self) -> std::string"},
-	 { "Cone_parDefs", _wrap_Cone_parDefs, METH_O, "Cone_parDefs(Cone self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "Cone_radius", _wrap_Cone_radius, METH_O, "Cone_radius(Cone self) -> double"},
-	 { "Cone_height", _wrap_Cone_height, METH_O, "Cone_height(Cone self) -> double"},
-	 { "Cone_alpha", _wrap_Cone_alpha, METH_O, "Cone_alpha(Cone self) -> double"},
-	 { "Cone_radialExtension", _wrap_Cone_radialExtension, METH_O, "Cone_radialExtension(Cone self) -> double"},
-	 { "Cone_formfactor", _wrap_Cone_formfactor, METH_VARARGS, "Cone_formfactor(Cone self, C3 q) -> complex_t"},
-	 { "Cone_validate", _wrap_Cone_validate, METH_O, "Cone_validate(Cone self) -> std::string"},
-	 { "delete_Cone", _wrap_delete_Cone, METH_O, "delete_Cone(Cone self)"},
-	 { "Cone_swigregister", Cone_swigregister, METH_O, NULL},
-	 { "Cone_swiginit", Cone_swiginit, METH_VARARGS, NULL},
-	 { "new_CosineRippleBox", _wrap_new_CosineRippleBox, METH_VARARGS, "\n"
-		"CosineRippleBox(double length, double width, double height)\n"
-		"new_CosineRippleBox(vdouble1d_t P) -> CosineRippleBox\n"
+	 { "Compound_addParticles", _wrap_Compound_addParticles, METH_VARARGS, "Compound_addParticles(Compound self, IParticle particle, vector_R3 positions)"},
+	 { "Compound_nbrParticles", _wrap_Compound_nbrParticles, METH_O, "Compound_nbrParticles(Compound self) -> size_t"},
+	 { "Compound_particles", _wrap_Compound_particles, METH_O, "Compound_particles(Compound self) -> std::vector< IParticle const *,std::allocator< IParticle const * > >"},
+	 { "Compound_validate", _wrap_Compound_validate, METH_O, "Compound_validate(Compound self) -> std::string"},
+	 { "Compound_swigregister", Compound_swigregister, METH_O, NULL},
+	 { "Compound_swiginit", Compound_swiginit, METH_VARARGS, NULL},
+	 { "new_CoreAndShell", _wrap_new_CoreAndShell, METH_VARARGS, "CoreAndShell(Particle shell, Particle core, R3 relative_core_position=R3(0.0, 0.0, 0.0))"},
+	 { "delete_CoreAndShell", _wrap_delete_CoreAndShell, METH_O, "delete_CoreAndShell(CoreAndShell self)"},
+	 { "CoreAndShell_clone", _wrap_CoreAndShell_clone, METH_O, "CoreAndShell_clone(CoreAndShell self) -> CoreAndShell"},
+	 { "CoreAndShell_className", _wrap_CoreAndShell_className, METH_O, "CoreAndShell_className(CoreAndShell self) -> std::string"},
+	 { "CoreAndShell_nodeChildren", _wrap_CoreAndShell_nodeChildren, METH_O, "CoreAndShell_nodeChildren(CoreAndShell self) -> swig_dummy_type_const_inode_vector"},
+	 { "CoreAndShell_shellParticle", _wrap_CoreAndShell_shellParticle, METH_O, "CoreAndShell_shellParticle(CoreAndShell self) -> Particle"},
+	 { "CoreAndShell_coreParticle", _wrap_CoreAndShell_coreParticle, METH_O, "CoreAndShell_coreParticle(CoreAndShell self) -> Particle"},
+	 { "CoreAndShell_validate", _wrap_CoreAndShell_validate, METH_O, "CoreAndShell_validate(CoreAndShell self) -> std::string"},
+	 { "CoreAndShell_swigregister", CoreAndShell_swigregister, METH_O, NULL},
+	 { "CoreAndShell_swiginit", CoreAndShell_swiginit, METH_VARARGS, NULL},
+	 { "IProfile1D_clone", _wrap_IProfile1D_clone, METH_O, "IProfile1D_clone(IProfile1D self) -> IProfile1D"},
+	 { "IProfile1D_parDefs", _wrap_IProfile1D_parDefs, METH_O, "IProfile1D_parDefs(IProfile1D self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "IProfile1D_standardizedFT", _wrap_IProfile1D_standardizedFT, METH_VARARGS, "IProfile1D_standardizedFT(IProfile1D self, double q) -> double"},
+	 { "IProfile1D_decayFT", _wrap_IProfile1D_decayFT, METH_VARARGS, "IProfile1D_decayFT(IProfile1D self, double q) -> double"},
+	 { "IProfile1D_omega", _wrap_IProfile1D_omega, METH_O, "IProfile1D_omega(IProfile1D self) -> double"},
+	 { "IProfile1D_decayLength", _wrap_IProfile1D_decayLength, METH_O, "IProfile1D_decayLength(IProfile1D self) -> double"},
+	 { "IProfile1D_qSecondDerivative", _wrap_IProfile1D_qSecondDerivative, METH_O, "IProfile1D_qSecondDerivative(IProfile1D self) -> double"},
+	 { "IProfile1D_validate", _wrap_IProfile1D_validate, METH_O, "IProfile1D_validate(IProfile1D self) -> std::string"},
+	 { "delete_IProfile1D", _wrap_delete_IProfile1D, METH_O, "delete_IProfile1D(IProfile1D self)"},
+	 { "IProfile1D_swigregister", IProfile1D_swigregister, METH_O, NULL},
+	 { "new_Profile1DCauchy", _wrap_new_Profile1DCauchy, METH_VARARGS, "\n"
+		"Profile1DCauchy(vdouble1d_t P)\n"
+		"new_Profile1DCauchy(double omega) -> Profile1DCauchy\n"
 		""},
-	 { "CosineRippleBox_clone", _wrap_CosineRippleBox_clone, METH_O, "CosineRippleBox_clone(CosineRippleBox self) -> CosineRippleBox"},
-	 { "CosineRippleBox_className", _wrap_CosineRippleBox_className, METH_O, "CosineRippleBox_className(CosineRippleBox self) -> std::string"},
-	 { "CosineRippleBox_parDefs", _wrap_CosineRippleBox_parDefs, METH_O, "CosineRippleBox_parDefs(CosineRippleBox self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "delete_CosineRippleBox", _wrap_delete_CosineRippleBox, METH_O, "delete_CosineRippleBox(CosineRippleBox self)"},
-	 { "CosineRippleBox_swigregister", CosineRippleBox_swigregister, METH_O, NULL},
-	 { "CosineRippleBox_swiginit", CosineRippleBox_swiginit, METH_VARARGS, NULL},
-	 { "new_CosineRippleGauss", _wrap_new_CosineRippleGauss, METH_VARARGS, "\n"
-		"CosineRippleGauss(double length, double width, double height)\n"
-		"new_CosineRippleGauss(vdouble1d_t P) -> CosineRippleGauss\n"
+	 { "Profile1DCauchy_clone", _wrap_Profile1DCauchy_clone, METH_O, "Profile1DCauchy_clone(Profile1DCauchy self) -> Profile1DCauchy"},
+	 { "Profile1DCauchy_className", _wrap_Profile1DCauchy_className, METH_O, "Profile1DCauchy_className(Profile1DCauchy self) -> std::string"},
+	 { "Profile1DCauchy_standardizedFT", _wrap_Profile1DCauchy_standardizedFT, METH_VARARGS, "Profile1DCauchy_standardizedFT(Profile1DCauchy self, double q) -> double"},
+	 { "Profile1DCauchy_decayFT", _wrap_Profile1DCauchy_decayFT, METH_VARARGS, "Profile1DCauchy_decayFT(Profile1DCauchy self, double q) -> double"},
+	 { "Profile1DCauchy_qSecondDerivative", _wrap_Profile1DCauchy_qSecondDerivative, METH_O, "Profile1DCauchy_qSecondDerivative(Profile1DCauchy self) -> double"},
+	 { "delete_Profile1DCauchy", _wrap_delete_Profile1DCauchy, METH_O, "delete_Profile1DCauchy(Profile1DCauchy self)"},
+	 { "Profile1DCauchy_swigregister", Profile1DCauchy_swigregister, METH_O, NULL},
+	 { "Profile1DCauchy_swiginit", Profile1DCauchy_swiginit, METH_VARARGS, NULL},
+	 { "new_Profile1DGauss", _wrap_new_Profile1DGauss, METH_VARARGS, "\n"
+		"Profile1DGauss(vdouble1d_t P)\n"
+		"new_Profile1DGauss(double omega) -> Profile1DGauss\n"
 		""},
-	 { "CosineRippleGauss_clone", _wrap_CosineRippleGauss_clone, METH_O, "CosineRippleGauss_clone(CosineRippleGauss self) -> CosineRippleGauss"},
-	 { "CosineRippleGauss_className", _wrap_CosineRippleGauss_className, METH_O, "CosineRippleGauss_className(CosineRippleGauss self) -> std::string"},
-	 { "CosineRippleGauss_parDefs", _wrap_CosineRippleGauss_parDefs, METH_O, "CosineRippleGauss_parDefs(CosineRippleGauss self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "delete_CosineRippleGauss", _wrap_delete_CosineRippleGauss, METH_O, "delete_CosineRippleGauss(CosineRippleGauss self)"},
-	 { "CosineRippleGauss_swigregister", CosineRippleGauss_swigregister, METH_O, NULL},
-	 { "CosineRippleGauss_swiginit", CosineRippleGauss_swiginit, METH_VARARGS, NULL},
-	 { "new_CosineRippleLorentz", _wrap_new_CosineRippleLorentz, METH_VARARGS, "\n"
-		"CosineRippleLorentz(double length, double width, double height)\n"
-		"new_CosineRippleLorentz(vdouble1d_t P) -> CosineRippleLorentz\n"
+	 { "Profile1DGauss_clone", _wrap_Profile1DGauss_clone, METH_O, "Profile1DGauss_clone(Profile1DGauss self) -> Profile1DGauss"},
+	 { "Profile1DGauss_className", _wrap_Profile1DGauss_className, METH_O, "Profile1DGauss_className(Profile1DGauss self) -> std::string"},
+	 { "Profile1DGauss_standardizedFT", _wrap_Profile1DGauss_standardizedFT, METH_VARARGS, "Profile1DGauss_standardizedFT(Profile1DGauss self, double q) -> double"},
+	 { "Profile1DGauss_decayFT", _wrap_Profile1DGauss_decayFT, METH_VARARGS, "Profile1DGauss_decayFT(Profile1DGauss self, double q) -> double"},
+	 { "Profile1DGauss_qSecondDerivative", _wrap_Profile1DGauss_qSecondDerivative, METH_O, "Profile1DGauss_qSecondDerivative(Profile1DGauss self) -> double"},
+	 { "delete_Profile1DGauss", _wrap_delete_Profile1DGauss, METH_O, "delete_Profile1DGauss(Profile1DGauss self)"},
+	 { "Profile1DGauss_swigregister", Profile1DGauss_swigregister, METH_O, NULL},
+	 { "Profile1DGauss_swiginit", Profile1DGauss_swiginit, METH_VARARGS, NULL},
+	 { "new_Profile1DGate", _wrap_new_Profile1DGate, METH_VARARGS, "\n"
+		"Profile1DGate(vdouble1d_t P)\n"
+		"new_Profile1DGate(double omega) -> Profile1DGate\n"
 		""},
-	 { "CosineRippleLorentz_clone", _wrap_CosineRippleLorentz_clone, METH_O, "CosineRippleLorentz_clone(CosineRippleLorentz self) -> CosineRippleLorentz"},
-	 { "CosineRippleLorentz_className", _wrap_CosineRippleLorentz_className, METH_O, "CosineRippleLorentz_className(CosineRippleLorentz self) -> std::string"},
-	 { "CosineRippleLorentz_parDefs", _wrap_CosineRippleLorentz_parDefs, METH_O, "CosineRippleLorentz_parDefs(CosineRippleLorentz self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "delete_CosineRippleLorentz", _wrap_delete_CosineRippleLorentz, METH_O, "delete_CosineRippleLorentz(CosineRippleLorentz self)"},
-	 { "CosineRippleLorentz_swigregister", CosineRippleLorentz_swigregister, METH_O, NULL},
-	 { "CosineRippleLorentz_swiginit", CosineRippleLorentz_swiginit, METH_VARARGS, NULL},
-	 { "new_Cylinder", _wrap_new_Cylinder, METH_VARARGS, "\n"
-		"Cylinder(double radius, double height)\n"
-		"new_Cylinder(vdouble1d_t P) -> Cylinder\n"
+	 { "Profile1DGate_clone", _wrap_Profile1DGate_clone, METH_O, "Profile1DGate_clone(Profile1DGate self) -> Profile1DGate"},
+	 { "Profile1DGate_className", _wrap_Profile1DGate_className, METH_O, "Profile1DGate_className(Profile1DGate self) -> std::string"},
+	 { "Profile1DGate_standardizedFT", _wrap_Profile1DGate_standardizedFT, METH_VARARGS, "Profile1DGate_standardizedFT(Profile1DGate self, double q) -> double"},
+	 { "Profile1DGate_decayFT", _wrap_Profile1DGate_decayFT, METH_VARARGS, "Profile1DGate_decayFT(Profile1DGate self, double q) -> double"},
+	 { "Profile1DGate_qSecondDerivative", _wrap_Profile1DGate_qSecondDerivative, METH_O, "Profile1DGate_qSecondDerivative(Profile1DGate self) -> double"},
+	 { "delete_Profile1DGate", _wrap_delete_Profile1DGate, METH_O, "delete_Profile1DGate(Profile1DGate self)"},
+	 { "Profile1DGate_swigregister", Profile1DGate_swigregister, METH_O, NULL},
+	 { "Profile1DGate_swiginit", Profile1DGate_swiginit, METH_VARARGS, NULL},
+	 { "new_Profile1DTriangle", _wrap_new_Profile1DTriangle, METH_VARARGS, "\n"
+		"Profile1DTriangle(vdouble1d_t P)\n"
+		"new_Profile1DTriangle(double omega) -> Profile1DTriangle\n"
 		""},
-	 { "Cylinder_clone", _wrap_Cylinder_clone, METH_O, "Cylinder_clone(Cylinder self) -> Cylinder"},
-	 { "Cylinder_className", _wrap_Cylinder_className, METH_O, "Cylinder_className(Cylinder self) -> std::string"},
-	 { "Cylinder_parDefs", _wrap_Cylinder_parDefs, METH_O, "Cylinder_parDefs(Cylinder self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "Cylinder_height", _wrap_Cylinder_height, METH_O, "Cylinder_height(Cylinder self) -> double"},
-	 { "Cylinder_radius", _wrap_Cylinder_radius, METH_O, "Cylinder_radius(Cylinder self) -> double"},
-	 { "Cylinder_radialExtension", _wrap_Cylinder_radialExtension, METH_O, "Cylinder_radialExtension(Cylinder self) -> double"},
-	 { "Cylinder_formfactor", _wrap_Cylinder_formfactor, METH_VARARGS, "Cylinder_formfactor(Cylinder self, C3 q) -> complex_t"},
-	 { "Cylinder_validate", _wrap_Cylinder_validate, METH_O, "Cylinder_validate(Cylinder self) -> std::string"},
-	 { "delete_Cylinder", _wrap_delete_Cylinder, METH_O, "delete_Cylinder(Cylinder self)"},
-	 { "Cylinder_swigregister", Cylinder_swigregister, METH_O, NULL},
-	 { "Cylinder_swiginit", Cylinder_swiginit, METH_VARARGS, NULL},
-	 { "new_Dodecahedron", _wrap_new_Dodecahedron, METH_VARARGS, "\n"
-		"Dodecahedron(double edge)\n"
-		"new_Dodecahedron(vdouble1d_t P) -> Dodecahedron\n"
+	 { "Profile1DTriangle_clone", _wrap_Profile1DTriangle_clone, METH_O, "Profile1DTriangle_clone(Profile1DTriangle self) -> Profile1DTriangle"},
+	 { "Profile1DTriangle_className", _wrap_Profile1DTriangle_className, METH_O, "Profile1DTriangle_className(Profile1DTriangle self) -> std::string"},
+	 { "Profile1DTriangle_standardizedFT", _wrap_Profile1DTriangle_standardizedFT, METH_VARARGS, "Profile1DTriangle_standardizedFT(Profile1DTriangle self, double q) -> double"},
+	 { "Profile1DTriangle_decayFT", _wrap_Profile1DTriangle_decayFT, METH_VARARGS, "Profile1DTriangle_decayFT(Profile1DTriangle self, double q) -> double"},
+	 { "Profile1DTriangle_qSecondDerivative", _wrap_Profile1DTriangle_qSecondDerivative, METH_O, "Profile1DTriangle_qSecondDerivative(Profile1DTriangle self) -> double"},
+	 { "delete_Profile1DTriangle", _wrap_delete_Profile1DTriangle, METH_O, "delete_Profile1DTriangle(Profile1DTriangle self)"},
+	 { "Profile1DTriangle_swigregister", Profile1DTriangle_swigregister, METH_O, NULL},
+	 { "Profile1DTriangle_swiginit", Profile1DTriangle_swiginit, METH_VARARGS, NULL},
+	 { "new_Profile1DCosine", _wrap_new_Profile1DCosine, METH_VARARGS, "\n"
+		"Profile1DCosine(vdouble1d_t P)\n"
+		"new_Profile1DCosine(double omega) -> Profile1DCosine\n"
 		""},
-	 { "Dodecahedron_clone", _wrap_Dodecahedron_clone, METH_O, "Dodecahedron_clone(Dodecahedron self) -> Dodecahedron"},
-	 { "Dodecahedron_className", _wrap_Dodecahedron_className, METH_O, "Dodecahedron_className(Dodecahedron self) -> std::string"},
-	 { "Dodecahedron_parDefs", _wrap_Dodecahedron_parDefs, METH_O, "Dodecahedron_parDefs(Dodecahedron self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "Dodecahedron_edge", _wrap_Dodecahedron_edge, METH_O, "Dodecahedron_edge(Dodecahedron self) -> double"},
-	 { "delete_Dodecahedron", _wrap_delete_Dodecahedron, METH_O, "delete_Dodecahedron(Dodecahedron self)"},
-	 { "Dodecahedron_swigregister", Dodecahedron_swigregister, METH_O, NULL},
-	 { "Dodecahedron_swiginit", Dodecahedron_swiginit, METH_VARARGS, NULL},
-	 { "new_EllipsoidalCylinder", _wrap_new_EllipsoidalCylinder, METH_VARARGS, "\n"
-		"EllipsoidalCylinder(double radius_x, double radius_y, double height)\n"
-		"new_EllipsoidalCylinder(vdouble1d_t P) -> EllipsoidalCylinder\n"
+	 { "Profile1DCosine_clone", _wrap_Profile1DCosine_clone, METH_O, "Profile1DCosine_clone(Profile1DCosine self) -> Profile1DCosine"},
+	 { "Profile1DCosine_className", _wrap_Profile1DCosine_className, METH_O, "Profile1DCosine_className(Profile1DCosine self) -> std::string"},
+	 { "Profile1DCosine_standardizedFT", _wrap_Profile1DCosine_standardizedFT, METH_VARARGS, "Profile1DCosine_standardizedFT(Profile1DCosine self, double q) -> double"},
+	 { "Profile1DCosine_decayFT", _wrap_Profile1DCosine_decayFT, METH_VARARGS, "Profile1DCosine_decayFT(Profile1DCosine self, double q) -> double"},
+	 { "Profile1DCosine_qSecondDerivative", _wrap_Profile1DCosine_qSecondDerivative, METH_O, "Profile1DCosine_qSecondDerivative(Profile1DCosine self) -> double"},
+	 { "delete_Profile1DCosine", _wrap_delete_Profile1DCosine, METH_O, "delete_Profile1DCosine(Profile1DCosine self)"},
+	 { "Profile1DCosine_swigregister", Profile1DCosine_swigregister, METH_O, NULL},
+	 { "Profile1DCosine_swiginit", Profile1DCosine_swiginit, METH_VARARGS, NULL},
+	 { "new_Profile1DVoigt", _wrap_new_Profile1DVoigt, METH_VARARGS, "\n"
+		"Profile1DVoigt(vdouble1d_t P)\n"
+		"new_Profile1DVoigt(double omega, double eta) -> Profile1DVoigt\n"
 		""},
-	 { "EllipsoidalCylinder_clone", _wrap_EllipsoidalCylinder_clone, METH_O, "EllipsoidalCylinder_clone(EllipsoidalCylinder self) -> EllipsoidalCylinder"},
-	 { "EllipsoidalCylinder_className", _wrap_EllipsoidalCylinder_className, METH_O, "EllipsoidalCylinder_className(EllipsoidalCylinder self) -> std::string"},
-	 { "EllipsoidalCylinder_parDefs", _wrap_EllipsoidalCylinder_parDefs, METH_O, "EllipsoidalCylinder_parDefs(EllipsoidalCylinder self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "EllipsoidalCylinder_radiusX", _wrap_EllipsoidalCylinder_radiusX, METH_O, "EllipsoidalCylinder_radiusX(EllipsoidalCylinder self) -> double"},
-	 { "EllipsoidalCylinder_radiusY", _wrap_EllipsoidalCylinder_radiusY, METH_O, "EllipsoidalCylinder_radiusY(EllipsoidalCylinder self) -> double"},
-	 { "EllipsoidalCylinder_height", _wrap_EllipsoidalCylinder_height, METH_O, "EllipsoidalCylinder_height(EllipsoidalCylinder self) -> double"},
-	 { "EllipsoidalCylinder_radialExtension", _wrap_EllipsoidalCylinder_radialExtension, METH_O, "EllipsoidalCylinder_radialExtension(EllipsoidalCylinder self) -> double"},
-	 { "EllipsoidalCylinder_formfactor", _wrap_EllipsoidalCylinder_formfactor, METH_VARARGS, "EllipsoidalCylinder_formfactor(EllipsoidalCylinder self, C3 q) -> complex_t"},
-	 { "EllipsoidalCylinder_validate", _wrap_EllipsoidalCylinder_validate, METH_O, "EllipsoidalCylinder_validate(EllipsoidalCylinder self) -> std::string"},
-	 { "delete_EllipsoidalCylinder", _wrap_delete_EllipsoidalCylinder, METH_O, "delete_EllipsoidalCylinder(EllipsoidalCylinder self)"},
-	 { "EllipsoidalCylinder_swigregister", EllipsoidalCylinder_swigregister, METH_O, NULL},
-	 { "EllipsoidalCylinder_swiginit", EllipsoidalCylinder_swiginit, METH_VARARGS, NULL},
-	 { "new_Sphere", _wrap_new_Sphere, METH_VARARGS, "\n"
-		"Sphere(double radius, bool position_at_center=False)\n"
-		"Sphere(vdouble1d_t P, bool position_at_center=False)\n"
+	 { "Profile1DVoigt_clone", _wrap_Profile1DVoigt_clone, METH_O, "Profile1DVoigt_clone(Profile1DVoigt self) -> Profile1DVoigt"},
+	 { "Profile1DVoigt_className", _wrap_Profile1DVoigt_className, METH_O, "Profile1DVoigt_className(Profile1DVoigt self) -> std::string"},
+	 { "Profile1DVoigt_parDefs", _wrap_Profile1DVoigt_parDefs, METH_O, "Profile1DVoigt_parDefs(Profile1DVoigt self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "Profile1DVoigt_standardizedFT", _wrap_Profile1DVoigt_standardizedFT, METH_VARARGS, "Profile1DVoigt_standardizedFT(Profile1DVoigt self, double q) -> double"},
+	 { "Profile1DVoigt_decayFT", _wrap_Profile1DVoigt_decayFT, METH_VARARGS, "Profile1DVoigt_decayFT(Profile1DVoigt self, double q) -> double"},
+	 { "Profile1DVoigt_eta", _wrap_Profile1DVoigt_eta, METH_O, "Profile1DVoigt_eta(Profile1DVoigt self) -> double"},
+	 { "Profile1DVoigt_qSecondDerivative", _wrap_Profile1DVoigt_qSecondDerivative, METH_O, "Profile1DVoigt_qSecondDerivative(Profile1DVoigt self) -> double"},
+	 { "Profile1DVoigt_validate", _wrap_Profile1DVoigt_validate, METH_O, "Profile1DVoigt_validate(Profile1DVoigt self) -> std::string"},
+	 { "delete_Profile1DVoigt", _wrap_delete_Profile1DVoigt, METH_O, "delete_Profile1DVoigt(Profile1DVoigt self)"},
+	 { "Profile1DVoigt_swigregister", Profile1DVoigt_swigregister, METH_O, NULL},
+	 { "Profile1DVoigt_swiginit", Profile1DVoigt_swiginit, METH_VARARGS, NULL},
+	 { "IProfile2D_clone", _wrap_IProfile2D_clone, METH_O, "IProfile2D_clone(IProfile2D self) -> IProfile2D"},
+	 { "IProfile2D_parDefs", _wrap_IProfile2D_parDefs, METH_O, "IProfile2D_parDefs(IProfile2D self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "IProfile2D_omegaX", _wrap_IProfile2D_omegaX, METH_O, "IProfile2D_omegaX(IProfile2D self) -> double"},
+	 { "IProfile2D_omegaY", _wrap_IProfile2D_omegaY, METH_O, "IProfile2D_omegaY(IProfile2D self) -> double"},
+	 { "IProfile2D_decayLengthX", _wrap_IProfile2D_decayLengthX, METH_O, "IProfile2D_decayLengthX(IProfile2D self) -> double"},
+	 { "IProfile2D_decayLengthY", _wrap_IProfile2D_decayLengthY, METH_O, "IProfile2D_decayLengthY(IProfile2D self) -> double"},
+	 { "IProfile2D_gamma", _wrap_IProfile2D_gamma, METH_O, "IProfile2D_gamma(IProfile2D self) -> double"},
+	 { "IProfile2D_delta", _wrap_IProfile2D_delta, METH_O, "IProfile2D_delta(IProfile2D self) -> double"},
+	 { "IProfile2D_standardizedFT2D", _wrap_IProfile2D_standardizedFT2D, METH_VARARGS, "IProfile2D_standardizedFT2D(IProfile2D self, double qx, double qy) -> double"},
+	 { "IProfile2D_decayFT2D", _wrap_IProfile2D_decayFT2D, METH_VARARGS, "IProfile2D_decayFT2D(IProfile2D self, double qx, double qy) -> double"},
+	 { "IProfile2D_validate", _wrap_IProfile2D_validate, METH_O, "IProfile2D_validate(IProfile2D self) -> std::string"},
+	 { "delete_IProfile2D", _wrap_delete_IProfile2D, METH_O, "delete_IProfile2D(IProfile2D self)"},
+	 { "IProfile2D_swigregister", IProfile2D_swigregister, METH_O, NULL},
+	 { "new_Profile2DCauchy", _wrap_new_Profile2DCauchy, METH_VARARGS, "\n"
+		"Profile2DCauchy(vdouble1d_t P)\n"
+		"new_Profile2DCauchy(double omega_x, double omega_y, double gamma) -> Profile2DCauchy\n"
 		""},
-	 { "Sphere_clone", _wrap_Sphere_clone, METH_O, "Sphere_clone(Sphere self) -> Sphere"},
-	 { "Sphere_className", _wrap_Sphere_className, METH_O, "Sphere_className(Sphere self) -> std::string"},
-	 { "Sphere_parDefs", _wrap_Sphere_parDefs, METH_O, "Sphere_parDefs(Sphere self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "Sphere_radius", _wrap_Sphere_radius, METH_O, "Sphere_radius(Sphere self) -> double"},
-	 { "Sphere_radialExtension", _wrap_Sphere_radialExtension, METH_O, "Sphere_radialExtension(Sphere self) -> double"},
-	 { "Sphere_formfactor", _wrap_Sphere_formfactor, METH_VARARGS, "Sphere_formfactor(Sphere self, C3 q) -> complex_t"},
-	 { "Sphere_validate", _wrap_Sphere_validate, METH_O, "Sphere_validate(Sphere self) -> std::string"},
-	 { "delete_Sphere", _wrap_delete_Sphere, METH_O, "delete_Sphere(Sphere self)"},
-	 { "Sphere_swigregister", Sphere_swigregister, METH_O, NULL},
-	 { "Sphere_swiginit", Sphere_swiginit, METH_VARARGS, NULL},
-	 { "new_Spheroid", _wrap_new_Spheroid, METH_VARARGS, "\n"
-		"Spheroid(double radius, double height)\n"
-		"new_Spheroid(vdouble1d_t P) -> Spheroid\n"
+	 { "Profile2DCauchy_clone", _wrap_Profile2DCauchy_clone, METH_O, "Profile2DCauchy_clone(Profile2DCauchy self) -> Profile2DCauchy"},
+	 { "Profile2DCauchy_className", _wrap_Profile2DCauchy_className, METH_O, "Profile2DCauchy_className(Profile2DCauchy self) -> std::string"},
+	 { "Profile2DCauchy_standardizedFT2D", _wrap_Profile2DCauchy_standardizedFT2D, METH_VARARGS, "Profile2DCauchy_standardizedFT2D(Profile2DCauchy self, double qx, double qy) -> double"},
+	 { "Profile2DCauchy_decayFT2D", _wrap_Profile2DCauchy_decayFT2D, METH_VARARGS, "Profile2DCauchy_decayFT2D(Profile2DCauchy self, double qx, double qy) -> double"},
+	 { "delete_Profile2DCauchy", _wrap_delete_Profile2DCauchy, METH_O, "delete_Profile2DCauchy(Profile2DCauchy self)"},
+	 { "Profile2DCauchy_swigregister", Profile2DCauchy_swigregister, METH_O, NULL},
+	 { "Profile2DCauchy_swiginit", Profile2DCauchy_swiginit, METH_VARARGS, NULL},
+	 { "new_Profile2DGauss", _wrap_new_Profile2DGauss, METH_VARARGS, "\n"
+		"Profile2DGauss(vdouble1d_t P)\n"
+		"new_Profile2DGauss(double omega_x, double omega_y, double gamma) -> Profile2DGauss\n"
 		""},
-	 { "Spheroid_clone", _wrap_Spheroid_clone, METH_O, "Spheroid_clone(Spheroid self) -> Spheroid"},
-	 { "Spheroid_className", _wrap_Spheroid_className, METH_O, "Spheroid_className(Spheroid self) -> std::string"},
-	 { "Spheroid_parDefs", _wrap_Spheroid_parDefs, METH_O, "Spheroid_parDefs(Spheroid self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "Spheroid_height", _wrap_Spheroid_height, METH_O, "Spheroid_height(Spheroid self) -> double"},
-	 { "Spheroid_radius", _wrap_Spheroid_radius, METH_O, "Spheroid_radius(Spheroid self) -> double"},
-	 { "Spheroid_radialExtension", _wrap_Spheroid_radialExtension, METH_O, "Spheroid_radialExtension(Spheroid self) -> double"},
-	 { "Spheroid_formfactor", _wrap_Spheroid_formfactor, METH_VARARGS, "Spheroid_formfactor(Spheroid self, C3 q) -> complex_t"},
-	 { "Spheroid_validate", _wrap_Spheroid_validate, METH_O, "Spheroid_validate(Spheroid self) -> std::string"},
-	 { "delete_Spheroid", _wrap_delete_Spheroid, METH_O, "delete_Spheroid(Spheroid self)"},
-	 { "Spheroid_swigregister", Spheroid_swigregister, METH_O, NULL},
-	 { "Spheroid_swiginit", Spheroid_swiginit, METH_VARARGS, NULL},
-	 { "new_HemiEllipsoid", _wrap_new_HemiEllipsoid, METH_VARARGS, "\n"
-		"HemiEllipsoid(double radius_x, double radius_y, double height)\n"
-		"new_HemiEllipsoid(vdouble1d_t P) -> HemiEllipsoid\n"
+	 { "Profile2DGauss_clone", _wrap_Profile2DGauss_clone, METH_O, "Profile2DGauss_clone(Profile2DGauss self) -> Profile2DGauss"},
+	 { "Profile2DGauss_className", _wrap_Profile2DGauss_className, METH_O, "Profile2DGauss_className(Profile2DGauss self) -> std::string"},
+	 { "Profile2DGauss_standardizedFT2D", _wrap_Profile2DGauss_standardizedFT2D, METH_VARARGS, "Profile2DGauss_standardizedFT2D(Profile2DGauss self, double qx, double qy) -> double"},
+	 { "Profile2DGauss_decayFT2D", _wrap_Profile2DGauss_decayFT2D, METH_VARARGS, "Profile2DGauss_decayFT2D(Profile2DGauss self, double qx, double qy) -> double"},
+	 { "delete_Profile2DGauss", _wrap_delete_Profile2DGauss, METH_O, "delete_Profile2DGauss(Profile2DGauss self)"},
+	 { "Profile2DGauss_swigregister", Profile2DGauss_swigregister, METH_O, NULL},
+	 { "Profile2DGauss_swiginit", Profile2DGauss_swiginit, METH_VARARGS, NULL},
+	 { "new_Profile2DGate", _wrap_new_Profile2DGate, METH_VARARGS, "\n"
+		"Profile2DGate(vdouble1d_t P)\n"
+		"new_Profile2DGate(double omega_x, double omega_y, double gamma) -> Profile2DGate\n"
 		""},
-	 { "delete_HemiEllipsoid", _wrap_delete_HemiEllipsoid, METH_O, "delete_HemiEllipsoid(HemiEllipsoid self)"},
-	 { "HemiEllipsoid_clone", _wrap_HemiEllipsoid_clone, METH_O, "HemiEllipsoid_clone(HemiEllipsoid self) -> HemiEllipsoid"},
-	 { "HemiEllipsoid_className", _wrap_HemiEllipsoid_className, METH_O, "HemiEllipsoid_className(HemiEllipsoid self) -> std::string"},
-	 { "HemiEllipsoid_parDefs", _wrap_HemiEllipsoid_parDefs, METH_O, "HemiEllipsoid_parDefs(HemiEllipsoid self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "HemiEllipsoid_height", _wrap_HemiEllipsoid_height, METH_O, "HemiEllipsoid_height(HemiEllipsoid self) -> double"},
-	 { "HemiEllipsoid_radiusX", _wrap_HemiEllipsoid_radiusX, METH_O, "HemiEllipsoid_radiusX(HemiEllipsoid self) -> double"},
-	 { "HemiEllipsoid_radiusY", _wrap_HemiEllipsoid_radiusY, METH_O, "HemiEllipsoid_radiusY(HemiEllipsoid self) -> double"},
-	 { "HemiEllipsoid_radialExtension", _wrap_HemiEllipsoid_radialExtension, METH_O, "HemiEllipsoid_radialExtension(HemiEllipsoid self) -> double"},
-	 { "HemiEllipsoid_formfactor", _wrap_HemiEllipsoid_formfactor, METH_VARARGS, "HemiEllipsoid_formfactor(HemiEllipsoid self, C3 q) -> complex_t"},
-	 { "HemiEllipsoid_validate", _wrap_HemiEllipsoid_validate, METH_O, "HemiEllipsoid_validate(HemiEllipsoid self) -> std::string"},
-	 { "HemiEllipsoid_swigregister", HemiEllipsoid_swigregister, METH_O, NULL},
-	 { "HemiEllipsoid_swiginit", HemiEllipsoid_swiginit, METH_VARARGS, NULL},
-	 { "new_HorizontalCylinder", _wrap_new_HorizontalCylinder, METH_VARARGS, "\n"
-		"HorizontalCylinder(double radius, double length, double slice_bottom, double slice_top)\n"
-		"HorizontalCylinder(double radius, double length)\n"
-		"new_HorizontalCylinder(vdouble1d_t P) -> HorizontalCylinder\n"
+	 { "Profile2DGate_clone", _wrap_Profile2DGate_clone, METH_O, "Profile2DGate_clone(Profile2DGate self) -> Profile2DGate"},
+	 { "Profile2DGate_className", _wrap_Profile2DGate_className, METH_O, "Profile2DGate_className(Profile2DGate self) -> std::string"},
+	 { "Profile2DGate_standardizedFT2D", _wrap_Profile2DGate_standardizedFT2D, METH_VARARGS, "Profile2DGate_standardizedFT2D(Profile2DGate self, double qx, double qy) -> double"},
+	 { "Profile2DGate_decayFT2D", _wrap_Profile2DGate_decayFT2D, METH_VARARGS, "Profile2DGate_decayFT2D(Profile2DGate self, double qx, double qy) -> double"},
+	 { "delete_Profile2DGate", _wrap_delete_Profile2DGate, METH_O, "delete_Profile2DGate(Profile2DGate self)"},
+	 { "Profile2DGate_swigregister", Profile2DGate_swigregister, METH_O, NULL},
+	 { "Profile2DGate_swiginit", Profile2DGate_swiginit, METH_VARARGS, NULL},
+	 { "new_Profile2DCone", _wrap_new_Profile2DCone, METH_VARARGS, "\n"
+		"Profile2DCone(vdouble1d_t P)\n"
+		"new_Profile2DCone(double omega_x, double omega_y, double gamma) -> Profile2DCone\n"
 		""},
-	 { "HorizontalCylinder_clone", _wrap_HorizontalCylinder_clone, METH_O, "HorizontalCylinder_clone(HorizontalCylinder self) -> HorizontalCylinder"},
-	 { "HorizontalCylinder_className", _wrap_HorizontalCylinder_className, METH_O, "HorizontalCylinder_className(HorizontalCylinder self) -> std::string"},
-	 { "HorizontalCylinder_parDefs", _wrap_HorizontalCylinder_parDefs, METH_O, "HorizontalCylinder_parDefs(HorizontalCylinder self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "HorizontalCylinder_length", _wrap_HorizontalCylinder_length, METH_O, "HorizontalCylinder_length(HorizontalCylinder self) -> double"},
-	 { "HorizontalCylinder_radius", _wrap_HorizontalCylinder_radius, METH_O, "HorizontalCylinder_radius(HorizontalCylinder self) -> double"},
-	 { "HorizontalCylinder_slice_bottom", _wrap_HorizontalCylinder_slice_bottom, METH_O, "HorizontalCylinder_slice_bottom(HorizontalCylinder self) -> double"},
-	 { "HorizontalCylinder_slice_top", _wrap_HorizontalCylinder_slice_top, METH_O, "HorizontalCylinder_slice_top(HorizontalCylinder self) -> double"},
-	 { "HorizontalCylinder_radialExtension", _wrap_HorizontalCylinder_radialExtension, METH_O, "HorizontalCylinder_radialExtension(HorizontalCylinder self) -> double"},
-	 { "HorizontalCylinder_formfactor", _wrap_HorizontalCylinder_formfactor, METH_VARARGS, "HorizontalCylinder_formfactor(HorizontalCylinder self, C3 q) -> complex_t"},
-	 { "HorizontalCylinder_validate", _wrap_HorizontalCylinder_validate, METH_O, "HorizontalCylinder_validate(HorizontalCylinder self) -> std::string"},
-	 { "delete_HorizontalCylinder", _wrap_delete_HorizontalCylinder, METH_O, "delete_HorizontalCylinder(HorizontalCylinder self)"},
-	 { "HorizontalCylinder_swigregister", HorizontalCylinder_swigregister, METH_O, NULL},
-	 { "HorizontalCylinder_swiginit", HorizontalCylinder_swiginit, METH_VARARGS, NULL},
-	 { "new_Icosahedron", _wrap_new_Icosahedron, METH_VARARGS, "\n"
-		"Icosahedron(double edge)\n"
-		"new_Icosahedron(vdouble1d_t P) -> Icosahedron\n"
+	 { "Profile2DCone_clone", _wrap_Profile2DCone_clone, METH_O, "Profile2DCone_clone(Profile2DCone self) -> Profile2DCone"},
+	 { "Profile2DCone_className", _wrap_Profile2DCone_className, METH_O, "Profile2DCone_className(Profile2DCone self) -> std::string"},
+	 { "Profile2DCone_standardizedFT2D", _wrap_Profile2DCone_standardizedFT2D, METH_VARARGS, "Profile2DCone_standardizedFT2D(Profile2DCone self, double qx, double qy) -> double"},
+	 { "Profile2DCone_decayFT2D", _wrap_Profile2DCone_decayFT2D, METH_VARARGS, "Profile2DCone_decayFT2D(Profile2DCone self, double qx, double qy) -> double"},
+	 { "delete_Profile2DCone", _wrap_delete_Profile2DCone, METH_O, "delete_Profile2DCone(Profile2DCone self)"},
+	 { "Profile2DCone_swigregister", Profile2DCone_swigregister, METH_O, NULL},
+	 { "Profile2DCone_swiginit", Profile2DCone_swiginit, METH_VARARGS, NULL},
+	 { "new_Profile2DVoigt", _wrap_new_Profile2DVoigt, METH_VARARGS, "\n"
+		"Profile2DVoigt(vdouble1d_t P)\n"
+		"new_Profile2DVoigt(double omega_x, double omega_y, double gamma, double eta) -> Profile2DVoigt\n"
 		""},
-	 { "Icosahedron_clone", _wrap_Icosahedron_clone, METH_O, "Icosahedron_clone(Icosahedron self) -> Icosahedron"},
-	 { "Icosahedron_className", _wrap_Icosahedron_className, METH_O, "Icosahedron_className(Icosahedron self) -> std::string"},
-	 { "Icosahedron_parDefs", _wrap_Icosahedron_parDefs, METH_O, "Icosahedron_parDefs(Icosahedron self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "Icosahedron_edge", _wrap_Icosahedron_edge, METH_O, "Icosahedron_edge(Icosahedron self) -> double"},
-	 { "delete_Icosahedron", _wrap_delete_Icosahedron, METH_O, "delete_Icosahedron(Icosahedron self)"},
-	 { "Icosahedron_swigregister", Icosahedron_swigregister, METH_O, NULL},
-	 { "Icosahedron_swiginit", Icosahedron_swiginit, METH_VARARGS, NULL},
-	 { "new_LongBoxGauss", _wrap_new_LongBoxGauss, METH_VARARGS, "\n"
-		"LongBoxGauss(double length, double width, double height)\n"
-		"new_LongBoxGauss(vdouble1d_t P) -> LongBoxGauss\n"
+	 { "Profile2DVoigt_clone", _wrap_Profile2DVoigt_clone, METH_O, "Profile2DVoigt_clone(Profile2DVoigt self) -> Profile2DVoigt"},
+	 { "Profile2DVoigt_className", _wrap_Profile2DVoigt_className, METH_O, "Profile2DVoigt_className(Profile2DVoigt self) -> std::string"},
+	 { "Profile2DVoigt_parDefs", _wrap_Profile2DVoigt_parDefs, METH_O, "Profile2DVoigt_parDefs(Profile2DVoigt self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "Profile2DVoigt_standardizedFT2D", _wrap_Profile2DVoigt_standardizedFT2D, METH_VARARGS, "Profile2DVoigt_standardizedFT2D(Profile2DVoigt self, double qx, double qy) -> double"},
+	 { "Profile2DVoigt_decayFT2D", _wrap_Profile2DVoigt_decayFT2D, METH_VARARGS, "Profile2DVoigt_decayFT2D(Profile2DVoigt self, double qx, double qy) -> double"},
+	 { "Profile2DVoigt_eta", _wrap_Profile2DVoigt_eta, METH_O, "Profile2DVoigt_eta(Profile2DVoigt self) -> double"},
+	 { "Profile2DVoigt_validate", _wrap_Profile2DVoigt_validate, METH_O, "Profile2DVoigt_validate(Profile2DVoigt self) -> std::string"},
+	 { "delete_Profile2DVoigt", _wrap_delete_Profile2DVoigt, METH_O, "delete_Profile2DVoigt(Profile2DVoigt self)"},
+	 { "Profile2DVoigt_swigregister", Profile2DVoigt_swigregister, METH_O, NULL},
+	 { "Profile2DVoigt_swiginit", Profile2DVoigt_swiginit, METH_VARARGS, NULL},
+	 { "delete_IPeakShape", _wrap_delete_IPeakShape, METH_O, "delete_IPeakShape(IPeakShape self)"},
+	 { "IPeakShape_clone", _wrap_IPeakShape_clone, METH_O, "IPeakShape_clone(IPeakShape self) -> IPeakShape"},
+	 { "IPeakShape_peakDistribution", _wrap_IPeakShape_peakDistribution, METH_VARARGS, "IPeakShape_peakDistribution(IPeakShape self, R3 q, R3 q_lattice_point) -> double"},
+	 { "IPeakShape_angularDisorder", _wrap_IPeakShape_angularDisorder, METH_O, "IPeakShape_angularDisorder(IPeakShape self) -> bool"},
+	 { "IPeakShape_swigregister", IPeakShape_swigregister, METH_O, NULL},
+	 { "new_IsotropicGaussPeakShape", _wrap_new_IsotropicGaussPeakShape, METH_VARARGS, "new_IsotropicGaussPeakShape(double max_intensity, double domainsize) -> IsotropicGaussPeakShape"},
+	 { "delete_IsotropicGaussPeakShape", _wrap_delete_IsotropicGaussPeakShape, METH_O, "delete_IsotropicGaussPeakShape(IsotropicGaussPeakShape self)"},
+	 { "IsotropicGaussPeakShape_clone", _wrap_IsotropicGaussPeakShape_clone, METH_O, "IsotropicGaussPeakShape_clone(IsotropicGaussPeakShape self) -> IsotropicGaussPeakShape"},
+	 { "IsotropicGaussPeakShape_className", _wrap_IsotropicGaussPeakShape_className, METH_O, "IsotropicGaussPeakShape_className(IsotropicGaussPeakShape self) -> std::string"},
+	 { "IsotropicGaussPeakShape_parDefs", _wrap_IsotropicGaussPeakShape_parDefs, METH_O, "IsotropicGaussPeakShape_parDefs(IsotropicGaussPeakShape self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "IsotropicGaussPeakShape_peakDistribution", _wrap_IsotropicGaussPeakShape_peakDistribution, METH_VARARGS, "IsotropicGaussPeakShape_peakDistribution(IsotropicGaussPeakShape self, R3 q, R3 q_lattice_point) -> double"},
+	 { "IsotropicGaussPeakShape_swigregister", IsotropicGaussPeakShape_swigregister, METH_O, NULL},
+	 { "IsotropicGaussPeakShape_swiginit", IsotropicGaussPeakShape_swiginit, METH_VARARGS, NULL},
+	 { "new_IsotropicLorentzPeakShape", _wrap_new_IsotropicLorentzPeakShape, METH_VARARGS, "new_IsotropicLorentzPeakShape(double max_intensity, double domainsize) -> IsotropicLorentzPeakShape"},
+	 { "delete_IsotropicLorentzPeakShape", _wrap_delete_IsotropicLorentzPeakShape, METH_O, "delete_IsotropicLorentzPeakShape(IsotropicLorentzPeakShape self)"},
+	 { "IsotropicLorentzPeakShape_clone", _wrap_IsotropicLorentzPeakShape_clone, METH_O, "IsotropicLorentzPeakShape_clone(IsotropicLorentzPeakShape self) -> IsotropicLorentzPeakShape"},
+	 { "IsotropicLorentzPeakShape_className", _wrap_IsotropicLorentzPeakShape_className, METH_O, "IsotropicLorentzPeakShape_className(IsotropicLorentzPeakShape self) -> std::string"},
+	 { "IsotropicLorentzPeakShape_parDefs", _wrap_IsotropicLorentzPeakShape_parDefs, METH_O, "IsotropicLorentzPeakShape_parDefs(IsotropicLorentzPeakShape self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "IsotropicLorentzPeakShape_peakDistribution", _wrap_IsotropicLorentzPeakShape_peakDistribution, METH_VARARGS, "IsotropicLorentzPeakShape_peakDistribution(IsotropicLorentzPeakShape self, R3 q, R3 q_lattice_point) -> double"},
+	 { "IsotropicLorentzPeakShape_swigregister", IsotropicLorentzPeakShape_swigregister, METH_O, NULL},
+	 { "IsotropicLorentzPeakShape_swiginit", IsotropicLorentzPeakShape_swiginit, METH_VARARGS, NULL},
+	 { "new_GaussFisherPeakShape", _wrap_new_GaussFisherPeakShape, METH_VARARGS, "new_GaussFisherPeakShape(double max_intensity, double radial_size, double kappa) -> GaussFisherPeakShape"},
+	 { "delete_GaussFisherPeakShape", _wrap_delete_GaussFisherPeakShape, METH_O, "delete_GaussFisherPeakShape(GaussFisherPeakShape self)"},
+	 { "GaussFisherPeakShape_clone", _wrap_GaussFisherPeakShape_clone, METH_O, "GaussFisherPeakShape_clone(GaussFisherPeakShape self) -> GaussFisherPeakShape"},
+	 { "GaussFisherPeakShape_className", _wrap_GaussFisherPeakShape_className, METH_O, "GaussFisherPeakShape_className(GaussFisherPeakShape self) -> std::string"},
+	 { "GaussFisherPeakShape_parDefs", _wrap_GaussFisherPeakShape_parDefs, METH_O, "GaussFisherPeakShape_parDefs(GaussFisherPeakShape self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "GaussFisherPeakShape_peakDistribution", _wrap_GaussFisherPeakShape_peakDistribution, METH_VARARGS, "GaussFisherPeakShape_peakDistribution(GaussFisherPeakShape self, R3 q, R3 q_lattice_point) -> double"},
+	 { "GaussFisherPeakShape_angularDisorder", _wrap_GaussFisherPeakShape_angularDisorder, METH_O, "GaussFisherPeakShape_angularDisorder(GaussFisherPeakShape self) -> bool"},
+	 { "GaussFisherPeakShape_swigregister", GaussFisherPeakShape_swigregister, METH_O, NULL},
+	 { "GaussFisherPeakShape_swiginit", GaussFisherPeakShape_swiginit, METH_VARARGS, NULL},
+	 { "new_LorentzFisherPeakShape", _wrap_new_LorentzFisherPeakShape, METH_VARARGS, "new_LorentzFisherPeakShape(double max_intensity, double radial_size, double kappa) -> LorentzFisherPeakShape"},
+	 { "delete_LorentzFisherPeakShape", _wrap_delete_LorentzFisherPeakShape, METH_O, "delete_LorentzFisherPeakShape(LorentzFisherPeakShape self)"},
+	 { "LorentzFisherPeakShape_clone", _wrap_LorentzFisherPeakShape_clone, METH_O, "LorentzFisherPeakShape_clone(LorentzFisherPeakShape self) -> LorentzFisherPeakShape"},
+	 { "LorentzFisherPeakShape_className", _wrap_LorentzFisherPeakShape_className, METH_O, "LorentzFisherPeakShape_className(LorentzFisherPeakShape self) -> std::string"},
+	 { "LorentzFisherPeakShape_parDefs", _wrap_LorentzFisherPeakShape_parDefs, METH_O, "LorentzFisherPeakShape_parDefs(LorentzFisherPeakShape self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "LorentzFisherPeakShape_peakDistribution", _wrap_LorentzFisherPeakShape_peakDistribution, METH_VARARGS, "LorentzFisherPeakShape_peakDistribution(LorentzFisherPeakShape self, R3 q, R3 q_lattice_point) -> double"},
+	 { "LorentzFisherPeakShape_angularDisorder", _wrap_LorentzFisherPeakShape_angularDisorder, METH_O, "LorentzFisherPeakShape_angularDisorder(LorentzFisherPeakShape self) -> bool"},
+	 { "LorentzFisherPeakShape_swigregister", LorentzFisherPeakShape_swigregister, METH_O, NULL},
+	 { "LorentzFisherPeakShape_swiginit", LorentzFisherPeakShape_swiginit, METH_VARARGS, NULL},
+	 { "new_MisesFisherGaussPeakShape", _wrap_new_MisesFisherGaussPeakShape, METH_VARARGS, "new_MisesFisherGaussPeakShape(double max_intensity, double radial_size, R3 zenith, double kappa_1, double kappa_2) -> MisesFisherGaussPeakShape"},
+	 { "delete_MisesFisherGaussPeakShape", _wrap_delete_MisesFisherGaussPeakShape, METH_O, "delete_MisesFisherGaussPeakShape(MisesFisherGaussPeakShape self)"},
+	 { "MisesFisherGaussPeakShape_clone", _wrap_MisesFisherGaussPeakShape_clone, METH_O, "MisesFisherGaussPeakShape_clone(MisesFisherGaussPeakShape self) -> MisesFisherGaussPeakShape"},
+	 { "MisesFisherGaussPeakShape_className", _wrap_MisesFisherGaussPeakShape_className, METH_O, "MisesFisherGaussPeakShape_className(MisesFisherGaussPeakShape self) -> std::string"},
+	 { "MisesFisherGaussPeakShape_parDefs", _wrap_MisesFisherGaussPeakShape_parDefs, METH_O, "MisesFisherGaussPeakShape_parDefs(MisesFisherGaussPeakShape self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "MisesFisherGaussPeakShape_peakDistribution", _wrap_MisesFisherGaussPeakShape_peakDistribution, METH_VARARGS, "MisesFisherGaussPeakShape_peakDistribution(MisesFisherGaussPeakShape self, R3 q, R3 q_lattice_point) -> double"},
+	 { "MisesFisherGaussPeakShape_angularDisorder", _wrap_MisesFisherGaussPeakShape_angularDisorder, METH_O, "MisesFisherGaussPeakShape_angularDisorder(MisesFisherGaussPeakShape self) -> bool"},
+	 { "MisesFisherGaussPeakShape_swigregister", MisesFisherGaussPeakShape_swigregister, METH_O, NULL},
+	 { "MisesFisherGaussPeakShape_swiginit", MisesFisherGaussPeakShape_swiginit, METH_VARARGS, NULL},
+	 { "new_MisesGaussPeakShape", _wrap_new_MisesGaussPeakShape, METH_VARARGS, "new_MisesGaussPeakShape(double max_intensity, double radial_size, R3 zenith, double kappa) -> MisesGaussPeakShape"},
+	 { "delete_MisesGaussPeakShape", _wrap_delete_MisesGaussPeakShape, METH_O, "delete_MisesGaussPeakShape(MisesGaussPeakShape self)"},
+	 { "MisesGaussPeakShape_clone", _wrap_MisesGaussPeakShape_clone, METH_O, "MisesGaussPeakShape_clone(MisesGaussPeakShape self) -> MisesGaussPeakShape"},
+	 { "MisesGaussPeakShape_className", _wrap_MisesGaussPeakShape_className, METH_O, "MisesGaussPeakShape_className(MisesGaussPeakShape self) -> std::string"},
+	 { "MisesGaussPeakShape_parDefs", _wrap_MisesGaussPeakShape_parDefs, METH_O, "MisesGaussPeakShape_parDefs(MisesGaussPeakShape self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "MisesGaussPeakShape_peakDistribution", _wrap_MisesGaussPeakShape_peakDistribution, METH_VARARGS, "MisesGaussPeakShape_peakDistribution(MisesGaussPeakShape self, R3 q, R3 q_lattice_point) -> double"},
+	 { "MisesGaussPeakShape_angularDisorder", _wrap_MisesGaussPeakShape_angularDisorder, METH_O, "MisesGaussPeakShape_angularDisorder(MisesGaussPeakShape self) -> bool"},
+	 { "MisesGaussPeakShape_swigregister", MisesGaussPeakShape_swigregister, METH_O, NULL},
+	 { "MisesGaussPeakShape_swiginit", MisesGaussPeakShape_swiginit, METH_VARARGS, NULL},
+	 { "IInterference_clone", _wrap_IInterference_clone, METH_O, "IInterference_clone(IInterference self) -> IInterference"},
+	 { "IInterference_structureFactor", _wrap_IInterference_structureFactor, METH_VARARGS, "IInterference_structureFactor(IInterference self, R3 q, double outer_iff=1.0) -> double"},
+	 { "IInterference_setPositionVariance", _wrap_IInterference_setPositionVariance, METH_VARARGS, "IInterference_setPositionVariance(IInterference self, double var)"},
+	 { "IInterference_positionVariance", _wrap_IInterference_positionVariance, METH_O, "IInterference_positionVariance(IInterference self) -> double"},
+	 { "IInterference_particleDensity", _wrap_IInterference_particleDensity, METH_O, "IInterference_particleDensity(IInterference self) -> double"},
+	 { "IInterference_supportsMultilayer", _wrap_IInterference_supportsMultilayer, METH_O, "IInterference_supportsMultilayer(IInterference self) -> bool"},
+	 { "IInterference_DWfactor", _wrap_IInterference_DWfactor, METH_VARARGS, "IInterference_DWfactor(IInterference self, R3 q) -> double"},
+	 { "delete_IInterference", _wrap_delete_IInterference, METH_O, "delete_IInterference(IInterference self)"},
+	 { "IInterference_swigregister", IInterference_swigregister, METH_O, NULL},
+	 { "new_Interference1DLattice", _wrap_new_Interference1DLattice, METH_VARARGS, "new_Interference1DLattice(double length, double xi) -> Interference1DLattice"},
+	 { "delete_Interference1DLattice", _wrap_delete_Interference1DLattice, METH_O, "delete_Interference1DLattice(Interference1DLattice self)"},
+	 { "Interference1DLattice_clone", _wrap_Interference1DLattice_clone, METH_O, "Interference1DLattice_clone(Interference1DLattice self) -> Interference1DLattice"},
+	 { "Interference1DLattice_className", _wrap_Interference1DLattice_className, METH_O, "Interference1DLattice_className(Interference1DLattice self) -> std::string"},
+	 { "Interference1DLattice_parDefs", _wrap_Interference1DLattice_parDefs, METH_O, "Interference1DLattice_parDefs(Interference1DLattice self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "Interference1DLattice_setDecayFunction", _wrap_Interference1DLattice_setDecayFunction, METH_VARARGS, "Interference1DLattice_setDecayFunction(Interference1DLattice self, IProfile1D decay)"},
+	 { "Interference1DLattice_length", _wrap_Interference1DLattice_length, METH_O, "Interference1DLattice_length(Interference1DLattice self) -> double"},
+	 { "Interference1DLattice_xi", _wrap_Interference1DLattice_xi, METH_O, "Interference1DLattice_xi(Interference1DLattice self) -> double"},
+	 { "Interference1DLattice_nodeChildren", _wrap_Interference1DLattice_nodeChildren, METH_O, "Interference1DLattice_nodeChildren(Interference1DLattice self) -> swig_dummy_type_const_inode_vector"},
+	 { "Interference1DLattice_validate", _wrap_Interference1DLattice_validate, METH_O, "Interference1DLattice_validate(Interference1DLattice self) -> std::string"},
+	 { "Interference1DLattice_swigregister", Interference1DLattice_swigregister, METH_O, NULL},
+	 { "Interference1DLattice_swiginit", Interference1DLattice_swiginit, METH_VARARGS, NULL},
+	 { "new_Interference2DLattice", _wrap_new_Interference2DLattice, METH_O, "new_Interference2DLattice(Lattice2D lattice) -> Interference2DLattice"},
+	 { "delete_Interference2DLattice", _wrap_delete_Interference2DLattice, METH_O, "delete_Interference2DLattice(Interference2DLattice self)"},
+	 { "Interference2DLattice_clone", _wrap_Interference2DLattice_clone, METH_O, "Interference2DLattice_clone(Interference2DLattice self) -> Interference2DLattice"},
+	 { "Interference2DLattice_className", _wrap_Interference2DLattice_className, METH_O, "Interference2DLattice_className(Interference2DLattice self) -> std::string"},
+	 { "Interference2DLattice_setDecayFunction", _wrap_Interference2DLattice_setDecayFunction, METH_VARARGS, "Interference2DLattice_setDecayFunction(Interference2DLattice self, IProfile2D decay)"},
+	 { "Interference2DLattice_setIntegrationOverXi", _wrap_Interference2DLattice_setIntegrationOverXi, METH_VARARGS, "Interference2DLattice_setIntegrationOverXi(Interference2DLattice self, bool integrate_xi)"},
+	 { "Interference2DLattice_integrationOverXi", _wrap_Interference2DLattice_integrationOverXi, METH_O, "Interference2DLattice_integrationOverXi(Interference2DLattice self) -> bool"},
+	 { "Interference2DLattice_lattice", _wrap_Interference2DLattice_lattice, METH_O, "Interference2DLattice_lattice(Interference2DLattice self) -> Lattice2D"},
+	 { "Interference2DLattice_particleDensity", _wrap_Interference2DLattice_particleDensity, METH_O, "Interference2DLattice_particleDensity(Interference2DLattice self) -> double"},
+	 { "Interference2DLattice_nodeChildren", _wrap_Interference2DLattice_nodeChildren, METH_O, "Interference2DLattice_nodeChildren(Interference2DLattice self) -> swig_dummy_type_const_inode_vector"},
+	 { "Interference2DLattice_swigregister", Interference2DLattice_swigregister, METH_O, NULL},
+	 { "Interference2DLattice_swiginit", Interference2DLattice_swiginit, METH_VARARGS, NULL},
+	 { "new_Interference2DParacrystal", _wrap_new_Interference2DParacrystal, METH_VARARGS, "new_Interference2DParacrystal(Lattice2D lattice, double damping_length, double domain_size_1, double domain_size_2) -> Interference2DParacrystal"},
+	 { "delete_Interference2DParacrystal", _wrap_delete_Interference2DParacrystal, METH_O, "delete_Interference2DParacrystal(Interference2DParacrystal self)"},
+	 { "Interference2DParacrystal_clone", _wrap_Interference2DParacrystal_clone, METH_O, "Interference2DParacrystal_clone(Interference2DParacrystal self) -> Interference2DParacrystal"},
+	 { "Interference2DParacrystal_className", _wrap_Interference2DParacrystal_className, METH_O, "Interference2DParacrystal_className(Interference2DParacrystal self) -> std::string"},
+	 { "Interference2DParacrystal_parDefs", _wrap_Interference2DParacrystal_parDefs, METH_O, "Interference2DParacrystal_parDefs(Interference2DParacrystal self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "Interference2DParacrystal_setDomainSizes", _wrap_Interference2DParacrystal_setDomainSizes, METH_VARARGS, "Interference2DParacrystal_setDomainSizes(Interference2DParacrystal self, double size_1, double size_2)"},
+	 { "Interference2DParacrystal_setProbabilityDistributions", _wrap_Interference2DParacrystal_setProbabilityDistributions, METH_VARARGS, "Interference2DParacrystal_setProbabilityDistributions(Interference2DParacrystal self, IProfile2D pdf_1, IProfile2D pdf_2)"},
+	 { "Interference2DParacrystal_setDampingLength", _wrap_Interference2DParacrystal_setDampingLength, METH_VARARGS, "Interference2DParacrystal_setDampingLength(Interference2DParacrystal self, double damping_length)"},
+	 { "Interference2DParacrystal_domainSizes", _wrap_Interference2DParacrystal_domainSizes, METH_O, "Interference2DParacrystal_domainSizes(Interference2DParacrystal self) -> vdouble1d_t"},
+	 { "Interference2DParacrystal_setIntegrationOverXi", _wrap_Interference2DParacrystal_setIntegrationOverXi, METH_VARARGS, "Interference2DParacrystal_setIntegrationOverXi(Interference2DParacrystal self, bool integrate_xi)"},
+	 { "Interference2DParacrystal_integrationOverXi", _wrap_Interference2DParacrystal_integrationOverXi, METH_O, "Interference2DParacrystal_integrationOverXi(Interference2DParacrystal self) -> bool"},
+	 { "Interference2DParacrystal_dampingLength", _wrap_Interference2DParacrystal_dampingLength, METH_O, "Interference2DParacrystal_dampingLength(Interference2DParacrystal self) -> double"},
+	 { "Interference2DParacrystal_lattice", _wrap_Interference2DParacrystal_lattice, METH_O, "Interference2DParacrystal_lattice(Interference2DParacrystal self) -> Lattice2D"},
+	 { "Interference2DParacrystal_particleDensity", _wrap_Interference2DParacrystal_particleDensity, METH_O, "Interference2DParacrystal_particleDensity(Interference2DParacrystal self) -> double"},
+	 { "Interference2DParacrystal_nodeChildren", _wrap_Interference2DParacrystal_nodeChildren, METH_O, "Interference2DParacrystal_nodeChildren(Interference2DParacrystal self) -> swig_dummy_type_const_inode_vector"},
+	 { "Interference2DParacrystal_pdf1", _wrap_Interference2DParacrystal_pdf1, METH_O, "Interference2DParacrystal_pdf1(Interference2DParacrystal self) -> IProfile2D"},
+	 { "Interference2DParacrystal_pdf2", _wrap_Interference2DParacrystal_pdf2, METH_O, "Interference2DParacrystal_pdf2(Interference2DParacrystal self) -> IProfile2D"},
+	 { "Interference2DParacrystal_validate", _wrap_Interference2DParacrystal_validate, METH_O, "Interference2DParacrystal_validate(Interference2DParacrystal self) -> std::string"},
+	 { "Interference2DParacrystal_swigregister", Interference2DParacrystal_swigregister, METH_O, NULL},
+	 { "Interference2DParacrystal_swiginit", Interference2DParacrystal_swiginit, METH_VARARGS, NULL},
+	 { "new_Interference2DSuperLattice", _wrap_new_Interference2DSuperLattice, METH_VARARGS, "\n"
+		"Interference2DSuperLattice(Lattice2D lattice, unsigned int size_1, unsigned int size_2)\n"
+		"new_Interference2DSuperLattice(double length_1, double length_2, double alpha, double xi, unsigned int size_1, unsigned int size_2) -> Interference2DSuperLattice\n"
 		""},
-	 { "LongBoxGauss_clone", _wrap_LongBoxGauss_clone, METH_O, "LongBoxGauss_clone(LongBoxGauss self) -> LongBoxGauss"},
-	 { "LongBoxGauss_className", _wrap_LongBoxGauss_className, METH_O, "LongBoxGauss_className(LongBoxGauss self) -> std::string"},
-	 { "LongBoxGauss_parDefs", _wrap_LongBoxGauss_parDefs, METH_O, "LongBoxGauss_parDefs(LongBoxGauss self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "LongBoxGauss_length", _wrap_LongBoxGauss_length, METH_O, "LongBoxGauss_length(LongBoxGauss self) -> double"},
-	 { "LongBoxGauss_height", _wrap_LongBoxGauss_height, METH_O, "LongBoxGauss_height(LongBoxGauss self) -> double"},
-	 { "LongBoxGauss_width", _wrap_LongBoxGauss_width, METH_O, "LongBoxGauss_width(LongBoxGauss self) -> double"},
-	 { "LongBoxGauss_radialExtension", _wrap_LongBoxGauss_radialExtension, METH_O, "LongBoxGauss_radialExtension(LongBoxGauss self) -> double"},
-	 { "LongBoxGauss_formfactor", _wrap_LongBoxGauss_formfactor, METH_VARARGS, "LongBoxGauss_formfactor(LongBoxGauss self, C3 q) -> complex_t"},
-	 { "LongBoxGauss_validate", _wrap_LongBoxGauss_validate, METH_O, "LongBoxGauss_validate(LongBoxGauss self) -> std::string"},
-	 { "delete_LongBoxGauss", _wrap_delete_LongBoxGauss, METH_O, "delete_LongBoxGauss(LongBoxGauss self)"},
-	 { "LongBoxGauss_swigregister", LongBoxGauss_swigregister, METH_O, NULL},
-	 { "LongBoxGauss_swiginit", LongBoxGauss_swiginit, METH_VARARGS, NULL},
-	 { "new_LongBoxLorentz", _wrap_new_LongBoxLorentz, METH_VARARGS, "\n"
-		"LongBoxLorentz(double length, double width, double height)\n"
-		"new_LongBoxLorentz(vdouble1d_t P) -> LongBoxLorentz\n"
+	 { "delete_Interference2DSuperLattice", _wrap_delete_Interference2DSuperLattice, METH_O, "delete_Interference2DSuperLattice(Interference2DSuperLattice self)"},
+	 { "Interference2DSuperLattice_clone", _wrap_Interference2DSuperLattice_clone, METH_O, "Interference2DSuperLattice_clone(Interference2DSuperLattice self) -> Interference2DSuperLattice"},
+	 { "Interference2DSuperLattice_className", _wrap_Interference2DSuperLattice_className, METH_O, "Interference2DSuperLattice_className(Interference2DSuperLattice self) -> std::string"},
+	 { "Interference2DSuperLattice_parDefs", _wrap_Interference2DSuperLattice_parDefs, METH_O, "Interference2DSuperLattice_parDefs(Interference2DSuperLattice self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "Interference2DSuperLattice_setSubstructureIFF", _wrap_Interference2DSuperLattice_setSubstructureIFF, METH_VARARGS, "Interference2DSuperLattice_setSubstructureIFF(Interference2DSuperLattice self, IInterference sub_iff)"},
+	 { "Interference2DSuperLattice_substructureIFF", _wrap_Interference2DSuperLattice_substructureIFF, METH_O, "Interference2DSuperLattice_substructureIFF(Interference2DSuperLattice self) -> IInterference"},
+	 { "Interference2DSuperLattice_structureFactor", _wrap_Interference2DSuperLattice_structureFactor, METH_VARARGS, "Interference2DSuperLattice_structureFactor(Interference2DSuperLattice self, R3 q, double outer_iff=1.0) -> double"},
+	 { "Interference2DSuperLattice_domainSize1", _wrap_Interference2DSuperLattice_domainSize1, METH_O, "Interference2DSuperLattice_domainSize1(Interference2DSuperLattice self) -> unsigned int"},
+	 { "Interference2DSuperLattice_domainSize2", _wrap_Interference2DSuperLattice_domainSize2, METH_O, "Interference2DSuperLattice_domainSize2(Interference2DSuperLattice self) -> unsigned int"},
+	 { "Interference2DSuperLattice_setIntegrationOverXi", _wrap_Interference2DSuperLattice_setIntegrationOverXi, METH_VARARGS, "Interference2DSuperLattice_setIntegrationOverXi(Interference2DSuperLattice self, bool integrate_xi)"},
+	 { "Interference2DSuperLattice_integrationOverXi", _wrap_Interference2DSuperLattice_integrationOverXi, METH_O, "Interference2DSuperLattice_integrationOverXi(Interference2DSuperLattice self) -> bool"},
+	 { "Interference2DSuperLattice_lattice", _wrap_Interference2DSuperLattice_lattice, METH_O, "Interference2DSuperLattice_lattice(Interference2DSuperLattice self) -> Lattice2D"},
+	 { "Interference2DSuperLattice_nodeChildren", _wrap_Interference2DSuperLattice_nodeChildren, METH_O, "Interference2DSuperLattice_nodeChildren(Interference2DSuperLattice self) -> swig_dummy_type_const_inode_vector"},
+	 { "Interference2DSuperLattice_swigregister", Interference2DSuperLattice_swigregister, METH_O, NULL},
+	 { "Interference2DSuperLattice_swiginit", Interference2DSuperLattice_swiginit, METH_VARARGS, NULL},
+	 { "new_InterferenceFinite2DLattice", _wrap_new_InterferenceFinite2DLattice, METH_VARARGS, "new_InterferenceFinite2DLattice(Lattice2D lattice, unsigned int N_1, unsigned int N_2) -> InterferenceFinite2DLattice"},
+	 { "delete_InterferenceFinite2DLattice", _wrap_delete_InterferenceFinite2DLattice, METH_O, "delete_InterferenceFinite2DLattice(InterferenceFinite2DLattice self)"},
+	 { "InterferenceFinite2DLattice_clone", _wrap_InterferenceFinite2DLattice_clone, METH_O, "InterferenceFinite2DLattice_clone(InterferenceFinite2DLattice self) -> InterferenceFinite2DLattice"},
+	 { "InterferenceFinite2DLattice_className", _wrap_InterferenceFinite2DLattice_className, METH_O, "InterferenceFinite2DLattice_className(InterferenceFinite2DLattice self) -> std::string"},
+	 { "InterferenceFinite2DLattice_numberUnitCells1", _wrap_InterferenceFinite2DLattice_numberUnitCells1, METH_O, "InterferenceFinite2DLattice_numberUnitCells1(InterferenceFinite2DLattice self) -> unsigned int"},
+	 { "InterferenceFinite2DLattice_numberUnitCells2", _wrap_InterferenceFinite2DLattice_numberUnitCells2, METH_O, "InterferenceFinite2DLattice_numberUnitCells2(InterferenceFinite2DLattice self) -> unsigned int"},
+	 { "InterferenceFinite2DLattice_setIntegrationOverXi", _wrap_InterferenceFinite2DLattice_setIntegrationOverXi, METH_VARARGS, "InterferenceFinite2DLattice_setIntegrationOverXi(InterferenceFinite2DLattice self, bool integrate_xi)"},
+	 { "InterferenceFinite2DLattice_integrationOverXi", _wrap_InterferenceFinite2DLattice_integrationOverXi, METH_O, "InterferenceFinite2DLattice_integrationOverXi(InterferenceFinite2DLattice self) -> bool"},
+	 { "InterferenceFinite2DLattice_lattice", _wrap_InterferenceFinite2DLattice_lattice, METH_O, "InterferenceFinite2DLattice_lattice(InterferenceFinite2DLattice self) -> Lattice2D"},
+	 { "InterferenceFinite2DLattice_particleDensity", _wrap_InterferenceFinite2DLattice_particleDensity, METH_O, "InterferenceFinite2DLattice_particleDensity(InterferenceFinite2DLattice self) -> double"},
+	 { "InterferenceFinite2DLattice_nodeChildren", _wrap_InterferenceFinite2DLattice_nodeChildren, METH_O, "InterferenceFinite2DLattice_nodeChildren(InterferenceFinite2DLattice self) -> swig_dummy_type_const_inode_vector"},
+	 { "InterferenceFinite2DLattice_swigregister", InterferenceFinite2DLattice_swigregister, METH_O, NULL},
+	 { "InterferenceFinite2DLattice_swiginit", InterferenceFinite2DLattice_swiginit, METH_VARARGS, NULL},
+	 { "new_InterferenceHardDisk", _wrap_new_InterferenceHardDisk, METH_VARARGS, "InterferenceHardDisk(double radius, double density, double position_var=0)"},
+	 { "delete_InterferenceHardDisk", _wrap_delete_InterferenceHardDisk, METH_O, "delete_InterferenceHardDisk(InterferenceHardDisk self)"},
+	 { "InterferenceHardDisk_parDefs", _wrap_InterferenceHardDisk_parDefs, METH_O, "InterferenceHardDisk_parDefs(InterferenceHardDisk self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "InterferenceHardDisk_clone", _wrap_InterferenceHardDisk_clone, METH_O, "InterferenceHardDisk_clone(InterferenceHardDisk self) -> InterferenceHardDisk"},
+	 { "InterferenceHardDisk_className", _wrap_InterferenceHardDisk_className, METH_O, "InterferenceHardDisk_className(InterferenceHardDisk self) -> std::string"},
+	 { "InterferenceHardDisk_particleDensity", _wrap_InterferenceHardDisk_particleDensity, METH_O, "InterferenceHardDisk_particleDensity(InterferenceHardDisk self) -> double"},
+	 { "InterferenceHardDisk_radius", _wrap_InterferenceHardDisk_radius, METH_O, "InterferenceHardDisk_radius(InterferenceHardDisk self) -> double"},
+	 { "InterferenceHardDisk_density", _wrap_InterferenceHardDisk_density, METH_O, "InterferenceHardDisk_density(InterferenceHardDisk self) -> double"},
+	 { "InterferenceHardDisk_validate", _wrap_InterferenceHardDisk_validate, METH_O, "InterferenceHardDisk_validate(InterferenceHardDisk self) -> std::string"},
+	 { "InterferenceHardDisk_swigregister", InterferenceHardDisk_swigregister, METH_O, NULL},
+	 { "InterferenceHardDisk_swiginit", InterferenceHardDisk_swiginit, METH_VARARGS, NULL},
+	 { "new_InterferenceNone", _wrap_new_InterferenceNone, METH_NOARGS, "new_InterferenceNone() -> InterferenceNone"},
+	 { "InterferenceNone_clone", _wrap_InterferenceNone_clone, METH_O, "InterferenceNone_clone(InterferenceNone self) -> InterferenceNone"},
+	 { "InterferenceNone_className", _wrap_InterferenceNone_className, METH_O, "InterferenceNone_className(InterferenceNone self) -> std::string"},
+	 { "delete_InterferenceNone", _wrap_delete_InterferenceNone, METH_O, "delete_InterferenceNone(InterferenceNone self)"},
+	 { "InterferenceNone_swigregister", InterferenceNone_swigregister, METH_O, NULL},
+	 { "InterferenceNone_swiginit", InterferenceNone_swiginit, METH_VARARGS, NULL},
+	 { "new_InterferenceRadialParacrystal", _wrap_new_InterferenceRadialParacrystal, METH_VARARGS, "new_InterferenceRadialParacrystal(double peak_distance, double damping_length) -> InterferenceRadialParacrystal"},
+	 { "InterferenceRadialParacrystal_clone", _wrap_InterferenceRadialParacrystal_clone, METH_O, "InterferenceRadialParacrystal_clone(InterferenceRadialParacrystal self) -> InterferenceRadialParacrystal"},
+	 { "InterferenceRadialParacrystal_className", _wrap_InterferenceRadialParacrystal_className, METH_O, "InterferenceRadialParacrystal_className(InterferenceRadialParacrystal self) -> std::string"},
+	 { "InterferenceRadialParacrystal_parDefs", _wrap_InterferenceRadialParacrystal_parDefs, METH_O, "InterferenceRadialParacrystal_parDefs(InterferenceRadialParacrystal self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "InterferenceRadialParacrystal_setKappa", _wrap_InterferenceRadialParacrystal_setKappa, METH_VARARGS, "InterferenceRadialParacrystal_setKappa(InterferenceRadialParacrystal self, double kappa)"},
+	 { "InterferenceRadialParacrystal_kappa", _wrap_InterferenceRadialParacrystal_kappa, METH_O, "InterferenceRadialParacrystal_kappa(InterferenceRadialParacrystal self) -> double"},
+	 { "InterferenceRadialParacrystal_setDomainSize", _wrap_InterferenceRadialParacrystal_setDomainSize, METH_VARARGS, "InterferenceRadialParacrystal_setDomainSize(InterferenceRadialParacrystal self, double size)"},
+	 { "InterferenceRadialParacrystal_domainSize", _wrap_InterferenceRadialParacrystal_domainSize, METH_O, "InterferenceRadialParacrystal_domainSize(InterferenceRadialParacrystal self) -> double"},
+	 { "InterferenceRadialParacrystal_FTPDF", _wrap_InterferenceRadialParacrystal_FTPDF, METH_VARARGS, "InterferenceRadialParacrystal_FTPDF(InterferenceRadialParacrystal self, double qpar) -> complex_t"},
+	 { "InterferenceRadialParacrystal_setProbabilityDistribution", _wrap_InterferenceRadialParacrystal_setProbabilityDistribution, METH_VARARGS, "InterferenceRadialParacrystal_setProbabilityDistribution(InterferenceRadialParacrystal self, IProfile1D pdf)"},
+	 { "InterferenceRadialParacrystal_peakDistance", _wrap_InterferenceRadialParacrystal_peakDistance, METH_O, "InterferenceRadialParacrystal_peakDistance(InterferenceRadialParacrystal self) -> double"},
+	 { "InterferenceRadialParacrystal_dampingLength", _wrap_InterferenceRadialParacrystal_dampingLength, METH_O, "InterferenceRadialParacrystal_dampingLength(InterferenceRadialParacrystal self) -> double"},
+	 { "InterferenceRadialParacrystal_nodeChildren", _wrap_InterferenceRadialParacrystal_nodeChildren, METH_O, "InterferenceRadialParacrystal_nodeChildren(InterferenceRadialParacrystal self) -> swig_dummy_type_const_inode_vector"},
+	 { "InterferenceRadialParacrystal_randomSample", _wrap_InterferenceRadialParacrystal_randomSample, METH_O, "InterferenceRadialParacrystal_randomSample(InterferenceRadialParacrystal self) -> double"},
+	 { "InterferenceRadialParacrystal_validate", _wrap_InterferenceRadialParacrystal_validate, METH_O, "InterferenceRadialParacrystal_validate(InterferenceRadialParacrystal self) -> std::string"},
+	 { "delete_InterferenceRadialParacrystal", _wrap_delete_InterferenceRadialParacrystal, METH_O, "delete_InterferenceRadialParacrystal(InterferenceRadialParacrystal self)"},
+	 { "InterferenceRadialParacrystal_swigregister", InterferenceRadialParacrystal_swigregister, METH_O, NULL},
+	 { "InterferenceRadialParacrystal_swiginit", InterferenceRadialParacrystal_swiginit, METH_VARARGS, NULL},
+	 { "new_ParticleLayout", _wrap_new_ParticleLayout, METH_VARARGS, "\n"
+		"ParticleLayout()\n"
+		"ParticleLayout(IParticle particle, double abundance=-1.0)\n"
 		""},
-	 { "LongBoxLorentz_clone", _wrap_LongBoxLorentz_clone, METH_O, "LongBoxLorentz_clone(LongBoxLorentz self) -> LongBoxLorentz"},
-	 { "LongBoxLorentz_className", _wrap_LongBoxLorentz_className, METH_O, "LongBoxLorentz_className(LongBoxLorentz self) -> std::string"},
-	 { "LongBoxLorentz_parDefs", _wrap_LongBoxLorentz_parDefs, METH_O, "LongBoxLorentz_parDefs(LongBoxLorentz self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "LongBoxLorentz_length", _wrap_LongBoxLorentz_length, METH_O, "LongBoxLorentz_length(LongBoxLorentz self) -> double"},
-	 { "LongBoxLorentz_height", _wrap_LongBoxLorentz_height, METH_O, "LongBoxLorentz_height(LongBoxLorentz self) -> double"},
-	 { "LongBoxLorentz_width", _wrap_LongBoxLorentz_width, METH_O, "LongBoxLorentz_width(LongBoxLorentz self) -> double"},
-	 { "LongBoxLorentz_radialExtension", _wrap_LongBoxLorentz_radialExtension, METH_O, "LongBoxLorentz_radialExtension(LongBoxLorentz self) -> double"},
-	 { "LongBoxLorentz_formfactor", _wrap_LongBoxLorentz_formfactor, METH_VARARGS, "LongBoxLorentz_formfactor(LongBoxLorentz self, C3 q) -> complex_t"},
-	 { "LongBoxLorentz_validate", _wrap_LongBoxLorentz_validate, METH_O, "LongBoxLorentz_validate(LongBoxLorentz self) -> std::string"},
-	 { "delete_LongBoxLorentz", _wrap_delete_LongBoxLorentz, METH_O, "delete_LongBoxLorentz(LongBoxLorentz self)"},
-	 { "LongBoxLorentz_swigregister", LongBoxLorentz_swigregister, METH_O, NULL},
-	 { "LongBoxLorentz_swiginit", LongBoxLorentz_swiginit, METH_VARARGS, NULL},
-	 { "new_PlatonicOctahedron", _wrap_new_PlatonicOctahedron, METH_VARARGS, "\n"
-		"PlatonicOctahedron(double edge)\n"
-		"new_PlatonicOctahedron(vdouble1d_t P) -> PlatonicOctahedron\n"
+	 { "delete_ParticleLayout", _wrap_delete_ParticleLayout, METH_O, "delete_ParticleLayout(ParticleLayout self)"},
+	 { "ParticleLayout_clone", _wrap_ParticleLayout_clone, METH_O, "ParticleLayout_clone(ParticleLayout self) -> ParticleLayout"},
+	 { "ParticleLayout_className", _wrap_ParticleLayout_className, METH_O, "ParticleLayout_className(ParticleLayout self) -> std::string"},
+	 { "ParticleLayout_parDefs", _wrap_ParticleLayout_parDefs, METH_O, "ParticleLayout_parDefs(ParticleLayout self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "ParticleLayout_nodeChildren", _wrap_ParticleLayout_nodeChildren, METH_O, "ParticleLayout_nodeChildren(ParticleLayout self) -> swig_dummy_type_const_inode_vector"},
+	 { "ParticleLayout_addParticle", _wrap_ParticleLayout_addParticle, METH_VARARGS, "ParticleLayout_addParticle(ParticleLayout self, IParticle particle, double abundance=-1.0)"},
+	 { "ParticleLayout_particles", _wrap_ParticleLayout_particles, METH_O, "ParticleLayout_particles(ParticleLayout self) -> std::vector< IParticle const *,std::allocator< IParticle const * > >"},
+	 { "ParticleLayout_interferenceFunction", _wrap_ParticleLayout_interferenceFunction, METH_O, "ParticleLayout_interferenceFunction(ParticleLayout self) -> IInterference"},
+	 { "ParticleLayout_setInterference", _wrap_ParticleLayout_setInterference, METH_VARARGS, "ParticleLayout_setInterference(ParticleLayout self, IInterference interparticle)"},
+	 { "ParticleLayout_totalParticleSurfaceDensity", _wrap_ParticleLayout_totalParticleSurfaceDensity, METH_O, "ParticleLayout_totalParticleSurfaceDensity(ParticleLayout self) -> double"},
+	 { "ParticleLayout_setTotalParticleSurfaceDensity", _wrap_ParticleLayout_setTotalParticleSurfaceDensity, METH_VARARGS, "ParticleLayout_setTotalParticleSurfaceDensity(ParticleLayout self, double particle_density)"},
+	 { "ParticleLayout_totalAbundance", _wrap_ParticleLayout_totalAbundance, METH_O, "ParticleLayout_totalAbundance(ParticleLayout self) -> double"},
+	 { "ParticleLayout_validate", _wrap_ParticleLayout_validate, METH_O, "ParticleLayout_validate(ParticleLayout self) -> std::string"},
+	 { "ParticleLayout_swigregister", ParticleLayout_swigregister, METH_O, NULL},
+	 { "ParticleLayout_swiginit", ParticleLayout_swiginit, METH_VARARGS, NULL},
+	 { "new_LayerRoughness", _wrap_new_LayerRoughness, METH_VARARGS, "\n"
+		"LayerRoughness(double sigma, double hurstParameter=0, double lateralCorrLength=0)\n"
+		"new_LayerRoughness() -> LayerRoughness\n"
 		""},
-	 { "PlatonicOctahedron_clone", _wrap_PlatonicOctahedron_clone, METH_O, "PlatonicOctahedron_clone(PlatonicOctahedron self) -> PlatonicOctahedron"},
-	 { "PlatonicOctahedron_className", _wrap_PlatonicOctahedron_className, METH_O, "PlatonicOctahedron_className(PlatonicOctahedron self) -> std::string"},
-	 { "PlatonicOctahedron_parDefs", _wrap_PlatonicOctahedron_parDefs, METH_O, "PlatonicOctahedron_parDefs(PlatonicOctahedron self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "PlatonicOctahedron_edge", _wrap_PlatonicOctahedron_edge, METH_O, "PlatonicOctahedron_edge(PlatonicOctahedron self) -> double"},
-	 { "PlatonicOctahedron_height", _wrap_PlatonicOctahedron_height, METH_O, "PlatonicOctahedron_height(PlatonicOctahedron self) -> double"},
-	 { "delete_PlatonicOctahedron", _wrap_delete_PlatonicOctahedron, METH_O, "delete_PlatonicOctahedron(PlatonicOctahedron self)"},
-	 { "PlatonicOctahedron_swigregister", PlatonicOctahedron_swigregister, METH_O, NULL},
-	 { "PlatonicOctahedron_swiginit", PlatonicOctahedron_swiginit, METH_VARARGS, NULL},
-	 { "new_PlatonicTetrahedron", _wrap_new_PlatonicTetrahedron, METH_VARARGS, "\n"
-		"PlatonicTetrahedron(double edge)\n"
-		"new_PlatonicTetrahedron(vdouble1d_t P) -> PlatonicTetrahedron\n"
+	 { "LayerRoughness_clone", _wrap_LayerRoughness_clone, METH_O, "LayerRoughness_clone(LayerRoughness self) -> LayerRoughness"},
+	 { "LayerRoughness_className", _wrap_LayerRoughness_className, METH_O, "LayerRoughness_className(LayerRoughness self) -> std::string"},
+	 { "LayerRoughness_parDefs", _wrap_LayerRoughness_parDefs, METH_O, "LayerRoughness_parDefs(LayerRoughness self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "LayerRoughness_spectralFunction", _wrap_LayerRoughness_spectralFunction, METH_VARARGS, "LayerRoughness_spectralFunction(LayerRoughness self, R3 kvec) -> double"},
+	 { "LayerRoughness_corrFunction", _wrap_LayerRoughness_corrFunction, METH_VARARGS, "LayerRoughness_corrFunction(LayerRoughness self, R3 k) -> double"},
+	 { "LayerRoughness_setSigma", _wrap_LayerRoughness_setSigma, METH_VARARGS, "LayerRoughness_setSigma(LayerRoughness self, double sigma)"},
+	 { "LayerRoughness_sigma", _wrap_LayerRoughness_sigma, METH_O, "LayerRoughness_sigma(LayerRoughness self) -> double"},
+	 { "LayerRoughness_setHurstParameter", _wrap_LayerRoughness_setHurstParameter, METH_VARARGS, "LayerRoughness_setHurstParameter(LayerRoughness self, double hurstParameter)"},
+	 { "LayerRoughness_hurst", _wrap_LayerRoughness_hurst, METH_O, "LayerRoughness_hurst(LayerRoughness self) -> double"},
+	 { "LayerRoughness_setLatteralCorrLength", _wrap_LayerRoughness_setLatteralCorrLength, METH_VARARGS, "LayerRoughness_setLatteralCorrLength(LayerRoughness self, double lateralCorrLength)"},
+	 { "LayerRoughness_lateralCorrLength", _wrap_LayerRoughness_lateralCorrLength, METH_O, "LayerRoughness_lateralCorrLength(LayerRoughness self) -> double"},
+	 { "LayerRoughness_validate", _wrap_LayerRoughness_validate, METH_O, "LayerRoughness_validate(LayerRoughness self) -> std::string"},
+	 { "delete_LayerRoughness", _wrap_delete_LayerRoughness, METH_O, "delete_LayerRoughness(LayerRoughness self)"},
+	 { "LayerRoughness_swigregister", LayerRoughness_swigregister, METH_O, NULL},
+	 { "LayerRoughness_swiginit", LayerRoughness_swiginit, METH_VARARGS, NULL},
+	 { "new_Layer", _wrap_new_Layer, METH_VARARGS, "Layer(Material material, double thickness=0)"},
+	 { "delete_Layer", _wrap_delete_Layer, METH_O, "delete_Layer(Layer self)"},
+	 { "Layer_clone", _wrap_Layer_clone, METH_O, "Layer_clone(Layer self) -> Layer"},
+	 { "Layer_className", _wrap_Layer_className, METH_O, "Layer_className(Layer self) -> std::string"},
+	 { "Layer_parDefs", _wrap_Layer_parDefs, METH_O, "Layer_parDefs(Layer self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "Layer_nodeChildren", _wrap_Layer_nodeChildren, METH_O, "Layer_nodeChildren(Layer self) -> swig_dummy_type_const_inode_vector"},
+	 { "Layer_material", _wrap_Layer_material, METH_O, "Layer_material(Layer self) -> Material"},
+	 { "Layer_thickness", _wrap_Layer_thickness, METH_O, "Layer_thickness(Layer self) -> double"},
+	 { "Layer_addLayout", _wrap_Layer_addLayout, METH_VARARGS, "Layer_addLayout(Layer self, ParticleLayout layout)"},
+	 { "Layer_numberOfLayouts", _wrap_Layer_numberOfLayouts, METH_O, "Layer_numberOfLayouts(Layer self) -> size_t"},
+	 { "Layer_layouts", _wrap_Layer_layouts, METH_O, "Layer_layouts(Layer self) -> std::vector< ParticleLayout const *,std::allocator< ParticleLayout const * > >"},
+	 { "Layer_setNumberOfSlices", _wrap_Layer_setNumberOfSlices, METH_VARARGS, "Layer_setNumberOfSlices(Layer self, unsigned int n_slices)"},
+	 { "Layer_numberOfSlices", _wrap_Layer_numberOfSlices, METH_O, "Layer_numberOfSlices(Layer self) -> unsigned int"},
+	 { "Layer_validate", _wrap_Layer_validate, METH_O, "Layer_validate(Layer self) -> std::string"},
+	 { "Layer_swigregister", Layer_swigregister, METH_O, NULL},
+	 { "Layer_swiginit", Layer_swiginit, METH_VARARGS, NULL},
+	 { "new_MultiLayer", _wrap_new_MultiLayer, METH_VARARGS, "MultiLayer(std::string name=\"Unnamed\")"},
+	 { "delete_MultiLayer", _wrap_delete_MultiLayer, METH_O, "delete_MultiLayer(MultiLayer self)"},
+	 { "MultiLayer_clone", _wrap_MultiLayer_clone, METH_O, "MultiLayer_clone(MultiLayer self) -> MultiLayer"},
+	 { "MultiLayer_className", _wrap_MultiLayer_className, METH_O, "MultiLayer_className(MultiLayer self) -> std::string"},
+	 { "MultiLayer_numberOfLayers", _wrap_MultiLayer_numberOfLayers, METH_O, "MultiLayer_numberOfLayers(MultiLayer self) -> size_t"},
+	 { "MultiLayer_addLayer", _wrap_MultiLayer_addLayer, METH_VARARGS, "MultiLayer_addLayer(MultiLayer self, Layer layer)"},
+	 { "MultiLayer_addLayerWithTopRoughness", _wrap_MultiLayer_addLayerWithTopRoughness, METH_VARARGS, "MultiLayer_addLayerWithTopRoughness(MultiLayer self, Layer layer, LayerRoughness roughness)"},
+	 { "MultiLayer_setRoughnessModel", _wrap_MultiLayer_setRoughnessModel, METH_VARARGS, "MultiLayer_setRoughnessModel(MultiLayer self, RoughnessModel roughnessModel)"},
+	 { "MultiLayer_setCrossCorrLength", _wrap_MultiLayer_setCrossCorrLength, METH_VARARGS, "MultiLayer_setCrossCorrLength(MultiLayer self, double crossCorrLength)"},
+	 { "MultiLayer_setExternalField", _wrap_MultiLayer_setExternalField, METH_VARARGS, "MultiLayer_setExternalField(MultiLayer self, R3 ext_field)"},
+	 { "MultiLayer_layer", _wrap_MultiLayer_layer, METH_VARARGS, "MultiLayer_layer(MultiLayer self, size_t i_layer) -> Layer"},
+	 { "MultiLayer_layerInterface", _wrap_MultiLayer_layerInterface, METH_VARARGS, "MultiLayer_layerInterface(MultiLayer self, size_t i_interface) -> LayerInterface const *"},
+	 { "MultiLayer_roughnessModel", _wrap_MultiLayer_roughnessModel, METH_O, "MultiLayer_roughnessModel(MultiLayer self) -> RoughnessModel"},
+	 { "MultiLayer_crossCorrLength", _wrap_MultiLayer_crossCorrLength, METH_O, "MultiLayer_crossCorrLength(MultiLayer self) -> double"},
+	 { "MultiLayer_externalField", _wrap_MultiLayer_externalField, METH_O, "MultiLayer_externalField(MultiLayer self) -> R3"},
+	 { "MultiLayer_nodeChildren", _wrap_MultiLayer_nodeChildren, METH_O, "MultiLayer_nodeChildren(MultiLayer self) -> swig_dummy_type_const_inode_vector"},
+	 { "MultiLayer_setSampleName", _wrap_MultiLayer_setSampleName, METH_VARARGS, "MultiLayer_setSampleName(MultiLayer self, std::string const & name)"},
+	 { "MultiLayer_sampleName", _wrap_MultiLayer_sampleName, METH_O, "MultiLayer_sampleName(MultiLayer self) -> std::string const &"},
+	 { "MultiLayer_validate", _wrap_MultiLayer_validate, METH_O, "MultiLayer_validate(MultiLayer self) -> std::string"},
+	 { "MultiLayer_hig", _wrap_MultiLayer_hig, METH_VARARGS, "MultiLayer_hig(MultiLayer self, size_t i) -> double"},
+	 { "MultiLayer_low", _wrap_MultiLayer_low, METH_VARARGS, "MultiLayer_low(MultiLayer self, size_t i) -> double"},
+	 { "MultiLayer_swigregister", MultiLayer_swigregister, METH_O, NULL},
+	 { "MultiLayer_swiginit", MultiLayer_swiginit, METH_VARARGS, NULL},
+	 { "delete_RoughnessModel", _wrap_delete_RoughnessModel, METH_O, "delete_RoughnessModel(RoughnessModel self)"},
+	 { "RoughnessModel_swigregister", RoughnessModel_swigregister, METH_O, NULL},
+	 { "delete_IFormFactorPolyhedron", _wrap_delete_IFormFactorPolyhedron, METH_O, "delete_IFormFactorPolyhedron(IFormFactorPolyhedron self)"},
+	 { "IFormFactorPolyhedron_volume", _wrap_IFormFactorPolyhedron_volume, METH_O, "IFormFactorPolyhedron_volume(IFormFactorPolyhedron self) -> double"},
+	 { "IFormFactorPolyhedron_radialExtension", _wrap_IFormFactorPolyhedron_radialExtension, METH_O, "IFormFactorPolyhedron_radialExtension(IFormFactorPolyhedron self) -> double"},
+	 { "IFormFactorPolyhedron_formfactor", _wrap_IFormFactorPolyhedron_formfactor, METH_VARARGS, "IFormFactorPolyhedron_formfactor(IFormFactorPolyhedron self, C3 q) -> complex_t"},
+	 { "IFormFactorPolyhedron_swigregister", IFormFactorPolyhedron_swigregister, METH_O, NULL},
+	 { "delete_IFormFactorPrism", _wrap_delete_IFormFactorPrism, METH_O, "delete_IFormFactorPrism(IFormFactorPrism self)"},
+	 { "IFormFactorPrism_height", _wrap_IFormFactorPrism_height, METH_O, "IFormFactorPrism_height(IFormFactorPrism self) -> double"},
+	 { "IFormFactorPrism_swigregister", IFormFactorPrism_swigregister, METH_O, NULL},
+	 { "IProfileRipple_length", _wrap_IProfileRipple_length, METH_O, "IProfileRipple_length(IProfileRipple self) -> double"},
+	 { "IProfileRipple_height", _wrap_IProfileRipple_height, METH_O, "IProfileRipple_height(IProfileRipple self) -> double"},
+	 { "IProfileRipple_width", _wrap_IProfileRipple_width, METH_O, "IProfileRipple_width(IProfileRipple self) -> double"},
+	 { "IProfileRipple_radialExtension", _wrap_IProfileRipple_radialExtension, METH_O, "IProfileRipple_radialExtension(IProfileRipple self) -> double"},
+	 { "IProfileRipple_formfactor", _wrap_IProfileRipple_formfactor, METH_VARARGS, "IProfileRipple_formfactor(IProfileRipple self, C3 q) -> complex_t"},
+	 { "IProfileRipple_validate", _wrap_IProfileRipple_validate, METH_O, "IProfileRipple_validate(IProfileRipple self) -> std::string"},
+	 { "delete_IProfileRipple", _wrap_delete_IProfileRipple, METH_O, "delete_IProfileRipple(IProfileRipple self)"},
+	 { "IProfileRipple_swigregister", IProfileRipple_swigregister, METH_O, NULL},
+	 { "delete_IProfileRectangularRipple", _wrap_delete_IProfileRectangularRipple, METH_O, "delete_IProfileRectangularRipple(IProfileRectangularRipple self)"},
+	 { "IProfileRectangularRipple_swigregister", IProfileRectangularRipple_swigregister, METH_O, NULL},
+	 { "delete_ICosineRipple", _wrap_delete_ICosineRipple, METH_O, "delete_ICosineRipple(ICosineRipple self)"},
+	 { "ICosineRipple_swigregister", ICosineRipple_swigregister, METH_O, NULL},
+	 { "ISawtoothRipple_asymmetry", _wrap_ISawtoothRipple_asymmetry, METH_O, "ISawtoothRipple_asymmetry(ISawtoothRipple self) -> double"},
+	 { "delete_ISawtoothRipple", _wrap_delete_ISawtoothRipple, METH_O, "delete_ISawtoothRipple(ISawtoothRipple self)"},
+	 { "ISawtoothRipple_swigregister", ISawtoothRipple_swigregister, METH_O, NULL},
+	 { "new_Box", _wrap_new_Box, METH_VARARGS, "\n"
+		"Box(double length, double width, double height)\n"
+		"new_Box(vdouble1d_t P) -> Box\n"
 		""},
-	 { "PlatonicTetrahedron_clone", _wrap_PlatonicTetrahedron_clone, METH_O, "PlatonicTetrahedron_clone(PlatonicTetrahedron self) -> PlatonicTetrahedron"},
-	 { "PlatonicTetrahedron_className", _wrap_PlatonicTetrahedron_className, METH_O, "PlatonicTetrahedron_className(PlatonicTetrahedron self) -> std::string"},
-	 { "PlatonicTetrahedron_parDefs", _wrap_PlatonicTetrahedron_parDefs, METH_O, "PlatonicTetrahedron_parDefs(PlatonicTetrahedron self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "PlatonicTetrahedron_edge", _wrap_PlatonicTetrahedron_edge, METH_O, "PlatonicTetrahedron_edge(PlatonicTetrahedron self) -> double"},
-	 { "PlatonicTetrahedron_height", _wrap_PlatonicTetrahedron_height, METH_O, "PlatonicTetrahedron_height(PlatonicTetrahedron self) -> double"},
-	 { "delete_PlatonicTetrahedron", _wrap_delete_PlatonicTetrahedron, METH_O, "delete_PlatonicTetrahedron(PlatonicTetrahedron self)"},
-	 { "PlatonicTetrahedron_swigregister", PlatonicTetrahedron_swigregister, METH_O, NULL},
-	 { "PlatonicTetrahedron_swiginit", PlatonicTetrahedron_swiginit, METH_VARARGS, NULL},
+	 { "Box_clone", _wrap_Box_clone, METH_O, "Box_clone(Box self) -> Box"},
+	 { "Box_className", _wrap_Box_className, METH_O, "Box_className(Box self) -> std::string"},
+	 { "Box_parDefs", _wrap_Box_parDefs, METH_O, "Box_parDefs(Box self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "Box_length", _wrap_Box_length, METH_O, "Box_length(Box self) -> double"},
+	 { "Box_width", _wrap_Box_width, METH_O, "Box_width(Box self) -> double"},
+	 { "Box_height", _wrap_Box_height, METH_O, "Box_height(Box self) -> double"},
+	 { "Box_volume", _wrap_Box_volume, METH_O, "Box_volume(Box self) -> double"},
+	 { "Box_radialExtension", _wrap_Box_radialExtension, METH_O, "Box_radialExtension(Box self) -> double"},
+	 { "Box_formfactor", _wrap_Box_formfactor, METH_VARARGS, "Box_formfactor(Box self, C3 q) -> complex_t"},
+	 { "Box_validate", _wrap_Box_validate, METH_O, "Box_validate(Box self) -> std::string"},
+	 { "delete_Box", _wrap_delete_Box, METH_O, "delete_Box(Box self)"},
+	 { "Box_swigregister", Box_swigregister, METH_O, NULL},
+	 { "Box_swiginit", Box_swiginit, METH_VARARGS, NULL},
 	 { "new_Prism3", _wrap_new_Prism3, METH_VARARGS, "\n"
 		"Prism3(double base_edge, double height)\n"
 		"new_Prism3(vdouble1d_t P) -> Prism3\n"
@@ -62435,6 +62169,52 @@ static PyMethodDef SwigMethods[] = {
 	 { "delete_Prism6", _wrap_delete_Prism6, METH_O, "delete_Prism6(Prism6 self)"},
 	 { "Prism6_swigregister", Prism6_swigregister, METH_O, NULL},
 	 { "Prism6_swiginit", Prism6_swiginit, METH_VARARGS, NULL},
+	 { "new_PlatonicTetrahedron", _wrap_new_PlatonicTetrahedron, METH_VARARGS, "\n"
+		"PlatonicTetrahedron(double edge)\n"
+		"new_PlatonicTetrahedron(vdouble1d_t P) -> PlatonicTetrahedron\n"
+		""},
+	 { "PlatonicTetrahedron_clone", _wrap_PlatonicTetrahedron_clone, METH_O, "PlatonicTetrahedron_clone(PlatonicTetrahedron self) -> PlatonicTetrahedron"},
+	 { "PlatonicTetrahedron_className", _wrap_PlatonicTetrahedron_className, METH_O, "PlatonicTetrahedron_className(PlatonicTetrahedron self) -> std::string"},
+	 { "PlatonicTetrahedron_parDefs", _wrap_PlatonicTetrahedron_parDefs, METH_O, "PlatonicTetrahedron_parDefs(PlatonicTetrahedron self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "PlatonicTetrahedron_edge", _wrap_PlatonicTetrahedron_edge, METH_O, "PlatonicTetrahedron_edge(PlatonicTetrahedron self) -> double"},
+	 { "PlatonicTetrahedron_height", _wrap_PlatonicTetrahedron_height, METH_O, "PlatonicTetrahedron_height(PlatonicTetrahedron self) -> double"},
+	 { "delete_PlatonicTetrahedron", _wrap_delete_PlatonicTetrahedron, METH_O, "delete_PlatonicTetrahedron(PlatonicTetrahedron self)"},
+	 { "PlatonicTetrahedron_swigregister", PlatonicTetrahedron_swigregister, METH_O, NULL},
+	 { "PlatonicTetrahedron_swiginit", PlatonicTetrahedron_swiginit, METH_VARARGS, NULL},
+	 { "new_PlatonicOctahedron", _wrap_new_PlatonicOctahedron, METH_VARARGS, "\n"
+		"PlatonicOctahedron(double edge)\n"
+		"new_PlatonicOctahedron(vdouble1d_t P) -> PlatonicOctahedron\n"
+		""},
+	 { "PlatonicOctahedron_clone", _wrap_PlatonicOctahedron_clone, METH_O, "PlatonicOctahedron_clone(PlatonicOctahedron self) -> PlatonicOctahedron"},
+	 { "PlatonicOctahedron_className", _wrap_PlatonicOctahedron_className, METH_O, "PlatonicOctahedron_className(PlatonicOctahedron self) -> std::string"},
+	 { "PlatonicOctahedron_parDefs", _wrap_PlatonicOctahedron_parDefs, METH_O, "PlatonicOctahedron_parDefs(PlatonicOctahedron self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "PlatonicOctahedron_edge", _wrap_PlatonicOctahedron_edge, METH_O, "PlatonicOctahedron_edge(PlatonicOctahedron self) -> double"},
+	 { "PlatonicOctahedron_height", _wrap_PlatonicOctahedron_height, METH_O, "PlatonicOctahedron_height(PlatonicOctahedron self) -> double"},
+	 { "delete_PlatonicOctahedron", _wrap_delete_PlatonicOctahedron, METH_O, "delete_PlatonicOctahedron(PlatonicOctahedron self)"},
+	 { "PlatonicOctahedron_swigregister", PlatonicOctahedron_swigregister, METH_O, NULL},
+	 { "PlatonicOctahedron_swiginit", PlatonicOctahedron_swiginit, METH_VARARGS, NULL},
+	 { "new_Dodecahedron", _wrap_new_Dodecahedron, METH_VARARGS, "\n"
+		"Dodecahedron(double edge)\n"
+		"new_Dodecahedron(vdouble1d_t P) -> Dodecahedron\n"
+		""},
+	 { "Dodecahedron_clone", _wrap_Dodecahedron_clone, METH_O, "Dodecahedron_clone(Dodecahedron self) -> Dodecahedron"},
+	 { "Dodecahedron_className", _wrap_Dodecahedron_className, METH_O, "Dodecahedron_className(Dodecahedron self) -> std::string"},
+	 { "Dodecahedron_parDefs", _wrap_Dodecahedron_parDefs, METH_O, "Dodecahedron_parDefs(Dodecahedron self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "Dodecahedron_edge", _wrap_Dodecahedron_edge, METH_O, "Dodecahedron_edge(Dodecahedron self) -> double"},
+	 { "delete_Dodecahedron", _wrap_delete_Dodecahedron, METH_O, "delete_Dodecahedron(Dodecahedron self)"},
+	 { "Dodecahedron_swigregister", Dodecahedron_swigregister, METH_O, NULL},
+	 { "Dodecahedron_swiginit", Dodecahedron_swiginit, METH_VARARGS, NULL},
+	 { "new_Icosahedron", _wrap_new_Icosahedron, METH_VARARGS, "\n"
+		"Icosahedron(double edge)\n"
+		"new_Icosahedron(vdouble1d_t P) -> Icosahedron\n"
+		""},
+	 { "Icosahedron_clone", _wrap_Icosahedron_clone, METH_O, "Icosahedron_clone(Icosahedron self) -> Icosahedron"},
+	 { "Icosahedron_className", _wrap_Icosahedron_className, METH_O, "Icosahedron_className(Icosahedron self) -> std::string"},
+	 { "Icosahedron_parDefs", _wrap_Icosahedron_parDefs, METH_O, "Icosahedron_parDefs(Icosahedron self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "Icosahedron_edge", _wrap_Icosahedron_edge, METH_O, "Icosahedron_edge(Icosahedron self) -> double"},
+	 { "delete_Icosahedron", _wrap_delete_Icosahedron, METH_O, "delete_Icosahedron(Icosahedron self)"},
+	 { "Icosahedron_swigregister", Icosahedron_swigregister, METH_O, NULL},
+	 { "Icosahedron_swiginit", Icosahedron_swiginit, METH_VARARGS, NULL},
 	 { "new_Pyramid2", _wrap_new_Pyramid2, METH_VARARGS, "\n"
 		"Pyramid2(double length, double width, double height, double alpha)\n"
 		"new_Pyramid2(vdouble1d_t P) -> Pyramid2\n"
@@ -62489,37 +62269,35 @@ static PyMethodDef SwigMethods[] = {
 	 { "Pyramid6_validate", _wrap_Pyramid6_validate, METH_O, "Pyramid6_validate(Pyramid6 self) -> std::string"},
 	 { "delete_Pyramid6", _wrap_delete_Pyramid6, METH_O, "delete_Pyramid6(Pyramid6 self)"},
 	 { "Pyramid6_swigregister", Pyramid6_swigregister, METH_O, NULL},
-	 { "Pyramid6_swiginit", Pyramid6_swiginit, METH_VARARGS, NULL},
-	 { "new_SawtoothRippleBox", _wrap_new_SawtoothRippleBox, METH_VARARGS, "\n"
-		"SawtoothRippleBox(double length, double width, double height, double asymmetry)\n"
-		"new_SawtoothRippleBox(vdouble1d_t P) -> SawtoothRippleBox\n"
-		""},
-	 { "SawtoothRippleBox_clone", _wrap_SawtoothRippleBox_clone, METH_O, "SawtoothRippleBox_clone(SawtoothRippleBox self) -> SawtoothRippleBox"},
-	 { "SawtoothRippleBox_className", _wrap_SawtoothRippleBox_className, METH_O, "SawtoothRippleBox_className(SawtoothRippleBox self) -> std::string"},
-	 { "SawtoothRippleBox_parDefs", _wrap_SawtoothRippleBox_parDefs, METH_O, "SawtoothRippleBox_parDefs(SawtoothRippleBox self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "delete_SawtoothRippleBox", _wrap_delete_SawtoothRippleBox, METH_O, "delete_SawtoothRippleBox(SawtoothRippleBox self)"},
-	 { "SawtoothRippleBox_swigregister", SawtoothRippleBox_swigregister, METH_O, NULL},
-	 { "SawtoothRippleBox_swiginit", SawtoothRippleBox_swiginit, METH_VARARGS, NULL},
-	 { "new_SawtoothRippleGauss", _wrap_new_SawtoothRippleGauss, METH_VARARGS, "\n"
-		"SawtoothRippleGauss(double length, double width, double height, double asymmetry)\n"
-		"new_SawtoothRippleGauss(vdouble1d_t P) -> SawtoothRippleGauss\n"
-		""},
-	 { "SawtoothRippleGauss_clone", _wrap_SawtoothRippleGauss_clone, METH_O, "SawtoothRippleGauss_clone(SawtoothRippleGauss self) -> SawtoothRippleGauss"},
-	 { "SawtoothRippleGauss_className", _wrap_SawtoothRippleGauss_className, METH_O, "SawtoothRippleGauss_className(SawtoothRippleGauss self) -> std::string"},
-	 { "SawtoothRippleGauss_parDefs", _wrap_SawtoothRippleGauss_parDefs, METH_O, "SawtoothRippleGauss_parDefs(SawtoothRippleGauss self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "delete_SawtoothRippleGauss", _wrap_delete_SawtoothRippleGauss, METH_O, "delete_SawtoothRippleGauss(SawtoothRippleGauss self)"},
-	 { "SawtoothRippleGauss_swigregister", SawtoothRippleGauss_swigregister, METH_O, NULL},
-	 { "SawtoothRippleGauss_swiginit", SawtoothRippleGauss_swiginit, METH_VARARGS, NULL},
-	 { "new_SawtoothRippleLorentz", _wrap_new_SawtoothRippleLorentz, METH_VARARGS, "\n"
-		"SawtoothRippleLorentz(double length, double width, double height, double asymmetry)\n"
-		"new_SawtoothRippleLorentz(vdouble1d_t P) -> SawtoothRippleLorentz\n"
+	 { "Pyramid6_swiginit", Pyramid6_swiginit, METH_VARARGS, NULL},
+	 { "new_Bipyramid4", _wrap_new_Bipyramid4, METH_VARARGS, "\n"
+		"Bipyramid4(double length, double height, double height_ratio, double alpha)\n"
+		"new_Bipyramid4(vdouble1d_t P) -> Bipyramid4\n"
 		""},
-	 { "SawtoothRippleLorentz_clone", _wrap_SawtoothRippleLorentz_clone, METH_O, "SawtoothRippleLorentz_clone(SawtoothRippleLorentz self) -> SawtoothRippleLorentz"},
-	 { "SawtoothRippleLorentz_className", _wrap_SawtoothRippleLorentz_className, METH_O, "SawtoothRippleLorentz_className(SawtoothRippleLorentz self) -> std::string"},
-	 { "SawtoothRippleLorentz_parDefs", _wrap_SawtoothRippleLorentz_parDefs, METH_O, "SawtoothRippleLorentz_parDefs(SawtoothRippleLorentz self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "delete_SawtoothRippleLorentz", _wrap_delete_SawtoothRippleLorentz, METH_O, "delete_SawtoothRippleLorentz(SawtoothRippleLorentz self)"},
-	 { "SawtoothRippleLorentz_swigregister", SawtoothRippleLorentz_swigregister, METH_O, NULL},
-	 { "SawtoothRippleLorentz_swiginit", SawtoothRippleLorentz_swiginit, METH_VARARGS, NULL},
+	 { "Bipyramid4_clone", _wrap_Bipyramid4_clone, METH_O, "Bipyramid4_clone(Bipyramid4 self) -> Bipyramid4"},
+	 { "Bipyramid4_className", _wrap_Bipyramid4_className, METH_O, "Bipyramid4_className(Bipyramid4 self) -> std::string"},
+	 { "Bipyramid4_parDefs", _wrap_Bipyramid4_parDefs, METH_O, "Bipyramid4_parDefs(Bipyramid4 self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "Bipyramid4_length", _wrap_Bipyramid4_length, METH_O, "Bipyramid4_length(Bipyramid4 self) -> double"},
+	 { "Bipyramid4_height", _wrap_Bipyramid4_height, METH_O, "Bipyramid4_height(Bipyramid4 self) -> double"},
+	 { "Bipyramid4_heightRatio", _wrap_Bipyramid4_heightRatio, METH_O, "Bipyramid4_heightRatio(Bipyramid4 self) -> double"},
+	 { "Bipyramid4_alpha", _wrap_Bipyramid4_alpha, METH_O, "Bipyramid4_alpha(Bipyramid4 self) -> double"},
+	 { "Bipyramid4_validate", _wrap_Bipyramid4_validate, METH_O, "Bipyramid4_validate(Bipyramid4 self) -> std::string"},
+	 { "delete_Bipyramid4", _wrap_delete_Bipyramid4, METH_O, "delete_Bipyramid4(Bipyramid4 self)"},
+	 { "Bipyramid4_swigregister", Bipyramid4_swigregister, METH_O, NULL},
+	 { "Bipyramid4_swiginit", Bipyramid4_swiginit, METH_VARARGS, NULL},
+	 { "new_CantellatedCube", _wrap_new_CantellatedCube, METH_VARARGS, "\n"
+		"CantellatedCube(double length, double removed_length)\n"
+		"new_CantellatedCube(vdouble1d_t P) -> CantellatedCube\n"
+		""},
+	 { "CantellatedCube_clone", _wrap_CantellatedCube_clone, METH_O, "CantellatedCube_clone(CantellatedCube self) -> CantellatedCube"},
+	 { "CantellatedCube_className", _wrap_CantellatedCube_className, METH_O, "CantellatedCube_className(CantellatedCube self) -> std::string"},
+	 { "CantellatedCube_parDefs", _wrap_CantellatedCube_parDefs, METH_O, "CantellatedCube_parDefs(CantellatedCube self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "CantellatedCube_length", _wrap_CantellatedCube_length, METH_O, "CantellatedCube_length(CantellatedCube self) -> double"},
+	 { "CantellatedCube_removedLength", _wrap_CantellatedCube_removedLength, METH_O, "CantellatedCube_removedLength(CantellatedCube self) -> double"},
+	 { "CantellatedCube_validate", _wrap_CantellatedCube_validate, METH_O, "CantellatedCube_validate(CantellatedCube self) -> std::string"},
+	 { "delete_CantellatedCube", _wrap_delete_CantellatedCube, METH_O, "delete_CantellatedCube(CantellatedCube self)"},
+	 { "CantellatedCube_swigregister", CantellatedCube_swigregister, METH_O, NULL},
+	 { "CantellatedCube_swiginit", CantellatedCube_swiginit, METH_VARARGS, NULL},
 	 { "new_TruncatedCube", _wrap_new_TruncatedCube, METH_VARARGS, "\n"
 		"TruncatedCube(double length, double removed_length)\n"
 		"new_TruncatedCube(vdouble1d_t P) -> TruncatedCube\n"
@@ -62533,6 +62311,116 @@ static PyMethodDef SwigMethods[] = {
 	 { "delete_TruncatedCube", _wrap_delete_TruncatedCube, METH_O, "delete_TruncatedCube(TruncatedCube self)"},
 	 { "TruncatedCube_swigregister", TruncatedCube_swigregister, METH_O, NULL},
 	 { "TruncatedCube_swiginit", TruncatedCube_swiginit, METH_VARARGS, NULL},
+	 { "new_Cone", _wrap_new_Cone, METH_VARARGS, "\n"
+		"Cone(double radius, double height, double alpha)\n"
+		"new_Cone(vdouble1d_t P) -> Cone\n"
+		""},
+	 { "Cone_clone", _wrap_Cone_clone, METH_O, "Cone_clone(Cone self) -> Cone"},
+	 { "Cone_className", _wrap_Cone_className, METH_O, "Cone_className(Cone self) -> std::string"},
+	 { "Cone_parDefs", _wrap_Cone_parDefs, METH_O, "Cone_parDefs(Cone self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "Cone_radius", _wrap_Cone_radius, METH_O, "Cone_radius(Cone self) -> double"},
+	 { "Cone_height", _wrap_Cone_height, METH_O, "Cone_height(Cone self) -> double"},
+	 { "Cone_alpha", _wrap_Cone_alpha, METH_O, "Cone_alpha(Cone self) -> double"},
+	 { "Cone_radialExtension", _wrap_Cone_radialExtension, METH_O, "Cone_radialExtension(Cone self) -> double"},
+	 { "Cone_formfactor", _wrap_Cone_formfactor, METH_VARARGS, "Cone_formfactor(Cone self, C3 q) -> complex_t"},
+	 { "Cone_validate", _wrap_Cone_validate, METH_O, "Cone_validate(Cone self) -> std::string"},
+	 { "delete_Cone", _wrap_delete_Cone, METH_O, "delete_Cone(Cone self)"},
+	 { "Cone_swigregister", Cone_swigregister, METH_O, NULL},
+	 { "Cone_swiginit", Cone_swiginit, METH_VARARGS, NULL},
+	 { "new_Cylinder", _wrap_new_Cylinder, METH_VARARGS, "\n"
+		"Cylinder(double radius, double height)\n"
+		"new_Cylinder(vdouble1d_t P) -> Cylinder\n"
+		""},
+	 { "Cylinder_clone", _wrap_Cylinder_clone, METH_O, "Cylinder_clone(Cylinder self) -> Cylinder"},
+	 { "Cylinder_className", _wrap_Cylinder_className, METH_O, "Cylinder_className(Cylinder self) -> std::string"},
+	 { "Cylinder_parDefs", _wrap_Cylinder_parDefs, METH_O, "Cylinder_parDefs(Cylinder self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "Cylinder_height", _wrap_Cylinder_height, METH_O, "Cylinder_height(Cylinder self) -> double"},
+	 { "Cylinder_radius", _wrap_Cylinder_radius, METH_O, "Cylinder_radius(Cylinder self) -> double"},
+	 { "Cylinder_radialExtension", _wrap_Cylinder_radialExtension, METH_O, "Cylinder_radialExtension(Cylinder self) -> double"},
+	 { "Cylinder_formfactor", _wrap_Cylinder_formfactor, METH_VARARGS, "Cylinder_formfactor(Cylinder self, C3 q) -> complex_t"},
+	 { "Cylinder_validate", _wrap_Cylinder_validate, METH_O, "Cylinder_validate(Cylinder self) -> std::string"},
+	 { "delete_Cylinder", _wrap_delete_Cylinder, METH_O, "delete_Cylinder(Cylinder self)"},
+	 { "Cylinder_swigregister", Cylinder_swigregister, METH_O, NULL},
+	 { "Cylinder_swiginit", Cylinder_swiginit, METH_VARARGS, NULL},
+	 { "new_EllipsoidalCylinder", _wrap_new_EllipsoidalCylinder, METH_VARARGS, "\n"
+		"EllipsoidalCylinder(double radius_x, double radius_y, double height)\n"
+		"new_EllipsoidalCylinder(vdouble1d_t P) -> EllipsoidalCylinder\n"
+		""},
+	 { "EllipsoidalCylinder_clone", _wrap_EllipsoidalCylinder_clone, METH_O, "EllipsoidalCylinder_clone(EllipsoidalCylinder self) -> EllipsoidalCylinder"},
+	 { "EllipsoidalCylinder_className", _wrap_EllipsoidalCylinder_className, METH_O, "EllipsoidalCylinder_className(EllipsoidalCylinder self) -> std::string"},
+	 { "EllipsoidalCylinder_parDefs", _wrap_EllipsoidalCylinder_parDefs, METH_O, "EllipsoidalCylinder_parDefs(EllipsoidalCylinder self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "EllipsoidalCylinder_radiusX", _wrap_EllipsoidalCylinder_radiusX, METH_O, "EllipsoidalCylinder_radiusX(EllipsoidalCylinder self) -> double"},
+	 { "EllipsoidalCylinder_radiusY", _wrap_EllipsoidalCylinder_radiusY, METH_O, "EllipsoidalCylinder_radiusY(EllipsoidalCylinder self) -> double"},
+	 { "EllipsoidalCylinder_height", _wrap_EllipsoidalCylinder_height, METH_O, "EllipsoidalCylinder_height(EllipsoidalCylinder self) -> double"},
+	 { "EllipsoidalCylinder_radialExtension", _wrap_EllipsoidalCylinder_radialExtension, METH_O, "EllipsoidalCylinder_radialExtension(EllipsoidalCylinder self) -> double"},
+	 { "EllipsoidalCylinder_formfactor", _wrap_EllipsoidalCylinder_formfactor, METH_VARARGS, "EllipsoidalCylinder_formfactor(EllipsoidalCylinder self, C3 q) -> complex_t"},
+	 { "EllipsoidalCylinder_validate", _wrap_EllipsoidalCylinder_validate, METH_O, "EllipsoidalCylinder_validate(EllipsoidalCylinder self) -> std::string"},
+	 { "delete_EllipsoidalCylinder", _wrap_delete_EllipsoidalCylinder, METH_O, "delete_EllipsoidalCylinder(EllipsoidalCylinder self)"},
+	 { "EllipsoidalCylinder_swigregister", EllipsoidalCylinder_swigregister, METH_O, NULL},
+	 { "EllipsoidalCylinder_swiginit", EllipsoidalCylinder_swiginit, METH_VARARGS, NULL},
+	 { "new_HemiEllipsoid", _wrap_new_HemiEllipsoid, METH_VARARGS, "\n"
+		"HemiEllipsoid(double radius_x, double radius_y, double height)\n"
+		"new_HemiEllipsoid(vdouble1d_t P) -> HemiEllipsoid\n"
+		""},
+	 { "delete_HemiEllipsoid", _wrap_delete_HemiEllipsoid, METH_O, "delete_HemiEllipsoid(HemiEllipsoid self)"},
+	 { "HemiEllipsoid_clone", _wrap_HemiEllipsoid_clone, METH_O, "HemiEllipsoid_clone(HemiEllipsoid self) -> HemiEllipsoid"},
+	 { "HemiEllipsoid_className", _wrap_HemiEllipsoid_className, METH_O, "HemiEllipsoid_className(HemiEllipsoid self) -> std::string"},
+	 { "HemiEllipsoid_parDefs", _wrap_HemiEllipsoid_parDefs, METH_O, "HemiEllipsoid_parDefs(HemiEllipsoid self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "HemiEllipsoid_height", _wrap_HemiEllipsoid_height, METH_O, "HemiEllipsoid_height(HemiEllipsoid self) -> double"},
+	 { "HemiEllipsoid_radiusX", _wrap_HemiEllipsoid_radiusX, METH_O, "HemiEllipsoid_radiusX(HemiEllipsoid self) -> double"},
+	 { "HemiEllipsoid_radiusY", _wrap_HemiEllipsoid_radiusY, METH_O, "HemiEllipsoid_radiusY(HemiEllipsoid self) -> double"},
+	 { "HemiEllipsoid_radialExtension", _wrap_HemiEllipsoid_radialExtension, METH_O, "HemiEllipsoid_radialExtension(HemiEllipsoid self) -> double"},
+	 { "HemiEllipsoid_formfactor", _wrap_HemiEllipsoid_formfactor, METH_VARARGS, "HemiEllipsoid_formfactor(HemiEllipsoid self, C3 q) -> complex_t"},
+	 { "HemiEllipsoid_validate", _wrap_HemiEllipsoid_validate, METH_O, "HemiEllipsoid_validate(HemiEllipsoid self) -> std::string"},
+	 { "HemiEllipsoid_swigregister", HemiEllipsoid_swigregister, METH_O, NULL},
+	 { "HemiEllipsoid_swiginit", HemiEllipsoid_swiginit, METH_VARARGS, NULL},
+	 { "new_HorizontalCylinder", _wrap_new_HorizontalCylinder, METH_VARARGS, "\n"
+		"HorizontalCylinder(double radius, double length, double slice_bottom, double slice_top)\n"
+		"HorizontalCylinder(double radius, double length)\n"
+		"new_HorizontalCylinder(vdouble1d_t P) -> HorizontalCylinder\n"
+		""},
+	 { "HorizontalCylinder_clone", _wrap_HorizontalCylinder_clone, METH_O, "HorizontalCylinder_clone(HorizontalCylinder self) -> HorizontalCylinder"},
+	 { "HorizontalCylinder_className", _wrap_HorizontalCylinder_className, METH_O, "HorizontalCylinder_className(HorizontalCylinder self) -> std::string"},
+	 { "HorizontalCylinder_parDefs", _wrap_HorizontalCylinder_parDefs, METH_O, "HorizontalCylinder_parDefs(HorizontalCylinder self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "HorizontalCylinder_length", _wrap_HorizontalCylinder_length, METH_O, "HorizontalCylinder_length(HorizontalCylinder self) -> double"},
+	 { "HorizontalCylinder_radius", _wrap_HorizontalCylinder_radius, METH_O, "HorizontalCylinder_radius(HorizontalCylinder self) -> double"},
+	 { "HorizontalCylinder_slice_bottom", _wrap_HorizontalCylinder_slice_bottom, METH_O, "HorizontalCylinder_slice_bottom(HorizontalCylinder self) -> double"},
+	 { "HorizontalCylinder_slice_top", _wrap_HorizontalCylinder_slice_top, METH_O, "HorizontalCylinder_slice_top(HorizontalCylinder self) -> double"},
+	 { "HorizontalCylinder_radialExtension", _wrap_HorizontalCylinder_radialExtension, METH_O, "HorizontalCylinder_radialExtension(HorizontalCylinder self) -> double"},
+	 { "HorizontalCylinder_formfactor", _wrap_HorizontalCylinder_formfactor, METH_VARARGS, "HorizontalCylinder_formfactor(HorizontalCylinder self, C3 q) -> complex_t"},
+	 { "HorizontalCylinder_validate", _wrap_HorizontalCylinder_validate, METH_O, "HorizontalCylinder_validate(HorizontalCylinder self) -> std::string"},
+	 { "delete_HorizontalCylinder", _wrap_delete_HorizontalCylinder, METH_O, "delete_HorizontalCylinder(HorizontalCylinder self)"},
+	 { "HorizontalCylinder_swigregister", HorizontalCylinder_swigregister, METH_O, NULL},
+	 { "HorizontalCylinder_swiginit", HorizontalCylinder_swiginit, METH_VARARGS, NULL},
+	 { "new_Sphere", _wrap_new_Sphere, METH_VARARGS, "\n"
+		"Sphere(double radius, bool position_at_center=False)\n"
+		"Sphere(vdouble1d_t P, bool position_at_center=False)\n"
+		""},
+	 { "Sphere_clone", _wrap_Sphere_clone, METH_O, "Sphere_clone(Sphere self) -> Sphere"},
+	 { "Sphere_className", _wrap_Sphere_className, METH_O, "Sphere_className(Sphere self) -> std::string"},
+	 { "Sphere_parDefs", _wrap_Sphere_parDefs, METH_O, "Sphere_parDefs(Sphere self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "Sphere_radius", _wrap_Sphere_radius, METH_O, "Sphere_radius(Sphere self) -> double"},
+	 { "Sphere_radialExtension", _wrap_Sphere_radialExtension, METH_O, "Sphere_radialExtension(Sphere self) -> double"},
+	 { "Sphere_formfactor", _wrap_Sphere_formfactor, METH_VARARGS, "Sphere_formfactor(Sphere self, C3 q) -> complex_t"},
+	 { "Sphere_validate", _wrap_Sphere_validate, METH_O, "Sphere_validate(Sphere self) -> std::string"},
+	 { "delete_Sphere", _wrap_delete_Sphere, METH_O, "delete_Sphere(Sphere self)"},
+	 { "Sphere_swigregister", Sphere_swigregister, METH_O, NULL},
+	 { "Sphere_swiginit", Sphere_swiginit, METH_VARARGS, NULL},
+	 { "new_Spheroid", _wrap_new_Spheroid, METH_VARARGS, "\n"
+		"Spheroid(double radius, double height)\n"
+		"new_Spheroid(vdouble1d_t P) -> Spheroid\n"
+		""},
+	 { "Spheroid_clone", _wrap_Spheroid_clone, METH_O, "Spheroid_clone(Spheroid self) -> Spheroid"},
+	 { "Spheroid_className", _wrap_Spheroid_className, METH_O, "Spheroid_className(Spheroid self) -> std::string"},
+	 { "Spheroid_parDefs", _wrap_Spheroid_parDefs, METH_O, "Spheroid_parDefs(Spheroid self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "Spheroid_height", _wrap_Spheroid_height, METH_O, "Spheroid_height(Spheroid self) -> double"},
+	 { "Spheroid_radius", _wrap_Spheroid_radius, METH_O, "Spheroid_radius(Spheroid self) -> double"},
+	 { "Spheroid_radialExtension", _wrap_Spheroid_radialExtension, METH_O, "Spheroid_radialExtension(Spheroid self) -> double"},
+	 { "Spheroid_formfactor", _wrap_Spheroid_formfactor, METH_VARARGS, "Spheroid_formfactor(Spheroid self, C3 q) -> complex_t"},
+	 { "Spheroid_validate", _wrap_Spheroid_validate, METH_O, "Spheroid_validate(Spheroid self) -> std::string"},
+	 { "delete_Spheroid", _wrap_delete_Spheroid, METH_O, "delete_Spheroid(Spheroid self)"},
+	 { "Spheroid_swigregister", Spheroid_swigregister, METH_O, NULL},
+	 { "Spheroid_swiginit", Spheroid_swiginit, METH_VARARGS, NULL},
 	 { "new_TruncatedSphere", _wrap_new_TruncatedSphere, METH_VARARGS, "\n"
 		"TruncatedSphere(double radius, double height, double dh)\n"
 		"new_TruncatedSphere(vdouble1d_t P) -> TruncatedSphere\n"
@@ -62566,6 +62454,118 @@ static PyMethodDef SwigMethods[] = {
 	 { "delete_TruncatedSpheroid", _wrap_delete_TruncatedSpheroid, METH_O, "delete_TruncatedSpheroid(TruncatedSpheroid self)"},
 	 { "TruncatedSpheroid_swigregister", TruncatedSpheroid_swigregister, METH_O, NULL},
 	 { "TruncatedSpheroid_swiginit", TruncatedSpheroid_swiginit, METH_VARARGS, NULL},
+	 { "new_BarGauss", _wrap_new_BarGauss, METH_VARARGS, "\n"
+		"BarGauss(double length, double width, double height)\n"
+		"new_BarGauss(vdouble1d_t P) -> BarGauss\n"
+		""},
+	 { "BarGauss_clone", _wrap_BarGauss_clone, METH_O, "BarGauss_clone(BarGauss self) -> BarGauss"},
+	 { "BarGauss_className", _wrap_BarGauss_className, METH_O, "BarGauss_className(BarGauss self) -> std::string"},
+	 { "BarGauss_parDefs", _wrap_BarGauss_parDefs, METH_O, "BarGauss_parDefs(BarGauss self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "delete_BarGauss", _wrap_delete_BarGauss, METH_O, "delete_BarGauss(BarGauss self)"},
+	 { "BarGauss_swigregister", BarGauss_swigregister, METH_O, NULL},
+	 { "BarGauss_swiginit", BarGauss_swiginit, METH_VARARGS, NULL},
+	 { "new_BarLorentz", _wrap_new_BarLorentz, METH_VARARGS, "\n"
+		"BarLorentz(double length, double width, double height)\n"
+		"new_BarLorentz(vdouble1d_t P) -> BarLorentz\n"
+		""},
+	 { "BarLorentz_clone", _wrap_BarLorentz_clone, METH_O, "BarLorentz_clone(BarLorentz self) -> BarLorentz"},
+	 { "BarLorentz_className", _wrap_BarLorentz_className, METH_O, "BarLorentz_className(BarLorentz self) -> std::string"},
+	 { "BarLorentz_parDefs", _wrap_BarLorentz_parDefs, METH_O, "BarLorentz_parDefs(BarLorentz self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "delete_BarLorentz", _wrap_delete_BarLorentz, METH_O, "delete_BarLorentz(BarLorentz self)"},
+	 { "BarLorentz_swigregister", BarLorentz_swigregister, METH_O, NULL},
+	 { "BarLorentz_swiginit", BarLorentz_swiginit, METH_VARARGS, NULL},
+	 { "new_CosineRippleBox", _wrap_new_CosineRippleBox, METH_VARARGS, "\n"
+		"CosineRippleBox(double length, double width, double height)\n"
+		"new_CosineRippleBox(vdouble1d_t P) -> CosineRippleBox\n"
+		""},
+	 { "CosineRippleBox_clone", _wrap_CosineRippleBox_clone, METH_O, "CosineRippleBox_clone(CosineRippleBox self) -> CosineRippleBox"},
+	 { "CosineRippleBox_className", _wrap_CosineRippleBox_className, METH_O, "CosineRippleBox_className(CosineRippleBox self) -> std::string"},
+	 { "CosineRippleBox_parDefs", _wrap_CosineRippleBox_parDefs, METH_O, "CosineRippleBox_parDefs(CosineRippleBox self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "delete_CosineRippleBox", _wrap_delete_CosineRippleBox, METH_O, "delete_CosineRippleBox(CosineRippleBox self)"},
+	 { "CosineRippleBox_swigregister", CosineRippleBox_swigregister, METH_O, NULL},
+	 { "CosineRippleBox_swiginit", CosineRippleBox_swiginit, METH_VARARGS, NULL},
+	 { "new_CosineRippleGauss", _wrap_new_CosineRippleGauss, METH_VARARGS, "\n"
+		"CosineRippleGauss(double length, double width, double height)\n"
+		"new_CosineRippleGauss(vdouble1d_t P) -> CosineRippleGauss\n"
+		""},
+	 { "CosineRippleGauss_clone", _wrap_CosineRippleGauss_clone, METH_O, "CosineRippleGauss_clone(CosineRippleGauss self) -> CosineRippleGauss"},
+	 { "CosineRippleGauss_className", _wrap_CosineRippleGauss_className, METH_O, "CosineRippleGauss_className(CosineRippleGauss self) -> std::string"},
+	 { "CosineRippleGauss_parDefs", _wrap_CosineRippleGauss_parDefs, METH_O, "CosineRippleGauss_parDefs(CosineRippleGauss self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "delete_CosineRippleGauss", _wrap_delete_CosineRippleGauss, METH_O, "delete_CosineRippleGauss(CosineRippleGauss self)"},
+	 { "CosineRippleGauss_swigregister", CosineRippleGauss_swigregister, METH_O, NULL},
+	 { "CosineRippleGauss_swiginit", CosineRippleGauss_swiginit, METH_VARARGS, NULL},
+	 { "new_CosineRippleLorentz", _wrap_new_CosineRippleLorentz, METH_VARARGS, "\n"
+		"CosineRippleLorentz(double length, double width, double height)\n"
+		"new_CosineRippleLorentz(vdouble1d_t P) -> CosineRippleLorentz\n"
+		""},
+	 { "CosineRippleLorentz_clone", _wrap_CosineRippleLorentz_clone, METH_O, "CosineRippleLorentz_clone(CosineRippleLorentz self) -> CosineRippleLorentz"},
+	 { "CosineRippleLorentz_className", _wrap_CosineRippleLorentz_className, METH_O, "CosineRippleLorentz_className(CosineRippleLorentz self) -> std::string"},
+	 { "CosineRippleLorentz_parDefs", _wrap_CosineRippleLorentz_parDefs, METH_O, "CosineRippleLorentz_parDefs(CosineRippleLorentz self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "delete_CosineRippleLorentz", _wrap_delete_CosineRippleLorentz, METH_O, "delete_CosineRippleLorentz(CosineRippleLorentz self)"},
+	 { "CosineRippleLorentz_swigregister", CosineRippleLorentz_swigregister, METH_O, NULL},
+	 { "CosineRippleLorentz_swiginit", CosineRippleLorentz_swiginit, METH_VARARGS, NULL},
+	 { "new_SawtoothRippleBox", _wrap_new_SawtoothRippleBox, METH_VARARGS, "\n"
+		"SawtoothRippleBox(double length, double width, double height, double asymmetry)\n"
+		"new_SawtoothRippleBox(vdouble1d_t P) -> SawtoothRippleBox\n"
+		""},
+	 { "SawtoothRippleBox_clone", _wrap_SawtoothRippleBox_clone, METH_O, "SawtoothRippleBox_clone(SawtoothRippleBox self) -> SawtoothRippleBox"},
+	 { "SawtoothRippleBox_className", _wrap_SawtoothRippleBox_className, METH_O, "SawtoothRippleBox_className(SawtoothRippleBox self) -> std::string"},
+	 { "SawtoothRippleBox_parDefs", _wrap_SawtoothRippleBox_parDefs, METH_O, "SawtoothRippleBox_parDefs(SawtoothRippleBox self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "delete_SawtoothRippleBox", _wrap_delete_SawtoothRippleBox, METH_O, "delete_SawtoothRippleBox(SawtoothRippleBox self)"},
+	 { "SawtoothRippleBox_swigregister", SawtoothRippleBox_swigregister, METH_O, NULL},
+	 { "SawtoothRippleBox_swiginit", SawtoothRippleBox_swiginit, METH_VARARGS, NULL},
+	 { "new_SawtoothRippleGauss", _wrap_new_SawtoothRippleGauss, METH_VARARGS, "\n"
+		"SawtoothRippleGauss(double length, double width, double height, double asymmetry)\n"
+		"new_SawtoothRippleGauss(vdouble1d_t P) -> SawtoothRippleGauss\n"
+		""},
+	 { "SawtoothRippleGauss_clone", _wrap_SawtoothRippleGauss_clone, METH_O, "SawtoothRippleGauss_clone(SawtoothRippleGauss self) -> SawtoothRippleGauss"},
+	 { "SawtoothRippleGauss_className", _wrap_SawtoothRippleGauss_className, METH_O, "SawtoothRippleGauss_className(SawtoothRippleGauss self) -> std::string"},
+	 { "SawtoothRippleGauss_parDefs", _wrap_SawtoothRippleGauss_parDefs, METH_O, "SawtoothRippleGauss_parDefs(SawtoothRippleGauss self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "delete_SawtoothRippleGauss", _wrap_delete_SawtoothRippleGauss, METH_O, "delete_SawtoothRippleGauss(SawtoothRippleGauss self)"},
+	 { "SawtoothRippleGauss_swigregister", SawtoothRippleGauss_swigregister, METH_O, NULL},
+	 { "SawtoothRippleGauss_swiginit", SawtoothRippleGauss_swiginit, METH_VARARGS, NULL},
+	 { "new_SawtoothRippleLorentz", _wrap_new_SawtoothRippleLorentz, METH_VARARGS, "\n"
+		"SawtoothRippleLorentz(double length, double width, double height, double asymmetry)\n"
+		"new_SawtoothRippleLorentz(vdouble1d_t P) -> SawtoothRippleLorentz\n"
+		""},
+	 { "SawtoothRippleLorentz_clone", _wrap_SawtoothRippleLorentz_clone, METH_O, "SawtoothRippleLorentz_clone(SawtoothRippleLorentz self) -> SawtoothRippleLorentz"},
+	 { "SawtoothRippleLorentz_className", _wrap_SawtoothRippleLorentz_className, METH_O, "SawtoothRippleLorentz_className(SawtoothRippleLorentz self) -> std::string"},
+	 { "SawtoothRippleLorentz_parDefs", _wrap_SawtoothRippleLorentz_parDefs, METH_O, "SawtoothRippleLorentz_parDefs(SawtoothRippleLorentz self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "delete_SawtoothRippleLorentz", _wrap_delete_SawtoothRippleLorentz, METH_O, "delete_SawtoothRippleLorentz(SawtoothRippleLorentz self)"},
+	 { "SawtoothRippleLorentz_swigregister", SawtoothRippleLorentz_swigregister, METH_O, NULL},
+	 { "SawtoothRippleLorentz_swiginit", SawtoothRippleLorentz_swiginit, METH_VARARGS, NULL},
+	 { "new_LongBoxGauss", _wrap_new_LongBoxGauss, METH_VARARGS, "\n"
+		"LongBoxGauss(double length, double width, double height)\n"
+		"new_LongBoxGauss(vdouble1d_t P) -> LongBoxGauss\n"
+		""},
+	 { "LongBoxGauss_clone", _wrap_LongBoxGauss_clone, METH_O, "LongBoxGauss_clone(LongBoxGauss self) -> LongBoxGauss"},
+	 { "LongBoxGauss_className", _wrap_LongBoxGauss_className, METH_O, "LongBoxGauss_className(LongBoxGauss self) -> std::string"},
+	 { "LongBoxGauss_parDefs", _wrap_LongBoxGauss_parDefs, METH_O, "LongBoxGauss_parDefs(LongBoxGauss self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "LongBoxGauss_length", _wrap_LongBoxGauss_length, METH_O, "LongBoxGauss_length(LongBoxGauss self) -> double"},
+	 { "LongBoxGauss_height", _wrap_LongBoxGauss_height, METH_O, "LongBoxGauss_height(LongBoxGauss self) -> double"},
+	 { "LongBoxGauss_width", _wrap_LongBoxGauss_width, METH_O, "LongBoxGauss_width(LongBoxGauss self) -> double"},
+	 { "LongBoxGauss_radialExtension", _wrap_LongBoxGauss_radialExtension, METH_O, "LongBoxGauss_radialExtension(LongBoxGauss self) -> double"},
+	 { "LongBoxGauss_formfactor", _wrap_LongBoxGauss_formfactor, METH_VARARGS, "LongBoxGauss_formfactor(LongBoxGauss self, C3 q) -> complex_t"},
+	 { "LongBoxGauss_validate", _wrap_LongBoxGauss_validate, METH_O, "LongBoxGauss_validate(LongBoxGauss self) -> std::string"},
+	 { "delete_LongBoxGauss", _wrap_delete_LongBoxGauss, METH_O, "delete_LongBoxGauss(LongBoxGauss self)"},
+	 { "LongBoxGauss_swigregister", LongBoxGauss_swigregister, METH_O, NULL},
+	 { "LongBoxGauss_swiginit", LongBoxGauss_swiginit, METH_VARARGS, NULL},
+	 { "new_LongBoxLorentz", _wrap_new_LongBoxLorentz, METH_VARARGS, "\n"
+		"LongBoxLorentz(double length, double width, double height)\n"
+		"new_LongBoxLorentz(vdouble1d_t P) -> LongBoxLorentz\n"
+		""},
+	 { "LongBoxLorentz_clone", _wrap_LongBoxLorentz_clone, METH_O, "LongBoxLorentz_clone(LongBoxLorentz self) -> LongBoxLorentz"},
+	 { "LongBoxLorentz_className", _wrap_LongBoxLorentz_className, METH_O, "LongBoxLorentz_className(LongBoxLorentz self) -> std::string"},
+	 { "LongBoxLorentz_parDefs", _wrap_LongBoxLorentz_parDefs, METH_O, "LongBoxLorentz_parDefs(LongBoxLorentz self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "LongBoxLorentz_length", _wrap_LongBoxLorentz_length, METH_O, "LongBoxLorentz_length(LongBoxLorentz self) -> double"},
+	 { "LongBoxLorentz_height", _wrap_LongBoxLorentz_height, METH_O, "LongBoxLorentz_height(LongBoxLorentz self) -> double"},
+	 { "LongBoxLorentz_width", _wrap_LongBoxLorentz_width, METH_O, "LongBoxLorentz_width(LongBoxLorentz self) -> double"},
+	 { "LongBoxLorentz_radialExtension", _wrap_LongBoxLorentz_radialExtension, METH_O, "LongBoxLorentz_radialExtension(LongBoxLorentz self) -> double"},
+	 { "LongBoxLorentz_formfactor", _wrap_LongBoxLorentz_formfactor, METH_VARARGS, "LongBoxLorentz_formfactor(LongBoxLorentz self, C3 q) -> complex_t"},
+	 { "LongBoxLorentz_validate", _wrap_LongBoxLorentz_validate, METH_O, "LongBoxLorentz_validate(LongBoxLorentz self) -> std::string"},
+	 { "delete_LongBoxLorentz", _wrap_delete_LongBoxLorentz, METH_O, "delete_LongBoxLorentz(LongBoxLorentz self)"},
+	 { "LongBoxLorentz_swigregister", LongBoxLorentz_swigregister, METH_O, NULL},
+	 { "LongBoxLorentz_swiginit", LongBoxLorentz_swiginit, METH_VARARGS, NULL},
 	 { "new_GaussSphere", _wrap_new_GaussSphere, METH_VARARGS, "\n"
 		"GaussSphere(vdouble1d_t P)\n"
 		"new_GaussSphere(double mean_radius) -> GaussSphere\n"
-- 
GitLab