mirror of
https://github.com/metabarcoding/obitools4.git
synced 2025-06-29 16:20:46 +00:00
Fisrt functional version
This commit is contained in:
106
pkg/obiseq/taxonomy_methods.go
Normal file
106
pkg/obiseq/taxonomy_methods.go
Normal file
@ -0,0 +1,106 @@
|
||||
package obiseq
|
||||
|
||||
import (
|
||||
"git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obitax"
|
||||
)
|
||||
|
||||
func (s *BioSequence) Taxon(taxonomy *obitax.Taxonomy) *obitax.Taxon {
|
||||
taxid := s.Taxid()
|
||||
if taxid == "NA" {
|
||||
return nil
|
||||
}
|
||||
return taxonomy.Taxon(taxid)
|
||||
}
|
||||
|
||||
// Taxid returns the taxonomic ID associated with the BioSequence.
|
||||
//
|
||||
// It retrieves the "taxid" attribute from the BioSequence's attributes map.
|
||||
// If the attribute is not found, the function returns 1 as the default taxonomic ID.
|
||||
// The taxid 1 corresponds to the root taxonomic level.
|
||||
//
|
||||
// The function returns an integer representing the taxonomic ID.
|
||||
func (s *BioSequence) Taxid() (taxid string) {
|
||||
var ok bool
|
||||
if s.taxon != nil {
|
||||
taxid = s.taxon.String()
|
||||
ok = true
|
||||
} else {
|
||||
taxid, ok = s.GetStringAttribute("taxid")
|
||||
}
|
||||
|
||||
if !ok {
|
||||
taxid = "NA"
|
||||
}
|
||||
|
||||
return taxid
|
||||
}
|
||||
|
||||
// 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 (sequence *BioSequence) SetTaxonAtRank(taxonomy *obitax.Taxonomy, rank string) *obitax.Taxon {
|
||||
var taxonAtRank *obitax.Taxon
|
||||
|
||||
taxon := sequence.Taxon(taxonomy)
|
||||
taxonAtRank = nil
|
||||
if taxon != 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+"_taxid", taxonAtRank.String())
|
||||
sequence.SetAttribute(rank+"_name", taxonAtRank.ScientificName())
|
||||
} else {
|
||||
sequence.SetAttribute(rank+"_taxid", "NA")
|
||||
sequence.SetAttribute(rank+"_name", "NA")
|
||||
}
|
||||
}
|
||||
|
||||
return taxonAtRank
|
||||
}
|
||||
|
||||
// Setting the species of a sequence.
|
||||
func (sequence *BioSequence) SetSpecies(taxonomy *obitax.Taxonomy) *obitax.Taxon {
|
||||
return sequence.SetTaxonAtRank(taxonomy, "species")
|
||||
}
|
||||
|
||||
// Setting the genus of a sequence.
|
||||
func (sequence *BioSequence) SetGenus(taxonomy *obitax.Taxonomy) *obitax.Taxon {
|
||||
return sequence.SetTaxonAtRank(taxonomy, "genus")
|
||||
}
|
||||
|
||||
// Setting the family of a sequence.
|
||||
func (sequence *BioSequence) SetFamily(taxonomy *obitax.Taxonomy) *obitax.Taxon {
|
||||
return sequence.SetTaxonAtRank(taxonomy, "family")
|
||||
}
|
||||
|
||||
func (sequence *BioSequence) SetPath(taxonomy *obitax.Taxonomy) string {
|
||||
taxon := sequence.Taxon(taxonomy)
|
||||
path := taxon.Path()
|
||||
|
||||
tpath := path.String()
|
||||
sequence.SetAttribute("taxonomic_path", tpath)
|
||||
|
||||
return tpath
|
||||
}
|
||||
|
||||
func (sequence *BioSequence) SetScientificName(taxonomy *obitax.Taxonomy) string {
|
||||
taxon := sequence.Taxon(taxonomy)
|
||||
name := taxon.ScientificName()
|
||||
|
||||
sequence.SetAttribute("scienctific_name", name)
|
||||
|
||||
return name
|
||||
}
|
||||
|
||||
func (sequence *BioSequence) SetTaxonomicRank(taxonomy *obitax.Taxonomy) string {
|
||||
taxon := sequence.Taxon(taxonomy)
|
||||
rank := taxon.Rank()
|
||||
|
||||
sequence.SetAttribute("taxonomic_rank", rank)
|
||||
|
||||
return rank
|
||||
}
|
Reference in New Issue
Block a user