42 #include <boost/lexical_cast.hpp>
45 #include "Sequence_Interface.hpp"
64 std::string _sequence;
83 Sequence(
const std::string &seq_name,
const std::string &seq,
const std::string &comment_=
"",
size_t seq_id=0);
93 Sequence(
const std::string &seq_name,
const std::string &comment_,
unsigned int seq_length,
size_t seq_id=0);
120 return _sequence[index];
128 return _sequence[index];
198 _comment=other._comment;
199 _sequence=other._sequence;
206 friend std::ostream& operator<< (std::ostream &out,
const Sequence &seq);
223 void name(
const std::string &na)
277 return _sequence.size();
286 return _sequence.size();
328 _sequence.append(seq);
345 _sequence.push_back(c);
355 _sequence.resize(new_length);
364 std::string::iterator it, it_end =_sequence.end();
365 for (it = _sequence.begin(); it != it_end; ++it)
375 std::string::iterator it, it_end =_sequence.end();
376 for (it = _sequence.begin(); it != it_end; ++it)
386 std::reverse(_sequence.begin(), _sequence.end());
394 insert_gaps(
const std::vector<std::pair<unsigned int, unsigned int> > vec);
409 template<
typename SeqType>
411 identify_seq_type(
const SeqType &seq)
413 size_t seq_len = seq.size();
415 for (
unsigned int i = 0; i < seq_len; ++i)
418 if ((c !=
'a') && (c !=
'c') && (c !=
'g') && (c !=
't') && (c !=
'u'))
425 template<
typename SeqType>
426 std::pair<size_t, size_t>
427 coverage(
const SeqType &seq1,
const SeqType &seq2)
429 size_t len=seq1.size();
430 if (len != seq2.size())
431 return std::pair<size_t, size_t>(-1,-1);
432 size_t pair_len=0, pos=0;
433 for (
size_t i=0; i<len; ++i)
435 if ((seq1[i]!=
'-') || (seq2[i]!=
'-'))
437 if ((seq1[i]!=
'-') && (seq2[i]!=
'-'))
441 return std::pair<size_t, size_t>(pos, pair_len);
444 template<
typename SeqType>
445 std::pair<size_t, size_t>
446 id(
const SeqType &seq1,
const SeqType &seq2)
448 size_t len=seq1.size();
449 if (len != seq2.size())
450 return std::pair<size_t, size_t>(-1,-1);
451 size_t pair_len=0, pos=0;
452 for (
size_t i=0; i<len; ++i)
454 if ((seq1[i]!=
'-') || (seq2[i]!=
'-'))
456 if (seq1[i] == seq2[i])
460 return std::pair<size_t, size_t>(pos, pair_len);
464 template<
typename SeqType>
466 seq_check(
const SeqType &seq1,
const SeqType &seq2)
468 size_t seq1_l = seq1.size();
469 size_t seq2_l = seq2.size();
471 for (i=0; i < seq1_l; ++i)
475 while ((j<seq2_l) && (seq2[j] ==
'-'))
478 if ((j==seq2_l) || (tolower(seq1[i]) != tolower(seq2[j])))
492 template<
typename SeqType>
494 bio_seq(
const SeqType &seq)
496 size_t len = seq.size();
498 for (
size_t i=0; i<len; ++i)
501 if ((c!=45) && ((c<97) || (c>122)))
519 template<
typename SequenceTypeIn,
typename SequenceTypeOut>
521 dna2prot(
const SequenceTypeIn &seq)
523 SequenceTypeOut new_seq(seq.name(), seq.comment(), seq.size()/3, seq.id());
524 const std::string &seq_string = seq.sequence();
525 new_seq.append(dna2prot<std::string,std::string>(seq_string));
532 dna2prot<std::string, std::string>(
const std::string &seq);