From f9bec3494a19d4a36ca336d7935d6e33b2c026d4 Mon Sep 17 00:00:00 2001
From: "Joachim Wuttke (o)" <j.wuttke@fz-juelich.de>
Date: Mon, 16 Nov 2020 15:01:04 +0100
Subject: [PATCH] disambiguate 2D and 3D lattice creation fcts

---
 Core/Export/SampleToPython.cpp                |  11 +-
 Examples/Demos/simul_demo_lattice1.py         |   2 +-
 Examples/Demos/simul_demo_lattice2.py         |   2 +-
 .../custom_objective_function.py              |   2 +-
 .../external_minimizer/lmfit_basics.py        |   2 +-
 .../external_minimizer/lmfit_with_plotting.py |   2 +-
 .../CosineRipplesAtRectLattice.py             |   2 +-
 .../Interference2DCenteredSquareLattice.py    |   2 +-
 .../Interference2DLatticeSumOfRotated.py      |   4 +-
 .../Interference2DParaCrystal.py              |   2 +-
 .../Interference2DRotatedSquareLattice.py     |   2 +-
 .../Interference2DSquareFiniteLattice.py      |   2 +-
 .../Interference2DSquareLattice.py            |   3 +-
 .../SpheresAtHexLattice.py                    |   2 +-
 .../TriangularRipple.py                       |   2 +-
 .../HexagonalLatticesWithBasis.py             |   2 +-
 .../MaterialProfileWithParticles.py           |   2 +-
 .../BoxesWithSpecularPeak.py                  |   2 +-
 .../CylindersInAverageLayer.py                |   2 +-
 .../HalfSpheresInAverageTopLayer.py           |   2 +-
 GUI/coregui/Models/GUIExamplesFactory.cpp     |   2 +-
 GUI/coregui/Models/GroupInfoCatalog.cpp       |   8 +-
 GUI/coregui/Models/ItemCatalog.cpp            |   6 +-
 GUI/coregui/Models/Lattice2DItems.cpp         |  28 +-
 GUI/coregui/Models/Lattice2DItems.h           |  12 +-
 GUI/coregui/Models/TransformFromDomain.cpp    |  20 +-
 Param/Node/INodeVisitor.h                     |  12 +-
 .../InterferenceFunction2DLattice.cpp         |   4 +-
 .../InterferenceFunction2DSuperLattice.cpp    |   2 +-
 Sample/Lattice/BakeLattice.cpp                |  12 +-
 Sample/Lattice/BakeLattice.h                  |  12 +-
 Sample/Lattice/Lattice2D.cpp                  |  52 +-
 Sample/Lattice/Lattice2D.h                    |  18 +-
 .../BoxesSquareLatticeBuilder.cpp             |   6 +-
 .../BoxesSquareLatticeBuilder.h               |   4 +-
 Sample/StandardSamples/ParaCrystalBuilder.cpp |   6 +-
 .../ParticleCompositionBuilder.cpp            |   2 +-
 .../StandardSamples/SampleBuilderFactory.cpp  |  10 +-
 .../StandardSamples/TwoDimLatticeBuilder.cpp  |  23 +-
 Sample/StandardSamples/TwoDimLatticeBuilder.h |  10 +-
 .../GUI/Translate/TranslationTests.cpp        |   4 +-
 .../Functional/Python/PyCore/mesocrystal1.py  |   2 +-
 Tests/Functional/Std/StandardTests.h          |  20 +-
 Tests/Performance/Core/Mesocrystal.cpp        |   2 +-
 .../Performance/Core/ThreadingComponents.cpp  |   2 +-
 Tests/Performance/Python/test_performance.py  |   2 +-
 ....int.gz => CenteredSquareLattice2D.int.gz} | Bin
 ...ce.int.gz => FiniteSquareLattice2D.int.gz} | Bin
 ...e.int.gz => RotatedSquareLattice2D.int.gz} | Bin
 ...eLattice.int.gz => SquareLattice2D.int.gz} | Bin
 Tests/UnitTests/Core/Sample/CrystalTest.cpp   |   2 +-
 Tests/UnitTests/Core/Sample/Lattice2DTest.cpp |  10 +-
 Tests/UnitTests/Core/Sample/LatticeTest.cpp   |   6 +-
 .../UnitTests/Core/Sample/MesoCrystalTest.cpp |   2 +-
 .../Core/Sample/MultilayerAveragingTest.cpp   |   4 +-
 Tests/UnitTests/GUI/TestParaCrystalItems.cpp  |  12 +-
 Tests/UnitTests/GUI/TestParticleLayoutItem.h  |  14 +-
 auto/Wrap/doxygenParam.i                      |   6 +-
 auto/Wrap/doxygenSample.i                     |  98 +--
 auto/Wrap/libBornAgainParam.py                |   8 +-
 auto/Wrap/libBornAgainParam_wrap.cpp          |  80 +-
 auto/Wrap/libBornAgainSample.py               | 204 +++---
 auto/Wrap/libBornAgainSample_wrap.cpp         | 692 +++++++++---------
 63 files changed, 738 insertions(+), 733 deletions(-)
 rename Tests/ReferenceData/Std/{CenteredSquareLattice.int.gz => CenteredSquareLattice2D.int.gz} (100%)
 rename Tests/ReferenceData/Std/{FiniteSquareLattice.int.gz => FiniteSquareLattice2D.int.gz} (100%)
 rename Tests/ReferenceData/Std/{RotatedSquareLattice.int.gz => RotatedSquareLattice2D.int.gz} (100%)
 rename Tests/ReferenceData/Std/{SquareLattice.int.gz => SquareLattice2D.int.gz} (100%)

diff --git a/Core/Export/SampleToPython.cpp b/Core/Export/SampleToPython.cpp
index 05fba47361e..edcc4c3f7ed 100644
--- a/Core/Export/SampleToPython.cpp
+++ b/Core/Export/SampleToPython.cpp
@@ -298,7 +298,7 @@ std::string SampleToPython::defineLattices2D() const
     for (auto it = themap->begin(); it != themap->end(); ++it) {
         const Lattice2D* lattice = it->first;
         std::string lattice_name = it->second;
-        result << indent() << lattice_name << " = ba.BasicLattice(\n";
+        result << indent() << lattice_name << " = ba.BasicLattice2D(\n";
         result << indent() << indent() << pyfmt::printNm(lattice->length1()) << ", "
                << pyfmt::printNm(lattice->length2()) << ", "
                << pyfmt::printDegrees(lattice->latticeAngle()) << ", "
@@ -448,8 +448,8 @@ std::string SampleToPython::defineInterferenceFunctions() const
             const auto* lattice = INodeUtils::OnlyChildOfType<Lattice2D>(*iff);
 
             result << indent() << it->second << " = ba.InterferenceFunctionFinite2DLattice("
-                   << m_label->labelLattice2D(lattice) << ", "
-                   << iff->numberUnitCells1() << ", " << iff->numberUnitCells2() << ")\n";
+                   << m_label->labelLattice2D(lattice) << ", " << iff->numberUnitCells1() << ", "
+                   << iff->numberUnitCells2() << ")\n";
 
             if (iff->integrationOverXi() == true)
                 result << indent() << it->second << ".setIntegrationOverXi(True)\n";
@@ -461,9 +461,8 @@ std::string SampleToPython::defineInterferenceFunctions() const
 
             result << indent() << it->second << " = ba.InterferenceFunction2DParaCrystal("
                    << m_label->labelLattice2D(lattice) << ", "
-                   << pyfmt::printNm(iff->dampingLength()) << ", "
-                   << pyfmt::printNm(domainSize[0]) << ", " << pyfmt::printNm(domainSize[1])
-                   << ")\n";
+                   << pyfmt::printNm(iff->dampingLength()) << ", " << pyfmt::printNm(domainSize[0])
+                   << ", " << pyfmt::printNm(domainSize[1]) << ")\n";
 
             if (iff->integrationOverXi() == true)
                 result << indent() << it->second << ".setIntegrationOverXi(True)\n";
diff --git a/Examples/Demos/simul_demo_lattice1.py b/Examples/Demos/simul_demo_lattice1.py
index e83b8afef7e..2fc3a58d21a 100644
--- a/Examples/Demos/simul_demo_lattice1.py
+++ b/Examples/Demos/simul_demo_lattice1.py
@@ -27,7 +27,7 @@ def RunSimulation():
     particle_layout.addParticle(cylinder, 1.0)
 
     # interference function
-    interference = InterferenceFunction2DLattice(ba.SquareLattice(10.0*nanometer))
+    interference = InterferenceFunction2DLattice(ba.SquareLattice2D(10.0*nanometer))
     pdf = FTDecayFunction2DCauchy(300.0*nanometer/2.0/M_PI, 100.0*nanometer/2.0/M_PI, 0)
     interference.setDecayFunction(pdf)
     particle_layout.setInterferenceFunction(interference)
diff --git a/Examples/Demos/simul_demo_lattice2.py b/Examples/Demos/simul_demo_lattice2.py
index 2e99c5e192c..b7dc1f7d104 100644
--- a/Examples/Demos/simul_demo_lattice2.py
+++ b/Examples/Demos/simul_demo_lattice2.py
@@ -32,7 +32,7 @@ def RunSimulation():
     particle_layout2.addParticle(cylinder, 1.0)
 
     # interference function
-    interference = InterferenceFunction2DLattice(ba.SquareLattice(10.0*nanometer))
+    interference = InterferenceFunction2DLattice(ba.SquareLattice2D(10.0*nanometer))
     pdf = FTDecayFunction2DCauchy(300.0*nanometer/2.0/M_PI, 100.0*nanometer/2.0/M_PI, 0)
     interference.setDecayFunction(pdf)
     particle_layout1.setInterferenceFunction(interference)
diff --git a/Examples/python/fitting/ex03_ExtendedExamples/custom_objective_function/custom_objective_function.py b/Examples/python/fitting/ex03_ExtendedExamples/custom_objective_function/custom_objective_function.py
index 26c5727efef..a72521bdb97 100644
--- a/Examples/python/fitting/ex03_ExtendedExamples/custom_objective_function/custom_objective_function.py
+++ b/Examples/python/fitting/ex03_ExtendedExamples/custom_objective_function/custom_objective_function.py
@@ -52,7 +52,7 @@ def get_sample(params):
     particle_layout.addParticle(sphere)
 
     interference = ba.InterferenceFunction2DLattice(
-        ba.HexagonalLattice(lattice_length))
+        ba.HexagonalLattice2D(lattice_length))
     pdf = ba.FTDecayFunction2DCauchy(10*nm, 10*nm, 0)
     interference.setDecayFunction(pdf)
 
diff --git a/Examples/python/fitting/ex03_ExtendedExamples/external_minimizer/lmfit_basics.py b/Examples/python/fitting/ex03_ExtendedExamples/external_minimizer/lmfit_basics.py
index 2f8f4618085..f0a22f72c68 100644
--- a/Examples/python/fitting/ex03_ExtendedExamples/external_minimizer/lmfit_basics.py
+++ b/Examples/python/fitting/ex03_ExtendedExamples/external_minimizer/lmfit_basics.py
@@ -26,7 +26,7 @@ def get_sample(params):
     particle_layout.addParticle(sphere)
 
     interference = ba.InterferenceFunction2DLattice(
-        ba.HexagonalLattice(lattice_length))
+        ba.HexagonalLattice2D(lattice_length))
     pdf = ba.FTDecayFunction2DCauchy(10*nm, 10*nm, 0)
     interference.setDecayFunction(pdf)
 
diff --git a/Examples/python/fitting/ex03_ExtendedExamples/external_minimizer/lmfit_with_plotting.py b/Examples/python/fitting/ex03_ExtendedExamples/external_minimizer/lmfit_with_plotting.py
index c05ac002ba3..b08c02e7d5a 100644
--- a/Examples/python/fitting/ex03_ExtendedExamples/external_minimizer/lmfit_with_plotting.py
+++ b/Examples/python/fitting/ex03_ExtendedExamples/external_minimizer/lmfit_with_plotting.py
@@ -27,7 +27,7 @@ def get_sample(params):
     particle_layout.addParticle(sphere)
 
     interference = ba.InterferenceFunction2DLattice(
-        ba.HexagonalLattice(lattice_length))
+        ba.HexagonalLattice2D(lattice_length))
     pdf = ba.FTDecayFunction2DCauchy(10*nm, 10*nm, 0)
     interference.setDecayFunction(pdf)
 
diff --git a/Examples/python/simulation/ex03_InterferenceFunctions/CosineRipplesAtRectLattice.py b/Examples/python/simulation/ex03_InterferenceFunctions/CosineRipplesAtRectLattice.py
index d0d89b53505..5f482c78cae 100644
--- a/Examples/python/simulation/ex03_InterferenceFunctions/CosineRipplesAtRectLattice.py
+++ b/Examples/python/simulation/ex03_InterferenceFunctions/CosineRipplesAtRectLattice.py
@@ -24,7 +24,7 @@ def get_sample():
     particle_layout.addParticle(particle, 1.0)
 
     interference = ba.InterferenceFunction2DLattice(
-        ba.BasicLattice(200.0*nm, 50.0*nm, 90.0*deg, 0.0*deg))
+        ba.BasicLattice2D(200.0*nm, 50.0*nm, 90.0*deg, 0.0*deg))
     pdf = ba.FTDecayFunction2DCauchy(1000.*nm/2./numpy.pi, 100.*nm/2./numpy.pi, 0)
     interference.setDecayFunction(pdf)
     particle_layout.setInterferenceFunction(interference)
diff --git a/Examples/python/simulation/ex03_InterferenceFunctions/Interference2DCenteredSquareLattice.py b/Examples/python/simulation/ex03_InterferenceFunctions/Interference2DCenteredSquareLattice.py
index ea4363117a2..7f8399e20aa 100644
--- a/Examples/python/simulation/ex03_InterferenceFunctions/Interference2DCenteredSquareLattice.py
+++ b/Examples/python/simulation/ex03_InterferenceFunctions/Interference2DCenteredSquareLattice.py
@@ -17,7 +17,7 @@ def get_sample():
     m_particle = ba.HomogeneousMaterial("Particle", 6e-4, 2e-8)
 
     # collection of particles
-    interference = ba.InterferenceFunction2DLattice(ba.SquareLattice(25.0*nm, 0))
+    interference = ba.InterferenceFunction2DLattice(ba.SquareLattice2D(25.0*nm, 0))
     pdf = ba.FTDecayFunction2DCauchy(300.0*nm/2.0/numpy.pi,
                                      100.0*nm/2.0/numpy.pi, 0)
     interference.setDecayFunction(pdf)
diff --git a/Examples/python/simulation/ex03_InterferenceFunctions/Interference2DLatticeSumOfRotated.py b/Examples/python/simulation/ex03_InterferenceFunctions/Interference2DLatticeSumOfRotated.py
index 125a213deca..6e5f5ba5652 100644
--- a/Examples/python/simulation/ex03_InterferenceFunctions/Interference2DLatticeSumOfRotated.py
+++ b/Examples/python/simulation/ex03_InterferenceFunctions/Interference2DLatticeSumOfRotated.py
@@ -17,7 +17,7 @@ def get_sample():
     substrate_layer = ba.Layer(m_substrate)
 
     p_interference_function = \
-        ba.InterferenceFunction2DLattice(ba.SquareLattice(25.0*nm, 0))
+        ba.InterferenceFunction2DLattice(ba.SquareLattice2D(25.0*nm, 0))
     pdf = ba.FTDecayFunction2DCauchy(300.0*nm/2.0/numpy.pi,
                                      100.0*nm/2.0/numpy.pi, 0)
     p_interference_function.setDecayFunction(pdf)
@@ -55,7 +55,7 @@ def get_simulation():
     xi_distr = ba.DistributionGate(xi_min, xi_max)
 
     # assigns distribution with 3 equidistant points to lattice rotation angle
-    simulation.addParameterDistribution("*/SquareLattice/Xi", xi_distr, 3)
+    simulation.addParameterDistribution("*/SquareLattice2D/Xi", xi_distr, 3)
 
     return simulation
 
diff --git a/Examples/python/simulation/ex03_InterferenceFunctions/Interference2DParaCrystal.py b/Examples/python/simulation/ex03_InterferenceFunctions/Interference2DParaCrystal.py
index af0500ab3f5..ffee0d01b04 100644
--- a/Examples/python/simulation/ex03_InterferenceFunctions/Interference2DParaCrystal.py
+++ b/Examples/python/simulation/ex03_InterferenceFunctions/Interference2DParaCrystal.py
@@ -18,7 +18,7 @@ def get_sample():
     cylinder = ba.Particle(m_particle, cylinder_ff)
 
     interference = ba.InterferenceFunction2DParaCrystal(
-        ba.SquareLattice(10.0*nm), 0.0, 20.0*micrometer, 20.0*micrometer)
+        ba.SquareLattice2D(10.0*nm), 0.0, 20.0*micrometer, 20.0*micrometer)
     interference.setIntegrationOverXi(True)
     pdf = ba.FTDistribution2DCauchy(1.0*nm, 1.0*nm, 0)
     interference.setProbabilityDistributions(pdf, pdf)
diff --git a/Examples/python/simulation/ex03_InterferenceFunctions/Interference2DRotatedSquareLattice.py b/Examples/python/simulation/ex03_InterferenceFunctions/Interference2DRotatedSquareLattice.py
index 99993c2f297..e0f43a4beef 100644
--- a/Examples/python/simulation/ex03_InterferenceFunctions/Interference2DRotatedSquareLattice.py
+++ b/Examples/python/simulation/ex03_InterferenceFunctions/Interference2DRotatedSquareLattice.py
@@ -17,7 +17,7 @@ def get_sample():
 
     # collection of particles
     interference = ba.InterferenceFunction2DLattice(
-        ba.SquareLattice(25.0*nm, 30.0*deg))
+        ba.SquareLattice2D(25.0*nm, 30.0*deg))
     pdf = ba.FTDecayFunction2DCauchy(300.0*nm/2.0/numpy.pi, 100.0*nm/2.0/numpy.pi, 0)
     pdf.setParameterValue("Gamma", 30.0*deg)
     interference.setDecayFunction(pdf)
diff --git a/Examples/python/simulation/ex03_InterferenceFunctions/Interference2DSquareFiniteLattice.py b/Examples/python/simulation/ex03_InterferenceFunctions/Interference2DSquareFiniteLattice.py
index 0319d13ca30..5e882bbf4d5 100644
--- a/Examples/python/simulation/ex03_InterferenceFunctions/Interference2DSquareFiniteLattice.py
+++ b/Examples/python/simulation/ex03_InterferenceFunctions/Interference2DSquareFiniteLattice.py
@@ -17,7 +17,7 @@ def get_sample():
 
     # collection of particles
     interference = ba.InterferenceFunctionFinite2DLattice(
-        ba.SquareLattice(25.0*nm, 0.0), 40, 40)
+        ba.SquareLattice2D(25.0*nm, 0.0), 40, 40)
     interference.setPositionVariance(1.0)
 
     cylinder_ff = ba.FormFactorCylinder(3.*nm, 3.*nm)
diff --git a/Examples/python/simulation/ex03_InterferenceFunctions/Interference2DSquareLattice.py b/Examples/python/simulation/ex03_InterferenceFunctions/Interference2DSquareLattice.py
index b4404934317..beee085dcfa 100644
--- a/Examples/python/simulation/ex03_InterferenceFunctions/Interference2DSquareLattice.py
+++ b/Examples/python/simulation/ex03_InterferenceFunctions/Interference2DSquareLattice.py
@@ -16,7 +16,8 @@ def get_sample():
     m_particle = ba.HomogeneousMaterial("Particle", 6e-4, 2e-8)
 
     # collection of particles
-    interference = ba.InterferenceFunction2DLattice(ba.SquareLattice(25.0*nm, 0*deg))
+    interference = ba.InterferenceFunction2DLattice(
+        ba.SquareLattice2D(25.0*nm, 0*deg))
     pdf = ba.FTDecayFunction2DCauchy(300.0*nm/2.0/numpy.pi,
                                      100.0*nm/2.0/numpy.pi, 0)
     interference.setDecayFunction(pdf)
diff --git a/Examples/python/simulation/ex03_InterferenceFunctions/SpheresAtHexLattice.py b/Examples/python/simulation/ex03_InterferenceFunctions/SpheresAtHexLattice.py
index 5813247a2a4..3aad9209640 100644
--- a/Examples/python/simulation/ex03_InterferenceFunctions/SpheresAtHexLattice.py
+++ b/Examples/python/simulation/ex03_InterferenceFunctions/SpheresAtHexLattice.py
@@ -20,7 +20,7 @@ def get_sample():
     particle_layout.addParticle(sphere)
 
     interference = ba.InterferenceFunction2DLattice(
-        ba.HexagonalLattice(20.0*nm, 0*deg))
+        ba.HexagonalLattice2D(20.0*nm, 0*deg))
     pdf = ba.FTDecayFunction2DCauchy(10*nm, 10*nm, 0)
     interference.setDecayFunction(pdf)
 
diff --git a/Examples/python/simulation/ex03_InterferenceFunctions/TriangularRipple.py b/Examples/python/simulation/ex03_InterferenceFunctions/TriangularRipple.py
index c9d4ea1a9a0..f70859eaa1c 100644
--- a/Examples/python/simulation/ex03_InterferenceFunctions/TriangularRipple.py
+++ b/Examples/python/simulation/ex03_InterferenceFunctions/TriangularRipple.py
@@ -25,7 +25,7 @@ def get_sample():
     particle_layout.addParticle(ripple, 1.0)
 
     interference = ba.InterferenceFunction2DLattice(
-        ba.BasicLattice(200.0*nm, 50.0*nm, 90.0*deg, 0.0*deg))
+        ba.BasicLattice2D(200.0*nm, 50.0*nm, 90.0*deg, 0.0*deg))
     pdf = ba.FTDecayFunction2DGauss(1000.*nm/2./numpy.pi, 100.*nm/2./numpy.pi, 0)
     interference.setDecayFunction(pdf)
     particle_layout.setInterferenceFunction(interference)
diff --git a/Examples/python/simulation/ex04_ComplexShapes/HexagonalLatticesWithBasis.py b/Examples/python/simulation/ex04_ComplexShapes/HexagonalLatticesWithBasis.py
index e798c1b411f..1c2298a929d 100644
--- a/Examples/python/simulation/ex04_ComplexShapes/HexagonalLatticesWithBasis.py
+++ b/Examples/python/simulation/ex04_ComplexShapes/HexagonalLatticesWithBasis.py
@@ -27,7 +27,7 @@ def get_sample():
     particle_layout.addParticle(basis)
 
     interference = ba.InterferenceFunction2DLattice(
-        ba.HexagonalLattice(radius*2.0, 0*deg))
+        ba.HexagonalLattice2D(radius*2.0, 0*deg))
     pdf = ba.FTDecayFunction2DCauchy(10*nm, 10*nm, 0)
     interference.setDecayFunction(pdf)
 
diff --git a/Examples/python/simulation/ex06_Reflectometry/MaterialProfileWithParticles.py b/Examples/python/simulation/ex06_Reflectometry/MaterialProfileWithParticles.py
index 2fd471de834..da91b839e05 100644
--- a/Examples/python/simulation/ex06_Reflectometry/MaterialProfileWithParticles.py
+++ b/Examples/python/simulation/ex06_Reflectometry/MaterialProfileWithParticles.py
@@ -35,7 +35,7 @@ def get_sample():
     particle = ba.Particle(m_particle, ff)
     layout = ba.ParticleLayout()
     layout.addParticle(particle)
-    iff = ba.InterferenceFunction2DLattice(ba.SquareLattice(10 * nm, 0))
+    iff = ba.InterferenceFunction2DLattice(ba.SquareLattice2D(10 * nm, 0))
     layout.setInterferenceFunction(iff)
     ambient_layer.addLayout(layout)
     ambient_layer.setNumberOfSlices(20)
diff --git a/Examples/python/simulation/ex07_Miscellaneous/BoxesWithSpecularPeak.py b/Examples/python/simulation/ex07_Miscellaneous/BoxesWithSpecularPeak.py
index aa060d9272e..c401213ac52 100644
--- a/Examples/python/simulation/ex07_Miscellaneous/BoxesWithSpecularPeak.py
+++ b/Examples/python/simulation/ex07_Miscellaneous/BoxesWithSpecularPeak.py
@@ -21,7 +21,7 @@ def get_sample():
     particle_layout.addParticle(box)
 
     # interference function
-    interference = ba.InterferenceFunction2DLattice(ba.SquareLattice(8*nm, 0*deg))
+    interference = ba.InterferenceFunction2DLattice(ba.SquareLattice2D(8*nm, 0*deg))
     pdf = ba.FTDecayFunction2DCauchy(100*nm, 100*nm, 0)
     interference.setDecayFunction(pdf)
     particle_layout.setInterferenceFunction(interference)
diff --git a/Examples/python/simulation/ex07_Miscellaneous/CylindersInAverageLayer.py b/Examples/python/simulation/ex07_Miscellaneous/CylindersInAverageLayer.py
index 96af9bfa209..90619a26b8b 100644
--- a/Examples/python/simulation/ex07_Miscellaneous/CylindersInAverageLayer.py
+++ b/Examples/python/simulation/ex07_Miscellaneous/CylindersInAverageLayer.py
@@ -23,7 +23,7 @@ def get_sample(cyl_height=5*nm):
     particle_layout.addParticle(cylinder, 1.0, position)
 
     # interference function
-    interference = ba.InterferenceFunction2DLattice(ba.SquareLattice(15*nm, 0*deg))
+    interference = ba.InterferenceFunction2DLattice(ba.SquareLattice2D(15*nm, 0*deg))
     pdf = ba.FTDecayFunction2DCauchy(300*nm, 300*nm, 0)
     interference.setDecayFunction(pdf)
     particle_layout.setInterferenceFunction(interference)
diff --git a/Examples/python/simulation/ex07_Miscellaneous/HalfSpheresInAverageTopLayer.py b/Examples/python/simulation/ex07_Miscellaneous/HalfSpheresInAverageTopLayer.py
index 2ecf336360f..a024491a7d5 100644
--- a/Examples/python/simulation/ex07_Miscellaneous/HalfSpheresInAverageTopLayer.py
+++ b/Examples/python/simulation/ex07_Miscellaneous/HalfSpheresInAverageTopLayer.py
@@ -26,7 +26,7 @@ def get_sample():
     particle_layout.addParticle(half_sphere)
 
     # interference function
-    interference = ba.InterferenceFunction2DLattice(ba.SquareLattice(10*nm, 0*deg))
+    interference = ba.InterferenceFunction2DLattice(ba.SquareLattice2D(10*nm, 0*deg))
     pdf = ba.FTDecayFunction2DCauchy(100*nm, 100*nm, 0)
     interference.setDecayFunction(pdf)
     particle_layout.setInterferenceFunction(interference)
diff --git a/GUI/coregui/Models/GUIExamplesFactory.cpp b/GUI/coregui/Models/GUIExamplesFactory.cpp
index 92db0d0c40f..07ecdf9cefb 100644
--- a/GUI/coregui/Models/GUIExamplesFactory.cpp
+++ b/GUI/coregui/Models/GUIExamplesFactory.cpp
@@ -27,7 +27,7 @@ QMap<QString, QString> init_NameToRegistry()
     result["example03"] = "HexParaCrystalBuilder";
     result["example04"] = "CoreShellParticleBuilder";
     result["example05"] = "MultiLayerWithRoughnessBuilder";
-    result["example06"] = "SquareLatticeBuilder";
+    result["example06"] = "SquareLattice2DBuilder";
     result["example07"] = "RotatedPyramidsBuilder";
     result["example08"] = "CylindersWithSizeDistributionBuilder";
     result["example09"] = "ParticleCompositionBuilder";
diff --git a/GUI/coregui/Models/GroupInfoCatalog.cpp b/GUI/coregui/Models/GroupInfoCatalog.cpp
index 13dc64d704e..f4ea64b92fc 100644
--- a/GUI/coregui/Models/GroupInfoCatalog.cpp
+++ b/GUI/coregui/Models/GroupInfoCatalog.cpp
@@ -133,10 +133,10 @@ GroupInfoCatalog::GroupInfoCatalog()
     addInfo(info);
 
     info = GroupInfo("Lattice group");
-    info.add("BasicLattice", "Basic");
-    info.add("SquareLattice", "Square");
-    info.add("HexagonalLattice", "Hexagonal");
-    info.setDefaultType("HexagonalLattice");
+    info.add("BasicLattice2D", "Basic");
+    info.add("SquareLattice2D", "Square");
+    info.add("HexagonalLattice2D", "Hexagonal");
+    info.setDefaultType("HexagonalLattice2D");
     addInfo(info);
 
     info = GroupInfo("Resolution function group");
diff --git a/GUI/coregui/Models/ItemCatalog.cpp b/GUI/coregui/Models/ItemCatalog.cpp
index de57baa658d..b623fb5f9a6 100644
--- a/GUI/coregui/Models/ItemCatalog.cpp
+++ b/GUI/coregui/Models/ItemCatalog.cpp
@@ -163,9 +163,9 @@ ItemCatalog::ItemCatalog()
     add("FTDecayFunction2DGauss", create_new<FTDecayFunction2DGaussItem>);
     add("FTDecayFunction2DVoigt", create_new<FTDecayFunction2DVoigtItem>);
 
-    add("BasicLattice", create_new<BasicLatticeItem>);
-    add("SquareLattice", create_new<SquareLatticeItem>);
-    add("HexagonalLattice", create_new<HexagonalLatticeItem>);
+    add("BasicLattice2D", create_new<BasicLattice2DItem>);
+    add("SquareLattice2D", create_new<SquareLattice2DItem>);
+    add("HexagonalLattice2D", create_new<HexagonalLattice2DItem>);
 
     add("Material", create_new<MaterialItem>);
     add("MaterialContainer", create_new<MaterialItemContainer>);
diff --git a/GUI/coregui/Models/Lattice2DItems.cpp b/GUI/coregui/Models/Lattice2DItems.cpp
index 78df94beb19..ab4329f399f 100644
--- a/GUI/coregui/Models/Lattice2DItems.cpp
+++ b/GUI/coregui/Models/Lattice2DItems.cpp
@@ -32,11 +32,11 @@ double Lattice2DItem::unitCellArea() const
     return createLattice()->unitCellArea();
 }
 
-const QString BasicLatticeItem::P_LATTICE_LENGTH1 = QString::fromStdString("LatticeLength1");
-const QString BasicLatticeItem::P_LATTICE_LENGTH2 = QString::fromStdString("LatticeLength2");
-const QString BasicLatticeItem::P_LATTICE_ANGLE = QString::fromStdString("Alpha");
+const QString BasicLattice2DItem::P_LATTICE_LENGTH1 = QString::fromStdString("LatticeLength1");
+const QString BasicLattice2DItem::P_LATTICE_LENGTH2 = QString::fromStdString("LatticeLength2");
+const QString BasicLattice2DItem::P_LATTICE_ANGLE = QString::fromStdString("Alpha");
 
-BasicLatticeItem::BasicLatticeItem() : Lattice2DItem("BasicLattice")
+BasicLattice2DItem::BasicLattice2DItem() : Lattice2DItem("BasicLattice2D")
 {
     setToolTip("Two dimensional lattice");
     addProperty(P_LATTICE_LENGTH1, 20.0)
@@ -47,9 +47,9 @@ BasicLatticeItem::BasicLatticeItem() : Lattice2DItem("BasicLattice")
     addProperty(Lattice2DItem::P_LATTICE_ROTATION_ANGLE, 0.0)->setToolTip(axis_rotation_tooltip);
 }
 
