lib/bio/db/primer3.rb in bio-polyploid-tools-0.4.7 vs lib/bio/db/primer3.rb in bio-polyploid-tools-0.5.0

- old
+ new

@@ -20,13 +20,13 @@ opts = { :primer_product_size_range => "50-150" , :primer_max_size => 25 , :primer_lib_ambiguity_codes_consensus => 1, :primer_liberal_base => 1, - :primer_num_return=>5, - :primer_thermodynamic_parameters_path=>File.expand_path(File.dirname(__FILE__) + '../../../../conf/primer3_config/') + '/' - + :primer_num_return => 5, + :primer_explain_flag => 1, + :primer_thermodynamic_parameters_path => File.expand_path(File.dirname(__FILE__) + '../../../../conf/primer3_config/') + '/' }.merge(opts2) opts.each do |key,value| file.puts "#{key.to_s.upcase}=#{value}\n" end @@ -65,11 +65,12 @@ end def initialize @primers_line_1 = SortedSet.new @primers_line_2 = SortedSet.new - @reguibs = SortedSet.new + @regions = SortedSet.new + @primer3_errors = Set.new end def line_2_name "#{gene}:#{position}#{original}>#{snp} #{line_2}}" end @@ -110,15 +111,11 @@ #TODO: Retrieve error messages left_start = 0 left_end = 0 right_start = 0 right_end = 0 - # exons = snp_from.exon_list.values - -# puts "Exons: #{exon_list.size}" - -# puts "It has the following exons: #{snp_in.exon_list.to_s}" + total_columns_before_messages=17 values = Array.new #values << "#{gene},,#{template_length}," values << gene values << "#{original}#{position}#{snp}" values << template_length @@ -240,10 +237,16 @@ values << primer3_line_2.best_pair.right.tm values << "second+" values << primer3_line_2.best_pair.product_size end + if values.size < total_columns_before_messages + values[total_columns_before_messages] = primer3_errors.to_a.join("|") + else + values << nil + end + values.join(",") end def self.parse(reg_str) reg_str.chomp! @@ -266,17 +269,18 @@ end end def add_record(primer3record) - @primer3_errors = Array.new unless @primer3_errors + @primer3_errors = Set.new unless @primer3_errors @template_length = primer3record.sequence_template.size if primer3record.primer_error != nil - primer3_errors << primer3record + primer3_errors << primer3record.primer_error return end case + when primer3record.line == @line_1 @line_1_template = primer3record.sequence_template when primer3record.line == @line_2 @@ -295,10 +299,14 @@ primers_line_2 << primer3record @primer3_line_2 = primer3record if not @primer3_line_2 or @primer3_line_2 > primer3record else raise Primer3Exception.new "#{primer3record.line} is not recognized (#{line_1}, #{line_2})" end + else + primer3_errors << "#{primer3record.line}(#{primer3record.orientation}):#{primer3record.primer_left_explain}" + primer3_errors << "common(#{primer3record.orientation}#{primer3record.type}):#{primer3record.primer_right_explain}" + primer3_errors << "pair(#{primer3record.orientation}#{primer3record.type}):#{primer3record.primer_pair_explain}" end end end class Primer3Record @@ -325,11 +333,12 @@ def method_missing(method_name, *args) return @properties[method_name] if @properties[method_name] $stderr.puts "Missing #{method_name}" $stderr.puts @properties.inspect - raise NoMethodError.new() + return "" #if a property is missing, return blank. + #raise NoMethodError.new() end def find_left_tm(primer) last = size - 1 (0..last).each do | i | @@ -663,40 +672,30 @@ snp.original = snp_in.original snp.position = snp_in.position snp.snp = snp_in.snp -# snp.original.upcase! -# snp.snp.upcase! snp.line_1 = @line_1 snp.line_2 = @line_2 snp.snp_from = snp_in - #puts "Kasp container, adding #{snp.to_s} #{snp.class} #{snp_in.class}" - #puts "#{snp.regions}" snp.regions = snp_in.exon_list.values.collect { |x| x.target_region.to_s } - #puts "#{snp.regions}" @snp_hash[snp.to_s] = snp snp end def add_primers_file(filename) Primer3Record.parse_file(filename) do | primer3record | - # puts "#{primer3record.snp.to_s}:#{primer3record.chromosome}" - # puts @snp_hash.keys.to_s current_snp = @snp_hash["#{primer3record.snp.to_s}:#{primer3record.chromosome}"] current_snp.add_record(primer3record) - end end def print_primers str = "" snp_hash.each do |k, snp| str << snp.print_primers << "\n" end return str end - end - end