LoginSignup
4
6

More than 3 years have passed since last update.

RDKitで反応パターンをSMARTSで定義し反応物を生成する

Last updated at Posted at 2019-11-23

はじめに

RDKitで、SMARTSで反応パターンを定義し、そのパターンに基づき反応物から生成物を生成してみたい。

環境

  • Windows 10
  • RDkit 2019.03.3.0

方法

参考文献を参考にしてほしい。

今回ためしてみた反応

今回は炭素原子の水酸化反応を試してみたい。SMARTSのパターンでいうと以下のようなものになる。

[C:1]>>[C:1][OH]

反応物は以下の化合物を試してみた。

query.png

ソース

ソースは以下の通りだ。反応により生成された生成物を全て画像に出力してみた。

from rdkit.Chem import AllChem
from rdkit.Chem.Draw import rdMolDraw2D
from io import BytesIO
from cairosvg import svg2png
from IPython.display import SVG
from rdkit import Chem

# 画像出力
def generate_image(mol, size, path, name):

    image_data = BytesIO()
    view = rdMolDraw2D.MolDraw2DSVG(size[0], size[1])
    tm = rdMolDraw2D.PrepareMolForDrawing(mol)

    view.DrawMolecule(tm)
    view.FinishDrawing()
    svg = view.GetDrawingText()
    SVG(svg.replace('svg:', ''))
    print(path + "/" + name)
    try:
        svg2png(bytestring=svg, write_to=path + "/" + name + ".png")
    except:
        pass


def main():
    reactant_1 = Chem.MolFromSmiles('COc2ccc1cccc(CCNC(C)=O)c1c2')
    reaction_pattern = '[C:1]>>[C:1][OH]'
    rxn = AllChem.ReactionFromSmarts(reaction_pattern)
    x = rxn.RunReactants([reactant_1])
    for i, mol in enumerate(x):
        print(mol[0])
        try:
            Chem.SanitizeMol(mol[0])
            generate_image(mol[0], (300, 300), "tmp", "metablite_{0}".format(i))
        except:
            print("Error")
            print(Chem.MolToMolBlock(mol[0]))


if __name__ == "__main__":
    main()

確認

生成物は4つ得られた。1つはサニタイジングする際に電荷の関係でエラーになった。
結果を画像で確認してみよう。

生成物1

metablite_0.png

生成物2

metablite_1.png

生成物3

metablite_2.png

生成物4

metablite_4.png

生成物5(サニタイジング処理で電荷エラーになったもの)

error_metabolite.png

考察

  • 生成されたものは予想通りの結果である。
  • 芳香環のC原子に対する反応はなかったが、その理由はよくわからない。仕様の確認が必要である(今後の課題)
  • いずれにせよ、生成された反応物が、妥当な化合物などうかの判定は必要になりそうだ。

参考文献

4
6
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6