From a241661eed6cd38d0b8f073a3ef86bd97e0fcc4d Mon Sep 17 00:00:00 2001
From: "Joachim Wuttke (h)" <j.wuttke@fz-juelich.de>
Date: Sun, 15 Nov 2020 18:34:23 +0100
Subject: [PATCH] prefer explicit lattice c'tor in Py code

---
 .../Interference2DCenteredSquareLattice.py    |  2 +-
 .../Interference2DLatticeSumOfRotated.py      |  2 +-
 .../Interference2DSquareFiniteLattice.py      |  4 +-
 .../Interference2DSquareLattice.py            |  2 +-
 .../SpheresAtHexLattice.py                    |  3 +-
 .../MaterialProfileWithParticles.py           |  2 +-
 .../BoxesWithSpecularPeak.py                  |  2 +-
 .../CylindersInAverageLayer.py                |  2 +-
 .../HalfSpheresInAverageTopLayer.py           |  2 +-
 .../InterferenceFunctionFinite2DLattice.cpp   | 24 -----
 .../InterferenceFunctionFinite2DLattice.h     |  5 -
 auto/Wrap/doxygenSample.i                     |  2 +-
 auto/Wrap/libBornAgainSample.py               | 18 ----
 auto/Wrap/libBornAgainSample_wrap.cpp         | 94 -------------------
 14 files changed, 12 insertions(+), 152 deletions(-)

