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
111
112
113
|
/ unpacks multi prediction array ;
/ prepare it for neighbors ;
/ align single prediction to endpoint ;
/ display preordered in table view ;
%div.results{:style=>"display:none"}
- count_m = 0
%h3 Neighbors:
/ tabs div
#tabs
%ul.nav.nav-tabs.nav-justified{:id=>"neighborTabs", :role=>"tablist"}
/ each model a tab head ;
- @prediction_models.each do |m|
- count_m += 1
- m_title = m.title.split("_").last(2)[0]
%li
%a{:href => "#results_#{count_m}", :id => "linkTab#{count_m}", data: {toggle:"tab"}}
= m_title
- count_rs = 0
%div.tab-content
/ unpack to single arrays
- @predictions.each do |pa|
/ pass model type for significant fragments view
- @type = @model_type[count_rs]
- count_rs += 1
#results.tab-pane.fade{:id=>"#{count_rs}"}
- pa.each do |p|
/ prepare dataset for neighbors table ;
/ delete first array which contains prediction ;
/ following arrays are the neighbor predictions ;
- @model_uri = p.metadata[RDF::OT.hasSource][0]
- p.data_entries.shift
- p.compounds.shift
/ call the tablesorter plugin ;
/ presort by similarity ;
:javascript
$(document).ready(function(){
$("table##{count_rs}").tablesorter({
debug: false,
//table: 'ui-widget ui-widget-content ui-corner-all',
//header: 'ui-widget-header ui-corner-all ui-state-default',
theme: "bootstrap",
//widthFixed: true,
//hover: 'ui-state-hover',
//even: 'ui-widget-content',
//odd: 'ui-state-default',
headerTemplate: '{content} {icon}',
widgets: ['zebra', 'columns', 'uitheme'],
headers: {0: {sorter: false}, 3: {sorter: false}},
sortList: [[2,1]]
});
});
- $logger.debug "neighbors compounds:\t#{p.data_entries[0]}\n"
- if p.data_entries[0][2] != nil && p.data_entries[0].size != 3
-#%h2= "Neighbors: "
%div.table-responsive
%table.tablesorter{:id=>"#{count_rs}", :style=>"border-style: solid;"}
%thead
%tr
%th{:style =>"vertical-align:middle;"}
Compound
%th{:style =>"vertical-align:middle;"}
Measured Activity
%th{:style =>"vertical-align:middle;"}
Similarity
%th{:style =>"vertical-align:middle;"}
Supporting Information
%info
%tr
%td
%td{:style=>"font-size:x-small;padding:0px;"}
%a.btn.glyphicon.glyphicon-info-sign{:href=>"#neighbors", :title=>"Measured Activity", data: {toggle:"popover", placement:"auto", html:"true", content:"Experimental result(s) from the training dataset."}, :style=>"z-index:auto+10;"}
%td{:style=>"font-size:x-small;padding:0px;"}
%a.btn.glyphicon.glyphicon-info-sign{:href=>"#neighbors", :title=>"Similarity", data: {toggle:"popover", placement:"auto", html:"true", content:"LAZAR calculates activity specific similarities based on the presence of statistically significant fragments. This procedure will <ul><li>consider only those parts of a chemical structure that are relevant for a particular endpoint</li><li>ignore inert parts of the structure</li><li>lead to different similarities, depending on the toxic endpoint Similarities of 1 may be encountered even for structurally dissimilar compounds, because inert parts are ignored.</li></ul>"}, :style=>"z-index:auto+10;"}
%tbody
- count = 0
- p.compounds.each do |neighbor_compound|
/ prevent conversion of nil
- c = p.data_entries[count][2] != nil ? p.data_entries[count][2] : ''
- case c
- when /(false|true|inactive|active)/i
- c = c
- else
/- c = Array.new
- c = p.data_entries[count][2].to_f.round(3)
%tr
%td{:style =>"vertical-align:middle;padding-left:1em;"}
%a.btn.btn-link{:href => "#details#{count_rs}", data: { toggle: "modal", remote: to("/prediction/#{CGI.escape(neighbor_compound.uri)}/details"), :id=>"link#{count_rs}#{count}"}}
%img.blind{:src=>"#{neighbor_compound.uri}/image", :alt=>"no image", :onError=>"this.onerror=null;", :title=>"#{neighbor_compound.smiles}", :width=>"150px"}
%td{:style =>"vertical-align:middle;padding-left:1em;"}
- if c.class == String
= c
- else
= c
%td{:style =>"vertical-align:middle;padding-left:1em;"}
= p.data_entries[count][3] != nil ? p.data_entries[count][3].round(3) : "Not enough similar compounds in training dataset."
%td{:style =>"vertical-align:middle;padding-left:1em;"}
- if @type =~ /classification/i
- if p.data_entries[count][3] != nil
%a.btn.btn-default{:href => "#details#{count_rs}", :id=>"link#{count_rs}#{count}sf", data: { toggle: "modal", remote: to("/prediction/#{CGI.escape(@model_uri)}/#{@type}/#{CGI.escape(neighbor_compound.uri)}/significant_fragments")}} Significant Fragments
- if @type =~ /regression/i
- if p.data_entries[count][3] != nil
%a.btn.btn-default{:href => "#details#{count_rs}", :id=>"link#{count_rs}#{count}sf", data: { toggle: "modal", remote: to("/prediction/#{CGI.escape(@model_uri)}/#{@type}/#{CGI.escape(neighbor_compound.uri)}/significant_fragments")}} Descriptors
- count += 1
- else
%span.btn.btn-default.disabled Not enough similar compounds in training dataset
%div.modal.fade{:id=>"details#{count_rs}", :role=>"dialog"}
%div.modal-dialog.modal-lg
%div.modal-content
|