diff options
author | Andreas Maunz <andreas@maunz.de> | 2011-05-25 08:51:56 +0200 |
---|---|---|
committer | Andreas Maunz <andreas@maunz.de> | 2011-05-25 08:51:56 +0200 |
commit | b7a03a18ce90d664d89d6a414512aa03a6dddcc4 (patch) | |
tree | 507638e23150b50e514246e12808b936c99a6bd9 /lib/model.rb | |
parent | 2a52792b6143fba8e888fe454303a45f625cb0cf (diff) |
Add_neighbor function
Diffstat (limited to 'lib/model.rb')
-rw-r--r-- | lib/model.rb | 59 |
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 |