Mercurial > repos > mahtabm > ensembl
diff variant_effect_predictor/Bio/Map/LinkageMap.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/LinkageMap.pm Thu Apr 11 02:01:53 2013 -0400 @@ -0,0 +1,245 @@ +# BioPerl module for Bio::Map::LinkageMap +# +# Cared for by Chad Matsalla <bioinformatics1@dieselwurks.com> +# +# Copyright Chad Matsalla +# +# You may distribute this module under the same terms as perl itself + +# POD documentation - main docs before the code + +=head1 NAME + +Bio::Map::LinkageMap - A representation of a genetic linkage map. + +=head1 SYNOPSIS + + use Bio::Map::LinkageMap; + # create a new map + my $map = new Bio::Map::LinkageMap(-name => 'Chads Superterriffic Map', + -type => 'Linkage', + -units=> 'cM'); + # create the location of a marker for that map + my $position = new Bio::Map::LinkagePosition( -positions => 1, + -distance => "22.3"); + # create a marker and place it at that position + my $marker = new Bio::Map::Marker::Microsatellite( + -name => 'SuuuperMarker', + -position => $position); + # place that marker on that map + $map->add_element($marker); + + # done! + +=head1 DESCRIPTION + +This object describes the basic functionality of a genetic linkage map in +Bioperl. Each 'position' can have one or more markers that map some number of +units from the markers at the previous 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 - Chad Matsalla + +Email bioinformatics1@dieselwurks.com + +=head1 CONTRIBUTORS + +Lincoln Stein lstein@cshl.org +Heikki Lehvaslaiho heikki@ebi.ac.uk +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::LinkageMap; +use vars qw(@ISA); +use strict; +use Bio::Map::SimpleMap; + +@ISA = qw(Bio::Map::SimpleMap); + +=head2 new + + Title : new + Usage : my $linkage_map = new Bio::Map::LinkageMap(); + Function: Builds a new Bio::Map::LinkageMap object + Returns : Bio::Map::LinkageMap + Args : -name => the name of the map (string) [optional] + -type => the type of this map (string, defaults to Linkage) [optional] + -species => species for this map (Bio::Species) [optional] + -units => the map units (string, defaults to cM) [optional] + -elements=> elements to initialize with + (arrayref of Bio::Map::MappableI objects) [optional] + + -uid => Unique ID of this map +=cut + +# new provided by SimpleMap + + + +=head2 length() + + Title : length() + Usage : my $length = $map->length(); + Function: Retrieves the length of the map. In the case of a LinkageMap, the + length is the sum of all marker distances. + Returns : An integer representing the length of this LinkageMap. Will return + undef if length is not calculateable + Args : None. + + +=cut + +sub length { + my ($self) = @_; + my $total_distance; + foreach (@{$self->{'_elements'}}) { + if ($_) { + $total_distance += ($_->position()->each_position_value($self))[0]; + } + } + return $total_distance; +} + +=head2 add_element($marker) + + Title : add_element($marker) + Usage : $map->add_element($marker) + Function: Add a Bio::Map::MappableI object to the Map + Returns : none + Args : Bio::Map::MappableI object + Notes : It is strongly recommended that you use a + Bio::Map::LinkagePosition as the position in any + Bio::Map::Mappable that you create to place on this + map. Using some other Bio::Map::Position might work but might + be unpredictable. + N.B. I've added Bio::Map::OrderedPosition which should achieve + similar things from LinkagePosition and will work for + RH markers too. +=cut + +#' +sub _add_element { + my ($self,$marker) = @_; + + my $o_position = $marker->position(); + + $self->debug( "marker position is ". $marker->position()); +# print("add_element: \$o_position is $o_position\n"); +# print("add_element: \$marker is $marker\n"); + + my $position; + unless ( $o_position->isa('Bio::Map::LinkagePosition') || + $o_position->isa('Bio::Map::OrderedPosition') + ) { + $self->warn("You really should use a Linkage Position for this object. This insures that there is only one position. Trying anyway..."); + my @p = ( $o_position->each_position_value($self)); + $position = shift @p; + if( ! defined $position ) { + $self->throw("This marker ($marker) does not have a position in this map ($self)"); + } + } else { + $position = $o_position->order; + } + + if ($self->{'_elements'}[$position]) { + $self->warn("Replacing the marker in position $position because in a linkage map the position is a key."); + } + $self->{'_elements'}[$position] = $marker; +} + +=head2 each_element + + Title : each_element + Usage : my @elements = $map->each_element; + Function: Retrieves all the elements in a map + _ordered_. + Returns : An array containing MappableI objects. + Args : None. + Notes : This is a useless concept in the context of a linkage map but is + included if you want a list of all of the marker names on the map. + +=cut + +sub each_element { + my ($self) = @_; + return @{$self->{'_elements'}}; +} + +=head2 implemented by Bio::Map::SimpleMap + +=cut + +=head2 name($new_name) + + Title : name($new_name) + Usage : my $name = $map->name($new_name) _or_ + my $length = $map->name() + Function: Get/set the name of the map. + Returns : The current name of the map. + Args : If provided, the name of the map is set to $new_name. + +=head2 species + + Title : species + Usage : my $species = $map->species; + Function: Get/Set Species for a map + Returns : Bio::Species object + Args : (optional) Bio::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) + + +=head2 type + + Title : type + Usage : my $type = $map->type + Function: Get/Set Map type + Returns : String coding map type + Args : (optional) string + +=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 + +1;