Skip to content

Latest commit

 

History

History
69 lines (57 loc) · 1.38 KB

annotate.md

File metadata and controls

69 lines (57 loc) · 1.38 KB

Gotree: toolkit and api for phylogenetic tree manipulation

API

annotate

Annotate function may be used to set a name to an internal node

package main

import (
	"fmt"
	"strings"

	"github.com/evolbioinfo/gotree/io/newick"
	"github.com/evolbioinfo/gotree/tree"
)

func main() {
	var treeString string
	var t *tree.Tree
	var err error
	treeString = "(Tip4,Tip0,(Tip3,(Tip2,Tip1)));"
	t, err = newick.NewParser(strings.NewReader(treeString)).Parse()
	if err != nil {
		panic(err)
	}
	namemap := make(map[string][]string)
	namemap["internalnode"] = []string{"Tip1", "Tip2", "Tip3"}
	t.Annotate(namemap)
	fmt.Println(t.Newick())
	// Should print (Tip4,Tip0,(Tip3,(Tip2,Tip1))internalnode);
}

Also, we can use LeastCommonAncestor function

package main

import (
	"fmt"
	"strings"

	"github.com/evolbioinfo/gotree/io/newick"
	"github.com/evolbioinfo/gotree/tree"
)

func main() {
	var treeString string
	var t *tree.Tree
	var err error
	treeString = "(Tip4,Tip0,(Tip3,(Tip2,Tip1)));"
	t, err = newick.NewParser(strings.NewReader(treeString)).Parse()
	if err != nil {
		panic(err)
	}

	tipnames := []string{"Tip1","Tip2","Tip3"}
	nodeindex := tree.NewNodeIndex(t)
	n, _, _, err := t.LeastCommonAncestorUnrooted(nodeindex, tipnames...)
	if err != nil {
		panic(err)
	}
	n.SetName("internalnode")
	fmt.Println(t.Newick())
	// Should print (Tip4,Tip0,(Tip3,(Tip2,Tip1))internalnode);
}