mirror of
https://github.com/metabarcoding/obitools4.git
synced 2025-06-29 16:20:46 +00:00
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:
@ -11,6 +11,7 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obiphylo"
|
||||
"git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obiutils"
|
||||
)
|
||||
|
||||
@ -415,3 +416,10 @@ func (taxonomy *Taxonomy) InsertPathString(path []string) (*Taxonomy, error) {
|
||||
|
||||
return taxonomy, nil
|
||||
}
|
||||
|
||||
func (taxo *Taxonomy) AsPhyloTree() (*obiphylo.PhyloNode, error) {
|
||||
root := taxo.Root().Node
|
||||
taxa := taxo.AsTaxonSet()
|
||||
|
||||
return taxa.AsPhyloTree(root)
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
Reference in New Issue
Block a user