mirror of
https://github.com/metabarcoding/obitools4.git
synced 2025-06-29 16:20:46 +00:00
43 lines
887 B
Go
43 lines
887 B
Go
package obitax
|
|
|
|
import (
|
|
log "github.com/sirupsen/logrus"
|
|
|
|
"git.metabarcoding.org/lecasofts/go/obitools/pkg/obiseq"
|
|
)
|
|
|
|
func (taxon *TaxNode) IsSubCladeOf(parent *TaxNode) bool {
|
|
|
|
for taxon.taxid != parent.taxid && taxon.parent != taxon.taxid {
|
|
taxon = taxon.pparent
|
|
}
|
|
|
|
return taxon.taxid == parent.taxid
|
|
}
|
|
|
|
func (taxon *TaxNode) IsBelongingSubclades(clades *TaxonSet) bool {
|
|
_, ok := (*clades)[taxon.taxid]
|
|
|
|
for !ok && taxon.parent != taxon.taxid {
|
|
taxon = taxon.pparent
|
|
_, ok = (*clades)[taxon.taxid]
|
|
}
|
|
|
|
return ok
|
|
}
|
|
|
|
func IsSubCladeOf(taxonomy Taxonomy, taxid int) obiseq.SequencePredicate {
|
|
parent, err := taxonomy.Taxon(taxid)
|
|
|
|
if err != nil {
|
|
log.Fatalf("Cannot find taxon : %d (%v)", taxid, err)
|
|
}
|
|
|
|
f := func(sequence *obiseq.BioSequence) bool {
|
|
taxon, err := taxonomy.Taxon(sequence.Taxid())
|
|
return err == nil && taxon.IsSubCladeOf(parent)
|
|
}
|
|
|
|
return f
|
|
}
|