Mercurial > repos > mahtabm > ensemb_rep_gvl
diff variant_effect_predictor/Bio/Map/Microsatellite.pm @ 0:2bc9b66ada89 draft default tip
Uploaded
author | mahtabm |
---|---|
date | Thu, 11 Apr 2013 06:29:17 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/variant_effect_predictor/Bio/Map/Microsatellite.pm Thu Apr 11 06:29:17 2013 -0400 @@ -0,0 +1,381 @@ +# BioPerl module for Bio::Map::Microsatellite +# +# 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::Microsatellite - An object representing a Microsatellite marker. + +=head1 SYNOPSIS + + $o_usat = new Bio::Map::Microsatellite + (-name=>'Chad Super Marker 2', + -sequence => 'gctgactgatcatatatatatatatatatatatatatatatcgcgatcgtga', + -motif => 'at', + -repeats => 15, + -repeat_start_position => 11 + ); + + $sequence_before_usat = $o_usat->get_leading_flank(); + $sequence_after_usat = $o_usat->get_trailing_flank(); + + +=head1 DESCRIPTION + +This object handles the notion of an Microsatellite. This microsatellite can +be placed on a (linear) Map or used on its own. If this Microsatellites +will be used in a mapping context (it doesn't have to, you know) it can have +multiple positions in a map. For information about a Microsatellite's position +in a map one must query the associate PositionI object which is accessible +through the position() method. + +=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 + +Heikki Lehvaslaiho heikki@ebi.ac.uk +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::Microsatellite; +use vars qw(@ISA); +use strict; +use Bio::Root::Root; +use Bio::Map::Marker; + +@ISA = qw(Bio::Map::Marker); + +=head2 new + + Title : new + Usage : $o_usat = + Function: Builds a new Bio::Map::Microsatellite object + Returns : Bio::Map::Microsatellite + Args : + -name => name of this microsatellite (optional, string, + default 'Unknown microsatellite') + -positions => position(s) for this marker in maps[optional], + An array reference of tuples (array refs themselves) + Each tuple conatins a Bio::Map::MapI-inherited object and a + Bio::Map::PositionI-inherited obj, no default) + -sequence => the sequence of this microsatellite (optional, + scalar, no default) + -motif => the repeat motif of this microsatellite (optional, + scalar, no default) + -repeats => the number of motif repeats for this microsatellite + (optional, scalar, no default) + -repeat_start_position => the starting position of the + microsatellite in this sequence. The first base of the + sequence is position "1". (optional, scalar, no default) + + Note : Creating a Bio::Map::Microsatellite object with no position + might be useful for microsatellite people wanting to embrace + and extend this module. <raising hand> Me! Me! Me! + - using repeat_start_position will trigger a mechinism to + calculate a value for repeat_end_position. + + +=cut + +sub new { + my ($class,@args) = @_; + my $self = $class->SUPER::new(@args); + my ($map, $position, $sequence, $motif, $repeats, $start) = + $self->_rearrange([qw(MAP + POSITION + SEQUENCE + MOTIF + REPEATS + REPEAT_START_POSITION + )], @args); + if( ! $self->name ) { + $self->name('Unnamed microsatellite'); + } + $map && $self->map($map); + $position && $self->position($position); + $sequence && $self->sequence($sequence); + $self->motif(defined $motif ? $motif : 'Unknown motif'); + $repeats && $self->repeats($repeats); + $start && $self->repeat_start_position($start); + return $self; +} + +=head2 Bio::Map::Marker methods + +=cut + +=head2 position + + Title : position + Usage : my $position = $mappable->position($map); OR + $mappable->position($map,$position); OR + Function: Get/Set the Bio::Map::PositionI for a mappable element + in a specific Map + Returns : Bio::Map::PositionI + Args : $map =Bio::Map::MapI # Map we are talking about + $position = Bio::Map::PositionI # Position we want to set + + +=head2 name($new_name) + + Title : name($new_name) + Usage : $o_usat->name($new_name) _or_ + my $name = $o_usat->name() + Function: Get/Set the name for this Microsatellite + Returns : A scalar representing the current name of this Microsatellite + Args : If provided, the current name of this Microsatellite + will be set to $new_name. + +=head2 motif($new_motif) + + Title : motif($new_motif) + Usage : my $motif = $o_usat->motif($new_motif) _or_ + my $motif = $o_usat->motif() + Function: Get/Set the repeat motif for this Microsatellite + Returns : A scalar representing the current repeat motif of this + Microsatellite. + Args : If provided, the current repeat motif of this Microsatellite + will be set to $new_motif. + +=cut + +sub motif { + my ($self,$motif) = @_; + if ($motif) { + $self->{'_motif'} = $motif; + } + return $self->{'_motif'}; +} + +=head2 sequence($new_sequence) + + Title : sequence($new_sequence) + Usage : my $sequence = $o_usat->sequence($new_sequence) _or_ + my $sequence = $o_usat->sequence() + Function: Get/Set the sequence for this Microsatellite + Returns : A scalar representing the current sequence of this + Microsatellite. + Args : If provided, the current sequence of this Microsatellite + will be set to $new_sequence. + +=cut + +sub sequence { + my ($self,$sequence) = @_; + if ($sequence) { + $self->{'_sequence'} = $sequence; + } + return $self->{'_sequence'}; +} + +=head2 repeats($new_repeats) + + Title : repeats($new_repeats) + Usage : my $repeats = $o_usat->repeats($new_repeats) _or_ + my $repeats = $o_usat->repeats() + Function: Get/Set the repeat repeats for this Microsatellite + Returns : A scalar representing the current number of repeats of this + Microsatellite. + Args : If provided, the current number of repeats of this + Microsatellite will be set to $new_repeats. + +=cut + +sub repeats { + my ($self,$repeats) = @_; + if ($repeats) { + $self->{'_repeats'} = $repeats; + } + return $self->{'_repeats'}; +} + +=head2 repeat_start_position($new_repeat_start_position) + + Title : repeat_start_position($new_repeat_start_position) + Usage : my $repeat_start_position = + $o_usat->repeat_start_position($new_repeat_start_position) _or_ + my $repeat_start_position = $o_usat->repeat_start_position() + Function: Get/Set the repeat repeat_start_position for this + Microsatellite + Returns : A scalar representing the repeat start position for this + Microsatellite. + Args : If provided, the current repeat start position of this + Microsatellite will be set to $new_repeat_start_position. + This method will also try to set the repeat end position. This + depends on having information for the motif and the number of + repeats. If you want to use methods like get_trailing_flank or + get_leading flank, be careful to include the right information. + +=cut + +sub repeat_start_position { + my ($self,$repeat_start_position) = @_; + if ($repeat_start_position) { + $self->{'_repeat_start_position'} = $repeat_start_position; + $self->repeat_end_position("set"); + } + return $self->{'_repeat_start_position'}; +} + +=head2 repeat_end_position($value) + + Title : repeat_end_position($set) + Usage : $new_repeat_end_position = + $o_usat->repeat_end_position("set"); _or_ + $new_repeat_end_position = + $o_usat->repeat_end_position($value); _or_ + $current_repeat_end_position = $o_usat->repeat_end_position(); + Function: get/set the end position of the repeat in this sequence + Returns : A scalar representing the base index of the end of the + repeat in this Microsatellite. The first base in the sequence + is base 1. + Args : A scalar representing a value, the string "set", or no + argument (see Notes). + Notes : If you do not provide an argument to this method, the current + end position of the repeat in this Microsatellite will be + returned (a scalar). + If you provide the string "set" to this method it will set the + end position based on the start position, the length of the + motif, and the nuimber of repeats. + If you specify a value the current end position of the repeat + will be set to that value. This is a really bad idea. Don't do + it. + +=cut + +#' +sub repeat_end_position { + my ($self,$caller) = @_; + if( defined $caller ) { + if ($caller eq "set") { + $self->{'_repeat_end_position'} = + $self->{'_repeat_start_position'} + + (length($self->motif()) * $self->repeats()); + } + elsif ($caller) { + $self->{'_repeat_end_position'} = $caller; + } + } + return $self->{'_repeat_end_position'}; +} + +=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 + +=cut + +sub equals { + my ($self,@args) = @_; + $self->warn("equals is not yet implemented in ". + ref($self)." yet. Check back real soon!"); +} + +=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 + +=cut + +sub less_than { + my ($self,@args) = @_; + $self->warn("less_then is not yet implemented in ". + ref($self)." yet. Check back real soon!"); +} + +=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 + +=cut + +sub greater_than { + my ($self,@args) = @_; + $self->warn("greater_then is not yet implemented in ". + ref($self)." yet. Check back real soon!"); +} + +=head2 get_leading_flank() + + Title : get_leading_flank() + Usage : $leading_sequence = $o_usat->get_leading_flank(); + Returns : A scalar representing the sequence before the repeats in this + Microsatellite. + Args : None. + +=cut + +sub get_leading_flank { + my $self = shift; + return substr $self->sequence(),0,$self->repeat_start_position-1; + +} + +=head2 get_trailing_flank() + + Title : get_trailing_flank() + Usage : $trailing_flank = $o_usat->get_trailing_flank(); + Returns : A scalar representing the sequence after the repeats in this + Microsatellite. + Args : None. + +=cut + +sub get_trailing_flank { + my $self = shift; + return substr $self->sequence(),$self->repeat_end_position()-1; +} + + +1; + +