#6 RDKitのDrawMorganBitsはFCFPやunhashed FPでもできるのか確認した

yamasaKit
6 min readNov 5, 2018

--

TL; DR

どちらもできます。

unhashed Fingerprint を用いたいなら GetMorganFingerprintAsBitVect の
代わりに GetMorganFingerprint を用いましょう。

FCFP を用いたいなら useFeatures=True としましょう。

FCFP2_bit_info = {}
FCFP2 = AllChem.GetMorganFingerprint(mol, radius=1,
bitInfo=FCFP2_bit_info, useFeatures=True)

以下にコード例をのせておきます。

背景

ケモインフォマティクス でよく用いられる RDKit というライブラリが 9 月にアップデートされましたね。様々な機能が追加されましたが公式ブログでも紹介された機能として Fingerprint の可視化がありました。

公式ページや日本の有志の方々が書いたページでも紹介されています。
詳しく書いていただいているのでそちらをぜひ読んでからこの記事の続きを読むと良いと思います。

さて私が上記のサイトを読んだ後に思ったのは表題のように unhashed Fingerprint でもできるのか? FCFP でもできるのか?ということでした。さっそく試してみました。

結果

例として アスピリン の FCFP2 unhashed Fingerprint を発生させて可視化してみます。

from rdkit import Chem
from rdkit.Chem import AllChem
from rdkit.Chem.Draw import DrawMorganBits
aspirin = 'CC(=O)Oc1ccccc1C(=O)O'
mol = Chem.MolFromSmiles(aspirin)
FCFP2_bit_info = {}
FCFP2 = AllChem.GetMorganFingerprint(mol, radius=1,
bitInfo=FCFP2_bit_info, useFeatures=True)
FCFP2_tuples = [(mol, bit, FCFP2_bit_info) for bit in
list(FCFP2_bit_info.keys())]
DrawMorganBits(FCFP2_tuples, molsPerRow=5,
legends=list(map(str, list(ECFP2_bit_info.keys()))))

公式ページで GetMorganFingerprintAsBitVect を用いていたところを GetMorganFingerprint を用いれば unhashedFingerprint に変更できます。また useFeatures=Trueとすれば FCFP に変更できます。上の例では両方同時に変更させていますが片方だけでもできますよ。

from rdkit import Chem
from rdkit.Chem import AllChem
from rdkit.Chem.Draw import DrawMorganBits
aspirin = 'CC(=O)Oc1ccccc1C(=O)O'
mol = Chem.MolFromSmiles(aspirin)
ECFP2_bit_info = {}
ECFP2 = AllChem.GetMorganFingerprint(mol, radius=1,
bitInfo=ECFP2_bit_info, useFeatures=False)
ECFP2_tuples = [(mol, bit, ECFP2_bit_info) for bit in
list(ECFP2_bit_info.keys())]
DrawMorganBits(ECFP2_tuples, molsPerRow=5,
legends=list(map(str, list(ECFP2_bit_info.keys()))))

こちらが ECFP2 の unhashed Fingerprint を用いた結果です。FCFP2 と比較すると、

  • 各部分構造に割り振られている ID が異なる
  • ECFP2 の 98513984, 3218693969 に相当するものが FCFP2 にはない

といったことがわかりますね。 ECFP と FCFP の違いをこうして目視で確認できるのはありがたいですね。

ちなみに FCFP も FCFP6 (すなわちradius=3) にするとベンゼン環が含まれています。ベンゼン環も重要なファーマコフォアとして判断されているんですね。

追記 (2018.11.7)
FCFP の芳香性炭素についての考察は少し間違っていました。 #7 の方で詳しく考察したのでそちらも合わせてご覧ください。

unhashed FCFP6

最後に

unhashed Fingerprint でもできるのか確認しようとした動機は Bit の衝突ですね。DrawMorganBit / DrawMorganBits は偶然同じ Bit に入る異なる部分構造を含む時どちらを描画してくれるのでしょうか?もし片方だけなら情報がなくなってしまいますね。そういうことも考慮して私はこれからも unhashed Fingerprint をできるだけ使おうかなと思います。

Python (version 3.6.2)
RDKit (version 2018.09.1)

--

--