/
lantern_assemblies.go
116 lines (89 loc) · 3.44 KB
/
lantern_assemblies.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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
package main
import "io"
import "fmt"
import "net/http"
import "log"
import "github.com/julienschmidt/httprouter"
// __ _ _ _
// / /_ _ ___ ___ ___ _ __ ___ | |__ | (_) ___ ___
// / / _` / __/ __|/ _ \ '_ ` _ \| '_ \| | |/ _ \/ __|
// / / (_| \__ \__ \ __/ | | | | | |_) | | | __/\__ \
// /_/ \__,_|___/___/\___|_| |_| |_|_.__/|_|_|\___||___/
//
func (ctx *LanternContext) APIAssemblies(w http.ResponseWriter, r *http.Request, params httprouter.Params) {
if ctx.VerboseFlag {
log.Printf("APIAssemblies\n")
}
assembly_map := make(map[string]string)
tagset_sj := ctx.Config.O["tagset"].O
for tagset_pdh := range tagset_sj {
for assembly_pdh := range tagset_sj[tagset_pdh].O["assembly"].O {
assembly_name := tagset_sj[tagset_pdh].O["assembly"].O[assembly_pdh].O["name"].S
assembly_map[assembly_pdh] = assembly_name
}
}
count:=0
io.WriteString(w,"[")
for pdh := range assembly_map {
if count>0 { io.WriteString(w,",") }
io.WriteString(w,"{")
io.WriteString(w, fmt.Sprintf(`"assembly-name":"%s","assembly-pdh":"%s"`, assembly_map[pdh], pdh))
io.WriteString(w,"}")
count++
}
io.WriteString(w,"]")
}
// __ _ _ _ __ _ _
// / /_ _ ___ ___ ___ _ __ ___ | |__ | (_) ___ ___ / /(_) __| |
// / / _` / __/ __|/ _ \ '_ ` _ \| '_ \| | |/ _ \/ __| / (_) |/ _` |
// / / (_| \__ \__ \ __/ | | | | | |_) | | | __/\__ \/ / _| | (_| |
// /_/ \__,_|___/___/\___|_| |_| |_|_.__/|_|_|\___||___/_/ (_)_|\__,_|
//
func (ctx *LanternContext) APIAssembliesId(w http.ResponseWriter, r *http.Request, params httprouter.Params) {
assembly_pdh := params.ByName("id")
if len(assembly_pdh) == 0 {
if ctx.VerboseFlag { log.Printf("APIAssembliesId\n") }
send_error_bad_request(w, "invalid assembly id")
return
}
if ctx.VerboseFlag {
log.Printf("APIAssembliesId %v\n", assembly_pdh)
}
assembly_map := make(map[string]string)
tagset_sj := ctx.Config.O["tagset"].O
for tagset_pdh := range tagset_sj {
for assembly_pdh := range tagset_sj[tagset_pdh].O["assembly"].O {
assembly_name := tagset_sj[tagset_pdh].O["assembly"].O[assembly_pdh].O["name"].S
assembly_map[assembly_pdh] = assembly_name
}
}
count:=0
io.WriteString(w,"[")
for assembly_pdh := range ctx.Assembly {
assembly_name := assembly_map[assembly_pdh]
for path := range ctx.Assembly[assembly_pdh] {
chrom := ctx.AssemblyChrom[assembly_pdh][path]
beg_pos := 0
if (path>0) && (ctx.AssemblyChrom[assembly_pdh][path-1]==chrom) {
n := len(ctx.Assembly[assembly_pdh][path-1])
beg_pos = ctx.Assembly[assembly_pdh][path-1][n-1]
}
if (len(chrom)>3) && (chrom[0:3] == "chr") { chrom = chrom[3:] }
for step:=0; step<len(ctx.Assembly[assembly_pdh][path]); step++ {
end_pos := ctx.Assembly[assembly_pdh][path][step]
if count>0 { io.WriteString(w,",") }
io.WriteString(w,"{")
io.WriteString(w, fmt.Sprintf(`"assembly-name":"%s","assembly-pdh":"%s"`, assembly_name, assembly_pdh))
io.WriteString(w, fmt.Sprintf(`,"chromosome-name":"%s","indexing":0`, chrom))
io.WriteString(w, fmt.Sprintf(`,"start-position":%d,"end-position":%d`, beg_pos, end_pos))
io.WriteString(w,"}")
if ctx.PrettyAPIFlag {
io.WriteString(w,"\n")
}
count++
beg_pos = end_pos
}
}
}
io.WriteString(w,"]")
}