Move alphabet type into SeqString
[mussa.git] / alg / seq.cpp
1 #include <stdexcept>
2
3 #include "seq.hpp"
4
5 const Alphabet& SeqString::get_alphabet() const
6 {
7   return Alphabet::get_alphabet(alphabet);
8 }
9
10 std::string SeqString::create_reverse_complement_map() const 
11 {
12   std::string rc_map(256, '~');
13   // if we're rna, use U instead of T
14   // we might want to add an "is_rna" to sequence at somepoint
15   char TU = (alphabet == reduced_rna_alphabet) ? 'U' : 'T';
16   char tu = (alphabet == reduced_rna_alphabet) ? 'u' : 't';
17   rc_map['A'] = TU ; rc_map['a'] = tu ;
18   rc_map['T'] = 'A'; rc_map['t'] = 'a';
19   rc_map['U'] = 'A'; rc_map['u'] = 'a';
20   rc_map['G'] = 'C'; rc_map['g'] = 'c';
21   rc_map['C'] = 'G'; rc_map['c'] = 'g';
22   rc_map['M'] = 'K'; rc_map['m'] = 'k';
23   rc_map['R'] = 'Y'; rc_map['r'] = 'y';
24   rc_map['W'] = 'W'; rc_map['w'] = 'w';
25   rc_map['S'] = 'S'; rc_map['s'] = 's';
26   rc_map['Y'] = 'R'; rc_map['y'] = 'r';
27   rc_map['K'] = 'M'; rc_map['k'] = 'm';
28   rc_map['V'] = 'B'; rc_map['v'] = 'b';
29   rc_map['H'] = 'D'; rc_map['h'] = 'd';
30   rc_map['D'] = 'H'; rc_map['d'] = 'h';
31   rc_map['B'] = 'V'; rc_map['b'] = 'v';  
32   rc_map['N'] = 'N'; rc_map['n'] = 'n';
33   rc_map['X'] = 'X'; rc_map['x'] = 'x';
34   rc_map['?'] = '?'; 
35   rc_map['.'] = '.'; 
36   rc_map['-'] = '-'; 
37   rc_map['~'] = '~'; // not really needed, but perhaps it's clearer.
38    
39   return rc_map;
40 }