1 /****************************************************************\ 2 * * 3 * Nucleotide Translation Code * 4 * * 5 * Guy St.C. Slater.. mailto:guy@ebi.ac.uk * 6 * Copyright (C) 2000-2009. All Rights Reserved. * 7 * * 8 * This source code is distributed under the terms of the * 9 * GNU General Public License, version 3. See the file COPYING * 10 * or http://www.gnu.org/licenses/gpl.txt for details * 11 * * 12 * If you use this code, please keep this notice intact. * 13 * * 14 \****************************************************************/ 15 16 #ifndef INCLUDED_TRANSLATE_H 17 #define INCLUDED_TRANSLATE_H 18 19 #ifdef __cplusplus 20 extern "C" { 21 #endif /* __cplusplus */ 22 23 /**/ 24 25 #include <glib.h> 26 #include "argument.h" 27 28 typedef struct { 29 gchar *genetic_code; 30 } Translate_ArgumentSet; 31 32 Translate_ArgumentSet *Translate_ArgumentSet_create(Argument *arg); 33 34 #define Translate_AA_SET_SIZE 40 35 #define Translate_NT_SET_SIZE (1<<4) 36 #define Translate_PIMA_SET_SIZE 18 37 #define Translate_ALPHABET_SIZE (1<<8) 38 #define Translate_TRANSLATION_SIZE 4096 39 40 typedef struct { 41 guint ref_count; 42 guchar *nt; 43 guchar *aa; 44 guchar *code; 45 guchar nt2d[Translate_ALPHABET_SIZE]; 46 guchar aa2d[Translate_ALPHABET_SIZE]; 47 gint aamask[Translate_AA_SET_SIZE]; 48 guchar trans[Translate_TRANSLATION_SIZE]; 49 GPtrArray *revtrans[Translate_ALPHABET_SIZE]; 50 } Translate; 51 52 Translate *Translate_create(gboolean use_pima); 53 Translate *Translate_share(Translate *t); 54 void Translate_destroy(Translate *t); 55 gint Translate_sequence(Translate *t, gchar *dna, 56 gint dna_length, gint frame, gchar *aaseq, 57 guchar *filter); 58 /* Sequence_translate frame is 1, 2, 3 for forward, 59 * or -1,-2,-3 for reverse. 60 * Sufficient space for translated sequence must provided in aaseq 61 * Translated seq is NULL terminated. 62 * Length of translated sequence is returned 63 */ 64 65 typedef void (*Translate_reverse_func)(gchar *dna, gint length, 66 gpointer user_data); 67 void Translate_reverse(Translate *t, gchar *aaseq, gint length, 68 Translate_reverse_func trf, gpointer user_data); 69 70 #define Translate_codon(t, codon) \ 71 ((gchar)((t)->aa[(t)->trans[((t)->nt2d[(guchar)(codon)[0]]) \ 72 |((t)->nt2d[(guchar)(codon)[1]]<<4) \ 73 |((t)->nt2d[(guchar)(codon)[2]]<<8)]])) 74 75 #define Translate_base(t, a, b, c) \ 76 ((t)->aa[(t)->trans[((t)->nt2d[(guchar)(a)]) \ 77 |((t)->nt2d[(guchar)(b)]<<4) \ 78 |((t)->nt2d[(guchar)(c)]<<8)]]) 79 80 /**/ 81 82 #ifdef __cplusplus 83 } 84 #endif /* __cplusplus */ 85 86 #endif /* INCLUDED_TRANSLATE_H */ 87 88