JSON 出力リファレンス¶
mlmm は、AI エージェント・スクリプト・下流ツールがプログラムから利用するための機械可読 JSON 出力を提供します。
--out-json フラグ¶
主要な MLIP 系サブコマンド(opt, sp, tsopt, freq, irc, scan, scan2d, scan3d, path-opt, dft, extract)が --out-json / --no-out-json(デフォルト: off)に対応しています。
有効にすると、出力ディレクトリに result.json が生成されます。
mlmm opt -i r_complex_layered.pdb --max-cycles 5 --out-json --out-dir result_opt
cat result_opt/result.json | python -m json.tool
all / path-search は常に summary.json を出力します(--out-json 不要)。
summary.json ミラー¶
write_result_json は各ステージの result.json ペイロードを同じディレクトリの summary.json にミラーします。MCP クライアントやエージェントスクリプトは全サブコマンドで単一のファイル名(summary.json)を読めば済みます。同じディレクトリに書き出される result.json も同一内容です。
共通エンベロープ¶
すべての result.json(およびミラーされた summary.json)に自動付与されるフィールド:
フィールド |
型 |
説明 |
|---|---|---|
|
string |
エンベロープのスキーマバージョン。現在値は |
|
string |
サブコマンド名(例: |
|
string |
パッケージバージョン |
|
string |
各サブコマンドが設定(自動付与ではない)。all/path-search は success/partial/failed、エラー時は error、ステージ別は converged/not_converged/completed 等 |
|
float |
実行時間(秒) |
|
object |
ハードウェア情報(下表参照) |
エラーエンベロープ(status == "error" のとき)¶
フィールド |
型 |
説明 |
|---|---|---|
|
string |
元の例外の |
|
string |
例外クラス名(例: |
|
list[string] |
完全な MRO クラス名(例: |
|
string |
例外クラスが定義されたモジュール |
|
string |
高レベルの CLI ステージラベル(例: |
environment:
フィールド |
型 |
例 |
|---|---|---|
|
string |
|
|
string |
|
|
float |
|
|
string |
|
|
string |
|
|
int |
|
|
float |
|
サブコマンド別スキーマ¶
opt¶
フィールド |
型 |
説明 |
|---|---|---|
|
string |
|
|
float |
最終 ONIOM エネルギー (Hartree) |
|
int |
最適化サイクル数 |
|
string |
|
|
string |
ML バックエンド |
|
int |
モデル領域電荷 |
|
int |
モデル領域スピン多重度 |
|
int |
全原子数(全レイヤー) |
|
int |
凍結原子数 |
|
string |
収束閾値プリセット名 |
|
int |
最大サイクル数 |
|
string |
入力ファイル名 |
|
float |
最終 max gradient (Hartree/Bohr) |
|
float |
最終 RMS gradient |
|
float |
最終 max 変位 (Bohr) |
|
float |
最終 RMS 変位 |
|
object |
収束閾値の数値 |
|
object |
出力ファイルマップ |
tsopt¶
フィールド |
型 |
説明 |
|---|---|---|
|
string |
|
|
float |
TS エネルギー (Hartree) |
|
int |
虚振動数 |
|
float[] |
虚振動数 (cm$^{-1}$, 負の値) |
|
string |
|
|
int |
全原子数 |
|
int |
最適化サイクル数 |
|
string |
ML バックエンド |
|
object |
最終構造 + vib モードファイル |
freq¶
フィールド |
型 |
説明 |
|---|---|---|
|
string |
|
|
int |
全基準振動数 |
|
int |
虚振動数 |
|
float[] |
全振動数 (cm$^{-1}$) |
|
float[] |
負の振動数のみ |
|
object|null |
熱化学データ |
|
string |
ML バックエンド |
|
int |
原子数 |
|
object |
|
thermochemistry (thermoanalysis 利用不可時は null):
temperature_K, pressure_atm, zpe_ha, thermal_correction_energy_ha, thermal_correction_enthalpy_ha, thermal_correction_free_energy_ha, sum_EE_and_ZPE_ha, sum_EE_and_thermal_energy_ha, sum_EE_and_thermal_free_energy_ha, E_thermal_cal_per_mol, Cv_cal_per_mol_K, S_cal_per_mol_K
irc¶
フィールド |
型 |
説明 |
|---|---|---|
|
int |
IRC フレーム数 |
|
float |
反応物エネルギー |
|
float |
TS エネルギー |
|
float |
生成物エネルギー |
|
bool |
IRC 収束判定 |
|
string |
ML バックエンド |
|
object |
|
scan / scan2d / scan3d¶
scan は stages[] 配列にステージごとのデータと n_stages を含みます。scan2d/scan3d は n_grid_points と pair1/pair2(/pair3)(各 {i, j, low, high})に加えて、表面の最小エネルギー min_energy_hartree を含みます。いずれも backend・charge・spin を備えます。
path-opt¶
フィールド |
型 |
説明 |
|---|---|---|
|
bool |
収束判定 |
|
string |
|
|
float[] |
全イメージエネルギー |
|
float |
前方障壁 (kcal/mol) |
|
float |
反応エネルギー (kcal/mol) |
|
string |
ML バックエンド |
dft¶
フィールド |
型 |
説明 |
|---|---|---|
|
bool |
SCF 収束? |
|
float |
DFT エネルギー |
|
string |
汎関数 |
|
string |
基底関数 |
|
bool |
GPU 使用? |
|
string |
ONIOM 高レベル領域の ML バックエンド |
|
object |
|
extract¶
フィールド |
型 |
説明 |
|---|---|---|
|
int |
抽出後の原子数 |
|
float |
合計電荷 |
|
float |
タンパク質電荷 |
|
float |
リガンド電荷合計 |
|
object |
|
|
string |
基質指定(生の |
|
float |
抽出半径 (angstrom) |
|
string |
|
|
float |
イオン電荷合計 |
|
string[] |
入力 PDB パス |
|
int |
抽出前の生入力の原子数 |
|
int |
切断結合に付加されたリンク H 原子数 |
|
object |
出力ファイル名のマップ(入力ごとのポケット PDB 等) |
|
bool |
実行時の |
|
bool |
実行時の |
|
string |
生の |
|
array |
イオン残基の |
summary.json (path-search / all)¶
フィールド |
型 |
説明 |
|---|---|---|
|
string |
|
|
object[] |
セグメントごとの障壁、反応エネルギー、結合変化 |
|
object[] |
エネルギーダイアグラム |
|
string |
モデル名 |
|
object |
ハードウェア情報 |
all はさらに n_segments_reactive(bridge 以外の反応セグメント数), rate_limiting_step, overall_reaction_energy_kcal, post_segments を含みます。
使用例¶
Python¶
import json
with open("result_opt/result.json") as f:
result = json.load(f)
if result["status"] == "converged":
print(f"Energy: {result['energy_hartree']:.6f} Hartree")
else:
print(f"Not converged after {result['n_opt_cycles']} cycles")
jq¶
jq '.status' result.json # 収束確認
jq '.barrier_kcal' result.json # 障壁エネルギー
jq '.imaginary_frequencies_cm' result.json # 虚振動数
jq '.thermochemistry.sum_EE_and_thermal_free_energy_ha' result.json # 自由エネルギー