tree

package
v0.1.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 31, 2016 License: GPL-2.0 Imports: 10 Imported by: 6

Documentation

Overview

Package gotree implements a simple library for handling phylogenetic trees in go

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func CommonEdges

func CommonEdges(edges1 []*Edge, edges2 []*Edge, tipEdges bool) (tree1 int, common int, err error)

This function compares 2 trees and output the number of edges in common It does not check if the trees have different sets of tip names, but just compare the bitsets If applied on two tree with the same number of tips with different names, it will give results anyway It assumes that functions

tree.UpdateTipIndex()
tree.ClearBitSets()
tree.UpdateBitSet()

If tipedges is false: does not take into account tip edges Have been called before, otherwise will output an error

func NewNodeIndex

func NewNodeIndex(t *Tree) *nodeIndex

Types

type Edge

type Edge struct {
	// contains filtered or unexported fields
}

func (*Edge) Bitset

func (e *Edge) Bitset() *bitset.BitSet

func (*Edge) DumpBitSet

func (e *Edge) DumpBitSet() string

func (*Edge) FindEdge

func (e *Edge) FindEdge(edges []*Edge) (*Edge, error)

Return the given edge in the array of edges comparing bitsets fields Return nil if not found

func (*Edge) Id

func (e *Edge) Id() int

func (*Edge) Left

func (e *Edge) Left() *Node

func (*Edge) Length

func (e *Edge) Length() float64

func (*Edge) NumTips

func (e *Edge) NumTips() uint

func (*Edge) Right

func (e *Edge) Right() *Node

func (*Edge) SameBipartition

func (e *Edge) SameBipartition(e2 *Edge) bool

func (*Edge) SetId

func (e *Edge) SetId(id int)

func (*Edge) SetLength

func (e *Edge) SetLength(length float64)

func (*Edge) SetSupport

func (e *Edge) SetSupport(support float64)

func (*Edge) Support

func (e *Edge) Support() float64

func (*Edge) TipPresent

func (e *Edge) TipPresent(id uint) bool

Tests wether the tip with index id in the bitset is Set or not The index corresponds to tree.Tipindex(tipname)

func (*Edge) TopoDepth

func (e *Edge) TopoDepth() (int, error)

type EdgeIndex

type EdgeIndex struct {
	// contains filtered or unexported fields
}

func NewEdgeIndex

func NewEdgeIndex(size int64, loadfactor float64) *EdgeIndex

Initializes an Edge Count Index

func (*EdgeIndex) AddEdgeCount

func (em *EdgeIndex) AddEdgeCount(e *Edge)

Increment edge count for an edge if it already exists in the map Otherwise adds it with count 1

func (*EdgeIndex) BitSets added in v0.1.2

func (em *EdgeIndex) BitSets(minCount, maxCount int) []*KeyValue

Returns all the Bipartitions of the index (bitset) with their counts That have a count included in ]min,max]. If min==Max==1 : [1] Keys of the index

func (*EdgeIndex) PutEdgeValue

func (em *EdgeIndex) PutEdgeValue(e *Edge, count int, length float64)

Adds the edge in the map, with given value If the edge already exists in the index The old value is erased

func (*EdgeIndex) Value

func (em *EdgeIndex) Value(e *Edge) (*EdgeIndexInfo, bool)

Returns the count for the given Edge If the edge is not present, returns 0 and false If the edge is present, returns the value and true

type EdgeIndexInfo added in v0.1.2

type EdgeIndexInfo struct {
	Count int     // Number of occurences of the branch
	Len   float64 // Mean length of branches occurences
}

type KeyValue

type KeyValue struct {
	// contains filtered or unexported fields
}

type Node

type Node struct {
	// contains filtered or unexported fields
}

func (*Node) AddComment

func (n *Node) AddComment(comment string)

func (*Node) Depth

func (n *Node) Depth() (int, error)

func (*Node) EdgeIndex

func (n *Node) EdgeIndex(e *Edge) (int, error)

func (*Node) Edges

func (n *Node) Edges() []*Edge

func (*Node) Name

func (n *Node) Name() string

func (*Node) Neigh

func (n *Node) Neigh() []*Node

Neighbors of this node

func (*Node) Newick

func (n *Node) Newick(parent *Node, newick *bytes.Buffer)

Recursive function that outputs newick representation from the current node

func (*Node) Nneigh

func (n *Node) Nneigh() int

Number of neighbors of this node

func (*Node) NodeIndex

func (n *Node) NodeIndex(next *Node) (int, error)

func (*Node) Parent

func (n *Node) Parent() (*Node, error)

Retrieve the parent node If several parents: Error Parent is defined as the node n2 connected to n by an edge e with e.left == n2 and e.right == n

func (*Node) ParentEdge

func (n *Node) ParentEdge() (*Edge, error)

Retrieve the Edge going to Parent node If several parents: Error Parent is defined as the node n2 connected to n by an edge e with e.left == n2 and e.right == n

func (*Node) SetDepth

func (n *Node) SetDepth(depth int)

func (*Node) SetName

func (n *Node) SetName(name string)

func (*Node) Tip

func (n *Node) Tip() bool

Is a tip or not?

type NodeIndex

type NodeIndex interface {
	GetNode(name string) (*Node, bool)
}

type Tree

type Tree struct {
	// contains filtered or unexported fields
}

func Consensus added in v0.1.2

func Consensus(trees <-chan Trees, cutoff float64) *Tree

Builds the consensus of trees given in the input channel. If the cutoff is 0.5 : The majority rule consensus is computed If tht cutoff is 1 : The strict consensus is computed In the output consensus tree: 1) Branch supports are computed as the proportion of trees in which the bipartition is present 2) Branch lengths are computed as the average length of the same branch over all the trees where it is present There can be errors if: * The cutoff <0.5 or >1 * The tip names are different in the different trees * Incompatible bipartition are generated to build the consensus (It should not happen since cutoff should be >=0.5)

func NewTree

func NewTree() *Tree

func RandomBinaryTree

func RandomBinaryTree(nbtips int) (*Tree, error)

Creates a Random Binary tree nbtips : Number of tips of the random binary tree to create branch length: follow an exponential distribution with param lambda=1/0.1

func StarTree added in v0.1.2

func StarTree(nbtips int) (*Tree, error)

Creates a Random Binary tree nbtips : Number of tips of the random binary tree to create

func StarTreeFromName added in v0.1.2

func StarTreeFromName(names ...string) (*Tree, error)

func StarTreeFromTree added in v0.1.2

func StarTreeFromTree(t *Tree) (*Tree, error)

Creates a Star tree with the same tips as the tree in argument Lengths of branches in the star trees are the same as lengths of tip edges in the input tree

func (*Tree) AddBipartition added in v0.1.2

func (t *Tree) AddBipartition(n *Node, edges []*Edge, length, support float64) *Edge

This function adds a bipartition at the given node and the given edges Immagine a star tree with central node n,

1
|
|

6----n-----2

   /|\
  / | \
e5 e4  e3

if we call AddBipartition(n,{e3,e4,e5}) we end with:

1
|
|

6----n-----2

    |
    |
    n2
   /|\
  / | \
e5 e4  e3

func (*Tree) AllTipNames

func (t *Tree) AllTipNames() []string

Returns all the tip name in the tree Starts with n==nil (root)

func (*Tree) ClearBitSets

func (t *Tree) ClearBitSets() error

func (*Tree) CollapseShortBranches

func (t *Tree) CollapseShortBranches(length float64)

func (*Tree) CommonEdges

func (t *Tree) CommonEdges(t2 *Tree, tipEdges bool) (tree1 int, common int, err error)

This function compares 2 trees and output the number of edges in common If the trees have different sets of tip names, returns an error It assumes that functions

tree.UpdateTipIndex()
tree.ClearBitSets()
tree.UpdateBitSet()

If tipedges is false: does not take into account tip edges Have been called before, otherwise will output an error

func (*Tree) CompareTipIndexes

func (t *Tree) CompareTipIndexes(t2 *Tree) error

This function compares the tip name indexes of 2 trees If the tipindexes have the same size (!=0) and have the same set of tip names, The returns nil, otherwise returns an error

func (*Tree) ComputeDepths

func (t *Tree) ComputeDepths()

func (*Tree) ConnectNodes

func (t *Tree) ConnectNodes(parent *Node, child *Node) *Edge

func (*Tree) Edges

func (t *Tree) Edges() []*Edge

Returns all the edges of the tree (do it recursively)

func (*Tree) ExistsTip

func (t *Tree) ExistsTip(name string) (bool, error)

Return true if the tip with given name exists in the tree May return an error if tip index has not been initialized With UpdateTipIndex

func (*Tree) GraftTipOnEdge

func (t *Tree) GraftTipOnEdge(n *Node, e *Edge) (*Edge, *Edge, *Node, error)

