The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Bio::Phylo::Forest::Node - The tree node object.

SYNOPSIS

 # some way to get nodes:
 use Bio::Phylo::IO;
 my $string = '((A,B),C);';
 my $forest = Bio::Phylo::IO->parse(
    -format => 'newick',
    -string => $string
 );
 print ref $forest; # prints 'Bio::Phylo::Forest'
 
 foreach my $tree ( @{ $forest->get_entities } ) {
    print ref $tree; # prints 'Bio::Phylo::Forest::Tree'
    
    foreach my $node ( @{ $tree->get_entities } ) {
       print ref $node; # prints 'Bio::Phylo::Forest::Node'
       
       # node has a parent, i.e. is not root
       if ( $node->get_parent ) {
          $node->set_branch_length(1);
       }
       
       # node is root
       else {
          $node->set_branch_length(0);
       }
    }
 }
 
 

DESCRIPTION

This module defines a node object and its methods. The node is fairly syntactically rich in terms of navigation, and additional getters are provided to further ease navigation from node to node. Typical first daughter -> next sister traversal and recursion is possible, but there are also shrinkwrapped methods that return for example all terminal descendants of the focal node, or all internals, etc. Node objects are inserted into tree objects, although technically the tree object is only a container holding all the nodes together. Unless there are orphans all nodes can be reached without recourse to the tree object.

METHODS

CONSTRUCTOR

new()
 Type    : Constructor
 Title   : new
 Usage   : my $node = Bio::Phylo::Forest::Node->new;
 Function: Instantiates a Bio::Phylo::Forest::Node object
 Returns : Bio::Phylo::Forest::Node
 Args    : All optional:
           -parent          => $parent (Bio::Phylo::Forest::Node object)
           -taxon           => $taxon (Bio::Phylo::Taxa::Taxon object)
           -branch_length   => 0.423e+2 (a valid perl number format)
           -first_daughter  => $f_daughter (Bio::Phylo::Forest::Node object)
           -last_daughter   => $l_daughter (Bio::Phylo::Forest::Node object)
           -next_sister     => $n_sister (Bio::Phylo::Forest::Node object)
           -previous_sister => $p_sister (Bio::Phylo::Forest::Node object)
           -name            => 'node_name' (a string)
           -desc            => 'this is a node' (a string)
           -score           => 0.98 (a valid perl number format)
           -generic         => {
                -posterior => 0.98,
                -bootstrap => 0.80
           } (a hash reference)

MUTATORS

set_taxon()
 Type    : Mutator
 Title   : set_taxon
 Usage   : $node->set_taxon($taxon);
 Function: Assigns taxon crossreferenced with node.
 Returns : Modified object.
 Args    : If no argument is given, the currently assigned taxon is set to
           undefined. A valid argument is a Bio::Phylo::Taxa::Taxon object.
set_branch_length()
 Type    : Mutator
 Title   : branch_length
 Usage   : $node->set_branch_length(0.423e+2);
 Function: Assigns or retrieves a node's branch length.
 Returns : Modified object.
 Args    : If no argument is given, the current branch length is set to
           undefined. A valid argument is a number in any of Perl's formats.
set_parent()
 Type    : Mutator
 Title   : parent
 Usage   : $node->set_parent($parent);
 Function: Assigns a node's parent.
 Returns : Modified object.
 Args    : If no argument is given, the current parent is set to undefined. A
           valid argument is Bio::Phylo::Forest::Node object.
set_first_daughter()
 Type    : Mutator
 Title   : set_first_daughter
 Usage   : $node->set_first_daughter($f_daughter);
 Function: Assigns a node's leftmost daughter.
 Returns : Modified object.
 Args    : Undefines the first daughter if no argument given. A valid argument
           is a Bio::Phylo::Forest::Node object.
