2006年06月09日

Pythonでケムインフォ: SMARTS検索

Frownsを用いて化合物の部分構造検索を行ってみます。
sdfからの分子の入力方法は、6/8の記事と同じ方法で行っています。
今回のプログラムのUsageは以下のとおりです。

 Usage: smartsearcher.py xxx.sdf 'PATTERN' > result.txt

まず、'PATTERN'として入力するSMARTS文字列をcompile関数に渡します。

 pattern = Smarts.compile(sys.argv[2])

compile関数は戻り値として、Matcherクラスのインスタンスを返します。

次にwhile文の中で順次読み込んでいるsdf中の分子とSMARTS文字列の一致判定を行います。この判定には、matchメソッドを利用し、第2引数に1を渡しています。
例えば、分子中にSMART文字列と一致する部分が5箇所あったとしても最大1つだけ見つければよいことを示しています。全ての一致が必要な場合は、-1を渡します。デフォルトが-1ですので、第2引数を渡さなければ全ての一致を検出します。

 match = pattern.match(mol,1)

matchメソッドは一致がない場合Noneオブジェクトを返しますので、以下の式で一致を判定します。

 if match != None:

また、逆に一致する場合、matchメソッドは、SMARTS文字列に一致したatomとbondのPathSetを返します。そして、次のような結果を表示します。

--------------------------------------------------
C1(=C2C(=C(C(=O)C=C2)Br)Oc3c(c(ccc13)O)Br)c4c(C(=O)O)cccc4
match 1
atoms (Atom(18), Atom(17), Atom(16), Atom(15), Atom(20), Atom(19), Atom(22))
bond (Bond(19), Bond(18), Bond(16), Bond(22), Bond(21), Bond(20), Bond(24))
--------------------------------------------------
c1(c(cc(c(c1)O)C(C)(C)C)O)C(C)(C)C
match 1
atoms (Atom(4), Atom(14), Atom(13), Atom(8), Atom(7), Atom(5), Atom(6))
bond (Bond(14), Bond(13), Bond(12), Bond(7), Bond(6), Bond(4), Bond(5))
--------------------------------------------------



Frownsでは、SMARTS検索の一部にgraph matching libraryであるVFLibを利用しています。興味のある方はチェックしてみてください。


banner_02.gif
人気ブログランキング(クリックして応援してね)


posted by わばのり at 07:25| Comment(0) | TrackBack(0) | Frowns | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。