InChIKeyの調べ方

2022年7月17日

化合物のコンピューターサイエンスのための表記方法としてはDaylightが開発したSMILESが歴史が古く、最も有名ですが、欠点として同じ化合物でもどの原子から表現するかによっていくつかの表記があるため、データベース検索などでは漏れがでる可能性があり使いにくいという問題があります。(検索のアルゴリズムによるので絶対に使えないわけではないですが、単純な完全一致検索といった簡単なアルゴリズムでは難しいです。)

SMILESには1化合物で1つのSMILESにしかならないCanonical SMILESというものもありますが、実はCanonical SMILESも異なるソフトウェア同士で互換性がなかったりします。

そういったことからIUPACとNISTが開発し、SMILESに変わるコンピューターサイエンスのための表記方法であるInChIとInChIKeyが重要になってきます。これからデータベースを作るつもりがあるのであれば、是非InChIKeyは項目に追加しておくことをお勧めします。(InChIKeyももちろん欠点はありますので、今後また新しい表記法が生まれる可能性はあります。)

このページでは化合物のInChIKeyを調べる方法について解説します。

0. Pubchemに載っている化合物ではないかを検索する

Pubchemに載っている化合物であれば、InChIやInChIKeyが掲載されていることが多いので、機密性のない化合物の場合はまずはPubChemで探すのが楽で良いと思います。

1. 公式ソフト「InChI」を使用する

InChI財団が公開しているフリーソフトの「InChI」を使用するとInChIやInChIKeyが調べられます。しかしながら、このソフトウェアにはちょっと使いづらいところがあって、SMILESでは入力できませんし、化学構造式をこのソフトウェアで描いてそれのInChIやInChIKeyを表示するなんて機能はありません。

molやsdfファイルからInChIやInChIKeyを出力してくれます。

ですので、個人的なお勧めのやり方としては

  1. Kethcerで化学構造式を描く
  2. molファイルで保存する
  3. InChIでmolファイルを読み込む
  4. 表示されるInChIやInChIKeyをコピーする

という手順です。

2. RDkitを使う

正直、使用するオープンソースソフトウェアとしてはRDkitでもIndigoでもCDKでもいいのですが、一番説明が楽なRDkitでInChIKeyの取得方法を説明します。

RDkitはC++でコアコードが書かれていて計算が速いのと、定期的に更新されていて最新のPCでも大体動くこと、ドキュメンテーションが豊富なことから計算化学の初心者に人気のオープンソースソフトウェアです。

Pythonの例

Pythonが有名なのでPythonでのInChIKeyの取得コード例をまず示します。

RDkitとそれに必要なライブラリは既にインストールした後でのコード例です。

from rdkit import Chem
mol = Chem.MolFromSmiles('CC(=O)Oc1ccccc1C(=O)O')
Chem.MolToInchiKey(mol)
# 'InChIkey=BSYNRYMUTXBXSQ-UHFFFAOYSA-N'

SMILESで分子を定義して、InChIkeyを出力させた例です。

javascriptの例

Pythonでもできるのですが、正直PythonはDockerもAnacondaも企業向けは有償化されたので使いづらいソフトだと個人的には思っています。(※ちなみに、大学とかで使う場合も共同研究とかで企業と一緒にやっているプロジェクトの場合は微妙な話になってくると思います。)

そこでRDkit javascriptの例も紹介します。こちらですと、javascriptが有効なプラウザがあれば動くので一人javascriptに詳しい人がいれば他の人は言語を学習しなくても使えるようになりかなり敷居が下がります。

コード例です。(html部分も必要になるのでわからない方は勉強が必要です。)

  var smiles = "CC(=O)Oc1ccccc1C(=O)O";
  var mol = RDKitModule.get_mol(smiles);
  var output = document.getElementById("example-8-output");
  output.innerHTML = "";
  [
    "smiles",
    "cxsmiles",
    "inchi",
    "inchikey",
    "morgan_fp",
    "pattern_fp",
    "aromatic_form",
    "kekule_form",
    "molblock", 
    "v3Kmolblock"
  ].forEach(function(identifier) {
    var val = identifier === "inchikey"
      ? RDKitModule.get_inchikey_for_inchi(mol.get_inchi())
      : mol[`get_${identifier}`]();
    var whiteSpace = /_fp$/.test(identifier) ? "pre-wrap" : "pre";
    output.innerHTML += `<div class="mt-2 columns" style="white-space: ${whiteSpace};word-break: break-all;"><div class="column"><span class="has-text-weight-bold">${identifier}:</span><br/>${val}</div></div>`
  });

実際にjavascriptでInChIkeyを調べるページを↓に作ってみたので試してみてください。

テキストボックスに調べたい化合物のSMILESを入力して「表示」ボタンをクリックすればRDkitがInChIkeyを表示します。

参考資料

chemistryInChI

Posted by Nao