summaryrefslogtreecommitdiff
path: root/lib/model.rb
diff options
context:
space:
mode:
authorAndreas Maunz <andreas@maunz.de>2011-05-25 08:51:56 +0200
committerAndreas Maunz <andreas@maunz.de>2011-05-25 08:51:56 +0200
commitb7a03a18ce90d664d89d6a414512aa03a6dddcc4 (patch)
tree507638e23150b50e514246e12808b936c99a6bd9 /lib/model.rb
parent2a52792b6143fba8e888fe454303a45f625cb0cf (diff)
Add_neighbor function
Diffstat (limited to 'lib/model.rb')
-rw-r--r--lib/model.rb59
1 files changed, 22 insertions, 37 deletions
diff --git a/lib/model.rb b/lib/model.rb
index 139aed8..f5e0410 100644
--- a/lib/model.rb
+++ b/lib/model.rb
@@ -338,54 +338,39 @@ module OpenTox
@prediction_dataset
end
- # Find neighbors and store them as object variable
+ # Find neighbors and store them as object variable, access only a subset of compounds for that.
def neighbors_balanced(s, l, start, offset)
@compound_features = eval("#{@feature_calculation_algorithm}(@compound,@features)") if @feature_calculation_algorithm
-
@neighbors = []
- begin
- #@fingerprints.each do |training_compound,training_features| # AM: this is original by CH
[ l[start, offset ] , s ].flatten.each do |training_compound| # AM: access only a balanced subset
training_features = @fingerprints[training_compound]
- sim = eval("#{@similarity_algorithm}(@compound_features,training_features,@p_values)")
- if sim > @min_sim
- @activities[training_compound].each do |act|
- this_neighbor = {
- :compound => training_compound,
- :similarity => sim,
- :features => training_features,
- :activity => act
- }
- @neighbors << this_neighbor
- end
- end
- end
- rescue Exception => e
- LOGGER.error "BLAZAR failed in neighbors: "+e.class.to_s+": "+e.message
+ add_neighbor training_features
end
end
-
- # Find neighbors and store them as object variable
+ # Find neighbors and store them as object variable.
def neighbors
-
- @compound_features = eval("#{@feature_calculation_algorithm}(@compound,@features)") if @feature_calculation_algorithm
-
- @neighbors = []
- @fingerprints.each do |training_compound,training_features|
- sim = eval("#{@similarity_algorithm}(@compound_features,training_features,@p_values)")
- if sim > @min_sim
- @activities[training_compound].each do |act|
- @neighbors << {
- :compound => training_compound,
- :similarity => sim,
- :features => training_features,
- :activity => act
- }
- end
+ @compound_features = eval("#{@feature_calculation_algorithm}(@compound,@features)") if @feature_calculation_algorithm
+ @neighbors = []
+ @fingerprints.each do |training_compound,training_features| # AM: access all compounds
+ add_neighbor training_features
+ end
+ end
+
+ # Adds a neighbor to @neighbors if it passes the similarity threshold.
+ def add_neighbor(training_features)
+ sim = eval("#{@similarity_algorithm}(@compound_features,training_features,@p_values)")
+ if sim > @min_sim
+ @activities[training_compound].each do |act|
+ @neighbors << {
+ :compound => training_compound,
+ :similarity => sim,
+ :features => training_features,
+ :activity => act
+ }
end
- end
+ end
end
# Find database activities and store them in @prediction_dataset