From 02d49bac8104b7c27da1957142b4c251b2a68d40 Mon Sep 17 00:00:00 2001
From: Gennady Pospelov <g.pospelov@fz-juelich.de>
Date: Wed, 26 Sep 2018 15:36:26 +0200
Subject: [PATCH] More accurate processing of first and last iterations

---
 Core/Fitting/FitSuite.cpp                       |  6 ++++++
 Core/Fitting/FitSuite.h                         |  3 +++
 GUI/coregui/Views/FitWidgets/GUIFitObserver.cpp | 13 +++++++++----
 3 files changed, 18 insertions(+), 4 deletions(-)

diff --git a/Core/Fitting/FitSuite.cpp b/Core/Fitting/FitSuite.cpp
index 63df8faafdb..0c225d88b27 100644
--- a/Core/Fitting/FitSuite.cpp
+++ b/Core/Fitting/FitSuite.cpp
@@ -156,6 +156,12 @@ FitSuiteStrategies* FitSuite::fitStrategies()
     return m_impl->fitStrategies();
 }
 
+bool FitSuite::isFirstIteration() const
+{
+    // FIXME temporary method: before refactoring first iteration had index 0
+    return m_impl->numberOfIterations() == 1;
+}
+
 bool FitSuite::isLastIteration() const
 {
     return m_impl->isLastIteration();
diff --git a/Core/Fitting/FitSuite.h b/Core/Fitting/FitSuite.h
index a914fdcf265..c2661c52fbc 100644
--- a/Core/Fitting/FitSuite.h
+++ b/Core/Fitting/FitSuite.h
@@ -127,6 +127,9 @@ public:
     //! Returns reference to fit parameters
     FitSuiteStrategies* fitStrategies();
 
+    //! temporary method to check if it is first iteration
+    bool isFirstIteration() const;
+
     //! if the last iteration is done (used by observers to print summary)
     bool isLastIteration() const;
 
diff --git a/GUI/coregui/Views/FitWidgets/GUIFitObserver.cpp b/GUI/coregui/Views/FitWidgets/GUIFitObserver.cpp
index fd4588837b8..4827d345802 100644
--- a/GUI/coregui/Views/FitWidgets/GUIFitObserver.cpp
+++ b/GUI/coregui/Views/FitWidgets/GUIFitObserver.cpp
@@ -18,7 +18,6 @@
 #include "FitSuite.h"
 #include "GUIHelpers.h"
 #include "MinimizerUtils.h"
-#include <QDebug>
 
 GUIFitObserver::GUIFitObserver(QObject* parent)
     : QObject(parent)
@@ -44,6 +43,9 @@ void GUIFitObserver::update(FitSuite* subject)
     if (m_block_update_plots)
         m_on_finish_notifier.wait(lock, [this]() { return m_block_update_plots; });
 
+    if (subject->isFirstIteration())
+        emit logInfoUpdate(QString::fromStdString(subject->setupToString()));
+
     FitProgressInfo info;
     info.m_chi2 = subject->getChi2();
     info.m_iteration_count = (int)subject->numberOfIterations();
@@ -51,11 +53,12 @@ void GUIFitObserver::update(FitSuite* subject)
 
     emit progressInfoUpdate(info);
 
+    if (subject->isLastIteration())
+        emit logInfoUpdate(reportToString(subject));
+
     m_simData.reset(subject->simulationResult().data());
     emit plotsUpdate();
 
-    if (subject->isLastIteration())
-        emit logInfoUpdate(reportToString(subject));
 }
 
 //! Returns true if data could be plotted, when there are resources for it.
@@ -66,7 +69,9 @@ bool GUIFitObserver::is_suitable_iteration(FitSuite* fitSuite)
         return false;
 
     int n_iter = static_cast<int>(fitSuite->numberOfIterations());
-    return n_iter == 0 || n_iter % m_update_interval == 0 || n_iter == fitSuite->isLastIteration();
+    return n_iter == fitSuite->isFirstIteration() ||
+           n_iter % m_update_interval == 0 ||
+           fitSuite->isLastIteration();
 }
 
 //! Returns true if given iteration should be obligary plotted.
-- 
GitLab