summaryrefslogtreecommitdiff
path: root/lazar.rb
diff options
context:
space:
mode:
authormr <mr@mrautenberg.de>2010-09-03 12:14:36 +0200
committermr <mr@mrautenberg.de>2010-09-03 12:14:36 +0200
commitc3880fb2a96f61dd0bf01bea95533139a7d2bbdb (patch)
tree7c744634497982c1f044b19d590efdf4d1826c96 /lazar.rb
parent9c58dbf3b903f1b2b7343acdf7875fb7115e4bb3 (diff)
parent76e58af42960fbe9357f899ffcc2588bfc756ed9 (diff)
Merge remote branch 'helma/master' into development
Diffstat (limited to 'lazar.rb')
-rw-r--r--lazar.rb113
1 files changed, 95 insertions, 18 deletions
diff --git a/lazar.rb b/lazar.rb
index db29399..64175be 100644
--- a/lazar.rb
+++ b/lazar.rb
@@ -1,21 +1,17 @@
get '/lazar/?' do
- if File.exists?('public/lazar.owl')
- rdf = File.read('public/lazar.owl')
- else
- owl = OpenTox::Owl.create 'Algorithm', url_for('/lazar',:full)
- owl.set 'title',"lazar"
- owl.set 'creator',"http://github.com/helma/opentox-algorithm"
- owl.parameters = {
- "Dataset URI" =>
- { :scope => "mandatory", :value => "dataset_uri" },
- "Feature URI for dependent variable" =>
- { :scope => "mandatory", :value => "prediction_feature" },
- "Feature generation URI" =>
- { :scope => "mandatory", :value => "feature_generation_uri" }
- }
- rdf = owl.rdf
- File.open('public/lazar.owl', 'w') {|f| f.print rdf}
- end
+ owl = OpenTox::Owl.create 'Algorithm', url_for('/lazar',:full)
+ owl.set 'title',"lazar"
+ owl.set 'creator',"http://github.com/helma/opentox-algorithm"
+ owl.parameters = {
+ "Dataset URI" =>
+ { :scope => "mandatory", :value => "dataset_uri" },
+ "Feature URI for dependent variable" =>
+ { :scope => "mandatory", :value => "prediction_feature" },
+ "Feature generation URI" =>
+ { :scope => "mandatory", :value => "feature_generation_uri" }
+ }
+ rdf = owl.rdf
+ File.open('public/lazar.owl', 'w') {|f| f.print rdf}
response['Content-Type'] = 'application/rdf+xml'
rdf
end
@@ -40,7 +36,7 @@ post '/lazar/?' do # create a model
training_activities.features.inspect+")" unless training_activities.features and training_activities.features.include?(params[:prediction_feature])
response['Content-Type'] = 'text/uri-list'
- task_uri = OpenTox::Task.as_task do |task|
+ task_uri = OpenTox::Task.as_task("Create lazar model",url_for('/lazar',:full)) do |task|
# create features
LOGGER.debug "Starting fminer"
@@ -115,3 +111,84 @@ post '/lazar/?' do # create a model
end
halt 202,task_uri
end
+
+post '/property_lazar/?' do # create a model
+
+ LOGGER.debug "Dataset: '" + params[:dataset_uri].to_s + "'"
+ LOGGER.debug "Endpoint: '" + params[:prediction_feature].to_s + "'"
+ LOGGER.debug "Feature dataset: '" + params[:feature_dataset_uri].to_s + "'"
+ dataset_uri = "#{params[:dataset_uri]}"
+
+ begin
+ training_activities = OpenTox::Dataset.find(dataset_uri)
+ rescue
+ halt 404, "Dataset #{dataset_uri} not found"
+ end
+
+ halt 404, "No prediction_feature parameter." unless params[:prediction_feature]
+ halt 404, "No feature_dataset_uri parameter." unless params[:feature_dataset_uri]
+ halt 404, "No feature #{params[:prediction_feature]} in dataset #{params[:dataset_uri]}. (features: "+
+ training_activities.features.inspect+")" unless training_activities.features and training_activities.features.include?(params[:prediction_feature])
+
+ response['Content-Type'] = 'text/uri-list'
+ task_uri = OpenTox::Task.as_task("Create lazar model",url_for('/property_lazar',:full)) do |task|
+
+ # create features
+ #LOGGER.debug "Starting fminer"
+ #params[:feature_uri] = params[:prediction_feature]
+ #fminer_task_uri = OpenTox::Algorithm::Fminer.create_feature_dataset(params)
+ #fminer_task = OpenTox::Task.find(fminer_task_uri)
+ #fminer_task.wait_for_completion
+ #raise "fminer failed" unless fminer_task.completed?
+
+ #LOGGER.debug "Fminer finished #{Time.now}"
+ feature_dataset_uri = params[:feature_dataset_uri]
+ training_features = OpenTox::Dataset.find(feature_dataset_uri)
+ halt 404, "Dataset #{feature_dataset_uri} not found." if training_features.nil?
+ lazar = OpenTox::Model::PropertyLazar.new
+ lazar.trainingDataset = dataset_uri
+ lazar.feature_dataset_uri = feature_dataset_uri
+ #halt 404, "More than one descriptor type" unless training_features.features.size == 1
+ lazar.features = training_features.features
+ training_features.data.each do |compound,features|
+ lazar.properties[compound] = {} unless lazar.properties[compound]
+ LOGGER.debug features.inspect
+ if features
+ features.each do |f|
+ f.each do |name,value|
+ #lazar.features.each do |feature|
+ lazar.properties[compound][name] = value
+ #lazar.properties[compound] = features
+ end
+ end
+ end
+ end
+
+ activities = {}
+ classification = true
+ training_activities.data.each do |compound,features|
+ lazar.activities[compound] = [] unless lazar.activities[compound]
+ features.each do |feature|
+ case feature[params[:prediction_feature]].to_s
+ when "true"
+ lazar.activities[compound] << true
+ when "false"
+ lazar.activities[compound] << false
+ else
+ lazar.activities[compound] << feature[params[:prediction_feature]].to_f
+ classification = false
+ end
+ end
+ end
+ if classification
+ lazar.dependentVariables = params[:prediction_feature]+"_lazar_classification"
+ else
+ lazar.dependentVariables = params[:prediction_feature]+"_lazar_regression"
+ end
+
+ model_uri = lazar.save
+ LOGGER.info model_uri + " created #{Time.now}"
+ model_uri
+ end
+ halt 202,task_uri
+end