set_last_daughter()
 Type    : Mutator
 Title   : set_last_daughter
 Usage   : $node->set_last_daughter($l_daughter);
 Function: Assigns a node's rightmost daughter.
 Returns : Modified object.
 Args    : A valid argument consists of a Bio::Phylo::Forest::Node object. If
           no argument is given, the value is set to undefined.
set_next_sister()
 Type    : Mutator
 Title   : set_next_sister
 Usage   : $node->set_next_sister($n_sister);
 Function: Assigns or retrieves a node's next sister (to the right).
 Returns : Modified object.
 Args    : A valid argument consists of a Bio::Phylo::Forest::Node object. If
           no argument is given, the value is set to undefined.
set_previous_sister()
 Type    : Mutator
 Title   : set_previous_sister
 Usage   : $node->set_previous_sister($p_sister);
 Function: Assigns a node's previous sister (to the left).
 Returns : Modified object.
 Args    : A valid argument consists of a Bio::Phylo::Forest::Node object. If
           no argument is given, the value is set to undefined.

ACCESSORS

get_name()
 Type    : Accessor
 Title   : get_name
 Usage   : my $name = $node->get_name;
 Function: Retrieves a node's name.
 Returns : SCALAR
 Args    : NONE
get_taxon()
 Type    : Accessor
 Title   : get_taxon
 Usage   : my $taxon = $node->get_taxon;
 Function: Retrieves taxon crossreferenced with node.
 Returns : Bio::Phylo::Taxa::Taxon
 Args    : NONE
get_branch_length()
 Type    : Accessor
 Title   : get_branch_length
 Usage   : my $branch_length = $node->get_branch_length;
 Function: Retrieves a node's branch length.
 Returns : FLOAT
 Args    : NONE
 Comments: Test for "defined($node->get_branch_length)" for zero-length (but
           defined) branches. Testing "if ( $node->get_branch_length ) { ... }"
           yields false for zero-but-defined branches!
get_parent()
 Type    : Accessor
 Title   : get_parent
 Usage   : my $parent = $node->get_parent;
 Function: Retrieves a node's parent.
 Returns : Bio::Phylo::Forest::Node
 Args    : NONE
get_first_daughter()
 Type    : Accessor
 Title   : get_first_daughter
 Usage   : my $f_daughter = $node->get_first_daughter;
 Function: Retrieves a node's leftmost daughter.
 Returns : Bio::Phylo::Forest::Node
 Args    : NONE
get_last_daughter()
 Type    : Accessor
 Title   : get_last_daughter
 Usage   : my $l_daughter = $node->get_last_daughter;
 Function: Retrieves a node's rightmost daughter.
 Returns : Bio::Phylo::Forest::Node
 Args    : NONE
get_next_sister()
 Type    : Accessor
 Title   : get_next_sister
 Usage   : my $n_sister = $node->get_next_sister;
 Function: Retrieves a node's next sister (to the right).
 Returns : Bio::Phylo::Forest::Node
 Args    : NONE
get_previous_sister()
 Type    : Accessor
 Title   : get_previous_sister
 Usage   : my $p_sister = $node->get_previous_sister;
 Function: Retrieves a node's previous sister (to the left).
 Returns : Bio::Phylo::Forest::Node
 Args    : NONE
get_ancestors()
 Type    : Query
 Title   : get_ancestors
 Usage   : my @ancestors = @{ $node->get_ancestors };
 Function: Returns an array reference of ancestral nodes,
           ordered from young to old.
 Returns : Array reference of Bio::Phylo::Forest::Node objects.
 Args    : NONE
get_sisters()
 Type    : Query
 Title   : get_sisters
 Usage   : my @sisters = @{ $node->get_sisters };
 Function: Returns an array reference of sisters, ordered from left to right.
 Returns : Array reference of Bio::Phylo::Forest::Node objects.
 Args    : NONE
get_children()
 Type    : Query
 Title   : get_children
 Usage   : my @children = @{ $node->get_children };
 Function: Returns an array reference of immediate descendants,
           ordered from left to right.
 Returns : Array reference of Bio::Phylo::Forest::Node objects.
 Args    : NONE
