From fcb94479ed43c2eefda9a487f887c2629da813c7 Mon Sep 17 00:00:00 2001 From: gebele Date: Fri, 13 Jan 2017 15:04:46 +0000 Subject: update for version 1.0.0; added fingerprint model and prediction --- views/predict.haml | 194 ++++++++++++++++++++++++++++++++++++-------------- views/prediction.haml | 74 ++++++++++--------- 2 files changed, 181 insertions(+), 87 deletions(-) (limited to 'views') 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? + -- cgit v1.2.3