実践ケモインフォマティクス

〜主にケモインフォマティクス, 個人的な備忘録〜

RDkitを用いた分子の操作(3D構造の最適化)


前準備

モジュールのインストール

conda install -c conda-forge rdkit
pip install py3Dmol

分子の準備

適当な分子を準備する。

#分子の準備
mol = Chem.MolFromSmiles('CN[C@H](C)[C@H](O)c1ccccc1')

#もしくは,SDFファイルの読み込みの際に,removeHs=Falseとすることで、水素原子を保持したまま分子の読み込みが可能
# suppl = Chem.SDMolSupplier('XXXX.sdf', removeHs=False)
# mols = [mol for mol in suppl if mol is not None]

最適化前の構造を確認

とりあえず、未処理の分子の3D構造を確認してみる。

#Jupyter notebook上で描画してみる
IPythonConsole.drawMol3D(mol)

#MOLファイルを出力して、座標から構造を確認することも可能
mb = Chem.MolToMolBlock(mol)
with open('mol_2D.mol', 'w') as f:
    f.write(mb)
f:id:chemoinfo-ottantacinque:20210130231016p:plain

sp3炭素も全て平面に押し込まれてしまっている。 (実際は、マウスで構造をぐりぐり動かして確認することが可能)

水素の付加と三次元構造の最適化

水素の付加について

通常、RDkitに格納された分子は水素原子が暗に扱われている。 3次元の帰化構造を生成したり、最適化する場合には、良い3Dコンフォメーションを得るには、水素原子を分子に付加することが必要

三次元構造の最適化について

Molオブジェクトの3次元構造の最適化は、AllChem.EmbedMoleculeで行うことが可能。 RDkitでは以下の4つの方法が実装されており、デフォルトはETKDG法になっているとのこと。(普段使う分には、ETKDGの使用で問題ないらしい参考))

  • ディスタンス・ジオメトリー(DG)法:Stochasticな立体構造の生成方法としてはかなり精度がよい
  • KDG:DG法に一般的な化学常識(ベンゼン環は平面、アルキンは直線)を加えた手法
  • ETDGケンブリッジ結晶構造データベースの実験データから得た二面角の分布傾向を考慮した手法
  • ETKDG:KDGとETDGの両方を合わせた手法
  • ETKDGv2
#水素の付加
molH = Chem.AddHs(mol)

#ETKDGによる構造最適化
p = AllChem.ETKDG()
AllChem.EmbedMolecule(molH, p)

#Jupyter notebook上で描画してみる
IPythonConsole.drawMol3D(molH)

#MOLファイルを出力して、座標から構造を確認。
mb = Chem.MolToMolBlock(molH)
with open('mol_3D.mol', 'w') as f:
    f.write(mb)
f:id:chemoinfo-ottantacinque:20210130231101p:plain

画像だとわかりにくいが、水素が付加され立体構造も妥当なものになっている。

参考