scan3d(3 次元の拘束付きグリッドスキャン)¶
scan3d サブコマンドは、層付き酵素構造で 3 つの座標の格子を作り、各格子点で座標を調和拘束で目標値に保ったまま ML/MM 計算機で緩和し、拘束を外したエネルギーを記録して、エネルギーの分布を等値面の HTML に描きます。各軸は範囲で指定し、距離 (i,j,low,high)(Å)、角度 (i,j,k,low,high)、二面角 (i,j,k,l,low,high)(度)を使えます。
主な用途¶
3 つの座標が同時に関わる反応: 結合の形成・別の結合の切断・プロトン移動が 1 つの段階で起きるような反応で、エネルギーの地形を調べる
計算済みの格子の描き直し: 既存の
surface.csvを、別のエネルギーの範囲で描き直す(--csv)結果の判定:
surface.csvに各点の収束の可否が入り、result.jsonにはscientific_statusが入る
ML 領域の計算バックエンドにはデフォルトの UMA(Meta)のほか、-b/--backend オプションで ORB、MACE、AIMNet2、DFT(dft)も選択可能です。1 つ以上の座標を動かして 1 本の経路を作るには scan を、2 つの座標の格子には scan2d を使います。
基本的な実行例¶
例の complex.pdb は real.parm7 に対応する全系の構造で、ml_region.pdb はそのうちの ML 領域(リンク水素なし)を選びます。
原子は同梱の酵素の例(examples/beza/1.R.pdb)のもので、この PDB は chain の欄が空です。そのため、原子は chain を省いた 3 項目(残基名・残基番号・原子名)を任意の順序で、カンマか空白で区切って書きます("SAM,320,CS1")。
1. YAML スペックファイルからの実行¶
3 つの範囲を pairs: に書き、--out-json を付けて result.json も出力します。デフォルトの刻み幅 0.2 Å では、このファイルから 9 × 9 × 7 の格子(567 点)ができます。
# scan3d.yaml
pairs:
- ["SAM,320,CS1", "GPP,321,C7", 1.50, 3.00]
- ["GPP,321,H11", "GLU,186,OE2", 0.90, 2.50]
- ["SAM,320,SD", "SAM,320,CS1", 1.80, 3.00]
mlmm scan3d -i complex.pdb --parm7 real.parm7 --model-pdb ml_region.pdb -q 0 \
-s scan3d.yaml --out-json -o ./result_scan3d/
等値面は result_scan3d/scan3d_density.html をブラウザで開いて確認できます。result.json には scientific_status と使える点の数(n_points_usable)が入ります。
2. インラインリテラルでの指定¶
同じ 3 つの範囲を、1 つのリテラルとしてコマンドラインに書けます。
mlmm scan3d -i complex.pdb --parm7 real.parm7 --model-pdb ml_region.pdb -q 0 \
-s '[("SAM,320,CS1","GPP,321,C7",1.50,3.00),("GPP,321,H11","GLU,186,OE2",0.90,2.50),("SAM,320,SD","SAM,320,CS1",1.80,3.00)]'
3. L-BFGS・軌跡の保存・事前最適化¶
スキャンの前に入力構造を最適化し、各点を L-BFGS で緩和して、内側ループの軌跡を保存し、相対エネルギーを使える点の最小値から測ります。--max-step-size 0.20・--opt-mode grad・--baseline min はデフォルトで、ここでは明示しています。
mlmm scan3d -i complex.pdb --parm7 real.parm7 --model-pdb ml_region.pdb -q 0 \
-s '[("SAM,320,CS1","GPP,321,C7",1.50,3.00),("GPP,321,H11","GLU,186,OE2",0.90,2.50),("SAM,320,SD","SAM,320,CS1",1.80,3.00)]' \
--max-step-size 0.20 --dump -o ./result_scan3d/ --opt-mode grad \
--preopt --baseline min
4. 既存の surface.csv からの描き直し¶
計算済みの格子の等値面を、−10〜40 kcal/mol の範囲で描き直します。エネルギーは計算しません。別の -o を指定すると、元のスキャンのファイルが残ります(使用上の注意点)。
mlmm scan3d --csv ./result_scan3d/surface.csv --zmin -10 --zmax 40 -o ./result_scan3d_replot/
処理の仕組みと計算仕様¶
開始構造と格子: ML 領域の 電荷 は
-qまたは-lから決まります。--preoptを付けると、まず拘束なしで入力構造を最適化します。収束しなかった場合は入力構造を使います。各軸には両端を含めて ceil(|high − low| / h) + 1 個の等間隔の値ができます。h は距離では--max-step-size(Å)、角度と二面角では--max-angle-step-sizeと--max-dihedral-step-size(度)です。値は開始構造に近いものから順に計算します。3 重のループ: d₁ の各値で d₁ の拘束だけをかけて構造を緩和し、d₂ の各値で d₁ と d₂ の拘束をかけて緩和します。続く内側ループで、3 つの拘束をかけて d₃ を走査します。各緩和は、同じループですでに収束した最も近い構造から始めます。まだ収束した構造が無いときは、外側のループで得た構造(d₁ では開始構造)から始めます。
各点の緩和: 調和拘束 E = ½ k (q − q_target)² が各座標 q を目標値に保ち(k は
--restraint-k)、残りの構造を ML/MM 計算機で L-BFGS(--opt-mode grad、デフォルト)または RFO(有理関数最適化、--opt-mode hess)により緩和します。固定 MM 層の原子は動きません。そのあと拘束を外してエネルギーを計算し、構造をgrid/に書き出します。表と図: 最後の点のあと、全点を
surface.csvにまとめます。使える点を 50 × 50 × 50 の格子上で動径基底関数(RBF)で補間し、段階的な色の半透明の等値面 8 枚をscan3d_density.htmlに描きます。--csvを付けたときは、与えた表についてこの段階だけを行います。
surface.csv の読み方と判定¶
surface.csv には格子点ごとの行と、基準の行が 1 つ入ります。
列 |
内容 |
|---|---|
|
格子の番号。開始構造に最も近い値が 0 なので、値の昇順ではなく計算した順の番号 |
|
緩和の後に測った座標の値。どの軸でも列名は |
|
その点の拘束の目標値 |
|
拘束を外したエネルギー(Hartree) |
|
拘束付きの緩和が収束したか |
|
基準の行だけ |
|
基準からの相対エネルギー(kcal/mol) |
|
図に使う軸の名前 |
基準の行:
i = j = k = -1、is_preopt = trueの行は開始構造です。表には残りますが、格子点として数えず、エネルギーの基準にも図にも使いません。使える点: 緩和が収束し、エネルギーが有限で、構造ファイルが書けた点を「使える点」とします。エネルギーの基準と図には、使える点だけを使います。
判定:
result.json(--out-json)のscientific_statusは、すべての格子点が使える点ならsuccess、一部だけならpartial(終了コード 0)、1 つも無ければfailed(終了コード 1)です。点の数はn_points_attemptedとn_points_usableに入ります。次の段階: 等値面は補間なので、鞍点に近い計算点の構造
grid/point_*.pdbをtsoptに渡します。反応物側と生成物側の谷の点はpath-searchの入力にできます。表からの描き直し(
--csv): 表にはd1_A,d2_A,d3_Aと、energy_hartreeかenergy_kcalの列が要ります。基準の行と、bias_converged = falseかエネルギーが有限でない行は除きます。
主な出力ファイル¶
--out-dir に次のファイルを書きます。
result_scan3d/
├─ surface.csv # 基準の行を含む格子の表
├─ scan3d_density.html # 3D 等値面(ブラウザで開く)
├─ grid/
│ ├─ point_i150_j090_k180.xyz # 各格子点の緩和後の構造
│ ├─ preopt_iDDD_jDDD_kDDD.xyz # 開始構造(基準の行)
│ └─ inner_path_d1_000_d2_000_trj.xyz # (d₁, d₂) の組ごとの内側ループの軌跡(--dump 指定時)
└─ result.json # 結果の要約(--out-json 指定時)。summary.json も同じ内容
まず scan3d_density.html と surface.csv を確認し、各点の構造は grid/ を見てください。result.json の grid_points[] には、各格子点の番号・値・目標値・エネルギー・収束の可否・構造ファイルが入ります。
ファイル名:
i・j・kの後の数字(タグDDD)は目標値の 100 倍(Å、角度では度)を 3 桁以上に 0 で埋めた数で、surface.csvの格子の番号ではありません。d1 = 1.50 Å, d2 = 0.90 Å, d3 = 1.80 Åならpoint_i150_j090_k180.xyz、角度 120° なら12000です。丸めたタグが別の点と重なると、後のファイル名には 0 始まりの番号_grid_III_JJJ_KKKが付きます。inner_path_d1_000_d2_000の数字も 0 始まりの番号です。ほかの形式: 各構造は
.pdbでも書き、B-factor の欄に各原子の層を入れます:ML 領域 0、可動 MM 10、固定 MM 20。--no-convert-filesで止められます。mmCIF の入力 と、PDB の欄に入りきらない大きな PDB の入力では、元の識別子を保った.cifも書きます。--csvを付けたとき:scan3d_density.htmlだけを書きます。--out-jsonを付けると、grid_pointsの無いresult.jsonも書きます。scientific_statusは、表に使える点があればsuccess、無ければfailedです。
主な CLI オプション¶
ML/MM の計算コマンドに共通のオプションは ML/MM の共通オプション に 1 か所でまとめてあります。下の表は scan3d に固有のものだけです。
オプション |
引数の型 |
デフォルト |
説明 |
|---|---|---|---|
|
パス |
|
全系の構造ファイル( |
|
整数 |
|
ML 領域の電荷。 |
|
整数 |
|
ML 領域のスピン多重度(2S+1) |
|
文字列 |
|
未知のリガンド残基の総電荷(例: |
|
文字列 |
|
YAML/JSON スペックファイルまたは 1 つのインラインリテラルで 3 つの範囲を指定。距離 |
|
パス |
|
出力先ディレクトリ |
|
浮動小数点数 |
|
距離の軸の格子間隔の上限(Å) |
|
浮動小数点数 |
|
角度の軸の格子間隔の上限(度) |
|
浮動小数点数 |
|
二面角の軸の格子間隔の上限(度) |
|
浮動小数点数 |
|
拘束の強さ k(距離は eV/Ų、角度は eV/rad²)。別名 |
|
|
|
各点の緩和の方法:L-BFGS / RFO |
|
フラグ |
|
スキャンの前に入力構造を拘束なしで最適化 |
|
フラグ |
|
(d₁, d₂) の組ごとの内側ループ(d₃)の軌跡を |
|
|
|
|
|
浮動小数点数 |
補間した値の最小値 / 最大値 |
8 枚の等値面を置くエネルギーの範囲の下限と上限(kcal/mol) |
|
文字列 |
|
各緩和の収束プリセット( |
|
パス |
|
計算済みの |
|
フラグ |
|
結果の要約を |
全オプションは 自動生成のオプションの一覧(英語のみ) を参照してください。
補足: YAML(
--config)では、--opt-mode gradのときlbfgsかopt.lbfgsの節が、--opt-mode hessのときrfoかopt.rfoの節が効きます。軌跡を書くかどうかは--dumpだけで決まり、YAML のopt.dumpは使いません。
使用上の注意点¶
範囲は 1 つのリテラルに 3 つ:
-sには、1 つのインラインリテラル、または YAML/JSON ファイルのpairs:で、ちょうど 3 つの範囲を渡します。複数ステージのスキャンにはscanを使ってください。chain のある PDB: 順序固定の 4 項目の形
A:SAM:320:CS1を使うと原子を一意に指定できます。格子の大きさ: 緩和の回数は 3 つの軸の値の数の積で、すぐに大きくなります(例 1 では 567 回)。最初は
--max-step-sizeを大きくするか、範囲を狭めてください。--baseline first: 点(i, j, k) = (0, 0, 0)が使える点ならそこを 0 にします。使える点でなければ[baseline] 'first' requested but usable (i=0,j=0,k=0) is missing; using the usable minimum instead.を表示し、使える点の最小値を使います。固定原子:
--freeze-atomsか YAML のgeom.freeze_atomsで指定した原子と、固定 MM 層の原子は、どの緩和でも固定されます。スキャンする座標の原子がすべて 固定原子 だとエラーになります。計算せずに指定を確かめる:
--dry-runは入力・電荷とスピン・-sを読み、計画を表示して、最適化をせずに終わります。--csvを付けたときは、オプションだけを確かめます。サイクル数の上限:
--relax-max-cycles(デフォルト100000)が各緩和のサイクル数を制限します。指定すると YAML のopt.max_cyclesより優先され、省くと YAML の値が使われます。使える点が少ないとき: 使える点が 4 つ未満か、すべて 1 つの平面上にあるときは、図だけを省きます。
[plot] NOTE: Volume plot skipped: …を表示し、surface.csv(--out-json指定時は図を載せないresult.jsonも)を書いて、終了コード 0 で終わります。使える点が 1 つも無いときは[plot] No finite data for plotting.を表示し、終了コード 1 で終わります。描き直しの警告:
bias_convergedかartifact_writtenの列が無い表も、[plot] WARNING: CSV lacks complete point provenance; …を表示して読みます。scan3dが書くsurface.csvにはartifact_writtenの列が無いので、これを描き直すとこの警告が出て、result.jsonにはn_points_usableが入りません。スキャンのディレクトリへの描き直し:
--csvの有無によらず、--out-jsonを付けない実行は--out-dirのresult.jsonとsummary.jsonを消し、付けた実行はこれらを上書きします。また、どの実行もscan3d_density.htmlを置き換えます。元のスキャンのファイルを残すには、例 4 のように--csvに別の-oを指定してください。
関連ドキュメント¶
scan — 1 つの構造からの、1 つ以上の座標の段階的スキャン
scan2d — 2 つの座標のエネルギーマップ
opt — スキャンの前後の単一構造の最適化
tsopt — 鞍点に近い構造からの TS 最適化
path-search — 格子から取った構造を通る MEP 探索
all — 一貫ワークフロー
トラブルシューティング — 異常終了時の原因切り分けと対処法