From 2e5170e9f595702d25ce390a9e5accf08b97e3eb Mon Sep 17 00:00:00 2001
From: Walter Van Herck <w.van.herck@fz-juelich.de>
Date: Mon, 16 Apr 2018 14:06:02 +0200
Subject: [PATCH] Added PyStandard test for finite lattice

---
 .../InterferenceFunctionFinite2DLattice.h     |  3 ++
 Core/Export/SampleToPython.cpp                | 15 ++++++
 .../Python/PyStandard/CMakeLists.txt          |  1 +
 auto/Wrap/libBornAgainCore.py                 | 10 ++++
 auto/Wrap/libBornAgainCore_wrap.cpp           | 46 +++++++++++++++++++
 5 files changed, 75 insertions(+)

diff --git a/Core/Aggregate/InterferenceFunctionFinite2DLattice.h b/Core/Aggregate/InterferenceFunctionFinite2DLattice.h
index b8719b2be42..1b978deda9e 100644
--- a/Core/Aggregate/InterferenceFunctionFinite2DLattice.h
+++ b/Core/Aggregate/InterferenceFunctionFinite2DLattice.h
@@ -43,6 +43,9 @@ public:
 
     double evaluate(const kvector_t q) const final;
 
+    unsigned domainSize1() const { return m_size_1; }
+    unsigned domainSize2() const { return m_size_2; }
+
     void setPositionVariance(double sigma2) { m_sigma2 = sigma2; }
     double positionVariance() const { return m_sigma2; }
 
diff --git a/Core/Export/SampleToPython.cpp b/Core/Export/SampleToPython.cpp
index 8ba52c502db..4ecee8a69d5 100644
--- a/Core/Export/SampleToPython.cpp
+++ b/Core/Export/SampleToPython.cpp
@@ -418,6 +418,21 @@ std::string SampleToPython::defineInterferenceFunctions() const
                    << argumentList(pdf) << ")\n"
                    << indent() << it->second << ".setDecayFunction(" << it->second << "_pdf)\n";
 
