Changes to be committed:

modified:   cmd/obitools/obitag/main.go
	modified:   cmd/obitools/obitaxonomy/main.go
	modified:   pkg/obiformats/csvtaxdump_read.go
	modified:   pkg/obiformats/ecopcr_read.go
	modified:   pkg/obiformats/ncbitaxdump_read.go
	modified:   pkg/obiformats/ncbitaxdump_readtar.go
	modified:   pkg/obiformats/newick_write.go
	modified:   pkg/obiformats/options.go
	modified:   pkg/obiformats/taxonomy_read.go
	modified:   pkg/obiformats/universal_read.go
	modified:   pkg/obiiter/extract_taxonomy.go
	modified:   pkg/obioptions/options.go
	modified:   pkg/obioptions/version.go
	new file:   pkg/obiphylo/tree.go
	modified:   pkg/obiseq/biosequenceslice.go
	modified:   pkg/obiseq/taxonomy_methods.go
	modified:   pkg/obitax/taxonomy.go
	modified:   pkg/obitax/taxonset.go
	modified:   pkg/obitools/obiconvert/sequence_reader.go
	modified:   pkg/obitools/obitag/obitag.go
	modified:   pkg/obitools/obitaxonomy/obitaxonomy.go
	modified:   pkg/obitools/obitaxonomy/options.go
	deleted:    sample/.DS_Store
This commit is contained in:
Eric Coissac
2025-06-04 09:48:10 +02:00
parent 3424d3057f
commit 6cb7a5a352
23 changed files with 230 additions and 56 deletions

View File

@ -7,7 +7,12 @@ corresponding TaxNode instances, along with methods for managing and querying th
package obitax
import log "github.com/sirupsen/logrus"
import (
"fmt"
"git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obiphylo"
log "github.com/sirupsen/logrus"
)
// TaxonSet represents a collection of taxa within a taxonomy.
// It holds a mapping of taxon identifiers to their corresponding TaxNode instances,
@ -224,3 +229,36 @@ func (set *TaxonSet) Sort() *TaxonSlice {
return taxa
}
func (taxo *TaxonSet) AsPhyloTree(root *TaxNode) (*obiphylo.PhyloNode, error) {
nodes := make(map[*string]*obiphylo.PhyloNode, taxo.Len())
tsi := taxo.Iterator()
log.Warnf("Coucou")
for tsi.Next() {
taxon := tsi.Get()
id := taxon.Node.Id()
node := obiphylo.NewPhyloNode()
rank := taxon.Rank()
node.Name = fmt.Sprintf("%s -%s@%s-", taxon.ScientificName(), *id, rank)
node.SetAttribute("rank", rank)
node.SetAttribute("parent", taxon.Parent().Node.Id())
nodes[id] = node
}
for id, node := range nodes {
if id == root.Id() {
continue
}
pid := node.GetAttribute("parent").(*string)
parent := nodes[pid]
if parent != nil {
parent.AddChild(node, 1)
} else {
return nil, fmt.Errorf("cannot find parent node for %s", *pid)
}
}
rid := root.Id()
return nodes[rid], nil
}