Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
""" | |
Mainly adapted from MolMap: | |
https://github.com/shenwanxiang/bidd-molmap/tree/master/molmap/feature/fingerprint | |
""" | |
import numpy as np | |
from rdkit import Chem, DataStructs | |
from rdkit.Chem import AllChem | |
from rdkit.Chem.Fingerprints import FingerprintMols | |
from rdkit.Chem.rdReducedGraphs import GetErGFingerprint | |
from deepscreen import get_logger | |
log = get_logger(__name__) | |
def smiles_to_erg(smiles): | |
try: | |
mol = Chem.MolFromSmiles(smiles) | |
features = np.array(GetErGFingerprint(mol), dtype=bool) | |
return features | |
except Exception as e: | |
log.warning(f"Failed to convert SMILES ({smiles}) to ErGFP due to {str(e)}") | |
return None | |
def smiles_to_morgan(smiles, radius=2, n_bits=1024): | |
try: | |
mol = Chem.MolFromSmiles(smiles) | |
features_vec = AllChem.GetMorganFingerprintAsBitVect(mol, radius=radius, nBits=n_bits) | |
features = np.zeros((1,)) | |
DataStructs.ConvertToNumpyArray(features_vec, features) | |
except Exception as e: | |
log.warning(f"Failed to convert SMILES ({smiles}) to ErGFP due to {str(e)}") | |
return None | |
def smiles_to_daylight(smiles): | |
try: | |
NumFinger = 2048 | |
mol = Chem.MolFromSmiles(smiles) | |
bv = FingerprintMols.FingerprintMol(mol) | |
temp = tuple(bv.GetOnBits()) | |
features = np.zeros((NumFinger,)) | |
features[np.array(temp)] = 1 | |
except: | |
print(f'RDKit could not find this SMILES: {smiles} convert to all 0 features') | |
features = np.zeros((2048,)) | |
return features.astype(int) | |