From 84417ada7c4d0a3b44ed35a8eee60db2e1e751f6 Mon Sep 17 00:00:00 2001 From: Christoph Helma Date: Wed, 27 Mar 2013 17:11:50 +0100 Subject: validation tests ok --- lib/dataset.rb | 9 ++------- lib/model.rb | 9 ++++----- lib/opentox.rb | 4 ++-- lib/overwrite.rb | 3 ++- lib/validation.rb | 34 ++++++++++++++++++++-------------- 5 files changed, 30 insertions(+), 29 deletions(-) (limited to 'lib') diff --git a/lib/dataset.rb b/lib/dataset.rb index 8d1aed0..402d2a1 100644 --- a/lib/dataset.rb +++ b/lib/dataset.rb @@ -76,14 +76,8 @@ module OpenTox # @param [OpenTox::Feature] Feature # @return [Array] Data entry values def values(compound, feature) - #puts compounds.inspect - #puts "==" - #puts compound.inspect rows = (0 ... compounds.length).select { |r| compounds[r].uri == compound.uri } - #puts rows.inspect col = features.collect{|f| f.uri}.index feature.uri - #puts col - #puts data_entries(true).inspect rows.collect{|row| data_entries[row][col]} end @@ -340,8 +334,9 @@ module OpenTox end def data_entry_value(compound_index, feature_uri) + data_entries(true) if @data_entries.empty? col = @features.collect{|f| f.uri}.index feature_uri - @data_entries[compound_index][col] + @data_entries[compound_index] ? @data_entries[compound_index][col] : nil end end diff --git a/lib/model.rb b/lib/model.rb index 144c8c3..a354cfa 100644 --- a/lib/model.rb +++ b/lib/model.rb @@ -13,9 +13,8 @@ module OpenTox def feature_type # CH: subjectid is a object variable, no need to pass it as a parameter unless @feature_type - get unless metadata[OT.dependentVariables.to_s] - bad_request_error "Cannot determine feature type, dependent variable missing in model #{@uri}" unless metadata[OT.dependentVariables.to_s] - @feature_type = OpenTox::Feature.new( metadata[OT.dependentVariables.to_s][0], @subjectid ).feature_type + bad_request_error "Cannot determine feature type, dependent variable missing in model #{@uri}" unless metadata[RDF::OT.dependentVariables] + @feature_type = OpenTox::Feature.new( metadata[RDF::OT.dependentVariables][0], @subjectid ).feature_type end @feature_type end @@ -32,8 +31,8 @@ module OpenTox private def load_predicted_variables - metadata[OT.predictedVariables.to_s].each do |f| - feat = OpenTox::Feature.find( f, @subjectid ) + metadata[RDF::OT.predictedVariables].each do |f| + feat = OpenTox::Feature.new( f, @subjectid ) if feat.title =~ /confidence/ @predicted_confidence = f else diff --git a/lib/opentox.rb b/lib/opentox.rb index 1251f33..db7ba5c 100644 --- a/lib/opentox.rb +++ b/lib/opentox.rb @@ -25,8 +25,8 @@ module OpenTox # Object metadata (lazy loading) # @return [Hash] Object metadata def metadata force_update=false - if (@metadata.empty? or force_update) and URI.accessible? @uri - get if @rdf.empty? or force_update + if (@metadata.nil? or @metadata.empty? or force_update) and URI.accessible? @uri + get if @rdf.nil? or @rdf.empty? or force_update # return values as plain strings instead of RDF objects @metadata = @rdf.to_hash[RDF::URI.new(@uri)].inject({}) { |h, (predicate, values)| h[predicate] = values.collect{|v| v.to_s}; h } end diff --git a/lib/overwrite.rb b/lib/overwrite.rb index d27434b..c2c06dd 100644 --- a/lib/overwrite.rb +++ b/lib/overwrite.rb @@ -153,7 +153,8 @@ module Kernel report ? error_message = report[RDF::OT.message] : error_message = $!.message Object.send(error_method,error_message,t.uri) rescue - internal_server_error "#{$!.message}\n#{$!.backtrace}", t.uri + internal_server_error "#{$!.message}", t.uri + #internal_server_error "#{$!.message}\n#{$!.backtrace}", t.uri end end uri = t.resultURI diff --git a/lib/validation.rb b/lib/validation.rb index 5c91f7c..fa43ba0 100644 --- a/lib/validation.rb +++ b/lib/validation.rb @@ -58,7 +58,7 @@ module OpenTox params[:subjectid] = subjectid if subjectid uri = OpenTox::RestClientWrapper.post( File.join($validation[:uri],"training_test_split"), params,{:content_type => "text/uri-list"},waiting_task ) - Validation.new(OpenTox.wait_for_task(uri)) + Validation.new(wait_for_task(uri)) end # creates a training test validation, waits until it finishes, may take some time @@ -70,7 +70,7 @@ module OpenTox params[:subjectid] = subjectid if subjectid uri = OpenTox::RestClientWrapper.post( File.join($validation[:uri],"training_test_validation"), params,{:content_type => "text/uri-list"},waiting_task ) - Validation.new(OpenTox.wait_for_task(uri)) + Validation.new(wait_for_task(uri)) end # creates a bootstrapping validation, waits until it finishes, may take some time @@ -82,7 +82,7 @@ module OpenTox params[:subjectid] = subjectid if subjectid uri = OpenTox::RestClientWrapper.post( File.join($validation[:uri],"bootstrapping"), params,{:content_type => "text/uri-list"},waiting_task ) - Validation.new(OpenTox.wait_for_task(uri)) + Validation.new(wait_for_task(uri)) end # looks for report for this validation, creates a report if no report is found @@ -109,16 +109,16 @@ module OpenTox # [[nil,"active","moderate","inactive"],["active",1,3,99],["moderate",4,2,8],["inactive",3,8,6]] # -> 99 inactive compounds have been predicted as active def confusion_matrix - raise "no classification statistics, probably a regression valdiation" unless @metadata[OT.classificationStatistics] - matrix = @metadata[OT.classificationStatistics][OT.confusionMatrix][OT.confusionMatrixCell] - values = matrix.collect{|cell| cell[OT.confusionMatrixPredicted]}.uniq + raise "no classification statistics, probably a regression valdiation" unless @metadata[RDF::OT.classificationStatistics] + matrix = @metadata[RDF::OT.classificationStatistics][RDF::OT.confusionMatrix][RDF::OT.confusionMatrixCell] + values = matrix.collect{|cell| cell[RDF::OT.confusionMatrixPredicted]}.uniq table = [[nil]+values] values.each do |c| table << [c] values.each do |r| matrix.each do |cell| - if cell[OT.confusionMatrixPredicted]==c and cell[OT.confusionMatrixActual]==r - table[-1] << cell[OT.confusionMatrixValue].to_f + if cell[RDF::OT.confusionMatrixPredicted]==c and cell[RDF::OT.confusionMatrixActual]==r + table[-1] << cell[RDF::OT.confusionMatrixValue].to_f break end end @@ -190,7 +190,7 @@ module OpenTox params[:subjectid] = subjectid if subjectid uri = OpenTox::RestClientWrapper.post( File.join($validation[:uri],"crossvalidation"), params,{:content_type => "text/uri-list"},waiting_task ) - Crossvalidation.new(OpenTox.wait_for_task(uri)) + Crossvalidation.new(wait_for_task(uri)) end # looks for report for this crossvalidation, creates a report if no report is found @@ -204,7 +204,7 @@ module OpenTox end # loads metadata via yaml from crossvalidation object - # fields (like for example the validations) can be acces via validation.metadata[OT.validation] + # fields (like for example the validations) can be acces via validation.metadata[RDF::OT.validation] def load_metadata( subjectid=nil ) @metadata = YAML.load(OpenTox::RestClientWrapper.get(uri,nil,{:subjectid => subjectid, :accept => "application/x-yaml"})) end @@ -255,12 +255,14 @@ module OpenTox # @return [OpenTox::ValidationReport] def self.create( validation_uri, params={}, subjectid=nil, waiting_task=nil ) params = {} if params==nil - raise OpenTox::BadRequestError.new "params is no hash" unless params.is_a?(Hash) + bad_request_error "params is no hash" unless params.is_a?(Hash) params[:validation_uris] = validation_uri params[:subjectid] = subjectid uri = RestClientWrapper.post(File.join($validation[:uri],"/report/validation"), params, {}, waiting_task ) - ValidationReport.new(OpenTox.wait_for_task(uri)) + puts uri + uri = wait_for_task(uri) + ValidationReport.new(uri) end end @@ -297,7 +299,7 @@ module OpenTox def self.create( crossvalidation_uri, subjectid=nil, waiting_task=nil ) uri = RestClientWrapper.post(File.join($validation[:uri],"/report/crossvalidation"), { :validation_uris => crossvalidation_uri, :subjectid => subjectid }, {}, waiting_task ) - CrossvalidationReport.new(OpenTox.wait_for_task(uri)) + CrossvalidationReport.new(wait_for_task(uri)) end end @@ -352,7 +354,11 @@ module OpenTox params[:subjectid] = subjectid uri = RestClientWrapper.post(File.join($validation[:uri],"/report/algorithm_comparison"), params, {}, waiting_task ) - AlgorithmComparisonReport.new(OpenTox.wait_for_task(uri)) + puts uri + + uri = wait_for_task(uri) + #AlgorithmComparisonReport.new(wait_for_task(uri)) + AlgorithmComparisonReport.new(uri) end end -- cgit v1.2.3