diff options
author | Martin Gütlein <martin.guetlein@gmail.com> | 2010-04-19 13:55:15 +0200 |
---|---|---|
committer | Martin Gütlein <martin.guetlein@gmail.com> | 2010-04-19 13:55:15 +0200 |
commit | 7386c1b50448ad338b84628e1d585cefb05006f1 (patch) | |
tree | 91017789dcda1c4606755c10c87e8c6bddb3aa13 /lib | |
parent | 3c52741e6c304ee48881ea67aa79039de8a9849a (diff) |
lib/owl.rb
Diffstat (limited to 'lib')
-rw-r--r-- | lib/dataset.rb | 26 | ||||
-rw-r--r-- | lib/model.rb | 67 |
2 files changed, 38 insertions, 55 deletions
diff --git a/lib/dataset.rb b/lib/dataset.rb index d6e0b39..4c3f103 100644 --- a/lib/dataset.rb +++ b/lib/dataset.rb @@ -26,13 +26,14 @@ module OpenTox d.uri = d.identifier # when loading a dataset from owl, only compound- and feature-uris are loaded - owl.load_data_compounds_and_features(d.compounds, d.features) + owl.load_dataset(d.compounds, d.features) # all features are marked as dirty, loaded dynamically later d.init_dirty_features(owl) d.compounds.uniq! d.features.uniq! end + d.uri = uri unless d.uri return d end @@ -78,7 +79,12 @@ module OpenTox return "no classification key" end else - raise "invalid value type" + raise "predicted class value is not a hash\n"+ + "value "+v.to_s+"\n"+ + "value-class "+v.class.to_s+"\n"+ + "dataset "+@uri.to_s+"\n"+ + "compound "+compound.to_s+"\n"+ + "feature "+feature.to_s+"\n" end end @@ -94,7 +100,12 @@ module OpenTox raise "no confidence key" end else - raise "invalid value type" + raise "prediction confidence value is not a hash value\n"+ + "value "+v.to_s+"\n"+ + "value-class "+v.class.to_s+"\n"+ + "dataset "+@uri.to_s+"\n"+ + "compound "+compound.to_s+"\n"+ + "feature "+feature.to_s+"\n" end end @@ -119,7 +130,12 @@ module OpenTox end raise "feature value no found: "+feature.to_s else - raise "invalid value type" + raise "value is not an array\n"+ + "value "+v.to_s+"\n"+ + "value-class "+v.class.to_s+"\n"+ + "dataset "+@uri.to_s+"\n"+ + "compound "+compound.to_s+"\n"+ + "feature "+feature.to_s+"\n" end end @@ -127,7 +143,7 @@ module OpenTox def load_feature_values(feature=nil) if feature raise "feature already loaded" unless @dirty_features.include?(feature) - @owl.load_data_compounds_and_features(@compounds, @data, feature) + @owl.load_dataset_feature_values(@compounds, @data, feature) @dirty_features.delete(feature) else @data = {} diff --git a/lib/model.rb b/lib/model.rb index 5ca3914..8674311 100644 --- a/lib/model.rb +++ b/lib/model.rb @@ -21,8 +21,10 @@ module OpenTox @independent_variables = owl.independentVariables @predicted_variables = owl.predictedVariables - raise "invalid model:\n"+self.to_yaml+"\n" unless Utils.is_uri?(@uri) && @dependent_variables.to_s.size>0 && - @independent_variables.to_s.size>0 && @predicted_variables.to_s.size>0 if ENV['RACK_ENV'] =~ /test|debug/ + raise "invalid model:\n"+self.to_yaml+"\n" unless Utils.is_uri?(@uri) && + #@dependent_variables.to_s.size>0 && + #@independent_variables.to_s.size>0 && + @predicted_variables.to_s.size>0 if ENV['RACK_ENV'] =~ /test|debug/ end end @@ -31,61 +33,24 @@ module OpenTox def self.build( algorithm_uri, algorithm_params ) - LOGGER.debug "Build model, algorithm_uri:"+algorithm_uri.to_s+", algorithm_parms: "+algorithm_params.inspect.to_s - uri = OpenTox::RestClientWrapper.post(algorithm_uri,algorithm_params).to_s - - if uri.to_s =~ /ambit.*task|tu-muenchen.*task/ - uri = PredictionModel.redirect_task(uri) - elsif Utils.task_uri?(uri) - uri = OpenTox::Task.find(uri).wait_for_resource.to_s + if algorithm_uri =~ /ambit2/ + LOGGER.warn "Ambit hack, replacing 'prediction_feature' with 'target'" + algorithm_params[:target] = algorithm_params[:prediction_feature] + algorithm_params.delete(:prediction_feature) end - raise "invalid build model result: "+uri.to_s unless uri =~ /model/ - return PredictionModel.find(uri) - end - - def self.redirect_task( uri ) - raise "no redirect task uri: "+uri.to_s unless uri.to_s =~ /ambit.*task|tu-muenchen.*task/ - while (uri.to_s =~ /ambit.*task|tu-muenchen.*task/) - #HACK handle redirect - LOGGER.debug "REDIRECT TASK: "+uri.to_s - redirect = "" - while (redirect.size == 0) - IO.popen("bin/redirect.sh "+uri.to_s) do |f| - while line = f.gets - redirect += line.chomp - end - end - raise "TASK ERROR" if $?!=0 - sleep 0.3 - end - uri = redirect - LOGGER.debug "REDIRECT TO: "+uri.to_s - end - return uri + LOGGER.debug "Build model, algorithm_uri:"+algorithm_uri.to_s+", algorithm_parms: "+algorithm_params.inspect.to_s + uri = OpenTox::RestClientWrapper.post(algorithm_uri,algorithm_params, nil, true).to_s + raise "Invalid build model result: "+uri.to_s unless uri =~ /model/ + return PredictionModel.find(uri) end def predict_dataset( dataset_uri ) LOGGER.debug "Predict dataset: "+dataset_uri.to_s+" with model "+@uri.to_s - - #HACK using curl - uri = "" - IO.popen("curl -X POST -d dataset_uri='"+dataset_uri+"' "+@uri.to_s+" 2> /dev/null") do |f| - while line = f.gets - uri += line - end - end - - if uri.to_s =~ /ambit.*task|tu-muenchen.*task/ - uri = PredictionModel.redirect_task(uri) - raise "invalid redirect result: " unless uri =~ /ambit.*dataset/ - return uri - else - uri = OpenTox::Task.find(uri).wait_for_resource.to_s if Utils.task_uri?(uri) - return uri if Utils.dataset_uri?(uri) - raise "not sure about prediction result: "+uri.to_s - end + uri = RestClientWrapper.post(@uri, {:dataset_uri=>dataset_uri}, nil, true) + raise "Prediciton result no dataset uri: "+uri.to_s unless Utils.dataset_uri?(uri) + uri end def classification? @@ -96,6 +61,8 @@ module OpenTox return false elsif @uri =~/tu-muenchen/ and @title =~ /regression|M5P|GaussP/ return false + elsif @uri =~/ambit2/ and @title =~ /pKa/ + return false else raise "unknown model, uri:'"+@uri.to_s+"' title:'"+@title.to_s+"'" end |