magattacaのブログ

日付以外誤報

マクロ分子の線形表記 HELMについて調べた話

先日@iwatobipen先生のブログ記事「Create macrocyclic mol object from sequence」を読み、RDKitでペプチドが取り扱えることに感動しました!*1

配列をそのまま原子レベルのオブジェクトに変換できるってすごい!

で、「もうちょっとこの辺りの話知りたいなー」となったので、「そもそも生物っぽい分子の表現ってどうなんですかね?」ということで調べてみることにしました。

とりあげるのはマクロ分子の表現方法、HELM

こちらのレビュー(J. Cheminform. 2020(12)56)の中で取り上げられていました。*2

歴史やら表記のルールやら、だらだら書いていきますよ!

HELM?

HELMHierarchical Editing Language for macromolelucesの略です。 雑にまとめると、「マクロ分子を原子レベルかつ簡潔に表現できる線形表記」といった感じで、 複雑な生物学的分子を単一の表記で記載することができます。

ペプチドやタンパク質、オリゴヌクレオチドといった生物学的な分子の線形表記というと、まずは配列アミノ酸や塩基といった(限られた)ユニットを表す文字の組み合わせが思い浮かびます。

対してHELEMはSMILESをベースとしており、配列だけではなく細かな化学構造も表すことができるため、 構造修飾や特殊なユニットといった、より豊かな表現が可能です。

つまり抗体+低分子のADCや修飾核酸医薬といった複合的な構造もきっちりと表現できます。

また、その表現力により表記とマクロ分子の構造とを1対1で対応させることができるので、 データベースへの格納といった厳密さが必要となる場面でも利用できます。

まさにNew Modality時代に必須の表現!!デファクトスタンダードとなるポテンシャルを持つ表現なのだ!!

・・・知らんけど。

f:id:magattaca:20201024200156p:plain
HELMとその表現範囲*3

歴史

元を辿ると2008年Pfizer社内でアルゴリズムの開発が始まったHELMですが、 2010年前後からPistoia Allianceという非営利のコンソーシアムの支援を受けてさらに開発が進みました。*4

2012年にオープンなものとしてリリースされ無料で利用できるようになりました。 同年、Pfizerより論文も発表されています。*5

HELM: A Hierarchical Notation Language for Complex Biomolecule Structure Representation
Zhang, T. et. al., J. Chem. Inf. Model. 2012, 52, 10, 2796–2806

2014年にはChEMBLがHELMの採用を公表し、2015年にはChemAxonがHELM toolkitのMarvinBeans 5.0ライセンスを無料化、 また、RDKitでもHELMが利用できるようになったりと、データベースツールともにHELMへのアクセスが広がり、 順調にデファクトスタンダードとしての地位を築きつつあります。*6

Pistoia Alliance

f:id:magattaca:20201024200439p:plain
Pistoia Alliance ロゴ*7

Pistoia Allianceはグローバル製薬企業(AstraZeneca、GSK、Novartis、Pfizer)の代表によって2007年構想、2009年設立された組織で、 2020年現在、100を超える企業・団体がメンバーとなっています。日本からは武田薬品が参加しているみたい。*8

組織の目的はR&Dイノベーションを妨げる共通の課題を協力して解決し、効率をあげることです。 具体的にはデータの収集、アクセス、共有方法といった、R&Dに必須でありながら、各社それぞればらばらに取り組んでいた課題があげられます。

規制当局と協力して新しい標準化を取り入れたり、法的な枠組みを提供することで、各社が競争する前の「場」をまずは整備しましょう、ということみたいです。

ちなみにPistoiaは会合が開かれたイタリアの都市の名前だそうです。ミニマルなデザインのロゴにトスカーナの風を感じますね!・・・知らんけど。

脱線しますが、個人的にとても良いな、と思ったのはPistoia Alliance Chemical Safety Libraryという取り組みです。

実際のラボ実験の経験にもとづき、危険な化学実験のリスクについて情報共有を行おうとするもので、CASと協力してオープンアクセスのプラットフォームChemical Safety Library の公開に至っています。*9

f:id:magattaca:20201024201133p:plain
化学実験安全性の向上に向けた取り組み

企業間の垣根を超えてノウハウを共有し、安全性の向上をめざしていこうというのはすごく良いですよね。推せるぞ!Pistoia!

