wrnap 0.4.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/wrnap/global/rna.rb +3 -3
- data/lib/wrnap/global/rna/context.rb +101 -89
- data/lib/wrnap/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cced186ba484ebc70d540fe101ff4759d2eb3c47
|
4
|
+
data.tar.gz: 7fd6be4f1939b038711422c97a070baab330303c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c02bfb4374a250c235e9f31f35aad4fe495398e867f1584efe446fda114b873904864c165f7b19c13d129935df2b9f0037af8a7f17b14f04f896e306e57076fc
|
7
|
+
data.tar.gz: 37674ca85c4a31fe90dc97a032358735b7aad243a5a2507433ea227828170f9647ef4afa52fe9e22c96aae7353784714dd40d353fc6da47db1c3d2abf52a228a
|
data/lib/wrnap/global/rna.rb
CHANGED
@@ -44,8 +44,8 @@ module Wrnap
|
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
47
|
-
def init_from_context(context:
|
48
|
-
|
47
|
+
def init_from_context(*context, coords: {}, rna: {})
|
48
|
+
Context.init_from_entrez(*context, coords: coords, rna: rna)
|
49
49
|
end
|
50
50
|
|
51
51
|
def init_from_self(rna)
|
@@ -62,7 +62,7 @@ module Wrnap
|
|
62
62
|
end
|
63
63
|
|
64
64
|
def initialize(sequence: "", structure: "", second_structure: "", comment: "")
|
65
|
-
@sequence, @comment = sequence.kind_of?(Rna) ? sequence.seq : sequence, comment
|
65
|
+
@sequence, @comment = (sequence.kind_of?(Rna) ? sequence.seq : sequence).upcase, comment
|
66
66
|
|
67
67
|
[:structure, :second_structure].each do |structure_symbol|
|
68
68
|
instance_variable_set(
|
@@ -1,120 +1,132 @@
|
|
1
1
|
module Wrnap
|
2
2
|
module Global
|
3
|
-
class
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
3
|
+
class Rna
|
4
|
+
class Context < Rna
|
5
|
+
attr_reader :accession, :from, :to, :coord_options
|
6
|
+
|
7
|
+
class << self
|
8
|
+
def init_from_entrez(accession, from, to, options = {})
|
9
|
+
new(
|
10
|
+
accession: accession,
|
11
|
+
from: from,
|
12
|
+
to: to,
|
13
|
+
options: options
|
14
|
+
)
|
15
|
+
end
|
15
16
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
17
|
+
def init_from_string(sequence, accession, from, to, options = {})
|
18
|
+
new(
|
19
|
+
sequence: sequence,
|
20
|
+
accession: accession,
|
21
|
+
from: from,
|
22
|
+
to: to,
|
23
|
+
options: options
|
24
|
+
)
|
25
|
+
end
|
24
26
|
end
|
25
|
-
end
|
26
27
|
|
27
|
-
|
28
|
-
|
28
|
+
def initialize(sequence: nil, accession: nil, from: nil, to: nil, options: {})
|
29
|
+
options = { coords: {}, rna: {} }.merge(options)
|
29
30
|
|
30
|
-
|
31
|
+
@accession, @from, @to, @coord_options = accession, from, to, options[:coords]
|
31
32
|
|
32
|
-
|
33
|
-
@raw_sequence = (sequence.is_a?(String) ? Bio::Sequence::NA.new(sequence) : sequence).upcase
|
34
|
-
end
|
35
|
-
end
|
33
|
+
validate_coord_options
|
36
34
|
|
37
|
-
|
38
|
-
|
39
|
-
unless coord_options.keys == Set.new(%i|direction length|)
|
40
|
-
raise ArgumentError.new("coord_options keys must contain only :direction, :length, found: %s" % coord_options.keys)
|
35
|
+
if sequence
|
36
|
+
@raw_sequence = (sequence.is_a?(String) ? Bio::Sequence::NA.new(sequence) : sequence).upcase
|
41
37
|
end
|
42
38
|
|
43
|
-
|
44
|
-
|
45
|
-
|
39
|
+
super({
|
40
|
+
sequence: self.sequence,
|
41
|
+
structure: options[:rna][:structure] || options[:rna][:str_1] || options[:rna][:str],
|
42
|
+
second_structure: options[:rna][:second_structure] || options[:rna][:str_2],
|
43
|
+
comment: options[:rna][:comment] || options[:rna][:name]
|
44
|
+
})
|
46
45
|
|
47
|
-
|
48
|
-
raise ArgumentError.new("coord_options directions is not a valid key, found: %s" % direction)
|
49
|
-
end
|
46
|
+
remove_instance_variable(:@sequence)
|
50
47
|
end
|
51
|
-
end
|
52
48
|
|
53
|
-
|
54
|
-
|
55
|
-
|
49
|
+
def validate_coord_options
|
50
|
+
unless coord_options.empty?
|
51
|
+
unless Set.new(coord_options.keys) == Set.new(%i|direction length|)
|
52
|
+
raise ArgumentError.new("coord_options keys must contain only [:direction, :length], found: %s" % coord_options.keys)
|
53
|
+
end
|
56
54
|
|
57
|
-
|
58
|
-
|
59
|
-
|
55
|
+
unless (length = coord_options[:length]).is_a?(Integer) && length > 0
|
56
|
+
raise ArgumentError.new("coord_options length must be greater than 0, found: %d" % length)
|
57
|
+
end
|
60
58
|
|
61
|
-
|
62
|
-
|
63
|
-
|
59
|
+
unless [:up, :down, :both, 5, 3].include?(direction = coord_options[:direction])
|
60
|
+
raise ArgumentError.new("coord_options directions is not a valid key, found: %s" % direction)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
64
|
|
65
|
-
|
66
|
-
|
67
|
-
|
65
|
+
def up_coord
|
66
|
+
[from, to].min
|
67
|
+
end
|
68
68
|
|
69
|
-
|
70
|
-
|
71
|
-
|
69
|
+
def down_coord
|
70
|
+
[from, to].max
|
71
|
+
end
|
72
72
|
|
73
|
-
|
74
|
-
|
75
|
-
|
73
|
+
def seq_from
|
74
|
+
up_coord + coord_window.min
|
75
|
+
end
|
76
76
|
|
77
|
-
|
78
|
-
|
79
|
-
|
77
|
+
def seq_to
|
78
|
+
up_coord + coord_window.max
|
79
|
+
end
|
80
80
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
end
|
81
|
+
def strand
|
82
|
+
plus_strand? ? :plus : :minus
|
83
|
+
end
|
85
84
|
|
86
|
-
|
85
|
+
def plus_strand?
|
86
|
+
to > from
|
87
|
+
end
|
87
88
|
|
88
|
-
|
89
|
-
|
90
|
-
@coord_options = coord_options unless coord_options.empty?
|
91
|
-
validate_coord_options
|
92
|
-
@extended = true
|
93
|
-
remove_instance_variable(:@raw_sequence)
|
89
|
+
def minus_strand?
|
90
|
+
!plus_strand?
|
94
91
|
end
|
95
|
-
end
|
96
92
|
|
97
|
-
|
98
|
-
|
99
|
-
|
93
|
+
def sequence
|
94
|
+
if @raw_sequence
|
95
|
+
@raw_sequence
|
96
|
+
else
|
97
|
+
entrez_sequence = Entrez.rna_sequence_from_entrez(accession, up_coord, coord_window)
|
98
|
+
@raw_sequence = (minus_strand? ? entrez_sequence.complement : entrez_sequence).upcase
|
99
|
+
end
|
100
|
+
end
|
100
101
|
|
101
|
-
|
102
|
-
# This does not support extending the range in both directions, though it should be easy to do.
|
103
|
-
# Options from coord_options ex: { length: 300, direction: 3 }, { length: 250, direction: :both }, { length: 200, direction: :down }
|
104
|
-
range = 0..(down_coord - up_coord)
|
102
|
+
alias :seq :sequence
|
105
103
|
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
104
|
+
def extend!(coord_options = {})
|
105
|
+
self.class.init_from_entrez(accession, from, to, coords: coord_options)
|
106
|
+
end
|
107
|
+
|
108
|
+
def coord_window
|
109
|
+
# This does not support extending the range in both directions, though it should be easy to do.
|
110
|
+
# Options from coord_options ex: { length: 300, direction: 3 }, { length: 250, direction: :both }, { length: 200, direction: :down }
|
111
|
+
range = 0..(down_coord - up_coord)
|
112
|
+
|
113
|
+
if coord_options[:length] && coord_options[:direction]
|
114
|
+
if coord_options[:direction] == :both
|
115
|
+
Range.new(range.min - coord_options[:length], range.max + coord_options[:length])
|
116
|
+
else
|
117
|
+
case [coord_options[:direction], strand]
|
118
|
+
when [3, :plus], [:down, :plus], [5, :minus], [:up, :minus] then Range.new(range.min, range.max + coord_options[:length])
|
119
|
+
when [5, :plus], [:up, :plus], [3, :minus], [:down, :minus] then Range.new(range.min - coord_options[:length], range.max)
|
120
|
+
else Wrnap.debugger { "WARNING: value for :direction key in sequence retreival needs to be one of 5, 3, :both - found (%s)" % coord_options[:direction].inspect }
|
121
|
+
end
|
114
122
|
end
|
123
|
+
else
|
124
|
+
range
|
115
125
|
end
|
116
|
-
|
117
|
-
|
126
|
+
end
|
127
|
+
|
128
|
+
def inspect
|
129
|
+
super.gsub(/((\w(::)?)+)>$/) { |_| "%s %d %s %d %s>" % [accession, from, plus_strand? ? ?+ : ?-, to, $1] }
|
118
130
|
end
|
119
131
|
end
|
120
132
|
end
|
data/lib/wrnap/version.rb
CHANGED