summaryrefslogtreecommitdiff
path: root/application.rb
diff options
context:
space:
mode:
Diffstat (limited to 'application.rb')
-rw-r--r--application.rb54
1 files changed, 42 insertions, 12 deletions
diff --git a/application.rb b/application.rb
index 1f7fa00..98e502f 100644
--- a/application.rb
+++ b/application.rb
@@ -1,23 +1,29 @@
-require 'json'
require 'rdiscount'
-require_relative './nanoparticles.rb'
-
$ambit_search = "http://data.enanomapper.net/substance?type=name&search="
configure :development do
$logger = Logger.new(STDOUT)
end
+before do
+ @version = File.read("VERSION").chomp
+end
+
get '/?' do
redirect to('/predict')
end
get '/predict/?' do
- @version = File.read("VERSION").chomp
- data = JSON.parse(File.read("./data.json"))
- query_features = JSON.parse(File.read("./query-features.json"))
- @example = data[data.keys.sample]["physchem"].select{|f,v| query_features.include? f}
- #@json_example = JSON.pretty_generate(@example)
+ @prediction_models = []
+ prediction_models = OpenTox::Model::NanoPrediction.all
+ prediction_models.each{|m| m.model[:feature_selection_algorithm_parameters]["category"] == "P-CHEM" ? @prediction_models[0] = m : @prediction_models[1] = m}
+ @prediction_models.each_with_index{|m,idx| idx == 0 ? m[:pc_model] = true : m[:pcp_model] = true}
+ example = OpenTox::Nanoparticle.all.select{|n| n.core["name"] == "Au"}.sample
+ @example_pcp = example
+ example = OpenTox::Nanoparticle.all.select{|n| n.core["name"] == "Au"}.sample
+ example.physchem_descriptors.delete_if{|k,v| feature = OpenTox::Feature.find_by(:id => k); feature.category != "P-CHEM"}
+ @example_pc = example
+
haml :predict
end
@@ -27,10 +33,34 @@ get '/license' do
end
post '/predict/?' do
+ prediction_model = OpenTox::Model::NanoPrediction.find(params[:prediction_model])
size = params[:size].to_i
- @input = []
- (1..size).each{|i| @input << [params["input_key_#{i}"], params["input_value_#{i}"].to_f]}
- @params = Hash[*@input.flatten]
- @prediction = predict @params
+ example_pc = eval(params[:example_pc])
+ pc_descriptors = {}
+ (1..size).each{|i| pc_descriptors["#{params["input_key_#{i}"]}"] = [params["input_value_#{i}"].to_f]}
+ if example_pc == pc_descriptors
+ # unchanged input = database hit
+ nanoparticle = OpenTox::Nanoparticle.find_by(:id => params[:example_id])
+ nanoparticle.physchem_descriptors = pc_descriptors
+ else
+ # changed input = create nanoparticle to predict
+ nanoparticle = OpenTox::Nanoparticle.new
+ nanoparticle.core = eval(params[:core])
+ nanoparticle.coating = eval(params[:coating])
+ nanoparticle.physchem_descriptors = pc_descriptors
+ end
+ # output
+ @input = pc_descriptors
+ @prediction = prediction_model.model.predict_substance nanoparticle
+ @match = true,@nanoparticle = nanoparticle,@name = nanoparticle.name if @prediction[:warning] =~ /identical/
+ #@prediction[:neighbors].each do |n|
+ #puts n
+ #puts nano = OpenTox::Nanoparticle.find(n["_id"])
+ #puts nano.name
+ #puts n["similarity"]
+ #puts n["measurements"]
+ #puts nano.physchem_descriptors.delete_if{|k,v| feature = OpenTox::Feature.find_by(:id => k); feature.category != "P-CHEM"}.size
+ #end
+
haml :prediction
end