Repo ini berisi kode untuk makalah kami Desain Antibodi Atom Penuh Ujung-ke-Ujung.
Ada 3 prasyarat yang diperlukan dan 1 prasyarat opsional: menyiapkan lingkungan conda (diperlukan), mendapatkan pencetak skor (diperlukan), menyiapkan data pdb antibodi (diperlukan), dan mengunduh baseline (opsional).
1. Lingkungan
Kami telah menyediakan env.yml
untuk membuat lingkungan runtime conda hanya dengan menjalankan:
conda env create -f env.yml
2. Pencetak gol
Harap persiapkan terlebih dahulu pencetak skor untuk TMscore dan DockQ sebagai berikut:
Kode sumber untuk menilai TMscore ada di evaluation/TMscore.cpp
. Silakan kompilasi dengan:
g++ -static -O3 -ffast-math -lm -o evaluation/TMscore evaluation/TMscore.cpp
Untuk mempersiapkan pencetak gol DockQ, harap kloning github resminya dan kompilasi prasyarat sesuai dengan instruksinya. Setelah itu silahkan revisi variabel DOCKQ_DIR
pada configs.py
agar mengarah ke direktori yang berisi proyek DockQ (misal ./DockQ).
Pencetak skor lDDT berada di lingkungan conda, dan
3. data PDB
Silakan unduh semua data struktur antibodi dari halaman unduh SAbDab. Silakan masuk ke tab Unduhan di sebelah kiri halaman web dan unduh file zip yang diarsipkan untuk strukturnya, lalu dekompresi:
wget https://opig.stats.ox.ac.uk/webapps/newsabdab/sabdab/archive/all/ -O all_structures.zip
unzip all_structures.zip
Anda harus mendapatkan folder bernama all_structures dengan hierarki berikut:
├── all_structures
│ ├── chothia
│ ├── imgt
│ ├── raw
Setiap subfolder berisi file pdb yang diberi nomor ulang dengan skema yang sesuai. Kami menggunakan IMGT di kertas, jadi subfolder imgtlah yang kami pedulikan.
Karena file pdb berat untuk diproses, biasanya orang akan membuat file ringkasan untuk database struktural yang mencatat informasi dasar tentang setiap struktur untuk akses cepat. Kami telah memberikan ringkasan kumpulan data yang diambil pada 12 November 2022 ( summaries/sabdab_summary.tsv
). Karena dataset diperbarui setiap minggu, jika Anda ingin menggunakan versi terbaru, silakan unduh dari situs resminya.
(Opsional) 4. Garis Dasar
Jika Anda tertarik dengan dasar pipeline, sertakan proyek berikut dan integrasikan dependensinya sesuai kebutuhan Anda:
Setelah menambahkan proyek ini, harap ingat juga untuk merevisi jalur terkait di ./configs.py
. Kami juga telah menyediakan skrip untuk mengalirkan modul di ./scripts/pipeline_inference.sh
.
Pos pemeriksaan terlatih untuk setiap tugas disediakan di halaman rilis github. Untuk menggunakannya, silakan unduh yang Anda minati dan simpan ke dalam folder ./checkpoints
. Kami memberikan nama, konfigurasi pelatihan (di bawah ./scripts/train/configs
), dan deskripsi pos pemeriksaan sebagai berikut:
pos pemeriksaan | konfigurasikan | keterangan |
---|---|---|
cdrh3_design.ckpt | single_cdr_design.json | Desain CDR-H3 yang mengikat epitop |
struct_prediction.ckpt | struct_prediction.json | Prediksi struktur kompleks |
affinity_opt.ckpt & ddg_predictor.ckp | tunggal_cdr_opt.json | Optimasi afinitas pada CDR-H3 |
multi_cdr_design.ckpt | multi_cdr_design.json | Rancang semua 6 CDR secara bersamaan |
multi_cdr_opt.ckpt & multi_cdr_ddg_predictor | multi_cdr_opt.json | Optimalkan afinitas pada 6 CDR secara bersamaan |
full_design.ckpt | full_design.json | Rancang seluruh domain variabel, termasuk wilayah kerangka kerja |
Data
Untuk melakukan pra-pemrosesan data mentah, pertama-tama kita perlu membuat ringkasan untuk setiap benchmark dalam format json, kemudian membagi kumpulan data menjadi kumpulan pelatihan/validasi/pengujian, dan terakhir mengubah data pdb menjadi objek python. Kami telah menyediakan skrip untuk semua prosedur ini di scripts/data_preprocess.sh
. Misalkan data pdb yang diberi nomor ulang IMGT terletak di all_structures/imgt/
, dan Anda ingin menyimpan data yang diproses (~5G) di all_data
, Anda cukup menjalankan:
bash scripts/data_preprocess.sh all_structures/imgt all_data
yang membutuhkan waktu sekitar 1 jam untuk memproses SAbDab, RAbD, Igfold test set, dan SKEMPI V2.0. Kesalahan yang dilaporkan dalam proses ini merupakan hal yang wajar karena beberapa struktur antibodi diberi anotasi yang salah atau formatnya salah, yang akan dihilangkan pada tahap pembersihan data.
(Opsional) Templat yang Dilestarikan
Kami telah menyediakan templat yang dilestarikan dari SAbDab di ./data/template.json
. Jika Anda tertarik dengan proses ekstraksi, Anda juga dapat mengekstrak templat yang dilestarikan dari kumpulan data tertentu (misalnya kumpulan pelatihan untuk tugas desain CDR-H3) dengan menjalankan perintah berikut:
python -m data.framework_templates
--dataset ./all_data/RAbD/train.json
--out ./data/new_template.json
Kami menggunakan SAbDab untuk pelatihan dan RAbD untuk pengujian. Harap revisi terlebih dahulu pengaturan di scripts/train/configs/cdr_design.json
(jalur ke kumpulan data dan hyperparameter lainnya) lalu jalankan perintah di bawah ini untuk pelatihan:
GPU=0,1 bash scripts/train/train.sh scripts/train/configs/single_cdr_design.json
Biasanya prosedur pelatihan memakan waktu sekitar 7 jam pada 2 GPU GeForce RTX 2080 Ti. Kami juga telah menyediakan pos pemeriksaan terlatih di checkpoints/cdrh3_design.ckpt
. Kemudian silakan revisi jalur ke set pengujian di scripts/test/test.sh
dan jalankan perintah berikut untuk pengujian:
GPU=0 bash scripts/test/test.sh ./checkpoints/cdrh3_design.ckpt ./all_data/RAbD/test.json ./results
yang akan menyimpan hasil yang dihasilkan ke ./results
.
Kami menggunakan SAbDab untuk pelatihan dan IgFold untuk pengujian. Prosedur pelatihan dan pengujian serupa dengan desain CDR-H3. Setelah merevisi pengaturan pada scripts/train/configs/cdr_design.json
dan scripts/test/test.sh
seperti yang disebutkan sebelumnya, silakan jalankan perintah berikut untuk pelatihan:
GPU=0,1 bash scripts/train/train.sh scripts/train/configs/struct_prediction.json
Biasanya prosedur pelatihan memakan waktu sekitar 8 jam pada 2 GPU GeForce RTX 2080 Ti. Kami juga telah menyediakan pos pemeriksaan terlatih di checkpoints/struct_prediction.ckpt
. Kemudian silahkan jalankan perintah berikut untuk pengujian:
GPU=0 bash scripts/test/test.sh ./checkpoints/struct_prediction.ckpt ./all_data/IgFold/test.json ./results
Kami menggunakan SAbDab untuk pelatihan dan antibodi di SKEMPI V2.0 untuk pengujian. Demikian pula, harap revisi dulu pengaturan di scripts/train/configs/affinity_opt.json
, scripts/test/optimize_test.sh
, dan tambahan scripts/train/train_predictor.sh
. Kemudian silakan lakukan pelatihan dyMEANOPt (~ 5 jam):
GPU=0,1 bash scripts/train/train.sh scripts/train/configs/single_cdr_opt.json
Kemudian kita perlu melatih prediktor ddg pada representasi kompleks yang dihasilkan (~ 40 menit):
GPU=0 bash scripts/train/train_predictor.sh checkpoints/cdrh3_opt.ckpt
Kami telah menyediakan pos pemeriksaan terlatih di checkpoints/cdrh3_opt.ckpt
dan checkpoints/cdrh3_ddg_predictor.ckpt
. Uji optimasi dapat dilakukan melalui:
GPU=0 bash scripts/test/optimize_test.sh checkpoints/cdrh3_opt.ckpt checkpoints/cdrh3_ddg_predictor.ckpt ./all_data/SKEMPI/test.json 0 50
yang akan melakukan 50 langkah pencarian gradien tanpa batasan jumlah maksimum residu yang diubah (ubah 0 ke angka berapa pun untuk membatasi batas atas
Kami juga menyediakan API inferensi dan demo in silico untuk aplikasi umum dalam permasalahan dunia nyata, yang terletak di ./api
dan ./demos
.
Kami menyediakan API desain dan API pengoptimalan di ./api
, yang dapat dengan mudah diintegrasikan ke dalam kode python.
API desain ( ./api/design.py
) dapat digunakan untuk menghasilkan CDR dengan mempertimbangkan urutan wilayah kerangka kerja, file PDB antigen, serta definisi epitop. Kami akan menggunakan skenario menarik untuk mengilustrasikan penggunaan API desain .
Kami ingin merancang antibodi yang menggabungkan keadaan terbuka saluran kation potensial reseptor sementara subfamili V anggota 1 (TRPV1), yang memainkan peran penting dalam nyeri akut dan persisten. Daripada membuat epitop pada TRPV1 dengan tangan, kami mencoba meniru bahan pengikat yang sudah ada, yaitu racun simpul ganda (DkTx). Oleh karena itu, pertama-tama kita perlu mengekstrak definisi epitop dengan menganalisis pola pengikatan toksin, kemudian merancang antibodi dengan urutan wilayah kerangka tertentu.
1. Ekstrak Definisi Epitope
Kami menyediakan file PDB kompleks saluran kation potensial reseptor sementara subfamili V anggota 1 (TRPV1, rantai ABCD) dan toksin simpul ganda (DkTx, rantai EF) di ./demos/data/7l2m.pdb
. PDB asli memiliki 4 unit simetris, jadi kami membagi dua racun (rantai EF) di tengah secara manual untuk membentuk 4 rantai simetris e,f,E,F. Setiap antibodi hanya perlu fokus pada satu unit. Di sini kita memilih rantai E sebagai contoh.
Kami menghasilkan definisi epitop dengan menganalisis antarmuka pengikatan rantai E ke TRPV1:
python -m api.binding_interface
--pdb ./demos/data/7l2m.pdb
--receptor A B C D
--ligand E
--out ./demos/data/E_epitope.json
Sekarang definisi epitop (yaitu residu TRPV1 pada antarmuka pengikatan) disimpan ke ./demos/data/E_epitope.json
. Dengan mengubah nilai argumen "ligan" menjadi e, f, dan F, kita dapat memperoleh definisi epitop untuk satuan lain (jangan lupa juga merevisi jalur keluarannya).
2. Mendapatkan Urutan Wilayah Kerangka
Tergantung pada tujuan akhir perancangan antibodi, daerah kerangka dengan sifat fisiokimia berbeda mungkin diinginkan. Karena di sini kami hanya menyediakan kasus bukti konsep, kami mengambil satu secara acak dari kumpulan data yang ada:
heavy chain (H): ' QVQLKESGPGLLQPSQTLSLTCTVSGISLSDYGVHWVRQAPGKGLEWMGIIGHAGGTDYNSNLKSRVSISRDTSKSQVFLKLNSLQQEDTAMYFC----------WGQGIQVTVSSA '
light chain (L): ' YTLTQPPLVSVALGQKATITCSGDKLSDVYVHWYQQKAGQAPVLVIYEDNRRPSGIPDHFSGSNSGNMATLTISKAQAGDEADYYCQSWDGTNSAWVFGSGTKVTVLGQ '
CDR-H3 asli ditutupi dengan "-". Mendesain beberapa CDR juga didukung, yang akan diilustrasikan nanti.
3. Rancang CDR
Langkah terakhir adalah mendesain CDR dengan API desain :
from api . design import design
ckpt = './checkpoints/cdrh3_design.ckpt'
root_dir = './demos/data'
pdbs = [ os . path . join ( root_dir , '7l2m.pdb' ) for _ in range ( 4 )]
toxin_chains = [ 'E' , 'e' , 'F' , 'f' ]
remove_chains = [ toxin_chains for _ in range ( 4 )]
epitope_defs = [ os . path . join ( root_dir , c + '_epitope.json' ) for c in toxin_chains ]
identifiers = [ f' { c } _antibody' for c in toxin_chains ]
# use '-' for masking amino acids
frameworks = [
(
( 'H' , 'QVQLKESGPGLLQPSQTLSLTCTVSGISLSDYGVHWVRQAPGKGLEWMGIIGHAGGTDYNSNLKSRVSISRDTSKSQVFLKLNSLQQEDTAMYFC----------WGQGIQVTVSSA' ),
( 'L' , 'YTLTQPPLVSVALGQKATITCSGDKLSDVYVHWYQQKAGQAPVLVIYEDNRRPSGIPDHFSGSNSGNMATLTISKAQAGDEADYYCQSWDGTNSAWVFGSGTKVTVLGQ' )
)
for _ in pdbs
] # the first item of each tuple is heavy chain, the second is light chain
design ( ckpt = ckpt , # path to the checkpoint of the trained model
gpu = 0 , # the ID of the GPU to use
pdbs = pdbs , # paths to the PDB file of each antigen (here antigen is all TRPV1)
epitope_defs = epitope_defs , # paths to the epitope definitions
frameworks = frameworks , # the given sequences of the framework regions
out_dir = root_dir , # output directory
identifiers = identifiers , # name of each output antibody
remove_chains = remove_chains , # remove the original ligand
enable_openmm_relax = True , # use openmm to relax the generated structure
auto_detect_cdrs = False ) # manually use '-' to represent CDR residues
Kode-kode ini juga ditambahkan sebagai contoh di ./api/design.py
, sehingga Anda bisa langsung menjalankannya dengan:
python -m api.design
Di sini kami menggunakan "-" untuk menandai CDR-H3 secara manual, tetapi Anda juga dapat mengatur auto_detect_cdrs=True
agar CDR ditentukan secara otomatis oleh sistem penomoran IMGT. Jenis CDR yang akan dirancang akan secara otomatis diperoleh dari pos pemeriksaan yang diberikan. Saat ini API mendukung perancangan ulang satu atau beberapa CDR, serta perancangan antibodi lengkap (dengan meneruskan "-" * length
sebagai masukan).
Mengaktifkan Openmm relax akan sangat memperlambat proses pembangkitan, namun akan memperbaiki panjang dan sudut ikatan agar sesuai dengan batasan fisik.
API optimalisasi ( ./api/optimize.py
) sangatlah mudah. Kami mengoptimalkan ./demos/data/1nca.pdb
sebagai contoh:
from api . optimize import optimize , ComplexSummary
ckpt = './checkpoints/cdrh3_opt.ckpt'
predictor_ckpt = './checkpoints/cdrh3_ddg_predictor.ckpt'
root_dir = './demos/data/1nca_opt'
summary = ComplexSummary (
pdb = './demos/data/1nca.pdb' ,
heavy_chain = 'H' ,
light_chain = 'L' ,
antigen_chains = [ 'N' ]
)
optimize (
ckpt = ckpt , # path to the checkpoint of the trained model
predictor_ckpt = predictor_ckpt , # path to the checkpoint of the trained ddG predictor
gpu = 0 , # the ID of the GPU to use
cplx_summary = summary , # summary of the complex as well as its PDB file
num_residue_changes = [ 1 , 2 , 3 , 4 , 5 ], # generate 5 samples, changing at most 1, 2, 3, 4, and 5 residues, respectively
out_dir = root_dir , # output directory
batch_size = 16 , # batch size
num_workers = 4 , # number of workers to use
optimize_steps = 50 # number of steps for gradient desend
)
Kode untuk contoh ini juga ditambahkan ke ./api/optimize.py
, sehingga Anda dapat langsung menjalankannya dengan:
python -m api.optimize
Maka Anda akan mendapatkan hasil sebagai berikut:
├── demos/data/1nca_opt
│ ├── 1nca_0_1.pdb
│ ├── 1nca_1_2.pdb
│ ├── 1nca_2_3.pdb
│ ├── 1nca_3_4.pdb
│ ├── 1nca_4_5.pdb
│ ├── 1nca_original.pdb
di mana 1nca_original.pdb
adalah kompleks asli, dan 1nca_a_b.pdb
berarti
API prediksi struktur kompleks ( ./api/structure_prediction.py
) memprediksi struktur kompleks berdasarkan antigen, urutan rantai berat dan rantai ringan, serta definisi epitop. Docking global masih sangat menantang sehingga kami mempersempit cakupannya hanya pada epitop yang menjadi perhatian. Kami memperkirakan ./demos/data/1nca.pdb
sebagai contoh:
from api . structure_prediction import structure_prediction
ckpt = './checkpoints/struct_prediction.ckpt'
root_dir = './demos/data'
n_sample = 10 # sample 10 conformations
pdbs = [ os . path . join ( root_dir , '1nca_antigen.pdb' ) for _ in range ( n_sample )]
epitope_defs = [ os . path . join ( root_dir , '1nca_epitope.json' ) for _ in range ( n_sample )]
identifiers = [ f'1nca_model_ { i } ' for i in range ( n_sample )]
seqs = [
(
( 'H' , 'QIQLVQSGPELKKPGETVKISCKASGYTFTNYGMNWVKQAPGKGLKWMGWINTNTGEPTYGEEFKGRFAFSLETSASTANLQINNLKNEDTATFFCARGEDNFGSLSDYWGQGTTVTVSS' ),
( 'L' , 'DIVMTQSPKFMSTSVGDRVTITCKASQDVSTAVVWYQQKPGQSPKLLIYWASTRHIGVPDRFAGSGSGTDYTLTISSVQAEDLALYYCQQHYSPPWTFGGGTKLEIK' )
)
for _ in pdbs
] # the first item of each tuple is heavy chain, the second is light chain
structure_prediction (
ckpt = ckpt , # path to the checkpoint of the trained model
gpu = 0 , # the ID of the GPU to use
pdbs = pdbs , # paths to the PDB file of each antigen (here antigen is all TRPV1)
epitope_defs = epitope_defs , # paths to the epitope definitions
seqs = seqs , # the given sequences of the framework regions
out_dir = root_dir , # output directory
identifiers = identifiers , # name of each output antibody
enable_openmm_relax = True ) # use openmm to relax the generated structure
Kode untuk contoh ini juga ditambahkan ke ./api/structure_prediction.py
, sehingga Anda dapat langsung menjalankannya dengan:
python -m api.structure_prediction
Maka Anda akan mendapatkan hasil sebagai berikut:
├── demos/data
│ ├── 1nca_model_0.pdb
│ ├── 1nca_model_1.pdb
│ ├── 1nca_model_2.pdb
│ ├── ...
di mana harus ada total 10 sampel konformasi. Perhatikan bahwa beberapa residu pertama atau terakhir mungkin dibuang dalam hasil jika berada di luar domain variabel menurut sistem penomoran IMGT.
Tampilan in vitro biasanya digunakan untuk memilih mutan pengikat dari perpustakaan antibodi. Di sini kami menerapkan versi in silico dengan API desain dengan menghasilkan dan memfilter kandidat dari kumpulan data yang ada terhadap antigen dengan definisi epitop. Selanjutnya, kita memerlukan metrik untuk mengevaluasi seberapa baik antibodi yang dihasilkan berikatan dengan target. Di sini kami menggunakan FoldX sebagai prediktor afinitas, jadi untuk menjalankan demo ini, Anda mungkin perlu mengunduhnya terlebih dahulu dari situs web resmi dan merevisi jalur di ./configs.py
. Kami masih menggunakan contoh TRPV1 di bagian sebelumnya, dan menggunakan tolok ukur RAbD sebagai pustaka antibodi yang menyediakan wilayah kerangka kerja:
python -m demos.display
--ckpt checkpoints/multi_cdr_design.ckpt
--pdb demos/data/7l2m.pdb
--epitope_def demos/data/E_epitope.json
--library ./all_data/rabd_all.json
--n_sample 30
--save_dir demos/display
--gpu 0
yang akan menghasilkan 30 kandidat dengan afinitasnya yang diprediksi oleh FoldX.
Terima kasih atas minat Anda pada pekerjaan kami!
Silakan bertanya jika ada pertanyaan mengenai algoritma, kode, serta permasalahan yang dihadapi dalam menjalankannya agar kami dapat memperjelas dan memperbaikinya. Anda dapat membuat masalah di repo github atau menghubungi kami di [email protected].
File di bawah ini dipinjam dari repositori yang ada:
evaluation/TMscore.cpp
: https://zhanggroup.org/TM-score/evaluation/ddg
: https://github.com/HeliXonProtein/binding-ddg-predictor