X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=bp_bin%2Fremove_primers;h=1f7b7b216ab3fc9f089848b9303771d62d36a77f;hb=0eaab8705c6261ef41411e8e4b146e9d407e588e;hp=9c8457ccb527bd50281e2a202dc47ae1003959f6;hpb=a58032461bec4031795378d32a5a389e6f98a59f;p=biopieces.git diff --git a/bp_bin/remove_primers b/bp_bin/remove_primers index 9c8457c..1f7b7b2 100755 --- a/bp_bin/remove_primers +++ b/bp_bin/remove_primers @@ -32,6 +32,9 @@ require 'pp' require 'maasha/biopieces' require 'maasha/seq' +require 'maasha/seq/backtrack' + +include BackTrack casts = [] casts << {:long=>'forward', :short=>'f', :type=>'string', :mandatory=>true, :default=>nil, :allowed=>nil, :disallowed=>nil} @@ -44,31 +47,36 @@ options = Biopieces.options_parse(ARGV, casts) Biopieces.open(options[:stream_in], options[:stream_out]) do |input, output| input.each do |record| - if record.has_key? :SEQ + if record[:SEQ] + forward = false + reverse = false seq = Seq.new_bp(record) - pos = 0 - len = 0 - if forward = seq.patscan(options[:forward].to_s, pos, options[:mismatches], options[:insertions], options[:deletions]) - record[:FORWARD_POS] = forward.last.pos - record[:FORWARD_LEN] = forward.last.length - pos = forward.last.pos + forward.last.length + seq.patscan(options[:forward].to_s, 0, options[:mismatches], options[:insertions], options[:deletions]) do |match| + record[:FORWARD_POS] = match.pos + record[:FORWARD_LEN] = match.length + pos = match.pos + match.length len = seq.length - pos seq.subseq!(pos, len) if len > 0 + forward = true + break end - if pos < seq.length && reverse = seq.patscan(options[:reverse].to_s, pos, options[:mismatches], options[:insertions], options[:deletions]) - record[:REVERSE_POS] = reverse.first.pos - record[:REVERSE_LEN] = reverse.first.length + seq.patscan(options[:reverse].to_s, 0, options[:mismatches], options[:insertions], options[:deletions]) do |match| + record[:REVERSE_POS] = match.pos + record[:REVERSE_LEN] = match.length pos = 0 - len = reverse.first.pos + len = match.pos if len == 0 seq.seq = "" seq.qual = "" if seq.qual else seq.subseq!(pos, len) - end + end + + reverse = true + break end if forward or reverse