이 저장소에는 우리 논문의 End-to-End Full-Atom Antibody Design에 대한 코드가 포함되어 있습니다.
3가지 필수 전제 조건과 1가지 선택적 전제 조건이 있습니다: conda 환경 설정(필수), 채점자 확보(필수), 항체 pdb 데이터 준비(필수), 기준선 다운로드(선택 사항).
1. 환경
다음을 실행하여 런타임 conda 환경을 생성하기 위한 env.yml
을 제공했습니다.
conda env create -f env.yml
2. 득점자
먼저 TMscore 및 DockQ에 대한 채점자를 다음과 같이 준비하십시오.
TMscore를 평가하기 위한 소스 코드는 evaluation/TMscore.cpp
에 있습니다. 다음 방법으로 컴파일하세요.
g++ -static -O3 -ffast-math -lm -o evaluation/TMscore evaluation/TMscore.cpp
DockQ 득점자를 준비하려면 공식 github을 복제하고 지침에 따라 전제 조건을 컴파일하세요. 그런 다음 DockQ 프로젝트가 포함된 디렉터리(예: ./DockQ)를 가리키도록 configs.py
의 DOCKQ_DIR
변수를 수정하세요.
lDDT 득점자는 conda 환경에 있으며
3. PDB 데이터
SAbDab 다운로드 페이지에서 항체의 모든 구조 데이터를 다운로드하세요. 웹페이지 왼쪽의 다운로드 탭에 들어가서 해당 구조에 대해 보관된 zip 파일을 다운로드한 다음 압축을 풀어주세요.
wget https://opig.stats.ox.ac.uk/webapps/newsabdab/sabdab/archive/all/ -O all_structures.zip
unzip all_structures.zip
다음 계층 구조를 가진 all_structures 라는 폴더가 있어야 합니다.
├── all_structures
│ ├── chothia
│ ├── imgt
│ ├── raw
각 하위 폴더에는 해당 구성표로 번호가 다시 매겨진 pdb 파일이 포함되어 있습니다. 우리는 논문에서 IMGT를 사용하므로 imgt 하위 폴더가 우리가 관심을 갖는 부분입니다.
pdb 파일은 처리하기가 무겁기 때문에 일반적으로 사람들은 빠른 액세스를 위해 각 구조에 대한 기본 정보를 기록하는 구조 데이터베이스에 대한 요약 파일을 생성합니다. 2022년 11월 12일에 검색된 데이터 세트의 요약을 제공했습니다( summaries/sabdab_summary.tsv
). 데이터세트는 매주 업데이트되므로 최신 버전을 사용하시려면 공식 홈페이지에서 다운로드하시기 바랍니다.
(선택 사항) 4. 기준선
다음 프로젝트를 포함한 파이프라인 기준선에 관심이 있고 필요에 따라 해당 종속성을 통합하는 경우:
이러한 프로젝트를 추가한 후에는 ./configs.py
에서 해당 경로를 수정하는 것도 잊지 마세요. 또한 ./scripts/pipeline_inference.sh
에서 모듈을 계단식으로 배열하기 위한 스크립트도 제공했습니다.
각 작업에 대해 훈련된 체크포인트는 github 릴리스 페이지에서 제공됩니다. 사용하려면 관심 있는 항목을 다운로드하여 ./checkpoints
폴더에 저장하세요. 다음과 같이 체크포인트의 이름, 교육 구성( ./scripts/train/configs
아래) 및 설명을 제공합니다.
체크포인트 | 구성 | 설명 |
---|---|---|
cdrh3_design.ckpt | Single_cdr_design.json | 에피토프 결합 CDR-H3 디자인 |
struct_prediction.ckpt | struct_prediction.json | 복잡한 구조 예측 |
affinity_opt.ckpt 및 ddg_predictor.ckp | Single_cdr_opt.json | CDR-H3의 친화도 최적화 |
multi_cdr_design.ckpt | multi_cdr_design.json | 6개의 CDR을 모두 동시에 설계 |
multi_cdr_opt.ckpt 및 multi_cdr_ddg_predictor | multi_cdr_opt.json | 6개 CDR 모두에서 동시에 친화도 최적화 |
전체_디자인.ckpt | 전체_디자인.json | 프레임워크 영역을 포함한 전체 가변 도메인 설계 |
데이터
원시 데이터를 전처리하려면 먼저 각 벤치마크에 대한 요약을 json 형식으로 생성한 다음 데이터 세트를 학습/검증/테스트 세트로 분할하고 마지막으로 pdb 데이터를 Python 객체로 변환해야 합니다. scripts/data_preprocess.sh
에서 이러한 모든 절차에 대한 스크립트를 제공했습니다. IMGT로 번호가 다시 매겨진 pdb 데이터가 all_structures/imgt/
에 있고 처리된 데이터(~5G)를 all_data
에 저장하려고 한다고 가정하면 다음을 간단히 실행할 수 있습니다.
bash scripts/data_preprocess.sh all_structures/imgt all_data
SAbDab, RAbD, Igfold 테스트 세트 및 SKEMPI V2.0을 처리하는 데 약 1시간이 걸립니다. 일부 항체 구조에 주석이 잘못 달렸거나 형식이 잘못되어 데이터 정리 단계에서 삭제되기 때문에 이 프로세스에서 보고된 오류를 보는 것은 정상입니다.
(선택 사항) 보존된 템플릿
./data/template.json
에 SAbDab의 보존된 템플릿을 제공했습니다. 추출 프로세스에 관심이 있는 경우 다음 명령을 실행하여 지정된 데이터 세트(예: CDR-H3 설계 작업에 대한 훈련 세트)에서 보존된 템플릿을 추출할 수도 있습니다.
python -m data.framework_templates
--dataset ./all_data/RAbD/train.json
--out ./data/new_template.json
훈련에는 SAbDab을, 테스트에는 RAbD를 사용합니다. 먼저 scripts/train/configs/cdr_design.json
(데이터 세트 및 기타 하이퍼파라미터 경로)의 설정을 수정한 후 훈련을 위해 아래 명령을 실행하십시오.
GPU=0,1 bash scripts/train/train.sh scripts/train/configs/single_cdr_design.json
일반적으로 훈련 절차는 2개의 GeForce RTX 2080 Ti GPU에서 약 7시간이 소요됩니다. 또한 checkpoints/cdrh3_design.ckpt
에서 훈련된 체크포인트를 제공했습니다. 그런 다음 scripts/test/test.sh
에서 테스트 세트의 경로를 수정하고 테스트를 위해 다음 명령을 실행하십시오.
GPU=0 bash scripts/test/test.sh ./checkpoints/cdrh3_design.ckpt ./all_data/RAbD/test.json ./results
생성된 결과는 ./results
에 저장됩니다.
훈련에는 SAbDab을, 테스트에는 IgFold를 사용합니다. 훈련 및 테스트 절차는 CDR-H3 설계와 유사합니다. 앞에서 언급한 대로 scripts/train/configs/cdr_design.json
및 scripts/test/test.sh
의 설정을 수정한 후 훈련을 위해 다음 명령을 실행하십시오.
GPU=0,1 bash scripts/train/train.sh scripts/train/configs/struct_prediction.json
일반적으로 훈련 절차는 2개의 GeForce RTX 2080 Ti GPU에서 약 8시간이 소요됩니다. 또한 checkpoints/struct_prediction.ckpt
에서 훈련된 체크포인트를 제공했습니다. 그런 다음 테스트를 위해 다음 명령을 실행하십시오.
GPU=0 bash scripts/test/test.sh ./checkpoints/struct_prediction.ckpt ./all_data/IgFold/test.json ./results
훈련에는 SAbDab을 사용하고 테스트에는 SKEMPI V2.0의 항체를 사용합니다. 마찬가지로 먼저 scripts/train/configs/affinity_opt.json
, scripts/test/optimize_test.sh
및 추가적으로 scripts/train/train_predictor.sh
의 설정을 수정하세요. 그런 다음 dyMEANOpt 교육을 수행하십시오(~ 5시간).
GPU=0,1 bash scripts/train/train.sh scripts/train/configs/single_cdr_opt.json
그런 다음 생성된 복합체의 표현에 대해 ddg 예측기를 훈련해야 합니다(~ 40분).
GPU=0 bash scripts/train/train_predictor.sh checkpoints/cdrh3_opt.ckpt
우리는 checkpoints/cdrh3_opt.ckpt
및 checkpoints/cdrh3_ddg_predictor.ckpt
에 훈련된 체크포인트를 제공했습니다. 최적화 테스트는 다음을 통해 수행할 수 있습니다.
GPU=0 bash scripts/test/optimize_test.sh checkpoints/cdrh3_opt.ckpt checkpoints/cdrh3_ddg_predictor.ckpt ./all_data/SKEMPI/test.json 0 50
이는 변경된 잔기의 최대 수에 대한 제한 없이 50단계의 기울기 검색을 수행합니다(상한을 제한하려면 0을 임의의 숫자로 변경).
또한 ./api
및 ./demos
에 있는 실제 문제의 일반적인 애플리케이션에 대한 추론 API와 in silico 데모도 제공합니다.
Python 코드에 쉽게 통합할 수 있는 디자인 API와 최적화 API를 ./api
에 제공합니다.
디자인 API( ./api/design.py
)를 사용하여 프레임워크 영역의 서열, 항원의 PDB 파일 및 에피토프 정의를 바탕으로 CDR을 생성할 수 있습니다. 디자인 API의 사용법을 설명하기 위해 흥미로운 시나리오를 사용할 것입니다.
우리는 급성 및 지속성 통증에 중요한 역할을 하는 일시적 수용체 전위 양이온 채널 서브패밀리 V 멤버 1(TRPV1)의 개방 상태와 결합하는 항체를 설계하고자 합니다. TRPV1의 에피토프를 손으로 만드는 대신 이중 매듭 독소(DkTx)인 기존 바인더를 모방하려고 합니다. 따라서 먼저 독소의 결합 패턴을 분석하여 에피토프 정의를 추출한 다음 프레임워크 영역의 주어진 서열을 사용하여 항체를 설계해야 합니다.
1. 에피토프 정의 추출
우리는 ./demos/data/7l2m.pdb
에서 일시적 수용체 잠재적 양이온 채널 서브패밀리 V 구성원 1(TRPV1, 체인 ABCD)과 이중 매듭 독소(DkTx, 체인 EF)의 복합체에 대한 PDB 파일을 제공합니다. 원래 PDB에는 4개의 대칭 단위가 있으므로 중간에서 두 개의 독소(체인 EF)를 수동으로 분할하여 4개의 대칭 체인 e,f,E,F를 형성합니다. 각 항체는 하나의 단위에만 집중하면 됩니다. 여기서는 예로 체인 E를 선택합니다.
TRPV1에 대한 체인 E의 결합 인터페이스를 분석하여 에피토프 정의를 생성합니다.
python -m api.binding_interface
--pdb ./demos/data/7l2m.pdb
--receptor A B C D
--ligand E
--out ./demos/data/E_epitope.json
이제 에피토프 정의(즉, 바인딩 인터페이스의 TRPV1 잔기)가 ./demos/data/E_epitope.json
에 저장됩니다. 인수 "리간드"의 값을 e, f 및 F로 변경하면 다른 단위에 대한 에피토프 정의를 얻을 수 있습니다(출력 경로도 수정하는 것을 잊지 마세요).
2. 프레임워크 영역의 시퀀스 얻기
항체 설계의 최종 목적에 따라 다양한 물리화학적 특성을 갖는 프레임워크 영역이 필요할 수 있습니다. 여기서는 개념 증명 사례만 제공하므로 기존 데이터 세트에서 무작위로 하나를 선택합니다.
heavy chain (H): ' QVQLKESGPGLLQPSQTLSLTCTVSGISLSDYGVHWVRQAPGKGLEWMGIIGHAGGTDYNSNLKSRVSISRDTSKSQVFLKLNSLQQEDTAMYFC----------WGQGIQVTVSSA '
light chain (L): ' YTLTQPPLVSVALGQKATITCSGDKLSDVYVHWYQQKAGQAPVLVIYEDNRRPSGIPDHFSGSNSGNMATLTISKAQAGDEADYYCQSWDGTNSAWVFGSGTKVTVLGQ '
원본 CDR-H3에는 "-"가 표시되어 있습니다. 여러 CDR을 설계하는 것도 지원되며 이에 대해서는 나중에 설명하겠습니다.
3. CDR 설계
마지막 단계는 디자인 API를 사용하여 CDR을 디자인하는 것입니다.
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
이러한 코드는 ./api/design.py
에 예제로 추가되므로 다음을 통해 직접 실행할 수 있습니다.
python -m api.design
여기서는 "-"를 사용하여 CDR-H3을 수동으로 표시하지만 auto_detect_cdrs=True
설정하여 IMGT 번호 지정 시스템에 의해 CDR이 자동으로 결정되도록 할 수도 있습니다. 설계할 CDR 유형은 지정된 체크포인트에서 자동으로 파생됩니다. 현재 API는 단일 또는 다중 CDR 재설계뿐만 아니라 전체 항체 설계( "-" * length
입력으로 전달하여)를 지원합니다.
Openmm Relax를 활성화하면 생성 프로세스가 많이 느려지지만 물리적 제약에 맞게 결합 길이와 각도가 수정됩니다.
최적화 API( ./api/optimize.py
)는 간단합니다. 예를 들어 ./demos/data/1nca.pdb
최적화합니다.
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
)
이 예제의 코드는 ./api/optimize.py
에도 추가되므로 다음을 통해 직접 실행할 수 있습니다.
python -m api.optimize
그러면 다음과 같은 결과를 얻게 됩니다:
├── 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
여기서 1nca_original.pdb
는 원본 컴플렉스이고 1nca_a_b.pdb
는
복합 구조 예측 API( ./api/structure_prediction.py
)는 항원, 중쇄와 경쇄의 서열, 에피토프의 정의를 고려하여 복합 구조를 예측합니다. 글로벌 도킹은 여전히 매우 어렵기 때문에 관심 있는 에피토프로 범위를 좁힙니다. 예를 들어 ./demos/data/1nca.pdb
예측합니다.
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
이 예제의 코드는 ./api/structure_prediction.py
에도 추가되므로 다음을 통해 직접 실행할 수 있습니다.
python -m api.structure_prediction
그러면 다음과 같은 결과를 얻게 됩니다:
├── demos/data
│ ├── 1nca_model_0.pdb
│ ├── 1nca_model_1.pdb
│ ├── 1nca_model_2.pdb
│ ├── ...
여기서는 총 10개의 샘플링된 형태가 있어야 합니다. IMGT 번호 매기기 시스템에 따라 가변 도메인을 벗어난 경우 처음 또는 마지막 몇 잔기가 결과에서 삭제될 수 있습니다.
시험관내 디스플레이는 일반적으로 항체 라이브러리에서 결합 돌연변이를 선택하는 데 사용됩니다. 여기에서는 에피토프 정의가 있는 항원에 대해 기존 데이터 세트에서 후보를 생성하고 필터링하여 설계 API를 사용하여 인실리코 버전을 구현합니다. 또한 생성된 항체가 표적에 얼마나 잘 결합하는지 평가할 수 있는 측정 기준이 필요합니다. 여기서는 FoldX를 선호도 예측자로 사용하므로 이 데모를 실행하려면 먼저 공식 웹사이트에서 FoldX를 다운로드하고 이에 따라 ./configs.py
의 경로를 수정해야 할 수도 있습니다. 이전 섹션의 TRPV1 예를 계속 사용하고 프레임워크 영역을 제공하는 항체 라이브러리로 RAbD 벤치마크를 사용합니다.
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
그러면 FoldX가 예측한 선호도를 가진 30개의 후보가 생성됩니다.
우리 작업에 관심을 가져주셔서 감사합니다!
알고리즘, 코드, 실행 시 발생하는 문제에 대한 질문을 더 명확하고 개선할 수 있도록 언제든지 문의해 주세요. github 저장소에서 문제를 생성하거나 [email protected]으로 문의하실 수 있습니다.
아래 파일은 기존 저장소에서 빌려온 것입니다.
evaluation/TMscore.cpp
: https://zhanggroup.org/TM-score/evaluation/ddg
: https://github.com/HeliXonProtein/bind-ddg-predictor