magattacaのブログ

日付以外誤報

Working with Molecules part2 〜RDKit 直訳 Day6〜

(12/30追記)試訳をまとめたテストサイトを作成しました。よろしければご参照ください。

こちらはRDKit直訳 Advent Calendar 2018 - Adventar 6日目の記事です。基本的な進め方は1日目の記事をご覧ください。

本日の訳出に困った用語
canonical orientation: 正規化された向き
common template: 共通骨格
core function: コア関数
fine-grained control: 高精細な調整
distance bounds matrix: 距離拘束条件の行列
triangle-bounds smoothing algorithm: 三角拘束スムージングアルゴリズム
crude force field: 粗い力場
clean up: 整形、クリーンアップ
torsion angle preference: 優先される二面角の傾向
verbiage: 冗長な方法
MMFF atom typing code: MMFFの原子タイプを設定するコード
aromaticity flag: 芳香族性フラグ
flag prealigned: prealignedフラグ
run single threaded: 単一スレッドで実行
embarassingly parallel rask: 驚異的並列タスク処理

以下、訳

2Dの分子の取り扱い:描画の生成(Working with 2D molecules: Gemeratomg Depoctions)

[Link] https://www.rdkit.org/docs/GettingStartedInPython.html#working-with-2d-molecules-generating-depictions

RDkitには分子の描画(2次元座標のセット)を生成するためのライブラリーがあります。AllChemモジュールに含まれるこのライブラリーはrdkit.Chem.rdDepictor.Compute2DCoords()関数によりアクセスできます。

[link] rdkit.Chem.rdDepictor.Compute2DCoords()

>>> m = Chem.MolFromSmiles('c1nccc2n1ccc2')
>>> AllChem.Compute2DCoords(m)
0

2次元のコンフォメーションは正規化された向き[canonical orientation]で構築されます。また、描画が最も明確になるように、分子内の重なりを最小化するように作られます。

共通骨格を有する複数の分子のセットがあり、その骨格に対して揃えて並べたい場合は、以下のようにしてください。

>>> template = Chem.MolFromSmiles('c1nccc2n1ccc2')
>>> AllChem.Compute2DCoords(template)
0
>>> AllChem.GenerateDepictionMatching2DStructure(m,template)

上記のプロセスをいくつかの分子に適用すると以下のような図が得られます。

f:id:magattaca:20181202113506p:plain:w200f:id:magattaca:20181202113519p:plain:w200f:id:magattaca:20181202113527p:plain:w200
picture_1.png, picture_0.ong, picture_3.png

Compute2DCoords のもう一つのオプションをつかうと、3Dコンフォメーションを近似した2次元描画を生成することができます。rdkit.Chem.AllChem.GenerateDepictionMatching3DStructure()関数を使用すればできます。

PDB 1XP0構造の中のリガンドを使って生成した場合の結果は以下のようになります。

f:id:magattaca:20181202113936p:plain:w200f:id:magattaca:20181202113940p:plain:w200
picture_2.png, picture_4.png

コア関数のrdkit.Chem.rdDepictor.Compute2DCoordsMimicDistmat()を使うと、もっと高精細な調整が可能ですが、このページの範囲を超えているためここでは触れません。使用例は AllChem.py の GenerateDepictionMatching3DStructure の実装を参照してください。

[link] rdkit.Chem.rdDepictor.Compute2DCoordsMimicDistmat

3D分子の取り扱い(Working with 3D Molecules)

[Link] https://www.rdkit.org/docs/GettingStartedInPython.html#working-with-3d-molecules

RDKitで分子のコンフォメーションを生成するには2つの方法があります。元々はDistance Geometry法を使っていました[脚注1]。

[脚注1] Blaney, J. M.; Dixon, J. S. “Distance Geometry in Molecular Modeling”. Reviews in Computational Chemistry; VCH: New York, 1994.

アルゴリズム流れは次のようになります:

1. 対象の分子の原子結合表と、一連のルールに基づいて距離拘束条件の行列[distance bounds matrix]を計算
2. 拘束条件行列は三角拘束スムージングアルゴリズム[triangle-bounds smoothing algorithm]を使ってスムージング
3. 拘束条件行列を満たす距離行列をランダムに生成
4. 生成された距離行列を3次元に埋め込み(各原子の座標を生成)
5. 生成した座標を、粗い力場[crude force field]と拘束条件行列を用いて整形[clean up]

この手順で生成されるコンフォメーションはかなり粗いものである傾向があることに気をつけてください。力場を用いたクリーンアップが必要となりますが、RDKitに実装されているUniversal Force Field (UFF)を使うことができます。[脚注2]。

[脚注2] Rappé, A. K.; Casewit, C. J.; Colwell, K. S.; Goddard III, W. A.; Skiff, W. M. “UFF, a full periodic table force field for molecular mechanics and molecular dynamics simulations”. J. Am. Chem. Soc. 114:10024-35 (1992) .

最近になって、RinikerとLandrumの方法が実装されました[脚注18]。この方法では、Distance Geometry法を用いて生成したコンフォマーを、Cambridge Structural Database(CSD)から導いた優先される二面角の傾向[torsion angle preference]を使って修正します。この方法を使うことで、構造をクリーンアップするための最小化ステップが必要なくなります。

