Spaces:
Running
on
A10G
Running
on
A10G
import gradio as gr | |
import os | |
import sys | |
HTML_TEMPLATE = """<!DOCTYPE html> | |
<html> | |
<head> | |
<meta http-equiv="content-type" content="text/html; charset=UTF-8" /> | |
<style> | |
.mol-container {{ | |
width: 600px; | |
height: 600px; | |
position: relative; | |
}} | |
.mol-container select{{ | |
background-image:None; | |
}} | |
</style> | |
<script src="https://3Dmol.csb.pitt.edu/build/3Dmol-min.js"></script> | |
</head> | |
<body> | |
<div id="container" class="mol-container"></div> | |
<script> | |
$(document).ready(function() {{ | |
let element = $("#container"); | |
let config = {{ backgroundColor: "white" }}; | |
let viewer = $3Dmol.createViewer( element, config ); | |
viewer.addModel(`{molecule}`, "{fmt}") | |
viewer.getModel().setStyle({{ stick: {{ colorscheme:"greenCarbon" }} }}) | |
viewer.zoomTo(); | |
viewer.render(); | |
}}); | |
</script> | |
</body> | |
</html> | |
""" | |
IFRAME_TEMPLATE = """<iframe style="width: 100%; height: 700px" name="result" allow="midi; geolocation; microphone; camera; | |
display-capture; encrypted-media;" sandbox="allow-modals allow-forms allow-scripts allow-same-origin allow-popups | |
allow-top-navigation-by-user-activation allow-downloads" allowfullscreen="" | |
allowpaymentrequest="" frameborder="0" srcdoc='{html}'></iframe>""" | |
def read_molecule(path): | |
with open(path, "r") as f: | |
return "".join(f.readlines()) | |
def generate(input_file): | |
try: | |
path = input_file.name | |
molecule = read_molecule(path) | |
fmt = path.split('.')[-1] | |
except: | |
return 'Error: could not open the provided file' | |
html = HTML_TEMPLATE.format(molecule=molecule, fmt=fmt) | |
return IFRAME_TEMPLATE.format(html=html) | |
demo = gr.Blocks() | |
with demo: | |
gr.Markdown('# DiffLinker: Equivariant 3D-Conditional Diffusion Model for Molecular Linker Design') | |
with gr.Box(): | |
with gr.Row(): | |
with gr.Column(): | |
gr.Markdown('## Input Fragments') | |
gr.Markdown('Upload the file with 3D-coordinates of the input fragments in .pdb, .mol2 or .sdf format') | |
input_file = gr.File(file_count='single', label='Input fragments') | |
button = gr.Button('Generate Linker!') | |
gr.Markdown('') | |
visualization = gr.HTML() | |
button.click( | |
fn=generate, | |
inputs=[input_file], | |
outputs=[visualization], | |
) | |
demo.launch() | |