From 2cd3bd4625104bda80276a9cea8258d383c631d3 Mon Sep 17 00:00:00 2001
From: Walter Van Herck <w.van.herck@fz-juelich.de>
Date: Tue, 17 Feb 2015 11:40:29 +0100
Subject: [PATCH] Added method to PyGenVisitor to construct LatticeBasis
 objects

---
 Core/Tools/inc/PyGenVisitor.h   |  1 +
 Core/Tools/src/PyGenVisitor.cpp | 35 +++++++++++++++++++++++++++++++++
 2 files changed, 36 insertions(+)

diff --git a/Core/Tools/inc/PyGenVisitor.h b/Core/Tools/inc/PyGenVisitor.h
index 0ff3cc26e4b..4b009da0ae8 100644
--- a/Core/Tools/inc/PyGenVisitor.h
+++ b/Core/Tools/inc/PyGenVisitor.h
@@ -81,6 +81,7 @@ private:
     std::string defineFormFactors() const;
     std::string defineParticles() const;
     std::string defineCoreShellParticles() const;
+    std::string defineLatticeBases() const;
     std::string defineInterferenceFunctions() const;
     std::string defineParticleLayouts() const;
     std::string defineRoughnesses() const;
diff --git a/Core/Tools/src/PyGenVisitor.cpp b/Core/Tools/src/PyGenVisitor.cpp
index d4cafc0e925..6cbbf879d8b 100644
--- a/Core/Tools/src/PyGenVisitor.cpp
+++ b/Core/Tools/src/PyGenVisitor.cpp
@@ -265,6 +265,7 @@ std::string PyGenVisitor::defineGetSample() const
     result << defineFormFactors();
     result << defineParticles();
     result << defineCoreShellParticles();
+    result << defineLatticeBases();
     result << defineInterferenceFunctions();
     result << defineParticleLayouts();
     result << defineRoughnesses();
@@ -684,6 +685,40 @@ std::string PyGenVisitor::defineCoreShellParticles() const
     return result.str();
 }
 
+std::string PyGenVisitor::defineLatticeBases() const
+{
+    if (m_label->getLatticeBasisMap()->size() == 0) return "";
+    std::ostringstream result;
+    result << std::setprecision(12);
+    result << "\n\t# Defining collection of particles with specific positions\n";
+    std::map<const LatticeBasis *,std::string>::iterator it =
+            m_label->getLatticeBasisMap()->begin();
+
+    while (it != m_label->getLatticeBasisMap()->end())
+    {
+        result << "\t" << it->second << " = LatticeBasis()\n";
+        for (size_t i=0; i<it->first->getNbrParticles(); ++i) {
+            std::vector<kvector_t> position_vector = it->first->getParticlePositions(i);
+            for (size_t j=0; j<position_vector.size(); ++j) {
+                result << "\tparticle_" << i
+                       << "_position_" << j << " = kvector_t("
+                       << position_vector[j].x() << "*nanometer,"
+                       << position_vector[j].y() << "*nanometer,"
+                       << position_vector[j].z() << "*nanometer)\n";
+            }
+            result << "\t" << it->second << ".addParticle("
+                   << m_label->getLabel(it->first->getParticle(i)) << ", [";
+            for (size_t j=0; j<position_vector.size(); ++j) {
+                result << "particle_" << i << "_position_" << j;
+                if (j!=position_vector.size()-1) result << ", ";
+            }
+            result << "])\n";
+        }
+        it++;
+    }
+    return result.str();
+}
+
 std::string PyGenVisitor::defineInterferenceFunctions() const
 {
     if (m_label->getInterferenceFunctionMap()->size() == 0) return "";
-- 
GitLab