目的
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もまた環状構造を形成しなければならない」という制限を加えることによる。