diff variant_effect_predictor/Bio/SeqFeature/SimilarityPair.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/SeqFeature/SimilarityPair.pm	Thu Apr 11 02:01:53 2013 -0400
@@ -0,0 +1,343 @@
+# $Id: SimilarityPair.pm,v 1.21 2002/12/24 15:15:32 jason Exp $
+#
+# BioPerl module for Bio::SeqFeature::SimilarityPair
+#
+# Cared for by Hilmar Lapp <hlapp@gmx.net>
+#
+# Copyright Hilmar Lapp
+#
+# You may distribute this module under the same terms as perl itself
+
+# POD documentation - main docs before the code
+
+=head1 NAME
+
+Bio::SeqFeature::SimilarityPair - Sequence feature based on the similarity
+                  of two sequences.
+
+=head1 SYNOPSIS
+
+  $sim_pair = Bio::SeqFeature::SimilarityPair->from_searchResult($blastHit);
+
+  $sim = $sim_pair->query(); # a Bio::SeqFeature::Similarity object - the query
+  $sim = $sim_pair->hit();   # dto - the hit.
+
+  # some properties for the similarity pair
+  $expect = $sim_pair->significance();
+  $score = $sim_pair->score();
+  $bitscore = $sim_pair->bits();
+
+  # this will not write the description for the sequence (only its name)
+  print $sim_pair->query()->gff_string(), "\n";
+
+=head1 DESCRIPTION
+
+Lightweight similarity search result as a pair of Similarity
+features. This class inherits off Bio::SeqFeature::FeaturePair and
+therefore implements Bio::SeqFeatureI, whereas the two features of the
+pair are descendants of Bio::SeqFeature::Generic, with better support
+for representing similarity search results in a cleaner way.
+
+=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 one
+of 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 - Hilmar Lapp
+
+Email hlapp@gmx.net or hilmar.lapp@pharma.novartis.com
+
+Describe contact details 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::SeqFeature::SimilarityPair;
+use vars qw(@ISA);
+use strict;
+
+use Bio::SeqFeature::FeaturePair;
+use Bio::SeqFeature::Similarity;
+use Bio::SearchIO;
+
+@ISA = qw(Bio::SeqFeature::FeaturePair);
+
+=head2 new
+
+ Title   : new
+ Usage   : my $similarityPair = new Bio::SeqFeature::SimilarityPair
+                                 (-hit   => $hit,
+				  -query => $query,
+				  -source => 'blastp');
+ Function: Initializes a new SimilarityPair object
+ Returns : Bio::SeqFeature::SimilarityPair
+ Args    : -query => The query in a Feature pair 
+           -hit   => (formerly '-subject') the subject/hit in a Feature pair
+
+
+=cut
+
+sub new {
+    my($class,@args) = @_;
+
+    my $self = $class->SUPER::new(@args);
+
+    # Hack to deal with the fact that SimilarityPair calls strand()
+    # which will lead to an error in Bio::Search::HSP::BlastHSP 
+    # because parsing hasn't yet occurred.
+    # TODO: Remove this when BlastHSP doesn't do lazy parsing.
+    $self->{'_initializing'} = 1;
+
+    my ($primary, $hit, $query, $fea1, $source,$sbjct) =
+	$self->_rearrange([qw(PRIMARY
+			      HIT
+			      QUERY
+			      FEATURE1
+                              SOURCE
+			      SUBJECT
+			      )],@args);
+    
+    if( $sbjct ) { 
+	# undeprecated by Jason before 1.1 release 
+        # $self->deprecated("use of -subject deprecated: SimilarityPair now uses 'hit'");
+	if(! $hit) { $hit = $sbjct } 
+	else { 
+	    $self->warn("-hit and -subject were specified, using -hit and ignoring -subject");
+	}
+    }
+
+    # make sure at least the query feature exists -- this refers to feature1
+    if($query && ! $fea1) { $self->query( $query);  } 
+    else { $self->query('null'); } # call with no args sets a default value for query
+    
+    $hit && $self->hit($hit);
+    # the following refer to feature1, which has been ensured to exist
+    if( defined $primary || ! defined $self->primary_tag) { 
+	$primary = 'similarity' unless defined $primary;
+	$self->primary_tag($primary);
+    } 
+
+    $source && $self->source_tag($source);
+    $self->strand(0) unless( defined $self->strand() );
+
+    $self->{'_initializing'} = 0;  # See "Hack" note above
+    return $self;
+}
+
+#
+# Everything else is just inherited from SeqFeature::FeaturePair.
+#
+
+=head2 query
+
+ Title   : query
+ Usage   : $query_feature = $obj->query();
+           $obj->query($query_feature);
+ Function: The query object for this similarity pair
+ Returns : Bio::SeqFeature::Similarity
+ Args    : [optional] Bio::SeqFeature::Similarity
+
+See L<Bio::SeqFeature::Similarity>, L<Bio::SeqFeature::FeaturePair>
+
+=cut
+
+sub query {
+    my ($self, @args) = @_;
+    my $f = $self->feature1();
+    if( ! @args || ( !ref($args[0]) && $args[0] eq 'null') ) {
+	if( ! defined( $f) ) {
+	    @args = Bio::SeqFeature::Similarity->new();
+	} elsif( ! $f->isa('Bio::SeqFeature::Similarity') && 
+		 $f->isa('Bio::SeqFeatureI') ) {
+	    # a Bio::SeqFeature::Generic was placeholder for feature1	    
+	    my $newf = new 
+	      Bio::SeqFeature::Similarity( -start   => $f->start(),
+					   -end     => $f->end(),
+					   -strand  => $f->strand(),
+					   -primary => $f->primary_tag(),
+					   -source  => $f->source_tag(),
+					   -seq_id  => $f->seq_id(),
+					   -score   => $f->score(),
+					   -frame   => $f->frame(),
+					   );
+	    foreach my $tag ( $newf->all_tags ) {
+		$tag->add_tag($tag, $newf->each_tag($tag));
+	    }
+	    @args = $newf;	   
+	} else {
+	    @args = ();
+	}
+    }
+    return $self->feature1(@args);
+}
+
+
+
+
+=head2 subject
+
+ Title   : subject
+ Usage   : $sbjct_feature = $obj->subject();
+           $obj->subject($sbjct_feature);
+ Function: Get/Set Subject for a SimilarityPair 
+ Returns : Bio::SeqFeature::Similarity
+ Args    : [optional] Bio::SeqFeature::Similarity
+ Notes   : Deprecated.  Use the method 'hit' instead
+
+=cut
+
+sub subject { 
+    my $self = shift;
+#    $self->deprecated("Method subject deprecated: use hit() instead");
+    $self->hit(@_); 
+}
+
+*sbjct = \&subject;
+
+=head2 hit
+
+ Title   : hit
+ Usage   : $sbjct_feature = $obj->hit();
+           $obj->hit($sbjct_feature);
+ Function: Get/Set Hit for a SimilarityPair 
+ Returns : Bio::SeqFeature::Similarity
+ Args    : [optional] Bio::SeqFeature::Similarity
+
+
+=cut
+
+sub hit {
+    my ($self, @args) = @_;
+    my $f = $self->feature2();
+    if(! @args || (!ref($args[0]) && $args[0] eq 'null') ) {
+	if( ! defined( $f) ) {
+	    @args = Bio::SeqFeature::Similarity->new();
+	} elsif( ! $f->isa('Bio::SeqFeature::Similarity') && 
+		 $f->isa('Bio::SeqFeatureI')) {
+	    # a Bio::SeqFeature::Generic was placeholder for feature2	    
+	    my $newf = new 
+	      Bio::SeqFeature::Similarity( -start   => $f->start(),
+					   -end     => $f->end(),
+					   -strand  => $f->strand(),
+					   -primary => $f->primary_tag(),
+					   -source  => $f->source_tag(),
+					   -seq_id  => $f->seq_id(),
+					   -score   => $f->score(),
+					   -frame   => $f->frame(),
+					   );
+	    foreach my $tag ( $newf->all_tags ) {
+		$tag->add_tag($tag, $newf->each_tag($tag));
+	    }
+	    @args = $newf;
+	}
+    }
+    return $self->feature2(@args);
+}
+
+=head2 source_tag
+
+ Title   : source_tag
+ Usage   : $source = $obj->source_tag(); # i.e., program
+           $obj->source_tag($evalue);
+ Function: Gets the source tag (program name typically) for a feature 
+ Returns : string
+ Args    : [optional] string
+
+
+=cut
+
+sub source_tag {
+    my ($self, @args) = @_;
+
+    if(@args) {
+	$self->hit()->source_tag(@args);
+    }
+    return $self->query()->source_tag(@args);
+}
+
+=head2 significance
+
+ Title   : significance
+ Usage   : $evalue = $obj->significance();
+           $obj->significance($evalue);
+ Function: 
+ Returns : 
+ Args    : 
+
+
+=cut
+
+sub significance {
+    my ($self, @args) = @_;
+
+    if(@args) {
+	$self->hit()->significance(@args);
+    }
+    return $self->query()->significance(@args);
+}
+
+=head2 score
+
+ Title   : score
+ Usage   : $score = $obj->score();
+           $obj->score($value);
+ Function: 
+ Returns : 
+ Args    : 
+
+
+=cut
+
+sub score {
+    my ($self, @args) = @_;
+
+    if(@args) {
+	$self->hit()->score(@args);
+    }
+    return $self->query()->score(@args);
+}
+
+=head2 bits
+
+ Title   : bits
+ Usage   : $bits = $obj->bits();
+           $obj->bits($value);
+ Function: 
+ Returns : 
+ Args    : 
+
+
+=cut
+
+sub bits {
+    my ($self, @args) = @_;
+
+    if(@args) {
+	$self->hit()->bits(@args);
+    }
+    return $self->query()->bits(@args);
+}
+
+1;