From 2b1c074a268fabcf86b6a2464ada822e316e303c Mon Sep 17 00:00:00 2001 From: Olivier Langella <olivier.langella@u-psud.fr> Date: Fri, 25 Jan 2019 16:25:05 +0100 Subject: [PATCH] new masschroqfile parameters structure to handle mcq file parameters --- src/CMakeLists.txt | 1 + .../exportmasschroqdialog.cpp | 44 +++++++++++ .../exportmasschroqdialog.h | 13 ++-- .../masschroqfileparameters.cpp | 78 +++++++++++++++++++ .../masschroqfileparameters.h | 50 ++++++++++++ src/gui/mainwindow.cpp | 26 +++---- src/gui/mainwindow.h | 2 +- src/gui/workerthread.cpp | 4 +- src/gui/workerthread.h | 3 +- src/main.cpp | 1 + src/output/masschroqml.cpp | 54 +++++++++---- src/output/masschroqml.h | 5 +- src/utils/types.h | 10 +++ 13 files changed, 253 insertions(+), 38 deletions(-) create mode 100644 src/gui/export/export_masschroq_dialog/masschroqfileparameters.cpp create mode 100644 src/gui/export/export_masschroq_dialog/masschroqfileparameters.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 681bbd3e0..963b3c076 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -174,6 +174,7 @@ SET(XTPCPP_SRCS ./gui/edit_modifications/editmodifications.cpp ./gui/edit_tandem_preset_dialog/edittandempresetdialog.cpp ./gui/export/export_masschroq_dialog/exportmasschroqdialog.cpp + ./gui/export/export_masschroq_dialog/masschroqfileparameters.cpp ./gui/export/export_spreadsheet_dialog/exportspreadsheetdialog.cpp ./gui/load_results_dialog/loadresultsdialog.cpp ./gui/mainwindow.cpp diff --git a/src/gui/export/export_masschroq_dialog/exportmasschroqdialog.cpp b/src/gui/export/export_masschroq_dialog/exportmasschroqdialog.cpp index 1d9d24108..f5172e1f0 100644 --- a/src/gui/export/export_masschroq_dialog/exportmasschroqdialog.cpp +++ b/src/gui/export/export_masschroq_dialog/exportmasschroqdialog.cpp @@ -57,3 +57,47 @@ ExportMasschroqDialog::~ExportMasschroqDialog() { delete ui; } + +void +ExportMasschroqDialog::setMasschroqFileParameters( + const MasschroqFileParameters ¶ms) +{ + ui->outputFileEdit->setText(params.result_file_name); + ui->outputFileFormatComboBox->setCurrentText("ODS"); + if(params.result_file_format == TableFileFormat::tsv) + { + ui->outputFileFormatComboBox->setCurrentText("TSV"); + } + + ui->comparFileGroupBox->setChecked(params.export_compar_file); + + ui->comparFileEdit->setText(params.compar_file_name); + ui->comparFileFormatComboBox->setCurrentText("ODS"); + if(params.compar_file_format == TableFileFormat::tsv) + { + ui->comparFileFormatComboBox->setCurrentText("TSV"); + } +} + + +MasschroqFileParameters +ExportMasschroqDialog::getMasschroqFileParameters() const +{ + MasschroqFileParameters params; + + params.result_file_name = ui->outputFileEdit->text(); + params.result_file_format = TableFileFormat::ods; + if(ui->outputFileFormatComboBox->currentText() == "TSV") + { + params.result_file_format = TableFileFormat::tsv; + } + + params.export_compar_file = ui->comparFileGroupBox->isChecked(); + params.compar_file_name = ui->comparFileEdit->text(); + params.compar_file_format = TableFileFormat::ods; + if(ui->comparFileFormatComboBox->currentText() == "TSV") + { + params.compar_file_format = TableFileFormat::tsv; + } + return params; +} diff --git a/src/gui/export/export_masschroq_dialog/exportmasschroqdialog.h b/src/gui/export/export_masschroq_dialog/exportmasschroqdialog.h index 79f4b4625..cc5ef264c 100644 --- a/src/gui/export/export_masschroq_dialog/exportmasschroqdialog.h +++ b/src/gui/export/export_masschroq_dialog/exportmasschroqdialog.h @@ -31,25 +31,28 @@ #pragma once #include <QDialog> - +#include "masschroqfileparameters.h" namespace Ui { - class ExportMasschroqDialog; +class ExportMasschroqDialog; } class ExportMasschroqDialog : public QDialog { Q_OBJECT + private: + Ui::ExportMasschroqDialog *ui; + public: explicit ExportMasschroqDialog(QWidget *parent); ~ExportMasschroqDialog(); + void setMasschroqFileParameters(const MasschroqFileParameters ¶ms); + MasschroqFileParameters getMasschroqFileParameters() const; + public slots: signals: - - private: - Ui::ExportMasschroqDialog *ui; }; diff --git a/src/gui/export/export_masschroq_dialog/masschroqfileparameters.cpp b/src/gui/export/export_masschroq_dialog/masschroqfileparameters.cpp new file mode 100644 index 000000000..bdd715819 --- /dev/null +++ b/src/gui/export/export_masschroq_dialog/masschroqfileparameters.cpp @@ -0,0 +1,78 @@ +/** + * \file gui/export/export_masschroq_dialog/masschroqfileparameters.cpp + * \date 25/01/2019 + * \author Olivier Langella + * \brief all needed informations to write a MassChroqML file + */ + +/******************************************************************************* + * Copyright (c) 2019 Olivier Langella <olivier.langella@u-psud.fr>. + * + * This file is part of XTPcpp. + * + * XTPcpp is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * XTPcpp is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XTPcpp. If not, see <http://www.gnu.org/licenses/>. + * + * Contributors: + * Olivier Langella <olivier.langella@u-psud.fr> - initial API and + *implementation + ******************************************************************************/ + +#include "masschroqfileparameters.h" +#include <QSettings> + +void +MasschroqFileParameters::save() const +{ + QSettings settings; + settings.setValue("export_masschroqml/result_file_name", + QString("%1").arg(result_file_name)); + settings.setValue("export_masschroqml/result_file_format", + (std::uint8_t)result_file_format); + + + settings.setValue("export_masschroqml/export_compar_file", + QString("%1").arg(export_compar_file)); + settings.setValue("export_masschroqml/compar_file_name", + QString("%1").arg(compar_file_name)); + settings.setValue("export_masschroqml/compar_file_format", + (std::uint8_t)compar_file_format); +} +void +MasschroqFileParameters::load() +{ + QSettings settings; + result_file_name = + settings.value("export_masschroqml/result_file_name", QString("results")) + .toString(); + result_file_format = + (TableFileFormat)settings + .value("export_masschroqml/result_file_format", + QString("%1").arg((std::uint8_t)TableFileFormat::ods)) + .toUInt(); + + + export_compar_file = + settings + .value("export_masschroqml/compar_file_name", QString("%1").arg(true)) + .toBool(); + compar_file_name = + settings + .value("export_masschroqml/compar_file_name", QString("compar_results")) + .toString(); + compar_file_format = + (TableFileFormat)settings + .value("export_masschroqml/compar_file_format", + QString("%1").arg((std::uint8_t)TableFileFormat::ods)) + .toUInt(); +} diff --git a/src/gui/export/export_masschroq_dialog/masschroqfileparameters.h b/src/gui/export/export_masschroq_dialog/masschroqfileparameters.h new file mode 100644 index 000000000..ac115eabe --- /dev/null +++ b/src/gui/export/export_masschroq_dialog/masschroqfileparameters.h @@ -0,0 +1,50 @@ +/** + * \file gui/export/export_masschroq_dialog/masschroqfileparameters.h + * \date 25/01/2019 + * \author Olivier Langella + * \brief all needed informations to write a MassChroqML file + */ + +/******************************************************************************* + * Copyright (c) 2019 Olivier Langella <olivier.langella@u-psud.fr>. + * + * This file is part of XTPcpp. + * + * XTPcpp is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * XTPcpp is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XTPcpp. If not, see <http://www.gnu.org/licenses/>. + * + * Contributors: + * Olivier Langella <olivier.langella@u-psud.fr> - initial API and + *implementation + ******************************************************************************/ + +#pragma once + +#include "../../../utils/types.h" +#include <QString> + +struct MasschroqFileParameters +{ + void save() const; + void load(); + + /** @brief quantification result output file name*/ + QString result_file_name; + + /** @brief quantification result output file type*/ + TableFileFormat result_file_format = TableFileFormat::ods; + + bool export_compar_file = false; + QString compar_file_name; + TableFileFormat compar_file_format = TableFileFormat::ods; +}; diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 8e38874ea..141abd8dd 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -35,6 +35,7 @@ #include "../utils/utils.h" #include "workerthread.h" #include "output/xpip.h" +#include "export/export_masschroq_dialog/masschroqfileparameters.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::Main) { @@ -118,6 +119,10 @@ MainWindow::~MainWindow() delete _p_load_results_dialog; delete _p_export_spreadsheet_dialog; delete _p_waiting_message_dialog; + if(_p_export_masschroq_dialog != nullptr) + { + delete _p_export_masschroq_dialog; + } qDebug() << "MainWindow::~MainWindow end"; } @@ -574,6 +579,7 @@ MainWindow::doActionMassChroQ() try { + _project_sp.get()->checkPsimodCompliance(); if(_p_export_masschroq_dialog == nullptr) { _p_export_masschroq_dialog = new ExportMasschroqDialog(this); @@ -583,9 +589,11 @@ MainWindow::doActionMassChroQ() &MainWindow::doAcceptedExportMasschroqDialog); } + MasschroqFileParameters params; + params.load(); if(_project_sp.get() != nullptr) { - //_p_export_masschroq_dialog->setProject(_project_sp.get()); + _p_export_masschroq_dialog->setMasschroqFileParameters(params); } _p_export_masschroq_dialog->show(); _p_export_masschroq_dialog->raise(); @@ -595,17 +603,6 @@ MainWindow::doActionMassChroQ() { viewError(tr("Error doActionMassChroQ :\n%1").arg(error.qwhat())); } - try - { - _project_sp.get()->checkPsimodCompliance(); - - // emit operateXpipFile(filename); - } - catch(pappso::PappsoException &error) - { - viewError( - tr("Error while writing MassChroqML file :\n%1").arg(error.qwhat())); - } qDebug() << __FILE__ << " " << __FUNCTION__ << " " << __LINE__; } @@ -617,6 +614,9 @@ MainWindow::doAcceptedExportMasschroqDialog() try { + MasschroqFileParameters params = + _p_export_masschroq_dialog->getMasschroqFileParameters(); + params.save(); QSettings settings; QString default_location = settings.value("path/mcqfile", "").toString(); @@ -635,7 +635,7 @@ MainWindow::doAcceptedExportMasschroqDialog() showWaitingMessage( tr("Writing %1 MassChroqML file").arg(QFileInfo(filename).fileName())); - emit operateWritingMassChroqFile(filename, _project_sp); + emit operateWritingMassChroqFile(filename, _project_sp, params); } catch(pappso::PappsoException &error) { diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index f3cc9cf84..c93a4cc32 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -108,7 +108,7 @@ class MainWindow : public QMainWindow void operateWritingXpipFile(QString filename, ProjectSp project_sp); void operateWritingOdsFile(QString filename, QString format, ProjectSp project_sp); - void operateWritingMassChroqFile(QString filename, ProjectSp project_sp); + void operateWritingMassChroqFile(QString filename, ProjectSp project_sp, MasschroqFileParameters params); void operateWritingMassChroqPrmFile(QString filename, ProjectSp project_sp); void operateWritingProticFile(QString filename, ProjectSp project_sp); void operateWritingMcqrSpectralCountFile(QString filename, diff --git a/src/gui/workerthread.cpp b/src/gui/workerthread.cpp index add639e0d..be10ce490 100644 --- a/src/gui/workerthread.cpp +++ b/src/gui/workerthread.cpp @@ -547,7 +547,7 @@ WorkerThread::doWritingOdsFile(QString filename, void -WorkerThread::doWritingMassChroqFile(QString filename, ProjectSp project_sp) +WorkerThread::doWritingMassChroqFile(QString filename, ProjectSp project_sp, MasschroqFileParameters params) { try @@ -555,7 +555,7 @@ WorkerThread::doWritingMassChroqFile(QString filename, ProjectSp project_sp) emit loadingMessage(tr("writing MassChroqML file, please wait")); project_sp.get()->checkPsimodCompliance(); - MassChroQml output(filename); + MassChroQml output(filename, params); output.write(project_sp); output.close(); emit operationFinished(); diff --git a/src/gui/workerthread.h b/src/gui/workerthread.h index 6bb87eaec..686485d74 100644 --- a/src/gui/workerthread.h +++ b/src/gui/workerthread.h @@ -37,6 +37,7 @@ #include "../core/project.h" #include "../utils/workmonitor.h" #include "../core/tandem_run/tandemrunbatch.h" +#include "../gui/export/export_masschroq_dialog/masschroqfileparameters.h" class MainWindow; class ProjectWindow; @@ -60,7 +61,7 @@ class WorkerThread : public QObject QStringList file_list); void doWritingXpipFile(QString filename, ProjectSp project_sp); void doWritingOdsFile(QString filename, QString format, ProjectSp project_sp); - void doWritingMassChroqFile(QString filename, ProjectSp project_sp); + void doWritingMassChroqFile(QString filename, ProjectSp project_sp, MasschroqFileParameters params); void doWritingMassChroqPrmFile(QString filename, ProjectSp project_sp); void doWritingProticFile(QString filename, ProjectSp project_sp); void doWritingMcqrSpectralCountFile(QString filename, ProjectSp project_sp); diff --git a/src/main.cpp b/src/main.cpp index 8cf6312fc..46c12fc9b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -49,6 +49,7 @@ main(int argc, char *argv[]) qRegisterMetaType<std::vector<pappso::PeptideNaturalIsotopeAverageSp>>( "std::vector<pappso::PeptideNaturalIsotopeAverageSp>"); qRegisterMetaType<ExportFastaType>("ExportFastaType"); + qRegisterMetaType<MasschroqFileParameters>("MasschroqFileParameters"); try { diff --git a/src/output/masschroqml.cpp b/src/output/masschroqml.cpp index 5c7fa74c5..bf70e81c5 100644 --- a/src/output/masschroqml.cpp +++ b/src/output/masschroqml.cpp @@ -66,7 +66,9 @@ struct McqPsimod QString accession; }; -MassChroQml::MassChroQml(const QString &out_filename) +MassChroQml::MassChroQml(const QString &out_filename, + const MasschroqFileParameters ¶ms) + : m_params(params) { //_p_digestion_pipeline = p_digestion_pipeline; @@ -186,8 +188,15 @@ MassChroQml::writeQuantificationResults() //<quantification_result output_file="result1" // format="tsv" /> _output_stream->writeStartElement("quantification_result"); - _output_stream->writeAttribute("output_file", "result1"); - _output_stream->writeAttribute("format", "tsv"); + _output_stream->writeAttribute("output_file", m_params.result_file_name); + if(m_params.result_file_format == TableFileFormat::ods) + { + _output_stream->writeAttribute("format", "ods"); + } + else + { + _output_stream->writeAttribute("format", "tsv"); + } _output_stream->writeEndElement(); //<quantification_result output_file="result2" // format="ods" /> @@ -196,10 +205,20 @@ MassChroQml::writeQuantificationResults() //<compar_result output_file="compar" // format="ods" /> - _output_stream->writeStartElement("compar_result"); - _output_stream->writeAttribute("output_file", "result1"); - _output_stream->writeAttribute("format", "ods"); - _output_stream->writeEndElement(); + if(m_params.export_compar_file) + { + _output_stream->writeStartElement("compar_result"); + _output_stream->writeAttribute("output_file", m_params.compar_file_name); + if(m_params.compar_file_format == TableFileFormat::ods) + { + _output_stream->writeAttribute("format", "ods"); + } + else + { + _output_stream->writeAttribute("format", "tsv"); + } + _output_stream->writeEndElement(); + } //</quantification_results> _output_stream->writeEndElement(); } @@ -212,8 +231,9 @@ MassChroQml::writeQuantificationTraces() _output_stream->writeStartElement("quantification_traces"); //<peptide_traces peptide_ids="pep0 pep1" output_dir="pep_traces" // format="tsv" /> - _output_stream->writeComment("<peptide_traces peptide_ids=\"pep0 pep1\" " - "output_dir=\"pep_traces\" format=\"tsv\" />"); + _output_stream->writeComment( + "<peptide_traces peptide_ids=\"pep0 pep1\" " + "output_dir=\"pep_traces\" format=\"tsv\" />"); /* <all_xics_traces output_dir="all_xics_traces" format="tsv" /> <mz_traces mz_values="634.635 449.754 552.234" output_dir="mz_traces" @@ -258,8 +278,9 @@ MassChroQml::writeQuantify() } _output_stream->writeEndElement(); - _output_stream->writeComment("<mz_list>732.317 449.754 552.234 464.251 " - "381.577 569.771 575.256</mz_list>"); + _output_stream->writeComment( + "<mz_list>732.317 449.754 552.234 464.251 " + "381.577 569.771 575.256</mz_list>"); _output_stream->writeComment( "<mzrt_list>\n <mzrt mz=\"732.317\" rt=\"230.712\" />\n <mzrt " "mz=\"575.256\" rt=\"254.788\" />\n </mzrt_list>"); @@ -356,8 +377,9 @@ MassChroQml::writeAlignments() // corrections --> _output_stream->writeStartElement("ms2"); - _output_stream->writeComment("write_time_values_output_dir=\"directory\" to " - "write retention time corrections"); + _output_stream->writeComment( + "write_time_values_output_dir=\"directory\" to " + "write retention time corrections"); //<ms2_tendency_halfwindow>10</ms2_tendency_halfwindow> _output_stream->writeStartElement("ms2_tendency_halfwindow"); _output_stream->writeCharacters("10"); @@ -455,7 +477,8 @@ MassChroQml::writePeptideListInGroup(const GroupingGroup *p_group) } // sort list - std::sort(mcq_peptide_list.begin(), mcq_peptide_list.end(), + std::sort(mcq_peptide_list.begin(), + mcq_peptide_list.end(), [](const McqPeptide &first, const McqPeptide &second) { return (first.id < second.id); }); @@ -541,7 +564,8 @@ MassChroQml::writePeptideListInGroup(const GroupingGroup *p_group) } //<observed_in data="samp0" scan="655" z="2" /> - std::sort(mcq_peptide.observed_in.begin(), mcq_peptide.observed_in.end(), + std::sort(mcq_peptide.observed_in.begin(), + mcq_peptide.observed_in.end(), [](const McqObserved &first, const McqObserved &second) { return std::tie(first.charge, first.scan, first.msrun) < std::tie(second.charge, second.scan, second.msrun); diff --git a/src/output/masschroqml.h b/src/output/masschroqml.h index bfe322690..1dffd898d 100644 --- a/src/output/masschroqml.h +++ b/src/output/masschroqml.h @@ -38,11 +38,13 @@ #include "../core/project.h" #include "../grouping/groupinggroup.h" #include "../gui/xic_view/xic_widgets/zivywidget.h" +#include "../gui/export/export_masschroq_dialog/masschroqfileparameters.h" class MassChroQml { public: - MassChroQml(const QString &out_filename); + MassChroQml(const QString &out_filename, + const MasschroqFileParameters ¶ms); ~MassChroQml(); void write(ProjectSp sp_project); @@ -61,6 +63,7 @@ class MassChroQml void writeQuantify(); private: + const MasschroqFileParameters &m_params; QFile *_output_file; QXmlStreamWriter *_output_stream; ProjectSp _sp_project; diff --git a/src/utils/types.h b/src/utils/types.h index 03d3cb6d6..6615853b2 100644 --- a/src/utils/types.h +++ b/src/utils/types.h @@ -180,4 +180,14 @@ enum class ExportFastaType : std::int8_t }; +/** \def TableFileFormat file format of tables + * + */ +enum class TableFileFormat : std::int8_t +{ + ods = 1, ///< Open Document Spreadsheet + tsv = 2, ///< tabulated separated values +}; + + #endif /* _TYPES_H_ */ -- GitLab