diff options
-rw-r--r-- | authorization.rb | 9 | ||||
-rw-r--r-- | lazar.rb | 34 | ||||
-rw-r--r-- | task.rb | 2 | ||||
-rw-r--r-- | validate-owl.rb | 2 | ||||
-rw-r--r-- | validation.rb | 135 |
5 files changed, 132 insertions, 50 deletions
diff --git a/authorization.rb b/authorization.rb index 3772638..1d9b676 100644 --- a/authorization.rb +++ b/authorization.rb @@ -3,6 +3,10 @@ require "opentox-ruby" require "test/unit" TEST_URI = "http://only_a_test/test/" + rand(1000000).to_s +unless AA_SERVER #overwrite turned off A&A server for testing + AA_SERVER = "https://opensso.in-silico.ch" + @@subjectid = OpenTox::Authorization.authenticate(TEST_USER,TEST_PW) +end class TestOpenToxAuthorizationBasic < Test::Unit::TestCase @@ -40,7 +44,7 @@ class TestOpenToxAuthorizationLDAP < Test::Unit::TestCase end def test_02_list_user_groups - assert_kind_of Array, OpenTox::Authorization.list_groups(@@subjectid) + assert_kind_of Array, OpenTox::Authorization.list_user_groups(TEST_USER, @@subjectid) end def test_03_get_user @@ -60,6 +64,7 @@ class TestOpenToxAuthorizationLDAP < Test::Unit::TestCase policies.each do |policy| assert OpenTox::Authorization.delete_policy(policy, @@subjectid) end + assert_equal false, OpenTox::Authorization.uri_has_policy(TEST_URI, @@subjectid) end def test_02_check_policy_rules @@ -104,4 +109,4 @@ end def login OpenTox::Authorization.authenticate(TEST_USER,TEST_PW) -end
\ No newline at end of file +end @@ -34,8 +34,10 @@ class LazarTest < Test::Unit::TestCase prediction_uri = lazar.run(:compound_uri => compound.uri, :subjectid => @@subjectid).to_s prediction = OpenTox::LazarPrediction.find(prediction_uri, @@subjectid) @predictions << prediction - assert_equal prediction.value(compound).round_to(4), 0.2847.round_to(4) - assert_equal prediction.confidence(compound).round_to(4), 0.3223.round_to(4) + assert_equal prediction.value(compound).round_to(3),0.2849.round_to(3) + assert_equal prediction.confidence(compound).round_to(3), 0.3223.round_to(3) + #assert_equal prediction.value(compound).round_to(4), 0.2847.round_to(4) + #assert_equal prediction.confidence(compound).round_to(4), 0.3223.round_to(4) assert_equal prediction.neighbors(compound).size, 73 end @@ -77,6 +79,34 @@ class LazarTest < Test::Unit::TestCase assert_equal prediction.measured_activities(compound).first, true end + def test_classification_svm_model + + # create model + model_uri = OpenTox::Algorithm::Lazar.new.run({:dataset_uri => @@classification_training_dataset.uri, :subjectid => @@subjectid, :prediction_algorithm => "local_svm_classification"}).to_s + lazar = OpenTox::Model::Lazar.find model_uri, @@subjectid + @models << lazar + assert_equal lazar.features.size, 52 + + # single prediction + compound = OpenTox::Compound.from_smiles("c1ccccc1NN") + prediction_uri = lazar.run(:compound_uri => compound.uri, :subjectid => @@subjectid) + prediction = OpenTox::LazarPrediction.find(prediction_uri, @@subjectid) + @predictions << prediction + assert_equal prediction.value(compound), false + assert_equal prediction.confidence(compound).round_to(4), 0.4131.round_to(4) + assert_equal prediction.neighbors(compound).size, 14 + + # dataset prediction + test_dataset = OpenTox::Dataset.create_from_csv_file("data/multicolumn.csv", @@subjectid) + prediction = OpenTox::LazarPrediction.find lazar.run(:dataset_uri => test_dataset.uri, :subjectid => @@subjectid), @@subjectid + @predictions << prediction + assert_equal prediction.compounds.size, 4 + compound = OpenTox::Compound.from_smiles "CC(=Nc1ccc2c(c1)Cc1ccccc21)O" + assert_equal prediction.value(compound), nil + assert_equal prediction.measured_activities(compound).first, true + + end + =begin def test_ambit_classification_model @@ -20,7 +20,7 @@ class TaskTest < Test::Unit::TestCase def test_rdf - task = OpenTox::Task.new OpenTox::Task.all.last + task = OpenTox::Task.new OpenTox::Task.all.sort.last validate_owl(task.uri) #puts task.uri end diff --git a/validate-owl.rb b/validate-owl.rb index bfa2584..e219d58 100644 --- a/validate-owl.rb +++ b/validate-owl.rb @@ -1,6 +1,6 @@ def validate_owl(uri, subjectid=nil) if validator_available? - owl = OpenTox::RestClientWrapper.get(uri,{:accept => "application/rdf+xml",:subjectid => subjectid}) + owl = OpenTox::RestClientWrapper.get(uri,{:accept => "application/rdf+xml",:subjectid => subjectid}, nil, false) html = OpenTox::RestClientWrapper.post("http://www.mygrid.org.uk/OWL/Validator",{:rdf => owl, :level => "DL",:subjectid => subjectid}) assert_match(/YES/,html) else diff --git a/validation.rb b/validation.rb index 14ef5ee..74c6d23 100644 --- a/validation.rb +++ b/validation.rb @@ -35,11 +35,13 @@ class ValidationTest < Test::Unit::TestCase end @@data = [] - files = { File.new("data/hamster_carcinogenicity.mini.csv") => :crossvalidation, + files = { #File.new("data/hamster_carcinogenicity.csv") => :crossvalidation, + File.new("data/hamster_carcinogenicity.mini.csv") => :crossvalidation, + #File.new("data/EPAFHM.csv") => :crossvalidation, File.new("data/EPAFHM.mini.csv") => :crossvalidation, File.new("data/hamster_carcinogenicity.csv") => :validation, File.new("data/EPAFHM.csv") => :validation, -# File.new("data/StJudes-HepG2-testset_Class.csv") => :crossvalidation + #File.new("data/StJudes-HepG2-testset_Class.csv") => :crossvalidation } files.each do |file,type| @@data << { :type => type, @@ -91,7 +93,7 @@ class ValidationTest < Test::Unit::TestCase :random_seed => 2} t = OpenTox::SubTask.new(nil,0,1) def t.progress(pct) - if !defined?@last_msg or @last_msg+3<Time.new + if !defined?@last_msg or @last_msg+10<Time.new puts "waiting for training-test-split validation: "+pct.to_s @last_msg=Time.new end @@ -164,51 +166,58 @@ class ValidationTest < Test::Unit::TestCase # OpenTox::Crossvalidation.find(File.join(CONFIG[:services]["opentox-validation"],"crossvalidation/noexistingid")) #end @@cvs = [] + @@cv_datasets = [] + @@cv_identifiers = [] @@data.each do |data| if data[:type]==:crossvalidation - puts "test_crossvalidation "+data[:info].to_s - p = { - :dataset_uri => data[:data], - :algorithm_uri => File.join(CONFIG[:services]["opentox-algorithm"],"lazar"), - :algorithm_params => "feature_generation_uri="+File.join(CONFIG[:services]["opentox-algorithm"],"fminer/bbrc"), - :prediction_feature => data[:feat], - :num_folds => 2 } - t = OpenTox::SubTask.new(nil,0,1) - def t.progress(pct) - if !defined?@last_msg or @last_msg+3<Time.new - puts "waiting for crossvalidation: "+pct.to_s - @last_msg=Time.new + ["bbrc", "last"].each do |fminer| + puts "test_crossvalidation "+data[:info].to_s+" "+fminer + p = { + :dataset_uri => data[:data], + :algorithm_uri => File.join(CONFIG[:services]["opentox-algorithm"],"lazar"), + :algorithm_params => "feature_generation_uri="+File.join(CONFIG[:services]["opentox-algorithm"],"fminer/"+fminer), + :prediction_feature => data[:feat], + :num_folds => 10 } + #:num_folds => 2 } + t = OpenTox::SubTask.new(nil,0,1) + def t.progress(pct) + if !defined?@last_msg or @last_msg+10<Time.new + puts "waiting for crossvalidation: "+pct.to_s + @last_msg=Time.new + end end - end - def t.waiting_for(task_uri); end - cv = OpenTox::Crossvalidation.create(p, @@subjectid, t) - assert cv.uri.uri? - if @@subjectid - assert_rest_call_error OpenTox::NotAuthorizedError do - OpenTox::Crossvalidation.find(cv.uri) + def t.waiting_for(task_uri); end + cv = OpenTox::Crossvalidation.create(p, @@subjectid, t) + assert cv.uri.uri? + if @@subjectid + assert_rest_call_error OpenTox::NotAuthorizedError do + OpenTox::Crossvalidation.find(cv.uri) + end end - end - cv = OpenTox::Crossvalidation.find(cv.uri, @@subjectid) - assert_valid_date cv - assert cv.uri.uri? - if @@subjectid - assert_rest_call_error OpenTox::NotAuthorizedError do - cv.summary(cv) + cv = OpenTox::Crossvalidation.find(cv.uri, @@subjectid) + assert_valid_date cv + assert cv.uri.uri? + if @@subjectid + assert_rest_call_error OpenTox::NotAuthorizedError do + cv.summary(cv) + end end + summary = cv.summary(@@subjectid) + assert_kind_of Hash,summary + + algorithm = cv.metadata[OT.algorithm] + assert algorithm.uri? + cv_list = OpenTox::Crossvalidation.list( {:algorithm => algorithm} ) + assert cv_list.include?(cv.uri) + cv_list.each do |cv_uri| + alg = OpenTox::Crossvalidation.find(cv_uri).metadata[OT.algorithm] + assert alg==algorithm,"wrong algorithm for filtered crossvalidation, should be: '"+algorithm.to_s+"', is: '"+alg.to_s+"'" + end + + @@cvs << cv + @@cv_datasets << data + @@cv_identifiers << fminer end - summary = cv.summary(@@subjectid) - assert_kind_of Hash,summary - - algorithm = cv.metadata[OT.algorithm] - assert algorithm.uri? - cv_list = OpenTox::Crossvalidation.list( {:algorithm => algorithm} ) - assert cv_list.include?(cv.uri) - cv_list.each do |cv_uri| - alg = OpenTox::Crossvalidation.find(cv_uri).metadata[OT.algorithm] - assert alg==algorithm,"wrong algorithm for filtered crossvalidation, should be: '"+algorithm.to_s+"', is: '"+alg.to_s+"'" - end - - @@cvs << cv end end end @@ -229,7 +238,7 @@ class ValidationTest < Test::Unit::TestCase OpenTox::CrossvalidationReport.create(cv.uri) end end - assert OpenTox::ValidationReport.find_for_validation(cv.uri,@@subjectid)==nil + assert OpenTox::CrossvalidationReport.find_for_crossvalidation(cv.uri,@@subjectid)==nil report = OpenTox::CrossvalidationReport.create(cv.uri,@@subjectid) assert report.uri.uri? if @@subjectid @@ -248,6 +257,43 @@ class ValidationTest < Test::Unit::TestCase end end + def test_crossvalidation_compare_report + @@reports = [] unless defined?@@reports + @@cvs.size.times do |i| + @@cvs.size.times do |j| + if j>i and @@cv_datasets[i]==@@cv_datasets[j] + puts "test_crossvalidation_compare_report" + assert_kind_of OpenTox::Crossvalidation,@@cvs[i] + assert_kind_of OpenTox::Crossvalidation,@@cvs[j] + hash = { @@cv_identifiers[i] => [@@cvs[i].uri], + @@cv_identifiers[j] => [@@cvs[j].uri] } + if @@subjectid + assert_rest_call_error OpenTox::NotAuthorizedError do + OpenTox::AlgorithmComparisonReport.create hash,@@subjectid + end + end + assert OpenTox::AlgorithmComparisonReport.find_for_crossvalidation(@@cvs[i].uri,@@subjectid)==nil + assert OpenTox::AlgorithmComparisonReport.find_for_crossvalidation(@@cvs[j].uri,@@subjectid)==nil + report = OpenTox::AlgorithmComparisonReport.create hash,@@subjectid + assert report.uri.uri? + if @@subjectid + assert_rest_call_error OpenTox::NotAuthorizedError do + OpenTox::AlgorithmComparisonReport.find(report.uri) + end + end + report = OpenTox::AlgorithmComparisonReport.find(report.uri,@@subjectid) + assert_valid_date report + assert report.uri.uri? + report2 = OpenTox::AlgorithmComparisonReport.find_for_crossvalidation(@@cvs[i].uri,@@subjectid) + assert_equal report.uri,report2.uri + report3 = OpenTox::AlgorithmComparisonReport.find_for_crossvalidation(@@cvs[j].uri,@@subjectid) + assert_equal report.uri,report3.uri + @@reports << report2 + end + end + end + end + def test_qmrf_report #@@cv = OpenTox::Crossvalidation.find("http://local-ot/validation/crossvalidation/13", @@subjectid) @@ -302,8 +348,9 @@ class ValidationTest < Test::Unit::TestCase raise "no opentox object" unless opentox_object.class.to_s.split("::").first=="OpenTox" assert opentox_object.metadata.is_a?(Hash) assert opentox_object.metadata[DC.date].to_s.length>0,"date not set for "+opentox_object.uri.to_s+", is metadata loaded? (use find)" -=begin time = Time.parse(opentox_object.metadata[DC.date]) + assert time!=nil +=begin assert time<Time.new,"date of "+opentox_object.uri.to_s+" is in the future: "+time.to_s assert time>Time.new-(10*60),opentox_object.uri.to_s+" took longer than 10 minutes "+time.to_s =end |