OpenBPMD の使い方

# 概要
ドッキングシミュレーションでは、たくさんのドッキングポーズを短時間で作り出すことができるが、これらを正確にランク付けすることは困難とされている。実験的に得られたドッキングポーズとの RMSD 値が 2 Å 以下の正しいドッキングポーズをランキング上位に予測できる可能性は 40 - 60%とされている。

OpenBPMD では、ドッキングシミュレーションの結果に対して MD 計算を行いドッキングポーズの順位付けを行うプログラムである。オープンソースの OpenMM で実装されている。

OpenBPMD では、88% の確率で正しくドッキングポーズをランク付けすることが可能であると論文では報告されている。Grand-canonical Monte Carlo algorithm を用いた GCMC/MD を実施して、水分子の配置を行うことにより、予測性能が向上したと述べられている。

### Reference
1. A. J. Clark, P. Tiwary, K. Borrelli, S. Feng, E. Miller, R. Abel, R. A. Friesner, B. J. Berne, <i>J. Chem. Theory Comput.</i> <strong>2016</strong>, <i>12</i>, 6, 2990–2998. DOI:<a href="https://doi.org/10.1021/acs.jctc.6b00201">10.1021/acs.jctc.6b00201</a>
1. D. Lukauskis, M. L. Samways, S. Aureli, B. P. Cossins, R. D. Taylor, F. L. Gervasio, <i>J. Chem. Inf. Model.</i> <strong>2022</strong>, <i>62</i>, 23, 6209–6216. DOI:<a href="https://doi.org/10.1021/acs.jcim.2c01142">10.1021/acs.jcim.2c01142</a>

# 検証環境
CPU:AMD Ryzen 9 7950X
GPU:NVIDIA RTX 4000
RAM:32GB
OS Fedora40

# インストール方法

```shell
git clone https://github.com/Gervasiolab/OpenBPMD

# python は、3.11 を指定する。3.13 だと numpy でエラーが生じる。
source ~/miniconda3/etc/profile.d/conda.sh
conda create -n openbpmd python=3.11
conda activate openbpmd

conda install -c conda-forge -c omnia openmm -y
conda install -c conda-forge mdanalysis -y
conda install -c conda-forge mdtraj -y
conda install -c conda-forge parmed -y
conda install -c conda-forge numpy -y
```

# 実行方法
問題なくインストールできているかを確認する
```shell
cd ~/OpenBPMD/examples
python ../openbpmd.py -h

# 以下のように表示されるはず
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
usage: openbpmd.py [-h] [-s STRUCTURE] [-p PARAMETERS] [-o OUTPUT]
                   [-lig_resname LIG_RESNAME] [-nreps NREPS]
                   [-hill_height HILL_HEIGHT]

    OpenBPMD - an open source implementation of Binding Pose Metadynamics
    (BPMD) with OpenMM. Replicates the protocol as described by
    Clark et al. 2016 (DOI: 10.1021/acs.jctc.6b00201).

    Runs ten 10 ns metadynamics simulations that biases the RMSD of the ligand.

    The stability of the ligand is calculated using the ligand RMSD (PoseScore)
    and the persistence of the original noncovalent interactions between the
    protein and the ligand (ContactScore). Stable poses have a low RMSD and
    a high fraction of the native contacts preserved until the end of the
    simulation.

    A composite score is calculated using the following formula:
    CompScore = PoseScore - 5 * ContactScore
    

options:
  -h, --help            show this help message and exit
  -s STRUCTURE, --structure STRUCTURE
                        input structure file name (default: solvated.rst7)
  -p PARAMETERS, --parameters PARAMETERS
                        input topology file name (default: solvated.prm7)
  -o OUTPUT, --output OUTPUT
                        output location (default: .)
  -lig_resname LIG_RESNAME
                        the name of the ligand (default: MOL)
  -nreps NREPS          number of OpenBPMD repeats (default: 10)
  -hill_height HILL_HEIGHT
                        the hill height in kcal/mol (default: 0.300000)
```

環境によっては、`libstdc++.so.6` に関するエラーが起きる場合がある。
その場合は、以下のコマンドで解決する。

```shell
conda install -c conda-forge libstdcxx-ng -y
# ジョブスケジューラーを使う際は、以下の行wジョブスクリプトに書いた方が良い。
LD_PRELOAD=~/miniconda3/pkgs/libstdcxx-15.1.0-h8f9b012_2/lib/libstdc++.so.6 
```

以下が標準的な実行方法だが、計算には数時間かかるため、ジョブスケジューラーで実行した方が良い。

```shell
python openbpmd.py -s gmx.gro -p gmx.top -o ligand0_pose0 -lig_resname MOL -nreps 5
```

今回は、t1 と言うディレクトリを作成して、実行する。

```shell
cd ~/OpenBPMD/
mkdir -p t1
cp examples/solvated* t1/
cd t1
python ../openbpmd.py -s solvated.gro -p solvated.top -o ligand0_pose0 -lig_resname MOL -nreps 5
```

# 解析
先ほどの計算で、/OpenBPMD/t1/ligand0_pose0 というディレクトリが新たに作られ、以下のファイルが生成する。

```shell
centred_equil_system.pdb  minimized_system.pdb  rep_1  rep_3  results.csv
equil_system.pdb          rep_0                 rep_2  rep_4
```

以下のように解析を進める。
```shell
cd ~/OpenBPMD
python ../../examples/analysis_openbpmd.py t1/
```
`_results` というディレクトリが新たに作られ、以下のファイルが生成する。
```shell
CompScore.png  ContactScore.png  PoseScore.png  results.csv
```