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

variable modification API modified

parent b91ca07d
Branches
Tags
No related merge requests found
......@@ -189,6 +189,24 @@ std::vector< unsigned int > Peptide::getAaPositionList(char aa) const {
}
std::vector< unsigned int > Peptide::getAaPositionList(std::list < char > list_aa) const {
std::vector< unsigned int > position_list;
unsigned int number = 0;
std::vector<Aa>::const_iterator it(_aa_vec.begin());
while (it != _aa_vec.end()) {
bool found = (std::find(list_aa.begin(), list_aa.end(), it->getLetter()) != list_aa.end());
if (found) {
position_list.push_back(number);
}
number++;
it++;
}
//qDebug() << "Aa::getMass() end " << mass;
return position_list;
}
AaModificationP Peptide::getInternalNterModification() const {
std::vector<Aa>::const_iterator it(_aa_vec.begin());
if (it != _aa_vec.end()) {
......
......@@ -109,6 +109,7 @@ public:
};
unsigned int getNumberOfModification(AaModificationP mod) const;
std::vector< unsigned int > getAaPositionList(char _aa) const;
std::vector< unsigned int > getAaPositionList(std::list < char > list_aa) const;
/* \brief print modification except internal modifications */
const QString toString() const;
......
......@@ -40,6 +40,8 @@ public:
void setSink (PeptideModificatorInterface * sink) override {
_sink = sink;
};
void setNter(bool arg1) {_nter_mod=arg1;};
void setCter(bool arg1) {_cter_mod=arg1;};
private :
PeptideModificatorInterface * _sink=nullptr;
......
......@@ -63,8 +63,8 @@ bool next_combination(const Iterator first, Iterator k, const Iterator last)
return false;
}
PeptideVariableModificationBuilder::PeptideVariableModificationBuilder( char aa, AaModificationP mod)
: _aa(aa), _mod(mod)
PeptideVariableModificationBuilder::PeptideVariableModificationBuilder(AaModificationP mod)
: _mod(mod)
{
}
......@@ -74,17 +74,24 @@ PeptideVariableModificationBuilder::~PeptideVariableModificationBuilder()
}
void PeptideVariableModificationBuilder::addAa(char aa) {
_aa_modification_list.push_back(aa);
}
void PeptideVariableModificationBuilder::setPeptideSp(ProteinSp & protein_sp, PeptideSp & peptide_sp_original, unsigned int start) {
std::vector< unsigned int > position_list = peptide_sp_original.get()->getAaPositionList(_aa);
std::vector< unsigned int > position_list = peptide_sp_original.get()->getAaPositionList(_aa_modification_list);
//std::string s = "12345";
//no AA modification :
if (_min_number_mod == 0) {
_sink->setPeptideSp(protein_sp, peptide_sp_original, start);
}
unsigned int nb_pos = position_list.size();
if (nb_pos > 0) {
//loop to find 1 to n-1 AA modification combinations
unsigned int comb_size = 1;
while (comb_size < nb_pos) {
while ((comb_size < nb_pos) && (comb_size <= _max_number_mod)) {
do
{
// std::cout << std::string(being,begin + comb_size) << std::endl;
......@@ -98,6 +105,8 @@ void PeptideVariableModificationBuilder::setPeptideSp(ProteinSp & protein_sp, Pe
while(next_combination(position_list.begin(),position_list.begin() + comb_size,position_list.end()));
comb_size++;
}
if (nb_pos <= _max_number_mod) {
//the last combination : all aa are modified :
Peptide new_peptide(*(peptide_sp_original.get()));
for (unsigned int i=0; i < nb_pos; i++) {
......@@ -106,6 +115,7 @@ void PeptideVariableModificationBuilder::setPeptideSp(ProteinSp & protein_sp, Pe
PeptideSp new_peptide_sp = new_peptide.makePeptideSp();
_sink->setPeptideSp(protein_sp, new_peptide_sp, start);
}
}
}
......
......@@ -35,19 +35,25 @@ namespace pappso {
class PeptideVariableModificationBuilder: public PeptideModificatorInterface, PeptideSpSinkInterface
{
public:
PeptideVariableModificationBuilder(char aa, AaModificationP mod);
PeptideVariableModificationBuilder(AaModificationP mod);
~PeptideVariableModificationBuilder();
void setPeptideSp(ProteinSp & protein_sp, PeptideSp & peptide_sp_original, unsigned int start) override;
void addAa(char aa);
void setMaxNumberMod(unsigned int max_num) {_max_number_mod = max_num;};
void setMinNumberMod(unsigned int min_num) {_min_number_mod = min_num;};
void setSink (PeptideModificatorInterface * sink) override {
_sink = sink;
};
private :
PeptideModificatorInterface * _sink=nullptr;
char _aa;
std::list < char > _aa_modification_list;
AaModificationP _mod;
unsigned int _level=0;
unsigned int _max_number_mod=30000;
unsigned int _min_number_mod=0;
};
}
......
......@@ -133,7 +133,8 @@ int main(int argc, char *argv[]) {
//acc = "MOD:00719";
AaModificationP met_oxy = AaModification::getInstance("MOD:00719");
PeptideVariableModificationBuilder var_mod_builder('M', met_oxy);
PeptideVariableModificationBuilder var_mod_builder( met_oxy);
var_mod_builder.addAa('M');
var_mod_builder.setSink(&modification_sink);
// QString accMo = "MOD:00719";
......@@ -166,5 +167,9 @@ int main(int argc, char *argv[]) {
qDebug() << "kinase.eat(protein_sp,semi_tryptic)";
kinase.eat(protein_sp,semi_tryptic);
qDebug() << endl << "..:: Test enzyme motif ::.." << endl;
Enzyme motif_digest("(MAMEE[KR])([^P])");
motif_digest.eat(fake,digestion);
return 0;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment