RDKit Users jp

rdkit-users-jp WEB pages

View My GitHub Profile

RDKit 2022.09.1 がリリースされました

2022年10月21日に RDKit 2022.09.1 がリリースされました。この記事では新バージョンのリリースノートの抄訳と新機能のコード例を紹介します。より詳細な情報を知りたい方はリリースノートの原文 (2022_09_1 (Q3 2022) Release) をご確認ください。

リリースノート抄訳

ハイライト

後方互換性のない変更

バグ修正・クリーンアップ・新機能及び改善

(訳注: 省略します。ご興味のある方は原文をご確認ください。)

このリリースで削除されたコード

非推奨となったコード(将来のリリースで削除予定)

新機能詳細

ここでは新機能の詳細を紹介します。

xyz2mol

xyz2molはXYZ形式のファイルをRDKitのmoleculeオブジェクトとして読み込む機能です。この機能は (Kim, 2015) で提案された手法の Jan Jensen氏による実装 を取り込んだものになります(Pull Request)。コードやドキュメントは Code/GraphMol/DetermineBonds にあります。

Pythonでxyz2molを使う例を以下に示します。コード中の test10.xyztest_data/connectivity からダウンロードしたものです。ドキュメントが見当たらなかったため、テストコードを参考にしました。

from rdkit import Chem
from rdkit.Chem import rdDetermineBonds

# XYZファイルの読み込み
# XYZを読み込んだ時点では結合が存在しません
mol = Chem.MolFromXYZFile("test10.xyz")
print(Chem.MolToSmiles(mol))
# 'C.C.C.C.N.[HH].[HH].[HH].[HH].[HH].[HH].[HH].[HH].[HH]'

# 結合の予測
rdDetermineBonds.DetermineBonds(mol)
print(Chem.MolToSmiles(mol))
# [H]C([H])=C(N([H])[H])C([H])([H])C([H])([H])[H]

# 結合の有無のみ予測
rdDetermineBonds.DetermineConnectivity(mol)
print(Chem.MolToSmiles(mol))
# [H]C([H])C(N([H])[H])C([H])([H])C([H])([H])[H]

# 結合次数の予測
rdDetermineBonds.DetermineBondOrders(mol)
print(Chem.MolToSmiles(mol))
# [H]C([H])=C(N([H])[H])C([H])([H])C([H])([H])[H]

なお、執筆時点 (2022/10/30) では筆者の環境でRDKitをPyPI経由でインストールするとrdDetermineBondsのインポートに失敗したため、このコードはAnacondaでインストールしたRDKitで検証しました。

各関数の解説

DetermineBonds.h のコメントの翻訳です。

DetermineBonds() は現在の結合を破棄し、原子座標を元に原子間結合を割り当てる関数です。embedChiralTrue に設定しないでこの関数を呼び出した場合には分子をサニタイズすることが推奨されます。以下の引数があります。以下の引数があります。

DetermineConnectivity() は現在の結合を破棄し、原子座標を元に原子間結合を割り当てる関数です。結合次数の予測を行わない点が DetermineBonds() と異なります。以下の引数があります。

DetermineBondOrders() は原子間結合が定義された分子に結合次数を割り当てる関数です。embedChiralTrue に設定しないでこの関数を呼び出した場合には分子をサニタイズすることが推奨されます。以下の引数があります。

RegistrationHash

RegistrationHash は Schrödinger 社が分子の重複を防ぐために使っている関数をオープンソース化したものです。UGM 2022でのLightning talk で概要が説明されています。

ドキュメントによると、SMILESに比べて以下の点が優れているそうです。

基本的な使い方は以下の通りです。

from rdkit import Chem
from rdkit.Chem import RegistrationHash

mol = Chem.MolFromSmiles('CNCC(=O)OC')
scheme = RegistrationHash.HashScheme.ALL_LAYERS
hash = RegistrationHash.GetMolHash(RegistrationHash.GetMolLayers(mol), scheme)
print(hash)  # 48b5d33cd3a5b7f859dad34ab19cdab3b8dd6cf3

scheme には以下の三種類を指定することができます。

以上です。ドキュメントの誤りや改善点を見つけた場合はユーザー会のSlackかGitHubまでご連絡ください。