abidlabs HF staff commited on
Commit
2d3f8b1
1 Parent(s): dd1097a

Added dropdown, colors, etc.

Browse files
Files changed (1) hide show
  1. app.py +29 -19
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: 600px;
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:"whiteCarbon" } });
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: 600px" name="result" allow="midi; geolocation; microphone; camera;
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
- with gr.Box():
112
- name = gr.Textbox(label="Protein example", value=examples[1][0])
113
- inp = gr.Textbox(label="Protein sequence", lines=3, value=examples[1][1])
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
- gr.Markdown("[ESM](https://esmatlas.com/about) by Meta using the API. You can also use 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).")
 
 
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()