annotate variant_effect_predictor/Bio/Tools/CodonTable.pm @ 0:1f6dce3d34e0

Uploaded
author mahtabm
date Thu, 11 Apr 2013 02:01:53 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 # $Id: CodonTable.pm,v 1.23 2002/10/22 07:38:45 lapp Exp $
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 # bioperl module for Bio::Tools::CodonTable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5 # Cared for by Heikki Lehvaslaiho <heikki@ebi.ac.uk>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 # Copyright Heikki Lehvaslaiho
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9 # You may distribute this module under the same terms as perl itself
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 # POD documentation - main docs before the code
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15 Bio::Tools::CodonTable - Bioperl codon table object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19 This is a read-only class for all known codon tables. The IDs are
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20 the ones used by nucleotide sequence databases. All common IUPAC
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 ambiguity codes for DNA, RNA and animo acids are recognized.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 # to use
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24 use Bio::Tools::CodonTable;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26 # defaults to ID 1 "Standard"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 $myCodonTable = Bio::Tools::CodonTable->new();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 $myCodonTable2 = Bio::Tools::CodonTable -> new ( -id => 3 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 # change codon table
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 $myCodonTable->id(5);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 # examine codon table
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 print join (' ', "The name of the codon table no.", $myCodonTable->id(4),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 "is:", $myCodonTable->name(), "\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 # translate a codon
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 $aa = $myCodonTable->translate('ACU');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 $aa = $myCodonTable->translate('act');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 $aa = $myCodonTable->translate('ytr');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 # reverse translate an amino acid
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 @codons = $myCodonTable->revtranslate('A');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 @codons = $myCodonTable->revtranslate('Ser');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 @codons = $myCodonTable->revtranslate('Glx');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 @codons = $myCodonTable->revtranslate('cYS', 'rna');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 #boolean tests
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 print "Is a start\n" if $myCodonTable->is_start_codon('ATG');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 print "Is a termianator\n" if $myCodonTable->is_ter_codon('tar');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 print "Is a unknown\n" if $myCodonTable->is_unknown_codon('JTG');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 Codon tables are also called translation tables or genetics codes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 since that is what they try to represent. A bit more complete picture
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 of the full complexity of codon usage in various taxonomic groups
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 presented at the NCBI Genetic Codes Home page.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 CodonTable is a BioPerl class that knows all current translation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 tables that are used by primary nucleotide sequence databases
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 (GenBank, EMBL and DDBJ). It provides methods to output information
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 about tables and relationships between codons and amino acids.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 This class and its methods recognized all common IUPAC ambiguity codes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 for DNA, RNA and animo acids. The translation method follows the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 conventions in EMBL and TREMBL databases.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 It is a nuisance to separate RNA and cDNA representations of nucleic
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 acid transcripts. The CodonTable object accepts codons of both type as
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 input and allows the user to set the mode for output when reverse
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 translating. Its default for output is DNA.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 Note: This class deals primarily with individual codons and amino
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 acids. However in the interest of speed you can L<translate>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 longer sequence, too. The full complexity of protein translation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 is tackled by L<Bio::PrimarySeqI::translate>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 The amino acid codes are IUPAC recommendations for common amino acids:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 A Ala Alanine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 R Arg Arginine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 N Asn Asparagine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 D Asp Aspartic acid
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 C Cys Cysteine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 Q Gln Glutamine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 E Glu Glutamic acid
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 G Gly Glycine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 H His Histidine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 I Ile Isoleucine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 L Leu Leucine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 K Lys Lysine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 M Met Methionine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 F Phe Phenylalanine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 P Pro Proline
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 S Ser Serine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 T Thr Threonine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 W Trp Tryptophan
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 Y Tyr Tyrosine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 V Val Valine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 B Asx Aspartic acid or Asparagine
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 Z Glx Glutamine or Glutamic acid
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 X Xaa Any or unknown amino acid
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 It is worth noting that, "Bacterial" codon table no. 11 produces an
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 polypeptide that is, confusingly, identical to the standard one. The
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 only differences are in available initiator codons.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 NCBI Genetic Codes home page:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 http://www.ncbi.nlm.nih.gov/htbin-post/Taxonomy/wprintgc?mode=c
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 EBI Translation Table Viewer:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 http://www.ebi.ac.uk/cgi-bin/mutations/trtables.cgi
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 Amended ASN.1 version with ids 16 and 21 is at:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 ftp://ftp.ebi.ac.uk/pub/databases/geneticcode/
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 Thank your for Matteo diTomasso for the original Perl implementation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 of these tables.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 =head1 FEEDBACK
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 =head2 Mailing Lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 User feedback is an integral part of the evolution of this and other
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 Bioperl modules. Send your comments and suggestions preferably to the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 Bioperl mailing lists Your participation is much appreciated.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 bioperl-l@bioperl.org - General discussion
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 http://bio.perl.org/MailList.html - About the mailing lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 =head2 Reporting Bugs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 report bugs to the Bioperl bug tracking system to help us keep track
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 the bugs and their resolution. Bug reports can be submitted via
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 email or the web:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 bioperl-bugs@bio.perl.org
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 http://bugzilla.bioperl.org/
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 =head1 AUTHOR - Heikki Lehvaslaiho
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 Email: heikki@ebi.ac.uk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 Address:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 EMBL Outstation, European Bioinformatics Institute
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 Wellcome Trust Genome Campus, Hinxton
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 Cambs. CB10 1SD, United Kingdom
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 =head1 APPENDIX
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 The rest of the documentation details each of the object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 methods. Internal methods are usually preceded with a _
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 # Let the code begin...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 package Bio::Tools::CodonTable;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 use vars qw(@ISA @NAMES @TABLES @STARTS $TRCOL $CODONS %IUPAC_DNA
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 %IUPAC_AA %THREELETTERSYMBOLS $VALID_PROTEIN $TERMINATOR);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 # Object preamble - inherits from Bio::Root::Root
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 use Bio::Root::Root;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 use Bio::Tools::IUPAC;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 use Bio::SeqUtils;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 @ISA = qw(Bio::Root::Root);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 # first set internal values for all translation tables
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 BEGIN {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 @NAMES = #id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 'Standard', #1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 'Vertebrate Mitochondrial',#2
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 'Yeast Mitochondrial',# 3
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 'Mold, Protozoan, and CoelenterateMitochondrial and Mycoplasma/Spiroplasma',#4
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 'Invertebrate Mitochondrial',#5
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 'Ciliate, Dasycladacean and Hexamita Nuclear',# 6
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 '', '',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 'Echinoderm Mitochondrial',#9
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 'Euplotid Nuclear',#10
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 '"Bacterial"',# 11
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 'Alternative Yeast Nuclear',# 12
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 'Ascidian Mitochondrial',# 13
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 'Flatworm Mitochondrial',# 14
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 'Blepharisma Nuclear',# 15
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 'Chlorophycean Mitochondrial',# 16
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 '', '', '', '',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 'Trematode Mitochondrial',# 21
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 'Scenedesmus obliquus Mitochondrial', #22
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 'Thraustochytrium Mitochondrial' #23
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 @TABLES =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 qw(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 FFLLSSSSYY**CC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 FFLLSSSSYY**CCWWLLLLPPPPHHQQRRRRIIMMTTTTNNKKSS**VVVVAAAADDEEGGGG
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 FFLLSSSSYY**CCWWTTTTPPPPHHQQRRRRIIMMTTTTNNKKSSRRVVVVAAAADDEEGGGG
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 FFLLSSSSYY**CCWWLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 FFLLSSSSYY**CCWWLLLLPPPPHHQQRRRRIIMMTTTTNNKKSSSSVVVVAAAADDEEGGGG
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 FFLLSSSSYYQQCC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 '' ''
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 FFLLSSSSYY**CCWWLLLLPPPPHHQQRRRRIIIMTTTTNNNKSSSSVVVVAAAADDEEGGGG
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 FFLLSSSSYY**CCCWLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 FFLLSSSSYY**CC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 FFLLSSSSYY**CC*WLLLSPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 FFLLSSSSYY**CCWWLLLLPPPPHHQQRRRRIIMMTTTTNNKKSSGGVVVVAAAADDEEGGGG
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 FFLLSSSSYYY*CCWWLLLLPPPPHHQQRRRRIIIMTTTTNNNKSSSSVVVVAAAADDEEGGGG
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 FFLLSSSSYY*QCC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 FFLLSSSSYY*LCC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 '' '' '' ''
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 FFLLSSSSYY**CCWWLLLLPPPPHHQQRRRRIIMMTTTTNNNKSSSSVVVVAAAADDEEGGGG
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 FFLLSS*SYY*LCC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 FF*LSSSSYY**CC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 @STARTS =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 qw(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 ---M---------------M---------------M----------------------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 --------------------------------MMMM---------------M------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 ----------------------------------MM----------------------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 --MM---------------M------------MMMM---------------M------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 ---M----------------------------MMMM---------------M------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 -----------------------------------M----------------------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 '' ''
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 -----------------------------------M----------------------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 -----------------------------------M----------------------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 ---M---------------M------------MMMM---------------M------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 -------------------M---------------M----------------------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 -----------------------------------M----------------------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 -----------------------------------M----------------------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 -----------------------------------M----------------------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 -----------------------------------M----------------------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 '' '' '' ''
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 -----------------------------------M---------------M------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 -----------------------------------M----------------------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 --------------------------------M--M---------------M------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 my @nucs = qw(t c a g);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 my $x = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 ($CODONS, $TRCOL) = ({}, {});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 for my $i (@nucs) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 for my $j (@nucs) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 for my $k (@nucs) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 my $codon = "$i$j$k";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 $CODONS->{$codon} = $x;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 $TRCOL->{$x} = $codon;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 $x++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 %IUPAC_DNA = Bio::Tools::IUPAC->iupac_iub();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 %IUPAC_AA = Bio::Tools::IUPAC->iupac_iup();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 %THREELETTERSYMBOLS = Bio::SeqUtils->valid_aa(2);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 $VALID_PROTEIN = '['.join('',Bio::SeqUtils->valid_aa(0)).']';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 $TERMINATOR = '*';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 sub new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 my($class,@args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 my $self = $class->SUPER::new(@args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 my($id) =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 $self->_rearrange([qw(ID
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 )],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 @args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 $id = 1 if ( ! $id );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 $id && $self->id($id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 return $self; # success - we hope!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 =head2 id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 Title : id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 Usage : $obj->id(3); $id_integer = $obj->id();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 Function:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 Sets or returns the id of the translation table. IDs are
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289 integers from 1 to 15, excluding 7 and 8 which have been
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 removed as redundant. If an invalid ID is given the method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 returns 0, false.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 Returns : value of id, a scalar, 0 if not a valid
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 Args : newvalue (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 sub id{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 my ($self,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 if( defined $value) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 if ( !(defined $TABLES[$value-1]) or $TABLES[$value-1] eq '') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 $self->warn("Not a valid codon table ID [$value] ");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 $value = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 $self->{'id'} = $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 return $self->{'id'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 =head2 name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 Title : name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 Usage : $obj->name()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 Function: returns the descriptive name of the translation table
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 Returns : A string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 Args : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 sub name{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 my ($id) = $self->{'id'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 return $NAMES[$id-1];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 =head2 translate
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 Title : translate
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 Usage : $obj->translate('YTR')
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 Function: Returns a string of one letter amino acid codes from
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 nucleotide sequence input. The imput can be of any length.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 Returns 'X' for unknown codons and codons that code for
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 more than one amino acid. Returns an empty string if input
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 is not three characters long. Exceptions for these are:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 - IUPAC amino acid code B for Aspartic Acid and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 Asparagine, is used.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 - IUPAC amino acid code Z for Glutamic Acid, Glutamine is
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 used.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 - if the codon is two nucleotides long and if by adding
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 an a third character 'N', it codes for a single amino
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 acid (with exceptions above), return that, otherwise
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 return empty string.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 Returns empty string for other input strings that are not
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352 three characters long.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355 Returns : a string of one letter ambiguous IUPAC amino acid codes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 Args : ambiguous IUPAC nucleotide string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361 sub translate {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 my ($self, $seq) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 $self->throw("Calling translate without a seq argument!") unless defined $seq;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 return '' unless $seq;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366 my $id = $self->id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 my ($partial) = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 $partial = 2 if length($seq) % 3 == 2;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 $seq = lc $seq;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 $seq =~ tr/u/t/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 my $protein = "";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 if ($seq =~ /[^actg]/ ) { #ambiguous chars
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374 for (my $i = 0; $i < (length($seq) - 2 ); $i+=3) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375 my $triplet = substr($seq, $i, 3);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376 if (exists $CODONS->{$triplet}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 $protein .= substr($TABLES[$id-1],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378 $CODONS->{$triplet},1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 $protein .= $self->_translate_ambiguous_codon($triplet);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 } else { # simple, strict translation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 for (my $i = 0; $i < (length($seq) - 2 ); $i+=3) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 my $triplet = substr($seq, $i, 3);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 if (exists $CODONS->{$triplet}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 $protein .= substr($TABLES[$id-1], $CODONS->{$triplet}, 1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389 $protein .= 'X';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393 if ($partial == 2) { # 2 overhanging nucleotides
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 my $triplet = substr($seq, ($partial -4)). "n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 if (exists $CODONS->{$triplet}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396 my $aa = substr($TABLES[$id-1], $CODONS->{$triplet},1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 $protein .= $aa;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 $protein .= $self->_translate_ambiguous_codon($triplet, $partial);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402 return $protein;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405 sub _translate_ambiguous_codon {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406 my ($self, $triplet, $partial) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407 $partial ||= 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 my $id = $self->id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409 my $aa;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410 my @codons = _unambiquous_codons($triplet);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 my %aas =();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412 foreach my $codon (@codons) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 $aas{substr($TABLES[$id-1],$CODONS->{$codon},1)} = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 my $count = scalar keys %aas;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 if ( $count == 1 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 $aa = (keys %aas)[0];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419 elsif ( $count == 2 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420 if ($aas{'D'} and $aas{'N'}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421 $aa = 'B';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423 elsif ($aas{'E'} and $aas{'Q'}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424 $aa = 'Z';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426 $partial ? ($aa = '') : ($aa = 'X');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429 $partial ? ($aa = '') : ($aa = 'X');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431 return $aa;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434 =head2 translate_strict
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436 Title : translate_strict
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437 Usage : $obj->translate_strict('ACT')
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438 Function: returns one letter amino acid code for a codon input
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440 Fast and simple translation. User is responsible to resolve
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441 ambiguous nucleotide codes before calling this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442 method. Returns 'X' for unknown codons and an empty string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443 for input strings that are not three characters long.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 It is not recommended to use this method in a production
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446 environment. Use method translate, instead.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449 Returns : A string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450 Args : a codon = a three nucleotide character string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455 sub translate_strict{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456 my ($self, $value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457 my ($id) = $self->{'id'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459 $value = lc $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460 $value =~ tr/u/t/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462 if (length $value != 3 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463 return '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465 elsif (!(defined $CODONS->{$value})) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466 return 'X';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469 return substr($TABLES[$id-1],$CODONS->{$value},1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473 =head2 revtranslate
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
474
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
475 Title : revtranslate
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
476 Usage : $obj->revtranslate('G')
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
477 Function: returns codons for an amino acid
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
478
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
479 Returns an empty string for unknown amino acid
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
480 codes. Ambiquous IUPAC codes Asx,B, (Asp,D; Asn,N) and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
481 Glx,Z (Glu,E; Gln,Q) are resolved. Both single and three
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
482 letter amino acid codes are accepted. '*' and 'Ter' are
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
483 used for terminator.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
484
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
485 By default, the output codons are shown in DNA. If the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
486 output is needed in RNA (tr/t/u/), add a second argument
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
487 'RNA'.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
488
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
489 Example : $obj->revtranslate('Gly', 'RNA')
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
490 Returns : An array of three lower case letter strings i.e. codons
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
491 Args : amino acid, 'RNA'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
492
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
493 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
494
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
495 sub revtranslate {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
496 my ($self, $value, $coding) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
497 my ($id) = $self->{'id'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
498 my (@aas, $p);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
499 my (@codons) = ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
500
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
501 if (length($value) == 3 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
502 $value = lc $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
503 $value = ucfirst $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
504 $value = $THREELETTERSYMBOLS{$value};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
505 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
506 if ( defined $value and $value =~ /$VALID_PROTEIN/
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
507 and length($value) == 1 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
508 $value = uc $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
509 @aas = @{$IUPAC_AA{$value}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
510 foreach my $aa (@aas) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
511 #print $aa, " -2\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
512 $aa = '\*' if $aa eq '*';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
513 while ($TABLES[$id-1] =~ m/$aa/g) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
514 $p = pos $TABLES[$id-1];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
515 push (@codons, $TRCOL->{--$p});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
516 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
517 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
518 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
519
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
520 if ($coding and uc ($coding) eq 'RNA') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
521 for my $i (0..$#codons) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
522 $codons[$i] =~ tr/t/u/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
523 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
524 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
525
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
526 return @codons;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
527 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
528
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
529 =head2 is_start_codon
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
530
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
531 Title : is_start_codon
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
532 Usage : $obj->is_start_codon('ATG')
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
533 Function: returns true (1) for all codons that can be used as a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
534 translation start, false (0) for others.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
535 Example : $myCodonTable->is_start_codon('ATG')
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
536 Returns : boolean
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
537 Args : codon
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
538
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
539
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
540 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
541
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
542 sub is_start_codon{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
543 my ($self, $value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
544 my ($id) = $self->{'id'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
545
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
546 $value = lc $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
547 $value =~ tr/u/t/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
548
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
549 if (length $value != 3 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
550 return 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
551 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
552 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
553 my $result = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
554 my @ms = map { substr($STARTS[$id-1],$CODONS->{$_},1) } _unambiquous_codons($value);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
555 foreach my $c (@ms) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
556 $result = 0 if $c ne 'M';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
557 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
558 return $result;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
559 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
560 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
561
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
562
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
563
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
564 =head2 is_ter_codon
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
565
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
566 Title : is_ter_codon
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
567 Usage : $obj->is_ter_codon('GAA')
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
568 Function: returns true (1) for all codons that can be used as a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
569 translation tarminator, false (0) for others.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
570 Example : $myCodonTable->is_ter_codon('ATG')
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
571 Returns : boolean
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
572 Args : codon
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
573
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
574
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
575 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
576
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
577 sub is_ter_codon{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
578 my ($self, $value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
579 my ($id) = $self->{'id'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
580
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
581 $value = lc $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
582 $value =~ tr/u/t/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
583
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
584 if (length $value != 3 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
585 return 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
586 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
587 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
588 my $result = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
589 my @ms = map { substr($TABLES[$id-1],$CODONS->{$_},1) } _unambiquous_codons($value);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
590 foreach my $c (@ms) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
591 $result = 0 if $c ne $TERMINATOR;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
592 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
593 return $result;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
594 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
595 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
596
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
597 =head2 is_unknown_codon
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
598
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
599 Title : is_unknown_codon
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
600 Usage : $obj->is_unknown_codon('GAJ')
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
601 Function: returns false (0) for all codons that are valid,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
602 true (1) for others.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
603 Example : $myCodonTable->is_unknown_codon('NTG')
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
604 Returns : boolean
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
605 Args : codon
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
606
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
607
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
608 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
609
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
610 sub is_unknown_codon{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
611 my ($self, $value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
612 my ($id) = $self->{'id'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
613
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
614 $value = lc $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
615 $value =~ tr/u/t/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
616
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
617 if (length $value != 3 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
618 return 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
619 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
620 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
621 my $result = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
622 my @cs = map { substr($TABLES[$id-1],$CODONS->{$_},1) } _unambiquous_codons($value);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
623 $result = 1 if scalar @cs == 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
624 return $result;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
625 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
626 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
627
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
628 =head2 _unambiquous_codons
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
629
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
630 Title : _unambiquous_codons
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
631 Usage : @codons = _unambiquous_codons('ACN')
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
632 Function:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
633 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
634 Returns : array of strings (one letter unambiguous amino acid codes)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
635 Args : a codon = a three IUPAC nucleotide character string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
636
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
637 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
638
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
639 sub _unambiquous_codons{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
640 my ($value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
641 my @nts = ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
642 my @codons = ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
643 my ($i, $j, $k);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
644 @nts = map { $IUPAC_DNA{uc $_} } split(//, $value);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
645 for my $i (@{$nts[0]}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
646 for my $j (@{$nts[1]}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
647 for my $k (@{$nts[2]}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
648 push @codons, lc "$i$j$k";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
649 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
650 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
651 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
652 return @codons;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
653 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
654
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
655 1;