2006年05月21日

バベる!2世: obgrep

OpenBabelをインストールするとbabel以外にも以下の5つのプログラムがインストールされます。

obgrep : SMARTSを使った部分構造検索
obfit : 分子の重ね合わせ
obrotate : torsion angleの回転
obprop : 分子の物性計算
obchiral : キラル中心の検索

これらはどれもOpenBabelのAPIであるOELibを利用して作られたプログラムです。上記プログラムを全て自力で作ろうと思えば、それなりに大変な内容なのですが、OELibを使うと非常にシンプルに実装できることが分かると思います。また、OELibを使いこなすよい参考にもなります。

今回はobgrepについてメモしたいと思います。
上記ツール郡は、openbabel-2.0.1/tools以下にソースコードが置かれており、まずは自力でコンパイルしたいと思います。Makefileはこの場所に置かれていますので、これを使ってもいいのですが(見た目にちょっと複雑ですね)、よりシンプルな方法でコンパイルしたいと思います。

obgrep.cppを作業ディレクトリにコピーする。
$ cp (展開したディレクトリ)/openbabel-2.0.1/tools/obgrep.cpp .

obgrep.cppの以下の3行を変更する。
(変更前)
#include "mol.h"
#include "obconversion.h"
#include "parsmart.h"
(変更後)
#include "openbabel/mol.h"
#include "openbabel/obconversion.h"
#include "openbabel/parsmart.h"

コンパイルの実行
$ g++ -I/usr/local/include/openbabel-2.0 -L/usr/local/lib -o obgrep obgrep.cpp -llibopenbabel

無事にobgrep.exe(Cygwin上なので)ができました。
obgrepの使用法は以下のとおりです。

Usage: ./obgrep [options] "PATTERN"
Options:
-v Invert the matching, print non-matching molecules
-c Print the number of matched molecules
-f Full match, print matching-molecules when the number
of heavy atoms is equal to the number of PATTERN atoms
-n Only print the name of the molecules
-t NUM Print a molecule only if the PATTERN occurs NUM times inside the molecule.

例)1000化合物を含むdata.smiからフェノール基をもつ化合物の数を調べる。
$ ./obgrep -c "c1ccccc1[OH]" data.smi
67

67個の化合物が含まれていることが分かりました。検索にかかった時間はPentium4(2.6GHz,512MB)、Cygwin上で約20secです。研究室内の小規模な化学構造検索システムであればobgrepを利用して構築できるかもしれません。また、AtomTypeのアサインや、QSAR Descriptorとして用いる構造フラグメントの検索などにも利用できると思います。


banner_02.gif
人気ブログランキング(クリックして応援してね)
posted by わばのり at 16:21| Comment(0) | TrackBack(0) | OpenBabel | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

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


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/18167033

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

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