Mercurial > repos > mahtabm > ensemb_rep_gvl
diff variant_effect_predictor/Bio/Variation/AAReverseMutate.pm @ 0:2bc9b66ada89 draft default tip
Uploaded
author | mahtabm |
---|---|
date | Thu, 11 Apr 2013 06:29:17 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/variant_effect_predictor/Bio/Variation/AAReverseMutate.pm Thu Apr 11 06:29:17 2013 -0400 @@ -0,0 +1,302 @@ +# $Id: AAReverseMutate.pm,v 1.6 2002/10/22 07:38:49 lapp Exp $ +# +# BioPerl module for Bio::Variation::AAReverseMutate +# +# Cared for by Heikki Lehvaslaiho <heikki@ebi.ac.uk> +# +# Copyright Heikki Lehvaslaiho +# +# You may distribute this module under the same terms as perl itself + +# POD documentation - main docs before the code + +=head1 NAME + +Bio::Variation::AAReverseMutate - point mutation and codon + information from single amino acid changes + +=head1 SYNOPSIS + + $aamut = new Bio::Variation::AAReverseMutate + (-aa_ori => 'F', + -aa_mut => 'S', + -codon_ori => 'ttc', # optional + -codon_table => '3' # defaults to 1 + ); + + @points = $aamut->each_Variant; + + if (scalar @points > 0 ) { + foreach $rnachange ( @points ) { + # $rnachange is a Bio::Variation::RNAChange object + print " ", $rnachange->allele_ori->seq, ">", + $rnachange->allele_mut->seq, " in ", + $rnachange->codon_ori, ">", $rnachange->codon_mut, + " at position ", $rnachange->codon_pos, "\n"; + } + } else { + print "No point mutations possible\n", + } + +=head1 DESCRIPTION + +Bio::Variation::AAReverseMutate objects take in reference and mutated +amino acid information and deduces potential point mutations at RNA +level leading to this change. The choice can be further limited by +letting the object know what is the the codon in the reference +sequence. The results are returned as L<Bio::Variation::RNAChange> +objects. + +=head1 FEEDBACK + +=head2 Mailing Lists + +User feedback is an integral part of the evolution of this and other +Bioperl modules. Send your comments and suggestions preferably to the +Bioperl mailing lists Your participation is much appreciated. + + bioperl-l@bioperl.org - General discussion + http://bio.perl.org/MailList.html - About the mailing lists + +=head2 Reporting Bugs + +report bugs to the Bioperl bug tracking system to help us keep track + the bugs and their resolution. Bug reports can be submitted via + email or the web: + + bioperl-bugs@bio.perl.org + http://bugzilla.bioperl.org/ + +=head1 AUTHOR - Heikki Lehvaslaiho + +Email: heikki@ebi.ac.uk +Address: + + EMBL Outstation, European Bioinformatics Institute + Wellcome Trust Genome Campus, Hinxton + Cambs. CB10 1SD, United Kingdom + + +=head1 APPENDIX + +The rest of the documentation details each of the object +methods. Internal methods are usually preceded with a _ + +=cut + + +# Let the code begin... + +package Bio::Variation::AAReverseMutate; +my $VERSION=1.0; +use vars qw(@ISA); +use strict; + +# Object preamble - inheritance +use Bio::Tools::CodonTable; +use Bio::Variation::RNAChange; +use Bio::Variation::Allele; + +@ISA = qw( Bio::Root::Root); + +sub new { + my($class,@args) = @_; + my $self = $class->SUPER::new(@args); + + my ($aa_ori, $aa_mut, $codon_ori, $codon_table) = + $self->_rearrange([qw(AA_ORI + AA_MUT + CODON + CODON_TABLE + )],@args); + + $aa_ori && $self->aa_ori($aa_ori); + $aa_mut && $self->aa_mut($aa_mut); + $codon_ori && $self->codon_ori($codon_ori); + $codon_table && $self->codon_table($codon_table); + + return $self; # success - we hope! + +} + + +=head2 aa_ori + + Title : aa_ori + Usage : $obj->aa_ori(); + Function: + + Sets and returns original aa sequence. If value is not + set, returns false. + + Amino acid sequences are stored in upper case characters, + others in lower case. + + Example : + Returns : string + Args : single character amino acid code + +=cut + +sub aa_ori { + my ($self,$value) = @_; + if( defined $value) { + if ( uc($value) !~ /^[ARNDCQEGHILKMFPSTWYVBZX*]$/ ) { + $self->throw("'$value' is not a valid one letter amino acid symbol\n"); + } else { + $self->{'aa_ori'} = uc $value; + } + } + return $self->{'aa_ori'}; +} + + +=head2 aa_mut + + Title : aa_mut + Usage : $obj->aa_mut(); + Function: + + Sets and returns the mutated allele sequence. If value is not + set, returns false. + + Example : + Returns : string + Args : single character amino acid code + +=cut + + +sub aa_mut { + my ($self,$value) = @_; + if( defined $value) { + if ( uc($value) !~ /^[ARNDCQEGHILKMFPSTWYVBZX*]$/ ) { + $self->throw("'$value' is not a valid one letter amino acid symbol\n"); + } else { + $self->{'aa_mut'} = uc $value; + } + } + return $self->{'aa_mut'}; +} + + +=head2 codon_ori + + Title : codon_ori + Usage : $obj->codon_ori(); + Function: + + Sets and returns codon_ori triplet. If value is not set, + returns false. The string has to be three characters + long. The chracter content is not checked. + + Example : + Returns : string + Args : string + +=cut + +sub codon_ori { + my ($self,$value) = @_; + if( defined $value) { + if (length $value != 3 or lc $value =~ /[^atgc]/) { + $self->warn("Codon string \"$value\" is not valid unique codon"); + } + $self->{'codon_ori'} = lc $value; + } + return $self->{'codon_ori'}; +} + +=head2 codon_table + + Title : codon_table + Usage : $obj->codon_table(); + Function: + + Sets and returns the codon table id of the RNA + If value is not set, returns 1, 'universal' code, as the default. + + Example : + Returns : integer + Args : none if get, the new value if set + +=cut + + +sub codon_table { + my ($self,$value) = @_; + if( defined $value) { + if ( not $value =~ /^\d+$/ ) { + $self->throw("'$value' is not a valid codon table ID\n". + "Has to be a positive integer. Defaulting to 1\n"); + } else { + $self->{'codon_table'} = $value; + } + } + if( ! exists $self->{'codon_table'} ) { + return 1; + } else { + return $self->{'codon_table'}; + } +} + + +=head2 each_Variant + + Title : each_Variant + Usage : $obj->each_Variant(); + Function: + + Returns a list of Variants. + + Example : + Returns : list of Variants + Args : none + +=cut + +sub each_Variant{ + my ($self,@args) = @_; + + $self->throw("aa_ori is not defined\n") if not defined $self->aa_ori; + $self->throw("aa_mut is not defined\n") if not defined $self->aa_mut; + + my (@points, $codon_pos, $allele_ori, $allele_mut); + my $ct = Bio::Tools::CodonTable->new( '-id' => $self->codon_table ); + foreach my $codon_ori ($ct->revtranslate($self->aa_ori)) { + next if $self->codon_ori and $self->codon_ori ne $codon_ori; + foreach my $codon_mut ($ct->revtranslate($self->aa_mut)) { + my $k = 0; + my $length = 0; + $codon_pos = $allele_ori = $allele_mut = undef; + while ($k<3) { + my $nt_ori = substr ($codon_ori, $k, 1); + my $nt_mut = substr ($codon_mut, $k, 1); + if ($nt_ori ne $nt_mut) { + $length++; + $codon_pos = $k+1; + $allele_ori = $nt_ori; + $allele_mut = $nt_mut; + } + $k++; + } + if ($length == 1) { + my $rna = Bio::Variation::RNAChange->new + ('-length' => '1', + '-codon_ori' => $codon_ori, + '-codon_mut' => $codon_mut, + '-codon_pos' => $codon_pos, + '-isMutation' => 1 + ); + my $all_ori = Bio::Variation::Allele->new('-seq'=>$allele_ori); + $rna->allele_ori($all_ori); + my $all_mut = Bio::Variation::Allele->new('-seq'=>$allele_mut); + $rna->allele_mut($all_mut); + push @points, $rna; + } + } + } + return @points; +} + +1;