diff options
author | Christoph Helma <helma@in-silico.de> | 2010-03-16 11:05:40 +0100 |
---|---|---|
committer | Christoph Helma <helma@in-silico.de> | 2010-03-16 11:05:40 +0100 |
commit | a5144cd21c5c6537d2e95e608b970e750a421986 (patch) | |
tree | a65847ad8116a20fea3039149f72c8dd3690595d | |
parent | ad23a652417a2ff22e03af7c7be21c1055c4e4ef (diff) |
toxcreate adapted for new representation
-rw-r--r-- | application.rb | 2 | ||||
-rw-r--r-- | lazar.rb | 87 |
2 files changed, 53 insertions, 36 deletions
diff --git a/application.rb b/application.rb index 9c50383..b43b11f 100644 --- a/application.rb +++ b/application.rb @@ -7,7 +7,7 @@ class Model include DataMapper::Resource property :id, Serial property :uri, String, :length => 255 - property :owl, Text, :length => 2**32-1 + #property :owl, Text, :length => 2**32-1 property :yaml, Text, :length => 2**32-1 property :created_at, DateTime end @@ -1,13 +1,11 @@ class Lazar < Model - attr_accessor :dataset, :predictions - - def classify(compound_uri) - - #unless @dataset - #@dataset = OpenTox::Dataset.new - @predictions = {} - #end + attr_accessor :prediction_dataset + + def classify(compound_uri,prediction) + + prediction.title += " lazar classification" + lazar = YAML.load self.yaml compound = OpenTox::Compound.new(:uri => compound_uri) compound_matches = compound.match lazar.features @@ -19,8 +17,7 @@ class Lazar < Model lazar.fingerprints.each do |uri,matches| sim = OpenTox::Algorithm::Similarity.weighted_tanimoto(compound_matches,matches,lazar.p_values) - LOGGER.debug sim - if sim > 0#.3 + if sim > 0.3 similarities[uri] = sim lazar.activities[uri].each do |act| case act.to_s @@ -39,30 +36,36 @@ class Lazar < Model elsif conf < 0.0 classification = false end - LOGGER.debug conf - - #compound = @dataset.compounds[compound_uri] - #feature = @dataset.features[lazar.endpoint] if (classification != nil) - #tuple = @dataset.create_tuple(feature,{ 'lazar#classification' => classification, 'lazar#confidence' => conf}) - #@dataset.add_tuple compound,tuple - @predictions[compound_uri] = { lazar.dependent_variable => { :lazar_prediction => { + feature_uri = lazar.dependent_variable + "_lazar_prediction" + prediction.compounds << compound_uri + prediction.features << feature_uri + prediction.data[compound_uri] = [] unless prediction.data[compound_uri] + tuple = { :classification => classification, :confidence => conf, :similarities => similarities, :features => compound_matches - } } } + } + prediction.data[compound_uri] << {feature_uri => tuple} end end - def database_activity?(compound_uri) + def database_activity?(compound_uri,prediction) # find database activities lazar = YAML.load self.yaml db_activities = lazar.activities[compound_uri] if db_activities - @predictions = {:compound_uri => { lazar.dependent_variable => {:measured_activities => db_activities}}} + prediction.source = lazar.activity_dataset_uri + feature_uri = lazar.dependent_variable + prediction.compounds << compound_uri + prediction.features << feature_uri + prediction.data[compound_uri] = [] unless prediction.data[compound_uri] + db_activities.each do |act| + prediction.data[compound_uri] << {feature_uri => act} + end true else false @@ -87,24 +90,38 @@ post '/:id/?' do # create prediction halt 404, "Model #{params[:id]} does not exist." unless lazar halt 404, "No compound_uri or dataset_uri parameter." unless compound_uri = params[:compound_uri] or dataset_uri = params[:dataset_uri] + prediction = OpenTox::Dataset.new + prediction.source = lazar.uri + prediction.title = URI.decode YAML.load(lazar.yaml).dependent_variable.split(/#/).last + if compound_uri - lazar.classify(compound_uri) unless lazar.database_activity?(compound_uri) - elsif dataset_uri - input_dataset = OpenTox::Dataset.find(dataset_uri) - input_dataset.compounds.each do |compound_uri| - lazar.classify(compound_uri) unless lazar.database_activity?(compound_uri) + lazar.classify(compound_uri,prediction) unless lazar.database_activity?(compound_uri,prediction) + LOGGER.debug prediction.to_yaml + case request.env['HTTP_ACCEPT'] + when /yaml/ + prediction.to_yaml + when 'application/rdf+xml' + prediction.to_owl + else + halt 404, "Content type #{request.env['HTTP_ACCEPT']} not available." end - end - - case request.env['HTTP_ACCEPT'] - when /yaml/ - lazar.predictions.to_yaml - else - if params[:compound_uri] - lazar.dataset.rdf - elsif params[:dataset_uri] - lazar.dataset.save + elsif dataset_uri + task = OpenTox::Task.create + pid = Spork.spork(:logger => LOGGER) do + task.started + task = OpenTox::Task.create + input_dataset = OpenTox::Dataset.find(dataset_uri) + input_dataset.compounds.each do |compound_uri| + lazar.classify(compound_uri) unless lazar.database_activity?(compound_uri) + end + uri = lazar.prediction_dataset.save + task.completed(uri) end + task.pid = pid + LOGGER.debug "Task PID: " + pid.to_s + #status 303 + response['Content-Type'] = 'text/uri-list' + task.uri + "\n" end end |