libokj's picture
Upload 110 files
c0ec7e6
raw
history blame
1.55 kB
"""
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)