summaryrefslogtreecommitdiff
path: root/helper.rb
diff options
context:
space:
mode:
authorgebele <gebele@in-silico.ch>2018-11-26 15:29:26 +0000
committergebele <gebele@in-silico.ch>2018-11-26 15:29:26 +0000
commit9750e0309500259e9a56e267ce87984fb5bb5e53 (patch)
tree17db0a8246578729e5309ef3bf4f71404c3f7479 /helper.rb
parente3ae34a75ed7a503078c3c2cdf95f1500d6e2b73 (diff)
clean out; better response codes; prepare for batch
Diffstat (limited to 'helper.rb')
-rw-r--r--helper.rb129
1 files changed, 128 insertions, 1 deletions
diff --git a/helper.rb b/helper.rb
index 54dbd5e..1c1db5f 100644
--- a/helper.rb
+++ b/helper.rb
@@ -1,3 +1,130 @@
helpers do
-
+
+ def embedded_svg image, options={}
+ doc = Nokogiri::HTML::DocumentFragment.parse image
+ svg = doc.at_css 'svg'
+ title = doc.at_css 'title'
+ if options[:class].present?
+ svg['class'] = options[:class]
+ end
+ if options[:title].present?
+ title.children.remove
+ text_node = Nokogiri::XML::Text.new(options[:title], doc)
+ title.add_child(text_node)
+ end
+ doc.to_html.html_safe
+ end
+
+ def prediction_to_csv(m,c,p)
+ model = m
+ model_name = "#{model.endpoint.gsub('_', ' ')} (#{model.species})"
+ model_unit = model.regression? ? "(#{model.unit})" : ""
+ converted_model_unit = model.regression? ? "#{model.unit =~ /\b(mmol\/L)\b/ ? "(mg/L)" : "(mg/kg_bw/day)"}" : ""
+
+ csv = ""
+ compound = c
+ prediction = p
+ output = {}
+ line = ""
+ output["model_name"] = model_name
+ output["model_unit"] = model_unit
+ output["converted_model_unit"] = converted_model_unit
+
+ if prediction[:value]
+ inApp = (prediction[:warnings].join(" ") =~ /Cannot/ ? "no" : (prediction[:warnings].join(" ") =~ /may|Insufficient|Weighted/ ? "maybe" : "yes"))
+ if prediction[:info] =~ /\b(identical)\b/i
+ prediction[:info] = "This compound was part of the training dataset. All information "\
+ "from this compound was removed from the training data before the "\
+ "prediction to obtain unbiased results."
+ end
+ note = "\"#{prediction[:warnings].uniq.join(" ")}\""
+
+ output["prediction_value"] = model.regression? ? "#{prediction[:value].delog10.signif(3)}" : "#{prediction[:value]}"
+ output["converted_value"] = model.regression? ? "#{compound.mmol_to_mg(prediction[:value].delog10).signif(3)}" : nil
+
+ if prediction[:measurements].is_a?(Array)
+ output["measurements"] = model.regression? ? prediction[:measurements].collect{|value| "#{value.delog10.signif(3)}"} : prediction[:measurements].collect{|value| "#{value}"}
+ output["converted_measurements"] = model.regression? ? prediction[:measurements].collect{|value| "#{compound.mmol_to_mg(value.delog10).signif(3)}"} : false
+ else
+ output["measurements"] = model.regression? ? "#{prediction[:measurements].delog10.signif(3)}" : "#{prediction[:measurements]}"
+ output["converted_measurements"] = model.regression? ? "#{compound.mmol_to_mg(prediction[:measurements].delog10).signif(3)}" : false
+
+ end #db_hit
+
+ if model.regression?
+
+ if !prediction[:prediction_interval].blank?
+ interval = prediction[:prediction_interval]
+ output['interval'] = []
+ output['converted_interval'] = []
+ output['interval'] << interval[1].delog10.signif(3)
+ output['interval'] << interval[0].delog10.signif(3)
+ output['converted_interval'] << compound.mmol_to_mg(interval[1].delog10).signif(3)
+ output['converted_interval'] << compound.mmol_to_mg(interval[0].delog10).signif(3)
+ end #prediction interval
+
+ line += "#{output['model_name']},#{compound.smiles},"\
+ "\"#{prediction[:info] ? prediction[:info] : "no"}\",\"#{output['measurements'].join("; ") if prediction[:info]}\","\
+ "#{!output['prediction_value'].blank? ? output['prediction_value'] : ""},"\
+ "#{!output['converted_value'].blank? ? output['converted_value'] : ""},"\
+ "#{!prediction[:prediction_interval].blank? ? output['interval'].first : ""},"\
+ "#{!prediction[:prediction_interval].blank? ? output['interval'].last : ""},"\
+ "#{!prediction[:prediction_interval].blank? ? output['converted_interval'].first : ""},"\
+ "#{!prediction[:prediction_interval].blank? ? output['converted_interval'].last : ""},"\
+ "#{inApp},#{note.nil? ? "" : note.chomp}\n"
+ else # Classification
+
+ if !prediction[:probabilities].blank?
+ output['probabilities'] = []
+ prediction[:probabilities].each{|k,v| output['probabilities'] << v.signif(3)}
+ end
+
+ line += "#{output['model_name']},#{compound.smiles},"\
+ "\"#{prediction[:info] ? prediction[:info] : "no"}\",\"#{output['measurements'].join("; ") if prediction[:info]}\","\
+ "#{output['prediction_value']},"\
+ "#{!prediction[:probabilities].blank? ? output['probabilities'].first : ""},"\
+ "#{!prediction[:probabilities].blank? ? output['probabilities'].last : ""},"\
+ "#{inApp},#{note.nil? ? "" : note}\n"
+
+ end
+
+ output['warnings'] = prediction[:warnings] if prediction[:warnings]
+
+ else #no prediction value
+ inApp = "no"
+ if prediction[:info] =~ /\b(identical)\b/i
+ prediction[:info] = "This compound was part of the training dataset. All information "\
+ "from this compound was removed from the training data before the "\
+ "prediction to obtain unbiased results."
+ end
+ note = "\"#{prediction[:warnings].join(" ")}\""
+
+ output['warnings'] = prediction[:warnings]
+ output['info'] = prediction[:info] if prediction[:info]
+
+ if model.regression?
+ line += "#{output['model_name']},#{compound.smiles},#{prediction[:info] ? prediction[:info] : "no"},"\
+ "#{prediction[:measurements].collect{|m| m.delog10.signif(3)}.join("; ") if prediction[:info]},,,,,,,"+ [inApp,note].join(",")+"\n"
+ else
+ line += "#{output['model_name']},#{compound.smiles},"\
+ "\"#{prediction[:info] ? prediction[:info] : "no"}\",\"#{output['measurements'].join("; ") if prediction[:info] && !output['measurements'].blank?}\","\
+ "#{output['prediction_value']},"\
+ "#{!prediction[:probabilities].blank? ? output['probabilities'].first : ""},"\
+ "#{!prediction[:probabilities].blank? ? output['probabilities'].last : ""},"\
+ "#{inApp},#{note.nil? ? "" : note}\n"
+ end
+
+ end
+ csv += line
+ # output
+ csv
+ end
+
+ def dataset_storage
+ all = Batch.where(:source => /^tmp/)
+ out = Hash.new
+ all.reverse.each{|d| out[d.id] = [d.name, d.created_at]}
+ out
+ end
+
end