はじめに
少し前に話題になった拡散モデルを使用したDiffDOCKというツールを使ってみました。
論文によるとPDBbindデータセットを使用したブラインドドッキングにおいてGNINA、SMINA、GLIDE、EQUIBINDといったツールと比較して精度が向上したらしいです。
github : https://github.com/gcorso/DiffDock
以下は使用しているマシンのスペックです。
項目 | スペック |
---|---|
OS | Ubuntu 22.04 |
CPU | AMD Ryzen 7 5700X 8-Core Processor |
メモリ | DDR4-3200 ( 16GB × 2 ) |
GPU | GeForce RTX 2080 Ti |
インストール
git clone https://github.com/gcorso/DiffDock.git
cd DiffDock/
#conda環境の作成
conda create -n diffdock python=3.8
conda activate diffdock
#pytorchのインストール(https://pytorch.org/)
conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia
#他に必要なパッケージのインストール
conda install pyg pytorch-scatter pytorch-sparse pytorch-cluster pytorch-spline-conv -c pyg
python -m pip install PyYAML scipy "networkx[default]" biopython rdkit-pypi e3nn spyrmsd pandas biopandas
#ESMのインストール
pip install "fair-esm[esmfold]"
pip install 'dllogger @ git+https://github.com/NVIDIA/dllogger.git'
pip install 'openfold @ git+https://github.com/aqlaboratory/openfold.git@4b41059694619831a7db195b7e0988fc4ff3a307'
使用例
以下のコマンドで/data/protein_ligand_example_csv.csvに記述されているタンパク質とリガンドについて計算が実行されます。
python -m inference --protein_ligand_csv data/protein_ligand_example_csv.csv --out_dir results/user_predictions_small --inference_steps 20 --samples_per_complex 40 --batch_size 10 --actual_steps 18 --no_final_step_noise
complex_name,protein_path,ligand_description,protein_sequence
,data/1a0q/1a0q_protein_processed.pdb,data/1a0q/1a0q_ligand.sdf,
,data/1a0q/1a0q_protein_processed.pdb,COc(cc1)ccc1C#N,
--samples_per_complexで40を指定しているので、40個のリガンドポーズとそのconfidence scoreを出力します。confidence scoreが小さいほど良いポーズなので基本的にrank1_confidence~.sdfを使用することになりそうです。
他にもSMILESで直接リガンドを指定することもできるらしいのでgithubの方を見てみてください。
DUD-Eによる検証
DUD-E(https://dude.docking.org/)と呼ばれるドッキングシミュレーションのためのベンチマークを使用して精度を検証します。各タンパク質に対して活性化合物と不活性化合物が含まれています。
今回使用したタンパク質
今回は以下のような手順を行いました
・ダウンロードしたreceptor.pdbをmoeのstructure preparationによって処理
・actives_final.mol2、decoys_final.mol2をリガンド1つずつのmol2ファイルに分割
・protein_ligand.csvにタンパク質とリガンドのパスを記述
・計算実行
・AUCを計算
計算には800化合物で7時間くらいかかりました
計算後、以下のスクリプトを用いてリガンドのconfidence scoreを取得しました
CURRENT=$(cd $(dirname $0);pwd)
dirs=`find $CURRENT -type d`
for dir in $dirs; do
cd $dir
sub_dir=`basename $dir`
bestfile="rank1_*.sdf"
score=""
for file in $bestfile; do
if [ -f "$file" ]; then
score=$(echo "$file" | grep -o '[0-9]\.[0-9][0-9]')
echo $sub_dir,$score
break
fi
done
done
結果
scikit-learnのroc_auc_score関数を使用してAUCを計算したところ、AUCは0.448でした。
あまり良くなかったですね
今後
面白いツールではあるのでもう少し検証していきたいです