RDKit

本家サイト http://rdkit.org/
BSDライセンスなCheminformaticsツール。
化合物の構造式描画やフォーマット変換、および構造式検索(部分検索、類似構造検索)が可能なもの。
またデータベースに組み込んでSQL文で化合物の検索やフォーマット変換もできる優れもの。

*2013.11.2にRDKit_2013_09_1.tgzがリリース

ダウンロードとコンパイル

コンパイル環境を整備する

[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最新版とinchiのプログラム http://www.inchi-trust.org/ を取得します

[root@c ~]# mkdir /opt/src; cd /opt/src
[root@c src]# wget https://rdkit.googlecode.com/files/RDKit_2013_09_1.tgz
[root@c src]# wget http://www.inchi-trust.org/fileadmin/user_upload/software/inchi-v1.04/INCHI-1-API.ZIP

RDKitはパッケージを展開した場所がそのままインストール場所になるようなので、
ここでは/optで展開して、作られたフォルダを/opt/RDKitにリンクさせる。

[root@c ~]# cd /opt
[root@c opt]#
[root@c opt]# gzip -cd src/RDKit_2013_09_1.tgz | tar xf -
 
[root@c opt]# unzip -l src/INCHI-1-API.ZIP |less       (展開模様の確認)
[root@c opt]# unzip -q src/INCHI-1-API.ZIP
 
[root@c opt]# ls -dCF RDKit_2013_09_1 INCHI-1-API
INCHI-1-API/  RDKit_2013_09_1/
[root@c opt]#
 
[root@c opt]# chown -R root:root ./RDKit_2013_09_1
[root@c opt]# rm -f RDKit; ln -s RDKit_2013_09_1 RDKit
[root@c opt]# ls -ld INCHI-1-API RDKit RDKit_2013_09_1
drwxr-xr-x  4 root root   83 10月 13 17:46 2011 INCHI-1-API
lrwxrwxrwx  1 root root   15  4月 24 00:21 2014 RDKit -> RDKit_2013_09_1
drwxrwxr-x 12 root root 4096 11月  2 15:54 2013 RDKit_2013_09_1
[root@c opt]#
 
[root@c opt]# export RDBASE=/opt/RDKit
[root@c opt]# mkdir $RDBASE/External/INCHI-API/src
[root@c opt]# cp /opt/INCHI-1-API/INCHI_API/inchi_dll/*  $RDBASE/External/INCHI-API/src/
 
[root@c opt]# mkdir $RDBASE/build; cd $RDBASE/build
 
[root@c build]# export PATH=/sbin:/bin:/usr/sbin:/usr/bin
 
[root@c build]# cmake .. -L              *使用可能なオプションを表示
(前略)
RDK_BUILD_AVALON_SUPPORT:BOOL=OFF
RDK_BUILD_COMPRESSED_SUPPLIERS:BOOL=OFF
RDK_BUILD_INCHI_SUPPORT:BOOL=OFF
RDK_BUILD_PYTHON_WRAPPERS:BOOL=ON
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=OFF
RDK_INSTALL_INTREE:BOOL=ON
RDK_INSTALL_STATIC_LIBS:BOOL=ON
RDK_TEST_MMFF_COMPLIANCE:BOOL=ON
RDK_TEST_MULTITHREADED:BOOL=OFF
 
[root@c build]# rm CMakeCache.txt
[root@c build]# cmake .. -DRDK_BUILD_INCHI_SUPPORT=ON -DRDK_BUILD_COMPRESSED_SUPPLIERS=ON
 
-- The C compiler identification is GNU
-- The CXX compiler identification is GNU
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check if the system is big endian
-- Searching 16 bit integer
-- Looking for sys/types.h
-- Looking for sys/types.h - found
-- Looking for stdint.h
-- Looking for stdint.h - found
-- Looking for stddef.h
-- Looking for stddef.h - found
-- Check size of unsigned short
-- Check size of unsigned short - done
-- Using unsigned short
-- Check if the system is big endian - little endian
-- Found PythonLibs: /usr/lib64/python2.6/config/libpython2.6.so
-- Found PythonInterp: /usr/bin/python2.6
-- Boost version: 1.41.0
-- Found the following Boost libraries:
--   python
-- Looking for include files CMAKE_HAVE_PTHREAD_H
-- Looking for include files CMAKE_HAVE_PTHREAD_H - found
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE
-- Could NOT find InChI in system locations  (missing:  INCHI_LIBRARY INCHI_INCLUDE_DIR)
-- Found InChI software locally
-- Found BISON: /usr/bin/bison
-- Found FLEX: /usr/bin/flex
-- Boost version: 1.41.0
-- Found the following Boost libraries:
--   regex
-- Boost version: 1.41.0
-- Found the following Boost libraries:
--   iostreams
-- Configuring done
-- Generating done
-- Build files have been written to: /opt/RDKit/build
[root@c build]#
 
[root@c build]# make; make install

これでコンパイルとインストールは完了であるが、作ったものをここで検証してみる。

[root@c ~]# export LD_LIBRARY_PATH=$RDBASE/lib:$LD_LIBRARY_PATH
[root@c ~]# export PYTHONPATH=$RDBASE
[root@c ~]# cd $RDBASE/build
[root@c build]# make test
Running tests...
Start processing tests
Test project /opt/RDKit/build
  1/ 79 Testing testInchi                        Passed
  2/ 79 Testing testDict                         Passed
  3/ 79 Testing testDataStructs                  Passed
  4/ 79 Testing pyBV                             Passed
(中略)
 78/ 79 Testing pythonTestDirVLib                Passed
 79/ 79 Testing pythonTestDirChem                Passed
 
100% tests passed, 0 tests failed out of 79
[root@c build]#

*最後の79番はPythonImagingLibrary(PIL) が必要で、python-imagingパッケージ(centos6)を事前に入れる事。
すべてPassedなら大丈夫かと

テスト(プロパティ値算出)

実際に使ってみる。まず使用するたびごとにLD_LIBRARY_PATHを定義するのは面倒なので、/etc/ld.so.conf.dにRDKitのライブラリを登録しておく、

[root@c ~]# echo /opt/RDKit/lib > /etc/ld.so.conf.d/RDKit.conf
[root@c ~]# cat /etc/ld.so.conf.d/RDKit.conf
/opt/RDKit/lib
[root@c ~]#
[root@c ~]# ldconfig

次に簡単なpythonスクリプトを作ってテストしてみる。ソースコードに同封されているSDFファイル(/opt/RDKit/Data/NCI/first_200.props.sdf)のLogPを算出するスクリプトです。

[root@c ~]# cat 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)
[root@c ~]#

実行するにはPYTHONPATH環境変数を加えて

[root@c ~]# export PYTHONPATH=$RDBASE
 
[root@c ~]# python sample.py
MolLogP    : 0.6407
MolLogP    : 5.7054
MolLogP    : 1.862
(中略)
[root@c ~]#

として実行する。

テスト(構造式描画)

smilesから構造式が描けます。

  1
  2
  3
  4
  5
  6
  7
  8
  9
python
>>> 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()

これで下記のような画像が得られる。

2012y11m23d_013140428.png

テスト(構造式連続描画)

SDファイルに含まれている構造情報を使って構造式のイメージファイルを作成する

[root@c ~]# vi sdf2png.py
from rdkit import Chem
from rdkit.Chem import Draw
mols = Chem.SDMolSupplier('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
[root@c ~]#

これで、SDファイルの構造式が画像ファイルに順番に作られます。
本来ならSDFのプロパティ値を使って、それをファイル名にすべきなのかもしれない


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2014-04-26 (土) 00:31:45 (2295d)