diff variant_effect_predictor/Bio/Map/CytoMarker.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/Map/CytoMarker.pm	Thu Apr 11 02:01:53 2013 -0400
@@ -0,0 +1,320 @@
+# $Id: CytoMarker.pm,v 1.3 2002/10/22 07:45:15 lapp Exp $
+#
+# BioPerl module for Bio::Map::CytoMarker
+#
+# 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::Map::CytoMarker - An object representing a marker.
+
+=head1 SYNOPSIS
+
+  $o_usat = new Bio::Map::CytoMarker(-name=>'Chad Super Marker 2',
+				 -position => $pos);
+
+=head1 DESCRIPTION
+
+This object handles markers with a positon in a cytogenetic map known.
+This marker will have a name and a position.
+
+
+=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 list.  Your participation is much appreciated.
+
+  bioperl-l@bioperl.org              - General discussion
+  http://bioperl.org/MailList.shtml  - About the mailing lists
+
+=head2 Reporting Bugs
+
+Report bugs to the Bioperl bug tracking system to help us keep track
+of the bugs and their resolution. Bug reports can be submitted via
+email or the web:
+
+  bioperl-bugs@bioperl.org
+  http://bugzilla.bioperl.org/
+
+=head1 AUTHOR - Heikki Lehvaslaiho 
+
+Email heikki@ebi.ac.uk
+
+=head1 CONTRIBUTORS
+
+Chad Matsalla      bioinformatics1@dieselwurks.com
+Lincoln Stein      lstein@cshl.org
+Jason Stajich      jason@bioperl.org
+
+=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::Map::CytoMarker;
+use vars qw(@ISA);
+use strict;
+use Bio::Map::Marker;
+use Bio::Map::CytoPosition;
+use Bio::RangeI;
+
+@ISA = qw(Bio::Map::Marker Bio::RangeI  );
+
+
+=head2 Bio::Map::MarkerI methods
+
+=cut
+
+=head2 get_position_object
+
+ Title   : get_position_class
+ Usage   : my $pos = $marker->get_position_object();
+ Function: To get an object of the default Position class
+           for this Marker. Subclasses should redefine this method.
+           The Position needs to be L<Bio::Map::PositionI>.
+ Returns : L<Bio::Map::CytoPosition>
+ Args    : none
+
+=cut
+
+sub get_position_object {
+   my ($self) = @_;
+   return new Bio::Map::CytoPosition();
+}
+
+
+=head2 Comparison methods
+
+The numeric values for cutogeneic loctions go from the p tip of
+chromosome 1, down to the q tip and similarly throgh consecutive
+chromosomes, through X and end the the q tip of X. See
+L<Bio::Map::CytoPosition::cytorange> for more details.
+
+The numeric values for cytogenetic positions are ranges of type
+L<Bio::Range>, so MarkerI type of operators (equals, less_than,
+greater_than) are not very meaningful, but they might be of some use
+combined with L<Bio::RangeI> methods (overlaps, contains, equals,
+intersection, union). equals(), present in both interfaces is treated
+as a more precice RangeI method.
+
+CytoMarker has a method L<get_chr> which might turn out to be useful
+in this context.
+
+The L<less_than> and L<greater_than> methods are implemented by
+comparing the end values of the range, so you better first check that
+markers do not overlap, or you get an opposite result than expected.
+The numerical values are not metric, so avarages are not meaningful.
+
+Note: These methods always return a value. A false value (0) might
+mean that you have not set the position! Check those warnings.
+
+=cut
+
+=head2 Bio::Map::MarkerI comparison methods
+
+=cut
+
+=head2 tuple
+
+ Title   : tuple
+ Usage   : ($me, $you) = $self->_tuple($compare)
+ Function: Utility method to extract numbers and test for missing values.
+ Returns : two ranges or tuple of -1
+ Args    : Bio::Map::MappableI or Bio::Map::PositionI
+
+=cut
+
+=head2 less_than
+
+ Title   : less_than
+ Usage   : if( $mappable->less_than($m2) ) ...
+ Function: Tests if a position is less than another position
+ Returns : boolean
+ Args    : Bio::Map::MappableI  or Bio::Map::PositionI
+
+=cut
+
+
+sub less_than {
+    my ($self,$compare) = @_;
+
+    my ($me, $you) = $self->tuple($compare);
+    return 0 if $me == -1 or $you == -1 ;
+
+    $me  = $me->end;
+    $you  = $you->start;
+
+    print STDERR "me=$me, you=$you\n" if $self->verbose > 0;
+    return $me < $you;
+}
+
+=head2 greater_than
+
+ Title   : greater_than
+ Usage   : if( $mappable->greater_than($m2) ) ...
+ Function: Tests if position is greater than another position
+ Returns : boolean
+ Args    : Bio::Map::MappableI or Bio::Map::PositionI
+
+=cut
+
+
+sub greater_than {
+    my ($self,$compare) = @_;
+
+    my ($me, $you) = $self->tuple($compare);
+    return 0 if $me == -1 or $you == -1 ;
+
+    $me  = $me->start;
+    $you  = $you->end;
+    print STDERR "me=$me, you=$you\n" if $self->verbose > 0;
+    return $me > $you;
+}
+
+=head2 RangeI methods
+
+=cut
+
+
+=head2 equals
+
+ Title   : equals
+ Usage   : if( $mappable->equals($mapable2)) ...
+ Function: Test if a position is equal to another position
+ Returns : boolean
+ Args    : Bio::Map::MappableI or Bio::Map::PositionI
+
+=cut
+
+sub equals {
+    my ($self,$compare) = @_;
+
+    my ($me, $you) = $self->tuple($compare);
+    return 0 unless $me->isa('Bio::RangeI') and $you->isa('Bio::RangeI');
+
+    return $me->equals($you);
+}
+
+=head2 overlaps
+
+  Title    : overlaps
+  Usage    : if($r1->overlaps($r2)) { do stuff }
+  Function : tests if $r2 overlaps $r1
+  Args     : a range to test for overlap with
+  Returns  : true if the ranges overlap, false otherwise
+  Inherited: Bio::RangeI
+
+=cut
+
+sub overlaps {
+    my ($self,$compare) = @_;
+
+    my ($me, $you) = $self->tuple($compare);
+    return 0 unless $me->isa('Bio::RangeI') and $you->isa('Bio::RangeI');
+
+    return $me->overlaps($you);
+}
+
+=head2 contains
+
+  Title    : contains
+  Usage    : if($r1->contains($r2) { do stuff }
+  Function : tests wether $r1 totaly contains $r2
+  Args     : a range to test for being contained
+  Returns  : true if the argument is totaly contained within this range
+  Inherited: Bio::RangeI
+
+=cut
+
+sub contains {
+    my ($self,$compare) = @_;
+
+    my ($me, $you) = $self->tuple($compare);
+    return 0 unless $me->isa('Bio::RangeI') and $you->isa('Bio::RangeI');
+    print STDERR "me=", $me->start. "-", $me->end, " ",
+    "you=", $you->start. "-", $you->end, "\n"
+	if $self->verbose > 0;
+
+    return $me->contains($you);
+}
+
+=head2 intersection
+
+  Title    : intersection
+  Usage    : ($start, $stop, $strand) = $r1->intersection($r2)
+  Function : gives the range that is contained by both ranges
+  Args     : a range to compare this one to
+  Returns  : nothing if they do not overlap, or the range that they do overlap
+  Inherited: Bio::RangeI::intersection
+
+=cut
+
+sub intersection {
+    my ($self,$compare) = @_;
+
+    my ($me, $you) = $self->tuple($compare);
+    return 0 unless $me->isa('Bio::RangeI') and $you->isa('Bio::RangeI');
+
+    return $me->intersection($you);
+}
+
+=head2 union
+
+  Title    : union
+  Usage    : ($start, $stop, $strand) = $r1->union($r2);
+           : ($start, $stop, $strand) = Bio::Range->union(@ranges);
+  Function : finds the minimal range that contains all of the ranges
+  Args     : a range or list of ranges to find the union of
+  Returns  : the range containing all of the ranges
+  Inherited: Bio::RangeI::union
+
+=cut
+
+sub union {
+    my ($self,$compare) = @_;
+
+    my ($me, $you) = $self->tuple($compare);
+    return 0 unless $me->isa('Bio::RangeI') and $you->isa('Bio::RangeI');
+
+    return $me->union($you);
+}
+
+
+=head2 New methods
+
+=cut
+
+
+=head2 get_chr
+
+ Title   : get_chr
+ Usage   : my $mychr = $marker->get_chr();
+ Function: Read only method for the  chromosome string of the location.
+           A shotrcut to $marker->position->chr().
+ Returns : chromosome value
+ Args    : [optional] new chromosome value
+
+=cut
+
+
+sub get_chr {
+    my ($self) = @_;
+    return undef unless $self->position;
+    return $self->position->chr;
+}
+
+1;
+