From 2c853d69d146994688b1bb856bd5c66a1c8fc329 Mon Sep 17 00:00:00 2001
From: Olivier Langella <olivier.langella@u-psud.fr>
Date: Fri, 7 Dec 2018 10:42:41 +0100
Subject: [PATCH] wait for spectrum loader thread

---
 src/gui/peptide_detail_view/peptidewindow.cpp |  3 ++
 src/gui/workerthread.h                        |  2 +-
 src/gui/xic_view/xic_box/xicbox.cpp           | 46 +++++++++++++------
 src/gui/xic_view/xicworkerthread.cpp          | 12 ++++-
 src/gui/xic_view/xicworkerthread.h            |  4 +-
 src/input/mascot/mascotdatparser.h            |  2 +-
 6 files changed, 50 insertions(+), 19 deletions(-)

diff --git a/src/gui/peptide_detail_view/peptidewindow.cpp b/src/gui/peptide_detail_view/peptidewindow.cpp
index 0329c2b5..3ad38966 100644
--- a/src/gui/peptide_detail_view/peptidewindow.cpp
+++ b/src/gui/peptide_detail_view/peptidewindow.cpp
@@ -165,6 +165,9 @@ PeptideWindow::PeptideWindow(ProjectWindow *parent)
 
 PeptideWindow::~PeptideWindow()
 {
+
+  _spectrum_loader_thread.quit();
+  _spectrum_loader_thread.wait();
   delete ui;
 }
 
diff --git a/src/gui/workerthread.h b/src/gui/workerthread.h
index 60168b56..309a35dc 100644
--- a/src/gui/workerthread.h
+++ b/src/gui/workerthread.h
@@ -48,7 +48,7 @@ class WorkerThread : public QObject
   public:
   WorkerThread(MainWindow *parent);
   WorkerThread(ProjectWindow *parent);
-  ~WorkerThread();
+  virtual ~WorkerThread();
 
 
   protected:
diff --git a/src/gui/xic_view/xic_box/xicbox.cpp b/src/gui/xic_view/xic_box/xicbox.cpp
index 3fba0015..c29b9823 100644
--- a/src/gui/xic_view/xic_box/xicbox.cpp
+++ b/src/gui/xic_view/xic_box/xicbox.cpp
@@ -114,7 +114,7 @@ XicBox::XicBox(XicWindow *parent) : QWidget(parent), ui(new Ui::XicBox)
   _p_xic_window = parent;
   ui->setupUi(this);
 
-  XicWorkerThread *p_worker = new XicWorkerThread();
+  XicWorkerThread *p_worker = new XicWorkerThread(this);
   p_worker->moveToThread(&_xic_thread);
   _xic_thread.start();
 
@@ -139,19 +139,29 @@ XicBox::XicBox(XicWindow *parent) : QWidget(parent), ui(new Ui::XicBox)
   connect(p_worker, &XicWorkerThread::operationFailed, this, &XicBox::error);
 
 
