File size: 1,655 Bytes
7782ac2
 
 
 
 
711f689
 
 
4cfe680
711f689
 
 
 
 
 
 
 
4cfe680
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
711f689
7782ac2
 
 
 
711f689
7782ac2
4cfe680
 
7782ac2
 
 
 
 
 
 
711f689
 
4cfe680
 
7782ac2
 
 
711f689
7782ac2
 
 
 
 
 
 
 
 
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
import gradio as gr
import os
import sys


HTML_TEMPLATE = '''<!DOCTYPE html>
<html>
<head>
<script src="https://3Dmol.csb.pitt.edu/build/3Dmol-min.js"></script>
</head>
<body>
<h1>Result:</h1>
{content}
</body>
</html>
'''

VIS_TEMPLATE = '''
<div id="container" class="mol-container"></div>
<script>
let ligand = `{path}`
let viewer = null;

$(document).ready(function () {
    let element = $("#container");
    let config = { backgroundColor: "white" };
    viewer = $3Dmol.createViewer(element, config);
    viewer.addModel( ligand, "Molecule" )
    viewer.getModel(1).setStyle({stick:{colorscheme:"magentaCarbon"}});
    viewer.render();
})
</script>
'''


def generate(input_file):
    try:
        path = input_file.name
    except:
        return HTML_TEMPLATE.format(content='Error: could not open the provided file')
    
    content = VIS_TEMPLATE.format(path=path)
    return HTML_TEMPLATE.format(content=content)


demo = gr.Blocks()
with demo:
    gr.Markdown('# DiffLinker: Equivariant 3D-Conditional Diffusion Model for Molecular Linker Design')
    with gr.Box():
        with gr.Row():
            with gr.Column():
                gr.Markdown('## Input Fragments')
                gr.Markdown('Upload the file with 3D-coordinates of the input fragments in .pdb, .mol or .sdf format')
                input_file = gr.File(file_count='single', label='Input fragments in .pdb, .mol2 or .sdf format')
            
    button = gr.Button('Generate Linker!')
    
    gr.Markdown('')
    visualization = gr.HTML()
    
    button.click(
        fn=generate,
        inputs=[input_file],
        outputs=[visualization],
    )

demo.launch()