From b6fbcfd6b3843dd160074b3c28bf853942c1b505 Mon Sep 17 00:00:00 2001
From: Olivier Langella <olivier.langella@u-psud.fr>
Date: Sat, 7 Oct 2017 19:04:08 +0200
Subject: [PATCH] wip: tandem preset edition

---
 src/core/tandem_run/tandemparameters.cpp      |  35 ++-
 src/core/tandem_run/tandemparameters.h        |   1 +
 .../edit_tandem_preset_dialog.ui              | 261 ++++++++++++++----
 .../edittandempresetdialog.cpp                |  72 ++++-
 4 files changed, 306 insertions(+), 63 deletions(-)

diff --git a/src/core/tandem_run/tandemparameters.cpp b/src/core/tandem_run/tandemparameters.cpp
index c3fa93353..2c4fec7ae 100644
--- a/src/core/tandem_run/tandemparameters.cpp
+++ b/src/core/tandem_run/tandemparameters.cpp
@@ -50,6 +50,25 @@ TandemParameters::TandemParameters(const TandemParameters & other) {
     }
     qDebug() << "TandemParameters::TandemParameters copy end";
 }
+
+
+bool TandemParameters::equals(const TandemParameters & other) const {
+    if (_method_name != other._method_name) {
+        return false;
+    }
+    if (_map_label_value.size() != other._map_label_value.size()) {
+        return false;
+    }
+    QMap<QString, QString>::const_iterator i = _map_label_value.constBegin();
+    while (i != _map_label_value.constEnd()) {
+        if(i.value() != other.getValue(i.key())) {
+            return false;
+        }
+        i++; // added
+    }
+    return true;
+}
+
 const QString TandemParameters::getLabelCategory(const QString & value) const {
     return value.split(", ").at(0);
 }
@@ -71,7 +90,7 @@ void TandemParameters::setParamLabelValue(const QString & label, const QString &
         return;
     }
 
-    if (label == "spectrum, parent monoisotopic mass error units") {
+    if ((label == "spectrum, parent monoisotopic mass error units") || (label == "spectrum, fragment monoisotopic mass error units")) {
         if ((value != "Daltons") && (value != "ppm")) {
             throw pappso::ExceptionNotPossible(QObject::tr("%1 value must be Daltons or ppm (not %2)").arg(label).arg(value));
         }
@@ -88,6 +107,20 @@ void TandemParameters::setParamLabelValue(const QString & label, const QString &
             throw pappso::ExceptionNotPossible(QObject::tr("%1 value must be a number (not %2)").arg(label).arg(value));
         }
     }
+    if ((label == "spectrum, maximum parent charge")) {
+        bool ok;
+        value.toInt(&ok);
+        if (!ok) {// not an integer
+            throw pappso::ExceptionNotPossible(QObject::tr("%1 value must be an integer (not %2)").arg(label).arg(value));
+        }
+    }
+
+    if (label == "spectrum, fragment mass type") {
+        if ((value != "monoisotopic") && (value != "average")) {
+            throw pappso::ExceptionNotPossible(QObject::tr("%1 value must be monoisotopic or average (not %2)").arg(label).arg(value));
+        }
+    }
+
 
     _map_label_value.insert(label, value);
 }
diff --git a/src/core/tandem_run/tandemparameters.h b/src/core/tandem_run/tandemparameters.h
index 0d8d6df3f..00ae6f2fb 100644
--- a/src/core/tandem_run/tandemparameters.h
+++ b/src/core/tandem_run/tandemparameters.h
@@ -45,6 +45,7 @@ public:
     const QString & getMethodName() const;
     void setParamLabelValue(const QString & label, const QString & value);
     const QMap<QString, QString> & getMapLabelValue() const;
+    bool equals(const TandemParameters & other) const;
 private:
     const QString getLabelCategory(const QString & value) const;
 private:
diff --git a/src/gui/edit_tandem_preset_dialog/edit_tandem_preset_dialog.ui b/src/gui/edit_tandem_preset_dialog/edit_tandem_preset_dialog.ui
index ce87acedf..65f878f30 100644
--- a/src/gui/edit_tandem_preset_dialog/edit_tandem_preset_dialog.ui
+++ b/src/gui/edit_tandem_preset_dialog/edit_tandem_preset_dialog.ui
@@ -131,14 +131,45 @@
               <property name="geometry">
                <rect>
                 <x>0</x>