[脚注18] Riniker, S.; Landrum, G. A. “Better Informed Distance Geometry: Using What We Know To Improve Conformation Generation” J. Chem. Inf. Comp. Sci. 55:2562-74 (2015)

RDKit 2018.09 リリース版から、ETKDGがコンフォメーション生成法のデフォルトとなりました。

上述の冗長な方法と比べて、分子の埋め込みの全工程がより簡単になっているので、ETKDGの有用性がわかります。

>>> m2=Chem.AddHs(m)
>>> AllChem.EmbedMolecule(m2)
0

RDKitではMMFF94力場の実装も使用可能です[脚注12],[脚注13],[脚注14],[脚注15],[脚注16]。MMFFの原子タイプを設定するコードは独自の芳香族モデルを使用するため、MMFFに関係する方法を呼び出した後で、分子の芳香族性フラグが修正されることに注意してください。

[脚注12] Halgren, T. A. “Merck molecular force field. I. Basis, form, scope, parameterization, and performance of MMFF94.” J. Comp. Chem. 17:490–19 (1996).
[脚注13] Halgren, T. A. “Merck molecular force field. II. MMFF94 van der Waals and electrostatic parameters for intermolecular interactions.” J. Comp. Chem. 17:520–52 (1996).
[脚注14] Halgren, T. A. “Merck molecular force field. III. Molecular geometries and vibrational frequencies for MMFF94.” J. Comp. Chem. 17:553–86 (1996).
[脚注15] Halgren, T. A. & Nachbar, R. B. “Merck molecular force field. IV. conformational energies and geometries for MMFF94.” J. Comp. Chem. 17:587-615 (1996).
[脚注16] Halgren, T. A. “MMFF VI. MMFF94s option for energy minimization studies.” J. Comp. Chem. 20:720–9 (1999).

MMFF94を使ってRDKitで生成したコンフォマーを最小化する例です:

>>> m = Chem.MolFromSmiles('C1CCC1OC')
>>> m2=Chem.AddHs(m)
>>> AllChem.EmbedMolecule(m2)
0
>>> AllChem.MMFFOptimizeMolecule(m2)
0

上記の例でChem.AddHs()を呼び出していることに注意してください。デフォルトではRDKitの分子はグラフの中に水素原子を明示的に保持していませんが、本物らしい幾何構造を得るには重要です。したがって、一般的には水素原子を付加する必要があります。必要とあらばChem.RemoveHs()を呼び出すことで、いつでも後から削除できます。

RDKitでは複数のコンフォマーを異なる埋め込み方法を使って生成することもできます。いずれの場合も、異なるランダムな出発点からdistance geometry計算を複数回実行するだけです。numConfsオプションを使うことで、生成するコンフォマーの数をセットすることができます。オプションの設定以外は上述の方法と同じです。生成したコンフォマーは互いに整列させることができ、RMS値を計算できます。

>>> m = Chem.MolFromSmiles('C1CCC1OC')
>>> m2=Chem.AddHs(m)
>>> # run ETKDG 10 times
>>> cids = AllChem.EmbedMultipleConfs(m2, numConfs=10)
>>> print(len(cids))
10
>>> rmslist = []
>>> AllChem.AlignMolConformers(m2, RMSlist=rmslist)
>>> print(len(rmslist))
9

rmslistは最初のコンフォマーとその他すべてのコンフォマーのそれぞれとのRMS値を含むリストです。特定の2つのコンフォマー(例えば1と9)のRMSを計算することも可能です。コンフォマーがすでに整列されている場合、prealignedフラグにより明示することができます(デフォルトではこの関数はコンフォマーの整列を行います)。

>>> rms = AllChem.GetConformerRMS(m2, 1, 9, prealigned=True)

(ETKDGを使った場合、大抵不要ですが)コンフォマーにMMFF94を実行したい場合、便利な関数があります。

>>> res = AllChem.MMFFOptimizeMoleculeConfs(m2)

それぞれのコンフォマーについて二つのタプル(not_converged, energy)を含むリストが返されます。not_convergedが0なら、そのコンフォマーの最小化は収束しています。

デフォルトではAllChem.EmbedMultipleConfsAllChem.MMFFOptimizeMoleculeConfs()は単一スレッドで実行しますが、 numThreads引数から驚異的並列処理[embarassingly parallel task]を実行するためにマルチスレッドを同時に使うこともできます。

>>> cids = AllChem.EmbedMultipleConfs(m2, numThreads=0)
>>> res = AllChem.MMFFOptimizeMoleculeConfs(m2, numThreads=0)

numThredsを0に設定することで、あなたのコンピュータで許可されている最大数のスレッドをつかうことができます

Disclaimer/Warning: コンフォメーションの生成は難しく、かつ微妙なタスクです。RDKitで提供されている元々の2Dから3D変換は「リアル」なコンフォメーションを分析する手段の代替とすることを意図したものではありません。単に必要な時に素早く3D構造を提供するためのものです。ですが、我々は新しいETKDG法はほとんどの目的の場合に適うと信じています。

12/06/2018

このブログ記事のライセンス

以上はRDKit Documentationの試訳です。
ライセンスはCC BY-SA 4.0で、Greg Landrum氏の功績の元に作成しています。
Creative Commons — Attribution-ShareAlike 4.0 International — CC BY-SA 4.0