scan(拘束付き座標スキャン)¶
scan サブコマンドは、層付き酵素構造の中の距離・角度・二面角を調和拘束で少しずつ動かし、各点でそれ以外の自由度を ML/MM 計算機で緩和して、1 つの構造から反応経路の候補を作ります。1 つのリテラル(または YAML の 1 つのステージに並べた距離の目標値)に書いた座標は 1 つのステージとして一緒に動きます。リテラルを複数並べるとステージが順に実行され、各ステージは前のステージの緩和後の構造から始まります。
主な用途¶
1 つの構造からの経路づくり: 反応物の反応する結合を動かして、中間体や生成物に近い構造を作り、
path-searchに渡す反応の順序の検討: 結合形成とプロトン移動を 1 つのステージで動かす場合と、別のステージに分ける場合とで、エネルギーの変化を比べる
allのスキャン段の単独実行:allが-sで行うスキャンを、刻み幅や拘束を変えて単独で実行し直す結果の判定: 各ステージで共有結合ができたか切れたかが出力され、
result.jsonにはscientific_statusが入る
ML 領域の計算バックエンドにはデフォルトの UMA(Meta)のほか、-b/--backend オプションで ORB、MACE、AIMNet2、DFT(dft)も選択可能です。独立した 2 つまたは 3 つの座標でエネルギーの格子を作るには、scan2d または scan3d を使います。
基本的な実行例¶
例の complex.pdb は real.parm7 に対応する全系の構造で、ml_region.pdb はそのうちの ML 領域(リンク水素なし)を選びます。
原子は同梱の酵素の例(examples/beza/1.R.pdb)のもので、この PDB は chain の欄が空です。そのため、原子は chain を省いた 3 項目(残基名・残基番号・原子名)を任意の順序で、カンマか空白で区切って書きます。
1. YAML スペックファイルからの実行¶
ステージをファイルに書き、--out-json を付けて結果の要約も出力します。
# scan.yaml
stages:
- [["SAM,320,CS1", "GPP,321,C7", 1.60]]
- [["GPP,321,H11", "GLU,186,OE2", 0.90]]
mlmm scan -i complex.pdb --parm7 real.parm7 --model-pdb ml_region.pdb -q 0 \
-s scan.yaml --out-json -o ./result_scan
端末には各ステージで [stage k] Covalent-bond changes (start vs final): Yes(または No)が出て、最後に全ステージの Summary と ====== Scan finished ====== が出ます。result_scan/result.json の scientific_status には、すべてのステージが収束すると success が入ります。
2. インラインリテラルでの指定¶
単純な 1 ステージのスキャンは、コマンドラインに直接書けます。
mlmm scan -i complex.pdb --parm7 real.parm7 --model-pdb ml_region.pdb -q 0 \
-s '[("SAM,320,CS1","GPP,321,C7",1.60)]'
3. 2 つの座標を 1 つのステージで動かす¶
同じリテラルの中の座標は一緒に(協奏的に)動きます。
mlmm scan -i complex.pdb --parm7 real.parm7 --model-pdb ml_region.pdb -q 0 \
-s '[("CS1 SAM 320","GPP 321 C7",1.60),("GPP 321 H11","GLU 186 OE2",0.90)]' -o ./result_concerted
4. 2 つのステージを順に実行する¶
1 つの -s の後にリテラルを複数並べます。ステージ 2 はステージ 1 の緩和後の構造から始まります。
mlmm scan -i complex.pdb --parm7 real.parm7 --model-pdb ml_region.pdb -q 0 \
-s '[("SAM,320,CS1","GPP,321,C7",1.60)]' '[("GPP,321,H11","GLU,186,OE2",0.90)]' -o ./result_staged
5. 双方向スキャン¶
4-tuple を使うと、1 つの距離を入力構造から両方向にスキャンします。
mlmm scan -i complex.pdb --parm7 real.parm7 --model-pdb ml_region.pdb -q 0 \
-s '[(12, 45, 1.35, 2.50)]'
6. 軌跡の保存¶
--dump を付けると、各ステップの最適化の軌跡も保存します。
mlmm scan -i complex.pdb --parm7 real.parm7 --model-pdb ml_region.pdb -q 0 \
-s scan.yaml --dump -o ./result_scan_dump
処理の仕組みと計算仕様¶
構造の読み込み: ML 領域の 電荷 は
-qまたは-lから決まります。--preoptを付けると、まず拘束なしで構造を最適化します。収束しなかった場合は入力構造を使います。ステージのステップ分割: 座標ごとに変化量 Δ = 目標値 − 現在値(二面角では −180°〜180° に折り返した最短の変化量)を求め、ステージを N = ceil(max(|Δ| / h)) ステップに分けます。h は距離では
--max-step-size(Å)、角度では--max-angle-step-size、二面角では--max-dihedral-step-size(度)です。各座標は 1 ステップに Δ / N ずつ動くので、ステージ内のすべての座標が同時に目標値に着きます。拘束付きの緩和: 各ステップで、調和拘束 E = ½ k (q − q_target)² がスキャンする座標 q をそのステップの目標値に保ち(k は
--restraint-k)、残りの構造を ML/MM 計算機で L-BFGS(--opt-mode grad、デフォルト)または RFO(有理関数最適化、--opt-mode hess)により緩和します。固定 MM 層の原子は動きません。各ステップには、拘束を外して計算した ML/MM のエネルギーを記録します。ML/MM のスキャンでは Cartesian 座標(geom.coord_type: cart)がデフォルトで、推奨です。YAML でdlcを選ぶこともできますが、収束までにずっと長くかかることがあります。ステージの終わり:
--endoptを付けると、ステージの最後の構造を拘束なしでもう一度最適化します。そのあと、ステージの最初と最後の構造を比べて共有結合の変化を調べ、ステージの結果を書き出します。次のステージ: 次のステージはこの結果から始まります。最後のステージが終わると、全ステージの軌跡を 1 つのファイルにつなぎます。
双方向スキャン(4-tuple)¶
目標値 (i, j, target) の代わりに範囲 (i, j, low, high) を指定すると、入力構造から両方向にスキャンします。範囲は 2 つのステージに展開されます。
パス 1:
i–jの距離を現在の値からlowに向けて動かす。パス 2: 入力構造に戻し、
i–jの距離をhighに向けて動かす。
つないだ軌跡は low → 入力構造 → high の順になり、出発構造を通る連続した経路になります。角度の範囲 (i, j, k, low, high) と二面角の範囲 (i, j, k, l, low, high) も同じようにスキャンします。
結合変化の検出¶
両原子の共有結合半径の和に bond_factor(デフォルト 1.20)を掛けた値を T とします。2 原子の距離が T − margin_fraction × T 以下なら、結合しているとみなします。結合の形成・切断として報告するのは、距離が delta_fraction × T 以上変わった組だけです。margin_fraction と delta_fraction のデフォルトはどちらも 0.05 です。path-search も同じ基準を使います。キーは YAML の bond の節にあります。
結果の判定¶
確認する場所 |
見るもの |
|---|---|
端末(各ステージ) |
|
端末(実行の最後) |
|
|
|
|
|
partial の 終了コード は 0、failed は 1 です。収束して狙った結合変化が起きたスキャンは経路の候補になり、エネルギーが最も高いステップは tsopt に渡す TS 候補になります。このステップは scan_trj.xyz から 取り出せます。
障壁の向き¶
scan はエネルギーを記録しますが、障壁は出力しません。生成物側から始めたスキャン(またはそこから作った経路や TS 候補)から障壁を読む場合、開始構造との差は逆方向の障壁 E(TS) − E(product) です。順方向の障壁は反応物から計算します。
実行内容 |
順方向障壁 |
|---|---|
反応物から始めたスキャン |
|
生成物から始めたスキャン |
|
これを切り替えるオプションはありません。障壁を引用する前に、スキャンがどちらの端点から始まったかを確認してください。結晶構造の生成物複合体から始めた場合は特に注意してください。
主な出力ファイル¶
--out-dir に次のファイルを書きます。
result_scan/
├─ preopt/
│ └─ result.xyz # 事前最適化した構造(--preopt 指定時)
├─ stage_01/ # ステージごとのディレクトリ(stage_NN)
│ ├─ result.xyz # ステージの final geometry
│ ├─ scan_trj.xyz # ステージ内の各ステップの構造とエネルギー
│ └─ scan_s0001_optimization_trj.xyz # 各ステップの最適化の軌跡(--dump 指定時)
├─ scan_trj.xyz # 全ステージをつないだ軌跡
└─ result.json # 結果の要約(--out-json 指定時)。summary.json も同じ内容
構造と軌跡は同じ名前の PDB(result.pdb、scan.pdb)でも書きます。--no-convert-files で止められます。mmCIF の入力 と、PDB の欄に入りきらない大きな PDB の入力では、元の識別子を保った .cif も書きます。
ステージの結果:
stage_NN/result.*はステージ NN の終わりの構造です。path-searchには、開始構造に続けてstage_NN/result.*をステージの順に渡します。エネルギーの変化:
scan_trj.xyzの各フレームのコメント行には、拘束を外したエネルギー(Hartree)が入っています。trj2figで図にできます。
主な CLI オプション¶
ML/MM の計算コマンドに共通のオプションは ML/MM の共通オプション に 1 か所でまとめてあります。下の表は scan に固有のものだけです。
オプション |
引数の型 |
デフォルト |
説明 |
|---|---|---|---|
|
パス |
(必須) |
全系の構造ファイル( |
|
整数 |
|
ML 領域の電荷。 |
|
整数 |
|
ML 領域のスピン多重度(2S+1) |
|
文字列 |
|
未知のリガンド残基の総電荷(例: |
|
文字列 |
(必須) |
YAML/JSON スペックファイル、または 1 つ以上のインラインリテラル(1 つが 1 ステージ)。距離の目標値 |
|
パス |
|
出力先ディレクトリ |
|
フラグ |
|
|
|
浮動小数点数 |
|
1 ステップあたりの距離の最大変化量(Å) |
|
浮動小数点数 |
|
1 ステップあたりの角度の最大変化量(度) |
|
浮動小数点数 |
|
1 ステップあたりの二面角の最大変化量(度) |
|
浮動小数点数 |
|
拘束の強さ k(距離は eV/Ų、角度は eV/rad²)。別名 |
|
フラグ |
|
スキャンの前に入力構造を拘束なしで最適化 |
|
フラグ |
|
各ステージの結果を拘束なしで最適化 |
|
フラグ |
|
各ステップの最適化の軌跡を出力 |
|
|
|
緩和の方法:L-BFGS / RFO( |
|
文字列 |
|
固定する原子の 1 始まりのインデックス(カンマ区切り)。YAML の |
|
フラグ |
|
結果の要約を |
全オプションは 自動生成のオプションの一覧(英語のみ) を参照してください。
使用上の注意点¶
--preoptは呼び出し方で変わる:scanを単独で実行したときは、--preoptを付けない限り事前最適化をしません。allの中では、all --preopt(デフォルトで有効)に従って事前最適化し、all --scan-preopt/--no-scan-preoptで上書きできます。インラインでは目標値と範囲を混ぜない: 1 つのインラインリテラルの中でも、1 回の実行のリテラルどうしでも、目標値
(i,j,target)と範囲のどちらか一方だけを使います。両方を組み合わせるときは、YAML/JSON スペックのstages:に並べてください。範囲を使うときのステージ番号: 範囲 1 つは
low向きとhigh向きの 2 つのステージになります(4-tuple 1 つならstage_01/とstage_02/)。インラインでは、1 つのリテラルの範囲がすべてこの 2 つのステージで一緒に動きます。YAML のstages:では、範囲を含むステージの項目がそれぞれ別のステージになり、目標値は 1 つ、範囲は 2 つのステージになります。目標の距離は正の値にしてください。また、1 つのステージに同じ座標を 2 回書くことはできません。
計算せずに指定を確かめる:
--dry-runは入力・電荷とスピン・-sを読み、ステージの数を表示して、最適化をせずに終了します。固定原子:
--freeze-atomsか YAML のgeom.freeze_atomsで指定した原子と、固定 MM 層の原子は、どの緩和でも固定されます。スキャンする座標の原子がすべて 固定原子 だとエラーになります。サイクル数の上限:
--relax-max-cycles(デフォルト100000)が各緩和のサイクル数を制限します。指定すると YAML のopt.max_cyclesより優先されます。
関連ドキュメント¶
スキャンリスト仕様 — YAML/JSON スペックファイル、インラインリテラル、原子の指定
scan2d — 2 つの座標のエネルギーマップ
scan3d — 3 つの座標のエネルギー格子
path-search — スキャンの結果からの最小エネルギー経路(MEP)探索
all — 1 つの構造と
-sからのスキャンを含む一貫ワークフロートラブルシューティング — 異常終了時の原因切り分けと対処法