+            if (p_lattice_2d->integrationOverXi() == true)
+                result << indent() << it->second << ".setIntegrationOverXi(True)\n";
+        } else if (auto p_lattice_2d
+                   = dynamic_cast<const InterferenceFunctionFinite2DLattice*>(interference)) {
+            const Lattice2D& lattice = p_lattice_2d->lattice();
+            result << indent() << it->second << " = ba.InterferenceFunctionFinite2DLattice("
+                   << printNm(lattice.length1()) << ", " << printNm(lattice.length2()) << ", "
+                   << printDegrees(lattice.latticeAngle()) << ", "
+                   << printDegrees(lattice.rotationAngle()) << ", "
+                   << p_lattice_2d->domainSize1() << ", " << p_lattice_2d->domainSize2() << ")\n";
+
+            if (p_lattice_2d->positionVariance()>0.0) {
+                result << indent() << it->second << ".setPositionVariance("
+                       << p_lattice_2d->positionVariance() << ")\n";
+            }
             if (p_lattice_2d->integrationOverXi() == true)
                 result << indent() << it->second << ".setIntegrationOverXi(True)\n";
         } else if (auto p_para_2d
diff --git a/Tests/Functional/Python/PyStandard/CMakeLists.txt b/Tests/Functional/Python/PyStandard/CMakeLists.txt
index 4ffcbc28211..bd7aa6e8563 100644
--- a/Tests/Functional/Python/PyStandard/CMakeLists.txt
+++ b/Tests/Functional/Python/PyStandard/CMakeLists.txt
@@ -45,6 +45,7 @@ set(test_cases
     RotatedCylinder
     RotatedPyramids
     RotatedSquareLattice
+    FiniteSquareLattice
     SimulationWithMasks
     SquareLattice
     TransformBox
diff --git a/auto/Wrap/libBornAgainCore.py b/auto/Wrap/libBornAgainCore.py
index 0354d18b8f3..4f34f4aa3a0 100644
--- a/auto/Wrap/libBornAgainCore.py
+++ b/auto/Wrap/libBornAgainCore.py
@@ -21553,6 +21553,16 @@ class InterferenceFunctionFinite2DLattice(IInterferenceFunction):
         return _libBornAgainCore.InterferenceFunctionFinite2DLattice_evaluate(self, q)
 
 
+    def domainSize1(self):
+        """domainSize1(InterferenceFunctionFinite2DLattice self) -> unsigned int"""
+        return _libBornAgainCore.InterferenceFunctionFinite2DLattice_domainSize1(self)
+
+
+    def domainSize2(self):
+        """domainSize2(InterferenceFunctionFinite2DLattice self) -> unsigned int"""
+        return _libBornAgainCore.InterferenceFunctionFinite2DLattice_domainSize2(self)
+
+
     def setPositionVariance(self, sigma2):
         """
         setPositionVariance(InterferenceFunctionFinite2DLattice self, double sigma2)
diff --git a/auto/Wrap/libBornAgainCore_wrap.cpp b/auto/Wrap/libBornAgainCore_wrap.cpp
index 66e72fa5626..3f019121edb 100644
--- a/auto/Wrap/libBornAgainCore_wrap.cpp
+++ b/auto/Wrap/libBornAgainCore_wrap.cpp
@@ -93973,6 +93973,50 @@ fail:
 }
 
 
+SWIGINTERN PyObject *_wrap_InterferenceFunctionFinite2DLattice_domainSize1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  InterferenceFunctionFinite2DLattice *arg1 = (InterferenceFunctionFinite2DLattice *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  unsigned int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:InterferenceFunctionFinite2DLattice_domainSize1",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_InterferenceFunctionFinite2DLattice, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "InterferenceFunctionFinite2DLattice_domainSize1" "', argument " "1"" of type '" "InterferenceFunctionFinite2DLattice const *""'"); 
+  }
+  arg1 = reinterpret_cast< InterferenceFunctionFinite2DLattice * >(argp1);
+  result = (unsigned int)((InterferenceFunctionFinite2DLattice const *)arg1)->domainSize1();
+  resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_InterferenceFunctionFinite2DLattice_domainSize2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  InterferenceFunctionFinite2DLattice *arg1 = (InterferenceFunctionFinite2DLattice *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  unsigned int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:InterferenceFunctionFinite2DLattice_domainSize2",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_InterferenceFunctionFinite2DLattice, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "InterferenceFunctionFinite2DLattice_domainSize2" "', argument " "1"" of type '" "InterferenceFunctionFinite2DLattice const *""'"); 
+  }
+  arg1 = reinterpret_cast< InterferenceFunctionFinite2DLattice * >(argp1);
+  result = (unsigned int)((InterferenceFunctionFinite2DLattice const *)arg1)->domainSize2();
+  resultobj = SWIG_From_unsigned_SS_int(static_cast< unsigned int >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
 SWIGINTERN PyObject *_wrap_InterferenceFunctionFinite2DLattice_setPositionVariance(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   InterferenceFunctionFinite2DLattice *arg1 = (InterferenceFunctionFinite2DLattice *) 0 ;
@@ -127185,6 +127229,8 @@ static PyMethodDef SwigMethods[] = {
 		"Evaluates the interference function for a given wavevector transfer (only the real x and y components are relevant) \n"
 		"\n"
 		""},
+	 { (char *)"InterferenceFunctionFinite2DLattice_domainSize1", _wrap_InterferenceFunctionFinite2DLattice_domainSize1, METH_VARARGS, (char *)"InterferenceFunctionFinite2DLattice_domainSize1(InterferenceFunctionFinite2DLattice self) -> unsigned int"},
+	 { (char *)"InterferenceFunctionFinite2DLattice_domainSize2", _wrap_InterferenceFunctionFinite2DLattice_domainSize2, METH_VARARGS, (char *)"InterferenceFunctionFinite2DLattice_domainSize2(InterferenceFunctionFinite2DLattice self) -> unsigned int"},
 	 { (char *)"InterferenceFunctionFinite2DLattice_setPositionVariance", _wrap_InterferenceFunctionFinite2DLattice_setPositionVariance, METH_VARARGS, (char *)"\n"
 		"InterferenceFunctionFinite2DLattice_setPositionVariance(InterferenceFunctionFinite2DLattice self, double sigma2)\n"
 		"\n"
-- 
GitLab