Summary | Included libraries | Package variables | Synopsis | Description | General documentation | Methods |
WebCvs | Raw content |
use Bio::Taxonomy;
classify | Description | Code |
level_of | No description | Code |
method | Description | Code |
new | Description | Code |
rank_of_number | Description | Code |
ranks | Description | Code |
classify | code | next | Top |
Title : classify |
method | code | prev | next | Top |
Title : method |
new | code | prev | next | Top |
Title : new |
rank_of_number | code | prev | next | Top |
Title : rank_of_number |
ranks | code | prev | next | Top |
Title : ranks |
classify | description | prev | next | Top |
my ($self,$value) = @_; my @ranks; if (! $value->isa('Bio::Species') ) { $self->throw("Trying to classify $value which is not a Bio::Species object"); } my @classes=reverse($value->classification); if ($self->method eq 'none') { for (my $i=0; $i < @classes-2; $i++) { ($ranks[$i][0],$ranks[$i][1])=($classes[$i],'no rank'); } push @ranks,[$classes[-2],'genus']; push @ranks,[$value->binomial,'species']; } elsif ($self->method eq 'trust') { if (scalar(@classes)==scalar($self->ranks)) { for (my $i=0; $i < @classes; $i++) { if ($self->rank_of_number($i) eq 'species') { push @ranks,[$value->binomial,$self->rank_of_number($i)]; } else { push @ranks,[$classes[$i],$self->rank_of_number($i)]; } } } else { $self->throw("Species object and taxonomy object cannot be reconciled"); } } elsif ($self->method eq 'lookup') { # this will lookup a DB for the rank of a taxon name}
# I imagine that some kind of Bio::DB class will be need to
# be given to the taxonomy object to act as an DB interface
# (I'm not sure how useful this is though - if you have a DB of
# taxonomy - why would you be doing things this way?)
$self->throw("Not yet implemented"); } return @ranks;
level_of | description | prev | next | Top |
my ($self,$value) = @_; return $self->{'_rank_hash'}{$value};}
method | description | prev | next | Top |
my ($self,$value) = @_; if (defined $value && $value=~/none|trust|lookup/) { $self->{'_method'} = $value; } return $self->{'_method'};}
new | description | prev | next | Top |
my ($class,@args) = @_; my $self = $class->SUPER::new(@args); $self->{'_method'}='none'; $self->{'_ranks'}=[]; $self->{'_rank_hash'}={}; my ($method,$ranks,$order) = $self->_rearrange([qw(METHOD RANKS ORDER)], @args); if ($method) { $self->method($method); } if (defined $ranks && (ref($ranks) eq "ARRAY") ) { $self->ranks(@$ranks); } else { # default ranks}
# I think these are in the right order, but not sure:
# some parvorder|suborder and varietas|subspecies seem
# to be at the same level - any taxonomists?
# I don't expect that these will actually be used except as a way
# to find what ranks there are in taxonomic use
$self->ranks(('root', 'superkingdom', 'kingdom', 'superphylum', 'phylum', 'subphylum', 'superclass', 'class', 'subclass', 'infraclass', 'superorder', 'order', 'suborder', 'parvorder', 'infraorder', 'superfamily', 'family', 'subfamily', 'tribe', 'subtribe', 'genus', 'subgenus', 'species group', 'species subgroup', 'species', 'subspecies', 'varietas', 'forma', 'no rank')); } return $self;
rank_of_number | description | prev | next | Top |
my ($self,$value) = @_; return ${$self->{'_ranks'}}[$value];}
ranks | description | prev | next | Top |
my ($self,@value) = @_; # currently this makes no uniqueness sanity check (this should be done)}
# I am think that adding a way of converting multiple 'no rank' ranks
# to unique 'no rank #' ranks so that the level of a 'no rank' is
# abstracted way from the user - I'm not sure of the vlaue of this
if (defined @value) { $self->{'_ranks'}=\@value; } for (my $i=0; $i <= @{$self->{'_ranks'}}-1; $i++) { $self->{'_rank_hash'}{$self->{'_ranks'}[$i]}=$i unless $self->{'_ranks'}[$i] eq 'no rank'; } return @{$self->{'_ranks'}}; } 1;
CONTACT | Top |
APPENDIX | Top |
level_of_rank | Top |
Title : level_of_rank
Usage : $obj = taxonomy->level_of_rank($obj);
Function: returns the level of a rank name
Returns : $obj
Args : $obj