diff options
Diffstat (limited to 'lib/compound.rb')
-rw-r--r-- | lib/compound.rb | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/lib/compound.rb b/lib/compound.rb index 2554d54..89e9db2 100644 --- a/lib/compound.rb +++ b/lib/compound.rb @@ -254,13 +254,15 @@ module OpenTox self["chemblid"] end -# def fingerprint_count_neighbors params -# # TODO fix -# neighbors = [] -# query_fingerprint = self.fingerprint params[:type] -# training_dataset = Dataset.find(params[:training_dataset_id]).compounds.each do |compound| -# unless self == compound -# candidate_fingerprint = compound.fingerprint params[:type] +=begin + def fingerprint_neighbors(type:, min_sim: 0.1, dataset_id:, prediction_feature_id:) + neighbors = [] + dataset = Dataset.find(dataset_id) + query_fingerprint = self.fingerprint type + dataset.compounds.each do |compound| + values = dataset.values(compound,prediction_feature_id) + if values + candidate_fingerprint = compound.fingerprint type # features = (query_fingerprint + candidate_fingerprint).uniq # min_sum = 0 # max_sum = 0 @@ -274,7 +276,13 @@ module OpenTox # end # end # neighbors.sort{|a,b| b.last <=> a.last} -# end + sim = Algorithm::Similarity.tanimoto(query_fingerprint , candidate_fingerprint) + neighbors << {"_id" => compound.id, "toxicities" => values, "similarity" => sim} if sim >= min_sim + end + end + neighbors.sort{|a,b| b["similarity"] <=> a["similarity"]} + end +=end def fingerprint_neighbors(type:, min_sim: 0.1, dataset_id:, prediction_feature_id:) neighbors = [] @@ -294,9 +302,8 @@ module OpenTox neighbors << {"_id" => compound.id, "toxicities" => values, "similarity" => sim} if sim >= min_sim end end - neighbors.sort!{|a,b| b["similarity"] <=> a["similarity"]} end - neighbors + neighbors.sort{|a,b| b["similarity"] <=> a["similarity"]} end # def physchem_neighbors params |