diff variant_effect_predictor/Bio/Species.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/Species.pm	Thu Apr 11 06:29:17 2013 -0400
@@ -0,0 +1,338 @@
+# $Id: Species.pm,v 1.24 2002/12/05 13:46:30 heikki Exp $
+#
+# BioPerl module for Bio::Species
+#
+# Cared for by James Gilbert <jgrg@sanger.ac.uk>
+#
+# You may distribute this module under the same terms as perl itself
+
+# POD documentation - main docs before the code
+
+=head1 NAME
+
+Bio::Species - Generic species object
+
+=head1 SYNOPSIS
+
+    $species = Bio::Species->new(-classification => [@classification]);
+                                    # Can also pass classification
+                                    # array to new as below
+
+    $species->classification(qw( sapiens Homo Hominidae
+                                 Catarrhini Primates Eutheria
+                                 Mammalia Vertebrata Chordata
+                                 Metazoa Eukaryota ));
+
+    $genus = $species->genus();
+
+    $bi = $species->binomial();     # $bi is now "Homo sapiens"
+
+    # For storing common name
+    $species->common_name("human");
+
+    # For storing subspecies
+    $species->sub_species("accountant");
+
+=head1 DESCRIPTION
+
+Provides a very simple object for storing phylogenetic
+information.  The classification is stored in an array,
+which is a list of nodes in a phylogenetic tree.  Access to
+getting and setting species and genus is provided, but not
+to any of the other node types (eg: "phylum", "class",
+"order", "family").  There's plenty of scope for making the
+model more sophisticated, if this is ever needed.
+
+A methods are also provided for storing common
+names, and subspecies.
+
+=head1 CONTACT
+
+James Gilbert email B<jgrg@sanger.ac.uk>
+
+=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::Species;
+use vars qw(@ISA);
+use strict;
+
+# Object preamble - inherits from Bio::Root::Object
+
+use Bio::Root::Root;
+
+
+@ISA = qw(Bio::Root::Root);
+
+sub new {
+  my($class,@args) = @_;
+
+  my $self = $class->SUPER::new(@args);
+
+  $self->{'classification'} = [];
+  $self->{'common_name'} = undef;
+  my ($classification) = $self->_rearrange([qw(CLASSIFICATION)], @args);
+  if( defined $classification &&
+      (ref($classification) eq "ARRAY") ) {
+      $self->classification(@$classification);
+  }
+  return $self;
+}
+
+=head2 classification
+
+ Title   : classification
+ Usage   : $self->classification(@class_array);
+           @classification = $self->classification();
+ Function: Fills or returns the classification list in
+           the object.  The array provided must be in
+           the order SPECIES, GENUS ---> KINGDOM.
+           Checks are made that species is in lower case,
+           and all other elements are in title case.
+ Example : $obj->classification(qw( sapiens Homo Hominidae
+           Catarrhini Primates Eutheria Mammalia Vertebrata
+           Chordata Metazoa Eukaryota));
+ Returns : Classification array
+ Args    : Classification array 
+                 OR
+           A reference to the classification array. In the latter case
+           if there is a second argument and it evaluates to true,
+           names will not be validated.
+
+
+=cut
+
+
+sub classification {
+    my ($self,@args) = @_;
+
+    if (@args) {
+
+	my ($classif,$force);
+	if(ref($args[0])) {
+	    $classif = shift(@args);
+	    $force = shift(@args);
+	} else {
+	    $classif = \@args;
+	}
+	
+        # Check the names supplied in the classification string
+	# Species should be in lower case
+	if(! $force) {
+	    $self->validate_species_name($classif->[0]);
+	    # All other names must be in title case
+	    foreach  (@$classif) {
+		$self->validate_name( $_ );
+	    }
+	}
+        # Store classification
+        $self->{'classification'} = $classif;
+    }
+    return @{$self->{'classification'}};
+}
+
+=head2 common_name
+
+ Title   : common_name
+ Usage   : $self->common_name( $common_name );
+           $common_name = $self->common_name();
+ Function: Get or set the common name of the species
+ Example : $self->common_name('human')
+ Returns : The common name in a string
+ Args    : String, which is the common name (optional)
+
+=cut
+
+sub common_name{
+    my $self = shift;
+
+    return $self->{'common_name'} = shift if @_;
+    return $self->{'common_name'};
+}
+
+=head2 variant
+
+ Title   : variant
+ Usage   : $obj->variant($newval)
+ Function: Get/set variant information for this species object (strain,
+           isolate, etc).
+ Example : 
+ Returns : value of variant (a scalar)
+ Args    : new value (a scalar or undef, optional)
+
+
+=cut
+
+sub variant{
+    my $self = shift;
+
+    return $self->{'variant'} = shift if @_;
+    return $self->{'variant'};
+}
+
+=head2 organelle
+
+ Title   : organelle
+ Usage   : $self->organelle( $organelle );
+           $organelle = $self->organelle();
+ Function: Get or set the organelle name
+ Example : $self->organelle('Chloroplast')
+ Returns : The organelle name in a string
+ Args    : String, which is the organelle name
+
+=cut
+
+sub organelle {
+    my($self, $name) = @_;
+
+    if ($name) {
+        $self->{'organelle'} = $name;
+    } else {
+        return $self->{'organelle'}
+    }
+}
+
+=head2 species
+
+ Title   : species
+ Usage   : $self->species( $species );
+           $species = $self->species();
+ Function: Get or set the scientific species name.  The species
+           name must be in lower case.
+ Example : $self->species( 'sapiens' );
+ Returns : Scientific species name as string
+ Args    : Scientific species name as string
+
+=cut
+
+
+sub species {
+    my($self, $species) = @_;
+
+    if ($species) {
+        $self->validate_species_name( $species );
+        $self->{'classification'}[0] = $species;
+    }
+    return $self->{'classification'}[0];
+}
+
+=head2 genus
+
+ Title   : genus
+ Usage   : $self->genus( $genus );
+           $genus = $self->genus();
+ Function: Get or set the scientific genus name.  The genus
+           must be in title case.
+ Example : $self->genus( 'Homo' );
+ Returns : Scientific genus name as string
+ Args    : Scientific genus name as string
+
+=cut
+
+
+sub genus {
+    my($self, $genus) = @_;
+
+    if ($genus) {
+        $self->validate_name( $genus );
+        $self->{'classification'}[1] = $genus;
+    }
+    return $self->{'classification'}[1];
+}
+
+=head2 sub_species
+
+ Title   : sub_species
+ Usage   : $obj->sub_species($newval)
+ Function:
+ Returns : value of sub_species
+ Args    : newvalue (optional)
+
+
+=cut
+
+sub sub_species {
+    my( $self, $sub ) = @_;
+
+    if ($sub) {
+        $self->{'_sub_species'} = $sub;
+    }
+    return $self->{'_sub_species'};
+}
+
+=head2 binomial
+
+ Title   : binomial
+ Usage   : $binomial = $self->binomial();
+           $binomial = $self->binomial('FULL');
+ Function: Returns a string "Genus species", or "Genus species subspecies",
+           the first argument is 'FULL' (and the species has a subspecies).
+ Args    : Optionally the string 'FULL' to get the full name including
+           the subspecies.
+
+=cut
+
+
+sub binomial {
+    my( $self, $full ) = @_;
+
+    my( $species, $genus ) = $self->classification();
+    unless( defined $species) {
+	$species = 'sp.';
+	$self->warn("classification was not set");
+    }
+    $genus = ''   unless( defined $genus);
+    my $bi = "$genus $species";
+    if (defined($full) && ((uc $full) eq 'FULL')) {
+	my $ssp = $self->sub_species;
+        $bi .= " $ssp" if $ssp;
+    }
+    return $bi;
+}
+
+sub validate_species_name {
+    my( $self, $string ) = @_;
+
+    return 1 if $string eq "sp.";
+    return 1 if $string =~ /^[a-z][\w\s]+$/i;
+    $self->throw("Invalid species name '$string'");
+}
+
+sub validate_name {
+    return 1; # checking is disabled as there is really not much we can
+              # enforce HL 2002/10/03
+#     my( $self, $string ) = @_;
+
+#     return 1 if $string =~ /^[\w\s\-\,\.]+$/ or
+#         $self->throw("Invalid name '$string'");
+}
+
+=head2 ncbi_taxid
+
+ Title   : ncbi_taxid
+ Usage   : $obj->ncbi_taxid($newval)
+ Function: Get/set the NCBI Taxon ID
+ Returns : the NCBI Taxon ID as a string
+ Args    : newvalue to set or undef to unset (optional)
+
+
+=cut
+
+sub ncbi_taxid {
+    my $self = shift;
+
+    return $self->{'_ncbi_taxid'} = shift if @_;
+    return $self->{'_ncbi_taxid'};
+}
+
+1;
+
+__END__