diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 71bd578d336578a1756d8c72fac5835c376398f5..159b03b3f21dff1f1d98b512f2626b6ff72305fe 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -28,8 +28,8 @@ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Xml_EXECUTABLE_COMPILE_FLAGS} ${Qt5 #sudo apt-get install libpappsomspp-dev #FIND_PACKAGE( Pappsomspp REQUIRED ) - SET (PAPPSOMSPP_DIR "/home/olivier/eclipse/git/pappsomspp") -# SET (PAPPSOMSPP_DIR "/home/langella/developpement/git/pappsomspp") +# SET (PAPPSOMSPP_DIR "/home/olivier/eclipse/git/pappsomspp") + SET (PAPPSOMSPP_DIR "/home/langella/developpement/git/pappsomspp") SET (PAPPSOMSPP_INCLUDE_DIR "${PAPPSOMSPP_DIR}/src") SET (PAPPSOMSPP_QT5_LIBRARY "${PAPPSOMSPP_DIR}/cbuild/src/libpappsomspp-qt5.so") SET (PAPPSOMSPP_WIDGET_QT5_LIBRARY "${PAPPSOMSPP_DIR}/cbuild/src/pappsomspp/widget/libpappsomspp-widget-qt5.so") diff --git a/src/gui/xic_view/xic_box/xicbox.cpp b/src/gui/xic_view/xic_box/xicbox.cpp index d1ef2b465db3ff4530b3c5f9360532b5730febf1..5a707ac7758454212f71d433c51557bef0f177fd 100644 --- a/src/gui/xic_view/xic_box/xicbox.cpp +++ b/src/gui/xic_view/xic_box/xicbox.cpp @@ -97,16 +97,29 @@ void XicBox::setPeptideEvidence(const PeptideEvidence * p_peptide_evidence) { } -void XicBox::setXic(pappso::XicSp xic_sp) { +void XicBox::setXic(std::vector< pappso::XicSp> xic_sp_list) { qDebug() << "XicBox::setXic begin"; //pappso::XicWidget * xic_widget = new pappso::XicWidget(this); //ui->xic_list_widget->layout()->addWidget(xic_widget); - ui->xic_widget->addXicSp(xic_sp); - for (const PeptideEvidence * peptide_evidence:_peptide_evidence_list) { - ui->xic_widget->addMsMsEvent(xic_sp.get(), peptide_evidence->getRetentionTime()); + for (int i=0; i < xic_sp_list.size(); i++) { + qDebug() << "XicBox::setXic xic " << xic_sp_list[i].get(); + if (xic_sp_list[i].get() == nullptr) { + throw new pappso::PappsoException("Error in XicBox::setXic:\n xic_sp_list[i].get() == nullptr"); + } + qDebug() << "XicBox::setXic xic_sp_list[i].size() " << xic_sp_list[i].get()->size(); + ui->xic_widget->addXicSp(xic_sp_list[i]); + + if (_isotope_mass_list[i].get()->getIsotopeNumber() == 0) { + for (const PeptideEvidence * peptide_evidence:_peptide_evidence_list) { + qDebug() << "XicBox::setXic peptide_evidence " << peptide_evidence->getRetentionTime(); + ui->xic_widget->addMsMsEvent(xic_sp_list[i].get(), peptide_evidence->getRetentionTime()); + } + } } + qDebug() << "XicBox::setXic rescale" ; ui->xic_widget->rescale(); + qDebug() << "XicBox::setXic plot" ; ui->xic_widget->plot(); /* diff --git a/src/gui/xic_view/xic_box/xicbox.h b/src/gui/xic_view/xic_box/xicbox.h index f53525412dbeba3dda611caa084be58ab32e5cc1..4d8635e835f8f23401fa31d882dc0d51cefc06a4 100644 --- a/src/gui/xic_view/xic_box/xicbox.h +++ b/src/gui/xic_view/xic_box/xicbox.h @@ -56,7 +56,7 @@ signals : void computeIsotopeMassList(pappso::PeptideSp peptide_sp, unsigned int charge, pappso::PrecisionP precision, double minimum_isotope_pattern_ratio); private slots: void remove(); - void setXic(pappso::XicSp xic_sp); + void setXic(std::vector< pappso::XicSp> xic_sp_list); void setIsotopeMassList(std::vector<pappso::PeptideNaturalIsotopeAverageSp> isotope_mass_list); void error(QString error_message); private: diff --git a/src/gui/xic_view/xicworkerthread.cpp b/src/gui/xic_view/xicworkerthread.cpp index 41a31f5fc69093f7dddb8d92e08e82a60c257a75..a617a6ca65daada02caa948a995c3b909861b9e7 100644 --- a/src/gui/xic_view/xicworkerthread.cpp +++ b/src/gui/xic_view/xicworkerthread.cpp @@ -45,7 +45,7 @@ void XicWorkerThread::doXicLoad(const MsRun * p_msrun, std::vector<pappso::mz> m } catch (pappso::PappsoException & error) { - emit operationFailed(tr("Error extracting XIC :\n%1").arg(error.qwhat())); + emit operationFailed(tr("Error extracting XIC for MSrun %1:\n%2").arg(p_msrun->getFilename()).arg(error.qwhat())); } } diff --git a/src/gui/xic_view/xicworkerthread.h b/src/gui/xic_view/xicworkerthread.h index 2b880137e879fae64a577608315897355ab7e63c..9623da53884691f247c0144cfd93dee09c053609 100644 --- a/src/gui/xic_view/xicworkerthread.h +++ b/src/gui/xic_view/xicworkerthread.h @@ -44,7 +44,7 @@ public slots: void doComputeIsotopeMassList(pappso::PeptideSp peptide_sp, unsigned int charge, pappso::PrecisionP precision, double minimum_isotope_pattern_ratio); signals: - void xicLoaded(pappso::XicSp xic_sp); + void xicLoaded(std::vector<pappso::XicSp> xic_sp_list); void isotopeMassListComputed(std::vector<pappso::PeptideNaturalIsotopeAverageSp> isotope_mass_list); void operationFailed(QString error); diff --git a/src/main.cpp b/src/main.cpp index 08a1fdc3983d2b4590fcd0b07c1dfab804bba095..f28726c12d83fca40065e2f015479c6cd577caae 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -37,9 +37,9 @@ int main(int argc, char *argv[]) QApplication app(argc, argv); qRegisterMetaType<TandemRunBatch>("TandemRunBatch"); - qRegisterMetaType<pappso::mz>("pappso::mz"); + qRegisterMetaType<std::vector<pappso::mz>>("std::vector<pappso::mz>"); qRegisterMetaType<pappso::PrecisionP>("pappso::PrecisionP"); - qRegisterMetaType<pappso::XicSp>("pappso::XicSp"); + qRegisterMetaType<std::vector<pappso::XicSp>>("std::vector<pappso::XicSp>"); qRegisterMetaType<pappso::PeptideSp>("pappso::PeptideSp"); qRegisterMetaType<XicExtractMethod>("XicExtractMethod"); qRegisterMetaType<std::vector<pappso::PeptideNaturalIsotopeAverageSp>>("std::vector<pappso::PeptideNaturalIsotopeAverageSp>"); diff --git a/src/utils/readspectrum.cpp b/src/utils/readspectrum.cpp index 1a0dd7c1e7c414977f162b11eee3de1ea0922371..c1655055b5d32d667de772909829648d9efe530b 100644 --- a/src/utils/readspectrum.cpp +++ b/src/utils/readspectrum.cpp @@ -47,7 +47,7 @@ pwiz::msdata::MSDataFile * getPwizMSDataFile(const QString & filename); pappso::QualifiedSpectrum getQualifiedSpectrumFromPwizMSDataFile(pwiz::msdata::MSDataFile * p_ms_data_file, unsigned int scan_num); -void getXicFromPwizMSDataFile(pwiz::msdata::MSDataFile * p_mzdata, pappso::Xic * p_xic, const std::vector<pappso::MassRange> & mass_range_list, XicExtractMethod method); +void getXicFromPwizMSDataFile(pwiz::msdata::MSDataFile * p_mzdata, std::vector< pappso::Xic> & xic_list, const std::vector<pappso::MassRange> & mass_range_list, XicExtractMethod method); pwiz::msdata::MSDataFile * getPwizMSDataFile(const QString & filename) { @@ -78,8 +78,8 @@ pwiz::msdata::MSDataFile * getPwizMSDataFile(const QString & filename) { return dataFile; } -void getXicFromPwizMSDataFile(pwiz::msdata::MSDataFile * p_ms_data_file, pappso::Xic * p_xic, const std::vector<pappso::MassRange> & mass_range_list, XicExtractMethod method) { - +void getXicFromPwizMSDataFile(pwiz::msdata::MSDataFile * p_ms_data_file, std::vector< pappso::Xic> & xic_list, const std::vector<pappso::MassRange> & mass_range_list, XicExtractMethod method) { + qDebug() << "getXicFromPwizMSDataFile begin mass_range_list.size()=" << mass_range_list.size() << " xic_list.size()=" << xic_list.size(); std::string env; env=setlocale(LC_ALL,""); setlocale(LC_ALL,"C"); @@ -94,13 +94,17 @@ void getXicFromPwizMSDataFile(pwiz::msdata::MSDataFile * p_ms_data_file, pappso: std::vector<XicElement> peak_for_mass; for (const pappso::MassRange & mass_range: mass_range_list) { peak_for_mass.push_back(XicElement()); + qDebug() << "getXicFromPwizMSDataFile begin mass_range=" << mass_range.getMz(); } + bool ms1 = false; + for (std::size_t i=0; i < spectrum_list_size; i++) { spectrum = p_spectrum_list->spectrum(i, false); unsigned int ms_level(QString(spectrum->cvParam(pwiz::msdata::MS_ms_level).value.c_str()).toUInt()); - +//qDebug() << "getXicFromPwizMSDataFile ms_level" << ms_level; if (ms_level == 1) { + ms1 = true; spectrum = p_spectrum_list->spectrum(i, true); for (XicElement & peak: peak_for_mass) { peak.rt = QString(spectrum->scanList.scans[0].cvParam(pwiz::msdata::MS_scan_start_time).value.c_str()).toDouble(); @@ -113,29 +117,40 @@ void getXicFromPwizMSDataFile(pwiz::msdata::MSDataFile * p_ms_data_file, pappso: // iterate through the m/z-intensity pairs for (vector<pwiz::msdata::MZIntensityPair>::const_iterator it=pairs.begin(), end=pairs.end(); it!=end; ++it) { - //qDebug() << "it->mz " << it->mz << " it->intensity" << it->intensity; + //qDebug() << "getXicFromPwizMSDataFile it->mz " << it->mz << " it->intensity" << it->intensity; for (int i=0; i < mass_range_list.size(); i++) { - if (mass_range_list[i].contains(it->mz)) { - if (method == XicExtractMethod::max) { - if (peak_for_mass[i].intensity < it->intensity) { - peak_for_mass[i].intensity = it->intensity; + if (mass_range_list[i].contains(it->mz)) { + if (method == XicExtractMethod::max) { + if (peak_for_mass[i].intensity < it->intensity) { + peak_for_mass[i].intensity = it->intensity; + } + } + else { + peak_for_mass[i].intensity += it->intensity; } } - else { - peak_for_mass[i].intensity += it->intensity; - } - } } } - p_xic->push_back(peak); + for (int i=0; i < mass_range_list.size(); i++) { + //qDebug() << "getXicFromPwizMSDataFile push_back " << peak_for_mass[i].rt; + xic_list[i].push_back(peak_for_mass[i]); + } } } - p_xic->sortByRetentionTime(); + if (ms1 == false) { + throw pappso::PappsoException(QObject::tr("error extracting XIC: no MS level 1 in data file")); + } + + for (int i=0; i < xic_list.size(); i++) { + xic_list[i] .sortByRetentionTime(); + //qDebug() << "getXicFromPwizMSDataFile end " << xic_list[i].size(); + } + qDebug() << "getXicFromPwizMSDataFile end"; setlocale(LC_ALL,env.c_str()); @@ -395,9 +410,13 @@ std::vector<pappso::XicSp> SpectrumStore::getXicSpFromMsRunSp(const MsRun * p_ms std::vector<pappso::XicSp> xic_sp_list; if (p_msdatafile != nullptr) { std::vector<Xic> xic_list; - getXicFromPwizMSDataFile(p_msdatafile, &xic_list, mass_range_list, method); - xic_sp = xic.makeXicSp(); - qDebug() << "SpectrumStore::getXicSpFromMsRunSp end" << xic_sp.get()->size(); + xic_list.resize(mass_range_list.size()); + getXicFromPwizMSDataFile(p_msdatafile, xic_list, mass_range_list, method); + + for (const Xic & xic:xic_list) { + xic_sp_list.push_back( xic.makeXicSp()); + } + //qDebug() << "SpectrumStore::getXicSpFromMsRunSp end" << xic_sp.get()->size(); } - return (xic_sp); + return (xic_sp_list); }