diff --git a/src/files/fastafile.cpp b/src/files/fastafile.cpp index 3ec99bbaf9ea1918839ed744bccfec9143bd3ea2..cc1bf229e295eadd996ae69f032ec87a14a8fb44 100644 --- a/src/files/fastafile.cpp +++ b/src/files/fastafile.cpp @@ -32,9 +32,10 @@ public: }; void setSequence(const QString& description, const QString& sequence) override { - qDebug() << "PeptideReader::setSequence " << description << " " <<sequence; + //qDebug() << "PeptideReader::setSequence " << description << " " <<sequence; QStringList descr_split = description.simplified().split(" "); QString accession = descr_split.at(0); + //qDebug() << "PeptideReader::setSequence " << accession << " " <<accession; _protein_store.setContaminantAccession(accession); }; private: diff --git a/src/gui/project_view/projectwindow.cpp b/src/gui/project_view/projectwindow.cpp index 6ddb3933deb75f60fda433afd3c88e7cdf935777..628770b9f342cd5402afc4209d3e33fe538ccdc3 100644 --- a/src/gui/project_view/projectwindow.cpp +++ b/src/gui/project_view/projectwindow.cpp @@ -54,6 +54,7 @@ ProjectWindow::ProjectWindow(MainWindow *parent): ui->contaminant_database_listview->setModel(_p_fasta_str_li); QItemSelectionModel * selection_model = ui->contaminant_database_listview->selectionModel(); ui->contaminant_database_listview->setSelectionMode(QAbstractItemView::MultiSelection); + ui->decoy_database_listview->setSelectionMode(QAbstractItemView::MultiSelection); _p_automatic_filter_widget = new AutomaticFilterWidget(this); ui->filter_parameter_layout->addWidget(_p_automatic_filter_widget); @@ -259,7 +260,22 @@ void ProjectWindow::doFdrChanged() { qDebug() << "ProjectWindow::doFdrChanged begin "; showWaitingMessage(tr("FDR modifications")); doDisplayLoadingMessage(tr("tagging decoy proteins")); - _project_sp.get()->getProteinStore().setRegexpDecoyPattern(ui->decoy_protein_regexp_line_edit->text()); + QModelIndexList index_list = ui->decoy_database_listview->selectionModel()->selectedIndexes(); + if (index_list.size() > 0) { + _project_sp.get()->getProteinStore().clearDecoys(); + for (QModelIndex index :index_list) { + if (index.data(Qt::UserRole).canConvert<FastaFile *>()) { + FastaFile * p_fasta_file = index.data(Qt::UserRole).value<FastaFile *>(); + p_fasta_file->setDecoys(_project_sp.get()->getProteinStore()); + } + else { + throw pappso::PappsoException(QObject::tr("can not convert to FastaFile index.data().canConvert<FastaFile *>()")); + } + } + } + else { + _project_sp.get()->getProteinStore().setRegexpDecoyPattern(ui->decoy_protein_regexp_line_edit->text()); + } doDisplayLoadingMessage(tr("updating filters")); _project_sp.get()->updateAutomaticFilters(_project_sp.get()->getAutomaticFilterParameters()); diff --git a/src/utils/proteinstore.cpp b/src/utils/proteinstore.cpp index 81ad02d34feea055fc80a1a327c8376abd6be8ef..6a6a9666cdc52aba6b99f1a820b65a5be5bb06e4 100644 --- a/src/utils/proteinstore.cpp +++ b/src/utils/proteinstore.cpp @@ -34,12 +34,12 @@ ProteinStore::ProteinStore() { - QSettings settings; + QSettings settings; _regexp_contaminant.setPattern(settings.value("automatic_filter/contaminant_regexp","^conta\\|").toString()); _regexp_decoy.setPattern(settings.value("automatic_filter/decoy_regexp",".*\\|reversed$").toString()); - - + + } ProteinStore::~ProteinStore() @@ -51,7 +51,7 @@ QRegExp ProteinStore::getRegexpContaminant() const { } void ProteinStore::setRegexpContaminantPattern(const QString & pattern) { _regexp_contaminant.setPattern(pattern); - + for (std::pair<const QString, ProteinXtpSp> & acc_protein :_map_accession_protein_list) { setProteinInformations(acc_protein.second); } @@ -63,11 +63,11 @@ QRegExp ProteinStore::getRegexpDecoy() const { } void ProteinStore::setRegexpDecoyPattern(const QString & pattern) { _regexp_decoy.setPattern(pattern); - + for (std::pair<const QString, ProteinXtpSp> & acc_protein :_map_accession_protein_list) { setProteinInformations(acc_protein.second); } - QSettings settings; + QSettings settings; settings.setValue("automatic_filter/decoy_regexp", pattern); } @@ -84,10 +84,16 @@ void ProteinStore::clearContaminants() { } void ProteinStore::setDecoyAccession(QString accession) { - _map_accession_protein_list.at(accession).get()->setIsDecoy(true); + std::map<QString, ProteinXtpSp>::iterator it = _map_accession_protein_list.find(accession); + if (it != _map_accession_protein_list.end()) { + it->second.get()->setIsDecoy(true); + } } void ProteinStore::setContaminantAccession(QString accession) { - _map_accession_protein_list.at(accession).get()->setIsContaminant(true); + std::map<QString, ProteinXtpSp>::iterator it = _map_accession_protein_list.find(accession); + if (it != _map_accession_protein_list.end()) { + it->second.get()->setIsContaminant(true); + } } ProteinXtpSp & ProteinStore::getInstance(ProteinXtpSp & peptide_in) { @@ -106,7 +112,7 @@ void ProteinStore::setProteinInformations(ProteinXtpSp & peptide_in) { peptide_in.get()->setIsDecoy(false); QString accession = peptide_in.get()->getAccession(); peptide_in.get()->parseAccession2dbxref(); - + if ((!_regexp_contaminant.isEmpty()) && (_regexp_contaminant.indexIn(accession, 0)>-1)) { //qDebug() << "ProteinStore::setProteinInformations is contaminant " << accession; peptide_in.get()->setIsContaminant(true);