-                <y>0</y>
-                <width>971</width>
-                <height>198</height>
+                <y>-94</y>
+                <width>957</width>
+                <height>292</height>
                </rect>
               </property>
               <layout class="QVBoxLayout" name="verticalLayout_3">
                <item>
                 <layout class="QGridLayout" name="gridLayout_2">
+                 <item row="5" column="1">
+                  <widget class="QComboBox" name="sfmt_combo_box">
+                   <property name="enabled">
+                    <bool>false</bool>
+                   </property>
+                   <item>
+                    <property name="text">
+                     <string>average</string>
+                    </property>
+                   </item>
+                   <item>
+                    <property name="text">
+                     <string>monoisotopic</string>
+                    </property>
+                   </item>
+                  </widget>
+                 </item>
+                 <item row="6" column="2">
+                  <widget class="QPushButton" name="sfmmeu_push_button">
+                   <property name="text">
+                    <string>?</string>
+                   </property>
+                  </widget>
+                 </item>
+                 <item row="5" column="2">
+                  <widget class="QPushButton" name="sfmt_push_button">
+                   <property name="text">
+                    <string>?</string>
+                   </property>
+                  </widget>
+                 </item>
                  <item row="0" column="1">
                   <widget class="QComboBox" name="parent_ion_window_unit_combo_box">
                    <item>
@@ -177,7 +208,7 @@
                   </widget>
                  </item>
                  <item row="2" column="2">
-                  <widget class="QPushButton" name="parent_ion_upper_window_push_button">
+                  <widget class="QPushButton" name="spmmep_push_button">
                    <property name="sizePolicy">
                     <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
                      <horstretch>0</horstretch>
@@ -190,7 +221,7 @@
                   </widget>
                  </item>
                  <item row="1" column="2">
-                  <widget class="QPushButton" name="parent_ion_lower_window_push_button">
+                  <widget class="QPushButton" name="spmmem_push_button">
                    <property name="sizePolicy">
                     <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
                      <horstretch>0</horstretch>
@@ -202,6 +233,20 @@
                    </property>
                   </widget>
                  </item>
+                 <item row="3" column="1">
+                  <widget class="QComboBox" name="anticipate_carbon_combo_box">
+                   <item>
+                    <property name="text">
+                     <string>yes</string>
+                    </property>
+                   </item>
+                   <item>
+                    <property name="text">
+                     <string>no</string>
+                    </property>
+                   </item>
+                  </widget>
+                 </item>
                  <item row="1" column="0">
                   <widget class="QLabel" name="label_2">
                    <property name="text">
@@ -210,7 +255,7 @@
                   </widget>
                  </item>
                  <item row="3" column="2">
-                  <widget class="QPushButton" name="anticipate_carbon_push_button">
+                  <widget class="QPushButton" name="spmmie_push_button">
                    <property name="sizePolicy">
                     <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
                      <horstretch>0</horstretch>
@@ -222,20 +267,6 @@
                    </property>
                   </widget>
                  </item>
-                 <item row="3" column="1">
-                  <widget class="QComboBox" name="anticipate_carbon_combo_box">
-                   <item>
-                    <property name="text">
-                     <string>yes</string>
-                    </property>
-                   </item>
-                   <item>
-                    <property name="text">
-                     <string>no</string>
-                    </property>
-                   </item>
-                  </widget>
-                 </item>
                  <item row="2" column="0">
                   <widget class="QLabel" name="label_3">
                    <property name="text">
@@ -256,6 +287,68 @@
                  <item row="2" column="1">
                   <widget class="QLineEdit" name="parent_ion_upper_window_edit"/>
                  </item>
