File size: 3,148 Bytes
580db5b b0cb70d 9f2073b 289b045 6839858 b0cb70d 9f2073b b0cb70d 9f2073b 1742c86 9f2073b b0cb70d 9f2073b 1f3c26c 580db5b 9f2073b c9bfe79 7b4abd8 9f2073b 4199422 9f2073b 289b045 9f2073b a10eab8 9f2073b 64f9281 9f2073b 6839858 9f2073b 6839858 a10eab8 6839858 289b045 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
import gradio as gr
from igfold import IgFoldRunner
import os
import random
from gt4sd.properties.proteins import PROTEIN_PROPERTY_PREDICTOR_FACTORY
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):
mol = read_mol(input_pdb)
x = (
"""<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<style>
body{
font-family:sans-serif
}
.mol-container {
width: 100%;
height: 600px;
position: relative;
}
.mol-container select{
background-image:None;
}
</style>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.3/jquery.min.js" integrity="sha512-STof4xm1wgkfm7heWqFJVn58Hm3EtS31XFaagaa8VMReCXAkQnJZ+jEy8PCC/iT18dFy95WcExNHFTqLyp72eQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script src="https://3Dmol.csb.pitt.edu/build/3Dmol-min.js"></script>
</head>
<body>
<div id="container" class="mol-container"></div>
<script>
let pdb = `"""
+ mol
+ """`
$(document).ready(function () {
let element = $("#container");
let config = { backgroundColor: "white" };
let viewer = $3Dmol.createViewer(element, config);
viewer.addModel(pdb, "pdb");
viewer.getModel(0).setStyle({}, {cartoon:{color:"spectrum"}});
viewer.zoomTo();
viewer.render();
viewer.zoom(0.8, 2000);
})
</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 validate(seq):
alphabet = set('ACDEFGHIKLMNPQRSTVWY')
leftover = set(seq.upper()) - alphabet
return not leftover
def pred_seq(h_seq, l_seq):
h_seq, l_seq = h_seq.upper(), l_seq.upper()
h_is_valid, l_is_valid = validate(h_seq), validate(l_seq)
if h_is_valid:
sequences = {
"H": seq
}
f_name = ''.join([random.choice("ACDEFGHIKLMNPQRSTVWY") for _ in range(15)])
pred_pdb = f"{f_name}.pdb"
igfold = IgFoldRunner()
igfold.fold(
pred_pdb,
sequences=sequences,
do_refine=False,
do_renum=False,
)
html = molecule(pred_pdb)
else:
html = "<p>ERROR! Not valid sequence</p>"
return (html)
inputs = [gr.Textbox(lines=5, label="Heavy chain"),
gr.Textbox(lines=5, label="Light chain")
]
iface = gr.Interface(fn=pred_seq,
inputs=inputs,
outputs=gr.HTML())
iface.launch(share = True) |