00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include <Sequence/stateCounter.hpp>
00025 #include <cctype>
00026
00027 namespace Sequence
00028 {
00057 stateCounter::stateCounter(const char &gapchar):_gap(gapchar),a(0),g(0),c(0),
00058 t(0),zero(0),one(0),gap(0),n(0),ndna(false)
00062 {}
00063
00064 void stateCounter::operator()(const char &ch) const
00068 {
00069 if (ch == _gap)
00070 {
00071 ++gap;
00072 }
00073 else
00074 {
00075 char _ch = char(toupper(ch));
00076 switch(_ch)
00077 {
00078 case 'A':
00079 ++a;
00080 break;
00081 case 'G':
00082 ++g;
00083 break;
00084 case 'C':
00085 ++c;
00086 break;
00087 case 'T':
00088 ++t;
00089 break;
00090 case '0':
00091 ++zero;
00092 break;
00093 case '1':
00094 ++one;
00095 break;
00096 case 'N':
00097 ++n;
00098 break;
00099 default:
00100 ndna = true;
00101 break;
00102 }
00103 }
00104 }
00105
00106 unsigned stateCounter::nStates(void) const
00111 {
00112 unsigned nstates = (a > 0) ? 1 : 0;
00113 nstates += (g > 0) ? 1 : 0;
00114 nstates += (c > 0) ? 1 : 0;
00115 nstates += (t > 0) ? 1 : 0;
00116 nstates += (zero > 0) ? 1 : 0;
00117 nstates += (one > 0) ? 1 : 0;
00118 return nstates;
00119 }
00120 }