summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgebele <gebele@in-silico.ch>2017-01-13 15:04:46 +0000
committergebele <gebele@in-silico.ch>2017-01-13 15:04:46 +0000
commitfcb94479ed43c2eefda9a487f887c2629da813c7 (patch)
tree688f4d8ab82997bb917334bb33ff484d656ddb88
parent8ebb06ddc85b38cd6ec71d81f55b800fd5825c15 (diff)
update for version 1.0.0; added fingerprint model and prediction
-rw-r--r--VERSION2
-rw-r--r--application.rb135
-rw-r--r--nano-lazar.gemspec2
-rw-r--r--views/predict.haml194
-rw-r--r--views/prediction.haml74
5 files changed, 268 insertions, 139 deletions
diff --git a/VERSION b/VERSION
index 81340c7..3eefcb9 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-0.0.4
+1.0.0
diff --git a/application.rb b/application.rb
index baba620..3e7dfc2 100644
--- a/application.rb
+++ b/application.rb
@@ -5,6 +5,11 @@ $ambit_search = "http://data.enanomapper.net/substance?type=name&search="
include OpenTox
+# collect nanoparticles from training dataset (Au + Ag)
+dataset = Dataset.find_by(:name=> "Protein Corona Fingerprinting Predicts the Cellular Interaction of Gold and Silver Nanoparticles")
+$nanoparticles = dataset.nanoparticles
+$coating_list = $nanoparticles.collect{|n| n if !n.coating[0].smiles.nil?}.compact.uniq
+
configure :development do
#$logger = Logger.new(STDOUT)
end
@@ -18,7 +23,7 @@ get '/?' do
end
#=begin
get '/qmrf-report/:id' do
- prediction_model = Model::NanoPrediction.find(params[:id])
+ prediction_model = OpenTox::Model::Validation.find(params[:id])
if prediction_model
model = prediction_model.model
model_type = "regression"
@@ -74,24 +79,35 @@ end
#=end
get '/predict/?' do
@prediction_models = []
- prediction_models = Model::NanoPrediction.all
- prediction_models.each{|m| m.model[:algorithms]["descriptors"]["categories"] == ["P-CHEM"] ? @prediction_models[0] = m : @prediction_models[1] = m}
- # define type (pc or pcp)
- @prediction_models.each_with_index{|m,idx| idx == 0 ? m[:pc_model] = true : m[:pcp_model] = true}
- # collect nanoparticles by training dataset (Ag + Au)
- dataset = Dataset.find_by(:name=> "Protein Corona Fingerprinting Predicts the Cellular Interaction of Gold and Silver Nanoparticles")
- nanoparticles = dataset.nanoparticles
+ models = OpenTox::Model::Validation.all
+ prediction_models = models.delete_if{|m| m.model.name !~ /\b(Net cell association)\b/}
+
+ # sort and collect prediction models
+ @prediction_models[0] = prediction_models.find{|m| m.model[:algorithms]["descriptors"]["method"] == "fingerprint"}
+ @prediction_models[1] = prediction_models.delete_if{|m| m.model[:algorithms]["descriptors"]["method"] == "fingerprint"}.find{|m| m.model[:algorithms]["descriptors"]["categories"][0] =~ /P-CHEM/}
+ @prediction_models[2] = prediction_models.find{|m| m.model[:algorithms]["descriptors"]["categories"][0] == "Proteomics"}
+
+ # define type (fingerprint,physchem,proteomics)
+ @prediction_models[0]["type"] = "fingerprint"
+ @prediction_models[1]["type"] = "physchem"
+ @prediction_models[2]["type"] = "proteomics"
+
+ # select relevant features for each model
+ @fingerprint_relevant_features = @prediction_models[0].model.substance_ids.collect{|id| Substance.find(id)}
+ fingerprint = $coating_list.sample
+ fingerprint.properties.delete_if{|id,v| !@fingerprint_relevant_features.include?(Feature.find(id))}
+ @example_fingerprint = fingerprint
- # select physchem_parameters by relevant features for each model
- @pc_relevant_features = @prediction_models[0].model.descriptor_ids.collect{|id, v| Feature.find(id)}
- @pcp_relevant_features = @prediction_models[1].model.descriptor_ids.collect{|id, v| Feature.find(id)}
- pcp = nanoparticles.sample
- pcp.properties.delete_if{|id,v| !@pcp_relevant_features.include?(Feature.find(id))}
- @example_pcp = pcp
+ @physchem_relevant_features = @prediction_models[1].model.descriptor_ids.collect{|id, v| Feature.find(id)}
+ physchem = $nanoparticles.sample
+ physchem.properties.delete_if{|id,v| !@physchem_relevant_features.include?(Feature.find(id))}
+ @example_physchem = physchem
+
+ @proteomics_relevant_features = @prediction_models[2].model.descriptor_ids.collect{|id, v| Feature.find(id)}
+ proteomics = $nanoparticles.sample
+ proteomics.properties.delete_if{|id,v| !@proteomics_relevant_features.include?(Feature.find(id))}
+ @example_proteomics = proteomics
- pc = nanoparticles.sample
- pc.properties.delete_if{|id,v| !@pc_relevant_features.include?(Feature.find(id))}
- @example_pc = pc
haml :predict
end
@@ -102,50 +118,69 @@ get '/license' do
end
post '/predict/?' do
- # choose the right prediction model
- prediction_model = Model::NanoPrediction.find(params[:prediction_model])
+ # select the prediction model
+ prediction_model = OpenTox::Model::Validation.find(params[:prediction_model])
size = params[:size].to_i
@type = params[:type]
- example_core = eval(params[:example_core])
- example_coating = eval(params[:example_coating])
+ example_core = params[:example_core]
+ example_coating = params[:example_coating]
example_pc = eval(params[:example_pc])
-
- in_core = eval(params[:in_core])
- in_core["name"] = params[:input_core]
- input_core = in_core
-
- in_coating = eval(params[:in_coating])
- in_coating[0]["name"] = params[:input_coating]
- input_coating = in_coating
+
+ input_core = params[:input_core]
+ input_coating = params[:input_coating]
input_pc = {}
- (1..size).each{|i| input_pc["#{params["input_key_#{i}"]}"] = [params["input_value_#{i}"].to_f] unless params["input_value_#{i}"] == "-"}
-
+ if @type =~ /physchem|proteomics/
+ (1..size).each{|i| input_pc["#{params["input_key_#{i}"]}"] = [params["input_value_#{i}"].to_f] unless params["input_value_#{i}"] == ""}
+ end
# define relevant_features by input
- @type = "pc" ? (@pc_relevant_features = input_pc.collect{|id,v| Feature.find(id)}) : (@pc_relevant_features = [])
- @type = "pcp" ? (@pcp_relevant_features = input_pc.collect{|id,v| Feature.find(id)}) : (@pcp_relevant_features = [])
-
- if input_pc == example_pc && input_core == example_core && input_coating == example_coating
- # unchanged input = database hit
- nanoparticle = Nanoparticle.find_by(:id => params[:example_id])
- nanoparticle.properties = input_pc
- @match = true
- @nanoparticle = nanoparticle
- @name = nanoparticle.name
- else
- # changed input = create nanoparticle to predict
- nanoparticle = Nanoparticle.new
- nanoparticle.core = input_core
- nanoparticle.coating = input_coating
- nanoparticle.properties = input_pc
- @match = false
- @nanoparticle = nanoparticle
+ (@type == "fingerprint") ? (@fingerprint_relevant_features = input_pc.collect{|id,v| Feature.find(id)}) : (@physchem_relevant_features = [])
+ (@type == "physchem") ? (@physchem_relevant_features = input_pc.collect{|id,v| Feature.find(id)}) : (@physchem_relevant_features = [])
+ (@type == "proteomics") ? (@proteomics_relevant_features = input_pc.collect{|id,v| Feature.find(id)}) : (@proteomics_relevant_features = [])
+
+
+ if @type =~ /physchem|proteomics/
+ if input_pc == example_pc && input_core == example_core && input_coating == example_coating
+ # unchanged input = database hit
+ nanoparticle = Nanoparticle.find_by(:id => params[:example_id])
+ nanoparticle.properties = input_pc
+ @match = true
+ @nanoparticle = nanoparticle
+ @name = nanoparticle.name
+ else
+ # changed input = create nanoparticle to predict
+ nanoparticle = Nanoparticle.new
+ nanoparticle.core_id = Compound.find_by(:name=>input_core).id.to_s
+ nanoparticle.coating_ids = [Compound.find_by(:name=>input_coating).id.to_s]
+ nanoparticle.properties = input_pc
+ @match = false
+ @nanoparticle = nanoparticle
+ end
+ end
+
+ if @type == "fingerprint"
+ if input_core == example_core && input_coating == example_coating
+ # unchanged input = database hit
+ nanoparticle = Nanoparticle.find_by(:id => params[:example_id])
+ #nanoparticle.properties = input_pc
+ @match = true
+ @nanoparticle = nanoparticle
+ @name = nanoparticle.name
+ else
+ # changed input = create nanoparticle to predict
+ nanoparticle = Nanoparticle.new
+ nanoparticle.core_id = Compound.find_by(:name=>input_core).id.to_s
+ nanoparticle.coating_ids = [Compound.find_by(:name=>input_coating).id.to_s]
+ @match = false
+ @nanoparticle = nanoparticle
+ end
end
+
+
# prediction output
@input = input_pc
@prediction = prediction_model.model.predict nanoparticle
-
haml :prediction
end
diff --git a/nano-lazar.gemspec b/nano-lazar.gemspec
index f3ec373..e0153c3 100644
--- a/nano-lazar.gemspec
+++ b/nano-lazar.gemspec
@@ -20,7 +20,7 @@ Gem::Specification.new do |s|
s.add_runtime_dependency "rdiscount"
s.add_runtime_dependency "haml"
s.add_runtime_dependency "unicorn"
- s.add_runtime_dependency "gem-path", "~> 0.6.1", '>= 0.6.1'
+ s.add_runtime_dependency "gem-path"
s.post_install_message = %q{
How to build nano-lazar prediction models described over here: https://github.com/opentox/lazar-public-data .
diff --git a/views/predict.haml b/views/predict.haml
index 7819698..e54f8b4 100644
--- a/views/predict.haml
+++ b/views/predict.haml
@@ -3,6 +3,7 @@
$("img.circle").show();
};
+
%div.well
%h3.help-block
Select an endpoint:
@@ -11,10 +12,23 @@
- @prediction_models.each_with_index do |m, idx|
%li{:class => ("active" if idx == 0)}
%a{:href => "#model_#{idx}", :id => "linkTab#{idx}", data: {toggle:"tab"}}
- = "#{idx+1}. #{m[:pcp_model] ? "Physchem & Proteomics" : "Physchem" }"
+ = "#{idx+1}. #{m["type"].capitalize}"
%div.tab-content
- @prediction_models.each_with_index do |m, idx|
- - m[:pc_model] ? (example = @example_pc; type = "pc"; relevant_features = @pc_relevant_features) : (example = @example_pcp; type = "pcp"; relevant_features = @pcp_relevant_features)
+ - case m["type"]
+ - when "fingerprint"
+ - example = @example_fingerprint
+ - type = "fingerprint"
+ - relevant_features = @fingerprint_relevant_features
+ - when "physchem"
+ - example = @example_physchem
+ - type = "physchem"
+ - relevant_features = @physchem_relevant_features
+ - when "proteomics"
+ - example = @example_proteomics
+ - type = "proteomics"
+ - relevant_features = @proteomics_relevant_features
+
#model.tab-pane{:id=>"#{idx}", :class => ("active" if idx == 0)}
%b Model:
%br
@@ -51,18 +65,16 @@
= m.model.algorithms["prediction"]["method"]
%br
Feature selection:
- = m.model.algorithms["feature_selection"]["method"].split(".").last
+ = m.model.algorithms["feature_selection"]["method"].split(".").last if m.model.algorithms["feature_selection"]
%br
Descriptors:
= m.model.algorithms["descriptors"]["method"]+","
= m.model.algorithms["descriptors"]["categories"]
%p
%b Independent crossvalidations (log2 transformed):
- - crossvalidations =[]
- - m.repeated_crossvalidation.crossvalidation_ids.each{|cv| c = OpenTox::Validation::CrossValidation.find(cv); crossvalidations << c}
%div.row{:id=>"validations#{m.id}", :style=>"background-color:#f5f5f5;"}
- - crossvalidations.each do |cv|
- %span.col-xs-4.col-sm-4.col-md-4.col-lg-4
+ - m.crossvalidations.each do |cv|
+ %span.col-xs-2.col-sm-2.col-md-2.col-lg-2
= "Num folds:\t"
= cv.folds
%br
@@ -88,56 +100,132 @@
%form{:id=>idx, :role=>"form", :action=> to("/predict"), :method=>"post"}
%h3.help-block
Please characterise a nanoparticle:
- #input
- %div.form-group
- // type pcp || pc
- %input{:id=>"type",:type=>"hidden",:name=>"type",:value=>"#{type}"}
- // example data to compare
- %input{:id=>"example_core",:type=>"hidden",:name=>"example_core",:value=>"#{example.core}"}
- %input{:id=>"example_coating",:type=>"hidden",:name=>"example_coating",:value=>"#{example.coating}"}
- %input{:id=>"example_pc",:type=>"hidden",:name=>"example_pc",:value=>"#{example.properties}"}
- - size = relevant_features.size
- %input{:id=>"size",:type=>"hidden",:name=>"size",:value=>size}
- %input{:id=>"id",:type=>"hidden",:name=>"example_id",:value=>example.id}
+
+ - if type == "fingerprint"
+
+ // core
+ %div.form-group
+ // type = fingerprint
+ // send hidden example data to compare
+ %input{:id=>"type",:type=>"hidden",:name=>"type",:value=>"#{type}"}
+ %input{:id=>"example_core",:type=>"hidden",:name=>"example_core",:value=>"#{example.core["name"]}"}
+ %input{:id=>"example_coating",:type=>"hidden",:name=>"example_coating",:value=>"#{example.coating[0]["name"]}"}
+ %input{:id=>"example_pc",:type=>"hidden",:name=>"example_pc",:value=>"#{example.properties}"}
+ - size = relevant_features.size
+ %input{:id=>"size",:type=>"hidden",:name=>"size",:value=>size}
+ %input{:id=>"id",:type=>"hidden",:name=>"example_id",:value=>example.id}
+
// input form parameters to transfer
+ // core
%div.form-group
%label{:for=>"selCore#{idx}"} Core
- /%p= example.core["name"]
%select.form-control{:id=>"selCore#{idx}", :autocomplete=>"off", :name=>"input_core",:value=>example.core["name"]}
- %option{:selected => ("selected" if example.core["name"] == "Ag")} Ag
- %option{:selected => ("selected" if example.core["name"] == "Au")} Au
- %input{:id=>"input_core",:type=>"hidden",:name=>"in_core",:value=>"#{example.core}"}
- //%h5 Coating
- //%input.input-sm.form-control{:id=>"coating",:type=>"text",:disabled=>"disabled",:name=>"coating",:value=>example.coating[0]["name"]}
- %input.input-sm.form-control{:id=>"coating",:type=>"hidden",:name=>"input_coating",:value=>example.coating[0]["name"]}
- %input{:id=>"input_coating",:type=>"hidden",:name=>"in_coating",:value=>example.coating}
- // prediction model id
- %input{:id=>"prediction_model",:type=>"hidden",:name=>"prediction_model",:value=>m.id}
- //sort the relevant features
- - pc = relevant_features.collect{|f| f if f.category == "P-CHEM"}.compact
- - pcp = relevant_features.collect{|f| f if f.category == "Proteomics"}.compact
- - relevant_features = pc.sort_by{|f| f.name} + pcp.sort_by{|f| f.name}
- - relevant_features.each_with_index do |relf,id|
- - feature = relf
- - v = example.properties.find{|id,v| id == feature.id.to_s }
- - name = feature.name
- - if feature[:conditions] && !feature[:conditions]["MEDIUM"].blank?
- - name = feature.name + " / " + feature[:conditions]["MEDIUM"]
- - else
- - name = feature.name
- - val = !v.nil? ? v[1] : "-"
- - id = id + 1
- - if feature.category == "Proteomics"
- %h5
- %a{:href=>"http://www.uniprot.org/uniprot/#{name}", :rel=>"external"}= name + (feature.unit.blank? ? "" : " (#{feature.unit})")
- - if feature.category == "P-CHEM"
- %h5
- %a.descriptor{:href=>$npo[feature.name], :rel=>"external"}= name + (feature.unit.blank? ? "" : " (#{feature.unit})")
- // input physchem parameters
- %input.input-sm.form-control{:id=>id,:type=>"text",:name=>"input_value_#{id}",:value=>"#{val[0] if val[0]}", :disabled=>("disabled" if val[0] == "-")}
- - if val[0] == "-"
- %input{:id=>id,:type=>"hidden",:name=>"input_value_#{id}",:value=>"-"}
- %input{:id=>id,:type=>"hidden",:name=>"input_key_#{id}",:value=>feature.id}
+ %option{:selected => ("selected" if example.core["name"] == "Ag"), :value => "Ag"} Ag
+ %option{:selected => ("selected" if example.core["name"] == "Au"), :value => "Au"} Au
+
+ // coating
+ %div.form-group
+ %label{:for=>"selCoating#{idx}"} Coating
+ %select.form-control{:id=>"selCoating#{idx}", :autocomplete=>"off", :name=>"input_coating",:value=>example.coating[0]["name"]}
+ - coatings = $coating_list.collect{|co| co.coating[0]["name"]}.uniq
+ - coatings.each do |co|
+ %option{:selected => ("selected" if example.coating[0]["name"] == co), :value => co}
+ = co
+
+ - if type =~ /physchem/
+ %div.form-group
+ // type = physchem,proteomics
+ // send hidden example data to compare
+ %input{:id=>"type",:type=>"hidden",:name=>"type",:value=>"#{type}"}
+ %input{:id=>"example_core",:type=>"hidden",:name=>"example_core",:value=>"#{example.core["name"]}"}
+ %input{:id=>"example_coating",:type=>"hidden",:name=>"example_coating",:value=>"#{example.coating[0]["name"]}"}
+ %input{:id=>"example_pc",:type=>"hidden",:name=>"example_pc",:value=>"#{example.properties}"}
+ - size = relevant_features.size
+ %input{:id=>"size",:type=>"hidden",:name=>"size",:value=>size}
+ %input{:id=>"id",:type=>"hidden",:name=>"example_id",:value=>example.id}
+
+ // input form parameters to transfer
+ // core
+ %div.form-group
+ %label{:for=>"selCore#{idx}"} Core
+ %select.form-control{:id=>"selCore#{idx}", :autocomplete=>"off", :name=>"input_core",:value=>example.core["name"]}
+ //%option{:selected => "selected", :value => "-- select a core --", :style=>"display:none;"}
+ %option{:selected => ("selected" if example.core["name"] == "Ag"), :value => "Ag"} Ag
+ %option{:selected => ("selected" if example.core["name"] == "Au"), :value => "Au"} Au
+ //%option{:value => "Ag"} Ag
+ //%option{:value => "Au"} Au
+
+ // coating
+ //%h5 Coating
+ //%input.input-sm.form-control{:id=>"coating",:type=>"text",:disabled=>"disabled",:name=>"coating",:value=>example.coating[0]["name"]}
+ %input.input-sm.form-control{:id=>"coating",:type=>"hidden",:name=>"input_coating",:value=>example.coating[0]["name"]}
+
+ // relevant features
+ - relevant_features.sort_by{|f| f.name}.each_with_index do |relf,id|
+ - feature = relf
+ - v = example.properties.find{|id,v| id == feature.id.to_s }
+ - name = feature.name
+ - if feature[:conditions] && !feature[:conditions]["MEDIUM"].blank?
+ - name = feature.name + " / " + feature[:conditions]["MEDIUM"]
+ - else
+ - name = feature.name
+ - val = !v.nil? ? v[1] : ""
+ - id = id + 1
+
+ %h5
+ %a.descriptor{:href=>$npo[feature.name], :rel=>"external"}= name + (feature.unit.blank? ? "" : " (#{feature.unit})")
+
+ // input physchem parameters
+ %input.input-sm.form-control{:id=>"#{id}",:type=>"text",:name=>"input_value_#{id}",:value=>"#{val[0]}"}
+ %input{:id=>id,:type=>"hidden",:name=>"input_key_#{id}",:value=>feature.id}
+
+ - if type =~ /proteomics/
+ %div.form-group
+ // type = physchem,proteomics
+ // send hidden example data to compare
+ %input{:id=>"type",:type=>"hidden",:name=>"type",:value=>"#{type}"}
+ %input{:id=>"example_core",:type=>"hidden",:name=>"example_core",:value=>"#{example.core["name"]}"}
+ %input{:id=>"example_coating",:type=>"hidden",:name=>"example_coating",:value=>"#{example.coating[0]["name"]}"}
+ %input{:id=>"example_pc",:type=>"hidden",:name=>"example_pc",:value=>"#{example.properties}"}
+ - size = relevant_features.size
+ %input{:id=>"size",:type=>"hidden",:name=>"size",:value=>size}
+ %input{:id=>"id",:type=>"hidden",:name=>"example_id",:value=>example.id}
+
+ // input form parameters to transfer
+ // core
+ %div.form-group
+ %label{:for=>"selCore#{idx}"} Core
+ %select.form-control{:id=>"selCore#{idx}", :autocomplete=>"off", :name=>"input_core",:value=>example.core["name"]}
+ %option{:selected => ("selected" if example.core["name"] == "Ag"), :value => "Ag"} Ag
+ %option{:selected => ("selected" if example.core["name"] == "Au"), :value => "Au"} Au
+
+ // coating
+ //%h5 Coating
+ //%input.input-sm.form-control{:id=>"coating",:type=>"text",:disabled=>"disabled",:name=>"coating",:value=>example.coating[0]["name"]}
+ %input.input-sm.form-control{:id=>"coating",:type=>"hidden",:name=>"input_coating",:value=>example.coating[0]["name"]}
+
+ // relevant features
+ - relevant_features.sort_by{|f| f.name}.each_with_index do |relf,id|
+ - feature = relf
+ - v = example.properties.find{|id,v| id == feature.id.to_s }
+ - name = feature.name
+ - if feature[:conditions] && !feature[:conditions]["MEDIUM"].blank?
+ - name = feature.name + " / " + feature[:conditions]["MEDIUM"]
+ - else
+ - name = feature.name
+ - val = !v.nil? ? v[1] : ""
+ - id = id + 1
+
+ %h5
+ %a{:href=>"http://www.uniprot.org/uniprot/#{name}", :rel=>"external"}= name + (feature.unit.blank? ? "" : " (#{feature.unit})")
+
+ // input physchem parameters
+ %input.input-sm.form-control{:id=>"#{id}",:type=>"text",:name=>"input_value_#{id}",:value=>"#{val[0]}"}
+ %input{:id=>id,:type=>"hidden",:name=>"input_key_#{id}",:value=>feature.id}
+
+ // prediction model id
+ %input{:id=>"prediction_model",:type=>"hidden",:name=>"prediction_model",:value=>m.id}
+
%hr
#predict
%button.btn.btn-success{:id=>"submitbutton", :type=>"submit", :onclick=>"showcircle();"}
diff --git a/views/prediction.haml b/views/prediction.haml
index e451c5f..08fe4ba 100644
--- a/views/prediction.haml
+++ b/views/prediction.haml
@@ -43,15 +43,16 @@
Net cell association
%br
[mL/ug(Mg)]
- - @input.each{|d| Feature.find(d[0]).category}.each do |key|
- - feature = Feature.find_by(:id=>key[0])
- - name = feature.name
- - if (feature[:conditions] && !feature[:conditions]["MEDIUM"].blank?)
- - name = feature.name + " / " + feature[:conditions]["MEDIUM"]
- - else
+ - if @type =~ /physchem|proteomics/
+ - @input.each{|d| Feature.find(d[0]).category}.each do |key|
+ - feature = Feature.find_by(:id=>key[0])
- name = feature.name
- %th.physchem.sorter-false
- %a.descriptor{:href=>$npo[feature.name], :rel=>"external"}= name + (feature.unit.blank? ? "" : " (#{feature.unit})")
+ - if (feature[:conditions] && !feature[:conditions]["MEDIUM"].blank?)
+ - name = feature.name + " / " + feature[:conditions]["MEDIUM"]
+ - else
+ - name = feature.name
+ %th.physchem.sorter-false
+ %a.descriptor{:href=>$npo[feature.name], :rel=>"external"}= name + (feature.unit.blank? ? "" : " (#{feature.unit})")
%tbody
/ query and match combined
%tr.static
@@ -70,20 +71,15 @@
%h5.th5 x
/ composition
%td
- - if @match
- %h5.th5 Core:
- %a{:href=>@nanoparticle[:core]["uri"], :rel=>"external"}= "["+@nanoparticle[:core]["name"]+"]"
- /%br
- /%h5.th5 Coating:
- /= @nanoparticle[:coating][0]["name"]
- /%br
- - else
- %h5.th5 Core:
- = "["+@nanoparticle[:core]["name"]+"]"
- /%br
- /%h5.th5 Coating:
- /= @nanoparticle[:coating][0]["name"]
- /%br
+ - core = Substance.find @nanoparticle[:core_id]
+ %h5.th5 Core:
+ %a{:href=>core.source, :rel=>"external"}= "["+core.name+"]"
+ %br
+ - if @type == "fingerprint"
+ - coating = Substance.find @nanoparticle[:coating_ids][0]
+ %h5.th5 Coating:
+ %a{:href=>coating.source, :rel=>"external"}= coating.name
+ %br
/ tox
%td.tox
- if @prediction[:value]
@@ -107,18 +103,21 @@
- if !@prediction[:value] && !@prediction[:measurements]
%h5.th5 not available
/ physchem
- - @input.each do |v|
- %td.physchem
- %div{:style=>"display:inline-block;padding-right:20px;"}
- - if v[1].nil?
- %p x
- - else
- %p= v[1][0].round(3)
+ - if @type =~ /physchem|proteomics/
+ - @input.each do |v|
+ %td.physchem
+ %div{:style=>"display:inline-block;padding-right:20px;"}
+ - if v[1].nil?
+ %p x
+ - else
+ %p= v[1][0].round(3)
/ neighbors
- if @prediction[:neighbors]
- @prediction[:neighbors].each_with_index do |neighbor,idx|
- nano = Nanoparticle.find(neighbor[:id])
+ - core = Substance.find nano.core_id
+ - coating = Substance.find nano.coating_ids[0]
%tr
/ ID
%td
@@ -130,15 +129,22 @@
/ Composition
%td
%h5.th5 Core:
- %a{:href=>nano[:core]["uri"], :rel=> "external"}= "["+nano[:core]["name"]+"]"
+ %a{:href=>core.source, :rel=> "external"}= "["+core.name+"]"
%br
%h5.th5 Coating:
- %a{:href=>nano[:coating][0]["uri"], :rel=>"external"}= nano[:coating][0]["name"]
+ %a{:href=>coating.source, :rel=>"external"}= coating.name
/ Tox
%td.tox
%h5.th5 Measurement:
= neighbor[:measurement]
/ Physchem
- - nano.properties.delete_if{|id,v| @type == "pc" ? !@pc_relevant_features.include?(Feature.find(id)) : !@pcp_relevant_features.include?(Feature.find(id))}.sort_by{|id,v| @pc_relevant_features.index Feature.find(id)}.each do |k,v|
- %td.physchem
- = v[0].round(3) unless v.nil?
+ - case @type
+ - when "physchem"
+ - nano.properties.delete_if{|id,v| !@physchem_relevant_features.include?(Feature.find(id))}.sort_by{|id,v| @physchem_relevant_features.index Feature.find(id)}.each do |k,v|
+ %td.physchem
+ = v[0].round(3) unless v.nil?
+ - when "proteomics"
+ - nano.properties.delete_if{|id,v| !@proteomics_relevant_features.include?(Feature.find(id))}.sort_by{|id,v| @proteomics_relevant_features.index Feature.find(id)}.each do |k,v|
+ %td.physchem
+ = v[0].round(3) unless v.nil?
+