Spaces:
Running
Running
fuxialexander
commited on
Commit
•
8bdf52a
0
Parent(s):
init
Browse files- .gitignore +1 -0
- .gitmodules +3 -0
- Dockerfile +44 -0
- app/__init__.py +0 -0
- app/main.py +80 -0
- modules/proscope +1 -0
.gitignore
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
data
|
.gitmodules
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
[submodule "modules/proscope"]
|
2 |
+
path = modules/proscope
|
3 |
+
url = git@github.com:fuxialexander/proscope.git
|
Dockerfile
ADDED
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Use an official miniconda3 as a parent image
|
2 |
+
FROM mambaorg/micromamba
|
3 |
+
|
4 |
+
# Set the working directory in the container to /app
|
5 |
+
WORKDIR /app
|
6 |
+
|
7 |
+
|
8 |
+
# Create a new environment using mamba with specified packages
|
9 |
+
RUN micromamba install -n base -c conda-forge -c bioconda -y python=3.10 git pip biopython nglview tqdm matplotlib pandas xmlschema seaborn numpy py3Dmol
|
10 |
+
ARG MAMBA_DOCKERFILE_ACTIVATE=1
|
11 |
+
# Activate the environment and install additional packages via pip
|
12 |
+
RUN pip3 install gradio
|
13 |
+
|
14 |
+
USER root
|
15 |
+
|
16 |
+
RUN apt-get update && apt-get install -y --no-install-recommends \
|
17 |
+
git \
|
18 |
+
ssh \
|
19 |
+
&& apt-get clean \
|
20 |
+
&& rm -rf /var/lib/apt/lists/*
|
21 |
+
|
22 |
+
USER $MAMBA_USER
|
23 |
+
|
24 |
+
# copy modules from local to container
|
25 |
+
COPY --chown=$MAMBA_USER:$MAMBA_USER modules /app/modules
|
26 |
+
|
27 |
+
# copy modules from local to container
|
28 |
+
COPY --chown=$MAMBA_USER:$MAMBA_USER app /app/app
|
29 |
+
|
30 |
+
# copy modules from local to container
|
31 |
+
# COPY --chown=$MAMBA_USER:$MAMBA_USER data /app/data
|
32 |
+
|
33 |
+
# Clone a specific git repository and install it as an editable package
|
34 |
+
RUN cd modules/proscope && \
|
35 |
+
pip3 install .
|
36 |
+
|
37 |
+
WORKDIR /app
|
38 |
+
|
39 |
+
# Make port 80 available to the world outside this container
|
40 |
+
EXPOSE 7681
|
41 |
+
# Set the working directory where your app resides
|
42 |
+
|
43 |
+
# Command to run the Gradio app automatically
|
44 |
+
CMD ["python", "app/main.py", "-p", "7681", "-s", "-d", "/data"]
|
app/__init__.py
ADDED
File without changes
|
app/main.py
ADDED
@@ -0,0 +1,80 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import glob
|
2 |
+
import os
|
3 |
+
|
4 |
+
import argparse
|
5 |
+
import gradio as gr
|
6 |
+
import matplotlib.pyplot as plt
|
7 |
+
from proscope.data import get_seq, get_genename_to_uniprot, get_lddt
|
8 |
+
seq = get_seq()
|
9 |
+
genename_to_uniprot = get_genename_to_uniprot()
|
10 |
+
lddt = get_lddt()
|
11 |
+
from proscope.af2 import AFPairseg
|
12 |
+
from proscope.protein import Protein
|
13 |
+
from proscope.viewer import view_pdb_html
|
14 |
+
|
15 |
+
|
16 |
+
args = argparse.ArgumentParser()
|
17 |
+
args.add_argument("-p", "--port", type=int, default=7860, help="Port number")
|
18 |
+
args.add_argument("-s", "--share", action="store_true", help="Share on network")
|
19 |
+
args.add_argument("-d", "--data", type=str, default="/data", help="Data directory")
|
20 |
+
args = args.parse_args()
|
21 |
+
gene_pairs = glob.glob(f"{args.data}/structures/causal/*")
|
22 |
+
gene_pairs = [os.path.basename(pair) for pair in gene_pairs]
|
23 |
+
|
24 |
+
# set plot ppi to 100
|
25 |
+
plt.rcParams['figure.dpi'] = 100
|
26 |
+
|
27 |
+
def visualize_AF2(tf_pair, a):
|
28 |
+
strcture_dir = f"{args.data}/structures/causal/{tf_pair}"
|
29 |
+
fasta_dir = f"{args.data}/sequences/causal/{tf_pair}"
|
30 |
+
if not os.path.exists(strcture_dir):
|
31 |
+
gr.ErrorText("No such gene pair")
|
32 |
+
|
33 |
+
a = AFPairseg(strcture_dir, fasta_dir)
|
34 |
+
segpair.choices = list(a.pairs_data.keys())
|
35 |
+
fig1, ax1 = a.plot_plddt_gene1()
|
36 |
+
fig2, ax2 = a.plot_plddt_gene2()
|
37 |
+
fig3, ax3 = a.protein1.plot_plddt()
|
38 |
+
fig4, ax4 = a.protein2.plot_plddt()
|
39 |
+
fig5, ax5 = a.plot_score_heatmap()
|
40 |
+
plt.tight_layout()
|
41 |
+
new_dropdown = update_dropdown(list(a.pairs_data.keys()), 'Segment pair')
|
42 |
+
return fig1, fig2, fig3, fig4, fig5, new_dropdown, a
|
43 |
+
|
44 |
+
def view_pdb(seg_pair, a):
|
45 |
+
pdb_path = a.pairs_data[seg_pair].pdb
|
46 |
+
return view_pdb_html(pdb_path), a, pdb_path
|
47 |
+
|
48 |
+
|
49 |
+
def update_dropdown(x, label):
|
50 |
+
return gr.Dropdown.update(choices=x, label=label)
|
51 |
+
|
52 |
+
|
53 |
+
# main
|
54 |
+
if __name__ == '__main__':
|
55 |
+
with gr.Blocks(theme='sudeepshouche/minimalist') as demo:
|
56 |
+
|
57 |
+
seg_pairs = gr.State([''])
|
58 |
+
af = gr.State(None)
|
59 |
+
with gr.Row() as row:
|
60 |
+
with gr.Column():
|
61 |
+
tf_pairs = gr.Dropdown(label='TF pair', choices=gene_pairs)
|
62 |
+
tf_pairs_btn = gr.Button(value='Load & Plot')
|
63 |
+
interact_plddt1 = gr.Plot(label='Interact pLDDT 1')
|
64 |
+
interact_plddt2 = gr.Plot(label='Interact pLDDT 2')
|
65 |
+
protein1_plddt = gr.Plot(label='Protein 1 pLDDT')
|
66 |
+
protein2_plddt = gr.Plot(label='Protein 2 pLDDT')
|
67 |
+
|
68 |
+
heatmap = gr.Plot(label='Heatmap')
|
69 |
+
|
70 |
+
with gr.Column():
|
71 |
+
segpair = gr.Dropdown(label='Seg pair', choices=seg_pairs.value)
|
72 |
+
segpair_btn = gr.Button(value='Get PDB')
|
73 |
+
pdb_html = gr.HTML(label="PDB HTML")
|
74 |
+
pdb_file = gr.File(label='Download PDB')
|
75 |
+
|
76 |
+
tf_pairs_btn.click(visualize_AF2, inputs = [tf_pairs, af], outputs = [ interact_plddt1, interact_plddt2, protein1_plddt, protein2_plddt, heatmap, segpair, af])
|
77 |
+
segpair_btn.click(view_pdb, inputs=[segpair, af], outputs=[pdb_html, af, pdb_file])
|
78 |
+
|
79 |
+
demo.launch(share=args.share, server_port=args.port)
|
80 |
+
|
modules/proscope
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
Subproject commit 3dd461a01e95eb9bb5a2b3e41f0dbe24fb9f3c76
|