mirror of
https://github.com/metabarcoding/obitools4.git
synced 2025-06-29 16:20:46 +00:00
55 lines
1.5 KiB
Go
55 lines
1.5 KiB
Go
package obitax
|
|
|
|
import log "github.com/sirupsen/logrus"
|
|
|
|
// IsSubCladeOf checks if the current Taxon is a subclade of the specified parent Taxon.
|
|
// It returns true if the current Taxon is a descendant of the parent Taxon in the taxonomy hierarchy.
|
|
//
|
|
// Parameters:
|
|
// - parent: A pointer to the parent Taxon to check against.
|
|
//
|
|
// Returns:
|
|
// - A boolean indicating whether the current Taxon is a subclade of the parent Taxon.
|
|
// - Logs a fatal error if the two taxa do not belong to the same taxonomy.
|
|
func (taxon *Taxon) IsSubCladeOf(parent *Taxon) bool {
|
|
if taxon.Taxonomy != parent.Taxonomy {
|
|
log.Fatalf(
|
|
"Both taxa %s and %s must belong to the same taxonomy",
|
|
taxon.String(),
|
|
parent.String(),
|
|
)
|
|
}
|
|
|
|
for t := range taxon.IPath() {
|
|
if t.Node.Id() == parent.Node.Id() {
|
|
return true
|
|
}
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
// IsBelongingSubclades checks if the current Taxon belongs to any of the specified subclades.
|
|
// It traverses up the taxonomy hierarchy to determine if the current Taxon or any of its ancestors
|
|
// belong to the provided TaxonSet.
|
|
//
|
|
// Parameters:
|
|
// - clades: A pointer to a TaxonSet containing the subclades to check against.
|
|
//
|
|
// Returns:
|
|
// - A boolean indicating whether the current Taxon or any of its ancestors belong to the specified subclades.
|
|
func (taxon *Taxon) IsBelongingSubclades(clades *TaxonSet) bool {
|
|
ok := clades.Contains(taxon.Node.id)
|
|
|
|
for !ok && !taxon.IsRoot() {
|
|
taxon = taxon.Parent()
|
|
ok = clades.Contains(taxon.Node.id)
|
|
}
|
|
|
|
if taxon.IsRoot() {
|
|
ok = clades.Contains(taxon.Node.id)
|
|
}
|
|
|
|
return ok
|
|
}
|