Vaishnav14220 commited on
Commit
d157eb5
·
1 Parent(s): 129f2e9

Fix 3D molecule viewer HTML rendering for Gradio

Browse files
Files changed (1) hide show
  1. app.py +19 -17
app.py CHANGED
@@ -74,28 +74,30 @@ def name_to_3d_molecule(name: str) -> str:
74
  # Optimize geometry
75
  AllChem.MMFFOptimizeMolecule(mol)
76
 
77
- # Convert to SDF format (contains 3D coordinates)
78
- sdf_string = Chem.SDWriter.GetText(mol)
 
 
 
 
79
 
80
  # Create HTML with embedded 3D viewer using 3Dmol.js
81
  html_content = f"""
82
- <!DOCTYPE html>
83
- <html>
84
- <head>
85
- <script src="https://3dmol.csb.pitt.edu/build/3Dmol-min.js"></script>
86
- </head>
87
- <body>
88
- <div id="container" style="width: 400px; height: 400px; position: relative;"></div>
89
- <script>
90
- let viewer = $3Dmol.createViewer($("#container"));
91
- let sdf = `{sdf_string}`;
92
- viewer.addModel(sdf, "sdf");
93
- viewer.setStyle({{'stick': {{}}}});
94
  viewer.zoomTo();
95
  viewer.render();
96
- </script>
97
- </body>
98
- </html>
99
  """
100
 
101
  return html_content
 
74
  # Optimize geometry
75
  AllChem.MMFFOptimizeMolecule(mol)
76
 
77
+ # Convert to MOL block format
78
+ mol_block = Chem.MolToMolBlock(mol)
79
+
80
+ # Escape the mol block for JavaScript
81
+ import json
82
+ mol_block_escaped = json.dumps(mol_block)
83
 
84
  # Create HTML with embedded 3D viewer using 3Dmol.js
85
  html_content = f"""
86
+ <div id="container-3dmol" style="width: 600px; height: 600px; position: relative; margin: auto;"></div>
87
+ <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
88
+ <script src="https://3dmol.csb.pitt.edu/build/3Dmol-min.js"></script>
89
+ <script>
90
+ $(document).ready(function() {{
91
+ let element = $('#container-3dmol');
92
+ let viewer = $3Dmol.createViewer(element, {{backgroundColor: 'white'}});
93
+ let molData = {mol_block_escaped};
94
+ viewer.addModel(molData, "mol");
95
+ viewer.setStyle({{}}, {{stick: {{colorscheme: 'Jmol'}}}});
96
+ viewer.addStyle({{}}, {{sphere: {{radius: 0.3, colorscheme: 'Jmol'}}}});
 
97
  viewer.zoomTo();
98
  viewer.render();
99
+ }});
100
+ </script>
 
101
  """
102
 
103
  return html_content