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を含む塩
Python
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だけでは不足する情報

三次元配座、溶媒、温度、配座分布はSMILESに含まれません。未指定の立体中心、互変異性体、プロトン化状態、塩の扱いは解析前に決めます。

3. Mol objectの生成

MolFromSmilesは通常sanitizationを行い、原子価、芳香族性、共役、ring情報を設定します。編集にはRWMol、複製にはChem.Molを使います。

Python
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を確認します。

Python
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は実験的ねじれ角選好と基本化学知識を加え、化学的に妥当な配座を得やすくした方法です。

  1. 水素を明示化
    立体配置と力場原子型を完全にします。
  2. 複数配座を生成
    乱数シードを固定し、回転可能結合数に応じて試行数を増やします。
  3. RMSD pruning
    近い候補を生成中に除きます。
  4. 力場で緩和
    埋め込み時の歪みをMMFFまたはUFFで下げます。
Python
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、静電相互作用などの経験的項の和です。

E=Ebond+Eangle+Etorsion+EvdW+Eelectrostatic
力場特徴確認
MMFF94有機・生体関連小分子向けに広くparameterizeMMFFHasAllMoleculeParams
MMFF94s構造最適化用途を意識したvariantmmffVariant="MMFF94s"
UFF元素範囲が広いuniversal force field特殊な結合・金属系の妥当性を個別確認
Python
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は次式です。

RMSD=1Ni=1N|riri'|2
Python
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出力をまとめたスクリプトを用意しています。

Python例をダウンロード

  • 入力検証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で最適化しました。

生成配座8
MMFF収束8 / 8
乱数シード20260804
最低エネルギー-5.2718 kcal mol-1

ドラッグで回転、ホイールまたはピンチで拡大縮小できます。 3Dmol.js 2.5.5

n-ペンタン配座のRMSDと相対MMFF94エネルギー
最低エネルギー配座からのRMSDとMMFF94相対エネルギー。
n-ペンタン最低エネルギー配座
最低エネルギー配座の静止画。WebGLを利用できない場合の参照にも使えます。

図の見方

  • 散布図の横軸は最低エネルギー配座からの全原子RMSD、縦軸はMMFF94相対energyです。
  • 同じエネルギー・RMSD付近の点は、最適化後にほぼ同じ構造へ収束した候補です。生成後の重複除去が必要であることを示します。
  • MMFF94は配座の前処理・screeningに有用ですが、この順位をDFTエネルギーや溶液中の存在比と同一視しません。

10. 参考文献・公式資料

  1. RDKit, Official documentation / The RDKit Book.
  2. S. Riniker and G. A. Landrum, “Better Informed Distance Geometry,” J. Chem. Inf. Model. 2015. DOI
  3. T. A. Halgren, “Merck molecular force field. I,” J. Comput. Chem. 1996. DOI
  4. A. K. Rappé et al., “UFF, a full periodic table force field,” J. Am. Chem. Soc. 1992. DOI

次章: xTB