Mercurial > repos > mahtabm > ensembl
diff variant_effect_predictor/Bio/SeqFeature/FeaturePair.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/FeaturePair.pm Thu Apr 11 02:01:53 2013 -0400 @@ -0,0 +1,475 @@ +# $Id: FeaturePair.pm,v 1.17 2002/10/08 08:38:31 lapp Exp $ +# +# BioPerl module for Bio::SeqFeature::FeaturePair +# +# Cared for by Ewan Birney <birney@sanger.ac.uk> +# +# Copyright Ewan Birney +# +# You may distribute this module under the same terms as perl itself + +# POD documentation - main docs before the code + +=head1 NAME + +Bio::SeqFeature::FeaturePair - hold pair feature information e.g. blast hits + +=head1 SYNOPSIS + + my $feat = new Bio::SeqFeature::FeaturePair(-feature1 => $f1, + -feature2 => $f2, + ); + + # Bio::SeqFeatureI methods can be used + + my $start = $feat->start; + my $end = $feat->end; + + # Bio::FeaturePair methods can be used + my $hstart = $feat->hstart; + my $hend = $feat->hend; + + my $feature1 = $feat->feature1; # returns feature1 object + +=head1 DESCRIPTION + +A sequence feature object where the feature is itself a feature on +another sequence - e.g. a blast hit where residues 1-40 of a protein +sequence SW:HBA_HUMAN has hit to bases 100 - 220 on a genomic sequence +HS120G22. The genomic sequence coordinates are used to create one +sequence feature $f1 and the protein coordinates are used to create +feature $f2. A FeaturePair object can then be made + + my $fp = new Bio::SeqFeature::FeaturePair(-feature1 => $f1, # genomic + -feature2 => $f2, # protein + ); + +This object can be used as a standard Bio::SeqFeatureI in which case + + my $gstart = $fp->start # returns start coord on feature1 - genomic seq. + my $gend = $fp->end # returns end coord on feature1. + +In general standard Bio::SeqFeatureI method calls return information +in feature1. + +Data in the feature 2 object are generally obtained using the standard +methods prefixed by h (for hit!) + + my $pstart = $fp->hstart # returns start coord on feature2 = protein seq. + my $pend = $fp->hend # returns end coord on feature2. + +If you wish to swap feature1 and feature2 around : + + $feat->invert + +so... + + $feat->start # etc. returns data in $feature2 object + + +No sub_SeqFeatures or tags can be stored in this object directly. Any +features or tags are expected to be stored in the contained objects +feature1, and feature2. + +=head1 CONTACT + +Ewan Birney E<lt>birney@sanger.ac.ukE<gt> + +=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::FeaturePair; +use vars qw(@ISA); +use strict; + +use Bio::SeqFeatureI; +use Bio::SeqFeature::Generic; + +@ISA = qw(Bio::SeqFeature::Generic); + +sub new { + my ($class, @args) = @_; + my $self = $class->SUPER::new(@args); + + my ($feature1,$feature2) = + $self->_rearrange([qw(FEATURE1 + FEATURE2 + )],@args); + + # Store the features in the object + $feature1 && $self->feature1($feature1); + $feature2 && $self->feature2($feature2); + return $self; +} + +=head2 feature1 + + Title : feature1 + Usage : $f = $featpair->feature1 + $featpair->feature1($feature) + Function: Get/set for the query feature + Returns : Bio::SeqFeatureI + Args : Bio::SeqFeatureI + + +=cut + +sub feature1 { + my ($self,$arg) = @_; + if ( defined($arg) || !defined $self->{'feature1'} ) { + $arg = new Bio::SeqFeature::Generic() unless( defined $arg); + $self->throw("Argument [$arg] must be a Bio::SeqFeatureI") + unless (ref($arg) && $arg->isa("Bio::SeqFeatureI")); + $self->{'feature1'} = $arg; + } + return $self->{'feature1'}; +} + +=head2 feature2 + + Title : feature2 + Usage : $f = $featpair->feature2 + $featpair->feature2($feature) + Function: Get/set for the hit feature + Returns : Bio::SeqFeatureI + Args : Bio::SeqFeatureI + + +=cut + +sub feature2 { + my ($self,$arg) = @_; + + if ( defined($arg) || ! defined $self->{'feature2'}) { + $arg = new Bio::SeqFeature::Generic unless( defined $arg); + $self->throw("Argument [$arg] must be a Bio::SeqFeatureI") + unless (ref($arg) && $arg->isa("Bio::SeqFeatureI")); + $self->{'feature2'} = $arg; + } + return $self->{'feature2'}; +} + +=head2 start + + Title : start + Usage : $start = $featpair->start + $featpair->start(20) + Function: Get/set on the start coordinate of feature1 + Returns : integer + Args : [optional] beginning of feature + +=cut + +sub start { + my ($self,$value) = @_; + return $self->feature1->start($value); +} + +=head2 end + + Title : end + Usage : $end = $featpair->end + $featpair->end($end) + Function: get/set on the end coordinate of feature1 + Returns : integer + Args : [optional] ending point of feature + + +=cut + +sub end{ + my ($self,$value) = @_; + return $self->feature1->end($value); +} + +=head2 strand + + Title : strand + Usage : $strand = $feat->strand() + $feat->strand($strand) + Function: get/set on strand information, being 1,-1 or 0 + Returns : -1,1 or 0 + Args : [optional] strand information to set + + +=cut + +sub strand{ + my ($self,$arg) = @_; + return $self->feature1->strand($arg); +} + +=head2 location + + Title : location + Usage : $location = $featpair->location + $featpair->location($location) + Function: Get/set location object (using feature1) + Returns : Bio::LocationI object + Args : [optional] LocationI to store + +=cut + +sub location { + my ($self,$value) = @_; + return $self->feature1->location($value); +} + +=head2 score + + Title : score + Usage : $score = $feat->score() + $feat->score($score) + Function: get/set on score information + Returns : float + Args : none if get, the new value if set + + +=cut + +sub score { + my ($self,$arg) = @_; + return $self->feature1->score($arg); +} + +=head2 frame + + Title : frame + Usage : $frame = $feat->frame() + $feat->frame($frame) + Function: get/set on frame information + Returns : 0,1,2 + Args : none if get, the new value if set + + +=cut + +sub frame { + my ($self,$arg) = @_; + return $self->feature1->frame($arg); +} + +=head2 primary_tag + + Title : primary_tag + Usage : $ptag = $featpair->primary_tag + Function: get/set on the primary_tag of feature1 + Returns : 0,1,2 + Args : none if get, the new value if set + + +=cut + +sub primary_tag{ + my ($self,$arg) = @_; + return $self->feature1->primary_tag($arg); +} + +=head2 source_tag + + Title : source_tag + Usage : $tag = $feat->source_tag() + $feat->source_tag('genscan'); + Function: Returns the source tag for a feature, + eg, 'genscan' + Returns : a string + Args : none + + +=cut + +sub source_tag{ + my ($self,$arg) = @_; + return $self->feature1->source_tag($arg); +} + +=head2 seqname + + Title : seqname + Usage : $obj->seq_id($newval) + Function: There are many cases when you make a feature that you + do know the sequence name, but do not know its actual + sequence. This is an attribute such that you can store + the seqname. + + This attribute should *not* be used in GFF dumping, as + that should come from the collection in which the seq + feature was found. + Returns : value of seqname + Args : newvalue (optional) + + +=cut + +sub seqname{ + my ($self,$arg) = @_; + return $self->feature1->seq_id($arg); +} + +=head2 hseqname + + Title : hseqname + Usage : $featpair->hseqname($newval) + Function: Get/set method for the name of + feature2. + Returns : value of $feature2->seq_id + Args : newvalue (optional) + + +=cut + +sub hseqname { + my ($self,$arg) = @_; + return $self->feature2->seq_id($arg); +} + + +=head2 hstart + + Title : hstart + Usage : $start = $featpair->hstart + $featpair->hstart(20) + Function: Get/set on the start coordinate of feature2 + Returns : integer + Args : none + +=cut + +sub hstart { + my ($self,$value) = @_; + return $self->feature2->start($value); +} + +=head2 hend + + Title : hend + Usage : $end = $featpair->hend + $featpair->hend($end) + Function: get/set on the end coordinate of feature2 + Returns : integer + Args : none + + +=cut + +sub hend{ + my ($self,$value) = @_; + return $self->feature2->end($value); +} + + +=head2 hstrand + + Title : hstrand + Usage : $strand = $feat->strand() + $feat->strand($strand) + Function: get/set on strand information, being 1,-1 or 0 + Returns : -1,1 or 0 + Args : none + + +=cut + +sub hstrand{ + my ($self,$arg) = @_; + return $self->feature2->strand($arg); +} + +=head2 hscore + + Title : hscore + Usage : $score = $feat->score() + $feat->score($score) + Function: get/set on score information + Returns : float + Args : none if get, the new value if set + + +=cut + +sub hscore { + my ($self,$arg) = @_; + return $self->feature2->score($arg); +} + +=head2 hframe + + Title : hframe + Usage : $frame = $feat->frame() + $feat->frame($frame) + Function: get/set on frame information + Returns : 0,1,2 + Args : none if get, the new value if set + + +=cut + +sub hframe { + my ($self,$arg) = @_; + return $self->feature2->frame($arg); +} + +=head2 hprimary_tag + + Title : hprimary_tag + Usage : $ptag = $featpair->hprimary_tag + Function: Get/set on the primary_tag of feature2 + Returns : 0,1,2 + Args : none if get, the new value if set + + +=cut + +sub hprimary_tag{ + my ($self,$arg) = @_; + return $self->feature2->primary_tag($arg); +} + +=head2 hsource_tag + + Title : hsource_tag + Usage : $tag = $feat->hsource_tag() + $feat->source_tag('genscan'); + Function: Returns the source tag for a feature, + eg, 'genscan' + Returns : a string + Args : none + + +=cut + +sub hsource_tag{ + my ($self,$arg) = @_; + return $self->feature2->source_tag($arg); +} + +=head2 invert + + Title : invert + Usage : $tag = $feat->invert + Function: Swaps feature1 and feature2 around + Returns : Nothing + Args : none + + +=cut + +sub invert { + my ($self) = @_; + + my $tmp = $self->feature1; + + $self->feature1($self->feature2); + $self->feature2($tmp); + return undef; +} + +1;