summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgebele <gebele@alfadeo.de>2011-08-29 13:15:26 +0200
committergebele <gebele@alfadeo.de>2011-08-29 13:15:26 +0200
commit9138e8ab0fd375178d922ad2fc0da0061ebe8897 (patch)
treeca74054e57870a721a8f7c0f78089d22d5e34f54
parent661caf031b98bf465d8e80599e08674d1209df5d (diff)
merge development -> feature/policy
-rw-r--r--application.rb95
-rw-r--r--helper.rb43
-rw-r--r--model.rb2
-rwxr-xr-xpublic/javascripts/toxcreate.js15
-rw-r--r--views/classification_validation.haml23
-rw-r--r--views/help.haml28
-rw-r--r--views/layout.haml2
-rw-r--r--views/model.haml116
-rw-r--r--views/models.haml6
-rw-r--r--views/predict.haml8
-rw-r--r--views/validation.haml2
11 files changed, 180 insertions, 160 deletions
diff --git a/application.rb b/application.rb
index 752e322..fbc1cc3 100644
--- a/application.rb
+++ b/application.rb
@@ -10,8 +10,9 @@ require File.join(File.dirname(__FILE__),'model.rb')
require File.join(File.dirname(__FILE__),'helper.rb')
require File.join(File.dirname(__FILE__),'policy.rb')
-use Rack::Session::Cookie, :expire_after => 28800,
- :secret => "ui6vaiNi-change_me"
+#moved to wrapper->environment
+#use Rack::Session::Cookie, :expire_after => 28800,
+# :secret => "ui6vaiNi-change_me"
use Rack::Flash
set :lock, true
@@ -32,7 +33,7 @@ helpers do
private
def delete_model(model, subjectid=nil)
- task = OpenTox::Task.create("Deleting model: #{model.uri}",url_for("/delete",:full)) do |task|
+ task = OpenTox::Task.create("Deleting model: #{model.web_uri}", url_for("/delete",:full)) do |task|
begin OpenTox::RestClientWrapper.put(File.join(model.task_uri, "Cancelled"), "Cancelled",{:subjectid => subjectid}) if model.task_uri rescue LOGGER.warn "Cannot cancel task #{model.task_uri}" end
task.progress(15)
delete_dependent(model.uri, subjectid) if model.uri
@@ -50,15 +51,25 @@ helpers do
if model.feature_dataset
delete_dependent(model.feature_dataset, subjectid) if model.feature_dataset.match(CONFIG[:services]["opentox-dataset"])
end
+ task.progress(95)
+ model.delete
+ unless ToxCreateModel.get(model.id)
+ begin
+ aa = OpenTox::Authorization.delete_policies_from_uri(model.web_uri, @subjectid)
+ LOGGER.debug "Policy deleted for ToxCreateModel URI: #{model.web_uri} with result: #{aa}"
+ rescue
+ LOGGER.warn "Policy delete error for ToxCreateModel URI: #{model.web_uri}"
+ end
+ end
task.progress(100)
- ""
+ url_for("/models",:full)
end
end
def delete_dependent(uri, subjectid=nil)
begin
- RestClient.delete(uri, :subjectid => subjectid) if subjectid
- RestClient.delete(uri) if !subjectid
+ OpenTox::RestClientWrapper.delete(uri, :subjectid => subjectid) if subjectid
+ OpenTox::RestClientWrapper.delete(uri) if !subjectid
rescue
LOGGER.warn "Can not delete uri: #{uri}"
end
@@ -82,8 +93,7 @@ end
get '/models/?' do
@models = ToxCreateModel.all.sort(:order => "DESC")
@models.each{|m| raise "internal redis error: model is nil" unless m}
- subjectstring = session[:subjectid] ? "?subjectid=#{CGI.escape(session[:subjectid])}" : ""
- haml :models, :locals=>{:models=>@models, :subjectstring => subjectstring}
+ haml :models, :locals=>{:models=>@models}
end
get '/model/:id/status/?' do
@@ -235,13 +245,12 @@ end
get '/model/:id/:view/?' do
response['Content-Type'] = 'text/plain'
model = ToxCreateModel.get(params[:id])
- subjectstring = session[:subjectid] ? "?subjectid=#{CGI.escape(session[:subjectid])}" : ""
begin
case params[:view]
when "model"
- haml :model, :locals=>{:model=>model,:subjectstring => subjectstring}, :layout => false
+ haml :model, :locals=>{:model=>model}, :layout => false
when /validation/
- haml :validation, :locals=>{:model=>model,:subjectstring => subjectstring}, :layout => false
+ haml :validation, :locals=>{:model=>model}, :layout => false
else
return "unable to render model: id #{params[:id]}, view #{params[:view]}"
end
@@ -289,7 +298,7 @@ end
post '/feature' do
session[:dataset] = params[:dataset]
@features = []
- OpenTox::Dataset.new(params[:dataset]).load_features.each do |uri,metadata|
+ OpenTox::Dataset.new(params[:dataset], @subjectid).load_features(@subjectid).each do |uri,metadata|
@features << OpenTox::Feature.find(uri, @subjectid) if metadata[OWL.sameAs].match(/#{session[:echa]}/)
end
haml :feature
@@ -308,18 +317,16 @@ post '/models' do # create a new model
redirect url_for('/create')
end
- subjectid = session[:subjectid] ? session[:subjectid] : nil
-
if params[:dataset] and params[:prediction_feature]
- @dataset = OpenTox::Dataset.new(params[:dataset],subjectid)
+ @dataset = OpenTox::Dataset.new(params[:dataset], @subjectid)
name = @dataset.load_metadata[DC.title]
- @prediction_feature = OpenTox::Feature.find params[:prediction_feature], subjectid
+ @prediction_feature = OpenTox::Feature.find params[:prediction_feature], @subjectid
@dataset.load_compounds
elsif params[:file][:filename]
name = params[:file][:filename].sub(/\..*$/,"")
end
- @model = ToxCreateModel.create(:name => name, :subjectid => subjectid)
+ @model = ToxCreateModel.create(:name => name, :subjectid => @subjectid)
@model.update :web_uri => url_for("/model/#{@model.id}", :full), :warnings => ""
task = OpenTox::Task.create("Toxcreate Task - Uploading dataset and creating lazar model",url_for("/models",:full)) do |task|
@@ -328,33 +335,33 @@ post '/models' do # create a new model
unless params[:dataset] and params[:prediction_feature]
begin
- @dataset = OpenTox::Dataset.create(nil, subjectid)
+ @dataset = OpenTox::Dataset.create(nil, @subjectid)
# check format by extension - not all browsers provide correct content-type])
case File.extname(params[:file][:filename])
when ".csv"
csv = params[:file][:tempfile].read
- @dataset.load_csv(csv, subjectid)
+ @dataset.load_csv(csv, @subjectid)
when ".xls", ".xlsx"
excel_file = params[:file][:tempfile].path + File.extname(params[:file][:filename])
File.rename(params[:file][:tempfile].path, excel_file) # add extension, spreadsheet does not read files without extensions
- @dataset.load_spreadsheet(Excel.new excel_file, subjectid)
+ @dataset.load_spreadsheet(Excel.new excel_file, @subjectid)
if @dataset.metadata[OT.Errors]
raise "Incorrect file format. Please follow the instructions for #{link_to "Excel", "/help"} or #{link_to "CSV", "/help"} formats."
end
when ".sdf"
sdf = params[:file][:tempfile].read
- @dataset.load_sdf(sdf, subjectid)
+ @dataset.load_sdf(sdf, @subjectid)
else
raise "#{params[:file][:filename]} has an unsupported file type."
end
- @dataset.save(subjectid)
+ @dataset.save(@subjectid)
rescue => e
error "Dataset creation failed '#{e.message}'",e
end
if @dataset.features.keys.size != 1
error "More than one feature in dataset #{params[:file][:filename]}. Please delete irrelvant columns and try again."
else
- @prediction_feature = OpenTox::Feature.find(@dataset.features.keys.first,subjectid)
+ @prediction_feature = OpenTox::Feature.find(@dataset.features.keys.first,@subjectid)
end
end
@@ -366,7 +373,7 @@ post '/models' do # create a new model
@model.update :warnings => @dataset.metadata[OT.Warnings] unless @dataset.metadata[OT.Warnings] and @dataset.metadata[OT.Warnings].empty?
task.progress(15)
begin
- lazar = OpenTox::Model::Lazar.create( {:dataset_uri => @dataset.uri, :prediction_feature => @prediction_feature.uri, :subjectid => subjectid},
+ lazar = OpenTox::Model::Lazar.create( {:dataset_uri => @dataset.uri, :prediction_feature => @prediction_feature.uri, :subjectid => @subjectid},
OpenTox::SubTask.new(task,15,25))
rescue => e
error "Model creation failed",e # Please check if the input file is in a valid #{link_to "Excel", "/help"} or #{link_to "CSV", "/help"} format."
@@ -387,7 +394,7 @@ post '/models' do # create a new model
crossvalidation = OpenTox::Crossvalidation.create( {
:algorithm_uri => lazar.metadata[OT.algorithm],
:dataset_uri => lazar.parameter("dataset_uri"),
- :subjectid => subjectid,
+ :subjectid => @subjectid,
:prediction_feature => lazar.parameter("prediction_feature"),
:algorithm_params => "feature_generation_uri=#{lazar.parameter("feature_generation_uri")}" },
nil, OpenTox::SubTask.new(task,25,80))
@@ -396,12 +403,12 @@ post '/models' do # create a new model
LOGGER.debug "Validation URI: #{@model.validation_uri}"
# create summary
- validation = crossvalidation.statistics(subjectid)
+ validation = crossvalidation.statistics(@subjectid)
@model.update(:nr_predictions => validation.metadata[OT.numInstances].to_i - validation.metadata[OT.numUnpredicted].to_i)
if validation.metadata[OT.classificationStatistics]
@model.update(:correct_predictions => validation.metadata[OT.classificationStatistics][OT.percentCorrect].to_f)
@model.update(:confusion_matrix => validation.confusion_matrix.to_yaml)
- @model.update(:weighted_area_under_roc => validation.metadata[OT.classificationStatistics][OT.weightedAreaUnderRoc].to_f)
+ @model.update(:average_area_under_roc => validation.metadata[OT.classificationStatistics][OT.averageAreaUnderRoc].to_f)
validation.metadata[OT.classificationStatistics][OT.classValueStatistics].each do |m|
if m[OT.classValue] =~ TRUE_REGEXP
#HACK: estimate true feature value correctly
@@ -422,9 +429,9 @@ post '/models' do # create a new model
begin
@model.update :status => "Creating validation report"
- validation_report_uri = crossvalidation.find_or_create_report(subjectid, OpenTox::SubTask.new(task,80,90)) #unless @model.dirty?
+ validation_report_uri = crossvalidation.find_or_create_report(@subjectid, OpenTox::SubTask.new(task,80,90)) #unless @model.dirty?
@model.update :validation_report_uri => validation_report_uri, :status => "Creating QMRF report"
- qmrf_report = OpenTox::Crossvalidation::QMRFReport.create(@model.uri, subjectid, OpenTox::SubTask.new(task,90,99))
+ qmrf_report = OpenTox::Crossvalidation::QMRFReport.create(@model.uri, @subjectid, OpenTox::SubTask.new(task,90,99))
@model.update(:validation_qmrf_uri => qmrf_report.uri, :status => "Completed")
rescue => e
error "Model report creation failed",e
@@ -443,14 +450,14 @@ post '/models' do # create a new model
end
post '/predict/?' do # post chemical name to model
- subjectid = session[:subjectid] ? session[:subjectid] : nil
+
@identifier = params[:identifier]
unless params[:selection] and params[:identifier] != ''
flash[:notice] = "Please enter a compound identifier and select an endpoint from the list."
redirect url_for('/predict')
end
begin
- @compound = OpenTox::Compound.from_name(params[:identifier])
+ @compound = OpenTox::Compound.from_smiles(params[:identifier])
rescue
flash[:notice] = "Could not find a structure for '#{@identifier}'. Please try again."
redirect url_for('/predict')
@@ -462,15 +469,15 @@ post '/predict/?' do # post chemical name to model
confidence = nil
title = nil
db_activities = []
- lazar = OpenTox::Model::Lazar.find model.uri
- prediction_dataset_uri = lazar.run({:compound_uri => @compound.uri, :subjectid => subjectid})
+ lazar = OpenTox::Model::Lazar.find model.uri, @subjectid
+ prediction_dataset_uri = lazar.run({:compound_uri => @compound.uri, :subjectid => @subjectid})
LOGGER.debug "Prediction dataset_uri: #{prediction_dataset_uri}"
if lazar.value_map
@value_map = lazar.value_map
else
@value_map = nil
end
- prediction_dataset = OpenTox::LazarPrediction.find(prediction_dataset_uri, subjectid)
+ prediction_dataset = OpenTox::LazarPrediction.find(prediction_dataset_uri, @subjectid)
if prediction_dataset.metadata[OT.hasSource].match(/dataset/)
@predictions << {
:title => model.name,
@@ -478,7 +485,7 @@ post '/predict/?' do # post chemical name to model
}
else
predicted_feature = prediction_dataset.metadata[OT.dependentVariables]
- prediction = OpenTox::Feature.find(predicted_feature, subjectid)
+ prediction = OpenTox::Feature.find(predicted_feature, @subjectid)
if prediction.metadata[OT.error]
@predictions << {
:title => model.name,
@@ -503,14 +510,14 @@ post "/lazar/?" do # get detailed prediction
@page = 0
@page = params[:page].to_i if params[:page]
@model_uri = params[:model_uri]
- lazar = OpenTox::Model::Lazar.find @model_uri
- prediction_dataset_uri = lazar.run(:compound_uri => params[:compound_uri], :subjectid => session[:subjectid])
+ lazar = OpenTox::Model::Lazar.find @model_uri, @subjectid
+ prediction_dataset_uri = lazar.run(:compound_uri => params[:compound_uri], :subjectid => @subjectid)
if lazar.value_map
@value_map = lazar.value_map
else
@value_map = nil
end
- @prediction = OpenTox::LazarPrediction.find(prediction_dataset_uri, session[:subjectid])
+ @prediction = OpenTox::LazarPrediction.find(prediction_dataset_uri, @subjectid)
@compound = OpenTox::Compound.new(params[:compound_uri])
haml :lazar
end
@@ -538,18 +545,10 @@ delete '/model/:id/?' do
model = ToxCreateModel.get(params[:id])
raise OpenTox::NotFoundError.new("Model with id: #{params[:id]} not found!") unless model
begin
- delete_model(model, @subjectid)
- model.delete
- unless ToxCreateModel.get(params[:id])
- begin
- aa = OpenTox::Authorization.delete_policies_from_uri(model.web_uri, @subjectid)
- LOGGER.debug "Policy deleted for Dataset URI: #{uri} with result: #{aa}"
- rescue
- LOGGER.warn "Policy delete error for Dataset URI: #{uri}"
- end
- end
+ delete_model(model, @subjectid)
flash[:notice] = "#{model.name} model deleted."
rescue
+ LOGGER.error "#{model.name} model delete error."
flash[:notice] = "#{model.name} model delete error."
end
redirect url_for('/models')
diff --git a/helper.rb b/helper.rb
index 35ddcd2..80707c3 100644
--- a/helper.rb
+++ b/helper.rb
@@ -1,35 +1,5 @@
helpers do
- def login(username, password)
- logout
- session[:subjectid] = OpenTox::Authorization.authenticate(username, password)
- #LOGGER.debug "ToxCreate login user #{username} with subjectid: " + session[:subjectid].to_s
- if session[:subjectid] != nil
- session[:username] = username
- return true
- else
- session[:username] = ""
- return false
- end
- end
-
- def logout
- if session[:subjectid] != nil
- session[:subjectid] = nil
- session[:username] = ""
- return true
- end
- return false
- end
-
- def logged_in()
- return true if !AA_SERVER
- if session[:subjectid] != nil
- return OpenTox::Authorization.is_token_valid(session[:subjectid])
- end
- return false
- end
-
def is_authorized(uri, action)
if OpenTox::Authorization.server && session[:subjectid] != nil
return OpenTox::Authorization.authorized?(uri, action, session[:subjectid])
@@ -54,10 +24,15 @@ helpers do
def sort(descriptors,value_map)
features = {:activating => [], :deactivating => []}
descriptors.each do |d|
- if d[OT.effect] =~ TRUE_REGEXP
- features[:activating] << {:smarts => d[OT.smarts],:p_value => d[OT.pValue]}
- elsif d[OT.effect] =~ FALSE_REGEXP
- features[:deactivating] << {:smarts => d[OT.smarts],:p_value => d[OT.pValue]}
+ if !value_map.empty?
+ features[:activating] << {:smarts => d[OT.smarts],:p_value => d[OT.pValue]} if d[OT.effect] == 2
+ features[:deactivating] << {:smarts => d[OT.smarts],:p_value => d[OT.pValue]} if d[OT.effect] == 1
+ else
+ if d[OT.effect] =~ TRUE_REGEXP
+ features[:activating] << {:smarts => d[OT.smarts],:p_value => d[OT.pValue]}
+ elsif d[OT.effect] =~ FALSE_REGEXP
+ features[:deactivating] << {:smarts => d[OT.smarts],:p_value => d[OT.pValue]}
+ end
end
end
features
diff --git a/model.rb b/model.rb
index e433893..bab5bde 100644
--- a/model.rb
+++ b/model.rb
@@ -31,7 +31,7 @@ class ToxCreateModel < Ohm::Model
attribute :nr_compounds
attribute :nr_predictions
attribute :correct_predictions
- attribute :weighted_area_under_roc
+ attribute :average_area_under_roc
attribute :sensitivity
attribute :specificity
attribute :r_square
diff --git a/public/javascripts/toxcreate.js b/public/javascripts/toxcreate.js
index 252ad78..ddd18df 100755
--- a/public/javascripts/toxcreate.js
+++ b/public/javascripts/toxcreate.js
@@ -18,20 +18,20 @@ $(function() {
return this.replace(/^\s+|\s+$/g, '');
}
- checkStati = function(stati, subjectstr) {
+ checkStati = function(stati) {
stati = stati.split(", ");
$("body")
var newstati = new Array;
$.each(stati, function(){
- checkProgress(this, subjectstr);
- if(checkStatus(this, subjectstr) > 0) newstati.push(this);
+ checkProgress(this);
+ if(checkStatus(this) > 0) newstati.push(this);
});
- if (newstati.length > 0) var statusCheck = setTimeout('checkStati("' + newstati.join(", ") + '", "' + subjectstr + '")',10000);
+ if (newstati.length > 0) var statusCheck = setTimeout('checkStati("' + newstati.join(", ") + '")',10000);
};
- checkStatus = function(id, subjectstr) {
+ checkStatus = function(id) {
if(id == "") return -1;
- var opts = {method: 'get', action: 'model/' + id + '/status' + subjectstr, id: id};
+ var opts = {method: 'get', action: 'model/' + id + '/status', id: id};
var status_changed = $.ajax({
type: opts.method,
url: opts.action,
@@ -62,7 +62,7 @@ $(function() {
};
- checkProgress = function(id, subjectstr) {
+ checkProgress = function(id) {
var task = $("input#model_" + id + "_task").attr('value');
var opts = {action: task + "/percentageCompleted" , id: id};
var progress_changed = $.ajax({
@@ -305,6 +305,7 @@ jQuery.fn.deleteModel = function(type, options) {
if(confirm(opts.confirm_message)) {
$("div#model_" + opts.id).fadeTo("slow",0.5);
$("span#model_" + opts.id + "_status").html("Deleting");
+ $("a#delete_" + opts.id).html("");
$.ajax({
type: opts.method,
url: opts.action,
diff --git a/views/classification_validation.haml b/views/classification_validation.haml
index f25a321..e06cb65 100644
--- a/views/classification_validation.haml
+++ b/views/classification_validation.haml
@@ -3,15 +3,26 @@
= sprintf("%.2f", model.correct_predictions.to_f) if model.correct_predictions
= '%'
%dt
- %a{:href => "http://en.wikipedia.org/wiki/Receiver_operating_characteristic", :rel => "external"} Weighted area under ROC:
+ %a{:href => "http://en.wikipedia.org/wiki/Receiver_operating_characteristic", :rel => "external"} Average area under ROC:
%dd
- = sprintf("%.3f", model.weighted_area_under_roc.to_f) if model.weighted_area_under_roc
+ - if model.average_area_under_roc
+ = sprintf("%.3f", model.average_area_under_roc.to_f)
+ - else
+ = 'NA'
%dt
%a{:href => "http://en.wikipedia.org/wiki/Sensitivity_and_specificity", :rel => "external"} Specificity:
-%dd= sprintf("%.3f", model.specificity.to_f) if model.specificity
+%dd
+ - if model.specificity
+ = sprintf("%.3f", model.specificity.to_f)
+ - else
+ = 'NA'
%dt
%a{:href => "http://en.wikipedia.org/wiki/Sensitivity_and_specificity", :rel => "external"} Sensitivity:
-%dd= sprintf("%.3f", model.sensitivity.to_f) if model.sensitivity
+%dd
+ - if model.sensitivity
+ = sprintf("%.3f", model.sensitivity.to_f)
+ - else
+ = 'NA'
%dt
%a{:href => "http://en.wikipedia.org/wiki/Confusion_matrix", :rel => "external"} Confusion Matrix:
- if model.confusion_matrix
@@ -32,7 +43,7 @@
%th{:bgcolor => "#CCD2DC"}
= cm[1][i]
- else
- %td= cm[1][i]
+ %td= cm[1][i].to_i
- if cm.size > 2
- (2..cm.size-1).each do |i|
%tr
@@ -41,4 +52,4 @@
%th{:bgcolor => "#CCD2DC"}
= cm[i][j]
- else
- %td= cm[i][j]
+ %td= cm[i][j].to_i
diff --git a/views/help.haml b/views/help.haml
index a96b690..2154c94 100644
--- a/views/help.haml
+++ b/views/help.haml
@@ -87,13 +87,13 @@
%p
Excel examples for download:
- %ul
- %li
- = link_to "hamster_carcinogenicity.xls", "/hamster_carcinogenicity.xls"
- (classification)
- %li
- = link_to "EPAFHM.xls", "/EPAFHM.xls"
- (regression)
+%ul
+ %li
+ = link_to "hamster_carcinogenicity.xls", "/hamster_carcinogenicity.xls"
+ (classification)
+ %li
+ = link_to "EPAFHM.xls", "/EPAFHM.xls"
+ (regression)
%h3 CSV example
@@ -113,13 +113,13 @@
%p
CSV examples for download:
- %ul
- %li
- = link_to "hamster_carcinogenicity.csv", "/hamster_carcinogenicity.csv"
- (classification)
- %li
- = link_to "EPAFHM.csv", "/EPAFHM.csv"
- (regression)
+%ul
+ %li
+ = link_to "hamster_carcinogenicity.csv", "/hamster_carcinogenicity.csv"
+ (classification)
+ %li
+ = link_to "EPAFHM.csv", "/EPAFHM.csv"
+ (regression)
%p You can create CSV files in Excel: Create a sheet with two columns and export them as CSV file with the "Save As" option from the menu, selecting the CSV (comma delimited) format.
diff --git a/views/layout.haml b/views/layout.haml
index c76396d..96f7d35 100644
--- a/views/layout.haml
+++ b/views/layout.haml
@@ -51,7 +51,7 @@
Disclaimer: ToxCreate uses state-of-the-art published and tested algorithms and methodologies with full validation information. However, just as with experimental measurements, computational predictions are subject to varying degrees of accuracy and uncertainty, so please read the full report carefully, particularly the validation information. No liability is accepted for any inaccuracy in predictions.
%p
- tag = `git tag`.split("\n").last
- - tagdate = `git show #{tag}|grep Date`.chomp
+ - tagdate = `git show #{tag}|grep Date`.split("\n").last
Version:
= tag
,
diff --git a/views/model.haml b/views/model.haml
index 003fc51..4316b34 100644
--- a/views/model.haml
+++ b/views/model.haml
@@ -5,13 +5,51 @@
#{js}
});
-- if is_authorized(model.web_uri, "DELETE")
- %div{:id => "model_#{model.id}"}
- %div{:id => "model_#{model.id}_name"}
- = haml :model_name, :locals=>{:model=>model}, :layout => false
- .model
- %dl
- %dt Status:
+%div{:id => "model_#{model.id}"}
+ %div{:id => "model_#{model.id}_name"}
+ = haml :model_name, :locals=>{:model=>model}, :layout => false
+ .model
+ %dl
+ %dt Status:
+ %dd
+ %span{:id => "model_#{model.id}_status", :class => "model_status"}
+ = haml :model_status, :locals=>{:model=>model}, :layout => false
+ - if model.task_uri && model.status !~ /Completed|Cancelled|Error|Deleting/
+ - if (task = OpenTox::Task.exist?(model.task_uri))
+ %input{:type => 'hidden', :id => "model_#{model.id}_task", :value => "#{model.task_uri}"}
+ - percentage_completed = task.metadata[OT.percentageCompleted].to_i
+ - js = "$('#model_#{model.id}_progress').progressbar({ value: #{percentage_completed} });"
+ :javascript
+ $(function() {
+ #{js}
+ });
+
+ %div{:id => "model_#{model.id}_progress", :class => "model_progress", :title => "#{percentage_completed}%"}
+ //= haml :model_progress, :locals=>{:percentage_completed=>percentage_completed}, :layout => false
+ - if is_authorized(model.web_uri, "DELETE")
+ %a{:href => url_for("/model/#{model.id}"), :id => "delete_#{model.id}", :class => 'delete_link'}
+ - if model.status =~ /Completed|Error|Cancelled/
+ &nbsp;(delete)
+ - else
+ &nbsp;(stop)
+ %span
+ %br
+
+ %dt Started:
+ %dd= Time.parse(model.created_at.to_s).strftime("%m/%d/%Y - %I:%M:%S%p %Z") if model.created_at
+ - if model.nr_compounds
+ %dt Training compounds:
+ %dd= model.nr_compounds
+ - if model.error_messages
+ %dt Errors:
+ %dd= model.error_messages
+ - if CONFIG[:logger]=="debug"
+ %dt Task:
+ %dd
+ %a{:href => "#{model.task_uri}", :id => "model_#{model.id}_task_link", :rel => "external"}
+ = model.task_uri
+ - if model.warnings
+ %dt Warnings:
%dd
%span{:id => "model_#{model.id}_status", :class => "model_status"}
= haml :model_status, :locals=>{:model=>model}, :layout => false
@@ -61,41 +99,37 @@
%dd= toggle_link("##{model.type}","#{model.type}")
%dt Descriptors:
%dd
- %a{:href => 'http://www.maunz.de/libfminer2-bbrc-doc/', :rel => "external"} Fminer backbone refinement classes
- - if model.training_dataset
- %dt Training dataset:
- %dd
- - if model.training_dataset.match(/ambit/i)
- %a{:href => "#{model.training_dataset}#{subjectstring}", :rel => "external"} Ambit database
- - else
- %a{:href => "#{model.training_dataset}.xls#{subjectstring}"} Excel sheet
- ,
- -#%a{:href => "#{model.training_dataset}.rdf"} RDF/XML
- -#%em (experts) ,
- %a{:href => "#{model.training_dataset}.sdf#{subjectstring}" } SDF
- ,
- %a{:href => "#{model.training_dataset}.yaml#{subjectstring}" } YAML
- %em (experts)
- - if model.feature_dataset
- %dt Feature dataset:
- %dd
- -#%a{:href => "#{model.feature_dataset}.rdf"} RDF/XML
- -#,
- %a{:href => "#{model.feature_dataset}.xls#{subjectstring}"} Excel sheet
+ - if model.training_dataset.match(/ambit/i)
+ %a{:href => "#{model.training_dataset}", :rel => "external"} Ambit database
+ - else
+ %a{:href => "#{model.training_dataset}.xls"} Excel sheet
,
- %a{:href => "#{model.feature_dataset}.sdf#{subjectstring}"} SDF
+ -#%a{:href => "#{model.training_dataset}.rdf"} RDF/XML
+ -#%em (experts) ,
+ %a{:href => "#{model.training_dataset}.sdf" } SDF
,
- %a{:href => "#{model.feature_dataset}.yaml#{subjectstring}"} YAML
+ %a{:href => "#{model.training_dataset}.yaml" } YAML
%em (experts)
- - if model.uri
- %dt Model:
- %dd{:id => "model_qmrf_#{model.id}"}
- %input{ :id => "model_validation_qmrf_#{model.id}", :type => "hidden", :value => "#{model.validation_qmrf_status}", :class => "model_validation_qmrf" }
- -#%a{:href => "#{model.uri}.rdf"} RDF/XML
- -#,
- - if model.validation_qmrf_uri
- %a{:href => File.join(model.validation_qmrf_uri,"editor")} QMRF Editor,
- %a{:href => "#{model.uri}.yaml#{subjectstring}"} YAML
- %em (experts, models cannot be represented in Excel)
+ - if model.feature_dataset
+ %dt Feature dataset:
+ %dd
+ -#%a{:href => "#{model.feature_dataset}.rdf"} RDF/XML
+ -#,
+ %a{:href => "#{model.feature_dataset}.xls"} Excel sheet
+ ,
+ %a{:href => "#{model.feature_dataset}.sdf"} SDF
+ ,
+ %a{:href => "#{model.feature_dataset}.yaml"} YAML
+ %em (experts)
+ - if model.uri
+ %dt Model:
+ %dd{:id => "model_qmrf_#{model.id}"}
+ %input{ :id => "model_validation_qmrf_#{model.id}", :type => "hidden", :value => "#{model.validation_qmrf_status}", :class => "model_validation_qmrf" }
+ -#%a{:href => "#{model.uri}.rdf"} RDF/XML
+ -#,
+ - if model.validation_qmrf_uri
+ %a{:href => File.join(model.validation_qmrf_uri,"editor")} QMRF Editor,
+ %a{:href => "#{model.uri}.yaml"} YAML
+ %em (experts, models cannot be represented in Excel)
- = haml :validation, :locals=>{:model=>model,:subjectstring => subjectstring}, :layout => false
+ = haml :validation, :locals=>{:model=>model}, :layout => false
diff --git a/views/models.haml b/views/models.haml
index 9ab2858..a1ef8ba 100644
--- a/views/models.haml
+++ b/views/models.haml
@@ -3,7 +3,7 @@
:javascript
$(function() {
if(#{stati != 0}) {
- setTimeout('checkStati("#{stati_to_check}", "#{subjectstring}")',5000);
+ setTimeout('checkStati("#{stati_to_check}", "")',5000);
}
var reload_validation = true;
});
@@ -20,6 +20,6 @@
- if @models
- @models.each do |model|
- = haml :model, :locals=>{:model=>model,:subjectstring=>subjectstring}, :layout => false
--if @models.size == 0
+ = haml :model, :locals=>{:model=>model}, :layout => false
+-if @models.size == 0
.notice There are currently no models. You have to create a model first.
diff --git a/views/predict.haml b/views/predict.haml
index 65e4113..2e78b69 100644
--- a/views/predict.haml
+++ b/views/predict.haml
@@ -17,13 +17,13 @@
%applet{:code => "JME.class", :name => "JME", :archive => "JME.jar", :width => "500", :height => "360"}
%param{ :name => "options", :value => "polarnitro"}
Please enable Java and JavaScript in your browser to use the JME editor.
-
- %jme_info
- <span style="font-size:75%">&copy;
+ %span{:style=>"font-size:75%"}
+ &copy;
%a{:href => 'http://www.molinspiration.com/jme/index.html', :rel => "external"} JME Editor
courtesy of Peter Ertl, Novartis</span>
%br
- %label{:for => 'identifier'} or enter a Name, InChI, Smiles, CAS, ...
+ -# %label{:for => 'identifier'} or enter a Name, InChI, Smiles, CAS, ...
+ %label{:for => 'identifier'} or enter a Smiles string
%input{:type => 'text', :name => 'identifier', :id => 'identifier', :size => '60'}
%br
%fieldset
diff --git a/views/validation.haml b/views/validation.haml
index b8a6eaa..0a094d6 100644
--- a/views/validation.haml
+++ b/views/validation.haml
@@ -7,7 +7,7 @@
- if model.validation_report_uri
%dt Detailed report:
%dd
- %a{:href => model.validation_report_uri + subjectstring, :target => "_blank"} show
+ %a{:href => model.validation_report_uri, :target => "_blank"} show
%dt Number of predictions:
%dd= model.nr_predictions.to_s
- case model.type