get_descendants()
 Type    : Query
 Title   : get_descendants
 Usage   : my @descendants = @{ $node->get_descendants };
 Function: Returns an array reference of descendants,
           recursively ordered breadth first.
 Returns : Array reference of Bio::Phylo::Forest::Node objects.
 Args    : none.
get_terminals()
 Type    : Query
 Title   : get_terminals
 Usage   : my @terminals = @{ $node->get_terminals };
 Function: Returns an array reference of terminal descendants.
 Returns : Array reference of Bio::Phylo::Forest::Node objects.
 Args    : NONE
get_internals()
 Type    : Query
 Title   : get_internals
 Usage   : my @internals = @{ $node->get_internals };
 Function: Returns an array reference of internal descendants.
 Returns : Array reference of Bio::Phylo::Forest::Node objects.
 Args    : NONE
get_mrca()
 Type    : Query
 Title   : get_mrca
 Usage   : my $mrca = $node->get_mrca($other_node);
 Function: Returns the most recent common ancestor
           of $node and $other_node.
 Returns : Bio::Phylo::Forest::Node
 Args    : A Bio::Phylo::Forest::Node object in the same tree.
get_leftmost_terminal()
 Type    : Query
 Title   : get_leftmost_terminal
 Usage   : my $leftmost_terminal = $node->get_leftmost_terminal;
 Function: Returns the leftmost terminal descendant of $node.
 Returns : Bio::Phylo::Forest::Node
 Args    : NONE
get_rightmost_terminal()
 Type    : Query
 Title   : get_rightmost_terminal
 Usage   : my $rightmost_terminal = $node->get_rightmost_terminal;
 Function: Returns the rightmost terminal descendant of $node.
 Returns : Bio::Phylo::Forest::Node
 Args    : NONE
get_generic()
 Type    : Accessor
 Title   : get_generic
 Usage   : my $generic_value = $node->get_generic($key);
           # or
           my %generic_hash  = %{ $node->get_generic };
           # such that
           $generic_hash{$key} == $generic_value;
 Function: Retrieves value of a generic key/value pair attached to $node, given
           $key. If no $key is given, a reference to the entire hash is
           returned.
 Returns : A SCALAR string, or a HASH ref
 Args    : Key/value pairs are stored in a hashref. If
           $node->set_generic(posterior => 0.3543) has been set, the value
           can be retrieved using $node->get_generic('posterior'); if multiple
           key/value pairs were set, e.g. $node->set_generic( x => 12, y => 80)
           and $node->get_generic is called without arguments, a hash reference
           { x => 12, y => 80 } is returned.

TESTS

is_terminal()
 Type    : Test
 Title   : is_terminal
 Usage   : if ( $node->is_terminal ) {
              # do something
           }
 Function: Returns true if node has no children (i.e. is terminal).
 Returns : BOOLEAN
 Args    : NONE
is_internal()
 Type    : Test
 Title   : is_internal
 Usage   : if ( $node->is_internal ) {
              # do something
           }
 Function: Returns true if node has children (i.e. is internal).
 Returns : BOOLEAN
 Args    : NONE
is_descendant_of()
 Type    : Test
 Title   : is_descendant_of
 Usage   : if ( $node->is_descendant_of($grandparent) ) {
              # do something
           }
 Function: Returns true if the node is a descendant of the argument.
 Returns : BOOLEAN
 Args    : putative ancestor - a Bio::Phylo::Forest::Node object.
is_ancestor_of()
 Type    : Test
 Title   : is_ancestor_of
 Usage   : if ( $node->is_ancestor_of($grandchild) ) {
              # do something
           }
 Function: Returns true if the node is an ancestor of the argument.
 Returns : BOOLEAN
 Args    : putative descendant - a Bio::Phylo::Forest::Node object.
