-
Notifications
You must be signed in to change notification settings - Fork 2
/
revel.go
61 lines (56 loc) · 1.32 KB
/
revel.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package main
import (
"io"
"path/filepath"
"strconv"
"github.com/brentp/bix"
"github.com/brentp/irelate/interfaces"
"github.com/brentp/irelate/parsers"
"github.com/liserjrqlxue/goUtil/osUtil"
"github.com/liserjrqlxue/goUtil/simpleUtil"
"github.com/pelletier/go-toml"
)
type revelDb struct {
File string
Title []string
TitleIndex []int
Key []string
KeyIndex []int
tbi *bix.Bix
}
func (db *revelDb) loadRevel(revelCfg *toml.Tree) {
simpleUtil.CheckErr(revelCfg.Unmarshal(db))
if !osUtil.FileExists(db.File) {
db.File = filepath.Join(dbPath, db.File)
}
db.tbi = simpleUtil.HandleError(bix.New(db.File)).(*bix.Bix)
}
func (db *revelDb) anno(item map[string]string) {
var chr = item["chromosome"]
var pos = simpleUtil.HandleError(strconv.Atoi(item["Stop"])).(int)
var rdr = simpleUtil.HandleError(
db.tbi.Query(
interfaces.AsIPosition(chr, pos, pos),
),
).(interfaces.RelatableIterator)
defer simpleUtil.DeferClose(rdr)
for {
r, err := rdr.Next()
if err == io.EOF {
break
}
simpleUtil.CheckErr(err)
var f = r.(*parsers.RefAltInterval).Fields
var hit = true
for i := range db.KeyIndex {
if string(f[db.KeyIndex[i]]) != item[db.Key[i]] {
hit = false
}
}
if hit {
for i := range db.TitleIndex {
item[db.Title[i]] = string(f[db.TitleIndex[i]])
}
}
}
}