Spaces:
Runtime error
Runtime error
import gradio as gr | |
import gradio as gr | |
import os | |
def get_pdb(pdb_code="", filepath=""): | |
if pdb_code is None or pdb_code == "": | |
try: | |
return filepath.name | |
except AttributeError as e: | |
return None | |
else: | |
os.system(f"wget -qnc https://files.rcsb.org/view/{pdb_code}.pdb") | |
return f"{pdb_code}.pdb" | |
def read_mol(molpath): | |
with open(molpath, "r") as fp: | |
lines = fp.readlines() | |
mol = "" | |
for l in lines: | |
mol += l | |
return mol | |
def molecule(input_pdb, public_link): | |
print(input_pdb) | |
print(public_link+'/file='+os.path.basename(input_pdb)) | |
x ="""<!DOCTYPE html> | |
<html lang="en"> | |
<head> | |
<meta charset="utf-8" /> | |
<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"> | |
<title>PDBe Molstar - Helper functions</title> | |
<!-- Molstar CSS & JS --> | |
<link rel="stylesheet" type="text/css" href="https://www.ebi.ac.uk/pdbe/pdb-component-library/css/pdbe-molstar-light-3.1.0.css"> | |
<script type="text/javascript" src="https://www.ebi.ac.uk/pdbe/pdb-component-library/js/pdbe-molstar-plugin-3.1.0.js"></script> | |
<style> | |
* { | |
margin: 0; | |
padding: 0; | |
box-sizing: border-box; | |
} | |
.msp-plugin ::-webkit-scrollbar-thumb { | |
background-color: #474748 !important; | |
} | |
.viewerSection { | |
margin: 120px 0 0 50px; | |
} | |
#myViewer{ | |
float:left; | |
width:100%; | |
height: 600px; | |
position:relative; | |
} | |
</style> | |
</head> | |
<body> | |
<div class="viewerSection"> | |
<!-- Molstar container --> | |
<div id="myViewer"></div> | |
</div> | |
<script> | |
//Create plugin instance | |
var viewerInstance = new PDBeMolstarPlugin(); | |
//Set options (Checkout available options list in the documentation) | |
var options = { | |
customData: { | |
url: "{public_link+'/file='+os.path.basename(input_pdb)}", | |
format: "pdb" | |
}, | |
alphafoldView: true, | |
bgColor: {r:255, g:255, b:255}, | |
hideCanvasControls: ["selection", "animation", "controlToggle", "controlInfo"] | |
} | |
//Get element from HTML/Template to place the viewer | |
var viewerContainer = document.getElementById("myViewer"); | |
//Call render method to display the 3D view | |
viewerInstance.render(viewerContainer, options); | |
</script> | |
</body> | |
</html>""" | |
return f"""<iframe style="width: 100%; height: 600px" 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='{x}'></iframe>""" | |
def update(inp, file, public_link): | |
pdb_path = get_pdb(inp, file) | |
print("public link", public_link) | |
return molecule(pdb_path, public_link) | |
demo = gr.Blocks() | |
with demo: | |
gr.Markdown("# PDB viewer using Mol*") | |
gr.Markdown("""If using please cite | |
> David Sehnal, Sebastian Bittrich, Mandar Deshpande, Radka Svobodová, Karel Berka, Václav Bazgier, Sameer Velankar, Stephen K Burley, Jaroslav Koča, Alexander S Rose: Mol* Viewer: modern web app for 3D visualization and analysis of large biomolecular structures, Nucleic Acids Research, 2021; 10.1093/nar/gkab31.""") | |
public_link = gr.Variable() | |
with gr.Row(): | |
with gr.Box(): | |
inp = gr.Textbox( | |
placeholder="PDB Code or upload file below", label="Input structure" | |
) | |
file = gr.File(file_count="single") | |
gr.Examples(["2CBA", "6VXX"], inp) | |
btn = gr.Button("View structure") | |
mol = gr.HTML() | |
btn.click(fn=update, inputs=[inp, file, public_link], outputs=mol) | |
_, _, pl = demo.launch() | |
public_link = pl |