diff --git a/src/core/identification_sources/identificationpwizfile.cpp b/src/core/identification_sources/identificationpwizfile.cpp index c05a5855e25fd834814abe0242838f417833a460..ca1dfdb3f783a67b4118c5dcd0073c30f2ea5f65 100644 --- a/src/core/identification_sources/identificationpwizfile.cpp +++ b/src/core/identification_sources/identificationpwizfile.cpp @@ -36,6 +36,7 @@ IdentificationPwizFile::IdentificationPwizFile(const QFileInfo & ident_file) : IdentificationDataSource(ident_file.absoluteFilePath()), _ident_file(ident_file) { //_engine = IdentificationEngine::XTandem; + _engine = IdentificationEngine::peptider; } IdentificationPwizFile::IdentificationPwizFile(const IdentificationPwizFile& other) : IdentificationDataSource(other),_ident_file (other._ident_file) @@ -60,7 +61,7 @@ pappso::SpectrumSp IdentificationPwizFile::getSpectrumSp(unsigned int scan_numbe void IdentificationPwizFile::parseTo(Project* p_project) { - qDebug() << "Project::readXpipFile begin"; + qDebug() << "IdentificationPwizFile::parseTo begin"; IdentificationPwizReader pwiz_reader(_ident_file); @@ -91,6 +92,7 @@ void IdentificationPwizFile::parseTo(Project* p_project) { pwiz_reader.read(this, p_project, identification_group_p); + qDebug() << "IdentificationPwizFile::parseTo end"; // throw pappso::PappsoException(QObject::tr("Error reading %1 XPIP file :\n %2").arg(_xtandem_file.absoluteFilePath()).arg(parser->errorString())); diff --git a/src/core/identification_sources/identificationxtandemfile.cpp b/src/core/identification_sources/identificationxtandemfile.cpp index 1555984d040d2ef607b4576f1aa0954a40978342..aa5bcdb29efd9e1d7e43fb22fee1c150f2250f85 100644 --- a/src/core/identification_sources/identificationxtandemfile.cpp +++ b/src/core/identification_sources/identificationxtandemfile.cpp @@ -52,7 +52,7 @@ pappso::SpectrumSp IdentificationXtandemFile::getSpectrumSp(unsigned int scan_nu void IdentificationXtandemFile::parseTo(Project* p_project) { - qDebug() << "Project::readXpipFile begin"; + qDebug() << "IdentificationXtandemFile::parseTo begin"; qDebug() << "Read X!Tandem XML result file '" << _xtandem_file.absoluteFilePath() << "'"; @@ -104,4 +104,5 @@ void IdentificationXtandemFile::parseTo(Project* p_project) { throw pappso::PappsoException(QObject::tr("Error reading %1 XPIP file :\n %2").arg(_xtandem_file.absoluteFilePath()).arg(parser->errorString())); } + qDebug() << "IdentificationXtandemFile::parseTo end"; } diff --git a/src/core/peptidematch.cpp b/src/core/peptidematch.cpp index d2e718d733c1ab58c66cb402186c0bc90c088e0b..712b9e2f88c8f5806c7fa413ef61821032a5633d 100644 --- a/src/core/peptidematch.cpp +++ b/src/core/peptidematch.cpp @@ -32,6 +32,21 @@ PeptideMatch::PeptideMatch(MsRun * msrunid_sp, unsigned int scan) { _hash_sample_scan = PeptideMatch::_hash_fn (QString("%1 %2").arg(msrunid_sp->getXmlId()).arg(_scan).toStdString()); } +PeptideMatch::PeptideMatch(const PeptideMatch & other): PeptideMatch(other._msrunid_sp, other._scan) { + _hash_sample_scan = other._hash_sample_scan; + _sp_grp_peptide = other._sp_grp_peptide; + _peptide_sp = other._peptide_sp; + _rt = other._rt; + _evalue = other._evalue; + _exp_mass = other._exp_mass; + _start=other._start; + _charge= other._charge; + _p_identification_source = other._p_identification_source; + _params = other._params; + _checked = other._checked; + _proxy_valid = other._proxy_valid; +} + void PeptideMatch::updateAutomaticFilters(const AutomaticFilterParameters & automatic_filter_parameters) { _proxy_valid = false; diff --git a/src/core/peptidematch.h b/src/core/peptidematch.h index 93b6d92ececb2b0e8908c602f02a462836297ec1..29b290a3949db2b6c8d4a991a6c3a576f1d6a54f 100644 --- a/src/core/peptidematch.h +++ b/src/core/peptidematch.h @@ -35,6 +35,7 @@ class PeptideMatch { public : PeptideMatch(MsRun * msrunid_sp, unsigned int scan); + PeptideMatch(const PeptideMatch & other); std::size_t getHashSampleScan() const; std::size_t getHashPeptideMassSample() const; diff --git a/src/core/project.cpp b/src/core/project.cpp index cb5d7b6a730c0f1cdd46a638a3bf66a104cedfc9..07eea92fbcd354f31241c40d3df26b5e388bde0f 100644 --- a/src/core/project.cpp +++ b/src/core/project.cpp @@ -24,6 +24,7 @@ #include "../input/xpipsaxhandler.h" #include "peptidematch.h" #include "proteinmatch.h" +#include <QDebug> Project::Project() { @@ -46,6 +47,7 @@ void Project::readResultFile(QString filename) { IdentificationDataSourceSp ident_source = _identification_data_source_store.getInstance(filename); ident_source.get()->parseTo(this); + qDebug() << "Project::readResultFile end"; } bool Project::isCombineMode() const { @@ -92,11 +94,14 @@ const AutomaticFilterParameters & Project::getAutomaticFilterParameters() const return _automatic_filter_parameters; } void Project::updateAutomaticFilters(const AutomaticFilterParameters & automatic_filter_parameters) { + + qDebug() << "Project::updateAutomaticFilters begin"; _automatic_filter_parameters = automatic_filter_parameters; for (auto & p_id_group : _identification_goup_list) { p_id_group->updateAutomaticFilters(_automatic_filter_parameters); } + qDebug() << "Project::updateAutomaticFilters end"; } ProjectSp Project::makeProjectSp() const { return std::make_shared<Project>(*this); diff --git a/src/gui/workerthread.cpp b/src/gui/workerthread.cpp index 3ff811aa1ff7d93f8349385196c64ec692e6d6bd..7bc526d66cd13f88c5408e9b59617007cce10704 100644 --- a/src/gui/workerthread.cpp +++ b/src/gui/workerthread.cpp @@ -41,7 +41,7 @@ WorkerThread::WorkerThread(MainWindow * p_main_window) { qDebug() << "WorkerThread::WorkerThread begin MainWindow"; - + _p_work_monitor = new WorkMonitor(); #if QT_VERSION >= 0x050000 @@ -53,7 +53,7 @@ WorkerThread::WorkerThread(MainWindow * p_main_window) */ #else // Qt4 code - //worker message + //worker message connect(_p_work_monitor, SIGNAL(workerMessage(QString)), p_main_window,SLOT(doDisplayLoadingMessage(QString))); connect(_p_work_monitor, SIGNAL(workerMessage(QString, int)), p_main_window,SLOT(doDisplayLoadingMessage(QString, int))); @@ -87,7 +87,7 @@ WorkerThread::WorkerThread(MainWindow * p_main_window) WorkerThread::WorkerThread(ProjectWindow * p_project_window) { qDebug() << "WorkerThread::WorkerThread begin ProjectWindow"; - + _p_work_monitor = new WorkMonitor(); #if QT_VERSION >= 0x050000 @@ -95,8 +95,8 @@ WorkerThread::WorkerThread(ProjectWindow * p_project_window) #else // Qt4 code qDebug() << "WorkerThread::WorkerThread Qt4 code"; - - //worker message + + //worker message connect(_p_work_monitor, SIGNAL(workerMessage(QString)), p_project_window,SLOT(doDisplayLoadingMessage(QString))); connect(_p_work_monitor, SIGNAL(workerMessage(QString, int)), p_project_window,SLOT(doDisplayLoadingMessage(QString, int))); @@ -104,16 +104,16 @@ WorkerThread::WorkerThread(ProjectWindow * p_project_window) //grouping connect(p_project_window, SIGNAL(operateGrouping(ProjectSp)), this,SLOT(doGrouping(ProjectSp))); connect(this, SIGNAL(groupingFinished()), p_project_window,SLOT(doGroupingFinished())); - - - //PTM grouping on IdentificationGroup + + + //PTM grouping on IdentificationGroup connect(p_project_window, SIGNAL(operatePtmGroupingOnIdentification(IdentificationGroup *)), this,SLOT(doPtmGroupingOnIdentification(IdentificationGroup *))); connect(this, SIGNAL(ptmGroupingOnIdentificationFinished(IdentificationGroup *)), p_project_window,SLOT(refreshPtmGroup(IdentificationGroup *))); //grouping on IdentificationGroup connect(p_project_window, SIGNAL(operateGroupingOnIdentification(IdentificationGroup *, GroupingType)), this,SLOT(doGroupingOnIdentification(IdentificationGroup *, GroupingType))); connect(this, SIGNAL(groupingOnIdentificationFinished(IdentificationGroup *)), p_project_window,SLOT(refreshGroup(IdentificationGroup *))); - + connect(this, SIGNAL(operationFailed(QString)), p_project_window,SLOT(doOperationFailed(QString))); connect(this, SIGNAL(operationFinished()), p_project_window,SLOT(doOperationFinished())); @@ -277,6 +277,7 @@ void WorkerThread::doLoadingResults(bool is_individual, AutomaticFilterParameter emit loadingMessage(tr("filtering proteins")); project_sp.get()->updateAutomaticFilters(param); + qDebug() << "WorkerThread::doLoadingResults emit projectReady(project_sp) "; emit projectReady(project_sp); } diff --git a/src/input/identificationpwizreader.cpp b/src/input/identificationpwizreader.cpp index f39039bbbb8f430807c6840dd4f44f89ea3f8faf..171cd7abfd97925a22c201b3026a495ec0e9629f 100644 --- a/src/input/identificationpwizreader.cpp +++ b/src/input/identificationpwizreader.cpp @@ -35,6 +35,7 @@ #include <QDir> #include <QString> #include <pappsomspp/pappsoexception.h> +#include <pappsomspp/exception/exceptionoutofrange.h> #include <pwiz/data/identdata/IdentData.hpp> #include <pwiz/data/identdata/IdentDataFile.hpp> @@ -98,7 +99,7 @@ void IdentificationPwizReader::read( try { ProteinStore & protein_store = _p_project->getProteinStore(); PeptideStore & peptide_store = _p_project->getPeptideStore(); - std::map<QString, ProteinXtpSp> map_id2protein; + std::map<QString, ProteinMatch *> map_id2protein; std::map<QString, PeptideXtpSp> map_id2peptide; for (pwiz::identdata::DBSequencePtr seq_ptr :_pwiz_ident_data_file->sequenceCollection.dbSequences) { @@ -109,7 +110,15 @@ void IdentificationPwizReader::read( protein.setSequence(QString::fromStdString( sequence_pwiz->seq)); ProteinXtpSp protein_sp(protein.makeProteinXtpSp()); protein_sp = protein_store.getInstance(protein_sp); - map_id2protein.insert(std::pair<QString, ProteinXtpSp>(QString::fromStdString( sequence_pwiz->id), protein_sp)); + + + ProteinMatch * protein_match_p = _p_identification_group->getProteinMatchInstance(protein_sp.get()->getAccession()); + protein_match_p->setProteinXtpSp(protein_sp); + protein_match_p->setChecked(true); + + + map_id2protein.insert(std::pair<QString, ProteinMatch *>(QString::fromStdString( sequence_pwiz->id), protein_match_p)); + } for (pwiz::identdata::PeptidePtr seq_ptr :_pwiz_ident_data_file->sequenceCollection.peptides) { @@ -136,7 +145,6 @@ void IdentificationPwizReader::read( throw pappso::PappsoException(QObject::tr("Scan number not found")); } //<cvParam accession="MS:1001115" cvRef="PSI-MS" value="4925" name="scan number(s)"/> - PeptideMatch * p_peptide_match = new PeptideMatch(_sp_msrun.get(), scan); double rt=0; @@ -144,30 +152,61 @@ void IdentificationPwizReader::read( { rt = std::stod(spectrum_ptr.get()->cvParam(pwiz::cv::MS_retention_time).value); - p_peptide_match->setRetentionTime(rt); } else { //throw pappso::PappsoException(QObject::tr("Scan number not found")); } - /* - p_peptide_match->setEvalue(attributes.value("expect").simplified().toDouble()); - //qDebug() << "XtandemSaxHandler::startElement_domain evalue " << _p_peptide_match->getEvalue() << " scan " << _p_peptide_match->getScan(); - pappso::pappso_double xtandem_mhtheo = attributes.value("mh").simplified().toDouble(); - pappso::pappso_double xtandem_delta = attributes.value("delta").simplified().toDouble(); - - pappso::pappso_double exp_mass = xtandem_mhtheo + xtandem_delta - pappso::MHPLUS; - - p_peptide_match->setExperimentalMass(exp_mass); - p_peptide_match->setStart(attributes.value("start").simplified().toUInt()-1); - p_peptide_match->setCharge(_charge); - - p_peptide_match->setParam(PeptideMatchParam::tandem_hyperscore, QVariant( attributes.value("hyperscore").toDouble())); - - p_peptide_match->setIdentificationDataSource( _p_identification_data_source); - p_peptide_match->setChecked(true); - _p_protein_match->addPeptideMatch(p_peptide_match); - */ + //<SpectrumIdentificationItem passThreshold="true" rank="1" + //experimentalMassToCharge="388.2189331" id="sii2" chargeState="2" calculatedMassToCharge="388.2161235"> + + // <PeptideEvidenceRef peptideEvidence_ref="dbseq821_pep947_414"/> + // <PeptideEvidenceRef peptideEvidence_ref="dbseq821_pep947_414"/> + // <cvParam accession="MS:1001330" cvRef="PSI-MS" value="0.000452757388" name="X!Tandem:expect"/> + //<cvParam accession="MS:1001331" cvRef="PSI-MS" value="24.275219" name="X!Tandem:hyperscore"/> + // </SpectrumIdentificationItem> + for ( pwiz::identdata::SpectrumIdentificationItemPtr spid_item : spectrum_ptr.get()->spectrumIdentificationItem) { + PeptideMatch * p_peptide_match = new PeptideMatch(_sp_msrun.get(), scan); + p_peptide_match->setRetentionTime(rt); + p_peptide_match->setCharge(spid_item->chargeState); + pappso::pappso_double exp_mass = spid_item->experimentalMassToCharge * ((double) spid_item->chargeState) - (((double) spid_item->chargeState) * pappso::MHPLUS); + p_peptide_match->setExperimentalMass(exp_mass); + p_peptide_match->setIdentificationDataSource( p_identification_data_source); + + p_peptide_match->setChecked(true); + if (spectrum_ptr.get()->hasCVParam(pwiz::cv::MS_X_Tandem_expect)) + { + p_peptide_match->setEvalue(std::stod(spectrum_ptr.get()->cvParam(pwiz::cv::MS_X_Tandem_expect).value)); + } + if (spectrum_ptr.get()->hasCVParam(pwiz::cv::MS_X_Tandem_hyperscore)) + { + p_peptide_match->setParam(PeptideMatchParam::tandem_hyperscore, QVariant(std::stod(spectrum_ptr.get()->cvParam(pwiz::cv::MS_X_Tandem_hyperscore).value))); + } + + for ( pwiz::identdata::PeptideEvidencePtr peptide_evidence_sp : spid_item.get()->peptideEvidencePtr) { + PeptideMatch * p_peptide_match_from_evidence = new PeptideMatch(*p_peptide_match); + p_peptide_match_from_evidence->setStart(peptide_evidence_sp.get()->start); + + + auto it_pep = map_id2peptide.find(QString::fromStdString(peptide_evidence_sp.get()->peptidePtr.get()->id)); + if (it_pep == map_id2peptide.end()) { + throw pappso::ExceptionOutOfRange(QObject::tr("key %1 not found in map_id2peptide, reading SpectrumIdentificationItem %2") + .arg(QString::fromStdString(peptide_evidence_sp.get()->peptidePtr.get()->id)) + .arg(QString::fromStdString(spid_item.get()->id)) + ); + } + p_peptide_match->setPeptideXtpSp(it_pep->second); + + auto it = map_id2protein.find(QString::fromStdString(peptide_evidence_sp.get()->dbSequencePtr.get()->id)); + if (it == map_id2protein.end()) { + throw pappso::ExceptionOutOfRange(QObject::tr("key %1 not found in map_id2protein").arg(QString::fromStdString(peptide_evidence_sp.get()->dbSequencePtr.get()->id))); + } + ProteinMatch * protein_match_p = it->second; + + protein_match_p->addPeptideMatch(p_peptide_match_from_evidence); + } + delete p_peptide_match; + } } }