summaryrefslogtreecommitdiff
path: root/lib/model.rb
diff options
context:
space:
mode:
authormguetlein <martin.guetlein@gmail.com>2011-01-13 14:02:58 +0100
committermguetlein <martin.guetlein@gmail.com>2011-01-13 14:02:58 +0100
commitf2ca545448ab8a6f654309f23cfce9416b2e9856 (patch)
treedb97da6b26689585ab2d51467ec72a6999e32cd8 /lib/model.rb
parentc923250bccd4023447feb46935f3b59ce5cfb843 (diff)
find methods for algorithm and model, split method for dataset, feature_type method for model and feature, perform single predicitons in resuce block, add to-html.rb, fix handling of rest-client-wrapper
Diffstat (limited to 'lib/model.rb')
-rw-r--r--lib/model.rb76
1 files changed, 74 insertions, 2 deletions
diff --git a/lib/model.rb b/lib/model.rb
index c645bdc..fb266e0 100644
--- a/lib/model.rb
+++ b/lib/model.rb
@@ -24,8 +24,76 @@ module OpenTox
# Generic OpenTox model class for all API compliant services
class Generic
include Model
+
+ # Find Generic Opentox Model via URI, and loads metadata
+ # @param [String] uri Model URI
+ # @return [OpenTox::Model::Generic] Model instance, nil if model was not found
+ def self.find(uri)
+ model = Generic.new(uri)
+ model.load_metadata
+ if model.metadata==nil or model.metadata.size==0
+ nil
+ else
+ model
+ end
+ end
+
+ # provides feature type, possible types are "regression" or "classification"
+ # @return [String] feature type, "unknown" if type could not be estimated
+ def feature_type
+ # dynamically perform restcalls if necessary
+ load_metadata if @metadata==nil or @metadata.size==0 or (@metadata.size==1 && @metadata.values[0]==@uri)
+ @dependentVariable = OpenTox::Feature.find( @metadata[OT.dependentVariables] ) unless @dependentVariable
+
+ [@dependentVariable.feature_type, @metadata[OT.isA], @metadata[DC.title], @uri].each do |type|
+ case type
+ when /(?i)classification/
+ return "classification"
+ when /(?i)regression/
+ return "regression"
+ end
+ end
+ raise "unknown model "+[@dependentVariable.feature_type, @metadata[OT.isA], @metadata[DC.title], @uri].inspect
+ end
+
+# def classification?
+# # TODO test on various services / request to ontology service needed?
+# # TODO replace bool (for classification/regression) with string value (more types are coming)
+# #raise "classification?: type: "+@type.to_s+", title: "+@title.to_s+", uri: "+@uri.to_s+" "+((@uri =~ /class/) != nil).to_s
+#
+# load_metadata if @metadata==nil or @metadata.size==0 or (@metadata.size==1 && @metadata.values[0]==@uri)
+# @dependentVariable = OpenTox::Feature.find( @metadata[OT.dependentVariables] ) unless @dependentVariable
+# case @dependentVariable.feature_type
+# when "classification"
+# return true
+# when "regression"
+# return false
+# end
+#
+# if @metadata[OT.isA] =~ /(?i)classification/
+# return true
+# end
+#
+# if @metadata[DC.title] =~ /(?i)classification/
+# return true
+# elsif @metadata[DC.title] =~ /(?i)regression/
+# return false
+# elsif @uri =~/ntua/ and @metadata[DC.title] =~ /mlr/
+# return false
+# elsif @uri =~/tu-muenchen/ and @metadata[DC.title] =~ /regression|M5P|GaussP/
+# return false
+# elsif @uri =~/ambit2/ and @metadata[DC.title] =~ /pKa/ || @metadata[DC.title] =~ /Regression|Caco/
+# return false
+# elsif @uri =~/majority/
+# return (@uri =~ /class/) != nil
+# else
+# raise "unknown model, uri:'"+@uri.to_s+"' title:'"+@metadata[DC.title].to_s+"'"
+# end
+# end
+# end
+
end
-
+
# Lazy Structure Activity Relationship class
class Lazar
@@ -101,7 +169,11 @@ module OpenTox
d = Dataset.new(dataset_uri)
d.load_compounds
d.compounds.each do |compound_uri|
- predict(compound_uri,false,subjectid)
+ begin
+ predict(compound_uri,false,subjectid)
+ rescue => ex
+ LOGGER.warn "prediction for compound "+compound_uri.to_s+" failed: "+ex.message
+ end
end
@prediction_dataset.save(subjectid)
@prediction_dataset