0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PubChemの座標データを「グラフ」として解釈し、MCP経由で3D CADに分子ソリッドモデルを自動生成させる

0
Posted at

はじめに

分子の3Dモデルを3Dプリンターで出力したい場合、通常は専用の化学ビューア(PyMOLや Chimeraなど)からメッシュデータ(STLやOBJ)を書き出すルートが一般的です。しかし、メッシュデータは後からCAD上で寸法を微調整したり、治具やスタンドと組み合わせたりするソリッドモデリングのワークフローとは相性が良くありません。

そもそも分子構造データ(SDF / MOLフォーマット)の本質は、**「3次元空間上のノード(原子)の座標」と「それらを結ぶエッジ(結合)のリスト」からなるシンプルな無向グラフ(Undirected Graph)**です。

であれば、わざわざ専用ソフトを介さずとも、**「テキスト化されたグラフ構造とモデリング規約(ルール)をLLMに渡し、MCP(Model Context Protocol)経由で3D CADのAPIを直接叩かせれば、ネイティブなソリッドモデルが生成できるのではないか?」**と考え、実践してみました。

image.png

本記事では、PubChemの座標データから水素を除いた骨格モデルを、結合次数(単結合・芳香環)に応じた太さのパイプスイープとして宣言的にモデリングさせる手法を紹介します。


1. 入力データの構造:SDF(MOL)フォーマットの解剖

今回対象とするのは、PubChem等から取得できる標準的なV2000形式の座標ブロックと結合ブロックです。

   -3.5849   -0.4599    0.1218 N   0  0  0  0  0  0  0  0  0  0  0  0
   -2.2239   -0.1762   -0.3436 C   0  0  2  0  0  0  0  0  0  0  0  0
   -1.2222   -0.4574    0.7925 C   0  0  0  0  0  0  0  0  0  0  0  0
    0.2121   -0.2349    0.4021 C   0  0  0  0  0  0  0  0  0  0  0  0
   -2.1745    1.2729   -0.8278 C   0  0  0  0  0  0  0  0  0  0  0  0
    0.9484   -1.2846   -0.1323 C   0  0  0  0  0  0  0  0  0  0  0  0
    0.7852    1.0179    0.5809 C   0  0  0  0  0  0  0  0  0  0  0  0
    2.2797   -1.0783   -0.4941 C   0  0  0  0  0  0  0  0  0  0  0  0
    2.1164    1.2243    0.2190 C   0  0  0  0  0  0  0  0  0  0  0  0
    2.8637    0.1762   -0.3184 C   0  0  0  0  0  0  0  0  0  0  0  0
   (中略:11〜23行目の水素 H の座標データ)
  1  2  1  0  0  0  0
  2  3  1  0  0  0  0
  2  5  1  0  0  0  0
  3  4  1  0  0  0  0
  4  6  2  0  0  0  0
  4  7  1  0  0  0  0
  6  8  1  0  0  0  0
  7  9  2  0  0  0  0
  8 10  2  0  0  0  0
  9 10  1  0  0  0  0
   (中略:水素に関わる結合データ)

このデータは、情報工学的に見れば以下の2つのテーブルに過ぎません。

  1. Atom Block(ノード定義): [X座標, Y座標, Z座標, 元素記号] (行番号が1始まりのノードID)
  2. Bond Block(エッジ定義): [始点ノードID, 終点ノードID, 結合次数(1:単結合, 2:二重結合)]

2. モデリングの設計規約(ルール定義)

3Dプリントや視覚的な分かりやすさ、有機合成者の慣例を考慮し、生データを入力しますが、以下の変換ルール(制約)を設けます。Fusionの内部はcm単位で作業するため、具体的数値はcmで入植します。

  • フィルタリング(重原子骨格の抽出):
    水素原子(H)および水素に接続するエッジはすべて除外し、分子の骨格(C, N などの重原子)のみをモデリング対象とする。

  • ノード(原子)のジオメトリ化:
    各重原子の座標を中心に、半径 0.3 の球(Sphere)を配置する。

  • エッジ(結合)のジオメトリ化と意味論的解釈:
    SDFの結合ブロック上では、ベンゼン環(芳香環)は単結合(1)と二重結合(2)が交互に並ぶケクレ構造として記述されています(上記データのノード 4, 6, 7, 8, 9, 10)。
    しかし実態は共鳴して等価な結合であるため、3Dモデル上では単結合と二重結合を別々に作るのではなく、「6員環を構成する閉路(サイクル)はすべて芳香環結合として統一する」というトポロジー解釈を入れます。

  • 単結合: 半径 0.15 の円断面によるソリッドパイプ

  • 芳香環結合: 半径 0.225 の円断面によるソリッドパイプ(単結合より太く、原子球より細い中間径で共鳴状態を表現)


3. アーキテクチャ:データプレーンとコントロールプレーンの分離

