From b7c9c59ea34193b7306a2f469de59ca1c2fe9d62 Mon Sep 17 00:00:00 2001 From: Olivier Langella <Olivier.Langella@moulon.inra.fr> Date: Fri, 7 Apr 2017 20:43:46 +0200 Subject: [PATCH] FDR computation OK --- src/core/identificationgroup.cpp | 55 ++++++++------------------------ src/core/peptidematch.cpp | 10 +++--- src/core/proteinmatch.cpp | 12 +++---- src/utils/types.h | 11 ++++--- 4 files changed, 30 insertions(+), 58 deletions(-) diff --git a/src/core/identificationgroup.cpp b/src/core/identificationgroup.cpp index df013590e..602d9cf02 100644 --- a/src/core/identificationgroup.cpp +++ b/src/core/identificationgroup.cpp @@ -54,34 +54,20 @@ unsigned int IdentificationGroup::countDecoyPeptideMatch(ValidationState state) return i; } unsigned int IdentificationGroup::countDecoyProtein(ValidationState state) const { - unsigned int i=0; - for (auto & p_protein_match : _protein_match_list) { - if (!p_protein_match->getProteinXtpSp().get()->isDecoy()) continue; - if (state == ValidationState::grouped) { - if (p_protein_match->isGrouped()) { - i++; - } - } - else if(state == ValidationState::valid) { - if (p_protein_match->isValid()) { - i++; - } - + return std::count_if (_protein_match_list.begin(), _protein_match_list.end(), [state](const ProteinMatch * p_protein_match) { + if ((p_protein_match->getProteinXtpSp().get()->isDecoy()) && (p_protein_match->getValidationState() >= state)) { + return true; } - else if (state == ValidationState::validAndChecked) { - if (p_protein_match->isValidAndChecked()) { - i++; - } - + else { + return false; } - } - return i; + }); } unsigned int IdentificationGroup::countPeptideMatch(ValidationState state) const { unsigned int i=0; for (auto & p_protein_match : _protein_match_list) { - if (p_protein_match->getValidationState() == state) { + if (p_protein_match->getValidationState() >= state) { i+=p_protein_match->countPeptideMatch(state); } } @@ -89,29 +75,14 @@ unsigned int IdentificationGroup::countPeptideMatch(ValidationState state) const } unsigned int IdentificationGroup::countProtein(ValidationState state) const { - unsigned int i=0; - if (state == ValidationState::grouped) { - for (auto & p_protein_match : _protein_match_list) { - if (p_protein_match->isGrouped()) { - i++; - } - } - } - else if(state == ValidationState::valid) { - for (auto & p_protein_match : _protein_match_list) { - if (p_protein_match->isValid()) { - i++; - } + return std::count_if (_protein_match_list.begin(), _protein_match_list.end(), [state](const ProteinMatch * p_protein_match) { + if (p_protein_match->getValidationState() >= state) { + return true; } - } - else if (state == ValidationState::validAndChecked) { - for (auto & p_protein_match : _protein_match_list) { - if (p_protein_match->isValidAndChecked()) { - i++; - } + else { + return false; } - } - return i; + }); } void IdentificationGroup::updateAutomaticFilters(const AutomaticFilterParameters & automatic_filter_parameters) { diff --git a/src/core/peptidematch.cpp b/src/core/peptidematch.cpp index 81706face..d38bad251 100644 --- a/src/core/peptidematch.cpp +++ b/src/core/peptidematch.cpp @@ -70,13 +70,13 @@ void PeptideMatch::setChecked(bool arg1) { } ValidationState PeptideMatch::getValidationState() const { - if (isValid()) { - return ValidationState::valid; + if (isGrouped()) { + return ValidationState::grouped; } else if (isValidAndChecked()) { return ValidationState::validAndChecked; - } else if (isGrouped()) { - return ValidationState::grouped; - } + } else if (isValid()) { + return ValidationState::valid; + } return ValidationState::notValid; } diff --git a/src/core/proteinmatch.cpp b/src/core/proteinmatch.cpp index 792634523..799f6ceca 100644 --- a/src/core/proteinmatch.cpp +++ b/src/core/proteinmatch.cpp @@ -44,13 +44,13 @@ ProteinMatch::~ProteinMatch() } } ValidationState ProteinMatch::getValidationState() const { - if (isValid()) { - return ValidationState::valid; + if (isGrouped()) { + return ValidationState::grouped; } else if (isValidAndChecked()) { return ValidationState::validAndChecked; - } else if (isGrouped()) { - return ValidationState::grouped; - } + } else if (isValid()) { + return ValidationState::valid; + } return ValidationState::notValid; } bool ProteinMatch::contains(PeptideMatch * peptide_match) const { @@ -178,7 +178,7 @@ const pappso::GrpProteinSp & ProteinMatch::getGrpProteinSp() const { unsigned int ProteinMatch::countPeptideMatch(ValidationState state) const { return std::count_if (_peptide_match_list.begin(), _peptide_match_list.end(), [state](const PeptideMatch * p_peptide_match) { - if (p_peptide_match->getValidationState() == state) { + if (p_peptide_match->getValidationState() >= state) { return true; } else { diff --git a/src/utils/types.h b/src/utils/types.h index c87465c67..19244ecd2 100644 --- a/src/utils/types.h +++ b/src/utils/types.h @@ -25,6 +25,7 @@ #ifndef _TYPES_H_ #define _TYPES_H_ 1 +#include <cstdint> /*********** enumerations *********************************/ /** \def GroupingType list of available grouping algoritms @@ -50,11 +51,11 @@ enum class MzFormat { * */ -enum class ValidationState { - notValid,///< notValid : automatic filter validation failed - valid, ///< valid : automatic filter validation passed - validAndChecked, ///< validAndChecked : automatic filter validation passed + manual checking - grouped, ///< grouped : automatic filter validation passed + manual checking + grouped +enum class ValidationState: std::int8_t { + notValid = 0,///< notValid : automatic filter validation failed + valid =1, ///< valid : automatic filter validation passed + validAndChecked=2, ///< validAndChecked : automatic filter validation passed + manual checking + grouped=3 ///< grouped : automatic filter validation passed + manual checking + grouped }; -- GitLab