X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=code_ruby%2Flib%2Fmaasha%2Fseq%2Fbacktrack.rb;h=8a2fb12632585208fa1af9eda27ce6df36243336;hb=b75be26637f894573f1dbf5ebe31c5d651a4bb83;hp=ead956e894661be6f3bb31e08ccbfe9ec45626f0;hpb=0947b49340ee1a3618b1791a8f3a68fc6d354e19;p=biopieces.git diff --git a/code_ruby/lib/maasha/seq/backtrack.rb b/code_ruby/lib/maasha/seq/backtrack.rb index ead956e..8a2fb12 100644 --- a/code_ruby/lib/maasha/seq/backtrack.rb +++ b/code_ruby/lib/maasha/seq/backtrack.rb @@ -23,6 +23,7 @@ # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< require 'inline' # RubyInline +require 'maasha/seq/ambiguity' # Error class for all exceptions to do with BackTrack. class BackTrackError < StandardError; end @@ -35,6 +36,8 @@ class BackTrackError < StandardError; end # Algorithm based on code kindly provided by j_random_hacker @ Stackoverflow: # http://stackoverflow.com/questions/7557017/approximate-string-matching-using-backtracking/ module BackTrack + extend Ambiguity + OK_PATTERN = Regexp.new('^[bflsycwphqrimtnkvadegu]+$') MAX_MIS = 5 # Maximum number of mismatches allowed MAX_INS = 5 # Maximum number of insertions allowed @@ -122,34 +125,7 @@ module BackTrack private inline do |builder| - # Macro for matching nucleotides including ambiguity codes. - builder.prefix %{ - #define MATCH(A,B) ((bitmap[A] & bitmap[B]) != 0) - } - - # Bitmap for matching nucleotides including ambiguity codes. - # For each value bits are set from the left: bit pos 1 for A, - # bit pos 2 for T, bit pos 3 for C, and bit pos 4 for G. - builder.prefix %{ - char bitmap[256] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1,14, 4,11, 0, 0, 8, 7, 0, 0,10, 0, 5,15, 0, - 0, 0, 9,12, 2, 2,13, 3, 0, 6, 0, 0, 0, 0, 0, 0, - 0, 1,14, 4,11, 0, 0, 8, 7, 0, 0,10, 0, 5,15, 0, - 0, 0, 9,12, 2, 2,13, 3, 0, 6, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - }; - } + add_ambiguity_macro(builder) # Backtrack algorithm for matching a pattern (p) starting in a sequence (s) allowing for mis # mismatches, ins insertions and del deletions. ss is the start of the sequence, used only for