-  connect(this, &XicBox::computeIsotopeMassList, p_worker,
+  connect(this,
+          &XicBox::computeIsotopeMassList,
+          p_worker,
           &XicWorkerThread::doComputeIsotopeMassList);
-  connect(p_worker, &XicWorkerThread::isotopeMassListComputed, this,
+  connect(p_worker,
+          &XicWorkerThread::isotopeMassListComputed,
+          this,
           &XicBox::setIsotopeMassList);
 
-  connect(_p_xic_window, &XicWindow::reExtractXicNeeded, this,
-          &XicBox::reExtractXic);
-  connect(ui->xic_widget, &pappso::XicWidget::xicPeakListChanged, this,
+  connect(
+    _p_xic_window, &XicWindow::reExtractXicNeeded, this, &XicBox::reExtractXic);
+  connect(ui->xic_widget,
+          &pappso::XicWidget::xicPeakListChanged,
+          this,
           &XicBox::setXicPeakList);
-  connect(ui->xic_widget, &pappso::XicWidget::clicked, this,
+  connect(ui->xic_widget,
+          &pappso::XicWidget::clicked,
+          this,
           &XicBox::onXicWidgetClick);
 
-  connect(_p_xic_window, &XicWindow::rtUnitChangeNeeded, this,
+  connect(_p_xic_window,
+          &XicWindow::rtUnitChangeNeeded,
+          this,
           &XicBox::onRtUnitChanged);
 #else
 // Qt4 code
@@ -259,13 +269,15 @@ XicBox::setPeptideEvidence(const PeptideEvidence *p_peptide_evidence)
   _p_xic_window->getProjectWindow()
     ->getProjectP()
     ->getSameXicPeptideEvidenceList(
-      _peptide_evidence_list, _msrun_sp.get(),
+      _peptide_evidence_list,
+      _msrun_sp.get(),
       _p_peptide_evidence->getPeptideXtpSp().get(),
       _p_peptide_evidence->getCharge());
 
   emit computeIsotopeMassList(_p_peptide_evidence->getPeptideXtpSp(),
                               _p_peptide_evidence->getCharge(),
-                              _p_xic_window->getXicExtractPrecision(), 0.8);
+                              _p_xic_window->getXicExtractPrecision(),
+                              0.8);
 }
 
 void
@@ -290,7 +302,8 @@ XicBox::setPeptideEvidenceInMsRun(const PeptideEvidence *p_peptide_evidence,
   _p_xic_window->getProjectWindow()
     ->getProjectP()
     ->getSameXicPeptideEvidenceList(
-      _peptide_evidence_list, _msrun_sp.get(),
+      _peptide_evidence_list,
+      _msrun_sp.get(),
       _p_peptide_evidence->getPeptideXtpSp().get(),
       _p_peptide_evidence->getCharge());
   //_p_xic_window->getProjectWindow()->getProjectP()->getSameXicPeptideEvidenceList(p_peptide_evidence,
@@ -298,7 +311,8 @@ XicBox::setPeptideEvidenceInMsRun(const PeptideEvidence *p_peptide_evidence,
 
   emit computeIsotopeMassList(_p_peptide_evidence->getPeptideXtpSp(),
                               _p_peptide_evidence->getCharge(),
-                              _p_xic_window->getXicExtractPrecision(), 0.8);
+                              _p_xic_window->getXicExtractPrecision(),
+                              0.8);
 }
 
 void
@@ -491,7 +505,9 @@ XicBox::setIsotopeMassList(
         {nullptr, natural_isotope_average, nullptr, nullptr});
     }
 
-  emit loadXic(_msrun_sp, mass_list, _p_xic_window->getXicExtractPrecision(),
+  emit loadXic(_msrun_sp,
+               mass_list,
+               _p_xic_window->getXicExtractPrecision(),
                pappso::XicExtractMethod::max);
 
   // histogram
@@ -565,7 +581,9 @@ XicBox::reExtractXic()
       mass_list.push_back(
         xic_isotope.peptide_natural_isotope_sp.get()->getMz());
     }
-  emit loadXic(_msrun_sp, mass_list, _p_xic_window->getXicExtractPrecision(),
+  emit loadXic(_msrun_sp,
+               mass_list,
+               _p_xic_window->getXicExtractPrecision(),
                pappso::XicExtractMethod::max);
   qDebug() << "XicBox::reExtractXic end";
 }
diff --git a/src/gui/xic_view/xicworkerthread.cpp b/src/gui/xic_view/xicworkerthread.cpp
index 98bc2111..9039b5eb 100644
--- a/src/gui/xic_view/xicworkerthread.cpp
+++ b/src/gui/xic_view/xicworkerthread.cpp
@@ -34,8 +34,15 @@
 #include <pappsomspp/exception/exceptionnotfound.h>
 #include <QDebug>
 
+XicWorkerThread::XicWorkerThread(XicBox *parent)
+{
+}
+XicWorkerThread::~XicWorkerThread()
+{
+}
 void
-XicWorkerThread::doXicLoad(MsRunSp p_msrun, std::vector<pappso::mz> mz_list,
+XicWorkerThread::doXicLoad(MsRunSp p_msrun,
+                           std::vector<pappso::mz> mz_list,
                            pappso::PrecisionP precision,
                            pappso::XicExtractMethod method)
 {
@@ -91,7 +98,8 @@ XicWorkerThread::doComputeIsotopeMassList(pappso::PeptideSp peptide_sp,
       isotope_mass_list = isotope_list.getByIntensityRatio(
         charge, precision, minimum_isotope_pattern_ratio);
 
-      std::sort(isotope_mass_list.begin(), isotope_mass_list.end(),
+      std::sort(isotope_mass_list.begin(),
+                isotope_mass_list.end(),
                 [](const pappso::PeptideNaturalIsotopeAverageSp &m,
                    const pappso::PeptideNaturalIsotopeAverageSp &n) -> bool {
                   unsigned int mn(m.get()->getIsotopeNumber()),
diff --git a/src/gui/xic_view/xicworkerthread.h b/src/gui/xic_view/xicworkerthread.h
index ec0428b4..66081f2a 100644
--- a/src/gui/xic_view/xicworkerthread.h
+++ b/src/gui/xic_view/xicworkerthread.h
@@ -35,11 +35,13 @@
 #include "../../core/msrun.h"
 #include <pappsomspp/xic/xic.h>
 #include <pappsomspp/xicextractor/msrunxicextractor.h>
-
+#include "xic_box/xicbox.h"
 class XicWorkerThread : public QObject
 {
   Q_OBJECT
   public:
+  XicWorkerThread(XicBox *parent);
+  virtual ~XicWorkerThread();
   public slots:
   void doXicLoad(MsRunSp p_msrun, std::vector<pappso::mz> mz_list,
                  pappso::PrecisionP precision, pappso::XicExtractMethod method);
diff --git a/src/input/mascot/mascotdatparser.h b/src/input/mascot/mascotdatparser.h
index e9cc45fa..d3436873 100644
--- a/src/input/mascot/mascotdatparser.h
+++ b/src/input/mascot/mascotdatparser.h
@@ -113,7 +113,7 @@ class MascotDatParser
   unsigned int _number_of_residues = 0;
   QString _error_str;
   bool _is_decoy_section             = false;
-  bool _take_only_first_peptide_rank = true;
+  bool _take_only_first_peptide_rank = false;
 
   PeptideLine _current_peptide;
   QueryLine _current_query;
-- 
GitLab