00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include "utility_AMOS.hh"
00011 #include <algorithm>
00012 #include <cstring>
00013 using namespace AMOS;
00014 using namespace std;
00015
00016
00017 const char COMPLEMENT_DNA[256] =
00018 {
00019 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
00020 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
00021 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
00022 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
00023 64,'T','V','G','H', 69, 70,'C','D', 73, 74,'M', 76,'K','N', 79,
00024 80, 81,'Y','S','A', 85,'B','W','X','R', 90, 91, 92, 93, 94, 95,
00025 96,'t','v','g','h',101,102,'c','d',105,106,'m',108,'k','n',111,
00026 112,113,'y','s','a',117,'b','w','x','r',122,123,124,125,126,127,
00027 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
00028 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
00029 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
00030 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
00031 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,
00032 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,
00033 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
00034 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255
00035 };
00036
00037
00038
00039 char AMOS::Complement (char ch)
00040 {
00041 return COMPLEMENT_DNA[ int(ch) ];
00042 }
00043
00044
00045
00046 void AMOS::ReverseComplement(string & str)
00047 {
00048 char ch;
00049 string::iterator lo = str.begin();
00050 string::iterator hi = str.end() - 1;
00051 while ( lo <= hi )
00052 {
00053 ch = *hi;
00054 *hi = COMPLEMENT_DNA[ int(*lo) ];
00055 *lo = COMPLEMENT_DNA[ int(ch) ];
00056 lo++; hi--;
00057 }
00058 }
00059
00060
00061
00062 void AMOS::ReverseComplement(char * str)
00063 {
00064 char ch;
00065 char *lo = str;
00066 char *hi = str + strlen(str) - 1;
00067 while ( lo <= hi )
00068 {
00069 ch = *hi;
00070 *hi = COMPLEMENT_DNA[ int(*lo) ];
00071 *lo = COMPLEMENT_DNA[ int(ch) ];
00072 lo++; hi--;
00073 }
00074 }
00075
00076
00077
00078 void AMOS::Reverse (string & str)
00079 {
00080 reverse (str . begin( ), str . end( ));
00081 }
00082
00083
00084
00085 void AMOS::Reverse (char * str)
00086 {
00087 reverse (str, str + strlen (str));
00088 }