diff --git a/Sample/HardParticle/Bipyramid4.cpp b/Sample/HardParticle/Bipyramid4.cpp
deleted file mode 100644
index 1da6cbd87108c139cb217430162ccd4706e1f939..0000000000000000000000000000000000000000
--- 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 b45d35cb3583202b299efc79cd4033e297cf29a2..0000000000000000000000000000000000000000
--- 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 01bb8b056f13d783cf5b81e6055d7f36365cadfa..0000000000000000000000000000000000000000
--- 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 944183a6c415e8ef5444014cf5fbbfec1ab38116..0000000000000000000000000000000000000000
--- 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 118ea85ed29295625c616767af4f6da1c00a4e0b..0000000000000000000000000000000000000000
--- 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 84e111af1b22c920513af997a52255b4340332d6..0000000000000000000000000000000000000000
--- 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 e465bb766e85ec0e040a9b18aab9da6b89c4877e..0000000000000000000000000000000000000000
--- 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 375f15a7e114db65ed46955d016881b6e4e464a9..0000000000000000000000000000000000000000
--- 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 645fc146bd0d4a11347c025b5c6b10537f91d78e..b2d415e5bd294954dea8d0dfe773f0d59add005d 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 3b4541715741a7c00bf1ae39a2939a0910fb6640..0000000000000000000000000000000000000000
--- 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 f82d1b5aa9f2018f9f005787e8697f6e3078f3ed..0000000000000000000000000000000000000000
--- 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 ce3c045a44ca653b4cfe8cce00079cf3d01cdefe..0000000000000000000000000000000000000000
--- 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 ad20c58df14e1a0594a9b308442d4d2aafbe2aaa..0000000000000000000000000000000000000000
--- 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 fcc76f7420d6ec2cc1ff89225ef36683b69b7ea4..0000000000000000000000000000000000000000
--- 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 6ce1075879b8713a9a067f0f5134ebc6c6900483..0000000000000000000000000000000000000000
--- 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 0000000000000000000000000000000000000000..65773885cc55f4448b11ef53de7f11b2fc8a2265
--- /dev/null
+++ b/Sample/HardParticle/Polyhedra.cpp
@@ -0,0 +1,242 @@
+//  ************************************************************************************************
+//
+//  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/Polyhedra.h"
+#include <ff/Make.h>
+
+//  ************************************************************************************************
+//  Prisms
+//  ************************************************************************************************
+
+Box::Box(const std::vector<double> P)
+    : IFormFactorPrism(P)
+    , m_length(m_P[0])
+    , m_width(m_P[1])
+    , m_height(m_P[2])
+{
+    pimpl.reset(ff::make::Box(m_length, m_width, m_height));
+    m_validated = true;
+}
+
+Box::Box(double length, double width, double height)
+    : Box(std::vector<double>{length, width, height})
+{
+}
+
+
+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})
+{
+}
+
+
+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})
+{
+}
+
+//  ************************************************************************************************
+//  Platonic solids
+//  ************************************************************************************************
+
+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})
+{
+}
+
+
+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})
+{
+}
+
+
+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})
+{
+}
+
+
+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})
+{
+}
+
+//  ************************************************************************************************
+//  Pyramids
+//  ************************************************************************************************
+
+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})
+{
+}
+
+
+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})
+{
+}
+
+
+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])
+{
+    pimpl.reset(ff::make::Pyramid4(m_base_edge, m_height, m_alpha));
+    m_validated = true;
+}
+
+Pyramid4::Pyramid4(double base_edge, double height, double alpha)
+    : Pyramid4(std::vector<double>{base_edge, height, alpha})
+{
+}
+
+
+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])
+{
+    pimpl.reset(ff::make::Pyramid6(m_base_edge, m_height, m_alpha));
+    m_validated = true;
+}
+
+Pyramid6::Pyramid6(double base_edge, double height, double alpha)
+    : Pyramid6(std::vector<double>{base_edge, height, alpha})
+{
+}
+
+
+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])
+{
+    pimpl.reset(ff::make::Bipyramid4(m_length, m_height, m_height_ratio, m_alpha));
+    m_validated = true;
+}
+
+Bipyramid4::Bipyramid4(double length, double height, double height_ratio, double alpha)
+    : Bipyramid4(std::vector<double>{length, height, height_ratio, alpha})
+{
+}
+
+//  ************************************************************************************************
+//  Others
+//  ************************************************************************************************
+
+CantellatedCube::CantellatedCube(const std::vector<double> P)
+    : IFormFactorPolyhedron(P)
+    , m_length(m_P[0])
+    , m_removed_length(m_P[1])
+{
+    pimpl.reset(ff::make::CantellatedCube(m_length, m_removed_length));
+    m_validated = true;
+}
+
+CantellatedCube::CantellatedCube(double length, double removed_length)
+    : CantellatedCube(std::vector<double>{length, removed_length})
+{
+}
+
+
+TruncatedCube::TruncatedCube(const std::vector<double> P)
+    : IFormFactorPolyhedron(P)
+    , m_length(m_P[0])
+    , m_removed_length(m_P[1])
+{
+    pimpl.reset(ff::make::TruncatedCube(m_length, m_removed_length));
+    m_validated = true;
+}
+
+TruncatedCube::TruncatedCube(double length, double removed_length)
+    : TruncatedCube(std::vector<double>{length, removed_length})
+{
+}
diff --git a/Sample/HardParticle/Polyhedra.h b/Sample/HardParticle/Polyhedra.h
new file mode 100644
index 0000000000000000000000000000000000000000..4179044e21fa384378ec3b99b127424f0b8ec4c2
--- /dev/null
+++ b/Sample/HardParticle/Polyhedra.h
@@ -0,0 +1,582 @@
+//  ************************************************************************************************
+//
+//  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_POLYHEDRA_H
+#define BORNAGAIN_SAMPLE_HARDPARTICLE_POLYHEDRA_H
+
+#include "Sample/HardParticle/IFormFactorPolyhedron.h"
+#include "Sample/HardParticle/IFormFactorPrism.h"
+
+//  ************************************************************************************************
+//  Prisms
+//  ************************************************************************************************
+
+//! 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;
+    }
+
+private:
+    const double& m_length;
+    const double& m_width;
+    const double& m_height;
+#endif // USER_API
+};
+
+//! 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
+};
+
+//! 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
+};
+
+//  ************************************************************************************************
+//  Platonic solids
+//  ************************************************************************************************
+
+//! 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:
+    const double& m_edge;
+#endif // USER_API
+};
+
+//! 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:
+    const double& m_edge;
+#endif // USER_API
+};
+
+//! 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:
+    const double& m_edge;
+#endif // USER_API
+};
+
+//! 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:
+    const double& m_edge;
+#endif // USER_API
+};
+
+//  ************************************************************************************************
+//  Pyramids
+//  ************************************************************************************************
+
+//! 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:
+    const double& m_length;
+    const double& m_width;
+    const double& m_height;
+    const double& m_alpha;
+#endif // USER_API
+};
+
+//! 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:
+    const double& m_base_edge;
+    const double& m_height;
+    const double& m_alpha;
+#endif // USER_API
+};
+
+//! 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;
+    }
+
+private:
+    const double& m_base_edge;
+    const double& m_height;
+    const double& m_alpha;
+#endif // USER_API
+};
+
+//! 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;
+    }
+
+private:
+    const double& m_base_edge;
+    const double& m_height;
+    const double& m_alpha;
+#endif // USER_API
+};
+
+//! 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;
+    }
+#endif // USER_API
+
+private:
+    const double& m_length;
+    const double& m_height;
+    const double& m_height_ratio;
+    const double& m_alpha;
+};
+
+//  ************************************************************************************************
+//  Others
+//  ************************************************************************************************
+
+//! 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;
+    }
+#endif // USER_API
+
+private:
+    const double& m_length;
+    const double& m_removed_length;
+};
+
+//! 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;
+    }
+
+private:
+    const double& m_length;
+    const double& m_removed_length;
+#endif // USER_API
+};
+
+#endif // BORNAGAIN_SAMPLE_HARDPARTICLE_POLYHEDRA_H
diff --git a/Sample/HardParticle/Prism3.cpp b/Sample/HardParticle/Prism3.cpp
deleted file mode 100644
index 0ce0be26f61b19cdefd0c764affb0634ddaebc9c..0000000000000000000000000000000000000000
--- 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 e74696c312420a92df0b2dcc6c97a07323a4588f..0000000000000000000000000000000000000000
--- 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 5ee4b99fb851e8996fa427a083f6fcee714b390e..0000000000000000000000000000000000000000
--- a/Sample/HardParticle/Prism6.cpp
+++ /dev/null
@@ -1,47 +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"
-
-Prism6::Prism6(const std::vector<double> P)
-    : IFormFactorPrism(P)
-    , m_base_edge(m_P[0])
-    , m_height(m_P[1])
-{
-    validateOrThrow();
-}
-
-Prism6::Prism6(double base_edge, double height)
-    : Prism6(std::vector<double>{base_edge, height})
-{
-}
-
-std::string Prism6::validate() const
-{
-    std::vector<std::string> errs;
-    requestGt0(errs, m_base_edge, "base_edge");
-    requestGt0(errs, m_height, "height");
-    if (!errs.empty())
-        return jointError(errs);
-
-    double a = m_base_edge;
-    double as = a * sqrt(3) / 2;
-    double ac = a / 2;
-    std::vector<R3> base_vertices{{a, 0., 0.},  {ac, as, 0.},   {-ac, as, 0.},
-                                  {-a, 0., 0.}, {-ac, -as, 0.}, {ac, -as, 0.}};
-    setPrism(false, base_vertices);
-
-    m_validated = true;
-    return "";
-}
diff --git a/Sample/HardParticle/Prism6.h b/Sample/HardParticle/Prism6.h
deleted file mode 100644
index b04f8a5a7c0a174961c3b2f1f77e92697c0651c7..0000000000000000000000000000000000000000
--- a/Sample/HardParticle/Prism6.h
+++ /dev/null
@@ -1,59 +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;
-    }
-
-    std::string validate() const override;
-
-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 636236a94821a9295d9c0f18953b4b64d7683c5c..0000000000000000000000000000000000000000
--- 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 8d035ab97c48ace03f9d5913920f04eff2116601..0000000000000000000000000000000000000000
--- 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 8728838e661954e421a35536966c4d694a1f4aa2..0000000000000000000000000000000000000000
--- 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 b7d2e6e090b2408daecfdd3b7a6011b5882ffc60..0000000000000000000000000000000000000000
--- 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 4d087b858bec6671841f5066a98ddd78bb56185f..0000000000000000000000000000000000000000
--- 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 eb6627a68f057c7bbd4309215e21792b50051b1e..0000000000000000000000000000000000000000
--- 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 a06441227ddf7a0e84d1fe46d7f8377a524a1469..0000000000000000000000000000000000000000
--- 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 00bebfdebe491a6b1c15734e0e09a58b3fc7523f..0000000000000000000000000000000000000000
--- 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 5d52990dadfa010c6ad9d3e65c4704db062ef105..0000000000000000000000000000000000000000
--- 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 4dca03b3eae9425109ceebd580bd4e60914f1966..0000000000000000000000000000000000000000
--- 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 96cd6cb8294eed9e59d7c3ba9009206c11c1db1e..94b13aa1eb97d092bc814a83cb8d2579a5b31159 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 80a305b8de36332bac1e7659915b538a1c32742e..5fb7f2b53bb4346c40f04ed4659b7d92bba80ca5 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 3d7cf5119dd5f19cdac2643351819ecd0243bed3..b5a33c64e0e6418d5c6e354f438f6390048edccf 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 d09522f438e14a8d2188a445fd5775c836c6ab1e..f2b2c9e7e294ef71d707a3088efdea3506f22937 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 441b654c193947a03735657a3c3b9bae30b32f3a..b712bdfdb6e4a302c67b9cefc6a670f0ab3a1a49 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 1c5094e2b8a0b6af813f04f282fb0bbcff24a601..f70025583d119b6a8bc128ebf436146997f7132d 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 7eb08203aa655829ce7152058d6f699d04878d6f..71782f154eb237401e3747ff3f97df16f18f5829 100644
--- a/Sample/StandardSamples/ParticleDistributionsBuilder.cpp
+++ b/Sample/StandardSamples/ParticleDistributionsBuilder.cpp
@@ -15,10 +15,9 @@
 #include "Sample/StandardSamples/ParticleDistributionsBuilder.h"
 #include "Param/Distrib/Distributions.h"
 #include "Sample/Aggregate/ParticleLayout.h"
-#include "Sample/HardParticle/Box.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 7952b005f9b0e9afd50ae3df8ea4e45aec82c152..ee1badd3ce469badf144c234c062fa7f1fa3a209 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 02bac97425ba19845f0b5ec86431ed93e6fd69b9..48e32ba5dca683a6c215b251c3a489eecc4d7e82 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 9d7af207ce0dbd32d056d4a112b722317ff7d488..7fb31827d89bd722b77d36099724b05998ea247a 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/Sample/FormFactorBasicTest.cpp b/Tests/Unit/Sample/FormFactorBasicTest.cpp
index f7dbb896fe42704bbedd97e902db8ab449bf5dcf..91a638902a72a2fcd0258d08d9af3a0ad9bc3b64 100644
--- a/Tests/Unit/Sample/FormFactorBasicTest.cpp
+++ b/Tests/Unit/Sample/FormFactorBasicTest.cpp
@@ -157,7 +157,8 @@ TEST_F(FormFactorBasicTest, Box)
     double volume = length * height * width;
 
     Box particle(length, width, height);
-    EXPECT_EQ(3., particle.radialExtension());
+    EXPECT_NEAR(sqrt(pow(length / 2, 2) + pow(height / 2, 2) + pow(width / 2, 2)),
+                particle.radialExtension(), 1e-14);
     EXPECT_DOUBLE_EQ(volume, particle.volume());
 
     RotationZ rot(.42);
diff --git a/Tests/Unit/Sim/PythonFormattingTest.cpp b/Tests/Unit/Sim/PythonFormattingTest.cpp
index fc142b9e384c4b762d66866f02a952c14787489c..96c0510f521100b2a71b061bde5d03a682f96d8d 100644
--- a/Tests/Unit/Sim/PythonFormattingTest.cpp
+++ b/Tests/Unit/Sim/PythonFormattingTest.cpp
@@ -5,31 +5,18 @@
 #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/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/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/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 d8e95e848902f8d094710fcc85aa2a0e2facd8a4..2aef923e189f4c5a5b80d86687f9d24f9b8d1b1a 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 a4063357500623c0473df3da99195c41466a4289..ae48a74ecfa7148a50cda5adff7decfb556051bd 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."""
 
@@ -4950,250 +4846,154 @@ class Box(IFormFactorPrism):
     def height(self):
         r"""height(Box self) -> double"""
         return _libBornAgainSample.Box_height(self)
-
-    def volume(self):
-        r"""volume(Box self) -> double"""
-        return _libBornAgainSample.Box_volume(self)
-
-    def radialExtension(self):
-        r"""radialExtension(Box self) -> double"""
-        return _libBornAgainSample.Box_radialExtension(self)
-
-    def formfactor(self, q):
-        r"""formfactor(Box self, C3 q) -> complex_t"""
-        return _libBornAgainSample.Box_formfactor(self, q)
-
-    def validate(self):
-        r"""validate(Box self) -> std::string"""
-        return _libBornAgainSample.Box_validate(self)
     __swig_destroy__ = _libBornAgainSample.delete_Box
 
 # 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)
