#include "PGTwoIII_PerProtein.h" #include #include PerProtein::PerProtein() { RealProteinIndex = 0; NumberOfPositions = 0; LengthOfProtein = 0; } PerProtein::PerProtein(const PerProtein & rval) { RealProteinIndex = rval.RealProteinIndex; NumberOfPositions = rval.NumberOfPositions; LengthOfProtein = rval.LengthOfProtein; EndOfPrefix = rval.EndOfPrefix; CurrentPrefix = rval.CurrentPrefix; } void PerProtein::InitiatePerProtein(const string & OneProtein, const char & FirstPrefix, const int & ProteinIndexInput, const int & Max_Pat_Length) { RealProteinIndex = ProteinIndexInput; LengthOfProtein = OneProtein.size(); NumberOfPositions = 0; for (int ResidueIndex = 0; ResidueIndex < LengthOfProtein-1; ResidueIndex++) { if (OneProtein[ResidueIndex] == FirstPrefix) { CurrentPrefix.push_back(ResidueIndex); NumberOfPositions++; if (ResidueIndex + Max_Pat_Length < LengthOfProtein-1) EndOfPrefix.push_back(ResidueIndex + Max_Pat_Length); else EndOfPrefix.push_back(LengthOfProtein-1); } } } void PerProtein::UpdateCurrentPrefix(const string & OneProtein, const char & NewPrefix) { for (int PositionIndex = CurrentPrefix.size() - 1; PositionIndex >= 0; PositionIndex--) { bool found = false; for (int ResidueIndex = CurrentPrefix[PositionIndex] + 1; ResidueIndex < EndOfPrefix[PositionIndex]; ResidueIndex++) { if (OneProtein[ResidueIndex] == NewPrefix) { found = true; CurrentPrefix[PositionIndex] = ResidueIndex; break; } } if (!found) DeleteOnePosition(PositionIndex); } } void PerProtein::DeleteOnePosition(const int & PositionIndex) { int End = EndOfPrefix.size() - 1; if (PositionIndex != (End)) { // not the last one; EndOfPrefix[PositionIndex] = EndOfPrefix[End]; CurrentPrefix[PositionIndex] = CurrentPrefix[End]; } EndOfPrefix.pop_back(); CurrentPrefix.pop_back(); NumberOfPositions--; } void PerProtein::Copy(const PerProtein & rval) { RealProteinIndex = rval.RealProteinIndex; NumberOfPositions = rval.NumberOfPositions; LengthOfProtein = rval.LengthOfProtein; EndOfPrefix = rval.EndOfPrefix; CurrentPrefix = rval.CurrentPrefix; } int PerProtein::GetRealProteinIndex() {return RealProteinIndex;} int PerProtein::GetNumberOfPositions() {return NumberOfPositions;} int PerProtein::GetLengthOfProtein() {return LengthOfProtein;}