[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