【Linux】最新版のOpenBabelをローカルにインストールする

[**OpenBabel**](http://openbabel.org/wiki/Main_Page)は情報化学（ケモインフォマティクス）の領域で利用されるツール群のパッケージで、主にファイル・データのフォーマットを変換するために用いられます。公式のGithubリポジトリで公開されているバージョンのリストは以下。（最新版は3.1.1）

https://github.com/openbabel/openbabel/releases

公式サイトからは古いバージョンしかインストールできないため、最新版を導入するにはソースコードからコンパイルする必要があります。本エントリでは最新版のOpenBabelをローカルにインストールする手順を示します。


# 前提
● `${HOME}/usr/app/` というディレクトリが存在する（無ければ作成しておく or 適切なパスに書き換えてください）
● CentOS7のLinux環境である（バージョンは `cat /etc/os-release` で確認できます）
> CentOS7 未満だとC++11が使えず、別途アップデートが必要となります。


# OpenBabelのインストール

カレントディレクトリが `${HOME}/usr/app` の状態で以下を実行します。

```bash:OpenBabelのインストール手順
git clone https://github.com/openbabel/openbabel.git
mkdir -p openbabel/build
cd openbabel/build
cmake -DCMAKE_INSTALL_PREFIX=${HOME}/usr/app/babel -DENABLE_OPENMP=ON -DBUILD_GUI=OFF ..
make -j6
make install
```

`git clone`すると`openbabel`という名前のディレクトリが生成します。
上の例では `DCMAKE_INSTALL_PREFIX` のオプションで、インストール先のディレクトリを `${HOME}/usr/app/babel` としています。GUIを無効化し、並列化を有効化する設定で `cmake` を実行します。

上の例では時間短縮のために `make -j6` として6並列でコンパイルしています。`cpuinfo` や `less /proc/cpuinfo` などでCPUのコア数を確認してから指定してください。

完了すると `${HOME}/usr/app/babel/bin/` に実行可能ファイルが生成していますので、`.bashrc` などのログインシェルに以下の行を追記して `source` します。

```bash:ログインシェルに追記する行
export PATH=${HOME}/usr/app/babel/bin:${PATH}
```

以上で `obabel` というコマンドによってOpenBabelを呼び出せるようになります。


# 【※】CMakeのバージョンでエラーが出る場合

私の環境ではCMakeのバージョンが2.8系と古かったため、`cmake` の際に以下のようなエラーが出てしまいました。

```bash:エラーメッセージ
CMake 3.1 or higher is required.
```

そこで、最新の CMake をインストールします。（2023年1月現在の最新バージョンは3.25.2）

```bash:CMakeをローカルにインストールする
wget https://github.com/Kitware/CMake/releases/download/v3.25.2/cmake-3.25.2.tar.gz
tar -zxvf cmake-3.25.2.tar.gz
cd cmake-3.25.2
./configure --prefix=${HOME}/usr/app/cmake/
make -j6
make install
```

`cmake` の展開場所はどこでも良いですが、上の例では `${HOME}/usr/app/` の配下に `cmake` というディレクトリを用意しています。私の環境では `./configure` に数分要しました。makeの際は上記と同様に必要に応じて並列して下さい。

完了すると `${HOME}/usr/app/cmake/bin/` に実行可能ファイルが生成していますので、`.bashrc` などのログインシェルに以下の行を追記して `source` します。

```bash:ログインシェルに追記する行
export PATH=${HOME}/usr/app/cmake/bin:${PATH}
```

> この順番で$PATHに追加しないと、元々導入されていた古いバージョンのcmakeを優先的に参照してしまうので注意。

以上を済ませた上で、再度OpenBabelのインストールを行います。


# OpenBabelを使ってみる

せっかくなので、導入したOpenBabelを使ってみます。
例として、以下のような4-アミノサリチル酸のsdf形式のデータ（[**PubChem**](https://pubchem.ncbi.nlm.nih.gov/compound/4649)から取得）を別のフォーマットに変換してみます。

```C7H7NO3.sdf
4649
  -OEChem-02022307383D

 18 18  0     0  0  0  0  0  0999 V2000
    0.6705   -2.1801   -0.1869 O   0  0  0  0  0  0  0  0  0  0  0  0
    2.5574    1.4370   -0.4767 O   0  0  0  0  0  0  0  0  0  0  0  0
    2.8355   -0.6088    0.4742 O   0  0  0  0  0  0  0  0  0  0  0  0
   -3.5675    0.0822    0.0040 N   0  0  0  0  0  0  0  0  0  0  0  0
    0.6306    0.2081    0.0328 C   0  0  0  0  0  0  0  0  0  0  0  0
   -0.0296   -1.0154   -0.0820 C   0  0  0  0  0  0  0  0  0  0  0  0
   -2.1578    0.1243    0.0136 C   0  0  0  0  0  0  0  0  0  0  0  0
   -1.4239   -1.0573   -0.0916 C   0  0  0  0  0  0  0  0  0  0  0  0
   -0.1033    1.3895    0.1380 C   0  0  0  0  0  0  0  0  0  0  0  0
   -1.4974    1.3476    0.1284 C   0  0  0  0  0  0  0  0  0  0  0  0
    2.0857    0.2729    0.0462 C   0  0  0  0  0  0  0  0  0  0  0  0
   -1.9333   -2.0140   -0.1815 H   0  0  0  0  0  0  0  0  0  0  0  0
    0.3818    2.3565    0.2417 H   0  0  0  0  0  0  0  0  0  0  0  0
   -2.0585    2.2748    0.2139 H   0  0  0  0  0  0  0  0  0  0  0  0
   -4.1001    0.9386    0.0795 H   0  0  0  0  0  0  0  0  0  0  0  0
   -4.0470   -0.8044   -0.0797 H   0  0  0  0  0  0  0  0  0  0  0  0
    1.6243   -2.0052   -0.2179 H   0  0  0  0  0  0  0  0  0  0  0  0
    3.5377    1.4721   -0.4639 H   0  0  0  0  0  0  0  0  0  0  0  0
  1  6  1  0  0  0  0
  1 17  1  0  0  0  0
  2 11  1  0  0  0  0
  2 18  1  0  0  0  0
  3 11  2  0  0  0  0
  4  7  1  0  0  0  0
  4 15  1  0  0  0  0
  4 16  1  0  0  0  0
  5  6  2  0  0  0  0
  5  9  1  0  0  0  0
  5 11  1  0  0  0  0
  6  8  1  0  0  0  0
  7  8  2  0  0  0  0
  7 10  1  0  0  0  0
  8 12  1  0  0  0  0
  9 10  2  0  0  0  0
  9 13  1  0  0  0  0
 10 14  1  0  0  0  0
M  END
$$$$
```

* * *

SDF形式をSMILES記法に変換するには以下のようなコマンドを叩きます。

```sh:
obabel C7H7NO3.sdf -O C7H7NO3.smi
```
　↓　出力結果
```:C7H7NO3.smi
Oc1c(ccc(N)c1)C(=O)O	
```

* * *

SDF形式をXYZ形式に変換するには以下のようなコマンドを叩きます。

```sh:
obabel C7H7NO3.sdf -O C7H7NO3.xyz
```
　↓　出力結果
```:C7H7NO3.xyz
18

O          0.67050       -2.18010       -0.18690
O          2.55740        1.43700       -0.47670
O          2.83550       -0.60880        0.47420
N         -3.56750        0.08220        0.00400
C          0.63060        0.20810        0.03280
C         -0.02960       -1.01540       -0.08200
C         -2.15780        0.12430        0.01360
C         -1.42390       -1.05730       -0.09160
C         -0.10330        1.38950        0.13800
C         -1.49740        1.34760        0.12840
C          2.08570        0.27290        0.04620
H         -1.93330       -2.01400       -0.18150
H          0.38180        2.35650        0.24170
H         -2.05850        2.27480        0.21390
H         -4.10010        0.93860        0.07950
H         -4.04700       -0.80440       -0.07970
H          1.62430       -2.00520       -0.21790
H          3.53770        1.47210       -0.46390

```

* * *

画像に変換することもできます。

```sh:
obabel C7H7NO3.sdf -O C7H7NO3.svg
```
　↓　出力結果
![C7H7NO3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697094/b6ee72ea-6dd6-a70f-ede9-7d90e6d4b1ff.png)
> Qiitaに掲載する都合上、png形式の画像に変換しています。


# 参考資料

https://qiita.com/kuchida1981/items/d028940ade41096490de

sudo権限がある場合は以下の記事のようにして導入可能です。

https://qiita.com/MasafumiTsuyuki/items/73af68e94b14447a3d74