***RDKit [#o09b38b6] 本家様 [[http://rdkit.org/>+http://rdkit.org/]] BSDライセンスなCheminformaticsツール。 化合物の構造式描画やフォーマット変換、および構造式検索(部分検索、類似構造検索)が可能なもの。 またデータベースに組み込んでSQL文で化合物の検索やフォーマット変換もできる優れもの。 &color(lightseagreen){''CentOS 7''}; にて作り直した PostgreSQLのCartridgeとして作る[[RDKit/Cartridge]] PostgreSQLのCartridgeとして作る[[RDKit/Cartridge]] 試作webアプリ[[RDKit/Cartridge/web]] &size(10){「160301版」へupdate(160916)。それ以前、[[RDKit.141204]]}; ***ダウンロード [#v8508b96] コンパイル環境を整備する #code(nonumber){{ [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最新版(&color(magenta){RDKit_2016_03_1.tgz};)を取得します #code(nonumber){{ [root@c ~]# cd /opt/src [root@c src]# <https://sourceforge.net/projects/rdkit/files/rdkit/Q1_2016/にて RDKit_2016_03_1.tgz を取得> }} ***コンパイル [#zee62c6a] RDKitはパッケージを展開した場所がそのままインストール場所になるみたい。ここでは&color(lightseagreen){/opt};を起点にする。 #code(nonumber){{ [root@c ~]# cd /opt [root@c opt]# gzip -cd ./src/RDKit_2016_03_1.tgz | tar xf - }} 展開されたフォルダ、ファイルの所有者をrootに変更して、作られたフォルダ(/opt/rdkit-Release_2016_03_1)をそのままに、 &color(magenta){''/opt/RDKit''};にリンクさせる。 #code(nonumber){{ [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 を定義して、作業場所を掘って、まずは既定オプションを確認する #code(nonumber){{ [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]# }} この結果では圧縮したファイルが扱えないので(&color(orangered){RDK_BUILD_COMPRESSED_SUPPLIERS:BOOL=OFF};)、これを有効にして再構築してみる。 &size(10){ほかRDK_BUILD_CAIRO_SUPPORTを有効にするならcairo-develパッケージをインストールして、-DRDK_BUILD_CAIRO_SUPPORT=ONを加える}; #code(nonumber){{ [root@c build]# rm -rf ./* [root@c build]# cmake .. -DRDK_BUILD_COMPRESSED_SUPPLIERS=ON [root@c build]# make && make install }} &color(white,blue){留意}; 相当コンパイルに時間が掛かります。紅茶3杯はいける これでコンパイルとインストールは完了であるが、作ったものをここで検証してみる。 #code(nonumber){{ [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]# }} ***設定 [#d56791b0] 使用するには LD_LIBRARY_PATH の設定が必要なので、 #code(nonumber){{ [root@c ~]# echo /opt/RDKit/lib > /etc/ld.so.conf.d/RDKit.conf [root@c ~]# ldconfig }} とする。あと 「&color(orange){RDBASE};」と「&color(orange){PYTHONPATH};」は.bashrcとか.cshrcで。 #code(nonumber){{ [root@c ~]# echo "export RDBASE=/opt/RDKit" >> .bashrc [root@c ~]# echo "export PYTHONPATH=/opt/RDKit" >> .bashrc }} &color(red){*};&size(10){/etc/profile.d/rdkit.{sh,csh}を用意すべきかもしれないが}; ***テスト(プロパティ値算出) [#wfcebb9c] 単純なテスト #code(nonumber){{ [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 ~]$ }} 「&color(orange){RDBASE};」と「&color(orange){PYTHONPATH};」の環境変数が定義されているのを確認して #code(nonumber){{ [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 ~]$ }} ***テスト(構造式描画) [#s8781450] smilesから構造式が描けます。 #code(nonumber){{ [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は下記になります #ref(2015y04m18d_000755870.png,nolink); ***テスト(構造式連続描画) [#ycd9b5c6] SDファイルに含まれている構造情報を使って構造式のイメージファイルを作成する #code(nonumber){{ [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のプロパティ値を使って、それをファイル名にすべきなのかもしれない