Module: ChimericSeqs
- Defined in:
- lib/full_lengther_next/classes/chimeric_seqs.rb
Instance Method Summary collapse
- #search_chimeras(seq, blast_query, options, db_name) ⇒ Object
- #select_best_blast(tmp_blast_obj, new_seqs) ⇒ Object
Instance Method Details
#search_chimeras(seq, blast_query, options, db_name) ⇒ Object
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 |
# File 'lib/full_lengther_next/classes/chimeric_seqs.rb', line 6 def search_chimeras(seq, blast_query, , db_name) # used to detect if the sequence and the blast are from different query if (seq.seq_name != blast_query.query_def) puts "#{seq.seq_name} --> #{blast_query.query_def}" raise "BLAST query name and sequence are different" end q=blast_query # puts "#{q.query_def}" ref_hit_beg = q.hits[0].q_beg ref_hit_end = q.hits[0].q_end q.hits.each do |hit| # puts "---------#{hit.acc}" # if overlaps or is contained in the ref hit if ((ref_hit_beg <= hit.q_beg) && (ref_hit_end > hit.q_beg)) || ((hit.q_beg <= ref_hit_beg) && (hit.q_end > ref_hit_beg)) # puts "hits overlapping: ref_hit #{ref_hit_beg}-#{ref_hit_end}, current hit #{hit.q_beg}-#{hit.q_end}" ref_hit_beg = [ref_hit_beg,hit.q_beg].min ref_hit_end = [ref_hit_end,hit.q_end].max # puts "modified ref_hit #{ref_hit_beg}-#{ref_hit_end}" end end q.hits.each do |hit| if ((ref_hit_beg <= hit.q_beg) && (ref_hit_end > hit.q_beg)) || ((hit.q_beg <= ref_hit_beg) && (hit.q_end > ref_hit_beg)) else if (hit.acc != q.hits[0].acc) # puts "\nreference: #{ref_hit_beg} - #{ref_hit_end}" # puts "hit 0: #{q.hits[0].q_beg} - #{q.hits[0].q_end}" # puts "current: #{hit.q_beg} - #{hit.q_end}" # puts "putative chimeric seq: \n#{q.hits[0].definition}\n#{hit.definition}\n------------------------------------------" chimera_annotations = "\n#{q.query_def}\t#{seq.fasta_length}\t#{q.hits[0].acc}\t#{db_name}\tPutative chimera\t\t#{q.hits[0].e_val}\t#{q.hits[0].ident}\t\t\tPutative chimera detected showing similarity with two different genes #{q.hits[0].acc} - #{hit.acc}\t#{q.hits[0].q_frame}\t#{q.hits[0].q_beg}\t#{q.hits[0].q_end}\t#{q.hits[0].s_beg.to_i}\t#{q.hits[0].s_end.to_i}\t#{q.hits[0].definition}\t\n#{q.query_def}\t#{seq.fasta_length}\t#{hit.acc}\t#{db_name}\tPutative chimera\t\t#{hit.e_val}\t#{hit.ident}\t\t\tPutative chimera detected showing similarity with two different genes #{q.hits[0].acc} - #{hit.acc}\t#{hit.q_frame}\t#{hit.q_beg}\t#{hit.q_end}\t#{hit.s_beg.to_i}\t#{hit.s_end.to_i}\t#{hit.definition}\t" seq.annotate(:chimera,chimera_annotations,false) end return end end end |
#select_best_blast(tmp_blast_obj, new_seqs) ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/full_lengther_next/classes/chimeric_seqs.rb', line 49 def select_best_blast(tmp_blast_obj, new_seqs) my_seqs ={} new_seqs.each do |seq| my_seqs[seq.seq_name] = true end reverse_counter = (tmp_blast_obj.querys.length - 1) tmp_blast_obj.querys.reverse_each do |query| if (!my_seqs[query.query_def]) # los marcados como quimeras se eliminan para no utilizarse posteriormente # tmp_blast_obj.querys[reverse_counter].delete tmp_blast_obj.querys.delete_at(reverse_counter) else reverse_hit_counter = (query.hits.length - 1) query.hits.reverse_each do |hit| if (hit.acc != query.hits[0].acc) tmp_blast_obj.querys[reverse_counter].hits.delete_at(reverse_hit_counter) end reverse_hit_counter -= 1 end end reverse_counter -= 1 end return tmp_blast_obj end |