diff options
author | mr <mr@mrautenberg.de> | 2010-09-03 12:14:36 +0200 |
---|---|---|
committer | mr <mr@mrautenberg.de> | 2010-09-03 12:14:36 +0200 |
commit | c3880fb2a96f61dd0bf01bea95533139a7d2bbdb (patch) | |
tree | 7c744634497982c1f044b19d590efdf4d1826c96 /lazar.rb | |
parent | 9c58dbf3b903f1b2b7343acdf7875fb7115e4bb3 (diff) | |
parent | 76e58af42960fbe9357f899ffcc2588bfc756ed9 (diff) |
Merge remote branch 'helma/master' into development
Diffstat (limited to 'lazar.rb')
-rw-r--r-- | lazar.rb | 113 |
1 files changed, 95 insertions, 18 deletions
@@ -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 |