mirror of
https://github.com/metabarcoding/obitools4.git
synced 2025-06-29 16:20:46 +00:00
49 lines
1.6 KiB
Go
49 lines
1.6 KiB
Go
package obitax
|
|
|
|
import (
|
|
"git.metabarcoding.org/lecasofts/go/obitools/pkg/obiseq"
|
|
)
|
|
|
|
// Setting the taxon at a given rank for a given sequence.
|
|
//
|
|
// Two attributes are added to the sequence. One named by the rank name stores
|
|
// the taxid, a second named by the rank name suffixed with '_name' contains the
|
|
// Scientific name of the genus.
|
|
// If the taxon at the given rank doesn't exist for the taxonomy annotation
|
|
// of the sequence, nothing happens.
|
|
func (taxonomy *Taxonomy) SetTaxonAtRank(sequence *obiseq.BioSequence, rank string) *TaxNode {
|
|
var taxonAtRank *TaxNode
|
|
|
|
taxid := sequence.Taxid()
|
|
taxon, err := taxonomy.Taxon(taxid)
|
|
taxonAtRank = nil
|
|
if err == nil {
|
|
taxonAtRank = taxon.TaxonAtRank(rank)
|
|
if taxonAtRank != nil {
|
|
// log.Printf("Taxid: %d Rank: %s --> proposed : %d (%s)", taxid, rank, taxonAtRank.taxid, *(taxonAtRank.scientificname))
|
|
sequence.SetAttribute(rank, taxonAtRank.taxid)
|
|
sequence.SetAttribute(rank+"_name", *taxonAtRank.scientificname)
|
|
} else {
|
|
sequence.SetAttribute(rank, -1)
|
|
sequence.SetAttribute(rank+"_name", "NA")
|
|
}
|
|
}
|
|
|
|
return taxonAtRank
|
|
}
|
|
|
|
// Setting the species of a sequence.
|
|
func (taxonomy *Taxonomy) SetSpecies(sequence *obiseq.BioSequence) *TaxNode {
|
|
return taxonomy.SetTaxonAtRank(sequence, "species")
|
|
}
|
|
|
|
// Setting the genus of a sequence.
|
|
func (taxonomy *Taxonomy) SetGenus(sequence *obiseq.BioSequence) *TaxNode {
|
|
return taxonomy.SetTaxonAtRank(sequence, "genus")
|
|
}
|
|
|
|
// Setting the family of a sequence.
|
|
func (taxonomy *Taxonomy) SetFamily(sequence *obiseq.BioSequence) *TaxNode {
|
|
return taxonomy.SetTaxonAtRank(sequence, "family")
|
|
}
|