func (d *DiversityFilter) findGenome(r *sam.Record, env *lmdb.Env, dbname string) (val []byte, err error) { fn := func(txn *lmdb.Txn) error { dbi, err := txn.OpenDBI(dbname, 0) if err != nil { return err } key := []byte(r.Ref.Name()) val, err = txn.Get(dbi, key) val = bytes.ToUpper(val) return err } err = env.View(fn) return }
func getAllCr(env *lmdb.Env, dbname string) chan KeyValue { ch := make(chan KeyValue) go func() { defer close(ch) fn := func(txn *lmdb.Txn) error { dbi, err := txn.OpenDBI(dbname, 0) if err != nil { return err } cur, err := txn.OpenCursor(dbi) if err != nil { return err } for { k, v, err := cur.Get(nil, nil, lmdb.Next) if lmdb.IsNotFound(err) { break } if err != nil { return err } ch <- KeyValue{Key: k, Value: v} } return nil } err := env.View(fn) if err != nil { if *debug { log.Panicln(err) } else { log.Fatalln(err) } } }() return ch }
func getAllSNPs(env *lmdb.Env) chan SNPArr { ch := make(chan SNPArr) fn := func(tx *lmdb.Txn) error { dbi, err := tx.OpenDBI("gene", 0) if err != nil { return err } cur, err := tx.OpenCursor(dbi) if err != nil { return err } defer cur.Close() for { k, v, err := cur.Get(nil, nil, lmdb.Next) if lmdb.IsNotFound(err) { return nil } else if err != nil { return err } arr := []pileup.SNP{} if err := msgpack.Unmarshal(v, &arr); err != nil { return err } ch <- SNPArr{Key: k, Arr: arr} } } go func() { defer close(ch) env.View(fn) }() return ch }