本家様 http://rdkit.org/
BSDライセンスなCheminformaticsツール。
化合物の構造式描画やフォーマット変換、および構造式検索(部分検索、類似構造検索)が可能なもの。
またデータベースに組み込んでSQL文で化合物の検索やフォーマット変換もできる優れもの。
CentOS 7 にて作り直した
PostgreSQLのCartridgeとして作るRDKit/Cartridge 試作webアプリRDKit/Cartridge/web
「160301版」へupdate(160916)。それ以前、RDKit.141204
コンパイル環境を整備する
[root@c ~]# yum groupinstall "Development tools"
[root@c ~]# yum install cmake tk-devel readline-devel zlib-devel bzip2-devel sqlite-devel \
boost-devel numpy-f2py python-imaging
次にRDKit最新版(RDKit_2016_03_1.tgz)を取得します
[root@c ~]# cd /opt/src
[root@c src]# <https://sourceforge.net/projects/rdkit/files/rdkit/Q1_2016/にて RDKit_2016_03_1.tgz を取得>
RDKitはパッケージを展開した場所がそのままインストール場所になるみたい。ここでは/optを起点にする。
[root@c ~]# cd /opt
[root@c opt]# gzip -cd ./src/RDKit_2016_03_1.tgz | tar xf -
展開されたフォルダ、ファイルの所有者をrootに変更して、作られたフォルダ(/opt/rdkit-Release_2016_03_1)をそのままに、
/opt/RDKitにリンクさせる。
[root@c opt]# chown -R root:root ./rdkit-Release_2016_03_1/
[root@c opt]# rm -f RDKit && ln -s rdkit-Release_2016_03_1 RDKit
[root@c opt]#
[root@c opt]# ls -ld RDKit rdkit-Release_2016_03_1/
lrwxrwxrwx 1 root root 23 9月 16 00:16 RDKit -> rdkit-Release_2016_03_1
drwxrwxr-x 12 root root 4096 4月 18 15:24 rdkit-Release_2016_03_1/
[root@c opt]#
環境変数 RDBASE を定義して、作業場所を掘って、まずは既定オプションを確認する
[root@c opt]# export RDBASE=/opt/RDKit
[root@c opt]# mkdir -p $RDBASE/build && cd $RDBASE/build
[root@c build]# export PATH=/sbin:/bin:/usr/sbin:/usr/bin
[root@c build]# export LD_LIBRARY_PATH=$RDBASE/lib
[root@c build]# cmake .. -L
(前略)
CMAKE_BUILD_TYPE:STRING=Release
CMAKE_INSTALL_PREFIX:PATH=/usr/local
PYTHON_NUMPY_INCLUDE_PATH:PATH=/usr/include
RDK_BUILD_AVALON_SUPPORT:BOOL=OFF
RDK_BUILD_CAIRO_SUPPORT:BOOL=OFF
RDK_BUILD_COMPRESSED_SUPPLIERS:BOOL=OFF
RDK_BUILD_CONTRIB:BOOL=OFF
RDK_BUILD_CPP_TESTS:BOOL=ON
RDK_BUILD_INCHI_SUPPORT:BOOL=OFF
RDK_BUILD_PGSQL:BOOL=OFF
RDK_BUILD_PYTHON_WRAPPERS:BOOL=ON
RDK_BUILD_QT_DEMO:BOOL=OFF
RDK_BUILD_QT_SUPPORT:BOOL=OFF
RDK_BUILD_SLN_SUPPORT:BOOL=ON
RDK_BUILD_SWIG_CSHARP_WRAPPER:BOOL=OFF
RDK_BUILD_SWIG_JAVA_WRAPPER:BOOL=ON
RDK_BUILD_SWIG_WRAPPERS:BOOL=OFF
RDK_BUILD_THREADSAFE_SSS:BOOL=ON
RDK_INSTALL_INTREE:BOOL=ON
RDK_INSTALL_STATIC_LIBS:BOOL=ON
RDK_OPTIMIZE_NATIVE:BOOL=ON
RDK_PGSQL_STATIC:BOOL=ON
RDK_TEST_COVERAGE:BOOL=OFF
RDK_TEST_MMFF_COMPLIANCE:BOOL=ON
RDK_TEST_MULTITHREADED:BOOL=ON
RDK_USE_BOOST_SERIALIZATION:BOOL=ON
RDK_USE_FLEXBISON:BOOL=OFF
RDK_USE_STRICT_ROTOR_DEFINITION:BOOL=ON
[root@c build]#
この結果では圧縮したファイルが扱えないので(RDK_BUILD_COMPRESSED_SUPPLIERS:BOOL=OFF)、これを有効にして再構築してみる。
ほかRDK_BUILD_CAIRO_SUPPORTを有効にするならcairo-develパッケージをインストールして、-DRDK_BUILD_CAIRO_SUPPORT=ONを加える
[root@c build]# rm -rf ./*
[root@c build]# cmake .. -DRDK_BUILD_COMPRESSED_SUPPLIERS=ON
[root@c build]# make && make install
留意 相当コンパイルに時間が掛かります。紅茶3杯はいける
これでコンパイルとインストールは完了であるが、作ったものをここで検証してみる。
[root@c build]# export PYTHONPATH=$RDBASE
[root@c build]# ctest
(略
100/102 Test #100: pythonTestDirSimDivFilters ....... Passed 0.61 sec
Start 101: pythonTestDirVLib
101/102 Test #101: pythonTestDirVLib ................ Passed 3.32 sec
Start 102: pythonTestDirChem
102/102 Test #102: pythonTestDirChem ................ Passed 64.76 sec
100% tests passed, 0 tests failed out of 102
Total Test time (real) = 619.55 sec
[root@c build]#
使用するには LD_LIBRARY_PATH の設定が必要なので、
[root@c ~]# echo /opt/RDKit/lib > /etc/ld.so.conf.d/RDKit.conf
[root@c ~]# ldconfig
とする。あと 「RDBASE」と「PYTHONPATH」は.bashrcとか.cshrcで。
[root@c ~]# echo "export RDBASE=/opt/RDKit" >> .bashrc
[root@c ~]# echo "export PYTHONPATH=/opt/RDKit" >> .bashrc
*/etc/profile.d/rdkit.{sh,csh}を用意すべきかもしれないが
単純なテスト
[illya@c ~]$ cat <<_EOF_ > sample.py
from rdkit import Chem
from rdkit.Chem import Descriptors
mols = Chem.SDMolSupplier('/opt/RDKit/Data/NCI/first_200.props.sdf')
for mol in mols:
print "MolLogP :", Descriptors.MolLogP(mol)
_EOF_
[illya@c ~]$
「RDBASE」と「PYTHONPATH」の環境変数が定義されているのを確認して
[illya@c ~]$ echo $RDBASE
/opt/RDKit
[illya@c ~]$ echo $PYTHONPATH
/opt/RDKit
[illya@c ~]$
[illya@c ~]$ python sample.py
MolLogP : 0.6407
MolLogP : 5.7054
MolLogP : 1.862
(中略)
[illya@c ~]$
smilesから構造式が描けます。
[illya@c ~]$ python
Python 2.7.5 (default, Jun 17 2014, 18:11:42)
[GCC 4.8.2 20140120 (Red Hat 4.8.2-16)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from rdkit.Chem import AllChem
>>> from rdkit.Chem import Draw
>>> smiles = "CN1C=NC2=C1C(=O)N(C(=O)N2C)C"
>>> mol = AllChem.MolFromSmiles(smiles)
>>> AllChem.Compute2DCoords(mol)
0
>>> Draw.MolToFile(mol,"caffeine.png",size=(200,250))
>>> quit()
[illya@c ~]$
得られたcaffeine.pngは下記になります
SDファイルに含まれている構造情報を使って構造式のイメージファイルを作成する
[illya@c ~]$ cat <<_EOF_ > sdf2png.py
from rdkit import Chem
from rdkit.Chem import Draw
mols = Chem.SDMolSupplier('/opt/RDKit/Data/NCI/first_200.props.sdf')
for i,mol in enumerate(mols):
try:
f= "%s.png"%(i)
# f="%s.png"%(mol.GetProp('プロパティ値')) # プロパティ値でファイル名を作る
Draw.MolToFile(mol, f )
except:
pass
_EOF_
[illya@c ~]$
これで、SDファイルの構造式が画像ファイルに順番に作られます。
本来ならSDFのプロパティ値を使って、それをファイル名にすべきなのかもしれない