Mercurial > repos > mahtabm > ensembl
comparison variant_effect_predictor/Bio/Species.pm @ 0:1f6dce3d34e0
Uploaded
| author | mahtabm |
|---|---|
| date | Thu, 11 Apr 2013 02:01:53 -0400 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:1f6dce3d34e0 |
|---|---|
| 1 # $Id: Species.pm,v 1.24 2002/12/05 13:46:30 heikki Exp $ | |
| 2 # | |
| 3 # BioPerl module for Bio::Species | |
| 4 # | |
| 5 # Cared for by James Gilbert <jgrg@sanger.ac.uk> | |
| 6 # | |
| 7 # You may distribute this module under the same terms as perl itself | |
| 8 | |
| 9 # POD documentation - main docs before the code | |
| 10 | |
| 11 =head1 NAME | |
| 12 | |
| 13 Bio::Species - Generic species object | |
| 14 | |
| 15 =head1 SYNOPSIS | |
| 16 | |
| 17 $species = Bio::Species->new(-classification => [@classification]); | |
| 18 # Can also pass classification | |
| 19 # array to new as below | |
| 20 | |
| 21 $species->classification(qw( sapiens Homo Hominidae | |
| 22 Catarrhini Primates Eutheria | |
| 23 Mammalia Vertebrata Chordata | |
| 24 Metazoa Eukaryota )); | |
| 25 | |
| 26 $genus = $species->genus(); | |
| 27 | |
| 28 $bi = $species->binomial(); # $bi is now "Homo sapiens" | |
| 29 | |
| 30 # For storing common name | |
| 31 $species->common_name("human"); | |
| 32 | |
| 33 # For storing subspecies | |
| 34 $species->sub_species("accountant"); | |
| 35 | |
| 36 =head1 DESCRIPTION | |
| 37 | |
| 38 Provides a very simple object for storing phylogenetic | |
| 39 information. The classification is stored in an array, | |
| 40 which is a list of nodes in a phylogenetic tree. Access to | |
| 41 getting and setting species and genus is provided, but not | |
| 42 to any of the other node types (eg: "phylum", "class", | |
| 43 "order", "family"). There's plenty of scope for making the | |
| 44 model more sophisticated, if this is ever needed. | |
| 45 | |
| 46 A methods are also provided for storing common | |
| 47 names, and subspecies. | |
| 48 | |
| 49 =head1 CONTACT | |
| 50 | |
| 51 James Gilbert email B<jgrg@sanger.ac.uk> | |
| 52 | |
| 53 =head1 APPENDIX | |
| 54 | |
| 55 The rest of the documentation details each of the object | |
| 56 methods. Internal methods are usually preceded with a _ | |
| 57 | |
| 58 =cut | |
| 59 | |
| 60 | |
| 61 #' Let the code begin... | |
| 62 | |
| 63 | |
| 64 package Bio::Species; | |
| 65 use vars qw(@ISA); | |
| 66 use strict; | |
| 67 | |
| 68 # Object preamble - inherits from Bio::Root::Object | |
| 69 | |
| 70 use Bio::Root::Root; | |
| 71 | |
| 72 | |
| 73 @ISA = qw(Bio::Root::Root); | |
| 74 | |
| 75 sub new { | |
| 76 my($class,@args) = @_; | |
| 77 | |
| 78 my $self = $class->SUPER::new(@args); | |
| 79 | |
| 80 $self->{'classification'} = []; | |
| 81 $self->{'common_name'} = undef; | |
| 82 my ($classification) = $self->_rearrange([qw(CLASSIFICATION)], @args); | |
| 83 if( defined $classification && | |
| 84 (ref($classification) eq "ARRAY") ) { | |
| 85 $self->classification(@$classification); | |
| 86 } | |
| 87 return $self; | |
| 88 } | |
| 89 | |
| 90 =head2 classification | |
| 91 | |
| 92 Title : classification | |
| 93 Usage : $self->classification(@class_array); | |
| 94 @classification = $self->classification(); | |
| 95 Function: Fills or returns the classification list in | |
| 96 the object. The array provided must be in | |
| 97 the order SPECIES, GENUS ---> KINGDOM. | |
| 98 Checks are made that species is in lower case, | |
| 99 and all other elements are in title case. | |
| 100 Example : $obj->classification(qw( sapiens Homo Hominidae | |
| 101 Catarrhini Primates Eutheria Mammalia Vertebrata | |
| 102 Chordata Metazoa Eukaryota)); | |
| 103 Returns : Classification array | |
| 104 Args : Classification array | |
| 105 OR | |
| 106 A reference to the classification array. In the latter case | |
| 107 if there is a second argument and it evaluates to true, | |
| 108 names will not be validated. | |
| 109 | |
| 110 | |
| 111 =cut | |
| 112 | |
| 113 | |
| 114 sub classification { | |
| 115 my ($self,@args) = @_; | |
| 116 | |
| 117 if (@args) { | |
| 118 | |
| 119 my ($classif,$force); | |
| 120 if(ref($args[0])) { | |
| 121 $classif = shift(@args); | |
| 122 $force = shift(@args); | |
| 123 } else { | |
| 124 $classif = \@args; | |
| 125 } | |
| 126 | |
| 127 # Check the names supplied in the classification string | |
| 128 # Species should be in lower case | |
| 129 if(! $force) { | |
| 130 $self->validate_species_name($classif->[0]); | |
| 131 # All other names must be in title case | |
| 132 foreach (@$classif) { | |
| 133 $self->validate_name( $_ ); | |
| 134 } | |
| 135 } | |
| 136 # Store classification | |
| 137 $self->{'classification'} = $classif; | |
| 138 } | |
| 139 return @{$self->{'classification'}}; | |
| 140 } | |
| 141 | |
| 142 =head2 common_name | |
| 143 | |
| 144 Title : common_name | |
| 145 Usage : $self->common_name( $common_name ); | |
| 146 $common_name = $self->common_name(); | |
| 147 Function: Get or set the common name of the species | |
| 148 Example : $self->common_name('human') | |
| 149 Returns : The common name in a string | |
| 150 Args : String, which is the common name (optional) | |
| 151 | |
| 152 =cut | |
| 153 | |
| 154 sub common_name{ | |
| 155 my $self = shift; | |
| 156 | |
| 157 return $self->{'common_name'} = shift if @_; | |
| 158 return $self->{'common_name'}; | |
| 159 } | |
| 160 | |
| 161 =head2 variant | |
| 162 | |
| 163 Title : variant | |
| 164 Usage : $obj->variant($newval) | |
| 165 Function: Get/set variant information for this species object (strain, | |
| 166 isolate, etc). | |
| 167 Example : | |
| 168 Returns : value of variant (a scalar) | |
| 169 Args : new value (a scalar or undef, optional) | |
| 170 | |
| 171 | |
| 172 =cut | |
| 173 | |
| 174 sub variant{ | |
| 175 my $self = shift; | |
| 176 | |
| 177 return $self->{'variant'} = shift if @_; | |
| 178 return $self->{'variant'}; | |
| 179 } | |
| 180 | |
| 181 =head2 organelle | |
| 182 | |
| 183 Title : organelle | |
| 184 Usage : $self->organelle( $organelle ); | |
| 185 $organelle = $self->organelle(); | |
| 186 Function: Get or set the organelle name | |
| 187 Example : $self->organelle('Chloroplast') | |
| 188 Returns : The organelle name in a string | |
| 189 Args : String, which is the organelle name | |
| 190 | |
| 191 =cut | |
| 192 | |
| 193 sub organelle { | |
| 194 my($self, $name) = @_; | |
| 195 | |
| 196 if ($name) { | |
| 197 $self->{'organelle'} = $name; | |
| 198 } else { | |
| 199 return $self->{'organelle'} | |
| 200 } | |
| 201 } | |
| 202 | |
| 203 =head2 species | |
| 204 | |
| 205 Title : species | |
| 206 Usage : $self->species( $species ); | |
| 207 $species = $self->species(); | |
| 208 Function: Get or set the scientific species name. The species | |
| 209 name must be in lower case. | |
| 210 Example : $self->species( 'sapiens' ); | |
| 211 Returns : Scientific species name as string | |
| 212 Args : Scientific species name as string | |
| 213 | |
| 214 =cut | |
| 215 | |
| 216 | |
| 217 sub species { | |
| 218 my($self, $species) = @_; | |
| 219 | |
| 220 if ($species) { | |
| 221 $self->validate_species_name( $species ); | |
| 222 $self->{'classification'}[0] = $species; | |
| 223 } | |
| 224 return $self->{'classification'}[0]; | |
| 225 } | |
| 226 | |
| 227 =head2 genus | |
| 228 | |
| 229 Title : genus | |
| 230 Usage : $self->genus( $genus ); | |
| 231 $genus = $self->genus(); | |
| 232 Function: Get or set the scientific genus name. The genus | |
| 233 must be in title case. | |
| 234 Example : $self->genus( 'Homo' ); | |
| 235 Returns : Scientific genus name as string | |
| 236 Args : Scientific genus name as string | |
| 237 | |
| 238 =cut | |
| 239 | |
| 240 | |
| 241 sub genus { | |
| 242 my($self, $genus) = @_; | |
| 243 | |
| 244 if ($genus) { | |
| 245 $self->validate_name( $genus ); | |
| 246 $self->{'classification'}[1] = $genus; | |
| 247 } | |
| 248 return $self->{'classification'}[1]; | |
| 249 } | |
| 250 | |
| 251 =head2 sub_species | |
| 252 | |
| 253 Title : sub_species | |
| 254 Usage : $obj->sub_species($newval) | |
| 255 Function: | |
| 256 Returns : value of sub_species | |
| 257 Args : newvalue (optional) | |
| 258 | |
| 259 | |
| 260 =cut | |
| 261 | |
| 262 sub sub_species { | |
| 263 my( $self, $sub ) = @_; | |
| 264 | |
| 265 if ($sub) { | |
| 266 $self->{'_sub_species'} = $sub; | |
| 267 } | |
| 268 return $self->{'_sub_species'}; | |
| 269 } | |
| 270 | |
| 271 =head2 binomial | |
| 272 | |
| 273 Title : binomial | |
| 274 Usage : $binomial = $self->binomial(); | |
| 275 $binomial = $self->binomial('FULL'); | |
| 276 Function: Returns a string "Genus species", or "Genus species subspecies", | |
| 277 the first argument is 'FULL' (and the species has a subspecies). | |
| 278 Args : Optionally the string 'FULL' to get the full name including | |
| 279 the subspecies. | |
| 280 | |
| 281 =cut | |
| 282 | |
| 283 | |
| 284 sub binomial { | |
| 285 my( $self, $full ) = @_; | |
| 286 | |
| 287 my( $species, $genus ) = $self->classification(); | |
| 288 unless( defined $species) { | |
| 289 $species = 'sp.'; | |
| 290 $self->warn("classification was not set"); | |
| 291 } | |
| 292 $genus = '' unless( defined $genus); | |
| 293 my $bi = "$genus $species"; | |
| 294 if (defined($full) && ((uc $full) eq 'FULL')) { | |
| 295 my $ssp = $self->sub_species; | |
| 296 $bi .= " $ssp" if $ssp; | |
| 297 } | |
| 298 return $bi; | |
| 299 } | |
| 300 | |
| 301 sub validate_species_name { | |
| 302 my( $self, $string ) = @_; | |
| 303 | |
| 304 return 1 if $string eq "sp."; | |
| 305 return 1 if $string =~ /^[a-z][\w\s]+$/i; | |
| 306 $self->throw("Invalid species name '$string'"); | |
| 307 } | |
| 308 | |
| 309 sub validate_name { | |
| 310 return 1; # checking is disabled as there is really not much we can | |
| 311 # enforce HL 2002/10/03 | |
| 312 # my( $self, $string ) = @_; | |
| 313 | |
| 314 # return 1 if $string =~ /^[\w\s\-\,\.]+$/ or | |
| 315 # $self->throw("Invalid name '$string'"); | |
| 316 } | |
| 317 | |
| 318 =head2 ncbi_taxid | |
| 319 | |
| 320 Title : ncbi_taxid | |
| 321 Usage : $obj->ncbi_taxid($newval) | |
| 322 Function: Get/set the NCBI Taxon ID | |
| 323 Returns : the NCBI Taxon ID as a string | |
| 324 Args : newvalue to set or undef to unset (optional) | |
| 325 | |
| 326 | |
| 327 =cut | |
| 328 | |
| 329 sub ncbi_taxid { | |
| 330 my $self = shift; | |
| 331 | |
| 332 return $self->{'_ncbi_taxid'} = shift if @_; | |
| 333 return $self->{'_ncbi_taxid'}; | |
| 334 } | |
| 335 | |
| 336 1; | |
| 337 | |
| 338 __END__ |
