NAME
GO::Node
DESCRIPTION
The GO::Node package is intended to be used as a container for information about a node in one of the three Gene Ontologies. It allows the storage of the goid, and immediate parents and children, as well as paths to the top of the ontology. This package provides methods to both store and retrieve that information. It should be borne in mind that this was written with the intention of being used to replace lots of code that existed in the GO::OntologyProvider::OntologyParser package, and so probably has certain inherent biases (the API being designed with certain needs in mind). Any suggestions to make the interface to this class a better abstraction are of course welcome...
It should be strongly noted that clients are not expected to create individual Node objects themselves, but instead should rely in a Node Factory to create nodes and return them. Such a factory would be the GO::OntologyProvider::OntologyParser package.
TODO
The following items needs to be done at some point to make the Node class more flexible, and for it to better model the data.
Add in methods to deal with secondary GOIDs
Add in methods to allow definitions to be associated with, and
retrieved from Nodes.
Add in methods to allow dbxrefs to be included.
Not require Factories to add the paths to the root, but instead
have this class generate those paths from the inherent structure
of the graph in which the Nodes sit. This will also be useful to
generate paths to leaves/descendants.
Protected Methods
_handleMissingArgument
This protected method simply provides a simple way for concrete subclasses to deal with missing arguments from method calls. It will die with an appropriate error message.
Usage:
$self->_handleMissingArgument(argument=>'blah');
Instance Constructor
new
This is the constructor for the Node object At a minumum, the constructor expects, as named arguments, a GOID and a GO term, with which to create the node object.
Usage:
my $node = GO::Node->new(goid => $goid,
term => $term);
Instance Methods
addChildNodes
The public setter method allows a client to indicate that an array of nodes are children of the 'self' node. Only one node per child goid will get stored.
Usage:
$node->addChildNodes(@childNodes);
addParentNodes
The public setter method allows a client to indicate that an array of nodes are parents of the 'self' node. Only one node per parent goid will get stored.
Usage:
$node->addParentNodes(@parentNodes);
addPathToRoot
This public setter method expects an array of nodes, that indicates a direct path to the root of the ontology. The array should not contain the self node, but should contain the root node. The last entry in the array is expected to be an immediate parent of the self node, while the first entry is expected to be the root node itself. This method will NOT check to see if the supplied path has not already been added. It is the Node Factorys responsibility to only add a unique path once. Furthermore, it will not check whether there is consistency between addedPaths and addedParents (this can be done using the isValid method though).
Usage:
$node->addPathToRoot(@nodes);
goid
This public method returns the goid associated with the node.
Usage:
my $goid = $node->goid;
term
This public method returns the term associated with the node.
Usage:
my $goid = $node->term;
childNodes
This public method returns an array of child nodes for the self node.
Usage:
my @childNodes = $node->childNodes;
parentNodes
This public method returns an array of parent nodes for the self node.
Usage:
my @parentNodes = $node->parentNodes;
pathsToRoot
This public method returns an array of references to arrays, each of which contains the nodes in a path between the self node and the root. The self node is not included in the paths, but the root node is. The first node in each array is the most distant ancestor (the root), the last node is an immediate parent. If there are no paths to the root (ie it is the root node) then an empty array will be returned.
Usage:
my @pathsToRoot = $node->pathsToRoot;
pathsToAncestor
This public method returns an array of references to arrays, each of which contains the nodes in a path between the self node and the specified ancestor. The self node is not included paths, but the specified ancestor node is. The first node in each array is the specified ancestor, the last node is an immediate parent. If there are no paths to the ancestor then an empty array will be returned.
Usage:
my @pathsToAncestor = $node->pathsToAncestor($ancestorNode);
ancestors
This public method returns an array of unique GO::Nodes which are the unique ancestors that a node has. These ancestors will be derived from the paths to the root node that have been added to the node.
Usage:
my @ancestors = $node->ancestors;
lengthOfLongestPathToRoot
This public method returns the length of the longest path to the root of the ontology from the node. If the node is in fact the root, then a value of zero will be returned.
Usage:
my $length = $node->lengthOfLongestPathToRoot;
lengthOfShortestPathToRoot
This public method returns the length of the shortest path to the root of the ontology from the node. If the node is in fact the root, then a value of zero will be returned.
Usage:
my $length = $node->lengthOfShortestPathToRoot;
meanLengthOfPathsToRoot
This public method returns the mean length of all paths to the root node. If the node is in fact the root, then a value of zero will be returned.
Usage:
my $length = $node->meanLengthOfPathsToRoot;
isValid
This method can be used to check that a node has been constructed correctly. It checks that it is a child of all its parents, and a parent of all of its children. In addition, it checks that parents exist as the most recent ancestors of the node in its paths to the root node, and vice versa. It returns a boolean.
Usage:
if ($node->isValid){
# do something
}
isAParentOf
This public method returns a boolean to indicate whether a node has the supplied node as a child.
Usage :
if ($node->isAParentOf($anotherNode)){
# blah
}
isAChildOf
This public method returns a boolean to indicate whether a node has the supplied node as a parent.
Usage :
if ($node->isAChildOf($anotherNode)){
# blah
}
isAnAncestorOf
This method returns a boolean to indicate whether a node is an ancestor of another.
Usage:
if ($node->isAnAncestorOf($anotherNode)){
# blah
}
isADescendantOf
This method returns a boolean to indicate whether a node is a descendant of another.
Usage:
if ($node->isADescendantOf($anotherNode)){
# blah
}
isLeaf
This method returns a boolean to indicate whether a node is a leaf in the ontology (ie it has no children).
Usage:
if ($node->isLeaf){
# blah
}
isRoot
This method returns a boolean to indicate whether a node is the root in the ontology (ie it has no parents).
Usage:
if ($node->isRoot){
# blah
}
Authors
Gavin Sherlock; sherlock@genome.stanford.edu