diff variant_effect_predictor/Bio/Coordinate/Result.pm @ 0:1f6dce3d34e0

Uploaded
author mahtabm
date Thu, 11 Apr 2013 02:01:53 -0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/variant_effect_predictor/Bio/Coordinate/Result.pm	Thu Apr 11 02:01:53 2013 -0400
@@ -0,0 +1,296 @@
+# $Id: Result.pm,v 1.5.2.1 2003/02/20 05:11:45 heikki Exp $
+#
+# bioperl module for Bio::Coordinate::Result
+#
+# 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::Coordinate::Result - Results from coordinate transformation
+
+=head1 SYNOPSIS
+
+  use Bio::Coordinate::Result;
+
+  #get results from a Bio::Coordinate::MapperI
+  $matched = $result->each_match;
+
+=head1 DESCRIPTION
+
+The results from Bio::Coordinate::MapperI are kept in an object which
+itself is a split location, See L<Bio::Location::Split>. The results
+are either Matches or Gaps.  See L<Bio::Coordinate::Result::Match> and
+L<Bio::Coordinate::Result::Match>.
+
+If only one Match is returned, there is a convenience method of
+retrieving it or accessing its methods. Same holds true for a Gap.
+
+=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 CONTRIBUTORS
+
+Additional contributors names and emails here
+
+=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::Coordinate::Result;
+use vars qw(@ISA );
+use strict;
+
+use Bio::Location::Split;
+use Bio::Coordinate::ResultI;
+
+@ISA = qw(Bio::Location::Split Bio::Coordinate::ResultI);
+
+
+=head2 add_location
+
+ Title   : add_sub_Location
+ Usage   : $obj->add_sub_Location($variant)
+ Function: 
+
+           Pushes one Bio::LocationI into the list of variants.
+
+ Example : 
+ Returns : 1 when succeeds
+ Args    : Location object
+
+=cut
+
+sub add_sub_Location {
+  my ($self,$value) = @_;
+  $self->throw("Is not a Bio::LocationI but [$value]")
+      unless $value->isa('Bio::LocationI');
+
+  $self->{'_match'} = $value
+      if $value->isa('Bio::Coordinate::Result::Match');
+
+  $self->{'_gap'} = $value
+      if $value->isa('Bio::Coordinate::Result::Gap');
+
+  $self->SUPER::add_sub_Location($value);
+
+}
+
+=head2 add_result
+
+ Title   : add_result
+ Usage   : $obj->add_result($result)
+ Function: Adds the contents of one Bio::Coordinate::Result
+ Example : 
+ Returns : 1 when succeeds
+ Args    : Result object
+
+=cut
+
+sub add_result {
+  my ($self,$value) = @_;
+
+  $self->throw("Is not a Bio::Coordinate::Result but [$value]")
+      unless $value->isa('Bio::Coordinate::Result');
+
+  map {  $self->add_sub_Location($_);} $value->each_Location;
+
+}
+
+=head2 seq_id
+
+  Title   : seq_id
+  Usage   : my $seqid = $location->seq_id();
+  Function: Get/Set seq_id that location refers to
+
+            We override this here in order to propagate to all sublocations
+            which are not remote (provided this root is not remote either)
+
+  Returns : seq_id
+  Args    : [optional] seq_id value to set
+
+
+=cut
+
+sub seq_id {
+    my ($self, $seqid) = @_;
+
+    my @ls = $self->each_Location;
+    if (@ls) {
+	return $ls[0]->seq_id;
+    } else {
+	return undef;
+    }
+
+}
+
+
+=head2 Convenience methods
+
+These methods are shortcuts to Match and Gap locations.
+
+=cut
+
+=head2 each_gap
+
+ Title   : each_gap
+ Usage   : $obj->each_gap();
+ Function: 
+
+            Returns a list of Bio::Coordianate::Result::Gap objects.
+
+ Returns : list of gaps
+ Args    : none
+
+=cut
+
+sub each_gap{
+   my ($self) = @_;
+
+
+   my @gaps;
+   foreach my $gap ($self->each_Location) {
+       push @gaps, $gap if $gap->isa('Bio::Coordinate::Result::Gap');
+   }
+   return @gaps;
+
+}
+
+
+=head2 each_match
+
+ Title   : each_match
+ Usage   : $obj->each_match();
+ Function: 
+
+            Returns a list of Bio::Coordinate::Result::Match objects.
+
+ Returns : list of Matchs
+ Args    : none
+
+=cut
+
+sub each_match {
+   my ($self) = @_;
+
+   my @matches;
+   foreach my $match ($self->each_Location) {
+       push @matches, $match if $match->isa('Bio::Coordinate::Result::Match');
+   }
+   return @matches;
+}
+
+=head2 match
+
+ Title   : match
+ Usage   : $match_object = $obj->match(); #or
+           $gstart = $obj->gap->start;
+ Function: Read only method for retrieving or accessing the match object.
+ Returns : one Bio::Coordinate::Result::Match
+ Args    : 
+
+=cut
+
+sub match {
+   my ($self) = @_;
+
+   $self->warn("More than one match in results")
+       if $self->each_match > 1 and $self->verbose > 0;
+   unless (defined $self->{'_match'} ) {
+       my @m = $self->each_match;
+       $self->{'_match'} = $m[-1];
+   }
+   return $self->{'_match'};
+}
+
+=head2 gap
+
+ Title   : gap
+ Usage   : $gap_object = $obj->gap(); #or
+           $gstart = $obj->gap->start;
+ Function: Read only method for retrieving or accessing the gap object.
+ Returns : one Bio::Coordinate::Result::Gap
+ Args    : 
+
+=cut
+
+sub gap {
+   my ($self) = @_;
+
+   $self->warn("More than one gap in results")
+       if $self->each_gap > 1 and $self->verbose > 0;
+   unless (defined $self->{'_gap'} ) {
+       my @m = $self->each_gap;
+       $self->{'_gap'} = $m[-1];
+   }
+   return $self->{'_gap'};
+}
+
+
+=head2 purge_gaps
+
+ Title   : purge_gaps
+ Usage   : $gap_count = $obj->purge_gaps;
+ Function: remove all gaps from the Result
+ Returns : count of removed gaps
+ Args    : 
+
+=cut
+
+sub purge_gaps {
+    my ($self) = @_;
+    my @matches;
+    my $count = 0;
+
+    foreach my $loc ($self->each_Location) {
+        if ($loc->isa('Bio::Coordinate::Result::Match')) {
+            push @matches, $loc;
+        } else {
+            $count++
+        }
+    }
+    @{$self->{'_sublocations'}} = ();
+    delete $self->{'_gap'} ;
+    push @{$self->{'_sublocations'}}, @matches;
+    return $count;
+}
+
+
+1;