Mercurial > repos > mahtabm > ensemb_rep_gvl
diff variant_effect_predictor/Bio/Seq/RichSeq.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/Seq/RichSeq.pm Thu Apr 11 06:29:17 2013 -0400 @@ -0,0 +1,390 @@ +# $Id: RichSeq.pm,v 1.9 2002/11/11 18:16:31 lapp Exp $ +# +# BioPerl module for Bio::Seq::RichSeq +# +# Cared for by Ewan Birney <birney@ebi.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::Seq::RichSeq - Module implementing a sequence created from a rich +sequence database entry + +=head1 SYNOPSIS + +See Bio::Seq::RichSeqI and documentation of methods. + +=head1 DESCRIPTION + +This module implements Bio::Seq::RichSeqI, an interface for sequences +created from or created for entries from/of rich sequence databanks, +like EMBL, GenBank, and SwissProt. Methods added to the Bio::SeqI +interface therefore focus on databank-specific information. Note that +not every rich databank format may use all of the properties provided. + +=head1 Implemented Interfaces + +This class implementes the following interfaces. + +=over 4 + +=item Bio::Seq::RichSeqI + +Note that this includes implementing Bio::PrimarySeqI and Bio::SeqI. + +=item Bio::IdentifiableI + +=item Bio::DescribableI + +=item Bio::AnnotatableI + +=back + +=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 one of the Bioperl mailing lists. +Your participation is much appreciated. + + bioperl-l@bioperl.org - General discussion + http://bio.perl.org/MailList.html - About the mailing lists + +=head2 Reporting Bugs + +Report bugs to the Bioperl bug tracking system to help us keep track + the bugs and their resolution. + Bug reports can be submitted via email or the web: + + bioperl-bugs@bio.perl.org + http://bugzilla.bioperl.org/ + +=head1 AUTHOR - Ewan Birney + +Email birney@ebi.ac.uk + +Describe contact details here + +=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::Seq::RichSeq; +use vars qw($AUTOLOAD @ISA); +use strict; + +# Object preamble - inherits from Bio::Root::Object + +use Bio::Seq; +use Bio::Seq::RichSeqI; + +@ISA = qw(Bio::Seq Bio::Seq::RichSeqI); + + +=head2 new + + Title : new + Usage : $seq = Bio::Seq::RichSeq->new( -seq => 'ATGGGGGTGGTGGTACCCT', + -id => 'human_id', + -accession_number => 'AL000012', + ); + + Function: Returns a new seq object from + basic constructors, being a string for the sequence + and strings for id and accession_number + Returns : a new Bio::Seq::RichSeq object + +=cut + +sub new { + # standard new call.. + my($caller,@args) = @_; + my $self = $caller->SUPER::new(@args); + + $self->{'_dates'} = []; + $self->{'_secondary_accession'} = []; + + my ($dates, $xtra, $sv, + $keywords, $pid, $mol, + $division ) = $self->_rearrange([qw(DATES + SECONDARY_ACCESSIONS + SEQ_VERSION + KEYWORDS + PID + MOLECULE + DIVISION + )], + @args); + defined $division && $self->division($division); + defined $mol && $self->molecule($mol); + defined $keywords && $self->keywords($keywords); + defined $sv && $self->seq_version($sv); + defined $pid && $self->pid($pid); + + if( defined $dates ) { + if( ref($dates) =~ /array/i ) { + foreach ( @$dates) { + $self->add_date($_); + } + } else { + $self->add_date($dates); + } + } + + if( defined $xtra ) { + if( ref($xtra) =~ /array/i ) { + foreach ( @$xtra) { + $self->add_secondary_accession($_); + } + } else { + $self->add_secondary_accession($xtra); + } + } + + return $self; +} + + +=head2 division + + Title : division + Usage : $obj->division($newval) + Function: + Returns : value of division + Args : newvalue (optional) + + +=cut + +sub division { + my $obj = shift; + if( @_ ) { + my $value = shift; + $obj->{'_division'} = $value; + } + return $obj->{'_division'}; + +} + +=head2 molecule + + Title : molecule + Usage : $obj->molecule($newval) + Function: + Returns : type of molecule (DNA, mRNA) + Args : newvalue (optional) + + +=cut + +sub molecule { + my $obj = shift; + if( @_ ) { + my $value = shift; + $obj->{'_molecule'} = $value; + } + return $obj->{'_molecule'}; + +} + +=head2 add_date + + Title : add_date + Usage : $self->add_date($datestr) + Function: adds a date + Example : + Returns : a date string or an array of such strings + Args : + + +=cut + +sub add_date { + my ($self,@dates) = @_; + foreach my $dt ( @dates ) { + push(@{$self->{'_dates'}},$dt); + } +} + +=head2 get_dates + + Title : get_dates + Usage : + Function: + Example : + Returns : an array of date strings + Args : + + +=cut + +sub get_dates{ + my ($self) = @_; + return @{$self->{'_dates'}}; +} + + +=head2 pid + + Title : pid + Usage : + Function: Get (and set, depending on the implementation) the PID property + for the sequence. + Example : + Returns : a string + Args : + + +=cut + +sub pid { + my ($self,$pid) = @_; + + if(defined($pid)) { + $self->{'_pid'} = $pid; + } + return $self->{'_pid'}; +} + + +=head2 accession + + Title : accession + Usage : $obj->accession($newval) + Function: Whilst the underlying sequence object does not + have an accession, so we need one here. + + In this implementation this is merely a synonym for + accession_number(). + Example : + Returns : value of accession + Args : newvalue (optional) + + +=cut + +sub accession { + my ($obj,@args) = @_; + return $obj->accession_number(@args); +} + +=head2 add_secondary_accession + + Title : add_secondary_accession + Usage : $self->add_domment($ref) + Function: adds a secondary_accession + Example : + Returns : + Args : a string or an array of strings + + +=cut + +sub add_secondary_accession { + my ($self) = shift; + foreach my $dt ( @_ ) { + push(@{$self->{'_secondary_accession'}},$dt); + } +} + +=head2 get_secondary_accessions + + Title : get_secondary_accessions + Usage : + Function: + Example : + Returns : An array of strings + Args : + + +=cut + +sub get_secondary_accessions{ + my ($self,@args) = @_; + return @{$self->{'_secondary_accession'}}; +} + +=head2 seq_version + + Title : seq_version + Usage : $obj->seq_version($newval) + Function: + Example : + Returns : value of seq_version + Args : newvalue (optional) + + +=cut + +sub seq_version{ + my ($obj,$value) = @_; + if( defined $value) { + $obj->{'_seq_version'} = $value; + } + return $obj->{'_seq_version'}; + +} + + +=head2 keywords + + Title : keywords + Usage : $obj->keywords($newval) + Function: + Returns : value of keywords (a string) + Args : newvalue (optional) (a string) + + +=cut + +sub keywords { + my $obj = shift; + if( @_ ) { + my $value = shift; + $obj->{'_keywords'} = $value; + } + return $obj->{'_keywords'}; + +} + +# +## +### Deprecated methods kept for ease of transtion +## +# + +sub each_date { + my ($self) = @_; + $self->warn("Deprecated method... please use get_dates"); + return $self->get_dates; +} + + +sub each_secondary_accession { + my ($self) = @_; + $self->warn("each_secondary_accession - deprecated method. use get_secondary_accessions"); + return $self->get_secondary_accessions; + +} + +sub sv { + my ($obj,$value) = @_; + $obj->warn("sv - deprecated method. use seq_version"); + $obj->seq_version($value); +} + + +1;