Molecular Representation and Classical Preparation
RDKit
SMILESを化学構造として解釈し、二次元描画、三次元配座生成、古典力場最適化、構造比較へ進むための基礎を扱います。
- 位置づけ
- Cheminformatics・古典力場前処理
- 主な入力
- SMILES、SMARTS、SDF、MOL
- 主な出力
- Mol object、2D/3D座標、SDF、記述子
1. 概要
RDKitの中心は、原子、結合、電荷、立体化学、複数のconformerを保持する分子オブジェクトです。量子化学計算のように電子波動関数を解くのではなく、結合表と経験的規則・力場を使って分子を処理します。
典型的な流れは SMILES → Mol → AddHs → ETKDG → MMFF/UFF → clustering → SDF です。構造生成と量子化学計算の境界を意識し、RDKitの力場順位を最終的な電子エネルギー順位と同一視しません。
InChIKey、fingerprint、Gasteiger電荷、SMARTS検索、構造描画は、別トラックのRDKitケモインフォマティクス編にまとめています。
2. SMILES
SMILESは原子と結合のグラフを文字列で表します。分岐は括弧、環閉鎖は数字、芳香族原子は小文字、形式電荷や同位体は角括弧で記述します。
| 例 | 意味 |
|---|---|
CC(=O)c1ccccc1 | アセトフェノン |
C[C@H](O)C(=O)O | 立体中心を指定した乳酸 |
[NH4+].[Cl-] | 非結合fragmentを含む塩 |
from rdkit import Chem
smiles = "C[C@H](O)C(=O)O"
mol = Chem.MolFromSmiles(smiles)
if mol is None:
raise ValueError("SMILES parsing failed")
print(Chem.MolToSmiles(mol, canonical=True, isomericSmiles=True))
print(Chem.FindMolChiralCenters(mol, includeUnassigned=True))三次元配座、溶媒、温度、配座分布はSMILESに含まれません。未指定の立体中心、互変異性体、プロトン化状態、塩の扱いは解析前に決めます。
3. Mol objectの生成
MolFromSmilesは通常sanitizationを行い、原子価、芳香族性、共役、ring情報を設定します。編集にはRWMol、複製にはChem.Molを使います。
mol = Chem.MolFromSmiles("CC(=O)c1ccccc1")
mol_h = Chem.AddHs(mol)
mol_h.SetProp("molecule_id", "acetophenone")
print(mol_h.GetNumAtoms())
print(mol_h.GetNumConformers())implicit hydrogenとexplicit hydrogenを混同すると、原子数、力場、RMSD、量子化学入力が変わります。三次元生成前には通常AddHsを行い、比較時には水素を含めるかを明記します。
4. 二次元構造の描画
描画は化学構造の検査でもあります。原子ラベル、立体結合、形式電荷、芳香環、atom indexを確認します。
from rdkit.Chem import rdDepictor
from rdkit.Chem.Draw import rdMolDraw2D
rdDepictor.Compute2DCoords(mol)
drawer = rdMolDraw2D.MolDraw2DSVG(500, 320)
options = drawer.drawOptions()
options.addAtomIndices = True
drawer.DrawMolecule(mol)
drawer.FinishDrawing()
open("molecule.svg", "w").write(drawer.GetDrawingText())論文用図では、描画サイズ、bond width、font、highlight規則を固定するとデータセット間で比較しやすくなります。
5. ETKDGによる配座生成
distance geometryでは原子間距離の上下限から三次元座標を埋め込みます。ETKDGは実験的ねじれ角選好と基本化学知識を加え、化学的に妥当な配座を得やすくした方法です。
- 水素を明示化
立体配置と力場原子型を完全にします。 - 複数配座を生成
乱数シードを固定し、回転可能結合数に応じて試行数を増やします。 - RMSD pruning
近い候補を生成中に除きます。 - 力場で緩和
埋め込み時の歪みをMMFFまたはUFFで下げます。
from rdkit.Chem import AllChem
params = AllChem.ETKDGv3()
params.randomSeed = 20260804
params.pruneRmsThresh = 0.35
params.useSmallRingTorsions = True
conf_ids = list(AllChem.EmbedMultipleConfs(
mol_h, numConfs=100, params=params
))
if not conf_ids:
raise RuntimeError("No conformer was generated")一つのseedで得た配座数だけを探索の十分性としません。seed、numConfs、pruning閾値を変え、低エネルギー集合と主要torsion分布が安定するかを調べます。
6. MMFFとUFFによる構造最適化
力場エネルギーは結合伸縮、角度変角、ねじれ、van der Waals、静電相互作用などの経験的項の和です。
| 力場 | 特徴 | 確認 |
|---|---|---|
| MMFF94 | 有機・生体関連小分子向けに広くparameterize | MMFFHasAllMoleculeParams |
| MMFF94s | 構造最適化用途を意識したvariant | mmffVariant="MMFF94s" |
| UFF | 元素範囲が広いuniversal force field | 特殊な結合・金属系の妥当性を個別確認 |
if not AllChem.MMFFHasAllMoleculeParams(mol_h):
raise RuntimeError("MMFF parameters are unavailable")
results = AllChem.MMFFOptimizeMoleculeConfs(
mol_h, mmffVariant="MMFF94", maxIters=1000
)
# result = (status, energy); status == 0 means converged
energies = {cid: results[i][1] for i, cid in enumerate(conf_ids)}7. RMSD、alignment、clustering
対応原子を持つ二構造を回転・並進で重ねた後のRMSDは次式です。
from rdkit.Chem import rdMolAlign
rms = rdMolAlign.GetBestRMS(
mol_h, mol_h, prbId=conf_ids[0], refId=conf_ids[1]
)
print(f"Best symmetry-aware RMSD: {rms:.3f} angstrom")AlignMolは指定対応でalignmentを行い、GetBestRMSは対称な原子対応を探索します。重原子のみか全原子か、鏡像を許すか、対称性をどう扱うかで値が変わります。配座clusteringではRMSD行列とcutoffを保存します。
8. 一連の実行例
アセトフェノンの配座生成、MMFF94最適化、energy順位、SDF出力をまとめたスクリプトを用意しています。
- 入力検証SMILES、立体中心、formal charge、fragment数を記録します。
- 生成検証要求数、成功数、seed、ETKDG版、pruning閾値を記録します。
- 最適化検証各conformerのstatusを確認し、未収束構造を識別します。
- 次段階RMSD clusterごとの代表をxTBまたはDFTで再最適化します。
Reproducible Example
9. n-ペンタンの配座生成
n-ペンタン(CCCCC)について、ETKDGv3で100配座を要求し、生成時に0.15 ÅのRMSD pruningを適用した後、MMFF94で最適化しました。
3D配座を読み込んでいます...
ドラッグで回転、ホイールまたはピンチで拡大縮小できます。 3Dmol.js 2.5.5


図の見方
- 散布図の横軸は最低エネルギー配座からの全原子RMSD、縦軸はMMFF94相対energyです。
- 同じエネルギー・RMSD付近の点は、最適化後にほぼ同じ構造へ収束した候補です。生成後の重複除去が必要であることを示します。
- MMFF94は配座の前処理・screeningに有用ですが、この順位をDFTエネルギーや溶液中の存在比と同一視しません。
10. 参考文献・公式資料
- RDKit, Official documentation / The RDKit Book.
- S. Riniker and G. A. Landrum, “Better Informed Distance Geometry,” J. Chem. Inf. Model. 2015. DOI
- T. A. Halgren, “Merck molecular force field. I,” J. Comput. Chem. 1996. DOI
- A. K. Rappé et al., “UFF, a full periodic table force field,” J. Am. Chem. Soc. 1992. DOI