-
-    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)
+        r"""className(PlatonicOctahedron self) -> std::string"""
+        return _libBornAgainSample.PlatonicOctahedron_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,152 +5026,472 @@ 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__(Pyramid4 self, double base_edge, double height, double alpha) -> Pyramid4
+        __init__(Pyramid4 self, vdouble1d_t P) -> Pyramid4
+        """
+        _libBornAgainSample.Pyramid4_swiginit(self, _libBornAgainSample.new_Pyramid4(*args))
+
+    def clone(self):
+        r"""clone(Pyramid4 self) -> Pyramid4"""
+        return _libBornAgainSample.Pyramid4_clone(self)
+
+    def className(self):
+        r"""className(Pyramid4 self) -> std::string"""
+        return _libBornAgainSample.Pyramid4_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)
+    __swig_destroy__ = _libBornAgainSample.delete_Pyramid4
+
+# 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__(Pyramid6 self, double base_edge, double height, double alpha) -> Pyramid6
+        __init__(Pyramid6 self, vdouble1d_t P) -> Pyramid6
+        """
+        _libBornAgainSample.Pyramid6_swiginit(self, _libBornAgainSample.new_Pyramid6(*args))
+
+    def clone(self):
+        r"""clone(Pyramid6 self) -> Pyramid6"""
+        return _libBornAgainSample.Pyramid6_clone(self)
+
+    def className(self):
+        r"""className(Pyramid6 self) -> std::string"""
+        return _libBornAgainSample.Pyramid6_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)
+    __swig_destroy__ = _libBornAgainSample.delete_Pyramid6
+
+# 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__(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)
+    __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__(CantellatedCube self, double length, double removed_length) -> CantellatedCube
+        __init__(CantellatedCube self, vdouble1d_t P) -> CantellatedCube
+        """
+        _libBornAgainSample.CantellatedCube_swiginit(self, _libBornAgainSample.new_CantellatedCube(*args))
+
+    def clone(self):
+        r"""clone(CantellatedCube self) -> CantellatedCube"""
+        return _libBornAgainSample.CantellatedCube_clone(self)
+
+    def className(self):
+        r"""className(CantellatedCube self) -> std::string"""
+        return _libBornAgainSample.CantellatedCube_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)
+
+    def removedLength(self):
+        r"""removedLength(CantellatedCube self) -> double"""
+        return _libBornAgainSample.CantellatedCube_removedLength(self)
+    __swig_destroy__ = _libBornAgainSample.delete_CantellatedCube
+
+# 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__(TruncatedCube self, double length, double removed_length) -> TruncatedCube
+        __init__(TruncatedCube self, vdouble1d_t P) -> TruncatedCube
+        """
+        _libBornAgainSample.TruncatedCube_swiginit(self, _libBornAgainSample.new_TruncatedCube(*args))
+
+    def clone(self):
+        r"""clone(TruncatedCube self) -> TruncatedCube"""
+        return _libBornAgainSample.TruncatedCube_clone(self)
+
+    def className(self):
+        r"""className(TruncatedCube self) -> std::string"""
+        return _libBornAgainSample.TruncatedCube_className(self)
+
+    def parDefs(self):
+        r"""parDefs(TruncatedCube self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
+        return _libBornAgainSample.TruncatedCube_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)
+    __swig_destroy__ = _libBornAgainSample.delete_TruncatedCube
+
+# 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__(Cone self, double radius, double height, double alpha) -> Cone
+        __init__(Cone self, vdouble1d_t P) -> Cone
+        """
+        _libBornAgainSample.Cone_swiginit(self, _libBornAgainSample.new_Cone(*args))
+
+    def clone(self):
+        r"""clone(Cone self) -> Cone"""
+        return _libBornAgainSample.Cone_clone(self)
+
+    def className(self):
+        r"""className(Cone self) -> std::string"""
+        return _libBornAgainSample.Cone_className(self)
+
+    def parDefs(self):
+        r"""parDefs(Cone self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
+        return _libBornAgainSample.Cone_parDefs(self)
+
+    def radius(self):
+        r"""radius(Cone self) -> double"""
+        return _libBornAgainSample.Cone_radius(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
+
+# 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__(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)
+
+    def parDefs(self):
+        r"""parDefs(Cylinder self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
+        return _libBornAgainSample.Cylinder_parDefs(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
+
+# 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__(EllipsoidalCylinder self, double radius_x, double radius_y, double height) -> EllipsoidalCylinder
+        __init__(EllipsoidalCylinder self, vdouble1d_t P) -> EllipsoidalCylinder
+        """
+        _libBornAgainSample.EllipsoidalCylinder_swiginit(self, _libBornAgainSample.new_EllipsoidalCylinder(*args))
+
+    def clone(self):
+        r"""clone(EllipsoidalCylinder self) -> EllipsoidalCylinder"""
+        return _libBornAgainSample.EllipsoidalCylinder_clone(self)
+
+    def className(self):
+        r"""className(EllipsoidalCylinder self) -> std::string"""
+        return _libBornAgainSample.EllipsoidalCylinder_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)
+
+    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
@@ -5479,462 +5599,346 @@ class HorizontalCylinder(IFormFactor):
 
 # Register HorizontalCylinder in _libBornAgainSample:
 _libBornAgainSample.HorizontalCylinder_swigregister(HorizontalCylinder)
-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__(Icosahedron self, double edge) -> Icosahedron
-        __init__(Icosahedron self, vdouble1d_t P) -> Icosahedron
-        """
-        _libBornAgainSample.Icosahedron_swiginit(self, _libBornAgainSample.new_Icosahedron(*args))
-
-    def clone(self):
-        r"""clone(Icosahedron self) -> Icosahedron"""
-        return _libBornAgainSample.Icosahedron_clone(self)
-
-    def className(self):
-        r"""className(Icosahedron self) -> std::string"""
-        return _libBornAgainSample.Icosahedron_className(self)
-
-    def parDefs(self):
-        r"""parDefs(Icosahedron self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
-        return _libBornAgainSample.Icosahedron_parDefs(self)
-
-    def edge(self):
-        r"""edge(Icosahedron self) -> double"""
-        return _libBornAgainSample.Icosahedron_edge(self)
-    __swig_destroy__ = _libBornAgainSample.delete_Icosahedron
-
-# Register Icosahedron in _libBornAgainSample:
-_libBornAgainSample.Icosahedron_swigregister(Icosahedron)
-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__(LongBoxGauss self, double length, double width, double height) -> LongBoxGauss
-        __init__(LongBoxGauss self, vdouble1d_t P) -> LongBoxGauss
-        """
-        _libBornAgainSample.LongBoxGauss_swiginit(self, _libBornAgainSample.new_LongBoxGauss(*args))
-
-    def clone(self):
-        r"""clone(LongBoxGauss self) -> LongBoxGauss"""
-        return _libBornAgainSample.LongBoxGauss_clone(self)
-
-    def className(self):
-        r"""className(LongBoxGauss self) -> std::string"""
-        return _libBornAgainSample.LongBoxGauss_className(self)
-
-    def parDefs(self):
-        r"""parDefs(LongBoxGauss self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
-        return _libBornAgainSample.LongBoxGauss_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)
-
-    def formfactor(self, q):
-        r"""formfactor(LongBoxGauss self, C3 q) -> complex_t"""
-        return _libBornAgainSample.LongBoxGauss_formfactor(self, q)
-
-    def validate(self):
-        r"""validate(LongBoxGauss self) -> std::string"""
-        return _libBornAgainSample.LongBoxGauss_validate(self)
-    __swig_destroy__ = _libBornAgainSample.delete_LongBoxGauss
-
-# Register LongBoxGauss in _libBornAgainSample:
-_libBornAgainSample.LongBoxGauss_swigregister(LongBoxGauss)
-class LongBoxLorentz(IFormFactor):
-    r"""Proxy of C++ LongBoxLorentz class."""
+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__(LongBoxLorentz self, double length, double width, double height) -> LongBoxLorentz
-        __init__(LongBoxLorentz self, vdouble1d_t P) -> LongBoxLorentz
+        __init__(Sphere self, double radius, bool position_at_center=False) -> Sphere
+        __init__(Sphere self, vdouble1d_t P, bool position_at_center=False) -> Sphere
         """
-        _libBornAgainSample.LongBoxLorentz_swiginit(self, _libBornAgainSample.new_LongBoxLorentz(*args))
+        _libBornAgainSample.Sphere_swiginit(self, _libBornAgainSample.new_Sphere(*args))
 
     def clone(self):
-        r"""clone(LongBoxLorentz self) -> LongBoxLorentz"""
-        return _libBornAgainSample.LongBoxLorentz_clone(self)
+        r"""clone(Sphere self) -> Sphere"""
+        return _libBornAgainSample.Sphere_clone(self)
 
     def className(self):
-        r"""className(LongBoxLorentz self) -> std::string"""
-        return _libBornAgainSample.LongBoxLorentz_className(self)
+        r"""className(Sphere self) -> std::string"""
+        return _libBornAgainSample.Sphere_className(self)
 
     def parDefs(self):
-        r"""parDefs(LongBoxLorentz self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
-        return _libBornAgainSample.LongBoxLorentz_parDefs(self)
-
-    def length(self):
-        r"""length(LongBoxLorentz self) -> double"""
-        return _libBornAgainSample.LongBoxLorentz_length(self)
-
-    def height(self):
-        r"""height(LongBoxLorentz self) -> double"""
-        return _libBornAgainSample.LongBoxLorentz_height(self)
+        r"""parDefs(Sphere self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
+        return _libBornAgainSample.Sphere_parDefs(self)
 
-    def width(self):
-        r"""width(LongBoxLorentz self) -> double"""
-        return _libBornAgainSample.LongBoxLorentz_width(self)
+    def radius(self):
+        r"""radius(Sphere self) -> double"""
+        return _libBornAgainSample.Sphere_radius(self)
 
     def radialExtension(self):
-        r"""radialExtension(LongBoxLorentz self) -> double"""
-        return _libBornAgainSample.LongBoxLorentz_radialExtension(self)
+        r"""radialExtension(Sphere self) -> double"""
+        return _libBornAgainSample.Sphere_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."""
-
-    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
-        """
-        _libBornAgainSample.PlatonicOctahedron_swiginit(self, _libBornAgainSample.new_PlatonicOctahedron(*args))
-
-    def clone(self):
-        r"""clone(PlatonicOctahedron self) -> PlatonicOctahedron"""
-        return _libBornAgainSample.PlatonicOctahedron_clone(self)
-
-    def className(self):
-        r"""className(PlatonicOctahedron self) -> std::string"""
-        return _libBornAgainSample.PlatonicOctahedron_className(self)
-
-    def parDefs(self):
-        r"""parDefs(PlatonicOctahedron self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
-        return _libBornAgainSample.PlatonicOctahedron_parDefs(self)
-
-    def edge(self):
-        r"""edge(PlatonicOctahedron self) -> double"""
-        return _libBornAgainSample.PlatonicOctahedron_edge(self)
+        r"""formfactor(Sphere self, C3 q) -> complex_t"""
+        return _libBornAgainSample.Sphere_formfactor(self, q)
 
-    def height(self):
-        r"""height(PlatonicOctahedron self) -> double"""
-        return _libBornAgainSample.PlatonicOctahedron_height(self)
-    __swig_destroy__ = _libBornAgainSample.delete_PlatonicOctahedron
+    def validate(self):
+        r"""validate(Sphere self) -> std::string"""
+        return _libBornAgainSample.Sphere_validate(self)
+    __swig_destroy__ = _libBornAgainSample.delete_Sphere
 
-# Register PlatonicOctahedron in _libBornAgainSample:
-_libBornAgainSample.PlatonicOctahedron_swigregister(PlatonicOctahedron)
-class PlatonicTetrahedron(IFormFactorPolyhedron):
-    r"""Proxy of C++ PlatonicTetrahedron class."""
+# 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__(PlatonicTetrahedron self, double edge) -> PlatonicTetrahedron
-        __init__(PlatonicTetrahedron self, vdouble1d_t P) -> PlatonicTetrahedron
+        __init__(Spheroid self, double radius, double height) -> Spheroid
+        __init__(Spheroid self, vdouble1d_t P) -> Spheroid
         """
-        _libBornAgainSample.PlatonicTetrahedron_swiginit(self, _libBornAgainSample.new_PlatonicTetrahedron(*args))
+        _libBornAgainSample.Spheroid_swiginit(self, _libBornAgainSample.new_Spheroid(*args))
 
     def clone(self):
-        r"""clone(PlatonicTetrahedron self) -> PlatonicTetrahedron"""
-        return _libBornAgainSample.PlatonicTetrahedron_clone(self)
+        r"""clone(Spheroid self) -> Spheroid"""
+        return _libBornAgainSample.Spheroid_clone(self)
 
     def className(self):
-        r"""className(PlatonicTetrahedron self) -> std::string"""
-        return _libBornAgainSample.PlatonicTetrahedron_className(self)
+        r"""className(Spheroid self) -> std::string"""
+        return _libBornAgainSample.Spheroid_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(Spheroid self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
+        return _libBornAgainSample.Spheroid_parDefs(self)
 
     def height(self):
-        r"""height(PlatonicTetrahedron self) -> double"""
-        return _libBornAgainSample.PlatonicTetrahedron_height(self)
-    __swig_destroy__ = _libBornAgainSample.delete_PlatonicTetrahedron
+        r"""height(Spheroid self) -> double"""
+        return _libBornAgainSample.Spheroid_height(self)
 
-# Register PlatonicTetrahedron in _libBornAgainSample:
-_libBornAgainSample.PlatonicTetrahedron_swigregister(PlatonicTetrahedron)
-class Prism3(IFormFactorPrism):
-    r"""Proxy of C++ Prism3 class."""
+    def radius(self):
+        r"""radius(Spheroid self) -> double"""
+        return _libBornAgainSample.Spheroid_radius(self)
+
+    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__(Prism3 self, double base_edge, double height) -> Prism3
-        __init__(Prism3 self, vdouble1d_t P) -> Prism3
+        __init__(TruncatedSphere self, double radius, double height, double dh) -> TruncatedSphere
+        __init__(TruncatedSphere self, vdouble1d_t P) -> TruncatedSphere
         """
-        _libBornAgainSample.Prism3_swiginit(self, _libBornAgainSample.new_Prism3(*args))
+        _libBornAgainSample.TruncatedSphere_swiginit(self, _libBornAgainSample.new_TruncatedSphere(*args))
 
     def clone(self):
-        r"""clone(Prism3 self) -> Prism3"""
-        return _libBornAgainSample.Prism3_clone(self)
+        r"""clone(TruncatedSphere self) -> TruncatedSphere"""
+        return _libBornAgainSample.TruncatedSphere_clone(self)
 
     def className(self):
-        r"""className(Prism3 self) -> std::string"""
-        return _libBornAgainSample.Prism3_className(self)
+        r"""className(TruncatedSphere self) -> std::string"""
+        return _libBornAgainSample.TruncatedSphere_className(self)
 
     def parDefs(self):
-        r"""parDefs(Prism3 self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
-        return _libBornAgainSample.Prism3_parDefs(self)
-
-    def baseEdge(self):
-        r"""baseEdge(Prism3 self) -> double"""
-        return _libBornAgainSample.Prism3_baseEdge(self)
+        r"""parDefs(TruncatedSphere self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
+        return _libBornAgainSample.TruncatedSphere_parDefs(self)
 
     def height(self):
-        r"""height(Prism3 self) -> double"""
-        return _libBornAgainSample.Prism3_height(self)
-    __swig_destroy__ = _libBornAgainSample.delete_Prism3
+        r"""height(TruncatedSphere self) -> double"""
+        return _libBornAgainSample.TruncatedSphere_height(self)
 
-# Register Prism3 in _libBornAgainSample:
-_libBornAgainSample.Prism3_swigregister(Prism3)
-class Prism6(IFormFactorPrism):
-    r"""Proxy of C++ Prism6 class."""
+    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__(Prism6 self, double base_edge, double height) -> Prism6
-        __init__(Prism6 self, vdouble1d_t P) -> Prism6
+        __init__(TruncatedSpheroid self, double radius, double height, double height_flattening, double dh) -> TruncatedSpheroid
+        __init__(TruncatedSpheroid self, vdouble1d_t P) -> TruncatedSpheroid
         """
-        _libBornAgainSample.Prism6_swiginit(self, _libBornAgainSample.new_Prism6(*args))
+        _libBornAgainSample.TruncatedSpheroid_swiginit(self, _libBornAgainSample.new_TruncatedSpheroid(*args))
 
     def clone(self):
-        r"""clone(Prism6 self) -> Prism6"""
-        return _libBornAgainSample.Prism6_clone(self)
+        r"""clone(TruncatedSpheroid self) -> TruncatedSpheroid"""
+        return _libBornAgainSample.TruncatedSpheroid_clone(self)
 
     def className(self):
-        r"""className(Prism6 self) -> std::string"""
-        return _libBornAgainSample.Prism6_className(self)
+        r"""className(TruncatedSpheroid self) -> std::string"""
+        return _libBornAgainSample.TruncatedSpheroid_className(self)
 
     def parDefs(self):
-        r"""parDefs(Prism6 self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
-        return _libBornAgainSample.Prism6_parDefs(self)
+        r"""parDefs(TruncatedSpheroid self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
+        return _libBornAgainSample.TruncatedSpheroid_parDefs(self)
 
-    def baseEdge(self):
-        r"""baseEdge(Prism6 self) -> double"""
-        return _libBornAgainSample.Prism6_baseEdge(self)
+    def radius(self):
+        r"""radius(TruncatedSpheroid self) -> double"""
+        return _libBornAgainSample.TruncatedSpheroid_radius(self)
 
     def height(self):
-        r"""height(Prism6 self) -> double"""
-        return _libBornAgainSample.Prism6_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(Prism6 self) -> std::string"""
-        return _libBornAgainSample.Prism6_validate(self)
-    __swig_destroy__ = _libBornAgainSample.delete_Prism6
+        r"""validate(TruncatedSpheroid self) -> std::string"""
+        return _libBornAgainSample.TruncatedSpheroid_validate(self)
+    __swig_destroy__ = _libBornAgainSample.delete_TruncatedSpheroid
 
-# Register Prism6 in _libBornAgainSample:
-_libBornAgainSample.Prism6_swigregister(Prism6)
-class Pyramid2(IFormFactorPolyhedron):
-    r"""Proxy of C++ Pyramid2 class."""
+# 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__(Pyramid2 self, double length, double width, double height, double alpha) -> Pyramid2
-        __init__(Pyramid2 self, vdouble1d_t P) -> Pyramid2
+        __init__(BarGauss self, double length, double width, double height) -> BarGauss
+        __init__(BarGauss self, vdouble1d_t P) -> BarGauss
         """
-        _libBornAgainSample.Pyramid2_swiginit(self, _libBornAgainSample.new_Pyramid2(*args))
+        _libBornAgainSample.BarGauss_swiginit(self, _libBornAgainSample.new_BarGauss(*args))
 
     def clone(self):
-        r"""clone(Pyramid2 self) -> Pyramid2"""
-        return _libBornAgainSample.Pyramid2_clone(self)
+        r"""clone(BarGauss self) -> BarGauss"""
+        return _libBornAgainSample.BarGauss_clone(self)
 
     def className(self):
-        r"""className(Pyramid2 self) -> std::string"""
-        return _libBornAgainSample.Pyramid2_className(self)
+        r"""className(BarGauss self) -> std::string"""
+        return _libBornAgainSample.BarGauss_className(self)
 
     def parDefs(self):
-        r"""parDefs(Pyramid2 self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
-        return _libBornAgainSample.Pyramid2_parDefs(self)
-
-    def length(self):
-        r"""length(Pyramid2 self) -> double"""
-        return _libBornAgainSample.Pyramid2_length(self)
-
-    def width(self):
-        r"""width(Pyramid2 self) -> double"""
-        return _libBornAgainSample.Pyramid2_width(self)
-
-    def height(self):
-        r"""height(Pyramid2 self) -> double"""
-        return _libBornAgainSample.Pyramid2_height(self)
-
-    def alpha(self):
-        r"""alpha(Pyramid2 self) -> double"""
-        return _libBornAgainSample.Pyramid2_alpha(self)
-    __swig_destroy__ = _libBornAgainSample.delete_Pyramid2
+        r"""parDefs(BarGauss self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
+        return _libBornAgainSample.BarGauss_parDefs(self)
+    __swig_destroy__ = _libBornAgainSample.delete_BarGauss
 
-# Register Pyramid2 in _libBornAgainSample:
-_libBornAgainSample.Pyramid2_swigregister(Pyramid2)
-class Pyramid3(IFormFactorPolyhedron):
-    r"""Proxy of C++ Pyramid3 class."""
+# 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__(Pyramid3 self, double base_edge, double height, double alpha) -> Pyramid3
-        __init__(Pyramid3 self, vdouble1d_t P) -> Pyramid3
+        __init__(BarLorentz self, double length, double width, double height) -> BarLorentz
+        __init__(BarLorentz self, vdouble1d_t P) -> BarLorentz
         """
-        _libBornAgainSample.Pyramid3_swiginit(self, _libBornAgainSample.new_Pyramid3(*args))
+        _libBornAgainSample.BarLorentz_swiginit(self, _libBornAgainSample.new_BarLorentz(*args))
 
     def clone(self):
-        r"""clone(Pyramid3 self) -> Pyramid3"""
-        return _libBornAgainSample.Pyramid3_clone(self)
+        r"""clone(BarLorentz self) -> BarLorentz"""
+        return _libBornAgainSample.BarLorentz_clone(self)
 
     def className(self):
-        r"""className(Pyramid3 self) -> std::string"""
-        return _libBornAgainSample.Pyramid3_className(self)
+        r"""className(BarLorentz self) -> std::string"""
+        return _libBornAgainSample.BarLorentz_className(self)
 
     def parDefs(self):
-        r"""parDefs(Pyramid3 self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
-        return _libBornAgainSample.Pyramid3_parDefs(self)
-
-    def baseEdge(self):
-        r"""baseEdge(Pyramid3 self) -> double"""
-        return _libBornAgainSample.Pyramid3_baseEdge(self)
-
-    def height(self):
-        r"""height(Pyramid3 self) -> double"""
-        return _libBornAgainSample.Pyramid3_height(self)
-
-    def alpha(self):
-        r"""alpha(Pyramid3 self) -> double"""
-        return _libBornAgainSample.Pyramid3_alpha(self)
-    __swig_destroy__ = _libBornAgainSample.delete_Pyramid3
+        r"""parDefs(BarLorentz self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
+        return _libBornAgainSample.BarLorentz_parDefs(self)
+    __swig_destroy__ = _libBornAgainSample.delete_BarLorentz
 
-# Register Pyramid3 in _libBornAgainSample:
-_libBornAgainSample.Pyramid3_swigregister(Pyramid3)
-class Pyramid4(IFormFactorPolyhedron):
-    r"""Proxy of C++ Pyramid4 class."""
+# 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__(Pyramid4 self, double base_edge, double height, double alpha) -> Pyramid4
-        __init__(Pyramid4 self, vdouble1d_t P) -> Pyramid4
+        __init__(CosineRippleBox self, double length, double width, double height) -> CosineRippleBox
+        __init__(CosineRippleBox self, vdouble1d_t P) -> CosineRippleBox
         """
-        _libBornAgainSample.Pyramid4_swiginit(self, _libBornAgainSample.new_Pyramid4(*args))
+        _libBornAgainSample.CosineRippleBox_swiginit(self, _libBornAgainSample.new_CosineRippleBox(*args))
 
     def clone(self):
-        r"""clone(Pyramid4 self) -> Pyramid4"""
-        return _libBornAgainSample.Pyramid4_clone(self)
+        r"""clone(CosineRippleBox self) -> CosineRippleBox"""
+        return _libBornAgainSample.CosineRippleBox_clone(self)
 
     def className(self):
-        r"""className(Pyramid4 self) -> std::string"""
-        return _libBornAgainSample.Pyramid4_className(self)
+        r"""className(CosineRippleBox self) -> std::string"""
+        return _libBornAgainSample.CosineRippleBox_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(CosineRippleBox self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
+        return _libBornAgainSample.CosineRippleBox_parDefs(self)
+    __swig_destroy__ = _libBornAgainSample.delete_CosineRippleBox
 
-# Register Pyramid4 in _libBornAgainSample:
-_libBornAgainSample.Pyramid4_swigregister(Pyramid4)
-class Pyramid6(IFormFactorPolyhedron):
-    r"""Proxy of C++ Pyramid6 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__(Pyramid6 self, double base_edge, double height, double alpha) -> Pyramid6
-        __init__(Pyramid6 self, vdouble1d_t P) -> Pyramid6
+        __init__(CosineRippleGauss self, double length, double width, double height) -> CosineRippleGauss
+        __init__(CosineRippleGauss self, vdouble1d_t P) -> CosineRippleGauss
         """
-        _libBornAgainSample.Pyramid6_swiginit(self, _libBornAgainSample.new_Pyramid6(*args))
+        _libBornAgainSample.CosineRippleGauss_swiginit(self, _libBornAgainSample.new_CosineRippleGauss(*args))
 
     def clone(self):
-        r"""clone(Pyramid6 self) -> Pyramid6"""
-        return _libBornAgainSample.Pyramid6_clone(self)
+        r"""clone(CosineRippleGauss self) -> CosineRippleGauss"""
+        return _libBornAgainSample.CosineRippleGauss_clone(self)
 
     def className(self):
-        r"""className(Pyramid6 self) -> std::string"""
-        return _libBornAgainSample.Pyramid6_className(self)
+        r"""className(CosineRippleGauss self) -> std::string"""
+        return _libBornAgainSample.CosineRippleGauss_className(self)
 
     def parDefs(self):
-        r"""parDefs(Pyramid6 self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
-        return _libBornAgainSample.Pyramid6_parDefs(self)
+        r"""parDefs(CosineRippleGauss self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"""
+        return _libBornAgainSample.CosineRippleGauss_parDefs(self)
+    __swig_destroy__ = _libBornAgainSample.delete_CosineRippleGauss
 
-    def baseEdge(self):
-        r"""baseEdge(Pyramid6 self) -> double"""
-        return _libBornAgainSample.Pyramid6_baseEdge(self)
+# Register CosineRippleGauss in _libBornAgainSample:
+_libBornAgainSample.CosineRippleGauss_swigregister(CosineRippleGauss)
+class CosineRippleLorentz(ICosineRipple):
+    r"""Proxy of C++ CosineRippleLorentz class."""
 
-    def height(self):
-        r"""height(Pyramid6 self) -> double"""
-        return _libBornAgainSample.Pyramid6_height(self)
+    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
+    __repr__ = _swig_repr
 
-    def alpha(self):
-        r"""alpha(Pyramid6 self) -> double"""
-        return _libBornAgainSample.Pyramid6_alpha(self)
+    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 validate(self):
-        r"""validate(Pyramid6 self) -> std::string"""
-        return _libBornAgainSample.Pyramid6_validate(self)
-    __swig_destroy__ = _libBornAgainSample.delete_Pyramid6
+    def clone(self):
+        r"""clone(CosineRippleLorentz self) -> CosineRippleLorentz"""
+        return _libBornAgainSample.CosineRippleLorentz_clone(self)
 
-# Register Pyramid6 in _libBornAgainSample:
-_libBornAgainSample.Pyramid6_swigregister(Pyramid6)
+    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 SawtoothRippleBox(ISawtoothRipple):
     r"""Proxy of C++ SawtoothRippleBox class."""
 
@@ -6019,154 +6023,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 dd0864115b21463db562c1ae773efffe32e37dab..c267d66b3c4b30a68d4d35caf1ea16f48171aa68 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,20 +48709,89 @@ 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);
+  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 *_wrap_Box_width(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 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_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_Box_height(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 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_Box, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Box_height" "', argument " "1"" of type '" "Box const *""'"); 
+  }
+  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_delete_Box(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 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_Box, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Box" "', argument " "1"" of type '" "Box *""'"); 
+  }
+  arg1 = reinterpret_cast< Box * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -48731,94 +48800,86 @@ fail:
 }
 
 
-SWIGINTERN PyObject *BarGauss_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_BarGauss, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_Box, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *BarGauss_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *Box_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_new_Prism3__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 ;
-  BarLorentz *result = 0 ;
+  Prism3 *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_BarLorentz" "', 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_BarLorentz" "', 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_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 );
+  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_BarLorentz__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 ;
-  BarLorentz *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_BarLorentz" "', 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 = (BarLorentz *)new BarLorentz(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_BarLorentz, 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_BarLorentz(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_Prism3(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
-  PyObject *argv[4] = {
+  PyObject *argv[3] = {
     0
   };
   
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_BarLorentz", 0, 3, 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_BarLorentz__SWIG_1(self, argc, argv);
+      return _wrap_new_Prism3__SWIG_1(self, argc, argv);
     }
   }
-  if (argc == 3) {
+  if (argc == 2) {
     int _v = 0;
     {
       int res = SWIG_AsVal_double(argv[0], NULL);
@@ -48830,52 +48891,46 @@ SWIGINTERN PyObject *_wrap_new_BarLorentz(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_BarLorentz__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_BarLorentz'.\n"
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_Prism3'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    BarLorentz::BarLorentz(double,double,double)\n"
-    "    BarLorentz::BarLorentz(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_BarLorentz_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Prism3_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  BarLorentz *arg1 = (BarLorentz *) 0 ;
+  Prism3 *arg1 = (Prism3 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  BarLorentz *result = 0 ;
+  Prism3 *result = 0 ;
   
   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_Prism3, 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 '" "Prism3_clone" "', argument " "1"" of type '" "Prism3 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< 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_BarLorentz_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Prism3_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  BarLorentz *arg1 = (BarLorentz *) 0 ;
+  Prism3 *arg1 = (Prism3 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -48883,12 +48938,12 @@ SWIGINTERN PyObject *_wrap_BarLorentz_className(PyObject *self, PyObject *args)
   
   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_Prism3, 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 '" "Prism3_className" "', argument " "1"" of type '" "Prism3 const *""'"); 
   }
-  arg1 = reinterpret_cast< BarLorentz * >(argp1);
-  result = ((BarLorentz 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:
@@ -48896,9 +48951,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_BarLorentz_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Prism3_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  BarLorentz *arg1 = (BarLorentz *) 0 ;
+  Prism3 *arg1 = (Prism3 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -48906,12 +48961,12 @@ SWIGINTERN PyObject *_wrap_BarLorentz_parDefs(PyObject *self, PyObject *args) {
   
   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_Prism3, 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 '" "Prism3_parDefs" "', argument " "1"" of type '" "Prism3 const *""'"); 
   }
-  arg1 = reinterpret_cast< BarLorentz * >(argp1);
-  result = ((BarLorentz 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:
@@ -48919,20 +48974,66 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_BarLorentz(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Prism3_baseEdge(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  BarLorentz *arg1 = (BarLorentz *) 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_BarLorentz, SWIG_POINTER_DISOWN |  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 '" "delete_BarLorentz" "', argument " "1"" of type '" "BarLorentz *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Prism3_baseEdge" "', argument " "1"" of type '" "Prism3 const *""'"); 
   }
-  arg1 = reinterpret_cast< BarLorentz * >(argp1);
+  arg1 = reinterpret_cast< Prism3 * >(argp1);
+  result = (double)((Prism3 const *)arg1)->baseEdge();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_Prism3_height(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 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_Prism3, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Prism3_height" "', argument " "1"" of type '" "Prism3 const *""'"); 
+  }
+  arg1 = reinterpret_cast< Prism3 * >(argp1);
+  result = (double)((Prism3 const *)arg1)->height();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_Prism3(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  Prism3 *arg1 = (Prism3 *) 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_Prism3, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Prism3" "', argument " "1"" of type '" "Prism3 *""'"); 
+  }
+  arg1 = reinterpret_cast< Prism3 * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -48941,102 +49042,86 @@ fail:
 }
 
 
-SWIGINTERN PyObject *BarLorentz_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+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_BarLorentz, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_Prism3, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *BarLorentz_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *Prism3_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_Prism6__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 ;
+  Prism6 *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_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_Bipyramid4" "', 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_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 = (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_Bipyramid4__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 ;
-  Bipyramid4 *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_Bipyramid4" "', 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 = (Bipyramid4 *)new Bipyramid4(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Bipyramid4, 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_Bipyramid4(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_Prism6(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_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_Bipyramid4__SWIG_1(self, argc, argv);
+      return _wrap_new_Prism6__SWIG_1(self, argc, argv);
     }
   }
-  if (argc == 4) {
+  if (argc == 2) {
     int _v = 0;
     {
       int res = SWIG_AsVal_double(argv[0], NULL);
@@ -49048,58 +49133,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_Prism6__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_Prism6'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    Bipyramid4::Bipyramid4(double,double,double,double)\n"
-    "    Bipyramid4::Bipyramid4(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_Bipyramid4_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Prism6_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Bipyramid4 *arg1 = (Bipyramid4 *) 0 ;
+  Prism6 *arg1 = (Prism6 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  Bipyramid4 *result = 0 ;
+  Prism6 *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_Prism6, 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 '" "Prism6_clone" "', argument " "1"" of type '" "Prism6 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< 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_Bipyramid4_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Prism6_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Bipyramid4 *arg1 = (Bipyramid4 *) 0 ;
+  Prism6 *arg1 = (Prism6 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -49107,12 +49180,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_Prism6, 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 '" "Prism6_className" "', argument " "1"" of type '" "Prism6 const *""'"); 
   }
-  arg1 = reinterpret_cast< Bipyramid4 * >(argp1);
-  result = ((Bipyramid4 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:
@@ -49120,9 +49193,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Bipyramid4_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Prism6_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Bipyramid4 *arg1 = (Bipyramid4 *) 0 ;
+  Prism6 *arg1 = (Prism6 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -49130,12 +49203,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_Prism6, 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 '" "Prism6_parDefs" "', argument " "1"" of type '" "Prism6 const *""'"); 
   }
-  arg1 = reinterpret_cast< Bipyramid4 * >(argp1);
-  result = ((Bipyramid4 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:
@@ -49143,9 +49216,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Bipyramid4_length(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Prism6_baseEdge(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Bipyramid4 *arg1 = (Bipyramid4 *) 0 ;
+  Prism6 *arg1 = (Prism6 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -49153,12 +49226,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_Prism6, 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 '" "Prism6_baseEdge" "', argument " "1"" of type '" "Prism6 const *""'"); 
   }
-  arg1 = reinterpret_cast< Bipyramid4 * >(argp1);
-  result = (double)((Bipyramid4 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:
@@ -49166,9 +49239,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Bipyramid4_height(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Prism6_height(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Bipyramid4 *arg1 = (Bipyramid4 *) 0 ;
+  Prism6 *arg1 = (Prism6 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -49176,12 +49249,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_Prism6, 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 '" "Prism6_height" "', argument " "1"" of type '" "Prism6 const *""'"); 
   }
-  arg1 = reinterpret_cast< Bipyramid4 * >(argp1);
-  result = (double)((Bipyramid4 const *)arg1)->height();
+  arg1 = reinterpret_cast< Prism6 * >(argp1);
+  result = (double)((Prism6 const *)arg1)->height();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -49189,242 +49262,145 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Bipyramid4_heightRatio(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_Prism6(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Bipyramid4 *arg1 = (Bipyramid4 *) 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_Bipyramid4, 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 '" "Bipyramid4_heightRatio" "', argument " "1"" of type '" "Bipyramid4 const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Prism6" "', argument " "1"" of type '" "Prism6 *""'"); 
   }
-  arg1 = reinterpret_cast< Bipyramid4 * >(argp1);
-  result = (double)((Bipyramid4 const *)arg1)->heightRatio();
-  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_Bipyramid4_alpha(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;
-  Bipyramid4 *arg1 = (Bipyramid4 *) 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_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));
+  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_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) {
-  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 ;
-  
-  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_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_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_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 );
-  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_PlatonicTetrahedron__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   std::vector< double,std::allocator< double > > arg1 ;
-  Box *result = 0 ;
+  PlatonicTetrahedron *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_PlatonicTetrahedron" "', 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 = (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_new_Box(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_PlatonicTetrahedron(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
-  PyObject *argv[4] = {
+  PyObject *argv[2] = {
     0
   };
   
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_Box", 0, 3, argv))) SWIG_fail;
+  if (!(argc = SWIG_Python_UnpackTuple(args, "new_PlatonicTetrahedron", 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_Box__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_Box__SWIG_0(self, argc, argv);
-        }
-      }
+      return _wrap_new_PlatonicTetrahedron__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_PlatonicTetrahedron__SWIG_1(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_PlatonicTetrahedron'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    Box::Box(double,double,double)\n"
-    "    Box::Box(std::vector< double,std::allocator< double > >)\n");
+    "    PlatonicTetrahedron::PlatonicTetrahedron(double)\n"
+    "    PlatonicTetrahedron::PlatonicTetrahedron(std::vector< double,std::allocator< double > >)\n");
   return 0;
 }
 
 
-SWIGINTERN PyObject *_wrap_Box_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_PlatonicTetrahedron_clone(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] ;
-  Box *result = 0 ;
+  PlatonicTetrahedron *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_PlatonicTetrahedron, 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 '" "PlatonicTetrahedron_clone" "', argument " "1"" of type '" "PlatonicTetrahedron 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< 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_className(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] ;
@@ -49432,12 +49408,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_PlatonicTetrahedron, 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 '" "PlatonicTetrahedron_className" "', argument " "1"" of type '" "PlatonicTetrahedron const *""'"); 
   }
-  arg1 = reinterpret_cast< Box * >(argp1);
-  result = ((Box const *)arg1)->className();
+  arg1 = reinterpret_cast< PlatonicTetrahedron * >(argp1);
+  result = ((PlatonicTetrahedron const *)arg1)->className();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -49445,9 +49421,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Box_parDefs(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] ;
@@ -49455,12 +49431,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_PlatonicTetrahedron, 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 '" "PlatonicTetrahedron_parDefs" "', argument " "1"" of type '" "PlatonicTetrahedron const *""'"); 
   }
-  arg1 = reinterpret_cast< Box * >(argp1);
-  result = ((Box const *)arg1)->parDefs();
+  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:
@@ -49468,9 +49444,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Box_length(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_PlatonicTetrahedron_edge(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] ;
@@ -49478,12 +49454,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_PlatonicTetrahedron, 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 '" "PlatonicTetrahedron_edge" "', argument " "1"" of type '" "PlatonicTetrahedron const *""'"); 
   }
-  arg1 = reinterpret_cast< Box * >(argp1);
-  result = (double)((Box const *)arg1)->length();
+  arg1 = reinterpret_cast< PlatonicTetrahedron * >(argp1);
+  result = (double)((PlatonicTetrahedron const *)arg1)->edge();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -49491,9 +49467,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Box_width(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_PlatonicTetrahedron_height(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] ;
@@ -49501,12 +49477,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_PlatonicTetrahedron, 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 '" "PlatonicTetrahedron_height" "', argument " "1"" of type '" "PlatonicTetrahedron const *""'"); 
   }
-  arg1 = reinterpret_cast< Box * >(argp1);
-  result = (double)((Box const *)arg1)->width();
+  arg1 = reinterpret_cast< PlatonicTetrahedron * >(argp1);
+  result = (double)((PlatonicTetrahedron const *)arg1)->height();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -49514,289 +49490,145 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Box_height(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_PlatonicTetrahedron(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] ;
-  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_PlatonicTetrahedron, 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_PlatonicTetrahedron" "', argument " "1"" of type '" "PlatonicTetrahedron *""'"); 
   }
-  arg1 = reinterpret_cast< Box * >(argp1);
-  result = (double)((Box const *)arg1)->height();
-  resultobj = SWIG_From_double(static_cast< double >(result));
+  arg1 = reinterpret_cast< PlatonicTetrahedron * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Box_volume(PyObject *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_PlatonicTetrahedron, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *PlatonicTetrahedron_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) {
   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 ;
+  PlatonicOctahedron *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_PlatonicOctahedron" "', 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 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Box_radialExtension(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 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_Box, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Box_radialExtension" "', argument " "1"" of type '" "Box const *""'"); 
-  }
-  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_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;
-  
-  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] ;
-  std::string result;
-  
-  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_validate" "', argument " "1"" of type '" "Box const *""'"); 
-  }
-  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_Box(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 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_Box, SWIG_POINTER_DISOWN |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Box" "', argument " "1"" of type '" "Box *""'"); 
-  }
-  arg1 = reinterpret_cast< Box * >(argp1);
-  delete arg1;
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-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_Box, SWIG_NewClientData(obj));
-  return SWIG_Py_Void();
-}
-
-SWIGINTERN PyObject *Box_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) {
-  PyObject *resultobj = 0;
-  double arg1 ;
-  double arg2 ;
-  double val1 ;
-  int ecode1 = 0 ;
-  double val2 ;
-  int ecode2 = 0 ;
-  CantellatedCube *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_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_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 );
-  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 +49636,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 +49649,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 +49659,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 +49672,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 +49682,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 +49695,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 +49705,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,196 +49718,145 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_CantellatedCube_validate(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] ;
-  std::string result;
   
   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, SWIG_POINTER_DISOWN |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CantellatedCube_validate" "', argument " "1"" of type '" "CantellatedCube const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_PlatonicOctahedron" "', argument " "1"" of type '" "PlatonicOctahedron *""'"); 
   }
-  arg1 = reinterpret_cast< CantellatedCube * >(argp1);
-  result = ((CantellatedCube const *)arg1)->validate();
-  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  arg1 = reinterpret_cast< PlatonicOctahedron * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_CantellatedCube(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 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_CantellatedCube, SWIG_POINTER_DISOWN |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CantellatedCube" "', argument " "1"" of type '" "CantellatedCube *""'"); 
-  }
-  arg1 = reinterpret_cast< CantellatedCube * >(argp1);
-  delete arg1;
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-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 +49864,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 +49877,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 +49887,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 +49900,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 +49910,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,116 +49923,145 @@ 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) {
+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_new_Icosahedron__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
-  Cone *arg1 = (Cone *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  double result;
+  double arg1 ;
+  double val1 ;
+  int ecode1 = 0 ;
+  Icosahedron *result = 0 ;
   
-  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));
+  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_Cone_radialExtension(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_Icosahedron__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
-  Cone *arg1 = (Cone *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  double result;
+  std::vector< double,std::allocator< double > > arg1 ;
+  Icosahedron *result = 0 ;
   
-  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 *""'"); 
+  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;
   }
-  arg1 = reinterpret_cast< Cone * >(argp1);
-  result = (double)((Cone const *)arg1)->radialExtension();
-  resultobj = SWIG_From_double(static_cast< double >(result));
+  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_Cone_formfactor(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  Cone *arg1 = (Cone *) 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_Icosahedron(PyObject *self, PyObject *args) {
+  Py_ssize_t argc;
+  PyObject *argv[2] = {
+    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 '" "Cone_formfactor" "', argument " "1"" of type '" "Cone const *""'"); 
+  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);
+    }
   }
-  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;
+  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);
     }
   }
-  result = ((Cone 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_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] ;
+  Icosahedron *result = 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 '" "Icosahedron_clone" "', argument " "1"" of type '" "Icosahedron const *""'"); 
+  }
+  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_validate(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Icosahedron_className(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] ;
@@ -50259,12 +50069,12 @@ SWIGINTERN PyObject *_wrap_Cone_validate(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_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_className" "', argument " "1"" of type '" "Icosahedron const *""'"); 
   }
-  arg1 = reinterpret_cast< Cone * >(argp1);
-  result = ((Cone const *)arg1)->validate();
+  arg1 = reinterpret_cast< Icosahedron * >(argp1);
+  result = ((Icosahedron const *)arg1)->className();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -50272,20 +50082,66 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_Cone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Icosahedron_parDefs(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] ;
+  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_Cone, SWIG_POINTER_DISOWN |  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 '" "delete_Cone" "', argument " "1"" of type '" "Cone *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Icosahedron_parDefs" "', argument " "1"" of type '" "Icosahedron const *""'"); 
   }
-  arg1 = reinterpret_cast< Cone * >(argp1);
+  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_Icosahedron_edge(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  Icosahedron *arg1 = (Icosahedron *) 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, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Icosahedron_edge" "', argument " "1"" of type '" "Icosahedron const *""'"); 
+  }
+  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_Icosahedron(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 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_Icosahedron, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Icosahedron" "', argument " "1"" of type '" "Icosahedron *""'"); 
+  }
+  arg1 = reinterpret_cast< Icosahedron * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -50294,94 +50150,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 +50262,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 +50316,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 +50329,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 +50339,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,230 +50352,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_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_length" "', argument " "1"" of type '" "Pyramid2 const *""'"); 
   }
-  arg1 = reinterpret_cast< CosineRippleBox * >(argp1);
-  delete arg1;
-  resultobj = SWIG_Py_Void();
+  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 *CosineRippleBox_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));
-  return SWIG_Py_Void();
-}
-
-SWIGINTERN PyObject *CosineRippleBox_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) {
-  PyObject *resultobj = 0;
-  double arg1 ;
-  double arg2 ;
-  double arg3 ;
-  double val1 ;
-  int ecode1 = 0 ;
-  double val2 ;
-  int ecode2 = 0 ;
-  double val3 ;
-  int ecode3 = 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_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_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_CosineRippleGauss" "', 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 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-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 ;
-  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_CosineRippleGauss" "', 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 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_new_CosineRippleGauss(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;
-  --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);
-    }
-  }
-  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_CosineRippleGauss__SWIG_0(self, argc, argv);
-        }
-      }
-    }
-  }
-  
-fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_CosineRippleGauss'.\n"
-    "  Possible C/C++ prototypes are:\n"
-    "    CosineRippleGauss::CosineRippleGauss(double,double,double)\n"
-    "    CosineRippleGauss::CosineRippleGauss(std::vector< double,std::allocator< double > >)\n");
-  return 0;
-}
-
-
-SWIGINTERN PyObject *_wrap_CosineRippleGauss_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Pyramid2_width(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  CosineRippleGauss *arg1 = (CosineRippleGauss *) 0 ;
+  Pyramid2 *arg1 = (Pyramid2 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  CosineRippleGauss *result = 0 ;
+  double result;
   
   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_Pyramid2, 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 '" "Pyramid2_width" "', argument " "1"" of type '" "Pyramid2 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< Pyramid2 * >(argp1);
+  result = (double)((Pyramid2 const *)arg1)->width();
+  resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_CosineRippleGauss_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Pyramid2_height(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  CosineRippleGauss *arg1 = (CosineRippleGauss *) 0 ;
+  Pyramid2 *arg1 = (Pyramid2 *) 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_CosineRippleGauss, 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 '" "CosineRippleGauss_className" "', argument " "1"" of type '" "CosineRippleGauss const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid2_height" "', argument " "1"" of type '" "Pyramid2 const *""'"); 
   }
-  arg1 = reinterpret_cast< CosineRippleGauss * >(argp1);
-  result = ((CosineRippleGauss const *)arg1)->className();
-  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  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_CosineRippleGauss_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Pyramid2_alpha(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  CosineRippleGauss *arg1 = (CosineRippleGauss *) 0 ;
+  Pyramid2 *arg1 = (Pyramid2 *) 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_CosineRippleGauss, 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 '" "CosineRippleGauss_parDefs" "', argument " "1"" of type '" "CosineRippleGauss const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid2_alpha" "', argument " "1"" of type '" "Pyramid2 const *""'"); 
   }
-  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 );
+  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_CosineRippleGauss(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_Pyramid2(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  CosineRippleGauss *arg1 = (CosineRippleGauss *) 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_CosineRippleGauss, SWIG_POINTER_DISOWN |  0 );
+  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_CosineRippleGauss" "', argument " "1"" of type '" "CosineRippleGauss *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Pyramid2" "', argument " "1"" of type '" "Pyramid2 *""'"); 
   }
-  arg1 = reinterpret_cast< CosineRippleGauss * >(argp1);
+  arg1 = reinterpret_cast< Pyramid2 * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -50714,18 +50466,18 @@ fail:
 }
 
 
-SWIGINTERN PyObject *CosineRippleGauss_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_CosineRippleGauss, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_Pyramid2, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *CosineRippleGauss_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *Pyramid2_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_new_Pyramid3__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
   double arg2 ;
@@ -50736,69 +50488,69 @@ SWIGINTERN PyObject *_wrap_new_CosineRippleLorentz__SWIG_0(PyObject *self, Py_ss
   int ecode2 = 0 ;
   double val3 ;
   int ecode3 = 0 ;
-  CosineRippleLorentz *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_CosineRippleLorentz" "', 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_CosineRippleLorentz" "', 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_CosineRippleLorentz" "', 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 = (CosineRippleLorentz *)new CosineRippleLorentz(arg1,arg2,arg3);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CosineRippleLorentz, 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_CosineRippleLorentz__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 ;
-  CosineRippleLorentz *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_CosineRippleLorentz" "', 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 = (CosineRippleLorentz *)new CosineRippleLorentz(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CosineRippleLorentz, 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_CosineRippleLorentz(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_CosineRippleLorentz", 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_CosineRippleLorentz__SWIG_1(self, argc, argv);
+      return _wrap_new_Pyramid3__SWIG_1(self, argc, argv);
     }
   }
   if (argc == 3) {
@@ -50818,47 +50570,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_Pyramid3__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_Pyramid3'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    CosineRippleLorentz::CosineRippleLorentz(double,double,double)\n"
-    "    CosineRippleLorentz::CosineRippleLorentz(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_CosineRippleLorentz_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Pyramid3_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  CosineRippleLorentz *arg1 = (CosineRippleLorentz *) 0 ;
+  Pyramid3 *arg1 = (Pyramid3 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  CosineRippleLorentz *result = 0 ;
+  Pyramid3 *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_Pyramid3, 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 '" "Pyramid3_clone" "', argument " "1"" of type '" "Pyramid3 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< 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_CosineRippleLorentz_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Pyramid3_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  CosineRippleLorentz *arg1 = (CosineRippleLorentz *) 0 ;
+  Pyramid3 *arg1 = (Pyramid3 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -50866,12 +50618,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_Pyramid3, 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 '" "Pyramid3_className" "', argument " "1"" of type '" "Pyramid3 const *""'"); 
   }
-  arg1 = reinterpret_cast< CosineRippleLorentz * >(argp1);
-  result = ((CosineRippleLorentz 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:
@@ -50879,9 +50631,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_CosineRippleLorentz_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Pyramid3_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  CosineRippleLorentz *arg1 = (CosineRippleLorentz *) 0 ;
+  Pyramid3 *arg1 = (Pyramid3 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -50889,12 +50641,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_Pyramid3, 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 '" "Pyramid3_parDefs" "', argument " "1"" of type '" "Pyramid3 const *""'"); 
   }
-  arg1 = reinterpret_cast< CosineRippleLorentz * >(argp1);
-  result = ((CosineRippleLorentz 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:
@@ -50902,20 +50654,89 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_CosineRippleLorentz(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Pyramid3_baseEdge(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  CosineRippleLorentz *arg1 = (CosineRippleLorentz *) 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_CosineRippleLorentz, 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_CosineRippleLorentz" "', argument " "1"" of type '" "CosineRippleLorentz *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid3_baseEdge" "', argument " "1"" of type '" "Pyramid3 const *""'"); 
   }
-  arg1 = reinterpret_cast< CosineRippleLorentz * >(argp1);
+  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 );
+  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;
@@ -50924,86 +50745,94 @@ fail:
 }
 
 
-SWIGINTERN PyObject *CosineRippleLorentz_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+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_CosineRippleLorentz, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_Pyramid3, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *CosineRippleLorentz_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *Pyramid3_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_Pyramid4__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 ;
+  Pyramid4 *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_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_Cylinder" "', 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);
-  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_Pyramid4" "', 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 );
   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_Pyramid4__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   std::vector< double,std::allocator< double > > arg1 ;
-  Cylinder *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_Cylinder" "', 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 = (Cylinder *)new Cylinder(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Cylinder, 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_Cylinder(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_Pyramid4(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_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_Cylinder__SWIG_1(self, argc, argv);
+      return _wrap_new_Pyramid4__SWIG_1(self, argc, argv);
     }
   }
-  if (argc == 2) {
+  if (argc == 3) {
     int _v = 0;
     {
       int res = SWIG_AsVal_double(argv[0], NULL);
@@ -51015,46 +50844,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_Pyramid4__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_Pyramid4'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    Cylinder::Cylinder(double,double)\n"
-    "    Cylinder::Cylinder(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_Cylinder_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Pyramid4_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Cylinder *arg1 = (Cylinder *) 0 ;
+  Pyramid4 *arg1 = (Pyramid4 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  Cylinder *result = 0 ;
+  Pyramid4 *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_Pyramid4, 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 '" "Pyramid4_clone" "', argument " "1"" of type '" "Pyramid4 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< 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_Cylinder_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Pyramid4_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Cylinder *arg1 = (Cylinder *) 0 ;
+  Pyramid4 *arg1 = (Pyramid4 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -51062,12 +50897,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_Pyramid4, 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 '" "Pyramid4_className" "', argument " "1"" of type '" "Pyramid4 const *""'"); 
   }
-  arg1 = reinterpret_cast< Cylinder * >(argp1);
-  result = ((Cylinder 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:
@@ -51075,9 +50910,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Cylinder_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Pyramid4_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Cylinder *arg1 = (Cylinder *) 0 ;
+  Pyramid4 *arg1 = (Pyramid4 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -51085,12 +50920,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_Pyramid4, 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 '" "Pyramid4_parDefs" "', argument " "1"" of type '" "Pyramid4 const *""'"); 
   }
-  arg1 = reinterpret_cast< Cylinder * >(argp1);
-  result = ((Cylinder 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:
@@ -51098,9 +50933,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Cylinder_height(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Pyramid4_height(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Cylinder *arg1 = (Cylinder *) 0 ;
+  Pyramid4 *arg1 = (Pyramid4 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -51108,12 +50943,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_Pyramid4, 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 '" "Pyramid4_height" "', argument " "1"" of type '" "Pyramid4 const *""'"); 
   }
-  arg1 = reinterpret_cast< Cylinder * >(argp1);
-  result = (double)((Cylinder const *)arg1)->height();
+  arg1 = reinterpret_cast< Pyramid4 * >(argp1);
+  result = (double)((Pyramid4 const *)arg1)->height();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -51121,9 +50956,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Cylinder_radius(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Pyramid4_baseEdge(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Cylinder *arg1 = (Cylinder *) 0 ;
+  Pyramid4 *arg1 = (Pyramid4 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -51131,12 +50966,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_Pyramid4, 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 '" "Pyramid4_baseEdge" "', argument " "1"" of type '" "Pyramid4 const *""'"); 
   }
-  arg1 = reinterpret_cast< Cylinder * >(argp1);
-  result = (double)((Cylinder const *)arg1)->radius();
+  arg1 = reinterpret_cast< Pyramid4 * >(argp1);
+  result = (double)((Pyramid4 const *)arg1)->baseEdge();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -51144,9 +50979,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Cylinder_radialExtension(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Pyramid4_alpha(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Cylinder *arg1 = (Cylinder *) 0 ;
+  Pyramid4 *arg1 = (Pyramid4 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -51154,12 +50989,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_Pyramid4, 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 '" "Pyramid4_alpha" "', argument " "1"" of type '" "Pyramid4 const *""'"); 
   }
-  arg1 = reinterpret_cast< Cylinder * >(argp1);
-  result = (double)((Cylinder const *)arg1)->radialExtension();
+  arg1 = reinterpret_cast< Pyramid4 * >(argp1);
+  result = (double)((Pyramid4 const *)arg1)->alpha();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -51167,206 +51002,173 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Cylinder_formfactor(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_Pyramid4(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Cylinder *arg1 = (Cylinder *) 0 ;
-  C3 arg2 ;
+  Pyramid4 *arg1 = (Pyramid4 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
-  void *argp2 ;
-  int res2 = 0 ;
-  PyObject *swig_obj[2] ;
-  complex_t result;
+  PyObject *swig_obj[1] ;
   
-  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 (!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 '" "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;
-    }
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Pyramid4" "', argument " "1"" of type '" "Pyramid4 *""'"); 
   }
-  result = ((Cylinder const *)arg1)->formfactor(arg2);
-  resultobj = SWIG_From_std_complex_Sl_double_Sg_(static_cast< std::complex<double> >(result));
+  arg1 = reinterpret_cast< Pyramid4 * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Cylinder_validate(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  Cylinder *arg1 = (Cylinder *) 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_Cylinder, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Cylinder_validate" "', argument " "1"" of type '" "Cylinder const *""'"); 
-  }
-  arg1 = reinterpret_cast< Cylinder * >(argp1);
-  result = ((Cylinder const *)arg1)->validate();
-  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-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) {
+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_Cylinder, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_Pyramid4, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *Cylinder_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *Pyramid4_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_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 ;
-  Dodecahedron *result = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  Pyramid6 *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_Dodecahedron" "', 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);
-  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_Pyramid6" "', 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""'");
+  } 
+  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_Dodecahedron__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 ;
-  Dodecahedron *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_Dodecahedron" "', 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 = (Dodecahedron *)new Dodecahedron(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Dodecahedron, 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_Dodecahedron(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_Pyramid6(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
-  PyObject *argv[2] = {
+  PyObject *argv[4] = {
     0
   };
   
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_Dodecahedron", 0, 1, 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_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_Dodecahedron__SWIG_0(self, argc, argv);
+      return _wrap_new_Pyramid6__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_Dodecahedron__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_Pyramid6__SWIG_0(self, argc, argv);
+        }
+      }
     }
   }
   
 fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_Dodecahedron'.\n"
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_Pyramid6'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    Dodecahedron::Dodecahedron(double)\n"
-    "    Dodecahedron::Dodecahedron(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_Dodecahedron_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Pyramid6_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Dodecahedron *arg1 = (Dodecahedron *) 0 ;
+  Pyramid6 *arg1 = (Pyramid6 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  Dodecahedron *result = 0 ;
+  Pyramid6 *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_Pyramid6, 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 '" "Pyramid6_clone" "', argument " "1"" of type '" "Pyramid6 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< 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_Dodecahedron_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Pyramid6_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Dodecahedron *arg1 = (Dodecahedron *) 0 ;
+  Pyramid6 *arg1 = (Pyramid6 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -51374,12 +51176,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_Pyramid6, 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 '" "Pyramid6_className" "', argument " "1"" of type '" "Pyramid6 const *""'"); 
   }
-  arg1 = reinterpret_cast< Dodecahedron * >(argp1);
-  result = ((Dodecahedron 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:
@@ -51387,9 +51189,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Dodecahedron_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Pyramid6_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Dodecahedron *arg1 = (Dodecahedron *) 0 ;
+  Pyramid6 *arg1 = (Pyramid6 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -51397,12 +51199,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_Pyramid6, 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 '" "Pyramid6_parDefs" "', argument " "1"" of type '" "Pyramid6 const *""'"); 
   }
-  arg1 = reinterpret_cast< Dodecahedron * >(argp1);
-  result = ((Dodecahedron 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:
@@ -51410,9 +51212,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Dodecahedron_edge(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Pyramid6_baseEdge(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Dodecahedron *arg1 = (Dodecahedron *) 0 ;
+  Pyramid6 *arg1 = (Pyramid6 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -51420,12 +51222,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_Pyramid6, 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 '" "Pyramid6_baseEdge" "', argument " "1"" of type '" "Pyramid6 const *""'"); 
   }
-  arg1 = reinterpret_cast< Dodecahedron * >(argp1);
-  result = (double)((Dodecahedron const *)arg1)->edge();
+  arg1 = reinterpret_cast< Pyramid6 * >(argp1);
+  result = (double)((Pyramid6 const *)arg1)->baseEdge();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -51433,20 +51235,66 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_Dodecahedron(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Pyramid6_height(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Dodecahedron *arg1 = (Dodecahedron *) 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_Dodecahedron, SWIG_POINTER_DISOWN |  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 '" "delete_Dodecahedron" "', argument " "1"" of type '" "Dodecahedron *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Pyramid6_height" "', argument " "1"" of type '" "Pyramid6 const *""'"); 
   }
-  arg1 = reinterpret_cast< Dodecahedron * >(argp1);
+  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_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);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -51455,94 +51303,102 @@ fail:
 }
 
 
-SWIGINTERN PyObject *Dodecahedron_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_Dodecahedron, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_Pyramid6, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *Dodecahedron_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *Pyramid6_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_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 ;
   double val2 ;
   int ecode2 = 0 ;
   double val3 ;
   int ecode3 = 0 ;
-  EllipsoidalCylinder *result = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  Bipyramid4 *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_EllipsoidalCylinder" "', 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);
   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_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_EllipsoidalCylinder" "', argument " "3"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_Bipyramid4" "', 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 );
+  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_EllipsoidalCylinder__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 ;
-  EllipsoidalCylinder *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_EllipsoidalCylinder" "', 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 = (EllipsoidalCylinder *)new EllipsoidalCylinder(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_EllipsoidalCylinder, 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_EllipsoidalCylinder(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_Bipyramid4(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
-  PyObject *argv[4] = {
+  PyObject *argv[5] = {
     0
   };
   
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_EllipsoidalCylinder", 0, 3, 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::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_Bipyramid4__SWIG_1(self, argc, argv);
     }
   }
-  if (argc == 3) {
+  if (argc == 4) {
     int _v = 0;
     {
       int res = SWIG_AsVal_double(argv[0], NULL);
@@ -51559,47 +51415,53 @@ SWIGINTERN PyObject *_wrap_new_EllipsoidalCylinder(PyObject *self, PyObject *arg
           _v = SWIG_CheckState(res);
         }
         if (_v) {
-          return _wrap_new_EllipsoidalCylinder__SWIG_0(self, argc, argv);
+          {
+            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_EllipsoidalCylinder'.\n"
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_Bipyramid4'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    EllipsoidalCylinder::EllipsoidalCylinder(double,double,double)\n"
-    "    EllipsoidalCylinder::EllipsoidalCylinder(std::vector< double,std::allocator< double > >)\n");
+    "    Bipyramid4::Bipyramid4(double,double,double,double)\n"
+    "    Bipyramid4::Bipyramid4(std::vector< double,std::allocator< double > >)\n");
   return 0;
 }
 
 
-SWIGINTERN PyObject *_wrap_EllipsoidalCylinder_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Bipyramid4_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  EllipsoidalCylinder *arg1 = (EllipsoidalCylinder *) 0 ;
+  Bipyramid4 *arg1 = (Bipyramid4 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  EllipsoidalCylinder *result = 0 ;
+  Bipyramid4 *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_Bipyramid4, 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 '" "Bipyramid4_clone" "', argument " "1"" of type '" "Bipyramid4 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< 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_EllipsoidalCylinder_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Bipyramid4_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  EllipsoidalCylinder *arg1 = (EllipsoidalCylinder *) 0 ;
+  Bipyramid4 *arg1 = (Bipyramid4 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -51607,12 +51469,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_Bipyramid4, 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 '" "Bipyramid4_className" "', argument " "1"" of type '" "Bipyramid4 const *""'"); 
   }
-  arg1 = reinterpret_cast< EllipsoidalCylinder * >(argp1);
-  result = ((EllipsoidalCylinder 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:
@@ -51620,9 +51482,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_EllipsoidalCylinder_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Bipyramid4_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  EllipsoidalCylinder *arg1 = (EllipsoidalCylinder *) 0 ;
+  Bipyramid4 *arg1 = (Bipyramid4 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -51630,12 +51492,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_Bipyramid4, 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 '" "Bipyramid4_parDefs" "', argument " "1"" of type '" "Bipyramid4 const *""'"); 
   }
-  arg1 = reinterpret_cast< EllipsoidalCylinder * >(argp1);
-  result = ((EllipsoidalCylinder 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:
@@ -51643,9 +51505,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_EllipsoidalCylinder_radiusX(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Bipyramid4_length(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  EllipsoidalCylinder *arg1 = (EllipsoidalCylinder *) 0 ;
+  Bipyramid4 *arg1 = (Bipyramid4 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -51653,12 +51515,12 @@ SWIGINTERN PyObject *_wrap_EllipsoidalCylinder_radiusX(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_Bipyramid4, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "EllipsoidalCylinder_radiusX" "', argument " "1"" of type '" "EllipsoidalCylinder const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Bipyramid4_length" "', argument " "1"" of type '" "Bipyramid4 const *""'"); 
   }
-  arg1 = reinterpret_cast< EllipsoidalCylinder * >(argp1);
-  result = (double)((EllipsoidalCylinder const *)arg1)->radiusX();
+  arg1 = reinterpret_cast< Bipyramid4 * >(argp1);
+  result = (double)((Bipyramid4 const *)arg1)->length();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -51666,9 +51528,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_EllipsoidalCylinder_radiusY(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Bipyramid4_height(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  EllipsoidalCylinder *arg1 = (EllipsoidalCylinder *) 0 ;
+  Bipyramid4 *arg1 = (Bipyramid4 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -51676,12 +51538,12 @@ SWIGINTERN PyObject *_wrap_EllipsoidalCylinder_radiusY(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_Bipyramid4, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "EllipsoidalCylinder_radiusY" "', argument " "1"" of type '" "EllipsoidalCylinder const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Bipyramid4_height" "', argument " "1"" of type '" "Bipyramid4 const *""'"); 
   }
-  arg1 = reinterpret_cast< EllipsoidalCylinder * >(argp1);
-  result = (double)((EllipsoidalCylinder const *)arg1)->radiusY();
+  arg1 = reinterpret_cast< Bipyramid4 * >(argp1);
+  result = (double)((Bipyramid4 const *)arg1)->height();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -51689,9 +51551,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_EllipsoidalCylinder_height(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Bipyramid4_heightRatio(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  EllipsoidalCylinder *arg1 = (EllipsoidalCylinder *) 0 ;
+  Bipyramid4 *arg1 = (Bipyramid4 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -51699,12 +51561,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_Bipyramid4, 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 '" "Bipyramid4_heightRatio" "', argument " "1"" of type '" "Bipyramid4 const *""'"); 
   }
-  arg1 = reinterpret_cast< EllipsoidalCylinder * >(argp1);
-  result = (double)((EllipsoidalCylinder const *)arg1)->height();
+  arg1 = reinterpret_cast< Bipyramid4 * >(argp1);
+  result = (double)((Bipyramid4 const *)arg1)->heightRatio();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -51712,9 +51574,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_EllipsoidalCylinder_radialExtension(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Bipyramid4_alpha(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  EllipsoidalCylinder *arg1 = (EllipsoidalCylinder *) 0 ;
+  Bipyramid4 *arg1 = (Bipyramid4 *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -51722,12 +51584,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_Bipyramid4, 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 '" "Bipyramid4_alpha" "', argument " "1"" of type '" "Bipyramid4 const *""'"); 
   }
-  arg1 = reinterpret_cast< EllipsoidalCylinder * >(argp1);
-  result = (double)((EllipsoidalCylinder const *)arg1)->radialExtension();
+  arg1 = reinterpret_cast< Bipyramid4 * >(argp1);
+  result = (double)((Bipyramid4 const *)arg1)->alpha();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -51735,81 +51597,20 @@ 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) {
-  PyObject *resultobj = 0;
-  EllipsoidalCylinder *arg1 = (EllipsoidalCylinder *) 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_EllipsoidalCylinder, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "EllipsoidalCylinder_validate" "', argument " "1"" of type '" "EllipsoidalCylinder const *""'"); 
-  }
-  arg1 = reinterpret_cast< EllipsoidalCylinder * >(argp1);
-  result = ((EllipsoidalCylinder const *)arg1)->validate();
-  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_delete_EllipsoidalCylinder(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_Bipyramid4(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  EllipsoidalCylinder *arg1 = (EllipsoidalCylinder *) 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_EllipsoidalCylinder, SWIG_POINTER_DISOWN |  0 );
+  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_EllipsoidalCylinder" "', argument " "1"" of type '" "EllipsoidalCylinder *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Bipyramid4" "', argument " "1"" of type '" "Bipyramid4 *""'"); 
   }
-  arg1 = reinterpret_cast< EllipsoidalCylinder * >(argp1);
+  arg1 = reinterpret_cast< Bipyramid4 * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -51818,145 +51619,83 @@ fail:
 }
 
 
-SWIGINTERN PyObject *EllipsoidalCylinder_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_EllipsoidalCylinder, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_Bipyramid4, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *EllipsoidalCylinder_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *Bipyramid4_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_CantellatedCube__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 ;
+  CantellatedCube *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""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_CantellatedCube" "', argument " "1"" of type '" "double""'");
   } 
   arg1 = static_cast< double >(val1);
-  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_CantellatedCube" "', 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 = (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_Sphere__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;
-  double arg1 ;
-  double val1 ;
-  int ecode1 = 0 ;
-  Sphere *result = 0 ;
+  std::vector< double,std::allocator< double > > arg1 ;
+  CantellatedCube *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""'");
-  } 
-  arg1 = static_cast< double >(val1);
-  result = (Sphere *)new Sphere(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Sphere, SWIG_POINTER_NEW |  0 );
+  {
+    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 > >""'"); 
+    }
+    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 );
   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);
-  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_Sphere" "', 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 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_new_Sphere(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_CantellatedCube(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_CantellatedCube", 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_CantellatedCube__SWIG_1(self, argc, argv);
     }
   }
   if (argc == 2) {
@@ -51967,66 +51706,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_CantellatedCube__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_CantellatedCube'.\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");
+    "    CantellatedCube::CantellatedCube(double,double)\n"
+    "    CantellatedCube::CantellatedCube(std::vector< double,std::allocator< double > >)\n");
   return 0;
 }
 
 
-SWIGINTERN PyObject *_wrap_Sphere_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_CantellatedCube_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Sphere *arg1 = (Sphere *) 0 ;
+  CantellatedCube *arg1 = (CantellatedCube *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  Sphere *result = 0 ;
+  CantellatedCube *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_CantellatedCube, 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 '" "CantellatedCube_clone" "', argument " "1"" of type '" "CantellatedCube 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< 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_Sphere_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_CantellatedCube_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Sphere *arg1 = (Sphere *) 0 ;
+  CantellatedCube *arg1 = (CantellatedCube *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -52034,12 +51757,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_CantellatedCube, 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 '" "CantellatedCube_className" "', argument " "1"" of type '" "CantellatedCube const *""'"); 
   }
-  arg1 = reinterpret_cast< Sphere * >(argp1);
-  result = ((Sphere 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:
@@ -52047,9 +51770,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Sphere_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_CantellatedCube_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Sphere *arg1 = (Sphere *) 0 ;
+  CantellatedCube *arg1 = (CantellatedCube *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -52057,12 +51780,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_CantellatedCube, 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 '" "CantellatedCube_parDefs" "', argument " "1"" of type '" "CantellatedCube const *""'"); 
   }
-  arg1 = reinterpret_cast< Sphere * >(argp1);
-  result = ((Sphere 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:
@@ -52070,9 +51793,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Sphere_radius(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_CantellatedCube_length(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Sphere *arg1 = (Sphere *) 0 ;
+  CantellatedCube *arg1 = (CantellatedCube *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -52080,12 +51803,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_CantellatedCube, 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 '" "CantellatedCube_length" "', argument " "1"" of type '" "CantellatedCube const *""'"); 
   }
-  arg1 = reinterpret_cast< Sphere * >(argp1);
-  result = (double)((Sphere const *)arg1)->radius();
+  arg1 = reinterpret_cast< CantellatedCube * >(argp1);
+  result = (double)((CantellatedCube const *)arg1)->length();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -52093,9 +51816,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Sphere_radialExtension(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_CantellatedCube_removedLength(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Sphere *arg1 = (Sphere *) 0 ;
+  CantellatedCube *arg1 = (CantellatedCube *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -52103,12 +51826,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_CantellatedCube, 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 '" "CantellatedCube_removedLength" "', argument " "1"" of type '" "CantellatedCube const *""'"); 
   }
-  arg1 = reinterpret_cast< Sphere * >(argp1);
-  result = (double)((Sphere 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:
@@ -52116,81 +51839,20 @@ 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) {
-  PyObject *resultobj = 0;
-  Sphere *arg1 = (Sphere *) 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_Sphere, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Sphere_validate" "', argument " "1"" of type '" "Sphere const *""'"); 
-  }
-  arg1 = reinterpret_cast< Sphere * >(argp1);
-  result = ((Sphere const *)arg1)->validate();
-  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_delete_Sphere(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_CantellatedCube(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Sphere *arg1 = (Sphere *) 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_Sphere, 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_Sphere" "', argument " "1"" of type '" "Sphere *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CantellatedCube" "', argument " "1"" of type '" "CantellatedCube *""'"); 
   }
-  arg1 = reinterpret_cast< Sphere * >(argp1);
+  arg1 = reinterpret_cast< CantellatedCube * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -52199,18 +51861,18 @@ fail:
 }
 
 
-SWIGINTERN PyObject *Sphere_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_Sphere, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_CantellatedCube, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *Sphere_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *CantellatedCube_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_TruncatedCube__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
   double arg2 ;
@@ -52218,64 +51880,64 @@ SWIGINTERN PyObject *_wrap_new_Spheroid__SWIG_0(PyObject *self, Py_ssize_t nobjs
   int ecode1 = 0 ;
   double val2 ;
   int ecode2 = 0 ;
-  Spheroid *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_Spheroid" "', 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);
   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_TruncatedCube" "', 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 );
+  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_Spheroid__SWIG_1(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 ;
-  Spheroid *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_Spheroid" "', 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 = (Spheroid *)new Spheroid(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Spheroid, 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_Spheroid(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_Spheroid", 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::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_TruncatedCube__SWIG_1(self, argc, argv);
     }
   }
   if (argc == 2) {
@@ -52290,46 +51952,46 @@ SWIGINTERN PyObject *_wrap_new_Spheroid(PyObject *self, PyObject *args) {
         _v = SWIG_CheckState(res);
       }
       if (_v) {
-        return _wrap_new_Spheroid__SWIG_0(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_Spheroid'.\n"
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_TruncatedCube'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    Spheroid::Spheroid(double,double)\n"
-    "    Spheroid::Spheroid(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_Spheroid_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_TruncatedCube_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Spheroid *arg1 = (Spheroid *) 0 ;
+  TruncatedCube *arg1 = (TruncatedCube *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  Spheroid *result = 0 ;
+  TruncatedCube *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_TruncatedCube, 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 '" "TruncatedCube_clone" "', argument " "1"" of type '" "TruncatedCube 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< 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_Spheroid_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_TruncatedCube_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Spheroid *arg1 = (Spheroid *) 0 ;
+  TruncatedCube *arg1 = (TruncatedCube *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -52337,12 +51999,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_TruncatedCube, 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 '" "TruncatedCube_className" "', argument " "1"" of type '" "TruncatedCube const *""'"); 
   }
-  arg1 = reinterpret_cast< Spheroid * >(argp1);
-  result = ((Spheroid 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:
@@ -52350,9 +52012,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Spheroid_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_TruncatedCube_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Spheroid *arg1 = (Spheroid *) 0 ;
+  TruncatedCube *arg1 = (TruncatedCube *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -52360,12 +52022,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_TruncatedCube, 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 '" "TruncatedCube_parDefs" "', argument " "1"" of type '" "TruncatedCube const *""'"); 
   }
-  arg1 = reinterpret_cast< Spheroid * >(argp1);
-  result = ((Spheroid 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:
@@ -52373,32 +52035,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Spheroid_height(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 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_Spheroid, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Spheroid_height" "', argument " "1"" of type '" "Spheroid const *""'"); 
-  }
-  arg1 = reinterpret_cast< Spheroid * >(argp1);
-  result = (double)((Spheroid const *)arg1)->height();
-  resultobj = SWIG_From_double(static_cast< double >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_Spheroid_radius(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_TruncatedCube_length(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Spheroid *arg1 = (Spheroid *) 0 ;
+  TruncatedCube *arg1 = (TruncatedCube *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -52406,12 +52045,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_TruncatedCube, 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 '" "TruncatedCube_length" "', argument " "1"" of type '" "TruncatedCube const *""'"); 
   }
-  arg1 = reinterpret_cast< Spheroid * >(argp1);
-  result = (double)((Spheroid 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:
@@ -52419,9 +52058,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Spheroid_radialExtension(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_TruncatedCube_removedLength(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Spheroid *arg1 = (Spheroid *) 0 ;
+  TruncatedCube *arg1 = (TruncatedCube *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -52429,12 +52068,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_TruncatedCube, 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 '" "TruncatedCube_removedLength" "', argument " "1"" of type '" "TruncatedCube const *""'"); 
   }
-  arg1 = reinterpret_cast< Spheroid * >(argp1);
-  result = (double)((Spheroid 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:
@@ -52442,81 +52081,20 @@ fail:
 }
 
 
-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) {
+SWIGINTERN PyObject *_wrap_delete_TruncatedCube(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Spheroid *arg1 = (Spheroid *) 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_Spheroid, 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_Spheroid" "', argument " "1"" of type '" "Spheroid *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_TruncatedCube" "', argument " "1"" of type '" "TruncatedCube *""'"); 
   }
-  arg1 = reinterpret_cast< Spheroid * >(argp1);
+  arg1 = reinterpret_cast< TruncatedCube * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -52525,18 +52103,18 @@ fail:
 }
 
 
-SWIGINTERN PyObject *Spheroid_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_Spheroid, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_TruncatedCube, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *Spheroid_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *TruncatedCube_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_Cone__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
   double arg2 ;
@@ -52547,69 +52125,69 @@ SWIGINTERN PyObject *_wrap_new_HemiEllipsoid__SWIG_0(PyObject *self, Py_ssize_t
   int ecode2 = 0 ;
   double val3 ;
   int ecode3 = 0 ;
-  HemiEllipsoid *result = 0 ;
+  Cone *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_HemiEllipsoid" "', 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_HemiEllipsoid" "', 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);
   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""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_Cone" "', 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 = (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_HemiEllipsoid__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 ;
-  HemiEllipsoid *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_HemiEllipsoid" "', 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 = (HemiEllipsoid *)new HemiEllipsoid(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_HemiEllipsoid, 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_HemiEllipsoid(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_Cone(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
   PyObject *argv[4] = {
     0
   };
   
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_HemiEllipsoid", 0, 3, 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_HemiEllipsoid__SWIG_1(self, argc, argv);
+      return _wrap_new_Cone__SWIG_1(self, argc, argv);
     }
   }
   if (argc == 3) {
@@ -52629,105 +52207,83 @@ SWIGINTERN PyObject *_wrap_new_HemiEllipsoid(PyObject *self, PyObject *args) {
           _v = SWIG_CheckState(res);
         }
         if (_v) {
-          return _wrap_new_HemiEllipsoid__SWIG_0(self, argc, argv);
+          return _wrap_new_Cone__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_Cone'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    HemiEllipsoid::HemiEllipsoid(double,double,double)\n"
-    "    HemiEllipsoid::HemiEllipsoid(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_delete_HemiEllipsoid(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Cone_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  HemiEllipsoid *arg1 = (HemiEllipsoid *) 0 ;
+  Cone *arg1 = (Cone *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
+  Cone *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_Cone, 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 '" "Cone_clone" "', argument " "1"" of type '" "Cone const *""'"); 
   }
-  arg1 = reinterpret_cast< HemiEllipsoid * >(argp1);
-  delete arg1;
-  resultobj = SWIG_Py_Void();
+  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_HemiEllipsoid_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Cone_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  HemiEllipsoid *arg1 = (HemiEllipsoid *) 0 ;
+  Cone *arg1 = (Cone *) 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_Cone, 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 '" "Cone_className" "', argument " "1"" of type '" "Cone 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< Cone * >(argp1);
+  result = ((Cone 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_Cone_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  HemiEllipsoid *arg1 = (HemiEllipsoid *) 0 ;
+  Cone *arg1 = (Cone *) 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_Cone, 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 '" "Cone_parDefs" "', argument " "1"" of type '" "Cone const *""'"); 
   }
-  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_HemiEllipsoid_parDefs(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  HemiEllipsoid *arg1 = (HemiEllipsoid *) 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_HemiEllipsoid, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HemiEllipsoid_parDefs" "', argument " "1"" of type '" "HemiEllipsoid const *""'"); 
-  }
-  arg1 = reinterpret_cast< HemiEllipsoid * >(argp1);
-  result = ((HemiEllipsoid 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:
@@ -52735,9 +52291,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_HemiEllipsoid_height(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Cone_radius(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  HemiEllipsoid *arg1 = (HemiEllipsoid *) 0 ;
+  Cone *arg1 = (Cone *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -52745,12 +52301,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_Cone, 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 '" "Cone_radius" "', argument " "1"" of type '" "Cone const *""'"); 
   }
-  arg1 = reinterpret_cast< HemiEllipsoid * >(argp1);
-  result = (double)((HemiEllipsoid 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:
@@ -52758,9 +52314,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_HemiEllipsoid_radiusX(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Cone_height(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  HemiEllipsoid *arg1 = (HemiEllipsoid *) 0 ;
+  Cone *arg1 = (Cone *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -52768,12 +52324,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_Cone, 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 '" "Cone_height" "', argument " "1"" of type '" "Cone const *""'"); 
   }
-  arg1 = reinterpret_cast< HemiEllipsoid * >(argp1);
-  result = (double)((HemiEllipsoid const *)arg1)->radiusX();
+  arg1 = reinterpret_cast< Cone * >(argp1);
+  result = (double)((Cone const *)arg1)->height();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -52781,9 +52337,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_HemiEllipsoid_radiusY(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Cone_alpha(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  HemiEllipsoid *arg1 = (HemiEllipsoid *) 0 ;
+  Cone *arg1 = (Cone *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -52791,12 +52347,12 @@ SWIGINTERN PyObject *_wrap_HemiEllipsoid_radiusY(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_Cone, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HemiEllipsoid_radiusY" "', argument " "1"" of type '" "HemiEllipsoid const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Cone_alpha" "', argument " "1"" of type '" "Cone const *""'"); 
   }
-  arg1 = reinterpret_cast< HemiEllipsoid * >(argp1);
-  result = (double)((HemiEllipsoid const *)arg1)->radiusY();
+  arg1 = reinterpret_cast< Cone * >(argp1);
+  result = (double)((Cone const *)arg1)->alpha();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -52804,9 +52360,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_HemiEllipsoid_radialExtension(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Cone_radialExtension(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  HemiEllipsoid *arg1 = (HemiEllipsoid *) 0 ;
+  Cone *arg1 = (Cone *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -52814,12 +52370,12 @@ SWIGINTERN PyObject *_wrap_HemiEllipsoid_radialExtension(PyObject *self, PyObjec
   
   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_Cone, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HemiEllipsoid_radialExtension" "', argument " "1"" of type '" "HemiEllipsoid const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Cone_radialExtension" "', argument " "1"" of type '" "Cone const *""'"); 
   }
-  arg1 = reinterpret_cast< HemiEllipsoid * >(argp1);
-  result = (double)((HemiEllipsoid const *)arg1)->radialExtension();
+  arg1 = reinterpret_cast< Cone * >(argp1);
+  result = (double)((Cone const *)arg1)->radialExtension();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -52827,9 +52383,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_HemiEllipsoid_formfactor(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Cone_formfactor(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  HemiEllipsoid *arg1 = (HemiEllipsoid *) 0 ;
+  Cone *arg1 = (Cone *) 0 ;
   C3 arg2 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
@@ -52838,26 +52394,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, "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 '" "HemiEllipsoid_formfactor" "', argument " "1"" of type '" "HemiEllipsoid const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Cone_formfactor" "', argument " "1"" of type '" "Cone const *""'"); 
   }
-  arg1 = reinterpret_cast< HemiEllipsoid * >(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 '" "HemiEllipsoid_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 '" "HemiEllipsoid_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 = ((HemiEllipsoid 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:
@@ -52865,9 +52421,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_HemiEllipsoid_validate(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Cone_validate(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  HemiEllipsoid *arg1 = (HemiEllipsoid *) 0 ;
+  Cone *arg1 = (Cone *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -52875,12 +52431,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_Cone, 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 '" "Cone_validate" "', argument " "1"" of type '" "Cone const *""'"); 
   }
-  arg1 = reinterpret_cast< HemiEllipsoid * >(argp1);
-  result = ((HemiEllipsoid 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:
@@ -52888,63 +52444,40 @@ fail:
 }
 
 
-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_HemiEllipsoid, SWIG_NewClientData(obj));
-  return SWIG_Py_Void();
-}
-
-SWIGINTERN PyObject *HemiEllipsoid_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_delete_Cone(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 ;
-  HorizontalCylinder *result = 0 ;
+  Cone *arg1 = (Cone *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
   
-  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_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);
-  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""'");
-  } 
-  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 );
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  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_Cone" "', argument " "1"" of type '" "Cone *""'"); 
+  }
+  arg1 = reinterpret_cast< Cone * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_HorizontalCylinder__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+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_Cone, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *Cone_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) {
   PyObject *resultobj = 0;
   double arg1 ;
   double arg2 ;
@@ -52952,64 +52485,64 @@ SWIGINTERN PyObject *_wrap_new_HorizontalCylinder__SWIG_1(PyObject *self, Py_ssi
   int ecode1 = 0 ;
   double val2 ;
   int ecode2 = 0 ;
-  HorizontalCylinder *result = 0 ;
+  Cylinder *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""'");
+    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_HorizontalCylinder" "', 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);
-  result = (HorizontalCylinder *)new HorizontalCylinder(arg1,arg2);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_HorizontalCylinder, 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_HorizontalCylinder__SWIG_2(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 ;
-  HorizontalCylinder *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_HorizontalCylinder" "', 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 = (HorizontalCylinder *)new HorizontalCylinder(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_HorizontalCylinder, 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_HorizontalCylinder(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_Cylinder(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
-  PyObject *argv[5] = {
+  PyObject *argv[3] = {
     0
   };
   
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_HorizontalCylinder", 0, 4, 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_HorizontalCylinder__SWIG_2(self, argc, argv);
+      return _wrap_new_Cylinder__SWIG_1(self, argc, argv);
     }
   }
   if (argc == 2) {
@@ -53024,75 +52557,46 @@ SWIGINTERN PyObject *_wrap_new_HorizontalCylinder(PyObject *self, PyObject *args
         _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);
-      _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_HorizontalCylinder__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_HorizontalCylinder'.\n"
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_Cylinder'.\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");
+    "    Cylinder::Cylinder(double,double)\n"
+    "    Cylinder::Cylinder(std::vector< double,std::allocator< double > >)\n");
   return 0;
 }
 
 
-SWIGINTERN PyObject *_wrap_HorizontalCylinder_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Cylinder_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  HorizontalCylinder *arg1 = (HorizontalCylinder *) 0 ;
+  Cylinder *arg1 = (Cylinder *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  HorizontalCylinder *result = 0 ;
+  Cylinder *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_Cylinder, 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 '" "Cylinder_clone" "', argument " "1"" of type '" "Cylinder 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< 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_HorizontalCylinder_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Cylinder_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  HorizontalCylinder *arg1 = (HorizontalCylinder *) 0 ;
+  Cylinder *arg1 = (Cylinder *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -53100,12 +52604,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_Cylinder, 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 '" "Cylinder_className" "', argument " "1"" of type '" "Cylinder const *""'"); 
   }
-  arg1 = reinterpret_cast< HorizontalCylinder * >(argp1);
-  result = ((HorizontalCylinder const *)arg1)->className();
+  arg1 = reinterpret_cast< Cylinder * >(argp1);
+  result = ((Cylinder const *)arg1)->className();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -53113,9 +52617,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_HorizontalCylinder_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Cylinder_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  HorizontalCylinder *arg1 = (HorizontalCylinder *) 0 ;
+  Cylinder *arg1 = (Cylinder *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -53123,12 +52627,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_Cylinder, 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 '" "Cylinder_parDefs" "', argument " "1"" of type '" "Cylinder const *""'"); 
   }
-  arg1 = reinterpret_cast< HorizontalCylinder * >(argp1);
-  result = ((HorizontalCylinder const *)arg1)->parDefs();
+  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:
@@ -53136,55 +52640,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_HorizontalCylinder_length(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_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 *""'"); 
-  }
-  arg1 = reinterpret_cast< HorizontalCylinder * >(argp1);
-  result = (double)((HorizontalCylinder const *)arg1)->radius();
-  resultobj = SWIG_From_double(static_cast< double >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_HorizontalCylinder_slice_bottom(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Cylinder_height(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  HorizontalCylinder *arg1 = (HorizontalCylinder *) 0 ;
+  Cylinder *arg1 = (Cylinder *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -53192,12 +52650,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_Cylinder, 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 '" "Cylinder_height" "', argument " "1"" of type '" "Cylinder const *""'"); 
   }
-  arg1 = reinterpret_cast< HorizontalCylinder * >(argp1);
-  result = (double)((HorizontalCylinder const *)arg1)->slice_bottom();
+  arg1 = reinterpret_cast< Cylinder * >(argp1);
+  result = (double)((Cylinder const *)arg1)->height();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -53205,9 +52663,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_HorizontalCylinder_slice_top(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Cylinder_radius(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  HorizontalCylinder *arg1 = (HorizontalCylinder *) 0 ;
+  Cylinder *arg1 = (Cylinder *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -53215,12 +52673,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_Cylinder, 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 '" "Cylinder_radius" "', argument " "1"" of type '" "Cylinder const *""'"); 
   }
-  arg1 = reinterpret_cast< HorizontalCylinder * >(argp1);
-  result = (double)((HorizontalCylinder const *)arg1)->slice_top();
+  arg1 = reinterpret_cast< Cylinder * >(argp1);
+  result = (double)((Cylinder const *)arg1)->radius();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -53228,9 +52686,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_HorizontalCylinder_radialExtension(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Cylinder_radialExtension(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  HorizontalCylinder *arg1 = (HorizontalCylinder *) 0 ;
+  Cylinder *arg1 = (Cylinder *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -53238,12 +52696,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_Cylinder, 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 '" "Cylinder_radialExtension" "', argument " "1"" of type '" "Cylinder const *""'"); 
   }
-  arg1 = reinterpret_cast< HorizontalCylinder * >(argp1);
-  result = (double)((HorizontalCylinder 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:
@@ -53251,9 +52709,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_HorizontalCylinder_formfactor(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Cylinder_formfactor(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  HorizontalCylinder *arg1 = (HorizontalCylinder *) 0 ;
+  Cylinder *arg1 = (Cylinder *) 0 ;
   C3 arg2 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
@@ -53262,26 +52720,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, "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 '" "HorizontalCylinder_formfactor" "', argument " "1"" of type '" "HorizontalCylinder const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Cylinder_formfactor" "', argument " "1"" of type '" "Cylinder const *""'"); 
   }
-  arg1 = reinterpret_cast< HorizontalCylinder * >(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 '" "HorizontalCylinder_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 '" "HorizontalCylinder_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 = ((HorizontalCylinder 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:
@@ -53289,9 +52747,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_HorizontalCylinder_validate(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Cylinder_validate(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  HorizontalCylinder *arg1 = (HorizontalCylinder *) 0 ;
+  Cylinder *arg1 = (Cylinder *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -53299,12 +52757,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_Cylinder, 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 '" "Cylinder_validate" "', argument " "1"" of type '" "Cylinder const *""'"); 
   }
-  arg1 = reinterpret_cast< HorizontalCylinder * >(argp1);
-  result = ((HorizontalCylinder 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:
@@ -53312,20 +52770,20 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_HorizontalCylinder(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_Cylinder(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  HorizontalCylinder *arg1 = (HorizontalCylinder *) 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_HorizontalCylinder, SWIG_POINTER_DISOWN |  0 );
+  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_HorizontalCylinder" "', argument " "1"" of type '" "HorizontalCylinder *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Cylinder" "', argument " "1"" of type '" "Cylinder *""'"); 
   }
-  arg1 = reinterpret_cast< HorizontalCylinder * >(argp1);
+  arg1 = reinterpret_cast< Cylinder * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -53334,123 +52792,151 @@ fail:
 }
 
 
-SWIGINTERN PyObject *HorizontalCylinder_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+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_HorizontalCylinder, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_Cylinder, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *HorizontalCylinder_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *Cylinder_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_EllipsoidalCylinder__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 ;
+  EllipsoidalCylinder *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_EllipsoidalCylinder" "', 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_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_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 );
   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_EllipsoidalCylinder__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   std::vector< double,std::allocator< double > > arg1 ;
-  Icosahedron *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_Icosahedron" "', 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 = (Icosahedron *)new Icosahedron(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Icosahedron, 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_Icosahedron(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_EllipsoidalCylinder(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_EllipsoidalCylinder", 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_EllipsoidalCylinder__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_EllipsoidalCylinder__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_EllipsoidalCylinder'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    Icosahedron::Icosahedron(double)\n"
-    "    Icosahedron::Icosahedron(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_Icosahedron_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_EllipsoidalCylinder_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Icosahedron *arg1 = (Icosahedron *) 0 ;
+  EllipsoidalCylinder *arg1 = (EllipsoidalCylinder *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  Icosahedron *result = 0 ;
+  EllipsoidalCylinder *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_EllipsoidalCylinder, 0 |  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 '" "EllipsoidalCylinder_clone" "', argument " "1"" of type '" "EllipsoidalCylinder const *""'"); 
   }
-  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< 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_Icosahedron_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_EllipsoidalCylinder_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Icosahedron *arg1 = (Icosahedron *) 0 ;
+  EllipsoidalCylinder *arg1 = (EllipsoidalCylinder *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -53458,12 +52944,12 @@ SWIGINTERN PyObject *_wrap_Icosahedron_className(PyObject *self, PyObject *args)
   
   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_EllipsoidalCylinder, 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 '" "EllipsoidalCylinder_className" "', argument " "1"" of type '" "EllipsoidalCylinder const *""'"); 
   }
-  arg1 = reinterpret_cast< Icosahedron * >(argp1);
-  result = ((Icosahedron 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:
@@ -53471,9 +52957,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Icosahedron_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_EllipsoidalCylinder_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Icosahedron *arg1 = (Icosahedron *) 0 ;
+  EllipsoidalCylinder *arg1 = (EllipsoidalCylinder *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -53481,12 +52967,12 @@ SWIGINTERN PyObject *_wrap_Icosahedron_parDefs(PyObject *self, PyObject *args) {
   
   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_EllipsoidalCylinder, 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 '" "EllipsoidalCylinder_parDefs" "', argument " "1"" of type '" "EllipsoidalCylinder const *""'"); 
   }
-  arg1 = reinterpret_cast< Icosahedron * >(argp1);
-  result = ((Icosahedron 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:
@@ -53494,9 +52980,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Icosahedron_edge(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_EllipsoidalCylinder_radiusX(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Icosahedron *arg1 = (Icosahedron *) 0 ;
+  EllipsoidalCylinder *arg1 = (EllipsoidalCylinder *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -53504,12 +52990,12 @@ SWIGINTERN PyObject *_wrap_Icosahedron_edge(PyObject *self, PyObject *args) {
   
   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_EllipsoidalCylinder, 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 '" "EllipsoidalCylinder_radiusX" "', argument " "1"" of type '" "EllipsoidalCylinder const *""'"); 
   }
-  arg1 = reinterpret_cast< Icosahedron * >(argp1);
-  result = (double)((Icosahedron const *)arg1)->edge();
+  arg1 = reinterpret_cast< EllipsoidalCylinder * >(argp1);
+  result = (double)((EllipsoidalCylinder const *)arg1)->radiusX();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -53517,20 +53003,150 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_Icosahedron(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_EllipsoidalCylinder_radiusY(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Icosahedron *arg1 = (Icosahedron *) 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_Icosahedron, SWIG_POINTER_DISOWN |  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 '" "delete_Icosahedron" "', argument " "1"" of type '" "Icosahedron *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "EllipsoidalCylinder_radiusY" "', argument " "1"" of type '" "EllipsoidalCylinder const *""'"); 
   }
-  arg1 = reinterpret_cast< Icosahedron * >(argp1);
+  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) {
+  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_height" "', argument " "1"" of type '" "EllipsoidalCylinder const *""'"); 
+  }
+  arg1 = reinterpret_cast< EllipsoidalCylinder * >(argp1);
+  result = (double)((EllipsoidalCylinder const *)arg1)->height();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_EllipsoidalCylinder_radialExtension(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_radialExtension" "', argument " "1"" of type '" "EllipsoidalCylinder const *""'"); 
+  }
+  arg1 = reinterpret_cast< EllipsoidalCylinder * >(argp1);
+  result = (double)((EllipsoidalCylinder const *)arg1)->radialExtension();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+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) {
+  PyObject *resultobj = 0;
+  EllipsoidalCylinder *arg1 = (EllipsoidalCylinder *) 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_EllipsoidalCylinder, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "EllipsoidalCylinder_validate" "', argument " "1"" of type '" "EllipsoidalCylinder const *""'"); 
+  }
+  arg1 = reinterpret_cast< EllipsoidalCylinder * >(argp1);
+  result = ((EllipsoidalCylinder const *)arg1)->validate();
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_EllipsoidalCylinder(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 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_EllipsoidalCylinder, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_EllipsoidalCylinder" "', argument " "1"" of type '" "EllipsoidalCylinder *""'"); 
+  }
+  arg1 = reinterpret_cast< EllipsoidalCylinder * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -53539,18 +53155,18 @@ fail:
 }
 
 
-SWIGINTERN PyObject *Icosahedron_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_Icosahedron, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_EllipsoidalCylinder, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *Icosahedron_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *EllipsoidalCylinder_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_HemiEllipsoid__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
   double arg2 ;
@@ -53561,69 +53177,69 @@ SWIGINTERN PyObject *_wrap_new_LongBoxGauss__SWIG_0(PyObject *self, Py_ssize_t n
   int ecode2 = 0 ;
   double val3 ;
   int ecode3 = 0 ;
-  LongBoxGauss *result = 0 ;
+  HemiEllipsoid *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_LongBoxGauss" "', 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);
   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_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_LongBoxGauss" "', argument " "3"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_HemiEllipsoid" "', 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 );
+  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_LongBoxGauss__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 ;
-  LongBoxGauss *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_LongBoxGauss" "', 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 = (LongBoxGauss *)new LongBoxGauss(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_LongBoxGauss, 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_LongBoxGauss(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_HemiEllipsoid(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
   PyObject *argv[4] = {
     0
   };
   
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_LongBoxGauss", 0, 3, 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::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_HemiEllipsoid__SWIG_1(self, argc, argv);
     }
   }
   if (argc == 3) {
@@ -53643,83 +53259,105 @@ SWIGINTERN PyObject *_wrap_new_LongBoxGauss(PyObject *self, PyObject *args) {
           _v = SWIG_CheckState(res);
         }
         if (_v) {
-          return _wrap_new_LongBoxGauss__SWIG_0(self, argc, argv);
+          return _wrap_new_HemiEllipsoid__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_HemiEllipsoid'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    LongBoxGauss::LongBoxGauss(double,double,double)\n"
-    "    LongBoxGauss::LongBoxGauss(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_LongBoxGauss_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_HemiEllipsoid(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  LongBoxGauss *arg1 = (LongBoxGauss *) 0 ;
+  HemiEllipsoid *arg1 = (HemiEllipsoid *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  LongBoxGauss *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_HemiEllipsoid, SWIG_POINTER_DISOWN |  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 '" "delete_HemiEllipsoid" "', argument " "1"" of type '" "HemiEllipsoid *""'"); 
   }
-  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< HemiEllipsoid * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_LongBoxGauss_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_HemiEllipsoid_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  LongBoxGauss *arg1 = (LongBoxGauss *) 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_LongBoxGauss, 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 '" "LongBoxGauss_className" "', argument " "1"" of type '" "LongBoxGauss const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HemiEllipsoid_clone" "', argument " "1"" of type '" "HemiEllipsoid const *""'"); 
   }
-  arg1 = reinterpret_cast< LongBoxGauss * >(argp1);
-  result = ((LongBoxGauss 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_LongBoxGauss_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_HemiEllipsoid_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  LongBoxGauss *arg1 = (LongBoxGauss *) 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_LongBoxGauss, 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 '" "LongBoxGauss_parDefs" "', argument " "1"" of type '" "LongBoxGauss const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HemiEllipsoid_className" "', argument " "1"" of type '" "HemiEllipsoid const *""'"); 
   }
-  arg1 = reinterpret_cast< LongBoxGauss * >(argp1);
-  result = ((LongBoxGauss const *)arg1)->parDefs();
+  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_HemiEllipsoid_parDefs(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  HemiEllipsoid *arg1 = (HemiEllipsoid *) 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_HemiEllipsoid, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HemiEllipsoid_parDefs" "', argument " "1"" of type '" "HemiEllipsoid 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 );
   return resultobj;
 fail:
@@ -53727,9 +53365,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_LongBoxGauss_length(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_HemiEllipsoid_height(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  LongBoxGauss *arg1 = (LongBoxGauss *) 0 ;
+  HemiEllipsoid *arg1 = (HemiEllipsoid *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -53737,12 +53375,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_HemiEllipsoid, 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 '" "HemiEllipsoid_height" "', argument " "1"" of type '" "HemiEllipsoid const *""'"); 
   }
-  arg1 = reinterpret_cast< LongBoxGauss * >(argp1);
-  result = (double)((LongBoxGauss const *)arg1)->length();
+  arg1 = reinterpret_cast< HemiEllipsoid * >(argp1);
+  result = (double)((HemiEllipsoid const *)arg1)->height();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -53750,9 +53388,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_LongBoxGauss_height(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_HemiEllipsoid_radiusX(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  LongBoxGauss *arg1 = (LongBoxGauss *) 0 ;
+  HemiEllipsoid *arg1 = (HemiEllipsoid *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -53760,12 +53398,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_HemiEllipsoid, 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 '" "HemiEllipsoid_radiusX" "', argument " "1"" of type '" "HemiEllipsoid const *""'"); 
   }
-  arg1 = reinterpret_cast< LongBoxGauss * >(argp1);
-  result = (double)((LongBoxGauss const *)arg1)->height();
+  arg1 = reinterpret_cast< HemiEllipsoid * >(argp1);
+  result = (double)((HemiEllipsoid const *)arg1)->radiusX();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -53773,9 +53411,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_LongBoxGauss_width(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_HemiEllipsoid_radiusY(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  LongBoxGauss *arg1 = (LongBoxGauss *) 0 ;
+  HemiEllipsoid *arg1 = (HemiEllipsoid *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -53783,12 +53421,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_HemiEllipsoid, 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 '" "HemiEllipsoid_radiusY" "', argument " "1"" of type '" "HemiEllipsoid const *""'"); 
   }
-  arg1 = reinterpret_cast< LongBoxGauss * >(argp1);
-  result = (double)((LongBoxGauss const *)arg1)->width();
+  arg1 = reinterpret_cast< HemiEllipsoid * >(argp1);
+  result = (double)((HemiEllipsoid const *)arg1)->radiusY();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -53796,9 +53434,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_LongBoxGauss_radialExtension(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_HemiEllipsoid_radialExtension(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  LongBoxGauss *arg1 = (LongBoxGauss *) 0 ;
+  HemiEllipsoid *arg1 = (HemiEllipsoid *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -53806,12 +53444,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_HemiEllipsoid, 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 '" "HemiEllipsoid_radialExtension" "', argument " "1"" of type '" "HemiEllipsoid const *""'"); 
   }
-  arg1 = reinterpret_cast< LongBoxGauss * >(argp1);
-  result = (double)((LongBoxGauss const *)arg1)->radialExtension();
+  arg1 = reinterpret_cast< HemiEllipsoid * >(argp1);
+  result = (double)((HemiEllipsoid const *)arg1)->radialExtension();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -53819,9 +53457,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_LongBoxGauss_formfactor(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_HemiEllipsoid_formfactor(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  LongBoxGauss *arg1 = (LongBoxGauss *) 0 ;
+  HemiEllipsoid *arg1 = (HemiEllipsoid *) 0 ;
   C3 arg2 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
@@ -53830,26 +53468,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, "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 '" "LongBoxGauss_formfactor" "', argument " "1"" of type '" "LongBoxGauss const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HemiEllipsoid_formfactor" "', argument " "1"" of type '" "HemiEllipsoid const *""'"); 
   }
-  arg1 = reinterpret_cast< LongBoxGauss * >(argp1);
+  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 '" "LongBoxGauss_formfactor" "', argument " "2"" of type '" "C3""'"); 
+      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 '" "LongBoxGauss_formfactor" "', argument " "2"" of type '" "C3""'");
+      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 = ((LongBoxGauss const *)arg1)->formfactor(arg2);
+  result = ((HemiEllipsoid const *)arg1)->formfactor(arg2);
   resultobj = SWIG_From_std_complex_Sl_double_Sg_(static_cast< std::complex<double> >(result));
   return resultobj;
 fail:
@@ -53857,9 +53495,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_LongBoxGauss_validate(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_HemiEllipsoid_validate(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  LongBoxGauss *arg1 = (LongBoxGauss *) 0 ;
+  HemiEllipsoid *arg1 = (HemiEllipsoid *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -53867,12 +53505,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_HemiEllipsoid, 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 '" "HemiEllipsoid_validate" "', argument " "1"" of type '" "HemiEllipsoid const *""'"); 
   }
-  arg1 = reinterpret_cast< LongBoxGauss * >(argp1);
-  result = ((LongBoxGauss const *)arg1)->validate();
+  arg1 = reinterpret_cast< HemiEllipsoid * >(argp1);
+  result = ((HemiEllipsoid const *)arg1)->validate();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -53880,116 +53518,147 @@ fail:
 }
 
 
-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;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *LongBoxGauss_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+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_LongBoxGauss, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_HemiEllipsoid, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *LongBoxGauss_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *HemiEllipsoid_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_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 ;
-  LongBoxLorentz *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_LongBoxLorentz" "', 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_LongBoxLorentz" "', 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_LongBoxLorentz" "', 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 = (LongBoxLorentz *)new LongBoxLorentz(arg1,arg2,arg3);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_LongBoxLorentz, 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_LongBoxLorentz__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 ;
-  LongBoxLorentz *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_LongBoxLorentz" "', 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 = (LongBoxLorentz *)new LongBoxLorentz(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_LongBoxLorentz, 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_LongBoxLorentz(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_LongBoxLorentz", 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_LongBoxLorentz__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);
@@ -54006,47 +53675,54 @@ SWIGINTERN PyObject *_wrap_new_LongBoxLorentz(PyObject *self, PyObject *args) {
           _v = SWIG_CheckState(res);
         }
         if (_v) {
-          return _wrap_new_LongBoxLorentz__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_LongBoxLorentz'.\n"
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_HorizontalCylinder'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    LongBoxLorentz::LongBoxLorentz(double,double,double)\n"
-    "    LongBoxLorentz::LongBoxLorentz(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_LongBoxLorentz_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_HorizontalCylinder_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  LongBoxLorentz *arg1 = (LongBoxLorentz *) 0 ;
+  HorizontalCylinder *arg1 = (HorizontalCylinder *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  LongBoxLorentz *result = 0 ;
+  HorizontalCylinder *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_HorizontalCylinder, 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 '" "HorizontalCylinder_clone" "', argument " "1"" of type '" "HorizontalCylinder 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< 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_LongBoxLorentz_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_HorizontalCylinder_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  LongBoxLorentz *arg1 = (LongBoxLorentz *) 0 ;
+  HorizontalCylinder *arg1 = (HorizontalCylinder *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -54054,12 +53730,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_HorizontalCylinder, 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 '" "HorizontalCylinder_className" "', argument " "1"" of type '" "HorizontalCylinder const *""'"); 
   }
-  arg1 = reinterpret_cast< LongBoxLorentz * >(argp1);
-  result = ((LongBoxLorentz 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:
@@ -54067,9 +53743,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_LongBoxLorentz_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_HorizontalCylinder_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  LongBoxLorentz *arg1 = (LongBoxLorentz *) 0 ;
+  HorizontalCylinder *arg1 = (HorizontalCylinder *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -54077,12 +53753,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_HorizontalCylinder, 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 '" "HorizontalCylinder_parDefs" "', argument " "1"" of type '" "HorizontalCylinder const *""'"); 
   }
-  arg1 = reinterpret_cast< LongBoxLorentz * >(argp1);
-  result = ((LongBoxLorentz 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:
@@ -54090,9 +53766,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_LongBoxLorentz_length(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_HorizontalCylinder_length(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  LongBoxLorentz *arg1 = (LongBoxLorentz *) 0 ;
+  HorizontalCylinder *arg1 = (HorizontalCylinder *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -54100,12 +53776,12 @@ SWIGINTERN PyObject *_wrap_LongBoxLorentz_length(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_HorizontalCylinder, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LongBoxLorentz_length" "', argument " "1"" of type '" "LongBoxLorentz const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HorizontalCylinder_length" "', argument " "1"" of type '" "HorizontalCylinder const *""'"); 
   }
-  arg1 = reinterpret_cast< LongBoxLorentz * >(argp1);
-  result = (double)((LongBoxLorentz 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:
@@ -54113,9 +53789,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_LongBoxLorentz_height(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_HorizontalCylinder_radius(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  LongBoxLorentz *arg1 = (LongBoxLorentz *) 0 ;
+  HorizontalCylinder *arg1 = (HorizontalCylinder *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -54123,12 +53799,12 @@ SWIGINTERN PyObject *_wrap_LongBoxLorentz_height(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_HorizontalCylinder, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LongBoxLorentz_height" "', argument " "1"" of type '" "LongBoxLorentz const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HorizontalCylinder_radius" "', argument " "1"" of type '" "HorizontalCylinder const *""'"); 
   }
-  arg1 = reinterpret_cast< LongBoxLorentz * >(argp1);
-  result = (double)((LongBoxLorentz 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:
@@ -54136,9 +53812,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_LongBoxLorentz_width(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_HorizontalCylinder_slice_bottom(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  LongBoxLorentz *arg1 = (LongBoxLorentz *) 0 ;
+  HorizontalCylinder *arg1 = (HorizontalCylinder *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -54146,12 +53822,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_HorizontalCylinder, 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 '" "HorizontalCylinder_slice_bottom" "', argument " "1"" of type '" "HorizontalCylinder const *""'"); 
   }
-  arg1 = reinterpret_cast< LongBoxLorentz * >(argp1);
-  result = (double)((LongBoxLorentz 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:
@@ -54159,9 +53835,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_LongBoxLorentz_radialExtension(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_HorizontalCylinder_slice_top(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  LongBoxLorentz *arg1 = (LongBoxLorentz *) 0 ;
+  HorizontalCylinder *arg1 = (HorizontalCylinder *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -54169,12 +53845,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_HorizontalCylinder, 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 '" "HorizontalCylinder_slice_top" "', argument " "1"" of type '" "HorizontalCylinder const *""'"); 
   }
-  arg1 = reinterpret_cast< LongBoxLorentz * >(argp1);
-  result = (double)((LongBoxLorentz 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:
@@ -54182,9 +53858,32 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_LongBoxLorentz_formfactor(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_HorizontalCylinder_radialExtension(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  LongBoxLorentz *arg1 = (LongBoxLorentz *) 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 ;
@@ -54193,26 +53892,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, "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 '" "LongBoxLorentz_formfactor" "', argument " "1"" of type '" "LongBoxLorentz const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HorizontalCylinder_formfactor" "', argument " "1"" of type '" "HorizontalCylinder const *""'"); 
   }
-  arg1 = reinterpret_cast< LongBoxLorentz * >(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 '" "LongBoxLorentz_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 '" "LongBoxLorentz_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 = ((LongBoxLorentz 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:
@@ -54220,9 +53919,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_LongBoxLorentz_validate(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_HorizontalCylinder_validate(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  LongBoxLorentz *arg1 = (LongBoxLorentz *) 0 ;
+  HorizontalCylinder *arg1 = (HorizontalCylinder *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -54230,12 +53929,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_HorizontalCylinder, 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 '" "HorizontalCylinder_validate" "', argument " "1"" of type '" "HorizontalCylinder const *""'"); 
   }
-  arg1 = reinterpret_cast< LongBoxLorentz * >(argp1);
-  result = ((LongBoxLorentz 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:
@@ -54243,20 +53942,20 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_LongBoxLorentz(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_HorizontalCylinder(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  LongBoxLorentz *arg1 = (LongBoxLorentz *) 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_LongBoxLorentz, 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_LongBoxLorentz" "', argument " "1"" of type '" "LongBoxLorentz *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_HorizontalCylinder" "', argument " "1"" of type '" "HorizontalCylinder *""'"); 
   }
-  arg1 = reinterpret_cast< LongBoxLorentz * >(argp1);
+  arg1 = reinterpret_cast< HorizontalCylinder * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -54265,68 +53964,128 @@ fail:
 }
 
 
-SWIGINTERN PyObject *LongBoxLorentz_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_LongBoxLorentz, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_HorizontalCylinder, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *LongBoxLorentz_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *HorizontalCylinder_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_Sphere__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
+  bool arg2 ;
   double val1 ;
   int ecode1 = 0 ;
-  PlatonicOctahedron *result = 0 ;
+  bool val2 ;
+  int ecode2 = 0 ;
+  Sphere *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_PlatonicOctahedron" "', 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);
-  result = (PlatonicOctahedron *)new PlatonicOctahedron(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_PlatonicOctahedron, 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_PlatonicOctahedron__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 ;
-  PlatonicOctahedron *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_PlatonicOctahedron" "', 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 = (PlatonicOctahedron *)new PlatonicOctahedron(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_PlatonicOctahedron, 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_PlatonicOctahedron(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_Sphere(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_Sphere", 0, 2, argv))) SWIG_fail;
   --argc;
   if (argc == 1) {
     int _v = 0;
@@ -54335,7 +54094,7 @@ SWIGINTERN PyObject *_wrap_new_PlatonicOctahedron(PyObject *self, PyObject *args
       _v = SWIG_CheckState(res);
     }
     if (_v) {
-      return _wrap_new_PlatonicOctahedron__SWIG_0(self, argc, argv);
+      return _wrap_new_Sphere__SWIG_1(self, argc, argv);
     }
   }
   if (argc == 1) {
@@ -54343,45 +54102,77 @@ SWIGINTERN PyObject *_wrap_new_PlatonicOctahedron(PyObject *self, PyObject *args
     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);
+      return _wrap_new_Sphere__SWIG_3(self, argc, argv);
     }
   }
-  
-fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_PlatonicOctahedron'.\n"
-    "  Possible C/C++ prototypes are:\n"
-    "    PlatonicOctahedron::PlatonicOctahedron(double)\n"
-    "    PlatonicOctahedron::PlatonicOctahedron(std::vector< double,std::allocator< double > >)\n");
-  return 0;
-}
-
-
-SWIGINTERN PyObject *_wrap_PlatonicOctahedron_clone(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  PlatonicOctahedron *arg1 = (PlatonicOctahedron *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  PlatonicOctahedron *result = 0 ;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_PlatonicOctahedron, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "PlatonicOctahedron_clone" "', argument " "1"" of type '" "PlatonicOctahedron const *""'"); 
-  }
-  arg1 = reinterpret_cast< PlatonicOctahedron * >(argp1);
-  result = (PlatonicOctahedron *)((PlatonicOctahedron const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_PlatonicOctahedron, 0 |  0 );
+  if (argc == 2) {
+    int _v = 0;
+    {
+      int res = SWIG_AsVal_double(argv[0], NULL);
+      _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_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_Sphere'.\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");
+  return 0;
+}
+
+
+SWIGINTERN PyObject *_wrap_Sphere_clone(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  Sphere *arg1 = (Sphere *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Sphere *result = 0 ;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  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_clone" "', argument " "1"" of type '" "Sphere const *""'"); 
+  }
+  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_PlatonicOctahedron_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Sphere_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  PlatonicOctahedron *arg1 = (PlatonicOctahedron *) 0 ;
+  Sphere *arg1 = (Sphere *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -54389,12 +54180,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_Sphere, 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 '" "Sphere_className" "', argument " "1"" of type '" "Sphere const *""'"); 
   }
-  arg1 = reinterpret_cast< PlatonicOctahedron * >(argp1);
-  result = ((PlatonicOctahedron 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:
@@ -54402,9 +54193,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_PlatonicOctahedron_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Sphere_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  PlatonicOctahedron *arg1 = (PlatonicOctahedron *) 0 ;
+  Sphere *arg1 = (Sphere *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -54412,12 +54203,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_Sphere, 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 '" "Sphere_parDefs" "', argument " "1"" of type '" "Sphere const *""'"); 
   }
-  arg1 = reinterpret_cast< PlatonicOctahedron * >(argp1);
-  result = ((PlatonicOctahedron 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:
@@ -54425,9 +54216,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_PlatonicOctahedron_edge(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Sphere_radius(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  PlatonicOctahedron *arg1 = (PlatonicOctahedron *) 0 ;
+  Sphere *arg1 = (Sphere *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -54435,12 +54226,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_Sphere, 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 '" "Sphere_radius" "', argument " "1"" of type '" "Sphere const *""'"); 
   }
-  arg1 = reinterpret_cast< PlatonicOctahedron * >(argp1);
-  result = (double)((PlatonicOctahedron const *)arg1)->edge();
+  arg1 = reinterpret_cast< Sphere * >(argp1);
+  result = (double)((Sphere const *)arg1)->radius();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -54448,9 +54239,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_PlatonicOctahedron_height(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Sphere_radialExtension(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  PlatonicOctahedron *arg1 = (PlatonicOctahedron *) 0 ;
+  Sphere *arg1 = (Sphere *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -54458,12 +54249,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_Sphere, 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 '" "Sphere_radialExtension" "', argument " "1"" of type '" "Sphere const *""'"); 
   }
-  arg1 = reinterpret_cast< PlatonicOctahedron * >(argp1);
-  result = (double)((PlatonicOctahedron const *)arg1)->height();
+  arg1 = reinterpret_cast< Sphere * >(argp1);
+  result = (double)((Sphere const *)arg1)->radialExtension();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -54471,20 +54262,81 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_PlatonicOctahedron(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Sphere_formfactor(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  PlatonicOctahedron *arg1 = (PlatonicOctahedron *) 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) {
+  PyObject *resultobj = 0;
+  Sphere *arg1 = (Sphere *) 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_PlatonicOctahedron, SWIG_POINTER_DISOWN |  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 '" "delete_PlatonicOctahedron" "', argument " "1"" of type '" "PlatonicOctahedron *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Sphere_validate" "', argument " "1"" of type '" "Sphere const *""'"); 
   }
-  arg1 = reinterpret_cast< PlatonicOctahedron * >(argp1);
+  arg1 = reinterpret_cast< Sphere * >(argp1);
+  result = ((Sphere const *)arg1)->validate();
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_Sphere(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 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_Sphere, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Sphere" "', argument " "1"" of type '" "Sphere *""'"); 
+  }
+  arg1 = reinterpret_cast< Sphere * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -54493,123 +54345,137 @@ fail:
 }
 
 
-SWIGINTERN PyObject *PlatonicOctahedron_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_PlatonicOctahedron, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_Sphere, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *PlatonicOctahedron_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *Sphere_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_Spheroid__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
+  double arg2 ;
   double val1 ;
   int ecode1 = 0 ;
-  PlatonicTetrahedron *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_PlatonicTetrahedron" "', 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 = (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_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_PlatonicTetrahedron__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 ;
-  PlatonicTetrahedron *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_PlatonicTetrahedron" "', 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 = (PlatonicTetrahedron *)new PlatonicTetrahedron(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_PlatonicTetrahedron, 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_PlatonicTetrahedron(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_PlatonicTetrahedron", 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_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_Spheroid__SWIG_1(self, argc, argv);
     }
   }
-  if (argc == 1) {
+  if (argc == 2) {
     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) {
+        return _wrap_new_Spheroid__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_Spheroid'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    PlatonicTetrahedron::PlatonicTetrahedron(double)\n"
-    "    PlatonicTetrahedron::PlatonicTetrahedron(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_PlatonicTetrahedron_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Spheroid_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  PlatonicTetrahedron *arg1 = (PlatonicTetrahedron *) 0 ;
+  Spheroid *arg1 = (Spheroid *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  PlatonicTetrahedron *result = 0 ;
+  Spheroid *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_Spheroid, 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 '" "Spheroid_clone" "', argument " "1"" of type '" "Spheroid 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< 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_PlatonicTetrahedron_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Spheroid_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  PlatonicTetrahedron *arg1 = (PlatonicTetrahedron *) 0 ;
+  Spheroid *arg1 = (Spheroid *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -54617,12 +54483,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_Spheroid, 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 '" "Spheroid_className" "', argument " "1"" of type '" "Spheroid const *""'"); 
   }
-  arg1 = reinterpret_cast< PlatonicTetrahedron * >(argp1);
-  result = ((PlatonicTetrahedron 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:
@@ -54630,9 +54496,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_PlatonicTetrahedron_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Spheroid_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  PlatonicTetrahedron *arg1 = (PlatonicTetrahedron *) 0 ;
+  Spheroid *arg1 = (Spheroid *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -54640,12 +54506,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_Spheroid, 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 '" "Spheroid_parDefs" "', argument " "1"" of type '" "Spheroid const *""'"); 
   }
-  arg1 = reinterpret_cast< PlatonicTetrahedron * >(argp1);
-  result = ((PlatonicTetrahedron 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:
@@ -54653,9 +54519,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_PlatonicTetrahedron_edge(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Spheroid_height(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  PlatonicTetrahedron *arg1 = (PlatonicTetrahedron *) 0 ;
+  Spheroid *arg1 = (Spheroid *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -54663,12 +54529,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_Spheroid, 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 '" "Spheroid_height" "', argument " "1"" of type '" "Spheroid const *""'"); 
   }
-  arg1 = reinterpret_cast< PlatonicTetrahedron * >(argp1);
-  result = (double)((PlatonicTetrahedron 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:
@@ -54676,9 +54542,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_PlatonicTetrahedron_height(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Spheroid_radius(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  PlatonicTetrahedron *arg1 = (PlatonicTetrahedron *) 0 ;
+  Spheroid *arg1 = (Spheroid *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -54686,12 +54552,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_Spheroid, 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 '" "Spheroid_radius" "', argument " "1"" of type '" "Spheroid const *""'"); 
   }
-  arg1 = reinterpret_cast< PlatonicTetrahedron * >(argp1);
-  result = (double)((PlatonicTetrahedron 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:
@@ -54699,20 +54565,104 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_PlatonicTetrahedron(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_Spheroid_radialExtension(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  PlatonicTetrahedron *arg1 = (PlatonicTetrahedron *) 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_PlatonicTetrahedron, 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_PlatonicTetrahedron" "', argument " "1"" of type '" "PlatonicTetrahedron *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Spheroid_radialExtension" "', argument " "1"" of type '" "Spheroid const *""'"); 
   }
-  arg1 = reinterpret_cast< PlatonicTetrahedron * >(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;
@@ -54721,86 +54671,94 @@ fail:
 }
 
 
-SWIGINTERN PyObject *PlatonicTetrahedron_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_PlatonicTetrahedron, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_Spheroid, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *PlatonicTetrahedron_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *Spheroid_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_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 ;
-  Prism3 *result = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  TruncatedSphere *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_Prism3" "', 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);
   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_TruncatedSphere" "', 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_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_Prism3__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 ;
-  Prism3 *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_Prism3" "', 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 = (Prism3 *)new Prism3(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Prism3, 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_Prism3(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_TruncatedSphere(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
-  PyObject *argv[3] = {
+  PyObject *argv[4] = {
     0
   };
   
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_Prism3", 0, 2, 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::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_TruncatedSphere__SWIG_1(self, argc, argv);
     }
   }
-  if (argc == 2) {
+  if (argc == 3) {
     int _v = 0;
     {
       int res = SWIG_AsVal_double(argv[0], NULL);
@@ -54812,46 +54770,52 @@ 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) {
+          return _wrap_new_TruncatedSphere__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_TruncatedSphere'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    Prism3::Prism3(double,double)\n"
-    "    Prism3::Prism3(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_Prism3_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_TruncatedSphere_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Prism3 *arg1 = (Prism3 *) 0 ;
+  TruncatedSphere *arg1 = (TruncatedSphere *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  Prism3 *result = 0 ;
+  TruncatedSphere *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_TruncatedSphere, 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 '" "TruncatedSphere_clone" "', argument " "1"" of type '" "TruncatedSphere 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< 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_Prism3_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_TruncatedSphere_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Prism3 *arg1 = (Prism3 *) 0 ;
+  TruncatedSphere *arg1 = (TruncatedSphere *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -54859,12 +54823,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_TruncatedSphere, 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 '" "TruncatedSphere_className" "', argument " "1"" of type '" "TruncatedSphere const *""'"); 
   }
-  arg1 = reinterpret_cast< Prism3 * >(argp1);
-  result = ((Prism3 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:
@@ -54872,9 +54836,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Prism3_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_TruncatedSphere_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Prism3 *arg1 = (Prism3 *) 0 ;
+  TruncatedSphere *arg1 = (TruncatedSphere *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -54882,12 +54846,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_TruncatedSphere, 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 '" "TruncatedSphere_parDefs" "', argument " "1"" of type '" "TruncatedSphere const *""'"); 
   }
-  arg1 = reinterpret_cast< Prism3 * >(argp1);
-  result = ((Prism3 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:
@@ -54895,9 +54859,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Prism3_baseEdge(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_TruncatedSphere_height(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Prism3 *arg1 = (Prism3 *) 0 ;
+  TruncatedSphere *arg1 = (TruncatedSphere *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -54905,12 +54869,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_TruncatedSphere, 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 '" "TruncatedSphere_height" "', argument " "1"" of type '" "TruncatedSphere const *""'"); 
   }
-  arg1 = reinterpret_cast< Prism3 * >(argp1);
-  result = (double)((Prism3 const *)arg1)->baseEdge();
+  arg1 = reinterpret_cast< TruncatedSphere * >(argp1);
+  result = (double)((TruncatedSphere const *)arg1)->height();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -54918,9 +54882,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Prism3_height(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_TruncatedSphere_radius(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Prism3 *arg1 = (Prism3 *) 0 ;
+  TruncatedSphere *arg1 = (TruncatedSphere *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -54928,12 +54892,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_TruncatedSphere, 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 '" "TruncatedSphere_radius" "', argument " "1"" of type '" "TruncatedSphere const *""'"); 
   }
-  arg1 = reinterpret_cast< Prism3 * >(argp1);
-  result = (double)((Prism3 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:
@@ -54941,20 +54905,127 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_Prism3(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_TruncatedSphere_removedTop(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Prism3 *arg1 = (Prism3 *) 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_Prism3, 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_Prism3" "', argument " "1"" of type '" "Prism3 *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedSphere_removedTop" "', argument " "1"" of type '" "TruncatedSphere const *""'"); 
   }
-  arg1 = reinterpret_cast< Prism3 * >(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;
@@ -54963,86 +55034,102 @@ fail:
 }
 
 
-SWIGINTERN PyObject *Prism3_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_Prism3, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_TruncatedSphere, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *Prism3_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *TruncatedSphere_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_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 ;
-  Prism6 *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_Prism6" "', 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_Prism6" "', 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 = (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_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_Prism6__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 ;
-  Prism6 *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_Prism6" "', 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 = (Prism6 *)new Prism6(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Prism6, 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_Prism6(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_Prism6", 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_Prism6__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);
@@ -55054,46 +55141,58 @@ 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) {
+          {
+            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_Prism6'.\n"
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_TruncatedSpheroid'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    Prism6::Prism6(double,double)\n"
-    "    Prism6::Prism6(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_Prism6_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_TruncatedSpheroid_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Prism6 *arg1 = (Prism6 *) 0 ;
+  TruncatedSpheroid *arg1 = (TruncatedSpheroid *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  Prism6 *result = 0 ;
+  TruncatedSpheroid *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_TruncatedSpheroid, 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 '" "TruncatedSpheroid_clone" "', argument " "1"" of type '" "TruncatedSpheroid 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< 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_Prism6_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_TruncatedSpheroid_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Prism6 *arg1 = (Prism6 *) 0 ;
+  TruncatedSpheroid *arg1 = (TruncatedSpheroid *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -55101,12 +55200,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_TruncatedSpheroid, 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 '" "TruncatedSpheroid_className" "', argument " "1"" of type '" "TruncatedSpheroid const *""'"); 
   }
-  arg1 = reinterpret_cast< Prism6 * >(argp1);
-  result = ((Prism6 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:
@@ -55114,9 +55213,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Prism6_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_TruncatedSpheroid_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Prism6 *arg1 = (Prism6 *) 0 ;
+  TruncatedSpheroid *arg1 = (TruncatedSpheroid *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -55124,12 +55223,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_TruncatedSpheroid, 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 '" "TruncatedSpheroid_parDefs" "', argument " "1"" of type '" "TruncatedSpheroid const *""'"); 
   }
-  arg1 = reinterpret_cast< Prism6 * >(argp1);
-  result = ((Prism6 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:
@@ -55137,9 +55236,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Prism6_baseEdge(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_TruncatedSpheroid_radius(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Prism6 *arg1 = (Prism6 *) 0 ;
+  TruncatedSpheroid *arg1 = (TruncatedSpheroid *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -55147,12 +55246,12 @@ SWIGINTERN PyObject *_wrap_Prism6_baseEdge(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_TruncatedSpheroid, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Prism6_baseEdge" "', argument " "1"" of type '" "Prism6 const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedSpheroid_radius" "', argument " "1"" of type '" "TruncatedSpheroid const *""'"); 
   }
-  arg1 = reinterpret_cast< Prism6 * >(argp1);
-  result = (double)((Prism6 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:
@@ -55160,9 +55259,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Prism6_height(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_TruncatedSpheroid_height(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Prism6 *arg1 = (Prism6 *) 0 ;
+  TruncatedSpheroid *arg1 = (TruncatedSpheroid *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -55170,12 +55269,12 @@ SWIGINTERN PyObject *_wrap_Prism6_height(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_TruncatedSpheroid, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Prism6_height" "', argument " "1"" of type '" "Prism6 const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedSpheroid_height" "', argument " "1"" of type '" "TruncatedSpheroid const *""'"); 
   }
-  arg1 = reinterpret_cast< Prism6 * >(argp1);
-  result = (double)((Prism6 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:
@@ -55183,9 +55282,116 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Prism6_validate(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_TruncatedSpheroid_heightFlattening(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Prism6 *arg1 = (Prism6 *) 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 ;
+  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] ;
@@ -55193,12 +55399,12 @@ SWIGINTERN PyObject *_wrap_Prism6_validate(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_TruncatedSpheroid, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Prism6_validate" "', argument " "1"" of type '" "Prism6 const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedSpheroid_validate" "', argument " "1"" of type '" "TruncatedSpheroid const *""'"); 
   }
-  arg1 = reinterpret_cast< Prism6 * >(argp1);
-  result = ((Prism6 const *)arg1)->validate();
+  arg1 = reinterpret_cast< TruncatedSpheroid * >(argp1);
+  result = ((TruncatedSpheroid const *)arg1)->validate();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -55206,20 +55412,20 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_Prism6(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_TruncatedSpheroid(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Prism6 *arg1 = (Prism6 *) 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_Prism6, SWIG_POINTER_DISOWN |  0 );
+  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_Prism6" "', argument " "1"" of type '" "Prism6 *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_TruncatedSpheroid" "', argument " "1"" of type '" "TruncatedSpheroid *""'"); 
   }
-  arg1 = reinterpret_cast< Prism6 * >(argp1);
+  arg1 = reinterpret_cast< TruncatedSpheroid * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -55228,102 +55434,94 @@ fail:
 }
 
 
-SWIGINTERN PyObject *Prism6_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_Prism6, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_TruncatedSpheroid, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *Prism6_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *TruncatedSpheroid_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_BarGauss__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 ;
+  BarGauss *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_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_Pyramid2" "', 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);
   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_BarGauss" "', 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 = (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_Pyramid2__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 ;
-  Pyramid2 *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_Pyramid2" "', 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 = (Pyramid2 *)new Pyramid2(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Pyramid2, 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_Pyramid2(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_BarGauss(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_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_Pyramid2__SWIG_1(self, argc, argv);
+      return _wrap_new_BarGauss__SWIG_1(self, argc, argv);
     }
   }
-  if (argc == 4) {
+  if (argc == 3) {
     int _v = 0;
     {
       int res = SWIG_AsVal_double(argv[0], NULL);
@@ -55340,53 +55538,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_BarGauss__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_BarGauss'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    Pyramid2::Pyramid2(double,double,double,double)\n"
-    "    Pyramid2::Pyramid2(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_Pyramid2_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_BarGauss_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Pyramid2 *arg1 = (Pyramid2 *) 0 ;
+  BarGauss *arg1 = (BarGauss *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  Pyramid2 *result = 0 ;
+  BarGauss *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_BarGauss, 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 '" "BarGauss_clone" "', argument " "1"" of type '" "BarGauss 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< 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_Pyramid2_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_BarGauss_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Pyramid2 *arg1 = (Pyramid2 *) 0 ;
+  BarGauss *arg1 = (BarGauss *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -55394,12 +55586,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_BarGauss, 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 '" "BarGauss_className" "', argument " "1"" of type '" "BarGauss const *""'"); 
   }
-  arg1 = reinterpret_cast< Pyramid2 * >(argp1);
-  result = ((Pyramid2 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:
@@ -55407,9 +55599,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Pyramid2_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_BarGauss_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Pyramid2 *arg1 = (Pyramid2 *) 0 ;
+  BarGauss *arg1 = (BarGauss *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -55417,12 +55609,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_BarGauss, 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 '" "BarGauss_parDefs" "', argument " "1"" of type '" "BarGauss const *""'"); 
   }
-  arg1 = reinterpret_cast< Pyramid2 * >(argp1);
-  result = ((Pyramid2 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:
@@ -55430,112 +55622,230 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Pyramid2_length(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_BarGauss(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Pyramid2 *arg1 = (Pyramid2 *) 0 ;
+  BarGauss *arg1 = (BarGauss *) 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_BarGauss, 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_BarGauss" "', argument " "1"" of type '" "BarGauss *""'"); 
   }
-  arg1 = reinterpret_cast< Pyramid2 * >(argp1);
-  result = (double)((Pyramid2 const *)arg1)->length();
-  resultobj = SWIG_From_double(static_cast< double >(result));
+  arg1 = reinterpret_cast< BarGauss * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Pyramid2_width(PyObject *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_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) {
   PyObject *resultobj = 0;
-  Pyramid2 *arg1 = (Pyramid2 *) 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 ;
+  
+  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 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+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 ;
+  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_BarLorentz" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
+    }
+    arg1 = *ptr;
+    if (SWIG_IsNewObj(res)) delete ptr;
+  }
+  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_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) {
+  PyObject *resultobj = 0;
+  BarLorentz *arg1 = (BarLorentz *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  double result;
+  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_width" "', 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 = (double)((Pyramid2 const *)arg1)->width();
-  resultobj = SWIG_From_double(static_cast< double >(result));
+  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_height(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] ;
-  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_BarLorentz, 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 '" "BarLorentz_className" "', argument " "1"" of type '" "BarLorentz const *""'"); 
   }
-  arg1 = reinterpret_cast< Pyramid2 * >(argp1);
-  result = (double)((Pyramid2 const *)arg1)->height();
-  resultobj = SWIG_From_double(static_cast< double >(result));
+  arg1 = reinterpret_cast< BarLorentz * >(argp1);
+  result = ((BarLorentz const *)arg1)->className();
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Pyramid2_alpha(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] ;
-  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_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_alpha" "', 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 = (double)((Pyramid2 const *)arg1)->alpha();
-  resultobj = SWIG_From_double(static_cast< double >(result));
+  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:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_Pyramid2(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] ;
   
   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_BarLorentz, SWIG_POINTER_DISOWN |  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 '" "delete_BarLorentz" "', argument " "1"" of type '" "BarLorentz *""'"); 
   }
-  arg1 = reinterpret_cast< Pyramid2 * >(argp1);
+  arg1 = reinterpret_cast< BarLorentz * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -55544,18 +55854,18 @@ fail:
 }
 
 
-SWIGINTERN PyObject *Pyramid2_swigregister(PyObject *SWIGUNUSEDPARM(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_Pyramid2, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_BarLorentz, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *Pyramid2_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *BarLorentz_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_CosineRippleBox__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
   double arg2 ;
@@ -55566,69 +55876,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 ;
+  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_Pyramid3" "', argument " "1"" of type '" "double""'");
+    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_Pyramid3" "', argument " "2"" of type '" "double""'");
+    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_Pyramid3" "', argument " "3"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_CosineRippleBox" "', 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 = (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_Pyramid3__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+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 ;
-  Pyramid3 *result = 0 ;
+  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_Pyramid3" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
+      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;
   }
-  result = (Pyramid3 *)new Pyramid3(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Pyramid3, SWIG_POINTER_NEW |  0 );
+  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_new_Pyramid3(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_Pyramid3", 0, 3, argv))) SWIG_fail;
+  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_Pyramid3__SWIG_1(self, argc, argv);
+      return _wrap_new_CosineRippleBox__SWIG_1(self, argc, argv);
     }
   }
   if (argc == 3) {
@@ -55648,47 +55958,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_CosineRippleBox__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_CosineRippleBox'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    Pyramid3::Pyramid3(double,double,double)\n"
-    "    Pyramid3::Pyramid3(std::vector< double,std::allocator< double > >)\n");
+    "    CosineRippleBox::CosineRippleBox(double,double,double)\n"
+    "    CosineRippleBox::CosineRippleBox(std::vector< double,std::allocator< double > >)\n");
   return 0;
 }
 
 
-SWIGINTERN PyObject *_wrap_Pyramid3_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_CosineRippleBox_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Pyramid3 *arg1 = (Pyramid3 *) 0 ;
+  CosineRippleBox *arg1 = (CosineRippleBox *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  Pyramid3 *result = 0 ;
+  CosineRippleBox *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_CosineRippleBox, 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 '" "CosineRippleBox_clone" "', argument " "1"" of type '" "CosineRippleBox 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< 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_Pyramid3_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_CosineRippleBox_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Pyramid3 *arg1 = (Pyramid3 *) 0 ;
+  CosineRippleBox *arg1 = (CosineRippleBox *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -55696,12 +56006,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_CosineRippleBox, 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 '" "CosineRippleBox_className" "', argument " "1"" of type '" "CosineRippleBox const *""'"); 
   }
-  arg1 = reinterpret_cast< Pyramid3 * >(argp1);
-  result = ((Pyramid3 const *)arg1)->className();
+  arg1 = reinterpret_cast< CosineRippleBox * >(argp1);
+  result = ((CosineRippleBox const *)arg1)->className();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -55709,9 +56019,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Pyramid3_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_CosineRippleBox_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Pyramid3 *arg1 = (Pyramid3 *) 0 ;
+  CosineRippleBox *arg1 = (CosineRippleBox *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -55719,12 +56029,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_CosineRippleBox, 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 '" "CosineRippleBox_parDefs" "', argument " "1"" of type '" "CosineRippleBox const *""'"); 
   }
-  arg1 = reinterpret_cast< Pyramid3 * >(argp1);
-  result = ((Pyramid3 const *)arg1)->parDefs();
+  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:
@@ -55732,89 +56042,20 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Pyramid3_baseEdge(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_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) {
+SWIGINTERN PyObject *_wrap_delete_CosineRippleBox(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Pyramid3 *arg1 = (Pyramid3 *) 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_Pyramid3, SWIG_POINTER_DISOWN |  0 );
+  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_Pyramid3" "', argument " "1"" of type '" "Pyramid3 *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CosineRippleBox" "', argument " "1"" of type '" "CosineRippleBox *""'"); 
   }
-  arg1 = reinterpret_cast< Pyramid3 * >(argp1);
+  arg1 = reinterpret_cast< CosineRippleBox * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -55823,18 +56064,18 @@ fail:
 }
 
 
-SWIGINTERN PyObject *Pyramid3_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_Pyramid3, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_CosineRippleBox, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *Pyramid3_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *CosineRippleBox_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_CosineRippleGauss__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
   double arg2 ;
@@ -55845,69 +56086,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 ;
+  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_Pyramid4" "', 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_Pyramid4" "', 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_Pyramid4" "', 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 = (Pyramid4 *)new Pyramid4(arg1,arg2,arg3);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Pyramid4, 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_Pyramid4__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 ;
-  Pyramid4 *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_Pyramid4" "', 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 = (Pyramid4 *)new Pyramid4(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Pyramid4, 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_Pyramid4(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_Pyramid4", 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_Pyramid4__SWIG_1(self, argc, argv);
+      return _wrap_new_CosineRippleGauss__SWIG_1(self, argc, argv);
     }
   }
   if (argc == 3) {
@@ -55927,47 +56168,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_CosineRippleGauss__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_CosineRippleGauss'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    Pyramid4::Pyramid4(double,double,double)\n"
-    "    Pyramid4::Pyramid4(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_Pyramid4_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_CosineRippleGauss_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Pyramid4 *arg1 = (Pyramid4 *) 0 ;
+  CosineRippleGauss *arg1 = (CosineRippleGauss *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  Pyramid4 *result = 0 ;
+  CosineRippleGauss *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_CosineRippleGauss, 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 '" "CosineRippleGauss_clone" "', argument " "1"" of type '" "CosineRippleGauss 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< 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_Pyramid4_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_CosineRippleGauss_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Pyramid4 *arg1 = (Pyramid4 *) 0 ;
+  CosineRippleGauss *arg1 = (CosineRippleGauss *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -55975,12 +56216,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_CosineRippleGauss, 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 '" "CosineRippleGauss_className" "', argument " "1"" of type '" "CosineRippleGauss const *""'"); 
   }
-  arg1 = reinterpret_cast< Pyramid4 * >(argp1);
-  result = ((Pyramid4 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:
@@ -55988,9 +56229,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Pyramid4_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_CosineRippleGauss_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Pyramid4 *arg1 = (Pyramid4 *) 0 ;
+  CosineRippleGauss *arg1 = (CosineRippleGauss *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -55998,12 +56239,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_CosineRippleGauss, 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 '" "CosineRippleGauss_parDefs" "', argument " "1"" of type '" "CosineRippleGauss const *""'"); 
   }
-  arg1 = reinterpret_cast< Pyramid4 * >(argp1);
-  result = ((Pyramid4 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:
@@ -56011,78 +56252,173 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Pyramid4_height(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_CosineRippleGauss(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Pyramid4 *arg1 = (Pyramid4 *) 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_Pyramid4, 0 |  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 '" "Pyramid4_height" "', argument " "1"" of type '" "Pyramid4 const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CosineRippleGauss" "', argument " "1"" of type '" "CosineRippleGauss *""'"); 
   }
-  arg1 = reinterpret_cast< Pyramid4 * >(argp1);
-  result = (double)((Pyramid4 const *)arg1)->height();
-  resultobj = SWIG_From_double(static_cast< double >(result));
+  arg1 = reinterpret_cast< CosineRippleGauss * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Pyramid4_baseEdge(PyObject *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_CosineRippleGauss, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+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) {
   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 val1 ;
+  int ecode1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  CosineRippleLorentz *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_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));
+  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""'");
+  } 
+  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""'");
+  } 
+  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""'");
+  } 
+  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 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_Pyramid4_alpha(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_CosineRippleLorentz__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
-  Pyramid4 *arg1 = (Pyramid4 *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
+  std::vector< double,std::allocator< double > > arg1 ;
+  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_CosineRippleLorentz" "', 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 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_CosineRippleLorentz(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;
+  --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);
+    }
+  }
+  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_CosineRippleLorentz__SWIG_0(self, argc, argv);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_CosineRippleLorentz'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    CosineRippleLorentz::CosineRippleLorentz(double,double,double)\n"
+    "    CosineRippleLorentz::CosineRippleLorentz(std::vector< double,std::allocator< double > >)\n");
+  return 0;
+}
+
+
+SWIGINTERN PyObject *_wrap_CosineRippleLorentz_clone(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  CosineRippleLorentz *arg1 = (CosineRippleLorentz *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  double result;
+  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_alpha" "', 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 = (double)((Pyramid4 const *)arg1)->alpha();
-  resultobj = SWIG_From_double(static_cast< double >(result));
+  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_validate(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] ;
@@ -56090,12 +56426,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_CosineRippleLorentz, 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 '" "CosineRippleLorentz_className" "', argument " "1"" of type '" "CosineRippleLorentz const *""'"); 
   }
-  arg1 = reinterpret_cast< Pyramid4 * >(argp1);
-  result = ((Pyramid4 const *)arg1)->validate();
+  arg1 = reinterpret_cast< CosineRippleLorentz * >(argp1);
+  result = ((CosineRippleLorentz const *)arg1)->className();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -56103,20 +56439,43 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_Pyramid4(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] ;
+  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_CosineRippleLorentz, 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 '" "CosineRippleLorentz_parDefs" "', argument " "1"" of type '" "CosineRippleLorentz const *""'"); 
   }
-  arg1 = reinterpret_cast< Pyramid4 * >(argp1);
+  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:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_CosineRippleLorentz(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  CosineRippleLorentz *arg1 = (CosineRippleLorentz *) 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_CosineRippleLorentz, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_CosineRippleLorentz" "', argument " "1"" of type '" "CosineRippleLorentz *""'"); 
+  }
+  arg1 = reinterpret_cast< CosineRippleLorentz * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -56125,94 +56484,102 @@ fail:
 }
 
 
-SWIGINTERN PyObject *Pyramid4_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+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_Pyramid4, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_CosineRippleLorentz, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *Pyramid4_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *CosineRippleLorentz_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_SawtoothRippleBox__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 ;
+  SawtoothRippleBox *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_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_Pyramid6" "', argument " "2"" of type '" "double""'");
+    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_Pyramid6" "', argument " "3"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_SawtoothRippleBox" "', 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_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_new_Pyramid6__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_SawtoothRippleBox__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   std::vector< double,std::allocator< double > > arg1 ;
-  Pyramid6 *result = 0 ;
+  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_Pyramid6" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
+      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 = (Pyramid6 *)new Pyramid6(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Pyramid6, SWIG_POINTER_NEW |  0 );
+  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_Pyramid6(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_SawtoothRippleBox(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_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_Pyramid6__SWIG_1(self, argc, argv);
+      return _wrap_new_SawtoothRippleBox__SWIG_1(self, argc, argv);
     }
   }
-  if (argc == 3) {
+  if (argc == 4) {
     int _v = 0;
     {
       int res = SWIG_AsVal_double(argv[0], NULL);
@@ -56229,47 +56596,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_SawtoothRippleBox__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_SawtoothRippleBox'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    Pyramid6::Pyramid6(double,double,double)\n"
-    "    Pyramid6::Pyramid6(std::vector< double,std::allocator< double > >)\n");
+    "    SawtoothRippleBox::SawtoothRippleBox(double,double,double,double)\n"
+    "    SawtoothRippleBox::SawtoothRippleBox(std::vector< double,std::allocator< double > >)\n");
   return 0;
 }
 
 
-SWIGINTERN PyObject *_wrap_Pyramid6_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_SawtoothRippleBox_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Pyramid6 *arg1 = (Pyramid6 *) 0 ;
+  SawtoothRippleBox *arg1 = (SawtoothRippleBox *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  Pyramid6 *result = 0 ;
+  SawtoothRippleBox *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_SawtoothRippleBox, 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 '" "SawtoothRippleBox_clone" "', argument " "1"" of type '" "SawtoothRippleBox 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< 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_Pyramid6_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_SawtoothRippleBox_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Pyramid6 *arg1 = (Pyramid6 *) 0 ;
+  SawtoothRippleBox *arg1 = (SawtoothRippleBox *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -56277,12 +56650,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_SawtoothRippleBox, 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 '" "SawtoothRippleBox_className" "', argument " "1"" of type '" "SawtoothRippleBox const *""'"); 
   }
-  arg1 = reinterpret_cast< Pyramid6 * >(argp1);
-  result = ((Pyramid6 const *)arg1)->className();
+  arg1 = reinterpret_cast< SawtoothRippleBox * >(argp1);
+  result = ((SawtoothRippleBox const *)arg1)->className();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -56290,9 +56663,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Pyramid6_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_SawtoothRippleBox_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Pyramid6 *arg1 = (Pyramid6 *) 0 ;
+  SawtoothRippleBox *arg1 = (SawtoothRippleBox *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -56300,12 +56673,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_SawtoothRippleBox, 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 '" "SawtoothRippleBox_parDefs" "', argument " "1"" of type '" "SawtoothRippleBox const *""'"); 
   }
-  arg1 = reinterpret_cast< Pyramid6 * >(argp1);
-  result = ((Pyramid6 const *)arg1)->parDefs();
+  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:
@@ -56313,132 +56686,40 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_Pyramid6_baseEdge(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_SawtoothRippleBox(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  Pyramid6 *arg1 = (Pyramid6 *) 0 ;
+  SawtoothRippleBox *arg1 = (SawtoothRippleBox *) 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_SawtoothRippleBox, 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_SawtoothRippleBox" "', argument " "1"" of type '" "SawtoothRippleBox *""'"); 
   }
-  arg1 = reinterpret_cast< Pyramid6 * >(argp1);
-  result = (double)((Pyramid6 const *)arg1)->baseEdge();
-  resultobj = SWIG_From_double(static_cast< double >(result));
+  arg1 = reinterpret_cast< SawtoothRippleBox * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
   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);
-  delete arg1;
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *Pyramid6_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_Pyramid6, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_SawtoothRippleBox, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *Pyramid6_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *SawtoothRippleBox_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_SawtoothRippleGauss__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
   double arg2 ;
@@ -56452,74 +56733,74 @@ SWIGINTERN PyObject *_wrap_new_SawtoothRippleBox__SWIG_0(PyObject *self, Py_ssiz
   int ecode3 = 0 ;
   double val4 ;
   int ecode4 = 0 ;
-  SawtoothRippleBox *result = 0 ;
+  SawtoothRippleGauss *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_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_SawtoothRippleBox" "', 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_SawtoothRippleBox" "', 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);
   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_SawtoothRippleGauss" "', 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 = (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_SawtoothRippleBox__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 ;
-  SawtoothRippleBox *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_SawtoothRippleBox" "', 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 = (SawtoothRippleBox *)new SawtoothRippleBox(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SawtoothRippleBox, 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_SawtoothRippleBox(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_SawtoothRippleGauss(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_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_SawtoothRippleBox__SWIG_1(self, argc, argv);
+      return _wrap_new_SawtoothRippleGauss__SWIG_1(self, argc, argv);
     }
   }
   if (argc == 4) {
@@ -56544,7 +56825,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_SawtoothRippleGauss__SWIG_0(self, argc, argv);
           }
         }
       }
@@ -56552,40 +56833,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_SawtoothRippleGauss'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    SawtoothRippleBox::SawtoothRippleBox(double,double,double,double)\n"
-    "    SawtoothRippleBox::SawtoothRippleBox(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_SawtoothRippleBox_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_SawtoothRippleGauss_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  SawtoothRippleBox *arg1 = (SawtoothRippleBox *) 0 ;
+  SawtoothRippleGauss *arg1 = (SawtoothRippleGauss *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  SawtoothRippleBox *result = 0 ;
+  SawtoothRippleGauss *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_SawtoothRippleGauss, 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 '" "SawtoothRippleGauss_clone" "', argument " "1"" of type '" "SawtoothRippleGauss 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< 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_SawtoothRippleBox_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_SawtoothRippleGauss_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  SawtoothRippleBox *arg1 = (SawtoothRippleBox *) 0 ;
+  SawtoothRippleGauss *arg1 = (SawtoothRippleGauss *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -56593,12 +56874,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_SawtoothRippleGauss, 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 '" "SawtoothRippleGauss_className" "', argument " "1"" of type '" "SawtoothRippleGauss const *""'"); 
   }
-  arg1 = reinterpret_cast< SawtoothRippleBox * >(argp1);
-  result = ((SawtoothRippleBox 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:
@@ -56606,9 +56887,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_SawtoothRippleBox_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_SawtoothRippleGauss_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  SawtoothRippleBox *arg1 = (SawtoothRippleBox *) 0 ;
+  SawtoothRippleGauss *arg1 = (SawtoothRippleGauss *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -56616,12 +56897,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_SawtoothRippleGauss, 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 '" "SawtoothRippleGauss_parDefs" "', argument " "1"" of type '" "SawtoothRippleGauss const *""'"); 
   }
-  arg1 = reinterpret_cast< SawtoothRippleBox * >(argp1);
-  result = ((SawtoothRippleBox 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:
@@ -56629,20 +56910,20 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_SawtoothRippleBox(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_SawtoothRippleGauss(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  SawtoothRippleBox *arg1 = (SawtoothRippleBox *) 0 ;
+  SawtoothRippleGauss *arg1 = (SawtoothRippleGauss *) 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_SawtoothRippleGauss, 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_SawtoothRippleGauss" "', argument " "1"" of type '" "SawtoothRippleGauss *""'"); 
   }
-  arg1 = reinterpret_cast< SawtoothRippleBox * >(argp1);
+  arg1 = reinterpret_cast< SawtoothRippleGauss * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -56651,18 +56932,18 @@ fail:
 }
 
 
-SWIGINTERN PyObject *SawtoothRippleBox_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_SawtoothRippleBox, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_SawtoothRippleGauss, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *SawtoothRippleBox_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *SawtoothRippleGauss_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_SawtoothRippleLorentz__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
   double arg2 ;
@@ -56676,74 +56957,74 @@ SWIGINTERN PyObject *_wrap_new_SawtoothRippleGauss__SWIG_0(PyObject *self, Py_ss
   int ecode3 = 0 ;
   double val4 ;
   int ecode4 = 0 ;
-  SawtoothRippleGauss *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_SawtoothRippleGauss" "', 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_SawtoothRippleGauss" "', 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_SawtoothRippleGauss" "', 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_SawtoothRippleGauss" "', 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 = (SawtoothRippleGauss *)new SawtoothRippleGauss(arg1,arg2,arg3,arg4);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SawtoothRippleGauss, 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_SawtoothRippleGauss__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 ;
-  SawtoothRippleGauss *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_SawtoothRippleGauss" "', 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 = (SawtoothRippleGauss *)new SawtoothRippleGauss(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SawtoothRippleGauss, 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_SawtoothRippleGauss(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_SawtoothRippleGauss", 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_SawtoothRippleGauss__SWIG_1(self, argc, argv);
+      return _wrap_new_SawtoothRippleLorentz__SWIG_1(self, argc, argv);
     }
   }
   if (argc == 4) {
@@ -56768,7 +57049,7 @@ SWIGINTERN PyObject *_wrap_new_SawtoothRippleGauss(PyObject *self, PyObject *arg
             _v = SWIG_CheckState(res);
           }
           if (_v) {
-            return _wrap_new_SawtoothRippleGauss__SWIG_0(self, argc, argv);
+            return _wrap_new_SawtoothRippleLorentz__SWIG_0(self, argc, argv);
           }
         }
       }
@@ -56776,40 +57057,40 @@ SWIGINTERN PyObject *_wrap_new_SawtoothRippleGauss(PyObject *self, PyObject *arg
   }
   
 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_SawtoothRippleLorentz'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    SawtoothRippleGauss::SawtoothRippleGauss(double,double,double,double)\n"
-    "    SawtoothRippleGauss::SawtoothRippleGauss(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_SawtoothRippleGauss_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_SawtoothRippleLorentz_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  SawtoothRippleGauss *arg1 = (SawtoothRippleGauss *) 0 ;
+  SawtoothRippleLorentz *arg1 = (SawtoothRippleLorentz *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  SawtoothRippleGauss *result = 0 ;
+  SawtoothRippleLorentz *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_SawtoothRippleLorentz, 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 '" "SawtoothRippleLorentz_clone" "', argument " "1"" of type '" "SawtoothRippleLorentz 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< 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_SawtoothRippleGauss_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_SawtoothRippleLorentz_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  SawtoothRippleGauss *arg1 = (SawtoothRippleGauss *) 0 ;
+  SawtoothRippleLorentz *arg1 = (SawtoothRippleLorentz *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -56817,12 +57098,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_SawtoothRippleLorentz, 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 '" "SawtoothRippleLorentz_className" "', argument " "1"" of type '" "SawtoothRippleLorentz const *""'"); 
   }
-  arg1 = reinterpret_cast< SawtoothRippleGauss * >(argp1);
-  result = ((SawtoothRippleGauss 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:
@@ -56830,9 +57111,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_SawtoothRippleGauss_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_SawtoothRippleLorentz_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  SawtoothRippleGauss *arg1 = (SawtoothRippleGauss *) 0 ;
+  SawtoothRippleLorentz *arg1 = (SawtoothRippleLorentz *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -56840,12 +57121,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_SawtoothRippleLorentz, 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 '" "SawtoothRippleLorentz_parDefs" "', argument " "1"" of type '" "SawtoothRippleLorentz const *""'"); 
   }
-  arg1 = reinterpret_cast< SawtoothRippleGauss * >(argp1);
-  result = ((SawtoothRippleGauss 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:
@@ -56853,20 +57134,20 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_SawtoothRippleGauss(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_SawtoothRippleLorentz(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  SawtoothRippleGauss *arg1 = (SawtoothRippleGauss *) 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_SawtoothRippleGauss, 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_SawtoothRippleGauss" "', argument " "1"" of type '" "SawtoothRippleGauss *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_SawtoothRippleLorentz" "', argument " "1"" of type '" "SawtoothRippleLorentz *""'"); 
   }
-  arg1 = reinterpret_cast< SawtoothRippleGauss * >(argp1);
+  arg1 = reinterpret_cast< SawtoothRippleLorentz * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -56875,102 +57156,94 @@ fail:
 }
 
 
-SWIGINTERN PyObject *SawtoothRippleGauss_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_SawtoothRippleGauss, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_SawtoothRippleLorentz, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *SawtoothRippleGauss_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *SawtoothRippleLorentz_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_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 ;
-  SawtoothRippleLorentz *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_SawtoothRippleLorentz" "', 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_SawtoothRippleLorentz" "', 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_SawtoothRippleLorentz" "', 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_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 = (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_SawtoothRippleLorentz__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 ;
-  SawtoothRippleLorentz *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_SawtoothRippleLorentz" "', 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 = (SawtoothRippleLorentz *)new SawtoothRippleLorentz(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SawtoothRippleLorentz, 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_SawtoothRippleLorentz(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_SawtoothRippleLorentz", 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_SawtoothRippleLorentz__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);
@@ -56987,53 +57260,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_LongBoxGauss__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_LongBoxGauss'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    SawtoothRippleLorentz::SawtoothRippleLorentz(double,double,double,double)\n"
-    "    SawtoothRippleLorentz::SawtoothRippleLorentz(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_SawtoothRippleLorentz_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_LongBoxGauss_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  SawtoothRippleLorentz *arg1 = (SawtoothRippleLorentz *) 0 ;
+  LongBoxGauss *arg1 = (LongBoxGauss *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  SawtoothRippleLorentz *result = 0 ;
+  LongBoxGauss *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_LongBoxGauss, 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 '" "LongBoxGauss_clone" "', argument " "1"" of type '" "LongBoxGauss 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< 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_SawtoothRippleLorentz_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_LongBoxGauss_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  SawtoothRippleLorentz *arg1 = (SawtoothRippleLorentz *) 0 ;
+  LongBoxGauss *arg1 = (LongBoxGauss *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -57041,12 +57308,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_LongBoxGauss, 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 '" "LongBoxGauss_className" "', argument " "1"" of type '" "LongBoxGauss const *""'"); 
   }
-  arg1 = reinterpret_cast< SawtoothRippleLorentz * >(argp1);
-  result = ((SawtoothRippleLorentz 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:
@@ -57054,9 +57321,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_SawtoothRippleLorentz_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_LongBoxGauss_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  SawtoothRippleLorentz *arg1 = (SawtoothRippleLorentz *) 0 ;
+  LongBoxGauss *arg1 = (LongBoxGauss *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -57064,12 +57331,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_LongBoxGauss, 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 '" "LongBoxGauss_parDefs" "', argument " "1"" of type '" "LongBoxGauss const *""'"); 
   }
-  arg1 = reinterpret_cast< SawtoothRippleLorentz * >(argp1);
-  result = ((SawtoothRippleLorentz 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:
@@ -57077,251 +57344,139 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_SawtoothRippleLorentz(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_LongBoxGauss_length(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  SawtoothRippleLorentz *arg1 = (SawtoothRippleLorentz *) 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_SawtoothRippleLorentz, 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_SawtoothRippleLorentz" "', argument " "1"" of type '" "SawtoothRippleLorentz *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LongBoxGauss_length" "', argument " "1"" of type '" "LongBoxGauss const *""'"); 
   }
-  arg1 = reinterpret_cast< SawtoothRippleLorentz * >(argp1);
-  delete arg1;
-  resultobj = SWIG_Py_Void();
+  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 *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 *_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 *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_LongBoxGauss_width(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  double arg1 ;
-  double arg2 ;
-  double val1 ;
-  int ecode1 = 0 ;
-  double val2 ;
-  int ecode2 = 0 ;
-  TruncatedCube *result = 0 ;
+  LongBoxGauss *arg1 = (LongBoxGauss *) 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_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_new_TruncatedCube__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_LongBoxGauss_radialExtension(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  std::vector< double,std::allocator< double > > arg1 ;
-  TruncatedCube *result = 0 ;
+  LongBoxGauss *arg1 = (LongBoxGauss *) 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_LongBoxGauss, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LongBoxGauss_radialExtension" "', argument " "1"" of type '" "LongBoxGauss const *""'"); 
   }
-  result = (TruncatedCube *)new TruncatedCube(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_TruncatedCube, SWIG_POINTER_NEW |  0 );
+  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_new_TruncatedCube(PyObject *self, PyObject *args) {
-  Py_ssize_t argc;
-  PyObject *argv[3] = {
-    0
-  };
+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 (!(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 (!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 *""'"); 
   }
-  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);
-      }
+  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;
     }
   }
-  
-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) {
-  PyObject *resultobj = 0;
-  TruncatedCube *arg1 = (TruncatedCube *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  TruncatedCube *result = 0 ;
-  
-  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_clone" "', argument " "1"" of type '" "TruncatedCube const *""'"); 
-  }
-  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_TruncatedCube_className(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_className" "', argument " "1"" of type '" "TruncatedCube const *""'"); 
-  }
-  arg1 = reinterpret_cast< TruncatedCube * >(argp1);
-  result = ((TruncatedCube const *)arg1)->className();
-  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_TruncatedCube_parDefs(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  TruncatedCube *arg1 = (TruncatedCube *) 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_TruncatedCube, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedCube_parDefs" "', argument " "1"" of type '" "TruncatedCube 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 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_TruncatedCube_length(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_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));
+  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_TruncatedCube_validate(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_LongBoxGauss_validate(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  TruncatedCube *arg1 = (TruncatedCube *) 0 ;
+  LongBoxGauss *arg1 = (LongBoxGauss *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -57329,12 +57484,12 @@ SWIGINTERN PyObject *_wrap_TruncatedCube_validate(PyObject *self, PyObject *args
   
   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_LongBoxGauss, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedCube_validate" "', argument " "1"" of type '" "TruncatedCube const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LongBoxGauss_validate" "', argument " "1"" of type '" "LongBoxGauss const *""'"); 
   }
-  arg1 = reinterpret_cast< TruncatedCube * >(argp1);
-  result = ((TruncatedCube const *)arg1)->validate();
+  arg1 = reinterpret_cast< LongBoxGauss * >(argp1);
+  result = ((LongBoxGauss const *)arg1)->validate();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -57342,20 +57497,20 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_TruncatedCube(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_LongBoxGauss(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  TruncatedCube *arg1 = (TruncatedCube *) 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_TruncatedCube, SWIG_POINTER_DISOWN |  0 );
+  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_TruncatedCube" "', argument " "1"" of type '" "TruncatedCube *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_LongBoxGauss" "', argument " "1"" of type '" "LongBoxGauss *""'"); 
   }
-  arg1 = reinterpret_cast< TruncatedCube * >(argp1);
+  arg1 = reinterpret_cast< LongBoxGauss * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -57364,18 +57519,18 @@ fail:
 }
 
 
-SWIGINTERN PyObject *TruncatedCube_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_TruncatedCube, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_LongBoxGauss, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *TruncatedCube_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *LongBoxGauss_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) {
+SWIGINTERN PyObject *_wrap_new_LongBoxLorentz__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
   double arg2 ;
@@ -57386,69 +57541,69 @@ SWIGINTERN PyObject *_wrap_new_TruncatedSphere__SWIG_0(PyObject *self, Py_ssize_
   int ecode2 = 0 ;
   double val3 ;
   int ecode3 = 0 ;
-  TruncatedSphere *result = 0 ;
+  LongBoxLorentz *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""'");
+    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_TruncatedSphere" "', 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_TruncatedSphere" "', 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);
-  result = (TruncatedSphere *)new TruncatedSphere(arg1,arg2,arg3);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_TruncatedSphere, 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_TruncatedSphere__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 ;
-  TruncatedSphere *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_TruncatedSphere" "', 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 = (TruncatedSphere *)new TruncatedSphere(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_TruncatedSphere, 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_TruncatedSphere(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_LongBoxLorentz(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
   PyObject *argv[4] = {
     0
   };
   
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_TruncatedSphere", 0, 3, 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_TruncatedSphere__SWIG_1(self, argc, argv);
+      return _wrap_new_LongBoxLorentz__SWIG_1(self, argc, argv);
     }
   }
   if (argc == 3) {
@@ -57468,47 +57623,47 @@ SWIGINTERN PyObject *_wrap_new_TruncatedSphere(PyObject *self, PyObject *args) {
           _v = SWIG_CheckState(res);
         }
         if (_v) {
-          return _wrap_new_TruncatedSphere__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_TruncatedSphere'.\n"
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_LongBoxLorentz'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    TruncatedSphere::TruncatedSphere(double,double,double)\n"
-    "    TruncatedSphere::TruncatedSphere(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_TruncatedSphere_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_LongBoxLorentz_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  TruncatedSphere *arg1 = (TruncatedSphere *) 0 ;
+  LongBoxLorentz *arg1 = (LongBoxLorentz *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  TruncatedSphere *result = 0 ;
+  LongBoxLorentz *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_LongBoxLorentz, 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 '" "LongBoxLorentz_clone" "', argument " "1"" of type '" "LongBoxLorentz 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< 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_TruncatedSphere_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_LongBoxLorentz_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  TruncatedSphere *arg1 = (TruncatedSphere *) 0 ;
+  LongBoxLorentz *arg1 = (LongBoxLorentz *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -57516,12 +57671,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_LongBoxLorentz, 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 '" "LongBoxLorentz_className" "', argument " "1"" of type '" "LongBoxLorentz const *""'"); 
   }
-  arg1 = reinterpret_cast< TruncatedSphere * >(argp1);
-  result = ((TruncatedSphere 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:
@@ -57529,9 +57684,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_TruncatedSphere_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_LongBoxLorentz_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  TruncatedSphere *arg1 = (TruncatedSphere *) 0 ;
+  LongBoxLorentz *arg1 = (LongBoxLorentz *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -57539,12 +57694,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_LongBoxLorentz, 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 '" "LongBoxLorentz_parDefs" "', argument " "1"" of type '" "LongBoxLorentz const *""'"); 
   }
-  arg1 = reinterpret_cast< TruncatedSphere * >(argp1);
-  result = ((TruncatedSphere 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:
@@ -57552,9 +57707,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_TruncatedSphere_height(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_LongBoxLorentz_length(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  TruncatedSphere *arg1 = (TruncatedSphere *) 0 ;
+  LongBoxLorentz *arg1 = (LongBoxLorentz *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -57562,12 +57717,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_LongBoxLorentz, 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 '" "LongBoxLorentz_length" "', argument " "1"" of type '" "LongBoxLorentz const *""'"); 
   }
-  arg1 = reinterpret_cast< TruncatedSphere * >(argp1);
-  result = (double)((TruncatedSphere const *)arg1)->height();
+  arg1 = reinterpret_cast< LongBoxLorentz * >(argp1);
+  result = (double)((LongBoxLorentz const *)arg1)->length();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -57575,9 +57730,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_TruncatedSphere_radius(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_LongBoxLorentz_height(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  TruncatedSphere *arg1 = (TruncatedSphere *) 0 ;
+  LongBoxLorentz *arg1 = (LongBoxLorentz *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -57585,12 +57740,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_LongBoxLorentz, 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 '" "LongBoxLorentz_height" "', argument " "1"" of type '" "LongBoxLorentz const *""'"); 
   }
-  arg1 = reinterpret_cast< TruncatedSphere * >(argp1);
-  result = (double)((TruncatedSphere const *)arg1)->radius();
+  arg1 = reinterpret_cast< LongBoxLorentz * >(argp1);
+  result = (double)((LongBoxLorentz const *)arg1)->height();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -57598,9 +57753,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_TruncatedSphere_removedTop(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_LongBoxLorentz_width(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  TruncatedSphere *arg1 = (TruncatedSphere *) 0 ;
+  LongBoxLorentz *arg1 = (LongBoxLorentz *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -57608,12 +57763,12 @@ SWIGINTERN PyObject *_wrap_TruncatedSphere_removedTop(PyObject *self, PyObject *
   
   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_LongBoxLorentz, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedSphere_removedTop" "', argument " "1"" of type '" "TruncatedSphere const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LongBoxLorentz_width" "', argument " "1"" of type '" "LongBoxLorentz const *""'"); 
   }
-  arg1 = reinterpret_cast< TruncatedSphere * >(argp1);
-  result = (double)((TruncatedSphere const *)arg1)->removedTop();
+  arg1 = reinterpret_cast< LongBoxLorentz * >(argp1);
+  result = (double)((LongBoxLorentz const *)arg1)->width();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -57621,9 +57776,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_TruncatedSphere_radialExtension(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_LongBoxLorentz_radialExtension(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  TruncatedSphere *arg1 = (TruncatedSphere *) 0 ;
+  LongBoxLorentz *arg1 = (LongBoxLorentz *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -57631,12 +57786,12 @@ SWIGINTERN PyObject *_wrap_TruncatedSphere_radialExtension(PyObject *self, PyObj
   
   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_LongBoxLorentz, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedSphere_radialExtension" "', argument " "1"" of type '" "TruncatedSphere const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LongBoxLorentz_radialExtension" "', argument " "1"" of type '" "LongBoxLorentz const *""'"); 
   }
-  arg1 = reinterpret_cast< TruncatedSphere * >(argp1);
-  result = (double)((TruncatedSphere const *)arg1)->radialExtension();
+  arg1 = reinterpret_cast< LongBoxLorentz * >(argp1);
+  result = (double)((LongBoxLorentz const *)arg1)->radialExtension();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -57644,9 +57799,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_TruncatedSphere_formfactor(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_LongBoxLorentz_formfactor(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  TruncatedSphere *arg1 = (TruncatedSphere *) 0 ;
+  LongBoxLorentz *arg1 = (LongBoxLorentz *) 0 ;
   C3 arg2 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
@@ -57655,26 +57810,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, "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 '" "TruncatedSphere_formfactor" "', argument " "1"" of type '" "TruncatedSphere const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LongBoxLorentz_formfactor" "', argument " "1"" of type '" "LongBoxLorentz const *""'"); 
   }
-  arg1 = reinterpret_cast< TruncatedSphere * >(argp1);
+  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 '" "TruncatedSphere_formfactor" "', argument " "2"" of type '" "C3""'"); 
+      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 '" "TruncatedSphere_formfactor" "', argument " "2"" of type '" "C3""'");
+      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 = ((TruncatedSphere const *)arg1)->formfactor(arg2);
+  result = ((LongBoxLorentz const *)arg1)->formfactor(arg2);
   resultobj = SWIG_From_std_complex_Sl_double_Sg_(static_cast< std::complex<double> >(result));
   return resultobj;
 fail:
@@ -57682,9 +57837,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_TruncatedSphere_validate(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_LongBoxLorentz_validate(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  TruncatedSphere *arg1 = (TruncatedSphere *) 0 ;
+  LongBoxLorentz *arg1 = (LongBoxLorentz *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -57692,12 +57847,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_LongBoxLorentz, 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 '" "LongBoxLorentz_validate" "', argument " "1"" of type '" "LongBoxLorentz const *""'"); 
   }
-  arg1 = reinterpret_cast< TruncatedSphere * >(argp1);
-  result = ((TruncatedSphere const *)arg1)->validate();
+  arg1 = reinterpret_cast< LongBoxLorentz * >(argp1);
+  result = ((LongBoxLorentz const *)arg1)->validate();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -57705,20 +57860,20 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_TruncatedSphere(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_LongBoxLorentz(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  TruncatedSphere *arg1 = (TruncatedSphere *) 0 ;
+  LongBoxLorentz *arg1 = (LongBoxLorentz *) 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_LongBoxLorentz, 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_LongBoxLorentz" "', argument " "1"" of type '" "LongBoxLorentz *""'"); 
   }
-  arg1 = reinterpret_cast< TruncatedSphere * >(argp1);
+  arg1 = reinterpret_cast< LongBoxLorentz * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -57727,165 +57882,123 @@ fail:
 }
 
 
-SWIGINTERN PyObject *TruncatedSphere_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_TruncatedSphere, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_LongBoxLorentz, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *TruncatedSphere_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *LongBoxLorentz_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) {
-  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 ;
-  
-  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_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_TruncatedSpheroid" "', 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) {
+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 ;
-  TruncatedSpheroid *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_TruncatedSpheroid" "', 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 = (TruncatedSpheroid *)new TruncatedSpheroid(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_TruncatedSpheroid, 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_TruncatedSpheroid(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[5] = {
+  PyObject *argv[2] = {
     0
   };
   
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_TruncatedSpheroid", 0, 4, 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_TruncatedSpheroid__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_TruncatedSpheroid__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_TruncatedSpheroid'.\n"
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_GaussSphere'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    TruncatedSpheroid::TruncatedSpheroid(double,double,double,double)\n"
-    "    TruncatedSpheroid::TruncatedSpheroid(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_TruncatedSpheroid_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_GaussSphere_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  TruncatedSpheroid *arg1 = (TruncatedSpheroid *) 0 ;
+  GaussSphere *arg1 = (GaussSphere *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  TruncatedSpheroid *result = 0 ;
+  GaussSphere *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_GaussSphere, 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 '" "GaussSphere_clone" "', argument " "1"" of type '" "GaussSphere 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< 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_TruncatedSpheroid_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_GaussSphere_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  TruncatedSpheroid *arg1 = (TruncatedSpheroid *) 0 ;
+  GaussSphere *arg1 = (GaussSphere *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -57893,12 +58006,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_GaussSphere, 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 '" "GaussSphere_className" "', argument " "1"" of type '" "GaussSphere const *""'"); 
   }
-  arg1 = reinterpret_cast< TruncatedSpheroid * >(argp1);
-  result = ((TruncatedSpheroid 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:
@@ -57906,9 +58019,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_TruncatedSpheroid_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_GaussSphere_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  TruncatedSpheroid *arg1 = (TruncatedSpheroid *) 0 ;
+  GaussSphere *arg1 = (GaussSphere *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -57916,12 +58029,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_GaussSphere, 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 '" "GaussSphere_parDefs" "', argument " "1"" of type '" "GaussSphere const *""'"); 
   }
-  arg1 = reinterpret_cast< TruncatedSpheroid * >(argp1);
-  result = ((TruncatedSpheroid 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:
@@ -57929,9 +58042,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_TruncatedSpheroid_radius(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_GaussSphere_meanRadius(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  TruncatedSpheroid *arg1 = (TruncatedSpheroid *) 0 ;
+  GaussSphere *arg1 = (GaussSphere *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -57939,81 +58052,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_GaussSphere, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedSpheroid_radius" "', argument " "1"" of type '" "TruncatedSpheroid const *""'"); 
-  }
-  arg1 = reinterpret_cast< TruncatedSpheroid * >(argp1);
-  result = (double)((TruncatedSpheroid const *)arg1)->radius();
-  resultobj = SWIG_From_double(static_cast< double >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_TruncatedSpheroid_height(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 *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "GaussSphere_meanRadius" "', argument " "1"" of type '" "GaussSphere const *""'"); 
   }
-  arg1 = reinterpret_cast< TruncatedSpheroid * >(argp1);
-  result = (double)((TruncatedSpheroid const *)arg1)->removedTop();
+  arg1 = reinterpret_cast< GaussSphere * >(argp1);
+  result = (double)((GaussSphere const *)arg1)->meanRadius();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -58021,9 +58065,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_TruncatedSpheroid_radialExtension(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_GaussSphere_radialExtension(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  TruncatedSpheroid *arg1 = (TruncatedSpheroid *) 0 ;
+  GaussSphere *arg1 = (GaussSphere *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -58031,12 +58075,12 @@ SWIGINTERN PyObject *_wrap_TruncatedSpheroid_radialExtension(PyObject *self, PyO
   
   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_GaussSphere, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "TruncatedSpheroid_radialExtension" "', argument " "1"" of type '" "TruncatedSpheroid const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "GaussSphere_radialExtension" "', argument " "1"" of type '" "GaussSphere const *""'"); 
   }
-  arg1 = reinterpret_cast< TruncatedSpheroid * >(argp1);
-  result = (double)((TruncatedSpheroid const *)arg1)->radialExtension();
+  arg1 = reinterpret_cast< GaussSphere * >(argp1);
+  result = (double)((GaussSphere const *)arg1)->radialExtension();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -58044,9 +58088,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_TruncatedSpheroid_formfactor(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_GaussSphere_formfactor(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  TruncatedSpheroid *arg1 = (TruncatedSpheroid *) 0 ;
+  GaussSphere *arg1 = (GaussSphere *) 0 ;
   C3 arg2 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
@@ -58055,26 +58099,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, "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 '" "TruncatedSpheroid_formfactor" "', argument " "1"" of type '" "TruncatedSpheroid const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "GaussSphere_formfactor" "', argument " "1"" of type '" "GaussSphere const *""'"); 
   }
-  arg1 = reinterpret_cast< TruncatedSpheroid * >(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 '" "TruncatedSpheroid_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 '" "TruncatedSpheroid_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 = ((TruncatedSpheroid 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:
@@ -58082,9 +58126,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_TruncatedSpheroid_validate(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_GaussSphere_validate(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  TruncatedSpheroid *arg1 = (TruncatedSpheroid *) 0 ;
+  GaussSphere *arg1 = (GaussSphere *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -58092,12 +58136,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_GaussSphere, 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 '" "GaussSphere_validate" "', argument " "1"" of type '" "GaussSphere const *""'"); 
   }
-  arg1 = reinterpret_cast< TruncatedSpheroid * >(argp1);
-  result = ((TruncatedSpheroid 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:
@@ -58105,20 +58149,20 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_TruncatedSpheroid(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_GaussSphere(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  TruncatedSpheroid *arg1 = (TruncatedSpheroid *) 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_TruncatedSpheroid, 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_TruncatedSpheroid" "', argument " "1"" of type '" "TruncatedSpheroid *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_GaussSphere" "', argument " "1"" of type '" "GaussSphere *""'"); 
   }
-  arg1 = reinterpret_cast< TruncatedSpheroid * >(argp1);
+  arg1 = reinterpret_cast< GaussSphere * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -58127,123 +58171,137 @@ fail:
 }
 
 
-SWIGINTERN PyObject *TruncatedSpheroid_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_TruncatedSpheroid, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_GaussSphere, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *TruncatedSpheroid_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *GaussSphere_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) {
+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 ;
-  GaussSphere *result = 0 ;
+  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_GaussSphere" "', argument " "1"" of type '" "std::vector< double,std::allocator< double > >""'"); 
+      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 = (GaussSphere *)new GaussSphere(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GaussSphere, SWIG_POINTER_NEW |  0 );
+  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_GaussSphere__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_FuzzySphere__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
+  double arg2 ;
   double val1 ;
   int ecode1 = 0 ;
-  GaussSphere *result = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  FuzzySphere *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_GaussSphere" "', 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);
-  result = (GaussSphere *)new GaussSphere(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GaussSphere, 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_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 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_GaussSphere(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_FuzzySphere(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
-  PyObject *argv[2] = {
+  PyObject *argv[3] = {
     0
   };
   
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_GaussSphere", 0, 1, 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_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_GaussSphere__SWIG_1(self, argc, argv);
+      return _wrap_new_FuzzySphere__SWIG_0(self, argc, argv);
     }
   }
-  if (argc == 1) {
+  if (argc == 2) {
     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_GaussSphere__SWIG_0(self, argc, argv);
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_new_FuzzySphere__SWIG_1(self, argc, argv);
+      }
     }
   }
   
 fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_GaussSphere'.\n"
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_FuzzySphere'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    GaussSphere::GaussSphere(std::vector< double,std::allocator< double > >)\n"
-    "    GaussSphere::GaussSphere(double)\n");
+    "    FuzzySphere::FuzzySphere(std::vector< double,std::allocator< double > >)\n"
+    "    FuzzySphere::FuzzySphere(double,double)\n");
   return 0;
 }
 
 
-SWIGINTERN PyObject *_wrap_GaussSphere_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_FuzzySphere_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  GaussSphere *arg1 = (GaussSphere *) 0 ;
+  FuzzySphere *arg1 = (FuzzySphere *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  GaussSphere *result = 0 ;
+  FuzzySphere *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_FuzzySphere, 0 |  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 '" "FuzzySphere_clone" "', argument " "1"" of type '" "FuzzySphere const *""'"); 
   }
-  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< 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_GaussSphere_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_FuzzySphere_className(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  GaussSphere *arg1 = (GaussSphere *) 0 ;
+  FuzzySphere *arg1 = (FuzzySphere *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -58251,12 +58309,12 @@ SWIGINTERN PyObject *_wrap_GaussSphere_className(PyObject *self, PyObject *args)
   
   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_FuzzySphere, 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 '" "FuzzySphere_className" "', argument " "1"" of type '" "FuzzySphere const *""'"); 
   }
-  arg1 = reinterpret_cast< GaussSphere * >(argp1);
-  result = ((GaussSphere 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:
@@ -58264,9 +58322,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_GaussSphere_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_FuzzySphere_parDefs(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  GaussSphere *arg1 = (GaussSphere *) 0 ;
+  FuzzySphere *arg1 = (FuzzySphere *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -58274,12 +58332,12 @@ SWIGINTERN PyObject *_wrap_GaussSphere_parDefs(PyObject *self, PyObject *args) {
   
   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_FuzzySphere, 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 '" "FuzzySphere_parDefs" "', argument " "1"" of type '" "FuzzySphere const *""'"); 
   }
-  arg1 = reinterpret_cast< GaussSphere * >(argp1);
-  result = ((GaussSphere 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:
@@ -58287,9 +58345,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_GaussSphere_meanRadius(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_FuzzySphere_radialExtension(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  GaussSphere *arg1 = (GaussSphere *) 0 ;
+  FuzzySphere *arg1 = (FuzzySphere *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -58297,12 +58355,12 @@ SWIGINTERN PyObject *_wrap_GaussSphere_meanRadius(PyObject *self, PyObject *args
   
   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_FuzzySphere, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "GaussSphere_meanRadius" "', argument " "1"" of type '" "GaussSphere const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FuzzySphere_radialExtension" "', argument " "1"" of type '" "FuzzySphere const *""'"); 
   }
-  arg1 = reinterpret_cast< GaussSphere * >(argp1);
-  result = (double)((GaussSphere const *)arg1)->meanRadius();
+  arg1 = reinterpret_cast< FuzzySphere * >(argp1);
+  result = (double)((FuzzySphere const *)arg1)->radialExtension();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -58310,33 +58368,10 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_GaussSphere_radialExtension(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_FuzzySphere_formfactor(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  GaussSphere *arg1 = (GaussSphere *) 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 ;
+  FuzzySphere *arg1 = (FuzzySphere *) 0 ;
+  C3 arg2 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   void *argp2 ;
@@ -58344,26 +58379,26 @@ SWIGINTERN PyObject *_wrap_GaussSphere_formfactor(PyObject *self, PyObject *args
   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 );
+  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 '" "GaussSphere_formfactor" "', argument " "1"" of type '" "GaussSphere const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FuzzySphere_formfactor" "', argument " "1"" of type '" "FuzzySphere const *""'"); 
   }
-  arg1 = reinterpret_cast< GaussSphere * >(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 '" "GaussSphere_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 '" "GaussSphere_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 = ((GaussSphere 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:
@@ -58371,9 +58406,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_GaussSphere_validate(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_FuzzySphere_validate(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  GaussSphere *arg1 = (GaussSphere *) 0 ;
+  FuzzySphere *arg1 = (FuzzySphere *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -58381,12 +58416,12 @@ SWIGINTERN PyObject *_wrap_GaussSphere_validate(PyObject *self, PyObject *args)
   
   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_FuzzySphere, 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 '" "FuzzySphere_validate" "', argument " "1"" of type '" "FuzzySphere const *""'"); 
   }
-  arg1 = reinterpret_cast< GaussSphere * >(argp1);
-  result = ((GaussSphere 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:
@@ -58394,20 +58429,20 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_GaussSphere(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_FuzzySphere(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  GaussSphere *arg1 = (GaussSphere *) 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_GaussSphere, 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_GaussSphere" "', argument " "1"" of type '" "GaussSphere *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_FuzzySphere" "', argument " "1"" of type '" "FuzzySphere *""'"); 
   }
-  arg1 = reinterpret_cast< GaussSphere * >(argp1);
+  arg1 = reinterpret_cast< FuzzySphere * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -58416,383 +58451,103 @@ fail:
 }
 
 
-SWIGINTERN PyObject *GaussSphere_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_GaussSphere, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_FuzzySphere, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *GaussSphere_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *FuzzySphere_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) {
-  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 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 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_new_FuzzySphere(PyObject *self, PyObject *args) {
-  Py_ssize_t argc;
-  PyObject *argv[3] = {
-    0
-  };
-  
-  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_FuzzySphere__SWIG_0(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_FuzzySphere__SWIG_1(self, argc, argv);
-      }
-    }
-  }
-  
-fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_FuzzySphere'.\n"
-    "  Possible C/C++ prototypes are:\n"
-    "    FuzzySphere::FuzzySphere(std::vector< double,std::allocator< double > >)\n"
-    "    FuzzySphere::FuzzySphere(double,double)\n");
-  return 0;
-}
-
-
-SWIGINTERN PyObject *_wrap_FuzzySphere_clone(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_ISelectionRule(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  FuzzySphere *arg1 = (FuzzySphere *) 0 ;
+  ISelectionRule *arg1 = (ISelectionRule *) 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_ISelectionRule, 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_ISelectionRule" "', argument " "1"" of type '" "ISelectionRule *""'"); 
   }
-  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< ISelectionRule * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_FuzzySphere_className(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_ISelectionRule_clone(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  FuzzySphere *arg1 = (FuzzySphere *) 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_FuzzySphere, 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 '" "FuzzySphere_className" "', argument " "1"" of type '" "FuzzySphere const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ISelectionRule_clone" "', argument " "1"" of type '" "ISelectionRule const *""'"); 
   }
-  arg1 = reinterpret_cast< FuzzySphere * >(argp1);
-  result = ((FuzzySphere 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_FuzzySphere_parDefs(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_ISelectionRule_coordinateSelected(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
-  FuzzySphere *arg1 = (FuzzySphere *) 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_FuzzySphere, 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 '" "FuzzySphere_parDefs" "', argument " "1"" of type '" "FuzzySphere const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ISelectionRule_coordinateSelected" "', argument " "1"" of type '" "ISelectionRule 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< 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_FuzzySphere_radialExtension(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  FuzzySphere *arg1 = (FuzzySphere *) 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_FuzzySphere, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FuzzySphere_radialExtension" "', argument " "1"" of type '" "FuzzySphere const *""'"); 
-  }
-  arg1 = reinterpret_cast< FuzzySphere * >(argp1);
-  result = (double)((FuzzySphere const *)arg1)->radialExtension();
-  resultobj = SWIG_From_double(static_cast< double >(result));
-  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_FuzzySphere_formfactor(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  FuzzySphere *arg1 = (FuzzySphere *) 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, "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 '" "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;
-    }
-  }
-  result = ((FuzzySphere 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_FuzzySphere_validate(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  FuzzySphere *arg1 = (FuzzySphere *) 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_FuzzySphere, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FuzzySphere_validate" "', argument " "1"" of type '" "FuzzySphere const *""'"); 
-  }
-  arg1 = reinterpret_cast< FuzzySphere * >(argp1);
-  result = ((FuzzySphere const *)arg1)->validate();
-  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_delete_FuzzySphere(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 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_FuzzySphere, SWIG_POINTER_DISOWN |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_FuzzySphere" "', argument " "1"" of type '" "FuzzySphere *""'"); 
-  }
-  arg1 = reinterpret_cast< FuzzySphere * >(argp1);
-  delete arg1;
-  resultobj = SWIG_Py_Void();
-  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) {
-  PyObject *resultobj = 0;
-  ISelectionRule *arg1 = (ISelectionRule *) 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_ISelectionRule, SWIG_POINTER_DISOWN |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_ISelectionRule" "', argument " "1"" of type '" "ISelectionRule *""'"); 
-  }
-  arg1 = reinterpret_cast< ISelectionRule * >(argp1);
-  delete arg1;
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_ISelectionRule_clone(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  ISelectionRule *arg1 = (ISelectionRule *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  ISelectionRule *result = 0 ;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ISelectionRule, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ISelectionRule_clone" "', argument " "1"" of type '" "ISelectionRule const *""'"); 
-  }
-  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_ISelectionRule_coordinateSelected(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  ISelectionRule *arg1 = (ISelectionRule *) 0 ;
-  I3 *arg2 = 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  void *argp2 = 0 ;
-  int res2 = 0 ;
-  PyObject *swig_obj[2] ;
-  bool 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_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 &""'"); 
-  }
-  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 *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_new_SimpleSelectionRule(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
   int arg1 ;
   int arg2 ;
@@ -62151,41 +61906,6 @@ static PyMethodDef SwigMethods[] = {
 	 { "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"
-		""},
-	 { "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_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"
-		""},
-	 { "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"
@@ -62196,87 +61916,57 @@ static PyMethodDef SwigMethods[] = {
 	 { "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"
-		""},
-	 { "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"
+	 { "new_Prism3", _wrap_new_Prism3, METH_VARARGS, "\n"
+		"Prism3(double base_edge, double height)\n"
+		"new_Prism3(vdouble1d_t P) -> Prism3\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"
+	 { "Prism3_clone", _wrap_Prism3_clone, METH_O, "Prism3_clone(Prism3 self) -> Prism3"},
+	 { "Prism3_className", _wrap_Prism3_className, METH_O, "Prism3_className(Prism3 self) -> std::string"},
+	 { "Prism3_parDefs", _wrap_Prism3_parDefs, METH_O, "Prism3_parDefs(Prism3 self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "Prism3_baseEdge", _wrap_Prism3_baseEdge, METH_O, "Prism3_baseEdge(Prism3 self) -> double"},
+	 { "Prism3_height", _wrap_Prism3_height, METH_O, "Prism3_height(Prism3 self) -> double"},
+	 { "delete_Prism3", _wrap_delete_Prism3, METH_O, "delete_Prism3(Prism3 self)"},
+	 { "Prism3_swigregister", Prism3_swigregister, METH_O, NULL},
+	 { "Prism3_swiginit", Prism3_swiginit, METH_VARARGS, NULL},
+	 { "new_Prism6", _wrap_new_Prism6, METH_VARARGS, "\n"
+		"Prism6(double base_edge, double height)\n"
+		"new_Prism6(vdouble1d_t P) -> Prism6\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"
+	 { "Prism6_clone", _wrap_Prism6_clone, METH_O, "Prism6_clone(Prism6 self) -> Prism6"},
+	 { "Prism6_className", _wrap_Prism6_className, METH_O, "Prism6_className(Prism6 self) -> std::string"},
+	 { "Prism6_parDefs", _wrap_Prism6_parDefs, METH_O, "Prism6_parDefs(Prism6 self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
+	 { "Prism6_baseEdge", _wrap_Prism6_baseEdge, METH_O, "Prism6_baseEdge(Prism6 self) -> double"},
+	 { "Prism6_height", _wrap_Prism6_height, METH_O, "Prism6_height(Prism6 self) -> double"},
+	 { "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"
 		""},
-	 { "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"
+	 { "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"
 		""},
-	 { "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},
+	 { "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"
@@ -62288,85 +61978,6 @@ static PyMethodDef SwigMethods[] = {
 	 { "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"
-		""},
-	 { "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"
-		""},
-	 { "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_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_Icosahedron", _wrap_new_Icosahedron, METH_VARARGS, "\n"
 		"Icosahedron(double edge)\n"
 		"new_Icosahedron(vdouble1d_t P) -> Icosahedron\n"
@@ -62378,87 +61989,6 @@ static PyMethodDef SwigMethods[] = {
 	 { "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"
-		""},
-	 { "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_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_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_Prism3", _wrap_new_Prism3, METH_VARARGS, "\n"
-		"Prism3(double base_edge, double height)\n"
-		"new_Prism3(vdouble1d_t P) -> Prism3\n"
-		""},
-	 { "Prism3_clone", _wrap_Prism3_clone, METH_O, "Prism3_clone(Prism3 self) -> Prism3"},
-	 { "Prism3_className", _wrap_Prism3_className, METH_O, "Prism3_className(Prism3 self) -> std::string"},
-	 { "Prism3_parDefs", _wrap_Prism3_parDefs, METH_O, "Prism3_parDefs(Prism3 self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "Prism3_baseEdge", _wrap_Prism3_baseEdge, METH_O, "Prism3_baseEdge(Prism3 self) -> double"},
-	 { "Prism3_height", _wrap_Prism3_height, METH_O, "Prism3_height(Prism3 self) -> double"},
-	 { "delete_Prism3", _wrap_delete_Prism3, METH_O, "delete_Prism3(Prism3 self)"},
-	 { "Prism3_swigregister", Prism3_swigregister, METH_O, NULL},
-	 { "Prism3_swiginit", Prism3_swiginit, METH_VARARGS, NULL},
-	 { "new_Prism6", _wrap_new_Prism6, METH_VARARGS, "\n"
-		"Prism6(double base_edge, double height)\n"
-		"new_Prism6(vdouble1d_t P) -> Prism6\n"
-		""},
-	 { "Prism6_clone", _wrap_Prism6_clone, METH_O, "Prism6_clone(Prism6 self) -> Prism6"},
-	 { "Prism6_className", _wrap_Prism6_className, METH_O, "Prism6_className(Prism6 self) -> std::string"},
-	 { "Prism6_parDefs", _wrap_Prism6_parDefs, METH_O, "Prism6_parDefs(Prism6 self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
-	 { "Prism6_baseEdge", _wrap_Prism6_baseEdge, METH_O, "Prism6_baseEdge(Prism6 self) -> double"},
-	 { "Prism6_height", _wrap_Prism6_height, METH_O, "Prism6_height(Prism6 self) -> double"},
-	 { "Prism6_validate", _wrap_Prism6_validate, METH_O, "Prism6_validate(Prism6 self) -> std::string"},
-	 { "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_Pyramid2", _wrap_new_Pyramid2, METH_VARARGS, "\n"
 		"Pyramid2(double length, double width, double height, double alpha)\n"
 		"new_Pyramid2(vdouble1d_t P) -> Pyramid2\n"
@@ -62496,7 +62026,6 @@ static PyMethodDef SwigMethods[] = {
 	 { "Pyramid4_height", _wrap_Pyramid4_height, METH_O, "Pyramid4_height(Pyramid4 self) -> double"},
 	 { "Pyramid4_baseEdge", _wrap_Pyramid4_baseEdge, METH_O, "Pyramid4_baseEdge(Pyramid4 self) -> double"},
 	 { "Pyramid4_alpha", _wrap_Pyramid4_alpha, METH_O, "Pyramid4_alpha(Pyramid4 self) -> double"},
-	 { "Pyramid4_validate", _wrap_Pyramid4_validate, METH_O, "Pyramid4_validate(Pyramid4 self) -> std::string"},
 	 { "delete_Pyramid4", _wrap_delete_Pyramid4, METH_O, "delete_Pyramid4(Pyramid4 self)"},
 	 { "Pyramid4_swigregister", Pyramid4_swigregister, METH_O, NULL},
 	 { "Pyramid4_swiginit", Pyramid4_swiginit, METH_VARARGS, NULL},
@@ -62510,40 +62039,35 @@ static PyMethodDef SwigMethods[] = {
 	 { "Pyramid6_baseEdge", _wrap_Pyramid6_baseEdge, METH_O, "Pyramid6_baseEdge(Pyramid6 self) -> double"},
 	 { "Pyramid6_height", _wrap_Pyramid6_height, METH_O, "Pyramid6_height(Pyramid6 self) -> double"},
 	 { "Pyramid6_alpha", _wrap_Pyramid6_alpha, METH_O, "Pyramid6_alpha(Pyramid6 self) -> double"},
-	 { "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"
+	 { "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"
 		""},
-	 { "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"
+	 { "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"},
+	 { "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"
 		""},
-	 { "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},
+	 { "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"},
+	 { "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"
@@ -62553,10 +62077,119 @@ static PyMethodDef SwigMethods[] = {
 	 { "TruncatedCube_parDefs", _wrap_TruncatedCube_parDefs, METH_O, "TruncatedCube_parDefs(TruncatedCube self) -> std::vector< ParaMeta,std::allocator< ParaMeta > >"},
 	 { "TruncatedCube_length", _wrap_TruncatedCube_length, METH_O, "TruncatedCube_length(TruncatedCube self) -> double"},
 	 { "TruncatedCube_removedLength", _wrap_TruncatedCube_removedLength, METH_O, "TruncatedCube_removedLength(TruncatedCube self) -> double"},
-	 { "TruncatedCube_validate", _wrap_TruncatedCube_validate, METH_O, "TruncatedCube_validate(TruncatedCube self) -> std::string"},
 	 { "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"
@@ -62590,6 +62223,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"