アレンの立体異性体を化合物リストで扱うなら、SMILESを書き直した後も、その違いを残したい。chematic v1.1.3では、アレンの軸不斉を読み取り、正規化したSMILESへ書き出し、再び読み込めるようにしました。反対の配置を持つ2つの構造を、別々の文字列として扱えます。

比較したRDKit 2026.09.1では、今回の2つの入力がどちらもCC=C=CCCになります。RDKit issue #9678で報告されている、アレンの立体指定が読み書きの途中で落ちる例です。ここでは公開npm版のchematic v1.1.3で、同じ入力から立体指定を保持した結果を示します。

同じ結合を持つ2つの配置を区別する

アレンはC=C=Cという連続した二重結合を持ちます。両端の炭素にそれぞれ異なる置換基が結合すると、軸の周りの配置によって立体異性体を区別できます。SMILESでは、その配置を@AL1と@AL2で指定できます。Daylightの仕様の3.3.4節に、このアレン型の表記が説明されています。

比較に使った入力は次の2つです。

CC=[C@AL1]=CCC
CC=[C@AL2]=CCC

RDKit 2026.09.1で、立体情報を出力するisomericSmiles=Trueを指定しても、正規化後は次の結果でした。非四面体の立体化学を許可する設定も有効にしています。

CC=[C@AL1]=CCC -> CC=C=CCC
CC=[C@AL2]=CCC -> CC=C=CCC

chematicでは、正規化後も別々のSMILESになる

Node.jsを使える環境で、空の作業フォルダーにv113-allene.mjsを保存し、次を実行します。

npm init -y
npm install --save-exact @kent-tokyo/chematic@1.1.3
node v113-allene.mjs
CC=[C@AL1]=CCC -> C(=[C@AL2]=CC)CC
CC=[C@AL2]=CCC -> C(=[C@AL1]=CC)CC
distinct: 2

計算を呼び出すのはparse_smilesとmol.canonical_smiles()です。スクリプトでは、出力した各SMILESをもう一度読み込み、同じ正規化文字列へ戻ることも確かめています。

出力で@AL1と@AL2が入れ替わっているのは、原子の記載順が変わったためです。SMILESの立体指定は、その文字列内の原子順に対する相対表現です。chematicは、正規化で順番を変える際に立体指定も調整し、同じ配置を表します。

構造の読み書きに、軸の周りの配置を引き継ぐ

v1.1.3では、アレンの中心から両側の二重結合をたどり、末端に結合する置換基の順序を立体情報として扱います。書き出し側もこの順序を使うため、原子を並べ替えてSMILESを作る際に、軸不斉を引き継げます。アレンの実装とWASMの回帰テストに処理と例を載せています。

この例では、反対の配置を持つ2つの構造が、別々の正規化文字列になります。化合物リストのキーや、構造を書き出して次の処理へ渡す際にも、アレンの立体異性体を区別したまま扱えます。省略形の@と@@を使った同じ構造でも、対応する@AL表記へ正規化されることを確認しました。

比較は2026年10月13日にmacOS arm64上で実行しました。4種類の入力と再読み込みの結果は比較データ、RDKit側の呼び出し方は再現スクリプト、配布物とファイルのハッシュは実行記録で読めます。