Mercurial > repos > rliterman > csp2
diff CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/opt/mummer-3.23/src/tigr/translate.cc @ 69:33d812a61356
planemo upload commit 2e9511a184a1ca667c7be0c6321a36dc4e3d116d
author | jpayne |
---|---|
date | Tue, 18 Mar 2025 17:55:14 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/opt/mummer-3.23/src/tigr/translate.cc Tue Mar 18 17:55:14 2025 -0400 @@ -0,0 +1,103 @@ +#include "translate.hh" + + +long int Translate_DNA + (char * A, char * tA, int Frame) + + // function to translate dna sequence to aminoacid sequence + // uses esttrans' headers and algo + // A as read in from gene.h Read_String + // tA should be an empty string malloced to atleast (Len A / 3) + // frame is 1,2,3,4,5,6 + // returns new (strlen(tA+1)) or -1 on error + +{ + int dna_int; + int dnaseq_len, aaseq_len; + int aa_index; + char *dna_seq, *dna_ptr, *dna_end, *aa_ptr; + + dnaseq_len = strlen ( A + 1 ); + aa_ptr = tA + 1; + dna_seq = A + 1; + dna_end = A + dnaseq_len; + + if ( Frame >= 1 && Frame <= 3 ) + { + dna_end -= 2; + dna_ptr = dna_seq + Frame - 1; + for (; dna_ptr <= dna_end;) + { + dna_int = transdna [ int(*dna_ptr++) ]; + if ( dna_int == BAD_PEP_CHAR ) { + fprintf(stderr,"WARNING: Forcing unrecognized DNA char to N\n"); + dna_int = DNA_XN; + } + aa_index = dna_int; + aa_index <<= 4; + + dna_int = transdna [ int(*dna_ptr++) ]; + if ( dna_int == BAD_PEP_CHAR ) { + fprintf(stderr,"WARNING: Forcing unrecognized DNA char to N\n"); + dna_int = DNA_XN; + } + aa_index += dna_int; + aa_index <<= 4; + + dna_int = transdna [ int(*dna_ptr++) ]; + if ( dna_int == BAD_PEP_CHAR ) { + fprintf(stderr,"WARNING: Forcing unrecognized DNA char to N\n"); + dna_int = DNA_XN; + } + aa_index += dna_int; + + *(aa_ptr++) = universal[aa_index]; + } + + *aa_ptr = '\0'; + aaseq_len = strlen ( tA + 1 ); + } + else if ( Frame >= 4 && Frame <= 6 ) + { + Frame -= 3; + + dna_seq += 2; + dna_ptr = dna_end - Frame + 1; + for (; dna_ptr >= dna_seq;) + { + dna_int = compdna [ transdna [ int(*dna_ptr--)] ]; + if ( dna_int == BAD_PEP_CHAR ) { + fprintf(stderr,"WARNING: Forcing unrecognized DNA char to N\n"); + dna_int = DNA_XN; + } + aa_index = dna_int; + aa_index <<= 4; + + dna_int = compdna [ transdna [ int(*dna_ptr--)] ]; + if ( dna_int == BAD_PEP_CHAR ) { + fprintf(stderr,"WARNING: Forcing unrecognized DNA char to N\n"); + dna_int = DNA_XN; + } + aa_index += dna_int; + aa_index <<= 4; + + dna_int = compdna [ transdna [ int(*dna_ptr--)] ]; + if ( dna_int == BAD_PEP_CHAR ) { + fprintf(stderr,"WARNING: Forcing unrecognized DNA char to N\n"); + dna_int = DNA_XN; + } + aa_index += dna_int; + + *(aa_ptr++) = universal[aa_index]; + } + + *aa_ptr = '\0'; + aaseq_len = strlen ( tA + 1 ); + } + else + aaseq_len = -1; + + + return aaseq_len; +} +