From b7cd3ebbb858a8891c35c45896f1bdd525f3534e Mon Sep 17 00:00:00 2001 From: Christoph Helma Date: Mon, 10 Aug 2015 13:26:06 +0200 Subject: algorithm libraries added, fminer tests pass --- test/descriptor-long.rb | 13 ++++++++ test/descriptor.rb | 83 +++++++++++++++++++++++++++++++++++++++++++++++++ test/fminer-long.rb | 37 ++++++++++++++++++++++ test/fminer.rb | 46 +++++++++++++++++++++++++++ 4 files changed, 179 insertions(+) create mode 100644 test/descriptor-long.rb create mode 100644 test/descriptor.rb create mode 100644 test/fminer-long.rb create mode 100644 test/fminer.rb (limited to 'test') diff --git a/test/descriptor-long.rb b/test/descriptor-long.rb new file mode 100644 index 0000000..2752d5a --- /dev/null +++ b/test/descriptor-long.rb @@ -0,0 +1,13 @@ +require_relative "setup.rb" +class DescriptorLongTest < MiniTest::Test + + def test_dataset_all + dataset = OpenTox::Dataset.from_csv_file File.join(DATA_DIR,"hamster_carcinogenicity.mini.csv") + d = OpenTox::Algorithm::Descriptor.physchem dataset + assert_equal dataset.compounds, d.compounds + assert_equal 332, d.features.size + assert_equal 332, d.data_entries.first.size + d.delete + end + +end diff --git a/test/descriptor.rb b/test/descriptor.rb new file mode 100644 index 0000000..1143b87 --- /dev/null +++ b/test/descriptor.rb @@ -0,0 +1,83 @@ +require_relative "setup.rb" + +class DescriptorTest < MiniTest::Test + + def test_list + # check available descriptors + @descriptors = OpenTox::Algorithm::Descriptor::DESCRIPTORS.keys + assert_equal 111,@descriptors.size,"wrong num physchem descriptors" + @descriptor_values = OpenTox::Algorithm::Descriptor::DESCRIPTOR_VALUES + assert_equal 356,@descriptor_values.size,"wrong num physchem descriptors" + sum = 0 + [ @descriptors, @descriptor_values ].each do |desc| + {"Openbabel"=>16,"Cdk"=>(desc==@descriptors ? 50 : 295),"Joelib"=>45}.each do |k,v| + assert_equal v,desc.select{|x| x=~/^#{k}\./}.size,"wrong num #{k} descriptors" + sum += v + end + end + assert_equal (111+356),sum + end + + def test_smarts + c = OpenTox::Compound.from_smiles "N=C=C1CCC(=F=FO)C1" + s = Smarts.find_or_create_by(:smarts => "FF") + result = OpenTox::Algorithm::Descriptor.smarts_match c, s + assert_equal [1], result + smarts = ["CC", "C", "C=C", "CO", "FF", "C1CCCC1", "NN"].collect{|s| Smarts.find_or_create_by(:smarts => s)} + result = OpenTox::Algorithm::Descriptor.smarts_match c, smarts + assert_equal [1, 1, 1, 0, 1, 1, 0], result + smarts_count = [10, 6, 2, 0, 2, 10, 0] + result = OpenTox::Algorithm::Descriptor.smarts_count c, smarts + assert_equal smarts_count, result + end + + def test_compound_openbabel_single + c = OpenTox::Compound.from_smiles "CC(=O)CC(C)C#N" + result = OpenTox::Algorithm::Descriptor.physchem c, ["Openbabel.logP"] + assert_equal [1.12518], result + end + + def test_compound_cdk_single + c = OpenTox::Compound.from_smiles "c1ccccc1" + result = OpenTox::Algorithm::Descriptor.physchem c, ["Cdk.AtomCount"] + assert_equal [12], result + c = OpenTox::Compound.from_smiles "CC(=O)CC(C)C#N" + result = OpenTox::Algorithm::Descriptor.physchem c, ["Cdk.AtomCount"] + assert_equal [17], result + result = OpenTox::Algorithm::Descriptor.physchem c, ["Cdk.CarbonTypes"] + c_types = {"Cdk.CarbonTypes.C1SP1"=>1, "Cdk.CarbonTypes.C2SP1"=>0, "Cdk.CarbonTypes.C1SP2"=>0, "Cdk.CarbonTypes.C2SP2"=>1, "Cdk.CarbonTypes.C3SP2"=>0, "Cdk.CarbonTypes.C1SP3"=>2, "Cdk.CarbonTypes.C2SP3"=>1, "Cdk.CarbonTypes.C3SP3"=>1, "Cdk.CarbonTypes.C4SP3"=>0} + assert_equal [1, 0, 0, 1, 0, 2, 1, 1, 0], result + end + + def test_compound_joelib_single + c = OpenTox::Compound.from_smiles "CC(=O)CC(C)C#N" + result = OpenTox::Algorithm::Descriptor.physchem c, ["Joelib.LogP"] + assert_equal [2.65908], result + end + + def test_compound_all + c = OpenTox::Compound.from_smiles "CC(=O)CC(C)C#N" + result = OpenTox::Algorithm::Descriptor.physchem c + assert_equal 332, result.size + assert_equal 30.8723, result[2] + assert_equal 1.12518, result[328] + 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" ], true + assert_equal 12, result.last.size + assert_equal ["Openbabel.logP", "Cdk.AtomCount.nAtom", "Cdk.CarbonTypes.C1SP1", "Cdk.CarbonTypes.C2SP1", "Cdk.CarbonTypes.C1SP2", "Cdk.CarbonTypes.C2SP2", "Cdk.CarbonTypes.C3SP2", "Cdk.CarbonTypes.C1SP3", "Cdk.CarbonTypes.C2SP3", "Cdk.CarbonTypes.C3SP3", "Cdk.CarbonTypes.C4SP3", "Joelib.LogP"], result.first + assert_equal [1.12518, 17, 1, 0, 0, 1, 0, 2, 1, 1, 0, 2.65908], result.last + end + + def test_dataset_descriptor_parameters + dataset = OpenTox::Dataset.from_csv_file File.join(DATA_DIR,"hamster_carcinogenicity.mini.csv") + d = OpenTox::Algorithm::Descriptor.physchem dataset, [ "Openbabel.logP", "Cdk.AtomCount", "Cdk.CarbonTypes", "Joelib.LogP" ] + assert_kind_of Dataset, d + assert_equal dataset.compounds, d.compounds + assert_equal dataset.compounds.size, d.data_entries.size + assert_equal 12, d.data_entries.first.size + end + +end diff --git a/test/fminer-long.rb b/test/fminer-long.rb new file mode 100644 index 0000000..826f206 --- /dev/null +++ b/test/fminer-long.rb @@ -0,0 +1,37 @@ +require_relative "setup.rb" + +class FminerTest < MiniTest::Test + + def test_fminer_multicell + skip "multicell segfaults" + # TODO aborts, probably fminer + # or OpenBabel segfault + dataset = OpenTox::Dataset.new + #multi_cell_call.csv + dataset.upload File.join(DATA_DIR,"multi_cell_call.csv") + feature_dataset = OpenTox::Algorithm::Fminer.bbrc(dataset)#, :min_frequency => 15) + dataset.delete + feature_dataset.delete + end + + def test_fminer_isscan + dataset = OpenTox::Dataset.from_csv_file File.join(DATA_DIR,"ISSCAN-multi.csv") + feature_dataset = OpenTox::Algorithm::Fminer.bbrc(dataset)#, :min_frequency => 15) + assert_equal feature_dataset.compounds.size, dataset.compounds.size + p feature_dataset + dataset.delete + feature_dataset.delete + end + + def test_fminer_kazius + dataset = OpenTox::Dataset.from_csv_file File.join(DATA_DIR,"kazius.csv") + # TODO reactivate default settings + feature_dataset = OpenTox::Algorithm::Fminer.bbrc(dataset, :min_frequency => 20) + assert_equal feature_dataset.compounds.size, dataset.compounds.size + feature_dataset = Dataset.find feature_dataset.id + assert feature_dataset.data_entries.size, dataset.compounds.size + dataset.delete + feature_dataset.delete + end + +end diff --git a/test/fminer.rb b/test/fminer.rb new file mode 100644 index 0000000..17dcbe1 --- /dev/null +++ b/test/fminer.rb @@ -0,0 +1,46 @@ +require_relative "setup.rb" + +class FminerTest < MiniTest::Test + + def test_fminer_bbrc + dataset = OpenTox::Dataset.from_csv_file File.join(DATA_DIR,"hamster_carcinogenicity.csv") + refute_nil dataset.id + feature_dataset = OpenTox::Algorithm::Fminer.bbrc dataset + feature_dataset = Dataset.find feature_dataset.id + assert_equal dataset.compounds.size, feature_dataset.compounds.size + assert_equal 54, feature_dataset.features.size + assert_equal "C-C-C=C", feature_dataset.features.first.smarts + compounds = feature_dataset.compounds + smarts = feature_dataset.features + match = OpenTox::Algorithm::Descriptor.smarts_match compounds, smarts + feature_dataset.data_entries.each_with_index do |fingerprint,i| + assert_equal match[i], fingerprint + end + + dataset.delete + feature_dataset.delete + end + + def test_fminer_last + skip "last features have to be activated" + dataset = OpenTox::Dataset.new + dataset.upload File.join(DATA_DIR,"hamster_carcinogenicity.csv") + feature_dataset = OpenTox::Algorithm::Fminer.last :dataset => dataset + 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]', feature_dataset.features.first.smarts + + compounds = feature_dataset.compounds + smarts = feature_dataset.features.collect{|f| f.smarts} + 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[i][j], feature_dataset.data_entries[i][j].to_i + end + end + + dataset.delete + feature_dataset.delete + end + +end -- cgit v1.2.3