Skip to content
Snippets Groups Projects
proteinxtp.cpp 3.42 KiB
Newer Older

/*******************************************************************************
* Copyright (c) 2017 Olivier Langella <olivier.langella@u-psud.fr>.
*
* This file is part of XTPcpp.
*
*     XTPcpp is free software: you can redistribute it and/or modify
*     it under the terms of the GNU General Public License as published by
*     the Free Software Foundation, either version 3 of the License, or
*     (at your option) any later version.
*
*     XTPcpp is distributed in the hope that it will be useful,
*     but WITHOUT ANY WARRANTY; without even the implied warranty of
*     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*     GNU General Public License for more details.
*
*     You should have received a copy of the GNU General Public License
*     along with XTPcpp.  If not, see <http://www.gnu.org/licenses/>.
*
* Contributors:
*     Olivier Langella <olivier.langella@u-psud.fr> - initial API and implementation
******************************************************************************/

#include "proteinxtp.h"
Olivier Langella's avatar
Olivier Langella committed
#include <pappsomspp/protein/enzyme.h>

ProteinXtp::ProteinXtp():pappso::Protein()
{

}

ProteinXtp::ProteinXtp(const ProteinXtp& other):pappso::Protein(other)
{
    _is_decoy=other._is_decoy;
    _is_contaminant=other._is_contaminant;
Olivier Langella's avatar
Olivier Langella committed
    _p_sequence_database = other._p_sequence_database;
}

ProteinXtp::~ProteinXtp()
{

}

bool ProteinXtp::operator==(const ProteinXtp& other) const
{
    return pappso::Protein::operator==(other);
}

ProteinXtpSp ProteinXtp::makeProteinXtpSp() const {
    return std::make_shared<ProteinXtp>(*this);
}

void ProteinXtp::setCompleteDescription(const QString & full_description) {
    setAccession (full_description.simplified().section(" ", 0,0));
    setDescription (full_description.simplified().section(" ", 1));
Olivier Langella's avatar
Olivier Langella committed
void ProteinXtp::setIsContaminant(bool conta) {
    _is_contaminant = conta;
}
void ProteinXtp::setIsDecoy(bool conta) {
    _is_decoy = conta;
}
bool ProteinXtp::isContaminant() const {
    return _is_contaminant;
}
bool ProteinXtp::isDecoy() const {
    return _is_decoy;
}
Olivier Langella's avatar
Olivier Langella committed

QString ProteinXtp::getOnlyAminoAcidSequence() const {
    QString sequence(this->getSequence());
    return sequence.replace(QRegExp("\\*"), "");
}

pappso::pappso_double ProteinXtp::getMass() const {
    pappso::Peptide peptide(getOnlyAminoAcidSequence());
    return peptide.getMass();
}

Olivier Langella's avatar
Olivier Langella committed
class DigestionHandler: public pappso::EnzymeProductInterface {
public:
    void setPeptide(std::int8_t sequence_database_id, const pappso::ProteinSp & protein_sp, bool is_decoy, const QString& peptide, unsigned int start, bool is_nter, unsigned int missed_cleavage_number, bool semi_enzyme) override {
        _peptide_list.append(peptide);
    };

    QStringList _peptide_list;
};

unsigned int ProteinXtp::countTrypticPeptidesForPAI() const {
    qDebug() << "ProteinXtp::countTrypticPeptidesForPAI begin";
    pappso::Enzyme kinase;
    kinase.setMiscleavage(0);
    DigestionHandler digestion;

    pappso::ProteinSp protein = std::make_shared<const pappso::Protein>(this->getDescription(),this->getOnlyAminoAcidSequence());
    kinase.eat(0,protein,false,digestion);
Olivier Langella's avatar
Olivier Langella committed

    unsigned int count = 0;
    for (const QString & peptide_str: digestion._peptide_list) {
        pappso::Peptide peptide(peptide_str);
        pappso::mz mass= peptide.getMass();
        if ((mass > 800) && (mass < 2500)) {
            count ++;
        }
    }

    return count;
    qDebug() << "ProteinXtp::countTrypticPeptidesForPAI end";
}