Spaces:
Running
on
Zero
Running
on
Zero
import rdkit | |
from rdkit import Chem, DataStructs | |
from rdkit.Chem import AllChem | |
from typing import * | |
import numpy as np | |
from rdkit import RDLogger | |
RDLogger.DisableLog("rdApp.*") | |
def try_or_none(func, *args, **kwargs): | |
try: | |
return func(*args, **kwargs) | |
except: | |
return None | |
def get_smiles(mols: List[rdkit.Chem.rdchem.Mol]) -> List[str]: | |
""" | |
Gets list of smiles from list of rdkit molecules | |
""" | |
return [Chem.MolToSmiles(x) for x in mols] | |
def get_mols(smiles: List[str]) -> List[rdkit.Chem.rdchem.Mol]: | |
""" | |
Gets list of rdkit molecules from list of smiles | |
""" | |
return [Chem.MolFromSmiles(x) for x in smiles] | |
def get_fp( | |
mols: List[rdkit.Chem.rdchem.Mol], | |
radius: int = 2, | |
nBits: int = 1024, | |
useFeatures: bool = False, | |
): | |
""" | |
Computes ECFP/FCFP from list of RDKIT mols | |
""" | |
output = np.empty(len(mols), dtype=object) | |
for i, mol in enumerate(mols): | |
output[i] = AllChem.GetMorganFingerprintAsBitVect( | |
mol, | |
radius=radius, | |
nBits=nBits, | |
useFeatures=useFeatures, | |
) | |
return output | |
def store_fp(fps: List, nBits: int = 1024): | |
""" | |
Stores list of RDKIT sparse vectors in numpy array using C data structures | |
""" | |
array = np.empty((len(fps), nBits), dtype=np.float32) | |
for i in range(len(array)): | |
DataStructs.ConvertToNumpyArray(fps[i], array[i]) | |
return array | |