end0tknr's kipple - web写経開発

太宰府天満宮の狛犬って、妙にカワイイ

RDKit + python で、化合物の構造式を描く

描画だけの graphviz でなく、 部分構造探索や(フィンガープリントによる)類似性判定を利用したかったので、お試し。

試してみたものの、化学式以外のグラフ構造を描くことができなかった為、 今後、しばらくは使用しない気がします。

RDKit + python の install は anaconda で

まずは anaconda

普段であれば、source から build (compile)しますが、 軽いインターネット検索による情報からでは上手くいかず、今回は anaconda を利用。

※「Anaconda3-2019.10-Linux-x86_64.sh」が最新でしたが、 私の環境であるcentos8では、インストーラであるこの.shが動作しなかったので 以下のverを利用しています。

※ また、anacondaのインストーラにより .bashrcに環境変数設定等が追記されます

$ wget https://repo.anaconda.com/archive/Anaconda3-2019.07-Linux-x86_64.sh
$ chmod 755 Anaconda3-2019.07-Linux-x86_64.sh
$ ./Anaconda3-2019.10-Linux-x86_64.sh 
   :
PREFIX=/home/end0tknr/anaconda3

$ cat ~/.bashrc
   :
__conda_setup="$('/home/end0tknr/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
    if [ -f "/home/end0tknr/anaconda3/etc/profile.d/conda.sh" ]; then
        . "/home/end0tknr/anaconda3/etc/profile.d/conda.sh"
    else
        export PATH="/home/end0tknr/anaconda3/bin:$PATH"
    fi
fi
unset __conda_setup
# <<< conda initialize <<<

次の condaによる環境作成と rdkit のinstall

## rdkit のchannel から my-rdkit-env という名称の環境を作成し
## rdkit を install
$ conda create -c rdkit -n my-rdkit-env rdkit

## my-rdkit-env 環境を起動
$ conda activate my-rdkit-env

## my-rdkit-env 環境を停止
$ conda deactivate

## anaconda install 以降、linux へのlogin時に condaが起動する為
## 以下のコマンドにより、これを 有効化/無効化
$ conda config --set changeps1 False
$ conda config --set changeps1 True

RDKit による化学式の画像作成

以下のscriptで化学構造式をpngファイルに描画できます。

#!/home/end0tknr/anaconda3/bin/python3
# -*- coding: utf-8 -*-

from rdkit import Chem
from rdkit.Chem import Draw


def main():
    save_image_to_file()
    

def save_image_to_file():
    mol_0 = Chem.MolFromSmiles("O=C(N)c1ccc[nH0]c1")
    Draw.MolToFile(mol_0,'mol_0_image.png')

    mol_1 = Chem.MolFromSmiles("[LDK]")
#    mol_1 = Chem.MolFromSmiles("O=C")
    if mol_1 == None:
        print("invalid mol code")
        return
    
    Draw.MolToFile(mol_1,'mol_1_image.png')
    
    
if __name__ == '__main__':
    main()
    

f:id:end0tknr:20191102155621p:plain