void SequenceTools::getCDS(Sequence& sequence, bool checkInit, bool checkStop, bool includeInit, bool includeStop) { const CodonAlphabet* alphabet = dynamic_cast<const CodonAlphabet*>(sequence.getAlphabet()); if (!alphabet) throw AlphabetException("SequenceTools::getCDS. Sequence is not a codon sequence."); if (checkInit) { unsigned int i; for (i = 0; i < sequence.size() && !alphabet->isInit(sequence[i]); ++i) {} for (unsigned int j = 0; includeInit ? j < i : j <= i; ++j) { sequence.deleteElement(j); } } if (checkStop) { unsigned int i; for (i = 0; i < sequence.size() && !alphabet->isStop(sequence[i]); ++i) {} for (unsigned int j = includeStop ? i + 1 : i; j < sequence.size(); ++j) { sequence.deleteElement(j); } } }
void SequenceTools::removeGaps(Sequence& seq) { const Alphabet* alpha = seq.getAlphabet(); for (size_t i = seq.size(); i > 0; --i) { if (alpha->isGap(seq[i - 1])) seq.deleteElement(i - 1); } }
void SequenceTools::removeStops(Sequence& seq) throw (Exception) { const CodonAlphabet* calpha = dynamic_cast<const CodonAlphabet*>(seq.getAlphabet()); if (!calpha) throw Exception("SequenceTools::removeStops. Input sequence should have a codon alphabet."); for (size_t i = seq.size(); i > 0; --i) { if (calpha->isStop(seq[i - 1])) seq.deleteElement(i - 1); } }