diff options
author | Christoph Helma <helma@in-silico.ch> | 2013-07-16 17:45:08 +0200 |
---|---|---|
committer | Christoph Helma <helma@in-silico.ch> | 2013-07-16 17:45:08 +0200 |
commit | 3eb965b0df8dda7a0e7edc305de58980e6bf10b0 (patch) | |
tree | f7cf9511b1b9b29559e06b7fc7d39c9f4f2caa1d | |
parent | 4c848ed19705f7474e7081499ccf88b717242561 (diff) |
subjectid handled by RestClientWrapper
-rw-r--r-- | lib/dataset_cache.rb | 10 | ||||
-rw-r--r-- | lib/prediction_data.rb | 6 | ||||
-rwxr-xr-x | lib/validation_db.rb | 12 | ||||
-rw-r--r-- | report/plot_factory.rb | 4 | ||||
-rwxr-xr-x | report/report_application.rb | 4 | ||||
-rwxr-xr-x | report/report_persistance.rb | 19 | ||||
-rw-r--r-- | report/report_service.rb | 16 | ||||
-rwxr-xr-x | report/validation_access.rb | 70 | ||||
-rwxr-xr-x | report/validation_data.rb | 44 | ||||
-rwxr-xr-x | test/test_application.rb | 1 | ||||
-rwxr-xr-x | test/test_examples_util.rb | 56 | ||||
-rwxr-xr-x | validation/validation_application.rb | 42 | ||||
-rwxr-xr-x | validation/validation_service.rb | 70 | ||||
-rwxr-xr-x | validation/validation_test.rb | 22 |
14 files changed, 172 insertions, 204 deletions
diff --git a/lib/dataset_cache.rb b/lib/dataset_cache.rb index 1af1d51..ff2de3f 100644 --- a/lib/dataset_cache.rb +++ b/lib/dataset_cache.rb @@ -8,16 +8,16 @@ module Lib # same as OpenTox::Dataset.find with caching function # rational: datasets are reused in crossvalidation very often, cache to save computational effort # PENDING: may cause memory issues, test with huge datasets - def self.find(dataset_uri, subjectid=nil) + def self.find(dataset_uri) return nil if (dataset_uri==nil) - d = @@cache[dataset_uri.to_s+"_"+subjectid.to_s] + d = @@cache[dataset_uri.to_s+"_"+OpenTox::RestClientWrapper.subjectid.to_s] if d==nil - d = OpenTox::Dataset.find(dataset_uri, subjectid) - @@cache[dataset_uri.to_s+"_"+subjectid.to_s] = d + d = OpenTox::Dataset.find(dataset_uri) + @@cache[dataset_uri.to_s+"_"+OpenTox::RestClientWrapper.subjectid.to_s] = d end d end end -end
\ No newline at end of file +end diff --git a/lib/prediction_data.rb b/lib/prediction_data.rb index 833ebe0..9450a5b 100644 --- a/lib/prediction_data.rb +++ b/lib/prediction_data.rb @@ -55,7 +55,7 @@ module Lib end def self.create( feature_type, test_dataset_uris, prediction_feature, prediction_dataset_uris, - predicted_variables, predicted_confidences, subjectid=nil, task=nil ) + predicted_variables, predicted_confidences, task=nil ) test_dataset_uris = [test_dataset_uris] unless test_dataset_uris.is_a?(Array) prediction_dataset_uris = [prediction_dataset_uris] unless prediction_dataset_uris.is_a?(Array) @@ -88,7 +88,7 @@ module Lib predicted_variable=prediction_feature if predicted_variable==nil - test_dataset = Lib::DatasetCache.find test_dataset_uri,subjectid + test_dataset = Lib::DatasetCache.find test_dataset_uri internal_server_error "test dataset not found: '"+test_dataset_uri.to_s+"'" unless test_dataset internal_server_error "prediction_feature not found in test_dataset\n"+ @@ -122,7 +122,7 @@ module Lib end task.progress( task_status += task_step ) if task # loaded actual values - prediction_dataset = Lib::DatasetCache.find prediction_dataset_uri,subjectid + prediction_dataset = Lib::DatasetCache.find prediction_dataset_uri internal_server_error "prediction dataset not found: '"+prediction_dataset_uri.to_s+"'" unless prediction_dataset # allow missing prediction feature if there are no compounds in the prediction dataset diff --git a/lib/validation_db.rb b/lib/validation_db.rb index 3725b51..ecc0693 100755 --- a/lib/validation_db.rb +++ b/lib/validation_db.rb @@ -87,8 +87,6 @@ module Validation index :training_dataset_uri index :test_dataset_uri - attr_accessor :subjectid - def self.create(params={}) Ohm.connect(:thread_safe => true, :port => 6379) params[:date] = Time.new @@ -121,7 +119,7 @@ module Validation def save super - OpenTox::Authorization.check_policy(validation_uri, subjectid) + OpenTox::Authorization.check_policy(validation_uri, OpenTox::RestClientWrapper.subjectid) end public @@ -161,8 +159,6 @@ module Validation attribute :stratified attribute :loo - attr_accessor :subjectid - index :algorithm_uri index :algorithm_params index :prediction_feature @@ -181,7 +177,7 @@ module Validation def save super - OpenTox::Authorization.check_policy(crossvalidation_uri, subjectid) + OpenTox::Authorization.check_policy(crossvalidation_uri, OpenTox::RestClientWrapper.subjectid) end public @@ -193,12 +189,12 @@ module Validation # convenience method to list all crossvalidations that are unique # in terms of dataset_uri,num_folds,stratified,random_seed # further conditions can be specified in __conditions__ - def self.find_all_uniq(conditions={}, subjectid=nil ) + def self.find_all_uniq(conditions={} ) #cvs = Lib::Crossvalidation.find(:all, :conditions => conditions) cvs = Crossvalidation.find( conditions ) uniq = [] cvs.each do |cv| - next if $aa[:uri] and !OpenTox::Authorization.authorized?(cv.crossvalidation_uri,"GET",subjectid) + next if $aa[:uri] and !OpenTox::Authorization.authorized?(cv.crossvalidation_uri,"GET",OpenTox::RestClientWrapper.subjectid) match = false uniq.each do |cv2| if cv.dataset_uri == cv2.dataset_uri and cv.num_folds == cv2.num_folds and diff --git a/report/plot_factory.rb b/report/plot_factory.rb index 1f35437..fa8f370 100644 --- a/report/plot_factory.rb +++ b/report/plot_factory.rb @@ -108,7 +108,7 @@ module Reports validation_set.validations.each do |v| [[v.test_dataset_uri, test], [v.training_dataset_uri, train]].each do |uri,array| - d = Lib::DatasetCache.find(uri, validation_set.validations[0].subjectid) + d = Lib::DatasetCache.find(uri) d.compounds.each do |c| d.data_entries[c][v.prediction_feature].each do |val| array << val @@ -124,7 +124,7 @@ module Reports else Reports::r_util.feature_value_plot(out_files, validation_set.validations[0].training_feature_dataset_uri, validation_set.validations[0].test_feature_dataset_uri, "Training Data", "Test Data", - nil, validation_set.validations[0].subjectid, waiting_task ) + nil, waiting_task ) end end diff --git a/report/report_application.rb b/report/report_application.rb index a4d3d1f..437fa0b 100755 --- a/report/report_application.rb +++ b/report/report_application.rb @@ -137,7 +137,7 @@ class Validation::Application < OpenTox::Service delete '/validation/report/:type/:id' do perform do |rs| content_type "text/plain" - rs.delete_report(params[:type],params[:id],@subjectid) + rs.delete_report(params[:type],params[:id]) end end @@ -147,7 +147,7 @@ class Validation::Application < OpenTox::Service perform do |rs| puts rs.inspect rs.create_report(params[:type],params[:validation_uris]?params[:validation_uris].split(/\n|,/):nil, - params[:identifier]?params[:identifier].split(/\n|,/):nil,params,@subjectid,task) + params[:identifier]?params[:identifier].split(/\n|,/):nil,params,task) end end return_task(task) diff --git a/report/report_persistance.rb b/report/report_persistance.rb index a0f16d5..60fd454 100755 --- a/report/report_persistance.rb +++ b/report/report_persistance.rb @@ -52,7 +52,7 @@ class Reports::ReportPersistance # call-seq: # delete_report(type, id) => boolean # - def delete_report(type, id, subjectid=nil) + def delete_report(type, id) internal_server_error "not implemented" end @@ -104,7 +104,7 @@ class Reports::FileReportPersistance < Reports::ReportPersistance return file_path end - def delete_report(type, id, subjectid=nil) + def delete_report(type, id) report_dir = report_directory(type, id) raise_report_not_found(type, id) unless File.directory?(report_dir) @@ -202,8 +202,6 @@ module Reports index :crossvalidation_uris index :algorithm_uris - attr_accessor :subjectid - def self.create(params={}) params[:date] = Time.new super params @@ -211,7 +209,7 @@ module Reports def save super - OpenTox::Authorization.check_policy(report_uri, subjectid) + OpenTox::Authorization.check_policy(report_uri, OpenTox::RestClientWrapper.subjectid) end def report_uri @@ -241,12 +239,11 @@ module Reports class ExtendedFileReportPersistance < FileReportPersistance - def new_report(report_content, type, meta_data, uri_provider, subjectid=nil) + def new_report(report_content, type, meta_data, uri_provider) internal_server_error "report meta data missing" unless meta_data meta_data[:report_type] = type report = ReportData.create(meta_data) - report.subjectid = subjectid - OpenTox::Authorization.check_policy(report.report_uri, subjectid) + OpenTox::Authorization.check_policy(report.report_uri, OpenTox::RestClientWrapper.subjectid) new_report_with_id(report_content, type, report.id) end @@ -278,7 +275,7 @@ module Reports end end - def delete_report(type, id, subjectid=nil) + def delete_report(type, id) # begin # report = ReportData.find(:first, :conditions => {:id => id, :report_type => type}) # rescue ActiveRecord::RecordNotFound @@ -289,9 +286,9 @@ module Reports resource_not_found_error("Report with id='"+id.to_s+"' and type='"+type.to_s+"' not found.") if report==nil || report.report_type!=type report.delete - if (subjectid) + if (OpenTox::RestClientWrapper.subjectid) begin - res = OpenTox::Authorization.delete_policies_from_uri(report.report_uri, subjectid) + res = OpenTox::Authorization.delete_policies_from_uri(report.report_uri, OpenTox::RestClientWrapper.subjectid) $logger.debug "Deleted validation policy: #{res}" rescue $logger.warn "Policy delete error for validation: #{report.report_uri}" diff --git a/report/report_service.rb b/report/report_service.rb index 61f058c..0c3c647 100644 --- a/report/report_service.rb +++ b/report/report_service.rb @@ -60,7 +60,7 @@ module Reports # call-seq: # create_report(type, validation_uris) => string # - def create_report(type, validation_uris, identifier=nil, params={}, subjectid=nil, task=nil) + def create_report(type, validation_uris, identifier=nil, params={}, task=nil) internal_server_error "params is no hash" unless params.is_a?(Hash) $logger.info "create report of type '"+type.to_s+"'" @@ -80,7 +80,7 @@ module Reports filter_params[key] = params[key].to_f end end - validation_set = Reports::ValidationSet.new(validation_uris, identifier, filter_params, subjectid) + validation_set = Reports::ValidationSet.new(validation_uris, identifier, filter_params) bad_request_error("cannot get validations from validation_uris '"+validation_uris.inspect+"'") unless validation_set and validation_set.size > 0 $logger.debug "loaded "+validation_set.size.to_s+" validation/s" task.progress(10) if task @@ -90,10 +90,10 @@ module Reports OpenTox::SubTask.create(task,10,90)) $logger.debug "report created" Reports::quit_r - Reports.validation_access.delete_tmp_resources(subjectid) + Reports.validation_access.delete_tmp_resources #step 3: persist report if creation not failed - id = @@persistance.new_report(report_content, type, create_meta_data(type, validation_set, validation_uris), self, subjectid) + id = @@persistance.new_report(report_content, type, create_meta_data(type, validation_set, validation_uris), self) $logger.debug "report persisted with id: '"+id.to_s+"'" task.progress(100) if task @@ -135,19 +135,19 @@ module Reports # call-seq: # delete_report( type, id ) # - def delete_report( type, id, subjectid=nil ) + def delete_report( type, id ) $logger.info "delete report '"+id.to_s+"' of type '"+type.to_s+"'" check_report_type(type) - @@persistance.delete_report(type, id, subjectid) + @@persistance.delete_report(type, id) end # no api-access for this method - def delete_all_reports( type, subjectid=nil ) + def delete_all_reports( type ) $logger.info "deleting all reports of type '"+type.to_s+"'" check_report_type(type) - @@persistance.list_reports(type).each{ |id| @@persistance.delete_report(type, id, subjectid) } + @@persistance.list_reports(type).each{ |id| @@persistance.delete_report(type, id) } end def parse_type( report_uri ) diff --git a/report/validation_access.rb b/report/validation_access.rb index a47dede..e9d1c64 100755 --- a/report/validation_access.rb +++ b/report/validation_access.rb @@ -15,7 +15,7 @@ class Reports::ValidationDB self_uri.host == val_uri.host && self_uri.port == val_uri.port end - def resolve_cv_uris(validation_uris, identifier, subjectid) + def resolve_cv_uris(validation_uris, identifier) res = {} count = 0 validation_uris.each do |u| @@ -27,7 +27,7 @@ class Reports::ValidationDB if same_service?u unauthorized_error "Not authorized: GET "+u.to_s if - $aa[:uri] and !OpenTox::Authorization.authorized?(u,"GET",subjectid) + $aa[:uri] and !OpenTox::Authorization.authorized?(u,"GET",OpenTox::RestClientWrapper.subjectid) Ohm.connect(:thread_safe => true, :port => 6379) cv = Validation::Crossvalidation[cv_id] resource_not_found_error "crossvalidation with id "+cv_id.to_s+" not found" unless cv @@ -36,7 +36,7 @@ class Reports::ValidationDB val_uris = Validation::Validation.find( :crossvalidation_id => cv_id, :validation_type => "crossvalidation" ).collect{|v| v.validation_uri.to_s} else val_base_uri = u.gsub(/\/crossvalidation\/[0-9]+/,"") - val_uris = OpenTox::RestClientWrapper.get( val_base_uri+"?crossvalidation_id="+cv_id.to_s+"&validation_type=crossvalidation",nil,{:subjectid => subjectid, :accept => "text/uri-list" }).split("\n") + val_uris = OpenTox::RestClientWrapper.get( val_base_uri+"?crossvalidation_id="+cv_id.to_s+"&validation_type=crossvalidation",nil,{:accept => "text/uri-list" }).split("\n") end val_uris.each do |v_uri| @@ -50,7 +50,7 @@ class Reports::ValidationDB res end - def init_validation(validation, uri, filter_params, subjectid) + def init_validation(validation, uri, filter_params) bad_request_error "not a validation uri: "+uri.to_s unless uri =~ /\/[0-9]+$/ validation_id = uri.split("/")[-1] @@ -61,13 +61,13 @@ class Reports::ValidationDB if same_service? uri unauthorized_error "Not authorized: GET "+uri.to_s if - $aa[:uri] and !OpenTox::Authorization.authorized?(uri,"GET",subjectid) + $aa[:uri] and !OpenTox::Authorization.authorized?(uri,"GET",OpenTox::RestClientWrapper.subjectid) Ohm.connect(:thread_safe => true, :port => 6379) v = Validation::Validation[validation_id] else - v = YAML::load(OpenTox::RestClientWrapper.get uri,nil,{:subjectid=>subjectid, :accept=>"application/serialize"}) + v = YAML::load(OpenTox::RestClientWrapper.get uri,nil,{:accept=>"application/serialize"}) end - v.subjectid = subjectid + #v.subjectid = subjectid v.filter_predictions(filter_params[:min_confidence], filter_params[:min_num_predictions], filter_params[:max_num_predictions]) if filter_params @@ -88,22 +88,22 @@ class Reports::ValidationDB end end - def init_validation_from_cv_statistics( validation, cv_uri, filter_params, subjectid ) + def init_validation_from_cv_statistics( validation, cv_uri, filter_params ) bad_request_error "not a crossvalidation uri: "+cv_uri.to_s unless cv_uri =~ /crossvalidation.*\/[0-9]+$/ if same_service?cv_uri cv_id = cv_uri.split("/")[-1] unauthorized_error "Not authorized: GET "+cv_uri.to_s if - $aa[:uri] and !OpenTox::Authorization.authorized?(cv_uri,"GET",subjectid) + $aa[:uri] and !OpenTox::Authorization.authorized?(cv_uri,"GET",OpenTox::RestClientWrapper.subjectid) Ohm.connect(:thread_safe => true, :port => 6379) cv = Validation::Crossvalidation[cv_id] resource_not_found_error "crossvalidation with id "+crossvalidation_id.to_s+" not found" unless cv bad_request_error "crossvalidation with id "+crossvalidation_id.to_s+" is not finished yet" unless cv.finished - v = Validation::Validation.from_cv_statistics(cv_id, subjectid) + v = Validation::Validation.from_cv_statistics(cv_id) else - cv = YAML::load(OpenTox::RestClientWrapper.get cv_uri,nil,{:subjectid=>subjectid, :accept=>"application/serialize"}) - v = YAML::load(OpenTox::RestClientWrapper.get cv_uri+"/statistics",nil,{:subjectid=>subjectid, :accept=>"application/serialize"}) + cv = YAML::load(OpenTox::RestClientWrapper.get cv_uri,nil,{:accept=>"application/serialize"}) + v = YAML::load(OpenTox::RestClientWrapper.get cv_uri+"/statistics",nil,{:accept=>"application/serialize"}) end v.filter_predictions(filter_params[:min_confidence], filter_params[:min_num_predictions], filter_params[:max_num_predictions]) if filter_params @@ -124,7 +124,7 @@ class Reports::ValidationDB validation.validation_uri = cv_uri+"/statistics" end - def init_cv(validation, subjectid) + def init_cv(validation) cv = nil if same_service?validation.crossvalidation_uri @@ -132,15 +132,15 @@ class Reports::ValidationDB cv = Validation::Crossvalidation[validation.crossvalidation_id] bad_request_error "no crossvalidation found with id "+validation.crossvalidation_id.to_s unless cv else - cv = YAML::load(OpenTox::RestClientWrapper.get validation.crossvalidation_uri,nil,{:subjectid=>subjectid, :accept=>"application/serialize"}) + cv = YAML::load(OpenTox::RestClientWrapper.get validation.crossvalidation_uri,nil,{:accept=>"application/serialize"}) end Validation::CROSS_VAL_PROPS.each do |p| validation.send("#{p.to_s}=".to_sym, cv.send(p.to_s)) end end - def training_feature_dataset_uri(validation, subjectid) - m = OpenTox::Model::Generic.find(validation.model_uri, subjectid) + def training_feature_dataset_uri(validation) + m = OpenTox::Model::Generic.find(validation.model_uri) if m f = m.metadata[RDF::OT.featureDataset] return f.chomp if f @@ -148,9 +148,9 @@ class Reports::ValidationDB internal_server_error "no feature dataset found" end - def test_feature_dataset_uri(validation, subjectid) - training_features = Lib::DatasetCache.find( training_feature_dataset_uri(validation,subjectid), subjectid ) - test_dataset = Lib::DatasetCache.find( validation.test_dataset_uri, subjectid ) + def test_feature_dataset_uri(validation) + training_features = Lib::DatasetCache.find( training_feature_dataset_uri(validation)) + test_dataset = Lib::DatasetCache.find( validation.test_dataset_uri) features_found = true training_features.features.each do |f| unless test_dataset.features.include?(f) @@ -164,7 +164,7 @@ class Reports::ValidationDB $logger.debug "all training-features found in test-datset" uri = test_dataset.uri else - m = OpenTox::Model::Generic.find(validation.model_uri, subjectid) + m = OpenTox::Model::Generic.find(validation.model_uri) feat_gen = nil m.metadata[RDF::OT.parameters].each do |h| if h[RDF::DC.title] and h[RDF::DC.title]=~/feature_generation/ and h[RDF::OT.paramValue] @@ -174,40 +174,40 @@ class Reports::ValidationDB end if m and m.metadata[RDF::OT.parameters] internal_server_error "no feature creation alg found" unless feat_gen feat_gen = File.join(feat_gen,"match") if feat_gen=~/fminer/ - uri = OpenTox::RestClientWrapper.post(feat_gen,{:subjectid => subjectid, - :feature_dataset_uri=>training_feature_dataset_uri(validation,subjectid), + uri = OpenTox::RestClientWrapper.post(feat_gen,{ + :feature_dataset_uri=>training_feature_dataset_uri(validation), :dataset_uri=>validation.test_dataset_uri}) @@tmp_resources << wait_for_task(uri) end uri end - def delete_tmp_resources(subjectid) + def delete_tmp_resources @@tmp_resources.each do |uri| - OpenTox::RestClientWrapper.delete uri,{:subjectid=>subjectid} + OpenTox::RestClientWrapper.delete uri end @@tmp_resources = [] end - def get_predictions(validation, filter_params, subjectid, task) + def get_predictions(validation, filter_params, task) # we need compound info, cannot reuse stored prediction data data = Lib::PredictionData.create( validation.feature_type, validation.test_dataset_uri, validation.prediction_feature, validation.prediction_dataset_uri, validation.predicted_variable, - validation.predicted_confidence, subjectid, OpenTox::SubTask.create(task, 0, 80 ) ) + validation.predicted_confidence, OpenTox::SubTask.create(task, 0, 80 ) ) data = Lib::PredictionData.filter_data( data.data, data.compounds, filter_params[:min_confidence], filter_params[:min_num_predictions], filter_params[:max_num_predictions] ) if filter_params!=nil task.progress(100) if task Lib::OTPredictions.new( data.data, data.compounds ) end - def get_accept_values( validation, subjectid=nil ) + def get_accept_values( validation ) # PENDING So far, one has to load the whole dataset to get the accept_value from ambit test_datasets = validation.test_dataset_uri res = nil test_datasets.split(";").each do |test_dataset| - d = Lib::DatasetCache.find( test_dataset, subjectid ) + d = Lib::DatasetCache.find( test_dataset) internal_server_error "cannot get test target dataset for accept values, dataset: "+test_dataset.to_s unless d - feature = OpenTox::Feature.find(validation.prediction_feature,subjectid) + feature = OpenTox::Feature.find(validation.prediction_feature) accept_values = feature.accept_values internal_server_error "cannot get accept values for feature "+ validation.prediction_feature+":\n"+feature.to_yaml unless accept_values!=nil @@ -217,24 +217,24 @@ class Reports::ValidationDB res end - def feature_type( validation, subjectid=nil ) - m = OpenTox::Model::Generic.new(validation.model_uri,subjectid) + def feature_type( validation ) + m = OpenTox::Model::Generic.new(validation.model_uri) #m.get m.feature_type #get_model(validation).classification? end - def predicted_variable(validation, subjectid=nil) + def predicted_variable(validation) internal_server_error "cannot derive model depended props for merged validations" if Lib::MergeObjects.merged?(validation) - model = OpenTox::Model::Generic.new(validation.model_uri,subjectid) + model = OpenTox::Model::Generic.new(validation.model_uri) model.get resource_not_found_error "model not found '"+validation.model_uri+"'" unless model model.predicted_variable end - def predicted_confidence(validation, subjectid=nil) + def predicted_confidence(validation) internal_server_error "cannot derive model depended props for merged validations" if Lib::MergeObjects.merged?(validation) - model = OpenTox::Model::Generic.new(validation.model_uri,subjectid) + model = OpenTox::Model::Generic.new(validation.model_uri) model.get resource_not_found_error "model not found '"+validation.model_uri+"'" unless model model.predicted_confidence diff --git a/report/validation_data.rb b/report/validation_data.rb index 4623a77..b1064a8 100755 --- a/report/validation_data.rb +++ b/report/validation_data.rb @@ -76,8 +76,8 @@ module Reports # class ReportValidation - def self.resolve_cv_uris(validation_uris, identifier, subjectid) - Reports.validation_access.resolve_cv_uris(validation_uris, identifier, subjectid) + def self.resolve_cv_uris(validation_uris, identifier) + Reports.validation_access.resolve_cv_uris(validation_uris, identifier) end # create member variables for all validation properties @@ -87,26 +87,24 @@ module Reports @@validation_attributes.each{ |a| attr_accessor a } attr_reader :predictions, :filter_params - attr_accessor :identifier, :validation_report_uri, :crossvalidation_report_uri, :subjectid + attr_accessor :identifier, :validation_report_uri, :crossvalidation_report_uri - def initialize(uri = nil, filter_params=nil, subjectid = nil) - Reports.validation_access.init_validation(self, uri, filter_params, subjectid) if uri - @subjectid = subjectid + def initialize(uri = nil, filter_params=nil) + Reports.validation_access.init_validation(self, uri, filter_params) if uri internal_server_error unless filter_params==nil || filter_params.is_a?(Hash) @filter_params = filter_params @created_resources = [] - #internal_server_error "subjectid is nil" unless subjectid end - def self.from_cv_statistics( cv_uri, filter_params, subjectid ) - v = ReportValidation.new(nil, filter_params, subjectid) - Reports.validation_access.init_validation_from_cv_statistics(v, cv_uri, filter_params, subjectid) + def self.from_cv_statistics( cv_uri, filter_params) + v = ReportValidation.new(nil, filter_params) + Reports.validation_access.init_validation_from_cv_statistics(v, cv_uri, filter_params) v end def training_feature_dataset_uri unless @training_feature_dataset - @training_feature_dataset = Reports.validation_access.training_feature_dataset_uri( self, @subjectid ) + @training_feature_dataset = Reports.validation_access.training_feature_dataset_uri( self) end @training_feature_dataset end @@ -114,7 +112,7 @@ module Reports #hack this does create the features for the test dataset def test_feature_dataset_uri unless @test_feature_dataset - @test_feature_dataset = Reports.validation_access.test_feature_dataset_uri( self, @subjectid ) + @test_feature_dataset = Reports.validation_access.test_feature_dataset_uri( self) end @test_feature_dataset end @@ -134,7 +132,7 @@ module Reports task.progress(100) if task nil else - @predictions = Reports.validation_access.get_predictions( self, @filter_params, @subjectid, task ) + @predictions = Reports.validation_access.get_predictions( self, @filter_params, task ) end end end @@ -142,7 +140,7 @@ module Reports # returns the predictions feature values (i.e. the domain of the class attribute) # def get_accept_values() - @accept_values = Reports.validation_access.get_accept_values(self, @subjectid) unless @accept_values + @accept_values = Reports.validation_access.get_accept_values(self) unless @accept_values @accept_values end @@ -150,23 +148,23 @@ module Reports # def feature_type return @feature_type if @feature_type!=nil - @feature_type = Reports.validation_access.feature_type(self, @subjectid) + @feature_type = Reports.validation_access.feature_type(self) end def predicted_variable return @predicted_variable if @predicted_variable!=nil - @predicted_variable = Reports.validation_access.predicted_variable(self, @subjectid) + @predicted_variable = Reports.validation_access.predicted_variable(self) end def predicted_confidence return @predicted_confidence if @predicted_confidence!=nil - @predicted_confidence = Reports.validation_access.predicted_confidence(self, @subjectid) + @predicted_confidence = Reports.validation_access.predicted_confidence(self) end # loads all crossvalidation attributes, of the corresponding cv into this object def load_cv_attributes internal_server_error "crossvalidation-id not set" unless @crossvalidation_id - Reports.validation_access.init_cv(self, @subjectid) + Reports.validation_access.init_cv(self) # load cv report ids = Reports.persistance.list_reports("crossvalidation",{:crossvalidation=>self.crossvalidation_uri.to_s }) @crossvalidation_report_uri = ReportService.instance.get_uri("crossvalidation",ids[-1]) if ids and ids.size>0 @@ -185,13 +183,13 @@ module Reports # class ValidationSet - def initialize(validation_uris=nil, identifier=nil, filter_params=nil, subjectid=nil) + def initialize(validation_uris=nil, identifier=nil, filter_params=nil) @unique_values = {} @validations = [] if validation_uris - validation_uri_and_ids = ReportValidation.resolve_cv_uris(validation_uris, identifier, subjectid) + validation_uri_and_ids = ReportValidation.resolve_cv_uris(validation_uris, identifier) validation_uri_and_ids.each do |u,id| - v = ReportValidation.new(u, filter_params, subjectid) + v = ReportValidation.new(u, filter_params) v.identifier = id if id ids = Reports.persistance.list_reports("validation",{:validation_uris=>v.validation_uri }) v.validation_report_uri = ReportService.instance.get_uri("validation",ids[-1]) if ids and ids.size>0 @@ -451,7 +449,7 @@ module Reports new_set = ValidationSet.new grouping = Util.group(@validations, [:crossvalidation_id]) grouping.each do |g| - v = ReportValidation.from_cv_statistics(g[0].crossvalidation_uri, @validations.first.filter_params, g[0].subjectid) + v = ReportValidation.from_cv_statistics(g[0].crossvalidation_uri, @validations.first.filter_params) v.identifier = g.collect{|vv| vv.identifier}.uniq.join(";") new_set.validations << v end @@ -478,7 +476,7 @@ module Reports #merge Lib::MergeObjects.register_merge_attributes( ReportValidation, Validation::VAL_MERGE_AVG+Validation::VAL_MERGE_SUM,[], - Validation::VAL_MERGE_GENERAL+[:identifier, :validation_report_uri, :crossvalidation_report_uri, :subjectid]) unless + Validation::VAL_MERGE_GENERAL+[:identifier, :validation_report_uri, :crossvalidation_report_uri]) unless Lib::MergeObjects.merge_attributes_registered?(ReportValidation) grouping.each do |g| new_set.validations << g[0].clone_validation diff --git a/test/test_application.rb b/test/test_application.rb index 2ea8d67..07fd1cc 100755 --- a/test/test_application.rb +++ b/test/test_application.rb @@ -5,7 +5,6 @@ post '/test_validation/?' do task = OpenTox::Task.run("Test validation",to("/validation/test_validation",:full)) do |task| v = validationExamples[0][0] ex = v.new - ex.subjectid = @subjectid ex.upload_files task.progress(10) ex.check_requirements diff --git a/test/test_examples_util.rb b/test/test_examples_util.rb index 5cc2011..c74da05 100755 --- a/test/test_examples_util.rb +++ b/test/test_examples_util.rb @@ -17,7 +17,7 @@ module ValidationExamples @@dataset_uris = {} @@prediction_features = {} - def self.upload_dataset(file, subjectid=nil, dataset_service=$dataset[:uri]) #, file_type="application/x-yaml") + def self.upload_dataset(file, dataset_service=$dataset[:uri]) #, file_type="application/x-yaml") raise "File not found: "+file.path.to_s unless File.exist?(file.path) if @@dataset_uris[file.path.to_s]==nil @@ -27,22 +27,20 @@ module ValidationExamples #data_uri = OpenTox::RestClientWrapper.post_wait(dataset_service,{:content_type => file_type},data).to_s.chomp #@@dataset_uris[file.path.to_s] = data_uri #$logger.debug "uploaded dataset: "+data_uri - d = OpenTox::Dataset.create($dataset[:uri], subjectid) + d = OpenTox::Dataset.create($dataset[:uri]) d.load_yaml(data) - d.save( subjectid ) + d.put @@dataset_uris[file.path.to_s] = d.uri elsif (file.path =~ /csv$/) - d = OpenTox::Dataset.new nil, subjectid + d = OpenTox::Dataset.new d.upload file.path - d.get - #d = OpenTox::Dataset.create_from_csv_file(file.path, subjectid) raise "num features not 1 (="+d.features.size.to_s+"), what to predict??" if d.features.size != 1 @@prediction_features[file.path.to_s] = d.features[0].uri @@dataset_uris[file.path.to_s] = d.uri elsif (file.path =~ /rdf$/) - d = OpenTox::Dataset.create($dataset[:uri], subjectid) - d.load_rdfxml_file(file, subjectid) - d.save(subjectid) + d = OpenTox::Dataset.create($dataset[:uri]) + d.load_rdfxml_file(file) + d.put @@dataset_uris[file.path.to_s] = d.uri else raise "unknown file type: "+file.path.to_s @@ -59,7 +57,7 @@ module ValidationExamples @@prediction_features[file.path.to_s] end - def self.build_compare_report(validation_examples, subjectid) + def self.build_compare_report(validation_examples) @comp = validation_examples[0].algorithm_uri==nil ? :model_uri : :algorithm_uri return nil if @comp == :model_uri @@ -69,15 +67,14 @@ module ValidationExamples end return nil if to_compare.size < 2 #begin - return validation_post "report/algorithm_comparison",{ :validation_uris => to_compare.join("\n") }, subjectid + return validation_post "report/algorithm_comparison",{ :validation_uris => to_compare.join("\n") } #rescue => ex #return "error creating comparison report "+ex.message #end end - def self.validation_post(uri, params, subjectid, waiting_task=nil, accept_header='application/rdf+xml' ) + def self.validation_post(uri, params, waiting_task=nil, accept_header='application/rdf+xml' ) - params[:subjectid] = subjectid if subjectid if $test_case $test_case.post '/validation'+uri,params,'HTTP_ACCEPT' => accept_header uri = wait($test_case.last_response.body) @@ -90,9 +87,8 @@ module ValidationExamples uri end - def self.validation_get(uri, subjectid, accept_header='application/rdf+xml') + def self.validation_get(uri, accept_header='application/rdf+xml') params = {} - params[:subjectid] = subjectid if subjectid if $test_case #puts "getting "+uri+","+accept_header $test_case.get '/validation'+uri,params,'HTTP_ACCEPT' => accept_header @@ -106,10 +102,10 @@ module ValidationExamples def self.validation_delete(uri, accept_header='application/rdf+xml') if $test_case - $test_case.delete '/validation'+uri,{:subjectid => SUBJECTID},'HTTP_ACCEPT' => accept_header + $test_case.delete '/validation'+uri,{},'HTTP_ACCEPT' => accept_header return wait($test_case.last_response.body) else - return OpenTox::RestClientWrapper.delete(File.join($validation[:uri],uri),{:accept => accept_header,:subjectid => SUBJECTID}) + return OpenTox::RestClientWrapper.delete(File.join($validation[:uri],uri),{:accept => accept_header}) end end @@ -256,7 +252,6 @@ module ValidationExamples :random_seed, :num_folds, :stratified, - :subjectid #results attr_accessor :validation_uri, :report_uri, @@ -270,7 +265,7 @@ module ValidationExamples uri = a[0] file = a[1] if send(uri)==nil and send(file)!=nil - dataset_uri = Util.upload_dataset(send(file), @subjectid) + dataset_uri = Util.upload_dataset(send(file)) send("#{uri.to_s}=".to_sym, dataset_uri) @uploaded_datasets = [] unless @uploaded_datasets @uploaded_datasets << dataset_uri @@ -307,7 +302,7 @@ module ValidationExamples @uploaded_datasets.each do |d| # begin puts "deleting dataset "+d - OpenTox::RestClientWrapper.delete(d,{:subjectid => SUBJECTID}) + OpenTox::RestClientWrapper.delete(d) # rescue => ex #puts "Could not delete dataset:' "+d+" "+ex.message #end @@ -316,9 +311,8 @@ module ValidationExamples def report( waiting_task=nil ) #begin - @report_uri = Util.validation_post '/report/'+report_type,{:validation_uris => @validation_uri}, - @subjectid,waiting_task if @validation_uri - Util.validation_get "/report/"+report_uri.split("/")[-2]+"/"+report_uri.split("/")[-1], @subjectid if @report_uri + @report_uri = Util.validation_post '/report/'+report_type,{:validation_uris => @validation_uri}, waiting_task if @validation_uri + Util.validation_get "/report/"+report_uri.split("/")[-2]+"/"+report_uri.split("/")[-1] if @report_uri #rescue => ex #puts "could not create report: "+ex.message #raise ex @@ -328,7 +322,7 @@ module ValidationExamples def validate( waiting_task=nil ) #begin - @validation_uri = Util.validation_post '/'+validation_type, get_params, @subjectid, waiting_task + @validation_uri = Util.validation_post '/'+validation_type, get_params, waiting_task #rescue => ex #puts "could not validate: "+ex.message #@validation_error = ex.message @@ -338,15 +332,15 @@ module ValidationExamples def compare_yaml_vs_rdf if @validation_uri - yaml = YAML.load(Util.validation_get(@validation_uri.split("/")[-1],@subjectid,'application/x-yaml')) - owl = OpenTox::Owl.from_data(Util.validation_get(@validation_uri.split("/")[-1],@subjectid),@validation_uri,"Validation") + yaml = YAML.load(Util.validation_get(@validation_uri.split("/")[-1],'application/x-yaml')) + owl = OpenTox::Owl.from_data(Util.validation_get(@validation_uri.split("/")[-1]),@validation_uri,"Validation") Util.compare_yaml_and_owl(yaml,owl) end if @report_uri - yaml = YAML.load(Util.validation_get(@report_uri.split("/")[-3..-1].join("/"),@subjectid,'application/x-yaml')) - owl = OpenTox::Owl.from_data(Util.validation_get(@report_uri.split("/")[-3..-1].join("/"),@subjectid),@report_uri,"ValidationReport") + yaml = YAML.load(Util.validation_get(@report_uri.split("/")[-3..-1].join("/"),'application/x-yaml')) + owl = OpenTox::Owl.from_data(Util.validation_get(@report_uri.split("/")[-3..-1].join("/")),@report_uri,"ValidationReport") Util.compare_yaml_and_owl(yaml,owl) - Util.validation_get(@report_uri.split("/")[-3..-1].join("/"),@subjectid,'text/html') + Util.validation_get(@report_uri.split("/")[-3..-1].join("/"),'text/html') else puts "no report" end @@ -354,7 +348,7 @@ module ValidationExamples def compute_dataset_size if @validation_uri =~ /crossvalidation/ - cv = OpenTox::Crossvalidation.find(@validation_uri,@subjectid) + cv = OpenTox::Crossvalidation.find(@validation_uri) count = 0 size = 0 target = nil @@ -411,7 +405,7 @@ module ValidationExamples Util.validation_get("crossvalidation/"+@validation_uri.split("/")[-1]+"/statistics",'application/x-yaml') Util.verify_validation(Util.validation_get("crossvalidation/"+@validation_uri.split("/")[-1]+"/statistics",'application/x-yaml')) else - Util.verify_validation(Util.validation_get(@validation_uri.split("/")[-1],@subjectid,'application/x-yaml')) + Util.verify_validation(Util.validation_get(@validation_uri.split("/")[-1],'application/x-yaml')) end end diff --git a/validation/validation_application.rb b/validation/validation_application.rb index 4bd7942..fa4f4d3 100755 --- a/validation/validation_application.rb +++ b/validation/validation_application.rb @@ -28,7 +28,7 @@ class Validation::Application < OpenTox::Service $logger.info "list all crossvalidations "+params.inspect model_uri = params.delete("model") || params.delete("model_uri") if model_uri - model = OpenTox::Model::Generic.find(model_uri, @subjectid) + model = OpenTox::Model::Generic.find(model_uri) params[:algorithm] = model.metadata[RDF::OT.algorithm] params[:dataset] = model.metadata[RDF::OT.trainingDataset] end @@ -72,14 +72,12 @@ class Validation::Application < OpenTox::Service :algorithm_params => params[:algorithm_params], :prediction_feature => params[:prediction_feature], :stratified => params[:stratified], - :loo => "false", - :subjectid => @subjectid } + :loo => "false" } [ :num_folds, :random_seed ].each{ |sym| cv_params[sym] = params[sym] if params[sym] } cv = Validation::Crossvalidation.create cv_params - cv.subjectid = @subjectid cv.perform_cv( OpenTox::SubTask.create(task,0,95) ) # computation of stats is cheap as dataset are already loaded into the memory - Validation::Validation.from_cv_statistics( cv.id, @subjectid, OpenTox::SubTask.create(task,95,100) ) + Validation::Validation.from_cv_statistics( cv.id, OpenTox::SubTask.create(task,95,100) ) cv.crossvalidation_uri end return_task(task) @@ -90,10 +88,9 @@ class Validation::Application < OpenTox::Service content_type "text/uri-list" deleted = [] Validation::Crossvalidation.all.collect.delete_if{|cv| cv.finished}.each do |cv| - if OpenTox::Authorization.authorized?(cv.crossvalidation_uri,"DELETE",@subjectid) + if OpenTox::Authorization.authorized?(cv.crossvalidation_uri,"DELETE",OpenTox::RestClientWrapper.subjectid) $logger.debug "delete cv with id:"+cv.id.to_s+", finished is false" deleted << cv.crossvalidation_uri - cv.subjectid = @subjectid cv.delete_crossvalidation sleep 1 if $aa[:uri] end @@ -116,10 +113,9 @@ class Validation::Application < OpenTox::Service :algorithm_uri => params[:algorithm_uri], :loo => "true" } cv = Validation::Crossvalidation.create cv_params - cv.subjectid = @subjectid cv.perform_cv( OpenTox::SubTask.create(task,0,95)) # computation of stats is cheap as dataset are already loaded into the memory - Validation::Validation.from_cv_statistics( cv.id, @subjectid, OpenTox::SubTask.create(task,95,100) ) + Validation::Validation.from_cv_statistics( cv.id, OpenTox::SubTask.create(task,95,100) ) cv.clean_loo_files( !(params[:algorithm_params] && params[:algorithm_params] =~ /feature_dataset_uri/) ) cv.crossvalidation_uri end @@ -192,7 +188,7 @@ class Validation::Application < OpenTox::Service get '/validation/crossvalidation/:id/statistics' do $logger.info "get crossvalidation statistics for crossvalidation with id "+params[:id].to_s - v = Validation::Validation.from_cv_statistics( params[:id], @subjectid ) + v = Validation::Validation.from_cv_statistics( params[:id] ) case request.env['HTTP_ACCEPT'].to_s when /text\/html/ related_links = @@ -218,7 +214,7 @@ class Validation::Application < OpenTox::Service $logger.info "get crossvalidation statistics for crossvalidation with id "+params[:id].to_s bad_request_error("Missing params, plz give confidence and prediction") unless params[:confidence] and params[:prediction] - v = Validation::Validation.from_cv_statistics( params[:id], @subjectid ) + v = Validation::Validation.from_cv_statistics( params[:id] ) props = v.probabilities(params[:confidence].to_s.to_f,params[:prediction].to_s) content_type "text/x-yaml" props.to_yaml @@ -236,7 +232,6 @@ class Validation::Application < OpenTox::Service cv = Validation::Crossvalidation[params[:id]] resource_not_found_error "Crossvalidation '#{params[:id]}' not found." unless cv - cv.subjectid = @subjectid cv.delete_crossvalidation end @@ -319,7 +314,6 @@ class Validation::Application < OpenTox::Service :model_uri => params[:model_uri], :test_dataset_uri => params[:test_dataset_uri], :prediction_feature => params[:prediction_feature] - v.subjectid = @subjectid v.validate_model( task ) v.validation_uri end @@ -369,7 +363,6 @@ class Validation::Application < OpenTox::Service :training_dataset_uri => params[:training_dataset_uri], :test_dataset_uri => params[:test_dataset_uri], :prediction_feature => params[:prediction_feature] - v.subjectid = @subjectid v.validate_algorithm( task ) v.validation_uri end @@ -416,7 +409,7 @@ class Validation::Application < OpenTox::Service bad_request_error "prediction_feature missing" unless params[:prediction_feature].to_s.size>0 task = OpenTox::Task.run( "Perform bootstrapping validation", to("/validation/bootstrapping", :full) ) do |task| #, params params.merge!( Validation::Util.bootstrapping( params[:dataset_uri], - params[:prediction_feature], @subjectid, + params[:prediction_feature], params[:random_seed], OpenTox::SubTask.create(task,0,33)) ) $logger.info "params after bootstrapping: "+params.inspect v = Validation::Validation.create :validation_type => "bootstrapping", @@ -425,7 +418,6 @@ class Validation::Application < OpenTox::Service :algorithm_params => params[:algorithm_params], :training_dataset_uri => params[:training_dataset_uri], :test_dataset_uri => params[:test_dataset_uri] - v.subjectid = @subjectid v.validate_algorithm( OpenTox::SubTask.create(task,33,100)) v.validation_uri end @@ -474,10 +466,10 @@ class Validation::Application < OpenTox::Service bad_request_error "algorithm_uri missing" unless params[:algorithm_uri].to_s.size>0 bad_request_error "prediction_feature missing" unless params[:prediction_feature].to_s.size>0 check_stratified(params) - task = OpenTox::Task.run( "Perform training test split validation", uri("/validation/training_test_split"), @subjectid ) do |task| #, params + task = OpenTox::Task.run( "Perform training test split validation", uri("/validation/training_test_split")) do |task| #, params $logger.debug "performing train test split" params.merge!( Validation::Util.train_test_dataset_split(to("/validation/training_test_split", :full), params[:dataset_uri], - (params[:stratified].to_s=~/true/ ? params[:prediction_feature] : nil), @subjectid, params[:stratified], params[:split_ratio], + (params[:stratified].to_s=~/true/ ? params[:prediction_feature] : nil), params[:stratified], params[:split_ratio], params[:random_seed], OpenTox::SubTask.create(task,0,33))) $logger.debug "creating validation" v = Validation::Validation.create :validation_type => "training_test_split", @@ -486,7 +478,6 @@ class Validation::Application < OpenTox::Service :prediction_feature => params[:prediction_feature], :algorithm_uri => params[:algorithm_uri], :algorithm_params => params[:algorithm_params] - v.subjectid = @subjectid $logger.debug "created validation, validating algorithm" v.validate_algorithm( OpenTox::SubTask.create(task,33,100)) v.validation_uri @@ -530,10 +521,9 @@ class Validation::Application < OpenTox::Service content_type "text/uri-list" deleted = [] Validation::Validation.all.collect.delete_if{|val| val.finished}.each do |val| - if OpenTox::Authorization.authorized?(val.validation_uri,"DELETE",@subjectid) + if OpenTox::Authorization.authorized?(val.validation_uri,"DELETE",OpenTox::RestClientWrapper.subjectid) $logger.debug "delete val with id:"+val.id.to_s+", finished is false" deleted << val.validation_uri - val.subjectid = @subjectid val.delete_validation sleep 1 if $aa[:uri] end @@ -556,9 +546,9 @@ class Validation::Application < OpenTox::Service end deleted = [] OpenTox::Dataset.all.each do |d| - if !used_datasets.include?(d.uri) and OpenTox::Authorization.authorized?(d.uri,"DELETE",@subjectid) + if !used_datasets.include?(d.uri) and OpenTox::Authorization.authorized?(d.uri,"DELETE",OpenTox::RestClientWrapper.subjectid) deleted << d.uri - d.delete(@subjectid) + d.delete sleep 1 if $aa[:uri] end end @@ -572,7 +562,7 @@ class Validation::Application < OpenTox::Service check_stratified(params) task = OpenTox::Task.run( "Create data-split", to("/validation/plain_training_test_split", :full) ) do |task| result = Validation::Util.train_test_dataset_split(to("/validation/plain_training_test_split", :full), params[:dataset_uri], params[:prediction_feature], - @subjectid, params[:stratified], params[:split_ratio], params[:random_seed], task) + params[:stratified], params[:split_ratio], params[:random_seed], task) content_type "text/uri-list" result[:training_dataset_uri]+"\n"+result[:test_dataset_uri]+"\n" end @@ -589,7 +579,6 @@ class Validation::Application < OpenTox::Service if params[:model_uri] bad_request_error "please specify 'model_uri' or set either 'classification' or 'regression' flag" if params[:classification] or params[:regression] v = Validation::Validation.create params - v.subjectid = @subjectid v.compute_validation_stats_with_model(nil,false,task) else bad_request_error "please specify 'model_uri' or 'prediction_feature'" unless params[:prediction_feature] @@ -601,7 +590,6 @@ class Validation::Application < OpenTox::Service feature_type = "classification" if params.delete("classification")!=nil feature_type = "regression" if params.delete("regression")!=nil v = Validation::Validation.create params - v.subjectid = @subjectid v.compute_prediction_data(feature_type,predicted_variable,predicted_confidence,v.prediction_feature,nil,task) v.compute_validation_stats()#feature_type,predicted_variable,predicted_confidence,nil,nil,false,task) end @@ -618,7 +606,6 @@ class Validation::Application < OpenTox::Service rescue ActiveRecord::RecordNotFound => ex resource_not_found_error("Validation '#{params[:id]}' not found.") end - validation.subjectid = @subjectid bad_request_error("Validation '"+params[:id].to_s+"' not finished") unless validation.finished bad_request_error("Missing params, plz give confidence and prediction") unless params[:confidence] and params[:prediction] props = validation.probabilities(params[:confidence].to_s.to_f,params[:prediction].to_s) @@ -710,7 +697,6 @@ class Validation::Application < OpenTox::Service # resource_not_found_error "Validation '#{params[:id]}' not found." # end validation = Validation::Validation[params[:id]] - validation.subjectid = @subjectid resource_not_found_error "Validation '#{params[:id]}' not found." unless validation content_type "text/plain" validation.delete_validation diff --git a/validation/validation_service.rb b/validation/validation_service.rb index 80a7b6b..67009df 100755 --- a/validation/validation_service.rb +++ b/validation/validation_service.rb @@ -39,7 +39,7 @@ module Validation class Validation - def self.from_cv_statistics( cv_id, subjectid=nil, waiting_task=nil ) + def self.from_cv_statistics( cv_id, waiting_task=nil ) v = Validation.find( :crossvalidation_id => cv_id, :validation_type => "crossvalidation_statistics" ).first unless v crossvalidation = Crossvalidation[cv_id] @@ -48,7 +48,6 @@ module Validation vals = Validation.find( :crossvalidation_id => cv_id, :validation_type => "crossvalidation" ).collect{|x| x} v = Validation.new - v.subjectid = subjectid v.compute_prediction_data_with_cv(vals, waiting_task) v.compute_validation_stats() @@ -62,7 +61,6 @@ module Validation v.real_runtime = vals.collect{ |vv| vv.real_runtime }.uniq.join(";") v.save end - v.subjectid = subjectid waiting_task.progress(100) if waiting_task v end @@ -95,7 +93,7 @@ module Validation uri = self.send(attr) $logger.debug "also deleting "+attr.to_s+" : "+uri.to_s if uri begin - OpenTox::RestClientWrapper.delete(uri, :subjectid => subjectid) if uri + OpenTox::RestClientWrapper.delete(uri) if uri sleep 1 if $aa[:uri] # wait a second to not stress the a&a service too much rescue => ex $logger.warn "could not delete "+uri.to_s+" : "+ex.message.to_s @@ -104,10 +102,10 @@ module Validation end end self.delete - if (subjectid) + if (OpenTox::RestClientWrapper.subjectid) Thread.new do begin - res = OpenTox::Authorization.delete_policies_from_uri(validation_uri, subjectid) + res = OpenTox::Authorization.delete_policies_from_uri(validation_uri, OpenTox::RestClientWrapper.subjectid) $logger.debug "Deleted validation policy: #{res}" rescue $logger.warn "Policy delete error for validation: #{validation_uri}" @@ -168,7 +166,7 @@ module Validation #model = OpenTox::Model::PredictionModel.find(self.model_uri) #resource_not_found_error "model not found: "+self.model_uri.to_s unless model - model = OpenTox::Model::Generic.new(self.model_uri, self.subjectid) + model = OpenTox::Model::Generic.new(self.model_uri) unless self.algorithm_uri self.algorithm_uri = model.metadata[RDF::OT.algorithm] @@ -185,7 +183,7 @@ module Validation #puts self.test_dataset_uri #puts "MODEL" #puts model.uri - prediction_dataset_uri = model.run({:dataset_uri => self.test_dataset_uri, :subjectid => self.subjectid}) + prediction_dataset_uri = model.run({:dataset_uri => self.test_dataset_uri}) #"text/uri-list",OpenTox::SubTask.create(task, 0, 50)) end # self.attributes = { :prediction_dataset_uri => prediction_dataset_uri, @@ -201,25 +199,25 @@ module Validation end def compute_prediction_data_with_cv(cv_vals, waiting_task=nil) - models = cv_vals.collect{|v| m = OpenTox::Model::Generic.new(v.model_uri, subjectid); m.get; m} - feature_type = models.first.feature_type # CH: subjectid is a object variable, no need to pass it as a parameter + models = cv_vals.collect{|v| m = OpenTox::Model::Generic.new(v.model_uri); m.get; m} + feature_type = models.first.feature_type test_dataset_uris = cv_vals.collect{|v| v.test_dataset_uri} prediction_feature = cv_vals.first.prediction_feature prediction_dataset_uris = cv_vals.collect{|v| v.prediction_dataset_uri} predicted_variables = models.collect{|m| m.predicted_variable} predicted_confidences = models.collect{|m| m.predicted_confidence} p_data = Lib::PredictionData.create( feature_type, test_dataset_uris, prediction_feature, - prediction_dataset_uris, predicted_variables, predicted_confidences, subjectid, waiting_task ) + prediction_dataset_uris, predicted_variables, predicted_confidences, waiting_task ) self.prediction_data = p_data.data p_data.data end def compute_prediction_data_with_model(model=nil, task=nil) #model = OpenTox::Model::Generic.find(self.model_uri, self.subjectid) if model==nil and self.model_uri - model = OpenTox::Model.find(self.model_uri, self.subjectid) if model==nil and self.model_uri + model = OpenTox::Model.find(self.model_uri) if model==nil and self.model_uri resource_not_found_error "model not found: "+self.model_uri.to_s unless model - feature_type = model.feature_type # CH: subjectid is a object variable, no need to pass it as a parameter + feature_type = model.feature_type dependentVariables = model.metadata[RDF::OT.dependentVariables] prediction_feature = self.prediction_feature ? nil : dependentVariables algorithm_uri = self.algorithm_uri ? nil : model.metadata[RDF::OT.algorithm] @@ -241,7 +239,7 @@ module Validation $logger.debug "computing prediction stats" p_data = Lib::PredictionData.create( feature_type, self.test_dataset_uri, self.prediction_feature, - self.prediction_dataset_uri, predicted_variable, predicted_confidence, self.subjectid, + self.prediction_dataset_uri, predicted_variable, predicted_confidence, OpenTox::SubTask.create(task, 0, 80) ) self.prediction_data = p_data.data task.progress(100) if task @@ -325,13 +323,13 @@ module Validation def clean_loo_files( delete_feature_datasets ) Validation.find( :crossvalidation_id => self.id, :validation_type => "crossvalidation" ).each do |v| $logger.debug "loo-cleanup> delete training dataset "+v.training_dataset_uri - OpenTox::RestClientWrapper.delete v.training_dataset_uri,subjectid + OpenTox::RestClientWrapper.delete v.training_dataset_uri if (delete_feature_datasets) begin model = OpenTox::Model::Generic.find(v.model_uri) if model.metadata[RDF::OT.featureDataset] $logger.debug "loo-cleanup> delete feature dataset "+model.metadata[RDF::OT.featureDataset] - OpenTox::RestClientWrapper.delete model.metadata[RDF::OT.featureDataset],subjectid + OpenTox::RestClientWrapper.delete model.metadata[RDF::OT.featureDataset] end rescue end @@ -344,17 +342,16 @@ module Validation validations = Validation.find(:crossvalidation_id => self.id) Thread.new do # do deleting in background to not cause a timeout validations.each do |v| - v.subjectid = self.subjectid $logger.debug "deleting cv-validation "+v.validation_uri.to_s v.delete_validation sleep 1 if $aa[:uri] # wait a second to not stress the a&a service too much end end self.delete - if (subjectid) + if (OpenTox::RestClientWrapper.subjectid) Thread.new do begin - res = OpenTox::Authorization.delete_policies_from_uri(crossvalidation_uri, subjectid) + res = OpenTox::Authorization.delete_policies_from_uri(crossvalidation_uri, OpenTox::RestClientWrapper.subjectid) $logger.debug "Deleted crossvalidation policy: #{res}" rescue $logger.warn "Policy delete error for crossvalidation: #{crossvalidation_uri}" @@ -367,7 +364,7 @@ module Validation # creates the cv folds def create_cv_datasets( task=nil ) if self.loo=="true" - orig_dataset = Lib::DatasetCache.find(self.dataset_uri,self.subjectid) + orig_dataset = Lib::DatasetCache.find(self.dataset_uri) self.num_folds = orig_dataset.compounds.size self.random_seed = 0 self.stratified = "false" @@ -392,7 +389,6 @@ module Validation task_step = 100 / self.num_folds.to_f; @tmp_validations.each do | val | validation = Validation.create val - validation.subjectid = self.subjectid validation.validate_algorithm( OpenTox::SubTask.create(task, i * task_step, ( i + 1 ) * task_step) ) internal_server_error "validation '"+validation.validation_uri+"' for crossvaldation could not be finished" unless validation.finished @@ -422,13 +418,13 @@ module Validation (cv.prediction_feature && cv.prediction_feature != self.prediction_feature)) } cvs.each do |cv| - next if $aa[:uri] and !OpenTox::Authorization.authorized?(cv.crossvalidation_uri,"GET",self.subjectid) + next if $aa[:uri] and !OpenTox::Authorization.authorized?(cv.crossvalidation_uri,"GET",OpenTox::RestClientWrapper.subjectid) tmp_val = [] Validation.find( :crossvalidation_id => cv.id, :validation_type => "crossvalidation" ).each do |v| break unless v.prediction_feature == prediction_feature and - URI.accessible?(v.training_dataset_uri,self.subjectid) and - URI.accessible?(v.test_dataset_uri,self.subjectid) + URI.accessible?(v.training_dataset_uri) and + URI.accessible?(v.test_dataset_uri) # CH: Dataset.exist? has been removed, URI.accessible? is cheaper because it needs only HEAD requests #OpenTox::Dataset.exist?(v.training_dataset_uri,self.subjectid) and #OpenTox::Dataset.exist?(v.test_dataset_uri,self.subjectid) @@ -456,7 +452,7 @@ module Validation # stores uris in validation objects def create_new_cv_datasets( task = nil ) $logger.debug "creating datasets for crossvalidation" - orig_dataset = Lib::DatasetCache.find(self.dataset_uri,self.subjectid) + orig_dataset = Lib::DatasetCache.find(self.dataset_uri) resource_not_found_error "Dataset not found: "+self.dataset_uri.to_s unless orig_dataset train_dataset_uris = [] @@ -492,11 +488,11 @@ module Validation datasetname = 'dataset fold '+(n+1).to_s+' of '+self.num_folds.to_s meta[RDF::DC.title] = "training "+datasetname $logger.debug "training set: "+datasetname+"_train, compounds: "+train_compound_indices.size.to_s - train_dataset_uri = orig_dataset.split( train_compound_indices, orig_dataset.features, meta, self.subjectid ).uri + train_dataset_uri = orig_dataset.split( train_compound_indices, orig_dataset.features, meta ).uri train_dataset_uris << train_dataset_uri meta[RDF::DC.title] = "test "+datasetname $logger.debug "test set: "+datasetname+"_test, compounds: "+test_compound_indices.size.to_s - test_dataset_uri = orig_dataset.split( test_compound_indices, orig_dataset.features, meta, self.subjectid ).uri + test_dataset_uri = orig_dataset.split( test_compound_indices, orig_dataset.features, meta ).uri test_dataset_uris << test_dataset_uri end when /true|super/ @@ -507,7 +503,7 @@ module Validation end r_util = OpenTox::RUtil.new train_datasets, test_datasets = r_util.stratified_k_fold_split(orig_dataset,meta, - "NA",self.num_folds.to_i,@subjectid,self.random_seed, features) + "NA",self.num_folds.to_i,self.random_seed, features) r_util.quit_r train_dataset_uris = train_datasets.collect{|d| d.uri} test_dataset_uris = test_datasets.collect{|d| d.uri} @@ -536,11 +532,11 @@ module Validation # splits a dataset into test and training dataset via bootstrapping # (training dataset-size is n, sampling from orig dataset with replacement) # returns map with training_dataset_uri and test_dataset_uri - def self.bootstrapping( orig_dataset_uri, prediction_feature, subjectid, random_seed=nil, task=nil ) + def self.bootstrapping( orig_dataset_uri, prediction_feature, random_seed=nil, task=nil ) random_seed=1 unless random_seed - orig_dataset = Lib::DatasetCache.find orig_dataset_uri,subjectid + orig_dataset = Lib::DatasetCache.find orig_dataset_uri orig_dataset.load_all resource_not_found_error "Dataset not found: "+orig_dataset_uri.to_s unless orig_dataset if prediction_feature @@ -579,14 +575,14 @@ module Validation result = {} result[:training_dataset_uri] = orig_dataset.split( training_compound_indices, orig_dataset.features, { RDF::DC.title => "Bootstrapping training dataset of "+orig_dataset.title.to_s, - RDF::DC.creator => $url_provider.to('/validation/bootstrapping',:full) }, - subjectid ).uri + RDF::DC.creator => $url_provider.to('/validation/bootstrapping',:full) } + ).uri task.progress(66) if task result[:test_dataset_uri] = orig_dataset.split( test_compound_indices, orig_dataset.features, { RDF::DC.title => "Bootstrapping test dataset of "+orig_dataset.title.to_s, - RDF::DC.creator => $url_provider.to('/validation/bootstrapping',:full)} , - subjectid ).uri + RDF::DC.creator => $url_provider.to('/validation/bootstrapping',:full)} + ).uri task.progress(100) if task $logger.debug "bootstrapping done, training dataset: '"+result[:training_dataset_uri].to_s+"', test dataset: '"+result[:test_dataset_uri].to_s+"'" @@ -595,7 +591,7 @@ module Validation # splits a dataset into test and training dataset # returns map with training_dataset_uri and test_dataset_uri - def self.train_test_dataset_split( creator_uri, orig_dataset_uri, prediction_feature, subjectid, stratified="false", split_ratio=nil, random_seed=nil, task=nil ) + def self.train_test_dataset_split( creator_uri, orig_dataset_uri, prediction_feature, stratified="false", split_ratio=nil, random_seed=nil, task=nil ) $logger.debug "train test split" @@ -606,7 +602,7 @@ module Validation resource_not_found_error "Split ratio invalid: "+split_ratio.to_s unless split_ratio and split_ratio=split_ratio.to_f resource_not_found_error "Split ratio not >0 and <1 :"+split_ratio.to_s unless split_ratio>0 && split_ratio<1 - orig_dataset = Lib::DatasetCache.find orig_dataset_uri, subjectid + orig_dataset = Lib::DatasetCache.find orig_dataset_uri resource_not_found_error "Dataset not found: "+orig_dataset_uri.to_s unless orig_dataset if prediction_feature @@ -631,7 +627,7 @@ module Validation features = nil end r_util = OpenTox::RUtil.new - train, test = r_util.stratified_split( orig_dataset, meta, "NA", split_ratio, @subjectid, random_seed, features ) + train, test = r_util.stratified_split( orig_dataset, meta, "NA", split_ratio, random_seed, features ) r_util.quit_r result = {:training_dataset_uri => train.uri, :test_dataset_uri => test.uri} when "false" diff --git a/validation/validation_test.rb b/validation/validation_test.rb index 6616575..f7eb632 100755 --- a/validation/validation_test.rb +++ b/validation/validation_test.rb @@ -33,18 +33,21 @@ $logger = OTLogger.new(STDOUT) $logger.datetime_format = "%Y-%m-%d %H:%M:%S " $logger.formatter = Logger::Formatter.new +# Authorisation happens in opentox-client.rb +=begin if $aa[:uri] #TEST_USER = "mgtest" #TEST_PW = "mgpasswd" TEST_USER = "guest" TEST_PW = "guest" - SUBJECTID = OpenTox::Authorization.authenticate(TEST_USER,TEST_PW) + #SUBJECTID = OpenTox::Authorization.authenticate(TEST_USER,TEST_PW) raise "could not log in" unless SUBJECTID puts "logged in: "+SUBJECTID.to_s else puts "AA disabled" SUBJECTID = nil end +=end #Rack::Test::DEFAULT_HOST = "local-ot" #"/validation" @@ -374,8 +377,8 @@ class ValidationTest < Test::Unit::TestCase def run_test(select=nil, overwrite={}, delete=false ) - if $aa[:uri] && SUBJECTID && delete - policies_before = OpenTox::Authorization.list_policy_uris(SUBJECTID) + if $aa[:uri] && OpenTox::RestClientWrapper.subjectid && delete + policies_before = OpenTox::Authorization.list_policy_uris(OpenTox::RestClientWrapper.subjectid) end puts ValidationExamples.list unless select @@ -383,7 +386,6 @@ class ValidationTest < Test::Unit::TestCase validationExamples.each do |vv| vv.each do |v| ex = v.new - ex.subjectid = SUBJECTID overwrite.each do |k,v| ex.send(k.to_s+"=",v) @@ -401,8 +403,8 @@ class ValidationTest < Test::Unit::TestCase #break if !delete and ex.validation_uri - if SUBJECTID - puts ex.validation_uri+"?subjectid="+CGI.escape(SUBJECTID) + if OpenTox::RestClientWrapper.subjectid + puts ex.validation_uri+"?subjectid="+CGI.escape(OpenTox::RestClientWrapper.subjectid) else puts ex.validation_uri end @@ -412,8 +414,8 @@ class ValidationTest < Test::Unit::TestCase ex.report end if !delete and ex.report_uri - if SUBJECTID - puts ex.report_uri+"?subjectid="+CGI.escape(SUBJECTID) + if OpenTox::RestClientWrapper.subjectid + puts ex.report_uri+"?subjectid="+CGI.escape(OpenTox::RestClientWrapper.subjectid) else puts ex.report_uri end @@ -424,8 +426,8 @@ class ValidationTest < Test::Unit::TestCase end end - if $aa[:uri] && SUBJECTID && delete - policies_after= OpenTox::Authorization.list_policy_uris(SUBJECTID) + if $aa[:uri] && OpenTox::RestClientWrapper.subjectid && delete + policies_after= OpenTox::Authorization.list_policy_uris(OpenTox::RestClientWrapper.subjectid) diff = policies_after.size - policies_before.size if (diff != 0) policies_before.each do |k,v| |