:javascript // increase body width if more than 2 models selected window.onload = function(){ var plusSize = ("#{@predictions.size}" > 2 ) ? ("#{@predictions.size}" * 100) : 0; var width = $(window).width() + plusSize; $("body").width(width); }; .predictions .back %h1 %img{:src=>"/images/arrow_left_float.png", :alt=>"<"} %a{:href => to('/predict')} New Prediction / displays all prediction result in first table .overview %table{:width=>"100%", :cellspacing=>"1", :id=>"overview"} %thead %tr %caption %h2 Prediction Results: %tbody %tr %td{:id=>"compound", :style=>"vertical-align:top;"} %a{:href => to("/prediction/#{CGI.escape(@compound.uri)}/details"), :id=>"linkCompound", :target=>"details_overview"} Names and synonyms > %img{:src=>"#{@compound.uri}/image", :alt=>"Compound image not available", :title=>"#{@compound.smiles}", :width=>"150", :height=>"150"} %p :javascript $(function() { $("a#linkCompound").on('click', function(e) { $('#iframe_overview').bPopup(); }); }); - 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) : "--" / title must be empty for tooltip %a{:href=>"#result", :title=>"", :id=>"result"} %img{:src=>"/images/info_white.png"} .tooltip{:style=>"font-weight: normal; font-size: 1em; width: 50%; text-align: left;"} %dt Result %dd %code{:style=>"font-size:x-large;"} lazar calculates searches the training dataset for similar compounds (neighbors) and calculates the prediction from their measured activities. %code{:style=>"font-size:x-large;"} lazar calculates predictions using %ul %li a majority vote (weighted by compound similarity) for %em classification ( %a{:href=>"http://www.frontiersin.org/Journal/10.3389/fphar.2013.00038/abstract", :target=>"_blank"} original publication ) %li a local QSAR model based on neighbors for %em regression ( %a{:href=>"http://www.frontiersin.org/Journal/10.3389/fphar.2013.00038/abstract", :target=>"_blank"} original publication ) 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 .confidence %b Confidence: = confidence / title must be empty for tooltip %a{:href=>"#confidence", :title=>"", :id=>"confidence"} %img{:src=>"/images/info_white.png"} .tooltip{:style=>"font-weight: normal; font-size: 1em; width: 50%; text-align: left;"} %dt Confidence %dd 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{:href => to("/prediction/#{CGI.escape(@model_uri)}/#{@model_type[count]}/#{CGI.escape(@compound.uri)}/fingerprints"), :id=>"linkPredictionSf", :title=>"", :target=>"details_overview"}Significant fragments > :javascript $(function() { $("a#linkPredictionSf").on('click', function(e) { $('#iframe_overview').bPopup(); }); }); - if @model_type[count] =~ /regression/i && (p.data_entries[0][1] != nil && p.data_entries[0][1] != 0.0) / Descriptors %a{:href => to("/prediction/#{CGI.escape(@model_uri)}/#{@model_type[count]}/#{CGI.escape(@compound.uri)}/fingerprints"), :id=>"linkPredictionSf", :target=>"details_overview"} Descriptors > :javascript $(function() { $("a#linkPredictionSf").on('click', function(e) { $('#iframe_overview').bPopup(); }); }); %p - if c != '' %a{:href=> "#tabs", :id=>"link#{count}"} %b Neighbors > :javascript $("a#link#{count}").click(function () { $(".results").show(); document.getElementById('tabs').focus(); $("#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 %iframe{:id=>"iframe_overview", :name=>"details_overview", :height=>"95%", :width=>"95%", :style=>"display:none;border:0px"}