JSON Output Reference¶
mlmm provides machine-readable JSON output for programmatic consumption by AI agents, scripts, and downstream tools.
--out-json flag¶
Every MLIP-based subcommand supports --out-json / --no-out-json (default: off).
When enabled, a result.json file is written to the output directory alongside the normal outputs.
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
The all and path-search commands always write summary.json (no --out-json flag needed).
Common envelope¶
Every result.json automatically includes:
Field |
Type |
Description |
|---|---|---|
|
string |
Subcommand name (e.g. |
|
string |
Package version |
|
float |
Wall-clock time (seconds) |
|
object |
Hardware info (see below) |
environment:
Field |
Type |
Example |
|---|---|---|
|
string |
|
|
string |
|
|
float |
|
|
string |
|
|
string |
|
|
int |
|
|
float |
|
Subcommand schemas¶
opt¶
Field |
Type |
Description |
|---|---|---|
|
string |
|
|
float |
Final ONIOM energy (Hartree) |
|
int |
Optimization cycles completed |
|
string |
|
|
string |
ML backend ( |
|
int |
Model-region charge |
|
int |
Model-region multiplicity |
|
int |
Total atoms (all layers) |
|
int |
Frozen atoms |
|
string |
Convergence threshold preset |
|
int |
Maximum allowed cycles |
|
string |
Input filename |
|
float |
Last max gradient (Hartree/Bohr) |
|
float |
Last RMS gradient |
|
float |
Last max displacement (Bohr) |
|
float |
Last RMS displacement |
|
object |
Numeric thresholds for the named preset |
|
object |
Output file map |
tsopt¶
Field |
Type |
Description |
|---|---|---|
|
string |
|
|
float |
TS energy (Hartree) |
|
int |
Number of imaginary frequencies |
|
float[] |
Imaginary frequencies (cm$^{-1}$, negative) |
|
string |
|
|
int |
Total atoms |
|
int |
Optimization cycles |
|
string |
ML backend |
|
int |
Model-region charge |
|
int |
Model-region multiplicity |
|
object |
Final geometry + vib mode files |
freq¶
Field |
Type |
Description |
|---|---|---|
|
string |
|
|
int |
Total normal modes |
|
int |
Imaginary frequency count |
|
float[] |
All frequencies (cm$^{-1}$) |
|
float[] |
Negative frequencies only |
|
object|null |
Thermodynamic data (see below) |
|
string |
ML backend |
|
int |
Model-region charge |
|
int |
Model-region multiplicity |
|
int |
Total atoms |
|
int |
Frozen atoms |
|
object |
|
thermochemistry (null if thermoanalysis unavailable):
Field |
Type |
Unit |
|---|---|---|
|
float |
K |
|
float |
atm |
|
float |
Hartree |
|
float |
Hartree |
|
float |
Hartree |
|
float |
Hartree |
|
float |
Hartree |
|
float |
Hartree |
|
float |
Hartree |
|
float |
cal/mol |
|
float |
cal/(mol K) |
|
float |
cal/(mol K) |
irc¶
Field |
Type |
Description |
|---|---|---|
|
string |
|
|
int |
IRC frames |
|
float |
Reactant energy |
|
float |
TS energy |
|
float |
Product energy |
|
bool |
IRC convergence |
|
string |
ML backend |
|
object |
|
|
object |
Trajectory files (xyz + pdb) |
scan¶
Field |
Type |
Description |
|---|---|---|
|
string |
|
|
int |
Number of scan stages |
|
object[] |
Per-stage data |
|
string |
ML backend |
|
int |
Model-region charge |
|
int |
Model-region multiplicity |
|
object |
Output files |
stages[]: n_steps, converged, pairs_1based, energies_hartree, final_energy_hartree, bond_changes
scan2d / scan3d¶
Field |
Type |
Description |
|---|---|---|
|
int |
Total grid points |
|
object |
|
|
float |
Surface minimum energy |
|
string |
ML backend |
|
int |
Model-region charge |
|
int |
Model-region multiplicity |
|
object |
CSV + plot files |
path-opt¶
Field |
Type |
Description |
|---|---|---|
|
bool |
Convergence flag |
|
string |
|
|
string |
ML backend |
|
float[] |
All image energies |
|
int |
Image count |
|
int |
Highest-energy image index |
|
float |
Forward barrier (kcal/mol) |
|
float |
Reaction energy (kcal/mol) |
|
object |
Trajectory + HEI files |
dft¶
Field |
Type |
Description |
|---|---|---|
|
bool |
SCF converged? |
|
float |
DFT energy |
|
string |
XC functional |
|
string |
Basis set |
|
bool |
GPU acceleration used? |
|
string |
ML backend for ONIOM high-level region |
|
object |
|
|
object |
|
|
int |
QM-region atom count |
|
int |
DFT grid level |
|
float |
SCF convergence tolerance |
|
object |
|
extract¶
Field |
Type |
Description |
|---|---|---|
|
string |
|
|
int |
Atoms after extraction |
|
float |
Computed total charge |
|
float |
Protein charge |
|
float |
Ligand charge sum |
|
float |
Ion charge sum |
|
object |
|
|
string |
Center residue |
|
float |
Extraction radius (angstrom) |
|
string[] |
Input PDB paths |
summary.json (path-search / all)¶
The all and path-search commands write summary.json:
Field |
Type |
Description |
|---|---|---|
|
string |
|
|
int |
Segment count |
|
object[] |
Per-segment barrier, delta, bond changes |
|
object[] |
Energy profiles with labels and kcal/mol values |
|
string |
Model identifier |
|
int |
Model-region charge |
|
int |
Model-region multiplicity |
|
object |
Hardware info |
The all command additionally includes:
Field |
Type |
Description |
|---|---|---|
|
object |
RLS segment index and barrier |
|
float |
Overall reaction energy |
|
list |
Per-segment TS/IRC/freq/DFT results |
Usage examples¶
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")
print(f"Max force: {result['final_max_force']:.6f}")
jq¶
# Check convergence
jq '.status' result.json
# Get barrier from path-opt
jq '.barrier_kcal' result.json
# List imaginary frequencies from tsopt
jq '.imaginary_frequencies_cm' result.json
# Get thermochemistry from freq
jq '.thermochemistry.sum_EE_and_thermal_free_energy_ha' result.json