[Bioperl-l] Turning the tree into bifurcating one

Jason Stajich jason.stajich at duke.edu
Fri Apr 1 13:01:45 EST 2005


Sure just test if a node has more than 2 children, randomly choose 2 of 
the children and insert a new parent for them, insert a pseudo node. 
Walk from the root to the tips.  Works for me for a star phylogeny too. 
  This is somewhat untested though so it may not work in all situations 
but I hope it gets you started.

use Bio::TreeIO;
my $in =Bio::TreeIO->new(-format=> 'newick', -file => $treefile);
my $out = Bio::TreeIO->new(-format => 'newick');
while( my $tree = $in->next_tree ) {
     my @internal = grep { ! $_->is_Leaf } $tree->get_nodes;
     for my $node (  @internal ) {
	my @children = $node->each_Descendent;
	while( @children > 2 ) {
	    my $left = shift @children;
	    my $right = shift @children;
	    my $new_node =Bio::Tree::Node->new();
	    $new_node->ancestor($node);
	    $node->remove_Descendent($right);
	    $node->remove_Descendent($left);
	    $new_node->add_Descendent($left);
	    $new_node->add_Descendent($right);
	    push @children, $new_node;
	    $node->add_Descendent($new_node);
	}
     }
     $out->write_tree($tree);
}


--
Jason Stajich
jason.stajich at duke.edu
http://www.duke.edu/~jes12/

On Mar 30, 2005, at 12:02 PM, Babenko, Vladimir (NIH/NLM/NCBI) wrote:

>     Greetings,
> Is there any possible solution to insert some pseudo-nodes into the 
> tree to
> make it bufurkating?
>    Some programs can deal only with bifurkating ones...
>   Thank you,
>         Vladimir
> _______________________________________________
> Bioperl-l mailing list
> Bioperl-l at portal.open-bio.org
> http://portal.open-bio.org/mailman/listinfo/bioperl-l
>



More information about the Bioperl-l mailing list