mirror of
https://github.com/metabarcoding/obitools4.git
synced 2025-06-29 16:20:46 +00:00
39 lines
724 B
Go
39 lines
724 B
Go
package obitax
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/TuftsBCB/io/newick"
|
|
)
|
|
|
|
func (taxonomy *Taxonomy) Newick() string {
|
|
if taxonomy == nil {
|
|
return ""
|
|
}
|
|
|
|
iterator := taxonomy.AsTaxonSet().Sort().Iterator()
|
|
|
|
nodes := make(map[*string]*newick.Tree, taxonomy.Len())
|
|
trees := make([]*newick.Tree, 0)
|
|
|
|
for iterator.Next() {
|
|
taxon := iterator.Get()
|
|
tree := &newick.Tree{Label: taxon.String()}
|
|
nodes[taxon.Node.id] = tree
|
|
if parent, ok := nodes[taxon.Parent().Node.id]; ok {
|
|
parent.Children = append(parent.Children, *tree)
|
|
} else {
|
|
trees = append(trees, tree)
|
|
}
|
|
}
|
|
|
|
rep := strings.Builder{}
|
|
|
|
for _, tree := range trees {
|
|
rep.WriteString(tree.String())
|
|
rep.WriteString("\n")
|
|
}
|
|
|
|
return rep.String()
|
|
}
|