summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/crossvalidation.rb2
-rw-r--r--lib/dataset.rb8
-rw-r--r--lib/enm-import.rb (renamed from lib/import.rb~)0
-rw-r--r--lib/error.rb66
-rw-r--r--lib/lazar.rb2
-rw-r--r--lib/leave-one-out-validation.rb2
-rw-r--r--lib/model.rb16
-rw-r--r--lib/overwrite.rb2
-rw-r--r--lib/rest-client-wrapper.rb10
-rw-r--r--lib/validation-statistics.rb2
-rw-r--r--test/error.rb6
-rw-r--r--test/regression-validation.rb2
12 files changed, 25 insertions, 93 deletions
diff --git a/lib/crossvalidation.rb b/lib/crossvalidation.rb
index c866ebc..8719dca 100644
--- a/lib/crossvalidation.rb
+++ b/lib/crossvalidation.rb
@@ -15,7 +15,7 @@ module OpenTox
$logger.debug model.algorithms
klass = ClassificationCrossValidation if model.is_a? Model::LazarClassification
klass = RegressionCrossValidation if model.is_a? Model::LazarRegression
- bad_request_error "Unknown model class #{model.class}." unless klass
+ raise ArgumentError, "Unknown model class #{model.class}." unless klass
cv = klass.new(
name: model.name,
diff --git a/lib/dataset.rb b/lib/dataset.rb
index 90b4993..3979105 100644
--- a/lib/dataset.rb
+++ b/lib/dataset.rb
@@ -142,7 +142,7 @@ module OpenTox
dataset = self.new(:source => file, :name => File.basename(file,".*"), :md5 => md5)
dataset.parse_table table
else
- bad_request_error "#{file} is not a valid CSV/TSV file. Could not find "," ";" or TAB as column separator."
+ raise ArgumentError, "#{file} is not a valid CSV/TSV file. Could not find "," ";" or TAB as column separator."
end
end
dataset
@@ -251,7 +251,7 @@ module OpenTox
# features
feature_names = table.shift.collect{|f| f.strip}
- bad_request_error "Duplicated features in table header." unless feature_names.size == feature_names.uniq.size
+ raise ArgumentError, "Duplicated features in table header." unless feature_names.size == feature_names.uniq.size
if feature_names[0] =~ /ID/i # check ID column
original_id = OriginalId.find_or_create_by(:dataset_id => self.id,:name => feature_names.shift)
@@ -260,7 +260,7 @@ module OpenTox
end
compound_format = feature_names.shift
- bad_request_error "#{compound_format} is not a supported compound format. Accepted formats: SMILES, InChI." unless compound_format =~ /SMILES|InChI/i
+ raise ArgumentError, "#{compound_format} is not a supported compound format. Accepted formats: SMILES, InChI." unless compound_format =~ /SMILES|InChI/i
original_smiles = OriginalSmiles.find_or_create_by(:dataset_id => self.id) if compound_format.match(/SMILES/i)
numeric = []
@@ -473,7 +473,7 @@ module OpenTox
merged_feature = MergedNumericBioActivity.find_or_create_by(:name => features.collect{|f| f.name} + " merged", :original_feature_ids => features.collect{|f| f.id}) # TODO: regression transformations
end
else
- bad_request_error "Cannot merge features of different types (#{feature_classes})."
+ raise ArgumentError, "Cannot merge features of different types (#{feature_classes})."
end
accept_values = []
diff --git a/lib/import.rb~ b/lib/enm-import.rb
index cf1a26f..cf1a26f 100644
--- a/lib/import.rb~
+++ b/lib/enm-import.rb
diff --git a/lib/error.rb b/lib/error.rb
deleted file mode 100644
index 39b3c76..0000000
--- a/lib/error.rb
+++ /dev/null
@@ -1,66 +0,0 @@
-module OpenToxError
- attr_accessor :http_code, :message, :cause
- def initialize message=nil
- message = message.to_s.gsub(/\A"|"\Z/, '') if message # remove quotes
- super message
- @http_code ||= 500
- @message = message.to_s
- @cause = cut_backtrace(caller)
- $logger.error("\n"+JSON.pretty_generate({
- :http_code => @http_code,
- :message => @message,
- :cause => @cause
- }))
- end
-
- def cut_backtrace(trace)
- if trace.is_a?(Array)
- cut_index = trace.find_index{|line| line.match(/sinatra|minitest/)}
- cut_index ||= trace.size
- cut_index -= 1
- cut_index = trace.size-1 if cut_index < 0
- trace[0..cut_index]
- else
- trace
- end
- end
-
-end
-
-class RuntimeError
- include OpenToxError
-end
-
-# clutters log file with library errors
-#class NoMethodError
- #include OpenToxError
-#end
-
-module OpenTox
-
- class Error < RuntimeError
- include OpenToxError
-
- def initialize(code, message=nil)
- @http_code = code
- super message
- end
- end
-
- # OpenTox errors
- RestClientWrapper.known_errors.each do |error|
- # create error classes
- c = Class.new Error do
- define_method :initialize do |message=nil|
- super error[:code], message
- end
- end
- OpenTox.const_set error[:class],c
-
- # define global methods for raising errors, eg. bad_request_error
- Object.send(:define_method, error[:method]) do |message|
- raise c.new(message)
- end
- end
-
-end
diff --git a/lib/lazar.rb b/lib/lazar.rb
index c3bbbf3..a077626 100644
--- a/lib/lazar.rb
+++ b/lib/lazar.rb
@@ -77,7 +77,7 @@ CLASSES = ["Feature","Substance","Dataset","CrossValidation","LeaveOneOutValidat
[ # be aware of the require sequence as it affects class/method overwrites
"overwrite.rb",
"rest-client-wrapper.rb",
- "error.rb",
+ #"error.rb",
"opentox.rb",
"feature.rb",
"physchem.rb",
diff --git a/lib/leave-one-out-validation.rb b/lib/leave-one-out-validation.rb
index d37b6ce..7d73b89 100644
--- a/lib/leave-one-out-validation.rb
+++ b/lib/leave-one-out-validation.rb
@@ -9,7 +9,7 @@ module OpenTox
# @param [OpenTox::Model::Lazar]
# @return [OpenTox::Validation::LeaveOneOut]
def self.create model
- bad_request_error "Cannot create leave one out validation for models with supervised feature selection. Please use crossvalidation instead." if model.algorithms[:feature_selection]
+ raise ArgumentError, "Cannot create leave one out validation for models with supervised feature selection. Please use crossvalidation instead." if model.algorithms[:feature_selection]
$logger.debug "#{model.name}: LOO validation started"
t = Time.now
model.training_dataset.features.collect{|f| f.class}.include?(NominalBioActivity) ? klass = ClassificationLeaveOneOut : klass = RegressionLeaveOneOut
diff --git a/lib/model.rb b/lib/model.rb
index db69120..caf8a6e 100644
--- a/lib/model.rb
+++ b/lib/model.rb
@@ -36,7 +36,7 @@ module OpenTox
#
# @return [OpenTox::Model::Lazar]
def self.create prediction_feature:nil, training_dataset:, algorithms:{}
- bad_request_error "Please provide a training_dataset and a optional prediction_feature." unless prediction_feature or training_dataset
+ raise ArgumentError, "Please provide a training_dataset and a optional prediction_feature." unless prediction_feature or training_dataset
prediction_feature ||= training_dataset.features.select{|f| f.is_a? NumericBioActivity or f.is_a? NominalBioActivity}.first unless prediction_feature
# guess model type
@@ -62,7 +62,7 @@ module OpenTox
# set defaults#
substance_classes = training_dataset.substances.collect{|s| s.class.to_s}.uniq
- bad_request_error "Cannot create models for mixed substance classes '#{substance_classes.join ', '}'." unless substance_classes.size == 1
+ raise ArgumentError, "Cannot create models for mixed substance classes '#{substance_classes.join ', '}'." unless substance_classes.size == 1
if substance_classes.first == "OpenTox::Compound"
@@ -110,7 +110,7 @@ module OpenTox
},
}
else
- bad_request_error "Cannot create models for #{substance_classes.first}."
+ raise ArgumentError, "Cannot create models for #{substance_classes.first}."
end
# overwrite defaults with explicit parameters
@@ -175,7 +175,7 @@ module OpenTox
model.descriptor_ids = feature_ids & property_ids
model.independent_variables = model.descriptor_ids.collect{|i| properties.collect{|p| p[i] ? p[i].median : nil}}
else
- bad_request_error "Descriptor method '#{descriptor_method}' not implemented."
+ raise ArgumentError, "Descriptor method '#{descriptor_method}' not implemented."
end
if model.algorithms[:feature_selection] and model.algorithms[:feature_selection][:method]
@@ -224,7 +224,7 @@ module OpenTox
end
end
else
- bad_request_error "Unknown descriptor type '#{descriptors}' for similarity method '#{similarity[:method]}'."
+ raise ArgumentError, "Unknown descriptor type '#{descriptors}' for similarity method '#{similarity[:method]}'."
end
prediction ||= {:warnings => [], :measurements => []}
@@ -300,7 +300,7 @@ module OpenTox
elsif object.is_a? Dataset
substances = object.substances
else
- bad_request_error "Please provide a OpenTox::Compound an Array of OpenTox::Substances or an OpenTox::Dataset as parameter."
+ raise ArgumentError, "Please provide a OpenTox::Compound an Array of OpenTox::Substances or an OpenTox::Dataset as parameter."
end
# make predictions
@@ -486,7 +486,7 @@ module OpenTox
# @return [OpenTox::Model::Validation] lazar model with five independent 10-fold crossvalidations
def self.from_csv_file file
metadata_file = file.sub(/csv$/,"json")
- bad_request_error "No metadata file #{metadata_file}" unless File.exist? metadata_file
+ raise ArgumentError, "No metadata file #{metadata_file}" unless File.exist? metadata_file
model_validation = self.new JSON.parse(File.read(metadata_file))
training_dataset = Dataset.from_csv_file file
model = Lazar.create training_dataset: training_dataset
@@ -510,7 +510,7 @@ module OpenTox
unless training_dataset # try to import
Import::Enanomapper.import
training_dataset = Dataset.where(name: "Protein Corona Fingerprinting Predicts the Cellular Interaction of Gold and Silver Nanoparticles").first
- bad_request_error "Cannot import 'Protein Corona Fingerprinting Predicts the Cellular Interaction of Gold and Silver Nanoparticles' dataset" unless training_dataset
+ raise ArgumentError, "Cannot import 'Protein Corona Fingerprinting Predicts the Cellular Interaction of Gold and Silver Nanoparticles' dataset" unless training_dataset
end
prediction_feature ||= Feature.where(name: "log2(Net cell association)", category: "TOX").first
diff --git a/lib/overwrite.rb b/lib/overwrite.rb
index 0dd1c8a..d482902 100644
--- a/lib/overwrite.rb
+++ b/lib/overwrite.rb
@@ -84,7 +84,7 @@ class String
def to_boolean
return true if self == true || self =~ (/(true|t|yes|y|1)$/i)
return false if self == false || self.nil? || self =~ (/(false|f|no|n|0)$/i)
- bad_request_error "invalid value for Boolean: \"#{self}\""
+ raise ArgumentError, "invalid value for Boolean: \"#{self}\""
end
end
diff --git a/lib/rest-client-wrapper.rb b/lib/rest-client-wrapper.rb
index c9fd40f..db23e66 100644
--- a/lib/rest-client-wrapper.rb
+++ b/lib/rest-client-wrapper.rb
@@ -28,14 +28,14 @@ module OpenTox
uri = Addressable::URI.encode(uri)
# check input
- bad_request_error "Headers are not a hash: #{headers.inspect} for #{uri}." unless headers==nil or headers.is_a?(Hash)
+ raise ArgumentError, "Headers are not a hash: #{headers.inspect} for #{uri}." unless headers==nil or headers.is_a?(Hash)
headers[:subjectid] ||= @@subjectid
- bad_request_error "Invalid URI: '#{uri}'" unless URI.valid? uri
+ raise ArgumentError, "Invalid URI: '#{uri}'" unless URI.valid? uri
# make sure that no header parameters are set in the payload
[:accept,:content_type,:subjectid].each do |header|
if defined? $aa || URI(uri).host == URI($aa[:uri]).host
else
- bad_request_error "#{header} should be submitted in the headers of URI: #{uri}" if payload and payload.is_a?(Hash) and payload[header]
+ raise ArgumentError, "#{header} should be submitted in the headers of URI: #{uri}" if payload and payload.is_a?(Hash) and payload[header]
end
end
@@ -56,6 +56,7 @@ module OpenTox
@response = @request.execute do |response, request, result|
if [301, 302, 307].include? response.code and request.method == :get
response.follow_redirection(request, result)
+=begin
elsif response.code >= 400 and !URI.task?(uri)
error = known_errors.collect{|e| e if e[:code] == response.code}.compact.first
begin # errors are returned as error reports in json, try to parse
@@ -68,6 +69,7 @@ module OpenTox
cause = nil
end
Object.method(error[:method]).call "#{msg}, #{uri}, #{cause}" # call error method
+=end
else
response
end
@@ -75,6 +77,7 @@ module OpenTox
end
end
+=begin
#@return [Array] of hashes with error code, method and class
def self.known_errors
errors = []
@@ -88,6 +91,7 @@ module OpenTox
end
errors
end
+=end
end
end
diff --git a/lib/validation-statistics.rb b/lib/validation-statistics.rb
index ad4c14d..f3e3af8 100644
--- a/lib/validation-statistics.rb
+++ b/lib/validation-statistics.rb
@@ -242,7 +242,7 @@ module OpenTox
title = "log2(Net cell association [mL/ug(Mg)])"
else
title = feature.name
- title += " [#{feature.unit}]" if feature.unit and !feature.unit.blank?
+ title += "-log10(#{feature.unit})" if feature.unit and !feature.unit.blank?
end
R.eval "image = qplot(prediction,measurement,main='#{title}',xlab='Prediction',ylab='Measurement',asp=1,xlim=range, ylim=range)"
R.eval "image = image + geom_abline(intercept=0, slope=1)"
diff --git a/test/error.rb b/test/error.rb
index eeac735..428f63d 100644
--- a/test/error.rb
+++ b/test/error.rb
@@ -7,12 +7,6 @@ class ErrorTest < MiniTest::Test
assert_nil OpenTox::Feature.find(object.id)
end
- def test_error_methods
- assert_raises OpenTox::NotFoundError do
- not_found_error "This is a test"
- end
- end
-
def test_exception
assert_raises Exception do
raise Exception.new "Basic Exception"
diff --git a/test/regression-validation.rb b/test/regression-validation.rb
index 9418df4..afa4278 100644
--- a/test/regression-validation.rb
+++ b/test/regression-validation.rb
@@ -71,7 +71,7 @@ class RegressionValidationTest < MiniTest::Test
},
}
model = Model::Lazar.create training_dataset: dataset, algorithms: algorithms
- assert_raises OpenTox::BadRequestError do
+ assert_raises ArgumentError do
loo = RegressionLeaveOneOut.create model
end
end