Diffdock-Pocket은 포켓 레벨에서 작동하는 모든 원자 도킹 모델입니다. 그것은 측쇄 비틀림 각도에 대한 확산을 구현하고 계산적으로 생성 된 구조에 대해 최적화됩니다. 이 저장소에서는 모델을 훈련시키고 추론, 시각화 및 논문에 제시된 숫자를 달성하는 데 사용한 가중치를위한 코드를 찾을 수 있습니다. 이 저장소는 원래 Diffdock의 포크이므로 일부 명령은 친숙해 보일 수 있지만 두 프로그램의 호환성을 기대할 수없는 많은 장소에서 확장, 적응 및 변경되었습니다. 이 두 프로그램을 혼합하지 마십시오!
쉽게 추론을 실행하는 방법을 원한다면 여기에서 Huggingface 인터페이스를 사용할 수 있습니다.
이 저장소에 문제가있는 경우 문제 또는 PR을 자유롭게 만들 수 있습니다! 행동 강령을 고려하십시오.

간단히 실행하여 CPU 또는 CUDA Conda 환경을 만들 수 있습니다.
conda env create -f environment[-cpu].yml
CPU 플래그가 있거나없는 경우. CUDA 버전은 훨씬 빠르기 때문에 권장됩니다.
이 최소한의 예에서는 복잡한 3dpf 사용하고 유연한 측면 Cahins로 리간드를 다시 도구합니다. 우리는 40 개의 샘플을 그리고 신뢰 모델로 순위를 매 깁니다. 모든 예측은 results/ 에 저장됩니다.
python inference.py --protein_path example_data/3dpf_protein.pdb --ligand example_data/3dpf_ligand.sdf --batch_size 20 --samples_per_complex 40 --keep_local_structures --save_visualisation
여기, 우리는 리간드를 수정하지 않도록 --keep_local_structures 플래그를 지정했습니다. 이를 통해 포켓과 모델을 모델링하는 측쇄가 자동으로 결정됩니다.
이 명령이 메모리가 부족한 경우 --batch_size 또는 --samples_per_complex 매개 변수를 줄일 수 있습니다. 낮추는 --batch_size 는 결과의 품질에 영향을 미치지 않지만 런타임이 증가합니다.
계산적으로 생성 된 구조에 대한 유사한 명령은 다음과 같습니다.
python inference.py --protein_path example_data/3dpf_protein_esm.pdb --ligand example_data/3dpf_ligand.sdf --batch_size 20 --samples_per_complex 40 --keep_local_structures --save_visualisation
상단 1 예측 리간드 포즈에서 에너지 최소화를 수행하려면 --relax 플래그를 사용할 수 있습니다.
바인딩 포켓을 알고 있고 어떤 측쇄를 유연하게 모델링 해야하는지 알면 지정할 수 있습니다. 이 경우 --keep_local_structures 삭제할 수도 있습니다. 우리는 우리의 제공된 모델을 사용하여 3.5A 내에서 중대한 리간드 원자의 적어도 하나의 무거운 원자를 갖는 유연한 아미노산을 사용하는 것이 좋습니다. 이것은 배포되지 않은 데이터를 방지합니다.
python inference.py --protein_path example_data/3dpf_protein.pdb --ligand example_data/3dpf_ligand.sdf --batch_size 20 --samples_per_complex 40 --save_visualisation --pocket_center_x 9.7742 --pocket_center_y 27.2863 --pocket_center_z 14.6573 --flexible_sidechains A:160-A:193-A:197-A:198-A:222-A:224-A:227
또는 리간드가 없으면 미소 표현을 사용할 수도 있습니다.
--ligand [H]/N=C1/C(=O)C(=O)[C@@]1([H])[N@@+]1([H])C([H])([H])c2c([H])c(C([H])([H])N([H])C(=O)c3nc4sc5c(c4c(=O)n3[H])C([H])([H])C([H])([H])S(=O)(=O)C5([H])[H])c([H])c([H])c2C([H])([H])C1([H])[H]
그러나이 경우 포켓 센터와 유연한 측쇄를 지정해야합니다.
여러 단지를 다루는 경우 플래그를 사용하여 data/protein_ligand_example_csv --protein_ligand_csv data/protein_ligand_example_csv.csv 살펴 봅니다. 이를 통해 여러 단지에서 한 번에 추론을 지정할 수 있으며, 여기서 각 단지에 대한 포켓 센터 및 유연한 측쇄를 지정할 수 있습니다.
포켓 센터를 선택할 때는 결합 부위에 가까운 아미노산을 결정하고 C- 알파 좌표의 평균을 계산하는 것이 가장 좋습니다. 우리의 훈련에서, 우리는 그들의 c- 알파 원자가 리간드의 무거운 원자의 5A 내에있는 모든 아미노산을 선택했다.
우리는 많은 소스에서 다운로드 할 수있는 PDBBind를 사용하고 있습니다. 그러나 사전 처리 된 PDBBIND 데이터 세트도 여기에서 unzip 을 풀 수 있습니다. 모든 단백질은 pdbfixer로 고정되어 포켓에서 RMSD를 최소화하기 위해 정렬되었습니다. data/PDBBIND_atomCorrected 로 포장을 풀어주십시오.
대형 점수 모델을 훈련하십시오.
python -m train --run_name big_score_model --test_sigma_intervals --log_dir workdir --lr 1e-3 --tr_sigma_min 0.1 --tr_sigma_max 5 --rot_sigma_min 0.03 --rot_sigma_max 1.55 --tor_sigma_min 0.03 --sidechain_tor_sigma_min 0.03 --batch_size 16 --ns 60 --nv 10 --num_conv_layers 6 --distance_embed_dim 64 --cross_distance_embed_dim 64 --sigma_embed_dim 64 --dynamic_max_cross --scheduler plateau --scale_by_sigma --dropout 0.1 --sampling_alpha 1 --sampling_beta 1 --remove_hs --c_alpha_max_neighbors 24 --atom_max_neighbors 8 --receptor_radius 15 --num_dataloader_workers 1 --cudnn_benchmark --rot_alpha 1 --rot_beta 1 --tor_alpha 1 --tor_beta 1 --val_inference_freq 5 --use_ema --scheduler_patience 30 --n_epochs 750 --all_atom --sh_lmax 1 --split_train data/splits/timesplit_no_lig_overlap_train --split_val data/splits/timesplit_no_lig_overlap_val_aligned --pocket_reduction --pocket_buffer 10 --flexible_sidechains --flexdist 3.5 --flexdist_distance_metric prism --protein_file protein_esmfold_aligned_tr_fix --compare_true_protein --conformer_match_sidechains --conformer_match_score exp --match_max_rmsd 2 --use_original_conformer_fallback --use_original_conformer
모델 가중치는 workdir 디렉토리에 저장되며 추론에 사용할 수 있습니다.
신뢰 모델을 훈련시키기 위해 이전에 훈련 된 점수 모델을 사용하여 샘플을 생성 할 수 있습니다. 그러나, 우리는 최대 최대 리간드 번역으로 또 다른 (작은) 점수 모델을 훈련하기로 결정하여 신뢰 모델이 더 다양한 샘플을보고 훈련 데이터를 더 빨리 생성 할 수 있도록했습니다.
최대 번역이 높은이 작은 점수 모델을 훈련 시키려면 다음을 실행하십시오.
python -m train --run_name small_score_model --test_sigma_intervals --esm_embeddings_path data/esm2_3billion_embeddings.pt --cache_path data/cache --log_dir workdir --lr 1e-3 --tr_sigma_min 0.1 --tr_sigma_max 15 --rot_sigma_min 0.03 --rot_sigma_max 1.55 --tor_sigma_min 0.03 --sidechain_tor_sigma_min 0.03 --batch_size 16 --ns 32 --nv 6 --num_conv_layers 5 --dynamic_max_cross --scheduler plateau --scale_by_sigma --dropout 0.1 --sampling_alpha 1 --sampling_beta 1 --remove_hs --c_alpha_max_neighbors 24 --atom_max_neighbors 12 --receptor_radius 15 --num_dataloader_workers 1 --cudnn_benchmark --rot_alpha 1 --rot_beta 1 --tor_alpha 1 --tor_beta 1 --val_inference_freq 5 --use_ema --scheduler_patience 30 --n_epochs 500 --all_atom --sh_lmax 1 --split_train data/splits/timesplit_no_lig_overlap_train --split_val data/splits/timesplit_no_lig_overlap_val_aligned --pocket_reduction --pocket_buffer 10 --flexible_sidechains --flexdist 3.5 --flexdist_distance_metric prism --protein_file protein_esmfold_aligned_tr_fix --compare_true_protein --conformer_match_sidechains --conformer_match_score exp --match_max_rmsd 2 --use_original_conformer_fallback --use_original_conformer
신뢰 모델을 훈련시키기 위해 샘플을 생성하는 데 사용되는 점수 모델은 추론 중에 해당 신뢰 모델과 함께 사용되는 점수 모델과 동일 할 필요는 없습니다.
다음을 실행하여 신뢰 모델을 훈련하십시오.
python -m filtering.filtering_train --run_name confidence_model --original_model_dir workdir/small_score_model --ckpt best_ema_inference_epoch_model.pt --inference_steps 20 --samples_per_complex 7 --batch_size 16 --n_epochs 100 --lr 3e-4 --scheduler_patience 50 --ns 24 --nv 6 --num_conv_layers 5 --dynamic_max_cross --scale_by_sigma --dropout 0.1 --all_atoms --sh_lmax 1 --split_train data/splits/timesplit_no_lig_overlap_train --split_val data/splits/timesplit_no_lig_overlap_val_aligned --log_dir workdir --cache_path .cache/data_filtering data/PDBBIND_atomCorrected --remove_hs --c_alpha_max_neighbors 24 --receptor_radius 15 --esm_embeddings_path data/esm2_3billion_embeddings.pt --main_metric loss --main_metric_goal min --best_model_save_frequency 5 --rmsd_classification_cutoff 2 --sc_rmsd_classification_cutoff 1 --protein_file protein_esmfold_aligned_tr_fix --use_original_model_cache --pocket_reduction --pocket_buffer 10 --cache_creation_id 1 --cache_ids_to_combine 1 2 3 4
먼저 --cache_creation_id 1 사용하여 --cache_creation_id 2 등. 최대 4
이제 모든 것이 훈련되고 새 모델과의 추론을 실행할 수 있습니다 :).
연구에서 diffdock-pocket을 사용하는 경우 다음 논문을 인용하십시오.
@article{plainer2023diffdockpocket,
author = {Plainer, Michael and Toth, Marcella and Dobers, Simon and St{"a}rk, Hannes and Corso, Gabriele and Marquet, C{'e}line and Barzilay, Regina},
title = {{DiffDock-Pocket}: Diffusion for Pocket-Level Docking with Sidechain Flexibility},
year = {2023},
maintitle = {Advances in Neural Information Processing Systems},
booktitle = {Machine Learning in Structural Biology},
}
이 코드를보다 쉽게 사용할 수 있도록하고 Huggingface 인터페이스를 작성해 주신 @jsilter에게 감사드립니다!