HELM表記の構造と表現方法

背景がわかったところで具体的なHELMの中身について見ていきましょう。 Pistoia Allianceホームページの図表が非常に分かりやすいので、先のPfizerの論文を参照しつつ眺めていきます。

以下、特段の記載の限り図表はこちらのURL を引用させていただいています。

HELMの階層構造

Hierarchical Editing Language for macromolelucesという名前が示す通り、HELMは階層構造を持った表現です。

① Complex polymer、② Simple polymer、③ Monomer、④ Atomの4階層で構成されています。

階層構造であることにより、文脈に応じて異なるレベルで構造の解析と描画を行うことができます。 また、高次の階層は低次の階層の表現をもちいて表すことができます。

Complex polymer

では、まず、一番高次のComplex Polymerから。この階層はマクロ分子全体の化学構造の情報を表現します。

下図の通り、構成要素であるsimple polymerとそれらをつなぐ接続(connection)によって表すことができます。

f:id:magattaca:20201024201652p:plain
Complex polymer 階層

Simple polymer

Simple polymerは同じpolymerタイプのmonomerから構成されています。

複雑さを避けるため単一の直鎖(single linear chain)として定義されています。 従って分岐(branching)や環状(cyclization)といった構造はこの階層では扱いません。

また、特定のpolymerタイプにはmonomer間の接続(connection)のルールが明示的に定義されており、 接続の位置とルールによってmonomer配列の方向性が表せるようになっています (ex. ペプチド:N末端→C末端)。

f:id:magattaca:20201024201724p:plain
Simple Polymer階層

Monomer

Monomerは原子(atom)と結合(bond)から構成されており、MolfileやSMILESといったフォーマットで表すことができます。 ペプチドにおけるアミノ酸の表記(ex. A, G)と同様に、各monomerには単一のID(unique ID)が与えられており、 IDを使ってsimple polymerを表すことができます。

また、monomerの定義の中には接続の位置(attachment point)も含まれています。

monomerはsimple polymerのビルディングブロックとしても、複数のpolymer間をつなぐ接続要素としても用いることができます。

f:id:magattaca:20201024201807p:plain
monomer階層

Atom

AtomAtomです。。。

f:id:magattaca:20201024201853p:plain
Atom階層

以上がHELMの階層構造でした。

各階層のプロパティと表記のルール

続いて、各階層のより具体的な表記方法、特徴を見ていきます。最終的にこんな感じの表記が理解できるようになりたい!

f:id:magattaca:20201024201928p:plain
HELM Notation

Monomer definition

HELMの表現の簡潔さはMonomerを単一のIDで表せることによるところが大きいと思われます。

従って、各Monomerがしっかりと定義されていることが重要となります。例えばChEMBLではHELM表現と一緒にMonomerの辞書(monomer library)も提供されていたりします。

ではそのMonomerがどのようなプロパティをもっているのか?先の図を拡大して見てみましょう。

f:id:magattaca:20201024221125p:plain
monomerの7つのプロパティ

プロパティの① ~ ③はこんな感じ。Attachment pointがちょっと細かい。

f:id:magattaca:20201024221019p:plain
プロパティの説明 (1/2)

後半④ ~ ⑦はこんな感じ。

f:id:magattaca:20201024220758p:plain
プロパティの説明 (2/2)

文字ばっかりの説明になってしまいました。
イメージを掴むために論文からFig.2を引用させていただきましょう。 ペプチド鎖のHELM表記の中で、monomerはこんな感じででてきます。

f:id:magattaca:20201024212712p:plain
ペプチド鎖におけるmonomerの表記

Attachment pointにおけるCapping groupや、 非天然のアミノ酸とNatural analogの表記の比較がイメージしやすいですね。

Simple Polymer の記載の仕方

Simple polymerの表記はmonomerの定義に基づいています。

特にプロパティの⑥ monomer typeと ③ attachment point が大事で、タイプによってR1、R2、R3の意味合いが変わってきます。

f:id:magattaca:20201024212917p:plain
monomer typeとattachment point

backboneであればR1R2は別のbackbone monomerと接続して主鎖が伸びる場所で、 branchingであればR1はbackboneのR3のと接続する場所となります。

