Chemical Features and Pharmacophores 〜RDKit 直訳 Day19〜
(12/30追記)試訳をまとめたテストサイトを作成しました。よろしければご参照ください。
こちらはRDKit直訳 Advent Calendar 2018 - Adventar 19日目の記事です。基本的な進め方は1日目の記事をご覧ください。
本日の訳出に困った用語
Chemical Features: 化学的特徴
Pharmacophore: ファーマコフォア
feature: フィーチャー
feature definition language: フィーチャー定義言語
feature factory: 特徴工場、フィーチャーファクトリ
bin: ビン分割
topological distance: 幾何学的距離
unique integer: 一意の整数値
encoding: 符号化、エンコーディング、コード化
feature-typing mechanism: フィーチャータイプ化機能
signature (fingerprint) factory: シグネチャー(フィンガープリント)ファクトリ
以下、訳
化学的特徴とファーマコフォア(Chemical Features and Pharmacophores)
[Link] https://www.rdkit.org/docs/GettingStartedInPython.html#chemical-features-and-pharmacophores
化学的特徴(Chemical Features)
[Link] https://www.rdkit.org/docs/GettingStartedInPython.html#chemical-features
RDKitにおいて化学的特徴(フィーチャー)は、SMARTSに基づくフィーチャー定義言語を使って定義されています(言語の詳細はthe RDKit bookに記載されています)。分子の化学的特徴を見つけ出すためには、まず初めにフィーチャーファクトリ[feature factory]を作らなければなりません:
>>> from rdkit import Chem >>> from rdkit.Chem import ChemicalFeatures >>> from rdkit import RDConfig >>> import os >>> fdefName = os.path.join(RDConfig.RDDataDir,'BaseFeatures.fdef') >>> factory = ChemicalFeatures.BuildFeatureFactory(fdefName)
次に、作成したファクトリーをつかってフィーチャーを検索します:
>>> m = Chem.MolFromSmiles('OCc1ccccc1CN') >>> feats = factory.GetFeaturesForMol(m) >>> len(feats) 8
個々のフィーチャーには、それが属するファミリー(たとえばドナーやアクセプターなど)やタイプ(より詳細な説明)、フィーチャーと結びつけられた原子(原子団)についての情報が紐付けられています:
>>> feats[0].GetFamily() 'Donor' >>> feats[0].GetType() 'SingleAtomDonor' >>> feats[0].GetAtomIds() (0,) >>> feats[4].GetFamily() 'Aromatic' >>> feats[4].GetAtomIds() (2, 3, 4, 5, 6, 7)
もし分子に座標の情報が含まれているなら、座標の中でフィーチャーが占める合理的な位置についての情報も紐付けられます:
>>> from rdkit.Chem import AllChem >>> AllChem.Compute2DCoords(m) 0 >>> feats[0].GetPos() <rdkit.Geometry.rdGeometry.Point3D object at 0x...> >>> list(feats[0].GetPos()) [2.07..., -2.335..., 0.0]
2Dファーマコフォアフィンガープリント(2D Pharmacophore Fingerprints)
[Link] https://www.rdkit.org/docs/GettingStartedInPython.html#d-pharmacophore-fingerprints
複数の化学的特徴と、フィーチャー間の2Dの(幾何学的、トポロジカル)距離とを合わせることで2Dファーマコフォアを作成することができます。距離がビン分割されると、それぞれのファーマコフォアに一意の整数値のIDを割り当てることができ、フィンガープリントにその情報を格納することができます。エンコーディングの詳細はThe RDKit Bookを参照してください。
[link] The RDKit book
ファーマコフォアフィンガープリントを生成するには、通常のRDKitのフィーチャータイプ化機能で作成した化学的特徴が必要です:
>>> from rdkit import Chem >>> from rdkit.Chem import ChemicalFeatures >>> fdefName = 'data/MinimalFeatures.fdef' >>> featFactory = ChemicalFeatures.BuildFeatureFactory(fdefName)
フィンガープリント自体は、ファーマコフォアを生成する際に必要だったすべてのパラメーターを保持しているシグネチャー(フィンガープリント)ファクトリを使って計算されます。
>>> from rdkit.Chem.Pharm2D.SigFactory import SigFactory >>> sigFactory = SigFactory(featFactory,minPointCount=2,maxPointCount=3) >>> sigFactory.SetBins([(0,2),(2,5),(5,8)]) >>> sigFactory.Init() >>> sigFactory.GetSigSize() 885
これでフィンガープリントを生成するシグネチャーファクトリーの準備が整いました。rdkit.Chem.Pharm2D.Generateモジュールを使って行います。
[link] rdkit.Chem.Pharm2D.Generate
>>> from rdkit.Chem.Pharm2D import Generate >>> mol = Chem.MolFromSmiles('OCC(=O)CCCN') >>> fp = Generate.Gen2DFingerprint(mol,sigFactory) >>> fp <rdkit.DataStructs.cDataStructs.SparseBitVect object at 0x...> >>> len(fp) 885 >>> fp.GetNumOnBits() 57
含まれるフィーチャーやビン分割されたフィーチャー間の距離行列といった情報も含めて、ビット自体の詳細についてはシグネチャーファクトリから得ることができます
>>> list(fp.GetOnBits())[:5] [1, 2, 6, 7, 8] >>> sigFactory.GetBitDescription(1) 'Acceptor Acceptor |0 1|1 0|' >>> sigFactory.GetBitDescription(2) 'Acceptor Acceptor |0 2|2 0|' >>> sigFactory.GetBitDescription(8) 'Acceptor Donor |0 2|2 0|' >>> list(fp.GetOnBits())[-5:] [704, 706, 707, 708, 714] >>> sigFactory.GetBitDescription(707) 'Donor Donor PosIonizable |0 1 2|1 0 1|2 1 0|' >>> sigFactory.GetBitDescription(714) 'Donor Donor PosIonizable |0 2 2|2 0 0|2 0 0|'
作業を簡便にするため(毎回fdefファイルを編集する必要をなくすため)に、SigFactoryの特定のフィーチャータイプを無効化することもできます。
>>> sigFactory.skipFeats=['PosIonizable'] >>> sigFactory.Init() >>> sigFactory.GetSigSize() 510 >>> fp2 = Generate.Gen2DFingerprint(mol,sigFactory) >>> fp2.GetNumOnBits() 36
RDKitで使用可能な、2Dファーマコフォアフィンガープリントのためのフィーチャー定義のセットにはもう一つあり、GobbiとPoppingerによって提案されたものです[脚注10]。rdkit.Chem.Pharm2D.Gobbi_Pharm2Dモジュールにこれらのフィンガープリントタイプのために予め設定されたシグネチャーファクトリがあります。使い方の例をお示しします:
[脚注10] Gobbi, A. & Poppinger, D. “Genetic optimization of combinatorial libraries.” Biotechnology and Bioengineering 61:47-54 (1998).
[link] rdkit.Chem.Pharm2D.Gobbi_Pharm2D
>>> from rdkit import Chem >>> from rdkit.Chem.Pharm2D import Gobbi_Pharm2D,Generate >>> m = Chem.MolFromSmiles('OCC=CC(=O)O') >>> fp = Generate.Gen2DFingerprint(m,Gobbi_Pharm2D.factory) >>> fp <rdkit.DataStructs.cDataStructs.SparseBitVect object at 0x...> >>> fp.GetNumOnBits() 8 >>> list(fp.GetOnBits()) [23, 30, 150, 154, 157, 185, 28878, 30184] >>> Gobbi_Pharm2D.factory.GetBitDescription(157) 'HA HD |0 3|3 0|' >>> Gobbi_Pharm2D.factory.GetBitDescription(30184) 'HA HD HD |0 3 0|3 0 3|0 3 0|'
12/19/2018
このブログ記事のライセンス
以上はRDKit Documentationの試訳です。
ライセンスはCC BY-SA 4.0で、Greg Landrum氏の功績の元に作成しています。
Creative Commons — Attribution-ShareAlike 4.0 International — CC BY-SA 4.0