Adds a first version of a new obidistribute command

This commit is contained in:
2022-02-14 00:01:01 +01:00
parent 1544bafde1
commit eb32620bb3
13 changed files with 567 additions and 36 deletions

65
pkg/obiseq/class.go Normal file
View File

@@ -0,0 +1,65 @@
package obiseq
import (
"fmt"
"hash/crc32"
"strconv"
)
type SequenceClassifier func(sequence BioSequence) string
func AnnotationClassifier(key string) SequenceClassifier {
f := func(sequence BioSequence) string {
if sequence.HasAnnotation() {
value, ok := sequence.Annotations()[key]
if ok {
switch value := value.(type) {
case string:
return value
default:
return fmt.Sprint(value)
}
}
}
return ""
}
return SequenceClassifier(f)
}
var SampleClassifier = AnnotationClassifier("sample")
func PredicateClassifier(predicate SequencePredicate) SequenceClassifier {
f := func(sequence BioSequence) string {
if predicate(sequence) {
return "true"
} else {
return "false"
}
}
return SequenceClassifier(f)
}
// Builds a classifier function based on CRC32 of the sequence
//
func HashClassifier(size int) SequenceClassifier {
f := func(sequence BioSequence) string {
h := crc32.ChecksumIEEE(sequence.Sequence()) % uint32(size)
return strconv.Itoa(int(h))
}
return SequenceClassifier(f)
}
func RotateClassifier(size int) SequenceClassifier {
n := 0
f := func(sequence BioSequence) string {
h := n % size
n++
return strconv.Itoa(int(h))
}
return SequenceClassifier(f)
}