module RecoverMid

Public Instance Methods

recover_mid(hit, db_mid, seq) click to toggle source

receives hit of mid from blast, complete db_mid from DB and SEQ_fasta

# File lib/seqtrimnext/utils/recover_mid.rb, line 4
def recover_mid(hit, db_mid, seq)

  mid_in_seq = seq[hit.q_beg..hit.q_end]  
  mid_in_mid = db_mid[hit.s_beg..hit.s_end]

              if hit.s_beg==0 # look right parts
      
                      mid_part=db_mid[hit.s_end+1..db_mid.length]
               seq_part=seq[hit.q_end+1,mid_part.length+1]
               
               common=mid_part.lcs(seq_part)
               
               
               in_seq_pos=seq_part.index(common)
                        
      # puts "seq right part: #{seq_part}, mid right part #{mid_part} => Match: #{common}"
              
               if in_seq_pos>1 #

        # puts "NO VALE, comienza en #{in_seq_pos}"
                 in_seq_pos=0
                        common=''
                    end

                      new_q_beg=hit.q_beg
                      new_q_end=hit.q_end+in_seq_pos+common.length
                      recovered_mid=seq[new_q_beg..new_q_end]

                      recovered_size=hit.q_end-hit.q_beg+1+common.length

              
              else hit.s_end == db_mid.length-1#look left parts
                      mid_part=db_mid[0..hit.s_beg-1]
               seq_part=seq[hit.q_beg-mid_part.length-1..hit.q_beg-1]
               
               common=mid_part.lcs(seq_part)
               
               in_seq_pos=hit.q_beg-mid_part.length-1+seq_part.index(common)
                        
      # puts "seq left part: #{seq_part}, mid right part #{mid_part} => Match: #{common} at #{in_seq_pos}"
              
               if in_seq_pos+common.length<hit.q_beg-1 
        # puts "NO VALE, comienza en #{in_seq_pos+common.length} < #{hit.q_beg}"
                 in_seq_pos=hit.q_beg
                        common=''
                    end

                      new_q_beg=in_seq_pos
                      new_q_end=hit.q_end
                      recovered_mid=seq[new_q_beg..new_q_end]

                      recovered_size=hit.q_end-hit.q_beg+1+common.length
      
              end
              
              return [new_q_beg, new_q_end, recovered_size,recovered_mid]
      
      end