This function graft the Node n at the middle of the Edge e It divides the branch lenght by 2 It returns the added edges and the added nodes

func (*Tree) LeastCommonAncestorUnrooted added in v0.1.2

func (t *Tree) LeastCommonAncestorUnrooted(nodeindex *nodeIndex, tips ...string) (*Node, []*Edge, bool)
Given a set of tip names

returns the node that is the common ancestor of them and the edges that connects this node to the subtree => Considers the tree as unrooted

      e2---1
----a|

| e1---2 | ---3

----|

| ---4 | ---5

----|
     ---6

LeastCommonAncestorUnrooted(1,2) returns a,e1,e2,true returned boolean value is true if the group is monophyletic

func (*Tree) LeastCommonAncestorUnrootedRecur added in v0.1.2

func (t *Tree) LeastCommonAncestorUnrootedRecur(current *Node, prev *Node, tipIndex map[string]*Node) (*Node, []*Edge, int, int, bool)

Returns for a given node ...

func (*Tree) MeanBrLength

func (t *Tree) MeanBrLength() float64

func (*Tree) MeanSupport

func (t *Tree) MeanSupport() float64

func (*Tree) MedianSupport

func (t *Tree) MedianSupport() float64

func (*Tree) NbTips

func (t *Tree) NbTips() (int, error)

if UpdateTipIndex has been called before ok otherwise returns an error

func (*Tree) NewEdge

func (t *Tree) NewEdge() *Edge

func (*Tree) NewNode

func (t *Tree) NewNode() *Node

func (*Tree) Newick

func (t *Tree) Newick() string

func (*Tree) Nodes

func (t *Tree) Nodes() []*Node

Returns all the nodes of the tree (do it recursively)

func (*Tree) RemoveEdges

func (t *Tree) RemoveEdges(edges ...*Edge)

Removes branches from the tree if they are not tip edges And if they do not connects the root of a rooted tree Merges the 2 nodes and creates multifurcations At the end, bitsets should not need to be updated

func (*Tree) RemoveTips

func (t *Tree) RemoveTips(names ...string) error

Removes a set of tips from the tree, from tip names

func (*Tree) Rename

func (t *Tree) Rename(namemap map[string]string) error

This function renames nodes of the tree based on the map in argument If a name in the map does not exist in the tree, then returns an error If a node/tip in the tree does not have a name in the map: OK After rename, tip index is updated, as well as bitsets of the edges

func (*Tree) Reroot

func (t *Tree) Reroot(n *Node) error

This function takes a node and reroot the tree on that node It reorients edges left-edge-right : see ReorderEdges The node must be one of the tree nodes, otherwise it returns an error

func (*Tree) RerootFirst

func (t *Tree) RerootFirst() error

This function takes the first node having 3 neighbors and reroot the tree on this node

func (*Tree) Root

func (t *Tree) Root() *Node

func (*Tree) Rooted

func (t *Tree) Rooted() bool

func (*Tree) SetRoot

func (t *Tree) SetRoot(r *Node)

func (*Tree) ShuffleTips

func (t *Tree) ShuffleTips()

This function shuffles the tips of the tree and recompute tipindex and bitsets

func (*Tree) String

func (t *Tree) String() string

func (*Tree) SumBranchLengths

func (t *Tree) SumBranchLengths() float64

func (*Tree) TipEdges

func (t *Tree) TipEdges() []*Edge

Returns all the tip edges of the tree (do it recursively)

func (*Tree) TipIndex

func (t *Tree) TipIndex(name string) (uint, error)

Return the tip index if the tip with given name exists in the tree May return an error if tip index has not been initialized With UpdateTipIndex or if the tip does not exist

func (*Tree) Tips

func (t *Tree) Tips() []*Node

Returns all the tips of the tree (do it recursively)

func (*Tree) UnRoot

func (t *Tree) UnRoot()

func (*Tree) UpdateBitSet

func (t *Tree) UpdateBitSet() error

Updates bitsets of all edges in the tree Assumes that the hashmap tip name : index is initialized with UpdateTipIndex function

func (*Tree) UpdateTipIndex

func (t *Tree) UpdateTipIndex()

Updates the tipindex which maps tip names To index in the bitsets Bitset indexes correspond to the position of the tip in the alphabetically ordered tip name list

type Trees added in v0.1.2

type Trees struct {
	Tree *Tree
	Id   int
}

Type for channel of trees

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL