SMBT: 類似構造検索

By | 2015年8月30日


SMBT(Succinct Multibit Tree)は、簡潔マルチビット木を用いて、大規模な化合物データベースから、高速に類似構造の検索を行うことのできるソフトウェアです。
アルゴリズムの詳細は、SMBTの開発者のブログで紹介されています。

インストール

SMBTをFedora 20にインストールします。

入手先:https://code.google.com/p/smbt/
入手ファイル:smbt-0.0.1.tar.bz2

$ sudo yum install gcc-c++
$ tar -xzvf smbt-0.0.1.tar.bz2
$ cd smbt-0.0.1
$ make

smbt-0.0.1の下にあるprogに実行ファイルが出来ていますので、Pathを通します。

Fingerprintデータベースの作成

化合物のSDFは、先日の記事で利用した以下の2つのファイルを用います。

ks_10K.sdf: 検索対象
query1.sdf: クエリー

RDKitを用いてSDFからFingerprintを生成し、SMBTで利用されているFingerprintデータベースの形式に変換を行います。
ここでは、genfpdb.pyを作成し、変換を行いました。

genfpdb.py:

from rdkit import Chem
from rdkit.Chem import AllChem
import sys
import csv

if len(sys.argv) != 3:
	print "Usage python genfpdb.py input.sdf fp.dat"
	sys.exit()

csvWriter = csv.writer(open(sys.argv[2],'w'),delimiter=' ')
for m in Chem.ForwardSDMolSupplier(sys.argv[1]):
	if m is not None:
		fp = AllChem.GetMorganFingerprintAsBitVect(m, 2, nBits=1024)
		csvWriter.writerow(list(fp.GetOnBits()))

genfpdb.pyを使ってFingerprintデータベースを作成します。

$ python genfpdb.py ks_10K.sdf ksfp_10K.dat
$ python genfpdb.py query1.sdf query1fp.dat
$ smbt-build -mode 1 ksfp_10K.dat index

類似構造検索

imatinibとの類似性が0.9以上の化合物を検索します。

$ smbt-search -similarity 0.9 index query1fp.dat > out_t09.txt

ヒット化合物は、Fingerprintデータベースの115と223の分子であることが分かります。
out_t09.txt:

query id:0 num:2 115:1 223:0.942029 
average answers:2
average cpu time (sec):0.003566
variance:-nan

115と223の意味ですが、ksfp_10K.datの先頭から115と223番目の分子になります。ただし、0番から始まっているようです。
結果を確認したいので、openbabelを用いて、115番目の分子(openbabelでは1番から始まるので116番目の分子)を出力してみます。

$ babel -isdf ks_10K.sdf -osdf 116.sdf -f 116 -l 116

116.sdfは、imatinib(類似度1.0)でした。

次は、Self-similar searchesを行ってみます。

$ smbt-search -similarity 0.9 index ksfp_10K.dat > out_NN_t09.txt

out_NN_t09.txt:

query id:0 num:1 0:1 
query id:1 num:1 1:1 
query id:2 num:1 2:1 
query id:3 num:1 3:1 
query id:4 num:2 4:1 227:0.933333 
.
.
average answers:1.1208
average cpu time (sec):0.000572197
variance:0.000372935

驚くほど高速なソフトウェアだと思います。