From 9138e8ab0fd375178d922ad2fc0da0061ebe8897 Mon Sep 17 00:00:00 2001 From: gebele Date: Mon, 29 Aug 2011 13:15:26 +0200 Subject: merge development -> feature/policy --- application.rb | 95 ++++++++++++++-------------- helper.rb | 43 +++---------- model.rb | 2 +- public/javascripts/toxcreate.js | 15 ++--- views/classification_validation.haml | 23 +++++-- views/help.haml | 28 ++++----- views/layout.haml | 2 +- views/model.haml | 116 ++++++++++++++++++++++------------- views/models.haml | 6 +- views/predict.haml | 8 +-- views/validation.haml | 2 +- 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/ +  (delete) + - else +  (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%"} + © %a{:href => 'http://www.molinspiration.com/jme/index.html', :rel => "external"} JME Editor courtesy of Peter Ertl, Novartis %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 -- cgit v1.2.3