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
|
class ToxCreateModel
include DataMapper::Resource
property :id, Serial
property :name, String, :length => 255
property :uri, String, :length => 255
property :task_uri, String, :length => 255
property :validation_task_uri, String, :length => 255
property :validation_uri, String, :length => 255
property :validation_report_task_uri, String, :length => 255
property :validation_report_uri, String, :length => 255
property :warnings, Text, :length => 2**32-1
property :nr_compounds, Integer
property :created_at, DateTime
def status
RestClient.get(File.join(@task_uri, 'hasStatus')).body
end
def validation_status
begin
RestClient.get(File.join(@validation_task_uri, 'hasStatus')).body
rescue
"Service offline"
end
end
def validation_report_status
begin
RestClient.get(File.join(@validation_report_task_uri, 'hasStatus')).body
rescue
"Service offline"
end
end
def algorithm
begin
RestClient.get(File.join(@uri, 'algorithm')).body
rescue
""
end
end
def training_dataset
begin
RestClient.get(File.join(@uri, 'trainingDataset')).body
rescue
""
end
end
def feature_dataset
begin
RestClient.get(File.join(@uri, 'feature_dataset')).body
rescue
""
end
end
def validation
begin
uri = File.join(@validation_uri, 'statistics')
yaml = RestClient.get(uri).body
v = YAML.load(yaml)
tp=0; tn=0; fp=0; fn=0; n=0
v[:classification_statistics][:confusion_matrix][:confusion_matrix_cell].each do |cell|
if cell[:confusion_matrix_predicted] == "true" and cell[:confusion_matrix_actual] == "true"
tp = cell[:confusion_matrix_value]
n += tp
elsif cell[:confusion_matrix_predicted] == "false" and cell[:confusion_matrix_actual] == "false"
tn = cell[:confusion_matrix_value]
n += tn
elsif cell[:confusion_matrix_predicted] == "false" and cell[:confusion_matrix_actual] == "true"
fn = cell[:confusion_matrix_value]
n += fn
elsif cell[:confusion_matrix_predicted] == "true" and cell[:confusion_matrix_actual] == "false"
fp = cell[:confusion_matrix_value]
n += fp
end
end
{
:n => n,
:tp => tp,
:fp => fp,
:tn => tn,
:fn => fn,
:correct_predictions => sprintf("%.2f", 100*(tp+tn).to_f/n),
:weighted_area_under_roc => sprintf("%.3f", v[:classification_statistics][:weighted_area_under_roc].to_f),
:sensitivity => sprintf("%.3f", tp.to_f/(tp+fn)),
:specificity => sprintf("%.3f", tn.to_f/(tn+fp))
}
rescue
"Service offline"
end
end
end
DataMapper.auto_upgrade!
|