From f102d44d6e9acba353f98fd0e5087e7a43a9c6aa Mon Sep 17 00:00:00 2001
From: Walter Van Herck <w.van.herck@fz-juelich.de>
Date: Wed, 1 Feb 2017 13:57:18 +0100
Subject: [PATCH] Refactor MainComputation: ParticleLayoutComputations are now
 in a simple vector (instead of vector<vector<..>>)

---
 Core/Computation/MainComputation.cpp | 39 ++++++++++++++--------------
 Core/Computation/MainComputation.h   |  2 +-
 2 files changed, 20 insertions(+), 21 deletions(-)

diff --git a/Core/Computation/MainComputation.cpp b/Core/Computation/MainComputation.cpp
index 936b774456e..714a91f33e8 100644
--- a/Core/Computation/MainComputation.cpp
+++ b/Core/Computation/MainComputation.cpp
@@ -46,11 +46,10 @@ MainComputation::MainComputation(
     msglog(Logging::DEBUG2) << "MainComputation::init()";
 
     size_t nLayers = mP_multi_layer->getNumberOfLayers();
-    m_layer_computation.resize( nLayers );
     for (size_t i=0; i<nLayers; ++i) {
         const Layer* layer = mP_multi_layer->getLayer(i);
         for (size_t j=0; j<layer->getNumberOfLayouts(); ++j)
-            m_layer_computation[i].push_back(
+            m_layer_computation.push_back(
                         new ParticleLayoutComputation(mP_multi_layer.get(),
                                                       layer->getLayout(j), i));
     }
@@ -64,9 +63,8 @@ MainComputation::~MainComputation()
 {
     delete mp_roughness_computation;
     delete mp_specular_computation;
-    for (auto& layer_comp: m_layer_computation)
-        for (ParticleLayoutComputation* comp: layer_comp)
-            delete comp;
+    for (ParticleLayoutComputation* comp: m_layer_computation)
+        delete comp;
 }
 
 void MainComputation::run()
@@ -99,14 +97,12 @@ void MainComputation::runProtected()
     std::vector<SimulationElement> layer_elements;
     std::copy(m_begin_it, m_end_it, std::back_inserter(layer_elements));
     bool polarized = mP_multi_layer->containsMagneticMaterial();
-    for (auto& layer_comp: m_layer_computation) {
-        for (const ParticleLayoutComputation* comp: layer_comp) {
-            if (!m_progress->alive())
-                return;
-            comp->eval(m_sim_options, m_progress, polarized,
-                       layer_elements.begin(), layer_elements.end());
-            addElementsWithWeight(layer_elements.begin(), layer_elements.end(), m_begin_it, 1.0);
-        }
+    for (const ParticleLayoutComputation* comp: m_layer_computation) {
+        if (!m_progress->alive())
+            return;
+        comp->eval(m_sim_options, m_progress, polarized,
+                   layer_elements.begin(), layer_elements.end());
+        addElementsWithWeight(layer_elements.begin(), layer_elements.end(), m_begin_it, 1.0);
     }
 
     if (!mP_multi_layer->requiresMatrixRTCoefficients() && mp_roughness_computation) {
@@ -125,15 +121,16 @@ void MainComputation::runProtected()
 void MainComputation::collectRTCoefficientsScalar()
 {
     if (m_fresnel_info.size()!=0) return;
+
     // run through layers and construct T,R functions
     for(size_t i=0; i<mP_multi_layer->getNumberOfLayers(); ++i) {
         msglog(Logging::DEBUG2) << "MainComputation::run() -> Layer " << i;
         m_fresnel_info.push_back(new ScalarSpecularInfoMap(mP_multi_layer.get(), i));
+    }
 
-        // layer DWBA simulation
-        for(ParticleLayoutComputation* comp: m_layer_computation[i])
-            comp->setSpecularInfo(&m_fresnel_info);
-
+    // layer DWBA simulation
+    for (ParticleLayoutComputation* comp: m_layer_computation) {
+        comp->setSpecularInfo(&m_fresnel_info);
     }
     // specular simulation (R^2 at top layer)
     mp_specular_computation->setSpecularInfo(&m_fresnel_info);
@@ -146,14 +143,16 @@ void MainComputation::collectRTCoefficientsMatrix()
 {
     if (m_fresnel_info.size()!=0) return;
     mP_inverted_multilayer.reset(mP_multi_layer->cloneInvertB());
+
     // run through layers and construct T,R functions
     for(size_t i=0; i<mP_multi_layer->getNumberOfLayers(); ++i) {
         msglog(Logging::DEBUG2) << "MainComputation::runMagnetic() -> Layer " << i;
         m_fresnel_info.push_back(new MatrixSpecularInfoMap(mP_multi_layer.get(),
                                                            mP_inverted_multilayer.get(), i));
+    }
 
-        // layer DWBA simulation
-        for(ParticleLayoutComputation* comp: m_layer_computation[i])
-            comp->setSpecularInfo(&m_fresnel_info);
+    // layer DWBA simulation
+    for (ParticleLayoutComputation* comp: m_layer_computation) {
+        comp->setSpecularInfo(&m_fresnel_info);
     }
 }
diff --git a/Core/Computation/MainComputation.h b/Core/Computation/MainComputation.h
index 4d8fb731988..f1a0348b6a8 100644
--- a/Core/Computation/MainComputation.h
+++ b/Core/Computation/MainComputation.h
@@ -70,7 +70,7 @@ private:
 
     RoughMultiLayerComputation* mp_roughness_computation;
     SpecularComputation *mp_specular_computation;
-    std::vector<std::vector<ParticleLayoutComputation*>> m_layer_computation;
+    std::vector<ParticleLayoutComputation*> m_layer_computation;
 
     //! contains the information, necessary to calculate the Fresnel coefficients
     SafePointerVector<ILayerSpecularInfo> m_fresnel_info;
-- 
GitLab