From e0594bd8e4d2d8ce2b6c1ed0b80e55297a619d7d Mon Sep 17 00:00:00 2001
From: Olivier Langella <Olivier.Langella@moulon.inra.fr>
Date: Tue, 9 May 2017 17:20:21 +0200
Subject: [PATCH] store mz format

---
 src/core/msrun.cpp         | 12 +++++++++---
 src/core/msrun.h           |  1 +
 src/utils/readspectrum.cpp | 19 ++++++++++++++++---
 src/utils/readspectrum.h   |  2 ++
 src/utils/types.h          |  2 ++
 5 files changed, 30 insertions(+), 6 deletions(-)

diff --git a/src/core/msrun.cpp b/src/core/msrun.cpp
index 57ee5eb02..52a6c8998 100644
--- a/src/core/msrun.cpp
+++ b/src/core/msrun.cpp
@@ -49,9 +49,9 @@ MsRun::~MsRun() {
 }
 
 
-    const QString & MsRun::getSampleName() const {
-        return _name;
-    }
+const QString & MsRun::getSampleName() const {
+    return _name;
+}
 
 void MsRun::setFilename(const QString filename) {
     _location = filename;
@@ -69,3 +69,9 @@ const QString & MsRun::getFilename() const {
 MzFormat MsRun::getMzFormat() const {
     return _mz_format;
 }
+
+
+void MsRun::setMzFormat(MzFormat mz_format) {
+    _mz_format = mz_format;
+}
+
diff --git a/src/core/msrun.h b/src/core/msrun.h
index 25ad79b76..a389390a0 100644
--- a/src/core/msrun.h
+++ b/src/core/msrun.h
@@ -54,6 +54,7 @@ public:
     const QString & getXmlId() const;
     
     MzFormat getMzFormat() const;
+    void setMzFormat(MzFormat mz_format);
 private :
     QString _xml_id;
     QString _location;
diff --git a/src/utils/readspectrum.cpp b/src/utils/readspectrum.cpp
index b04825222..4bece5340 100644
--- a/src/utils/readspectrum.cpp
+++ b/src/utils/readspectrum.cpp
@@ -27,6 +27,7 @@
 #include <QSettings>
 #include <QFileInfo>
 #include <QDir>
+#include <QString>
 #include <pappsomspp/spectrum/spectrum.h>
 #include <pappsomspp/exception/exceptionnotfound.h>
 
@@ -58,6 +59,20 @@ pwiz::msdata::MSDataFile * getPwizMSDataFile(const QString & filename) {
     return dataFile;
 }
 
+MzFormat getPwizMSDataFileFormat(pwiz::msdata::MSDataFile * p_ms_data_file) {
+    pwiz::msdata::CVID native_id_format = pwiz::msdata::id::getDefaultNativeIDFormat(*p_ms_data_file);
+    if (native_id_format ==  pwiz::cv::CVID::MS_Mascot_MGF_format) {
+        return MzFormat::MGF;
+    }
+    if (native_id_format ==  pwiz::cv::CVID::MS_mzML_format) {
+        return MzFormat::mzML;
+    }
+    if (native_id_format ==  pwiz::cv::CVID::MS_ISB_mzXML_format) {
+        return MzFormat::mzXML;
+    }
+    throw pappso::PappsoException(QObject::tr(" pwiz::msdata::CVID native_id_format %1 not found").arg(native_id_format));
+    return MzFormat::unknown;
+}
 
 SpectrumSp getSpectrumSpFromPwizMSDataFile(pwiz::msdata::MSDataFile * p_ms_data_file, unsigned int scan_num, unsigned int & precursor_charge_state) {
 
@@ -75,9 +90,6 @@ SpectrumSp getSpectrumSpFromPwizMSDataFile(pwiz::msdata::MSDataFile * p_ms_data_
     else {
         // turn our scan numbers into navtieId strings for pwiz
         native_id_format = pwiz::msdata::id::getDefaultNativeIDFormat(*p_ms_data_file);
-        if (native_id_format ==  pwiz::cv::CVID::MS_Mascot_MGF_format) {
-            scan_num = scan_num-1;
-        }
         string nativeScanId = pwiz::msdata::id::translateScanNumberToNativeID(native_id_format, QString("%1").arg(scan_num).toStdString());
         spectrum_index = spectrum_list_ptr.get()->find(nativeScanId);
     }
@@ -202,6 +214,7 @@ pappso::SpectrumSp SpectrumStore::getSpectrumSpFromMsRunSp(MsRunSp msrun, unsign
         }
         msrun.get()->setFilename(mz_file);
         p_msdatafile = getPwizMSDataFile(mz_file);
+        msrun.get()->setMzFormat(getPwizMSDataFileFormat(p_msdatafile));
         _map_msrun_msdatafile.insert(std::pair<MsRunSp, pwiz::msdata::MSDataFile *>(msrun, p_msdatafile));
     }
     else {
diff --git a/src/utils/readspectrum.h b/src/utils/readspectrum.h
index 89eee5bf7..1643e3942 100644
--- a/src/utils/readspectrum.h
+++ b/src/utils/readspectrum.h
@@ -36,6 +36,8 @@ pwiz::msdata::MSDataFile * getPwizMSDataFile(const QString & filename);
 
 pappso::SpectrumSp getSpectrumSpFromPwizMSDataFile(pwiz::msdata::MSDataFile * p_ms_data_file, unsigned int scan_num, unsigned int & precursor_charge_state);
 
+MzFormat getPwizMSDataFileFormat(pwiz::msdata::MSDataFile * p_ms_data_file);
+
 class SpectrumStore {
 public:
     static pappso::SpectrumSp getSpectrumSpFromMsRunSp(MsRunSp msrun, unsigned int scan_num);
diff --git a/src/utils/types.h b/src/utils/types.h
index 7244df994..432f5e157 100644
--- a/src/utils/types.h
+++ b/src/utils/types.h
@@ -66,8 +66,10 @@ enum class GroupingType {
  */
 
 enum class MzFormat {
+     unknown, ///< unknown format
      mzML, ///< mzML
      mzXML, ///< mzXML
+     MGF, ///< Mascot format
 };
 
 /** \def ValidationState
-- 
GitLab