先のアラニンのmonomer定義でプロパティのSMILES表記は以下のようになっていました。伸張の方向性(N末からC末)からattachment pointがR1、R2となっているのが分かりやすいですね。

f:id:magattaca:20201024213003p:plain
例:アラニ

で、具体的な線形表記のルールですが、SMILESと非常に類似しています。こんな感じ、、、

f:id:magattaca:20201024221704p:plain
HELM 線形表記のルール

適当に比較例をつくってみました。分岐や特殊なユニットの表し方といった文法が似てますね!

f:id:magattaca:20201024213227p:plain
HELMとSMILESの比較

Simple Polymer Type の分類

ざっくりこんなタイプにわかれます。

f:id:magattaca:20201024213256p:plain
Simple Polymer Typeの分類と特徴

RNA TYPEのmonomerを3つの部分(sugar、base、linker)に分けて定義しているのは、 まとめて定義すると組み合わせごとに別の定義が必要になり、膨大な数になってしまうからだそうです。

またNonespecificなCHEM TYPEでは、モノマー間の接続が定義されていないので、 モノマー1つずつを別々のsimple CHEM polymerとして扱います。

従ってCHEMでは複数モノマーの表現がcomplex polymer notationの範疇で取り扱われる事になります。

Complex Polymer Notation Specification

複数のsimple polymerの組み合わせからなるcomplex polymerには、 Conjugated Polymers (ex. protein-drug conjugate)、 Cross-linked polymers (ex. antisense oligonucleoide dimers)、 Polymer mixtures (ex. siRNA) といったものがあります。

表記の特徴はこんな感じ・・・

f:id:magattaca:20201024213547p:plain
Complex polymer 表記の特徴

各セクションは以下のようになっています。

f:id:magattaca:20201024213630p:plain
Complex polymer 各セクションのルール

また、simple polymerは一本鎖なので、環状構造(Cycles)や分岐鎖(Branches)はsimple polymer間を接続する事で表現されます。

環状構造の具体例として、ペプチドホルモンオキシトシンのPubChem上の表記を見てみましょう。 2つのシステイン残基がジスルフィド結合で繋がれています。

f:id:magattaca:20201024213913p:plain
PubChem 項目 「Oxytocin」の表記より*10

以上でHELMの各階層の表記方法の説明はおしまいです。

HELMの表記例

表記方法が大体わかったので例をもう少し見て見ましょう。

以下はいずれもPistoia Alliance HPに記載の例です。Complex polymerのグラフ表現HELM表記とが並んでいます。

グラフは見慣れない図ですが、monomerをベースにした表現で、HELM web editor を使って同様の図を作成できます。*11

まずは直鎖のオリゴヌクレオチド…。塩基も糖もリン酸も修飾が入ったゴリゴリした例です。

f:id:magattaca:20201024214609p:plain
Linear oligonucleotides

続いて環状ペプチド。HELM表記は先にみたオキシトシンと同様に解釈できます。 monomerを1文字表記したグラフ表現はPubChemで見た構造式と比べてより簡潔な表現になっているように見えます。

f:id:magattaca:20201024214902p:plain
Cyclic peptide

・・・赤色背景に黒字はColor Blind Friendlyじゃ無いので読むのがつらいです。。。カラーユニバーサルデザインでお願いします。。。

つぎはsiRNA、塩基対で水素結合を形成し2本鎖となっています。Hydrogen bond list、Attribute listの参考例としてどうぞー

f:id:magattaca:20201024215014p:plain
siRNA

最後はオリゴヌクレオチドとペプチドのコンジュゲートです。
異なるPolymer typeの組み合わせの例。Non-specific polymerのCHEMも使われています。

f:id:magattaca:20201024215056p:plain
Oligonucleotide peptide conjugate

以上、具体例でした。

HELMのバージョン

ここまでHELMの階層構造と表記方法について見てきましたが、HELMのバージョンについても触れておきます。

現在2つのバージョンがあり、新しいHELM2ではHELM1よりもさらに表現の幅が広がっています。*12

HELM1では自由にmonomerの定義を加えていく事で非天然のモノマーを含めていくことができました。 HELM2ではさらに定義可能な範囲が広がり、混合物のような曖昧さのある構造も表現可能となっています。

