From d420e64b3869130bc8526ff2659da6fd35bc6548 Mon Sep 17 00:00:00 2001 From: gebele Date: Tue, 20 Sep 2016 15:18:10 +0000 Subject: changed for two model selection --- application.rb | 54 ++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 42 insertions(+), 12 deletions(-) (limited to 'application.rb') 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 -- cgit v1.2.3