+                 <item row="5" column="0">
+                  <widget class="QLabel" name="label_8">
+                   <property name="text">
+                    <string>Use chemical average or monoisotopic mass for fragment ions</string>
+                   </property>
+                  </widget>
+                 </item>
+                 <item row="4" column="0">
+                  <widget class="QLabel" name="smpc_label">
+                   <property name="text">
+                    <string>Set the maximum precursor charge to be scored</string>
+                   </property>
+                  </widget>
+                 </item>
+                 <item row="6" column="1">
+                  <widget class="QComboBox" name="sfmmeu_combo_box">
+                   <item>
+                    <property name="text">
+                     <string>Daltons</string>
+                    </property>
+                   </item>
+                   <item>
+                    <property name="text">
+                     <string>ppm</string>
+                    </property>
+                   </item>
+                  </widget>
+                 </item>
+                 <item row="6" column="0">
+                  <widget class="QLabel" name="label_9">
+                   <property name="text">
+                    <string>Units for fragment ion mass tolerance (monoisotopic)</string>
+                   </property>
+                  </widget>
+                 </item>
+                 <item row="4" column="1">
+                  <widget class="QLineEdit" name="smpc_edit"/>
+                 </item>
+                 <item row="4" column="2">
+                  <widget class="QPushButton" name="smpc_push_button">
+                   <property name="text">
+                    <string>?</string>
+                   </property>
+                  </widget>
+                 </item>
+                 <item row="7" column="2">
+                  <widget class="QPushButton" name="sfmme_push_button">
+                   <property name="text">
+                    <string>?</string>
+                   </property>
+                  </widget>
+                 </item>
+                 <item row="7" column="1">
+                  <widget class="QLineEdit" name="sfmme_edit"/>
+                 </item>
+                 <item row="7" column="0">
+                  <widget class="QLabel" name="label_7">
+                   <property name="text">
+                    <string>Fragment ion mass tolerance (monoisotopic)</string>
+                   </property>
+                  </widget>
+                 </item>
                 </layout>
                </item>
                <item>
@@ -292,8 +385,8 @@
                <rect>
                 <x>0</x>
                 <y>0</y>
-                <width>98</width>
-                <height>72</height>
+                <width>971</width>
+                <height>198</height>
                </rect>
               </property>
               <layout class="QVBoxLayout" name="verticalLayout_6">
@@ -400,8 +493,8 @@
    <slot>reject()</slot>
    <hints>
     <hint type="sourcelabel">
-     <x>1338</x>
-     <y>654</y>
+     <x>1343</x>
+     <y>620</y>
     </hint>
     <hint type="destinationlabel">
      <x>881</x>
@@ -417,7 +510,7 @@
    <hints>
     <hint type="sourcelabel">
      <x>1429</x>
-     <y>654</y>
+     <y>620</y>
     </hint>
     <hint type="destinationlabel">
      <x>879</x>
@@ -432,8 +525,8 @@
    <slot>doHelp()</slot>
    <hints>
     <hint type="sourcelabel">
-     <x>1086</x>
-     <y>307</y>
+     <x>976</x>
+     <y>242</y>
     </hint>
     <hint type="destinationlabel">
      <x>1728</x>
@@ -448,8 +541,8 @@
    <slot>doSave()</slot>
    <hints>
     <hint type="sourcelabel">
-     <x>1134</x>
-     <y>175</y>
+     <x>1011</x>
+     <y>249</y>
     </hint>
     <hint type="destinationlabel">
      <x>1542</x>
@@ -458,14 +551,14 @@
    </hints>
   </connection>
   <connection>
-   <sender>parent_ion_lower_window_push_button</sender>
+   <sender>spmmem_push_button</sender>
    <signal>clicked()</signal>
    <receiver>EditTandemPresetView</receiver>
    <slot>doHelp()</slot>
    <hints>
     <hint type="sourcelabel">
-     <x>1102</x>
-     <y>368</y>
+     <x>976</x>
+     <y>276</y>
     </hint>
     <hint type="destinationlabel">
      <x>720</x>
@@ -474,14 +567,14 @@
    </hints>
   </connection>
   <connection>
-   <sender>parent_ion_upper_window_push_button</sender>
+   <sender>spmmep_push_button</sender>
    <signal>clicked()</signal>
    <receiver>EditTandemPresetView</receiver>
    <slot>doHelp()</slot>
    <hints>
     <hint type="sourcelabel">
-     <x>1112</x>
-     <y>434</y>
+     <x>976</x>
+     <y>310</y>
     </hint>
     <hint type="destinationlabel">
      <x>1181</x>
@@ -490,14 +583,14 @@
    </hints>
   </connection>
   <connection>
-   <sender>anticipate_carbon_push_button</sender>
+   <sender>spmmie_push_button</sender>
    <signal>clicked()</signal>
    <receiver>EditTandemPresetView</receiver>
    <slot>doHelp()</slot>
    <hints>
     <hint type="sourcelabel">
