Spaces:
Sleeping
Sleeping
File size: 1,615 Bytes
9e93243 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | """
RDKit util functions.
"""
import rdkit.Chem as rkc
from rdkit.Chem import AllChem
from rdkit import DataStructs
def disable_rdkit_logging():
"""
Disables RDKit whiny logging.
"""
import rdkit.RDLogger as rkl
logger = rkl.logger()
logger.setLevel(rkl.ERROR)
import rdkit.rdBase as rkrb
rkrb.DisableLog('rdApp.error')
disable_rdkit_logging()
def to_fp_ECFP(smi):
if smi:
mol = rkc.MolFromSmiles(smi)
if mol is None:
return None
return AllChem.GetMorganFingerprint(mol, 2)
def tanimoto_similarity_pool(args):
return tanimoto_similarity(*args)
def tanimoto_similarity(smi1, smi2):
fp1, fp2 = None, None
if smi1 and type(smi1)==str and len(smi1)>0:
fp1 = to_fp_ECFP(smi1)
if smi2 and type(smi2)==str and len(smi2)>0:
fp2 = to_fp_ECFP(smi2)
if fp1 is not None and fp2 is not None:
return DataStructs.TanimotoSimilarity(fp1, fp2)
else:
return None
def is_valid(smi):
return 1 if to_mol(smi) else 0
def to_mol(smi):
"""
Creates a Mol object from a SMILES string.
:param smi: SMILES string.
:return: A Mol object or None if it's not valid.
"""
if isinstance(smi, str) and smi and len(smi)>0 and smi != 'nan':
return rkc.MolFromSmiles(smi)
def get_canonical_smile(smile):
if smile != 'None':
mol = rkc.MolFromSmiles(smile)
if mol is not None:
smi = rkc.MolToSmiles(mol, canonical=True, doRandom=False, isomericSmiles=False)
return smi
else:
return None
else:
return None |