1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

RDKitで化学反応を扱った際の生成物群を整理し図示する方法

Posted at

[RDKit入門⑦:反応式の取り扱い(前編)][1]の記事ではRDKitによる化学反応の取り扱いを紹介しました。
記事の中で出力結果が二重のタプルとなることを以下のような画像とともに説明しました。
[1]:https://qiita.com/Ru-PNP/items/49a080a015414553bbad

image.png

解説用にこのような画像を出力する関数を自作しましたが、なかなか便利そうなので
今回はその自作関数を紹介したいと思います。

###環境

  • Windows 10
  • python 3.8.8
  • RDKit 2021.03.1

先にパッケージの読み込みを行います。

from rdkit import Chem
from rdkit.Chem import AllChem, Draw
from itertools import chain
#パッケージの読み込み

以下が自作した関数になります。

def Draw_Products_Labels(products_str: str):
    if type(products_str) != str : raise ValueError('変数名を文字列として入力してください!')
    #注意!変数にはリストそのものではなくリストの名前を文字列として入れること!
    products = globals()[products_str]
    #products_strという名前の変数を取得し、productsと定義した。
    products_all = list(chain.from_iterable(products))
    #反応生成物群の中に含まれる化合物をリストに並べてproducts_allと定義した。
    products_list = []
    for i in range(len(products)):
        for j in range(len(products[i])):
            title_products = '{0}[{1}][{2}]'.format(products_str,i,j)
            products_list.append(title_products)
            #中身のMolオブジェクトを個別に呼び出す際の名前を順に格納したリストをproducts_listと定義した。
    return Draw.MolsToGridImage(products_all, molsPerRow = len(products[0]), legends = products_list)
    #画像を描画する。

ピリジン環をニトリル+アルキン×2に分解する反応を例にして紹介します。

rxn = AllChem.ReactionFromSmarts("[n:1]1[c:2][c:4][c:5][c:6][c:7]1>>[n:1]#[C:2].[C:4]#[C:5].[C:6]#[C:7]")
#ピリジン環をニトリル+アルキン×2に分解する反応をrxnと定義した。
bipyridine = Chem.MolFromSmiles("CCC1=C(C=NC(=C1)C(C)C)C1=C(C=NC(C)=C1)C(C)(C)C")
#今回の基質をbipyridineと定義した。構造は以下参照。

image.png

反応を実施し、出力結果を先に作成した自作関数Draw_Products_Labelsに投入します。
この際、出力結果を“ダブルクオーテーション”で括って文字列として渡すようにしてください!
(括らずに渡さなかった場合エラーメッセージを返すようにはしてあります)

test = rxn.RunReactants([bipyridine])
#rxnにbipyridineを基質として適用し、出力結果をtestと定義した。
Draw_Products_Labels("test")
#Draw_Products_Labelsに反応の結果を"test"として代入し、画像を出力した。""で括ることに注意!

image.png

##おわりに

今回はRDKitで化学反応を扱った際の生成物群を整理・図示する自作関数を紹介いたしました。
関数に代入する際に“”で括って文字列として渡さないといけないのが現状大きな問題点ですが、
ひとまず整理・図示する目的は果たせたかと思います。

変数名から文字列を取得する操作がうまくできれば改善可能なのですが……
方法をご存知の方はコメントいただけると幸いです。

1
2
0

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
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?