summaryrefslogtreecommitdiff
path: root/views/neighbors.haml
blob: 687f0ab6acdf0410930d6ecfeedaeeaa7d5b5213 (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
%div.card.bg-light
  %div.card-body
    %div.card-title
      %h3 Neighbors:
    #tabs
      %ul.nav.nav-pills.nav-justified{:id=>"neighborTabs", :role=>"tablist"}
        - @models.each_with_index do |model,i|
          / get predictionFeature type
          - m = Model::Lazar.find model.model_id.to_s
          %li.nav-item
            %a.nav-link{:class => ("active" if i ==0), :href => "#results_#{i+1}", :id => "linkTab#{i+1}", data: {toggle:"tab"}}
              = "#{model.endpoint} (#{model.species})"
      %div.tab-content
        - @predictions.each_with_index do |prediction,j|
          #results.tab-pane{:id=>"#{j+1}", :class => ("active" if j == 0)}
            - if prediction[:neighbors]
              %div.table-responsive
                %table.table.table-bordered.table-hover{:id=>"nTable#{j+1}"}
                  %thead
                    %tr
                      %th{:scope=>"col"}
                        Compound
                      %th{:scope=>"col"}
                        Measured Activity
                        %a.btn.fa.fa-info-circle{:href=>"javascript:void(0)", :title=>"Measured Activity", :tabindex=>"0", data: {trigger:"focus", container:"body", toggle:"popover", placement:"auto", html:"true", content:"Experimental result(s) from the training dataset."}, :style=>"z-index:auto+10;"}
                      %th{:scope=>"col"}
                        Similarity
                        %a.btn.fa.fa-info-circle{:href=>"javascript:void(0)", :title=>"Similarity", :tabindex=>"0", data: {trigger:"focus", container:"body", toggle:"popover", placement:"auto", html:"true", content:"<a alt=\"Link opens in new window.\" title=\"Link opens in new window.\" target=\"_blank\" href=\"https://en.wikipedia.org/wiki/Jaccard_index\">Tanimoto/Jaccard</a> similarity based on <a alt=\"Link opens in new window.\" title=\"Link opens in new window.\" target=\"_blank\" href=\"https://openbabel.org/docs/dev/FileFormats/MolPrint2D_format.html\">Molprint2D</a> fingerprints."}, :style=>"z-index:auto+10;"}
                  %tbody
                    - type = @model_types[j]
                    - unit = @models[j].unit
                    - prediction[:neighbors].uniq.each_with_index do |neighbor,count|
                      %tr
                        / Compound
                        - c = Compound.find(neighbor)
                        %td
                          %a.btn.btn-link{:href => "#details#{j+1}", data: { toggle: "modal", remote: "//#{ENV['VIRTUAL_HOST']}/prediction/#{CGI.escape(c.id.to_s)}/details", :id=>"link#{j+1}#{count}"}}
                            = embedded_svg(c.svg, :title=>"click for details")
                        
                        / Measured Activity
                        %td
                          - if neighbor[:measurement].is_a?(Array)
                            = (type == "Regression") ? neighbor[:measurement].collect{|value| "#{value.delog10.signif(3)} (#{unit})</br>#{c.mmol_to_mg(value.delog10).signif(3)} #{unit =~ /mmol\/L/ ? "(mg/L)" : "(mg/kg_bw/day)"}"}.join("</br>") : neighbor[:measurement].join(", ")
                          - else
                            - if !neighbor[:measurement].nil?
                              = (type == "Regression") ? "#{neighbor[:measurement].delog10.signif(3)} (#{unit})</br>#{c.mmol_to_mg(neighbor[:measurement].delog10).signif(3)} #{(unit =~ /\b(mmol\/L)\b/) ? "(mg/L)" : "(mg/kg_bw/day)"}" : neighbor[:measurement]
                          - if c.cid && c.cid != "0"
                            %p
                              %a{:href=>PUBCHEM_CID_URI+c.cid, :rel => "external"}
                                PubChem
                                %span.fa.fa-xs.fa-external-link
                        / Similarity = tanimoto
                        %td
                          = neighbor[:similarity].round(3)

            - else
              %span.btn.btn-default.disabled
                = "Not enough similar compounds in training dataset"

            %div.modal.fade{:id=>"details#{j+1}", :role=>"dialog"}
              %div.modal-dialog.modal-lg{:role=>"document"}
                %div.modal-content
- @models.each_with_index do |model,i|
  :javascript
    // sort all neighbors tables by similarity
    document.addEventListener('DOMContentLoaded', function() {
      var id = '#{i+1}';
      var table, rows, switching, i, x, y, shouldSwitch;
      table = document.getElementById("nTable"+id);
      switching = true;
      /* Make a loop that will continue until
      no switching has been done: */
      while (switching) {
        // Start by saying: no switching is done:
        switching = false;
        rows = table.rows;
        /* Loop through all table rows (except the
        first, which contains table headers): */
        for (i = 1; i < (rows.length - 1); i++) {
          // Start by saying there should be no switching:
          shouldSwitch = false;
          /* Get the two elements you want to compare,
          one from current row and one from the next: */
          x = rows[i].getElementsByTagName("TD")[2];
          y = rows[i + 1].getElementsByTagName("TD")[2];
          // Check if the two rows should switch place:
          if (parseFloat(x.innerHTML) < parseFloat(y.innerHTML)) {
            // If so, mark as a switch and break the loop:
            shouldSwitch = true;
            break;
          }
        }
        if (shouldSwitch) {
          /* If a switch has been marked, make the switch
          and mark that a switch has been done: */
          rows[i].parentNode.insertBefore(rows[i + 1], rows[i]);
          switching = true;
        }
      }
    }, false);