-     <x>1091</x>
-     <y>494</y>
+     <x>976</x>
+     <y>344</y>
     </hint>
     <hint type="destinationlabel">
      <x>1037</x>
@@ -512,8 +605,8 @@
    <slot>doCopy()</slot>
    <hints>
     <hint type="sourcelabel">
-     <x>1017</x>
-     <y>186</y>
+     <x>925</x>
+     <y>249</y>
     </hint>
     <hint type="destinationlabel">
      <x>707</x>
@@ -528,8 +621,8 @@
    <slot>doEdit(QString)</slot>
    <hints>
     <hint type="sourcelabel">
-     <x>939</x>
-     <y>319</y>
+     <x>890</x>
+     <y>242</y>
     </hint>
     <hint type="destinationlabel">
      <x>400</x>
@@ -544,8 +637,8 @@
    <slot>doEdit(QString)</slot>
    <hints>
     <hint type="sourcelabel">
-     <x>846</x>
-     <y>363</y>
+     <x>889</x>
+     <y>269</y>
     </hint>
     <hint type="destinationlabel">
      <x>464</x>
@@ -560,8 +653,8 @@
    <slot>doEdit(QString)</slot>
    <hints>
     <hint type="sourcelabel">
-     <x>932</x>
-     <y>435</y>
+     <x>890</x>
+     <y>310</y>
     </hint>
     <hint type="destinationlabel">
      <x>798</x>
@@ -576,8 +669,8 @@
    <slot>doEdit(QString)</slot>
    <hints>
     <hint type="sourcelabel">
-     <x>980</x>
-     <y>477</y>
+     <x>890</x>
+     <y>344</y>
     </hint>
     <hint type="destinationlabel">
      <x>970</x>
@@ -592,8 +685,8 @@
    <slot>doLoad()</slot>
    <hints>
     <hint type="sourcelabel">
-     <x>1154</x>
-     <y>84</y>
+     <x>1313</x>
+     <y>136</y>
     </hint>
     <hint type="destinationlabel">
      <x>1737</x>
@@ -608,8 +701,8 @@
    <slot>doSelectDir()</slot>
    <hints>
     <hint type="sourcelabel">
-     <x>1273</x>
-     <y>87</y>
+     <x>1430</x>
+     <y>136</y>
     </hint>
     <hint type="destinationlabel">
      <x>1796</x>
@@ -617,6 +710,70 @@
     </hint>
    </hints>
   </connection>
+  <connection>
+   <sender>smpc_push_button</sender>
+   <signal>clicked()</signal>
+   <receiver>EditTandemPresetView</receiver>
+   <slot>doHelp()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>940</x>
+     <y>366</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>1209</x>
+     <y>602</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>sfmt_push_button</sender>
+   <signal>clicked()</signal>
+   <receiver>EditTandemPresetView</receiver>
+   <slot>doHelp()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>917</x>
+     <y>400</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>1247</x>
+     <y>529</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>sfmmeu_push_button</sender>
+   <signal>clicked()</signal>
+   <receiver>EditTandemPresetView</receiver>
+   <slot>doHelp()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>909</x>
+     <y>432</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>1142</x>
+     <y>571</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>sfmme_push_button</sender>
+   <signal>clicked()</signal>
+   <receiver>EditTandemPresetView</receiver>
+   <slot>doHelp()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>944</x>
+     <y>469</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>1322</x>
+     <y>578</y>
+    </hint>
+   </hints>
+  </connection>
  </connections>
  <slots>
   <slot>doCopy()</slot>
