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
00018
00019
00020 char AMOS::Complement (
char ch)
00021 {
00022 ch = toupper (ch);
00023
switch (ch)
00024 {
00025
case 'A' :
00026
return 'T';
00027
case 'C' :
00028
return 'G';
00029
case 'G' :
00030
return 'C';
00031
case 'T' :
00032
case 'U' :
00033
return 'A';
00034
case 'R' :
00035
return 'Y';
00036
case 'Y' :
00037
return 'R';
00038
case 'S' :
00039
return 'S';
00040
case 'W' :
00041
return 'W';
00042
case 'M' :
00043
return 'K';
00044
case 'K' :
00045
return 'M';
00046
case 'B' :
00047
return 'V';
00048
case 'D' :
00049
return 'H';
00050
case 'H' :
00051
return 'D';
00052
case 'V' :
00053
return 'B';
00054
case 'N' :
00055
case 'X' :
00056
case '*' :
00057
case '-' :
00058
return ch;
00059
default :
00060
AMOS_THROW_ARGUMENT
00061 ((string)
"Cannot complement unknown character " + ch);
00062 }
00063 }
00064
00065
00066
00067 void AMOS::ReverseComplement (string & str)
00068 {
00069
Reverse (str);
00070
00071 string::iterator end = str . end( );
00072
for ( string::iterator beg = str . begin( ); beg != end; ++ beg )
00073 *beg =
Complement (*beg);
00074 }
00075
00076
00077
00078 void AMOS::ReverseComplement (
char * str)
00079 {
00080
Reverse (str);
00081
00082
char * end = str + strlen (str);
00083
for (
char * beg = str; beg != end; ++ beg )
00084 *beg =
Complement (*beg);
00085 }
00086
00087
00088
00089 void AMOS::Reverse (string & str)
00090 {
00091 reverse (str . begin( ), str . end( ));
00092 }
00093
00094
00095
00096 void AMOS::Reverse (
char * str)
00097 {
00098 reverse (str, str + strlen (str));
00099 }