SDFって御存知ですか?
例えば、海外試薬メーカーのカタログを貰おうとすると
「じゃ、SDFで送りますね~」。
あるいは、ComputerChemistとの構造式のやり取りで
「化合物一覧をSDFで送って」
などと言われたり。「まぁ、構造式の表記の1つなんだな」という認識でいる方が多いでしょう。実務面はその認識だけで問題無いです。
ですが、SDFなどの構造表記法の裏側には「ヒト」と「コンピューター」の認識差が潜んでいると思うんです。知らなくっても何も困らないんですが、幾つかの化合物表記法を(長々と)紹介するのお付き合い下さい。
化合物の表記法
化学者であれば誰しも炭素鎖のジグザグ線とを基本とした構造式表記法を読めます。例えば、下記で表記される物質は、ニコチン酸だと認識できます。というよりも、ニコチン酸は下記のように表記するモノだと思っています。
ところが、コンピューターにとっては、上記式は単に「お絵描き」に過ぎません。コンピューターに認識させるには、この「絵」を、データとして「文字列・数値列」の形に変換する必要があります。構造式をデータに変換する表記法として、主に①線形表記法(文字列表記) ②行列表記法 の2つが用いられます。
線形表記法①:SMILES (すまいるず)
線形表記法とは、構造式を「文字や数字の連続した線」として構造を表記する方法です。種々の線形表記法が開発されましたが、現状生き残っていて我々が使う機会があるのはSMILES及びその変法です。(IUPAC命名法も線形表記の一種と捉えられ、InChIという表記法もありますが省略します)。
SMILESの主な表記ルールを以下に示します。
① 原子記号で表示、水素は記載せず自動飽和 |
② 隣接原子は隣に書く |
③ 2重結合は”=”で、3重結合は”#”、分岐は”()”で示す |
④ 環形成している原子同士にナンバリングする |
SMILES法で、先のニコチン酸を表記すると、こうなります。
OC(C1=CC=CN=C1)=O
OCの炭素に (環) と =O が結合している |
OCの結合した炭素(最初のC1)から数えて、(C1=C-C=C-N=C-C1)環を形成している |
ヒトにも認識しやすい表記法ですが、「連続した文字列」としてコンピューターの扱うデータとして優れています。SMILES式はその優れた表現方法ゆえ、SMARTS、SMIRKS、SLN等の種々発展法が開発され、使用されています。
実際の使用時は(上記の表記ルールなど気にせず)ソフトウェア上で作成します。ケミストに親しみ深いChemDrawから「Edit => Copy As => SMILES」で、構造式のSMILES表現が書けます。
線形表記法②:Finger Print (ふぃんがーぷりんと、FP)
ちょっと特殊な表記法として、ビット表記があります。その原理は「規定の部分構造を持てば”1″、持たなければ”0″にそれぞれ値が定まる」というもので、構造式は “0” と “1” の並んだbit stringとして表現されます。コンピューターの扱うデータとして非常に有利になるので、大規模な構造検索(部分構造検索、類似性検索)を行う際に使われます。ビット生成の仕方に2つの方法があり、現在は主に②が使われます。
①部分構造に予め規定されたビット(静的ビット)を用いる物; x番目の数字が構造Xを示すと予め決められている
②クエリ構造に対してハッシュ関数により動的にビット生成をする物; ビットは可変長
代表的なFinger Print法として、MDL Maccs key、Daylight FP、ECFP6があります。 ここで言う「部分構造」とは単純な「置換基」ではありません。通常、6結合先までの構造や各分岐も考慮されて数十万種(以上?)の部分構造が規定されて、数百~数十万個並んだ0と1によって構造式が表現されます。ケミストがFinger Printを書く事はありませんが、プログラムの裏側で動いてくれています。
行列表記法①:MOL(もる)
先ず、構造式を「原子というノード(点)」と「結合というエッジ(線)」で書かれたグラフと考えます。
グラフは行列式で表現できます。が、結合が増えると行列が複雑化するので、「結合表(Connection Table)」という考えを導入して簡単に表現します。結合表は各ノード位置(座標)、エッジ(どのノード同士が結合しているか)で表現されます。結合表をファイル形式で実現したものが「MOL」ファイルです。ニコチン酸はこう表されます。
—————————————————————————————————————————
nicotinic acid <ヘッダー:ファイル名>
ChemDraw03301217052D <ヘッダー:作成ソフト、作成月日年時分、2次元>
<ヘッダー:空行>
9 9 0 0 0 0 0 0 0 0999 V2000 <カウントライン:原子数、結合数、キラル有無>
-1.4265 0.0021 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 <結合表:原子座標と原子種>
-1.4265 -0.8229 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.7120 -1.2354 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
0.0025 -0.8229 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.0025 0.0021 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-0.7120 0.4146 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.7145 0.4132 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.4265 0.0021 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
0.7145 1.2354 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
1 2 2 0 <結合表:結合ペアと結合タイプ>
2 3 1 0
3 4 2 0
4 5 1 0
5 6 2 0
6 1 1 0
5 7 1 0
7 8 1 0
7 9 2 0
M END <終了表示>
—————————————————————————————————————————–
ノードは座標表現なので、ニコチン酸の下記黒、赤、青構造のMOLファイルは「別物」となりますが、通常はここに標準化作業が行われて同一物質と認識されます。3Dの場合は立体位置の違いとしてそのまま別物として使われる事が多いです。
MOLファイルの作成は、ケムドロで書いてMDL MOLで保存。MOLファイルはテキストファイルなので読取・編集はワードパッド等で可能です。
行列表記法②:SDF(えすでぃーえふ、えすでぃーふぁいる)
お待たせしました、やっと本題のSDFです。SDFはMOLの変法であり、表記法としてはMOLと同じです。ただし、「多数の構造式を一纏め」にしたファイルです。更に「各構造式に付加情報を追加」できます。しかもテキストファイルで軽いので、試薬カタログや計算化学のデータ受渡しに有用で、かなり頻繁に用いられています。
——————————————————————————————————————————-
<空行> ID-001 <ID> <空行> 9 9 0 0 0 0 0 0 0 0999 V2000 <カウントライン:原子数、結合数、キラル有無> -1.4265 0.0021 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 <結合表:原子座標と原子種> -1.4265 -0.8229 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 -0.7120 -1.2354 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0 0.0025 -0.8229 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 0.0025 0.0021 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 -0.7120 0.4146 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 0.7145 0.4132 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 1.4265 0.0021 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 0.7145 1.2354 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 1 2 2 0 <結合表:結合ペアと結合タイプ> 2 3 1 0 3 4 2 0 4 5 1 0 5 6 2 0 6 1 1 0 5 7 1 0 7 8 1 0 7 9 2 0 M END <終了表示> > <Name> <付加データ:項目> D-Alaninol <付加データ:内容> <付加データ:空行> > <Mol. Wt.: 123e> 123 $$$$ <終了表示> <空行> ID-002 <<<次の分子の開始>>> -------------------------------------------------------------------------------------------------------------------------------
試薬会社のカタログの場合、この付加情報の部分にカタログ番号や容量、価格などが記載されています。会社によって項目が違ったりするのですが、項目を揃えてやれば、会社縦断的なカタログへと編集する事も可能です。
タンパク質構造などを表現するのにPDB, MOL2といったファイル形式も使われますが、基本的にはsdfと同じ形式をとっています。
つぶやき
ここまで長ったらしく書いてきましたが、、、 最近よく思うのは「ヒトとコンピューターの構造式認識の仕方は異なる」という事です。もっと言えば「構造式ってのは、とことん人間寄りだ!」。
コンピューターの進歩と通信インフラの発展は素晴らしく、我々は膨大な構造・反応情報に容易にアクセス出来ます。しかし、大量の情報処理に優れているはずのコンピューターに逆合成解析をやらせても、優れた合成ルートは提示してきません。また、類縁体をデザインさせても「当たり前」の構造しか出力できません。それは、化学構造式は「絵」 「画像」であって、精度高く画像認識するって事はコンピューターにとって何義な事だからです。一方、ヒトの画像処理能力はピカイチなので、我々は学会会場などで初めて目にする構造式について「これはきっとこうだよね」「似た経験あるよ」などと、一瞬で判断する事ができます。
きっと構造式っていうのは、人間が「ヒトの得意分野」で自然化学と勝負するために編み出した「磨き抜かれた武器」なんだよ。それを、嫌がるコンピューターに(無理やり)理解させよう、ってのが種々構造表記法の開発の歴史なんだよ。
こんな妄想めいた事を日々考えてます。
そんな戯言はさておき、現在も「コンピューターにヒトと同じ認識をさせるにはどうしたら良いか?」「如何にケミストを模倣させるか」というテーマで、Chem-Informatician達が日々研究しています。いつの日か「やっぱヒトの逆合成よりコンピューターだよな!」と言われちゃう日が来るんでしょうか?嬉しいような、悲しいような…
関連サイト
- 関連書籍