立体異性体を含む化合物を、構造データベースから別の解析ソフトへ渡す。そのとき引き継ぎたいのは、原子のつながりと、立体配置の両方です。chematic v1.1.7では、硫黄の立体配置をMOLファイルへ書き出す処理と、3D座標から環状分子や二重結合の立体配置を読み取る処理を改善しました。

このリリースの成果を、メチルフェニルスルホキシドのS配置・R配置で見ていきます。SMILESからV3000形式のMOLへ変換し、読み戻した構造まで、記事の中で切り替えて比べられます。

硫黄の立体配置を、変換先へ引き継ぐ

メチルフェニルスルホキシドは、硫黄にメチル基、フェニル基、酸素が結び付いた分子です。硫黄の孤立電子対も含めた立体的な並びによって、互いに鏡像関係にある2つの配置を持ちます。ここでは、優先順位の規則に従って立体配置を表すCIPラベルのSとRで区別します。

SMILESでは原子の並びに@や@@を加えて立体情報を書きます。MOLファイルでは、座標と、手前・奥への結合を表すくさびの情報などを使います。異なる記法へ移す際には、どの隣接原子を基準に向きを表しているかをそろえる必要があります。DaylightのSMILES仕様とRDKitの立体化学解説に、それぞれの記法が説明されています。

v1.1.7では、硫黄の孤立電子対を含む隣接位置の順序を、SMILESとMOLの読み書きでそろえました。これにより、今回の例ではS配置をS配置として、R配置をR配置として読み戻せます。実装と検証例は硫黄の立体配置に関する記録にあります。

S配置とR配置を切り替えてみる

下の操作例では、配置と表記を選べます。S=Oで表した構造と、電荷を明示した[S⁺][O⁻]の表記を用意しました。左が入力SMILESの構造、右がV3000へ書き出して読み戻した構造です。

メチルフェニルスルホキシドの変換例:S → S、R → R。

V3000変換後にも保たれるスルホキシドのS配置とR配置

変換とCIPラベルの計算は、ブラウザ内で公開npm版chematic 1.1.7を使って行います。生成したMOLファイルの内容を開いたり、ダウンロードしたりできます。色付きの丸は、立体配置を比べている硫黄原子を示します。

@と@@は、SMILESで原子をたどる順序に依存する記号です。書き順が変われば、同じ立体配置でも記号が変わることがあります。この例では、入力と出力の文字列に加えて、硫黄のCIPラベルを並べています。

Pythonでも、SからS・RからRを確かめる

roundtrip.pyを保存して、次を実行します。

python -m pip install "chematic==1.1.7"
python roundtrip.py

スクリプトの内容は次のとおりです。

import chematic

for smiles in ["C[S@](=O)c1ccccc1", "C[S@@](=O)c1ccccc1"]:
    original = chematic.from_smiles(smiles)
    block = original.to_mol_v3000(original.rdkit_2d_coords())
    restored = chematic.from_mol_v3000(block)
    before = original.cip_stereo(mode="accurate")[0]["descriptor"]
    after = restored.cip_stereo(mode="accurate")[0]["descriptor"]
    print(f"{smiles}: {before} -> {after}")
C[S@](=O)c1ccccc1: S -> S
C[S@@](=O)c1ccccc1: R -> R

rdkit_2d_coords()が作る2D座標をV3000の書き出しに渡し、from_mol_v3000()で読み戻します。cip_stereo(mode="accurate")は、その構造のCIPラベルを計算します。上の例は、いずれも硫黄に1つの立体中心を持つ分子です。

3D構造では、奥行きも使って立体配置を読む

3DのMOLファイルには、原子ごとのx・y・z座標が入っています。くさび結合などの明示的な立体指定がない場合でも、その座標から立体配置を読み取れる構造があります。

たとえば、環に結び付いた二重結合では、環の一部が平面から張り出しています。x・yだけを取り出した投影図では、置換基がどちら側にあるかの見え方が変わります。v1.1.7の読み込み処理は、対象となる3D入力でz座標まで使い、二重結合の配置を判定します。環内の立体中心どうしの関係や、置換アダマンタンのようなかご状骨格を読み取る処理も改善しました。

今回、立体記号を取り除いた回帰テスト用の3D構造について、環内に複数の立体中心を持つ分子、環外二重結合を持つ分子、置換アダマンタンを各2形式で読み込みました。V2000・V3000の計6件すべてで、読み取った構造がテストの期待する立体構造と一致しました。入力ファイルと結果、3D読み込みの回帰テストを公開しています。

書き出した構造をRDKitでも読み戻す

記事の4つの入力に、別の置換基を持つ12構造を加え、硫黄が立体中心の計16構造を公開版1.1.7で確認しました。Python版とnpm版が書き出したV3000を、それぞれRDKit 2026.09.1でも読み戻しています。

確認した処理 結果
Python版でV3000へ変換し、chematicで読み戻す 16/16で硫黄のCIPラベルを保持
npm版でV3000へ変換し、chematicで読み戻す 16/16で硫黄のCIPラベルを保持
両版のV3000をRDKitで読み戻す それぞれ16/16で入力の立体構造と一致

RDKitでの照合には、CIPラベルと、立体情報を含む正規化SMILESを使いました。対象はこの記事で選んだ16構造です。実行日は2026年10月18日で、Python側はmacOS arm64・Python 3.13.6を使っています。Pythonの結果、npmの結果、パッケージと入力ファイルの記録から、個々の変換をたどれます。

立体異性体を区別したデータを別の道具へ渡すには、書き出す形式にもその違いを載せる必要があります。v1.1.7では、硫黄の立体中心と3Dの分子構造について、その受け渡しに使える処理を改善しました。リリースノートには、同じ版で追加したファイル入出力や計算機能もまとめています。