summaryrefslogtreecommitdiff
path: root/views
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 /views
parent8ebb06ddc85b38cd6ec71d81f55b800fd5825c15 (diff)
update for version 1.0.0; added fingerprint model and prediction
Diffstat (limited to 'views')
-rw-r--r--views/predict.haml194
-rw-r--r--views/prediction.haml74
2 files changed, 181 insertions, 87 deletions
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?
+