[Biopython-dev] Rerooting a tree with Bio.Phylo

Peter biopython at maubp.freeserve.co.uk
Wed Mar 24 11:16:51 EDT 2010


On Mon, Mar 22, 2010 at 9:48 PM, Peter <biopython at maubp.freeserve.co.uk> wrote:
>> In Bio.Nexus, would you normally have handled this with the method
>> root_with_outgroup? I intend to port that method to Bio.Phylo once I
>> understand it, but the existing code has been kind of hard for me to figure
>> out.
>
> I've just got a quick answer for you now tonight: I've not used Bio.Nexus
> to try and do this - I'll try to get back to you in more depth tomorrow.

Here is an example using Bio.Nexus.Trees to reroot with an outgroup.

#I have encoded the tree here as a string:
tree_string = """((gi|6273291|gb|AF191665.1|AF191:0.00418,
(gi|6273290|gb|AF191664.1|AF191:0.00189,
gi|6273289|gb|AF191663.1|AF191:0.00145)
:0.00083):0.00770,
(gi|6273287|gb|AF191661.1|AF191:0.00489,
gi|6273286|gb|AF191660.1|AF191:0.00295)
:0.00014, (gi|6273285|gb|AF191659.1|AF191:0.00094,
gi|6273284|gb|AF191658.1|AF191:0.00018)
:0.00125);"""
from Bio.Nexus import Tree
tree = Trees.Tree(tree_string)
print "Old"
print tree
print tree.display()
print
print "New"
#This acts in situ:
tree.root_with_outgroup(["gi|6273289|gb|AF191663.1|AF191"])
print tree
print tree.display()


Old
tree a_tree = ((gi|6273291|gb|AF191665.1|AF191,(gi|6273290|gb|AF191664.1|AF191,gi|6273289|gb|AF191663.1|AF191)),(gi|6273287|gb|AF191661.1|AF191,gi|6273286|gb|AF191660.1|AF191),(gi|6273285|gb|AF191659.1|AF191,gi|6273284|gb|AF191658.1|AF191));
  #                            taxon            prev            succ
 brlen blen (sum)  support              comment
  0                                -            None       [1, 6, 9]
   0.0        0.0        -                    -
  1                                -               0          [2, 3]
0.0077     0.0077        -                    -
  2   gi|6273291|gb|AF191665.1|AF191               1              []
0.00418    0.01188        -                    -
  3                                -               1          [4, 5]
0.00083    0.00853        -                    -
  4   gi|6273290|gb|AF191664.1|AF191               3              []
0.00189    0.01042        -                    -
  5   gi|6273289|gb|AF191663.1|AF191               3              []
0.00145    0.00998        -                    -
  6                                -               0          [7, 8]
0.00014    0.00014        -                    -
  7   gi|6273287|gb|AF191661.1|AF191               6              []
0.00489    0.00503        -                    -
  8   gi|6273286|gb|AF191660.1|AF191               6              []
0.00295    0.00309        -                    -
  9                                -               0        [10, 11]
0.00125    0.00125        -                    -
 10   gi|6273285|gb|AF191659.1|AF191               9              []
0.00094    0.00219        -                    -
 11   gi|6273284|gb|AF191658.1|AF191               9              []
0.00018    0.00143        -                    -

Root:  0
None

New
tree a_tree = (((((gi|6273287|gb|AF191661.1|AF191,gi|6273286|gb|AF191660.1|AF191),(gi|6273285|gb|AF191659.1|AF191,gi|6273284|gb|AF191658.1|AF191)),gi|6273291|gb|AF191665.1|AF191),gi|6273290|gb|AF191664.1|AF191),gi|6273289|gb|AF191663.1|AF191);
  #                            taxon            prev            succ
 brlen blen (sum)  support              comment
  0                                -               1          [6, 9]
0.0077    0.00998        -                    -
  1                                -               3          [0, 2]
0.00083    0.00228        -                    -
  2   gi|6273291|gb|AF191665.1|AF191               1              []
0.00418    0.00646        -                    -
  3                                -              12          [1, 4]
0.00145    0.00145        -                    -
  4   gi|6273290|gb|AF191664.1|AF191               3              []
0.00189    0.00334        -                    -
  5   gi|6273289|gb|AF191663.1|AF191              12              []
   0.0        0.0      0.0                    -
  6                                -               0          [7, 8]
0.00014    0.01012        -                    -
  7   gi|6273287|gb|AF191661.1|AF191               6              []
0.00489    0.01501        -                    -
  8   gi|6273286|gb|AF191660.1|AF191               6              []
0.00295    0.01307        -                    -
  9                                -               0        [10, 11]
0.00125    0.01123        -                    -
 10   gi|6273285|gb|AF191659.1|AF191               9              []
0.00094    0.01217        -                    -
 11   gi|6273284|gb|AF191658.1|AF191               9              []
0.00018    0.01141        -                    -
 12                                -            None          [3, 5]
   0.0        0.0        -                    -

Root:  12
None

Here the root_with_outgroup method acts in situ, and returns the new
root ID number (not applicable to Bio.Phylo). The outgroup argument
seems to be a list of taxon names (here just one).

In my example, the outgroup originally has a branch length of 0.00145.
A new root node was created (here #12) with two children, one with a
branch length of zero (#5, the outgroup) and one with the full length
(#3, branch length 0.00145). Essentially this new root node (#12) and
the outgroup (#5) are now both right at the base of the tree.

There is more than one what to do this though. For example FigTree
seems to introduce a new root node half way along the outgroup branch
(replacing the edge with two edges of half its length). This way the
new root node represents the last common ancestor of the outgroup and
the ingroup (everything else), although putting it at the mid point is
perhaps a little arbitrary.

Peter


More information about the Biopython-dev mailing list