scan3d¶
調和拘束と ML/MM 緩和による 3 距離(d1, d2, d3)のグリッドスキャンを実行し、3 つの結合距離を変数とする 3D PES をマッピングします。入力には PDB/mmCIF、または --ref-pdb を伴う XYZ を使用できます。mlmm scan3d は d1、d2、d3 のネストループを実行し、ML/MM calculator(mlmm.backends.mlmm_calc.mlmm)を使用して適切な拘束で各点を緩和します。ML 領域は --model-pdb、--model-indices、または --detect-layer による B-factor layer から解決し、Amber パラメータは --parm から読み取ります。MLIP バックエンドは -b/--backend で選択し(デフォルト: uma)、オプティマイザは PySisyphus L-BFGS です。-s/--scan-lists で YAML/JSON スペックファイル(推奨)またはインライン Python リテラルを使用します。--csv で事前計算した surface を読み込めば、スキャンを再実行せずに再描画のみ行えます。
実行例¶
# 最小: YAML spec から 3D スキャンを実行
mlmm scan3d -i input.pdb --parm real.parm7 --model-pdb ml_region.pdb \
-q 0 -s scan3d.yaml -o ./result_scan3d/
(--print-parsed を追加すると、解釈されたスキャンスペックを検証し、GPU 計算を実行せずに終了します。)
# 推奨: YAML/JSON spec
cat > scan3d.yaml << 'YAML'
one_based: true
pairs:
- [12, 45, 1.30, 3.10]
- [10, 55, 1.20, 3.20]
- [15, 60, 1.10, 3.00]
YAML
mlmm scan3d -i input.pdb --parm real.parm7 --model-pdb ml_region.pdb \
-q 0 -s scan3d.yaml --print-parsed
# インライン Python リテラル、事前最適化・--dump・カスタム出力ディレクトリ付き
mlmm scan3d -i input.pdb --parm real.parm7 --model-pdb ml_region.pdb \
-q 0 -s "[(12,45,1.30,3.10),(10,55,1.20,3.20),(15,60,1.10,3.00)]" \
--max-step-size 0.20 --dump -o ./result_scan3d/ \
--preopt --baseline min
処理の流れ¶
geom_loaderで構造を読み込み、CLI から電荷/スピンを解決し、--preoptの場合は任意でバイアスなし事前最適化を実行。-s/--scan-lists(YAML/JSON スペックファイルまたはインラインリテラル)からターゲットを解析して 3 つの 4 要素タプルにします(デフォルト 1 始まりインデックス、--zero-based指定時は 0 始まり)。PDB メタデータを利用できる場合、各原子エントリは整数インデックスまたは"TYR,285,CA"のようなセレクター文字列が使用可能。区切り文字はスペース、カンマ、スラッシュ、バッククォート、バックスラッシュ。外側ループ
d1[i]: d1 拘束のみで緩和。d1 値が最も近い以前のスキャン済みジオメトリから開始。中間ループ
d2[j]: d1 と d2 の拘束で緩和。最も近い (d1, d2) ジオメトリから開始。内側ループ
d3[k]: 3 つの拘束すべてで緩和。バイアスなしエネルギーを測定(評価時にバイアス除去)し、拘束ジオメトリと収束フラグを書き出し。スキャン完了後、
surface.csvを組み立て、開始/事前最適化構造を常にi = j = k = -1の参照行として残し、kcal/mol ベースラインシフト(--baseline {min|first})を適用し、3D RBF 補間アイソサーフェスプロット(scan3d_density.html)を生成(--zmin/--zmaxを尊重)。参照行は基準エネルギー、補間、plot から除外します。
プロット専用 CSV には d1_A、d2_A、d3_A と
energy_hartree または energy_kcal が必要です。新規出力は
baseline=first の場合は grid index 列 i、j、k も必要です。
新規出力は
bias_converged、artifact_written、is_preopt も記録し、事前最適化行、
明示的な非収束行、構造ファイル未作成行、非有限値を除外します。provenance が
不完全な旧形式は警告付きで読み込み、全 index が -1 の行も参照行として除外します。補間には座標重複がなく、全 3 軸を
またぐ 4 点以上の非共面 usable point が必要です。baseline=first で
(0,0,0) が usable でなければ usable minimum にフォールバックします。
出力¶
out_dir/ (デフォルト:./result_scan3d/)
surface.csv # グリッドメタデータ(座標、energy、convergence、artifact status)
scan3d_density.html # 3D エネルギーアイソサーフェス可視化
grid/point_i###_j###_k###.xyz # 各グリッド点の緩和ジオメトリ
grid/point_i###_j###_k###.pdb # 対応する PDB(B 因子: ML=0, Movable-MM=10, Frozen=20)
grid/inner_path_d1_###_d2_###_trj.xyz # --dump が True の場合のみ
ファイル名タグ i###_j###_k### は Å の 100 分の 1 の整数(d1×100, d2×100, d3×100)であり、ステップ番号ではありません。
CLI オプション¶
オプション |
説明 |
デフォルト |
|---|---|---|
|
全系 PDB/mmCIF、または |
|
|
完全酵素の Amber parm7 トポロジー。 |
|
|
ML 領域を定義する PDB。 |
None |
|
明示的な ML 領域原子インデックス( |
None |
|
|
|
|
B 因子から ML/MM レイヤーを自動検出。 |
有効 |
|
ML 領域の総電荷。 |
None( |
|
残基ごとの電荷マッピング(例: |
None |
|
スピン多重度 (2S+1)。 |
|
|
1 始まりカンマ区切りの凍結原子インデックス。 |
None |
|
ML 領域からの可動 MM 原子の距離カットオフ (Å)。指定すると |
None |
|
スキャンターゲット: YAML/JSON スペックファイルパス(自動検出、 |
|
|
事前計算済み |
None |
|
|
|
|
|
|
|
ステップごとの最大距離増分 (Å)。グリッド密度を制御。 |
|
|
調和拘束ポテンシャル強度 k (eV/Ų)。 |
|
|
バイアス緩和ごとのオプティマイザサイクル上限。 |
|
|
(d1, d2) スライスごとの内側 d3 スキャン TRJ を書き出し。 |
|
|
グリッドとプロットの出力ディレクトリルート。 |
|
|
収束プリセット上書き( |
|
|
ベース YAML 設定ファイル(最初に適用)。 |
None |
|
XYZ 入力用の参照 PDB トポロジー。 |
None |
|
スキャン前にバイアスなし最適化を実行。 |
|
|
kcal/mol エネルギーをグローバル最小値または |
|
|
アイソサーフェスカラーバンドの手動下限(kcal/mol)。 |
自動スケール |
|
アイソサーフェスカラーバンドの手動上限(kcal/mol)。 |
自動スケール |
|
ML 領域の MLIP バックエンド: |
|
|
REAL と MODEL の両 MM 層で CMAP を保持します。 |
|
|
MM バックエンド。Hessian 構築法は |
|
|
リンク原子の配置法: scaled($g$ 因子)または固定 1.09/1.01 Å。 |
|
|
機械可読な |
|
|
PDB テンプレート利用可能時の XYZ/TRJ から対応する PDB の生成を切り替え。 |
|
全フラグの一覧は自動生成されたコマンドリファレンスにあります。ここに手動で複製しないでください。
スキャンリスト構文¶
YAML/JSON スペックフォーマット(推奨)¶
-s/--scan-lists は YAML/JSON ファイルを自動検出します。ファイルパスを渡すとスペックモードになります:
one_based: true # 任意; デフォルトは CLI の --one-based/--zero-based
pairs:
- [12, 45, 1.30, 3.10]
- [10, 55, 1.20, 3.20]
- [15, 60, 1.10, 3.00]
pairsは必須で、正確に 3 つの 4 要素タプルを含む必要があります。各 4 要素タプルは
(i, j, low_A, high_A)です。インデックスは整数または PDB セレクター(
--scan-listsと同じ)が使用可能です。
インラインリテラルフォーマット¶
-s/--scan-lists がファイルパスでない値を受け取ると、単一の Python リテラル文字列として評価されます。シェルクォートに注意してください。
リテラルは正確に 3 つの 4 要素タプル (atom1, atom2, low_A, high_A) の Python リストです:
-s '[(atom1, atom2, low_A, high_A), (atom3, atom4, low_A, high_A), (atom5, atom6, low_A, high_A)]'
シェルが括弧やスペースを解釈しないよう、リテラル全体をシングルクォートで囲んでください。
各 4 要素タプルは 1 つのスキャン軸を定義します:
atom1–atom2間の距離をlow_Aからhigh_Aまでスキャンします。scanと異なり、1 つのリテラルのみ受け付けます(マルチステージ非対応)。
原子は整数インデックスまたは PDB セレクター文字列で指定できます:
方法 |
例 |
備考 |
|---|---|---|
整数インデックス |
|
デフォルトは 1 始まり( |
PDB セレクター |
|
残基名、残基番号、原子名 |
PDB セレクターのトークンは、カンマ ,、スペース、スラッシュ /、バッククォート `、バックスラッシュ \ のいずれかで区切れます。トークンの順序は自由です。
# 以下はすべて同じ原子を指定:
"TYR,285,CA"
"TYR 285 CA"
"TYR/285/CA"
"285,TYR,CA" # 順序は自由
クォート規則:
# 正しい: リスト全体をシングルクォート、内側のセレクター文字列をダブルクォート
-s '[("TYR,285,CA","MMT,309,C10",1.30,3.10),("TYR,285,CB","MMT,309,C11",1.20,3.20),("TYR,285,CG","MMT,309,C12",1.10,3.00)]'
# 正しい: 整数インデックスは内側のクォート不要
-s '[(1, 5, 1.30, 3.10), (2, 8, 1.20, 3.20), (3, 12, 1.10, 3.00)]'
# 非推奨: 外側をダブルクォートにすると内側のクォートをエスケープする必要あり
-s "[(\"TYR,285,CA\",\"MMT,309,C10\",1.30,3.10),...]"
YAML 設定¶
geom:
coord_type: cart
freeze_atoms: []
calc:
model_charge: 0
model_mult: 1
real_parm7: real.parm7
model_pdb: ml_region.pdb
opt:
thresh: baker
# max_cycles: 100000 # 任意の有限上限
lbfgs:
max_step: 0.3
bias:
k: 300.0
軌跡保存と出力先は CLI が所有する --dump と --out-dir を使います。
関連項目¶
典型エラー別レシピ – 症状起点の切り分け
トラブルシューティング – 詳細な対処ガイド
scan – 1D 結合距離駆動スキャン
scan2d – 2D 距離グリッドスキャン
opt – 構造最適化(スキャン前に実行する場合が多い)
all – 一気通貫ワークフロー
YAML リファレンス – スキャンの完全な設定オプション