/ @@prediction_models and @@predictions defined in POST request '/predict' / unpacks multi prediction array ; / prepare it for neighbors ; / align single prediction to endpoint ; / display preordered in table view ; .results{:style=>"display:none"} - count_m = 0 / tabs div ; #tabs %ul / each endpoint becomes a tab head ; - @@prediction_models.each do |m| - count_m += 1 - m_title = m.title.split(" ").first %li %a{:href => "#results_#{count_m}", :id => "link#{m_title}"} = m_title - count_rs = 0 / unpack to single arrays - @@predictions.each do |pa| - count_rs += 1 #results{:id=>"#{count_rs}"} - pa.each do |p| / prepare dataset for neighbors table ; / delete first array which contains input compound prediction ; / keep the following arrays they are the neighbor predictions ; - p.data_entries.shift - p.compounds.shift / call the tablesorter plugin ; / presort by similarity ; :javascript $(document).ready(function(){ $("table##{count_rs}").tablesorter({ //debug: true, //widgets: ['zebra'], headers: {0: {sorter: false}, 3: {sorter: false}}, sortList: [[2,1]] }); }); / TODO catch table error if tbody is empty %h2= "Neighbors: " %table{:id=>"#{count_rs}", :class=>"tablesorter", :cellspacing=>"1"} %thead %tr %th Compound %th %b Measured Activity / title must be empty for tooltip %a{:href=>"#", :title=>"", :id=>"measured_activity"} %img{:src=>"/images/info_white.png"} .tooltip{:style=>"font-weight: normal; font-size: 1em; text-align: left;"} %dt Measured Activity %dd Experimental result(s) from the training dataset. %th %b Similarity / title must be empty for tooltip %a{:href=>"#", :title=>"", :id=>"similarity"} %img{:src=>"/images/info_white.png"} .tooltip{:style=>"font-weight: normal; font-size: 1em; text-align: left;"} %dt Similarity %dd %code lazar calculates %em 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 ignore inert parts of the structure %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. %th Details -#%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] : '' - $logger.debug "inspect c :#{c}\n" - case c - when /(0|false)/ - c = "non-carcinogen" - when /(1|true)/ - c = "carcinogen" - else - c = Array.new - c[0] = p.data_entries[count][2] %tr %td.compound %img{:src=>"#{neighbor_compound.uri}/image", :alt=>"Compound image not available", :width=>"150px"} %td{:class => c[0]} = c[0] #p.data_entries[count][2] %td{:class => c[0]} = p.data_entries[count][3] != nil ? p.data_entries[count][3].round(3) : "Not enough similar compounds in training dataset." %td %a{:href => to("/prediction/#{CGI.escape(neighbor_compound.uri)}/details"), :id=>"link#{count_rs}#{count}", :target=>"details"} %img{:src=>"/images/arrow_right_float.png", :alt=>">"} :javascript $(function() { $("a#link#{count_rs}#{count}").on('click', function(e) { $('#iframe').bPopup(); }); }); - count += 1 %iframe{:id=>"iframe", :name=>"details", :height=>"90%", :width=>"90%", :style=>"display:none;border:0px"}