diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 159b03b3f21dff1f1d98b512f2626b6ff72305fe..71bd578d336578a1756d8c72fac5835c376398f5 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/core/identificationgroup.cpp b/src/core/identificationgroup.cpp index dd7ec45b74524f673da6af88df834772de8c3d4d..267c9e895281c899815abb62d8da4b7d4aecdbef 100644 --- a/src/core/identificationgroup.cpp +++ b/src/core/identificationgroup.cpp @@ -320,3 +320,12 @@ pappso::pappso_double IdentificationGroup::getProteinFdr(ValidationState state) return (false_prot/total_prot); } + +void IdentificationGroup::getSameXicPeptideEvidenceList(const PeptideEvidence * p_peptide_evidence, std::vector<const PeptideEvidence *> & peptide_evidence_list) const { + if (!contains(p_peptide_evidence->getMsRunP())) return; + for (const IdentificationDataSource * p_identification_source:_id_source_list) { + if (p_peptide_evidence->getMsRunP() == p_identification_source->getMsRunSp().get()) { + p_identification_source->getPeptideEvidenceStore().getSameXicPeptideEvidenceList(p_peptide_evidence, peptide_evidence_list); + } + } +} diff --git a/src/core/identificationgroup.h b/src/core/identificationgroup.h index 0469f961e27236eedc99b260376599271e118b67..ea4ade657f3367ecc159fcb049b16aa190084ece 100644 --- a/src/core/identificationgroup.h +++ b/src/core/identificationgroup.h @@ -132,6 +132,14 @@ public: * each peptide evidence is only counted once */ void collectMhDelta(std::vector< pappso::pappso_double> & delta_list, pappso::PrecisionUnit unit, ValidationState state) const; + + + /** @brief look for a peptide in the same XIC + * @param p_peptide_evidence the peptide to look for + * @param peptide_evidence_list the peptide evidence list to build + */ + void getSameXicPeptideEvidenceList(const PeptideEvidence * p_peptide_evidence, std::vector<const PeptideEvidence *> & peptide_evidence_list) const; + private : void addMsRunSp(MsRunSp ms_run_sp); diff --git a/src/core/project.cpp b/src/core/project.cpp index 937fec4e58f39490b568811090f909b2579def80..1bd84997c9bdb48d716f3c484a23bd702ec4c389 100644 --- a/src/core/project.cpp +++ b/src/core/project.cpp @@ -200,3 +200,9 @@ bool Project::hasPtmExperiment() const { if (getIdentificationGroupList().at(0)->getPtmGroupingExperiment() != nullptr) return true; return false; } + +void Project::getSameXicPeptideEvidenceList(const PeptideEvidence * p_peptide_evidence, std::vector<const PeptideEvidence *> & peptide_evidence_list) const { + for (const IdentificationGroup * p_ident_group: _identification_goup_list) { + p_ident_group->getSameXicPeptideEvidenceList(p_peptide_evidence, peptide_evidence_list); + } +} diff --git a/src/core/project.h b/src/core/project.h index c4e762931564d0215084ebbc51a6175c0dba9ae2..b21d48385538d70e4d7b858bba6066d0fe4b2482 100644 --- a/src/core/project.h +++ b/src/core/project.h @@ -72,21 +72,27 @@ public: std::vector<IdentificationGroup *> getIdentificationGroupList(); const std::vector<IdentificationGroup *> getIdentificationGroupList() const; void readResultFile(QString filename); - + /** @brief check that modifications are coded with PSI MOD accessions */ bool checkPsimodCompliance() const; - + /** @brief apply labeling method to all peptide match * */ void setLabelingMethodSp(LabelingMethodSp labeling_method_sp); - + /** @brief get labeling method shared pointer * */ LabelingMethodSp getLabelingMethodSp() const; - + bool hasPtmExperiment() const; - + + /** @brief look for a peptide in the same XIC + * @param p_peptide_evidence the peptide to look for + * @param peptide_evidence_list the peptide evidence list to build + */ + void getSameXicPeptideEvidenceList(const PeptideEvidence * p_peptide_evidence, std::vector<const PeptideEvidence *> & peptide_evidence_list) const; + private : LabelingMethodSp _labeling_method_sp; ProjectMode _project_mode = ProjectMode::combined; @@ -102,7 +108,7 @@ private : IdentificationDataSourceStore _identification_data_source_store; MsRunStore _msrun_store; FastaFileStore _fasta_file_store; - + }; #endif // PROJECT_H diff --git a/src/gui/xic_view/xic_box/xic_box.ui b/src/gui/xic_view/xic_box/xic_box.ui index f6a62be40c1da65492a5359db21253ad64ef91f1..b7e5d597bcc18b08a0cb8082f798e175323c8277 100644 --- a/src/gui/xic_view/xic_box/xic_box.ui +++ b/src/gui/xic_view/xic_box/xic_box.ui @@ -18,6 +18,12 @@ <layout class="QHBoxLayout" name="horizontalLayout"> <item> <widget class="QLabel" name="peptide_label"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> <property name="text"> <string>TextLabel</string> </property> @@ -28,7 +34,14 @@ <item> <layout class="QVBoxLayout" name="verticalLayout"> <item> - <widget class="pappso::XicWidget" name="xic_widget" native="true"/> + <widget class="pappso::XicWidget" name="xic_widget" native="true"> + <property name="minimumSize"> + <size> + <width>0</width> + <height>150</height> + </size> + </property> + </widget> </item> </layout> </item> diff --git a/src/gui/xic_view/xic_box/xicbox.cpp b/src/gui/xic_view/xic_box/xicbox.cpp index 169eef1e89251b50a6eb0b1f90989dbc4cde1319..92bae7c23747e8983d2e135c5bfabbef7ee65b51 100644 --- a/src/gui/xic_view/xic_box/xicbox.cpp +++ b/src/gui/xic_view/xic_box/xicbox.cpp @@ -31,6 +31,7 @@ #include <QMessageBox> #include <pappsomspp/pappsoexception.h> #include "../xicworkerthread.h" +#include "../../project_view/projectwindow.h" XicBox::XicBox(XicWindow *parent): QWidget(parent), @@ -73,6 +74,11 @@ void XicBox::setPeptideEvidence(const PeptideEvidence * p_peptide_evidence) { _p_peptide_evidence = p_peptide_evidence; ui->peptide_label->setText(_p_peptide_evidence->getPeptideXtpSp().get()->toString()); + //get same xic peptide evidence (msrun, peptide, charge) + //p_projet + _peptide_evidence_list.clear(); + _p_xic_window->getProjectWindow()->getProjectP()->getSameXicPeptideEvidenceList(p_peptide_evidence, _peptide_evidence_list); + emit loadXic(_p_peptide_evidence->getMsRunP(), _p_peptide_evidence->getPeptideXtpSp().get()->getMz(_p_peptide_evidence->getCharge()), _p_xic_window->getXicExtractPrecision(), XicExtractMethod::max); } @@ -81,7 +87,11 @@ void XicBox::setPeptideEvidence(const PeptideEvidence * p_peptide_evidence) { void XicBox::setXic(pappso::XicSp xic_sp) { qDebug() << "XicBox::setXic begin"; ui->xic_widget->setXicSp(xic_sp); + for (const PeptideEvidence * peptide_evidence:_peptide_evidence_list) { + ui->xic_widget->addMsMsEvent(peptide_evidence->getRetentionTime()); + } + ui->xic_widget->rescale(); ui->xic_widget->plot(); qDebug() << "XicBox::setXic end"; - + } diff --git a/src/gui/xic_view/xic_box/xicbox.h b/src/gui/xic_view/xic_box/xicbox.h index 4ad6e916203820d401f0926511a523595beabb7f..b28336fc2c27525250c3aeead80dd85547f1f12d 100644 --- a/src/gui/xic_view/xic_box/xicbox.h +++ b/src/gui/xic_view/xic_box/xicbox.h @@ -59,6 +59,7 @@ private: QThread _xic_thread; XicWindow * _p_xic_window; const PeptideEvidence * _p_peptide_evidence; + std::vector<const PeptideEvidence *> _peptide_evidence_list; }; diff --git a/src/gui/xic_view/xic_window.ui b/src/gui/xic_view/xic_window.ui index fa9b6cb8584b39e55123a0b9b3fcff5bdf941062..87a851d17d9279c82da654331fe3e3350a2e20a1 100644 --- a/src/gui/xic_view/xic_window.ui +++ b/src/gui/xic_view/xic_window.ui @@ -16,7 +16,22 @@ <widget class="QWidget" name="centralwidget"> <layout class="QVBoxLayout" name="verticalLayout_2"> <item> - <layout class="QVBoxLayout" name="xic_vertical_layout"/> + <widget class="QScrollArea" name="scrollArea"> + <property name="widgetResizable"> + <bool>true</bool> + </property> + <widget class="QWidget" name="xic_vertical_layout"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>780</width> + <height>530</height> + </rect> + </property> + <layout class="QVBoxLayout" name="verticalLayout"/> + </widget> + </widget> </item> </layout> </widget> diff --git a/src/gui/xic_view/xicwindow.cpp b/src/gui/xic_view/xicwindow.cpp index 56118dbd42a5b670f3410dd9200aec12c58bb617..c7af95449bcade4f2fb4c4ade7f07b580eb70e09 100644 --- a/src/gui/xic_view/xicwindow.cpp +++ b/src/gui/xic_view/xicwindow.cpp @@ -55,11 +55,13 @@ XicWindow::~XicWindow() { qDebug() << "XicWindow::~XicWindow"; } - +ProjectWindow * XicWindow::getProjectWindow() { + return _project_window; +} void XicWindow::addXic(const PeptideEvidence * p_peptide_evidence) { XicBox * p_box = new XicBox(this); p_box->setPeptideEvidence(p_peptide_evidence); - ui->xic_vertical_layout->addWidget(p_box); + ui->xic_vertical_layout->layout()->addWidget(p_box); } pappso::PrecisionP XicWindow::getXicExtractPrecision() const { diff --git a/src/gui/xic_view/xicwindow.h b/src/gui/xic_view/xicwindow.h index b6462314a27ff28ef8696f5d26aa627098edee79..d48531dc2d0c1fb5ca01c2fed7e96a24d2e2189d 100644 --- a/src/gui/xic_view/xicwindow.h +++ b/src/gui/xic_view/xicwindow.h @@ -56,7 +56,7 @@ public: pappso::PrecisionP getXicExtractPrecision() const; protected: - + ProjectWindow * getProjectWindow(); private: ProjectWindow * _project_window; Ui::XicWindow *ui; diff --git a/src/utils/peptideevidencestore.cpp b/src/utils/peptideevidencestore.cpp index e002f542a4b2ab5a4f1ad297057b1c9687ce03cd..28b2928f639bcfc18646f74a261bc0b75b4e5480 100644 --- a/src/utils/peptideevidencestore.cpp +++ b/src/utils/peptideevidencestore.cpp @@ -93,3 +93,13 @@ void PeptideEvidenceStore::updateAutomaticFilters(const AutomaticFilterParameter const std::vector<std::shared_ptr<PeptideEvidence>> & PeptideEvidenceStore::getPeptideEvidenceList() const { return _peptide_evidence_list; } + + +void PeptideEvidenceStore::getSameXicPeptideEvidenceList(const PeptideEvidence * p_peptide_evidence, std::vector<const PeptideEvidence *> & peptide_evidence_list) const { + for (const PeptideEvidenceSp & peptide_evidence_sp:_peptide_evidence_list) { + if (p_peptide_evidence->getMsRunP() != peptide_evidence_sp.get()->getMsRunP()) continue; + if (p_peptide_evidence->getPeptideXtpSp().get() != peptide_evidence_sp.get()->getPeptideXtpSp().get()) continue; + if (p_peptide_evidence->getCharge() != peptide_evidence_sp.get()->getCharge()) continue; + peptide_evidence_list.push_back(peptide_evidence_sp.get()); + } +} diff --git a/src/utils/peptideevidencestore.h b/src/utils/peptideevidencestore.h index 755ec66eafbe1f63e8c96a19a845f4893404a013..c1d4ff894e4666d6ac8014b3f3021f1348914679 100644 --- a/src/utils/peptideevidencestore.h +++ b/src/utils/peptideevidencestore.h @@ -52,6 +52,15 @@ public: const std::vector<std::shared_ptr<PeptideEvidence>> & getPeptideEvidenceList() const; std::size_t size() const; void clearMap(); + + + + /** @brief look for a peptide in the same XIC + * @param p_peptide_evidence the peptide to look for + * @param peptide_evidence_list the peptide evidence list to build + */ + void getSameXicPeptideEvidenceList(const PeptideEvidence * p_peptide_evidence, std::vector<const PeptideEvidence *> & peptide_evidence_list) const; + private: std::vector<std::shared_ptr<PeptideEvidence>> _peptide_evidence_list; diff --git a/src/utils/readspectrum.cpp b/src/utils/readspectrum.cpp index 50f208feb293e873b016f77d0514a71edc916a39..051cf3c395b5d43831ac2ded03733cde66987d6c 100644 --- a/src/utils/readspectrum.cpp +++ b/src/utils/readspectrum.cpp @@ -127,6 +127,7 @@ void getXicFromPwizMSDataFile(pwiz::msdata::MSDataFile * p_ms_data_file, pappso: } + p_xic->sortByRetentionTime();