Dockerを用いARM MacでAutoDock Vina公式チュートリアル "Basic docking" を実行する
動機
Autodock Vina (以下Vina) は、分子ドッキングを行うためのオープンソースプログラムです。前回ARM MacにVina をインストールする方法を書きました。
でも残念なことに、MacにVinaをインストールしても、公式チュートリアルのBasic docking(以下チュートリアル)を実行するとができません。Vinaと併用するADFR Suiteのインストール時にエラーが出て完了しないためです。システム設定>プライバシーとセキュリティの「“python2.7”は、開発元を検証できないため、使用がブロックされました。」という項目で「このまま許可」を選んでも解決しません。また、pyenvでPython2.7を別途インストールするという回避策もpip2でNumpyを導入できないため結局行き詰まります。そもそもADFRに含まれている実行ファイルはx86専用なのでないかと思われます。Rosettaを使えば何とかなるのでしょうか。わかりません。ちなみに、Linux用のADFRはarm64版なくx86_64版のみ提供されています。
なら、Dockerでx86_64 Linuxを立ち上げたらどうだ、エミュレーションなので実行は遅くなるけど、なんとしてもMacだけでチュートリアルの手順を実行できるようにしたい、というのが本記事の趣旨です。
追記)Rosettaでも何とかなるようですが、私の環境ではうまくいきませんでした。→Fixing ADFRSuite for Apple Silicon
環境
- MacBook Pro 2021
- Apple M1 Pro
- MacOS Sonoma 14.4.1
- Miniconda 24.4.0
準備
まだであればDockerをインストールしてください。公式マニュアル
x86_64 Linux環境構築
ターミナルから以下のコマンドを入力して、Linuxのイメージをダウンロードしコンテナを立ち上げます。
docker pull debian --platform linux/amd64
docker run -it -d --name debian debian
docker exec -it debian /bin/bash
Linux環境に入りました。次に必要なコマンドをインストールします。
apt update -y
apt full-upgrade -y
apt install adduser sudo wget unzip nano -y
Rootユーザーのまま続けるのが気持ち悪ければユーザーアカウントを作りましょう。
adduser user_name
gpasswd -a <user_name> sudo
...
login
...
Condaインストール
公式の方法でCondaをインストールします。
mkdir -p ~/miniconda3
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh
bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3
rm -rf ~/miniconda3/miniconda.sh
~/miniconda3/bin/conda init bash
~/miniconda3/bin/conda init zsh
exec $SHELL -l
Vina等インストール
仮想環境を作ってVina, Meeko, ADFRをインストールします。
conda create -y -n vina python=3.8
conda activate vina
conda install -y -c conda-forge hcc::adfr-suite meeko
conda install -y -c conda-forge vina
Vinaをインストール済みですが、チュートリアルで使うPDBファイルやPythonコードを得るためにソースコードをダウンロードします。チュートリアルには " The materials present is this tutorial can be also found here: https://www.nature.com/articles/nprot.2016.051" (Supplementary Data) と書いてあります。それじゃ駄目なのでしょうか?チュートリアルの3. (Optional) Generating affinity maps for AutoDock FFをやりたいなら駄目です。3. に必要なprepare_gpf.pyはVinaのソースコードexample/autodock_scriptsに含まれていますが、Supplementary Data中にはありません。
wget https://github.com/ccsb-scripps/AutoDock-Vina/archive/refs/tags/v1.2.5.zip
unzip v1.2.5.zip
cd AutoDock-Vina-1.2.5/example/basic_docking/data
最後に、Python2とPython3が共存しているので~/miniconda3/envs/vina/bin/mk_prepare_ligand.pyが正しいPythonで起動するようスクリプト冒頭のshebangを書き換えます。1行目をpython3にするだけ。
Before
#!/home/<user_name>/miniconda3/envs/vina/bin/python
# -*- coding: utf-8 -*-
After
#!/home/<user_name>/miniconda3/envs/vina/bin/python3
# -*- coding: utf-8 -*-
これでいよいよチュートリアルを実行する準備が整いました。
チュートリアル実行
1.のprepare_receptorはADFR、2. のmk_prepare_ligand.pyはMeekoのコマンドです。
1. Preparing the receptor
チュートリアルの通りです。
prepare_receptor -r 1iep_receptorH.pdb -o 1iep_receptor.pdbqt
2. Preparing the ligand
mk_prepare_ligand.py -i 1iep_ligand.sdf -o 1iep_ligand.pdbqt
3. (Optional) Generating affinity maps for AutoDock FF
3. はオプショナルとされていますが、4. の解析に必須な過程です。チュートリアルの1iep.gpfは1iep_receptor.gpfの間違いと思われます。
python2 ../../autodock_scripts/prepare_gpf.py -l 1iep_ligand.pdbqt \
-r 1iep_receptor.pdbqt -y
成果物です。太字の情報を4.b. で使います。
1iep_receptor.gpf
npts 40 45 40 # num.grid points in xyz
gridfld 1iep_receptor.maps.fld # grid_data_file
spacing 0.375 # spacing(A)
receptor_types A C OA N SA HD # receptor atom types
ligand_types A C NA OA N HD # ligand atom types
receptor 1iep_receptor.pdbqt # macromolecule
gridcenter 15.664 53.212 15.545 # xyz-coordinates or auto
smooth 0.5 # store minimum energy w/in rad(A)
map 1iep_receptor.A.map # atom-specific affinity map
map 1iep_receptor.C.map # atom-specific affinity map
map 1iep_receptor.NA.map # atom-specific affinity map
map 1iep_receptor.OA.map # atom-specific affinity map
map 1iep_receptor.N.map # atom-specific affinity map
map 1iep_receptor.HD.map # atom-specific affinity map
elecmap 1iep_receptor.e.map # electrostatic potential map
dsolvmap 1iep_receptor.d.map # desolvation potential map
dielectric -0.1465 # <0, AD4 distance-dep.diel;>0, constant
4.a.で使うmap filesも作ります。
autogrid4 -p 1iep_receptor.gpf -l 1iep.glg
4. Running AutoDock Vina
4.a. Using AutoDock4 forcefield
チュートリアル通り。
vina --ligand 1iep_ligand.pdbqt --maps 1iep_receptor --scoring ad4 \
--exhaustiveness 32 --out 1iep_ligand_ad4_out.pdbqt
4.b. Using Vina forcefield
設定ファイルを作ります。
1iep_receptor_vina_box.txt
center_x = 15.664
center_y = 53.212
center_z = 15.545
size_x = 20.0
size_y = 20.0
size_z = 20.0
そしてコマンドを入力します。
vina --receptor 1iep_receptor.pdbqt --ligand 1iep_ligand.pdbqt \
--config 1iep_receptor_vina_box.txt \
--exhaustiveness=32 --out 1iep_ligand_vina_out.pdbqt
5. Results
5.a. Using AutoDock forcefield
チュートリアル結果の-14 kcal/mol より結合自由エネルギーの値が少し小さく出ました。
Scoring function : ad4
Ligand: 1iep_ligand.pdbqt
Exhaustiveness: 32
CPU: 0
Verbosity: 1
Reading AD4.2 maps ... done.
Performing docking (random seed: 989377745) ...
0% 10 20 30 40 50 60 70 80 90 100%
|----|----|----|----|----|----|----|----|----|----|
***************************************************
mode | affinity | dist from best mode
| (kcal/mol) | rmsd l.b.| rmsd u.b.
-----+------------+----------+----------
1 -12.86 0 0
2 -11.82 1.395 2.045
3 -11.23 1.702 2.384
4 -11.06 3.107 10.74
5 -10.71 1.748 3.755
6 -10.57 3.069 10.57
7 -10.06 2.015 12.07
8 -9.927 2.974 11.33
9 -9.71 2.72 11.68
5.b. Using Vina forcefield
こちらはチュートリアル結果と同等。
Scoring function : vina
Rigid receptor: 1iep_receptor.pdbqt
Ligand: 1iep_ligand.pdbqt
Grid center: X 15.664 Y 53.212 Z 15.545
Grid size : X 20 Y 20 Z 20
Grid space : 0.375
Exhaustiveness: 32
CPU: 0
Verbosity: 1
Computing Vina grid ... done.
Performing docking (random seed: 1180383277) ...
0% 10 20 30 40 50 60 70 80 90 100%
|----|----|----|----|----|----|----|----|----|----|
***************************************************
mode | affinity | dist from best mode
| (kcal/mol) | rmsd l.b.| rmsd u.b.
-----+------------+----------+----------
1 -13.3 0 0
2 -11.29 3.02 12.37
3 -11.14 3.784 12.16
4 -10.86 1.639 13.52
5 -10.58 2.544 12.66
6 -10.31 3.589 12.19
7 -9.422 2.553 12.69
8 -9.073 1.592 2.66
9 -8.779 3.933 12.6
まとめ
何とかMac単体でSimple dockingの流れをたどることができました。今回Dockerでエミュレートしたx86_64環境で全ての操作を行いましたが、MacネイティブのVinaとMeekoはより高速に動きます。インストール方法はこちら。実務の際は、チュートリアルの1. Preparing the receptor、3. Generating affinity maps for AutoDock FFのgpfファイルを作る過程のみDocker上で行い、他の操作はローカルで済ませるのが効率的です。