diff options
author | Christoph Helma <helma@in-silico.ch> | 2013-07-02 19:24:46 +0200 |
---|---|---|
committer | Christoph Helma <helma@in-silico.ch> | 2013-07-02 19:24:46 +0200 |
commit | d25022d4100c2cf94c4e5d4df94a7490021c3721 (patch) | |
tree | 43b03cf86db0c35c454a7fb069bc1af51738e689 | |
parent | 8849645c8e9a9ed1b1ae76734e1454c48118f3f6 (diff) |
descriptor calculation and initial quantitative models tests.
-rw-r--r-- | opentox-client-all.rb | 2 | ||||
-rw-r--r-- | opentox-client-short.rb | 2 | ||||
-rw-r--r-- | test/algorithm.rb | 2 | ||||
-rw-r--r-- | test/compound.rb | 12 | ||||
-rw-r--r-- | test/descriptor.rb | 97 | ||||
-rw-r--r-- | test/descriptors.rb | 100 | ||||
-rw-r--r-- | test/fminer.rb | 30 | ||||
-rw-r--r-- | test/lazar-fminer.rb | 13 | ||||
-rw-r--r-- | test/lazar-pc-descriptors.rb | 16 | ||||
-rw-r--r-- | test/model.rb | 4 |
10 files changed, 126 insertions, 152 deletions
diff --git a/opentox-client-all.rb b/opentox-client-all.rb index e4dcec6..fc9cd15 100644 --- a/opentox-client-all.rb +++ b/opentox-client-all.rb @@ -3,8 +3,6 @@ require 'openbabel' all = Dir["test/*.rb"] exclude = [ "test/setup.rb", - "test/descriptors.rb", - "test/lazar-pc-descriptors.rb", "test/lazarweb.rb", "test/pc-lazar.rb", ] + Dir["test/toxbank*.rb"] diff --git a/opentox-client-short.rb b/opentox-client-short.rb index 982d373..b18ed18 100644 --- a/opentox-client-short.rb +++ b/opentox-client-short.rb @@ -3,8 +3,6 @@ require 'openbabel' all = Dir["test/*.rb"] exclude = [ "test/setup.rb", - "test/descriptors.rb", - "test/lazar-pc-descriptors.rb", "test/lazar-extended.rb", "test/validation-long.rb", "test/dataset-large.rb", diff --git a/test/algorithm.rb b/test/algorithm.rb index a07e911..71afd22 100644 --- a/test/algorithm.rb +++ b/test/algorithm.rb @@ -10,7 +10,7 @@ end class AlgorithmTest < MiniTest::Test def test_set_parameters - a = OpenTox::Algorithm.new nil, SUBJECTID + a = OpenTox::Algorithm::Generic.new nil, SUBJECTID a.parameters = [ {RDF::DC.title => "test", RDF::OT.paramScope => "mandatory"}, {RDF::DC.title => "test2", RDF::OT.paramScope => "optional"} diff --git a/test/compound.rb b/test/compound.rb index 5fd743c..891dc3c 100644 --- a/test/compound.rb +++ b/test/compound.rb @@ -72,16 +72,4 @@ class CompoundTest < MiniTest::Test assert_equal "CHEMBL277500", c.chemblid end - def test_match_smarts - c = OpenTox::Compound.from_smiles "N=C=C1CCC(=F=FO)C1" - result = OpenTox::Descriptor::Smarts.fingerprint c, "FF" - assert_equal [1], result.first - smarts = ["CC", "C", "C=C", "CO", "FF", "C1CCCC1", "NN"] - result = OpenTox::Descriptor::Smarts.fingerprint c, smarts - assert_equal [1,1,1,0,1,1,0], result.first - result = OpenTox::Descriptor::Smarts.count c, smarts - counts = [10,6,2,0,2,10,0] - assert_equal counts, result.first - end - end diff --git a/test/descriptor.rb b/test/descriptor.rb new file mode 100644 index 0000000..cf67cc3 --- /dev/null +++ b/test/descriptor.rb @@ -0,0 +1,97 @@ +require_relative "setup.rb" + +begin + puts "Service URI is: #{$algorithm[:uri]}" +rescue + puts "Configuration Error: $algorithm[:uri] is not defined in: " + File.join(ENV["HOME"],".opentox","config","test.rb") + exit +end + +class DescriptorTest < MiniTest::Test + + def test_list + skip "TODO: Test descriptor list" + end + + def test_lookup + skip "TODO: Test descriptor lookup" + end + + def test_match_smarts + c = OpenTox::Compound.from_smiles "N=C=C1CCC(=F=FO)C1" + result = OpenTox::Algorithm::Descriptor.smarts_match c, "FF" + assert_equal 1, result[c.uri]["FF"] + smarts = {"CC"=>1, "C"=>1, "C=C"=>1, "CO"=>0, "FF"=>1, "C1CCCC1"=>1, "NN"=>0} + result = OpenTox::Algorithm::Descriptor.smarts_match c, smarts.keys + assert_equal smarts, result[c.uri] + smarts_count = {"CC"=>10, "C"=>6, "C=C"=>2, "CO"=>0, "FF"=>2, "C1CCCC1"=>10, "NN"=>0} + result = OpenTox::Algorithm::Descriptor.smarts_count c, smarts_count.keys + assert_equal smarts_count, result[c.uri] + end + + def test_compound_openbabel_single + c = OpenTox::Compound.from_smiles "CC(=O)CC(C)C#N" + result = OpenTox::Algorithm::Descriptor.openbabel c, ["logP"] + assert_equal 1, result[c.uri].size + assert_equal 1.12518, result[c.uri]["logP"] + end + + def test_compound_cdk_single + c = OpenTox::Compound.from_smiles "c1ccccc1" + result = OpenTox::Algorithm::Descriptor.cdk c, ["AtomCount"] + assert_equal 12, result[c.uri]["nAtom"] + c = OpenTox::Compound.from_smiles "CC(=O)CC(C)C#N" + result = OpenTox::Algorithm::Descriptor.cdk c, ["AtomCount"] + assert_equal 17, result[c.uri]["nAtom"] + result = OpenTox::Algorithm::Descriptor.cdk c, ["CarbonTypes"] + c_types = {"C1SP1"=>1, "C2SP1"=>0, "C1SP2"=>0, "C2SP2"=>1, "C3SP2"=>0, "C1SP3"=>2, "C2SP3"=>1, "C3SP3"=>1, "C4SP3"=>0} + assert_equal c_types, result[c.uri] + end + + def test_compound_joelib_single + c = OpenTox::Compound.from_smiles "CC(=O)CC(C)C#N" + result = OpenTox::Algorithm::Descriptor.joelib c, ["LogP"] + puts result[c.uri] + assert_equal 2.65908, result[c.uri]["LogP"] + end + + def test_compound_all + a = OpenTox::Algorithm::Generic.new File.join($algorithm[:uri],"descriptor"), SUBJECTID + c = OpenTox::Compound.from_smiles "CC(=O)CC(C)C#N" + dataset_uri = a.run :compound_uri => c.uri + d = OpenTox::Dataset.new dataset_uri, SUBJECTID + assert_equal 340, d.data_entries[0].size + d.delete + end + + def test_compound_descriptor_parameters + c = OpenTox::Compound.from_smiles "CC(=O)CC(C)C#N" + result = OpenTox::Algorithm::Descriptor.physchem c, [ "openbabel.logP", "cdk.AtomCount", "cdk.CarbonTypes", "joelib.LogP" ] + puts result.inspect + assert_equal 12, result[0].size + assert_equal [[1.12518, 17.0, 1.0, 0.0, 0.0, 1.0, 0.0, 2.0, 1.0, 1.0, 0.0, 2.65908]], result + end + + def test_dataset_descriptor_parameters + dataset = OpenTox::Dataset.new nil, SUBJECTID + dataset.upload File.join(DATA_DIR,"hamster_carcinogenicity.mini.csv") + d = OpenTox::Algorithm::Descriptor.physchem dataset, [ "openbabel.logP", "cdk.AtomCount", "cdk.CarbonTypes", "joelib.LogP" ] + puts d.uri + #d = OpenTox::Dataset.new result_uri, SUBJECTID + assert_equal dataset.compounds.size, d.data_entries.size + assert_equal 12, d.data_entries[0].size + d.delete + end + + def test_dataset_all + a = OpenTox::Algorithm::Generic.new File.join($algorithm[:uri],"descriptor"), SUBJECTID + dataset = OpenTox::Dataset.new nil, SUBJECTID + dataset.upload File.join(DATA_DIR,"hamster_carcinogenicity.mini.csv") + result_uri = a.run :dataset_uri => dataset.uri + d = OpenTox::Dataset.new result_uri, SUBJECTID + assert_equal dataset.compounds.size, d.data_entries.size + assert_equal 340, d.data_entries[0].size + d.delete + end + +end diff --git a/test/descriptors.rb b/test/descriptors.rb deleted file mode 100644 index 9e8d1e7..0000000 --- a/test/descriptors.rb +++ /dev/null @@ -1,100 +0,0 @@ -require_relative "setup.rb" - -begin - puts "Service URI is: #{$algorithm[:uri]}" -rescue - puts "Configuration Error: $algorithm[:uri] is not defined in: " + File.join(ENV["HOME"],".opentox","config","test.rb") - exit -end - -class DescriptorTest < MiniTest::Test - - def test_compound_openbabel_single - a = OpenTox::Algorithm.new File.join($algorithm[:uri],"descriptor","openbabel","logP"), SUBJECTID - c = OpenTox::Compound.from_smiles "CC(=O)CC(C)C#N" - d = OpenTox::Dataset.new(a.run(:compound_uri => c.uri), SUBJECTID) - assert_equal 1, d.data_entries.size - assert_equal 1, d.data_entries[0].size - assert_equal 1.12518, d.data_entries[0][0] - d.delete - end - - def test_compound_cdk_single - a = OpenTox::Algorithm.new File.join($algorithm[:uri],"descriptor","cdk","AtomCount"), SUBJECTID - c = OpenTox::Compound.from_smiles "c1ccccc1" - d = OpenTox::Dataset.new(a.run(:compound_uri => c.uri), SUBJECTID) - assert_equal 12, d.data_entries[0][0] - d.delete - c = OpenTox::Compound.from_smiles "CC(=O)CC(C)C#N" - d = OpenTox::Dataset.new(a.run(:compound_uri => c.uri), SUBJECTID) - assert_equal 17, d.data_entries[0][0] - d.delete - a = OpenTox::Algorithm.new File.join($algorithm[:uri],"descriptor","cdk","CarbonTypes"), SUBJECTID - d = OpenTox::Dataset.new(a.run(:compound_uri => c.uri), SUBJECTID) - assert_equal [1.0, 0.0, 0.0, 1.0, 0.0, 2.0, 1.0, 1.0, 0.0], d.data_entries[0] - d.delete - end - - def test_compound_joelib_single - a = OpenTox::Algorithm.new File.join($algorithm[:uri],"descriptor","joelib","LogP"), SUBJECTID - c = OpenTox::Compound.from_smiles "CC(=O)CC(C)C#N" - d = OpenTox::Dataset.new(a.run(:compound_uri => c.uri), SUBJECTID) - assert_equal 2.65908, d.data_entries[0][0] - d.delete - end - - def test_compound_all - a = OpenTox::Algorithm.new File.join($algorithm[:uri],"descriptor"), SUBJECTID - c = OpenTox::Compound.from_smiles "CC(=O)CC(C)C#N" - dataset_uri = a.run :compound_uri => c.uri - d = OpenTox::Dataset.new dataset_uri, SUBJECTID - assert_equal 340, d.data_entries[0].size - d.delete - end - - def test_compound_descriptor_parameters - a = OpenTox::Algorithm.new File.join($algorithm[:uri],"descriptor"), SUBJECTID - descriptor_uris = [ - File.join($algorithm[:uri],"descriptor","openbabel","logP"), - File.join($algorithm[:uri],"descriptor","cdk","AtomCount"), - File.join($algorithm[:uri],"descriptor","cdk","CarbonTypes"), - File.join($algorithm[:uri],"descriptor","joelib","LogP"), - ] - compound = OpenTox::Compound.from_smiles "CC(=O)CC(C)C#N" - result_uri = a.run :compound_uri => compound.uri, :descriptor_uris => descriptor_uris - d = OpenTox::Dataset.new result_uri, SUBJECTID - assert_equal 12, d.features.size - assert_equal 12, d.data_entries[0].size - assert_equal [[1.12518, 17.0, 1.0, 0.0, 0.0, 1.0, 0.0, 2.0, 1.0, 1.0, 0.0, 2.65908]], d.data_entries - d.delete - end - - def test_dataset_descriptor_parameters - a = OpenTox::Algorithm.new File.join($algorithm[:uri],"descriptor"), SUBJECTID - descriptor_uris = [ - File.join($algorithm[:uri],"descriptor","openbabel","logP"), - File.join($algorithm[:uri],"descriptor","cdk","AtomCount"), - File.join($algorithm[:uri],"descriptor","cdk","CarbonTypes"), - File.join($algorithm[:uri],"descriptor","joelib","LogP"), - ] - dataset = OpenTox::Dataset.new nil, SUBJECTID - dataset.upload File.join(DATA_DIR,"hamster_carcinogenicity.mini.csv") - result_uri = a.run :dataset_uri => dataset.uri, :descriptor_uris => descriptor_uris - d = OpenTox::Dataset.new result_uri, SUBJECTID - assert_equal dataset.compounds.size, d.data_entries.size - assert_equal 12, d.data_entries[0].size - d.delete - end - - def test_dataset_all - a = OpenTox::Algorithm.new File.join($algorithm[:uri],"descriptor"), SUBJECTID - dataset = OpenTox::Dataset.new nil, SUBJECTID - dataset.upload File.join(DATA_DIR,"hamster_carcinogenicity.mini.csv") - result_uri = a.run :dataset_uri => dataset.uri - d = OpenTox::Dataset.new result_uri, SUBJECTID - assert_equal dataset.compounds.size, d.data_entries.size - assert_equal 340, d.data_entries[0].size - d.delete - end - -end diff --git a/test/fminer.rb b/test/fminer.rb index 3e25d9c..e950492 100644 --- a/test/fminer.rb +++ b/test/fminer.rb @@ -4,35 +4,33 @@ class FminerTest < MiniTest::Test def test_fminer - @dataset = OpenTox::Dataset.new nil, SUBJECTID - @dataset.upload File.join(DATA_DIR,"hamster_carcinogenicity.csv") - assert_equal @dataset.uri.uri?, true + dataset = OpenTox::Dataset.new nil, SUBJECTID + dataset.upload File.join(DATA_DIR,"hamster_carcinogenicity.csv") + assert_equal dataset.uri.uri?, true - fminer = OpenTox::Algorithm.new File.join($algorithm[:uri],"fminer","bbrc"), SUBJECTID - dataset_uri = fminer.run :dataset_uri => @dataset.uri + dataset_uri = OpenTox::Algorithm::Fminer.bbrc :dataset_uri => dataset.uri feature_dataset = OpenTox::Dataset.new dataset_uri, SUBJECTID assert_equal dataset_uri.uri?, true - assert_equal @dataset.compounds.size, feature_dataset.compounds.size + assert_equal dataset.compounds.size, feature_dataset.compounds.size assert_equal 54, feature_dataset.features.size assert_equal '[#6&A]-[#6&A]-[#6&A]=[#6&A]', OpenTox::Feature.new(feature_dataset.features.first.uri, SUBJECTID).title - feature_dataset.compounds.each_with_index do |c,i| - match = OpenTox::Descriptor::Smarts.fingerprint c, feature_dataset.features.collect{|f| f.title} - assert_equal match.first, feature_dataset.data_entries[i].collect{|v| v.to_i} - feature_dataset.features.each_with_index do |f,j| - match = OpenTox::Descriptor::Smarts.fingerprint c, f.title - assert_equal match[0][0], feature_dataset.data_entries[i][j].to_i + compounds = feature_dataset.compounds + smarts = feature_dataset.features.collect{|f| f.title} + match = OpenTox::Algorithm::Descriptor.smarts_match compounds, smarts + compounds.each_with_index do |c,i| + smarts.each_with_index do |s,j| + assert_equal match[c.uri][s], feature_dataset.data_entries[i][j].to_i end end - fminer = OpenTox::Algorithm.new File.join($algorithm[:uri],"fminer","last"), SUBJECTID - dataset_uri = fminer.run :dataset_uri => @dataset.uri + dataset_uri = OpenTox::Algorithm::Fminer.last :dataset_uri => dataset.uri feature_dataset = OpenTox::Dataset.new dataset_uri, SUBJECTID assert_equal dataset_uri.uri?, true - assert_equal @dataset.compounds.size, feature_dataset.compounds.size + assert_equal dataset.compounds.size, feature_dataset.compounds.size assert_equal 21, feature_dataset.features.size assert_equal '[#6&A]-[#6&a]:[#6&a]:[#6&a]:[#6&a]:[#6&a]', OpenTox::Feature.new(feature_dataset.features.first.uri, SUBJECTID).title - @dataset.delete + dataset.delete feature_dataset.delete end diff --git a/test/lazar-fminer.rb b/test/lazar-fminer.rb index 8d57070..6558f53 100644 --- a/test/lazar-fminer.rb +++ b/test/lazar-fminer.rb @@ -6,11 +6,11 @@ class LazarFminerTest < MiniTest::Test dataset = OpenTox::Dataset.new nil, SUBJECTID dataset.upload File.join(DATA_DIR,"hamster_carcinogenicity.csv") assert_equal dataset.uri.uri?, true - - lazar = OpenTox::Algorithm.new File.join($algorithm[:uri],"lazar"), SUBJECTID - model_uri = lazar.run :dataset_uri => dataset.uri, :feature_generation_uri => File.join($algorithm[:uri],"fminer","bbrc") + model_uri = OpenTox::Model::Lazar.create :dataset_uri => dataset.uri, :feature_generation_uri => File.join($algorithm[:uri],"fminer","bbrc") + #model_uri = "http://localhost:8086/model/1fec26fe-1df1-4746-95bd-7d90dd8dd172" + puts model_uri assert_equal model_uri.uri?, true - model = OpenTox::Model.new model_uri, SUBJECTID + model = OpenTox::Model::Lazar.new model_uri, SUBJECTID assert_equal model.uri.uri?, true feature_dataset_uri = model[RDF::OT.featureDataset] feature_dataset = OpenTox::Dataset.new feature_dataset_uri , SUBJECTID @@ -18,7 +18,6 @@ class LazarFminerTest < MiniTest::Test assert_equal 54, feature_dataset.features.size assert_equal '[#6&A]-[#6&A]-[#6&A]=[#6&A]', OpenTox::Feature.new(feature_dataset.features.first.uri, SUBJECTID).title - [ { :compound => OpenTox::Compound.from_inchi("InChI=1S/C6H6/c1-2-4-6-5-3-1/h1-6H"), :prediction => "false", @@ -29,7 +28,7 @@ class LazarFminerTest < MiniTest::Test :prediction => "false", :confidence => 0.3639589577089577 } ].each do |example| - prediction_uri = model.run :compound_uri => example[:compound].uri + prediction_uri = model.predict :compound_uri => example[:compound].uri puts prediction_uri prediction_dataset = OpenTox::Dataset.new prediction_uri, SUBJECTID assert_equal prediction_dataset.uri.uri?, true @@ -43,7 +42,7 @@ class LazarFminerTest < MiniTest::Test compound_dataset = OpenTox::Dataset.new nil, SUBJECTID compound_dataset.upload File.join(DATA_DIR,"EPAFHM.mini.csv") assert_equal compound_dataset.uri.uri?, true - prediction_uri = model.run :dataset_uri => dataset.uri + prediction_uri = model.predict :dataset_uri => dataset.uri prediction = OpenTox::Dataset.new prediction_uri, SUBJECTID assert_equal prediction.uri.uri?, true diff --git a/test/lazar-pc-descriptors.rb b/test/lazar-pc-descriptors.rb index 35663db..23ba303 100644 --- a/test/lazar-pc-descriptors.rb +++ b/test/lazar-pc-descriptors.rb @@ -1,25 +1,21 @@ require_relative "setup.rb" -class LazarPcDescriptorTest < MiniTest::Unit::TestCase +class LazarPcDescriptorTest < MiniTest::Test def test_lazar_pc_descriptors -#=begin - openbabel_descriptors = OpenTox::RestClientWrapper.get(File.join($algorithm[:uri],"descriptor","openbabel"), :content_type => "text/uri-list").split("\n") dataset = OpenTox::Dataset.new nil, SUBJECTID dataset.upload File.join(DATA_DIR,"EPAFHM.mini.csv") assert_equal dataset.uri.uri?, true - lazar = OpenTox::Algorithm.new File.join($algorithm[:uri],"lazar") - model_uri = lazar.run :dataset_uri => dataset.uri, :feature_generation_uri => File.join($algorithm[:uri],"descriptor"), :descriptor_uris => openbabel_descriptors#, :pc_type => "geometrical" + model_uri = OpenTox::Model::Lazar.create :dataset_uri => dataset.uri, :feature_generation_uri => File.join($algorithm[:uri],"descriptor","openbabel"), :descriptors => [ "atoms", "bonds", "dbonds", "HBA1", "HBA2", "HBD", "MP", "MR", "MW", "nF", "sbonds", "tbonds", "TPSA"] + puts model_uri - model = OpenTox::Model.new model_uri, SUBJECTID + model = OpenTox::Model::Lazar.new model_uri, SUBJECTID assert_equal model_uri.uri?, true -#=end - - #model = OpenTox::Model.new "http://localhost:8086/model/3c21f9d6-4bb0-48f2-b796-d610efbc3497" - prediction_uri = model.run :compound_uri => "#{$compound[:uri]}/InChI=1S/C6H6/c1-2-4-6-5-3-1/h1-6H" + prediction_uri = model.predict :compound_uri => "#{$compound[:uri]}/InChI=1S/C6H6/c1-2-4-6-5-3-1/h1-6H" prediction = OpenTox::Dataset.new prediction_uri, SUBJECTID assert_equal prediction.uri.uri?, true + #TODO check correct prediction puts prediction.uri #mkvar(`bash #{SHELL_DIR}/lazar_p_pc.sh`) #puts "lazar_p_pc: '#{ENV['lazar_p_pc']}'" diff --git a/test/model.rb b/test/model.rb index 4038f2a..3ba50f4 100644 --- a/test/model.rb +++ b/test/model.rb @@ -10,7 +10,7 @@ end class ModelTest < MiniTest::Test def test_01_create_and_set_parameters - a = OpenTox::Model.new nil, SUBJECTID + a = OpenTox::Model::Generic.new nil, SUBJECTID a.title = "test model" a.parameters = [ {RDF::DC.title => "test", RDF::OT.paramScope => "mandatory"}, @@ -26,7 +26,7 @@ class ModelTest < MiniTest::Test a[RDF::OT.dependentVariables] = "http://webservices.in-silico.ch/feature/LC50_mmol" a[RDF::OT.featureDataset] = "http://webservices.in-silico.ch/dataset/4964" a.put - a = OpenTox::Model.new a.uri, SUBJECTID + a = OpenTox::Model::Generic.new a.uri, SUBJECTID assert_equal "test model", a.title assert_equal 2, a.parameters.size p = a.parameters.collect{|p| p if p[RDF::DC.title] == "test"}.compact.first |