Spaces:
Running
Running
from rdkit import DataStructs, Chem | |
from rdkit.Chem import AllChem | |
from rdkit.Chem import Draw | |
from PIL import Image | |
import io | |
from .main_model import ChemicalConverter | |
def validate_smiles2iupac(input_smiles, predicted_iupac): | |
converter = ChemicalConverter(mode="IUPAC2SMILES") | |
predicted_smiles = converter.convert(predicted_iupac) | |
ms = [Chem.MolFromSmiles(input_smiles), Chem.MolFromSmiles(predicted_smiles[6:])] | |
if None in ms: | |
return None | |
fpgen = AllChem.GetRDKitFPGenerator() | |
fps = [fpgen.GetFingerprint(x) for x in ms] | |
return DataStructs.TanimotoSimilarity(fps[0], fps[1]) | |
def plot_mol(smiles): | |
# Convert the SMILES string to an RDKit molecule object | |
mol = Chem.MolFromSmiles(smiles) | |
# Use RDKit to draw the molecule to an image, with original intended size | |
img = Draw.MolToImage(mol, size=(185, 185)) | |
# Create a new, blank image with the desired final size (800x190 pixels) with a white background | |
final_img = Image.new('RGB', (890, 185), 'white') | |
# Calculate the position to paste the original image onto the blank image to keep it centered | |
left = (890 - 185) // 2 | |
top = (185 - 185) // 2 # This will be zero in this case but included for clarity | |
# Paste the original image onto the blank image | |
final_img.paste(img, (left, top)) | |
return final_img |