summaryrefslogtreecommitdiff
path: root/views/prediction.haml
blob: dfc11fca63c5dd4c650e6812358b17d4381bbfbd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
:javascript
  $(document).ready(function(){
    $('[data-toggle="popover"]').popover();
    $('.modal').on('hidden.bs.modal', function () {
      $(this).removeData('bs.modal');
    });
  });
%div.well
  %a.btn.btn-warning{:href => to('/predict')} New Prediction

  / displays all prediction result in first table
  %div.table-responsive
    %table.table.table-bordered{:id=>"overview", :style=>"background-color:white;"}
      %thead
        %tr
          %h3 Prediction Results:

      %tbody
        %tr
          %td{:id=>"compound", :style=>"vertical-align:top;"}
            %a.btn.btn-link{:href => "#detailsTop", :id=>"linkCompound", data: { toggle: "modal", remote: to("/prediction/#{CGI.escape(@compound.uri)}/details")}}
              %img.img-responsive{:src=>"#{@compound.uri}/image", :alt=>"no image", :title=>"#{@compound.smiles}", :width=>"150", :height=>"150"}
          - count=0
          - @predictions.each do |pa|
            / unpack to single array/prediction
            / if p.data_entries array[0].size == 3 -> database hit
            / change 'result' if database hit
            / change 'confidence' if database hit
            - pa.each do |p|
              / prevent conversion of nil
              /- $logger.debug "data entries in prediction array:\t#{p.data_entries}\n"
              - database_hit = 0
              - if p.data_entries[0].size == 3
                - database_hit = 1
              - c = p.data_entries[0][0] != nil ? p.data_entries[0][0] : ''
              - case c
              - when /(false|true|inactive|active)/i
                - c = c
              - else
                /- c = Array.new
                - c = (p.data_entries[0][0].class == Float) ? p.data_entries[0][0].round(3) : (p.data_entries[0][0] != nil ? p.data_entries[0][0] : "no prediction")
              %td{:style=>"vertical-align:top;"}
                %b{:class => "title"}
                  = @prediction_models[count].title.gsub("_", " ")
                - @model_uri = @prediction_models[count].uri
                %p
                / model type (classification|regression)
                %b Type:
                = @model_type[count]
                %p
                - unless database_hit > 0
                  %b Result:
                  %b
                    - if c.class == String
                      - result = (c != '' ? c : "No prediction result.")
                      = result
                    - else
                      - result = (c != '' ? c.round(3) : "No prediction result.")
                      = result
                    - confidence = (p.data_entries[0][1] != nil && p.data_entries[0][1] != 0.0) ? p.data_entries[0][1].round(2) : "--"
                  %a.btn.glyphicon.glyphicon-info-sign{:href=>"#", :title=>"Result", data: {toggle:"popover", placement:"left", html:"true", content:"LAZAR calculates searches the training dataset for similar compounds (neighbors) and calculates the prediction from their measured activities. LAZAR calculates predictions using <ul><li>a majority vote (weighted by compound similarity) for<br /><b>classification</b> (<a href='http://www.frontiersin.org/Journal/10.3389/fphar.2013.00038/abstract', target='_blank'>original publication</a>) </li><li>a local QSAR model based on neighbors for<br /><b>regression</b> (<a href='http://www.frontiersin.org/Journal/10.3389/fphar.2013.00038/abstract', target='_blank'</h>original publication</a>) </li></ul>Please keep in mind that predictions are based on the measured activities of neighbors."}}
                  - @cv = OpenTox::Validation.find @prediction_models[count].metadata[RDF::OT.crossValidation][0]+"/statistics" #unless @prediction_models[count].title.include?("Mutagenicity")
                    - unless @model_type[count] == "regression"
                    %br  
                    %b
                      = "Probability: "
                    - unless result == "No prediction result." or confidence == "--"
                      - prob = @cv.probabilities( confidence, result )[:probs][result]*100
                      = "#{prob.round(1)} %"
                  %p
                  %b Confidence:
                  = confidence
                  %a.btn.glyphicon.glyphicon-info-sign{:href=>"#", :title=>"Confidence", data: {toggle:"popover", placement:"left", html:"true", content:"Indicates the applicability domain of a model. Predictions with a high confidence can be expected to be more reliable than predictions with low confidence. Confidence values may take any value between 0 and 1. For most models confidence > 0.025 is a sensible (hard) cutoff to distinguish between reliable and unreliable predictions."}}
                  %p
                  /TODO add tooltip for significant ftagments and descriptors
                  - if @model_type[count] =~ /classification/i && (p.data_entries[0][1] != nil && p.data_entries[0][1] != 0.0)
                    / Significant fragments:
                    %a.btn.btn-default.btn-sm{:id=>"linkSigFragments", :href => "#detailsTop", data: { toggle: "modal", remote: to("/prediction/#{CGI.escape(@model_uri)}/#{@model_type[count]}/#{CGI.escape(@compound.uri)}/fingerprints")}} Significant fragments
                  - if @model_type[count] =~ /regression/i && (p.data_entries[0][1] != nil && p.data_entries[0][1] != 0.0)
                    / Descriptors
                    %a.btn.btn-default.btn-sm{:id=>"linkDescriptors", :href => "#detailsTop", data: { toggle: "modal", remote: to("/prediction/#{CGI.escape(@model_uri)}/#{@model_type[count]}/#{CGI.escape(@compound.uri)}/fingerprints")}} Descriptors
                  %p
                  - if c != ''
                    %a.btn.btn-default.btn-sm{:href=> "#tabs", :id=>"link#{count}"}
                      Neighbors
                    :javascript
                      $("a#link#{count}").click(function () {
                        $(".results").show();
                        //document.getElementById('tabs').focus();
                        $('#neighborTabs a[href="#results_#{count+1}"]').tab('show');
                        //$("#tabs").tabs({ active: "#{count}" });
                      });
                  %p
                  - count+=1
                - else # database hit
                  %b Database hit: 
                  %br Compound found in training dataset
                  %p
                  %b Measured activity:
                  = p.data_entries[0][2]
                  %p
                    
                  - count+=1

  / always show the neighbors table, message is given there  
  = haml :neighbors, :layout => false, :model_type => @model_type
  %div.modal.fade{:id=>"detailsTop", :role=>"dialog"}
    %div.modal-dialog.modal-lg
      %div.modal-content