Dockerを用いARM MacでAutoDock Vina公式チュートリアル "Basic docking" を実行する

動機

Autodock Vina (以下Vina) は、分子ドッキングを行うためのオープンソースプログラムです。前回ARM MacにVina をインストールする方法を書きました。

AutoDock VinaをARM Macにインストールする方法2024年版

AutoDock Vinaはタンパク質とリガンド等分子の結合をシミュレーションするソフトウエアです。AutoDock Vina v1.2.5をM1 MacのConda環境にインストール際にハマりました。…

でも残念なことに、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上で行い、他の操作はローカルで済ませるのが効率的です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です