[Bioperl-l] distances between leaf nodes
Arnau Montagud
beornk at gmail.com
Fri Dec 17 16:41:19 UTC 2010
Thank you so much Roy!
It works perfectly!
Arnau
2010/12/17 Roy Chaudhuri <roy.chaudhuri at gmail.com>
> 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