From 8c21d2b381a85423f611595d4f7d115ddb5eb2a9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Herv=C3=A9=20=20MENAGER?= <herve.menager@pasteur.fr>
Date: Fri, 24 Aug 2018 15:11:09 +0200
Subject: [PATCH] modify FingerPrinter to use dicts instead of lists

Former-commit-id: e39dbb51e214e2b78e5cdcb3325aeb9ff2b106e9
---
 ippisite/ippidb/utils.py | 29 +++++++++++++----------------
 1 file changed, 13 insertions(+), 16 deletions(-)

diff --git a/ippisite/ippidb/utils.py b/ippisite/ippidb/utils.py
index 4dca5e17..fda288b6 100644
--- a/ippisite/ippidb/utils.py
+++ b/ippisite/ippidb/utils.py
@@ -9,8 +9,8 @@ def mol2smi(mol_string):
 
 class FingerPrinter(object):
 
-    def __init__(self, name):
-        self.fingerprinter = ob.OBFingerprint.FindFingerprint("FP4")
+    def __init__(self, name="FP4"):
+        self.fingerprinter = ob.OBFingerprint.FindFingerprint(name)
         self._smiles_parser = ob.OBConversion()
         self._smiles_parser.SetInFormat("smi")
 
@@ -26,19 +26,16 @@ class FingerPrinter(object):
         self.fingerprinter.GetFingerprint(self.parse_smiles(smiles), fp)
         return fp
 
-    def fp_list(self, smiles_list):
-        "generate a list of fingerprints from a list of SMILES strings"
-        return [self.fp(smiles) for smiles in smiles_list]
+    def fp_dict(self, smiles_dict):
+        "generate a dict of {compound id: fingerprint} from a dict of {compound id: fingerprint}"
+        return {compound_id: self.fp(smiles_entry) for compound_id, smiles_entry in smiles_dict.items()}
 
-    def tanimoto_fps(self, smiles_query, fp_list):
-        "perform a tanimoto similarity search using a smiles query string on a fingerprints list"
+    def tanimoto_fps(self, smiles_query, fp_dict):
+        "perform a tanimoto similarity search using a smiles query string on a dict of {compound id: fingerprint}"
         fp_query = self.fp(smiles_query)
-        db_tanimotos = []
-        for fp_entry in fp_list:
-            db_tanimotos.append(self.fingerprinter.Tanimoto(fp_query, fp_entry))
-        return db_tanimotos
-
-    def tanimoto_smiles(self, query_smiles, smiles_list):
-        "perform a tanimoto similarity search using a smiles query on a smiles list"
-        fps = self.fp_list(smiles_list)
-        return self.tanimoto_fps(query_smiles, fps)
\ No newline at end of file
+        return {compound_id: self.fingerprinter.Tanimoto(fp_query, fp_entry) for compound_id, fp_entry in fp_dict.items()}
+
+    def tanimoto_smiles(self, query_smiles, smiles_dict):
+        "perform a tanimoto similarity search using a smiles query on a dict of {compound id: SMILES}"
+        fp_dict = self.fp_dict(smiles_dict)
+        return self.tanimoto_fps(query_smiles, fp_dict)
\ No newline at end of file
-- 
GitLab