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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
|
require 'application'
require 'test/unit'
require 'rack/test'
require 'ruby-prof'
set :environment, :test
@@redis.flush_db
class DatasetsTest < Test::Unit::TestCase
include Rack::Test::Methods
#include RubyProf::Test
def app
Sinatra::Application
end
def test_index
get '/datasets'
assert last_response.ok?
end
def test_create_dataset
post '/datasets', :name => "Test dataset"
assert last_response.ok?
uri = last_response.body
assert_equal "http://example.org/dataset/Test%20dataset", uri
get uri
assert last_response.ok?
get uri + '/name'
puts last_response.body
assert last_response.ok?
assert_equal "Test dataset", last_response.body
delete uri
assert last_response.ok?
get uri
assert !last_response.ok?
end
def test_create_dataset_from_csv
smiles = 'CC(=O)Nc1scc(n1)c1ccc(o1)[N+](=O)[O-]'
compound = OpenTox::Compound.new(:smiles => smiles)
post '/datasets', :name => "Hamster Carcinogenicity"
uri = last_response.body
assert last_response.ok?
post uri + '/import', :file => Rack::Test::UploadedFile.new(File.join(File.dirname(__FILE__), "hamster_carcinogenicity.csv"), "text/csv"), :compound_format => "smiles"
get uri
assert last_response.ok?
get uri + '/compounds'
assert last_response.ok?
assert last_response.body.include?(compound.inchi)
get File.join(uri , 'compound', compound.inchi)
assert last_response.ok?
assert last_response.body.include?("Hamster%20Carcinogenicity/classification/true")
get File.join(uri , 'features')
puts last_response.body.to_yaml
delete uri
assert last_response.ok?
get uri
assert !last_response.ok?
end
=begin
def test_create_large_dataset_from_csv
post '/datasets', :name => "Salmonella Mutagenicity"
uri = last_response.body
post uri + '/import', :file => Rack::Test::UploadedFile.new(File.join(File.dirname(__FILE__), "kazius.csv"), "text/csv"), :compound_format => "smiles"
uri = last_response.body
get uri
assert last_response.ok?
end
=end
def test_tanimoto_similarity
#@feature_set = OpenTox::Algorithms::Fminer.new :dataset_uri => @dataset
name = "Similarity test dataset"
data = {
'c1ccccc1' =>
#'[O-][N+](=O)C/C=C\C(=O)Cc1cc(C#N)ccc1' =>
{
'A' => 1.0,
'B' => 0.9,
'C' => 0.8,
'D' => 0.7,
'E' => 0.5
},
'CCCNN' =>
#'F[B-](F)(F)F.[Na+]' =>
{
'F' => 0.9,
'B' => 0.9,
'C' => 0.8,
'D' => 0.7,
'E' => 0.5
},
'C1CO1' =>
#'N#[N+]C1=CC=CC=C1.F[B-](F)(F)F' =>
{
'A' => 1.0,
'B' => 0.9,
'F' => 0.9,
}
}
post '/datasets', :name => name
assert last_response.ok?
uri = last_response.body
get uri
assert last_response.ok?
name = URI.encode(name)
feature_data = {}
data.each do |smiles,features|
compound = OpenTox::Compound.new(:smiles => smiles).uri
feature_data[compound] = []
features.each do |k,v|
feature= OpenTox::Feature.new(:name => k, :values => {:p_value => v}).uri
feature_data[compound] << feature
end
end
post uri , :features => feature_data.to_yaml
assert last_response.ok?
data.each do |smiles,features|
compound= OpenTox::Compound.new(:smiles => smiles).inchi
data.each do |s,f|
unless s == smiles
neighbor= OpenTox::Compound.new(:smiles => s).inchi
get "/dataset/#{name}/compounds"
assert last_response.ok?
get "/dataset/#{name}/compound/#{compound}"
assert last_response.ok?
get "/algorithm/tanimoto/dataset/#{name}/compound/#{compound}/dataset/#{name}/compound/#{neighbor}"
puts last_response.body
assert last_response.ok?
sim = last_response.body
features_a = data[smiles].keys
features_b = data[s].keys
union = features_a | features_b
intersect = features_a & features_b
mysim = intersect.size.to_f/union.size.to_f
assert_equal sim, mysim.to_s
puts "tanimoto::#{smiles}::#{s}::#{last_response.body}"
get "/algorithm/weighted_tanimoto/dataset/#{name}/compound/#{compound}/dataset/#{name}/compound/#{neighbor}"
assert last_response.ok?
puts "weighted_tanimoto::#{smiles}::#{s}::#{last_response.body}"
end
end
end
end
end
|