From 6d2a9bb6d48a7d6d062dd884b8bbae707f0f5952 Mon Sep 17 00:00:00 2001
From: Olivier Langella <olivier.langella@u-psud.fr>
Date: Thu, 13 Jun 2019 13:44:48 +0200
Subject: [PATCH] first msrun reference finder

---
 src/core/msrun.cpp                            |  6 ++-
 src/core/project.cpp                          | 15 ++++---
 .../export_masschroq_dialog.ui                | 34 +++++++++++++---
 .../exportmasschroqdialog.cpp                 | 40 +++++++++++++++++++
 4 files changed, 83 insertions(+), 12 deletions(-)

diff --git a/src/core/msrun.cpp b/src/core/msrun.cpp
index 1585259c3..b4cec6b36 100644
--- a/src/core/msrun.cpp
+++ b/src/core/msrun.cpp
@@ -340,8 +340,10 @@ MsRun::buildMsRunRetentionTime(
 void
 MsRun::computeMsRunRetentionTime()
 {
-  if(mpa_msrunRetentionTime == nullptr)
+  if(mpa_msrunRetentionTime != nullptr)
     {
+      qDebug() << __FILE__ << " " << __FUNCTION__ << " " << __LINE__
+               << " msrun id=" << getXmlId();
       mpa_msrunRetentionTime->computePeptideRetentionTimes();
     }
 }
@@ -349,7 +351,7 @@ MsRun::computeMsRunRetentionTime()
 void
 MsRun::clearMsRunRetentionTime()
 {
-  if(mpa_msrunRetentionTime == nullptr)
+  if(mpa_msrunRetentionTime != nullptr)
     {
       delete mpa_msrunRetentionTime;
       mpa_msrunRetentionTime = nullptr;
diff --git a/src/core/project.cpp b/src/core/project.cpp
index 3f6a073ba..661aa6b9c 100644
--- a/src/core/project.cpp
+++ b/src/core/project.cpp
@@ -300,6 +300,7 @@ Project::prepareMsrunRetentionTimesForAlignment() const
 {
   qDebug() << __FILE__ << " " << __FUNCTION__ << " " << __LINE__;
   bool is_ok = true;
+  PeptideEvidenceStore empty_store;
   for(IdentificationDataSourceSp p_ident_data_source :
       this->getIdentificationDataSourceStore()
         .getIdentificationDataSourceList())
@@ -313,11 +314,15 @@ Project::prepareMsrunRetentionTimesForAlignment() const
               MsRun *p_msrun = peptide_evidence.get()->getMsRunPtr();
               if(p_msrun->getMsRunRetentionTimePtr() == nullptr)
                 {
-                  throw pappso::PappsoException(
-                    QObject::tr(
-                      "Error preparing msrun retention time for %1 :\n "
-                      "p_msrun->getMsRunRetentionTimePtr() == nullptr")
-                      .arg(p_msrun->getXmlId()));
+
+                  p_msrun->buildMsRunRetentionTime(empty_store);
+                  /*
+                                    throw pappso::PappsoException(
+                                      QObject::tr(
+                                        "Error preparing msrun retention time
+                     for %1 :\n " "p_msrun->getMsRunRetentionTimePtr() ==
+                     nullptr") .arg(p_msrun->getXmlId()));
+                                        */
                 }
               p_msrun->getMsRunRetentionTimePtr()->addPeptideAsSeamark(
                 peptide_evidence.get()
diff --git a/src/gui/export/export_masschroq_dialog/export_masschroq_dialog.ui b/src/gui/export/export_masschroq_dialog/export_masschroq_dialog.ui
index b128ffc4c..7d61d638e 100644
--- a/src/gui/export/export_masschroq_dialog/export_masschroq_dialog.ui
+++ b/src/gui/export/export_masschroq_dialog/export_masschroq_dialog.ui
@@ -17,7 +17,7 @@
    <item>
     <widget class="QTabWidget" name="tabWidget">
      <property name="currentIndex">
-      <number>0</number>
+      <number>1</number>
      </property>
      <widget class="QWidget" name="resultTab">
       <attribute name="title">
@@ -175,6 +175,13 @@
          </layout>
         </widget>
        </item>
+       <item>
+        <widget class="QPushButton" name="pushButton">
+         <property name="text">
+          <string>Find best MS run reference for alignment</string>
+         </property>
+        </widget>
+       </item>
        <item>
         <spacer name="verticalSpacer_2">
          <property name="orientation">
@@ -439,8 +446,8 @@
    <slot>doCheckMsrunFilepath()</slot>
    <hints>
     <hint type="sourcelabel">
-     <x>530</x>
-     <y>58</y>
+     <x>101</x>
+     <y>49</y>
     </hint>
     <hint type="destinationlabel">
      <x>779</x>
@@ -455,8 +462,8 @@
    <slot>doBrowseMsrunDirectory()</slot>
    <hints>
     <hint type="sourcelabel">
-     <x>557</x>
-     <y>137</y>
+     <x>119</x>
+     <y>84</y>
     </hint>
     <hint type="destinationlabel">
      <x>787</x>
@@ -464,11 +471,28 @@
     </hint>
    </hints>
   </connection>
+  <connection>
+   <sender>pushButton</sender>
+   <signal>clicked()</signal>
+   <receiver>ExportMasschroqDialog</receiver>
+   <slot>doFindBestMsrunForAlignment()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>399</x>
+     <y>296</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>887</x>
+     <y>309</y>
+    </hint>
+   </hints>
+  </connection>
  </connections>
  <slots>
   <slot>reject()</slot>
   <slot>accept()</slot>
   <slot>doCheckMsrunFilepath()</slot>
   <slot>doBrowseMsrunDirectory()</slot>
+  <slot>doFindBestMsrunForAlignment()</slot>
  </slots>
 </ui>
diff --git a/src/gui/export/export_masschroq_dialog/exportmasschroqdialog.cpp b/src/gui/export/export_masschroq_dialog/exportmasschroqdialog.cpp
index dd20c7972..beab656e4 100644
--- a/src/gui/export/export_masschroq_dialog/exportmasschroqdialog.cpp
+++ b/src/gui/export/export_masschroq_dialog/exportmasschroqdialog.cpp
@@ -289,6 +289,46 @@ ExportMasschroqDialog::doFindBestMsrunForAlignment()
   try
     {
       mp_project->prepareMsrunRetentionTimesForAlignment();
+
+      MsRunSp ms_run_best_reference;
+      std::size_t best_number = 0;
+      for(auto &msrun_ref_sp : mp_project->getMsRunStore().getMsRunList())
+        {
+          if(ms_run_best_reference == nullptr)
+            {
+              ms_run_best_reference = msrun_ref_sp;
+            }
+
+          std::size_t min_number = std::numeric_limits<std::size_t>::max();
+          for(auto &msrun_sp : mp_project->getMsRunStore().getMsRunList())
+            {
+              if(msrun_sp.get() != msrun_ref_sp.get())
+                {
+                  pappso::Trace trace;
+                  trace = msrun_sp.get()
+                            ->getMsRunRetentionTimePtr()
+                            ->getCommonDeltaRt(msrun_ref_sp.get()
+                                                 ->getMsRunRetentionTimePtr()
+                                                 ->getSeamarks());
+                  if(trace.size() < min_number)
+                    {
+                      min_number = trace.size();
+                    }
+                }
+            }
+
+          if(min_number > best_number)
+            {
+              best_number = min_number;
+
+              ms_run_best_reference = msrun_ref_sp;
+            }
+        }
+      if(ms_run_best_reference != nullptr)
+        {
+          qDebug() << __FILE__ << " " << __FUNCTION__ << " " << __LINE__ << " "
+                   << ms_run_best_reference.get()->getXmlId()<< " best_number=" << best_number;
+        }
     }
   catch(pappso::PappsoException &error)
     {
-- 
GitLab