-std::unique_ptr<Lattice2D> BasicLatticeItem::createLattice() const
+std::unique_ptr<Lattice2D> BasicLattice2DItem::createLattice() const
 {
-    return std::make_unique<BasicLattice>(
+    return std::make_unique<BasicLattice2D>(
         getItemValue(P_LATTICE_LENGTH1).toDouble(), getItemValue(P_LATTICE_LENGTH2).toDouble(),
         Units::deg2rad(getItemValue(P_LATTICE_ANGLE).toDouble()),
         Units::deg2rad(getItemValue(Lattice2DItem::P_LATTICE_ROTATION_ANGLE).toDouble()));
@@ -57,36 +57,36 @@ std::unique_ptr<Lattice2D> BasicLatticeItem::createLattice() const
 
 // --------------------------------------------------------------------------------------------- //
 
-const QString SquareLatticeItem::P_LATTICE_LENGTH = QString::fromStdString("LatticeLength");
+const QString SquareLattice2DItem::P_LATTICE_LENGTH = QString::fromStdString("LatticeLength");
 
-SquareLatticeItem::SquareLatticeItem() : Lattice2DItem("SquareLattice")
+SquareLattice2DItem::SquareLattice2DItem() : Lattice2DItem("SquareLattice2D")
 {
     addProperty(P_LATTICE_LENGTH, 20.0)
         ->setToolTip("Length of first and second lattice vectors in nanometers");
     addProperty(Lattice2DItem::P_LATTICE_ROTATION_ANGLE, 0.0)->setToolTip(axis_rotation_tooltip);
 }
 
-std::unique_ptr<Lattice2D> SquareLatticeItem::createLattice() const
+std::unique_ptr<Lattice2D> SquareLattice2DItem::createLattice() const
 {
-    return std::make_unique<SquareLattice>(
+    return std::make_unique<SquareLattice2D>(
         getItemValue(P_LATTICE_LENGTH).toDouble(),
         Units::deg2rad(getItemValue(Lattice2DItem::P_LATTICE_ROTATION_ANGLE).toDouble()));
 }
 
 // --------------------------------------------------------------------------------------------- //
 
-const QString HexagonalLatticeItem::P_LATTICE_LENGTH = QString::fromStdString("LatticeLength");
+const QString HexagonalLattice2DItem::P_LATTICE_LENGTH = QString::fromStdString("LatticeLength");
 
-HexagonalLatticeItem::HexagonalLatticeItem() : Lattice2DItem("HexagonalLattice")
+HexagonalLattice2DItem::HexagonalLattice2DItem() : Lattice2DItem("HexagonalLattice2D")
 {
     addProperty(P_LATTICE_LENGTH, 20.0)
         ->setToolTip("Length of first and second lattice vectors in nanometers");
     addProperty(Lattice2DItem::P_LATTICE_ROTATION_ANGLE, 0.0)->setToolTip(axis_rotation_tooltip);
 }
 
-std::unique_ptr<Lattice2D> HexagonalLatticeItem::createLattice() const
+std::unique_ptr<Lattice2D> HexagonalLattice2DItem::createLattice() const
 {
-    return std::make_unique<HexagonalLattice>(
+    return std::make_unique<HexagonalLattice2D>(
         getItemValue(P_LATTICE_LENGTH).toDouble(),
         Units::deg2rad(getItemValue(Lattice2DItem::P_LATTICE_ROTATION_ANGLE).toDouble()));
 }
diff --git a/GUI/coregui/Models/Lattice2DItems.h b/GUI/coregui/Models/Lattice2DItems.h
index 2947ef9b3fb..359d29d3c0c 100644
--- a/GUI/coregui/Models/Lattice2DItems.h
+++ b/GUI/coregui/Models/Lattice2DItems.h
@@ -27,29 +27,29 @@ public:
     double unitCellArea() const;
 };
 
-class BA_CORE_API_ BasicLatticeItem : public Lattice2DItem
+class BA_CORE_API_ BasicLattice2DItem : public Lattice2DItem
 {
 public:
     static const QString P_LATTICE_LENGTH1;
     static const QString P_LATTICE_LENGTH2;
     static const QString P_LATTICE_ANGLE;
-    BasicLatticeItem();
+    BasicLattice2DItem();
     std::unique_ptr<Lattice2D> createLattice() const;
 };
 
-class BA_CORE_API_ SquareLatticeItem : public Lattice2DItem
+class BA_CORE_API_ SquareLattice2DItem : public Lattice2DItem
 {
 public:
     static const QString P_LATTICE_LENGTH;
-    SquareLatticeItem();
+    SquareLattice2DItem();
     std::unique_ptr<Lattice2D> createLattice() const;
 };
 
-class BA_CORE_API_ HexagonalLatticeItem : public Lattice2DItem
+class BA_CORE_API_ HexagonalLattice2DItem : public Lattice2DItem
 {
 public:
     static const QString P_LATTICE_LENGTH;
-    HexagonalLatticeItem();
+    HexagonalLattice2DItem();
     std::unique_ptr<Lattice2D> createLattice() const;
 };
 
diff --git a/GUI/coregui/Models/TransformFromDomain.cpp b/GUI/coregui/Models/TransformFromDomain.cpp
index d75c35f6c09..33fc8782ce0 100644
--- a/GUI/coregui/Models/TransformFromDomain.cpp
+++ b/GUI/coregui/Models/TransformFromDomain.cpp
@@ -761,22 +761,22 @@ void SetDecayFunction2D(SessionItem* item, const IFTDecayFunction2D* pdf, QStrin
 void set2DLatticeParameters(SessionItem* item, const Lattice2D& lattice)
 {
     SessionItem* latticeItem(nullptr);
-    if (lattice.getName() == "SquareLattice") {
+    if (lattice.getName() == "SquareLattice2D") {
         latticeItem = item->setGroupProperty(InterferenceFunction2DLatticeItem::P_LATTICE_TYPE,
-                                             "SquareLattice");
-        latticeItem->setItemValue(SquareLatticeItem::P_LATTICE_LENGTH, lattice.length1());
+                                             "SquareLattice2D");
+        latticeItem->setItemValue(SquareLattice2DItem::P_LATTICE_LENGTH, lattice.length1());
 
-    } else if (lattice.getName() == "HexagonalLattice") {
+    } else if (lattice.getName() == "HexagonalLattice2D") {
         latticeItem = item->setGroupProperty(InterferenceFunction2DLatticeItem::P_LATTICE_TYPE,
-                                             "HexagonalLattice");
-        latticeItem->setItemValue(HexagonalLatticeItem::P_LATTICE_LENGTH, lattice.length1());
+                                             "HexagonalLattice2D");
+        latticeItem->setItemValue(HexagonalLattice2DItem::P_LATTICE_LENGTH, lattice.length1());
 
     } else {
         latticeItem = item->setGroupProperty(InterferenceFunction2DLatticeItem::P_LATTICE_TYPE,
-                                             "BasicLattice");
-        latticeItem->setItemValue(BasicLatticeItem::P_LATTICE_LENGTH1, lattice.length1());
-        latticeItem->setItemValue(BasicLatticeItem::P_LATTICE_LENGTH2, lattice.length2());
-        latticeItem->setItemValue(BasicLatticeItem::P_LATTICE_ANGLE,
+                                             "BasicLattice2D");
+        latticeItem->setItemValue(BasicLattice2DItem::P_LATTICE_LENGTH1, lattice.length1());
+        latticeItem->setItemValue(BasicLattice2DItem::P_LATTICE_LENGTH2, lattice.length2());
+        latticeItem->setItemValue(BasicLattice2DItem::P_LATTICE_ANGLE,
                                   Units::rad2deg(lattice.latticeAngle()));
     }
     latticeItem->setItemValue(Lattice2DItem::P_LATTICE_ROTATION_ANGLE,
diff --git a/Param/Node/INodeVisitor.h b/Param/Node/INodeVisitor.h
index e513d4cc5ec..128401c0f99 100644
--- a/Param/Node/INodeVisitor.h
+++ b/Param/Node/INodeVisitor.h
@@ -15,7 +15,7 @@
 #ifndef BORNAGAIN_PARAM_NODE_INODEVISITOR_H
 #define BORNAGAIN_PARAM_NODE_INODEVISITOR_H
 
-class BasicLattice;
+class BasicLattice2D;
 class Beam;
 class ConstantBackground;
 class ConvolutionDetectorResolution;
@@ -90,7 +90,7 @@ class FTDistribution2DGate;
 class FTDistribution2DGauss;
 class FTDistribution2DVoigt;
 class GISASSimulation;
-class HexagonalLattice;
+class HexagonalLattice2D;
 class IAbstractParticle;
 class IClusteredParticles;
 class IdentityRotation;
@@ -137,7 +137,7 @@ class RotationZ;
 class SpecularDetector1D;
 class SpecularSimulation;
 class SphericalDetector;
-class SquareLattice;
+class SquareLattice2D;
 
 //! Visitor interface to visit ISample objects.
 //! @ingroup samples_internal
@@ -150,7 +150,7 @@ public:
     INodeVisitor() : m_depth(0) {}
     virtual ~INodeVisitor() {}
 
-    virtual void visit(const BasicLattice*) {}
+    virtual void visit(const BasicLattice2D*) {}
     virtual void visit(const Beam*) {}
     virtual void visit(const ConstantBackground*) {}
     virtual void visit(const ConvolutionDetectorResolution*) {}
@@ -225,7 +225,7 @@ public:
     virtual void visit(const FTDistribution2DGauss*) {}
     virtual void visit(const FTDistribution2DVoigt*) {}
     virtual void visit(const GISASSimulation*) {}
-    virtual void visit(const HexagonalLattice*) {}
+    virtual void visit(const HexagonalLattice2D*) {}
     virtual void visit(const IAbstractParticle*) {}
     virtual void visit(const IClusteredParticles*) {}
     virtual void visit(const IdentityRotation*) {}
@@ -272,7 +272,7 @@ public:
     virtual void visit(const SpecularDetector1D*) {}
     virtual void visit(const SpecularSimulation*) {}
     virtual void visit(const SphericalDetector*) {}
-    virtual void visit(const SquareLattice*) {}
+    virtual void visit(const SquareLattice2D*) {}
 
     //! Returns depth of the visitor in the composite hierarchy
     int depth() const { return m_depth; }
diff --git a/Sample/Aggregate/InterferenceFunction2DLattice.cpp b/Sample/Aggregate/InterferenceFunction2DLattice.cpp
index 86419028a95..9c18beb8ac9 100644
--- a/Sample/Aggregate/InterferenceFunction2DLattice.cpp
+++ b/Sample/Aggregate/InterferenceFunction2DLattice.cpp
@@ -167,8 +167,8 @@ void InterferenceFunction2DLattice::initialize_rec_vectors()
         throw std::runtime_error("InterferenceFunction2DLattice::initialize_rec_vectors() -> "
                                  "Error. No lattice defined yet");
 
-    BasicLattice base_lattice(m_lattice->length1(), m_lattice->length2(), m_lattice->latticeAngle(),
-                              0.);
+    BasicLattice2D base_lattice(m_lattice->length1(), m_lattice->length2(),
+                                m_lattice->latticeAngle(), 0.);
     m_sbase = base_lattice.reciprocalBases();
 }
 
diff --git a/Sample/Aggregate/InterferenceFunction2DSuperLattice.cpp b/Sample/Aggregate/InterferenceFunction2DSuperLattice.cpp
index e58c11ba3c4..cc0041a7635 100644
--- a/Sample/Aggregate/InterferenceFunction2DSuperLattice.cpp
+++ b/Sample/Aggregate/InterferenceFunction2DSuperLattice.cpp
@@ -46,7 +46,7 @@ InterferenceFunction2DSuperLattice::InterferenceFunction2DSuperLattice(const Lat
 //! @param size_2: correlation length in direction 2
 InterferenceFunction2DSuperLattice::InterferenceFunction2DSuperLattice(
     double length_1, double length_2, double alpha, double xi, unsigned size_1, unsigned size_2)
-    : InterferenceFunction2DSuperLattice(BasicLattice(length_1, length_2, alpha, xi), size_1,
+    : InterferenceFunction2DSuperLattice(BasicLattice2D(length_1, length_2, alpha, xi), size_1,
                                          size_2)
 {
 }
diff --git a/Sample/Lattice/BakeLattice.cpp b/Sample/Lattice/BakeLattice.cpp
index f9979f0da7c..a178819ced3 100644
--- a/Sample/Lattice/BakeLattice.cpp
+++ b/Sample/Lattice/BakeLattice.cpp
@@ -15,7 +15,7 @@
 #include "Sample/Lattice/BakeLattice.h"
 #include "Sample/Lattice/Lattice3D.h"
 
-Lattice3D bake::createCubicLattice(double a)
+Lattice3D bake::CubicLattice(double a)
 {
     kvector_t a1(a, 0.0, 0.0);
     kvector_t a2(0.0, a, 0.0);
@@ -23,7 +23,7 @@ Lattice3D bake::createCubicLattice(double a)
     return Lattice3D(a1, a2, a3);
 }
 
-Lattice3D bake::createFCCLattice(double a)
+Lattice3D bake::FCCLattice(double a)
 {
     double b = a / 2.0;
     kvector_t a1(0.0, b, b);
@@ -32,7 +32,7 @@ Lattice3D bake::createFCCLattice(double a)
     return Lattice3D(a1, a2, a3);
 }
 
-Lattice3D bake::createHexagonalLattice(double a, double c)
+Lattice3D bake::HexagonalLattice(double a, double c)
 {
     kvector_t a1(a, 0.0, 0.0);
     kvector_t a2(-a / 2.0, std::sqrt(3.0) * a / 2.0, 0.0);
@@ -40,7 +40,7 @@ Lattice3D bake::createHexagonalLattice(double a, double c)
     return Lattice3D(a1, a2, a3);
 }
 
-Lattice3D bake::createHCPLattice(double a, double c)
+Lattice3D bake::HCPLattice(double a, double c)
 {
     kvector_t a1(a, 0.0, 0.0);
     kvector_t a2(-a / 2.0, std::sqrt(3.0) * a / 2.0, 0);
@@ -48,7 +48,7 @@ Lattice3D bake::createHCPLattice(double a, double c)
     return Lattice3D(a1, a2, a3);
 }
 
-Lattice3D bake::createTetragonalLattice(double a, double c)
+Lattice3D bake::TetragonalLattice(double a, double c)
 {
     kvector_t a1(a, 0.0, 0.0);
     kvector_t a2(0.0, a, 0.0);
@@ -56,7 +56,7 @@ Lattice3D bake::createTetragonalLattice(double a, double c)
     return Lattice3D(a1, a2, a3);
 }
 
-Lattice3D bake::createBCTLattice(double a, double c)
+Lattice3D bake::BCTLattice(double a, double c)
 {
     kvector_t a1(a, 0.0, 0.0);
     kvector_t a2(0.0, a, 0.0);
diff --git a/Sample/Lattice/BakeLattice.h b/Sample/Lattice/BakeLattice.h
index 4f0373f36a6..239c7d6b92b 100644
--- a/Sample/Lattice/BakeLattice.h
+++ b/Sample/Lattice/BakeLattice.h
@@ -21,23 +21,23 @@ namespace bake
 {
 
 //! Returns a primitive cubic (cP) lattice with edge length a.
-Lattice3D createCubicLattice(double a);
+Lattice3D CubicLattice(double a);
 
 //! Returns a face-centered cubic (cF) lattice with edge length a.
-Lattice3D createFCCLattice(double a);
+Lattice3D FCCLattice(double a);
 
 //! Returns a primitive hexagonal (hP) lattice with hexagonal edge a and height c.
-Lattice3D createHexagonalLattice(double a, double c);
+Lattice3D HexagonalLattice(double a, double c);
 
 //! TODO: Clarify how this is meant: HCP is not a Bravais lattice.
-Lattice3D createHCPLattice(double a, double c);
+Lattice3D HCPLattice(double a, double c);
 
 //! Returns a primitive tetragonal (tP) lattice with square base edge a and height c.
-Lattice3D createTetragonalLattice(double a, double c);
+Lattice3D TetragonalLattice(double a, double c);
 
 //! Returns a body-centered cubic (cI) lattice with edge length a.
 //! TODO: Clarify meaning of c
-Lattice3D createBCTLattice(double a, double c);
+Lattice3D BCTLattice(double a, double c);
 
 } // namespace bake
 
diff --git a/Sample/Lattice/Lattice2D.cpp b/Sample/Lattice/Lattice2D.cpp
index a7dee724f0b..d8f8c5fbd06 100644
--- a/Sample/Lattice/Lattice2D.cpp
+++ b/Sample/Lattice/Lattice2D.cpp
@@ -62,86 +62,88 @@ void Lattice2D::setRotationEnabled(bool enabled) // TODO ASAP replace by generic
 }
 
 // ************************************************************************** //
-// class BasicLattice
+// class BasicLattice2D
 // ************************************************************************** //
 
-BasicLattice::BasicLattice(double length1, double length2, double angle, double xi)
+BasicLattice2D::BasicLattice2D(double length1, double length2, double angle, double xi)
     : Lattice2D(xi), m_length1(length1), m_length2(length2), m_angle(angle)
 {
     if (m_length1 <= 0.0 || m_length2 <= 0.0)
-        throw std::runtime_error("BasicLattice::BasicLattice() -> Error. Lattice length can't be "
-                                 "negative or zero.");
+        throw std::runtime_error(
+            "BasicLattice2D::BasicLattice2D() -> Error. Lattice length can't be "
+            "negative or zero.");
 
-    setName("BasicLattice");
+    setName("BasicLattice2D");
     registerParameter("LatticeLength1", &m_length1).setUnit("nm").setPositive();
     registerParameter("LatticeLength2", &m_length2).setUnit("nm").setPositive();
     registerParameter("Alpha", &m_angle).setUnit("rad");
 }
 
-BasicLattice* BasicLattice::clone() const
+BasicLattice2D* BasicLattice2D::clone() const
 {
-    return new BasicLattice(m_length1, m_length2, m_angle, m_xi);
+    return new BasicLattice2D(m_length1, m_length2, m_angle, m_xi);
 }
 
-double BasicLattice::unitCellArea() const
+double BasicLattice2D::unitCellArea() const
 {
     return std::abs(m_length1 * m_length2 * std::sin(m_angle));
 }
 
 // ************************************************************************** //
-// class SquareLattice
+// class SquareLattice2D
 // ************************************************************************** //
 
-SquareLattice::SquareLattice(double length, double xi) : Lattice2D(xi), m_length(length)
+SquareLattice2D::SquareLattice2D(double length, double xi) : Lattice2D(xi), m_length(length)
 {
     if (m_length <= 0.0)
-        throw std::runtime_error("SquareLattice::SquareLattice() -> Error. Lattice length can't be "
-                                 "negative or zero.");
+        throw std::runtime_error(
+            "SquareLattice2D::SquareLattice2D() -> Error. Lattice length can't be "
+            "negative or zero.");
 
-    setName("SquareLattice");
+    setName("SquareLattice2D");
     registerParameter("LatticeLength", &m_length).setUnit("nm").setPositive();
 }
 
-SquareLattice* SquareLattice::clone() const
+SquareLattice2D* SquareLattice2D::clone() const
 {
-    return new SquareLattice(m_length, m_xi);
+    return new SquareLattice2D(m_length, m_xi);
 }
 
-double SquareLattice::latticeAngle() const
+double SquareLattice2D::latticeAngle() const
 {
     return M_PI / 2.0;
 }
 
-double SquareLattice::unitCellArea() const
+double SquareLattice2D::unitCellArea() const
 {
     return std::abs(m_length * m_length);
 }
 
 // ************************************************************************** //
-// class HexagonalLattice
+// class HexagonalLattice2D
 // ************************************************************************** //
 
-HexagonalLattice::HexagonalLattice(double length, double xi) : Lattice2D(xi), m_length(length)
+HexagonalLattice2D::HexagonalLattice2D(double length, double xi) : Lattice2D(xi), m_length(length)
 {
     if (m_length <= 0.0)
-        throw std::runtime_error("HexagonalLattice::HexagonalLattice() -> Error. "
+        throw std::runtime_error("HexagonalLattice2D::HexagonalLattice2D() -> Error. "
                                  "Lattice length can't be negative or zero.");
 
-    setName("HexagonalLattice");
+    setName("HexagonalLattice2D");
     registerParameter("LatticeLength", &m_length).setUnit("nm").setPositive();
 }
 
-HexagonalLattice* HexagonalLattice::clone() const
+HexagonalLattice2D* HexagonalLattice2D::clone() const
 {
-    return new HexagonalLattice(m_length, m_xi);
+    return new HexagonalLattice2D(m_length, m_xi);
 }
 
-double HexagonalLattice::latticeAngle() const
+double HexagonalLattice2D::latticeAngle() const
 {
     return M_TWOPI / 3.0;
 }
 
-double HexagonalLattice::unitCellArea() const
+double HexagonalLattice2D::unitCellArea() const
 {
     static const double sinval = std::sin(latticeAngle());
     return std::abs(m_length * m_length * sinval);
diff --git a/Sample/Lattice/Lattice2D.h b/Sample/Lattice/Lattice2D.h
index 3cb822c7a87..f65f406978c 100644
--- a/Sample/Lattice/Lattice2D.h
+++ b/Sample/Lattice/Lattice2D.h
@@ -47,12 +47,12 @@ protected:
     double m_xi;
 };
 
-class BasicLattice : public Lattice2D
+class BasicLattice2D : public Lattice2D
 {
 public:
-    BasicLattice(double length1, double length2, double angle, double xi);
+    BasicLattice2D(double length1, double length2, double angle, double xi);
 
-    BasicLattice* clone() const;
+    BasicLattice2D* clone() const;
 
     void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
 
@@ -66,12 +66,12 @@ private:
     double m_angle;
 };
 
-class SquareLattice : public Lattice2D
+class SquareLattice2D : public Lattice2D
 {
 public:
-    SquareLattice(double length, double xi = 0.0);
+    SquareLattice2D(double length, double xi = 0.0);
 
-    SquareLattice* clone() const;
+    SquareLattice2D* clone() const;
 
     void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
 
@@ -84,12 +84,12 @@ private:
     double m_length;
 };
 
-class HexagonalLattice : public Lattice2D
+class HexagonalLattice2D : public Lattice2D
 {
 public:
-    HexagonalLattice(double length, double xi);
+    HexagonalLattice2D(double length, double xi);
 
-    HexagonalLattice* clone() const;
+    HexagonalLattice2D* clone() const;
 
     void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
 
diff --git a/Sample/StandardSamples/BoxesSquareLatticeBuilder.cpp b/Sample/StandardSamples/BoxesSquareLatticeBuilder.cpp
index 10331c867b0..cd6beeb3924 100644
--- a/Sample/StandardSamples/BoxesSquareLatticeBuilder.cpp
+++ b/Sample/StandardSamples/BoxesSquareLatticeBuilder.cpp
@@ -3,7 +3,7 @@
 //  BornAgain: simulate and fit scattering at grazing incidence
 //
 //! @file      Sample/StandardSamples/BoxesSquareLatticeBuilder.cpp
-//! @brief     Implements class BoxesSquareLatticeBuilder.
+//! @brief     Implements class BoxesSquareLattice2DBuilder.
 //!
 //! @homepage  http://www.bornagainproject.org
 //! @license   GNU General Public License v3 or higher (see COPYING)
@@ -22,7 +22,7 @@
 #include "Sample/Particle/Particle.h"
 #include "Sample/StandardSamples/ReferenceMaterials.h"
 
-MultiLayer* BoxesSquareLatticeBuilder::buildSample() const
+MultiLayer* BoxesSquareLattice2DBuilder::buildSample() const
 {
     const double length = 5 * Units::nm;
     const double height = 10 * Units::nm;
@@ -30,7 +30,7 @@ MultiLayer* BoxesSquareLatticeBuilder::buildSample() const
     Layer vacuum_layer(refMat::Vacuum);
     Layer substrate_layer(refMat::Substrate);
 
-    InterferenceFunction2DLattice iff(SquareLattice(8 * Units::nm, 0));
+    InterferenceFunction2DLattice iff(SquareLattice2D(8 * Units::nm, 0));
 
     FTDecayFunction2DCauchy pdf(100.0 * Units::nm, 100.0 * Units::nm, 0);
     iff.setDecayFunction(pdf);
diff --git a/Sample/StandardSamples/BoxesSquareLatticeBuilder.h b/Sample/StandardSamples/BoxesSquareLatticeBuilder.h
index c1698475bb3..9cffdc7b98b 100644
--- a/Sample/StandardSamples/BoxesSquareLatticeBuilder.h
+++ b/Sample/StandardSamples/BoxesSquareLatticeBuilder.h
@@ -3,7 +3,7 @@
 //  BornAgain: simulate and fit scattering at grazing incidence
 //
 //! @file      Sample/StandardSamples/BoxesSquareLatticeBuilder.h
-//! @brief     Defines class BoxesSquareLatticeBuilder.
+//! @brief     Defines class BoxesSquareLattice2DBuilder.
 //!
 //! @homepage  http://www.bornagainproject.org
 //! @license   GNU General Public License v3 or higher (see COPYING)
@@ -20,7 +20,7 @@
 //! Builds sample: square boxes in a square lattice
 //! @ingroup standard_samples
 
-class BoxesSquareLatticeBuilder : public ISampleBuilder
+class BoxesSquareLattice2DBuilder : public ISampleBuilder
 {
 public:
     MultiLayer* buildSample() const;
diff --git a/Sample/StandardSamples/ParaCrystalBuilder.cpp b/Sample/StandardSamples/ParaCrystalBuilder.cpp
index f3ce78de17d..ab62ca30844 100644
--- a/Sample/StandardSamples/ParaCrystalBuilder.cpp
+++ b/Sample/StandardSamples/ParaCrystalBuilder.cpp
@@ -71,7 +71,7 @@ MultiLayer* Basic2DParaCrystalBuilder::buildSample() const
     Layer substrate_layer(refMat::Substrate);
 
     InterferenceFunction2DParaCrystal iff(
-        BasicLattice(10.0 * Units::nm, 20.0 * Units::nm, 30.0 * Units::deg, 45.0 * Units::deg),
+        BasicLattice2D(10.0 * Units::nm, 20.0 * Units::nm, 30.0 * Units::deg, 45.0 * Units::deg),
         1000.0 * Units::nm, 20.0 * Units::micrometer, 40.0 * Units::micrometer);
 
     iff.setProbabilityDistributions(*m_pdf1, *m_pdf2);
@@ -118,7 +118,7 @@ MultiLayer* HexParaCrystalBuilder::buildSample() const
     Layer vacuum_layer(refMat::Vacuum);
     Layer substrate_layer(refMat::Substrate);
 
-    InterferenceFunction2DParaCrystal iff(HexagonalLattice(m_peak_distance, 0.0), m_corr_length,
+    InterferenceFunction2DParaCrystal iff(HexagonalLattice2D(m_peak_distance, 0.0), m_corr_length,
                                           m_domain_size_1, m_domain_size_2);
     iff.setIntegrationOverXi(true);
     FTDistribution2DCauchy pdf(1.0 * Units::nm, 1.0 * Units::nm, 0);
@@ -147,7 +147,7 @@ MultiLayer* RectParaCrystalBuilder::buildSample() const
     Layer vacuum_layer(refMat::Vacuum);
     Layer substrate_layer(refMat::Substrate);
 
-    InterferenceFunction2DParaCrystal iff(SquareLattice(10 * Units::nm), 0, 0, 0);
+    InterferenceFunction2DParaCrystal iff(SquareLattice2D(10 * Units::nm), 0, 0, 0);
     iff.setIntegrationOverXi(true);
     iff.setDomainSizes(20.0 * Units::micrometer, 20.0 * Units::micrometer);
     FTDistribution2DCauchy pdf1(0.5 * Units::nm, 2.0 * Units::nm, 0);
diff --git a/Sample/StandardSamples/ParticleCompositionBuilder.cpp b/Sample/StandardSamples/ParticleCompositionBuilder.cpp
index 770fd27422b..0ff68389486 100644
--- a/Sample/StandardSamples/ParticleCompositionBuilder.cpp
+++ b/Sample/StandardSamples/ParticleCompositionBuilder.cpp
@@ -43,7 +43,7 @@ MultiLayer* ParticleCompositionBuilder::buildSample() const
     basis.addParticles(sphere, positions);
     particle_layout.addParticle(basis);
 
-    InterferenceFunction2DLattice iff(HexagonalLattice(radius * 2.0, 0));
+    InterferenceFunction2DLattice iff(HexagonalLattice2D(radius * 2.0, 0));
     FTDecayFunction2DCauchy pdf(10 * Units::nm, 10 * Units::nm, 0);
     iff.setDecayFunction(pdf);
 
diff --git a/Sample/StandardSamples/SampleBuilderFactory.cpp b/Sample/StandardSamples/SampleBuilderFactory.cpp
index 182417f8f7c..a05b45d6535 100644
--- a/Sample/StandardSamples/SampleBuilderFactory.cpp
+++ b/Sample/StandardSamples/SampleBuilderFactory.cpp
@@ -74,13 +74,13 @@ SampleBuilderFactory::SampleBuilderFactory()
 
     registerItem("Basic2DLatticeBuilder", create_new<Basic2DLatticeBuilder>);
 
-    registerItem("SquareLatticeBuilder", create_new<SquareLatticeBuilder>);
+    registerItem("SquareLattice2DBuilder", create_new<SquareLattice2DBuilder>);
 
-    registerItem("CenteredSquareLatticeBuilder", create_new<CenteredSquareLatticeBuilder>);
+    registerItem("CenteredSquareLattice2DBuilder", create_new<CenteredSquareLattice2DBuilder>);
 
-    registerItem("RotatedSquareLatticeBuilder", create_new<RotatedSquareLatticeBuilder>);
+    registerItem("RotatedSquareLattice2DBuilder", create_new<RotatedSquareLattice2DBuilder>);
 
-    registerItem("FiniteSquareLatticeBuilder", create_new<FiniteSquareLatticeBuilder>);
+    registerItem("FiniteSquareLattice2DBuilder", create_new<FiniteSquareLattice2DBuilder>);
 
     registerItem("SuperLatticeBuilder", create_new<SuperLatticeBuilder>);
 
@@ -165,7 +165,7 @@ SampleBuilderFactory::SampleBuilderFactory()
 
     registerItem("LayersWithAbsorptionBySLDBuilder", create_new<LayersWithAbsorptionBySLDBuilder>);
 
-    registerItem("BoxesSquareLatticeBuilder", create_new<BoxesSquareLatticeBuilder>);
+    registerItem("BoxesSquareLattice2DBuilder", create_new<BoxesSquareLattice2DBuilder>);
 
     registerItem("RotatedCylindersBuilder", create_new<RotatedCylindersBuilder>);
 
diff --git a/Sample/StandardSamples/TwoDimLatticeBuilder.cpp b/Sample/StandardSamples/TwoDimLatticeBuilder.cpp
index 5748c85072e..52cc9c4aa7b 100644
--- a/Sample/StandardSamples/TwoDimLatticeBuilder.cpp
+++ b/Sample/StandardSamples/TwoDimLatticeBuilder.cpp
@@ -31,7 +31,7 @@ MultiLayer* Basic2DLatticeBuilder::buildSample() const
     Layer substrate_layer(refMat::Substrate);
 
     InterferenceFunction2DLattice iff(
-        BasicLattice(5.0 * Units::nm, 10.0 * Units::nm, 30.0 * Units::deg, 10.0 * Units::deg));
+        BasicLattice2D(5.0 * Units::nm, 10.0 * Units::nm, 30.0 * Units::deg, 10.0 * Units::deg));
 
     FTDecayFunction2DCauchy pdf(300.0 * Units::nm / 2.0 / M_PI, 100.0 * Units::nm / 2.0 / M_PI, 0);
     iff.setDecayFunction(pdf);
@@ -55,12 +55,12 @@ MultiLayer* Basic2DLatticeBuilder::buildSample() const
 // -----------------------------------------------------------------------------
 // lattice #1:
 // -----------------------------------------------------------------------------
-MultiLayer* SquareLatticeBuilder::buildSample() const
+MultiLayer* SquareLattice2DBuilder::buildSample() const
 {
     Layer vacuum_layer(refMat::Vacuum);
     Layer substrate_layer(refMat::Substrate);
 
-    InterferenceFunction2DLattice iff(SquareLattice(10.0 * Units::nm, 0));
+    InterferenceFunction2DLattice iff(SquareLattice2D(10.0 * Units::nm, 0));
     FTDecayFunction2DCauchy pdf(300.0 * Units::nm / 2.0 / M_PI, 100.0 * Units::nm / 2.0 / M_PI, 0);
     iff.setDecayFunction(pdf);
 
@@ -83,13 +83,13 @@ MultiLayer* SquareLatticeBuilder::buildSample() const
 // -----------------------------------------------------------------------------
 // lattice #2: centered
 // -----------------------------------------------------------------------------
-MultiLayer* CenteredSquareLatticeBuilder::buildSample() const
+MultiLayer* CenteredSquareLattice2DBuilder::buildSample() const
 {
     Layer vacuum_layer(refMat::Vacuum);
     Layer substrate_layer(refMat::Substrate);
 
     InterferenceFunction2DLattice interference_function(
-        BasicLattice(10.0 * Units::nm, 10.0 * Units::nm, M_PI / 2.0, 0));
+        BasicLattice2D(10.0 * Units::nm, 10.0 * Units::nm, M_PI / 2.0, 0));
     FTDecayFunction2DCauchy pdf(300.0 * Units::nm / 2.0 / M_PI, 100.0 * Units::nm / 2.0 / M_PI, 0);
     interference_function.setDecayFunction(pdf);
 
@@ -117,12 +117,12 @@ MultiLayer* CenteredSquareLatticeBuilder::buildSample() const
 // -----------------------------------------------------------------------------
 // lattice #3: rotated
 // -----------------------------------------------------------------------------
-MultiLayer* RotatedSquareLatticeBuilder::buildSample() const
+MultiLayer* RotatedSquareLattice2DBuilder::buildSample() const
 {
     Layer vacuum_layer(refMat::Vacuum);
     Layer substrate_layer(refMat::Substrate);
 
-    InterferenceFunction2DLattice iff(SquareLattice(10.0 * Units::nm, 30.0 * Units::deg));
+    InterferenceFunction2DLattice iff(SquareLattice2D(10.0 * Units::nm, 30.0 * Units::deg));
     FTDecayFunction2DCauchy pdf(300.0 * Units::nm / 2.0 / M_PI, 100.0 * Units::nm / 2.0 / M_PI,
                                 30.0 * Units::deg);
     iff.setDecayFunction(pdf);
@@ -147,12 +147,12 @@ MultiLayer* RotatedSquareLatticeBuilder::buildSample() const
 // -----------------------------------------------------------------------------
 // lattice #4: finite square
 // -----------------------------------------------------------------------------
-MultiLayer* FiniteSquareLatticeBuilder::buildSample() const
+MultiLayer* FiniteSquareLattice2DBuilder::buildSample() const
 {
     Layer vacuum_layer(refMat::Vacuum);
     Layer substrate_layer(refMat::Substrate);
 
-    InterferenceFunctionFinite2DLattice iff(SquareLattice(10.0 * Units::nm, 0.0), 40, 40);
+    InterferenceFunctionFinite2DLattice iff(SquareLattice2D(10.0 * Units::nm, 0.0), 40, 40);
     iff.setPositionVariance(1.0);
 
     // particles
@@ -179,8 +179,9 @@ MultiLayer* SuperLatticeBuilder::buildSample() const
     Layer vacuum_layer(refMat::Vacuum);
     Layer substrate_layer(refMat::Substrate);
 
-    InterferenceFunction2DSuperLattice iff(SquareLattice(200.0 * Units::nm, 0.0), 40, 40);
-    InterferenceFunctionFinite2DLattice substructure(SquareLattice(10.0 * Units::nm, 0.0), 10, 10);
+    InterferenceFunction2DSuperLattice iff(SquareLattice2D(200.0 * Units::nm, 0.0), 40, 40);
+    InterferenceFunctionFinite2DLattice substructure(SquareLattice2D(10.0 * Units::nm, 0.0), 10,
+                                                     10);
     iff.setSubstructureIFF(substructure);
     iff.setPositionVariance(1.0);
 
diff --git a/Sample/StandardSamples/TwoDimLatticeBuilder.h b/Sample/StandardSamples/TwoDimLatticeBuilder.h
index 78e08b943ce..4423a9f3d7a 100644
--- a/Sample/StandardSamples/TwoDimLatticeBuilder.h
+++ b/Sample/StandardSamples/TwoDimLatticeBuilder.h
@@ -30,17 +30,17 @@ public:
 //! Builds sample: 2D lattice with different disorder (IsGISAXS example #6).
 //! @ingroup standard_samples
 
-class SquareLatticeBuilder : public ISampleBuilder
+class SquareLattice2DBuilder : public ISampleBuilder
 {
 public:
-    SquareLatticeBuilder() {}
+    SquareLattice2DBuilder() {}
     MultiLayer* buildSample() const;
 };
 
 //! Builds sample: 2D lattice with different disorder (IsGISAXS example #6).
 //! @ingroup standard_samples
 
-class CenteredSquareLatticeBuilder : public ISampleBuilder
+class CenteredSquareLattice2DBuilder : public ISampleBuilder
 {
 public:
     MultiLayer* buildSample() const;
@@ -49,7 +49,7 @@ public:
 //! Builds sample: 2D lattice with different disorder (IsGISAXS example #6).
 //! @ingroup standard_samples
 
-class RotatedSquareLatticeBuilder : public ISampleBuilder
+class RotatedSquareLattice2DBuilder : public ISampleBuilder
 {
 public:
     MultiLayer* buildSample() const;
@@ -58,7 +58,7 @@ public:
 //! Builds sample: 2D finite lattice with thermal disorder.
 //! @ingroup standard_samples
 
-class FiniteSquareLatticeBuilder : public ISampleBuilder
+class FiniteSquareLattice2DBuilder : public ISampleBuilder
 {
 public:
     MultiLayer* buildSample() const;
diff --git a/Tests/Functional/GUI/Translate/TranslationTests.cpp b/Tests/Functional/GUI/Translate/TranslationTests.cpp
index e996725b900..467968dece5 100644
--- a/Tests/Functional/GUI/Translate/TranslationTests.cpp
+++ b/Tests/Functional/GUI/Translate/TranslationTests.cpp
@@ -54,9 +54,9 @@ TEST_F(Translate, Roughness)
     EXPECT_TRUE(run("BasicGISAS", "MultiLayerWithRoughnessBuilder"));
 }
 
-TEST_F(Translate, SquareLattice)
+TEST_F(Translate, SquareLattice2D)
 {
-    EXPECT_TRUE(run("BasicGISAS", "SquareLatticeBuilder"));
+    EXPECT_TRUE(run("BasicGISAS", "SquareLattice2DBuilder"));
 }
 
 TEST_F(Translate, Rotation)
diff --git a/Tests/Functional/Python/PyCore/mesocrystal1.py b/Tests/Functional/Python/PyCore/mesocrystal1.py
index 4da5e420165..484bee4064e 100644
--- a/Tests/Functional/Python/PyCore/mesocrystal1.py
+++ b/Tests/Functional/Python/PyCore/mesocrystal1.py
@@ -117,7 +117,7 @@ class MySampleBuilder(ISampleBuilder):
     # create lattice
     # -------------------------------------------------------------------------
     def createLattice(self, stacking_radius_a, stacking_radius_c):
-        result = createHexagonalLattice(stacking_radius_a*2.0, stacking_radius_c*2.0*2.3)
+        result = HexagonalLattice(stacking_radius_a*2.0, stacking_radius_c*2.0*2.3)
         result.setSelectionRule(SimpleSelectionRule(-1, 1, 1, 3))
         return result
 
diff --git a/Tests/Functional/Std/StandardTests.h b/Tests/Functional/Std/StandardTests.h
index a144c55fcae..b03d1c3eae7 100644
--- a/Tests/Functional/Std/StandardTests.h
+++ b/Tests/Functional/Std/StandardTests.h
@@ -86,24 +86,25 @@ TEST_F(Std, MultiLayerWithRoughness)
         run("MultiLayerWithRoughness", "MiniGISAS", "MultiLayerWithRoughnessBuilder", 2e-10));
 }
 
-TEST_F(Std, SquareLattice)
+TEST_F(Std, SquareLattice2D)
 {
-    EXPECT_TRUE(run("SquareLattice", "MiniGISAS", "SquareLatticeBuilder", 2e-10));
+    EXPECT_TRUE(run("SquareLattice2D", "MiniGISAS", "SquareLattice2DBuilder", 2e-10));
 }
 
-TEST_F(Std, CenteredSquareLattice)
+TEST_F(Std, CenteredSquareLattice2D)
 {
-    EXPECT_TRUE(run("CenteredSquareLattice", "MiniGISAS", "CenteredSquareLatticeBuilder", 2e-10));
+    EXPECT_TRUE(
+        run("CenteredSquareLattice2D", "MiniGISAS", "CenteredSquareLattice2DBuilder", 2e-10));
 }
 
-TEST_F(Std, RotatedSquareLattice)
+TEST_F(Std, RotatedSquareLattice2D)
 {
-    EXPECT_TRUE(run("RotatedSquareLattice", "MiniGISAS", "RotatedSquareLatticeBuilder", 2e-10));
+    EXPECT_TRUE(run("RotatedSquareLattice2D", "MiniGISAS", "RotatedSquareLattice2DBuilder", 2e-10));
 }
 
-TEST_F(Std, FiniteSquareLattice)
+TEST_F(Std, FiniteSquareLattice2D)
 {
-    EXPECT_TRUE(run("FiniteSquareLattice", "MiniGISAS", "FiniteSquareLatticeBuilder", 2e-10));
+    EXPECT_TRUE(run("FiniteSquareLattice2D", "MiniGISAS", "FiniteSquareLattice2DBuilder", 2e-10));
 }
 
 TEST_F(Std, RotatedPyramids)
@@ -361,7 +362,8 @@ TEST_F(Std, RectDetWithRoi)
 
 TEST_F(Std, BoxesWithSpecular)
 {
-    EXPECT_TRUE(run("BoxesWithSpecular", "MiniGISASSpecular", "BoxesSquareLatticeBuilder", 1e-10));
+    EXPECT_TRUE(
+        run("BoxesWithSpecular", "MiniGISASSpecular", "BoxesSquareLattice2DBuilder", 1e-10));
 }
 
 TEST_F(Std, RotatedCylinder)
diff --git a/Tests/Performance/Core/Mesocrystal.cpp b/Tests/Performance/Core/Mesocrystal.cpp
index 4cf83ed8fab..7b0a456799f 100644
--- a/Tests/Performance/Core/Mesocrystal.cpp
+++ b/Tests/Performance/Core/Mesocrystal.cpp
@@ -55,7 +55,7 @@ std::unique_ptr<RectangularDetector> create_detector()
 
 Lattice3D createLattice(double a, double c)
 {
-    Lattice3D result = bake::createHexagonalLattice(a, c);
+    Lattice3D result = bake::HexagonalLattice(a, c);
     result.setSelectionRule(SimpleSelectionRule(-1, 1, 1, 3));
     return result;
 }
diff --git a/Tests/Performance/Core/ThreadingComponents.cpp b/Tests/Performance/Core/ThreadingComponents.cpp
index 4e6a5112842..6e7023589d0 100644
--- a/Tests/Performance/Core/ThreadingComponents.cpp
+++ b/Tests/Performance/Core/ThreadingComponents.cpp
@@ -51,7 +51,7 @@ std::unique_ptr<MultiLayer> createSampleSpheresDistribution(int nspheres)
     ParticleDistribution particleDistribution_1(particle_1, par_distr_1);
 
     InterferenceFunction2DLattice interference_1(
-        BasicLattice(10.0 * Units::nm, 10.0 * Units::nm, 90.0 * Units::deg, 0.0 * Units::deg));
+        BasicLattice2D(10.0 * Units::nm, 10.0 * Units::nm, 90.0 * Units::deg, 0.0 * Units::deg));
     FTDecayFunction2DCauchy interference_1_pdf(47.7464829276 * Units::nm, 15.9154943092 * Units::nm,
                                                0.0 * Units::deg);
     interference_1.setDecayFunction(interference_1_pdf);
diff --git a/Tests/Performance/Python/test_performance.py b/Tests/Performance/Python/test_performance.py
index 2dbfcc03944..05182c9d12b 100755
--- a/Tests/Performance/Python/test_performance.py
+++ b/Tests/Performance/Python/test_performance.py
@@ -201,7 +201,7 @@ class PerformanceTests:
         self.add("CylindersInDWBA",    "MaxiGISAS",    "CylindersInDWBABuilder", 10)
         self.add("RotatedPyramids",    "MaxiGISAS",    "RotatedPyramidsBuilder", 10)
         self.add("CoreShell",          "MaxiGISAS",    "CoreShellParticleBuilder", 10)
-        self.add("SquareLattice",      "MaxiGISAS",    "SquareLatticeBuilder", 10)
+        self.add("SquareLattice2D",      "MaxiGISAS",    "SquareLattice2DBuilder", 10)
         self.add("RadialParaCrystal",  "MaxiGISAS",    "RadialParaCrystalBuilder", 10)
         self.add("HexParaCrystal",     "BasicGISAS",   "HexParaCrystalBuilder", 1)
         self.add("SSCA",               "MaxiGISAS",    "SizeDistributionSSCAModelBuilder", 10)
diff --git a/Tests/ReferenceData/Std/CenteredSquareLattice.int.gz b/Tests/ReferenceData/Std/CenteredSquareLattice2D.int.gz
similarity index 100%
rename from Tests/ReferenceData/Std/CenteredSquareLattice.int.gz
rename to Tests/ReferenceData/Std/CenteredSquareLattice2D.int.gz
diff --git a/Tests/ReferenceData/Std/FiniteSquareLattice.int.gz b/Tests/ReferenceData/Std/FiniteSquareLattice2D.int.gz
similarity index 100%
rename from Tests/ReferenceData/Std/FiniteSquareLattice.int.gz
rename to Tests/ReferenceData/Std/FiniteSquareLattice2D.int.gz
diff --git a/Tests/ReferenceData/Std/RotatedSquareLattice.int.gz b/Tests/ReferenceData/Std/RotatedSquareLattice2D.int.gz
similarity index 100%
rename from Tests/ReferenceData/Std/RotatedSquareLattice.int.gz
rename to Tests/ReferenceData/Std/RotatedSquareLattice2D.int.gz
diff --git a/Tests/ReferenceData/Std/SquareLattice.int.gz b/Tests/ReferenceData/Std/SquareLattice2D.int.gz
similarity index 100%
rename from Tests/ReferenceData/Std/SquareLattice.int.gz
rename to Tests/ReferenceData/Std/SquareLattice2D.int.gz
diff --git a/Tests/UnitTests/Core/Sample/CrystalTest.cpp b/Tests/UnitTests/Core/Sample/CrystalTest.cpp
index b51b5850086..586ff6db1cd 100644
--- a/Tests/UnitTests/Core/Sample/CrystalTest.cpp
+++ b/Tests/UnitTests/Core/Sample/CrystalTest.cpp
@@ -9,7 +9,7 @@ class CrystalTest : public ::testing::Test
 
 TEST_F(CrystalTest, getChildren)
 {
-    Lattice3D lattice = bake::createHexagonalLattice(1.0, 2.0);
+    Lattice3D lattice = bake::HexagonalLattice(1.0, 2.0);
     ParticleComposition composition;
     Crystal crystal(composition, lattice);
 
diff --git a/Tests/UnitTests/Core/Sample/Lattice2DTest.cpp b/Tests/UnitTests/Core/Sample/Lattice2DTest.cpp
index 1da1c24b164..37a0a14bd16 100644
--- a/Tests/UnitTests/Core/Sample/Lattice2DTest.cpp
+++ b/Tests/UnitTests/Core/Sample/Lattice2DTest.cpp
@@ -8,7 +8,7 @@ class Lattice2DTest : public ::testing::Test
 TEST_F(Lattice2DTest, basicLattice)
 {
     const double length1(1.0), length2(2.0), angle(3.0), rotangle(0.7);
-    BasicLattice lattice(length1, length2, angle, rotangle);
+    BasicLattice2D lattice(length1, length2, angle, rotangle);
     EXPECT_EQ(lattice.length1(), length1);
     EXPECT_EQ(lattice.length2(), length2);
     EXPECT_EQ(lattice.latticeAngle(), angle);
@@ -29,7 +29,7 @@ TEST_F(Lattice2DTest, basicLattice)
 TEST_F(Lattice2DTest, basicLatticeClone)
 {
     const double length1(1.0), length2(2.0), angle(3.0), xi(4.0);
-    BasicLattice lattice(length1, length2, angle, xi);
+    BasicLattice2D lattice(length1, length2, angle, xi);
 
     std::unique_ptr<Lattice2D> clone(lattice.clone());
     EXPECT_EQ(clone->length1(), length1);
@@ -41,7 +41,7 @@ TEST_F(Lattice2DTest, basicLatticeClone)
 TEST_F(Lattice2DTest, squareLatticeClone)
 {
     const double length(1.0), xi(4.0);
-    SquareLattice lattice(length, xi);
+    SquareLattice2D lattice(length, xi);
 
     std::unique_ptr<Lattice2D> clone(lattice.clone());
     EXPECT_EQ(clone->length1(), length);
@@ -61,7 +61,7 @@ TEST_F(Lattice2DTest, squareLatticeClone)
 TEST_F(Lattice2DTest, hexagonalLatticeClone)
 {
     const double length(1.0), xi(4.0);
-    HexagonalLattice lattice(length, xi);
+    HexagonalLattice2D lattice(length, xi);
 
     std::unique_ptr<Lattice2D> clone(lattice.clone());
     EXPECT_EQ(clone->length1(), length);
@@ -91,7 +91,7 @@ TEST_F(Lattice2DTest, onChange)
 
     Parent parent;
     const double length1(1.0), length2(2.0), angle(3.0), xi(4.0);
-    BasicLattice lattice(length1, length2, angle, xi);
+    BasicLattice2D lattice(length1, length2, angle, xi);
 
     parent.registerChild(&lattice);
     EXPECT_FALSE(parent.m_changed);
diff --git a/Tests/UnitTests/Core/Sample/LatticeTest.cpp b/Tests/UnitTests/Core/Sample/LatticeTest.cpp
index b381662e7c1..361fc2a1954 100644
--- a/Tests/UnitTests/Core/Sample/LatticeTest.cpp
+++ b/Tests/UnitTests/Core/Sample/LatticeTest.cpp
@@ -134,7 +134,7 @@ TEST_F(LatticeTest, reciprocalLatticeVectorsWithinRadiusTest)
 TEST_F(LatticeTest, FCCLatticeTest)
 {
     // creates FCC lattice onto a new Lattice instance l1
-    Lattice3D l1 = bake::createFCCLattice(1);
+    Lattice3D l1 = bake::FCCLattice(1);
 
     kvector_t fcc1(0, 0.5, 0.5), fcc2(0.5, 0, 0.5), fcc3(0.5, 0.5, 0);
 
@@ -144,9 +144,9 @@ TEST_F(LatticeTest, FCCLatticeTest)
 }
 
 // tests hexagonal lattice creation
-TEST_F(LatticeTest, HexagonalLatticeTest)
+TEST_F(LatticeTest, HexagonalLattice2DTest)
 {
-    Lattice3D l1 = bake::createHexagonalLattice(1, 4);
+    Lattice3D l1 = bake::HexagonalLattice(1, 4);
 
     kvector_t tri1(1, 0.0, 0.0);
     kvector_t tri2(-1 / 2.0, std::sqrt(3.0) * 1 / 2.0, 0);
diff --git a/Tests/UnitTests/Core/Sample/MesoCrystalTest.cpp b/Tests/UnitTests/Core/Sample/MesoCrystalTest.cpp
index 3b9b73e6329..601e1e108a7 100644
--- a/Tests/UnitTests/Core/Sample/MesoCrystalTest.cpp
+++ b/Tests/UnitTests/Core/Sample/MesoCrystalTest.cpp
@@ -12,7 +12,7 @@ class MesoCrystalTest : public ::testing::Test
 
 TEST_F(MesoCrystalTest, getChildren)
 {
-    Lattice3D lattice = bake::createHexagonalLattice(1.0, 2.0);
+    Lattice3D lattice = bake::HexagonalLattice(1.0, 2.0);
     ParticleComposition composition;
     Crystal crystal(composition, lattice);
     MesoCrystal meso(crystal, FormFactorFullSphere(1.0));
diff --git a/Tests/UnitTests/Core/Sample/MultilayerAveragingTest.cpp b/Tests/UnitTests/Core/Sample/MultilayerAveragingTest.cpp
index 31910e7dd6a..90661ecbec8 100644
--- a/Tests/UnitTests/Core/Sample/MultilayerAveragingTest.cpp
+++ b/Tests/UnitTests/Core/Sample/MultilayerAveragingTest.cpp
@@ -28,8 +28,8 @@ TEST_F(MultilayerAveragingTest, AverageMultilayer)
     Particle particle(stone, cylinder_ff);
 
     // interferences
-    InterferenceFunction2DLattice interf_1(BasicLattice(10.0, 10.0, 120.0, 0.0));
-    InterferenceFunction2DLattice interf_2(BasicLattice(10.0, 10.0, 120.0, 0.0));
+    InterferenceFunction2DLattice interf_1(BasicLattice2D(10.0, 10.0, 120.0, 0.0));
+    InterferenceFunction2DLattice interf_2(BasicLattice2D(10.0, 10.0, 120.0, 0.0));
 
     // layouts
     ParticleLayout layout_1;
diff --git a/Tests/UnitTests/GUI/TestParaCrystalItems.cpp b/Tests/UnitTests/GUI/TestParaCrystalItems.cpp
index a9a9e272cd8..65b91951719 100644
--- a/Tests/UnitTests/GUI/TestParaCrystalItems.cpp
+++ b/Tests/UnitTests/GUI/TestParaCrystalItems.cpp
@@ -18,8 +18,8 @@ TEST_F(TestParaCrystalItems, test_Para2D_fromToDomain)
     double damping_length(1000.0), domain_size1(50.0), domain_size2(100.0);
 
     InterferenceFunction2DParaCrystal orig(
-        BasicLattice(length1, length2, angle * Units::deg, xi * Units::deg),
-        damping_length, domain_size1, domain_size2);
+        BasicLattice2D(length1, length2, angle * Units::deg, xi * Units::deg), damping_length,
+        domain_size1, domain_size2);
 
     double clength_x(1.0), clength_y(2.0), gamma(3.0);
     orig.setProbabilityDistributions(
@@ -41,10 +41,10 @@ TEST_F(TestParaCrystalItems, test_Para2D_fromToDomain)
               orig.integrationOverXi());
 
     SessionItem* latticeItem = item.getGroupItem(InterferenceFunction2DLatticeItem::P_LATTICE_TYPE);
-    EXPECT_EQ(latticeItem->modelType(), "BasicLattice");
-    EXPECT_EQ(latticeItem->getItemValue(BasicLatticeItem::P_LATTICE_LENGTH1).toDouble(), length1);
-    EXPECT_EQ(latticeItem->getItemValue(BasicLatticeItem::P_LATTICE_LENGTH2).toDouble(), length2);
-    EXPECT_EQ(latticeItem->getItemValue(BasicLatticeItem::P_LATTICE_ANGLE).toDouble(), angle);
+    EXPECT_EQ(latticeItem->modelType(), "BasicLattice2D");
+    EXPECT_EQ(latticeItem->getItemValue(BasicLattice2DItem::P_LATTICE_LENGTH1).toDouble(), length1);
+    EXPECT_EQ(latticeItem->getItemValue(BasicLattice2DItem::P_LATTICE_LENGTH2).toDouble(), length2);
+    EXPECT_EQ(latticeItem->getItemValue(BasicLattice2DItem::P_LATTICE_ANGLE).toDouble(), angle);
     EXPECT_EQ(latticeItem->getItemValue(Lattice2DItem::P_LATTICE_ROTATION_ANGLE).toDouble(), xi);
 
     SessionItem* pdfItem1 = item.getGroupItem(InterferenceFunction2DParaCrystalItem::P_PDF1);
diff --git a/Tests/UnitTests/GUI/TestParticleLayoutItem.h b/Tests/UnitTests/GUI/TestParticleLayoutItem.h
index 07e661c7f61..6cc11f4041d 100644
--- a/Tests/UnitTests/GUI/TestParticleLayoutItem.h
+++ b/Tests/UnitTests/GUI/TestParticleLayoutItem.h
@@ -68,8 +68,8 @@ TEST_F(TestParticleLayoutItem, densityValue)
 
     auto& hexItem =
         interference->groupItem<Lattice2DItem>(InterferenceFunction2DLatticeItem::P_LATTICE_TYPE);
-    EXPECT_EQ(hexItem.modelType(), "HexagonalLattice");
-    double length = hexItem.getItemValue(HexagonalLatticeItem::P_LATTICE_LENGTH).toDouble();
+    EXPECT_EQ(hexItem.modelType(), "HexagonalLattice2D");
+    double length = hexItem.getItemValue(HexagonalLattice2DItem::P_LATTICE_LENGTH).toDouble();
     double expectedDensity = 1. / (length * length * std::sin(M_TWOPI / 3.0));
     EXPECT_DOUBLE_EQ(1.0 / hexItem.unitCellArea(), expectedDensity);
     EXPECT_DOUBLE_EQ(layout->getItemValue(ParticleLayoutItem::P_TOTAL_DENSITY).toDouble(),
@@ -77,18 +77,18 @@ TEST_F(TestParticleLayoutItem, densityValue)
 
     // changing hexagonal lattice length
     length = 100.0;
-    hexItem.setItemValue(HexagonalLatticeItem::P_LATTICE_LENGTH, length);
+    hexItem.setItemValue(HexagonalLattice2DItem::P_LATTICE_LENGTH, length);
     expectedDensity = 1. / (length * length * std::sin(M_TWOPI / 3.0));
     EXPECT_DOUBLE_EQ(layout->getItemValue(ParticleLayoutItem::P_TOTAL_DENSITY).toDouble(),
                      expectedDensity);
 
     // changing lattice type to square and checking new surface density
     interference->setGroupProperty(InterferenceFunction2DLatticeItem::P_LATTICE_TYPE,
-                                   "SquareLattice");
+                                   "SquareLattice2D");
     auto& squareItem =
         interference->groupItem<Lattice2DItem>(InterferenceFunction2DLatticeItem::P_LATTICE_TYPE);
-    EXPECT_EQ(squareItem.modelType(), "SquareLattice");
-    length = squareItem.getItemValue(SquareLatticeItem::P_LATTICE_LENGTH).toDouble();
+    EXPECT_EQ(squareItem.modelType(), "SquareLattice2D");
+    length = squareItem.getItemValue(SquareLattice2DItem::P_LATTICE_LENGTH).toDouble();
     expectedDensity = 1. / (length * length);
     EXPECT_DOUBLE_EQ(1.0 / squareItem.unitCellArea(), expectedDensity);
     EXPECT_DOUBLE_EQ(layout->getItemValue(ParticleLayoutItem::P_TOTAL_DENSITY).toDouble(),
@@ -96,7 +96,7 @@ TEST_F(TestParticleLayoutItem, densityValue)
 
     // changing square lattice length
     length = 200.0;
-    squareItem.setItemValue(SquareLatticeItem::P_LATTICE_LENGTH, length);
+    squareItem.setItemValue(SquareLattice2DItem::P_LATTICE_LENGTH, length);
     expectedDensity = 1. / (length * length);
     EXPECT_DOUBLE_EQ(layout->getItemValue(ParticleLayoutItem::P_TOTAL_DENSITY).toDouble(),
                      expectedDensity);
diff --git a/auto/Wrap/doxygenParam.i b/auto/Wrap/doxygenParam.i
index 1ec208aa17d..7ba27560eb5 100644
--- a/auto/Wrap/doxygenParam.i
+++ b/auto/Wrap/doxygenParam.i
@@ -484,7 +484,7 @@ C++ includes: INodeVisitor.h
 %feature("docstring")  INodeVisitor::~INodeVisitor "virtual INodeVisitor::~INodeVisitor()
 ";
 
-%feature("docstring")  INodeVisitor::visit "virtual void INodeVisitor::visit(const BasicLattice *)
+%feature("docstring")  INodeVisitor::visit "virtual void INodeVisitor::visit(const BasicLattice2D *)
 ";
 
 %feature("docstring")  INodeVisitor::visit "virtual void INodeVisitor::visit(const Beam *)
@@ -709,7 +709,7 @@ C++ includes: INodeVisitor.h
 %feature("docstring")  INodeVisitor::visit "virtual void INodeVisitor::visit(const GISASSimulation *)
 ";
 
-%feature("docstring")  INodeVisitor::visit "virtual void INodeVisitor::visit(const HexagonalLattice *)
+%feature("docstring")  INodeVisitor::visit "virtual void INodeVisitor::visit(const HexagonalLattice2D *)
 ";
 
 %feature("docstring")  INodeVisitor::visit "virtual void INodeVisitor::visit(const IAbstractParticle *)
@@ -850,7 +850,7 @@ C++ includes: INodeVisitor.h
 %feature("docstring")  INodeVisitor::visit "virtual void INodeVisitor::visit(const SphericalDetector *)
 ";
 
-%feature("docstring")  INodeVisitor::visit "virtual void INodeVisitor::visit(const SquareLattice *)
+%feature("docstring")  INodeVisitor::visit "virtual void INodeVisitor::visit(const SquareLattice2D *)
 ";
 
 %feature("docstring")  INodeVisitor::depth "int INodeVisitor::depth() const
diff --git a/auto/Wrap/doxygenSample.i b/auto/Wrap/doxygenSample.i
index 0f269b8ad0a..6060094ac51 100644
--- a/auto/Wrap/doxygenSample.i
+++ b/auto/Wrap/doxygenSample.i
@@ -139,28 +139,28 @@ C++ includes: ParaCrystalBuilder.h
 ";
 
 
-// File: classBasicLattice.xml
-%feature("docstring") BasicLattice "";
+// File: classBasicLattice2D.xml
+%feature("docstring") BasicLattice2D "";
 
-%feature("docstring")  BasicLattice::BasicLattice "BasicLattice::BasicLattice(double length1, double length2, double angle, double xi)
+%feature("docstring")  BasicLattice2D::BasicLattice2D "BasicLattice2D::BasicLattice2D(double length1, double length2, double angle, double xi)
 ";
 
-%feature("docstring")  BasicLattice::clone "BasicLattice * BasicLattice::clone() const
+%feature("docstring")  BasicLattice2D::clone "BasicLattice2D * BasicLattice2D::clone() const
 ";
 
-%feature("docstring")  BasicLattice::accept "void BasicLattice::accept(INodeVisitor *visitor) const final
+%feature("docstring")  BasicLattice2D::accept "void BasicLattice2D::accept(INodeVisitor *visitor) const final
 ";
 
-%feature("docstring")  BasicLattice::length1 "virtual double BasicLattice::length1() const
+%feature("docstring")  BasicLattice2D::length1 "virtual double BasicLattice2D::length1() const
 ";
 
-%feature("docstring")  BasicLattice::length2 "virtual double BasicLattice::length2() const
+%feature("docstring")  BasicLattice2D::length2 "virtual double BasicLattice2D::length2() const
 ";
 
-%feature("docstring")  BasicLattice::latticeAngle "virtual double BasicLattice::latticeAngle() const
+%feature("docstring")  BasicLattice2D::latticeAngle "virtual double BasicLattice2D::latticeAngle() const
 ";
 
-%feature("docstring")  BasicLattice::unitCellArea "double BasicLattice::unitCellArea() const
+%feature("docstring")  BasicLattice2D::unitCellArea "double BasicLattice2D::unitCellArea() const
 ";
 
 
@@ -222,15 +222,15 @@ C++ includes: BoxCompositionBuilder.h
 ";
 
 
-// File: classBoxesSquareLatticeBuilder.xml
-%feature("docstring") BoxesSquareLatticeBuilder "
+// File: classBoxesSquareLattice2DBuilder.xml
+%feature("docstring") BoxesSquareLattice2DBuilder "
 
 Builds sample: square boxes in a square lattice
 
 C++ includes: BoxesSquareLatticeBuilder.h
 ";
 
-%feature("docstring")  BoxesSquareLatticeBuilder::buildSample "MultiLayer * BoxesSquareLatticeBuilder::buildSample() const
+%feature("docstring")  BoxesSquareLattice2DBuilder::buildSample "MultiLayer * BoxesSquareLattice2DBuilder::buildSample() const
 ";
 
 
@@ -246,15 +246,15 @@ C++ includes: BoxCompositionBuilder.h
 ";
 
 
-// File: classCenteredSquareLatticeBuilder.xml
-%feature("docstring") CenteredSquareLatticeBuilder "
+// File: classCenteredSquareLattice2DBuilder.xml
+%feature("docstring") CenteredSquareLattice2DBuilder "
 
 Builds sample: 2D lattice with different disorder (IsGISAXS example #6).
 
 C++ includes: TwoDimLatticeBuilder.h
 ";
 
-%feature("docstring")  CenteredSquareLatticeBuilder::buildSample "MultiLayer * CenteredSquareLatticeBuilder::buildSample() const
+%feature("docstring")  CenteredSquareLattice2DBuilder::buildSample "MultiLayer * CenteredSquareLattice2DBuilder::buildSample() const
 ";
 
 
@@ -582,15 +582,15 @@ C++ includes: DecouplingApproximationStrategy.h
 ";
 
 
-// File: classFiniteSquareLatticeBuilder.xml
-%feature("docstring") FiniteSquareLatticeBuilder "
+// File: classFiniteSquareLattice2DBuilder.xml
+%feature("docstring") FiniteSquareLattice2DBuilder "
 
 Builds sample: 2D finite lattice with thermal disorder.
 
 C++ includes: TwoDimLatticeBuilder.h
 ";
 
-%feature("docstring")  FiniteSquareLatticeBuilder::buildSample "MultiLayer * FiniteSquareLatticeBuilder::buildSample() const
+%feature("docstring")  FiniteSquareLattice2DBuilder::buildSample "MultiLayer * FiniteSquareLattice2DBuilder::buildSample() const
 ";
 
 
@@ -2921,28 +2921,28 @@ C++ includes: PercusYevickBuilder.h
 // File: classMatrixFresnelMap_1_1HashKVector.xml
 
 
-// File: classHexagonalLattice.xml
-%feature("docstring") HexagonalLattice "";
+// File: classHexagonalLattice2D.xml
+%feature("docstring") HexagonalLattice2D "";
 
-%feature("docstring")  HexagonalLattice::HexagonalLattice "HexagonalLattice::HexagonalLattice(double length, double xi)
+%feature("docstring")  HexagonalLattice2D::HexagonalLattice2D "HexagonalLattice2D::HexagonalLattice2D(double length, double xi)
 ";
 
-%feature("docstring")  HexagonalLattice::clone "HexagonalLattice * HexagonalLattice::clone() const
+%feature("docstring")  HexagonalLattice2D::clone "HexagonalLattice2D * HexagonalLattice2D::clone() const
 ";
 
-%feature("docstring")  HexagonalLattice::accept "void HexagonalLattice::accept(INodeVisitor *visitor) const final
+%feature("docstring")  HexagonalLattice2D::accept "void HexagonalLattice2D::accept(INodeVisitor *visitor) const final
 ";
 
-%feature("docstring")  HexagonalLattice::length1 "virtual double HexagonalLattice::length1() const
+%feature("docstring")  HexagonalLattice2D::length1 "virtual double HexagonalLattice2D::length1() const
 ";
 
-%feature("docstring")  HexagonalLattice::length2 "virtual double HexagonalLattice::length2() const
+%feature("docstring")  HexagonalLattice2D::length2 "virtual double HexagonalLattice2D::length2() const
 ";
 
-%feature("docstring")  HexagonalLattice::latticeAngle "double HexagonalLattice::latticeAngle() const
+%feature("docstring")  HexagonalLattice2D::latticeAngle "double HexagonalLattice2D::latticeAngle() const
 ";
 
-%feature("docstring")  HexagonalLattice::unitCellArea "double HexagonalLattice::unitCellArea() const
+%feature("docstring")  HexagonalLattice2D::unitCellArea "double HexagonalLattice2D::unitCellArea() const
 ";
 
 
@@ -6501,15 +6501,15 @@ C++ includes: ParticleDistributionsBuilder.h
 ";
 
 
-// File: classRotatedSquareLatticeBuilder.xml
-%feature("docstring") RotatedSquareLatticeBuilder "
+// File: classRotatedSquareLattice2DBuilder.xml
+%feature("docstring") RotatedSquareLattice2DBuilder "
 
 Builds sample: 2D lattice with different disorder (IsGISAXS example #6).
 
 C++ includes: TwoDimLatticeBuilder.h
 ";
 
-%feature("docstring")  RotatedSquareLatticeBuilder::buildSample "MultiLayer * RotatedSquareLatticeBuilder::buildSample() const
+%feature("docstring")  RotatedSquareLattice2DBuilder::buildSample "MultiLayer * RotatedSquareLattice2DBuilder::buildSample() const
 ";
 
 
@@ -7280,43 +7280,43 @@ C++ includes: ParticleDistributionsBuilder.h
 ";
 
 
-// File: classSquareLattice.xml
-%feature("docstring") SquareLattice "";
+// File: classSquareLattice2D.xml
+%feature("docstring") SquareLattice2D "";
 
-%feature("docstring")  SquareLattice::SquareLattice "SquareLattice::SquareLattice(double length, double xi=0.0)
+%feature("docstring")  SquareLattice2D::SquareLattice2D "SquareLattice2D::SquareLattice2D(double length, double xi=0.0)
 ";
 
-%feature("docstring")  SquareLattice::clone "SquareLattice * SquareLattice::clone() const
+%feature("docstring")  SquareLattice2D::clone "SquareLattice2D * SquareLattice2D::clone() const
 ";
 
-%feature("docstring")  SquareLattice::accept "void SquareLattice::accept(INodeVisitor *visitor) const final
+%feature("docstring")  SquareLattice2D::accept "void SquareLattice2D::accept(INodeVisitor *visitor) const final
 ";
 
-%feature("docstring")  SquareLattice::length1 "virtual double SquareLattice::length1() const
+%feature("docstring")  SquareLattice2D::length1 "virtual double SquareLattice2D::length1() const
 ";
 
-%feature("docstring")  SquareLattice::length2 "virtual double SquareLattice::length2() const
+%feature("docstring")  SquareLattice2D::length2 "virtual double SquareLattice2D::length2() const
 ";
 
-%feature("docstring")  SquareLattice::latticeAngle "double SquareLattice::latticeAngle() const
+%feature("docstring")  SquareLattice2D::latticeAngle "double SquareLattice2D::latticeAngle() const
 ";
 
-%feature("docstring")  SquareLattice::unitCellArea "double SquareLattice::unitCellArea() const
+%feature("docstring")  SquareLattice2D::unitCellArea "double SquareLattice2D::unitCellArea() const
 ";
 
 
-// File: classSquareLatticeBuilder.xml
-%feature("docstring") SquareLatticeBuilder "
+// File: classSquareLattice2DBuilder.xml
+%feature("docstring") SquareLattice2DBuilder "
 
 Builds sample: 2D lattice with different disorder (IsGISAXS example #6).
 
 C++ includes: TwoDimLatticeBuilder.h
 ";
 
-%feature("docstring")  SquareLatticeBuilder::SquareLatticeBuilder "SquareLatticeBuilder::SquareLatticeBuilder()
+%feature("docstring")  SquareLattice2DBuilder::SquareLattice2DBuilder "SquareLattice2DBuilder::SquareLattice2DBuilder()
 ";
 
-%feature("docstring")  SquareLatticeBuilder::buildSample "MultiLayer * SquareLatticeBuilder::buildSample() const
+%feature("docstring")  SquareLattice2DBuilder::buildSample "MultiLayer * SquareLattice2DBuilder::buildSample() const
 ";
 
 
@@ -7656,32 +7656,32 @@ C++ includes: ZLimits.h
 
 
 // File: namespacebake.xml
-%feature("docstring")  bake::createCubicLattice "Lattice3D bake::createCubicLattice(double a)
+%feature("docstring")  bake::CubicLattice "Lattice3D bake::CubicLattice(double a)
 
 Returns a primitive cubic (cP) lattice with edge length a. 
 ";
 
-%feature("docstring")  bake::createFCCLattice "Lattice3D bake::createFCCLattice(double a)
+%feature("docstring")  bake::FCCLattice "Lattice3D bake::FCCLattice(double a)
 
 Returns a face-centered cubic (cF) lattice with edge length a. 
 ";
 
-%feature("docstring")  bake::createHexagonalLattice "Lattice3D bake::createHexagonalLattice(double a, double c)
+%feature("docstring")  bake::HexagonalLattice "Lattice3D bake::HexagonalLattice(double a, double c)
 
 Returns a primitive hexagonal (hP) lattice with hexagonal edge a and height c. 
 ";
 
-%feature("docstring")  bake::createHCPLattice "Lattice3D bake::createHCPLattice(double a, double c)
+%feature("docstring")  bake::HCPLattice "Lattice3D bake::HCPLattice(double a, double c)
 
 TODO: Clarify how this is meant: HCP is not a Bravais lattice. 
 ";
 
-%feature("docstring")  bake::createTetragonalLattice "Lattice3D bake::createTetragonalLattice(double a, double c)
+%feature("docstring")  bake::TetragonalLattice "Lattice3D bake::TetragonalLattice(double a, double c)
 
 Returns a primitive tetragonal (tP) lattice with square base edge a and height c. 
 ";
 
-%feature("docstring")  bake::createBCTLattice "Lattice3D bake::createBCTLattice(double a, double c)
+%feature("docstring")  bake::BCTLattice "Lattice3D bake::BCTLattice(double a, double c)
 
 Returns a body-centered cubic (cI) lattice with edge length a. TODO: Clarify meaning of c 
 ";
diff --git a/auto/Wrap/libBornAgainParam.py b/auto/Wrap/libBornAgainParam.py
index eb21700ad62..f5671728a2a 100644
--- a/auto/Wrap/libBornAgainParam.py
+++ b/auto/Wrap/libBornAgainParam.py
@@ -3295,7 +3295,7 @@ class INodeVisitor(object):
 
     def visit(self, *args):
         r"""
-        visit(INodeVisitor self, BasicLattice const * arg2)
+        visit(INodeVisitor self, BasicLattice2D const * arg2)
         visit(INodeVisitor self, Beam const * arg2)
         visit(INodeVisitor self, ConstantBackground const * arg2)
         visit(INodeVisitor self, ConvolutionDetectorResolution const * arg2)
@@ -3370,7 +3370,7 @@ class INodeVisitor(object):
         visit(INodeVisitor self, FTDistribution2DGauss const * arg2)
         visit(INodeVisitor self, FTDistribution2DVoigt const * arg2)
         visit(INodeVisitor self, GISASSimulation const * arg2)
-        visit(INodeVisitor self, HexagonalLattice const * arg2)
+        visit(INodeVisitor self, HexagonalLattice2D const * arg2)
         visit(INodeVisitor self, IAbstractParticle const * arg2)
         visit(INodeVisitor self, IClusteredParticles const * arg2)
         visit(INodeVisitor self, IdentityRotation const * arg2)
@@ -3417,8 +3417,8 @@ class INodeVisitor(object):
         visit(INodeVisitor self, SpecularDetector1D const * arg2)
         visit(INodeVisitor self, SpecularSimulation const * arg2)
         visit(INodeVisitor self, SphericalDetector const * arg2)
-        visit(INodeVisitor self, SquareLattice const * arg2)
-        virtual void INodeVisitor::visit(const SquareLattice *)
+        visit(INodeVisitor self, SquareLattice2D const * arg2)
+        virtual void INodeVisitor::visit(const SquareLattice2D *)
 
         """
         return _libBornAgainParam.INodeVisitor_visit(self, *args)
diff --git a/auto/Wrap/libBornAgainParam_wrap.cpp b/auto/Wrap/libBornAgainParam_wrap.cpp
index 29087bfebd5..2d17b834aa6 100644
--- a/auto/Wrap/libBornAgainParam_wrap.cpp
+++ b/auto/Wrap/libBornAgainParam_wrap.cpp
@@ -3098,7 +3098,7 @@ namespace Swig {
 /* -------- TYPES TABLE (BEGIN) -------- */
 
 #define SWIGTYPE_p_Attributes swig_types[0]
-#define SWIGTYPE_p_BasicLattice swig_types[1]
+#define SWIGTYPE_p_BasicLattice2D swig_types[1]
 #define SWIGTYPE_p_BasicVector3DT_double_t swig_types[2]
 #define SWIGTYPE_p_BasicVector3DT_int_t swig_types[3]
 #define SWIGTYPE_p_BasicVector3DT_std__complexT_double_t_t swig_types[4]
@@ -3176,7 +3176,7 @@ namespace Swig {
 #define SWIGTYPE_p_FormFactorTruncatedSpheroid swig_types[76]
 #define SWIGTYPE_p_FormFactorWeighted swig_types[77]
 #define SWIGTYPE_p_GISASSimulation swig_types[78]
-#define SWIGTYPE_p_HexagonalLattice swig_types[79]
+#define SWIGTYPE_p_HexagonalLattice2D swig_types[79]
 #define SWIGTYPE_p_IAbstractParticle swig_types[80]
 #define SWIGTYPE_p_ICloneable swig_types[81]
 #define SWIGTYPE_p_IClusteredParticles swig_types[82]
@@ -3241,7 +3241,7 @@ namespace Swig {
 #define SWIGTYPE_p_SpecularDetector1D swig_types[141]
 #define SWIGTYPE_p_SpecularSimulation swig_types[142]
 #define SWIGTYPE_p_SphericalDetector swig_types[143]
-#define SWIGTYPE_p_SquareLattice swig_types[144]
+#define SWIGTYPE_p_SquareLattice2D swig_types[144]
 #define SWIGTYPE_p_allocator_type swig_types[145]
 #define SWIGTYPE_p_char swig_types[146]
 #define SWIGTYPE_p_difference_type swig_types[147]
@@ -36892,7 +36892,7 @@ fail:
 SWIGINTERN PyObject *_wrap_INodeVisitor_visit__SWIG_0(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   INodeVisitor *arg1 = (INodeVisitor *) 0 ;
-  BasicLattice *arg2 = (BasicLattice *) 0 ;
+  BasicLattice2D *arg2 = (BasicLattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   void *argp2 = 0 ;
@@ -36904,12 +36904,12 @@ SWIGINTERN PyObject *_wrap_INodeVisitor_visit__SWIG_0(PyObject *SWIGUNUSEDPARM(s
     SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "INodeVisitor_visit" "', argument " "1"" of type '" "INodeVisitor *""'"); 
   }
   arg1 = reinterpret_cast< INodeVisitor * >(argp1);
-  res2 = SWIG_ConvertPtr(swig_obj[1], &argp2,SWIGTYPE_p_BasicLattice, 0 |  0 );
+  res2 = SWIG_ConvertPtr(swig_obj[1], &argp2,SWIGTYPE_p_BasicLattice2D, 0 |  0 );
   if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "INodeVisitor_visit" "', argument " "2"" of type '" "BasicLattice const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "INodeVisitor_visit" "', argument " "2"" of type '" "BasicLattice2D const *""'"); 
   }
-  arg2 = reinterpret_cast< BasicLattice * >(argp2);
-  (arg1)->visit((BasicLattice const *)arg2);
+  arg2 = reinterpret_cast< BasicLattice2D * >(argp2);
+  (arg1)->visit((BasicLattice2D const *)arg2);
   resultobj = SWIG_Py_Void();
   return resultobj;
 fail:
@@ -38992,7 +38992,7 @@ fail:
 SWIGINTERN PyObject *_wrap_INodeVisitor_visit__SWIG_75(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   INodeVisitor *arg1 = (INodeVisitor *) 0 ;
-  HexagonalLattice *arg2 = (HexagonalLattice *) 0 ;
+  HexagonalLattice2D *arg2 = (HexagonalLattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   void *argp2 = 0 ;
@@ -39004,12 +39004,12 @@ SWIGINTERN PyObject *_wrap_INodeVisitor_visit__SWIG_75(PyObject *SWIGUNUSEDPARM(
     SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "INodeVisitor_visit" "', argument " "1"" of type '" "INodeVisitor *""'"); 
   }
   arg1 = reinterpret_cast< INodeVisitor * >(argp1);
-  res2 = SWIG_ConvertPtr(swig_obj[1], &argp2,SWIGTYPE_p_HexagonalLattice, 0 |  0 );
+  res2 = SWIG_ConvertPtr(swig_obj[1], &argp2,SWIGTYPE_p_HexagonalLattice2D, 0 |  0 );
   if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "INodeVisitor_visit" "', argument " "2"" of type '" "HexagonalLattice const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "INodeVisitor_visit" "', argument " "2"" of type '" "HexagonalLattice2D const *""'"); 
   }
-  arg2 = reinterpret_cast< HexagonalLattice * >(argp2);
-  (arg1)->visit((HexagonalLattice const *)arg2);
+  arg2 = reinterpret_cast< HexagonalLattice2D * >(argp2);
+  (arg1)->visit((HexagonalLattice2D const *)arg2);
   resultobj = SWIG_Py_Void();
   return resultobj;
 fail:
@@ -40308,7 +40308,7 @@ fail:
 SWIGINTERN PyObject *_wrap_INodeVisitor_visit__SWIG_122(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   INodeVisitor *arg1 = (INodeVisitor *) 0 ;
-  SquareLattice *arg2 = (SquareLattice *) 0 ;
+  SquareLattice2D *arg2 = (SquareLattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   void *argp2 = 0 ;
@@ -40320,12 +40320,12 @@ SWIGINTERN PyObject *_wrap_INodeVisitor_visit__SWIG_122(PyObject *SWIGUNUSEDPARM
     SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "INodeVisitor_visit" "', argument " "1"" of type '" "INodeVisitor *""'"); 
   }
   arg1 = reinterpret_cast< INodeVisitor * >(argp1);
-  res2 = SWIG_ConvertPtr(swig_obj[1], &argp2,SWIGTYPE_p_SquareLattice, 0 |  0 );
+  res2 = SWIG_ConvertPtr(swig_obj[1], &argp2,SWIGTYPE_p_SquareLattice2D, 0 |  0 );
   if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "INodeVisitor_visit" "', argument " "2"" of type '" "SquareLattice const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "INodeVisitor_visit" "', argument " "2"" of type '" "SquareLattice2D const *""'"); 
   }
-  arg2 = reinterpret_cast< SquareLattice * >(argp2);
-  (arg1)->visit((SquareLattice const *)arg2);
+  arg2 = reinterpret_cast< SquareLattice2D * >(argp2);
+  (arg1)->visit((SquareLattice2D const *)arg2);
   resultobj = SWIG_Py_Void();
   return resultobj;
 fail:
@@ -40348,7 +40348,7 @@ SWIGINTERN PyObject *_wrap_INodeVisitor_visit(PyObject *self, PyObject *args) {
     _v = SWIG_CheckState(res);
     if (_v) {
       void *vptr = 0;
-      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_BasicLattice, 0);
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_BasicLattice2D, 0);
       _v = SWIG_CheckState(res);
       if (_v) {
         return _wrap_INodeVisitor_visit__SWIG_0(self, argc, argv);
@@ -41398,7 +41398,7 @@ SWIGINTERN PyObject *_wrap_INodeVisitor_visit(PyObject *self, PyObject *args) {
     _v = SWIG_CheckState(res);
     if (_v) {
       void *vptr = 0;
-      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_HexagonalLattice, 0);
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_HexagonalLattice2D, 0);
       _v = SWIG_CheckState(res);
       if (_v) {
         return _wrap_INodeVisitor_visit__SWIG_75(self, argc, argv);
@@ -42056,7 +42056,7 @@ SWIGINTERN PyObject *_wrap_INodeVisitor_visit(PyObject *self, PyObject *args) {
     _v = SWIG_CheckState(res);
     if (_v) {
       void *vptr = 0;
-      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_SquareLattice, 0);
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_SquareLattice2D, 0);
       _v = SWIG_CheckState(res);
       if (_v) {
         return _wrap_INodeVisitor_visit__SWIG_122(self, argc, argv);
@@ -42067,7 +42067,7 @@ SWIGINTERN PyObject *_wrap_INodeVisitor_visit(PyObject *self, PyObject *args) {
 fail:
   SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'INodeVisitor_visit'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    INodeVisitor::visit(BasicLattice const *)\n"
+    "    INodeVisitor::visit(BasicLattice2D const *)\n"
     "    INodeVisitor::visit(Beam const *)\n"
     "    INodeVisitor::visit(ConstantBackground const *)\n"
     "    INodeVisitor::visit(ConvolutionDetectorResolution const *)\n"
@@ -42142,7 +42142,7 @@ fail:
     "    INodeVisitor::visit(FTDistribution2DGauss const *)\n"
     "    INodeVisitor::visit(FTDistribution2DVoigt const *)\n"
     "    INodeVisitor::visit(GISASSimulation const *)\n"
-    "    INodeVisitor::visit(HexagonalLattice const *)\n"
+    "    INodeVisitor::visit(HexagonalLattice2D const *)\n"
     "    INodeVisitor::visit(IAbstractParticle const *)\n"
     "    INodeVisitor::visit(IClusteredParticles const *)\n"
     "    INodeVisitor::visit(IdentityRotation const *)\n"
@@ -42189,7 +42189,7 @@ fail:
     "    INodeVisitor::visit(SpecularDetector1D const *)\n"
     "    INodeVisitor::visit(SpecularSimulation const *)\n"
     "    INodeVisitor::visit(SphericalDetector const *)\n"
-    "    INodeVisitor::visit(SquareLattice const *)\n");
+    "    INodeVisitor::visit(SquareLattice2D const *)\n");
   return 0;
 }
 
@@ -51147,7 +51147,7 @@ static PyMethodDef SwigMethods[] = {
 		"\n"
 		""},
 	 { "INodeVisitor_visit", _wrap_INodeVisitor_visit, METH_VARARGS, "\n"
-		"INodeVisitor_visit(INodeVisitor self, BasicLattice const * arg2)\n"
+		"INodeVisitor_visit(INodeVisitor self, BasicLattice2D const * arg2)\n"
 		"INodeVisitor_visit(INodeVisitor self, Beam const * arg2)\n"
 		"INodeVisitor_visit(INodeVisitor self, ConstantBackground const * arg2)\n"
 		"INodeVisitor_visit(INodeVisitor self, ConvolutionDetectorResolution const * arg2)\n"
@@ -51222,7 +51222,7 @@ static PyMethodDef SwigMethods[] = {
 		"INodeVisitor_visit(INodeVisitor self, FTDistribution2DGauss const * arg2)\n"
 		"INodeVisitor_visit(INodeVisitor self, FTDistribution2DVoigt const * arg2)\n"
 		"INodeVisitor_visit(INodeVisitor self, GISASSimulation const * arg2)\n"
-		"INodeVisitor_visit(INodeVisitor self, HexagonalLattice const * arg2)\n"
+		"INodeVisitor_visit(INodeVisitor self, HexagonalLattice2D const * arg2)\n"
 		"INodeVisitor_visit(INodeVisitor self, IAbstractParticle const * arg2)\n"
 		"INodeVisitor_visit(INodeVisitor self, IClusteredParticles const * arg2)\n"
 		"INodeVisitor_visit(INodeVisitor self, IdentityRotation const * arg2)\n"
@@ -51269,8 +51269,8 @@ static PyMethodDef SwigMethods[] = {
 		"INodeVisitor_visit(INodeVisitor self, SpecularDetector1D const * arg2)\n"
 		"INodeVisitor_visit(INodeVisitor self, SpecularSimulation const * arg2)\n"
 		"INodeVisitor_visit(INodeVisitor self, SphericalDetector const * arg2)\n"
-		"INodeVisitor_visit(INodeVisitor self, SquareLattice const * arg2)\n"
-		"virtual void INodeVisitor::visit(const SquareLattice *)\n"
+		"INodeVisitor_visit(INodeVisitor self, SquareLattice2D const * arg2)\n"
+		"virtual void INodeVisitor::visit(const SquareLattice2D *)\n"
 		"\n"
 		""},
 	 { "INodeVisitor_depth", _wrap_INodeVisitor_depth, METH_O, "\n"
@@ -52104,7 +52104,7 @@ static void *_p_DistributionLogNormalTo_p_IDistribution1D(void *x, int *SWIGUNUS
     return (void *)((IDistribution1D *)  ((DistributionLogNormal *) x));
 }
 static swig_type_info _swigt__p_Attributes = {"_p_Attributes", "Attributes *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_BasicLattice = {"_p_BasicLattice", "BasicLattice *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_BasicLattice2D = {"_p_BasicLattice2D", "BasicLattice2D *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_BasicVector3DT_double_t = {"_p_BasicVector3DT_double_t", "std::vector< BasicVector3D< double > >::value_type *|kvector_t *|BasicVector3D< double > *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_BasicVector3DT_int_t = {"_p_BasicVector3DT_int_t", "ivector_t *|BasicVector3D< int > *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_BasicVector3DT_std__complexT_double_t_t = {"_p_BasicVector3DT_std__complexT_double_t_t", "BasicVector3D< std::complex< double > > *|std::vector< BasicVector3D< std::complex< double > > >::value_type *|cvector_t *", 0, 0, (void*)0, 0};
@@ -52182,7 +52182,7 @@ static swig_type_info _swigt__p_FormFactorTruncatedSphere = {"_p_FormFactorTrunc
 static swig_type_info _swigt__p_FormFactorTruncatedSpheroid = {"_p_FormFactorTruncatedSpheroid", "FormFactorTruncatedSpheroid *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_FormFactorWeighted = {"_p_FormFactorWeighted", "FormFactorWeighted *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_GISASSimulation = {"_p_GISASSimulation", "GISASSimulation *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_HexagonalLattice = {"_p_HexagonalLattice", "HexagonalLattice *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_HexagonalLattice2D = {"_p_HexagonalLattice2D", "HexagonalLattice2D *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_IAbstractParticle = {"_p_IAbstractParticle", "IAbstractParticle *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_ICloneable = {"_p_ICloneable", "ICloneable *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_IClusteredParticles = {"_p_IClusteredParticles", "IClusteredParticles *", 0, 0, (void*)0, 0};
@@ -52247,7 +52247,7 @@ static swig_type_info _swigt__p_RotationZ = {"_p_RotationZ", "RotationZ *", 0, 0
 static swig_type_info _swigt__p_SpecularDetector1D = {"_p_SpecularDetector1D", "SpecularDetector1D *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_SpecularSimulation = {"_p_SpecularSimulation", "SpecularSimulation *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_SphericalDetector = {"_p_SphericalDetector", "SphericalDetector *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_SquareLattice = {"_p_SquareLattice", "SquareLattice *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_SquareLattice2D = {"_p_SquareLattice2D", "SquareLattice2D *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_allocator_type = {"_p_allocator_type", "allocator_type *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_difference_type = {"_p_difference_type", "difference_type *", 0, 0, (void*)0, 0};
@@ -52306,7 +52306,7 @@ static swig_type_info _swigt__p_value_type = {"_p_value_type", "value_type *", 0
 
 static swig_type_info *swig_type_initial[] = {
   &_swigt__p_Attributes,
-  &_swigt__p_BasicLattice,
+  &_swigt__p_BasicLattice2D,
   &_swigt__p_BasicVector3DT_double_t,
   &_swigt__p_BasicVector3DT_int_t,
   &_swigt__p_BasicVector3DT_std__complexT_double_t_t,
@@ -52384,7 +52384,7 @@ static swig_type_info *swig_type_initial[] = {
   &_swigt__p_FormFactorTruncatedSpheroid,
   &_swigt__p_FormFactorWeighted,
   &_swigt__p_GISASSimulation,
-  &_swigt__p_HexagonalLattice,
+  &_swigt__p_HexagonalLattice2D,
   &_swigt__p_IAbstractParticle,
   &_swigt__p_ICloneable,
   &_swigt__p_IClusteredParticles,
@@ -52449,7 +52449,7 @@ static swig_type_info *swig_type_initial[] = {
   &_swigt__p_SpecularDetector1D,
   &_swigt__p_SpecularSimulation,
   &_swigt__p_SphericalDetector,
-  &_swigt__p_SquareLattice,
+  &_swigt__p_SquareLattice2D,
   &_swigt__p_allocator_type,
   &_swigt__p_char,
   &_swigt__p_difference_type,
@@ -52508,7 +52508,7 @@ static swig_type_info *swig_type_initial[] = {
 };
 
 static swig_cast_info _swigc__p_Attributes[] = {  {&_swigt__p_Attributes, 0, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_BasicLattice[] = {  {&_swigt__p_BasicLattice, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_BasicLattice2D[] = {  {&_swigt__p_BasicLattice2D, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_BasicVector3DT_double_t[] = {  {&_swigt__p_BasicVector3DT_double_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_BasicVector3DT_int_t[] = {  {&_swigt__p_BasicVector3DT_int_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_BasicVector3DT_std__complexT_double_t_t[] = {  {&_swigt__p_BasicVector3DT_std__complexT_double_t_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -52586,7 +52586,7 @@ static swig_cast_info _swigc__p_FormFactorTruncatedSphere[] = {  {&_swigt__p_For
 static swig_cast_info _swigc__p_FormFactorTruncatedSpheroid[] = {  {&_swigt__p_FormFactorTruncatedSpheroid, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_FormFactorWeighted[] = {  {&_swigt__p_FormFactorWeighted, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_GISASSimulation[] = {  {&_swigt__p_GISASSimulation, 0, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_HexagonalLattice[] = {  {&_swigt__p_HexagonalLattice, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_HexagonalLattice2D[] = {  {&_swigt__p_HexagonalLattice2D, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IAbstractParticle[] = {  {&_swigt__p_IAbstractParticle, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_ICloneable[] = {  {&_swigt__p_RangedDistributionGate, _p_RangedDistributionGateTo_p_ICloneable, 0, 0},  {&_swigt__p_DistributionGate, _p_DistributionGateTo_p_ICloneable, 0, 0},  {&_swigt__p_IDistribution1D, _p_IDistribution1DTo_p_ICloneable, 0, 0},  {&_swigt__p_DistributionTrapezoid, _p_DistributionTrapezoidTo_p_ICloneable, 0, 0},  {&_swigt__p_ICloneable, 0, 0, 0},  {&_swigt__p_RangedDistributionGaussian, _p_RangedDistributionGaussianTo_p_ICloneable, 0, 0},  {&_swigt__p_DistributionGaussian, _p_DistributionGaussianTo_p_ICloneable, 0, 0},  {&_swigt__p_ParameterPool, _p_ParameterPoolTo_p_ICloneable, 0, 0},  {&_swigt__p_RangedDistributionCosine, _p_RangedDistributionCosineTo_p_ICloneable, 0, 0},  {&_swigt__p_DistributionCosine, _p_DistributionCosineTo_p_ICloneable, 0, 0},  {&_swigt__p_RangedDistributionLorentz, _p_RangedDistributionLorentzTo_p_ICloneable, 0, 0},  {&_swigt__p_DistributionLorentz, _p_DistributionLorentzTo_p_ICloneable, 0, 0},  {&_swigt__p_RangedDistributionLogNormal, _p_RangedDistributionLogNormalTo_p_ICloneable, 0, 0},  {&_swigt__p_DistributionLogNormal, _p_DistributionLogNormalTo_p_ICloneable, 0, 0},  {&_swigt__p_RangedDistribution, _p_RangedDistributionTo_p_ICloneable, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IClusteredParticles[] = {  {&_swigt__p_IClusteredParticles, 0, 0, 0},{0, 0, 0, 0}};
@@ -52651,7 +52651,7 @@ static swig_cast_info _swigc__p_RotationZ[] = {  {&_swigt__p_RotationZ, 0, 0, 0}
 static swig_cast_info _swigc__p_SpecularDetector1D[] = {  {&_swigt__p_SpecularDetector1D, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_SpecularSimulation[] = {  {&_swigt__p_SpecularSimulation, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_SphericalDetector[] = {  {&_swigt__p_SphericalDetector, 0, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_SquareLattice[] = {  {&_swigt__p_SquareLattice, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_SquareLattice2D[] = {  {&_swigt__p_SquareLattice2D, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_allocator_type[] = {  {&_swigt__p_allocator_type, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_char[] = {  {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_difference_type[] = {  {&_swigt__p_difference_type, 0, 0, 0},{0, 0, 0, 0}};
@@ -52710,7 +52710,7 @@ static swig_cast_info _swigc__p_value_type[] = {  {&_swigt__p_value_type, 0, 0,
 
 static swig_cast_info *swig_cast_initial[] = {
   _swigc__p_Attributes,
-  _swigc__p_BasicLattice,
+  _swigc__p_BasicLattice2D,
   _swigc__p_BasicVector3DT_double_t,
   _swigc__p_BasicVector3DT_int_t,
   _swigc__p_BasicVector3DT_std__complexT_double_t_t,
@@ -52788,7 +52788,7 @@ static swig_cast_info *swig_cast_initial[] = {
   _swigc__p_FormFactorTruncatedSpheroid,
   _swigc__p_FormFactorWeighted,
   _swigc__p_GISASSimulation,
-  _swigc__p_HexagonalLattice,
+  _swigc__p_HexagonalLattice2D,
   _swigc__p_IAbstractParticle,
   _swigc__p_ICloneable,
   _swigc__p_IClusteredParticles,
@@ -52853,7 +52853,7 @@ static swig_cast_info *swig_cast_initial[] = {
   _swigc__p_SpecularDetector1D,
   _swigc__p_SpecularSimulation,
   _swigc__p_SphericalDetector,
-  _swigc__p_SquareLattice,
+  _swigc__p_SquareLattice2D,
   _swigc__p_allocator_type,
   _swigc__p_char,
   _swigc__p_difference_type,
diff --git a/auto/Wrap/libBornAgainSample.py b/auto/Wrap/libBornAgainSample.py
index d88428c23b1..1438c02517c 100644
--- a/auto/Wrap/libBornAgainSample.py
+++ b/auto/Wrap/libBornAgainSample.py
@@ -11429,264 +11429,264 @@ class Lattice2D(libBornAgainBase.ICloneable, libBornAgainParam.INode):
 # Register Lattice2D in _libBornAgainSample:
 _libBornAgainSample.Lattice2D_swigregister(Lattice2D)
 
-class BasicLattice(Lattice2D):
-    r"""Proxy of C++ BasicLattice class."""
+class BasicLattice2D(Lattice2D):
+    r"""Proxy of C++ BasicLattice2D 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, length1, length2, angle, xi):
         r"""
-        __init__(BasicLattice self, double length1, double length2, double angle, double xi) -> BasicLattice
-        BasicLattice::BasicLattice(double length1, double length2, double angle, double xi)
+        __init__(BasicLattice2D self, double length1, double length2, double angle, double xi) -> BasicLattice2D
+        BasicLattice2D::BasicLattice2D(double length1, double length2, double angle, double xi)
 
         """
-        _libBornAgainSample.BasicLattice_swiginit(self, _libBornAgainSample.new_BasicLattice(length1, length2, angle, xi))
+        _libBornAgainSample.BasicLattice2D_swiginit(self, _libBornAgainSample.new_BasicLattice2D(length1, length2, angle, xi))
 
     def clone(self):
         r"""
-        clone(BasicLattice self) -> BasicLattice
-        BasicLattice * BasicLattice::clone() const
+        clone(BasicLattice2D self) -> BasicLattice2D
+        BasicLattice2D * BasicLattice2D::clone() const
 
         """
-        return _libBornAgainSample.BasicLattice_clone(self)
+        return _libBornAgainSample.BasicLattice2D_clone(self)
 
     def accept(self, visitor):
         r"""
-        accept(BasicLattice self, INodeVisitor * visitor)
-        void BasicLattice::accept(INodeVisitor *visitor) const final
+        accept(BasicLattice2D self, INodeVisitor * visitor)
+        void BasicLattice2D::accept(INodeVisitor *visitor) const final
 
         """
-        return _libBornAgainSample.BasicLattice_accept(self, visitor)
+        return _libBornAgainSample.BasicLattice2D_accept(self, visitor)
 
     def length1(self):
         r"""
-        length1(BasicLattice self) -> double
-        virtual double BasicLattice::length1() const
+        length1(BasicLattice2D self) -> double
+        virtual double BasicLattice2D::length1() const
 
         """
-        return _libBornAgainSample.BasicLattice_length1(self)
+        return _libBornAgainSample.BasicLattice2D_length1(self)
 
     def length2(self):
         r"""
-        length2(BasicLattice self) -> double
-        virtual double BasicLattice::length2() const
+        length2(BasicLattice2D self) -> double
+        virtual double BasicLattice2D::length2() const
 
         """
-        return _libBornAgainSample.BasicLattice_length2(self)
+        return _libBornAgainSample.BasicLattice2D_length2(self)
 
     def latticeAngle(self):
         r"""
-        latticeAngle(BasicLattice self) -> double
-        virtual double BasicLattice::latticeAngle() const
+        latticeAngle(BasicLattice2D self) -> double
+        virtual double BasicLattice2D::latticeAngle() const
 
         """
-        return _libBornAgainSample.BasicLattice_latticeAngle(self)
+        return _libBornAgainSample.BasicLattice2D_latticeAngle(self)
 
     def unitCellArea(self):
         r"""
-        unitCellArea(BasicLattice self) -> double
-        double BasicLattice::unitCellArea() const
+        unitCellArea(BasicLattice2D self) -> double
+        double BasicLattice2D::unitCellArea() const
 
         """
-        return _libBornAgainSample.BasicLattice_unitCellArea(self)
-    __swig_destroy__ = _libBornAgainSample.delete_BasicLattice
+        return _libBornAgainSample.BasicLattice2D_unitCellArea(self)
+    __swig_destroy__ = _libBornAgainSample.delete_BasicLattice2D
 
-# Register BasicLattice in _libBornAgainSample:
-_libBornAgainSample.BasicLattice_swigregister(BasicLattice)
+# Register BasicLattice2D in _libBornAgainSample:
+_libBornAgainSample.BasicLattice2D_swigregister(BasicLattice2D)
 
-class SquareLattice(Lattice2D):
-    r"""Proxy of C++ SquareLattice class."""
+class SquareLattice2D(Lattice2D):
+    r"""Proxy of C++ SquareLattice2D 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, length, xi=0.0):
         r"""
-        __init__(SquareLattice self, double length, double xi=0.0) -> SquareLattice
-        SquareLattice::SquareLattice(double length, double xi=0.0)
+        __init__(SquareLattice2D self, double length, double xi=0.0) -> SquareLattice2D
+        SquareLattice2D::SquareLattice2D(double length, double xi=0.0)
 
         """
-        _libBornAgainSample.SquareLattice_swiginit(self, _libBornAgainSample.new_SquareLattice(length, xi))
+        _libBornAgainSample.SquareLattice2D_swiginit(self, _libBornAgainSample.new_SquareLattice2D(length, xi))
 
     def clone(self):
         r"""
-        clone(SquareLattice self) -> SquareLattice
-        SquareLattice * SquareLattice::clone() const
+        clone(SquareLattice2D self) -> SquareLattice2D
+        SquareLattice2D * SquareLattice2D::clone() const
 
         """
-        return _libBornAgainSample.SquareLattice_clone(self)
+        return _libBornAgainSample.SquareLattice2D_clone(self)
 
     def accept(self, visitor):
         r"""
-        accept(SquareLattice self, INodeVisitor * visitor)
-        void SquareLattice::accept(INodeVisitor *visitor) const final
+        accept(SquareLattice2D self, INodeVisitor * visitor)
+        void SquareLattice2D::accept(INodeVisitor *visitor) const final
 
         """
-        return _libBornAgainSample.SquareLattice_accept(self, visitor)
+        return _libBornAgainSample.SquareLattice2D_accept(self, visitor)
 
     def length1(self):
         r"""
-        length1(SquareLattice self) -> double
-        virtual double SquareLattice::length1() const
+        length1(SquareLattice2D self) -> double
+        virtual double SquareLattice2D::length1() const
 
         """
-        return _libBornAgainSample.SquareLattice_length1(self)
+        return _libBornAgainSample.SquareLattice2D_length1(self)
 
     def length2(self):
         r"""
-        length2(SquareLattice self) -> double
-        virtual double SquareLattice::length2() const
+        length2(SquareLattice2D self) -> double
+        virtual double SquareLattice2D::length2() const
 
         """
-        return _libBornAgainSample.SquareLattice_length2(self)
+        return _libBornAgainSample.SquareLattice2D_length2(self)
 
     def latticeAngle(self):
         r"""
-        latticeAngle(SquareLattice self) -> double
-        double SquareLattice::latticeAngle() const
+        latticeAngle(SquareLattice2D self) -> double
+        double SquareLattice2D::latticeAngle() const
 
         """
-        return _libBornAgainSample.SquareLattice_latticeAngle(self)
+        return _libBornAgainSample.SquareLattice2D_latticeAngle(self)
 
     def unitCellArea(self):
         r"""
-        unitCellArea(SquareLattice self) -> double
-        double SquareLattice::unitCellArea() const
+        unitCellArea(SquareLattice2D self) -> double
+        double SquareLattice2D::unitCellArea() const
 
         """
-        return _libBornAgainSample.SquareLattice_unitCellArea(self)
-    __swig_destroy__ = _libBornAgainSample.delete_SquareLattice
+        return _libBornAgainSample.SquareLattice2D_unitCellArea(self)
+    __swig_destroy__ = _libBornAgainSample.delete_SquareLattice2D
 
-# Register SquareLattice in _libBornAgainSample:
-_libBornAgainSample.SquareLattice_swigregister(SquareLattice)
+# Register SquareLattice2D in _libBornAgainSample:
+_libBornAgainSample.SquareLattice2D_swigregister(SquareLattice2D)
 
-class HexagonalLattice(Lattice2D):
-    r"""Proxy of C++ HexagonalLattice class."""
+class HexagonalLattice2D(Lattice2D):
+    r"""Proxy of C++ HexagonalLattice2D 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, length, xi):
         r"""
-        __init__(HexagonalLattice self, double length, double xi) -> HexagonalLattice
-        HexagonalLattice::HexagonalLattice(double length, double xi)
+        __init__(HexagonalLattice2D self, double length, double xi) -> HexagonalLattice2D
+        HexagonalLattice2D::HexagonalLattice2D(double length, double xi)
 
         """
-        _libBornAgainSample.HexagonalLattice_swiginit(self, _libBornAgainSample.new_HexagonalLattice(length, xi))
+        _libBornAgainSample.HexagonalLattice2D_swiginit(self, _libBornAgainSample.new_HexagonalLattice2D(length, xi))
 
     def clone(self):
         r"""
-        clone(HexagonalLattice self) -> HexagonalLattice
-        HexagonalLattice * HexagonalLattice::clone() const
+        clone(HexagonalLattice2D self) -> HexagonalLattice2D
+        HexagonalLattice2D * HexagonalLattice2D::clone() const
 
         """
-        return _libBornAgainSample.HexagonalLattice_clone(self)
+        return _libBornAgainSample.HexagonalLattice2D_clone(self)
 
     def accept(self, visitor):
         r"""
-        accept(HexagonalLattice self, INodeVisitor * visitor)
-        void HexagonalLattice::accept(INodeVisitor *visitor) const final
+        accept(HexagonalLattice2D self, INodeVisitor * visitor)
+        void HexagonalLattice2D::accept(INodeVisitor *visitor) const final
 
         """
-        return _libBornAgainSample.HexagonalLattice_accept(self, visitor)
+        return _libBornAgainSample.HexagonalLattice2D_accept(self, visitor)
 
     def length1(self):
         r"""
-        length1(HexagonalLattice self) -> double
-        virtual double HexagonalLattice::length1() const
+        length1(HexagonalLattice2D self) -> double
+        virtual double HexagonalLattice2D::length1() const
 
         """
-        return _libBornAgainSample.HexagonalLattice_length1(self)
+        return _libBornAgainSample.HexagonalLattice2D_length1(self)
 
     def length2(self):
         r"""
-        length2(HexagonalLattice self) -> double
-        virtual double HexagonalLattice::length2() const
+        length2(HexagonalLattice2D self) -> double
+        virtual double HexagonalLattice2D::length2() const
 
         """
-        return _libBornAgainSample.HexagonalLattice_length2(self)
+        return _libBornAgainSample.HexagonalLattice2D_length2(self)
 
     def latticeAngle(self):
         r"""
-        latticeAngle(HexagonalLattice self) -> double
-        double HexagonalLattice::latticeAngle() const
+        latticeAngle(HexagonalLattice2D self) -> double
+        double HexagonalLattice2D::latticeAngle() const
 
         """
-        return _libBornAgainSample.HexagonalLattice_latticeAngle(self)
+        return _libBornAgainSample.HexagonalLattice2D_latticeAngle(self)
 
     def unitCellArea(self):
         r"""
-        unitCellArea(HexagonalLattice self) -> double
-        double HexagonalLattice::unitCellArea() const
+        unitCellArea(HexagonalLattice2D self) -> double
+        double HexagonalLattice2D::unitCellArea() const
 
         """
-        return _libBornAgainSample.HexagonalLattice_unitCellArea(self)
-    __swig_destroy__ = _libBornAgainSample.delete_HexagonalLattice
+        return _libBornAgainSample.HexagonalLattice2D_unitCellArea(self)
+    __swig_destroy__ = _libBornAgainSample.delete_HexagonalLattice2D
 
-# Register HexagonalLattice in _libBornAgainSample:
-_libBornAgainSample.HexagonalLattice_swigregister(HexagonalLattice)
+# Register HexagonalLattice2D in _libBornAgainSample:
+_libBornAgainSample.HexagonalLattice2D_swigregister(HexagonalLattice2D)
 
 
-def createCubicLattice(a):
+def CubicLattice(a):
     r"""
-    createCubicLattice(double a) -> Lattice3D
-    Lattice3D bake::createCubicLattice(double a)
+    CubicLattice(double a) -> Lattice3D
+    Lattice3D bake::CubicLattice(double a)
 
     Returns a primitive cubic (cP) lattice with edge length a. 
 
     """
-    return _libBornAgainSample.createCubicLattice(a)
+    return _libBornAgainSample.CubicLattice(a)
 
-def createFCCLattice(a):
+def FCCLattice(a):
     r"""
-    createFCCLattice(double a) -> Lattice3D
-    Lattice3D bake::createFCCLattice(double a)
+    FCCLattice(double a) -> Lattice3D
+    Lattice3D bake::FCCLattice(double a)
 
     Returns a face-centered cubic (cF) lattice with edge length a. 
 
     """
-    return _libBornAgainSample.createFCCLattice(a)
+    return _libBornAgainSample.FCCLattice(a)
 
-def createHexagonalLattice(a, c):
+def HexagonalLattice(a, c):
     r"""
-    createHexagonalLattice(double a, double c) -> Lattice3D
-    Lattice3D bake::createHexagonalLattice(double a, double c)
+    HexagonalLattice(double a, double c) -> Lattice3D
+    Lattice3D bake::HexagonalLattice(double a, double c)
 
     Returns a primitive hexagonal (hP) lattice with hexagonal edge a and height c. 
 
     """
-    return _libBornAgainSample.createHexagonalLattice(a, c)
+    return _libBornAgainSample.HexagonalLattice(a, c)
 
-def createHCPLattice(a, c):
+def HCPLattice(a, c):
     r"""
-    createHCPLattice(double a, double c) -> Lattice3D
-    Lattice3D bake::createHCPLattice(double a, double c)
+    HCPLattice(double a, double c) -> Lattice3D
+    Lattice3D bake::HCPLattice(double a, double c)
 
     TODO: Clarify how this is meant: HCP is not a Bravais lattice. 
 
     """
-    return _libBornAgainSample.createHCPLattice(a, c)
+    return _libBornAgainSample.HCPLattice(a, c)
 
-def createTetragonalLattice(a, c):
+def TetragonalLattice(a, c):
     r"""
-    createTetragonalLattice(double a, double c) -> Lattice3D
-    Lattice3D bake::createTetragonalLattice(double a, double c)
+    TetragonalLattice(double a, double c) -> Lattice3D
+    Lattice3D bake::TetragonalLattice(double a, double c)
 
     Returns a primitive tetragonal (tP) lattice with square base edge a and height c. 
 
     """
-    return _libBornAgainSample.createTetragonalLattice(a, c)
+    return _libBornAgainSample.TetragonalLattice(a, c)
 
-def createBCTLattice(a, c):
+def BCTLattice(a, c):
     r"""
-    createBCTLattice(double a, double c) -> Lattice3D
-    Lattice3D bake::createBCTLattice(double a, double c)
+    BCTLattice(double a, double c) -> Lattice3D
+    Lattice3D bake::BCTLattice(double a, double c)
 
     Returns a body-centered cubic (cI) lattice with edge length a. TODO: Clarify meaning of c 
 
     """
-    return _libBornAgainSample.createBCTLattice(a, c)
+    return _libBornAgainSample.BCTLattice(a, c)
 class ISampleBuilder(libBornAgainParam.IParameterized):
     r"""
 
diff --git a/auto/Wrap/libBornAgainSample_wrap.cpp b/auto/Wrap/libBornAgainSample_wrap.cpp
index 8b406923650..7409cb0e87d 100644
--- a/auto/Wrap/libBornAgainSample_wrap.cpp
+++ b/auto/Wrap/libBornAgainSample_wrap.cpp
@@ -3097,7 +3097,7 @@ namespace Swig {
 
 /* -------- TYPES TABLE (BEGIN) -------- */
 
-#define SWIGTYPE_p_BasicLattice swig_types[0]
+#define SWIGTYPE_p_BasicLattice2D swig_types[0]
 #define SWIGTYPE_p_BasicVector3DT_double_t swig_types[1]
 #define SWIGTYPE_p_BasicVector3DT_int_t swig_types[2]
 #define SWIGTYPE_p_BasicVector3DT_std__complexT_double_t_t swig_types[3]
@@ -3158,7 +3158,7 @@ namespace Swig {
 #define SWIGTYPE_p_FormFactorTruncatedSpheroid swig_types[58]
 #define SWIGTYPE_p_FormFactorWeighted swig_types[59]
 #define SWIGTYPE_p_GaussFisherPeakShape swig_types[60]
-#define SWIGTYPE_p_HexagonalLattice swig_types[61]
+#define SWIGTYPE_p_HexagonalLattice2D swig_types[61]
 #define SWIGTYPE_p_IAbstractParticle swig_types[62]
 #define SWIGTYPE_p_ICloneable swig_types[63]
 #define SWIGTYPE_p_ICosineRipple swig_types[64]
@@ -3233,7 +3233,7 @@ namespace Swig {
 #define SWIGTYPE_p_SimulationOptions swig_types[133]
 #define SWIGTYPE_p_SlicedParticle swig_types[134]
 #define SWIGTYPE_p_SlicingEffects swig_types[135]
-#define SWIGTYPE_p_SquareLattice swig_types[136]
+#define SWIGTYPE_p_SquareLattice2D swig_types[136]
 #define SWIGTYPE_p_ThreadInfo swig_types[137]
 #define SWIGTYPE_p_Transform3D swig_types[138]
 #define SWIGTYPE_p_WavevectorInfo swig_types[139]
@@ -67798,7 +67798,7 @@ SWIGINTERN PyObject *Lattice2D_swigregister(PyObject *SWIGUNUSEDPARM(self), PyOb
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *_wrap_new_BasicLattice(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_BasicLattice2D(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   double arg1 ;
   double arg2 ;
@@ -67813,63 +67813,63 @@ SWIGINTERN PyObject *_wrap_new_BasicLattice(PyObject *SWIGUNUSEDPARM(self), PyOb
   double val4 ;
   int ecode4 = 0 ;
   PyObject *swig_obj[4] ;
-  BasicLattice *result = 0 ;
+  BasicLattice2D *result = 0 ;
   
-  if (!SWIG_Python_UnpackTuple(args, "new_BasicLattice", 4, 4, swig_obj)) SWIG_fail;
+  if (!SWIG_Python_UnpackTuple(args, "new_BasicLattice2D", 4, 4, swig_obj)) SWIG_fail;
   ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
   if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_BasicLattice" "', argument " "1"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_BasicLattice2D" "', argument " "1"" of type '" "double""'");
   } 
   arg1 = static_cast< double >(val1);
   ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
   if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_BasicLattice" "', argument " "2"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_BasicLattice2D" "', argument " "2"" of type '" "double""'");
   } 
   arg2 = static_cast< double >(val2);
   ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
   if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_BasicLattice" "', argument " "3"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "new_BasicLattice2D" "', argument " "3"" of type '" "double""'");
   } 
   arg3 = static_cast< double >(val3);
   ecode4 = SWIG_AsVal_double(swig_obj[3], &val4);
   if (!SWIG_IsOK(ecode4)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "new_BasicLattice" "', argument " "4"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "new_BasicLattice2D" "', argument " "4"" of type '" "double""'");
   } 
   arg4 = static_cast< double >(val4);
-  result = (BasicLattice *)new BasicLattice(arg1,arg2,arg3,arg4);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_BasicLattice, SWIG_POINTER_NEW |  0 );
+  result = (BasicLattice2D *)new BasicLattice2D(arg1,arg2,arg3,arg4);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_BasicLattice2D, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_BasicLattice_clone(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_BasicLattice2D_clone(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  BasicLattice *arg1 = (BasicLattice *) 0 ;
+  BasicLattice2D *arg1 = (BasicLattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  BasicLattice *result = 0 ;
+  BasicLattice2D *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_BasicLattice, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_BasicLattice2D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "BasicLattice_clone" "', argument " "1"" of type '" "BasicLattice const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "BasicLattice2D_clone" "', argument " "1"" of type '" "BasicLattice2D const *""'"); 
   }
-  arg1 = reinterpret_cast< BasicLattice * >(argp1);
-  result = (BasicLattice *)((BasicLattice const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_BasicLattice, 0 |  0 );
+  arg1 = reinterpret_cast< BasicLattice2D * >(argp1);
+  result = (BasicLattice2D *)((BasicLattice2D const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_BasicLattice2D, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_BasicLattice_accept(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_BasicLattice2D_accept(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  BasicLattice *arg1 = (BasicLattice *) 0 ;
+  BasicLattice2D *arg1 = (BasicLattice2D *) 0 ;
   INodeVisitor *arg2 = (INodeVisitor *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
@@ -67877,18 +67877,18 @@ SWIGINTERN PyObject *_wrap_BasicLattice_accept(PyObject *SWIGUNUSEDPARM(self), P
   int res2 = 0 ;
   PyObject *swig_obj[2] ;
   
-  if (!SWIG_Python_UnpackTuple(args, "BasicLattice_accept", 2, 2, swig_obj)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_BasicLattice, 0 |  0 );
+  if (!SWIG_Python_UnpackTuple(args, "BasicLattice2D_accept", 2, 2, swig_obj)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_BasicLattice2D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "BasicLattice_accept" "', argument " "1"" of type '" "BasicLattice const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "BasicLattice2D_accept" "', argument " "1"" of type '" "BasicLattice2D const *""'"); 
   }
-  arg1 = reinterpret_cast< BasicLattice * >(argp1);
+  arg1 = reinterpret_cast< BasicLattice2D * >(argp1);
   res2 = SWIG_ConvertPtr(swig_obj[1], &argp2,SWIGTYPE_p_INodeVisitor, 0 |  0 );
   if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "BasicLattice_accept" "', argument " "2"" of type '" "INodeVisitor *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "BasicLattice2D_accept" "', argument " "2"" of type '" "INodeVisitor *""'"); 
   }
   arg2 = reinterpret_cast< INodeVisitor * >(argp2);
-  ((BasicLattice const *)arg1)->accept(arg2);
+  ((BasicLattice2D const *)arg1)->accept(arg2);
   resultobj = SWIG_Py_Void();
   return resultobj;
 fail:
@@ -67896,9 +67896,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_BasicLattice_length1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_BasicLattice2D_length1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  BasicLattice *arg1 = (BasicLattice *) 0 ;
+  BasicLattice2D *arg1 = (BasicLattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -67906,12 +67906,12 @@ SWIGINTERN PyObject *_wrap_BasicLattice_length1(PyObject *SWIGUNUSEDPARM(self),
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_BasicLattice, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_BasicLattice2D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "BasicLattice_length1" "', argument " "1"" of type '" "BasicLattice const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "BasicLattice2D_length1" "', argument " "1"" of type '" "BasicLattice2D const *""'"); 
   }
-  arg1 = reinterpret_cast< BasicLattice * >(argp1);
-  result = (double)((BasicLattice const *)arg1)->length1();
+  arg1 = reinterpret_cast< BasicLattice2D * >(argp1);
+  result = (double)((BasicLattice2D const *)arg1)->length1();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -67919,9 +67919,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_BasicLattice_length2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_BasicLattice2D_length2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  BasicLattice *arg1 = (BasicLattice *) 0 ;
+  BasicLattice2D *arg1 = (BasicLattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -67929,12 +67929,12 @@ SWIGINTERN PyObject *_wrap_BasicLattice_length2(PyObject *SWIGUNUSEDPARM(self),
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_BasicLattice, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_BasicLattice2D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "BasicLattice_length2" "', argument " "1"" of type '" "BasicLattice const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "BasicLattice2D_length2" "', argument " "1"" of type '" "BasicLattice2D const *""'"); 
   }
-  arg1 = reinterpret_cast< BasicLattice * >(argp1);
-  result = (double)((BasicLattice const *)arg1)->length2();
+  arg1 = reinterpret_cast< BasicLattice2D * >(argp1);
+  result = (double)((BasicLattice2D const *)arg1)->length2();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -67942,9 +67942,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_BasicLattice_latticeAngle(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_BasicLattice2D_latticeAngle(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  BasicLattice *arg1 = (BasicLattice *) 0 ;
+  BasicLattice2D *arg1 = (BasicLattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -67952,12 +67952,12 @@ SWIGINTERN PyObject *_wrap_BasicLattice_latticeAngle(PyObject *SWIGUNUSEDPARM(se
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_BasicLattice, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_BasicLattice2D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "BasicLattice_latticeAngle" "', argument " "1"" of type '" "BasicLattice const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "BasicLattice2D_latticeAngle" "', argument " "1"" of type '" "BasicLattice2D const *""'"); 
   }
-  arg1 = reinterpret_cast< BasicLattice * >(argp1);
-  result = (double)((BasicLattice const *)arg1)->latticeAngle();
+  arg1 = reinterpret_cast< BasicLattice2D * >(argp1);
+  result = (double)((BasicLattice2D const *)arg1)->latticeAngle();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -67965,9 +67965,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_BasicLattice_unitCellArea(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_BasicLattice2D_unitCellArea(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  BasicLattice *arg1 = (BasicLattice *) 0 ;
+  BasicLattice2D *arg1 = (BasicLattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -67975,12 +67975,12 @@ SWIGINTERN PyObject *_wrap_BasicLattice_unitCellArea(PyObject *SWIGUNUSEDPARM(se
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_BasicLattice, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_BasicLattice2D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "BasicLattice_unitCellArea" "', argument " "1"" of type '" "BasicLattice const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "BasicLattice2D_unitCellArea" "', argument " "1"" of type '" "BasicLattice2D const *""'"); 
   }
-  arg1 = reinterpret_cast< BasicLattice * >(argp1);
-  result = (double)((BasicLattice const *)arg1)->unitCellArea();
+  arg1 = reinterpret_cast< BasicLattice2D * >(argp1);
+  result = (double)((BasicLattice2D const *)arg1)->unitCellArea();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -67988,20 +67988,20 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_BasicLattice(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_BasicLattice2D(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  BasicLattice *arg1 = (BasicLattice *) 0 ;
+  BasicLattice2D *arg1 = (BasicLattice2D *) 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_BasicLattice, SWIG_POINTER_DISOWN |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_BasicLattice2D, SWIG_POINTER_DISOWN |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_BasicLattice" "', argument " "1"" of type '" "BasicLattice *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_BasicLattice2D" "', argument " "1"" of type '" "BasicLattice2D *""'"); 
   }
-  arg1 = reinterpret_cast< BasicLattice * >(argp1);
+  arg1 = reinterpret_cast< BasicLattice2D * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -68010,18 +68010,18 @@ fail:
 }
 
 
-SWIGINTERN PyObject *BasicLattice_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *BasicLattice2D_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
   if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_BasicLattice, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_BasicLattice2D, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *BasicLattice_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *BasicLattice2D_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   return SWIG_Python_InitShadowInstance(args);
 }
 
-SWIGINTERN PyObject *_wrap_new_SquareLattice__SWIG_0(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_SquareLattice2D__SWIG_0(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
   double arg2 ;
@@ -68029,55 +68029,55 @@ SWIGINTERN PyObject *_wrap_new_SquareLattice__SWIG_0(PyObject *SWIGUNUSEDPARM(se
   int ecode1 = 0 ;
   double val2 ;
   int ecode2 = 0 ;
-  SquareLattice *result = 0 ;
+  SquareLattice2D *result = 0 ;
   
   if ((nobjs < 2) || (nobjs > 2)) SWIG_fail;
   ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
   if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_SquareLattice" "', argument " "1"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_SquareLattice2D" "', argument " "1"" of type '" "double""'");
   } 
   arg1 = static_cast< double >(val1);
   ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
   if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_SquareLattice" "', argument " "2"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_SquareLattice2D" "', argument " "2"" of type '" "double""'");
   } 
   arg2 = static_cast< double >(val2);
-  result = (SquareLattice *)new SquareLattice(arg1,arg2);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SquareLattice, SWIG_POINTER_NEW |  0 );
+  result = (SquareLattice2D *)new SquareLattice2D(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SquareLattice2D, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_SquareLattice__SWIG_1(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_SquareLattice2D__SWIG_1(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   double arg1 ;
   double val1 ;
   int ecode1 = 0 ;
-  SquareLattice *result = 0 ;
+  SquareLattice2D *result = 0 ;
   
   if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
   ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
   if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_SquareLattice" "', argument " "1"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_SquareLattice2D" "', argument " "1"" of type '" "double""'");
   } 
   arg1 = static_cast< double >(val1);
-  result = (SquareLattice *)new SquareLattice(arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SquareLattice, SWIG_POINTER_NEW |  0 );
+  result = (SquareLattice2D *)new SquareLattice2D(arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SquareLattice2D, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_SquareLattice(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_SquareLattice2D(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
   PyObject *argv[3] = {
     0
   };
   
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_SquareLattice", 0, 2, argv))) SWIG_fail;
+  if (!(argc = SWIG_Python_UnpackTuple(args, "new_SquareLattice2D", 0, 2, argv))) SWIG_fail;
   --argc;
   if (argc == 1) {
     int _v;
@@ -68086,7 +68086,7 @@ SWIGINTERN PyObject *_wrap_new_SquareLattice(PyObject *self, PyObject *args) {
       _v = SWIG_CheckState(res);
     }
     if (_v) {
-      return _wrap_new_SquareLattice__SWIG_1(self, argc, argv);
+      return _wrap_new_SquareLattice2D__SWIG_1(self, argc, argv);
     }
   }
   if (argc == 2) {
@@ -68101,46 +68101,46 @@ SWIGINTERN PyObject *_wrap_new_SquareLattice(PyObject *self, PyObject *args) {
         _v = SWIG_CheckState(res);
       }
       if (_v) {
-        return _wrap_new_SquareLattice__SWIG_0(self, argc, argv);
+        return _wrap_new_SquareLattice2D__SWIG_0(self, argc, argv);
       }
     }
   }
   
 fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_SquareLattice'.\n"
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_SquareLattice2D'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    SquareLattice::SquareLattice(double,double)\n"
-    "    SquareLattice::SquareLattice(double)\n");
+    "    SquareLattice2D::SquareLattice2D(double,double)\n"
+    "    SquareLattice2D::SquareLattice2D(double)\n");
   return 0;
 }
 
 
-SWIGINTERN PyObject *_wrap_SquareLattice_clone(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_SquareLattice2D_clone(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  SquareLattice *arg1 = (SquareLattice *) 0 ;
+  SquareLattice2D *arg1 = (SquareLattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  SquareLattice *result = 0 ;
+  SquareLattice2D *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SquareLattice, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SquareLattice2D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SquareLattice_clone" "', argument " "1"" of type '" "SquareLattice const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SquareLattice2D_clone" "', argument " "1"" of type '" "SquareLattice2D const *""'"); 
   }
-  arg1 = reinterpret_cast< SquareLattice * >(argp1);
-  result = (SquareLattice *)((SquareLattice const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SquareLattice, 0 |  0 );
+  arg1 = reinterpret_cast< SquareLattice2D * >(argp1);
+  result = (SquareLattice2D *)((SquareLattice2D const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SquareLattice2D, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_SquareLattice_accept(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_SquareLattice2D_accept(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  SquareLattice *arg1 = (SquareLattice *) 0 ;
+  SquareLattice2D *arg1 = (SquareLattice2D *) 0 ;
   INodeVisitor *arg2 = (INodeVisitor *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
@@ -68148,18 +68148,18 @@ SWIGINTERN PyObject *_wrap_SquareLattice_accept(PyObject *SWIGUNUSEDPARM(self),
   int res2 = 0 ;
   PyObject *swig_obj[2] ;
   
-  if (!SWIG_Python_UnpackTuple(args, "SquareLattice_accept", 2, 2, swig_obj)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SquareLattice, 0 |  0 );
+  if (!SWIG_Python_UnpackTuple(args, "SquareLattice2D_accept", 2, 2, swig_obj)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SquareLattice2D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SquareLattice_accept" "', argument " "1"" of type '" "SquareLattice const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SquareLattice2D_accept" "', argument " "1"" of type '" "SquareLattice2D const *""'"); 
   }
-  arg1 = reinterpret_cast< SquareLattice * >(argp1);
+  arg1 = reinterpret_cast< SquareLattice2D * >(argp1);
   res2 = SWIG_ConvertPtr(swig_obj[1], &argp2,SWIGTYPE_p_INodeVisitor, 0 |  0 );
   if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SquareLattice_accept" "', argument " "2"" of type '" "INodeVisitor *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SquareLattice2D_accept" "', argument " "2"" of type '" "INodeVisitor *""'"); 
   }
   arg2 = reinterpret_cast< INodeVisitor * >(argp2);
-  ((SquareLattice const *)arg1)->accept(arg2);
+  ((SquareLattice2D const *)arg1)->accept(arg2);
   resultobj = SWIG_Py_Void();
   return resultobj;
 fail:
@@ -68167,9 +68167,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_SquareLattice_length1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_SquareLattice2D_length1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  SquareLattice *arg1 = (SquareLattice *) 0 ;
+  SquareLattice2D *arg1 = (SquareLattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -68177,12 +68177,12 @@ SWIGINTERN PyObject *_wrap_SquareLattice_length1(PyObject *SWIGUNUSEDPARM(self),
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SquareLattice, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SquareLattice2D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SquareLattice_length1" "', argument " "1"" of type '" "SquareLattice const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SquareLattice2D_length1" "', argument " "1"" of type '" "SquareLattice2D const *""'"); 
   }
-  arg1 = reinterpret_cast< SquareLattice * >(argp1);
-  result = (double)((SquareLattice const *)arg1)->length1();
+  arg1 = reinterpret_cast< SquareLattice2D * >(argp1);
+  result = (double)((SquareLattice2D const *)arg1)->length1();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -68190,9 +68190,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_SquareLattice_length2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_SquareLattice2D_length2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  SquareLattice *arg1 = (SquareLattice *) 0 ;
+  SquareLattice2D *arg1 = (SquareLattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -68200,12 +68200,12 @@ SWIGINTERN PyObject *_wrap_SquareLattice_length2(PyObject *SWIGUNUSEDPARM(self),
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SquareLattice, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SquareLattice2D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SquareLattice_length2" "', argument " "1"" of type '" "SquareLattice const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SquareLattice2D_length2" "', argument " "1"" of type '" "SquareLattice2D const *""'"); 
   }
-  arg1 = reinterpret_cast< SquareLattice * >(argp1);
-  result = (double)((SquareLattice const *)arg1)->length2();
+  arg1 = reinterpret_cast< SquareLattice2D * >(argp1);
+  result = (double)((SquareLattice2D const *)arg1)->length2();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -68213,9 +68213,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_SquareLattice_latticeAngle(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_SquareLattice2D_latticeAngle(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  SquareLattice *arg1 = (SquareLattice *) 0 ;
+  SquareLattice2D *arg1 = (SquareLattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -68223,12 +68223,12 @@ SWIGINTERN PyObject *_wrap_SquareLattice_latticeAngle(PyObject *SWIGUNUSEDPARM(s
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SquareLattice, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SquareLattice2D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SquareLattice_latticeAngle" "', argument " "1"" of type '" "SquareLattice const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SquareLattice2D_latticeAngle" "', argument " "1"" of type '" "SquareLattice2D const *""'"); 
   }
-  arg1 = reinterpret_cast< SquareLattice * >(argp1);
-  result = (double)((SquareLattice const *)arg1)->latticeAngle();
+  arg1 = reinterpret_cast< SquareLattice2D * >(argp1);
+  result = (double)((SquareLattice2D const *)arg1)->latticeAngle();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -68236,9 +68236,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_SquareLattice_unitCellArea(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_SquareLattice2D_unitCellArea(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  SquareLattice *arg1 = (SquareLattice *) 0 ;
+  SquareLattice2D *arg1 = (SquareLattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -68246,12 +68246,12 @@ SWIGINTERN PyObject *_wrap_SquareLattice_unitCellArea(PyObject *SWIGUNUSEDPARM(s
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SquareLattice, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SquareLattice2D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SquareLattice_unitCellArea" "', argument " "1"" of type '" "SquareLattice const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SquareLattice2D_unitCellArea" "', argument " "1"" of type '" "SquareLattice2D const *""'"); 
   }
-  arg1 = reinterpret_cast< SquareLattice * >(argp1);
-  result = (double)((SquareLattice const *)arg1)->unitCellArea();
+  arg1 = reinterpret_cast< SquareLattice2D * >(argp1);
+  result = (double)((SquareLattice2D const *)arg1)->unitCellArea();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -68259,20 +68259,20 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_SquareLattice(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_SquareLattice2D(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  SquareLattice *arg1 = (SquareLattice *) 0 ;
+  SquareLattice2D *arg1 = (SquareLattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SquareLattice, SWIG_POINTER_DISOWN |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SquareLattice2D, SWIG_POINTER_DISOWN |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_SquareLattice" "', argument " "1"" of type '" "SquareLattice *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_SquareLattice2D" "', argument " "1"" of type '" "SquareLattice2D *""'"); 
   }
-  arg1 = reinterpret_cast< SquareLattice * >(argp1);
+  arg1 = reinterpret_cast< SquareLattice2D * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -68281,18 +68281,18 @@ fail:
 }
 
 
-SWIGINTERN PyObject *SquareLattice_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *SquareLattice2D_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
   if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_SquareLattice, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_SquareLattice2D, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *SquareLattice_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *SquareLattice2D_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   return SWIG_Python_InitShadowInstance(args);
 }
 
-SWIGINTERN PyObject *_wrap_new_HexagonalLattice(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_HexagonalLattice2D(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   double arg1 ;
   double arg2 ;
@@ -68301,53 +68301,53 @@ SWIGINTERN PyObject *_wrap_new_HexagonalLattice(PyObject *SWIGUNUSEDPARM(self),
   double val2 ;
   int ecode2 = 0 ;
   PyObject *swig_obj[2] ;
-  HexagonalLattice *result = 0 ;
+  HexagonalLattice2D *result = 0 ;
   
-  if (!SWIG_Python_UnpackTuple(args, "new_HexagonalLattice", 2, 2, swig_obj)) SWIG_fail;
+  if (!SWIG_Python_UnpackTuple(args, "new_HexagonalLattice2D", 2, 2, swig_obj)) SWIG_fail;
   ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
   if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_HexagonalLattice" "', argument " "1"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "new_HexagonalLattice2D" "', argument " "1"" of type '" "double""'");
   } 
   arg1 = static_cast< double >(val1);
   ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
   if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_HexagonalLattice" "', argument " "2"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_HexagonalLattice2D" "', argument " "2"" of type '" "double""'");
   } 
   arg2 = static_cast< double >(val2);
-  result = (HexagonalLattice *)new HexagonalLattice(arg1,arg2);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_HexagonalLattice, SWIG_POINTER_NEW |  0 );
+  result = (HexagonalLattice2D *)new HexagonalLattice2D(arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_HexagonalLattice2D, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_HexagonalLattice_clone(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_HexagonalLattice2D_clone(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  HexagonalLattice *arg1 = (HexagonalLattice *) 0 ;
+  HexagonalLattice2D *arg1 = (HexagonalLattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  HexagonalLattice *result = 0 ;
+  HexagonalLattice2D *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HexagonalLattice, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HexagonalLattice2D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HexagonalLattice_clone" "', argument " "1"" of type '" "HexagonalLattice const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HexagonalLattice2D_clone" "', argument " "1"" of type '" "HexagonalLattice2D const *""'"); 
   }
-  arg1 = reinterpret_cast< HexagonalLattice * >(argp1);
-  result = (HexagonalLattice *)((HexagonalLattice const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_HexagonalLattice, 0 |  0 );
+  arg1 = reinterpret_cast< HexagonalLattice2D * >(argp1);
+  result = (HexagonalLattice2D *)((HexagonalLattice2D const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_HexagonalLattice2D, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_HexagonalLattice_accept(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_HexagonalLattice2D_accept(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  HexagonalLattice *arg1 = (HexagonalLattice *) 0 ;
+  HexagonalLattice2D *arg1 = (HexagonalLattice2D *) 0 ;
   INodeVisitor *arg2 = (INodeVisitor *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
@@ -68355,18 +68355,18 @@ SWIGINTERN PyObject *_wrap_HexagonalLattice_accept(PyObject *SWIGUNUSEDPARM(self
   int res2 = 0 ;
   PyObject *swig_obj[2] ;
   
-  if (!SWIG_Python_UnpackTuple(args, "HexagonalLattice_accept", 2, 2, swig_obj)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HexagonalLattice, 0 |  0 );
+  if (!SWIG_Python_UnpackTuple(args, "HexagonalLattice2D_accept", 2, 2, swig_obj)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HexagonalLattice2D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HexagonalLattice_accept" "', argument " "1"" of type '" "HexagonalLattice const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HexagonalLattice2D_accept" "', argument " "1"" of type '" "HexagonalLattice2D const *""'"); 
   }
-  arg1 = reinterpret_cast< HexagonalLattice * >(argp1);
+  arg1 = reinterpret_cast< HexagonalLattice2D * >(argp1);
   res2 = SWIG_ConvertPtr(swig_obj[1], &argp2,SWIGTYPE_p_INodeVisitor, 0 |  0 );
   if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "HexagonalLattice_accept" "', argument " "2"" of type '" "INodeVisitor *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "HexagonalLattice2D_accept" "', argument " "2"" of type '" "INodeVisitor *""'"); 
   }
   arg2 = reinterpret_cast< INodeVisitor * >(argp2);
-  ((HexagonalLattice const *)arg1)->accept(arg2);
+  ((HexagonalLattice2D const *)arg1)->accept(arg2);
   resultobj = SWIG_Py_Void();
   return resultobj;
 fail:
@@ -68374,9 +68374,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_HexagonalLattice_length1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_HexagonalLattice2D_length1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  HexagonalLattice *arg1 = (HexagonalLattice *) 0 ;
+  HexagonalLattice2D *arg1 = (HexagonalLattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -68384,12 +68384,12 @@ SWIGINTERN PyObject *_wrap_HexagonalLattice_length1(PyObject *SWIGUNUSEDPARM(sel
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HexagonalLattice, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HexagonalLattice2D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HexagonalLattice_length1" "', argument " "1"" of type '" "HexagonalLattice const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HexagonalLattice2D_length1" "', argument " "1"" of type '" "HexagonalLattice2D const *""'"); 
   }
-  arg1 = reinterpret_cast< HexagonalLattice * >(argp1);
-  result = (double)((HexagonalLattice const *)arg1)->length1();
+  arg1 = reinterpret_cast< HexagonalLattice2D * >(argp1);
+  result = (double)((HexagonalLattice2D const *)arg1)->length1();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -68397,9 +68397,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_HexagonalLattice_length2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_HexagonalLattice2D_length2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  HexagonalLattice *arg1 = (HexagonalLattice *) 0 ;
+  HexagonalLattice2D *arg1 = (HexagonalLattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -68407,12 +68407,12 @@ SWIGINTERN PyObject *_wrap_HexagonalLattice_length2(PyObject *SWIGUNUSEDPARM(sel
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HexagonalLattice, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HexagonalLattice2D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HexagonalLattice_length2" "', argument " "1"" of type '" "HexagonalLattice const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HexagonalLattice2D_length2" "', argument " "1"" of type '" "HexagonalLattice2D const *""'"); 
   }
-  arg1 = reinterpret_cast< HexagonalLattice * >(argp1);
-  result = (double)((HexagonalLattice const *)arg1)->length2();
+  arg1 = reinterpret_cast< HexagonalLattice2D * >(argp1);
+  result = (double)((HexagonalLattice2D const *)arg1)->length2();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -68420,9 +68420,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_HexagonalLattice_latticeAngle(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_HexagonalLattice2D_latticeAngle(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  HexagonalLattice *arg1 = (HexagonalLattice *) 0 ;
+  HexagonalLattice2D *arg1 = (HexagonalLattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -68430,12 +68430,12 @@ SWIGINTERN PyObject *_wrap_HexagonalLattice_latticeAngle(PyObject *SWIGUNUSEDPAR
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HexagonalLattice, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HexagonalLattice2D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HexagonalLattice_latticeAngle" "', argument " "1"" of type '" "HexagonalLattice const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HexagonalLattice2D_latticeAngle" "', argument " "1"" of type '" "HexagonalLattice2D const *""'"); 
   }
-  arg1 = reinterpret_cast< HexagonalLattice * >(argp1);
-  result = (double)((HexagonalLattice const *)arg1)->latticeAngle();
+  arg1 = reinterpret_cast< HexagonalLattice2D * >(argp1);
+  result = (double)((HexagonalLattice2D const *)arg1)->latticeAngle();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -68443,9 +68443,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_HexagonalLattice_unitCellArea(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_HexagonalLattice2D_unitCellArea(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  HexagonalLattice *arg1 = (HexagonalLattice *) 0 ;
+  HexagonalLattice2D *arg1 = (HexagonalLattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -68453,12 +68453,12 @@ SWIGINTERN PyObject *_wrap_HexagonalLattice_unitCellArea(PyObject *SWIGUNUSEDPAR
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HexagonalLattice, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HexagonalLattice2D, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HexagonalLattice_unitCellArea" "', argument " "1"" of type '" "HexagonalLattice const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "HexagonalLattice2D_unitCellArea" "', argument " "1"" of type '" "HexagonalLattice2D const *""'"); 
   }
-  arg1 = reinterpret_cast< HexagonalLattice * >(argp1);
-  result = (double)((HexagonalLattice const *)arg1)->unitCellArea();
+  arg1 = reinterpret_cast< HexagonalLattice2D * >(argp1);
+  result = (double)((HexagonalLattice2D const *)arg1)->unitCellArea();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -68466,20 +68466,20 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_HexagonalLattice(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_HexagonalLattice2D(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  HexagonalLattice *arg1 = (HexagonalLattice *) 0 ;
+  HexagonalLattice2D *arg1 = (HexagonalLattice2D *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HexagonalLattice, SWIG_POINTER_DISOWN |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_HexagonalLattice2D, SWIG_POINTER_DISOWN |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_HexagonalLattice" "', argument " "1"" of type '" "HexagonalLattice *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_HexagonalLattice2D" "', argument " "1"" of type '" "HexagonalLattice2D *""'"); 
   }
-  arg1 = reinterpret_cast< HexagonalLattice * >(argp1);
+  arg1 = reinterpret_cast< HexagonalLattice2D * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -68488,18 +68488,18 @@ fail:
 }
 
 
-SWIGINTERN PyObject *HexagonalLattice_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *HexagonalLattice2D_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
   if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_HexagonalLattice, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_HexagonalLattice2D, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *HexagonalLattice_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *HexagonalLattice2D_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   return SWIG_Python_InitShadowInstance(args);
 }
 
-SWIGINTERN PyObject *_wrap_createCubicLattice(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_CubicLattice(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   double arg1 ;
   double val1 ;
@@ -68511,10 +68511,10 @@ SWIGINTERN PyObject *_wrap_createCubicLattice(PyObject *SWIGUNUSEDPARM(self), Py
   swig_obj[0] = args;
   ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
   if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "createCubicLattice" "', argument " "1"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "CubicLattice" "', argument " "1"" of type '" "double""'");
   } 
   arg1 = static_cast< double >(val1);
-  result = bake::createCubicLattice(arg1);
+  result = bake::CubicLattice(arg1);
   resultobj = SWIG_NewPointerObj((new Lattice3D(static_cast< const Lattice3D& >(result))), SWIGTYPE_p_Lattice3D, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
@@ -68522,7 +68522,7 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_createFCCLattice(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_FCCLattice(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   double arg1 ;
   double val1 ;
@@ -68534,10 +68534,10 @@ SWIGINTERN PyObject *_wrap_createFCCLattice(PyObject *SWIGUNUSEDPARM(self), PyOb
   swig_obj[0] = args;
   ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
   if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "createFCCLattice" "', argument " "1"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "FCCLattice" "', argument " "1"" of type '" "double""'");
   } 
   arg1 = static_cast< double >(val1);
-  result = bake::createFCCLattice(arg1);
+  result = bake::FCCLattice(arg1);
   resultobj = SWIG_NewPointerObj((new Lattice3D(static_cast< const Lattice3D& >(result))), SWIGTYPE_p_Lattice3D, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
@@ -68545,7 +68545,7 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_createHexagonalLattice(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_HexagonalLattice(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   double arg1 ;
   double arg2 ;
@@ -68556,18 +68556,18 @@ SWIGINTERN PyObject *_wrap_createHexagonalLattice(PyObject *SWIGUNUSEDPARM(self)
   PyObject *swig_obj[2] ;
   SwigValueWrapper< Lattice3D > result;
   
-  if (!SWIG_Python_UnpackTuple(args, "createHexagonalLattice", 2, 2, swig_obj)) SWIG_fail;
+  if (!SWIG_Python_UnpackTuple(args, "HexagonalLattice", 2, 2, swig_obj)) SWIG_fail;
   ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
   if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "createHexagonalLattice" "', argument " "1"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "HexagonalLattice" "', argument " "1"" of type '" "double""'");
   } 
   arg1 = static_cast< double >(val1);
   ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
   if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "createHexagonalLattice" "', argument " "2"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "HexagonalLattice" "', argument " "2"" of type '" "double""'");
   } 
   arg2 = static_cast< double >(val2);
-  result = bake::createHexagonalLattice(arg1,arg2);
+  result = bake::HexagonalLattice(arg1,arg2);
   resultobj = SWIG_NewPointerObj((new Lattice3D(static_cast< const Lattice3D& >(result))), SWIGTYPE_p_Lattice3D, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
@@ -68575,7 +68575,7 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_createHCPLattice(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_HCPLattice(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   double arg1 ;
   double arg2 ;
@@ -68586,18 +68586,18 @@ SWIGINTERN PyObject *_wrap_createHCPLattice(PyObject *SWIGUNUSEDPARM(self), PyOb
   PyObject *swig_obj[2] ;
   SwigValueWrapper< Lattice3D > result;
   
-  if (!SWIG_Python_UnpackTuple(args, "createHCPLattice", 2, 2, swig_obj)) SWIG_fail;
+  if (!SWIG_Python_UnpackTuple(args, "HCPLattice", 2, 2, swig_obj)) SWIG_fail;
   ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
   if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "createHCPLattice" "', argument " "1"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "HCPLattice" "', argument " "1"" of type '" "double""'");
   } 
   arg1 = static_cast< double >(val1);
   ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
   if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "createHCPLattice" "', argument " "2"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "HCPLattice" "', argument " "2"" of type '" "double""'");
   } 
   arg2 = static_cast< double >(val2);
-  result = bake::createHCPLattice(arg1,arg2);
+  result = bake::HCPLattice(arg1,arg2);
   resultobj = SWIG_NewPointerObj((new Lattice3D(static_cast< const Lattice3D& >(result))), SWIGTYPE_p_Lattice3D, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
@@ -68605,7 +68605,7 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_createTetragonalLattice(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_TetragonalLattice(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   double arg1 ;
   double arg2 ;
@@ -68616,18 +68616,18 @@ SWIGINTERN PyObject *_wrap_createTetragonalLattice(PyObject *SWIGUNUSEDPARM(self
   PyObject *swig_obj[2] ;
   SwigValueWrapper< Lattice3D > result;
   
-  if (!SWIG_Python_UnpackTuple(args, "createTetragonalLattice", 2, 2, swig_obj)) SWIG_fail;
+  if (!SWIG_Python_UnpackTuple(args, "TetragonalLattice", 2, 2, swig_obj)) SWIG_fail;
   ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
   if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "createTetragonalLattice" "', argument " "1"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "TetragonalLattice" "', argument " "1"" of type '" "double""'");
   } 
   arg1 = static_cast< double >(val1);
   ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
   if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "createTetragonalLattice" "', argument " "2"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "TetragonalLattice" "', argument " "2"" of type '" "double""'");
   } 
   arg2 = static_cast< double >(val2);
-  result = bake::createTetragonalLattice(arg1,arg2);
+  result = bake::TetragonalLattice(arg1,arg2);
   resultobj = SWIG_NewPointerObj((new Lattice3D(static_cast< const Lattice3D& >(result))), SWIGTYPE_p_Lattice3D, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
@@ -68635,7 +68635,7 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_createBCTLattice(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_BCTLattice(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   double arg1 ;
   double arg2 ;
@@ -68646,18 +68646,18 @@ SWIGINTERN PyObject *_wrap_createBCTLattice(PyObject *SWIGUNUSEDPARM(self), PyOb
   PyObject *swig_obj[2] ;
   SwigValueWrapper< Lattice3D > result;
   
-  if (!SWIG_Python_UnpackTuple(args, "createBCTLattice", 2, 2, swig_obj)) SWIG_fail;
+  if (!SWIG_Python_UnpackTuple(args, "BCTLattice", 2, 2, swig_obj)) SWIG_fail;
   ecode1 = SWIG_AsVal_double(swig_obj[0], &val1);
   if (!SWIG_IsOK(ecode1)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "createBCTLattice" "', argument " "1"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "BCTLattice" "', argument " "1"" of type '" "double""'");
   } 
   arg1 = static_cast< double >(val1);
   ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
   if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "createBCTLattice" "', argument " "2"" of type '" "double""'");
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "BCTLattice" "', argument " "2"" of type '" "double""'");
   } 
   arg2 = static_cast< double >(val2);
-  result = bake::createBCTLattice(arg1,arg2);
+  result = bake::BCTLattice(arg1,arg2);
   resultobj = SWIG_NewPointerObj((new Lattice3D(static_cast< const Lattice3D& >(result))), SWIGTYPE_p_Lattice3D, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
@@ -75162,158 +75162,158 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "delete_Lattice2D", _wrap_delete_Lattice2D, METH_O, "delete_Lattice2D(Lattice2D self)"},
 	 { "Lattice2D_swigregister", Lattice2D_swigregister, METH_O, NULL},
-	 { "new_BasicLattice", _wrap_new_BasicLattice, METH_VARARGS, "\n"
-		"new_BasicLattice(double length1, double length2, double angle, double xi) -> BasicLattice\n"
-		"BasicLattice::BasicLattice(double length1, double length2, double angle, double xi)\n"
+	 { "new_BasicLattice2D", _wrap_new_BasicLattice2D, METH_VARARGS, "\n"
+		"new_BasicLattice2D(double length1, double length2, double angle, double xi) -> BasicLattice2D\n"
+		"BasicLattice2D::BasicLattice2D(double length1, double length2, double angle, double xi)\n"
 		"\n"
 		""},
-	 { "BasicLattice_clone", _wrap_BasicLattice_clone, METH_O, "\n"
-		"BasicLattice_clone(BasicLattice self) -> BasicLattice\n"
-		"BasicLattice * BasicLattice::clone() const\n"
+	 { "BasicLattice2D_clone", _wrap_BasicLattice2D_clone, METH_O, "\n"
+		"BasicLattice2D_clone(BasicLattice2D self) -> BasicLattice2D\n"
+		"BasicLattice2D * BasicLattice2D::clone() const\n"
 		"\n"
 		""},
-	 { "BasicLattice_accept", _wrap_BasicLattice_accept, METH_VARARGS, "\n"
-		"BasicLattice_accept(BasicLattice self, INodeVisitor * visitor)\n"
-		"void BasicLattice::accept(INodeVisitor *visitor) const final\n"
+	 { "BasicLattice2D_accept", _wrap_BasicLattice2D_accept, METH_VARARGS, "\n"
+		"BasicLattice2D_accept(BasicLattice2D self, INodeVisitor * visitor)\n"
+		"void BasicLattice2D::accept(INodeVisitor *visitor) const final\n"
 		"\n"
 		""},
-	 { "BasicLattice_length1", _wrap_BasicLattice_length1, METH_O, "\n"
-		"BasicLattice_length1(BasicLattice self) -> double\n"
-		"virtual double BasicLattice::length1() const\n"
+	 { "BasicLattice2D_length1", _wrap_BasicLattice2D_length1, METH_O, "\n"
+		"BasicLattice2D_length1(BasicLattice2D self) -> double\n"
+		"virtual double BasicLattice2D::length1() const\n"
 		"\n"
 		""},
-	 { "BasicLattice_length2", _wrap_BasicLattice_length2, METH_O, "\n"
-		"BasicLattice_length2(BasicLattice self) -> double\n"
-		"virtual double BasicLattice::length2() const\n"
+	 { "BasicLattice2D_length2", _wrap_BasicLattice2D_length2, METH_O, "\n"
+		"BasicLattice2D_length2(BasicLattice2D self) -> double\n"
+		"virtual double BasicLattice2D::length2() const\n"
 		"\n"
 		""},
-	 { "BasicLattice_latticeAngle", _wrap_BasicLattice_latticeAngle, METH_O, "\n"
-		"BasicLattice_latticeAngle(BasicLattice self) -> double\n"
-		"virtual double BasicLattice::latticeAngle() const\n"
+	 { "BasicLattice2D_latticeAngle", _wrap_BasicLattice2D_latticeAngle, METH_O, "\n"
+		"BasicLattice2D_latticeAngle(BasicLattice2D self) -> double\n"
+		"virtual double BasicLattice2D::latticeAngle() const\n"
 		"\n"
 		""},
-	 { "BasicLattice_unitCellArea", _wrap_BasicLattice_unitCellArea, METH_O, "\n"
-		"BasicLattice_unitCellArea(BasicLattice self) -> double\n"
-		"double BasicLattice::unitCellArea() const\n"
+	 { "BasicLattice2D_unitCellArea", _wrap_BasicLattice2D_unitCellArea, METH_O, "\n"
+		"BasicLattice2D_unitCellArea(BasicLattice2D self) -> double\n"
+		"double BasicLattice2D::unitCellArea() const\n"
 		"\n"
 		""},
-	 { "delete_BasicLattice", _wrap_delete_BasicLattice, METH_O, "delete_BasicLattice(BasicLattice self)"},
-	 { "BasicLattice_swigregister", BasicLattice_swigregister, METH_O, NULL},
-	 { "BasicLattice_swiginit", BasicLattice_swiginit, METH_VARARGS, NULL},
-	 { "new_SquareLattice", _wrap_new_SquareLattice, METH_VARARGS, "\n"
-		"SquareLattice(double length, double xi=0.0)\n"
-		"SquareLattice::SquareLattice(double length, double xi=0.0)\n"
+	 { "delete_BasicLattice2D", _wrap_delete_BasicLattice2D, METH_O, "delete_BasicLattice2D(BasicLattice2D self)"},
+	 { "BasicLattice2D_swigregister", BasicLattice2D_swigregister, METH_O, NULL},
+	 { "BasicLattice2D_swiginit", BasicLattice2D_swiginit, METH_VARARGS, NULL},
+	 { "new_SquareLattice2D", _wrap_new_SquareLattice2D, METH_VARARGS, "\n"
+		"SquareLattice2D(double length, double xi=0.0)\n"
+		"SquareLattice2D::SquareLattice2D(double length, double xi=0.0)\n"
 		"\n"
 		""},
-	 { "SquareLattice_clone", _wrap_SquareLattice_clone, METH_O, "\n"
-		"SquareLattice_clone(SquareLattice self) -> SquareLattice\n"
-		"SquareLattice * SquareLattice::clone() const\n"
+	 { "SquareLattice2D_clone", _wrap_SquareLattice2D_clone, METH_O, "\n"
+		"SquareLattice2D_clone(SquareLattice2D self) -> SquareLattice2D\n"
+		"SquareLattice2D * SquareLattice2D::clone() const\n"
 		"\n"
 		""},
-	 { "SquareLattice_accept", _wrap_SquareLattice_accept, METH_VARARGS, "\n"
-		"SquareLattice_accept(SquareLattice self, INodeVisitor * visitor)\n"
-		"void SquareLattice::accept(INodeVisitor *visitor) const final\n"
+	 { "SquareLattice2D_accept", _wrap_SquareLattice2D_accept, METH_VARARGS, "\n"
+		"SquareLattice2D_accept(SquareLattice2D self, INodeVisitor * visitor)\n"
+		"void SquareLattice2D::accept(INodeVisitor *visitor) const final\n"
 		"\n"
 		""},
-	 { "SquareLattice_length1", _wrap_SquareLattice_length1, METH_O, "\n"
-		"SquareLattice_length1(SquareLattice self) -> double\n"
-		"virtual double SquareLattice::length1() const\n"
+	 { "SquareLattice2D_length1", _wrap_SquareLattice2D_length1, METH_O, "\n"
+		"SquareLattice2D_length1(SquareLattice2D self) -> double\n"
+		"virtual double SquareLattice2D::length1() const\n"
 		"\n"
 		""},
-	 { "SquareLattice_length2", _wrap_SquareLattice_length2, METH_O, "\n"
-		"SquareLattice_length2(SquareLattice self) -> double\n"
-		"virtual double SquareLattice::length2() const\n"
+	 { "SquareLattice2D_length2", _wrap_SquareLattice2D_length2, METH_O, "\n"
+		"SquareLattice2D_length2(SquareLattice2D self) -> double\n"
+		"virtual double SquareLattice2D::length2() const\n"
 		"\n"
 		""},
-	 { "SquareLattice_latticeAngle", _wrap_SquareLattice_latticeAngle, METH_O, "\n"
-		"SquareLattice_latticeAngle(SquareLattice self) -> double\n"
-		"double SquareLattice::latticeAngle() const\n"
+	 { "SquareLattice2D_latticeAngle", _wrap_SquareLattice2D_latticeAngle, METH_O, "\n"
+		"SquareLattice2D_latticeAngle(SquareLattice2D self) -> double\n"
+		"double SquareLattice2D::latticeAngle() const\n"
 		"\n"
 		""},
-	 { "SquareLattice_unitCellArea", _wrap_SquareLattice_unitCellArea, METH_O, "\n"
-		"SquareLattice_unitCellArea(SquareLattice self) -> double\n"
-		"double SquareLattice::unitCellArea() const\n"
+	 { "SquareLattice2D_unitCellArea", _wrap_SquareLattice2D_unitCellArea, METH_O, "\n"
+		"SquareLattice2D_unitCellArea(SquareLattice2D self) -> double\n"
+		"double SquareLattice2D::unitCellArea() const\n"
 		"\n"
 		""},
-	 { "delete_SquareLattice", _wrap_delete_SquareLattice, METH_O, "delete_SquareLattice(SquareLattice self)"},
-	 { "SquareLattice_swigregister", SquareLattice_swigregister, METH_O, NULL},
-	 { "SquareLattice_swiginit", SquareLattice_swiginit, METH_VARARGS, NULL},
-	 { "new_HexagonalLattice", _wrap_new_HexagonalLattice, METH_VARARGS, "\n"
-		"new_HexagonalLattice(double length, double xi) -> HexagonalLattice\n"
-		"HexagonalLattice::HexagonalLattice(double length, double xi)\n"
+	 { "delete_SquareLattice2D", _wrap_delete_SquareLattice2D, METH_O, "delete_SquareLattice2D(SquareLattice2D self)"},
+	 { "SquareLattice2D_swigregister", SquareLattice2D_swigregister, METH_O, NULL},
+	 { "SquareLattice2D_swiginit", SquareLattice2D_swiginit, METH_VARARGS, NULL},
+	 { "new_HexagonalLattice2D", _wrap_new_HexagonalLattice2D, METH_VARARGS, "\n"
+		"new_HexagonalLattice2D(double length, double xi) -> HexagonalLattice2D\n"
+		"HexagonalLattice2D::HexagonalLattice2D(double length, double xi)\n"
 		"\n"
 		""},
-	 { "HexagonalLattice_clone", _wrap_HexagonalLattice_clone, METH_O, "\n"
-		"HexagonalLattice_clone(HexagonalLattice self) -> HexagonalLattice\n"
-		"HexagonalLattice * HexagonalLattice::clone() const\n"
+	 { "HexagonalLattice2D_clone", _wrap_HexagonalLattice2D_clone, METH_O, "\n"
+		"HexagonalLattice2D_clone(HexagonalLattice2D self) -> HexagonalLattice2D\n"
+		"HexagonalLattice2D * HexagonalLattice2D::clone() const\n"
 		"\n"
 		""},
-	 { "HexagonalLattice_accept", _wrap_HexagonalLattice_accept, METH_VARARGS, "\n"
-		"HexagonalLattice_accept(HexagonalLattice self, INodeVisitor * visitor)\n"
-		"void HexagonalLattice::accept(INodeVisitor *visitor) const final\n"
+	 { "HexagonalLattice2D_accept", _wrap_HexagonalLattice2D_accept, METH_VARARGS, "\n"
+		"HexagonalLattice2D_accept(HexagonalLattice2D self, INodeVisitor * visitor)\n"
+		"void HexagonalLattice2D::accept(INodeVisitor *visitor) const final\n"
 		"\n"
 		""},
-	 { "HexagonalLattice_length1", _wrap_HexagonalLattice_length1, METH_O, "\n"
-		"HexagonalLattice_length1(HexagonalLattice self) -> double\n"
-		"virtual double HexagonalLattice::length1() const\n"
+	 { "HexagonalLattice2D_length1", _wrap_HexagonalLattice2D_length1, METH_O, "\n"
+		"HexagonalLattice2D_length1(HexagonalLattice2D self) -> double\n"
+		"virtual double HexagonalLattice2D::length1() const\n"
 		"\n"
 		""},
-	 { "HexagonalLattice_length2", _wrap_HexagonalLattice_length2, METH_O, "\n"
-		"HexagonalLattice_length2(HexagonalLattice self) -> double\n"
-		"virtual double HexagonalLattice::length2() const\n"
+	 { "HexagonalLattice2D_length2", _wrap_HexagonalLattice2D_length2, METH_O, "\n"
+		"HexagonalLattice2D_length2(HexagonalLattice2D self) -> double\n"
+		"virtual double HexagonalLattice2D::length2() const\n"
 		"\n"
 		""},
-	 { "HexagonalLattice_latticeAngle", _wrap_HexagonalLattice_latticeAngle, METH_O, "\n"
-		"HexagonalLattice_latticeAngle(HexagonalLattice self) -> double\n"
-		"double HexagonalLattice::latticeAngle() const\n"
+	 { "HexagonalLattice2D_latticeAngle", _wrap_HexagonalLattice2D_latticeAngle, METH_O, "\n"
+		"HexagonalLattice2D_latticeAngle(HexagonalLattice2D self) -> double\n"
+		"double HexagonalLattice2D::latticeAngle() const\n"
 		"\n"
 		""},
-	 { "HexagonalLattice_unitCellArea", _wrap_HexagonalLattice_unitCellArea, METH_O, "\n"
-		"HexagonalLattice_unitCellArea(HexagonalLattice self) -> double\n"
-		"double HexagonalLattice::unitCellArea() const\n"
+	 { "HexagonalLattice2D_unitCellArea", _wrap_HexagonalLattice2D_unitCellArea, METH_O, "\n"
+		"HexagonalLattice2D_unitCellArea(HexagonalLattice2D self) -> double\n"
+		"double HexagonalLattice2D::unitCellArea() const\n"
 		"\n"
 		""},
-	 { "delete_HexagonalLattice", _wrap_delete_HexagonalLattice, METH_O, "delete_HexagonalLattice(HexagonalLattice self)"},
-	 { "HexagonalLattice_swigregister", HexagonalLattice_swigregister, METH_O, NULL},
-	 { "HexagonalLattice_swiginit", HexagonalLattice_swiginit, METH_VARARGS, NULL},
-	 { "createCubicLattice", _wrap_createCubicLattice, METH_O, "\n"
-		"createCubicLattice(double a) -> Lattice3D\n"
-		"Lattice3D bake::createCubicLattice(double a)\n"
+	 { "delete_HexagonalLattice2D", _wrap_delete_HexagonalLattice2D, METH_O, "delete_HexagonalLattice2D(HexagonalLattice2D self)"},
+	 { "HexagonalLattice2D_swigregister", HexagonalLattice2D_swigregister, METH_O, NULL},
+	 { "HexagonalLattice2D_swiginit", HexagonalLattice2D_swiginit, METH_VARARGS, NULL},
+	 { "CubicLattice", _wrap_CubicLattice, METH_O, "\n"
+		"CubicLattice(double a) -> Lattice3D\n"
+		"Lattice3D bake::CubicLattice(double a)\n"
 		"\n"
 		"Returns a primitive cubic (cP) lattice with edge length a. \n"
 		"\n"
 		""},
-	 { "createFCCLattice", _wrap_createFCCLattice, METH_O, "\n"
-		"createFCCLattice(double a) -> Lattice3D\n"
-		"Lattice3D bake::createFCCLattice(double a)\n"
+	 { "FCCLattice", _wrap_FCCLattice, METH_O, "\n"
+		"FCCLattice(double a) -> Lattice3D\n"
+		"Lattice3D bake::FCCLattice(double a)\n"
 		"\n"
 		"Returns a face-centered cubic (cF) lattice with edge length a. \n"
 		"\n"
 		""},
-	 { "createHexagonalLattice", _wrap_createHexagonalLattice, METH_VARARGS, "\n"
-		"createHexagonalLattice(double a, double c) -> Lattice3D\n"
-		"Lattice3D bake::createHexagonalLattice(double a, double c)\n"
+	 { "HexagonalLattice", _wrap_HexagonalLattice, METH_VARARGS, "\n"
+		"HexagonalLattice(double a, double c) -> Lattice3D\n"
+		"Lattice3D bake::HexagonalLattice(double a, double c)\n"
 		"\n"
 		"Returns a primitive hexagonal (hP) lattice with hexagonal edge a and height c. \n"
 		"\n"
 		""},
-	 { "createHCPLattice", _wrap_createHCPLattice, METH_VARARGS, "\n"
-		"createHCPLattice(double a, double c) -> Lattice3D\n"
-		"Lattice3D bake::createHCPLattice(double a, double c)\n"
+	 { "HCPLattice", _wrap_HCPLattice, METH_VARARGS, "\n"
+		"HCPLattice(double a, double c) -> Lattice3D\n"
+		"Lattice3D bake::HCPLattice(double a, double c)\n"
 		"\n"
 		"TODO: Clarify how this is meant: HCP is not a Bravais lattice. \n"
 		"\n"
 		""},
-	 { "createTetragonalLattice", _wrap_createTetragonalLattice, METH_VARARGS, "\n"
-		"createTetragonalLattice(double a, double c) -> Lattice3D\n"
-		"Lattice3D bake::createTetragonalLattice(double a, double c)\n"
+	 { "TetragonalLattice", _wrap_TetragonalLattice, METH_VARARGS, "\n"
+		"TetragonalLattice(double a, double c) -> Lattice3D\n"
+		"Lattice3D bake::TetragonalLattice(double a, double c)\n"
 		"\n"
 		"Returns a primitive tetragonal (tP) lattice with square base edge a and height c. \n"
 		"\n"
 		""},
-	 { "createBCTLattice", _wrap_createBCTLattice, METH_VARARGS, "\n"
-		"createBCTLattice(double a, double c) -> Lattice3D\n"
-		"Lattice3D bake::createBCTLattice(double a, double c)\n"
+	 { "BCTLattice", _wrap_BCTLattice, METH_VARARGS, "\n"
+		"BCTLattice(double a, double c) -> Lattice3D\n"
+		"Lattice3D bake::BCTLattice(double a, double c)\n"
 		"\n"
 		"Returns a body-centered cubic (cI) lattice with edge length a. TODO: Clarify meaning of c \n"
 		"\n"
@@ -75737,6 +75737,15 @@ static void *_p_ParticleTo_p_IParameterized(void *x, int *SWIGUNUSEDPARM(newmemo
 static void *_p_Lattice2DTo_p_IParameterized(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((IParameterized *) (INode *) ((Lattice2D *) x));
 }
+static void *_p_BasicLattice2DTo_p_IParameterized(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IParameterized *) (INode *)(Lattice2D *) ((BasicLattice2D *) x));
+}
+static void *_p_SquareLattice2DTo_p_IParameterized(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IParameterized *) (INode *)(Lattice2D *) ((SquareLattice2D *) x));
+}
+static void *_p_HexagonalLattice2DTo_p_IParameterized(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IParameterized *) (INode *)(Lattice2D *) ((HexagonalLattice2D *) x));
+}
 static void *_p_IFTDecayFunction1DTo_p_IParameterized(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((IParameterized *) (INode *) ((IFTDecayFunction1D *) x));
 }
@@ -75884,15 +75893,6 @@ static void *_p_FormFactorLongBoxLorentzTo_p_IParameterized(void *x, int *SWIGUN
 static void *_p_FormFactorSawtoothRippleLorentzTo_p_IParameterized(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((IParameterized *) (INode *)(ISample *)(IFormFactor *)(IFormFactorBorn *)(IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleLorentz *) x));
 }
-static void *_p_BasicLatticeTo_p_IParameterized(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IParameterized *) (INode *)(Lattice2D *) ((BasicLattice *) x));
-}
-static void *_p_SquareLatticeTo_p_IParameterized(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IParameterized *) (INode *)(Lattice2D *) ((SquareLattice *) x));
-}
-static void *_p_HexagonalLatticeTo_p_IParameterized(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IParameterized *) (INode *)(Lattice2D *) ((HexagonalLattice *) x));
-}
 static void *_p_FTDistribution1DTriangleTo_p_IParameterized(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((IParameterized *) (INode *)(IFTDistribution1D *) ((FTDistribution1DTriangle *) x));
 }
@@ -75902,14 +75902,14 @@ static void *_p_FTDecayFunction1DTriangleTo_p_IParameterized(void *x, int *SWIGU
 static void *_p_RotationEulerTo_p_IParameterized(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((IParameterized *) (INode *)(IRotation *) ((RotationEuler *) x));
 }
-static void *_p_BasicLatticeTo_p_Lattice2D(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((Lattice2D *)  ((BasicLattice *) x));
+static void *_p_BasicLattice2DTo_p_Lattice2D(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((Lattice2D *)  ((BasicLattice2D *) x));
 }
-static void *_p_SquareLatticeTo_p_Lattice2D(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((Lattice2D *)  ((SquareLattice *) x));
+static void *_p_SquareLattice2DTo_p_Lattice2D(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((Lattice2D *)  ((SquareLattice2D *) x));
 }
-static void *_p_HexagonalLatticeTo_p_Lattice2D(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((Lattice2D *)  ((HexagonalLattice *) x));
+static void *_p_HexagonalLattice2DTo_p_Lattice2D(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((Lattice2D *)  ((HexagonalLattice2D *) x));
 }
 static void *_p_ParticleCompositionTo_p_IParticle(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((IParticle *)  ((ParticleComposition *) x));
@@ -76121,6 +76121,15 @@ static void *_p_ParticleTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory))
 static void *_p_Lattice2DTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *)  ((Lattice2D *) x));
 }
+static void *_p_BasicLattice2DTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ICloneable *) (Lattice2D *) ((BasicLattice2D *) x));
+}
+static void *_p_SquareLattice2DTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ICloneable *) (Lattice2D *) ((SquareLattice2D *) x));
+}
+static void *_p_HexagonalLattice2DTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ICloneable *) (Lattice2D *) ((HexagonalLattice2D *) x));
+}
 static void *_p_IFTDecayFunction1DTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *)  ((IFTDecayFunction1D *) x));
 }
@@ -76268,15 +76277,6 @@ static void *_p_FormFactorLongBoxLorentzTo_p_ICloneable(void *x, int *SWIGUNUSED
 static void *_p_FormFactorSawtoothRippleLorentzTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (ISample *)(IFormFactor *)(IFormFactorBorn *)(IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleLorentz *) x));
 }
-static void *_p_BasicLatticeTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (Lattice2D *) ((BasicLattice *) x));
-}
-static void *_p_SquareLatticeTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (Lattice2D *) ((SquareLattice *) x));
-}
-static void *_p_HexagonalLatticeTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (Lattice2D *) ((HexagonalLattice *) x));
-}
 static void *_p_FTDistribution1DTriangleTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (IFTDistribution1D *) ((FTDistribution1DTriangle *) x));
 }
@@ -76487,6 +76487,15 @@ static void *_p_ParticleTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
 static void *_p_Lattice2DTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *)  ((Lattice2D *) x));
 }
+static void *_p_BasicLattice2DTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((INode *) (Lattice2D *) ((BasicLattice2D *) x));
+}
+static void *_p_SquareLattice2DTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((INode *) (Lattice2D *) ((SquareLattice2D *) x));
+}
+static void *_p_HexagonalLattice2DTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((INode *) (Lattice2D *) ((HexagonalLattice2D *) x));
+}
 static void *_p_IFTDecayFunction1DTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *)  ((IFTDecayFunction1D *) x));
 }
@@ -76634,15 +76643,6 @@ static void *_p_FormFactorLongBoxLorentzTo_p_INode(void *x, int *SWIGUNUSEDPARM(
 static void *_p_FormFactorSawtoothRippleLorentzTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (ISample *)(IFormFactor *)(IFormFactorBorn *)(IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleLorentz *) x));
 }
-static void *_p_BasicLatticeTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (Lattice2D *) ((BasicLattice *) x));
-}
-static void *_p_SquareLatticeTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (Lattice2D *) ((SquareLattice *) x));
-}
-static void *_p_HexagonalLatticeTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (Lattice2D *) ((HexagonalLattice *) x));
-}
 static void *_p_FTDecayFunction1DTriangleTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (IFTDecayFunction1D *) ((FTDecayFunction1DTriangle *) x));
 }
@@ -77084,7 +77084,7 @@ static void *_p_FTDistribution2DGateTo_p_IFTDistribution2D(void *x, int *SWIGUNU
 static void *_p_FTDistribution2DConeTo_p_IFTDistribution2D(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((IFTDistribution2D *)  ((FTDistribution2DCone *) x));
 }
-static swig_type_info _swigt__p_BasicLattice = {"_p_BasicLattice", "BasicLattice *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_BasicLattice2D = {"_p_BasicLattice2D", "BasicLattice2D *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_BasicVector3DT_double_t = {"_p_BasicVector3DT_double_t", "std::vector< BasicVector3D< double > >::value_type *|kvector_t *|BasicVector3D< double > *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_BasicVector3DT_int_t = {"_p_BasicVector3DT_int_t", "ivector_t *|BasicVector3D< int > *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_BasicVector3DT_std__complexT_double_t_t = {"_p_BasicVector3DT_std__complexT_double_t_t", "BasicVector3D< std::complex< double > > *|std::vector< BasicVector3D< std::complex< double > > >::value_type *|cvector_t *", 0, 0, (void*)0, 0};
@@ -77145,7 +77145,7 @@ static swig_type_info _swigt__p_FormFactorTruncatedSphere = {"_p_FormFactorTrunc
 static swig_type_info _swigt__p_FormFactorTruncatedSpheroid = {"_p_FormFactorTruncatedSpheroid", "FormFactorTruncatedSpheroid *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_FormFactorWeighted = {"_p_FormFactorWeighted", "FormFactorWeighted *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_GaussFisherPeakShape = {"_p_GaussFisherPeakShape", "GaussFisherPeakShape *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_HexagonalLattice = {"_p_HexagonalLattice", "HexagonalLattice *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_HexagonalLattice2D = {"_p_HexagonalLattice2D", "HexagonalLattice2D *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_IAbstractParticle = {"_p_IAbstractParticle", "IAbstractParticle *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_ICloneable = {"_p_ICloneable", "ICloneable *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_ICosineRipple = {"_p_ICosineRipple", "ICosineRipple *", 0, 0, (void*)0, 0};
@@ -77220,7 +77220,7 @@ static swig_type_info _swigt__p_SimpleSelectionRule = {"_p_SimpleSelectionRule",
 static swig_type_info _swigt__p_SimulationOptions = {"_p_SimulationOptions", "SimulationOptions *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_SlicedParticle = {"_p_SlicedParticle", "SlicedParticle *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_SlicingEffects = {"_p_SlicingEffects", "SlicingEffects *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_SquareLattice = {"_p_SquareLattice", "SquareLattice *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_SquareLattice2D = {"_p_SquareLattice2D", "SquareLattice2D *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_ThreadInfo = {"_p_ThreadInfo", "ThreadInfo *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_Transform3D = {"_p_Transform3D", "Transform3D *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_WavevectorInfo = {"_p_WavevectorInfo", "WavevectorInfo *", 0, 0, (void*)0, 0};
@@ -77283,7 +77283,7 @@ static swig_type_info _swigt__p_unsigned_short = {"_p_unsigned_short", "unsigned
 static swig_type_info _swigt__p_value_type = {"_p_value_type", "value_type *", 0, 0, (void*)0, 0};
 
 static swig_type_info *swig_type_initial[] = {
-  &_swigt__p_BasicLattice,
+  &_swigt__p_BasicLattice2D,
   &_swigt__p_BasicVector3DT_double_t,
   &_swigt__p_BasicVector3DT_int_t,
   &_swigt__p_BasicVector3DT_std__complexT_double_t_t,
@@ -77344,7 +77344,7 @@ static swig_type_info *swig_type_initial[] = {
   &_swigt__p_FormFactorTruncatedSpheroid,
   &_swigt__p_FormFactorWeighted,
   &_swigt__p_GaussFisherPeakShape,
-  &_swigt__p_HexagonalLattice,
+  &_swigt__p_HexagonalLattice2D,
   &_swigt__p_IAbstractParticle,
   &_swigt__p_ICloneable,
   &_swigt__p_ICosineRipple,
@@ -77419,7 +77419,7 @@ static swig_type_info *swig_type_initial[] = {
   &_swigt__p_SimulationOptions,
   &_swigt__p_SlicedParticle,
   &_swigt__p_SlicingEffects,
-  &_swigt__p_SquareLattice,
+  &_swigt__p_SquareLattice2D,
   &_swigt__p_ThreadInfo,
   &_swigt__p_Transform3D,
   &_swigt__p_WavevectorInfo,
@@ -77482,7 +77482,7 @@ static swig_type_info *swig_type_initial[] = {
   &_swigt__p_value_type,
 };
 
-static swig_cast_info _swigc__p_BasicLattice[] = {  {&_swigt__p_BasicLattice, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_BasicLattice2D[] = {  {&_swigt__p_BasicLattice2D, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_BasicVector3DT_double_t[] = {  {&_swigt__p_BasicVector3DT_double_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_BasicVector3DT_int_t[] = {  {&_swigt__p_BasicVector3DT_int_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_BasicVector3DT_std__complexT_double_t_t[] = {  {&_swigt__p_BasicVector3DT_std__complexT_double_t_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -77543,9 +77543,9 @@ static swig_cast_info _swigc__p_FormFactorTruncatedSphere[] = {  {&_swigt__p_For
 static swig_cast_info _swigc__p_FormFactorTruncatedSpheroid[] = {  {&_swigt__p_FormFactorTruncatedSpheroid, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_FormFactorWeighted[] = {  {&_swigt__p_FormFactorWeighted, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_GaussFisherPeakShape[] = {  {&_swigt__p_GaussFisherPeakShape, 0, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_HexagonalLattice[] = {  {&_swigt__p_HexagonalLattice, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_HexagonalLattice2D[] = {  {&_swigt__p_HexagonalLattice2D, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IAbstractParticle[] = {  {&_swigt__p_ParticleComposition, _p_ParticleCompositionTo_p_IAbstractParticle, 0, 0},  {&_swigt__p_ParticleDistribution, _p_ParticleDistributionTo_p_IAbstractParticle, 0, 0},  {&_swigt__p_MesoCrystal, _p_MesoCrystalTo_p_IAbstractParticle, 0, 0},  {&_swigt__p_IAbstractParticle, 0, 0, 0},  {&_swigt__p_IParticle, _p_IParticleTo_p_IAbstractParticle, 0, 0},  {&_swigt__p_Particle, _p_ParticleTo_p_IAbstractParticle, 0, 0},  {&_swigt__p_ParticleCoreShell, _p_ParticleCoreShellTo_p_IAbstractParticle, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_ICloneable[] = {  {&_swigt__p_FormFactorBox, _p_FormFactorBoxTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorSphereGaussianRadius, _p_FormFactorSphereGaussianRadiusTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorSphereLogNormalRadius, _p_FormFactorSphereLogNormalRadiusTo_p_ICloneable, 0, 0},  {&_swigt__p_MultiLayer, _p_MultiLayerTo_p_ICloneable, 0, 0},  {&_swigt__p_ParticleDistribution, _p_ParticleDistributionTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDecayFunction1DGauss, _p_FTDecayFunction1DGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution1DGauss, _p_FTDistribution1DGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFunctionNone, _p_InterferenceFunctionNoneTo_p_ICloneable, 0, 0},  {&_swigt__p_ParticleLayout, _p_ParticleLayoutTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorHemiEllipsoid, _p_FormFactorHemiEllipsoidTo_p_ICloneable, 0, 0},  {&_swigt__p_MisesGaussPeakShape, _p_MisesGaussPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_MisesFisherGaussPeakShape, _p_MisesFisherGaussPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_LorentzFisherPeakShape, _p_LorentzFisherPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_GaussFisherPeakShape, _p_GaussFisherPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_IsotropicLorentzPeakShape, _p_IsotropicLorentzPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_IsotropicGaussPeakShape, _p_IsotropicGaussPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_IPeakShape, _p_IPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorPrism3, _p_FormFactorPrism3To_p_ICloneable, 0, 0},  {&_swigt__p_IFormFactorPolyhedron, _p_IFormFactorPolyhedronTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCuboctahedron, _p_FormFactorCuboctahedronTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorDodecahedron, _p_FormFactorDodecahedronTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorIcosahedron, _p_FormFactorIcosahedronTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorTetrahedron, _p_FormFactorTetrahedronTo_p_ICloneable, 0, 0},  {&_swigt__p_IFormFactorPrism, _p_IFormFactorPrismTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorPrism6, _p_FormFactorPrism6To_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution2DCone, _p_FTDistribution2DConeTo_p_ICloneable, 0, 0},  {&_swigt__p_ParticleCoreShell, _p_ParticleCoreShellTo_p_ICloneable, 0, 0},  {&_swigt__p_IProfileRectangularRipple, _p_IProfileRectangularRippleTo_p_ICloneable, 0, 0},  {&_swigt__p_ISawtoothRipple, _p_ISawtoothRippleTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorTruncatedSphere, _p_FormFactorTruncatedSphereTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorFullSphere, _p_FormFactorFullSphereTo_p_ICloneable, 0, 0},  {&_swigt__p_IFormFactor, _p_IFormFactorTo_p_ICloneable, 0, 0},  {&_swigt__p_ISample, _p_ISampleTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorLongBoxGauss, _p_FormFactorLongBoxGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFunctionHardDisk, _p_InterferenceFunctionHardDiskTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution2DGate, _p_FTDistribution2DGateTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDecayFunction1DVoigt, _p_FTDecayFunction1DVoigtTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution1DVoigt, _p_FTDistribution1DVoigtTo_p_ICloneable, 0, 0},  {&_swigt__p_IRotation, _p_IRotationTo_p_ICloneable, 0, 0},  {&_swigt__p_IdentityRotation, _p_IdentityRotationTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorTruncatedSpheroid, _p_FormFactorTruncatedSpheroidTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorFullSpheroid, _p_FormFactorFullSpheroidTo_p_ICloneable, 0, 0},  {&_swigt__p_RotationX, _p_RotationXTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCantellatedCube, _p_FormFactorCantellatedCubeTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorTruncatedCube, _p_FormFactorTruncatedCubeTo_p_ICloneable, 0, 0},  {&_swigt__p_RotationY, _p_RotationYTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDecayFunction2DGauss, _p_FTDecayFunction2DGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution2DGauss, _p_FTDistribution2DGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_RotationZ, _p_RotationZTo_p_ICloneable, 0, 0},  {&_swigt__p_IFormFactorBorn, _p_IFormFactorBornTo_p_ICloneable, 0, 0},  {&_swigt__p_Particle, _p_ParticleTo_p_ICloneable, 0, 0},  {&_swigt__p_IParticle, _p_IParticleTo_p_ICloneable, 0, 0},  {&_swigt__p_IAbstractParticle, _p_IAbstractParticleTo_p_ICloneable, 0, 0},  {&_swigt__p_Lattice2D, _p_Lattice2DTo_p_ICloneable, 0, 0},  {&_swigt__p_IFTDistribution1D, _p_IFTDistribution1DTo_p_ICloneable, 0, 0},  {&_swigt__p_IFTDecayFunction1D, _p_IFTDecayFunction1DTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCosineRippleBox, _p_FormFactorCosineRippleBoxTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleBox, _p_FormFactorSawtoothRippleBoxTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCone, _p_FormFactorConeTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFunctionTwin, _p_InterferenceFunctionTwinTo_p_ICloneable, 0, 0},  {&_swigt__p_Layer, _p_LayerTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorAnisoPyramid, _p_FormFactorAnisoPyramidTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorPyramid, _p_FormFactorPyramidTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorEllipsoidalCylinder, _p_FormFactorEllipsoidalCylinderTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCylinder, _p_FormFactorCylinderTo_p_ICloneable, 0, 0},  {&_swigt__p_ParticleComposition, _p_ParticleCompositionTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution1DCosine, _p_FTDistribution1DCosineTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution1DGate, _p_FTDistribution1DGateTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCosineRippleGauss, _p_FormFactorCosineRippleGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleGauss, _p_FormFactorSawtoothRippleGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDecayFunction2DVoigt, _p_FTDecayFunction2DVoigtTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution2DVoigt, _p_FTDistribution2DVoigtTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution1DCauchy, _p_FTDistribution1DCauchyTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDecayFunction1DCauchy, _p_FTDecayFunction1DCauchyTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution2DCauchy, _p_FTDistribution2DCauchyTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDecayFunction2DCauchy, _p_FTDecayFunction2DCauchyTo_p_ICloneable, 0, 0},  {&_swigt__p_IInterferenceFunction, _p_IInterferenceFunctionTo_p_ICloneable, 0, 0},  {&_swigt__p_ParameterPool, _p_ParameterPoolTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCone6, _p_FormFactorCone6To_p_ICloneable, 0, 0},  {&_swigt__p_IFormFactorDecorator, _p_IFormFactorDecoratorTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorDot, _p_FormFactorDotTo_p_ICloneable, 0, 0},  {&_swigt__p_LayerRoughness, _p_LayerRoughnessTo_p_ICloneable, 0, 0},  {&_swigt__p_MesoCrystal, _p_MesoCrystalTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCrystal, _p_FormFactorCrystalTo_p_ICloneable, 0, 0},  {&_swigt__p_ICosineRipple, _p_ICosineRippleTo_p_ICloneable, 0, 0},  {&_swigt__p_IProfileRipple, _p_IProfileRippleTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFunction2DParaCrystal, _p_InterferenceFunction2DParaCrystalTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFunctionRadialParaCrystal, _p_InterferenceFunctionRadialParaCrystalTo_p_ICloneable, 0, 0},  {&_swigt__p_Crystal, _p_CrystalTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorHollowSphere, _p_FormFactorHollowSphereTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorGaussSphere, _p_FormFactorGaussSphereTo_p_ICloneable, 0, 0},  {&_swigt__p_IFTDistribution2D, _p_IFTDistribution2DTo_p_ICloneable, 0, 0},  {&_swigt__p_IFTDecayFunction2D, _p_IFTDecayFunction2DTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorWeighted, _p_FormFactorWeightedTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorLongBoxLorentz, _p_FormFactorLongBoxLorentzTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCosineRippleLorentz, _p_FormFactorCosineRippleLorentzTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleLorentz, _p_FormFactorSawtoothRippleLorentzTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFunction3DLattice, _p_InterferenceFunction3DLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFunction2DSuperLattice, _p_InterferenceFunction2DSuperLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFunction2DLattice, _p_InterferenceFunction2DLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFunction1DLattice, _p_InterferenceFunction1DLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFunctionFinite2DLattice, _p_InterferenceFunctionFinite2DLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFunctionFinite3DLattice, _p_InterferenceFunctionFinite3DLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_BasicLattice, _p_BasicLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_SquareLattice, _p_SquareLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_HexagonalLattice, _p_HexagonalLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution1DTriangle, _p_FTDistribution1DTriangleTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDecayFunction1DTriangle, _p_FTDecayFunction1DTriangleTo_p_ICloneable, 0, 0},  {&_swigt__p_ICloneable, 0, 0, 0},  {&_swigt__p_RotationEuler, _p_RotationEulerTo_p_ICloneable, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_ICloneable[] = {  {&_swigt__p_FormFactorBox, _p_FormFactorBoxTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorSphereGaussianRadius, _p_FormFactorSphereGaussianRadiusTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorSphereLogNormalRadius, _p_FormFactorSphereLogNormalRadiusTo_p_ICloneable, 0, 0},  {&_swigt__p_MultiLayer, _p_MultiLayerTo_p_ICloneable, 0, 0},  {&_swigt__p_ParticleDistribution, _p_ParticleDistributionTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDecayFunction1DGauss, _p_FTDecayFunction1DGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution1DGauss, _p_FTDistribution1DGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFunctionNone, _p_InterferenceFunctionNoneTo_p_ICloneable, 0, 0},  {&_swigt__p_ParticleLayout, _p_ParticleLayoutTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorHemiEllipsoid, _p_FormFactorHemiEllipsoidTo_p_ICloneable, 0, 0},  {&_swigt__p_MisesGaussPeakShape, _p_MisesGaussPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_MisesFisherGaussPeakShape, _p_MisesFisherGaussPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_LorentzFisherPeakShape, _p_LorentzFisherPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_GaussFisherPeakShape, _p_GaussFisherPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_IsotropicLorentzPeakShape, _p_IsotropicLorentzPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_IsotropicGaussPeakShape, _p_IsotropicGaussPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_IPeakShape, _p_IPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorPrism3, _p_FormFactorPrism3To_p_ICloneable, 0, 0},  {&_swigt__p_IFormFactorPolyhedron, _p_IFormFactorPolyhedronTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCuboctahedron, _p_FormFactorCuboctahedronTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorDodecahedron, _p_FormFactorDodecahedronTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorIcosahedron, _p_FormFactorIcosahedronTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorTetrahedron, _p_FormFactorTetrahedronTo_p_ICloneable, 0, 0},  {&_swigt__p_IFormFactorPrism, _p_IFormFactorPrismTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorPrism6, _p_FormFactorPrism6To_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution2DCone, _p_FTDistribution2DConeTo_p_ICloneable, 0, 0},  {&_swigt__p_ParticleCoreShell, _p_ParticleCoreShellTo_p_ICloneable, 0, 0},  {&_swigt__p_IProfileRectangularRipple, _p_IProfileRectangularRippleTo_p_ICloneable, 0, 0},  {&_swigt__p_ISawtoothRipple, _p_ISawtoothRippleTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorTruncatedSphere, _p_FormFactorTruncatedSphereTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorFullSphere, _p_FormFactorFullSphereTo_p_ICloneable, 0, 0},  {&_swigt__p_IFormFactor, _p_IFormFactorTo_p_ICloneable, 0, 0},  {&_swigt__p_ISample, _p_ISampleTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorLongBoxGauss, _p_FormFactorLongBoxGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFunctionHardDisk, _p_InterferenceFunctionHardDiskTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution2DGate, _p_FTDistribution2DGateTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDecayFunction1DVoigt, _p_FTDecayFunction1DVoigtTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution1DVoigt, _p_FTDistribution1DVoigtTo_p_ICloneable, 0, 0},  {&_swigt__p_IRotation, _p_IRotationTo_p_ICloneable, 0, 0},  {&_swigt__p_IdentityRotation, _p_IdentityRotationTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorTruncatedSpheroid, _p_FormFactorTruncatedSpheroidTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorFullSpheroid, _p_FormFactorFullSpheroidTo_p_ICloneable, 0, 0},  {&_swigt__p_RotationX, _p_RotationXTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCantellatedCube, _p_FormFactorCantellatedCubeTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorTruncatedCube, _p_FormFactorTruncatedCubeTo_p_ICloneable, 0, 0},  {&_swigt__p_RotationY, _p_RotationYTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDecayFunction2DGauss, _p_FTDecayFunction2DGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution2DGauss, _p_FTDistribution2DGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_RotationZ, _p_RotationZTo_p_ICloneable, 0, 0},  {&_swigt__p_IFormFactorBorn, _p_IFormFactorBornTo_p_ICloneable, 0, 0},  {&_swigt__p_Particle, _p_ParticleTo_p_ICloneable, 0, 0},  {&_swigt__p_IParticle, _p_IParticleTo_p_ICloneable, 0, 0},  {&_swigt__p_IAbstractParticle, _p_IAbstractParticleTo_p_ICloneable, 0, 0},  {&_swigt__p_HexagonalLattice2D, _p_HexagonalLattice2DTo_p_ICloneable, 0, 0},  {&_swigt__p_SquareLattice2D, _p_SquareLattice2DTo_p_ICloneable, 0, 0},  {&_swigt__p_BasicLattice2D, _p_BasicLattice2DTo_p_ICloneable, 0, 0},  {&_swigt__p_Lattice2D, _p_Lattice2DTo_p_ICloneable, 0, 0},  {&_swigt__p_IFTDistribution1D, _p_IFTDistribution1DTo_p_ICloneable, 0, 0},  {&_swigt__p_IFTDecayFunction1D, _p_IFTDecayFunction1DTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCosineRippleBox, _p_FormFactorCosineRippleBoxTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleBox, _p_FormFactorSawtoothRippleBoxTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCone, _p_FormFactorConeTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFunctionTwin, _p_InterferenceFunctionTwinTo_p_ICloneable, 0, 0},  {&_swigt__p_Layer, _p_LayerTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorAnisoPyramid, _p_FormFactorAnisoPyramidTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorPyramid, _p_FormFactorPyramidTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorEllipsoidalCylinder, _p_FormFactorEllipsoidalCylinderTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCylinder, _p_FormFactorCylinderTo_p_ICloneable, 0, 0},  {&_swigt__p_ParticleComposition, _p_ParticleCompositionTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution1DCosine, _p_FTDistribution1DCosineTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution1DGate, _p_FTDistribution1DGateTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCosineRippleGauss, _p_FormFactorCosineRippleGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleGauss, _p_FormFactorSawtoothRippleGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDecayFunction2DVoigt, _p_FTDecayFunction2DVoigtTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution2DVoigt, _p_FTDistribution2DVoigtTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution1DCauchy, _p_FTDistribution1DCauchyTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDecayFunction1DCauchy, _p_FTDecayFunction1DCauchyTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution2DCauchy, _p_FTDistribution2DCauchyTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDecayFunction2DCauchy, _p_FTDecayFunction2DCauchyTo_p_ICloneable, 0, 0},  {&_swigt__p_IInterferenceFunction, _p_IInterferenceFunctionTo_p_ICloneable, 0, 0},  {&_swigt__p_ParameterPool, _p_ParameterPoolTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCone6, _p_FormFactorCone6To_p_ICloneable, 0, 0},  {&_swigt__p_IFormFactorDecorator, _p_IFormFactorDecoratorTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorDot, _p_FormFactorDotTo_p_ICloneable, 0, 0},  {&_swigt__p_LayerRoughness, _p_LayerRoughnessTo_p_ICloneable, 0, 0},  {&_swigt__p_MesoCrystal, _p_MesoCrystalTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCrystal, _p_FormFactorCrystalTo_p_ICloneable, 0, 0},  {&_swigt__p_ICosineRipple, _p_ICosineRippleTo_p_ICloneable, 0, 0},  {&_swigt__p_IProfileRipple, _p_IProfileRippleTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFunction2DParaCrystal, _p_InterferenceFunction2DParaCrystalTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFunctionRadialParaCrystal, _p_InterferenceFunctionRadialParaCrystalTo_p_ICloneable, 0, 0},  {&_swigt__p_Crystal, _p_CrystalTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorHollowSphere, _p_FormFactorHollowSphereTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorGaussSphere, _p_FormFactorGaussSphereTo_p_ICloneable, 0, 0},  {&_swigt__p_IFTDistribution2D, _p_IFTDistribution2DTo_p_ICloneable, 0, 0},  {&_swigt__p_IFTDecayFunction2D, _p_IFTDecayFunction2DTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorWeighted, _p_FormFactorWeightedTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorLongBoxLorentz, _p_FormFactorLongBoxLorentzTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCosineRippleLorentz, _p_FormFactorCosineRippleLorentzTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleLorentz, _p_FormFactorSawtoothRippleLorentzTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFunction3DLattice, _p_InterferenceFunction3DLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFunction2DSuperLattice, _p_InterferenceFunction2DSuperLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFunction2DLattice, _p_InterferenceFunction2DLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFunction1DLattice, _p_InterferenceFunction1DLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFunctionFinite2DLattice, _p_InterferenceFunctionFinite2DLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFunctionFinite3DLattice, _p_InterferenceFunctionFinite3DLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution1DTriangle, _p_FTDistribution1DTriangleTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDecayFunction1DTriangle, _p_FTDecayFunction1DTriangleTo_p_ICloneable, 0, 0},  {&_swigt__p_ICloneable, 0, 0, 0},  {&_swigt__p_RotationEuler, _p_RotationEulerTo_p_ICloneable, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_ICosineRipple[] = {  {&_swigt__p_FormFactorCosineRippleLorentz, _p_FormFactorCosineRippleLorentzTo_p_ICosineRipple, 0, 0},  {&_swigt__p_FormFactorCosineRippleBox, _p_FormFactorCosineRippleBoxTo_p_ICosineRipple, 0, 0},  {&_swigt__p_ICosineRipple, 0, 0, 0},  {&_swigt__p_FormFactorCosineRippleGauss, _p_FormFactorCosineRippleGaussTo_p_ICosineRipple, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IFTDecayFunction1D[] = {  {&_swigt__p_FTDecayFunction1DCauchy, _p_FTDecayFunction1DCauchyTo_p_IFTDecayFunction1D, 0, 0},  {&_swigt__p_FTDecayFunction1DGauss, _p_FTDecayFunction1DGaussTo_p_IFTDecayFunction1D, 0, 0},  {&_swigt__p_FTDecayFunction1DTriangle, _p_FTDecayFunction1DTriangleTo_p_IFTDecayFunction1D, 0, 0},  {&_swigt__p_IFTDecayFunction1D, 0, 0, 0},  {&_swigt__p_FTDecayFunction1DVoigt, _p_FTDecayFunction1DVoigtTo_p_IFTDecayFunction1D, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IFTDecayFunction2D[] = {  {&_swigt__p_FTDecayFunction2DCauchy, _p_FTDecayFunction2DCauchyTo_p_IFTDecayFunction2D, 0, 0},  {&_swigt__p_FTDecayFunction2DGauss, _p_FTDecayFunction2DGaussTo_p_IFTDecayFunction2D, 0, 0},  {&_swigt__p_IFTDecayFunction2D, 0, 0, 0},  {&_swigt__p_FTDecayFunction2DVoigt, _p_FTDecayFunction2DVoigtTo_p_IFTDecayFunction2D, 0, 0},{0, 0, 0, 0}};
@@ -77558,9 +77558,9 @@ static swig_cast_info _swigc__p_IFormFactorDecorator[] = {  {&_swigt__p_IFormFac
 static swig_cast_info _swigc__p_IFormFactorPolyhedron[] = {  {&_swigt__p_IFormFactorPolyhedron, 0, 0, 0},  {&_swigt__p_FormFactorCuboctahedron, _p_FormFactorCuboctahedronTo_p_IFormFactorPolyhedron, 0, 0},  {&_swigt__p_FormFactorDodecahedron, _p_FormFactorDodecahedronTo_p_IFormFactorPolyhedron, 0, 0},  {&_swigt__p_FormFactorIcosahedron, _p_FormFactorIcosahedronTo_p_IFormFactorPolyhedron, 0, 0},  {&_swigt__p_FormFactorTetrahedron, _p_FormFactorTetrahedronTo_p_IFormFactorPolyhedron, 0, 0},  {&_swigt__p_FormFactorCantellatedCube, _p_FormFactorCantellatedCubeTo_p_IFormFactorPolyhedron, 0, 0},  {&_swigt__p_FormFactorCone6, _p_FormFactorCone6To_p_IFormFactorPolyhedron, 0, 0},  {&_swigt__p_FormFactorTruncatedCube, _p_FormFactorTruncatedCubeTo_p_IFormFactorPolyhedron, 0, 0},  {&_swigt__p_FormFactorAnisoPyramid, _p_FormFactorAnisoPyramidTo_p_IFormFactorPolyhedron, 0, 0},  {&_swigt__p_FormFactorPyramid, _p_FormFactorPyramidTo_p_IFormFactorPolyhedron, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IFormFactorPrism[] = {  {&_swigt__p_FormFactorPrism3, _p_FormFactorPrism3To_p_IFormFactorPrism, 0, 0},  {&_swigt__p_IFormFactorPrism, 0, 0, 0},  {&_swigt__p_FormFactorPrism6, _p_FormFactorPrism6To_p_IFormFactorPrism, 0, 0},  {&_swigt__p_FormFactorBox, _p_FormFactorBoxTo_p_IFormFactorPrism, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IInterferenceFunction[] = {  {&_swigt__p_InterferenceFunctionHardDisk, _p_InterferenceFunctionHardDiskTo_p_IInterferenceFunction, 0, 0},  {&_swigt__p_IInterferenceFunction, 0, 0, 0},  {&_swigt__p_InterferenceFunction1DLattice, _p_InterferenceFunction1DLatticeTo_p_IInterferenceFunction, 0, 0},  {&_swigt__p_InterferenceFunction2DLattice, _p_InterferenceFunction2DLatticeTo_p_IInterferenceFunction, 0, 0},  {&_swigt__p_InterferenceFunction2DSuperLattice, _p_InterferenceFunction2DSuperLatticeTo_p_IInterferenceFunction, 0, 0},  {&_swigt__p_InterferenceFunction3DLattice, _p_InterferenceFunction3DLatticeTo_p_IInterferenceFunction, 0, 0},  {&_swigt__p_InterferenceFunctionFinite2DLattice, _p_InterferenceFunctionFinite2DLatticeTo_p_IInterferenceFunction, 0, 0},  {&_swigt__p_InterferenceFunctionFinite3DLattice, _p_InterferenceFunctionFinite3DLatticeTo_p_IInterferenceFunction, 0, 0},  {&_swigt__p_InterferenceFunctionNone, _p_InterferenceFunctionNoneTo_p_IInterferenceFunction, 0, 0},  {&_swigt__p_InterferenceFunction2DParaCrystal, _p_InterferenceFunction2DParaCrystalTo_p_IInterferenceFunction, 0, 0},  {&_swigt__p_InterferenceFunctionRadialParaCrystal, _p_InterferenceFunctionRadialParaCrystalTo_p_IInterferenceFunction, 0, 0},  {&_swigt__p_InterferenceFunctionTwin, _p_InterferenceFunctionTwinTo_p_IInterferenceFunction, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_INode[] = {  {&_swigt__p_FormFactorBox, _p_FormFactorBoxTo_p_INode, 0, 0},  {&_swigt__p_FormFactorSphereGaussianRadius, _p_FormFactorSphereGaussianRadiusTo_p_INode, 0, 0},  {&_swigt__p_FormFactorSphereLogNormalRadius, _p_FormFactorSphereLogNormalRadiusTo_p_INode, 0, 0},  {&_swigt__p_MultiLayer, _p_MultiLayerTo_p_INode, 0, 0},  {&_swigt__p_ParticleDistribution, _p_ParticleDistributionTo_p_INode, 0, 0},  {&_swigt__p_FTDecayFunction1DGauss, _p_FTDecayFunction1DGaussTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution1DGauss, _p_FTDistribution1DGaussTo_p_INode, 0, 0},  {&_swigt__p_InterferenceFunctionNone, _p_InterferenceFunctionNoneTo_p_INode, 0, 0},  {&_swigt__p_ParticleLayout, _p_ParticleLayoutTo_p_INode, 0, 0},  {&_swigt__p_FormFactorHemiEllipsoid, _p_FormFactorHemiEllipsoidTo_p_INode, 0, 0},  {&_swigt__p_INode, 0, 0, 0},  {&_swigt__p_MisesGaussPeakShape, _p_MisesGaussPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_MisesFisherGaussPeakShape, _p_MisesFisherGaussPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_LorentzFisherPeakShape, _p_LorentzFisherPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_GaussFisherPeakShape, _p_GaussFisherPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_IsotropicLorentzPeakShape, _p_IsotropicLorentzPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_IsotropicGaussPeakShape, _p_IsotropicGaussPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_IPeakShape, _p_IPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_FormFactorPrism3, _p_FormFactorPrism3To_p_INode, 0, 0},  {&_swigt__p_IFormFactorPolyhedron, _p_IFormFactorPolyhedronTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCuboctahedron, _p_FormFactorCuboctahedronTo_p_INode, 0, 0},  {&_swigt__p_FormFactorDodecahedron, _p_FormFactorDodecahedronTo_p_INode, 0, 0},  {&_swigt__p_FormFactorIcosahedron, _p_FormFactorIcosahedronTo_p_INode, 0, 0},  {&_swigt__p_FormFactorTetrahedron, _p_FormFactorTetrahedronTo_p_INode, 0, 0},  {&_swigt__p_IFormFactorPrism, _p_IFormFactorPrismTo_p_INode, 0, 0},  {&_swigt__p_FormFactorPrism6, _p_FormFactorPrism6To_p_INode, 0, 0},  {&_swigt__p_FTDistribution2DCone, _p_FTDistribution2DConeTo_p_INode, 0, 0},  {&_swigt__p_ParticleCoreShell, _p_ParticleCoreShellTo_p_INode, 0, 0},  {&_swigt__p_IProfileRectangularRipple, _p_IProfileRectangularRippleTo_p_INode, 0, 0},  {&_swigt__p_ISawtoothRipple, _p_ISawtoothRippleTo_p_INode, 0, 0},  {&_swigt__p_FormFactorTruncatedSphere, _p_FormFactorTruncatedSphereTo_p_INode, 0, 0},  {&_swigt__p_FormFactorFullSphere, _p_FormFactorFullSphereTo_p_INode, 0, 0},  {&_swigt__p_IFormFactor, _p_IFormFactorTo_p_INode, 0, 0},  {&_swigt__p_ISample, _p_ISampleTo_p_INode, 0, 0},  {&_swigt__p_FormFactorLongBoxGauss, _p_FormFactorLongBoxGaussTo_p_INode, 0, 0},  {&_swigt__p_InterferenceFunctionHardDisk, _p_InterferenceFunctionHardDiskTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution2DGate, _p_FTDistribution2DGateTo_p_INode, 0, 0},  {&_swigt__p_FTDecayFunction1DVoigt, _p_FTDecayFunction1DVoigtTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution1DVoigt, _p_FTDistribution1DVoigtTo_p_INode, 0, 0},  {&_swigt__p_IRotation, _p_IRotationTo_p_INode, 0, 0},  {&_swigt__p_IdentityRotation, _p_IdentityRotationTo_p_INode, 0, 0},  {&_swigt__p_FormFactorTruncatedSpheroid, _p_FormFactorTruncatedSpheroidTo_p_INode, 0, 0},  {&_swigt__p_FormFactorFullSpheroid, _p_FormFactorFullSpheroidTo_p_INode, 0, 0},  {&_swigt__p_RotationX, _p_RotationXTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCantellatedCube, _p_FormFactorCantellatedCubeTo_p_INode, 0, 0},  {&_swigt__p_FormFactorTruncatedCube, _p_FormFactorTruncatedCubeTo_p_INode, 0, 0},  {&_swigt__p_RotationY, _p_RotationYTo_p_INode, 0, 0},  {&_swigt__p_FTDecayFunction2DGauss, _p_FTDecayFunction2DGaussTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution2DGauss, _p_FTDistribution2DGaussTo_p_INode, 0, 0},  {&_swigt__p_RotationZ, _p_RotationZTo_p_INode, 0, 0},  {&_swigt__p_IFormFactorBorn, _p_IFormFactorBornTo_p_INode, 0, 0},  {&_swigt__p_Particle, _p_ParticleTo_p_INode, 0, 0},  {&_swigt__p_IParticle, _p_IParticleTo_p_INode, 0, 0},  {&_swigt__p_IAbstractParticle, _p_IAbstractParticleTo_p_INode, 0, 0},  {&_swigt__p_Lattice2D, _p_Lattice2DTo_p_INode, 0, 0},  {&_swigt__p_IFTDistribution1D, _p_IFTDistribution1DTo_p_INode, 0, 0},  {&_swigt__p_IFTDecayFunction1D, _p_IFTDecayFunction1DTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCosineRippleBox, _p_FormFactorCosineRippleBoxTo_p_INode, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleBox, _p_FormFactorSawtoothRippleBoxTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCone, _p_FormFactorConeTo_p_INode, 0, 0},  {&_swigt__p_InterferenceFunctionTwin, _p_InterferenceFunctionTwinTo_p_INode, 0, 0},  {&_swigt__p_Layer, _p_LayerTo_p_INode, 0, 0},  {&_swigt__p_FormFactorAnisoPyramid, _p_FormFactorAnisoPyramidTo_p_INode, 0, 0},  {&_swigt__p_FormFactorPyramid, _p_FormFactorPyramidTo_p_INode, 0, 0},  {&_swigt__p_FormFactorEllipsoidalCylinder, _p_FormFactorEllipsoidalCylinderTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCylinder, _p_FormFactorCylinderTo_p_INode, 0, 0},  {&_swigt__p_ParticleComposition, _p_ParticleCompositionTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution1DCosine, _p_FTDistribution1DCosineTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution1DGate, _p_FTDistribution1DGateTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCosineRippleGauss, _p_FormFactorCosineRippleGaussTo_p_INode, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleGauss, _p_FormFactorSawtoothRippleGaussTo_p_INode, 0, 0},  {&_swigt__p_FTDecayFunction2DVoigt, _p_FTDecayFunction2DVoigtTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution2DVoigt, _p_FTDistribution2DVoigtTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution1DCauchy, _p_FTDistribution1DCauchyTo_p_INode, 0, 0},  {&_swigt__p_FTDecayFunction1DCauchy, _p_FTDecayFunction1DCauchyTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution2DCauchy, _p_FTDistribution2DCauchyTo_p_INode, 0, 0},  {&_swigt__p_FTDecayFunction2DCauchy, _p_FTDecayFunction2DCauchyTo_p_INode, 0, 0},  {&_swigt__p_IInterferenceFunction, _p_IInterferenceFunctionTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCone6, _p_FormFactorCone6To_p_INode, 0, 0},  {&_swigt__p_IFormFactorDecorator, _p_IFormFactorDecoratorTo_p_INode, 0, 0},  {&_swigt__p_FormFactorDot, _p_FormFactorDotTo_p_INode, 0, 0},  {&_swigt__p_LayerRoughness, _p_LayerRoughnessTo_p_INode, 0, 0},  {&_swigt__p_MesoCrystal, _p_MesoCrystalTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCrystal, _p_FormFactorCrystalTo_p_INode, 0, 0},  {&_swigt__p_ICosineRipple, _p_ICosineRippleTo_p_INode, 0, 0},  {&_swigt__p_IProfileRipple, _p_IProfileRippleTo_p_INode, 0, 0},  {&_swigt__p_InterferenceFunction2DParaCrystal, _p_InterferenceFunction2DParaCrystalTo_p_INode, 0, 0},  {&_swigt__p_InterferenceFunctionRadialParaCrystal, _p_InterferenceFunctionRadialParaCrystalTo_p_INode, 0, 0},  {&_swigt__p_Crystal, _p_CrystalTo_p_INode, 0, 0},  {&_swigt__p_Lattice3D, _p_Lattice3DTo_p_INode, 0, 0},  {&_swigt__p_FormFactorHollowSphere, _p_FormFactorHollowSphereTo_p_INode, 0, 0},  {&_swigt__p_FormFactorGaussSphere, _p_FormFactorGaussSphereTo_p_INode, 0, 0},  {&_swigt__p_IFTDistribution2D, _p_IFTDistribution2DTo_p_INode, 0, 0},  {&_swigt__p_IFTDecayFunction2D, _p_IFTDecayFunction2DTo_p_INode, 0, 0},  {&_swigt__p_FormFactorWeighted, _p_FormFactorWeightedTo_p_INode, 0, 0},  {&_swigt__p_FormFactorLongBoxLorentz, _p_FormFactorLongBoxLorentzTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCosineRippleLorentz, _p_FormFactorCosineRippleLorentzTo_p_INode, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleLorentz, _p_FormFactorSawtoothRippleLorentzTo_p_INode, 0, 0},  {&_swigt__p_InterferenceFunction3DLattice, _p_InterferenceFunction3DLatticeTo_p_INode, 0, 0},  {&_swigt__p_InterferenceFunction2DSuperLattice, _p_InterferenceFunction2DSuperLatticeTo_p_INode, 0, 0},  {&_swigt__p_InterferenceFunction2DLattice, _p_InterferenceFunction2DLatticeTo_p_INode, 0, 0},  {&_swigt__p_InterferenceFunction1DLattice, _p_InterferenceFunction1DLatticeTo_p_INode, 0, 0},  {&_swigt__p_InterferenceFunctionFinite2DLattice, _p_InterferenceFunctionFinite2DLatticeTo_p_INode, 0, 0},  {&_swigt__p_InterferenceFunctionFinite3DLattice, _p_InterferenceFunctionFinite3DLatticeTo_p_INode, 0, 0},  {&_swigt__p_BasicLattice, _p_BasicLatticeTo_p_INode, 0, 0},  {&_swigt__p_SquareLattice, _p_SquareLatticeTo_p_INode, 0, 0},  {&_swigt__p_HexagonalLattice, _p_HexagonalLatticeTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution1DTriangle, _p_FTDistribution1DTriangleTo_p_INode, 0, 0},  {&_swigt__p_FTDecayFunction1DTriangle, _p_FTDecayFunction1DTriangleTo_p_INode, 0, 0},  {&_swigt__p_RotationEuler, _p_RotationEulerTo_p_INode, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_INode[] = {  {&_swigt__p_FormFactorBox, _p_FormFactorBoxTo_p_INode, 0, 0},  {&_swigt__p_FormFactorSphereGaussianRadius, _p_FormFactorSphereGaussianRadiusTo_p_INode, 0, 0},  {&_swigt__p_FormFactorSphereLogNormalRadius, _p_FormFactorSphereLogNormalRadiusTo_p_INode, 0, 0},  {&_swigt__p_MultiLayer, _p_MultiLayerTo_p_INode, 0, 0},  {&_swigt__p_ParticleDistribution, _p_ParticleDistributionTo_p_INode, 0, 0},  {&_swigt__p_FTDecayFunction1DGauss, _p_FTDecayFunction1DGaussTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution1DGauss, _p_FTDistribution1DGaussTo_p_INode, 0, 0},  {&_swigt__p_InterferenceFunctionNone, _p_InterferenceFunctionNoneTo_p_INode, 0, 0},  {&_swigt__p_ParticleLayout, _p_ParticleLayoutTo_p_INode, 0, 0},  {&_swigt__p_FormFactorHemiEllipsoid, _p_FormFactorHemiEllipsoidTo_p_INode, 0, 0},  {&_swigt__p_INode, 0, 0, 0},  {&_swigt__p_MisesGaussPeakShape, _p_MisesGaussPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_MisesFisherGaussPeakShape, _p_MisesFisherGaussPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_LorentzFisherPeakShape, _p_LorentzFisherPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_GaussFisherPeakShape, _p_GaussFisherPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_IsotropicLorentzPeakShape, _p_IsotropicLorentzPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_IsotropicGaussPeakShape, _p_IsotropicGaussPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_IPeakShape, _p_IPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_FormFactorPrism3, _p_FormFactorPrism3To_p_INode, 0, 0},  {&_swigt__p_IFormFactorPolyhedron, _p_IFormFactorPolyhedronTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCuboctahedron, _p_FormFactorCuboctahedronTo_p_INode, 0, 0},  {&_swigt__p_FormFactorDodecahedron, _p_FormFactorDodecahedronTo_p_INode, 0, 0},  {&_swigt__p_FormFactorIcosahedron, _p_FormFactorIcosahedronTo_p_INode, 0, 0},  {&_swigt__p_FormFactorTetrahedron, _p_FormFactorTetrahedronTo_p_INode, 0, 0},  {&_swigt__p_IFormFactorPrism, _p_IFormFactorPrismTo_p_INode, 0, 0},  {&_swigt__p_FormFactorPrism6, _p_FormFactorPrism6To_p_INode, 0, 0},  {&_swigt__p_FTDistribution2DCone, _p_FTDistribution2DConeTo_p_INode, 0, 0},  {&_swigt__p_ParticleCoreShell, _p_ParticleCoreShellTo_p_INode, 0, 0},  {&_swigt__p_IProfileRectangularRipple, _p_IProfileRectangularRippleTo_p_INode, 0, 0},  {&_swigt__p_ISawtoothRipple, _p_ISawtoothRippleTo_p_INode, 0, 0},  {&_swigt__p_FormFactorTruncatedSphere, _p_FormFactorTruncatedSphereTo_p_INode, 0, 0},  {&_swigt__p_FormFactorFullSphere, _p_FormFactorFullSphereTo_p_INode, 0, 0},  {&_swigt__p_IFormFactor, _p_IFormFactorTo_p_INode, 0, 0},  {&_swigt__p_ISample, _p_ISampleTo_p_INode, 0, 0},  {&_swigt__p_FormFactorLongBoxGauss, _p_FormFactorLongBoxGaussTo_p_INode, 0, 0},  {&_swigt__p_InterferenceFunctionHardDisk, _p_InterferenceFunctionHardDiskTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution2DGate, _p_FTDistribution2DGateTo_p_INode, 0, 0},  {&_swigt__p_FTDecayFunction1DVoigt, _p_FTDecayFunction1DVoigtTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution1DVoigt, _p_FTDistribution1DVoigtTo_p_INode, 0, 0},  {&_swigt__p_IRotation, _p_IRotationTo_p_INode, 0, 0},  {&_swigt__p_IdentityRotation, _p_IdentityRotationTo_p_INode, 0, 0},  {&_swigt__p_FormFactorTruncatedSpheroid, _p_FormFactorTruncatedSpheroidTo_p_INode, 0, 0},  {&_swigt__p_FormFactorFullSpheroid, _p_FormFactorFullSpheroidTo_p_INode, 0, 0},  {&_swigt__p_RotationX, _p_RotationXTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCantellatedCube, _p_FormFactorCantellatedCubeTo_p_INode, 0, 0},  {&_swigt__p_FormFactorTruncatedCube, _p_FormFactorTruncatedCubeTo_p_INode, 0, 0},  {&_swigt__p_RotationY, _p_RotationYTo_p_INode, 0, 0},  {&_swigt__p_FTDecayFunction2DGauss, _p_FTDecayFunction2DGaussTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution2DGauss, _p_FTDistribution2DGaussTo_p_INode, 0, 0},  {&_swigt__p_RotationZ, _p_RotationZTo_p_INode, 0, 0},  {&_swigt__p_IFormFactorBorn, _p_IFormFactorBornTo_p_INode, 0, 0},  {&_swigt__p_Particle, _p_ParticleTo_p_INode, 0, 0},  {&_swigt__p_IParticle, _p_IParticleTo_p_INode, 0, 0},  {&_swigt__p_IAbstractParticle, _p_IAbstractParticleTo_p_INode, 0, 0},  {&_swigt__p_HexagonalLattice2D, _p_HexagonalLattice2DTo_p_INode, 0, 0},  {&_swigt__p_SquareLattice2D, _p_SquareLattice2DTo_p_INode, 0, 0},  {&_swigt__p_BasicLattice2D, _p_BasicLattice2DTo_p_INode, 0, 0},  {&_swigt__p_Lattice2D, _p_Lattice2DTo_p_INode, 0, 0},  {&_swigt__p_IFTDistribution1D, _p_IFTDistribution1DTo_p_INode, 0, 0},  {&_swigt__p_IFTDecayFunction1D, _p_IFTDecayFunction1DTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCosineRippleBox, _p_FormFactorCosineRippleBoxTo_p_INode, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleBox, _p_FormFactorSawtoothRippleBoxTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCone, _p_FormFactorConeTo_p_INode, 0, 0},  {&_swigt__p_InterferenceFunctionTwin, _p_InterferenceFunctionTwinTo_p_INode, 0, 0},  {&_swigt__p_Layer, _p_LayerTo_p_INode, 0, 0},  {&_swigt__p_FormFactorAnisoPyramid, _p_FormFactorAnisoPyramidTo_p_INode, 0, 0},  {&_swigt__p_FormFactorPyramid, _p_FormFactorPyramidTo_p_INode, 0, 0},  {&_swigt__p_FormFactorEllipsoidalCylinder, _p_FormFactorEllipsoidalCylinderTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCylinder, _p_FormFactorCylinderTo_p_INode, 0, 0},  {&_swigt__p_ParticleComposition, _p_ParticleCompositionTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution1DCosine, _p_FTDistribution1DCosineTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution1DGate, _p_FTDistribution1DGateTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCosineRippleGauss, _p_FormFactorCosineRippleGaussTo_p_INode, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleGauss, _p_FormFactorSawtoothRippleGaussTo_p_INode, 0, 0},  {&_swigt__p_FTDecayFunction2DVoigt, _p_FTDecayFunction2DVoigtTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution2DVoigt, _p_FTDistribution2DVoigtTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution1DCauchy, _p_FTDistribution1DCauchyTo_p_INode, 0, 0},  {&_swigt__p_FTDecayFunction1DCauchy, _p_FTDecayFunction1DCauchyTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution2DCauchy, _p_FTDistribution2DCauchyTo_p_INode, 0, 0},  {&_swigt__p_FTDecayFunction2DCauchy, _p_FTDecayFunction2DCauchyTo_p_INode, 0, 0},  {&_swigt__p_IInterferenceFunction, _p_IInterferenceFunctionTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCone6, _p_FormFactorCone6To_p_INode, 0, 0},  {&_swigt__p_IFormFactorDecorator, _p_IFormFactorDecoratorTo_p_INode, 0, 0},  {&_swigt__p_FormFactorDot, _p_FormFactorDotTo_p_INode, 0, 0},  {&_swigt__p_LayerRoughness, _p_LayerRoughnessTo_p_INode, 0, 0},  {&_swigt__p_MesoCrystal, _p_MesoCrystalTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCrystal, _p_FormFactorCrystalTo_p_INode, 0, 0},  {&_swigt__p_ICosineRipple, _p_ICosineRippleTo_p_INode, 0, 0},  {&_swigt__p_IProfileRipple, _p_IProfileRippleTo_p_INode, 0, 0},  {&_swigt__p_InterferenceFunction2DParaCrystal, _p_InterferenceFunction2DParaCrystalTo_p_INode, 0, 0},  {&_swigt__p_InterferenceFunctionRadialParaCrystal, _p_InterferenceFunctionRadialParaCrystalTo_p_INode, 0, 0},  {&_swigt__p_Crystal, _p_CrystalTo_p_INode, 0, 0},  {&_swigt__p_Lattice3D, _p_Lattice3DTo_p_INode, 0, 0},  {&_swigt__p_FormFactorHollowSphere, _p_FormFactorHollowSphereTo_p_INode, 0, 0},  {&_swigt__p_FormFactorGaussSphere, _p_FormFactorGaussSphereTo_p_INode, 0, 0},  {&_swigt__p_IFTDistribution2D, _p_IFTDistribution2DTo_p_INode, 0, 0},  {&_swigt__p_IFTDecayFunction2D, _p_IFTDecayFunction2DTo_p_INode, 0, 0},  {&_swigt__p_FormFactorWeighted, _p_FormFactorWeightedTo_p_INode, 0, 0},  {&_swigt__p_FormFactorLongBoxLorentz, _p_FormFactorLongBoxLorentzTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCosineRippleLorentz, _p_FormFactorCosineRippleLorentzTo_p_INode, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleLorentz, _p_FormFactorSawtoothRippleLorentzTo_p_INode, 0, 0},  {&_swigt__p_InterferenceFunction3DLattice, _p_InterferenceFunction3DLatticeTo_p_INode, 0, 0},  {&_swigt__p_InterferenceFunction2DSuperLattice, _p_InterferenceFunction2DSuperLatticeTo_p_INode, 0, 0},  {&_swigt__p_InterferenceFunction2DLattice, _p_InterferenceFunction2DLatticeTo_p_INode, 0, 0},  {&_swigt__p_InterferenceFunction1DLattice, _p_InterferenceFunction1DLatticeTo_p_INode, 0, 0},  {&_swigt__p_InterferenceFunctionFinite2DLattice, _p_InterferenceFunctionFinite2DLatticeTo_p_INode, 0, 0},  {&_swigt__p_InterferenceFunctionFinite3DLattice, _p_InterferenceFunctionFinite3DLatticeTo_p_INode, 0, 0},  {&_swigt__p_FTDistribution1DTriangle, _p_FTDistribution1DTriangleTo_p_INode, 0, 0},  {&_swigt__p_FTDecayFunction1DTriangle, _p_FTDecayFunction1DTriangleTo_p_INode, 0, 0},  {&_swigt__p_RotationEuler, _p_RotationEulerTo_p_INode, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_INodeVisitor[] = {  {&_swigt__p_INodeVisitor, 0, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_IParameterized[] = {  {&_swigt__p_FormFactorBox, _p_FormFactorBoxTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorSphereGaussianRadius, _p_FormFactorSphereGaussianRadiusTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorSphereLogNormalRadius, _p_FormFactorSphereLogNormalRadiusTo_p_IParameterized, 0, 0},  {&_swigt__p_MultiLayer, _p_MultiLayerTo_p_IParameterized, 0, 0},  {&_swigt__p_ParameterDistribution, _p_ParameterDistributionTo_p_IParameterized, 0, 0},  {&_swigt__p_ParticleDistribution, _p_ParticleDistributionTo_p_IParameterized, 0, 0},  {&_swigt__p_FTDecayFunction1DGauss, _p_FTDecayFunction1DGaussTo_p_IParameterized, 0, 0},  {&_swigt__p_FTDistribution1DGauss, _p_FTDistribution1DGaussTo_p_IParameterized, 0, 0},  {&_swigt__p_InterferenceFunctionNone, _p_InterferenceFunctionNoneTo_p_IParameterized, 0, 0},  {&_swigt__p_ParticleLayout, _p_ParticleLayoutTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorHemiEllipsoid, _p_FormFactorHemiEllipsoidTo_p_IParameterized, 0, 0},  {&_swigt__p_INode, _p_INodeTo_p_IParameterized, 0, 0},  {&_swigt__p_LorentzFisherPeakShape, _p_LorentzFisherPeakShapeTo_p_IParameterized, 0, 0},  {&_swigt__p_MisesFisherGaussPeakShape, _p_MisesFisherGaussPeakShapeTo_p_IParameterized, 0, 0},  {&_swigt__p_MisesGaussPeakShape, _p_MisesGaussPeakShapeTo_p_IParameterized, 0, 0},  {&_swigt__p_GaussFisherPeakShape, _p_GaussFisherPeakShapeTo_p_IParameterized, 0, 0},  {&_swigt__p_IsotropicLorentzPeakShape, _p_IsotropicLorentzPeakShapeTo_p_IParameterized, 0, 0},  {&_swigt__p_IsotropicGaussPeakShape, _p_IsotropicGaussPeakShapeTo_p_IParameterized, 0, 0},  {&_swigt__p_IPeakShape, _p_IPeakShapeTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorPrism3, _p_FormFactorPrism3To_p_IParameterized, 0, 0},  {&_swigt__p_IFormFactorPolyhedron, _p_IFormFactorPolyhedronTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorCuboctahedron, _p_FormFactorCuboctahedronTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorDodecahedron, _p_FormFactorDodecahedronTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorIcosahedron, _p_FormFactorIcosahedronTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorTetrahedron, _p_FormFactorTetrahedronTo_p_IParameterized, 0, 0},  {&_swigt__p_IFormFactorPrism, _p_IFormFactorPrismTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorPrism6, _p_FormFactorPrism6To_p_IParameterized, 0, 0},  {&_swigt__p_FTDistribution2DCone, _p_FTDistribution2DConeTo_p_IParameterized, 0, 0},  {&_swigt__p_ParticleCoreShell, _p_ParticleCoreShellTo_p_IParameterized, 0, 0},  {&_swigt__p_IProfileRectangularRipple, _p_IProfileRectangularRippleTo_p_IParameterized, 0, 0},  {&_swigt__p_ISawtoothRipple, _p_ISawtoothRippleTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorTruncatedSphere, _p_FormFactorTruncatedSphereTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorFullSphere, _p_FormFactorFullSphereTo_p_IParameterized, 0, 0},  {&_swigt__p_IFormFactor, _p_IFormFactorTo_p_IParameterized, 0, 0},  {&_swigt__p_ISample, _p_ISampleTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorLongBoxGauss, _p_FormFactorLongBoxGaussTo_p_IParameterized, 0, 0},  {&_swigt__p_InterferenceFunctionHardDisk, _p_InterferenceFunctionHardDiskTo_p_IParameterized, 0, 0},  {&_swigt__p_FTDistribution2DGate, _p_FTDistribution2DGateTo_p_IParameterized, 0, 0},  {&_swigt__p_FTDecayFunction1DVoigt, _p_FTDecayFunction1DVoigtTo_p_IParameterized, 0, 0},  {&_swigt__p_FTDistribution1DVoigt, _p_FTDistribution1DVoigtTo_p_IParameterized, 0, 0},  {&_swigt__p_IRotation, _p_IRotationTo_p_IParameterized, 0, 0},  {&_swigt__p_IdentityRotation, _p_IdentityRotationTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorTruncatedSpheroid, _p_FormFactorTruncatedSpheroidTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorFullSpheroid, _p_FormFactorFullSpheroidTo_p_IParameterized, 0, 0},  {&_swigt__p_RotationX, _p_RotationXTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorCantellatedCube, _p_FormFactorCantellatedCubeTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorTruncatedCube, _p_FormFactorTruncatedCubeTo_p_IParameterized, 0, 0},  {&_swigt__p_RotationY, _p_RotationYTo_p_IParameterized, 0, 0},  {&_swigt__p_FTDecayFunction2DGauss, _p_FTDecayFunction2DGaussTo_p_IParameterized, 0, 0},  {&_swigt__p_FTDistribution2DGauss, _p_FTDistribution2DGaussTo_p_IParameterized, 0, 0},  {&_swigt__p_RotationZ, _p_RotationZTo_p_IParameterized, 0, 0},  {&_swigt__p_IFormFactorBorn, _p_IFormFactorBornTo_p_IParameterized, 0, 0},  {&_swigt__p_ISampleBuilder, _p_ISampleBuilderTo_p_IParameterized, 0, 0},  {&_swigt__p_Particle, _p_ParticleTo_p_IParameterized, 0, 0},  {&_swigt__p_IParticle, _p_IParticleTo_p_IParameterized, 0, 0},  {&_swigt__p_IAbstractParticle, _p_IAbstractParticleTo_p_IParameterized, 0, 0},  {&_swigt__p_Lattice2D, _p_Lattice2DTo_p_IParameterized, 0, 0},  {&_swigt__p_IFTDistribution1D, _p_IFTDistribution1DTo_p_IParameterized, 0, 0},  {&_swigt__p_IFTDecayFunction1D, _p_IFTDecayFunction1DTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorCosineRippleBox, _p_FormFactorCosineRippleBoxTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleBox, _p_FormFactorSawtoothRippleBoxTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorCone, _p_FormFactorConeTo_p_IParameterized, 0, 0},  {&_swigt__p_InterferenceFunctionTwin, _p_InterferenceFunctionTwinTo_p_IParameterized, 0, 0},  {&_swigt__p_Layer, _p_LayerTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorAnisoPyramid, _p_FormFactorAnisoPyramidTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorPyramid, _p_FormFactorPyramidTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorEllipsoidalCylinder, _p_FormFactorEllipsoidalCylinderTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorCylinder, _p_FormFactorCylinderTo_p_IParameterized, 0, 0},  {&_swigt__p_ParticleComposition, _p_ParticleCompositionTo_p_IParameterized, 0, 0},  {&_swigt__p_FTDistribution1DCosine, _p_FTDistribution1DCosineTo_p_IParameterized, 0, 0},  {&_swigt__p_FTDistribution1DGate, _p_FTDistribution1DGateTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorCosineRippleGauss, _p_FormFactorCosineRippleGaussTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleGauss, _p_FormFactorSawtoothRippleGaussTo_p_IParameterized, 0, 0},  {&_swigt__p_FTDecayFunction2DVoigt, _p_FTDecayFunction2DVoigtTo_p_IParameterized, 0, 0},  {&_swigt__p_FTDistribution2DVoigt, _p_FTDistribution2DVoigtTo_p_IParameterized, 0, 0},  {&_swigt__p_FTDistribution1DCauchy, _p_FTDistribution1DCauchyTo_p_IParameterized, 0, 0},  {&_swigt__p_FTDecayFunction1DCauchy, _p_FTDecayFunction1DCauchyTo_p_IParameterized, 0, 0},  {&_swigt__p_FTDistribution2DCauchy, _p_FTDistribution2DCauchyTo_p_IParameterized, 0, 0},  {&_swigt__p_FTDecayFunction2DCauchy, _p_FTDecayFunction2DCauchyTo_p_IParameterized, 0, 0},  {&_swigt__p_IInterferenceFunction, _p_IInterferenceFunctionTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorCone6, _p_FormFactorCone6To_p_IParameterized, 0, 0},  {&_swigt__p_IFormFactorDecorator, _p_IFormFactorDecoratorTo_p_IParameterized, 0, 0},  {&_swigt__p_IParameterized, 0, 0, 0},  {&_swigt__p_FormFactorDot, _p_FormFactorDotTo_p_IParameterized, 0, 0},  {&_swigt__p_LayerRoughness, _p_LayerRoughnessTo_p_IParameterized, 0, 0},  {&_swigt__p_MesoCrystal, _p_MesoCrystalTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorCrystal, _p_FormFactorCrystalTo_p_IParameterized, 0, 0},  {&_swigt__p_ICosineRipple, _p_ICosineRippleTo_p_IParameterized, 0, 0},  {&_swigt__p_IProfileRipple, _p_IProfileRippleTo_p_IParameterized, 0, 0},  {&_swigt__p_InterferenceFunction2DParaCrystal, _p_InterferenceFunction2DParaCrystalTo_p_IParameterized, 0, 0},  {&_swigt__p_InterferenceFunctionRadialParaCrystal, _p_InterferenceFunctionRadialParaCrystalTo_p_IParameterized, 0, 0},  {&_swigt__p_Crystal, _p_CrystalTo_p_IParameterized, 0, 0},  {&_swigt__p_Lattice3D, _p_Lattice3DTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorHollowSphere, _p_FormFactorHollowSphereTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorGaussSphere, _p_FormFactorGaussSphereTo_p_IParameterized, 0, 0},  {&_swigt__p_IFTDistribution2D, _p_IFTDistribution2DTo_p_IParameterized, 0, 0},  {&_swigt__p_IFTDecayFunction2D, _p_IFTDecayFunction2DTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorWeighted, _p_FormFactorWeightedTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorLongBoxLorentz, _p_FormFactorLongBoxLorentzTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorCosineRippleLorentz, _p_FormFactorCosineRippleLorentzTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleLorentz, _p_FormFactorSawtoothRippleLorentzTo_p_IParameterized, 0, 0},  {&_swigt__p_InterferenceFunction2DLattice, _p_InterferenceFunction2DLatticeTo_p_IParameterized, 0, 0},  {&_swigt__p_InterferenceFunction1DLattice, _p_InterferenceFunction1DLatticeTo_p_IParameterized, 0, 0},  {&_swigt__p_InterferenceFunction2DSuperLattice, _p_InterferenceFunction2DSuperLatticeTo_p_IParameterized, 0, 0},  {&_swigt__p_InterferenceFunction3DLattice, _p_InterferenceFunction3DLatticeTo_p_IParameterized, 0, 0},  {&_swigt__p_InterferenceFunctionFinite2DLattice, _p_InterferenceFunctionFinite2DLatticeTo_p_IParameterized, 0, 0},  {&_swigt__p_InterferenceFunctionFinite3DLattice, _p_InterferenceFunctionFinite3DLatticeTo_p_IParameterized, 0, 0},  {&_swigt__p_BasicLattice, _p_BasicLatticeTo_p_IParameterized, 0, 0},  {&_swigt__p_SquareLattice, _p_SquareLatticeTo_p_IParameterized, 0, 0},  {&_swigt__p_HexagonalLattice, _p_HexagonalLatticeTo_p_IParameterized, 0, 0},  {&_swigt__p_FTDistribution1DTriangle, _p_FTDistribution1DTriangleTo_p_IParameterized, 0, 0},  {&_swigt__p_FTDecayFunction1DTriangle, _p_FTDecayFunction1DTriangleTo_p_IParameterized, 0, 0},  {&_swigt__p_RotationEuler, _p_RotationEulerTo_p_IParameterized, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_IParameterized[] = {  {&_swigt__p_FormFactorBox, _p_FormFactorBoxTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorSphereGaussianRadius, _p_FormFactorSphereGaussianRadiusTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorSphereLogNormalRadius, _p_FormFactorSphereLogNormalRadiusTo_p_IParameterized, 0, 0},  {&_swigt__p_MultiLayer, _p_MultiLayerTo_p_IParameterized, 0, 0},  {&_swigt__p_ParameterDistribution, _p_ParameterDistributionTo_p_IParameterized, 0, 0},  {&_swigt__p_ParticleDistribution, _p_ParticleDistributionTo_p_IParameterized, 0, 0},  {&_swigt__p_FTDecayFunction1DGauss, _p_FTDecayFunction1DGaussTo_p_IParameterized, 0, 0},  {&_swigt__p_FTDistribution1DGauss, _p_FTDistribution1DGaussTo_p_IParameterized, 0, 0},  {&_swigt__p_InterferenceFunctionNone, _p_InterferenceFunctionNoneTo_p_IParameterized, 0, 0},  {&_swigt__p_ParticleLayout, _p_ParticleLayoutTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorHemiEllipsoid, _p_FormFactorHemiEllipsoidTo_p_IParameterized, 0, 0},  {&_swigt__p_INode, _p_INodeTo_p_IParameterized, 0, 0},  {&_swigt__p_LorentzFisherPeakShape, _p_LorentzFisherPeakShapeTo_p_IParameterized, 0, 0},  {&_swigt__p_MisesFisherGaussPeakShape, _p_MisesFisherGaussPeakShapeTo_p_IParameterized, 0, 0},  {&_swigt__p_MisesGaussPeakShape, _p_MisesGaussPeakShapeTo_p_IParameterized, 0, 0},  {&_swigt__p_GaussFisherPeakShape, _p_GaussFisherPeakShapeTo_p_IParameterized, 0, 0},  {&_swigt__p_IsotropicLorentzPeakShape, _p_IsotropicLorentzPeakShapeTo_p_IParameterized, 0, 0},  {&_swigt__p_IsotropicGaussPeakShape, _p_IsotropicGaussPeakShapeTo_p_IParameterized, 0, 0},  {&_swigt__p_IPeakShape, _p_IPeakShapeTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorPrism3, _p_FormFactorPrism3To_p_IParameterized, 0, 0},  {&_swigt__p_IFormFactorPolyhedron, _p_IFormFactorPolyhedronTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorCuboctahedron, _p_FormFactorCuboctahedronTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorDodecahedron, _p_FormFactorDodecahedronTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorIcosahedron, _p_FormFactorIcosahedronTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorTetrahedron, _p_FormFactorTetrahedronTo_p_IParameterized, 0, 0},  {&_swigt__p_IFormFactorPrism, _p_IFormFactorPrismTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorPrism6, _p_FormFactorPrism6To_p_IParameterized, 0, 0},  {&_swigt__p_FTDistribution2DCone, _p_FTDistribution2DConeTo_p_IParameterized, 0, 0},  {&_swigt__p_ParticleCoreShell, _p_ParticleCoreShellTo_p_IParameterized, 0, 0},  {&_swigt__p_IProfileRectangularRipple, _p_IProfileRectangularRippleTo_p_IParameterized, 0, 0},  {&_swigt__p_ISawtoothRipple, _p_ISawtoothRippleTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorTruncatedSphere, _p_FormFactorTruncatedSphereTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorFullSphere, _p_FormFactorFullSphereTo_p_IParameterized, 0, 0},  {&_swigt__p_IFormFactor, _p_IFormFactorTo_p_IParameterized, 0, 0},  {&_swigt__p_ISample, _p_ISampleTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorLongBoxGauss, _p_FormFactorLongBoxGaussTo_p_IParameterized, 0, 0},  {&_swigt__p_InterferenceFunctionHardDisk, _p_InterferenceFunctionHardDiskTo_p_IParameterized, 0, 0},  {&_swigt__p_FTDistribution2DGate, _p_FTDistribution2DGateTo_p_IParameterized, 0, 0},  {&_swigt__p_FTDecayFunction1DVoigt, _p_FTDecayFunction1DVoigtTo_p_IParameterized, 0, 0},  {&_swigt__p_FTDistribution1DVoigt, _p_FTDistribution1DVoigtTo_p_IParameterized, 0, 0},  {&_swigt__p_IRotation, _p_IRotationTo_p_IParameterized, 0, 0},  {&_swigt__p_IdentityRotation, _p_IdentityRotationTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorTruncatedSpheroid, _p_FormFactorTruncatedSpheroidTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorFullSpheroid, _p_FormFactorFullSpheroidTo_p_IParameterized, 0, 0},  {&_swigt__p_RotationX, _p_RotationXTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorCantellatedCube, _p_FormFactorCantellatedCubeTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorTruncatedCube, _p_FormFactorTruncatedCubeTo_p_IParameterized, 0, 0},  {&_swigt__p_RotationY, _p_RotationYTo_p_IParameterized, 0, 0},  {&_swigt__p_FTDecayFunction2DGauss, _p_FTDecayFunction2DGaussTo_p_IParameterized, 0, 0},  {&_swigt__p_FTDistribution2DGauss, _p_FTDistribution2DGaussTo_p_IParameterized, 0, 0},  {&_swigt__p_RotationZ, _p_RotationZTo_p_IParameterized, 0, 0},  {&_swigt__p_IFormFactorBorn, _p_IFormFactorBornTo_p_IParameterized, 0, 0},  {&_swigt__p_ISampleBuilder, _p_ISampleBuilderTo_p_IParameterized, 0, 0},  {&_swigt__p_Particle, _p_ParticleTo_p_IParameterized, 0, 0},  {&_swigt__p_IParticle, _p_IParticleTo_p_IParameterized, 0, 0},  {&_swigt__p_IAbstractParticle, _p_IAbstractParticleTo_p_IParameterized, 0, 0},  {&_swigt__p_HexagonalLattice2D, _p_HexagonalLattice2DTo_p_IParameterized, 0, 0},  {&_swigt__p_SquareLattice2D, _p_SquareLattice2DTo_p_IParameterized, 0, 0},  {&_swigt__p_BasicLattice2D, _p_BasicLattice2DTo_p_IParameterized, 0, 0},  {&_swigt__p_Lattice2D, _p_Lattice2DTo_p_IParameterized, 0, 0},  {&_swigt__p_IFTDistribution1D, _p_IFTDistribution1DTo_p_IParameterized, 0, 0},  {&_swigt__p_IFTDecayFunction1D, _p_IFTDecayFunction1DTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorCosineRippleBox, _p_FormFactorCosineRippleBoxTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleBox, _p_FormFactorSawtoothRippleBoxTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorCone, _p_FormFactorConeTo_p_IParameterized, 0, 0},  {&_swigt__p_InterferenceFunctionTwin, _p_InterferenceFunctionTwinTo_p_IParameterized, 0, 0},  {&_swigt__p_Layer, _p_LayerTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorAnisoPyramid, _p_FormFactorAnisoPyramidTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorPyramid, _p_FormFactorPyramidTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorEllipsoidalCylinder, _p_FormFactorEllipsoidalCylinderTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorCylinder, _p_FormFactorCylinderTo_p_IParameterized, 0, 0},  {&_swigt__p_ParticleComposition, _p_ParticleCompositionTo_p_IParameterized, 0, 0},  {&_swigt__p_FTDistribution1DCosine, _p_FTDistribution1DCosineTo_p_IParameterized, 0, 0},  {&_swigt__p_FTDistribution1DGate, _p_FTDistribution1DGateTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorCosineRippleGauss, _p_FormFactorCosineRippleGaussTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleGauss, _p_FormFactorSawtoothRippleGaussTo_p_IParameterized, 0, 0},  {&_swigt__p_FTDecayFunction2DVoigt, _p_FTDecayFunction2DVoigtTo_p_IParameterized, 0, 0},  {&_swigt__p_FTDistribution2DVoigt, _p_FTDistribution2DVoigtTo_p_IParameterized, 0, 0},  {&_swigt__p_FTDistribution1DCauchy, _p_FTDistribution1DCauchyTo_p_IParameterized, 0, 0},  {&_swigt__p_FTDecayFunction1DCauchy, _p_FTDecayFunction1DCauchyTo_p_IParameterized, 0, 0},  {&_swigt__p_FTDistribution2DCauchy, _p_FTDistribution2DCauchyTo_p_IParameterized, 0, 0},  {&_swigt__p_FTDecayFunction2DCauchy, _p_FTDecayFunction2DCauchyTo_p_IParameterized, 0, 0},  {&_swigt__p_IInterferenceFunction, _p_IInterferenceFunctionTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorCone6, _p_FormFactorCone6To_p_IParameterized, 0, 0},  {&_swigt__p_IFormFactorDecorator, _p_IFormFactorDecoratorTo_p_IParameterized, 0, 0},  {&_swigt__p_IParameterized, 0, 0, 0},  {&_swigt__p_FormFactorDot, _p_FormFactorDotTo_p_IParameterized, 0, 0},  {&_swigt__p_LayerRoughness, _p_LayerRoughnessTo_p_IParameterized, 0, 0},  {&_swigt__p_MesoCrystal, _p_MesoCrystalTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorCrystal, _p_FormFactorCrystalTo_p_IParameterized, 0, 0},  {&_swigt__p_ICosineRipple, _p_ICosineRippleTo_p_IParameterized, 0, 0},  {&_swigt__p_IProfileRipple, _p_IProfileRippleTo_p_IParameterized, 0, 0},  {&_swigt__p_InterferenceFunction2DParaCrystal, _p_InterferenceFunction2DParaCrystalTo_p_IParameterized, 0, 0},  {&_swigt__p_InterferenceFunctionRadialParaCrystal, _p_InterferenceFunctionRadialParaCrystalTo_p_IParameterized, 0, 0},  {&_swigt__p_Crystal, _p_CrystalTo_p_IParameterized, 0, 0},  {&_swigt__p_Lattice3D, _p_Lattice3DTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorHollowSphere, _p_FormFactorHollowSphereTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorGaussSphere, _p_FormFactorGaussSphereTo_p_IParameterized, 0, 0},  {&_swigt__p_IFTDistribution2D, _p_IFTDistribution2DTo_p_IParameterized, 0, 0},  {&_swigt__p_IFTDecayFunction2D, _p_IFTDecayFunction2DTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorWeighted, _p_FormFactorWeightedTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorLongBoxLorentz, _p_FormFactorLongBoxLorentzTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorCosineRippleLorentz, _p_FormFactorCosineRippleLorentzTo_p_IParameterized, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleLorentz, _p_FormFactorSawtoothRippleLorentzTo_p_IParameterized, 0, 0},  {&_swigt__p_InterferenceFunction2DLattice, _p_InterferenceFunction2DLatticeTo_p_IParameterized, 0, 0},  {&_swigt__p_InterferenceFunction1DLattice, _p_InterferenceFunction1DLatticeTo_p_IParameterized, 0, 0},  {&_swigt__p_InterferenceFunction2DSuperLattice, _p_InterferenceFunction2DSuperLatticeTo_p_IParameterized, 0, 0},  {&_swigt__p_InterferenceFunction3DLattice, _p_InterferenceFunction3DLatticeTo_p_IParameterized, 0, 0},  {&_swigt__p_InterferenceFunctionFinite2DLattice, _p_InterferenceFunctionFinite2DLatticeTo_p_IParameterized, 0, 0},  {&_swigt__p_InterferenceFunctionFinite3DLattice, _p_InterferenceFunctionFinite3DLatticeTo_p_IParameterized, 0, 0},  {&_swigt__p_FTDistribution1DTriangle, _p_FTDistribution1DTriangleTo_p_IParameterized, 0, 0},  {&_swigt__p_FTDecayFunction1DTriangle, _p_FTDecayFunction1DTriangleTo_p_IParameterized, 0, 0},  {&_swigt__p_RotationEuler, _p_RotationEulerTo_p_IParameterized, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IParticle[] = {  {&_swigt__p_ParticleComposition, _p_ParticleCompositionTo_p_IParticle, 0, 0},  {&_swigt__p_MesoCrystal, _p_MesoCrystalTo_p_IParticle, 0, 0},  {&_swigt__p_IParticle, 0, 0, 0},  {&_swigt__p_Particle, _p_ParticleTo_p_IParticle, 0, 0},  {&_swigt__p_ParticleCoreShell, _p_ParticleCoreShellTo_p_IParticle, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IPeakShape[] = {  {&_swigt__p_IPeakShape, 0, 0, 0},  {&_swigt__p_IsotropicGaussPeakShape, _p_IsotropicGaussPeakShapeTo_p_IPeakShape, 0, 0},  {&_swigt__p_IsotropicLorentzPeakShape, _p_IsotropicLorentzPeakShapeTo_p_IPeakShape, 0, 0},  {&_swigt__p_GaussFisherPeakShape, _p_GaussFisherPeakShapeTo_p_IPeakShape, 0, 0},  {&_swigt__p_LorentzFisherPeakShape, _p_LorentzFisherPeakShapeTo_p_IPeakShape, 0, 0},  {&_swigt__p_MisesFisherGaussPeakShape, _p_MisesFisherGaussPeakShapeTo_p_IPeakShape, 0, 0},  {&_swigt__p_MisesGaussPeakShape, _p_MisesGaussPeakShapeTo_p_IPeakShape, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IProfileRectangularRipple[] = {  {&_swigt__p_IProfileRectangularRipple, 0, 0, 0},{0, 0, 0, 0}};
@@ -77584,7 +77584,7 @@ static swig_cast_info _swigc__p_InterferenceFunctionRadialParaCrystal[] = {  {&_
 static swig_cast_info _swigc__p_InterferenceFunctionTwin[] = {  {&_swigt__p_InterferenceFunctionTwin, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IsotropicGaussPeakShape[] = {  {&_swigt__p_IsotropicGaussPeakShape, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IsotropicLorentzPeakShape[] = {  {&_swigt__p_IsotropicLorentzPeakShape, 0, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_Lattice2D[] = {  {&_swigt__p_Lattice2D, 0, 0, 0},  {&_swigt__p_BasicLattice, _p_BasicLatticeTo_p_Lattice2D, 0, 0},  {&_swigt__p_SquareLattice, _p_SquareLatticeTo_p_Lattice2D, 0, 0},  {&_swigt__p_HexagonalLattice, _p_HexagonalLatticeTo_p_Lattice2D, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Lattice2D[] = {  {&_swigt__p_Lattice2D, 0, 0, 0},  {&_swigt__p_BasicLattice2D, _p_BasicLattice2DTo_p_Lattice2D, 0, 0},  {&_swigt__p_SquareLattice2D, _p_SquareLattice2DTo_p_Lattice2D, 0, 0},  {&_swigt__p_HexagonalLattice2D, _p_HexagonalLattice2DTo_p_Lattice2D, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_Lattice2D__ReciprocalBases[] = {  {&_swigt__p_Lattice2D__ReciprocalBases, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_Lattice3D[] = {  {&_swigt__p_Lattice3D, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_Layer[] = {  {&_swigt__p_Layer, 0, 0, 0},{0, 0, 0, 0}};
@@ -77618,7 +77618,7 @@ static swig_cast_info _swigc__p_SimpleSelectionRule[] = {  {&_swigt__p_SimpleSel
 static swig_cast_info _swigc__p_SimulationOptions[] = {  {&_swigt__p_SimulationOptions, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_SlicedParticle[] = {  {&_swigt__p_SlicedParticle, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_SlicingEffects[] = {  {&_swigt__p_SlicingEffects, 0, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_SquareLattice[] = {  {&_swigt__p_SquareLattice, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_SquareLattice2D[] = {  {&_swigt__p_SquareLattice2D, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_ThreadInfo[] = {  {&_swigt__p_ThreadInfo, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_Transform3D[] = {  {&_swigt__p_Transform3D, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_WavevectorInfo[] = {  {&_swigt__p_WavevectorInfo, 0, 0, 0},{0, 0, 0, 0}};
@@ -77681,7 +77681,7 @@ static swig_cast_info _swigc__p_unsigned_short[] = {  {&_swigt__p_unsigned_short
 static swig_cast_info _swigc__p_value_type[] = {  {&_swigt__p_value_type, 0, 0, 0},{0, 0, 0, 0}};
 
 static swig_cast_info *swig_cast_initial[] = {
-  _swigc__p_BasicLattice,
+  _swigc__p_BasicLattice2D,
   _swigc__p_BasicVector3DT_double_t,
   _swigc__p_BasicVector3DT_int_t,
   _swigc__p_BasicVector3DT_std__complexT_double_t_t,
@@ -77742,7 +77742,7 @@ static swig_cast_info *swig_cast_initial[] = {
   _swigc__p_FormFactorTruncatedSpheroid,
   _swigc__p_FormFactorWeighted,
   _swigc__p_GaussFisherPeakShape,
-  _swigc__p_HexagonalLattice,
+  _swigc__p_HexagonalLattice2D,
   _swigc__p_IAbstractParticle,
   _swigc__p_ICloneable,
   _swigc__p_ICosineRipple,
@@ -77817,7 +77817,7 @@ static swig_cast_info *swig_cast_initial[] = {
   _swigc__p_SimulationOptions,
   _swigc__p_SlicedParticle,
   _swigc__p_SlicingEffects,
-  _swigc__p_SquareLattice,
+  _swigc__p_SquareLattice2D,
   _swigc__p_ThreadInfo,
   _swigc__p_Transform3D,
   _swigc__p_WavevectorInfo,
-- 
GitLab