中野英彦*、山名一成、三軒 齊
図1.化学構造式通信の概念図.
送信側では、化学構造式エディタを用いて構造式を作図し、そのデータファイルをchemcodeに変換して
送信する。受信側では、そのchemcodeを表示プログラムにかけて画面に表示するか、あるいは構造式
エディタのファイルに変換して処理する。chemcodeは機種に独立に規定されているので、
受信側と送信側のハードウェアおよび構造式エディタは同じである必要はない。
4.1.chemcodeに含まれる情報
基本的には、Chemdrawのデータファイルに出力される情報のうちで、化学構造式そのものの
作図に必要な情報、ならびにその構造式に関して化学者間での意思疎通に重要であると思われる
補助的な情報を含めてコード化に供した。
化学構造式作図に必須な情報としては、原子団に関する情報および結合に関する情報がある。
また、補助的な情報としては、括弧、矢印、長方形、円等の図形に関する情報と、説明文などのための
文字列に関する情報があげられる。
4.2.原子団に関する情報
構造式を作図する際の座標を指定する場合において、例えばCH2CH3のように一まとめで表現される
原子団は、1単位として取り扱っている。これは、ChemDrawの方式と同様である(ChemWindowの場合には、
原子団を分解して、個々の原子単位で座標が設定されている)。この方が、個々の原子単位で座標を
設定するよりも、いくぶん通信量が少なくてすむという利点がある。以後、このように単独の原子ならびに、
一まとまりとして扱われる原子団を総称してノードと呼ぶ。
原子団に関しては、以下の情報がchemcodeに含まれている。
(1)ノードの総数
これは、上記のように座標設定の単位となる、単独原子および原子団の総数である。これらの各ノードに
対しては、一連の番号が割り当てられる。
さらに、これらの各ノードに関する以下の情報が含まれる。
(2)XおよびY座標
各ノードの位置を示す座標値である。画面のドット数を単位とし、画面左上隅を原点としている。
(3)原子団を示す文字列のどの部分の座標かを示すフラグ
これは、そのノードが原子団の場合、指定された座標が原子団のどの部分かを示すものである。
左、中央、右の3種類が設定される。このような情報が必要となるのは、その原子団が別の部分と
結合している場合に、どちらに伸ばして描くかと言うことに関連している。そのノードが単独原子である
場合には、この情報は意味を持たないが、一応その場合でもデフォールトの値として「左」が設定されて
いる。
(4)原子(団)を示す文字列の文字数
単独原子の場合で、炭素などで文字を表示しない表示しないものについては0、単独原子の場合でも
元素記号を表示する場合や、原子団の場合においてはその文字数(原子数ではない)。
(5)原子(団)を示す文字列
上記(4)において0となっている場合には、この項目は存在しない。
4.3.結合に関する情報
(1)結合の総数
上記ノード間の結合として描かれるものの総数。これらの各結合に対しては、一連の番号が割り当て
られる。
さらに、各結合に関する以下の情報が含まれる。
(2)結合を形成するノードの組
どのノードとどのノードの間に結合を描くかを指定する。
(3)結合の次数
一重結合、2重結合、3重結合の別を指定する。これは、あくまでも構造式を描く際の指定であって、
かならずしも化学的な結合の区別を表しているとは限らない。例えば、芳香環の場合に、2重結合を
交互に描いた場合には、それにしたがって交互に2重結合と1重結合が設定される。また、結合は1重とし、
間の中央に円が描かれる方式の芳香環であれば、1重結合となる(円は後述の補助的図形情報として
設定される)。
(4)結合の種類
1重結合の場合には、実線、破線、太線、刻み型(hashed)、楔型、刻み楔型(hashed-wedged)、
波型の7種類が可能である。さらに、楔型および刻み楔型では、尖ったほうの方向によって異なる
種類として扱われている。
2重結合の場合には、両方が実線のものの他に、片方が太線のもの、および片方が破線のものが
指定できる。また、結合の中心線(座標によって指定される2点間を結ぶ線)が、2本の結合線の中間に
来る場合、片方が中心線と一致してもう一方が(番号の小さいノードから大きいノードを見て)右側に
来る場合、および左側に来る場合によって異なる種類として取り扱われている。
3重結合に関しては1種類のみである。
(5)結合間の交差に関する情報
これは、結合を描く際に交差する場合があり、その際どちらの結合に切り込みを入れるか(言い換えれば、
どちらが後方にあるか)を決定するのに必要となる情報である。
4.4.補助的図形に関する情報
上記のノードおよび結合に関する情報によって、基本的には構造式が作図されるが、その他に
補助的な図形情報が必要となる。具体的には、化学反応式の場合の矢印、電子の移動を示す場合などの
円弧型の矢印、ポリマーの繰り返し単位を指定する場合などの括弧等である。
これらの図形は、それぞれ異なった形態をしているが、chemcodeに含まれる情報の形態としては、
統一的に扱われている。具体的には、図形の種類を示すコードと、2点の座標値で指定される。
(1)矢印
矢印にも様々な種類があり、矢尻の部分の大きさが異なるもの、線の部分が太いものや点線のもの、
さらに白抜きのものなど、多くの種類に対応している。これら種類の相違は、コードによって区別されて
いる。2点の座標値は、先端および末尾の位置に相当している。
(2)長方形
構造式や説明文を囲むための長方形を描くための情報である。2点の座標は、長方形の一つの対角線の
両端の座標値となる。
(3)括弧
括弧としては、大括弧、中括弧、小括弧をサポートしている。2点の座標は、括弧によって囲まれる
部分を長方形とみなし、その対角線の2点に対応している。
(4)円
構造式ないし説明文を囲む目的で円を描く場合や、芳香環を示す目的で環の中央に描かれた円が
これに対応している。2点の座標値は、円の中心および円周上の1点を示している。
(5)円弧
円弧も描くことができるが、円の半径は任意に指定可能なのに反して、円弧の中心角は90度$120度、
180度$270度の4種類しか指定できない。これは、ChemDrawの仕様に従っているためであるが、
実用上はそれで十分であると思われる。それぞれ異なる中心角の円弧は、異なるコードに対応しており、
2点の座標は、円の中心と円弧の端の一点に対応している。
(6)円弧型の矢印
電子の移動を示すため等に使用される円弧型の矢印を指定するものである。円弧の中心角は、
やはり上記の4種類のみである。また矢印の形の違いと、方向性の違い(矢印が時計回りか反時計回りか)
によって異なるコードが割り当てられている。2点の座標は、円の中心と矢印の先端に対応している。
(7)線分
単独で描く線分、あるいは矢印と組み合わせて分岐した矢印を描く場合などのために、線分を指定する
ことも可能である。線分の種類としては、実線、点線、太線などが指定できる。2点の座標は、線分の
両端に対応している。
4.5.説明文のための文字列
通信の本文に関しては、通常の文字データとして送信すれば良いわけであるが、ここで説明文と
いうのは、構造式中に挿入された化合物名、反応式の矢印の近辺に書かれた反応条件などを想定している。
従って、単に文字列のみでなくそれが書かれる位置の情報が含まれている必要がある。具体的には、
以下の情報を含んでいる。
(1)文字列中の文字数
これは、全体の文字数ではなくて、下記の座標位置に書かれる一連の文字列に関するものである。
(2)XおよびY座標値
文字列を書く位置を指定するものである。
(3)上記座標値が文字列のどの部分かを示すフラグ
左、中央、右が指定できる。通常は左であり、文字列の先頭の位置に対応している。
(4)説明文の文字列
文字コードそのものである。今のところ漢字には対応していない。文字コードには改行コードを含める
ことも可能であり、その場合には、改行コード以後の文字列は、次の行に書かれることになる。その場合、
上記の(3)のフラグの値によって、「左」ならば左揃え、「右」ならば右揃え、「中央」ならば
中央揃えで表示される。
4.6.誤り訂正の機構
以上のデータを、石塚によって考案され、現在パソコン通信で広く用いられている方法
(ISH方式)[1]と基本的には同一の方式によって、
誤り訂正機構を付与するとともに、
テキストデータとして通信可能な形に変換した。但し、ISH方式と完全に同一では、通信文中に両者が
混在した場合に混乱を生じる恐れがあるので、1行あたりのバイト数などに関して異なった値を
用いている。用いた変換方式は以下の通りである(図2)。
(1)データ全体を、3364(58×58)バイト単位でブロックに分割する。
(2)各ブロックを、図2に示すように、
1行58バイトで58行に並べ、各行の先頭には1バイトの行番号を
付ける。
(3)各行について、2バイトのCRC(巡回冗長コード)を計算し、行末に付加する。この結果各行は
61バイトとなる。
(4)59行目は、縦sum行とし、1行目から58行目までのデータに関して、それぞれのバイトを
縦に計算した和(桁あふれは無視する)を格納する。
(5)60行目は、斜めsum行とし、1行目から59行目までを、図2に示すように
対応するバイトを斜めに
計算した和(桁あふれは無視)を格納する。
このようにして、誤り訂正機構を付加したデータは$16進数で$00から$19までの間の制御コードに
当たるデータをも含んでおり、そのままではテキストデータとして通信に用いる事はできないので、
以下の操作で$21から$7Eまでの間のコードに変換する。$7Eまでとしたのは、通信データ長が
7ビットの回線においても通信可能とするためである。
(6)第1バイトは行番号で60以下のためそのままとし、第2バイトからの60バイト(480ビット)を、
13ビットづつに分割する(13×37は481となるので、最後に1ビット0を追加して、37に分割される
ことになる)。
(7)13ビットの数(10進では0から8191の間になる)を、91で割り商と剰余を求める
(これらは何れも90以下の数となる)。
(8)(6)および(7)の操作で求めた75個の数(1+37×2)を、変換テーブルを用いて$21から$7Eの間の
コードに変換する。
(9)さらに、各行の末尾に、それぞれのOSによって用いられている行末コード(MS-DOSでは復帰、
改行、Macintoshでは復帰コードのみ)を付加する。
この操作によって変換されたデータは、そのままテキストデータとして通信に用いることができる。
なお、プログラムで処理するためには必要ないのであるが、人間が見てchemcodeのデータであることを
認識しやすくするための文字列を先頭、末尾および50行ごとに付加している。
なお、最終のブロックにおいては、3364バイトに満たない部分について0を付加して上記の計算を行う。
但し、0のみからなる行に関しては、送信は行わない。その場合でも、縦sum行と斜めsum行は送られる
ので、受信側では0のみの行を付加して復元できる。
受信側での誤り訂正の方法は以下のようなものである。
(1)まず各行毎に、上記の逆の操作によってデータを復元し、そのCRCをチェックする。その行で
エラーが発生していることが検出された場合には、その行のデータは捨てられる。
(2)ブロック全体を復元し、ブロック内にエラー行がなければ、そのブロックは全て正常である。
(3)ブロック内のエラー行が1行の場合には、縦sum行を用いてエラー行が復元できる。
(4)ブロック内のエラー行が2行の場合には、縦sum行と斜めsum行を用いて復元する(図3)。
なお、縦sum行や斜めsum行にエラーが生じたときにはどうなるかと言うことであるが、縦sum行のみ、
斜めsum行のみ、あるいは縦sum行と斜めsum行双方にエラーが生じた場合については(ブロック内
2行以内と言う条件では)データ行にはエラーが無いのであるから復元の必要はない。データ行に
1行と斜めsum行がエラーの場合には、上記(3)の操作で復元できる。また、データ行1行と縦sum行に
エラーがある場合には、上記(4)の操作で復元可能である(上記(4)の操作では、縦sum行とデータ行は
基本的には同等の扱いとなるので)。
以上のように、ブロック内のエラー行が2行以内であれば、何れの場合にも復元可能ということに
なる。
図3.ブロック当たり2行のエラーがある場合の訂正方法.
簡単のために、1行当たりのデータが、行番号を含めて5バイト(CRCは除く)の場合で示す。
これが素数の場合は、基本的には同一の方法で訂正可能である。図の例では、1行目と3行目が
エラー行である。エラー行であっても、行番号は判明していることを利用し、[1]で示した斜めsumより
aの位置のデータがまず復元される。次に[2]で示した縦sumよりbの位置のデータが復元され、
次いでcの位置というように、順次繰り返せば全てのデータが復元される。
5.1.ChemDrawのデータをchemcodeに変換するプログラム
Macintosh上でChemDrawで作成された構造式のデータファイルを読み込んで、chemcodeを出力する
プログラムである。Chemcodeに含まれるデータは、ChemDrawのデータのうちで化学者間での意思疎通に
重要であると考えられるデータを取捨選択したものである。従って、chemcodeにも含まれるデータ項目に
関しては、ほぼ1対1の対応がなされているので、単純に変換できる。一方、chemcodeには
含まれないデータ項目に関しては、その性格によって以下の何れかの処置をとった。
(1)意思伝達にとって本質的に重要でない情報
例えば、構造式や説明文中の文字の字体(フォント)やサイズの情報がこれに相当する。
Macintoshでは、字体やサイズが自由に指定できることが特徴であるが、その情報を送信しても、
受信側で同じ字体がなければ意味がない。また、字体が異なっていても本質的に伝達する情報には
変化がない事などを考慮して、chemcodeには含めていない。このような情報は、変換の際には
切り捨てられる。
(2)chemcodeの機能としてサポートしていないもの
これは、情報としては重要であっても、chemcodeではサポートしていない機能である。例えば、
ChemDrawでは分子軌道の形を描いたり、ベジエ曲線を描く機能があるが、これについてはchemcodeでは
サポートしていない。また、2バイト文字(日本語)についても、現時点ではサポートしていない。
この種の情報についても、変換時には切り捨てられる。
(3)他の機能で代替できるもの
例えばChemDrawでは、説明文を囲む長方形にしても、単純な長方形だけでなく、影を付けて
立体的に見せたり、角を丸くした表示が可能となっている。これらの情報については、変換時には
単純な長方形で代替される。また、文字列中のイタリック指定については下線で代替している。
5.2.ChemcodeからChemDrawのデータに変換するプログラム
Chemcodeのデータを読み込んで、ChemDrawのデータファイルを復元するプログラムである。
上記のように、ChemDrawには必要であるが,chemcodeには含まれない情報に関しては、デフォールトの
値として復元がなされる。
なお、chemcodeのデータ形式は、上記のように特殊な変換を行っており、また同種の変換を
行っているISH形式とも異なっているので、データ中に他のテキストデータが混在していても、
プログラムで自動的にchemcodeの部分のみを認識して変換するようになっている。従って、
通信において通常の通信文と混在して送っても、受信ファイルをそのままプログラムに読み込ませる
ことができる。
5.3.Chemcodeを読み込み構造式を作図するプログラム
Chemcodeのデータを読み込んで、画面に構造式を表示するプログラムである。NECのPC-9801
シリーズの各機種およびその互換機上で動作する。このプログラムにおいても、上記と同様に
一般の通信文と混在していても、自動的にchemcodeの部分が認識される。
図4.Chemcode例(1)
上図左に示したのが、ChemDrawによって作図された構造式であり、それを chemcode に変換すれば構造式の下に示したような文字列(chemcode)になる。それを PC-9801 に送って作図したのが右上の図である。
他の一つは、吉野[2]によって開発された
Chem-Kitを使用するものである。この場合には、
Chem-Kit本来のデータファイルが図形情報を保存する様になっており、そのままではchemcodeに
変換するのに適していない事が判明した。そこで、現在我々は吉野らとの共同研究によって、
Chem-Kitを上記のchemcodeに含まれる情報を出力できるように変更する事と平行して、
そのデータよりchemcodeに変換するプログラムを開発中である。これについてもいずれ発表の予定で
ある。
これらのプログラムが完成すれば、PC-9801とMacintoshの間では、機種に依存しない形での
化学構造式通信が可能となる。また、IBM-PC互換機に関しては、Turbo-Cで記述したPC-9801画面に
表示するプログラムを、若干の修正のみにて再コンパイルすれば実行可能であることを確認しており、
またWindowsの下でのプログラムは互換性があることが期待できる。従って、Macintosh系および
MS-DOS系のパーソナルコンピュータ間では、機種に依存しない構造式通信が可能となることが期待
できる。
なお、本研究の実施に際し財団法人日本化学研究会より化学研究連絡助成金の交付を受けた。
ここに同研究会に対して感謝の意を表する。