summaryrefslogtreecommitdiff
path: root/test/lazar-models.rb
blob: df4e32aeb14f4a0237313d74a09867ccebba447c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
require_relative "setup.rb"

class LazarModelTest < MiniTest::Test

  MODELS = []
  MODELS << {
    :titel => "hamster_carcinogenicity",
    :file => File.join(DATA_DIR,"hamster_carcinogenicity.csv"),
    :type => "classification",
    :feature_generation_uri => File.join($algorithm[:uri],"fminer","bbrc"),
    :min_frequency => 2,
    :test_values => {
      :feature_size => 54,
      :first_feature => "[#6&A]-[#6&A]-[#6&A]=[#6&A]",
      :prediction1 => [OpenTox::Compound.from_inchi("InChI=1S/C6H6/c1-2-4-6-5-3-1/h1-6H").uri,"false",0.25281385281385277],
      :prediction2 => [OpenTox::Compound.from_smiles("c1ccccc1NN").uri,"false",0.3639589577089577]
    }
  }
  MODELS << {
    :titel => "DSSTox_Carcinogenic_Potency_DBS_v5d_Hamster",
    :file => File.join(DATA_DIR,"CPDBAS_v5d_cleaned","DSSTox_Carcinogenic_Potency_DBS_Hamster.csv"),
    :type => "classification",
    :feature_generation_uri => File.join($algorithm[:uri],"fminer","bbrc"),
    :min_frequency => 2,
    :test_values => {
      :feature_size => 58,
      :first_feature => '[#6&A]-[#6&A]-[#6&A]=[#6&A]',
      :prediction1 => [OpenTox::Compound.from_inchi("InChI=1S/C6H6/c1-2-4-6-5-3-1/h1-6H").uri,"inactive",0.23658008658008656],
      :prediction2 => [OpenTox::Compound.from_smiles("c1ccccc1NN").uri,"inactive",0.34980297480297484]
  }
  }


  #DSSTox_Carcinogenic_Potency_DBS_Mouse.csv
  #DSSTox_Carcinogenic_Potency_DBS_MultiCellCall.csv
  #DSSTox_Carcinogenic_Potency_DBS_MultiCellCall_no_duplicates.csv
  #DSSTox_Carcinogenic_Potency_DBS_Mutagenicity.csv
  #DSSTox_Carcinogenic_Potency_DBS_Mutagenicity_no_duplicates.csv
  #DSSTox_Carcinogenic_Potency_DBS_Rat.csv
  #DSSTox_Carcinogenic_Potency_DBS_SingleCellCall.csv
  def test_lazar_models
    MODELS.each do |model|
      dataset = OpenTox::Dataset.new
      dataset.upload model[:file]
      assert_equal dataset.uri.uri?, true
      model_uri = OpenTox::Model::Lazar.create :dataset_uri => dataset.uri, :feature_generation_uri => model[:feature_generation_uri]
      assert_equal model_uri.uri?, true
      #puts "model_uri for '#{model[:titel]}': #{model_uri}"
      this_model = OpenTox::Model::Lazar.new model_uri
      assert_equal this_model.uri.uri?, true
      feature_dataset_uri = this_model[RDF::OT.featureDataset]
      feature_dataset = OpenTox::Dataset.new feature_dataset_uri
      assert_equal dataset.compounds.size, feature_dataset.compounds.size
      assert_equal model[:test_values][:feature_size], feature_dataset.features.size
      #puts feature_dataset.features.size
      assert_equal model[:test_values][:first_feature], OpenTox::Feature.new(feature_dataset.features.first.uri).title
      #puts OpenTox::Feature.new(feature_dataset.features.first.uri).title

      [ {
        :compound => model[:test_values][:prediction1][0],
        :prediction => model[:test_values][:prediction1][1],
        :confidence => model[:test_values][:prediction1][2]
      },{
        :compound => model[:test_values][:prediction2][0],
        :prediction => model[:test_values][:prediction2][1],
        :confidence => model[:test_values][:prediction2][2]
      } ].each do |example|
        prediction_uri = this_model.predict :compound_uri => example[:compound]
        #puts prediction_uri
        prediction_dataset = OpenTox::Dataset.new prediction_uri
        assert_equal prediction_dataset.uri.uri?, true
        prediction = prediction_dataset.predictions.select{|p| p[:compound].uri == example[:compound]}.first
        assert_equal example[:prediction], prediction[:value]
        #puts prediction[:value]
        assert_equal example[:confidence], prediction[:confidence]
        #puts prediction[:confidence]
        #puts prediction_dataset.uri
        #prediction_dataset.delete
      end

      # make a dataset prediction
      compound_dataset = OpenTox::Dataset.new
      compound_dataset.upload File.join(DATA_DIR,"EPAFHM.mini.csv")
      assert_equal compound_dataset.uri.uri?, true
      prediction_uri = this_model.predict :dataset_uri => dataset.uri
      prediction = OpenTox::Dataset.new prediction_uri
      assert_equal prediction.uri.uri?, true

      # cleanup
      [dataset,this_model,feature_dataset,compound_dataset].each{|o| o.delete}
    end
  end
end