diff --git a/src/gui/edit_tandem_preset_dialog/edittandempresetdialog.cpp b/src/gui/edit_tandem_preset_dialog/edittandempresetdialog.cpp
index f32875b4f..e179de512 100644
--- a/src/gui/edit_tandem_preset_dialog/edittandempresetdialog.cpp
+++ b/src/gui/edit_tandem_preset_dialog/edittandempresetdialog.cpp
@@ -172,20 +172,50 @@ void EditTandemPresetDialog::doHelp() {
     QObject *senderObj = sender();
     QString senderObjName = senderObj->objectName();
     qDebug() << "EditTandemPresetDialog::doHelp begin " << senderObjName;
+    QFile html_doc;
     if(senderObjName == "parent_ion_window_unit_push_button")
     {
         //spmmeu.html
+        html_doc.setFileName(":/tandem/resources/html_doc/spmmeu.html");
+    }
+    if(senderObjName == "smpc_push_button")
+    {
+        //spmmeu.html
+        html_doc.setFileName(":/tandem/resources/html_doc/smpc.html");
+    }
+    if(senderObjName == "spmmem_push_button")
+    {
+        html_doc.setFileName(":/tandem/resources/html_doc/spmmem.html");
+    }
+    if(senderObjName == "spmmep_push_button")
+    {
+        html_doc.setFileName(":/tandem/resources/html_doc/spmmep.html");
+    }
+    if(senderObjName == "spmmie_push_button")
+    {
+        html_doc.setFileName(":/tandem/resources/html_doc/spmmie.html");
+    }
+    if(senderObjName == "sfmt_push_button")
+    {
+        html_doc.setFileName(":/tandem/resources/html_doc/sfmt.html");
+    }
+    if(senderObjName == "sfmmeu_push_button")
+    {
+        html_doc.setFileName(":/tandem/resources/html_doc/sfmmeu.html");
+    }
+    if(senderObjName == "sfmme_push_button")
+    {
+        html_doc.setFileName(":/tandem/resources/html_doc/sfmme.html");
+    }
+    
 
-        QFile html_doc(":/tandem/resources/html_doc/spmmeu.html");
-        if (html_doc.open(QFile::ReadOnly | QFile::Text)) {
-            QTextStream in(&html_doc);
-            ui->doc_plain_text_edit->setHtml(in.readAll());
-            qDebug() << "EditTandemPresetDialog::doHelp doc " << in.readAll();
-        }
-        else {
-            qDebug() << "EditTandemPresetDialog::doHelp doc not found";
-        }
-
+    if (html_doc.open(QFile::ReadOnly | QFile::Text)) {
+        QTextStream in(&html_doc);
+        ui->doc_plain_text_edit->setHtml(in.readAll());
+        qDebug() << "EditTandemPresetDialog::doHelp doc " << in.readAll();
+    }
+    else {
+        qDebug() << "EditTandemPresetDialog::doHelp doc not found";
     }
     qDebug() << "EditTandemPresetDialog::doHelp end " << senderObjName;
 }
@@ -201,6 +231,12 @@ void EditTandemPresetDialog::readUi() {
 
         _tandem_params.setParamLabelValue("spectrum, parent monoisotopic mass isotope error", ui->anticipate_carbon_combo_box->currentText());
 
+        _tandem_params.setParamLabelValue("spectrum, maximum parent charge", ui->smpc_edit->text());
+
+        _tandem_params.setParamLabelValue("spectrum, fragment mass type", ui->sfmt_combo_box->currentText());
+
+        _tandem_params.setParamLabelValue("spectrum, fragment monoisotopic mass error units", ui->sfmmeu_combo_box->currentText());
+        _tandem_params.setParamLabelValue("spectrum, fragment monoisotopic mass error", ui->sfmme_edit->text());
     }
     catch (pappso::PappsoException & error) {
         QMessageBox::warning(this,tr("Error in parameters :"), error.qwhat());
@@ -229,5 +265,21 @@ void EditTandemPresetDialog::populate() {
     if ( index != -1 ) { // -1 for not found
         ui->anticipate_carbon_combo_box->setCurrentIndex(index);
     }
+    //<note type="input" label="spectrum, maximum parent charge">4</note>
+    ui->smpc_edit->setText(_tandem_params.getValue("spectrum, maximum parent charge"));
+
+    //<note type="input" label="spectrum, fragment mass type">monoisotopic</note>
+    index = ui->sfmt_combo_box->findText("monoisotopic");
+    if ( index != -1 ) { // -1 for not found
+        ui->sfmt_combo_box->setCurrentIndex(index);
+    }
+    //<note type="input" label="spectrum, fragment monoisotopic mass error units">Daltons</note>
+    index = ui->sfmmeu_combo_box->findText(_tandem_params.getValue("spectrum, fragment monoisotopic mass error units"));
+    if ( index != -1 ) { // -1 for not found
+        ui->sfmmeu_combo_box->setCurrentIndex(index);
+    }
+    //<note type="input" label="spectrum, fragment monoisotopic mass error">0.02</note>
+    ui->sfmme_edit->setText(_tandem_params.getValue("spectrum, fragment monoisotopic mass error"));
+
     qDebug() << "EditTandemPresetDialog::populate end";
 }
-- 
GitLab