Open babel, Pybel, RDkit間でmolファイルを扱えるように相互変換する

Pythonでケモインフォマティクスをやる際に必須のライブラリ群として、RDkit・Open Babel・Pybelがあります。どのライブラリも分子操作や機械学習のための記述子生成などが行えますが、そのパッケージでしか出来なかったり、より簡単に実装出来たりする操作もあります。

基本的に化合物をmol objectに変換するのを起点として各種操作を行います。当然ですがそれぞれのライブライラリで作成したmol objectは別のライブラリでは読み込めませんので、変換する必要があります。

Open Babel → Pybelへの変換

Openbabelのmol からPybelのmolへは、専用の変換モジュールがある。

# SmilesからOpenbabel形式のmolを作成
import openbabel
obConversion.SetInFormat("smi")
obmol = openbabel.OBMol()
obConversion.ReadString(obmol, "C1=CC=CS1")
obmol

<openbabel.OBMol; proxy of <Swig Object of type 'OpenBabel::OBMol *’ at 0x000001BA8BBA6C60> >

# Molucule()でOpenbabel molをpybel molに変換
import pybel 
pybelmol = pybel.Molecule(obmol)
pybelmol

Open Babel, Pybel → RDkitへの変換

Open BabelまたはPybelのmolを一旦SDFファイルとして出力してから、RDkitで読み込みます。逆経路も同じくSDF経由です。

from rdkit import Chem
pybelmol.write("sdf", "outputfile.sdf")
rdmol = Chem.SDMolSupplier('outputfile.sdf')
rdmol

<rdkit.Chem.rdmolfiles.SDMolSupplier at 0x1ba866ff1b8>