mirror of
https://github.com/metabarcoding/obitools4.git
synced 2025-12-08 16:50:27 +00:00
rename the iterator class
This commit is contained in:
193
pkg/obiseq/attributes.go
Normal file
193
pkg/obiseq/attributes.go
Normal file
@@ -0,0 +1,193 @@
|
||||
package obiseq
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strconv"
|
||||
|
||||
"git.metabarcoding.org/lecasofts/go/obitools/pkg/goutils"
|
||||
log "github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
// A method that returns the value of the key in the annotation map.
|
||||
func (s *BioSequence) GetAttribute(key string) (interface{}, bool) {
|
||||
var val interface{}
|
||||
ok := s.annotations != nil
|
||||
|
||||
if ok {
|
||||
val, ok = s.annotations[key]
|
||||
}
|
||||
|
||||
return val, ok
|
||||
}
|
||||
|
||||
// A method that sets the value of the key in the annotation map.
|
||||
func (s *BioSequence) SetAttribute(key string, value interface{}) {
|
||||
annot := s.Annotations()
|
||||
annot[key] = value
|
||||
}
|
||||
|
||||
// A method that returns the value of the key in the annotation map.
|
||||
func (s *BioSequence) GetIntAttribute(key string) (int, bool) {
|
||||
var val int
|
||||
var err error
|
||||
|
||||
v, ok := s.GetAttribute(key)
|
||||
|
||||
if ok {
|
||||
val, err = goutils.InterfaceToInt(v)
|
||||
ok = err == nil
|
||||
}
|
||||
|
||||
return val, ok
|
||||
}
|
||||
|
||||
// Deleting the key from the annotation map.
|
||||
func (s *BioSequence) DeleteAttribute(key string) {
|
||||
delete(s.Annotations(),key)
|
||||
}
|
||||
|
||||
// Renaming the key in the annotation map.
|
||||
func (s *BioSequence) RenameAttribute(newName, oldName string) {
|
||||
val,ok := s.GetAttribute(oldName)
|
||||
|
||||
if (ok) {
|
||||
s.SetAttribute(newName,val)
|
||||
s.DeleteAttribute(oldName)
|
||||
}
|
||||
}
|
||||
|
||||
// A method that returns the value of the key in the annotation map.
|
||||
func (s *BioSequence) GetNumericAttribute(key string) (float64, bool) {
|
||||
var val float64
|
||||
var err error
|
||||
|
||||
v, ok := s.GetAttribute(key)
|
||||
|
||||
if ok {
|
||||
val, err = goutils.InterfaceToFloat64(v)
|
||||
ok = err == nil
|
||||
}
|
||||
|
||||
return val, ok
|
||||
}
|
||||
|
||||
|
||||
// A method that returns the value of the key in the annotation map.
|
||||
func (s *BioSequence) GetStringAttribute(key string) (string, bool) {
|
||||
var val string
|
||||
v, ok := s.GetAttribute(key)
|
||||
|
||||
if ok {
|
||||
val = fmt.Sprint(v)
|
||||
}
|
||||
|
||||
return val, ok
|
||||
}
|
||||
|
||||
// A method that returns the value of the key in the annotation map.
|
||||
func (s *BioSequence) GetBoolAttribute(key string) (bool, bool) {
|
||||
var val bool
|
||||
var err error
|
||||
|
||||
v, ok := s.GetAttribute(key)
|
||||
|
||||
if ok {
|
||||
val, err = goutils.InterfaceToBool(v)
|
||||
ok = err == nil
|
||||
}
|
||||
|
||||
return val, ok
|
||||
}
|
||||
|
||||
func (s *BioSequence) GetIntMap(key string) (map[string]int, bool) {
|
||||
var val map[string]int
|
||||
var err error
|
||||
|
||||
v, ok := s.GetAttribute(key)
|
||||
|
||||
if ok {
|
||||
val, err = goutils.InterfaceToIntMap(v)
|
||||
ok = err == nil
|
||||
}
|
||||
|
||||
return val, ok
|
||||
}
|
||||
|
||||
// Returning the number of times the sequence has been observed.
|
||||
func (s *BioSequence) Count() int {
|
||||
count, ok := s.GetIntAttribute("count")
|
||||
|
||||
if !ok {
|
||||
count = 1
|
||||
}
|
||||
|
||||
return count
|
||||
}
|
||||
|
||||
// Setting the number of times the sequence has been observed.
|
||||
func (s *BioSequence) SetCount(count int) {
|
||||
annot := s.Annotations()
|
||||
annot["count"] = count
|
||||
}
|
||||
|
||||
|
||||
// Returning the taxid of the sequence.
|
||||
func (s *BioSequence) Taxid() int {
|
||||
taxid, ok := s.GetIntAttribute("taxid")
|
||||
|
||||
if !ok {
|
||||
taxid = 1
|
||||
}
|
||||
|
||||
return taxid
|
||||
}
|
||||
|
||||
// Setting the taxid of the sequence.
|
||||
func (s *BioSequence) SetTaxid(taxid int) {
|
||||
annot := s.Annotations()
|
||||
annot["taxid"] = taxid
|
||||
}
|
||||
|
||||
|
||||
func (s *BioSequence) OBITagRefIndex() map[int]string {
|
||||
|
||||
var val map[int]string
|
||||
|
||||
i, ok := s.GetAttribute("obitag_ref_index")
|
||||
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
|
||||
switch i := i.(type) {
|
||||
case map[int]string:
|
||||
val = i
|
||||
case map[string]interface{}:
|
||||
val = make(map[int]string, len(i))
|
||||
for k, v := range i {
|
||||
score, err := strconv.Atoi(k)
|
||||
if err != nil {
|
||||
log.Panicln(err)
|
||||
}
|
||||
|
||||
val[score], err = goutils.InterfaceToString(v)
|
||||
if err != nil {
|
||||
log.Panicln(err)
|
||||
}
|
||||
}
|
||||
case map[string]string:
|
||||
val = make(map[int]string, len(i))
|
||||
for k, v := range i {
|
||||
score, err := strconv.Atoi(k)
|
||||
if err != nil {
|
||||
log.Panicln(err)
|
||||
}
|
||||
val[score] = v
|
||||
|
||||
}
|
||||
default:
|
||||
log.Panicln("value of attribute obitag_ref_index cannot be casted to a map[int]string")
|
||||
}
|
||||
|
||||
return val
|
||||
}
|
||||
@@ -13,20 +13,17 @@ package obiseq
|
||||
import (
|
||||
"bytes"
|
||||
"crypto/md5"
|
||||
"fmt"
|
||||
"strconv"
|
||||
"sync/atomic"
|
||||
|
||||
log "github.com/sirupsen/logrus"
|
||||
|
||||
"git.metabarcoding.org/lecasofts/go/obitools/pkg/goutils"
|
||||
)
|
||||
|
||||
var _NewSeq = int32(0)
|
||||
var _RecycleSeq = int32(0)
|
||||
var _InMemSeq = int32(0)
|
||||
var _MaxInMemSeq = int32(0)
|
||||
var _BioLogRate = int(100000)
|
||||
|
||||
// var _MaxInMemSeq = int32(0)
|
||||
// var _BioLogRate = int(100000)
|
||||
|
||||
func LogBioSeqStatus() {
|
||||
log.Debugf("Created seq : %d Destroyed : %d In Memory : %d", _NewSeq, _RecycleSeq, _InMemSeq)
|
||||
@@ -200,154 +197,11 @@ func (s *BioSequence) Annotations() Annotation {
|
||||
return s.annotations
|
||||
}
|
||||
|
||||
// A method that returns the value of the key in the annotation map.
|
||||
func (s *BioSequence) GetAttribute(key string) (interface{}, bool) {
|
||||
var val interface{}
|
||||
ok := s.annotations != nil
|
||||
|
||||
if ok {
|
||||
val, ok = s.annotations[key]
|
||||
}
|
||||
|
||||
return val, ok
|
||||
}
|
||||
|
||||
func (s *BioSequence) SetAttribute(key string, value interface{}) {
|
||||
annot := s.Annotations()
|
||||
annot[key] = value
|
||||
}
|
||||
|
||||
// A method that returns the value of the key in the annotation map.
|
||||
func (s *BioSequence) GetIntAttribute(key string) (int, bool) {
|
||||
var val int
|
||||
var err error
|
||||
|
||||
v, ok := s.GetAttribute(key)
|
||||
|
||||
if ok {
|
||||
val, err = goutils.InterfaceToInt(v)
|
||||
ok = err == nil
|
||||
}
|
||||
|
||||
return val, ok
|
||||
}
|
||||
|
||||
// A method that returns the value of the key in the annotation map.
|
||||
func (s *BioSequence) GetStringAttribute(key string) (string, bool) {
|
||||
var val string
|
||||
v, ok := s.GetAttribute(key)
|
||||
|
||||
if ok {
|
||||
val = fmt.Sprint(v)
|
||||
}
|
||||
|
||||
return val, ok
|
||||
}
|
||||
|
||||
// A method that returns the value of the key in the annotation map.
|
||||
func (s *BioSequence) GetBool(key string) (bool, bool) {
|
||||
var val bool
|
||||
var err error
|
||||
|
||||
v, ok := s.GetAttribute(key)
|
||||
|
||||
if ok {
|
||||
val, err = goutils.InterfaceToBool(v)
|
||||
ok = err == nil
|
||||
}
|
||||
|
||||
return val, ok
|
||||
}
|
||||
|
||||
func (s *BioSequence) GetIntMap(key string) (map[string]int, bool) {
|
||||
var val map[string]int
|
||||
var err error
|
||||
|
||||
v, ok := s.GetAttribute(key)
|
||||
|
||||
if ok {
|
||||
val, err = goutils.InterfaceToIntMap(v)
|
||||
ok = err == nil
|
||||
}
|
||||
|
||||
return val, ok
|
||||
}
|
||||
|
||||
// Returning the MD5 hash of the sequence.
|
||||
func (s *BioSequence) MD5() [16]byte {
|
||||
return md5.Sum(s.sequence)
|
||||
}
|
||||
|
||||
// Returning the number of times the sequence has been observed.
|
||||
func (s *BioSequence) Count() int {
|
||||
count, ok := s.GetIntAttribute("count")
|
||||
|
||||
if !ok {
|
||||
count = 1
|
||||
}
|
||||
|
||||
return count
|
||||
}
|
||||
|
||||
// Returning the taxid of the sequence.
|
||||
func (s *BioSequence) Taxid() int {
|
||||
taxid, ok := s.GetIntAttribute("taxid")
|
||||
|
||||
if !ok {
|
||||
taxid = 1
|
||||
}
|
||||
|
||||
return taxid
|
||||
}
|
||||
|
||||
func (s *BioSequence) OBITagRefIndex() map[int]string {
|
||||
|
||||
var val map[int]string
|
||||
|
||||
i, ok := s.GetAttribute("obitag_ref_index")
|
||||
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
|
||||
switch i := i.(type) {
|
||||
case map[int]string:
|
||||
val = i
|
||||
case map[string]interface{}:
|
||||
val = make(map[int]string, len(i))
|
||||
for k, v := range i {
|
||||
score, err := strconv.Atoi(k)
|
||||
if err != nil {
|
||||
log.Panicln(err)
|
||||
}
|
||||
|
||||
val[score], err = goutils.InterfaceToString(v)
|
||||
if err != nil {
|
||||
log.Panicln(err)
|
||||
}
|
||||
}
|
||||
case map[string]string:
|
||||
val = make(map[int]string, len(i))
|
||||
for k, v := range i {
|
||||
score, err := strconv.Atoi(k)
|
||||
if err != nil {
|
||||
log.Panicln(err)
|
||||
}
|
||||
val[score] = v
|
||||
|
||||
}
|
||||
default:
|
||||
log.Panicln("value of attribute obitag_ref_index cannot be casted to a map[int]string")
|
||||
}
|
||||
|
||||
return val
|
||||
}
|
||||
|
||||
func (s *BioSequence) SetTaxid(taxid int) {
|
||||
annot := s.Annotations()
|
||||
annot["taxid"] = taxid
|
||||
}
|
||||
|
||||
// Setting the id of the BioSequence.
|
||||
func (s *BioSequence) SetId(id string) {
|
||||
s.id = id
|
||||
|
||||
Reference in New Issue
Block a user