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として用いる構造フラグメントの検索などにも利用できると思います。
人気ブログランキング(クリックして応援してね)