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