f:id:magattaca:20201024222107p:plain
HELM2

ChEMBLとRDKitにおけるHELM

オープンソース化されたマクロ分子の表記HELM。オープンなものとしてやっぱりChEMBLとRDKitは外せないですよね!

ChEMBLでは2015年リリースのChEMBL 20からHELMを含めるようになったようです。*13 ちなみに2020年10月現在のバージョンはChEMBL 27です。

PubChemでも検索してみたオキシトシンを調べてみましょう。

疲れた心と体に幸せホルモンを!!*14

ID CHEMBL395429でヒットしました。 Compound Report Cardをスクロールしていくと「HELM Notation」という項目があります。

f:id:magattaca:20201024222415p:plain
ChEMBL 27バージョン 「CHEMBL395429」*15

PubChemと比較すると、わずかに異なるHELM表記となっていました。ChEMBLではconnection listのSourceTargetが反対となっています(「6:R3-1:R3」)。
分子内ジスルフィド結合なのでどちらでも良いですが、個人的にはPubChemの数字が小さい方を先にする書き方の方が好きです。

また、monomerの定義はXML形式でダウンロードすることもできます。サイズ 3.9MBもある。。。

続いてRDKit!

現在の所、ペプチドだけサポートされているみたいです。まずはHELMからMolオブジェクトを作ってみましょう!

ライブラリをインポート・・・

from rdkit import rdBase, Chem
from rdkit.Chem import Draw, rdDepictor
from rdkit.Chem.Draw import IPythonConsole
print('rdkit version: ', rdBase.rdkitVersion)
# rdkit version:  2020.03.2

SMILESからMolオブジェクトをつくるときと同じノリでMolFromHELM( )とすればOKです!

Oxytocin_mol = Chem.MolFromHELM('PEPTIDE1{C.Y.I.Q.N.C.P.L.G.[am]}$PEPTIDE1,PEPTIDE1,1:R3-6:R3$$$')
Oxytocin_mol

f:id:magattaca:20201024223205p:plain

Molオブジェクトが無事生成されました! でももっと可愛く! *16

rdDepictor.SetPreferCoordGen(True)
Oxytocin_mol

f:id:magattaca:20201024223533p:plain

CoordGen良い!! 幸せホルモン分泌された!

逆にMolオブジェクトからHELM表記を生成してみます。こっちもいつものノリでMolToHELM( )とすればOKです!

Oxytocin_helm = Chem.MolToHELM(Oxytocin_mol)
print("Generated HELM Notation: ", Oxytocin_helm)

Generated HELM Notation: PEPTIDE1{C.Y.I.Q.N.C.P.L.G.[am]}$PEPTIDE1,PEPTIDE1,1:R3-6:R3$$$」と出力されました。

バッチリっすね! もうMolToHELMキャンペーンしたいくらい!

まとめ

以上、マクロ分子の線形表記 HELMついてでした。相変わらず大事なポイントを絞れないので無駄に長くなってしまいました。。。 まぁ、なんとなく表記の読み方もわかるようになったのでいいや。

さてHELMですが、原子数がべらぼうに多い巨大な分子でも簡潔に線形表記できてしまうところが素敵と思いました。

J.Cheminformのレビューでは、HELMのような表現は生物と化学の融合地点としてのBiocheminformatics的表現といったことが書かれていました(雰囲気意訳)。
冒頭にも書きましたが、化学修飾された生物学的分子を表現できることで、技術発展が著しいモダリティ分野をインフォマティクスの観点からもっと取り扱えるようになりそうです。

っていうか、もうできてるのか!知らなかったの私だけだったのか!!

無知を晒しついでの感想ですが、私はケモインフォを齧り始めて、「コンピューターに分子を認識させるのってこんなに難しいことだったのか!」とびっくりしました。

正直SMILESやら今回のHELMやら「なぜそれで一意に構造に対応させられるか?」といったことや、「どうやってこのルールに絞り込んだのか?」みたいなことはさっぱり分かりません。
ですが賢い人々が考えた表記方法を調べてみると新しい言葉を習う感じの面白さがあります。

ロゴスはロジックだから!・・・知らんけど!

適当に調べたことを書いているので色々と間違いがあると思います。ご指摘いただけると幸いです。