diff --git a/Examples/python/simulation/ex03_InterferenceFunctions/Interference2DCenteredSquareLattice.py b/Examples/python/simulation/ex03_InterferenceFunctions/Interference2DCenteredSquareLattice.py
index a5ac25677f0..ea4363117a2 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.createSquare(25.0*nm, 0)
+    interference = ba.InterferenceFunction2DLattice(ba.SquareLattice(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 2e987129e11..47942350d79 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.createSquare(25.0*nm, 0)
+        ba.InterferenceFunction2DLattice(ba.SquareLattice(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)
diff --git a/Examples/python/simulation/ex03_InterferenceFunctions/Interference2DSquareFiniteLattice.py b/Examples/python/simulation/ex03_InterferenceFunctions/Interference2DSquareFiniteLattice.py
index ad783998dc3..0319d13ca30 100644
--- a/Examples/python/simulation/ex03_InterferenceFunctions/Interference2DSquareFiniteLattice.py
+++ b/Examples/python/simulation/ex03_InterferenceFunctions/Interference2DSquareFiniteLattice.py
@@ -16,8 +16,8 @@ def get_sample():
     m_particle = ba.HomogeneousMaterial("Particle", 6e-4, 2e-8)
 
     # collection of particles
-    interference = ba.InterferenceFunctionFinite2DLattice.createSquare(
-        25.0*nm, 0.0, 40, 40)
+    interference = ba.InterferenceFunctionFinite2DLattice(
+        ba.SquareLattice(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 de7eb3b86dd..b4404934317 100644
--- a/Examples/python/simulation/ex03_InterferenceFunctions/Interference2DSquareLattice.py
+++ b/Examples/python/simulation/ex03_InterferenceFunctions/Interference2DSquareLattice.py
@@ -16,7 +16,7 @@ def get_sample():
     m_particle = ba.HomogeneousMaterial("Particle", 6e-4, 2e-8)
 
     # collection of particles
-    interference = ba.InterferenceFunction2DLattice.createSquare(25.0*nm, 0*deg)
+    interference = ba.InterferenceFunction2DLattice(ba.SquareLattice(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 3acb9d9be9a..5813247a2a4 100644
--- a/Examples/python/simulation/ex03_InterferenceFunctions/SpheresAtHexLattice.py
+++ b/Examples/python/simulation/ex03_InterferenceFunctions/SpheresAtHexLattice.py
@@ -19,7 +19,8 @@ def get_sample():
     particle_layout = ba.ParticleLayout()
     particle_layout.addParticle(sphere)
 
-    interference = ba.InterferenceFunction2DLattice.createHexagonal(20.0*nm, 0*deg)
+    interference = ba.InterferenceFunction2DLattice(
+        ba.HexagonalLattice(20.0*nm, 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 cb941cb2474..2fd471de834 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.createSquare(10 * nm, 0)
+    iff = ba.InterferenceFunction2DLattice(ba.SquareLattice(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 9f87fcc2ae2..aa060d9272e 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.createSquare(8*nm, 0*deg)
+    interference = ba.InterferenceFunction2DLattice(ba.SquareLattice(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 917a65dd866..96af9bfa209 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.createSquare(15*nm, 0*deg)
+    interference = ba.InterferenceFunction2DLattice(ba.SquareLattice(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 b486ffdd191..2ecf336360f 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.createSquare(10*nm, 0*deg)
+    interference = ba.InterferenceFunction2DLattice(ba.SquareLattice(10*nm, 0*deg))
     pdf = ba.FTDecayFunction2DCauchy(100*nm, 100*nm, 0)
     interference.setDecayFunction(pdf)
     particle_layout.setInterferenceFunction(interference)
diff --git a/Sample/Aggregate/InterferenceFunctionFinite2DLattice.cpp b/Sample/Aggregate/InterferenceFunctionFinite2DLattice.cpp
index ef2f13ab6be..817a5802e74 100644
--- a/Sample/Aggregate/InterferenceFunctionFinite2DLattice.cpp
+++ b/Sample/Aggregate/InterferenceFunctionFinite2DLattice.cpp
@@ -60,30 +60,6 @@ InterferenceFunctionFinite2DLattice* InterferenceFunctionFinite2DLattice::clone(
     return ret;
 }
 
-//! Creates square lattice.
-//! @param lattice_length: length of first and second lattice vectors in nanometers
-//! @param xi: rotation of lattice with respect to x-axis in radians
-//! @param N_1: number of lattice cells in the first lattice direction
-//! @param N_2: number of lattice cells in the second lattice direction
-InterferenceFunctionFinite2DLattice*
-InterferenceFunctionFinite2DLattice::createSquare(double lattice_length, double xi, unsigned N_1,
-                                                  unsigned N_2)
-{
-    return new InterferenceFunctionFinite2DLattice(SquareLattice(lattice_length, xi), N_1, N_2);
-}
-
-//! Creates hexagonal lattice.
-//! @param lattice_length: length of first and second lattice vectors in nanometers
-//! @param xi: rotation of lattice with respect to x-axis in radians
-//! @param N_1: number of lattice cells in the first lattice direction
-//! @param N_2: number of lattice cells in the second lattice direction
-InterferenceFunctionFinite2DLattice*
-InterferenceFunctionFinite2DLattice::createHexagonal(double lattice_length, double xi, unsigned N_1,
-                                                     unsigned N_2)
-{
-    return new InterferenceFunctionFinite2DLattice(HexagonalLattice(lattice_length, xi), N_1, N_2);
-}
-
 void InterferenceFunctionFinite2DLattice::setIntegrationOverXi(bool integrate_xi)
 {
     m_integrate_xi = integrate_xi;
diff --git a/Sample/Aggregate/InterferenceFunctionFinite2DLattice.h b/Sample/Aggregate/InterferenceFunctionFinite2DLattice.h
index 1cd85527e6b..dfbaf0ba7c4 100644
--- a/Sample/Aggregate/InterferenceFunctionFinite2DLattice.h
+++ b/Sample/Aggregate/InterferenceFunctionFinite2DLattice.h
@@ -33,11 +33,6 @@ public:
 
     void accept(INodeVisitor* visitor) const override final { visitor->visit(this); }
 
-    static InterferenceFunctionFinite2DLattice* createSquare(double lattice_length, double xi,
-                                                             unsigned N_1, unsigned N_2);
-    static InterferenceFunctionFinite2DLattice* createHexagonal(double lattice_length, double xi,
-                                                                unsigned N_1, unsigned N_2);
-
     unsigned numberUnitCells1() const { return m_N_1; }
     unsigned numberUnitCells2() const { return m_N_2; }
 
diff --git a/auto/Wrap/doxygenSample.i b/auto/Wrap/doxygenSample.i
index 78454a6859c..bc13c775997 100644
--- a/auto/Wrap/doxygenSample.i
+++ b/auto/Wrap/doxygenSample.i
@@ -8942,7 +8942,7 @@ Generate vertices of centered ellipse with given semi-axes at height z.
 
 
 // File: LayersWithAbsorptionBySLDBuilder_8cpp.xml
-%feature("docstring")  middle_layer_thickness "const double middle_layer_thickness(60.0 *Units::nanometer)
+%feature("docstring")  middle_layer_thickness "const double middle_layer_thickness(60.0 *Units::nm)
 ";
 
 
diff --git a/auto/Wrap/libBornAgainSample.py b/auto/Wrap/libBornAgainSample.py
index 4d3bee3ced3..d32636d4c33 100644
--- a/auto/Wrap/libBornAgainSample.py
+++ b/auto/Wrap/libBornAgainSample.py
@@ -7547,16 +7547,6 @@ class InterferenceFunctionFinite2DLattice(IInterferenceFunction):
         """
         return _libBornAgainSample.InterferenceFunctionFinite2DLattice_accept(self, visitor)
 
-    @staticmethod
-    def createSquare(lattice_length, xi, N_1, N_2):
-        r"""createSquare(double lattice_length, double xi, unsigned int N_1, unsigned int N_2) -> InterferenceFunctionFinite2DLattice"""
-        return _libBornAgainSample.InterferenceFunctionFinite2DLattice_createSquare(lattice_length, xi, N_1, N_2)
-
-    @staticmethod
-    def createHexagonal(lattice_length, xi, N_1, N_2):
-        r"""createHexagonal(double lattice_length, double xi, unsigned int N_1, unsigned int N_2) -> InterferenceFunctionFinite2DLattice"""
-        return _libBornAgainSample.InterferenceFunctionFinite2DLattice_createHexagonal(lattice_length, xi, N_1, N_2)
-
     def numberUnitCells1(self):
         r"""
         numberUnitCells1(InterferenceFunctionFinite2DLattice self) -> unsigned int
@@ -7618,14 +7608,6 @@ class InterferenceFunctionFinite2DLattice(IInterferenceFunction):
 # Register InterferenceFunctionFinite2DLattice in _libBornAgainSample:
 _libBornAgainSample.InterferenceFunctionFinite2DLattice_swigregister(InterferenceFunctionFinite2DLattice)
 
-def InterferenceFunctionFinite2DLattice_createSquare(lattice_length, xi, N_1, N_2):
-    r"""InterferenceFunctionFinite2DLattice_createSquare(double lattice_length, double xi, unsigned int N_1, unsigned int N_2) -> InterferenceFunctionFinite2DLattice"""
-    return _libBornAgainSample.InterferenceFunctionFinite2DLattice_createSquare(lattice_length, xi, N_1, N_2)
-
-def InterferenceFunctionFinite2DLattice_createHexagonal(lattice_length, xi, N_1, N_2):
-    r"""InterferenceFunctionFinite2DLattice_createHexagonal(double lattice_length, double xi, unsigned int N_1, unsigned int N_2) -> InterferenceFunctionFinite2DLattice"""
-    return _libBornAgainSample.InterferenceFunctionFinite2DLattice_createHexagonal(lattice_length, xi, N_1, N_2)
-
 class InterferenceFunctionFinite3DLattice(IInterferenceFunction):
     r"""
 
diff --git a/auto/Wrap/libBornAgainSample_wrap.cpp b/auto/Wrap/libBornAgainSample_wrap.cpp
index eda9505dddd..ad061e0a871 100644
--- a/auto/Wrap/libBornAgainSample_wrap.cpp
+++ b/auto/Wrap/libBornAgainSample_wrap.cpp
@@ -54409,98 +54409,6 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_InterferenceFunctionFinite2DLattice_createSquare(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  double arg1 ;
-  double arg2 ;
-  unsigned int arg3 ;
-  unsigned int arg4 ;
-  double val1 ;
-  int ecode1 = 0 ;
-  double val2 ;
-  int ecode2 = 0 ;
-  unsigned int val3 ;
-  int ecode3 = 0 ;
-  unsigned int val4 ;
-  int ecode4 = 0 ;
-  PyObject *swig_obj[4] ;
-  InterferenceFunctionFinite2DLattice *result = 0 ;
-  
-  if (!SWIG_Python_UnpackTuple(args, "InterferenceFunctionFinite2DLattice_createSquare", 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 '" "InterferenceFunctionFinite2DLattice_createSquare" "', 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 '" "InterferenceFunctionFinite2DLattice_createSquare" "', argument " "2"" of type '" "double""'");
-  } 
-  arg2 = static_cast< double >(val2);
-  ecode3 = SWIG_AsVal_unsigned_SS_int(swig_obj[2], &val3);
-  if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "InterferenceFunctionFinite2DLattice_createSquare" "', argument " "3"" of type '" "unsigned int""'");
-  } 
-  arg3 = static_cast< unsigned int >(val3);
-  ecode4 = SWIG_AsVal_unsigned_SS_int(swig_obj[3], &val4);
-  if (!SWIG_IsOK(ecode4)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "InterferenceFunctionFinite2DLattice_createSquare" "', argument " "4"" of type '" "unsigned int""'");
-  } 
-  arg4 = static_cast< unsigned int >(val4);
-  result = (InterferenceFunctionFinite2DLattice *)InterferenceFunctionFinite2DLattice::createSquare(arg1,arg2,arg3,arg4);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_InterferenceFunctionFinite2DLattice, SWIG_POINTER_OWN |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_InterferenceFunctionFinite2DLattice_createHexagonal(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  double arg1 ;
-  double arg2 ;
-  unsigned int arg3 ;
-  unsigned int arg4 ;
-  double val1 ;
-  int ecode1 = 0 ;
-  double val2 ;
-  int ecode2 = 0 ;
-  unsigned int val3 ;
-  int ecode3 = 0 ;
-  unsigned int val4 ;
-  int ecode4 = 0 ;
-  PyObject *swig_obj[4] ;
-  InterferenceFunctionFinite2DLattice *result = 0 ;
-  
-  if (!SWIG_Python_UnpackTuple(args, "InterferenceFunctionFinite2DLattice_createHexagonal", 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 '" "InterferenceFunctionFinite2DLattice_createHexagonal" "', 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 '" "InterferenceFunctionFinite2DLattice_createHexagonal" "', argument " "2"" of type '" "double""'");
-  } 
-  arg2 = static_cast< double >(val2);
-  ecode3 = SWIG_AsVal_unsigned_SS_int(swig_obj[2], &val3);
-  if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "InterferenceFunctionFinite2DLattice_createHexagonal" "', argument " "3"" of type '" "unsigned int""'");
-  } 
-  arg3 = static_cast< unsigned int >(val3);
-  ecode4 = SWIG_AsVal_unsigned_SS_int(swig_obj[3], &val4);
-  if (!SWIG_IsOK(ecode4)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "InterferenceFunctionFinite2DLattice_createHexagonal" "', argument " "4"" of type '" "unsigned int""'");
-  } 
-  arg4 = static_cast< unsigned int >(val4);
-  result = (InterferenceFunctionFinite2DLattice *)InterferenceFunctionFinite2DLattice::createHexagonal(arg1,arg2,arg3,arg4);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_InterferenceFunctionFinite2DLattice, SWIG_POINTER_OWN |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
 SWIGINTERN PyObject *_wrap_InterferenceFunctionFinite2DLattice_numberUnitCells1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   InterferenceFunctionFinite2DLattice *arg1 = (InterferenceFunctionFinite2DLattice *) 0 ;
@@ -73668,8 +73576,6 @@ static PyMethodDef SwigMethods[] = {
 		"void InterferenceFunctionFinite2DLattice::accept(INodeVisitor *visitor) const override final\n"
 		"\n"
 		""},
-	 { "InterferenceFunctionFinite2DLattice_createSquare", _wrap_InterferenceFunctionFinite2DLattice_createSquare, METH_VARARGS, "InterferenceFunctionFinite2DLattice_createSquare(double lattice_length, double xi, unsigned int N_1, unsigned int N_2) -> InterferenceFunctionFinite2DLattice"},
-	 { "InterferenceFunctionFinite2DLattice_createHexagonal", _wrap_InterferenceFunctionFinite2DLattice_createHexagonal, METH_VARARGS, "InterferenceFunctionFinite2DLattice_createHexagonal(double lattice_length, double xi, unsigned int N_1, unsigned int N_2) -> InterferenceFunctionFinite2DLattice"},
 	 { "InterferenceFunctionFinite2DLattice_numberUnitCells1", _wrap_InterferenceFunctionFinite2DLattice_numberUnitCells1, METH_O, "\n"
 		"InterferenceFunctionFinite2DLattice_numberUnitCells1(InterferenceFunctionFinite2DLattice self) -> unsigned int\n"
 		"unsigned InterferenceFunctionFinite2DLattice::numberUnitCells1() const\n"
-- 
GitLab