こんにちは!ぼりたそです!
今回は化学構造のテキスト表記法であるInChIについてどんなものなのか、取得方法など解説していきます。
この記事は以下のポイントでまとめています。
それでは順番にご説明していきます。
InChIとは?
まず、InChIとは何か?について解説していきます。
InChI(International Chemical Identifier)とは化学物質を一意に識別するための国際的な規格で、その化学構造をテキストベースで表現するための方法です。
そのため、多くの化学データベースやソフトウェアプログラムで使用されています。これにより、世界中の研究者や専門家が共通の表記方法で化学情報を共有できます。
また、InChIは同じ化学物質に対して常に同じテキスト表記を生成します。つまり、異なる構造表現や異なる条件下で生成されても、基本的には同じ分子に対して同じInChIが得られます。これにより、一意な識別が可能になります。
似たような表記方法としてはSMILESが挙げられます。以前、記事をまとめていますので、興味がある方は参考にしていただければと思います。
InChIの表記方法
次にInChIの表記方法について解説していきます。
正直、InChIを自分で書くことはないので、こんな表記方法になっているんだな程度で参考にしていたければと思います。
単体化合物のInChIは主に以下5つのレイヤーに分かれています。
- Main Layer (主要レイヤー)
- Charge Layer (電荷レイヤー)
- Stereochemical Layer (立体化学レイヤー)
- Isotopic Layer (同位体レイヤー)
- Fixed-H Layer (固定水素レイヤー)
Main Layer (主要レイヤー)
まず、主要レイヤーについて説明します。
主要レイヤーは分子の基本的な構造情報を含みます。原子の種類と数、原子の配置、結合情報、炭素骨格などが含まれます。
以下にアセチレンのInChIを示します。
InChI=1S/C2H2/c1-2/h1-2H
C2H2/c1-2/h1-2Hの部分に基本構造の情報が記載されていて、CとHの数や炭素の結合情報、水素の結合情報が記載されています。
Charge Layer (電荷レイヤー)
次に電荷レイヤーについて説明します。
このレイヤーは電荷情報を示すレイヤーです。分子内の正または負の電荷がどの原子に存在するかを示します。
以下にアンモニウムイオンのInChIを示します。
InChI=1S/H3N/h1H3/p+1
p+1が電荷レイヤーに該当しており、この場合は1価の陽電化を持っていることがわかります。
Stereochemical Layer (立体化学レイヤー)
次に立体科学レイヤーについて説明します。
このレイヤーは立体化学的な情報を提供し、立体異性体を区別します。シス/トランスの情報や立体中心(キラルセンター)の配置が含まれます。
以下にトランス-2-ブテンのInChIを示します。
InChI=1S/C4H8/c1-3-4-2/h3-4H,1-2H3/b4-3+
b4-3+の部分が立体構造レイヤーに該当します。
Isotopic Layer (同位体レイヤー)
次に同位体レイヤーについて説明していきます。
このレイヤーは同位体情報を示すレイヤーです。異なる同位体の存在を示します。たとえば、水素の同位体であるDeuterium(D)が含まれる場合、それがここで示されます。
以下に重水のInChIを示します。
InChI=1S/H2O/h1H2/i/hD2
i/hD2の部分が同位体レイヤーに該当します。この場合は重水素が2つあることを示しています。
Fixed-H Layer (固定水素レイヤー)
最後に固定水素レイヤーについて説明します。
このレイヤーは特定の位置に存在する水素原子を示すものです。特定の官能基に結合する水素が含まれます。
わかりやすい例が見つからなかったので割愛しますが、あまり使用しない印象です。
InChI Keyについて
次にInChI Keyについて説明していきます。
InChI Key(International Chemical Identifier Key)は、InChIの長い文字列を簡潔に表す(ハッシュ化した)ものです。InChIと同様に化学物質を一意に識別するための短いテキスト文字列です。
InChI Keyは比較的短い文字列で、通常は25文字でハイフンを含めると27文字の長さです。これにより、化学構造を簡潔に表現できます。
そのため、化学データベースでの高速検索に適しており、特定の化学物質を素早く見つけるのに役立ちます。
一方でInChIのような可読性は全く無く、人間がInChI Keyを見ただけでは何を意味しているのかは分かりません
以下にベンゼンのInChIとInChI Keyを示します。
■InCHI
InChI=1S/C6H6/c1-2-4-6-5-3-1/h1-6H
■InChI Key
UHOVQNZJYSORNB-UHFFFAOYSA-N
InChI Keyは何を意味しているのかさっぱりですね…
InChIの取得方法
次にInChIの取得方法について説明していきます。
ここでは以下の2種類の方法についてご紹介します。
- webサイト
- Python
詳細に説明していきます。
webサイトから取得
InChIはいくつかのwebサイトから収集することができますが、今回はMolViewから取得する方法について解説していきます。
まずは以下のリンクから MolViewのサイトにアクセスしてください。
MolViewのリンク↓↓↓↓
https://molview.org/
次にInChIを取得したい化合物を描画してください。今回はサリチル酸のInChIを取得していきます。
描画できたら下図の様にToolからInformation cardを選択します。
すると、下の図の赤枠のようにInChIとInChI Keyが取得できます。
Pythonから取得
次にPythonからInChIを取得する方法についてご紹介します。
下にエタノールのSMILESからInChIを取得するコードを示しています。
エタノール以外の化合物のSMILESを代入しても取得できます。
from rdkit import Chem
# 分子を作成
smiles = "CCO" # 化学式のSMILES表記例
mol = Chem.MolFromSmiles(smiles)
if mol is not None:
# InChIを取得
inchi = Chem.MolToInchi(mol)
print("InChI:", inchi)
else:
print("SMILESから分子を作成できませんでした。")
#出力結果
#InChI: InChI=1S/C2H6O/c1-2-3/h3H,2H2,1H3
きちんとエタノールのSMILESからInChIを取得できていますね。
おまけで複数のSMILESからInChIを一度に取得するコードを記載しておきます。
from rdkit import Chem
# 複数のSMILES表記のリスト
smiles_list = ["CCO", "CCN", "C=O", "C#C"]
# InChIを格納するリスト
inchis = []
for smiles in smiles_list:
mol = Chem.MolFromSmiles(smiles)
if mol is not None:
inchi = Chem.MolToInchi(mol)
inchis.append(inchi)
else:
inchis.append(None)
# 結果を表示
for i, inchi in enumerate(inchis):
if inchi is not None:
print(f"SMILES: {smiles_list[i]}, InChI: {inchi}")
else:
print(f"SMILES: {smiles_list[i]}, 分子を作成できませんでした。")
#出力結果
#SMILES: CCO, InChI: InChI=1S/C2H6O/c1-2-3/h3H,2H2,1H3
#SMILES: CCN, InChI: InChI=1S/C2H7N/c1-2-3/h2-3H2,1H3
#SMILES: C=O, InChI: InChI=1S/CH2O/c1-2/h1H2
#SMILES: C#C, InChI: InChI=1S/C2H2/c1-2/h1-2H
入力したSMILESに対して一度にInChIが取得できていますね。
終わりに
以上がInChIについての解説になります。基本的にはSMILESと同様に化学構造を線形表記にする手法になりますが、表記方法が全く違うものになります。記述子への変換なども考慮するとSMILESの方が使用頻度は多い様な気もしますが、InChIも化合物の検索などで使用することもあるかもしれませんので、覚えておいて損はないと思います。