3 require 'maasha/align/match'
6 def self.find(q_seq, s_seq, kmer, q_space_beg, s_space_beg, q_space_end, s_space_end)
7 m = self.new(q_seq, s_seq, kmer, q_space_beg, s_space_beg, q_space_end, s_space_end)
11 def initialize(q_seq, s_seq, kmer, q_space_beg, s_space_beg, q_space_end, s_space_end)
12 @q_seq = q_seq.downcase
13 @s_seq = s_seq.downcase
15 @q_space_beg = q_space_beg
16 @s_space_beg = s_space_beg
17 @q_space_end = q_space_end
18 @s_space_end = s_space_end
22 mask = (1 << (2 * @kmer)) - 1;
28 index_seq(@q_seq, @q_space_beg, @q_space_end, @kmer, pos_ary, map_ary)
33 while i < @s_space_beg + @kmer
37 when 'a' then bin |= 0
38 when 't' then bin |= 1
39 when 'u' then bin |= 1
40 when 'c' then bin |= 2
41 when 'g' then bin |= 3
49 i = @s_space_beg + @kmer
51 while i <= @s_space_end
52 pos = pos_ary[bin & mask]
55 match = Match.new(i - @kmer, pos, @kmer)
57 unless redundant[match.q_beg * 1_000_000_000 + match.s_beg]
58 match.expand(@q_seq, @s_seq, 0, 0, @q_seq.length - 1, @s_seq.length - 1)
60 (0 ... match.length).each do |j|
61 redundant[(match.q_beg + j) * 1_000_000_000 + match.s_beg + j] = true
73 when 'a' then bin |= 0
74 when 't' then bin |= 1
75 when 'u' then bin |= 1
76 when 'c' then bin |= 2
77 when 'g' then bin |= 3
85 pos = pos_ary[bin & mask]
88 match = Match.new(i - @kmer, pos, @kmer)
90 unless redundant[match.q_beg * 1_000_000_000 + match.s_beg]
91 match.expand(@q_seq, @s_seq, 0, 0, @q_seq.length - 1, @s_seq.length - 1)
93 (0 ... match.length).each do |j|
94 redundant[(match.q_beg + j) * 1_000_000_000 + match.s_beg + j] = true
106 def index_seq(seq, start, stop, kmer, pos_ary, map_ary)
108 mask = (1 << (2 * kmer)) - 1;
112 while i < start + kmer
116 when 'a' then bin |= 0
117 when 't' then bin |= 1
118 when 'u' then bin |= 1
119 when 'c' then bin |= 2
120 when 'g' then bin |= 3
131 map_ary[i - kmer] = pos_ary[key]
132 pos_ary[key] = i - kmer
137 when 'a' then bin |= 0
138 when 't' then bin |= 1
139 when 'u' then bin |= 1
140 when 'c' then bin |= 2
141 when 'g' then bin |= 3
151 map_ary[i - kmer] = pos_ary[key]
152 pos_ary[key] = i - kmer