-
Notifications
You must be signed in to change notification settings - Fork 4
/
region.go
120 lines (101 loc) · 3.42 KB
/
region.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
117
118
119
120
// Package htsrequest provides operations for parsing htsget-related
// parameters from the HTTP request, and performing validation and
// transformation
//
// Module region contains genomic intervals
package htsrequest
import "strconv"
// Region defines a simple genomic interval: contig name, start, and end position
type Region struct {
ReferenceName string `json:"referenceName"`
Start *int `json:"start"`
End *int `json:"end"`
}
// NewRegion instantiates a Region instance
func NewRegion() *Region {
return new(Region)
}
/* SETTERS AND GETTERS */
// SetReferenceName sets a region's reference name
func (region *Region) SetReferenceName(referenceName string) {
region.ReferenceName = referenceName
}
// GetReferenceName retrieves a region's reference name
func (region *Region) GetReferenceName() string {
return region.ReferenceName
}
// SetStart sets a region's start position
func (region *Region) SetStart(start int) {
region.Start = &start
}
// GetStart retrieves a region's start position
func (region *Region) GetStart() int {
return *region.Start
}
// SetEnd sets a region's end position
func (region *Region) SetEnd(end int) {
region.End = &end
}
// GetEnd retrieves a region's end position
func (region *Region) GetEnd() int {
return *region.End
}
// StartString retrieves the start position as a string
func (region *Region) StartString() string {
return strconv.Itoa(region.GetStart())
}
// EndString retrieves the end position as a string
func (region *Region) EndString() string {
return strconv.Itoa(region.GetEnd())
}
/* API METHODS */
// ReferenceNameRequested validates whether a real reference name has been requested
func (region *Region) ReferenceNameRequested() bool {
return !(region.GetReferenceName() == "")
}
// StartRequested validates whether a real start position has been requested
func (region *Region) StartRequested() bool {
if region.Start == nil {
return false
}
return !(region.GetStart() == -1)
}
// EndRequested validates whether a real end position has been requested
func (region *Region) EndRequested() bool {
if region.End == nil {
return false
}
return !(region.GetEnd() == -1)
}
// String gets a representation of a genomic region
func (region *Region) String() string {
if !region.StartRequested() && !region.EndRequested() {
return region.ReferenceName
}
if region.StartRequested() && !region.EndRequested() {
return region.ReferenceName + ":" + region.StartString()
}
if !region.StartRequested() && region.EndRequested() {
return region.ReferenceName + ":" + "0-" + region.EndString()
}
return region.ReferenceName + ":" + region.StartString() + "-" + region.EndString()
}
// ExportSamtools exports the region in a manner compatible to how region requests
// are specified on the samtools command-line
func (region *Region) ExportSamtools() string {
return region.String()
}
// ExportBcftools exports the region in a manner compatible to how region requests
// are specified on the samtools command-line
func (region *Region) ExportBcftools() string {
if !region.StartRequested() && !region.EndRequested() {
return region.ReferenceName
}
if region.StartRequested() && !region.EndRequested() {
return region.ReferenceName + ":" + region.StartString() + "-"
}
if !region.StartRequested() && region.EndRequested() {
return region.ReferenceName + ":" + "0-" + region.EndString()
}
return region.ReferenceName + ":" + region.StartString() + "-" + region.EndString()
}