Spaces:
Sleeping
Sleeping
import logging | |
import mols2grid | |
import pandas as pd | |
from rdkit import Chem | |
from terminator.selfies import decoder | |
logger = logging.getLogger(__name__) | |
logger.addHandler(logging.NullHandler()) | |
def draw_grid_predict(prediction: str, target: str, domain: str) -> str: | |
""" | |
Uses mols2grid to draw a HTML grid for the prediction | |
Args: | |
prediction: Predicted sequence. | |
target: Target molecule | |
domain: Domain of the prediction (molecules or proteins) | |
Returns: | |
HTML to display | |
""" | |
if domain not in ["Molecules", "Proteins"]: | |
raise ValueError(f"Unsupported domain {domain}") | |
seq = target.split("|")[-1] | |
converter = ( | |
decoder | |
if domain == "Molecules" | |
else lambda x: Chem.MolToSmiles(Chem.MolFromFASTA(x)) | |
) | |
try: | |
seq = converter(seq) | |
except Exception: | |
logger.warning(f"Could not draw sequence {seq}") | |
result = {"SMILES": [seq], "Name": ["Target"]} | |
# Add properties | |
for prop in prediction.split("<")[1:]: | |
result[ | |
prop.split(">")[0] | |
] = f"{prop.split('>')[0].capitalize()} = {prop.split('>')[1]}" | |
result_df = pd.DataFrame(result) | |
obj = mols2grid.display( | |
result_df, | |
tooltip=list(result.keys()), | |
height=900, | |
n_cols=1, | |
name="Results", | |
size=(600, 700), | |
) | |
return obj.data | |