[Bioperl-l] distances between leaf nodes

Roy Chaudhuri roy.chaudhuri at gmail.com
Fri Dec 17 16:35:57 UTC 2010


Hi Arnau,

Looks pretty simple, don't you just need to print out the ids of the 
leaf nodes? So your loop would be something like:

while (my $l = shift @nodes) {
    foreach my $m (@nodes) {
      print join("\t", $l->id, $m->id, $tree->distance( -nodes =>  [$l, 
$m] )), "\n";
    }
}

Cheers,
Roy.

On 17/12/2010 16:05, Arnau Montagud wrote:
> Hello, I am new to Bioperl and looking for a solution to this specific
> problem, I found this mailing list.
> I am trying to know distances between all the leaves of a given
> extended newick tree. Thanks to your script I can have a vector
> (@dists) with all the distances, but I would like to know from what
> pair of nodes are those distances from (!).
> Thanks!
>
> My current script is:
>
> use Bio::TreeIO;
>
> $tree = Bio::TreeIO->new(
> 	-file=>'tree',
> 	-format=>'nhx'
> 	)->next_tree;
>
> my @nodes = $tree->get_leaf_nodes;
> my @dists;
> while (my $l = shift @nodes) {
>    foreach my $m (@nodes) {
>      push @dists, $tree->distance( -nodes =>  [$l, $m] );
> 	}
> }
>
> foreach (@dists) {
>    print "$_\n";
> }
>
>
> On 12 mar, 16:45, "Mark A. Jensen"<maj at fortinbras.us>  wrote:
>> along with Jason's comment then you'll need to
>> loop through the node pairs by hand:
>>
>> my @leaves = $tree->get_leaf_nodes;
>> my @dists;
>> while (my $l = shift @leaves) {
>>    foreach my $m (@leaves) {
>>      push @dists, $tree->distance( -nodes=>  [$l, $m] );
>>    }
>>
>> }
>>
>> should give you all n(n-1)/2 pairwisedistances.
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> ----- Original Message -----
>> From: "Jeffrey Detras"<jdetras at gmail.com>
>> To:<bioperl-l at bioperl.org>
>> Sent: Friday, March 05, 2010 1:17 AM
>> Subject: [Bioperl-l]distancesbetweenleafnodes
>>
>>> Hi,
>>
>>> I am new at using the Bio::TreeIO module specifically using the newick
>>> format for a phylogenetic analysis. The sample_tree attached is
>>> Newick-formatted tree. My objective is to get all thedistancesbetweenall
>>> theleafnodes. I copied examples of the code from
>>> http://www.bioperl.org/wiki/HOWTO:Treesbut it does not tell me much (to my
>>> knowledge) so that I understand how to assign the right array value for the
>>> nodes/leaves. The message would say must provide 2 rootnodes.
>>
>>> Here is what I have right now:
>>
>>> #!/usr/bin/perl -w
>>> use strict;
>>
>>> my $treefile = 'sample_tree';
>>> use Bio::TreeIO;
>>> my $treeio = Bio::TreeIO->new(-format =>  'newick',
>>>                                  -file =>  $treefile);
>>
>>> while (my $tree = $treeio->next_tree) {
>>>          my @leaves = $tree->get_leaf_nodes;
>>>          for (my $dist = $tree->distance(-nodes=>  \@leaves)){
>>>                  print "Distancebetweentrees is $dist\n";
>>>          }
>>> }
>>
>>> Thanks,
>>> Jeff
>>
>> --------------------------------------------------------------------------- -----
>>
>>> _______________________________________________
>>> Bioperl-l mailing list
>>> Bioperl-l at lists.open-bio.org
>>> http://lists.open-bio.org/mailman/listinfo/bioperl-l
>>
>> _______________________________________________
>> Bioperl-l mailing list
>> Bioperl-l at lists.open-bio.orghttp://lists.open-bio.org/mailman/listinfo/bioperl-l
>
> _______________________________________________
> Bioperl-l mailing list
> Bioperl-l at lists.open-bio.org
> http://lists.open-bio.org/mailman/listinfo/bioperl-l




More information about the Bioperl-l mailing list