Mercurial > repos > mahtabm > ensembl
diff variant_effect_predictor/Bio/EnsEMBL/OntologyTerm.pm @ 0:1f6dce3d34e0
Uploaded
author | mahtabm |
---|---|
date | Thu, 11 Apr 2013 02:01:53 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/variant_effect_predictor/Bio/EnsEMBL/OntologyTerm.pm Thu Apr 11 02:01:53 2013 -0400 @@ -0,0 +1,347 @@ +=head1 LICENSE + + Copyright (c) 1999-2012 The European Bioinformatics Institute and + Genome Research Limited. All rights reserved. + + This software is distributed under a modified Apache license. + For license details, please see + + http://www.ensembl.org/info/about/code_licence.html + +=head1 CONTACT + + Please email comments or questions to the public Ensembl + developers list at <dev@ensembl.org>. + + Questions may also be sent to the Ensembl help desk at + <helpdesk@ensembl.org>. + +=cut + +=head1 NAME + +Bio::EnsEMBL::OntologyTerm + +=head1 DESCRIPTION + +An ontology term object, (most often) created by +Bio::EnsEMBL::DBSQL::GOTermAdaptor and used in querying for +transcripts, genes, and translations using the relevant adaptors and +methods. + +=head1 METHODS + +=cut + +package Bio::EnsEMBL::OntologyTerm; + +use strict; +use warnings; + +use Bio::EnsEMBL::Utils::Argument qw( rearrange ); + +use base qw( Bio::EnsEMBL::Storable ); + +=head2 new + + Arg [-ACCESSION] : String + The accession of the ontology term. + + Arg [-ONTOLOGY] : String + The ontology that the term belongs to. + + Arg [-NAMESPACE] : String + The namespace of the ontology term. + + Arg [-NAME] : String + The name of the ontology term. + + Arg [-SUBSETS] : (optional) Listref of strings + The subsets within the ontology to which this + term belongs. + + Arg [-DEFINITION] : (optional) String + The definition of the ontology term. + + Arg [-SYNONYMS] : (optional) Listref of strings + The synonyms of this term. + + Arg : Further arguments required for parent class + Bio::EnsEMBL::Storable. + + Description : Creates an ontology term object. + + Example : + + my $term = Bio::EnsEMBL::OntologyTerm->new( + '-accession' => 'GO:0021785', + '-ontology' => 'GO', + '-namespace' => 'biological_process', + '-name' => 'branchiomotor neuron axon guidance', + '-definition' => 'The process in which a branchiomotor ' + . 'neuron growth cone is directed to a specific target site. ' + . 'Branchiomotor neurons are located in the hindbrain and ' + . 'innervate branchial arch-derived muscles that control jaw ' + . 'movements, facial expression, the larynx, and the pharynx.', + '-synonyms' => [ 'BMN axon guidance', + 'branchial motor axon guidance', + 'special visceral motor neuron axon guidance' ] + + # ... other arguments required by Bio::EnsEMBL::Storable. + ); + + Return type : Bio::EnsEMBL::OntologyTerm + +=cut + +sub new { + my $proto = shift(@_); + + my $this = $proto->SUPER::new(@_); + + my ( $accession, $ontology, $namespace, $name, $definition, $subsets ) + = rearrange( [ 'ACCESSION', 'ONTOLOGY', 'NAMESPACE', 'NAME', + 'DEFINITION', 'SUBSETS' ], + @_ ); + + $this->{'accession'} = $accession; + $this->{'ontology'} = $ontology; + $this->{'namespace'} = $namespace; + $this->{'name'} = $name; + $this->{'definition'} = $definition; + $this->{'subsets'} = [ @{$subsets} ]; + + $this->{'child_terms_fetched'} = 0; + $this->{'parent_terms_fetched'} = 0; + + return $this; +} + +=head2 accession + + Arg : None + + Description : Returns the accession for the ontology term in question. + + Example : my $accession = $term->accession(); + + Return type : String + +=cut + +sub accession { + my ($this) = @_; + return $this->{'accession'}; +} + +=head2 ontology + + Arg : None + + Description : Returns the ontology for the ontology term in question. + + Example : my $ontology = $term->ontology(); + + Return type : String + +=cut + +sub ontology { + my ($this) = @_; + return $this->{'ontology'}; +} + +=head2 namespace + + Arg : None + + Description : Returns the namespace for the ontology term in question. + + Example : my $acc = $term->namespace(); + + Return type : String + +=cut + +sub namespace { + my ($this) = @_; + return $this->{'namespace'}; +} + +=head2 name + + Arg : None + + Description : Returns the name for the ontology term in question. + + Example : my $name = $term->name(); + + Return type : String + +=cut + +sub name { + my ($this) = @_; + return $this->{'name'}; +} + +=head2 definition + + Arg : None + + Description : Returns the definition for the ontology term in question. + + Example : my $definition = $term->definition(); + + Return type : String + +=cut + +sub definition { + my ($this) = @_; + return $this->{'definition'}; +} + +=head2 synonyms + + Arg : None + + Description : Returns the list of synonyms defined for this term + (if any). + + Example : my @synonyms = @{ $term->synonyms() }; + + Return type : Listref of strings + +=cut + +sub synonyms { + my ($this) = @_; + + if ( !exists( $this->{'synonyms'} ) ) { + $this->{'synonyms'} = + $this->adaptor()->_fetch_synonyms_by_dbID( $this->dbID() ); + } + + return $this->{'synonyms'}; +} + +=head2 subsets + + Arg : None + + Description : Returns a list of subsets that this term is part + of. The list might be empty. + + Example : my @subsets = @{ $term->subsets() }; + + Return type : listref of strings + +=cut + +sub subsets { + my ($this) = @_; + return $this->{'subsets'}; +} + +=head2 children + + Arg : (optional) List of strings + The type of relations to retrieve children for. + + Description : Returns the children terms of this ontology term. + + Example : my @children = + @{ $term->children( 'is_a', 'part_of' ) }; + + Return type : listref of Bio::EnsEMBL::OntologyTerm + +=cut + +sub children { + my ( $this, @relations ) = @_; + + my @terms = @{ $this->adaptor()->fetch_all_by_parent_term($this) }; + + if (@relations) { + @terms = (); + foreach my $relation (@relations) { + if ( exists( $this->{'children'}{$relation} ) ) { + push( @terms, @{ $this->{'children'}{$relation} } ); + } + } + } + + return \@terms; +} + +=head2 descendants + + Arg : None + + Description : Returns the complete set of 'is_a' and 'part_of' + descendant terms of this ontology term, down to + and including any leaf terms. + + Example : my @descendants = @{ $term->descendants() }; + + Return type : listref of Bio::EnsEMBL::OntologyTerm + +=cut + +sub descendants { + my ($this) = @_; + return $this->adaptor()->fetch_all_by_ancestor_term($this); +} + +=head2 parents + + Arg : (optional) List of strings + The type of relations to retrieve parents for. + + Description : Returns the parent terms of this ontology term. + + Example : my @parents = + @{ $term->parents( 'is_a', 'part_of' ) }; + + Return type : listref of Bio::EnsEMBL::OntologyTerm + +=cut + +sub parents { + my ( $this, @relations ) = @_; + + my @terms = @{ $this->adaptor()->fetch_all_by_child_term($this) }; + + if (@relations) { + @terms = (); + foreach my $relation (@relations) { + if ( exists( $this->{'parents'}{$relation} ) ) { + push( @terms, @{ $this->{'parents'}{$relation} } ); + } + } + } + + return \@terms; +} + +=head2 ancestors + + Arg : None + + Description : Returns the complete set of 'is_a' and 'part_of' + ancestor terms of this ontology term, up to and + including the root term. + + Example : my @ancestors = @{ $term->ancestors() }; + + Return type : listref of Bio::EnsEMBL::OntologyTerm + +=cut + +sub ancestors { + my ($this) = @_; + return $this->adaptor()->fetch_all_by_descendant_term($this); +} + +1;