From b45be18db5701e781943aafe4078a7ad67904975 Mon Sep 17 00:00:00 2001 From: mguetlein Date: Sat, 9 Jun 2012 10:27:12 +0200 Subject: new branch val_exp --- .gitignore | 7 ++- algorithm_test.rb | 134 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ fminer.rb | 42 +++++++++++++---- libfminer | 2 +- 4 files changed, 171 insertions(+), 14 deletions(-) create mode 100644 algorithm_test.rb diff --git a/.gitignore b/.gitignore index e3debba..fa8bcaf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ -tmp/* -log/* -public/*.owl -*.*~ +.buildpath +.loadpath +.project diff --git a/algorithm_test.rb b/algorithm_test.rb new file mode 100644 index 0000000..08c7d4c --- /dev/null +++ b/algorithm_test.rb @@ -0,0 +1,134 @@ +require "rubygems" +require "sinatra" +before { + request.env['HTTP_HOST']="local-ot/algorithm" + request.env["REQUEST_URI"]=request.env["PATH_INFO"] +} + +require "opentox-ruby" +ENV['RACK_ENV'] = 'test' +require 'application.rb' +require 'test/unit' +require 'rack/test' +LOGGER = Logger.new(STDOUT) +LOGGER.datetime_format = "%Y-%m-%d %H:%M:%S " + +module Sinatra + + set :raise_errors, false + set :show_exceptions, false + + module UrlForHelper + BASE = "http://local-ot/algorithm" + def url_for url_fragment, mode=:path_only + case mode + when :path_only + raise "not impl" + when :full + end + "#{BASE}#{url_fragment}" + end + end +end + +class AlgorithmTest < Test::Unit::TestCase + include Rack::Test::Methods + + def app + Sinatra::Application + end + + def test_prediction + + begin + + #dataset_uri = "http://apps.ideaconsult.net:8080/ambit2/dataset/603204?pagesize=100&page=0" + #test_dataset_uri = "http://apps.ideaconsult.net:8080/ambit2/dataset/603204?pagesize=100&page=1" + #feature_dataset_uri = "http://apps.ideaconsult.net:8080/ambit2/dataset/603204?pagesize=200&page=0" + #prediction_feature = "http://apps.ideaconsult.net:8080/ambit2/feature/528321" + + dataset_uri = "http://apps.ideaconsult.net:8080/ambit2/dataset/425254" + prediction_feature = "http://apps.ideaconsult.net:8080/ambit2/feature/528321" + +# dataset_uri = "http://local-ot/dataset/1488" +# prediction_feature = "http://local-ot/dataset/1315/feature/Rodent%20carcinogenicity" + params = {:dataset_uri=>dataset_uri, + :prediction_feature=>prediction_feature, + :min_frequency=>7} #multi: 10=>4, 5=>>3000 + post "/fminer/bbrc",params + +# params = {:dataset_uri=>dataset_uri, +# :prediction_feature=>prediction_feature, :feature_dataset_uri=>feature_dataset_uri} +# post "/lazar",params + + uri = wait_for_task(last_response.body) + puts uri + +# model = uri +# puts "model #{model}" +# params = {:dataset_uri=>test_dataset_uri} +# puts OpenTox::RestClientWrapper.post(model,params) + + #puts "features: "+OpenTox::Dataset.find(uri).features.size.to_s + + +# params = {:dataset_uri=>"http://local-ot/dataset/1724", +# :feature_dataset_uri=>"http://local-ot/dataset/1725"} +# #post "/fminer/match",params +# #uri = wait_for_task(last_response.body) +# #puts uri +# +# fminer = File.join(CONFIG[:services]["opentox-algorithm"],"fminer/bbrc") +# OpenTox::RestClientWrapper.post(fminer,params) + +# params = {:dataset_uri=>"http://local-ot/dataset/1488", +# :prediction_feature=>"http://local-ot/dataset/1315/feature/Rodent%20carcinogenicity", +# :min_frequency=>50} +# post "/lazar",params +# uri = wait_for_task(last_response.body) +# puts uri + puts "features: "+OpenTox::Dataset.find(uri).features.size.to_s + + # fminer = File.join(CONFIG[:services]["opentox-algorithm"],"fminer/bbrc") + # OpenTox::RestClientWrapper.post(fminer,params) + + rescue => ex + rep = OpenTox::ErrorReport.create(ex, "") + puts rep.to_yaml + end + + #get "/lazar",nil,'HTTP_ACCEPT' => "application/rdf+xml" + #get "/fminer",nil,'HTTP_ACCEPT' => "application/rdf+xml" + #OpenTox::Algorithm.Generic.find("http://localhost/algorithm/lazar") + + # puts last_response.body + +# webservice = "http://ot.algorithm.de/lazar" +# headers = {:dataset_uri=>"http://ot.dataset.de/2", +# :prediction_feature=>"http://localhost/toxmodel/feature%23Hamster%20Carcinogenicity%20(DSSTOX/CPDB)", +# :feature_generation_uri=>"http://ot.algorithm.de/fminer"} +# +# #puts OpenTox::RestClientWrapper.post(webservice,headers) +# post webservice,headers +# #puts +# uri = wait_for_task(last_response.body.to_s) +# puts uri +# puts OpenTox::RestClientWrapper.get(uri,:accept => 'application/rdf+xml') +# #get uri + + end + + # see test_util.rb + def wait_for_task(uri) + if uri.task_uri? + task = OpenTox::Task.find(uri) + task.wait_for_completion + raise "task failed: "+uri.to_s if task.error? + uri = task.result_uri + end + return uri + end + + + +end \ No newline at end of file diff --git a/fminer.rb b/fminer.rb index 95ce469..36e1d73 100644 --- a/fminer.rb +++ b/fminer.rb @@ -98,16 +98,38 @@ post '/fminer/:method/match?' do f_dataset.features.each do |f,m| res_dataset.add_feature(f,m) end - c_dataset.compounds.each do |c| - res_dataset.add_compound(c) - comp = OpenTox::Compound.new(c) - f_dataset.features.each do |f,m| - if params[:nr_hits] == "true" + + step_width = 100 / c_dataset.compounds.size.to_f + count = 0 + + if params[:nr_hits] == "true" + c_dataset.compounds.each do |c| + res_dataset.add_compound(c) + comp = OpenTox::Compound.new(c) + f_dataset.features.each do |f,m| hits = comp.match_hits([m[OT.smarts]]) res_dataset.add(c,f,hits[m[OT.smarts]]) if hits[m[OT.smarts]] - else - res_dataset.add(c,f,1) if comp.match?(m[OT.smarts]) end + count += 1 + task.progress step_width*count + end + else + LOGGER.debug "match #{c_dataset.compounds.size} compounds with #{f_dataset.features.keys.size} features" + + obconversion = OpenBabel::OBConversion.new + obmol = OpenBabel::OBMol.new + obconversion.set_in_format('inchi') + smarts_pattern = OpenBabel::OBSmartsPattern.new + c_dataset.compounds.each do |c| + res_dataset.add_compound(c) + comp = OpenTox::Compound.new(c) + obconversion.read_string(obmol,comp.inchi) + f_dataset.features.each do |f,m| + smarts_pattern.init(m[OT.smarts]) + res_dataset.add(c,f,1) if smarts_pattern.match(obmol) + end + count += 1 + task.progress step_width*count if count%100==0 end end res_dataset.save @subjectid @@ -167,7 +189,8 @@ post '/fminer/bbrc/?' do fminer.smi = [] # AM LAST: needed for matching the patterns back # Add data to fminer - fminer.add_fminer_data(@@bbrc, params, @value_map) + #fminer.add_fminer_data(@@bbrc, params, @value_map) + fminer.add_fminer_data(@@bbrc, @value_map) g_array=fminer.all_activities.values # DV: calculation of global median for effect calculation g_median=g_array.to_scale.median @@ -298,7 +321,8 @@ post '/fminer/last/?' do fminer.smi = [] # AM LAST: needed for matching the patterns back # Add data to fminer - fminer.add_fminer_data(@@last, params, @value_map) + #fminer.add_fminer_data(@@last, params, @value_map) + fminer.add_fminer_data(@@last, @value_map) raise "No compounds in dataset #{fminer.training_dataset.uri}" if fminer.compounds.size==0 diff --git a/libfminer b/libfminer index f9e560d..4577dca 160000 --- a/libfminer +++ b/libfminer @@ -1 +1 @@ -Subproject commit f9e560dc0a7a5d5af439814ab5fa9ce027a025b7 +Subproject commit 4577dcacb352af3fdca925714dc570de9e02582c -- cgit v1.2.3