Module: RecoverMid

Defined in:
lib/seqtrimnext/utils/recover_mid.rb

Instance Method Summary collapse

Instance Method Details

#recover_mid(hit, db_mid, seq) ⇒ Object

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



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# 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