[RDKit]ringMatchesRingOnlyとcompleteRingsOnlyの違い

目的

RDKitには2つの分子構造間の共通構造を抽出するMaximum Common Substructure (MCS)が搭載されている。このMCSに環状構造の取り扱いを規定するオプションringMatchesRingOnlyとcompleteRingsOnlyがあるのだが, それぞれの違いがよくわからない。これらの違いを視覚的に理解することを目的とする。

ringMatchesRingOnlyの有無

まずはringMatchesRingOnlyの有無による影響を検討する。本家サイトによるとこのオプションを有効化すると環状構造内に居る原子は環状構造とのみマッチングがするようになるとのとのことである。

It can be strange to see a linear carbon chain match a carbon ring, which is what the ringMatchesRingOnly default of False does. If you set it to True then ring bonds will only match ring bonds.

https://www.rdkit.org/docs/source/rdkit.Chem.MCS.html

しかしこれだけではなにいってんだおめえという感じなので本家の以下のコードを図示化する。図示化にはSMARTS.plusを用いた。

>>> mols = [Chem.MolFromSmiles("C1CCC1CCC"), Chem.MolFromSmiles("C1CCCCCC1")] >>> MCS.FindMCS(mols) MCSResult(numAtoms=7, numBonds=6, smarts='[#6]-[#6]-[#6]-[#6]-[#6]-[#6]-[#6]', completed=1) >>> MCS.FindMCS(mols, ringMatchesRingOnly=True) MCSResult(numAtoms=4, numBonds=3, smarts='[#6](-@[#6])-@[#6]-@[#6]', completed=1)
Code language: PHP (php)

入力分子

その1: C1CCC1CCC (SMILES)

その2: C1CCCCCC1 (SMILES)

MCS: ringMatchesRingOnlyなし

SMARTS: [#6]-[#6]-[#6]-[#6]-[#6]-[#6]-[#6]

6個の炭素原子含む炭素鎖がマッチした。このことから環状構造内にいるかどうかは考慮せずにマッチングが実施され, 共通部位がMCSとして抽出されることがわかる。

MCS: ringMatchesRingOnlyあり

SMARTS: [#6](-@[#6])-@[#6]-@[#6]

ringMatchesRingOnlyありでは環状構造は環状構造とのみと, それ以外の部位はそれ意外の部位とのみマッチングが行われる。今回は4個の炭素原子からなる炭素鎖をMCSとして得た。

つまり, 分子①の四員環構造内と分子②の七員環構造とでマッチングが実施され, 共通部分がMCSとして出力されている。環状構造は環状構造とのみマッチングが行われる一方で, MCSが環状構造になるとは限らないのがポイント。あくまで環状構造内の共通部分を抜き出すだけである。

completeRingsOnlyの有無

次はcompleteRingsOnlyの検討。同様に公式サイトの以下のコードを図示化する。

>>> mols = [Chem.MolFromSmiles("CCC1CC2C1CN2"), Chem.MolFromSmiles("C1CC2C1CC2")]
>>> MCS.FindMCS(mols)
MCSResult(numAtoms=6, numBonds=6, smarts='[#6]-1-[#6]-[#6](-[#6])-[#6]-1-[#6]', completed=1)
>>> MCS.FindMCS(mols, ringMatchesRingOnly=True)
MCSResult(numAtoms=5, numBonds=5, smarts='[#6]-@1-@[#6]-@[#6](-@[#6])-@[#6]-@1', completed=1)
>>> MCS.FindMCS(mols, completeRingsOnly=True)
MCSResult(numAtoms=4, numBonds=4, smarts='[#6]-@1-@[#6]-@[#6]-@[#6]-@1', completed=1)

入力分子

その①: CCC1CC2C1CN2 (SMILES)

その②: C1CC2C1CC2 (SMILES)

MCS: オプションなし

共通部分として 四員環 + 側鎖の炭素原子 + 別の四員環の炭素原子がヒットしている。 要は環状構造の有無を気にせずにマッチングを実施し, 共通部位がMCSになる。

MCS: ringMatchesRingOnlyあり

共通部分として四員環 + 別の四員環内に存在する炭素原子がヒットしている。オプションなしで共通部分に含まれていた側鎖の炭素原子が排除された。

これは「環状構造は環状構造とのみと, それ以外の部位はそれ意外の部位とのみマッチングが行われる」というルールによる。分子①では炭素鎖が存在するが分子②には炭素鎖が存在しないため, 分子①中の炭素鎖はマッチング相手が存在せずMCSに含まれていない。

仮に分子②のどこかの位置に炭素鎖が付いていたら炭素鎖同士でマッチングが成立し, 前述のオプションなしと同じ結果が得られたはずである。

MCS: completeRingsOnlyあり

共通部分として四員環の炭素原子のみがヒットしている。ringMatchesRingOnlyありでMCSに含まれていた別の四員環内由来の炭素原子も排除された。

これは”completeRingsOnly”オプションが「環状構造同士の比較で得られたMCSもまた環状構造を形成しなければならない」という制限を加えることによる。

参考

https://www.rdkit.org/docs/source/rdkit.Chem.MCS.html (本家)

RDKitを用いた部分構造検索とMCSアルゴリズム
「RDKitでフィンガープリントを使った分子類似性の判定」という記事では分子のフィンガープリントを導入することで,分子同士の類似度を評価しました.また原子ごとの寄与度を類似度マップを用いて可視化する方法を「RDKitの類似度マップを用いて原

コメント

Copied title and URL