File size: 4,564 Bytes
8ecc9a8
fba8f5e
 
 
 
 
 
634752b
fba8f5e
 
634752b
 
fba8f5e
 
 
 
 
 
ddc1bd3
 
 
4f4563b
 
 
 
 
 
2dd6312
fba8f5e
8ecc9a8
 
fba8f5e
8ecc9a8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
634752b
fba8f5e
462a012
fba8f5e
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
from gradio import Blocks, Button, Checkbox, DataFrame, DownloadButton, Dropdown, Examples, Image, Markdown, Tab, Textbox

from model import get_models
from data import Data

# Define scoring strategies
SCORING = ["wt-marginals", "masked-marginals"]

# Get available models
MODELS = get_models()

def app(*argv):
    """
    Main application function
    """
    # Unpack the arguments
    seq, trg, model_name, *_ = argv
    scoring = SCORING[scoring_strategy.value]
    # Calculate the data based on the input parameters
    data = Data(seq, trg, model_name, scoring).calculate()

    if isinstance(data.image(), str):
        out = Image(value=data.image(), type='filepath', visible=True), DataFrame(visible=False)
    else:
        out = Image(visible=False), DataFrame(value=data.image(), visible=True)
        
    return *out, DownloadButton(value=data.csv(), visible=True)

# Create the Gradio interface
with Blocks() as esm_scan:
    Markdown("# [ESM-Scan](https://doi.org/10.1002/pro.5221)")
    # Define the interface components
    with Tab("App"):
        Markdown(open("header.md", "r", encoding="utf-8").read())
        seq = Textbox(
            lines=2,
            label="Sequence",
            placeholder="FASTA sequence here...",
            value=''
        )
        trg = Textbox(
            lines=1,
            label="Substitutions",
            placeholder="Substitutions here...",
            value=""
        )
        model_name = Dropdown(MODELS, label="Model", value="facebook/esm2_t30_150M_UR50D")
        scoring_strategy = Checkbox(value=True, label="Use higher accuracy scoring", interactive=True)
        btn = Button(value="Run", variant="primary")
        dlb = DownloadButton(label="Download raw data", visible=False)
        out = Image(visible=False)
        ouu = DataFrame(visible=False)
        btn.click(
            fn=app,
            inputs=[seq, trg, model_name],
            outputs=[out, ouu, dlb]
        )
        ex = Examples(
            examples=[
                [
                    "MVEQYLLEAIVRDARDGITISDCSRPDNPLVFVNDAFTRMTGYDAEEVIGKNCRFLQRGDINLSAVHTIKIAMLTHEPCLVTLKNYRKDGTIFWNELSLTPIINKNGLITHYLGIQKDVSAQVILNQTLHEENHLLKSNKEMLEYLVNIDALTGLHNRRFLEDQLVIQWKLASRHINTITIFMIDIDYFKAFNDTYGHTAGDEALRTIAKTLNNCFMRGSDFVARYGGEEFTILAIGMTELQAHEYSTKLVQKIENLNIHHKGSPLGHLTISLGYSQANPQYHNDQNLVIEQADRALYSAKVEGKNRAVAYREQ", 
                    "deep mutational scanning",
                    "facebook/esm2_t6_8M_UR50D"
                ],
                [
                    "MVEQYLLEAIVRDARDGITISDCSRPDNPLVFVNDAFTRMTGYDAEEVIGKNCRFLQRGDINLSAVHTIKIAMLTHEPCLVTLKNYRKDGTIFWNELSLTPIINKNGLITHYLGIQKDVSAQVILNQTLHEENHLLKSNKEMLEYLVNIDALTGLHNRRFLEDQLVIQWKLASRHINTITIFMIDIDYFKAFNDTYGHTAGDEALRTIAKTLNNCFMRGSDFVARYGGEEFTILAIGMTELQAHEYSTKLVQKIENLNIHHKGSPLGHLTISLGYSQANPQYHNDQNLVIEQADRALYSAKVEGKNRAVAYREQ", 
                    "217 218 219",
                    "facebook/esm2_t12_35M_UR50D"
                ],
                [
                    "MVEQYLLEAIVRDARDGITISDCSRPDNPLVFVNDAFTRMTGYDAEEVIGKNCRFLQRGDINLSAVHTIKIAMLTHEPCLVTLKNYRKDGTIFWNELSLTPIINKNGLITHYLGIQKDVSAQVILNQTLHEENHLLKSNKEMLEYLVNIDALTGLHNRRFLEDQLVIQWKLASRHINTITIFMIDIDYFKAFNDTYGHTAGDEALRTIAKTLNNCFMRGSDFVARYGGEEFTILAIGMTELQAHEYSTKLVQKIENLNIHHKGSPLGHLTISLGYSQANPQYHNDQNLVIEQADRALYSAKVEGKNRAVAYREQ", 
                    "R218K R218S R218N R218A R218V R218D",
                    "facebook/esm2_t30_150M_UR50D",
                ],
                [
                    "MVEQYLLEAIVRDARDGITISDCSRPDNPLVFVNDAFTRMTGYDAEEVIGKNCRFLQRGDINLSAVHTIKIAMLTHEPCLVTLKNYRKDGTIFWNELSLTPIINKNGLITHYLGIQKDVSAQVILNQTLHEENHLLKSNKEMLEYLVNIDALTGLHNRRFLEDQLVIQWKLASRHINTITIFMIDIDYFKAFNDTYGHTAGDEALRTIAKTLNNCFMRGSDFVARYGGEEFTILAIGMTELQAHEYSTKLVQKIENLNIHHKGSPLGHLTISLGYSQANPQYHNDQNLVIEQADRALYSAKVEGKNRAVAYREQ", 
                    "MVEQYLLEAIVRDARDGITISDCSRPDNPLVFVNDAFTRMTGYDAEEVIGKNCRFLQRGDINLSAVHTIKIAMLTHEPCLVTLKNYRKDGTIFWNELSLTPIINKNGLITHYLGIQKDVSAQVILNQTLHEENHLLKSNKEMLEYLVNIDALTGLHNRRFLEDQLVIQWKLASRHINTITIFMIDIDYFKAFNDTYGHTAGDEALRTIAKTLNNCFMWGSDFVARYGGEEFTILAIGMTELQAHEYSTKLVQKIENLNIHHKGSPLGHLTISLGYSQANPQYHNDQNLVIEQADRALYSAKVEGKNRAVAYREQ", 
                    "facebook/esm2_t33_650M_UR50D",
                ],
            ],
            inputs=[seq,
                    trg,
                    model_name],
            outputs=[out],
            fn=app,
            cache_examples=False
        )
    with Tab("Instructions"):
        Markdown(open("instructions.md", "r", encoding="utf-8").read())

# Launch the Gradio interface
if __name__ == "__main__":
    esm_scan.launch()