]> git.donarmstrong.com Git - mothur.git/blob - uchime_src/alpha2.cpp
changes while testing
[mothur.git] / uchime_src / alpha2.cpp
1 #include "myutils.h"\r
2 #include "alpha.h"\r
3 #include "timing.h"\r
4 \r
5 bool isgap(byte c)\r
6         {\r
7         return c == '-' || c == '.';\r
8         }\r
9 \r
10 const char *WordToStrAmino(unsigned Word, unsigned WordLength)\r
11         {\r
12         static char Str[32];\r
13         for (unsigned i = 0; i < WordLength; ++i)\r
14                 {\r
15                 unsigned Letter = Word%20;\r
16                 Str[WordLength-i-1] = g_LetterToCharAmino[Letter];\r
17                 Word /= 20;\r
18                 }\r
19         Str[WordLength] = 0;\r
20         return Str;\r
21         }\r
22 \r
23 const char *WordToStrAmino2(unsigned Word, unsigned WordLength, char *Str)\r
24         {\r
25         for (unsigned i = 0; i < WordLength; ++i)\r
26                 {\r
27                 unsigned Letter = Word%20;\r
28                 Str[WordLength-i-1] = g_LetterToCharAmino[Letter];\r
29                 Word /= 20;\r
30                 }\r
31         Str[WordLength] = 0;\r
32         return Str;\r
33         }\r
34 \r
35 const char *WordToStrNucleo(unsigned Word, unsigned WordLength)\r
36         {\r
37         static char Str[32];\r
38         for (unsigned i = 0; i < WordLength; ++i)\r
39                 {\r
40                 unsigned Letter = Word%4;\r
41                 Str[WordLength-i-1] = g_LetterToCharNucleo[Letter];\r
42                 Word /= 4;\r
43                 }\r
44         Str[WordLength] = 0;\r
45         return Str;\r
46         }\r
47 \r
48 const char *WordToStr(unsigned Word, unsigned WordLength, bool Nucleo)\r
49         {\r
50         return (Nucleo ? WordToStrNucleo : WordToStrAmino)(Word, WordLength);\r
51         }\r
52 \r
53 byte *RevCompAlloc(const byte *Seq, unsigned L)\r
54         {\r
55         byte *RCSeq = MYALLOC(byte, L, Alpha);\r
56 \r
57         for (unsigned i = 0; i < L; ++i)\r
58                 RCSeq[L-i-1] = g_CharToCompChar[Seq[i]];\r
59 \r
60         return RCSeq;\r
61         }\r
62 \r
63 void RevCompInPlace(byte *Seq, unsigned L)\r
64         {\r
65         unsigned L1 = L - 1;\r
66         unsigned L2 = L/2;\r
67         for (unsigned i = 0; i < L2; ++i)\r
68                 {\r
69                 unsigned j = L1 - i;\r
70                 unsigned ci = Seq[i];\r
71                 unsigned cj = Seq[j];\r
72 \r
73                 unsigned ri = g_CharToCompChar[ci];\r
74                 unsigned rj = g_CharToCompChar[cj];\r
75 \r
76                 Seq[i] = rj;\r
77                 Seq[j] = ri;\r
78                 }\r
79 \r
80         if (L%2 == 1)\r
81                 Seq[L2] = g_CharToCompChar[Seq[L2]];\r
82         }\r
83 \r
84 void RevComp(const byte *Seq, unsigned L, byte *RCSeq)\r
85         {\r
86         for (unsigned i = 0; i < L; ++i)\r
87                 RCSeq[L-i-1] = g_CharToCompChar[Seq[i]];\r
88         }\r
89 \r
90 unsigned char GetAminoCharFrom3NucChars(unsigned char c1, unsigned char c2,\r
91   unsigned char c3)\r
92         {\r
93         unsigned Letter1 = g_CharToLetterNucleo[c1];\r
94         unsigned Letter2 = g_CharToLetterNucleo[c2];\r
95         unsigned Letter3 = g_CharToLetterNucleo[c3];\r
96         unsigned Word = Letter1*(4*4) + Letter2*4 + Letter3;\r
97 \r
98         unsigned Letter = g_CodonWordToAminoLetter[Word];\r
99         return g_LetterToCharAmino[Letter];\r
100         }\r