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
|
require "lib/validation_db.rb"
# = Reports::ValidationDB
#
# connects directly to the validation db, overwirte with restclient calls
# if reports/reach reports are seperated from validation someday
#
class Reports::ValidationDB
def resolve_cv_uris(validation_uris, subjectid=nil)
res = []
validation_uris.each do |u|
if u.to_s =~ /.*\/crossvalidation\/[0-9]+/
cv_id = u.split("/")[-1].to_i
cv = nil
raise OpenTox::NotAuthorizedError.new "Not authorized: GET "+u.to_s if
AA_SERVER and !OpenTox::Authorization.authorized?(u,"GET",subjectid)
# begin
# #cv = Lib::Crossvalidation.find( cv_id )
# rescue => ex
# raise "could not access crossvalidation with id "+validation_id.to_s+", error-msg: "+ex.message
# end
cv = Lib::Crossvalidation.get( cv_id )
raise OpenTox::NotFoundError.new "crossvalidation with id "+cv_id.to_s+" not found" unless cv
raise OpenTox::BadRequestError.new("crossvalidation with id '"+cv_id.to_s+"' not finished") unless cv.finished
#res += Lib::Validation.find( :all, :conditions => { :crossvalidation_id => cv_id } ).collect{|v| v.validation_uri.to_s}
res += Lib::Validation.all( :crossvalidation_id => cv_id ).collect{|v| v.validation_uri.to_s }
else
res += [u.to_s]
end
end
res
end
def init_validation(validation, uri, subjectid=nil)
raise OpenTox::BadRequestError.new "not a validation uri: "+uri.to_s unless uri =~ /.*\/[0-9]+/
validation_id = uri.split("/")[-1]
raise OpenTox::BadRequestError.new "invalid validation id "+validation_id.to_s unless validation_id!=nil and
(validation_id.to_i > 0 || validation_id.to_s=="0" )
v = nil
raise OpenTox::NotAuthorizedError.new "Not authorized: GET "+uri.to_s if
AA_SERVER and !OpenTox::Authorization.authorized?(uri,"GET",subjectid)
v = Lib::Validation.get(validation_id)
raise OpenTox::NotFoundError.new "validation with id "+validation_id.to_s+" not found" unless v
raise OpenTox::BadRequestError.new "validation with id "+validation_id.to_s+" is not finished yet" unless v.finished
(Lib::VAL_PROPS + Lib::VAL_CV_PROPS).each do |p|
validation.send("#{p.to_s}=".to_sym, v.send(p))
end
{:classification_statistics => Lib::VAL_CLASS_PROPS,
:regression_statistics => Lib::VAL_REGR_PROPS}.each do |subset_name,subset_props|
subset = v.send(subset_name)
subset_props.each{ |prop| validation.send("#{prop.to_s}=".to_sym, subset[prop]) } if subset
end
end
def init_cv(validation)
#cv = Lib::Crossvalidation.find(validation.crossvalidation_id)
cv = Lib::Crossvalidation.get(validation.crossvalidation_id)
raise OpenTox::BadRequestError.new "no crossvalidation found with id "+validation.crossvalidation_id.to_s unless cv
Lib::CROSS_VAL_PROPS.each do |p|
validation.send("#{p.to_s}=".to_sym, cv[p])
end
end
def get_predictions(validation, subjectid=nil, task=nil)
Lib::OTPredictions.new( validation.feature_type, validation.test_dataset_uri,
validation.test_target_dataset_uri, validation.prediction_feature, validation.prediction_dataset_uri,
validation.predicted_variable, subjectid, task)
end
def get_class_domain( validation )
OpenTox::Feature.new( validation.prediction_feature ).domain
end
def feature_type( validation, subjectid=nil )
OpenTox::Model::Generic.new(validation.model_uri).feature_type(subjectid)
#get_model(validation).classification?
end
def predicted_variable(validation, subjectid=nil)
raise "cannot derive model depended props for merged validations" if Lib::MergeObjects.merged?(validation)
model = OpenTox::Model::Generic.find(validation.model_uri, subjectid)
raise OpenTox::NotFoundError.new "model not found '"+validation.model_uri+"'" unless model
model.metadata[OT.predictedVariables]
#get_model(validation).predictedVariables
end
# private
# def get_model(validation)
# raise "cannot derive model depended props for merged validations" if Lib::MergeObjects.merged?(validation)
# model = @model_store[validation.model_uri]
# unless model
# model = OpenTox::Model::PredictionModel.find(validation.model_uri)
# raise "model not found '"+validation.model_uri+"'" unless validation.model_uri && model
# @model_store[validation.model_uri] = model
# end
# return model
# end
end
|