Skip to content
Snippets Groups Projects
Commit 6b7a60c1 authored by Langella Olivier's avatar Langella Olivier
Browse files

q-value can be computed on Mascot results

parent b6b7dd24
No related branches found
No related tags found
No related merge requests found
...@@ -130,6 +130,27 @@ IdentificationDataSource::getIdentificationEngineName() const ...@@ -130,6 +130,27 @@ IdentificationDataSource::getIdentificationEngineName() const
case IdentificationEngine::peptider: case IdentificationEngine::peptider:
name = "peptider"; name = "peptider";
break; break;
case IdentificationEngine::mascot:
name = "Mascot";
break;
case IdentificationEngine::OMSSA:
name = "OMSSA";
break;
case IdentificationEngine::SEQUEST:
name = "SEQUEST";
break;
case IdentificationEngine::Comet:
name = "Comet";
break;
case IdentificationEngine::Morpheus:
name = "Morpheus";
break;
case IdentificationEngine::MSGFplus:
name = "MS-GF+";
break;
default:
break;
} }
return name; return name;
} }
......
...@@ -40,19 +40,13 @@ ComputeQvalues::ComputeQvalues(ProjectSp project_sp) ...@@ -40,19 +40,13 @@ ComputeQvalues::ComputeQvalues(ProjectSp project_sp)
std::vector<PeptideEvidence *> tandem_peptide_evidence_list; std::vector<PeptideEvidence *> tandem_peptide_evidence_list;
std::vector<PeptideEvidence *> mascot_peptide_evidence_list;
for(auto &identification_source_sp : identification_source_list) for(auto &identification_source_sp : identification_source_list)
{ {
if(identification_source_sp.get()->getIdentificationEngine() != if(identification_source_sp.get()->getIdentificationEngine() ==
IdentificationEngine::XTandem) IdentificationEngine::XTandem)
{ {
throw pappso::ExceptionNotImplemented(
QObject::tr("q-value computation for %1 identification engine is "
"not yet implemented")
.arg(
identification_source_sp.get()->getIdentificationEngineName()));
}
else
{
tandem_peptide_evidence_list.reserve( tandem_peptide_evidence_list.reserve(
tandem_peptide_evidence_list.size() + tandem_peptide_evidence_list.size() +
identification_source_sp.get()->getPeptideEvidenceStore().size()); identification_source_sp.get()->getPeptideEvidenceStore().size());
...@@ -63,6 +57,28 @@ ComputeQvalues::ComputeQvalues(ProjectSp project_sp) ...@@ -63,6 +57,28 @@ ComputeQvalues::ComputeQvalues(ProjectSp project_sp)
tandem_peptide_evidence_list.push_back(pe_sp.get()); tandem_peptide_evidence_list.push_back(pe_sp.get());
} }
} }
else if(identification_source_sp.get()->getIdentificationEngine() ==
IdentificationEngine::mascot)
{
mascot_peptide_evidence_list.reserve(
mascot_peptide_evidence_list.size() +
identification_source_sp.get()->getPeptideEvidenceStore().size());
for(auto &pe_sp : identification_source_sp.get()
->getPeptideEvidenceStore()
.getPeptideEvidenceList())
{
mascot_peptide_evidence_list.push_back(pe_sp.get());
}
}
else
{
throw pappso::ExceptionNotImplemented(
QObject::tr("q-value computation for %1 identification engine is "
"not yet implemented")
.arg(
identification_source_sp.get()->getIdentificationEngineName()));
}
} }
for(auto &identification_group : for(auto &identification_group :
...@@ -78,12 +94,54 @@ ComputeQvalues::ComputeQvalues(ProjectSp project_sp) ...@@ -78,12 +94,54 @@ ComputeQvalues::ComputeQvalues(ProjectSp project_sp)
} }
} }
computeTandemPeptideEvidenceQvalues(tandem_peptide_evidence_list); computeTandemPeptideEvidenceQvalues(tandem_peptide_evidence_list);
computeMascotPeptideEvidenceQvalues(mascot_peptide_evidence_list);
} }
ComputeQvalues::~ComputeQvalues() ComputeQvalues::~ComputeQvalues()
{ {
} }
void
ComputeQvalues::computeMascotPeptideEvidenceQvalues(
std::vector<PeptideEvidence *> &mascot_peptide_evidence_list) const
{
// mascot_expectation_value
std::sort(mascot_peptide_evidence_list.begin(),
mascot_peptide_evidence_list.end(),
[](const PeptideEvidence *pepa, const PeptideEvidence *pepb) {
QVariant evalue_a =
pepa->getParam(PeptideEvidenceParam::mascot_expectation_value);
QVariant evalue_b =
pepb->getParam(PeptideEvidenceParam::mascot_expectation_value);
if(evalue_a.isNull() || evalue_b.isNull())
{
throw pappso::ExceptionNotImplemented(QObject::tr(
"Mascot Evalue is missing, unable to compute q-value"));
}
return (evalue_a.toDouble() < evalue_b.toDouble());
});
std::size_t count_decoy = 0;
std::size_t count_target = 0;
for(PeptideEvidence *pep : mascot_peptide_evidence_list)
{
if(m_falsePeptideEvidenceList.find(pep) !=
m_falsePeptideEvidenceList.end())
{
count_decoy++;
}
else
{
count_target++;
}
double qvalue = Utils::computeFdr(count_decoy, count_target);
pep->setParam(PeptideEvidenceParam::pappso_qvalue, QVariant(qvalue));
}
cleanPeptideEvidenceList(mascot_peptide_evidence_list);
}
void void
ComputeQvalues::computeTandemPeptideEvidenceQvalues( ComputeQvalues::computeTandemPeptideEvidenceQvalues(
std::vector<PeptideEvidence *> &tandem_peptide_evidence_list) const std::vector<PeptideEvidence *> &tandem_peptide_evidence_list) const
...@@ -110,12 +168,19 @@ ComputeQvalues::computeTandemPeptideEvidenceQvalues( ...@@ -110,12 +168,19 @@ ComputeQvalues::computeTandemPeptideEvidenceQvalues(
pep->setParam(PeptideEvidenceParam::pappso_qvalue, QVariant(qvalue)); pep->setParam(PeptideEvidenceParam::pappso_qvalue, QVariant(qvalue));
} }
cleanPeptideEvidenceList(tandem_peptide_evidence_list);
}
void
ComputeQvalues::cleanPeptideEvidenceList(
std::vector<PeptideEvidence *> &peptide_evidence_list) const
{
qDebug() << __FILE__ << " " << __FUNCTION__ << " " << __LINE__; qDebug() << __FILE__ << " " << __FUNCTION__ << " " << __LINE__;
// check reverse list to clean q-values // check reverse list to clean q-values
auto rit = tandem_peptide_evidence_list.rbegin(); auto rit = peptide_evidence_list.rbegin();
double qvalue_max = 99999999; double qvalue_max = 99999999;
while(rit != tandem_peptide_evidence_list.rend()) while(rit != peptide_evidence_list.rend())
{ {
if((*rit)->getParam(PeptideEvidenceParam::pappso_qvalue).toDouble() > if((*rit)->getParam(PeptideEvidenceParam::pappso_qvalue).toDouble() >
qvalue_max) qvalue_max)
......
...@@ -49,6 +49,11 @@ class ComputeQvalues ...@@ -49,6 +49,11 @@ class ComputeQvalues
private: private:
void computeTandemPeptideEvidenceQvalues( void computeTandemPeptideEvidenceQvalues(
std::vector<PeptideEvidence *> &tandem_peptide_evidence_list) const; std::vector<PeptideEvidence *> &tandem_peptide_evidence_list) const;
void computeMascotPeptideEvidenceQvalues(
std::vector<PeptideEvidence *> &mascot_peptide_evidence_list) const;
void cleanPeptideEvidenceList(
std::vector<PeptideEvidence *> &peptide_evidence_list) const;
private: private:
std::set<const PeptideEvidence *> m_falsePeptideEvidenceList; std::set<const PeptideEvidence *> m_falsePeptideEvidenceList;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment