Mercurial > repos > mahtabm > ensembl
diff variant_effect_predictor/Bio/Map/SimpleMap.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/SimpleMap.pm Thu Apr 11 02:01:53 2013 -0400 @@ -0,0 +1,292 @@ +# $Id: SimpleMap.pm,v 1.8 2002/10/22 07:45:16 lapp Exp $ +# +# BioPerl module for Bio::Map::SimpleMap +# +# Cared for by Jason Stajich <jason@bioperl.org> +# +# Copyright Jason Stajich +# +# You may distribute this module under the same terms as perl itself + +# POD documentation - main docs before the code + +=head1 NAME + +Bio::Map::SimpleMap - A MapI implementation handling the basics of a Map + +=head1 SYNOPSIS + + use Bio::Map::SimpleMap; + my $map = new Bio::Map::SimpleMap(-name => 'genethon', + -type => 'Genetic', + -units=> 'cM', + -species => $human); + foreach my $marker ( @markers ) { # get a list of markers somewhere + $map->add_element($marker); + } + +=head1 DESCRIPTION + +This is the basic implementation of a Bio::Map::MapI. It handles the +essential storage of name, species, type, and units as well as in +memory representation of the elements of a map. + +Subclasses might need to redefine or hardcode type(), length() and +units(). + +=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 - Jason Stajich + +Email jason@bioperl.org + +=head1 CONTRIBUTORS + +Heikki Lehvaslaiho heikki@ebi.ac.uk +Lincoln Stein lstein@cshl.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::SimpleMap; +use vars qw(@ISA $MAPCOUNT); +use strict; + +# Object preamble - inherits from Bio::Root::Root + +use Bio::Root::Root; +use Bio::Map::MapI; + +@ISA = qw(Bio::Root::Root Bio::Map::MapI); +BEGIN { $MAPCOUNT = 1; } + +=head2 new + + Title : new + Usage : my $obj = new Bio::Map::SimpleMap(); + Function: Builds a new Bio::Map::SimpleMap object + Returns : Bio::Map::SimpleMap + Args : -name => name of map (string) + -species => species for this map (Bio::Species) [optional] + -units => map units (string) + -elements=> elements to initialize with + (arrayref of Bio::Map::MappableI objects) [optional] + + -uid => Unique Id +=cut + +sub new { + my($class,@args) = @_; + + my $self = $class->SUPER::new(@args); + + $self->{'_elements'} = []; + $self->{'_name'} = ''; + $self->{'_species'} = ''; + $self->{'_units'} = ''; + $self->{'_type'} = ''; + $self->{'_uid'} = $MAPCOUNT++; + my ($name, $type,$species, $units, + $elements,$uid) = $self->_rearrange([qw(NAME TYPE + SPECIES UNITS + ELEMENTS UID)], @args); + defined $name && $self->name($name); + defined $species && $self->species($species); + defined $units && $self->units($units); + defined $type && $self->type($type); + defined $uid && $self->unique_id($uid); + + if( $elements && ref($elements) =~ /array/ ) { + foreach my $item ( @$elements ) { + $self->add_element($item); + } + } + return $self; +} + +=head2 species + + Title : species + Usage : my $species = $map->species; + Function: Get/Set Species for a map + Returns : Bio::Species object or string + Args : (optional) Bio::Species or string + +=cut + +sub species{ + my ($self,$value) = @_; + if( defined $value ) { + $self->{'_species'} = $value; + } + return $self->{'_species'}; +} + +=head2 units + + Title : units + Usage : $map->units('cM'); + Function: Get/Set units for a map + Returns : units for a map + Args : units for a map (string) + +=cut + +sub units{ + my ($self,$value) = @_; + if( defined $value ) { + $self->{'_units'} = $value; + } + return $self->{'_units'}; +} + +=head2 type + + Title : type + Usage : my $type = $map->type + Function: Get/Set Map type + Returns : String coding map type + Args : (optional) string + +=cut + +sub type { + my ($self,$value) = @_; + # this may be hardcoded/overriden by subclasses + + if( defined $value ) { + $self->{'_type'} = $value; + } + return $self->{'_type'}; +} + + +=head2 name + + Title : name + Usage : my $name = $map->name + Function: Get/Set Map name + Returns : Map name + Args : (optional) string + +=cut + +sub name { + my ($self,$value) = @_; + if( defined $value ) { + $self->{'_name'} = $value; + } + return $self->{'_name'}; +} + +=head2 length + + Title : length + Usage : my $length = $map->length(); + Function: Retrieves the length of the map, + It is possible for the length to be unknown + for maps such as Restriction Enzyme, will return undef + in that case + Returns : integer representing length of map in current units + will return undef if length is not calculateable + Args : none + +=cut + +sub length { + my ($self) = @_; + my ($len ) = 0; + + foreach my $marker ($self->each_element) { + $len = $marker->position->numeric if $marker->position->numeric > $len; + } + return $len; +} + + +=head2 unique_id + + Title : unique_id + Usage : my $id = $map->unique_id; + Function: Get/Set the unique ID for this map + Returns : a unique identifier + Args : [optional] new identifier to set + +=cut + +sub unique_id { + my ($self,$id) = @_; + if( defined $id ) { + $self->{'_uid'} = $id; + } + return $self->{'_uid'}; +} + + +=head2 add_element + + Title : add_element + Usage : $map->add_element($marker) + Function: Add a Bio::Map::MappableI object to the Map + Returns : none + Args : Bio::Map::MappableI object + +=cut + +sub add_element{ + my ($self,$mapelement) = @_; + return unless ( defined $mapelement); + + $self->throw("This is not a Bio::Map::MarkerI object but a [$self]") + unless $mapelement->isa('Bio::Map::MarkerI'); + + $mapelement->map($self); # tell the marker its default map + + push @{$self->{'_elements'}}, $mapelement; + +} + +=head2 each_element + + Title : each_element + Usage : my @elements = $map->each_element; + Function: Retrieves all the elements in a map + unordered + Returns : Array of Bio::Map::MappableI objects + Args : none + + +=cut + +sub each_element{ + my ($self) = @_; + return @{$self->{'_elements'}}; +} + +1;