is_sister_of()
 Type    : Test
 Title   : is_sister_of
 Usage   : if ( $node->is_sister_of($sister) ) {
              # do something
           }
 Function: Returns true if the node is a sister of the argument.
 Returns : BOOLEAN
 Args    : putative sister - a Bio::Phylo::Forest::Node object.
is_outgroup_of()
 Type    : Test
 Title   : is_outgroup_of
 Usage   : if ( $node->is_outgroup_of(\@ingroup) ) {
              # do something
           }
 Function: Tests whether the set of \@ingroup is monophyletic
           with respect to the $node.
 Returns : BOOLEAN
 Args    : A reference to an array of Bio::Phylo::Forest::Node objects;
 Comments: This method is essentially the same as
           &Bio::Phylo::Forest::Tree::is_monophyletic.

CALCULATIONS

calc_path_to_root()
 Type    : Calculation
 Title   : calc_path_to_root
 Usage   : my $path_to_root = $node->calc_path_to_root;
 Function: Returns the sum of branch lengths from $node to the root.
 Returns : FLOAT
 Args    : NONE
calc_nodes_to_root()
 Type    : Calculation
 Title   : calc_nodes_to_root
 Usage   : my $nodes_to_root = $node->calc_nodes_to_root;
 Function: Returns the number of nodes from $node to the root.
 Returns : INT
 Args    : NONE
calc_max_nodes_to_tips()
 Type    : Calculation
 Title   : calc_max_nodes_to_tips
 Usage   : my $max_nodes_to_tips = $node->calc_max_nodes_to_tips;
 Function: Returns the maximum number of nodes from $node to tips.
 Returns : INT
 Args    : NONE
calc_min_nodes_to_tips()
 Type    : Calculation
 Title   : calc_min_nodes_to_tips
 Usage   : my $min_nodes_to_tips = $node->calc_min_nodes_to_tips;
 Function: Returns the minimum number of nodes from $node to tips.
 Returns : INT
 Args    : NONE
calc_max_path_to_tips()
 Type    : Calculation
 Title   : calc_max_path_to_tips
 Usage   : my $max_path_to_tips = $node->calc_max_path_to_tips;
 Function: Returns the path length from $node to the tallest tip.
 Returns : FLOAT
 Args    : NONE
calc_min_path_to_tips()
 Type    : Calculation
 Title   : calc_min_path_to_tips
 Usage   : my $min_path_to_tips = $node->calc_min_path_to_tips;
 Function: Returns the path length from $node to the shortest tip.
 Returns : FLOAT
 Args    : NONE
calc_patristic_distance()
 Type    : Calculation
 Title   : calc_patristic_distance
 Usage   : my $patristic_distance = $node->calc_patristic_distance($other_node);
 Function: Returns the patristic distance
           between $node and $other_node.
 Returns : FLOAT
 Args    : Bio::Phylo::Forest::Node

SEE ALSO

Bio::Phylo

This object inherits from Bio::Phylo, so the methods defined therein are also applicable to Bio::Phylo::Node objects.

Bio::Phylo::Manual

Also see the manual: Bio::Phylo::Manual.

FORUM

CPAN hosts a discussion forum for Bio::Phylo. If you have trouble using this module the discussion forum is a good place to start posting questions (NOT bug reports, see below): http://www.cpanforum.com/dist/Bio-Phylo

BUGS

Please report any bugs or feature requests to bug-bio-phylo@rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Bio-Phylo. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes. Be sure to include the following in your request or comment, so that I know what version you're using:

$Id: Node.pm,v 1.10 2005/09/29 20:31:17 rvosa Exp $

AUTHOR

Rutger A. Vos,

email: rvosa@sfu.ca
web page: http://www.sfu.ca/~rvosa/

ACKNOWLEDGEMENTS

The author would like to thank Jason Stajich for many ideas borrowed from BioPerl http://www.bioperl.org, and CIPRES http://www.phylo.org and FAB* http://www.sfu.ca/~fabstar for comments and requests.

COPYRIGHT & LICENSE

Copyright 2005 Rutger A. Vos, All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.