Spaces:
Paused
Paused
Commit
·
5256b8e
1
Parent(s):
dd1097a
Added dropdown, colors, default protein, etc. (#1)
Browse files- Added dropdown, colors, etc. (2d3f8b10cdd6ea821a64acb6aef1c1c1965a5902)
Co-authored-by: Abubakar Abid <abidlabs@users.noreply.huggingface.co>
app.py
CHANGED
@@ -3,6 +3,9 @@ import os
|
|
3 |
import requests
|
4 |
|
5 |
|
|
|
|
|
|
|
6 |
def read_mol(molpath):
|
7 |
with open(molpath, "r") as fp:
|
8 |
lines = fp.readlines()
|
@@ -13,7 +16,6 @@ def read_mol(molpath):
|
|
13 |
|
14 |
|
15 |
def molecule(input_pdb):
|
16 |
-
|
17 |
mol = read_mol(input_pdb)
|
18 |
|
19 |
x = (
|
@@ -27,7 +29,7 @@ def molecule(input_pdb):
|
|
27 |
}
|
28 |
.mol-container {
|
29 |
width: 100%;
|
30 |
-
height:
|
31 |
position: relative;
|
32 |
}
|
33 |
.mol-container select{
|
@@ -36,7 +38,7 @@ def molecule(input_pdb):
|
|
36 |
</style>
|
37 |
<script src="https://3Dmol.csb.pitt.edu/build/3Dmol-min.js"></script>
|
38 |
</head>
|
39 |
-
<body>
|
40 |
<div id="container" class="mol-container"></div>
|
41 |
|
42 |
<script>
|
@@ -49,7 +51,7 @@ def molecule(input_pdb):
|
|
49 |
let config = { backgroundColor: "white" };
|
50 |
let viewer = $3Dmol.createViewer(element, config);
|
51 |
viewer.addModel(pdb, "pdb");
|
52 |
-
viewer.getModel(0).setStyle({}, { cartoon: { colorscheme:"
|
53 |
viewer.zoomTo();
|
54 |
viewer.render();
|
55 |
viewer.zoom(0.8, 2000);
|
@@ -58,14 +60,14 @@ def molecule(input_pdb):
|
|
58 |
</body></html>"""
|
59 |
)
|
60 |
|
61 |
-
return f"""<iframe style="width: 100%; height:
|
62 |
display-capture; encrypted-media;" sandbox="allow-modals allow-forms
|
63 |
allow-scripts allow-same-origin allow-popups
|
64 |
allow-top-navigation-by-user-activation allow-downloads" allowfullscreen=""
|
65 |
allowpaymentrequest="" frameborder="0" srcdoc='{x}'></iframe>"""
|
66 |
|
67 |
|
68 |
-
def update(sequence):
|
69 |
headers = {
|
70 |
'Content-Type': 'application/x-www-form-urlencoded',
|
71 |
}
|
@@ -80,14 +82,22 @@ def update(sequence):
|
|
80 |
return molecule(pdb_filename)
|
81 |
|
82 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
83 |
demo = gr.Blocks()
|
84 |
|
85 |
-
examples = [
|
86 |
-
["Plastic degradation protein", "MGSSHHHHHHSSGLVPRGSHMRGPNPTAASLEASAGPFTVRSFTVSRPSGYGAGTVYYPTNAGGTVGAIAIVPGYTARQSSIKWWGPRLASHGFVVITIDTNSTLDQPSSRSSQQMAALRQVASLNGTSSSPIYGKVDTARMGVMGWSMGGGGSLISAANNPSLKAAAPQAPWDSSTNFSSVTVPTLIFACENDSIAPVNSSALPIYDSMSRNAKQFLEINGGSHSCANSGNSNQALIGKKGVAWMKRFMDNDTRYSTFACENPNSTRVSDFRTANCSLEDPAANKARKEAELAAATAEQ"],
|
87 |
-
["Antifreeze protein", "QCTGGADCTSCTGACTGCGNCPNAVTCTNSQHCVKANTCTGSTDCNTAQTCTNSKDCFEANTCTDSTNCYKATACTNSSGCPGH"],
|
88 |
-
["AI Generated protein", "MSGMKKLYEYTVTTLDEFLEKLKEFILNTSKDKIYKLTITNPKLIKDIGKAIAKAAEIADVDPKEIEEMIKAVEENELTKLVITIEQTDDKYVIKVELENEDGLVHSFEIYFKNKEEMEKFLELLEKLISKLSGS"],
|
89 |
-
["7-bladed propeller fold", "VKLAGNSSLCPINGWAVYSKDNSIRIGSKGDVFVIREPFISCSHLECRTFFLTQGALLNDKHSNGTVKDRSPHRTLMSCPVGEAPSPYNSRFESVAWSASACHDGTSWLTIGISGPDNGAVAVLKYNGIITDTIKSWRNNILRTQESECACVNGSCFTVMTDGPSNGQASYKIFKMEKGKVVKSVELDAPNYHYEECSCYPNAGEITCVCRDNWHGSNRPWVSFNQNLEYQIGYICSGVFGDNPRPNDGTGSCGPVSSNGAYGVKGFSFKYGNGVWIGRTKSTNSRSGFEMIWDPNGWTETDSSFSVKQDIVAITDWSGYSGSFVQHPELTGLDCIRPCFWVELIRGRPKESTIWTSGSSISFCGVNSDTVGWSWPDGAELPFTIDK"]
|
90 |
-
]
|
91 |
|
92 |
with demo:
|
93 |
gr.HTML("""<div style="text-align: center; max-width: 700px; margin: 0 auto;">
|
@@ -107,13 +117,13 @@ with demo:
|
|
107 |
You can input a single protein sequence and you get the predicted protein structure
|
108 |
</p>
|
109 |
</div>""")
|
|
|
110 |
with gr.Row():
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
gr.Examples(examples, [name, inp])
|
115 |
-
btn = gr.Button("Predict structure")
|
116 |
-
mol = gr.HTML()
|
117 |
btn.click(fn=update, inputs=inp, outputs=mol)
|
118 |
-
|
|
|
|
|
119 |
demo.launch()
|
|
|
3 |
import requests
|
4 |
|
5 |
|
6 |
+
DEFAULT_SEQ = "MGSSHHHHHHSSGLVPRGSHMRGPNPTAASLEASAGPFTVRSFTVSRPSGYGAGTVYYPTNAGGTVGAIAIVPGYTARQSSIKWWGPRLASHGFVVITIDTNSTLDQPSSRSSQQMAALRQVASLNGTSSSPIYGKVDTARMGVMGWSMGGGGSLISAANNPSLKAAAPQAPWDSSTNFSSVTVPTLIFACENDSIAPVNSSALPIYDSMSRNAKQFLEINGGSHSCANSGNSNQALIGKKGVAWMKRFMDNDTRYSTFACENPNSTRVSDFRTANCSLEDPAANKARKEAELAAATAEQ"
|
7 |
+
|
8 |
+
|
9 |
def read_mol(molpath):
|
10 |
with open(molpath, "r") as fp:
|
11 |
lines = fp.readlines()
|
|
|
16 |
|
17 |
|
18 |
def molecule(input_pdb):
|
|
|
19 |
mol = read_mol(input_pdb)
|
20 |
|
21 |
x = (
|
|
|
29 |
}
|
30 |
.mol-container {
|
31 |
width: 100%;
|
32 |
+
height: 380px;
|
33 |
position: relative;
|
34 |
}
|
35 |
.mol-container select{
|
|
|
38 |
</style>
|
39 |
<script src="https://3Dmol.csb.pitt.edu/build/3Dmol-min.js"></script>
|
40 |
</head>
|
41 |
+
<body style="overflow: hidden;">
|
42 |
<div id="container" class="mol-container"></div>
|
43 |
|
44 |
<script>
|
|
|
51 |
let config = { backgroundColor: "white" };
|
52 |
let viewer = $3Dmol.createViewer(element, config);
|
53 |
viewer.addModel(pdb, "pdb");
|
54 |
+
viewer.getModel(0).setStyle({}, { cartoon: { colorscheme: {"prop":"resi","gradient":"roygb", "min": 26, "max": 250} } });
|
55 |
viewer.zoomTo();
|
56 |
viewer.render();
|
57 |
viewer.zoom(0.8, 2000);
|
|
|
60 |
</body></html>"""
|
61 |
)
|
62 |
|
63 |
+
return f"""<iframe style="width: 100%; height: 380px" name="result" allow="midi; geolocation; microphone; camera;
|
64 |
display-capture; encrypted-media;" sandbox="allow-modals allow-forms
|
65 |
allow-scripts allow-same-origin allow-popups
|
66 |
allow-top-navigation-by-user-activation allow-downloads" allowfullscreen=""
|
67 |
allowpaymentrequest="" frameborder="0" srcdoc='{x}'></iframe>"""
|
68 |
|
69 |
|
70 |
+
def update(sequence=DEFAULT_SEQ):
|
71 |
headers = {
|
72 |
'Content-Type': 'application/x-www-form-urlencoded',
|
73 |
}
|
|
|
82 |
return molecule(pdb_filename)
|
83 |
|
84 |
|
85 |
+
def suggest(option):
|
86 |
+
if option == "Plastic degradation protein":
|
87 |
+
suggestion = "MGSSHHHHHHSSGLVPRGSHMRGPNPTAASLEASAGPFTVRSFTVSRPSGYGAGTVYYPTNAGGTVGAIAIVPGYTARQSSIKWWGPRLASHGFVVITIDTNSTLDQPSSRSSQQMAALRQVASLNGTSSSPIYGKVDTARMGVMGWSMGGGGSLISAANNPSLKAAAPQAPWDSSTNFSSVTVPTLIFACENDSIAPVNSSALPIYDSMSRNAKQFLEINGGSHSCANSGNSNQALIGKKGVAWMKRFMDNDTRYSTFACENPNSTRVSDFRTANCSLEDPAANKARKEAELAAATAEQ"
|
88 |
+
elif option == "Antifreeze protein":
|
89 |
+
suggestion = "QCTGGADCTSCTGACTGCGNCPNAVTCTNSQHCVKANTCTGSTDCNTAQTCTNSKDCFEANTCTDSTNCYKATACTNSSGCPGH"
|
90 |
+
elif option == "AI Generated protein":
|
91 |
+
suggestion = "MSGMKKLYEYTVTTLDEFLEKLKEFILNTSKDKIYKLTITNPKLIKDIGKAIAKAAEIADVDPKEIEEMIKAVEENELTKLVITIEQTDDKYVIKVELENEDGLVHSFEIYFKNKEEMEKFLELLEKLISKLSGS"
|
92 |
+
elif option == "7-bladed propeller fold":
|
93 |
+
suggestion = "VKLAGNSSLCPINGWAVYSKDNSIRIGSKGDVFVIREPFISCSHLECRTFFLTQGALLNDKHSNGTVKDRSPHRTLMSCPVGEAPSPYNSRFESVAWSASACHDGTSWLTIGISGPDNGAVAVLKYNGIITDTIKSWRNNILRTQESECACVNGSCFTVMTDGPSNGQASYKIFKMEKGKVVKSVELDAPNYHYEECSCYPNAGEITCVCRDNWHGSNRPWVSFNQNLEYQIGYICSGVFGDNPRPNDGTGSCGPVSSNGAYGVKGFSFKYGNGVWIGRTKSTNSRSGFEMIWDPNGWTETDSSFSVKQDIVAITDWSGYSGSFVQHPELTGLDCIRPCFWVELIRGRPKESTIWTSGSSISFCGVNSDTVGWSWPDGAELPFTIDK"
|
94 |
+
else:
|
95 |
+
suggestion = ""
|
96 |
+
return suggestion
|
97 |
+
|
98 |
+
|
99 |
demo = gr.Blocks()
|
100 |
|
|
|
|
|
|
|
|
|
|
|
|
|
101 |
|
102 |
with demo:
|
103 |
gr.HTML("""<div style="text-align: center; max-width: 700px; margin: 0 auto;">
|
|
|
117 |
You can input a single protein sequence and you get the predicted protein structure
|
118 |
</p>
|
119 |
</div>""")
|
120 |
+
name = gr.Dropdown(label="Choose a Sample Protein", value="Plastic degradation protein", choices=["Antifreeze protein", "Plastic degradation protein", "AI Generated protein", "7-bladed propeller fold", "custom"])
|
121 |
with gr.Row():
|
122 |
+
inp = gr.Textbox(label="Protein sequence", lines=3, value=DEFAULT_SEQ, placeholder="Write your protein sequence here...")
|
123 |
+
btn = gr.Button("🔬 Predict Structure ").style(full_width=False)
|
124 |
+
mol = gr.HTML(update)
|
|
|
|
|
|
|
125 |
btn.click(fn=update, inputs=inp, outputs=mol)
|
126 |
+
name.change(fn=suggest, inputs=name, outputs=inp)
|
127 |
+
name.change(fn=lambda :"", inputs=None, outputs=mol)
|
128 |
+
gr.Markdown("A demo of [ESM](https://esmatlas.com/about) by Meta using the API. You can also use ESM in Hugging Face `transformers` as shown [here](https://github.com/huggingface/notebooks/blob/main/examples/protein_folding.ipynb), which is supported since [v4.24](https://github.com/huggingface/transformers/releases/tag/v4.24.0).")
|
129 |
demo.launch()
|