Main Page | Class Hierarchy | Class List | File List | Class Members

DnaStr.hpp

00001 
00002 // Copyright (c) 2003, The Institute for Genomic Research (TIGR), Rockville,
00003 // Maryland, U.S.A.  All rights reserved.
00005 inline bool DnaStr::isStop(int bp) const {
00006     if(length() < static_cast<unsigned>(bp+2) || bp < 1)
00007         return false;
00008     char a, b, c;
00009     if(getStrnd() == dsu::ePos) {
00010       a = (*this)[bp];
00011       b = (*this)[bp+1];
00012       c = (*this)[bp+2];
00013     } else {
00014       c = (*this)[bp];
00015       b = (*this)[bp+1];
00016       a = (*this)[bp+2];
00017     }
00018     bool firstIsU = isU(a);
00019     bool secIsA = isA(b);
00020     return  
00021       (firstIsU && secIsA && isR(c)) ||
00022       (firstIsU && isR(b) && isA(c));
00023   }
00024 
00025 inline bool DnaStr::isC(char c) {
00026   switch(c) {
00027   case 'C':
00028   case 'c':
00029     return true;
00030   default:
00031     return false;
00032   }
00033 }
00034 
00035 inline bool DnaStr::isA(char c) {
00036   switch(c) {
00037   case 'A':
00038   case 'a':
00039     return true;
00040   default:
00041     return false;
00042   }
00043 }
00044 
00045 inline bool DnaStr::isR(char c) {
00046   char lc = tolower(c);
00047   return lc=='r'||lc=='a'||lc=='g'?true:false;
00048 }
00049 
00050 inline bool DnaStr::isU(char c) {
00051   return c=='T'||c=='t'||c=='u'||c=='U'?true:false;
00052 }
00053 
00054 inline bool DnaStr::isG(char c) {
00055   switch(c) {
00056   case 'g':
00057   case 'G':
00058     return true;
00059   default:
00060     return false;
00061   }
00062 }
00063 
00064 inline bool DnaStr::isStart(int bp) const {
00065   if(length() < static_cast<unsigned>(bp+2) || bp < 1)
00066     return false;
00067   if(getStrnd()==dsu::ePos) {
00068     return isA((*this)[bp]) && isU((*this)[bp+1]) && isG((*this)[bp+2]);
00069   } else {
00070     return isA((*this)[bp+2]) && isU((*this)[bp+1]) && isG((*this)[bp]);
00071   }
00072 }
00073 
00074 inline bool DnaStr::isStart(const char codon[3]) const {
00075   if(getStrnd() == dsu::ePos)
00076     return isA(codon[0]) && isU(codon[1]) && isG(codon[2]);
00077   else
00078     return isA(codon[2]) && isU(codon[1]) && isG(codon[0]);
00079 }
00080 
00081 inline bool DnaStr::isStop(const char codon[3]) const {
00082   const char* tmpPtr = codon;
00083   char a,b,c;
00084   if(getStrnd()==dsu::ePos) {
00085     a = *tmpPtr; b = *(++tmpPtr); c = *(++tmpPtr);
00086   } else {
00087     c = *tmpPtr; b = *(++tmpPtr); a = *(++tmpPtr);
00088   }
00089   bool firstIsU = isU(a);
00090   bool secIsA = isA(b);
00091 
00092   return 
00093       (firstIsU && secIsA && isR(c)) ||
00094       (firstIsU && isR(b) && isA(c));
00095 }