前準備
モジュールのインストール
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)
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)
参考
関連書籍
リンク
リンク
リンク