From 608dea92f0a71b4283a9302ddd3447b15c4dc4ad Mon Sep 17 00:00:00 2001 From: Olivier Langella <olivier.langella@u-psud.fr> Date: Thu, 21 Dec 2017 10:03:07 +0100 Subject: [PATCH] export MassChroqPRM files --- src/CMakeLists.txt | 1 + src/gui/main.ui | 25 +++++++++++++- src/gui/mainwindow.cpp | 28 ++++++++++++++++ src/gui/mainwindow.h | 2 ++ src/gui/workerthread.cpp | 16 +++++++++ src/gui/workerthread.h | 1 + src/output/masschroqprm.cpp | 65 ++++++++++++++++++++----------------- src/output/masschroqprm.h | 11 +------ 8 files changed, 109 insertions(+), 40 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d576d6d8c..78e9cbc05 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -101,6 +101,7 @@ SET(CPP_FILES output/ods/simplesheet.cpp output/ods/spectrasheet.cpp output/masschroqml.cpp + output/masschroqprm.cpp output/proticdbml.cpp output/xpip.cpp utils/fastafilestore.cpp diff --git a/src/gui/main.ui b/src/gui/main.ui index b7bcf9354..f3387e1bd 100644 --- a/src/gui/main.ui +++ b/src/gui/main.ui @@ -67,6 +67,7 @@ </property> <addaction name="actionFasta"/> <addaction name="actionMassChroQ"/> + <addaction name="actionMassChroqPRM"/> <addaction name="actionSpreadsheet"/> <addaction name="actionProticDb"/> <addaction name="action_spectral_counting_mcq"/> @@ -163,7 +164,12 @@ </action> <action name="action_save_project"> <property name="text"> - <string>Save project</string> + <string>&Save project</string> + </property> + </action> + <action name="actionMassChroqPRM"> + <property name="text"> + <string>MassChroqPRM</string> </property> </action> </widget> @@ -427,6 +433,22 @@ </hint> </hints> </connection> + <connection> + <sender>actionMassChroqPRM</sender> + <signal>triggered()</signal> + <receiver>Main</receiver> + <slot>doActionMassChroqPRM()</slot> + <hints> + <hint type="sourcelabel"> + <x>-1</x> + <y>-1</y> + </hint> + <hint type="destinationlabel"> + <x>231</x> + <y>191</y> + </hint> + </hints> + </connection> </connections> <slots> <slot>selectXpipFile()</slot> @@ -442,5 +464,6 @@ <slot>doActionAbout()</slot> <slot>doActionTandemRun()</slot> <slot>doActionSaveProject()</slot> + <slot>doActionMassChroqPRM()</slot> </slots> </ui> diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 5b22c3743..2c511d6ef 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -464,6 +464,34 @@ void MainWindow::doActionMassChroQ() { qDebug() << "MainWindow::doActionMassChroQ end"; } +void MainWindow::doActionMassChroqPRM() { + qDebug() << "MainWindow::doActionMassChroqPRM begin"; + try { + _project_sp.get()->checkPsimodCompliance(); + + QSettings settings; + QString default_location = settings.value("path/mcqprmfile", "").toString(); + + QString filename = QFileDialog::getSaveFileName(this, tr("Save MassChroqPRM file"), + QString("%1/untitled.masschroqprm").arg(default_location), + tr("MassChroqPRM (*.masschroqprm)")); + + if (filename.isEmpty()) { + return; + } + + settings.setValue("path/mcqprmfile", QFileInfo(filename).absolutePath()); + + showWaitingMessage(tr("Writing %1 MassChroqPRM file").arg(QFileInfo(filename).fileName())); + emit operateWritingMassChroqPrmFile(filename, _project_sp); + //emit operateXpipFile(filename); + } + catch (pappso::PappsoException & error) { + viewError(tr("Error while writing MassChroqML file :\n%1").arg(error.qwhat())); + } + qDebug() << "MainWindow::doActionMassChroqPRM end"; +} + void MainWindow::doActionProticDb() { qDebug() << "MainWindow::doActionProticDb begin"; try { diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index 2ee0090c1..629751d03 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -69,6 +69,7 @@ public slots: void doActionQuit(); void doActionFasta(); void doActionMassChroQ(); + void doActionMassChroqPRM(); void doActionProticDb(); void doActionLabelingMethods(); void doActionTandemRun(); @@ -99,6 +100,7 @@ signals: void operateWritingXpipFile(QString filename, ProjectSp project_sp); void operateWritingOdsFile(QString filename, ProjectSp project_sp); void operateWritingMassChroqFile(QString filename, ProjectSp project_sp); + void operateWritingMassChroqPrmFile(QString filename, ProjectSp project_sp); void operateWritingProticFile(QString filename, ProjectSp project_sp); void operateGrouping(ProjectSp project_sp); void operateRunningXtandem(TandemRunBatch tandem_run_batch); diff --git a/src/gui/workerthread.cpp b/src/gui/workerthread.cpp index 47ea9ae0d..55561bb88 100644 --- a/src/gui/workerthread.cpp +++ b/src/gui/workerthread.cpp @@ -32,6 +32,7 @@ #include <pappsomspp/pappsoexception.h> #include <QDebug> #include "../output/masschroqml.h" +#include "../output/masschroqprm.h" #include "../output/proticdbml.h" #include "../output/ods/odsexport.h" #include "../output/xpip.h" @@ -73,6 +74,7 @@ WorkerThread::WorkerThread(MainWindow * p_main_window) connect(this, &WorkerThread::groupingFinished, p_main_window,&MainWindow::doGroupingFinished); //masschroq write connect(p_main_window, &MainWindow::operateWritingMassChroqFile, this,&WorkerThread::doWritingMassChroqFile); + connect(p_main_window, &MainWindow::operateWritingMassChroqPrmFile, this,&WorkerThread::doWritingMassChroqPrmFile); //protic write connect(p_main_window, &MainWindow::operateWritingProticFile, this,&WorkerThread::doWritingProticFile); //writing ODS file : @@ -306,6 +308,20 @@ void WorkerThread::doWritingMassChroqFile(QString filename, ProjectSp project_sp } } +void WorkerThread::doWritingMassChroqPrmFile(QString filename, ProjectSp project_sp) { + + try { + emit loadingMessage(tr("writing MassChroqPRM file, please wait")); + MassChroqPrm output(filename); + output.write(project_sp); + output.close(); + emit operationFinished(); + } + catch (pappso::PappsoException & error) { + emit operationFailed(tr("Error while writing MassChroqPRM file :\n%1").arg(error.qwhat())); + } +} + void WorkerThread::doWritingProticFile(QString filename, ProjectSp project_sp) { try { diff --git a/src/gui/workerthread.h b/src/gui/workerthread.h index dd120d7a1..35ccd0e1d 100644 --- a/src/gui/workerthread.h +++ b/src/gui/workerthread.h @@ -61,6 +61,7 @@ public slots: void doWritingXpipFile(QString filename, ProjectSp project_sp); void doWritingOdsFile(QString filename, ProjectSp project_sp); void doWritingMassChroqFile(QString filename, ProjectSp project_sp); + void doWritingMassChroqPrmFile(QString filename, ProjectSp project_sp); void doWritingProticFile(QString filename, ProjectSp project_sp); void doGrouping(ProjectSp project_sp); void doGroupingOnIdentification(IdentificationGroup * p_identification_group, GroupingType grouping_type); diff --git a/src/output/masschroqprm.cpp b/src/output/masschroqprm.cpp index 1bde93c9c..8f5c272c9 100644 --- a/src/output/masschroqprm.cpp +++ b/src/output/masschroqprm.cpp @@ -29,6 +29,7 @@ #include "masschroqprm.h" #include <pappsomspp/pappsoexception.h> +#include <pappsomspp/utils.h> MassChroqPrm::MassChroqPrm(const QString & out_filename) { //_p_digestion_pipeline = p_digestion_pipeline; @@ -73,7 +74,7 @@ void MassChroqPrm::write(ProjectSp sp_project) { //<masschroq> _output_stream->writeStartElement("masschroqprm"); /* - * + * <parameters> <parentIonMassTolerance> <daltonPrecision value="1.5"/> @@ -102,6 +103,7 @@ void MassChroqPrm::write(ProjectSp sp_project) { } void MassChroqPrm::writePeptides() { + /* * * @@ -112,36 +114,42 @@ void MassChroqPrm::writePeptides() { _output_stream->writeStartElement("peptideList"); - for (IdentificationGroup * p_ident_group : _sp_project.get()->getIdentificationGroupList()) { - for () { - PeptideMassSet pepMassSet = new PeptideMassSet(); - - logger.debug("pepMassSet size : " + pepMassSet.size()); - - logger.debug("pepMassSet numbering"); - pepMassSet.numberingGetPepMass2PeptideList(group); - - // iterated current pepid to write buffer peptide element - for (PeptideMass pepMass : pepMassSet) { - _output_stream->writeStartElement("peptide"); - _output_stream->writeAttribute("id", - Utils.getPappsoPeptideMassId(group, pepMass)); - Peptide bestPeptide = pepMass.getBestEvaluePeptide(); - _output_stream->writeAttribute("seq", bestPeptide.getSequence()); - - ArrayList<Modifs> arrModif = bestPeptide.get_Modifs(); - for (Modifs modif : arrModif) { - _output_stream->writeStartElement("psimod"); - _output_stream->writeAttribute("at", "" + modif.get_posi()); - - _output_stream->writeAttribute("acc", "" - + modif.getPsiMod().getAccession()); - _output_stream->writeEndElement(); + for (IdentificationDataSourceSp identification_data_source_sp :_sp_project.get()->getIdentificationDataSourceStore().getIdentificationDataSourceList()) { + for (const PeptideEvidenceSp & peptide_evidence_sp: identification_data_source_sp.get()->getPeptideEvidenceStore().getPeptideEvidenceList()) { + const pappso::GrpPeptide * p_grp_peptide =peptide_evidence_sp.get()->getGrpPeptideSp().get(); + + if (p_grp_peptide != nullptr) { + std::set<const pappso::GrpPeptide *> _already_writed; + if (_already_writed.find(p_grp_peptide) == _already_writed.end()) { + _already_writed.insert(p_grp_peptide); + PeptideXtp * p_peptide = peptide_evidence_sp.get()->getPeptideXtpSp().get(); + _output_stream->writeStartElement("peptide"); + _output_stream->writeAttribute("id",p_grp_peptide->getGroupingId()); + _output_stream->writeAttribute("seq", p_peptide->getSequence()); + + + unsigned int i=0; + for (const pappso::Aa & amino_acid: *p_peptide) { + + std::list<pappso::AaModificationP> aa_modif_list = amino_acid.getModificationList(); + + + for (auto && aa_modif : aa_modif_list) { + if (!aa_modif->isInternal()) { + _output_stream->writeStartElement("psimod"); + _output_stream->writeAttribute("acc", aa_modif->getAccession()); + _output_stream->writeAttribute("at", QString ("%1").arg(i)); + _output_stream->writeEndElement();// mod + } + } + i++; + } + _output_stream->writeEndElement(); + } } - _output_stream->writeEndElement(); } - } + //peptideList _output_stream->writeEndElement(); } catch (pappso::PappsoException &error) @@ -152,6 +160,5 @@ void MassChroqPrm::writePeptides() { { throw pappso::PappsoException(QObject::tr("Error in MassChroqPrm::writePeptides stdex :\n%1").arg(error.what())); } -} } diff --git a/src/output/masschroqprm.h b/src/output/masschroqprm.h index 31aca8f40..bc2e8e04c 100644 --- a/src/output/masschroqprm.h +++ b/src/output/masschroqprm.h @@ -45,16 +45,7 @@ class MassChroqPrm void write(ProjectSp sp_project); void close(); private: - void writeGroups(); - void writeProteinList(); - void writePeptideList(); - void writePeptideListInGroup(const GroupingGroup * p_group); - void writeIsotopeLabelList(); - void writeAlignments(); - void writeQuantificationMethods(); - void writeQuantificationResults(); - void writeQuantificationTraces(); - void writeQuantify(); + void writePeptides(); private : QFile * _output_file; -- GitLab