今回のアプローチのポイントは、「データの前処理・構造化」 と 「MCPによるCAD操作の実行」 を分離することです。

  1. Parser & Graph Resolver(前処理・LLM推論):
    生データから H を除外し、グラフの閉路(芳香環)を特定して、どのエッジが R=0.15 でどのエッジが R=0.225 かを確定させた「中間表現(構造化リスト)」を作る。
  2. MCP Execution(CAD生成):
    確定した座標リストとエッジリストに基づき、CAD側のプリミティブ生成・パイプ・ブーリアン結合を順次実行する。

4. MCPへの指示プロンプト設計

実際に生データから構造を整理し、MCPサーバー(Fusion 360やFreeCAD、Blender等のMCP連携環境)へ流し込むためのプロンプト構成です。

ステップ1:生データからの構造抽出指示

まず、SDFの生データとともに以下のルールを与えます。

プロンプト指示(抽出フェーズ)
PubChemの座標データから3Dモデルを作ります。これをMCP指示にして動かしたい。

  • 座標のうち水素(H)以外の元素をモデリングする。
  • 座標データに従い原子の場所を作成、結合はグラフ情報にある通りの接続とする。
  • 原子を 0.6 の球、単結合を 0.3 の球(円断面)からソリッドスイープ、芳香環結合は 0.45 の球(円断面)をソリッドスイープさせる。

ステップ2:生成されたMCP実行用インストラクション

上記によってフィルタリングと環構造の判定が行われ、以下の実行可能なコマンド仕様(宣言的指示)が出力されます。あとはこれをMCPクライアントに実行させるだけです。

以下の手順に従って、提供された座標とグラフ情報から分子の3Dソリッドモデルを構築してください。

1. 原子(球体)の作成:
   以下の中心座標に、半径 0.3 の球体をそれぞれ配置する。
   - Atom 1 (N): [-3.5849, -0.4599, 0.1218]
   - Atom 2 (C): [-2.2239, -0.1762, -0.3436]
   - Atom 3 (C): [-1.2222, -0.4574,  0.7925]
   - Atom 4 (C): [ 0.2121, -0.2349,  0.4021]
   - Atom 5 (C): [-2.1745,  1.2729, -0.8278]
   - Atom 6 (C): [ 0.9484, -1.2846, -0.1323]
   - Atom 7 (C): [ 0.7852,  1.0179,  0.5809]
   - Atom 8 (C): [ 2.2797, -1.0783, -0.4941]
   - Atom 9 (C): [ 2.1164,  1.2243,  0.2190]
   - Atom 10 (C): [ 2.8637,  0.1762, -0.3184]

2. 単結合の作成:
   以下の原子間を結ぶ3Dスケッチ線分を作成し、半径 0.15 のパイプ(ソリッドスイープ)を作成する。
   - (1, 2), (2, 3), (2, 5), (3, 4)

3. 芳香環結合の作成:
   以下の原子間を結ぶ3Dスケッチ線分(ベンゼン環部分)を作成し、半径 0.225 のパイプ(ソリッドスイープ)を作成する。
   - (4, 6), (4, 7), (6, 8), (7, 9), (8, 10), (9, 10)

4. ブーリアン結合:
   生成されたすべての球体とスイープ体を単一のソリッドボディに結合(Combine / Union)する。


5. 実行結果と考察

出力されたモデル(記事冒頭の画像)を見ると、以下の点が綺麗に実現できています。

  1. 立体化学(キラル中心や二面角)の正確な再現:
    手作業で3Dスケッチを描くと破綻しがちな Atom 2 周りの四面体角(sp3炭素の立体配置)や、芳香環平面に対する側鎖のねじれ角が、PubChemの計算化学座標通りに寸分違わず配置されています。

  2. 芳香環の視覚的表現と強度確保:
    単結合(0.15)に対して芳香環(0.225)を太くしたことで、一目で共役環構造であることが分かり、3Dプリント時の造形強度も向上しています。

  3. ソリッドモデルとしての再利用性:
    ポリゴンメッシュではなくCAD上のネイティブな球と円柱スイープで構成されているため、「特定の原子にだけ穴を開けて磁石を埋め込む」「台座用のシャフトを生やす」といった後加工がCAD上でシームレスに行えます。3Dプリンターで色を変えるのであれば、球体をカットして別ボディにすることで、印刷時の色分けが簡単になります。

まとめ

化学のSDFデータは一見すると呪文のような数値の羅列ですが、「3次元座標を持つグラフ構造である」と捉え直すことで、MCPを介したパラメトリックな3Dモデリングの入力ソースとしてそのまま活用できます。

分子のデータから直接モデリングは、画面上の2D構造式や頭の中のイメージだけでは掴みきれなかった「立体障害」や「分子のねじれ」を、文字通り手に取れる形として直感的に教えてくれます。自分で合成した骨格や、教科書にある教材を立体化することで、理解をより深めることができます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?