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