├── CalcMetrics.xml
├── IteratedConvergence.xml
├── IteratedConvergence_GFP.xml
├── README.md
├── RelaxSimpleDesign_gfp.xml
├── SimpleDesign.xml
├── calc_metrics.sh
├── converge_it.sh
├── converge_it_gfp.sh
├── design.options
├── design_analysis.ipynb
├── design_analysis_known_mutations_only.ipynb
├── emi
├── ESM03.sh
├── ESM1.sh
├── ESM15.sh
├── FastDesign.sh
├── IC_ESM1.sh
├── IC_MIFST1.sh
├── IC_calc_metrics.sh
├── MIFST03.sh
├── MIFST1.sh
├── MIFST15.sh
├── RelaxDesign_calc_metrics.sh
├── RelaxSimpleMPNN1.sh
├── SimpleMPNN03.sh
├── SimpleMPNN1.sh
├── SimpleMPNN15.sh
├── avg03.sh
├── avg1.sh
├── avg15.sh
├── calc_metrics.sh
├── emi_LDA_ANT.joblib
├── emi_LDA_OVA.joblib
├── emi_binding.csv
└── emi_designs.csv
├── environment.yaml
├── gb1
├── ESM03.sh
├── ESM1.sh
├── ESM15.sh
├── FastDesign.sh
├── IC_ESM1.sh
├── IC_MIFST1.sh
├── IC_calc_metrics.sh
├── MIFST03.sh
├── MIFST1.sh
├── MIFST15.sh
├── RelaxDesign_calc_metrics.sh
├── RelaxSimpleMPNN1.sh
├── SimpleMPNN03.sh
├── SimpleMPNN1.sh
├── SimpleMPNN15.sh
├── avg03.sh
├── avg1.sh
├── avg15.sh
├── calc_metrics.sh
├── gb1_designs.csv
├── gb1_mutations_full_data.csv
└── gb1_ridge.joblib
├── gfp
├── ESM03.sh
├── ESM1.sh
├── ESM15.sh
├── FastDesign.sh
├── IC_ESM1.sh
├── IC_MIFST1.sh
├── MIFST03.sh
├── MIFST1.sh
├── MIFST15.sh
├── RelaxSimpleMPNN1.sh
├── SimpleMPNN03.sh
├── SimpleMPNN1.sh
├── SimpleMPNN15.sh
├── avg03.sh
├── avg1.sh
├── avg15.sh
├── calc_metrics.sh
├── gfp_data.csv
└── gfp_designs.csv
├── herceptin
├── ESM03.sh
├── ESM1.sh
├── ESM15.sh
├── FastDesign.sh
├── IC_ESM1.sh
├── IC_MIFST1.sh
├── IC_calc_metrics.sh
├── MIFST03.sh
├── MIFST1.sh
├── MIFST15.sh
├── RelaxDesign_calc_metrics.sh
├── RelaxSimpleMPNN1.sh
├── SimpleMPNN03.sh
├── SimpleMPNN1.sh
├── SimpleMPNN15.sh
├── avg03.sh
├── avg1.sh
├── avg15.sh
├── calc_metrics.sh
├── herceptin_designs.csv
├── lda_herceptin.joblib
├── mHER_H3_AgNeg.csv
└── mHER_H3_AgPos.csv
├── model_training.ipynb
└── simple_design.sh
/CalcMetrics.xml:
--------------------------------------------------------------------------------
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 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
--------------------------------------------------------------------------------
/IteratedConvergence.xml:
--------------------------------------------------------------------------------
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 |
--------------------------------------------------------------------------------
/IteratedConvergence_GFP.xml:
--------------------------------------------------------------------------------
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 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Code for "Self-supervised machine learning methods for protein design improve sampling, but not the identification of high-fitness variants"
2 | 
3 |
4 | This repo contains the code for reproducing the results of the publication "Self-supervised machine learning methods for protein design improve sampling, but not the identification of high-fitness variants" [(link to preprint)](https://www.biorxiv.org/content/10.1101/2024.06.20.599843v1). If you are interested instead in using the implemented features for your own work, an overview of them [can be found in the Rosetta documentation here](https://www.rosettacommons.org/docs/latest/scripting_documentation/RosettaScripts/composite_protocols/Working-with-PerResidueProbabilitiesMetrics), and a tutorial is available from the Meiler Rosetta workshop 2023 ["Tutorial 2: Machine Learning in Rosetta"](https://meilerlab.org/rosetta-workshop-2023/).
5 |
6 | ## Running the different design protocols
7 | Code for running the different design protocols can be found in the folder of each dataset, e.g. `emi/avg03.sh`. All scripts use the RosettaScripts XML provided in the main folder which are named after the different protocols shown in the paper.
8 |
9 | ## Sequences and metrics of resulting designs
10 | The unique sequences and calculated metrics of each design protocol are available in the dataset folders ("dataset/dataset_designs.csv"), e.g. `emi/emi_designs.csv`.
11 |
12 | ## Analysis of designs
13 | The code for analyzing the resulting designs and reproducing figures can be found in the `design_analysis.ipynb` notebook. In order to run the jupyter notebooks, first create a python environment using the `environment.yaml` file with either conda or mamba:
14 |
15 | ```
16 | # create environment
17 | conda env create -f environment.yaml
18 | # activate environment
19 | conda activate probs_design
20 | ```
21 |
22 | ## Oracle model data and training
23 | The code for training and evaluating the oracle models for each dataset can be found in the `model_training.ipynb` notebook. The datasets used for training can be found in each dataset folder, e.g. `gb1/gb1_mutations_full_data.csv`. The already trained models are also available, e.g. `gb1/gb1_ridge.joblib`.
24 |
25 | ## Rosetta code
26 | The Rosetta source code can be found at https://github.com/RosettaCommons/rosetta/. Docker containers for Rosetta (including the Tensorflow/LibTorch extras version) can be found at https://hub.docker.com/r/rosettacommons/rosetta.
27 |
--------------------------------------------------------------------------------
/RelaxSimpleDesign_gfp.xml:
--------------------------------------------------------------------------------
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 |
--------------------------------------------------------------------------------
/SimpleDesign.xml:
--------------------------------------------------------------------------------
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 |
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 |
95 |
96 |
97 |
98 |
99 |
--------------------------------------------------------------------------------
/calc_metrics.sh:
--------------------------------------------------------------------------------
1 | Rosetta/main/source/bin/rosetta_scripts.pytorchtensorflow.linuxgccrelease @ ./metric.options -parser:protocol ./CalcMetrics.xml -l $1 -parser:script_vars design_chain=$2 antigen=$3 AIFA=$4 interface=$5 -out:path:all "${6}" -out:file:score_only "${7}"
2 |
3 |
--------------------------------------------------------------------------------
/converge_it.sh:
--------------------------------------------------------------------------------
1 | Rosetta/main/source/bin/rosetta_scripts.pytorchtensorflow.linuxgccrelease @ ./design.options -parser:protocol ./IteratedConvergence.xml -s $1 -parser:script_vars protocol=$2 design_chain=$3 antigen=$4 AIFA=$5 pos_temp=$6 aa_temp=$7 n_muts=$8 resfile=${10} filter=$9 -out:path:all "${11}"
2 |
3 |
--------------------------------------------------------------------------------
/converge_it_gfp.sh:
--------------------------------------------------------------------------------
1 | Rosetta/main/source/bin/rosetta_scripts.pytorchtensorflow.linuxgccrelease @ ./design.options -parser:protocol ./IteratedConvergence_GFP.xml -s $1 -parser:script_vars protocol=$2 design_chain=$3 antigen=$4 AIFA=$5 pos_temp=$6 aa_temp=$7 n_muts=$8 resfile=${10} filter=$9 -out:path:all "${11}"
2 |
3 |
--------------------------------------------------------------------------------
/design.options:
--------------------------------------------------------------------------------
1 | -linmem_ig 5
2 | -ex1
3 | -ex2aro
4 | -beta
5 | -never_rerun_filters
6 | -multiple_processes_writing_to_one_directory
7 | -nstruct 1000
8 |
--------------------------------------------------------------------------------
/emi/ESM03.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../emi/emi_sema_complex_relax_best.pdb sample_mutations_esm A C 1 0.3 0.3 100 ../emi/resfile.resfile ../emi/output_ESM03/
2 |
--------------------------------------------------------------------------------
/emi/ESM1.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../emi/emi_sema_complex_relax_best.pdb sample_mutations_esm A C 1 1 1 100 ../emi/resfile.resfile ../emi/output_ESM1/
2 |
--------------------------------------------------------------------------------
/emi/ESM15.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../emi/emi_sema_complex_relax_best.pdb sample_mutations_esm A C 1 1.5 1.5 100 ../emi/resfile.resfile ../emi/output_ESM15/
2 |
--------------------------------------------------------------------------------
/emi/FastDesign.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../emi/emi_sema_complex_relax_best.pdb if_relax A C 1 0.0 0.0 0 ../emi/resfile.resfile ../emi/output_FastDesign/
2 |
--------------------------------------------------------------------------------
/emi/IC_ESM1.sh:
--------------------------------------------------------------------------------
1 | ../converge_it.sh ../emi/emi_sema_complex_relax_best.pdb sample_mutations_esm A C 1 1 1 1 filt_pp_esm ../emi/resfile.resfile ../emi/output_IC_ESM1/
2 |
--------------------------------------------------------------------------------
/emi/IC_MIFST1.sh:
--------------------------------------------------------------------------------
1 | ../converge_it.sh ../emi/emi_sema_complex_relax_best.pdb sample_mutations_mifst A C 1 1 1 1 filt_pp_mifst ../emi/resfile.resfile ../emi/output_IC_MIFST1/
2 |
--------------------------------------------------------------------------------
/emi/IC_calc_metrics.sh:
--------------------------------------------------------------------------------
1 | ../calc_metrics.sh ../emi/results_IC_ESM1.list A C 1 AB_C ../emi/ score_IC_ESM1.sc
2 |
--------------------------------------------------------------------------------
/emi/MIFST03.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../emi/emi_sema_complex_relax_best.pdb sample_mutations_mifst A C 1 0.3 0.3 100 ../emi/resfile.resfile ../emi/output_MIFST03/
2 |
--------------------------------------------------------------------------------
/emi/MIFST1.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../emi/emi_sema_complex_relax_best.pdb sample_mutations_mifst A C 1 1 1 100 ../emi/resfile.resfile ../emi/output_MIFST1/
2 |
--------------------------------------------------------------------------------
/emi/MIFST15.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../emi/emi_sema_complex_relax_best.pdb sample_mutations_mifst A C 1 1.5 1.5 100 ../emi/resfile.resfile ../emi/output_MIFST15/
2 |
--------------------------------------------------------------------------------
/emi/RelaxDesign_calc_metrics.sh:
--------------------------------------------------------------------------------
1 | ../calc_metrics.sh ../emi/results_RelaxSimpleMPNN1.list A C 1 AB_C ../emi/ score_RelaxSimpleMPNN1.sc
2 |
--------------------------------------------------------------------------------
/emi/RelaxSimpleMPNN1.sh:
--------------------------------------------------------------------------------
1 | ../relax_design.sh ../emi/emi_sema_complex_relax_best.pdb sample_mutations_mpnn A C 1 1 1 100 ../emi/resfile.resfile ../emi/output_RelaxSimpleMPNN1/
2 |
--------------------------------------------------------------------------------
/emi/SimpleMPNN03.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../emi/emi_sema_complex_relax_best.pdb sample_mutations_mpnn A C 1 0.3 0.3 100 ../emi/resfile.resfile ../emi/output_SimpleMPNN03/
2 |
--------------------------------------------------------------------------------
/emi/SimpleMPNN1.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../emi/emi_sema_complex_relax_best.pdb sample_mutations_mpnn A C 1 1 1 100 ../emi/resfile.resfile ../emi/output_SimpleMPNN1/
2 |
--------------------------------------------------------------------------------
/emi/SimpleMPNN15.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../emi/emi_sema_complex_relax_best.pdb sample_mutations_mpnn A C 1 1.5 1.5 100 ../emi/resfile.resfile ../emi/output_SimpleMPNN15/
2 |
--------------------------------------------------------------------------------
/emi/avg03.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../emi/emi_sema_complex_relax_best.pdb sample_mutations_avg A C 1 0.3 0.3 100 ../emi/resfile.resfile ../emi/output_avg03/
2 |
--------------------------------------------------------------------------------
/emi/avg1.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../emi/emi_sema_complex_relax_best.pdb sample_mutations_avg A C 1 1 1 100 ../emi/resfile.resfile ../emi/output_avg1/
2 |
--------------------------------------------------------------------------------
/emi/avg15.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../emi/emi_sema_complex_relax_best.pdb sample_mutations_avg A C 1 1.5 1.5 100 ../emi/resfile.resfile ../emi/output_avg15/
2 |
--------------------------------------------------------------------------------
/emi/calc_metrics.sh:
--------------------------------------------------------------------------------
1 | ../calc_metrics.sh ../emi/results_FastDesign.list A C 1 AB_C ../emi/ score_FastDesign.sc
2 |
--------------------------------------------------------------------------------
/emi/emi_LDA_ANT.joblib:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/meilerlab/probabilities_design/31916a3b5792737b49d0833a3396d1da546460c6/emi/emi_LDA_ANT.joblib
--------------------------------------------------------------------------------
/emi/emi_LDA_OVA.joblib:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/meilerlab/probabilities_design/31916a3b5792737b49d0833a3396d1da546460c6/emi/emi_LDA_OVA.joblib
--------------------------------------------------------------------------------
/environment.yaml:
--------------------------------------------------------------------------------
1 | name: probs_design
2 | channels:
3 | - conda-forge
4 | - pkgs/main
5 | dependencies:
6 | - _libgcc_mutex=0.1
7 | - _openmp_mutex=4.5
8 | - backcall=0.2.0
9 | - backports=1.0
10 | - backports.functools_lru_cache=2.0.0
11 | - bottleneck=1.3.5
12 | - brotli=1.1.0
13 | - brotli-bin=1.1.0
14 | - ca-certificates=2024.6.2
15 | - certifi=2024.6.2
16 | - cycler=0.11.0
17 | - debugpy=1.6.3
18 | - decorator=5.1.1
19 | - entrypoints=0.4
20 | - fonttools=4.38.0
21 | - freetype=2.12.1
22 | - imbalanced-learn=0.8.1
23 | - ipykernel=6.16.2
24 | - ipython=7.33.0
25 | - jedi=0.19.1
26 | - joblib=0.17.0
27 | - jpeg=9e
28 | - jupyter_client=7.4.9
29 | - jupyter_core=4.11.1
30 | - kiwisolver=1.4.4
31 | - lcms2=2.14
32 | - ld_impl_linux-64=2.40
33 | - lerc=4.0.0
34 | - libblas=3.9.0
35 | - libbrotlicommon=1.1.0
36 | - libbrotlidec=1.1.0
37 | - libbrotlienc=1.1.0
38 | - libcblas=3.9.0
39 | - libdeflate=1.14
40 | - libffi=3.3
41 | - libgcc-ng=13.2.0
42 | - libgfortran-ng=13.2.0
43 | - libgfortran5=13.2.0
44 | - libgomp=13.2.0
45 | - liblapack=3.9.0
46 | - libopenblas=0.3.25
47 | - libpng=1.6.43
48 | - libsodium=1.0.18
49 | - libsqlite=3.46.0
50 | - libstdcxx-ng=13.2.0
51 | - libtiff=4.4.0
52 | - libwebp-base=1.4.0
53 | - libxcb=1.13
54 | - libzlib=1.2.13
55 | - matplotlib-base=3.5.3
56 | - matplotlib-inline=0.1.7
57 | - munkres=1.1.4
58 | - ncurses=6.5
59 | - nest-asyncio=1.6.0
60 | - nomkl=1.0
61 | - numexpr=2.8.3
62 | - numpy=1.21.6
63 | - openjpeg=2.5.0
64 | - openssl=1.1.1w
65 | - packaging=23.2
66 | - pandas=1.3.5
67 | - parso=0.8.4
68 | - patsy=0.5.6
69 | - pexpect=4.9.0
70 | - pickleshare=0.7.5
71 | - pillow=9.2.0
72 | - pip=24.0
73 | - prompt-toolkit=3.0.47
74 | - psutil=5.9.3
75 | - pthread-stubs=0.4
76 | - ptyprocess=0.7.0
77 | - pygments=2.17.2
78 | - pyparsing=3.1.2
79 | - python=3.7.8
80 | - python-dateutil=2.9.0
81 | - python_abi=3.7
82 | - pytz=2024.1
83 | - pyzmq=24.0.1
84 | - readline=8.2
85 | - scikit-learn=1.0.1
86 | - scipy=1.7.3
87 | - seaborn=0.9.0
88 | - setuptools=69.0.3
89 | - six=1.16.0
90 | - sqlite=3.46.0
91 | - statsmodels=0.13.2
92 | - threadpoolctl=3.1.0
93 | - tk=8.6.13
94 | - tornado=6.2
95 | - traitlets=5.9.0
96 | - typing-extensions=4.7.1
97 | - typing_extensions=4.7.1
98 | - unicodedata2=14.0.0
99 | - wcwidth=0.2.10
100 | - wheel=0.42.0
101 | - xorg-libxau=1.0.11
102 | - xorg-libxdmcp=1.1.3
103 | - xz=5.2.6
104 | - zeromq=4.3.5
105 | - zlib=1.2.13
106 | - zstd=1.5.6
107 |
108 |
--------------------------------------------------------------------------------
/gb1/ESM03.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../gb1/gb1_IgG1FC_relax_best.pdb sample_mutations_esm C A 1 0.3 0.3 100 ../gb1/resfile.resfile ../gb1/output_ESM03/
2 |
--------------------------------------------------------------------------------
/gb1/ESM1.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../gb1/gb1_IgG1FC_relax_best.pdb sample_mutations_esm C A 1 1 1 100 ../gb1/resfile.resfile ../gb1/output_ESM1/
2 |
--------------------------------------------------------------------------------
/gb1/ESM15.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../gb1/gb1_IgG1FC_relax_best.pdb sample_mutations_esm C A 1 1.5 1.5 100 ../gb1/resfile.resfile ../gb1/output_ESM15/
2 |
--------------------------------------------------------------------------------
/gb1/FastDesign.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../gb1/gb1_IgG1FC_relax_best.pdb if_relax C A 1 0.0 0.0 0 ../gb1/resfile.resfile ../gb1/output_FastDesign/
2 |
--------------------------------------------------------------------------------
/gb1/IC_ESM1.sh:
--------------------------------------------------------------------------------
1 | ../converge_it.sh ../gb1/gb1_IgG1FC_relax_best.pdb sample_mutations_esm C A 1 1 1 1 filt_pp_esm ../gb1/resfile.resfile ../gb1/output_IC_ESM1/
2 |
--------------------------------------------------------------------------------
/gb1/IC_MIFST1.sh:
--------------------------------------------------------------------------------
1 | ../converge_it.sh ../gb1/gb1_IgG1FC_relax_best.pdb sample_mutations_mifst C A 1 1 1 1 filt_pp_mifst ../gb1/resfile.resfile ../gb1/output_IC_MIFST1/
2 |
--------------------------------------------------------------------------------
/gb1/IC_calc_metrics.sh:
--------------------------------------------------------------------------------
1 | ../calc_metrics.sh ../gb1/results_IC_ESM1.list C A 1 C_A ../gb1/ score_IC_ESM1.sc
2 |
--------------------------------------------------------------------------------
/gb1/MIFST03.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../gb1/gb1_IgG1FC_relax_best.pdb sample_mutations_mifst C A 1 0.3 0.3 100 ../gb1/resfile.resfile ../gb1/output_MIFST03/
2 |
--------------------------------------------------------------------------------
/gb1/MIFST1.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../gb1/gb1_IgG1FC_relax_best.pdb sample_mutations_mifst C A 1 1 1 100 ../gb1/resfile.resfile ../gb1/output_MIFST1/
2 |
--------------------------------------------------------------------------------
/gb1/MIFST15.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../gb1/gb1_IgG1FC_relax_best.pdb sample_mutations_mifst C A 1 1.5 1.5 100 ../gb1/resfile.resfile ../gb1/output_MIFST15/
2 |
--------------------------------------------------------------------------------
/gb1/RelaxDesign_calc_metrics.sh:
--------------------------------------------------------------------------------
1 | ../calc_metrics.sh ../gb1/results_RelaxSimpleMPNN1.list C A 1 C_A ../gb1/ score_RelaxSimpleMPNN1.sc
2 |
--------------------------------------------------------------------------------
/gb1/RelaxSimpleMPNN1.sh:
--------------------------------------------------------------------------------
1 | ../relax_design.sh ../gb1/gb1_IgG1FC_relax_best.pdb sample_mutations_mpnn C A 1 1 1 100 ../gb1/resfile.resfile ../gb1/output_RelaxSimpleMPNN1/
2 |
--------------------------------------------------------------------------------
/gb1/SimpleMPNN03.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../gb1/gb1_IgG1FC_relax_best.pdb sample_mutations_mpnn C A 1 0.3 0.3 100 ../gb1/resfile.resfile ../gb1/output_SimpleMPNN03/
2 |
--------------------------------------------------------------------------------
/gb1/SimpleMPNN1.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../gb1/gb1_IgG1FC_relax_best.pdb sample_mutations_mpnn C A 1 1 1 100 ../gb1/resfile.resfile ../gb1/output_SimpleMPNN1/
2 |
--------------------------------------------------------------------------------
/gb1/SimpleMPNN15.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../gb1/gb1_IgG1FC_relax_best.pdb sample_mutations_mpnn C A 1 1.5 1.5 100 ../gb1/resfile.resfile ../gb1/output_SimpleMPNN15/
2 |
--------------------------------------------------------------------------------
/gb1/avg03.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../gb1/gb1_IgG1FC_relax_best.pdb sample_mutations_avg C A 1 0.3 0.3 100 ../gb1/resfile.resfile ../gb1/output_avg03/
2 |
--------------------------------------------------------------------------------
/gb1/avg1.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../gb1/gb1_IgG1FC_relax_best.pdb sample_mutations_avg C A 1 1 1 100 ../gb1/resfile.resfile ../gb1/output_avg1/
2 |
--------------------------------------------------------------------------------
/gb1/avg15.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../gb1/gb1_IgG1FC_relax_best.pdb sample_mutations_avg C A 1 1.5 1.5 100 ../gb1/resfile.resfile ../gb1/output_avg15/
2 |
--------------------------------------------------------------------------------
/gb1/calc_metrics.sh:
--------------------------------------------------------------------------------
1 | ../calc_metrics.sh ../gb1/results_FastDesign.list C A 1 C_A ../gb1/ score_FastDesign.sc
2 |
--------------------------------------------------------------------------------
/gb1/gb1_ridge.joblib:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/meilerlab/probabilities_design/31916a3b5792737b49d0833a3396d1da546460c6/gb1/gb1_ridge.joblib
--------------------------------------------------------------------------------
/gfp/ESM03.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../gfp/avGFP_F64L_relax_best.pdb sample_mutations_esm A A 0 0.3 0.3 4 ../gfp/resfile.resfile ../gfp/output_ESM03/
2 |
--------------------------------------------------------------------------------
/gfp/ESM1.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../gfp/avGFP_F64L_relax_best.pdb sample_mutations_esm A A 0 1 1 5 ../gfp/resfile.resfile ../gfp/output_ESM1/
2 |
--------------------------------------------------------------------------------
/gfp/ESM15.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../gfp/avGFP_F64L_relax_best.pdb sample_mutations_esm A A 0 1.5 1.5 4 ../gfp/resfile.resfile ../gfp/output_ESM15/
2 |
--------------------------------------------------------------------------------
/gfp/FastDesign.sh:
--------------------------------------------------------------------------------
1 | ../simple_design_gfp.sh ../gfp/avGFP_F64L_relax_best.pdb if_relax A A 0 0.0 0.0 0 ../gfp/resfile.resfile ../gfp/output_FastDesign/
2 |
--------------------------------------------------------------------------------
/gfp/IC_ESM1.sh:
--------------------------------------------------------------------------------
1 | ../converge_it_gfp.sh ../gfp/avGFP_F64L_relax_best.pdb sample_mutations_esm A A 0 1 1 1 filt_pp_esm ../gfp/resfile.resfile ../gfp/output_IC_ESM1/
2 |
--------------------------------------------------------------------------------
/gfp/IC_MIFST1.sh:
--------------------------------------------------------------------------------
1 | ../converge_it_gfp.sh ../gfp/avGFP_F64L_relax_best.pdb sample_mutations_mifst A A 0 1 1 1 filt_pp_mifst ../gfp/resfile.resfile ../gfp/output_IC_MIFST1/
2 |
--------------------------------------------------------------------------------
/gfp/MIFST03.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../gfp/avGFP_F64L_relax_best.pdb sample_mutations_mifst A A 0 0.3 0.3 4 ../gfp/resfile.resfile ../gfp/output_MIFST03/
2 |
--------------------------------------------------------------------------------
/gfp/MIFST1.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../gfp/avGFP_F64L_relax_best.pdb sample_mutations_mifst A A 0 1 1 5 ../gfp/resfile.resfile ../gfp/output_MIFST1/
2 |
--------------------------------------------------------------------------------
/gfp/MIFST15.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../gfp/avGFP_F64L_relax_best.pdb sample_mutations_mifst A A 0 1.5 1.5 4 ../gfp/resfile.resfile ../gfp/output_MIFST15/
2 |
--------------------------------------------------------------------------------
/gfp/RelaxSimpleMPNN1.sh:
--------------------------------------------------------------------------------
1 | ../relax_design_gfp.sh ../gfp/avGFP_F64L_relax_best.pdb sample_mutations_mpnn A A 0 1 1 5 ../gfp/resfile.resfile ../gfp/output_RelaxSimpleMPNN1/
2 |
--------------------------------------------------------------------------------
/gfp/SimpleMPNN03.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../gfp/avGFP_F64L_relax_best.pdb sample_mutations_mpnn A A 0 0.3 0.3 4 ../gfp/resfile.resfile ../gfp/output_SimpleMPNN03/
2 |
--------------------------------------------------------------------------------
/gfp/SimpleMPNN1.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../gfp/avGFP_F64L_relax_best.pdb sample_mutations_mpnn A A 0 1 1 5 ../gfp/resfile.resfile ../gfp/output_SimpleMPNN1/
2 |
--------------------------------------------------------------------------------
/gfp/SimpleMPNN15.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../gfp/avGFP_F64L_relax_best.pdb sample_mutations_mpnn A A 0 1.5 1.5 4 ../gfp/resfile.resfile ../gfp/output_SimpleMPNN15/
2 |
--------------------------------------------------------------------------------
/gfp/avg03.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../gfp/avGFP_F64L_relax_best.pdb sample_mutations_avg A A 0 0.3 0.3 4 ../gfp/resfile.resfile ../gfp/output_avg03/
2 |
--------------------------------------------------------------------------------
/gfp/avg1.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../gfp/avGFP_F64L_relax_best.pdb sample_mutations_avg A A 0 1 1 5 ../gfp/resfile.resfile ../gfp/output_avg1/
2 |
--------------------------------------------------------------------------------
/gfp/avg15.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../gfp/avGFP_F64L_relax_best.pdb sample_mutations_avg A A 0 1.5 1.5 4 ../gfp/resfile.resfile ../gfp/output_avg15/
2 |
--------------------------------------------------------------------------------
/gfp/calc_metrics.sh:
--------------------------------------------------------------------------------
1 | ../calc_metrics.sh ../gfp/results_FastDesign.list A A 0 B_A ../gfp/ score_FastDesign_v2.sc
2 |
--------------------------------------------------------------------------------
/herceptin/ESM03.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../herceptin/herceptin_her2_relax_best.pdb sample_mutations_esm E A 1 0.3 0.3 100 ../herceptin/resfile.resfile ../herceptin/output_ESM03/
2 |
--------------------------------------------------------------------------------
/herceptin/ESM1.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../herceptin/herceptin_her2_relax_best.pdb sample_mutations_esm E A 1 1 1 100 ../herceptin/resfile.resfile ../herceptin/output_ESM1/
2 |
--------------------------------------------------------------------------------
/herceptin/ESM15.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../herceptin/herceptin_her2_relax_best.pdb sample_mutations_esm E A 1 1.5 1.5 100 ../herceptin/resfile.resfile ../herceptin/output_ESM15/
2 |
--------------------------------------------------------------------------------
/herceptin/FastDesign.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../herceptin/herceptin_her2_relax_best.pdb if_relax E A 1 0.0 0.0 0 ../herceptin/resfile.resfile ../herceptin/output_FastDesign/
2 |
--------------------------------------------------------------------------------
/herceptin/IC_ESM1.sh:
--------------------------------------------------------------------------------
1 | ../converge_it.sh ../herceptin/herceptin_her2_relax_best.pdb sample_mutations_esm E A 1 1 1 1 filt_pp_esm ../herceptin/resfile.resfile ../herceptin/output_IC_ESM1/
2 |
--------------------------------------------------------------------------------
/herceptin/IC_MIFST1.sh:
--------------------------------------------------------------------------------
1 | ../converge_it.sh ../herceptin/herceptin_her2_relax_best.pdb sample_mutations_mifst E A 1 1 1 1 filt_pp_mifst ../herceptin/resfile.resfile ../herceptin/output_IC_MIFST1/
2 |
--------------------------------------------------------------------------------
/herceptin/IC_calc_metrics.sh:
--------------------------------------------------------------------------------
1 | ../calc_metrics.sh ../herceptin/results_IC_ESM1.list E A 1 ED_A ../herceptin/ score_IC_ESM1.sc
2 |
--------------------------------------------------------------------------------
/herceptin/MIFST03.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../herceptin/herceptin_her2_relax_best.pdb sample_mutations_mifst E A 1 0.3 0.3 100 ../herceptin/resfile.resfile ../herceptin/output_MIFST03/
2 |
--------------------------------------------------------------------------------
/herceptin/MIFST1.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../herceptin/herceptin_her2_relax_best.pdb sample_mutations_mifst E A 1 1 1 100 ../herceptin/resfile.resfile ../herceptin/output_MIFST1/
2 |
--------------------------------------------------------------------------------
/herceptin/MIFST15.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../herceptin/herceptin_her2_relax_best.pdb sample_mutations_mifst E A 1 1.5 1.5 100 ../herceptin/resfile.resfile ../herceptin/output_MIFST15/
2 |
--------------------------------------------------------------------------------
/herceptin/RelaxDesign_calc_metrics.sh:
--------------------------------------------------------------------------------
1 | ../calc_metrics.sh ../herceptin/results_RelaxSimpleMPNN1.list E A 1 ED_A ../herceptin/ score_RelaxSimpleMPNN1.sc
2 |
--------------------------------------------------------------------------------
/herceptin/RelaxSimpleMPNN1.sh:
--------------------------------------------------------------------------------
1 | ../relax_design.sh ../herceptin/herceptin_her2_relax_best.pdb sample_mutations_mpnn E A 1 1 1 100 ../herceptin/resfile.resfile ../herceptin/output_RelaxSimpleMPNN1/
2 |
--------------------------------------------------------------------------------
/herceptin/SimpleMPNN03.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../herceptin/herceptin_her2_relax_best.pdb sample_mutations_mpnn E A 1 0.3 0.3 100 ../herceptin/resfile.resfile ../herceptin/output_SimpleMPNN03/
2 |
--------------------------------------------------------------------------------
/herceptin/SimpleMPNN1.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../herceptin/herceptin_her2_relax_best.pdb sample_mutations_mpnn E A 1 1 1 100 ../herceptin/resfile.resfile ../herceptin/output_SimpleMPNN1/
2 |
--------------------------------------------------------------------------------
/herceptin/SimpleMPNN15.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../herceptin/herceptin_her2_relax_best.pdb sample_mutations_mpnn E A 1 1.5 1.5 100 ../herceptin/resfile.resfile ../herceptin/output_SimpleMPNN15/
2 |
--------------------------------------------------------------------------------
/herceptin/avg03.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../herceptin/herceptin_her2_relax_best.pdb sample_mutations_avg E A 1 0.3 0.3 100 ../herceptin/resfile.resfile ../herceptin/output_avg03/
2 |
--------------------------------------------------------------------------------
/herceptin/avg1.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../herceptin/herceptin_her2_relax_best.pdb sample_mutations_avg E A 1 1 1 100 ../herceptin/resfile.resfile ../herceptin/output_avg1/
2 |
--------------------------------------------------------------------------------
/herceptin/avg15.sh:
--------------------------------------------------------------------------------
1 | ../simple_design.sh ../herceptin/herceptin_her2_relax_best.pdb sample_mutations_avg E A 1 1.5 1.5 100 ../herceptin/resfile.resfile ../herceptin/output_avg15/
2 |
--------------------------------------------------------------------------------
/herceptin/calc_metrics.sh:
--------------------------------------------------------------------------------
1 | ../calc_metrics.sh ../herceptin/results_FastDesign.list E A 1 ED_A ../herceptin/ score_FastDesign.sc
2 |
--------------------------------------------------------------------------------
/herceptin/lda_herceptin.joblib:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/meilerlab/probabilities_design/31916a3b5792737b49d0833a3396d1da546460c6/herceptin/lda_herceptin.joblib
--------------------------------------------------------------------------------
/model_training.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "code",
5 | "execution_count": 1,
6 | "metadata": {},
7 | "outputs": [],
8 | "source": [
9 | "import math"
10 | ]
11 | },
12 | {
13 | "cell_type": "code",
14 | "execution_count": 2,
15 | "metadata": {
16 | "tags": []
17 | },
18 | "outputs": [],
19 | "source": [
20 | "import os\n",
21 | "import numpy as np\n",
22 | "import pandas as pd\n",
23 | "from sklearn.ensemble import RandomForestRegressor\n",
24 | "from sklearn.preprocessing import OneHotEncoder\n",
25 | "from sklearn.model_selection import train_test_split\n",
26 | "from sklearn.metrics import mean_squared_error\n",
27 | "from sklearn.linear_model import Ridge\n",
28 | "import matplotlib.pyplot as plt\n",
29 | "import seaborn as sns\n",
30 | "from scipy.stats import spearmanr\n",
31 | "from sklearn import svm\n",
32 | "from joblib import dump, load\n",
33 | "from imblearn.over_sampling import RandomOverSampler\n",
34 | "from sklearn.discriminant_analysis import LinearDiscriminantAnalysis\n",
35 | "from sklearn.metrics import accuracy_score, matthews_corrcoef"
36 | ]
37 | },
38 | {
39 | "cell_type": "code",
40 | "execution_count": 3,
41 | "metadata": {},
42 | "outputs": [],
43 | "source": [
44 | "RANDOM_STATE = 42"
45 | ]
46 | },
47 | {
48 | "cell_type": "code",
49 | "execution_count": 4,
50 | "metadata": {
51 | "tags": []
52 | },
53 | "outputs": [],
54 | "source": [
55 | "def one_hot_encode_sequences(df, column_name):\n",
56 | " # Define a mapping from amino acids to integers\n",
57 | " amino_acids = 'ACDEFGHIKLMNPQRSTVWY'\n",
58 | " amino_acid_to_int = {aa: i for i, aa in enumerate(amino_acids)}\n",
59 | " num_amino_acids = len(amino_acids)\n",
60 | "\n",
61 | " encoded_sequences = []\n",
62 | "\n",
63 | " for sequence in df[column_name]:\n",
64 | " # Initialize a matrix of zeros\n",
65 | " encoded_matrix = np.zeros((len(sequence), num_amino_acids), dtype=int)\n",
66 | "\n",
67 | " for i, aa in enumerate(sequence):\n",
68 | " if aa in amino_acid_to_int:\n",
69 | " # Set the corresponding column to 1\n",
70 | " encoded_matrix[i, amino_acid_to_int[aa]] = 1\n",
71 | " else:\n",
72 | " raise ValueError(f\"Invalid amino acid '{aa}' found in sequence.\")\n",
73 | "\n",
74 | " encoded_sequences.append(encoded_matrix)\n",
75 | "\n",
76 | " return encoded_sequences"
77 | ]
78 | },
79 | {
80 | "cell_type": "markdown",
81 | "metadata": {},
82 | "source": [
83 | "# GFP"
84 | ]
85 | },
86 | {
87 | "cell_type": "code",
88 | "execution_count": 5,
89 | "metadata": {
90 | "tags": []
91 | },
92 | "outputs": [],
93 | "source": [
94 | "df_GFP = pd.read_csv('gfp/gfp_data.csv')"
95 | ]
96 | },
97 | {
98 | "cell_type": "code",
99 | "execution_count": 6,
100 | "metadata": {},
101 | "outputs": [
102 | {
103 | "data": {
104 | "text/html": [
105 | "
\n",
106 | "\n",
119 | "
\n",
120 | " \n",
121 | " \n",
122 | " | \n",
123 | " Sequence | \n",
124 | " Description | \n",
125 | " Ligand | \n",
126 | " Data | \n",
127 | " Units | \n",
128 | " Assay/Protocol | \n",
129 | "
\n",
130 | " \n",
131 | " \n",
132 | " \n",
133 | " 0 | \n",
134 | " MSEGEELFAGVVPILVELDGDVNGHKFSVSGEGEGDATYGKLTLKF... | \n",
135 | " K1E+T7A+V53E+M231K | \n",
136 | " NaN | \n",
137 | " 1.301 | \n",
138 | " unitless | \n",
139 | " Brightness | \n",
140 | "
\n",
141 | " \n",
142 | " 1 | \n",
143 | " MSEGEELFAGVVPILVELDGDVNGHKFSVSGEGEGDATYGKLTLKF... | \n",
144 | " K1E+T7A+M76L+M231T | \n",
145 | " NaN | \n",
146 | " 3.702 | \n",
147 | " unitless | \n",
148 | " Brightness | \n",
149 | "
\n",
150 | " \n",
151 | " 2 | \n",
152 | " MSEGEELFAGVVPILVELDGDVNGHKFSVSGEGEGDATYGKLTLKF... | \n",
153 | " K1E+T7A+N133D | \n",
154 | " NaN | \n",
155 | " 3.689 | \n",
156 | " unitless | \n",
157 | " Brightness | \n",
158 | "
\n",
159 | " \n",
160 | " 3 | \n",
161 | " MSEGEELFPGVVPILVELDGDVNGHKFSVSGEGEGDATYGKLTPKF... | \n",
162 | " K1E+T7P+L42P+Y180N+T184S+A204T | \n",
163 | " NaN | \n",
164 | " 1.301 | \n",
165 | " unitless | \n",
166 | " Brightness | \n",
167 | "
\n",
168 | " \n",
169 | " 4 | \n",
170 | " MSEGEELFSGVVPILVELDGDVNGHKFSVSGEGEGDATYGKLTLKF... | \n",
171 | " K1E+T7S+F98Y+K154R+E170G | \n",
172 | " NaN | \n",
173 | " 3.647 | \n",
174 | " unitless | \n",
175 | " Brightness | \n",
176 | "
\n",
177 | " \n",
178 | "
\n",
179 | "
"
180 | ],
181 | "text/plain": [
182 | " Sequence \\\n",
183 | "0 MSEGEELFAGVVPILVELDGDVNGHKFSVSGEGEGDATYGKLTLKF... \n",
184 | "1 MSEGEELFAGVVPILVELDGDVNGHKFSVSGEGEGDATYGKLTLKF... \n",
185 | "2 MSEGEELFAGVVPILVELDGDVNGHKFSVSGEGEGDATYGKLTLKF... \n",
186 | "3 MSEGEELFPGVVPILVELDGDVNGHKFSVSGEGEGDATYGKLTPKF... \n",
187 | "4 MSEGEELFSGVVPILVELDGDVNGHKFSVSGEGEGDATYGKLTLKF... \n",
188 | "\n",
189 | " Description Ligand Data Units Assay/Protocol \n",
190 | "0 K1E+T7A+V53E+M231K NaN 1.301 unitless Brightness \n",
191 | "1 K1E+T7A+M76L+M231T NaN 3.702 unitless Brightness \n",
192 | "2 K1E+T7A+N133D NaN 3.689 unitless Brightness \n",
193 | "3 K1E+T7P+L42P+Y180N+T184S+A204T NaN 1.301 unitless Brightness \n",
194 | "4 K1E+T7S+F98Y+K154R+E170G NaN 3.647 unitless Brightness "
195 | ]
196 | },
197 | "execution_count": 6,
198 | "metadata": {},
199 | "output_type": "execute_result"
200 | }
201 | ],
202 | "source": [
203 | "df_GFP.head()"
204 | ]
205 | },
206 | {
207 | "cell_type": "code",
208 | "execution_count": 7,
209 | "metadata": {},
210 | "outputs": [],
211 | "source": [
212 | "# GFP sequence and truncated version to match structure/dataset\n",
213 | "wt = 'MSKGEELFTGVVPILVELDGDVNGHKFSVSGEGEGDATYGKLTLKFICTTGKLPVPWPTLVTTLSYGVQCFSRYPDHMKQHDFFKSAMPEGYVQERTIFFKDDGNYKTRAEVKFEGDTLVNRIELKGIDFKEDGNILGHKLEYNYNSHNVYIMADKQKNGIKVNFKIRHNIEDGSVQLADHYQQNTPIGDGPVLLPDNHYLSTQSALSKDPNEKRDHMVLLEFVTAAGITHGMDELYK'\n",
214 | "wt_trunc = 'KGEELFTGVVPILVELDGDVNGHKFSVSGEGEGDATYGKLTLKFICTTGKLPVPWPTLVTTLSYGVQCFSRYPDHMKQHDFFKSAMPEGYVQERTIFFKDDGNYKTRAEVKFEGDTLVNRIELKGIDFKEDGNILGHKLEYNYNSHNVYIMADKQKNGIKVNFKIRHNIEDGSVQLADHYQQNTPIGDGPVLLPDNHYLSTQSALSKDPNEKRDHMVLLEFVTAAGITHGMDELYK'\n"
215 | ]
216 | },
217 | {
218 | "cell_type": "code",
219 | "execution_count": 8,
220 | "metadata": {},
221 | "outputs": [],
222 | "source": [
223 | "# Function to parse mutations and count\n",
224 | "def count_mutations(df, wt_sequence):\n",
225 | " # Initialize a dictionary to count mutations\n",
226 | " mutation_count = {i: 0 for i in range(1, len(wt_sequence) + 1)}\n",
227 | "\n",
228 | " # Iterate over each row in the DataFrame\n",
229 | " for index, row in df.iterrows():\n",
230 | " # Split the mutations by '+'\n",
231 | " mutations = row['Description'].split('+')\n",
232 | "\n",
233 | " # Iterate over each mutation\n",
234 | " for mutation in mutations:\n",
235 | " # Extract the position and compare with wildtype\n",
236 | " position = int(''.join(filter(str.isdigit, mutation)))\n",
237 | " wt_amino_acid = wt_sequence[position - 1]\n",
238 | " mut_amino_acid = mutation[-1]\n",
239 | "\n",
240 | " # Check if mutation is different from wildtype\n",
241 | " if wt_amino_acid != mut_amino_acid:\n",
242 | " mutation_count[position] += 1\n",
243 | "\n",
244 | " return mutation_count\n",
245 | "\n",
246 | "# Count the mutations\n",
247 | "mutation_counts = count_mutations(df_GFP, wt_trunc)"
248 | ]
249 | },
250 | {
251 | "cell_type": "code",
252 | "execution_count": 9,
253 | "metadata": {},
254 | "outputs": [
255 | {
256 | "data": {
257 | "text/plain": [
258 | "[117, 118, 236]"
259 | ]
260 | },
261 | "execution_count": 9,
262 | "metadata": {},
263 | "output_type": "execute_result"
264 | }
265 | ],
266 | "source": [
267 | "# Extract positions with zero mutations, we keep those fixed during design as we have no information on them\n",
268 | "zero_mutation_positions = [position for position, count in mutation_counts.items() if count == 0]\n",
269 | "\n",
270 | "# Print the positions with zero mutations\n",
271 | "zero_mutation_positions\n",
272 | "\n"
273 | ]
274 | },
275 | {
276 | "cell_type": "code",
277 | "execution_count": 10,
278 | "metadata": {
279 | "tags": []
280 | },
281 | "outputs": [],
282 | "source": [
283 | "# one hot encode\n",
284 | "df_GFP['encoded'] = one_hot_encode_sequences(df_GFP, 'Sequence')\n",
285 | "# Flatten the encoded sequence\n",
286 | "df_GFP['Flattened_Encoded'] = df_GFP['encoded'].apply(lambda x: x.flatten())\n",
287 | "# Create a feature matrix X and target vector y\n",
288 | "X = np.stack(df_GFP['Flattened_Encoded'].values)\n",
289 | "y = df_GFP['Data'].values"
290 | ]
291 | },
292 | {
293 | "cell_type": "code",
294 | "execution_count": 11,
295 | "metadata": {
296 | "tags": []
297 | },
298 | "outputs": [],
299 | "source": [
300 | "# Split the data into training and testing sets\n",
301 | "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1, random_state=RANDOM_STATE)"
302 | ]
303 | },
304 | {
305 | "cell_type": "code",
306 | "execution_count": 12,
307 | "metadata": {
308 | "scrolled": true,
309 | "tags": []
310 | },
311 | "outputs": [
312 | {
313 | "data": {
314 | "text/plain": [
315 | "Ridge(max_iter=1000000, solver='lsqr', tol=0.0001)"
316 | ]
317 | },
318 | "execution_count": 12,
319 | "metadata": {},
320 | "output_type": "execute_result"
321 | }
322 | ],
323 | "source": [
324 | "model = Ridge(alpha=1.0, solver='lsqr', tol=1e-4, max_iter=1000000)\n",
325 | "model.fit(X_train, y_train)"
326 | ]
327 | },
328 | {
329 | "cell_type": "code",
330 | "execution_count": 13,
331 | "metadata": {
332 | "tags": []
333 | },
334 | "outputs": [
335 | {
336 | "name": "stdout",
337 | "output_type": "stream",
338 | "text": [
339 | "Spearman Correlation: 0.7676198648740054\n"
340 | ]
341 | }
342 | ],
343 | "source": [
344 | "# Predict on the test set\n",
345 | "y_pred = model.predict(X_test)\n",
346 | "spearman_corr, p_value = spearmanr(y_pred, y_test)\n",
347 | "print(\"Spearman Correlation:\", spearman_corr)"
348 | ]
349 | },
350 | {
351 | "cell_type": "code",
352 | "execution_count": 14,
353 | "metadata": {},
354 | "outputs": [
355 | {
356 | "data": {
357 | "text/plain": [
358 | "['gfp/gfp_ridge.joblib']"
359 | ]
360 | },
361 | "execution_count": 14,
362 | "metadata": {},
363 | "output_type": "execute_result"
364 | }
365 | ],
366 | "source": [
367 | "dump(model, 'gfp/gfp_ridge.joblib') # save model for later use (also provided as file in the repo)"
368 | ]
369 | },
370 | {
371 | "cell_type": "markdown",
372 | "metadata": {},
373 | "source": [
374 | "# GB1"
375 | ]
376 | },
377 | {
378 | "cell_type": "code",
379 | "execution_count": 15,
380 | "metadata": {},
381 | "outputs": [
382 | {
383 | "name": "stderr",
384 | "output_type": "stream",
385 | "text": [
386 | "/home/me/conda/envs/probs_design/lib/python3.7/site-packages/IPython/core/interactiveshell.py:3552: DtypeWarning: Columns (8,10,12) have mixed types.Specify dtype option on import or set low_memory=False.\n",
387 | " exec(code_obj, self.user_global_ns, self.user_ns)\n"
388 | ]
389 | }
390 | ],
391 | "source": [
392 | "df_GB1 = pd.read_csv('gb1/gb1_mutations_full_data.csv')"
393 | ]
394 | },
395 | {
396 | "cell_type": "code",
397 | "execution_count": 16,
398 | "metadata": {},
399 | "outputs": [
400 | {
401 | "data": {
402 | "text/html": [
403 | "\n",
404 | "\n",
417 | "
\n",
418 | " \n",
419 | " \n",
420 | " | \n",
421 | " Variants | \n",
422 | " HD | \n",
423 | " Count input | \n",
424 | " Count selected | \n",
425 | " Fitness | \n",
426 | " sequence | \n",
427 | " keep | \n",
428 | " one_vs_rest | \n",
429 | " one_vs_rest_validation | \n",
430 | " two_vs_rest | \n",
431 | " two_vs_rest_validation | \n",
432 | " three_vs_rest | \n",
433 | " three_vs_rest_validation | \n",
434 | " sampled | \n",
435 | " sampled_validation | \n",
436 | " low_vs_high | \n",
437 | " low_vs_high_validation | \n",
438 | "
\n",
439 | " \n",
440 | " \n",
441 | " \n",
442 | " 0 | \n",
443 | " VDGV | \n",
444 | " 0 | \n",
445 | " 92735 | \n",
446 | " 338346 | \n",
447 | " 1.000000 | \n",
448 | " MQYKLILNGKTLKGETTTEAVDAATAEKVFKQYANDNGVDGEWTYD... | \n",
449 | " True | \n",
450 | " train | \n",
451 | " NaN | \n",
452 | " train | \n",
453 | " NaN | \n",
454 | " train | \n",
455 | " NaN | \n",
456 | " train | \n",
457 | " NaN | \n",
458 | " test | \n",
459 | " NaN | \n",
460 | "
\n",
461 | " \n",
462 | " 1 | \n",
463 | " ADGV | \n",
464 | " 1 | \n",
465 | " 34 | \n",
466 | " 43 | \n",
467 | " 0.061910 | \n",
468 | " MQYKLILNGKTLKGETTTEAVDAATAEKVFKQYANDNGADGEWTYD... | \n",
469 | " False | \n",
470 | " NaN | \n",
471 | " NaN | \n",
472 | " NaN | \n",
473 | " NaN | \n",
474 | " NaN | \n",
475 | " NaN | \n",
476 | " NaN | \n",
477 | " NaN | \n",
478 | " NaN | \n",
479 | " NaN | \n",
480 | "
\n",
481 | " \n",
482 | " 2 | \n",
483 | " CDGV | \n",
484 | " 1 | \n",
485 | " 850 | \n",
486 | " 641 | \n",
487 | " 0.242237 | \n",
488 | " MQYKLILNGKTLKGETTTEAVDAATAEKVFKQYANDNGCDGEWTYD... | \n",
489 | " False | \n",
490 | " NaN | \n",
491 | " NaN | \n",
492 | " NaN | \n",
493 | " NaN | \n",
494 | " NaN | \n",
495 | " NaN | \n",
496 | " NaN | \n",
497 | " NaN | \n",
498 | " NaN | \n",
499 | " NaN | \n",
500 | "
\n",
501 | " \n",
502 | " 3 | \n",
503 | " DDGV | \n",
504 | " 1 | \n",
505 | " 63 | \n",
506 | " 63 | \n",
507 | " 0.006472 | \n",
508 | " MQYKLILNGKTLKGETTTEAVDAATAEKVFKQYANDNGDDGEWTYD... | \n",
509 | " False | \n",
510 | " NaN | \n",
511 | " NaN | \n",
512 | " NaN | \n",
513 | " NaN | \n",
514 | " NaN | \n",
515 | " NaN | \n",
516 | " NaN | \n",
517 | " NaN | \n",
518 | " NaN | \n",
519 | " NaN | \n",
520 | "
\n",
521 | " \n",
522 | " 4 | \n",
523 | " EDGV | \n",
524 | " 1 | \n",
525 | " 841 | \n",
526 | " 190 | \n",
527 | " 0.032719 | \n",
528 | " MQYKLILNGKTLKGETTTEAVDAATAEKVFKQYANDNGEDGEWTYD... | \n",
529 | " False | \n",
530 | " NaN | \n",
531 | " NaN | \n",
532 | " NaN | \n",
533 | " NaN | \n",
534 | " NaN | \n",
535 | " NaN | \n",
536 | " NaN | \n",
537 | " NaN | \n",
538 | " NaN | \n",
539 | " NaN | \n",
540 | "
\n",
541 | " \n",
542 | "
\n",
543 | "
"
544 | ],
545 | "text/plain": [
546 | " Variants HD Count input Count selected Fitness \\\n",
547 | "0 VDGV 0 92735 338346 1.000000 \n",
548 | "1 ADGV 1 34 43 0.061910 \n",
549 | "2 CDGV 1 850 641 0.242237 \n",
550 | "3 DDGV 1 63 63 0.006472 \n",
551 | "4 EDGV 1 841 190 0.032719 \n",
552 | "\n",
553 | " sequence keep one_vs_rest \\\n",
554 | "0 MQYKLILNGKTLKGETTTEAVDAATAEKVFKQYANDNGVDGEWTYD... True train \n",
555 | "1 MQYKLILNGKTLKGETTTEAVDAATAEKVFKQYANDNGADGEWTYD... False NaN \n",
556 | "2 MQYKLILNGKTLKGETTTEAVDAATAEKVFKQYANDNGCDGEWTYD... False NaN \n",
557 | "3 MQYKLILNGKTLKGETTTEAVDAATAEKVFKQYANDNGDDGEWTYD... False NaN \n",
558 | "4 MQYKLILNGKTLKGETTTEAVDAATAEKVFKQYANDNGEDGEWTYD... False NaN \n",
559 | "\n",
560 | " one_vs_rest_validation two_vs_rest two_vs_rest_validation three_vs_rest \\\n",
561 | "0 NaN train NaN train \n",
562 | "1 NaN NaN NaN NaN \n",
563 | "2 NaN NaN NaN NaN \n",
564 | "3 NaN NaN NaN NaN \n",
565 | "4 NaN NaN NaN NaN \n",
566 | "\n",
567 | " three_vs_rest_validation sampled sampled_validation low_vs_high \\\n",
568 | "0 NaN train NaN test \n",
569 | "1 NaN NaN NaN NaN \n",
570 | "2 NaN NaN NaN NaN \n",
571 | "3 NaN NaN NaN NaN \n",
572 | "4 NaN NaN NaN NaN \n",
573 | "\n",
574 | " low_vs_high_validation \n",
575 | "0 NaN \n",
576 | "1 NaN \n",
577 | "2 NaN \n",
578 | "3 NaN \n",
579 | "4 NaN "
580 | ]
581 | },
582 | "execution_count": 16,
583 | "metadata": {},
584 | "output_type": "execute_result"
585 | }
586 | ],
587 | "source": [
588 | "df_GB1.head()"
589 | ]
590 | },
591 | {
592 | "cell_type": "markdown",
593 | "metadata": {},
594 | "source": [
595 | "### here the keep variable is used to balance the dataset, as most mutations destroy fitness as seen in the boxplot below"
596 | ]
597 | },
598 | {
599 | "cell_type": "code",
600 | "execution_count": 17,
601 | "metadata": {},
602 | "outputs": [
603 | {
604 | "data": {
605 | "text/plain": [
606 | ""
607 | ]
608 | },
609 | "execution_count": 17,
610 | "metadata": {},
611 | "output_type": "execute_result"
612 | },
613 | {
614 | "data": {
615 | "image/png": "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H08//XRMmzYtqqqq4utf/3q5x9upffe7340NGzbEiBEjokuXLtHY2BiXXXZZnHLKKeUeraJUTCA02/JPR5dKpR3656T5aKZOnRovvPBCPPHEE+UehYhYvXp1TJ8+PZYsWRLV1dXlHodWmpqaYty4cXH55ZdHRMR+++0Xf/rTn+Lmm28WCGV21113xR133BGLFy+OUaNGxYoVK2LGjBkxZMiQOP3008s9XsWomECora2NLl26pLMFa9asSWcVKI+zzz477r///nj88cc/1j/1Tec9++yzsWbNmth///1btjU2Nsbjjz8eN954YzQ0NESXLl3KOOHOa/DgwfH5z3++zbaRI0fGL37xizJNRLPzzjsvLrjggjj55JMjImLMmDHx2muvxdy5cwVCKxXzHoTu3bvH/vvvH0uXLm2zfenSpTFhwoQyTUXEf87iTJ06Ne699974zW9+E8OHDy/3SPzXYYcdFitXrowVK1a0XMaNGxf19fWxYsUKcVBGBx10UPpx4Jdffjn22GOPMk1Es3feeSeKxbYvf126dPFjjluomDMIERGzZs2K0047LcaNGxdf/OIXY968ebFq1ar49re/Xe7RdmpTpkyJxYsXxy9/+cvo06dPy1mefv36RY8ePco83c6tT58+6b0gvXr1igEDBniPSJnNnDkzJkyYEJdffnmceOKJ8fTTT8e8efNi3rx55R5tp3fMMcfEZZddFsOGDYtRo0bFc889Fz/+8Y/jm9/8ZrlHqyylCvOTn/yktMcee5S6d+9eGjt2bGnZsmXlHmmnFxHtXm6//fZyj0Y7Dj300NL06dPLPQalUumBBx4ojR49ulRVVVUaMWJEad68eeUeiVKptHHjxtL06dNLw4YNK1VXV5f22muv0oUXXlhqaGgo92gVpaJ+DwIAUBkq5j0IAEDlEAgAQCIQAIBEIAAAiUAAABKBAAAkAgEASAQCAJAIBPgfNHHixJgxY0a5xwA+xQQCfIp94xvfiEKhkC5XXnllzJkzp+V2e+65Z1x77bXlGxT41KmoP9YEfHhHHHFE3H777W227brrrv6SI/CROIMAn3JVVVUxaNCgNpfDDjus5VsMEydOjNdeey1mzpzZcoYhImLBggVRU1MTv/71r2PkyJHRu3fvOOKII+If//hHm/Vvv/32GDlyZFRXV8eIESPipptuatn3/vvvx9SpU2Pw4MFRXV0de+65Z8ydO7dl/yWXXBLDhg2LqqqqGDJkSEybNu3jf0CAHcIZBPgfd++998YXvvCF+Na3vhVnnXVWm33vvPNO/OhHP4qFCxdGsViMyZMnx7nnnhuLFi2KiIhbb701Lr744rjxxhtjv/32i+eeey7OOuus6NWrV5x++ulx/fXXx/333x933313DBs2LFavXh2rV6+OiIh77rknrrnmmrjzzjtj1KhR8eabb8bzzz//iX/+wPYRCPAp9+CDD0bv3r1brh955JFt9vfv3z+6dOkSffr0iUGDBrXZ98EHH8Qtt9wSe++9d0RETJ06NWbPnt2yf86cOXH11VfH8ccfHxERw4cPjxdffDF++tOfxumnnx6rVq2Kz372s3HwwQdHoVCIPfbYo+XYVatWxaBBg+Lwww+Pbt26xbBhw+LAAw/c4Z8/8PHwLQb4lPvSl74UK1asaLlcf/31nT62Z8+eLXEQETF48OBYs2ZNRES89dZbsXr16jjjjDOid+/eLZdLL700/vrXv0bEf94kuWLFivjc5z4X06ZNiyVLlrSsdcIJJ8S7774be+21V5x11llx3333xebNm3fQZw183JxBgE+5Xr16xWc+85ntOrZbt25trhcKhSiVShER0dTUFBH/+TbD+PHj29yu+Q2QY8eOjb/97W/x8MMPxyOPPBInnnhiHH744XHPPffE0KFD46WXXoqlS5fGI488Et/5znfiqquuimXLlqX7BSqPQICdQPfu3aOxsfFDHVNXVxe77bZbvPLKK1FfX9/h7fr27RsnnXRSnHTSSfG1r30tjjjiiHj77bejf//+0aNHjzj22GPj2GOPjSlTpsSIESNi5cqVMXbs2I/6KQEfM4EAO4E999wzHn/88Tj55JOjqqoqamtrO3XcJZdcEtOmTYu+ffvGkUceGQ0NDfHMM8/E+vXrY9asWXHNNdfE4MGDY999941isRg///nPY9CgQVFTUxMLFiyIxsbGGD9+fPTs2TMWLlwYPXr0aPM+BaByeQ8C7ARmz54dr776auy9996x6667dvq4M888M2677bZYsGBBjBkzJg499NBYsGBBDB8+PCIievfuHVdccUWMGzcuDjjggHj11VfjoYceimKxGDU1NXHrrbfGQQcdFPvss088+uij8cADD8SAAQM+rk8T2IEKpeZvOAIA/JczCABAIhAAgEQgAACJQAAAEoEAACQCAQBIBAIAkAgEACARCABAIhAAgEQgAADJ/wOponTi2ViougAAAABJRU5ErkJggg==",
616 | "text/plain": [
617 | ""
618 | ]
619 | },
620 | "metadata": {},
621 | "output_type": "display_data"
622 | }
623 | ],
624 | "source": [
625 | "sns.boxplot(df_GB1.Fitness)"
626 | ]
627 | },
628 | {
629 | "cell_type": "code",
630 | "execution_count": 18,
631 | "metadata": {},
632 | "outputs": [
633 | {
634 | "data": {
635 | "text/plain": [
636 | ""
637 | ]
638 | },
639 | "execution_count": 18,
640 | "metadata": {},
641 | "output_type": "execute_result"
642 | },
643 | {
644 | "data": {
645 | "image/png": "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5cqYNGlS/Oc//yl6NDpZsGBBzJkzJ3bYYYeiRyEi3nnnndh1112jT58+MX/+/Hj++efjkksuicbGxqJH2+hdeOGFce2118ZVV10Vf/nLX+Kiiy6Kiy++OK688sqiR6sqVfVjjuPHj49x48bFNddc07FszJgxsf/++8fs2bMLnIzO3nzzzRg2bFg89NBDsfvuuxc9DhHx73//O8aNGxdXX311nHfeebHjjjvGZZddVvRYG7XTTjst/vCHP7gKWoX22WefaG5ujhtuuKFj2de//vXo169fzJ07t8DJqkvVXEH44IMP4sknn4xJkyZ1WT5p0qR49NFHC5qK7rz77rsRETFkyJCCJ6HdcccdF1/72tdir732KnoU/ufuu++OlpaWOOigg2LYsGGx0047xXXXXVf0WETEbrvtFg8++GC8+OKLERHxzDPPxCOPPBJf/epXC56suqzzH2ta3956661obW2N5ubmLsubm5vj9ddfL2gqVlWpVGLGjBmx2267xdixY4seh4i49dZb46mnnooFCxYUPQqdvPTSS3HNNdfEjBkz4vTTT4/HH388TjzxxKirq4sjjzyy6PE2at/73vfi3XffjdGjR0dNTU20trbG+eefH4cddljRo1WVqgmEdqv+6ehKpbJe/5w0H8/xxx8fzz77bDzyyCNFj0JELF68OKZNmxb33Xdf1NfXFz0OnbS1tUVLS0tccMEFERGx0047xZ///Oe45pprBELBbrvttrj55ptj3rx5sd1228XChQtj+vTpscUWW8RRRx1V9HhVo2oCoampKWpqatLVgjfeeCNdVaAYJ5xwQtx9993x8MMPb9A/9U3PPfnkk/HGG2/Ezjvv3LGstbU1Hn744bjqqqtixYoVUVNTU+CEG6/NN988Pv/5z3dZNmbMmPj5z39e0ES0O+WUU+K0006LQw89NCIitt9++3jllVdi9uzZAqGTqnkNQt++fWPnnXeO+++/v8vy+++/PyZMmFDQVET89yrO8ccfH3feeWf89re/jVGjRhU9Ev+z5557xnPPPRcLFy7seGtpaYkpU6bEwoULxUGBdt111/TjwC+++GJstdVWBU1Eu/feey/K5a4PfzU1NX7McRVVcwUhImLGjBlxxBFHREtLS3zpS1+KOXPmxKJFi+I73/lO0aNt1I477riYN29e/PKXv4yBAwd2XOUZPHhwNDQ0FDzdxm3gwIHptSD9+/ePoUOHeo1IwU466aSYMGFCXHDBBXHwwQfH448/HnPmzIk5c+YUPdpGb999943zzz8/Ro4cGdttt108/fTT8aMf/Si+9a1vFT1adalUmR//+MeVrbbaqtK3b9/KuHHjKg899FDRI230IqLbtxtvvLHo0ejGHnvsUZk2bVrRY1CpVO65557K2LFjK3V1dZXRo0dX5syZU/RIVCqVpUuXVqZNm1YZOXJkpb6+vrLNNttUzjjjjMqKFSuKHq2qVNXvQQAAqkPVvAYBAKgeAgEASAQCAJAIBAAgEQgAQCIQAIBEIAAAiUAAABKBAJ9CEydOjOnTpxc9BtCLCQToxb75zW9GqVRKbxdddFGce+65Hbfbeuut47LLLituUKDXqao/1gR8dHvvvXfceOONXZZtuumm/pIj8LG4ggC9XF1dXWy22WZd3vbcc8+OpxgmTpwYr7zySpx00kkdVxgiIm666aZobGyM3/zmNzFmzJgYMGBA7L333vHPf/6zy/5vvPHGGDNmTNTX18fo0aPj6quv7lj3wQcfxPHHHx+bb7551NfXx9Zbbx2zZ8/uWH/OOefEyJEjo66uLrbYYos48cQTN/wJAdYLVxDgU+7OO++ML3zhC/Htb387jj322C7r3nvvvfjhD38Yc+fOjXK5HFOnTo2ZM2fGLbfcEhER1113XZx99tlx1VVXxU477RRPP/10HHvssdG/f/846qij4oorroi77747br/99hg5cmQsXrw4Fi9eHBERd9xxR1x66aVx6623xnbbbRevv/56PPPMM5/45w+sG4EAvdy9994bAwYM6Ph48uTJXdYPGTIkampqYuDAgbHZZpt1Wffhhx/GtddeG9tuu21ERBx//PExa9asjvXnnntuXHLJJXHggQdGRMSoUaPi+eefj5/85Cdx1FFHxaJFi+Kzn/1s7LbbblEqlWKrrbbq2HbRokWx2WabxV577RV9+vSJkSNHxhe/+MX1/vkDG4anGKCX+/KXvxwLFy7seLviiit6vG2/fv064iAiYvPNN4833ngjIiLefPPNWLx4cRx99NExYMCAjrfzzjsv/va3v0XEf18kuXDhwvjc5z4XJ554Ytx3330d+zrooIPi/fffj2222SaOPfbYuOuuu2LlypXr6bMGNjRXEKCX69+/f3zmM59Zp2379OnT5eNSqRSVSiUiItra2iLiv08zjB8/vsvt2l8AOW7cuPj73/8e8+fPjwceeCAOPvjg2GuvveKOO+6IESNGxAsvvBD3339/PPDAA/Hd7343Lr744njooYfScYHqIxBgI9C3b99obW39SNs0NzfHlltuGS+99FJMmTJltbcbNGhQHHLIIXHIIYfEN77xjdh7773j7bffjiFDhkRDQ0Pst99+sd9++8Vxxx0Xo0ePjueeey7GjRv3cT8lYAMTCLAR2HrrrePhhx+OQw89NOrq6qKpqalH251zzjlx4oknxqBBg2Ly5MmxYsWKeOKJJ+Kdd96JGTNmxKWXXhqbb7557LjjjlEul+NnP/tZbLbZZtHY2Bg33XRTtLa2xvjx46Nfv34xd+7caGho6PI6BaB6eQ0CbARmzZoVL7/8cmy77bax6aab9ni7Y445Jq6//vq46aabYvvtt4899tgjbrrpphg1alRERAwYMCAuvPDCaGlpiV122SVefvnl+NWvfhXlcjkaGxvjuuuui1133TV22GGHePDBB+Oee+6JoUOHbqhPE1iPSpX2JxwBAP7HFQQAIBEIAEAiEACARCAAAIlAAAASgQAAJAIBAEgEAgCQCAQAIBEIAEAiEACA5P8B/jboHEoN+BQAAAAASUVORK5CYII=",
646 | "text/plain": [
647 | ""
648 | ]
649 | },
650 | "metadata": {},
651 | "output_type": "display_data"
652 | }
653 | ],
654 | "source": [
655 | "sns.boxplot(df_GB1[df_GB1.keep == True].Fitness)"
656 | ]
657 | },
658 | {
659 | "cell_type": "code",
660 | "execution_count": 19,
661 | "metadata": {},
662 | "outputs": [
663 | {
664 | "name": "stdout",
665 | "output_type": "stream",
666 | "text": [
667 | "8733\n",
668 | "149361\n"
669 | ]
670 | }
671 | ],
672 | "source": [
673 | "print(len(df_GB1[df_GB1.keep == True]))\n",
674 | "print(len(df_GB1))"
675 | ]
676 | },
677 | {
678 | "cell_type": "code",
679 | "execution_count": 20,
680 | "metadata": {},
681 | "outputs": [],
682 | "source": [
683 | "df_GB1 = df_GB1[df_GB1.keep == True].copy()"
684 | ]
685 | },
686 | {
687 | "cell_type": "code",
688 | "execution_count": 21,
689 | "metadata": {},
690 | "outputs": [],
691 | "source": [
692 | "df_GB1['trunc_seq'] = df_GB1['sequence'].apply(lambda seq: 'MTYKLIL'+seq[7:56]) # truncate it to the PDB sequence\n",
693 | "df_GB1['encoded'] = one_hot_encode_sequences(df_GB1, 'trunc_seq')\n",
694 | "df_GB1['Flattened_Encoded'] = df_GB1['encoded'].apply(lambda x: x.flatten())"
695 | ]
696 | },
697 | {
698 | "cell_type": "code",
699 | "execution_count": 22,
700 | "metadata": {},
701 | "outputs": [],
702 | "source": [
703 | "# Create a feature matrix X and target vector y\n",
704 | "X = np.stack(df_GB1['Flattened_Encoded'].values)\n",
705 | "y = df_GB1['Fitness'].values"
706 | ]
707 | },
708 | {
709 | "cell_type": "code",
710 | "execution_count": 23,
711 | "metadata": {},
712 | "outputs": [],
713 | "source": [
714 | "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1, random_state=RANDOM_STATE)"
715 | ]
716 | },
717 | {
718 | "cell_type": "code",
719 | "execution_count": 24,
720 | "metadata": {},
721 | "outputs": [
722 | {
723 | "data": {
724 | "text/plain": [
725 | "Ridge(max_iter=1000000, solver='lsqr', tol=0.0001)"
726 | ]
727 | },
728 | "execution_count": 24,
729 | "metadata": {},
730 | "output_type": "execute_result"
731 | }
732 | ],
733 | "source": [
734 | "model = Ridge(alpha=1.0, solver='lsqr', tol=1e-4, max_iter=1000000)\n",
735 | "model.fit(X_train, y_train)"
736 | ]
737 | },
738 | {
739 | "cell_type": "code",
740 | "execution_count": 25,
741 | "metadata": {},
742 | "outputs": [],
743 | "source": [
744 | "y_pred = model.predict(X_test)"
745 | ]
746 | },
747 | {
748 | "cell_type": "code",
749 | "execution_count": 26,
750 | "metadata": {},
751 | "outputs": [
752 | {
753 | "name": "stdout",
754 | "output_type": "stream",
755 | "text": [
756 | "Spearman Correlation: 0.8098051820702165\n",
757 | "P-value: 3.810811979116243e-204\n"
758 | ]
759 | }
760 | ],
761 | "source": [
762 | "# Evaluate the model\n",
763 | "spearman_corr, p_value = spearmanr(y_pred, y_test)\n",
764 | "print(\"Spearman Correlation:\", spearman_corr)\n",
765 | "print(\"P-value:\", p_value)"
766 | ]
767 | },
768 | {
769 | "cell_type": "code",
770 | "execution_count": 27,
771 | "metadata": {},
772 | "outputs": [
773 | {
774 | "data": {
775 | "text/plain": [
776 | "['gb1/gb1_ridge.joblib']"
777 | ]
778 | },
779 | "execution_count": 27,
780 | "metadata": {},
781 | "output_type": "execute_result"
782 | }
783 | ],
784 | "source": [
785 | "dump(model, 'gb1/gb1_ridge.joblib') # save the model (already provided in github repo as well)"
786 | ]
787 | },
788 | {
789 | "cell_type": "markdown",
790 | "metadata": {},
791 | "source": [
792 | "# Emi"
793 | ]
794 | },
795 | {
796 | "cell_type": "code",
797 | "execution_count": 28,
798 | "metadata": {},
799 | "outputs": [
800 | {
801 | "data": {
802 | "text/html": [
803 | "\n",
804 | "\n",
817 | "
\n",
818 | " \n",
819 | " \n",
820 | " | \n",
821 | " VH Sequence | \n",
822 | " ANT Binding | \n",
823 | " OVA Binding | \n",
824 | " pI_seq | \n",
825 | "
\n",
826 | " \n",
827 | " \n",
828 | " \n",
829 | " 0 | \n",
830 | " QVQLVQSGAEVKKPGASVKVSCKASGYTFTDYYMHWVRQAPGQGLE... | \n",
831 | " 0 | \n",
832 | " 1 | \n",
833 | " 8.64 | \n",
834 | "
\n",
835 | " \n",
836 | " 1 | \n",
837 | " QVQLVQSGAEVKKPGASVKVSCKASGYTFTDYYMHWVRQAPGQGLE... | \n",
838 | " 1 | \n",
839 | " 1 | \n",
840 | " 8.96 | \n",
841 | "
\n",
842 | " \n",
843 | " 2 | \n",
844 | " QVQLVQSGAEVKKPGASVKVSCKASGYTFTDYFMHWVRQAPGQGLE... | \n",
845 | " 0 | \n",
846 | " 1 | \n",
847 | " 7.96 | \n",
848 | "
\n",
849 | " \n",
850 | " 3 | \n",
851 | " QVQLVQSGAEVKKPGASVKVSCKASGYTFTDYSMHWVRQAPGQGLE... | \n",
852 | " 1 | \n",
853 | " 1 | \n",
854 | " 8.60 | \n",
855 | "
\n",
856 | " \n",
857 | " 4 | \n",
858 | " QVQLVQSGAEVKKPGASVKVSCKASGYTFTDYFMHWVRQAPGQGLE... | \n",
859 | " 0 | \n",
860 | " 1 | \n",
861 | " 7.96 | \n",
862 | "
\n",
863 | " \n",
864 | "
\n",
865 | "
"
866 | ],
867 | "text/plain": [
868 | " VH Sequence ANT Binding \\\n",
869 | "0 QVQLVQSGAEVKKPGASVKVSCKASGYTFTDYYMHWVRQAPGQGLE... 0 \n",
870 | "1 QVQLVQSGAEVKKPGASVKVSCKASGYTFTDYYMHWVRQAPGQGLE... 1 \n",
871 | "2 QVQLVQSGAEVKKPGASVKVSCKASGYTFTDYFMHWVRQAPGQGLE... 0 \n",
872 | "3 QVQLVQSGAEVKKPGASVKVSCKASGYTFTDYSMHWVRQAPGQGLE... 1 \n",
873 | "4 QVQLVQSGAEVKKPGASVKVSCKASGYTFTDYFMHWVRQAPGQGLE... 0 \n",
874 | "\n",
875 | " OVA Binding pI_seq \n",
876 | "0 1 8.64 \n",
877 | "1 1 8.96 \n",
878 | "2 1 7.96 \n",
879 | "3 1 8.60 \n",
880 | "4 1 7.96 "
881 | ]
882 | },
883 | "execution_count": 28,
884 | "metadata": {},
885 | "output_type": "execute_result"
886 | }
887 | ],
888 | "source": [
889 | "df_emi = pd.read_csv('emi/emi_binding.csv')\n",
890 | "df_emi.head()"
891 | ]
892 | },
893 | {
894 | "cell_type": "code",
895 | "execution_count": 29,
896 | "metadata": {},
897 | "outputs": [],
898 | "source": [
899 | "df_emi['encoded'] = one_hot_encode_sequences(df_emi, 'VH Sequence')\n",
900 | "df_emi['Flattened_Encoded'] = df_emi['encoded'].apply(lambda x: x.flatten())"
901 | ]
902 | },
903 | {
904 | "cell_type": "code",
905 | "execution_count": 30,
906 | "metadata": {},
907 | "outputs": [],
908 | "source": [
909 | "wt = 'QVQLVQSGAEVKKPGASVKVSCKASGYTFTDYYMHWVRQAPGQGLEWMGRVNPNRRGTTYNQKFEGRVTMTTDTSTSTAYMELRSLRSDDTAVYYCARANWLDYWGQGTTVTVSS'"
910 | ]
911 | },
912 | {
913 | "cell_type": "code",
914 | "execution_count": 31,
915 | "metadata": {},
916 | "outputs": [],
917 | "source": [
918 | "# Create a feature matrix X and target vector y\n",
919 | "X = np.stack(df_emi['Flattened_Encoded'].values)\n",
920 | "y = df_emi[['ANT Binding', 'OVA Binding']].values\n",
921 | "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1, random_state=RANDOM_STATE)"
922 | ]
923 | },
924 | {
925 | "cell_type": "code",
926 | "execution_count": 32,
927 | "metadata": {},
928 | "outputs": [
929 | {
930 | "data": {
931 | "text/plain": [
932 | "LinearDiscriminantAnalysis()"
933 | ]
934 | },
935 | "execution_count": 32,
936 | "metadata": {},
937 | "output_type": "execute_result"
938 | }
939 | ],
940 | "source": [
941 | "lda_ANT = LinearDiscriminantAnalysis()\n",
942 | "lda_ANT.fit(X_train, y_train[:,0])"
943 | ]
944 | },
945 | {
946 | "cell_type": "code",
947 | "execution_count": 33,
948 | "metadata": {},
949 | "outputs": [
950 | {
951 | "name": "stdout",
952 | "output_type": "stream",
953 | "text": [
954 | "accuracy: 0.9375 mcc: 0.8732685075504191\n"
955 | ]
956 | }
957 | ],
958 | "source": [
959 | "y_pred = lda_ANT.predict(X_test)\n",
960 | "accuracy = accuracy_score(y_test[:,0], y_pred)\n",
961 | "mcc = matthews_corrcoef(y_test[:,0], y_pred)\n",
962 | "print('accuracy:', accuracy, 'mcc:', mcc)"
963 | ]
964 | },
965 | {
966 | "cell_type": "code",
967 | "execution_count": 34,
968 | "metadata": {},
969 | "outputs": [
970 | {
971 | "data": {
972 | "text/plain": [
973 | "LinearDiscriminantAnalysis()"
974 | ]
975 | },
976 | "execution_count": 34,
977 | "metadata": {},
978 | "output_type": "execute_result"
979 | }
980 | ],
981 | "source": [
982 | "lda_OVA = LinearDiscriminantAnalysis()\n",
983 | "lda_OVA.fit(X_train, y_train[:,1])"
984 | ]
985 | },
986 | {
987 | "cell_type": "code",
988 | "execution_count": 35,
989 | "metadata": {},
990 | "outputs": [
991 | {
992 | "name": "stdout",
993 | "output_type": "stream",
994 | "text": [
995 | "accuracy: 0.92 mcc: 0.8403386677035108\n"
996 | ]
997 | }
998 | ],
999 | "source": [
1000 | "y_pred = lda_OVA.predict(X_test)\n",
1001 | "accuracy = accuracy_score(y_test[:,1], y_pred)\n",
1002 | "mcc = matthews_corrcoef(y_test[:,1], y_pred)\n",
1003 | "print('accuracy:', accuracy, 'mcc:', mcc)"
1004 | ]
1005 | },
1006 | {
1007 | "cell_type": "code",
1008 | "execution_count": 36,
1009 | "metadata": {},
1010 | "outputs": [
1011 | {
1012 | "data": {
1013 | "text/plain": [
1014 | "['emi/emi_LDA_ANT.joblib']"
1015 | ]
1016 | },
1017 | "execution_count": 36,
1018 | "metadata": {},
1019 | "output_type": "execute_result"
1020 | }
1021 | ],
1022 | "source": [
1023 | "# save both models (provided in github repo as well)\n",
1024 | "dump(lda_OVA, 'emi/emi_LDA_OVA.joblib')\n",
1025 | "dump(lda_ANT, 'emi/emi_LDA_ANT.joblib')"
1026 | ]
1027 | },
1028 | {
1029 | "cell_type": "markdown",
1030 | "metadata": {},
1031 | "source": [
1032 | "# Herceptin"
1033 | ]
1034 | },
1035 | {
1036 | "cell_type": "code",
1037 | "execution_count": 37,
1038 | "metadata": {},
1039 | "outputs": [],
1040 | "source": [
1041 | "df_herceptin_neg = pd.read_csv('herceptin/mHER_H3_AgNeg.csv', index_col=0)\n",
1042 | "df_herceptin_pos = pd.read_csv('herceptin/mHER_H3_AgPos.csv', index_col=0)"
1043 | ]
1044 | },
1045 | {
1046 | "cell_type": "code",
1047 | "execution_count": 38,
1048 | "metadata": {},
1049 | "outputs": [],
1050 | "source": [
1051 | "df_herceptin = df_herceptin_neg.append(df_herceptin_pos).copy()"
1052 | ]
1053 | },
1054 | {
1055 | "cell_type": "code",
1056 | "execution_count": 39,
1057 | "metadata": {},
1058 | "outputs": [],
1059 | "source": [
1060 | "h_chain = 'EVQLVESGGGLVQPGGSLRLSCAASGFNIKDTYIHWVRQAPGKGLEWVARIYPTNGYTRYADSVKGRFTISADTSKNTAYLQMNSLRAEDTAVYYCSRWGGDGFYAMDYWGQGTLVTVS'\n",
1061 | "cdr3 = 'WGGDGFYAMD'"
1062 | ]
1063 | },
1064 | {
1065 | "cell_type": "code",
1066 | "execution_count": 40,
1067 | "metadata": {},
1068 | "outputs": [],
1069 | "source": [
1070 | "full_seq_list = []\n",
1071 | "for seq in df_herceptin.AASeq:\n",
1072 | " full_seq_list.append(h_chain.replace(cdr3, seq))\n",
1073 | "df_herceptin['full_seq'] = full_seq_list"
1074 | ]
1075 | },
1076 | {
1077 | "cell_type": "code",
1078 | "execution_count": 41,
1079 | "metadata": {},
1080 | "outputs": [
1081 | {
1082 | "data": {
1083 | "text/html": [
1084 | "\n",
1085 | "\n",
1098 | "
\n",
1099 | " \n",
1100 | " \n",
1101 | " | \n",
1102 | " Count | \n",
1103 | " Fraction | \n",
1104 | " NucSeq | \n",
1105 | " AASeq | \n",
1106 | " AgClass | \n",
1107 | " full_seq | \n",
1108 | "
\n",
1109 | " \n",
1110 | " \n",
1111 | " \n",
1112 | " 0 | \n",
1113 | " 7 | \n",
1114 | " 0.000007 | \n",
1115 | " TGTAGCAGGTACACTATCTGCAGTTTCTACAAGCTCCAGTATTGG | \n",
1116 | " YTICSFYKLQ | \n",
1117 | " 0 | \n",
1118 | " EVQLVESGGGLVQPGGSLRLSCAASGFNIKDTYIHWVRQAPGKGLE... | \n",
1119 | "
\n",
1120 | " \n",
1121 | " 1 | \n",
1122 | " 95 | \n",
1123 | " 0.000041 | \n",
1124 | " TGTAGCAGGTGGTTCCTCTGCGGCTTCTACCAGAACATGTATTGG | \n",
1125 | " WFLCGFYQNM | \n",
1126 | " 0 | \n",
1127 | " EVQLVESGGGLVQPGGSLRLSCAASGFNIKDTYIHWVRQAPGKGLE... | \n",
1128 | "
\n",
1129 | " \n",
1130 | " 2 | \n",
1131 | " 3 | \n",
1132 | " 0.000001 | \n",
1133 | " TGTAGCAGGTTCGGCAACATCAGCTCCTTCGCGATCGCGTATTGG | \n",
1134 | " FGNISSFAIA | \n",
1135 | " 0 | \n",
1136 | " EVQLVESGGGLVQPGGSLRLSCAASGFNIKDTYIHWVRQAPGKGLE... | \n",
1137 | "
\n",
1138 | " \n",
1139 | " 3 | \n",
1140 | " 10 | \n",
1141 | " 0.000005 | \n",
1142 | " TGTAGCAGGTTCAAGGTCAACGGTCTGTTCCCGCACCTCTATTGG | \n",
1143 | " FKVNGLFPHL | \n",
1144 | " 0 | \n",
1145 | " EVQLVESGGGLVQPGGSLRLSCAASGFNIKDTYIHWVRQAPGKGLE... | \n",
1146 | "
\n",
1147 | " \n",
1148 | " 4 | \n",
1149 | " 16 | \n",
1150 | " 0.000016 | \n",
1151 | " TGTAGCAGGTACACTATCTGCAGTATGTACGAGTTCGATTATTGG | \n",
1152 | " YTICSMYEFD | \n",
1153 | " 0 | \n",
1154 | " EVQLVESGGGLVQPGGSLRLSCAASGFNIKDTYIHWVRQAPGKGLE... | \n",
1155 | "
\n",
1156 | " \n",
1157 | "
\n",
1158 | "
"
1159 | ],
1160 | "text/plain": [
1161 | " Count Fraction NucSeq AASeq \\\n",
1162 | "0 7 0.000007 TGTAGCAGGTACACTATCTGCAGTTTCTACAAGCTCCAGTATTGG YTICSFYKLQ \n",
1163 | "1 95 0.000041 TGTAGCAGGTGGTTCCTCTGCGGCTTCTACCAGAACATGTATTGG WFLCGFYQNM \n",
1164 | "2 3 0.000001 TGTAGCAGGTTCGGCAACATCAGCTCCTTCGCGATCGCGTATTGG FGNISSFAIA \n",
1165 | "3 10 0.000005 TGTAGCAGGTTCAAGGTCAACGGTCTGTTCCCGCACCTCTATTGG FKVNGLFPHL \n",
1166 | "4 16 0.000016 TGTAGCAGGTACACTATCTGCAGTATGTACGAGTTCGATTATTGG YTICSMYEFD \n",
1167 | "\n",
1168 | " AgClass full_seq \n",
1169 | "0 0 EVQLVESGGGLVQPGGSLRLSCAASGFNIKDTYIHWVRQAPGKGLE... \n",
1170 | "1 0 EVQLVESGGGLVQPGGSLRLSCAASGFNIKDTYIHWVRQAPGKGLE... \n",
1171 | "2 0 EVQLVESGGGLVQPGGSLRLSCAASGFNIKDTYIHWVRQAPGKGLE... \n",
1172 | "3 0 EVQLVESGGGLVQPGGSLRLSCAASGFNIKDTYIHWVRQAPGKGLE... \n",
1173 | "4 0 EVQLVESGGGLVQPGGSLRLSCAASGFNIKDTYIHWVRQAPGKGLE... "
1174 | ]
1175 | },
1176 | "execution_count": 41,
1177 | "metadata": {},
1178 | "output_type": "execute_result"
1179 | }
1180 | ],
1181 | "source": [
1182 | "df_herceptin.head()"
1183 | ]
1184 | },
1185 | {
1186 | "cell_type": "code",
1187 | "execution_count": 42,
1188 | "metadata": {},
1189 | "outputs": [],
1190 | "source": [
1191 | "df_herceptin['encoded'] = one_hot_encode_sequences(df_herceptin, 'full_seq')\n",
1192 | "df_herceptin['Flattened_Encoded'] = df_herceptin['encoded'].apply(lambda x: x.flatten())"
1193 | ]
1194 | },
1195 | {
1196 | "cell_type": "code",
1197 | "execution_count": 43,
1198 | "metadata": {},
1199 | "outputs": [],
1200 | "source": [
1201 | "# Create a feature matrix X and target vector y\n",
1202 | "X = np.stack(df_herceptin['Flattened_Encoded'].values)\n",
1203 | "y = df_herceptin['AgClass'].values\n",
1204 | "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1, random_state=RANDOM_STATE)"
1205 | ]
1206 | },
1207 | {
1208 | "cell_type": "code",
1209 | "execution_count": 44,
1210 | "metadata": {},
1211 | "outputs": [],
1212 | "source": [
1213 | "# we randomly oversample the training dataset to balance\n",
1214 | "ros = RandomOverSampler(random_state=RANDOM_STATE)\n",
1215 | "X_train_resampled, y_train_resampled = ros.fit_resample(X_train, y_train)"
1216 | ]
1217 | },
1218 | {
1219 | "cell_type": "code",
1220 | "execution_count": 45,
1221 | "metadata": {},
1222 | "outputs": [
1223 | {
1224 | "data": {
1225 | "text/plain": [
1226 | "LinearDiscriminantAnalysis()"
1227 | ]
1228 | },
1229 | "execution_count": 45,
1230 | "metadata": {},
1231 | "output_type": "execute_result"
1232 | }
1233 | ],
1234 | "source": [
1235 | "lda_herceptin = LinearDiscriminantAnalysis()\n",
1236 | "lda_herceptin.fit(X_train_resampled, y_train_resampled)"
1237 | ]
1238 | },
1239 | {
1240 | "cell_type": "code",
1241 | "execution_count": 46,
1242 | "metadata": {},
1243 | "outputs": [
1244 | {
1245 | "name": "stdout",
1246 | "output_type": "stream",
1247 | "text": [
1248 | "accuracy: 0.7893923789907312 mcc: 0.5677487791517641\n"
1249 | ]
1250 | }
1251 | ],
1252 | "source": [
1253 | "y_pred = lda_herceptin.predict(X_test)\n",
1254 | "accuracy = accuracy_score(y_test, y_pred)\n",
1255 | "mcc = matthews_corrcoef(y_test, y_pred)\n",
1256 | "print('accuracy:', accuracy, 'mcc:', mcc)"
1257 | ]
1258 | },
1259 | {
1260 | "cell_type": "code",
1261 | "execution_count": 47,
1262 | "metadata": {},
1263 | "outputs": [
1264 | {
1265 | "data": {
1266 | "text/plain": [
1267 | "['herceptin/lda_herceptin.joblib']"
1268 | ]
1269 | },
1270 | "execution_count": 47,
1271 | "metadata": {},
1272 | "output_type": "execute_result"
1273 | }
1274 | ],
1275 | "source": [
1276 | "# save the model (file is provided in the github repo as well)\n",
1277 | "dump(lda_herceptin, 'herceptin/lda_herceptin.joblib')"
1278 | ]
1279 | },
1280 | {
1281 | "cell_type": "code",
1282 | "execution_count": null,
1283 | "metadata": {},
1284 | "outputs": [],
1285 | "source": []
1286 | },
1287 | {
1288 | "cell_type": "code",
1289 | "execution_count": null,
1290 | "metadata": {},
1291 | "outputs": [],
1292 | "source": []
1293 | },
1294 | {
1295 | "cell_type": "code",
1296 | "execution_count": null,
1297 | "metadata": {},
1298 | "outputs": [],
1299 | "source": []
1300 | },
1301 | {
1302 | "cell_type": "code",
1303 | "execution_count": null,
1304 | "metadata": {},
1305 | "outputs": [],
1306 | "source": []
1307 | },
1308 | {
1309 | "cell_type": "code",
1310 | "execution_count": null,
1311 | "metadata": {},
1312 | "outputs": [],
1313 | "source": []
1314 | }
1315 | ],
1316 | "metadata": {
1317 | "kernelspec": {
1318 | "display_name": "probs_design",
1319 | "language": "python",
1320 | "name": "python3"
1321 | },
1322 | "language_info": {
1323 | "codemirror_mode": {
1324 | "name": "ipython",
1325 | "version": 3
1326 | },
1327 | "file_extension": ".py",
1328 | "mimetype": "text/x-python",
1329 | "name": "python",
1330 | "nbconvert_exporter": "python",
1331 | "pygments_lexer": "ipython3",
1332 | "version": "3.7.8"
1333 | }
1334 | },
1335 | "nbformat": 4,
1336 | "nbformat_minor": 5
1337 | }
1338 |
--------------------------------------------------------------------------------
/simple_design.sh:
--------------------------------------------------------------------------------
1 | Rosetta/main/source/bin/rosetta_scripts.pytorchtensorflow.linuxgccrelease @ ./design.options -parser:protocol ./SimpleDesign.xml -s $1 -parser:script_vars protocol=$2 design_chain=$3 antigen=$4 AIFA=$5 pos_temp=$6 aa_temp=$7 n_muts=$8 resfile=$9 -out:path:all "${10}"
2 |
3 |
--------------------------------------------------------------------------------