%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"}, :onclick=>"sortTable('#{i+1}');"} = "#{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"} SMILES %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:"Tanimoto/Jaccard similarity based on Molprint2D 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: to("/prediction/#{CGI.escape(c.id.to_s)}/details"), :id=>"link#{j+1}#{count}"}} = c.svg %td %p= c.smiles / Measured Activity %td - if neighbor[:measurement].is_a?(Array) = (type == "Regression") ? neighbor[:measurement].collect{|value| "#{value.delog10.signif(3)} (#{unit})
#{c.mmol_to_mg(value.delog10).signif(3)} #{unit =~ /mmol\/L/ ? "(mg/L)" : "(mg/kg_bw/day)"}"}.join("
") : neighbor[:measurement].join(", ") - else - if !neighbor[:measurement].nil? = (type == "Regression") ? "#{neighbor[:measurement].delog10.signif(3)} (#{unit})
#{c.mmol_to_mg(neighbor[:measurement].delog10).signif(3)} #{(unit =~ /\b(mmol\/L)\b/) ? "(mg/L)" : "(mg/kg_bw/day)"}" : neighbor[:measurement] / 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")[3]; y = rows[i + 1].getElementsByTagName("TD")[3]; // 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);