【RDKit】大環状分子をきれいに描画する方法

RDKitの通常の方法で大環状分子を描画しようとすると、球体みたいに描画されてしまいかなり不格好なのが気になっている人は多いのではないかと思います。 本記事では大環状分子をきれいに描画する方法について解説をしようと思います。

ライブラリ

  • rdkit: 2021.03.1

スクリプト

ライブラリのインポート
1
2
from rdkit import Chem
from rdkit.Chem import Draw, rdCoordGen
一般的な分子の描画方法
1
2
erythromycin = Chem.MolFromSmiles("CC[C@@H]1[C@@]([C@@H]([C@H](C(=O)[C@@H](C[C@@]([C@@H]([C@H]([C@@H]([C@H](C(=O)O1)C)O[C@H]2C[C@@]([C@H]([C@@H](O2)C)O)(C)OC)C)O[C@H]3[C@@H]([C@H](C[C@H](O3)C)N(C)C)O)(C)O)C)C)O)(C)O")
Draw.MolToImage(erythromycin, size=(500, 500))

14員環の部分が球状になっていて見にくいです。

座標を計算してから描画する方法
1
2
3
erythromycin = Chem.MolFromSmiles("CC[C@@H]1[C@@]([C@@H]([C@H](C(=O)[C@@H](C[C@@]([C@@H]([C@H]([C@@H]([C@H](C(=O)O1)C)O[C@H]2C[C@@]([C@H]([C@@H](O2)C)O)(C)OC)C)O[C@H]3[C@@H]([C@H](C[C@H](O3)C)N(C)C)O)(C)O)C)C)O)(C)O")
rdCoordGen.AddCoords(erythromycin)
Draw.MolToImage(erythromycin, size=(500, 500))

14員環が見やすく描画されるようになりました。

解説

どうもRDKitのデフォルトでは描画する際にいい感じの座標を計算していないため、(特に)大環状分子になると変な描画になってしまうことが多々あるのかなと思います。 なのでいい感じの座標を rdkit.Chem.rdCoordGen を使って計算してから描画すれば、きれいに描画されるという簡単な解決方法でした。 ただ当然ながら通常よりも座標計算を挟むため、描画速度は遅くなるので大量の分子を一度に描画するケースなどでは大環状分子にのみ座標計算をするようにスクリプトを書くのがよいかと思います。

終わりに

一度知ってしまえばなんてことはない方法ですが、RDKitにはこういう隠れた機能がいっぱいありそれを見つけるのがけっこう難しいです。 この記事がみなさんの一助になれば嬉しいです。

それでは。