comparison variant_effect_predictor/Bio/Variation/AAReverseMutate.pm @ 0:1f6dce3d34e0

Uploaded
author mahtabm
date Thu, 11 Apr 2013 02:01:53 -0400
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:1f6dce3d34e0
1 # $Id: AAReverseMutate.pm,v 1.6 2002/10/22 07:38:49 lapp Exp $
2 #
3 # BioPerl module for Bio::Variation::AAReverseMutate
4 #
5 # Cared for by Heikki Lehvaslaiho <heikki@ebi.ac.uk>
6 #
7 # Copyright Heikki Lehvaslaiho
8 #
9 # You may distribute this module under the same terms as perl itself
10
11 # POD documentation - main docs before the code
12
13 =head1 NAME
14
15 Bio::Variation::AAReverseMutate - point mutation and codon
16 information from single amino acid changes
17
18 =head1 SYNOPSIS
19
20 $aamut = new Bio::Variation::AAReverseMutate
21 (-aa_ori => 'F',
22 -aa_mut => 'S',
23 -codon_ori => 'ttc', # optional
24 -codon_table => '3' # defaults to 1
25 );
26
27 @points = $aamut->each_Variant;
28
29 if (scalar @points > 0 ) {
30 foreach $rnachange ( @points ) {
31 # $rnachange is a Bio::Variation::RNAChange object
32 print " ", $rnachange->allele_ori->seq, ">",
33 $rnachange->allele_mut->seq, " in ",
34 $rnachange->codon_ori, ">", $rnachange->codon_mut,
35 " at position ", $rnachange->codon_pos, "\n";
36 }
37 } else {
38 print "No point mutations possible\n",
39 }
40
41 =head1 DESCRIPTION
42
43 Bio::Variation::AAReverseMutate objects take in reference and mutated
44 amino acid information and deduces potential point mutations at RNA
45 level leading to this change. The choice can be further limited by
46 letting the object know what is the the codon in the reference
47 sequence. The results are returned as L<Bio::Variation::RNAChange>
48 objects.
49
50 =head1 FEEDBACK
51
52 =head2 Mailing Lists
53
54 User feedback is an integral part of the evolution of this and other
55 Bioperl modules. Send your comments and suggestions preferably to the
56 Bioperl mailing lists Your participation is much appreciated.
57
58 bioperl-l@bioperl.org - General discussion
59 http://bio.perl.org/MailList.html - About the mailing lists
60
61 =head2 Reporting Bugs
62
63 report bugs to the Bioperl bug tracking system to help us keep track
64 the bugs and their resolution. Bug reports can be submitted via
65 email or the web:
66
67 bioperl-bugs@bio.perl.org
68 http://bugzilla.bioperl.org/
69
70 =head1 AUTHOR - Heikki Lehvaslaiho
71
72 Email: heikki@ebi.ac.uk
73 Address:
74
75 EMBL Outstation, European Bioinformatics Institute
76 Wellcome Trust Genome Campus, Hinxton
77 Cambs. CB10 1SD, United Kingdom
78
79
80 =head1 APPENDIX
81
82 The rest of the documentation details each of the object
83 methods. Internal methods are usually preceded with a _
84
85 =cut
86
87
88 # Let the code begin...
89
90 package Bio::Variation::AAReverseMutate;
91 my $VERSION=1.0;
92 use vars qw(@ISA);
93 use strict;
94
95 # Object preamble - inheritance
96 use Bio::Tools::CodonTable;
97 use Bio::Variation::RNAChange;
98 use Bio::Variation::Allele;
99
100 @ISA = qw( Bio::Root::Root);
101
102 sub new {
103 my($class,@args) = @_;
104 my $self = $class->SUPER::new(@args);
105
106 my ($aa_ori, $aa_mut, $codon_ori, $codon_table) =
107 $self->_rearrange([qw(AA_ORI
108 AA_MUT
109 CODON
110 CODON_TABLE
111 )],@args);
112
113 $aa_ori && $self->aa_ori($aa_ori);
114 $aa_mut && $self->aa_mut($aa_mut);
115 $codon_ori && $self->codon_ori($codon_ori);
116 $codon_table && $self->codon_table($codon_table);
117
118 return $self; # success - we hope!
119
120 }
121
122
123 =head2 aa_ori
124
125 Title : aa_ori
126 Usage : $obj->aa_ori();
127 Function:
128
129 Sets and returns original aa sequence. If value is not
130 set, returns false.
131
132 Amino acid sequences are stored in upper case characters,
133 others in lower case.
134
135 Example :
136 Returns : string
137 Args : single character amino acid code
138
139 =cut
140
141 sub aa_ori {
142 my ($self,$value) = @_;
143 if( defined $value) {
144 if ( uc($value) !~ /^[ARNDCQEGHILKMFPSTWYVBZX*]$/ ) {
145 $self->throw("'$value' is not a valid one letter amino acid symbol\n");
146 } else {
147 $self->{'aa_ori'} = uc $value;
148 }
149 }
150 return $self->{'aa_ori'};
151 }
152
153
154 =head2 aa_mut
155
156 Title : aa_mut
157 Usage : $obj->aa_mut();
158 Function:
159
160 Sets and returns the mutated allele sequence. If value is not
161 set, returns false.
162
163 Example :
164 Returns : string
165 Args : single character amino acid code
166
167 =cut
168
169
170 sub aa_mut {
171 my ($self,$value) = @_;
172 if( defined $value) {
173 if ( uc($value) !~ /^[ARNDCQEGHILKMFPSTWYVBZX*]$/ ) {
174 $self->throw("'$value' is not a valid one letter amino acid symbol\n");
175 } else {
176 $self->{'aa_mut'} = uc $value;
177 }
178 }
179 return $self->{'aa_mut'};
180 }
181
182
183 =head2 codon_ori
184
185 Title : codon_ori
186 Usage : $obj->codon_ori();
187 Function:
188
189 Sets and returns codon_ori triplet. If value is not set,
190 returns false. The string has to be three characters
191 long. The chracter content is not checked.
192
193 Example :
194 Returns : string
195 Args : string
196
197 =cut
198
199 sub codon_ori {
200 my ($self,$value) = @_;
201 if( defined $value) {
202 if (length $value != 3 or lc $value =~ /[^atgc]/) {
203 $self->warn("Codon string \"$value\" is not valid unique codon");
204 }
205 $self->{'codon_ori'} = lc $value;
206 }
207 return $self->{'codon_ori'};
208 }
209
210 =head2 codon_table
211
212 Title : codon_table
213 Usage : $obj->codon_table();
214 Function:
215
216 Sets and returns the codon table id of the RNA
217 If value is not set, returns 1, 'universal' code, as the default.
218
219 Example :
220 Returns : integer
221 Args : none if get, the new value if set
222
223 =cut
224
225
226 sub codon_table {
227 my ($self,$value) = @_;
228 if( defined $value) {
229 if ( not $value =~ /^\d+$/ ) {
230 $self->throw("'$value' is not a valid codon table ID\n".
231 "Has to be a positive integer. Defaulting to 1\n");
232 } else {
233 $self->{'codon_table'} = $value;
234 }
235 }
236 if( ! exists $self->{'codon_table'} ) {
237 return 1;
238 } else {
239 return $self->{'codon_table'};
240 }
241 }
242
243
244 =head2 each_Variant
245
246 Title : each_Variant
247 Usage : $obj->each_Variant();
248 Function:
249
250 Returns a list of Variants.
251
252 Example :
253 Returns : list of Variants
254 Args : none
255
256 =cut
257
258 sub each_Variant{
259 my ($self,@args) = @_;
260
261 $self->throw("aa_ori is not defined\n") if not defined $self->aa_ori;
262 $self->throw("aa_mut is not defined\n") if not defined $self->aa_mut;
263
264 my (@points, $codon_pos, $allele_ori, $allele_mut);
265 my $ct = Bio::Tools::CodonTable->new( '-id' => $self->codon_table );
266 foreach my $codon_ori ($ct->revtranslate($self->aa_ori)) {
267 next if $self->codon_ori and $self->codon_ori ne $codon_ori;
268 foreach my $codon_mut ($ct->revtranslate($self->aa_mut)) {
269 my $k = 0;
270 my $length = 0;
271 $codon_pos = $allele_ori = $allele_mut = undef;
272 while ($k<3) {
273 my $nt_ori = substr ($codon_ori, $k, 1);
274 my $nt_mut = substr ($codon_mut, $k, 1);
275 if ($nt_ori ne $nt_mut) {
276 $length++;
277 $codon_pos = $k+1;
278 $allele_ori = $nt_ori;
279 $allele_mut = $nt_mut;
280 }
281 $k++;
282 }
283 if ($length == 1) {
284 my $rna = Bio::Variation::RNAChange->new
285 ('-length' => '1',
286 '-codon_ori' => $codon_ori,
287 '-codon_mut' => $codon_mut,
288 '-codon_pos' => $codon_pos,
289 '-isMutation' => 1
290 );
291 my $all_ori = Bio::Variation::Allele->new('-seq'=>$allele_ori);
292 $rna->allele_ori($all_ori);
293 my $all_mut = Bio::Variation::Allele->new('-seq'=>$allele_mut);
294 $rna->allele_mut($all_mut);
295 push @points, $rna;
296 }
297 }
298 }
299 return @points;
300 }
301
302 1;