00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00013
00014 #include "gn/gnCompare.h"
00015
00016
00017 const gnTranslator *gnTranslator::ProteinDNATranslator(){
00018 const static gnTranslator* t_trans = new gnTranslator(ProteinDNATranslatorType);
00019 return t_trans;
00020 }
00021 const gnTranslator *gnTranslator::ProteinRNATranslator(){
00022 const static gnTranslator* t_trans = new gnTranslator(ProteinRNATranslatorType);
00023 return t_trans;
00024 }
00025 const gnTranslator *gnTranslator::DNAProteinTranslator(){
00026 const static gnTranslator* t_trans = new gnTranslator(DNAProteinTranslatorType);
00027 return t_trans;
00028 }
00029 const gnTranslator *gnTranslator::RNAProteinTranslator(){
00030 const static gnTranslator* t_trans = new gnTranslator(RNAProteinTranslatorType);
00031 return t_trans;
00032 }
00033
00034
00035 gnTranslator::gnTranslator()
00036 {
00037 use_default = false;
00038 m_defaultChar = 0;
00039 m_defaultInputWidth = 1;
00040 }
00041
00042 gnTranslator::gnTranslator( const gnTranslator &sf )
00043 {
00044 m_name = sf.m_name;
00045 use_default = sf.use_default;
00046 m_defaultChar = sf.m_defaultChar;
00047 compare = sf.compare;
00048 m_inputTable = sf.m_inputTable;
00049 m_outputTable = sf.m_outputTable;
00050 m_defaultInputWidth = sf.m_defaultInputWidth;
00051 }
00052 gnTranslator::gnTranslator( gnTranslatorType t_type )
00053 {
00054 use_default = false;
00055 m_defaultChar = 0;
00056 switch(t_type){
00057 case ProteinDNATranslatorType:
00058 CreateProteinDNATranslator();
00059 break;
00060 case ProteinRNATranslatorType:
00061 CreateProteinRNATranslator();
00062 break;
00063 case DNAProteinTranslatorType:
00064 CreateDNAProteinTranslator();
00065 break;
00066 case RNAProteinTranslatorType:
00067 CreateRNAProteinTranslator();
00068 break;
00069 }
00070 }
00071
00072
00073 gnSeqC gnTranslator::Filter( const gnSeqC ch ) const{
00074 for(uint32 i=0; i < m_inputTable.size(); i++){
00075 if(m_inputTable[i].length() == 1)
00076 if(compare->Contains(m_inputTable[i][0], ch))
00077 return m_outputTable[i][0];
00078 }
00079 return m_defaultChar;
00080 }
00081
00082 void gnTranslator::Filter( gnSeqC** seq, uint32& len ) const{
00083 uint32 curpos = 0;
00084 string output;
00085 while(curpos < len){
00086 uint32 i=0;
00087 for(; i < m_inputTable.size(); i++){
00088
00089 uint32 curlen = m_inputTable[i].length();
00090 if(len - curpos < curlen)
00091 continue;
00092 if(compare->Contains(m_inputTable[i].data(), *seq + curpos, curlen)){
00093 output += m_outputTable[i];
00094 curpos += curlen;
00095 break;
00096 }
00097 }
00098 if(i == m_inputTable.size()){
00099
00100 if(use_default)
00101 output += m_defaultChar;
00102 curpos += m_defaultInputWidth;
00103 }
00104 }
00105 if(output.length() > len){
00106 delete[] *seq;
00107 *seq = new gnSeqC[output.length()];
00108 }
00109 len = output.length();
00110 memcpy(*seq, output.data(), len);
00111 }
00112
00113 void gnTranslator::Filter( string &seq ) const{
00114 uint32 curpos = 0;
00115 uint32 len = seq.length();
00116 string output;
00117 while(curpos < len){
00118 uint32 i=0;
00119 for(; i < m_inputTable.size(); i++){
00120
00121 uint32 curlen = m_inputTable[i].length();
00122 if(len - curpos < curlen)
00123 continue;
00124 if(compare->Contains(m_inputTable[i], seq.substr(curpos, curlen))){
00125 output += m_outputTable[i];
00126 curpos += curlen;
00127 break;
00128 }
00129 }
00130 if(i == m_inputTable.size()){
00131
00132 if(use_default)
00133 output += m_defaultChar;
00134 curpos += m_defaultInputWidth;
00135 }
00136 }
00137 seq = output;
00138 }
00139
00140
00141 void gnTranslator::SetPair( const string& ch1, const string& ch2 )
00142 {
00143 if(ch1.length() == 0)
00144 return;
00145
00146 m_inputTable.push_back(ch1);
00147 m_outputTable.push_back(ch2);
00148 }
00149
00150 void gnTranslator::RemovePair( const string& ch )
00151 {
00152 for(uint32 i=0; i < m_inputTable.size(); i++){
00153 if(m_inputTable[i] == ch){
00154 m_inputTable.erase(m_inputTable.begin()+i);
00155 m_outputTable.erase(m_outputTable.begin()+i);
00156 }
00157 }
00158 }
00159
00160
00161 void gnTranslator::CreateProteinDNATranslator(){
00162 SetName( "Protein to DNA Translator" );
00163
00164 SetDefaultChar('X');
00165 SetCompare(gnCompare::ProteinSeqCompare());
00166 m_defaultInputWidth = 1;
00167 SetPair( "F", "TTY" );
00168 SetPair( "L", "YTX" );
00169 SetPair( "I", "ATH" );
00170 SetPair( "M", "ATG" );
00171 SetPair( "V", "GTX" );
00172 SetPair( "P", "CCX" );
00173 SetPair( "T", "ACX" );
00174 SetPair( "A", "GCX" );
00175 SetPair( "Y", "TAY" );
00176 SetPair( ".", "TRR" );
00177 SetPair( "H", "CAY" );
00178 SetPair( "Q", "CAR" );
00179 SetPair( "N", "AAY" );
00180 SetPair( "K", "AAR" );
00181 SetPair( "D", "GAY" );
00182 SetPair( "E", "GAR" );
00183 SetPair( "C", "TGY" );
00184 SetPair( "W", "TGG" );
00185 SetPair( "G", "GGX" );
00186
00187 SetPair( "S", "TCX" );
00188 SetPair( "S", "AGY");
00189 SetPair( "R", "CGX");
00190 SetPair( "R", "AGR");
00191 }
00192
00193 void gnTranslator::CreateProteinRNATranslator(){
00194 SetName( "Protein to RNA Translator" );
00195 SetDefaultChar('X');
00196 SetCompare(gnCompare::ProteinSeqCompare());
00197 m_defaultInputWidth = 1;
00198
00199 SetPair( "F", "UUY" );
00200 SetPair( "L", "YUX" );
00201 SetPair( "I", "AUH" );
00202 SetPair( "M", "AUG" );
00203 SetPair( "V", "GUX" );
00204 SetPair( "P", "CCX" );
00205 SetPair( "U", "ACX" );
00206 SetPair( "A", "GCX" );
00207 SetPair( "Y", "UAY" );
00208 SetPair( ".", "URR" );
00209 SetPair( "H", "CAY" );
00210 SetPair( "Q", "CAR" );
00211 SetPair( "N", "AAY" );
00212 SetPair( "K", "AAR" );
00213 SetPair( "D", "GAY" );
00214 SetPair( "E", "GAR" );
00215 SetPair( "C", "UGY" );
00216 SetPair( "W", "UGG" );
00217 SetPair( "G", "GGX" );
00218
00219 SetPair( "S", "UCX" );
00220 SetPair( "S", "AGY");
00221 SetPair( "R", "CGX");
00222 SetPair( "R", "AGR");
00223 }
00224
00225 void gnTranslator::CreateDNAProteinTranslator(){
00226 SetName( "DNA to Protein Translator" );
00227 SetDefaultChar('X');
00228 SetCompare(gnCompare::DNASeqCompare());
00229 m_defaultInputWidth = 3;
00230 use_default = true;
00231
00232 SetPair( "TTY", "F" );
00233 SetPair( "CTX", "L" );
00234 SetPair( "TTR", "L" );
00235 SetPair( "ATH", "I" );
00236 SetPair( "ATG", "M" );
00237 SetPair( "GTX", "V" );
00238 SetPair( "CCX", "P" );
00239 SetPair( "ACX", "T" );
00240 SetPair( "GCX", "A" );
00241 SetPair( "TAY", "Y" );
00242 SetPair( "TGG", "W" );
00243 SetPair( "TGA", "." );
00244 SetPair( "TAR", "." );
00245 SetPair( "CAY", "H" );
00246 SetPair( "CAR", "Q" );
00247 SetPair( "AAY", "N" );
00248 SetPair( "AAR", "K" );
00249 SetPair( "GAY", "D" );
00250 SetPair( "GAR", "E" );
00251 SetPair( "TGY", "C" );
00252 SetPair( "GGX", "G" );
00253
00254 SetPair( "TCX", "S" );
00255 SetPair( "AGY", "S" );
00256 SetPair( "CGX", "R" );
00257 SetPair( "AGR", "R" );
00258
00259 SetPair( "tty", "F" );
00260 SetPair( "ctx", "L" );
00261 SetPair( "ttr", "L" );
00262 SetPair( "ath", "I" );
00263 SetPair( "atg", "M" );
00264 SetPair( "gtx", "V" );
00265 SetPair( "ccx", "P" );
00266 SetPair( "acx", "T" );
00267 SetPair( "gcx", "A" );
00268 SetPair( "tay", "Y" );
00269 SetPair( "tgg", "W" );
00270 SetPair( "tga", "." );
00271 SetPair( "tar", "." );
00272 SetPair( "cay", "H" );
00273 SetPair( "car", "Q" );
00274 SetPair( "aay", "N" );
00275 SetPair( "aar", "K" );
00276 SetPair( "gay", "D" );
00277 SetPair( "gar", "E" );
00278 SetPair( "tgy", "C" );
00279 SetPair( "ggx", "G" );
00280
00281 SetPair( "tcx", "S" );
00282 SetPair( "agy", "S" );
00283 SetPair( "cgx", "R" );
00284 SetPair( "agr", "R" );
00285
00286 }
00287
00288 void gnTranslator::CreateRNAProteinTranslator(){
00289 SetName( "RNA to Protein Translator" );
00290 SetDefaultChar('X');
00291 SetCompare(gnCompare::RNASeqCompare());
00292 m_defaultInputWidth = 3;
00293 use_default = true;
00294
00295 SetPair( "UUY", "F" );
00296 SetPair( "CUX", "L" );
00297 SetPair( "UUR", "L" );
00298 SetPair( "AUH", "I" );
00299 SetPair( "AUG", "M" );
00300 SetPair( "GUX", "V" );
00301 SetPair( "CCX", "P" );
00302 SetPair( "ACX", "T" );
00303 SetPair( "GCX", "A" );
00304 SetPair( "UAY", "Y" );
00305 SetPair( "UGG", "W" );
00306 SetPair( "UGA", "." );
00307 SetPair( "UAR", "." );
00308 SetPair( "CAY", "H" );
00309 SetPair( "CAR", "Q" );
00310 SetPair( "AAY", "N" );
00311 SetPair( "AAR", "K" );
00312 SetPair( "GAY", "D" );
00313 SetPair( "GAR", "E" );
00314 SetPair( "UGY", "C" );
00315 SetPair( "GGX", "G" );
00316
00317 SetPair( "UCX", "S" );
00318 SetPair( "AGY", "S" );
00319 SetPair( "CGX", "R" );
00320 SetPair( "AGR", "R" );
00321
00322
00323 SetPair( "uuy", "F" );
00324 SetPair( "cux", "L" );
00325 SetPair( "uur", "L" );
00326 SetPair( "auh", "I" );
00327 SetPair( "aug", "M" );
00328 SetPair( "gux", "V" );
00329 SetPair( "ccx", "P" );
00330 SetPair( "acx", "T" );
00331 SetPair( "gcx", "A" );
00332 SetPair( "uay", "Y" );
00333 SetPair( "ugg", "W" );
00334 SetPair( "uga", "." );
00335 SetPair( "uar", "." );
00336 SetPair( "cay", "H" );
00337 SetPair( "car", "Q" );
00338 SetPair( "aay", "N" );
00339 SetPair( "aar", "K" );
00340 SetPair( "gay", "D" );
00341 SetPair( "gar", "E" );
00342 SetPair( "ugy", "C" );
00343 SetPair( "ggx", "G" );
00344
00345 SetPair( "ucx", "S" );
00346 SetPair( "agy", "S" );
00347 SetPair( "cgx", "R" );
00348 SetPair( "agr", "R" );
00349 }