JSON Output Reference¶
This page lists the fields (keys) of the result.json and summary.json files written with --out-json, split into the fields every command shares and the fields of each command.
--out-json flag¶
Most subcommands that run the ML/MM calculator or write reports support
--out-json / --no-out-json (default: off). When enabled, result.json and
summary.json are written beside the normal outputs. The two files have the
same content, so read result.json.
mlmm opt -i r_complex_layered.pdb --parm7 real.parm7 -q 0 -m 1 \
--max-cycles 5 --out-json --out-dir result_opt
cat result_opt/result.json | python -m json.tool
Open result_opt/result.json and read execution_status and scientific_status first. opt, tsopt, and path-opt also record optimization_status.
Common envelope¶
Every result file carries the fields below; fields marked optional appear only when the command has the corresponding data:
Field |
Type |
Description |
|---|---|---|
|
string |
Schema version of the file; a new version signals a structural change. |
|
string |
Single commands record the subcommand name (e.g. |
|
string |
Package version ( |
|
string |
Execution completion: |
|
string |
Result usability: |
|
string |
Optional UUID of the current invocation; written in every |
|
float |
Optional wall-clock time; omitted by commands that do not record timing |
|
object |
Hardware info (see below) |
Commands that evaluate the ML/MM calculator also record:
Field |
Type |
Description |
|---|---|---|
|
string | null |
Backend identifier ( |
|
string | null |
Exact model/checkpoint; |
|
string | null |
Publication-facing model label derived from the exact identifier |
|
string | null |
Backend task used by a multi-domain model (for UMA, |
|
string | null |
Effective public precision token ( |
|
string | null |
MM Hessian/energy backend ( |
|
string | null |
Link-atom placement ( |
|
bool | null |
Whether CMAP terms were enabled; null for plot-only output |
environment:
Field |
Type |
Example |
|---|---|---|
|
string |
|
|
string |
|
|
float |
|
|
string |
|
|
string |
|
|
int |
|
|
float |
|
Execution and requested-stage completion¶
Every result reports execution_status and scientific_status; multi-stage and scan results also list the outcome of each stage in the fields below. A required optimization or calculation that is missing leaves the result incomplete.
Field |
Type |
Description |
|---|---|---|
|
string |
|
|
string |
|
|
string[] |
Reasons for unusable or missing stages; omitted on clean success. |
|
string[] |
Expected and observed stage identifiers, used to detect missing work. |
|
object[] |
One entry per stage with |
|
object[] |
Scan points with |
Error envelope (when a command stops on an exception)¶
Field |
Type |
Description |
|---|---|---|
|
string |
The error message |
|
string |
Exception class name (e.g. |
|
list[string] |
The exception class and its parent classes, most specific first (e.g. |
|
string |
Module the exception class was defined in |
|
string |
High-level CLI stage label (e.g. |
Error handling¶
When opt, tsopt, freq, irc, sp, dft, scan, scan2d, scan3d,
path-opt, or path-search stops on an exception after the output directory
is set up, result.json and summary.json are written even without
--out-json, with "execution_status": "failed" and an "error_type"; for a
failure before that point, see Notes.
When an optimization ends without converging, result.json records
"optimization_status": "not_converged". For what to change before a retry,
see Troubleshooting › Calculation / convergence.
An optimizer may also report "optimization_status": "stalled": the energy stopped decreasing over the configured window (an energy plateau) while the force/step convergence criteria remained unmet. A stall is a kind of non-convergence, never converged; stop_reason records the energy range, the window, and the failed criteria. With --flatten, opt and tsopt still run the flatten loop after a stall while --max-cycles cycles remain. With microiteration, the run counts as converged only when both the macro step and the latest MM relaxation have converged; an MM relaxation that stalls with its forces already under the thresholds counts as converged.
Subcommand schemas¶
sp¶
Field |
Type |
Description |
|---|---|---|
|
string |
|
|
string |
Input structure path |
|
string |
Full-system Amber topology path |
|
int / int |
ML-region charge and multiplicity |
|
float |
ONIOM single-point energy (Hartree) |
|
string |
Path to |
|
string | null |
Path to |
|
string |
Human-readable elapsed-time text |
opt¶
Field |
Type |
Description |
|---|---|---|
|
string |
|
|
string |
Present only when the optimizer stopped without converging ( |
|
float |
Final ONIOM energy (Hartree) |
|
int |
Optimization cycles completed |
|
string |
|
|
int |
ML-region charge |
|
int |
ML-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 of the named preset |
|
object |
Output file map |
|
object | null |
Optional; present when |
tsopt¶
Field |
Type |
Description |
|---|---|---|
|
bool |
Whether flatten iterations were configured |
|
string | null |
Reason no further flatten step was taken, when applicable |
|
string |
Numerical optimizer outcome: |
|
string |
|
|
bool |
|
|
string |
|
|
int|null |
Negative exact-PHVA root that |
|
float|null |
Frequency of the selected negative root |
|
string|null |
How the root was selected (aligned with the reference direction, or the root-0 fallback) |
|
float |
TS energy (Hartree) |
|
int|null |
Number of imaginary frequencies; |
|
int|null |
Number of negative frequencies of any size, including those within the cutoff; a diagnostic next to |
|
float[]|null |
Imaginary frequencies (cm⁻¹, negative); |
|
float / string / float |
The defaults are |
|
string |
|
|
string |
Requested CLI preset |
|
string |
Effective optimizer algorithm used by the run |
|
int |
Total atoms |
|
int |
Optimization cycles |
|
int |
ML-region charge |
|
int |
ML-region multiplicity |
|
string|null |
Path-derived mode file supplied with |
|
object |
Hessian-TS diagnostics: rejected steps and recovery, exact saddle checks, and target-mode identity |
|
object |
Rigid-mode and Hessian provenance for Dimer, flatten, and the final saddle analysis; see projection provenance |
|
object |
Final geometry and vibrational-mode files; includes |
A successful TS optimization gives one imaginary mode along the reaction
coordinate: saddle_validation: "first_order" with n_imaginary_modes: 1.
The final PHVA runs after the optimizer converges or stops on an energy plateau
(stalled); otherwise it is recorded as skipped, and a failed PHVA gives
hessian_status: "failed" and keeps the final geometry.
optimization_status and saddle_validation are independent, so a converged
run can end with saddle_validation: "higher_order"; it is not a first-order
TS. For when all goes on to IRC, see
tsopt › Reading the TS result.
freq¶
Field |
Type |
Description |
|---|---|---|
|
int |
Total normal modes |
|
int |
Imaginary frequency count |
|
int |
Number of negative frequencies of any size, including those within the cutoff |
|
float[] |
All frequencies (cm⁻¹) |
|
float[] |
Negative frequencies only |
|
object|null |
Thermodynamic data (see below) |
|
int |
ML-region charge |
|
int |
ML-region multiplicity |
|
int |
Total atoms |
|
int |
Frozen atoms |
|
object |
Output map; includes |
|
object |
Rigid-mode and Hessian provenance used for frequencies and thermochemistry; also written to |
thermochemistry:
Field |
Type |
Unit |
|---|---|---|
|
float |
K |
|
float |
atm |
|
string |
Automatically detected molecular point group |
|
string |
|
|
int |
External rotational symmetry number |
|
string |
|
|
float |
Hartree — the |
|
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¶
IRC reports execution_status and scientific_status and keeps the stop reason and trajectory of each direction; all reports the endpoint optimizations that follow under endpoint_opt. The stitched path runs from its first frame through the TS to its last frame; a standalone irc does not decide which end is the reactant and which is the product. How the IRC stopped does not enter scientific_status: a standalone irc reports completed / success when the integration returns normally, and all judges the TS and endpoint optimizations.
Field |
Type |
Description |
|---|---|---|
|
int |
IRC frames |
|
bool |
Branch produced at most three frames without reaching the cycle cap; diagnostic only |
|
float |
Energy of the first frame of the stitched path |
|
float |
TS energy |
|
float |
Energy of the last frame of the stitched path |
|
string |
|
|
bool |
Whether each direction was requested |
|
bool|null |
Whether the direction stopped because the RMS-gradient stationarity criterion fired; diagnostic only, and always |
|
bool|null |
Whether the branch established a downhill departure from the TS |
|
string|null |
Non-empty only for a numerical propagation failure |
|
bool |
Whether |
|
int |
Number of energy-rise or one-step energy-change stops actually bypassed |
|
object |
Rigid-mode and initial/updated-Hessian provenance; see projection provenance |
|
string |
Initial Hessian source: |
|
object |
Directed first→last |
|
string |
|
|
object |
Trajectory and endpoint files (XYZ, plus PDB/CIF versions when available) |
scan¶
Field |
Type |
Description |
|---|---|---|
|
string |
Requested |
|
string |
Effective optimizer: |
|
int |
Number of scan stages |
|
object[] |
Per-stage data |
|
int |
ML-region charge |
|
int |
ML-region multiplicity |
|
object |
Output files |
stages[]: n_steps, converged, pairs_1based, energies_hartree, final_energy_hartree, bond_changes, and optimizer_status (converged/not_converged/stalled) plus stop_reason when the last optimizer of the stage stopped without converging.
scan2d / scan3d¶
Field |
Type |
Description |
|---|---|---|
|
int |
Total grid points |
|
int |
Fresh-run grid points attempted, excluding preoptimization |
|
int |
Fresh-run points with explicit convergence, finite energy/coordinates, and a written geometry file |
|
object[] |
Explicit grid-index, distances, energy, convergence, and |
|
string[] |
CSV/HTML/PNG files and grid geometries written by this run; files left from an earlier run are not listed |
|
object |
|
|
float |
Surface minimum energy |
|
int | null |
ML-region charge; null for plot-only |
|
int | null |
ML-region multiplicity; null for plot-only |
|
object |
CSV + plot files |
Fresh scan2d/scan3d results include the common calculator fields. Plot-only
scan3d --csv writes these keys as null. Plot-only results omit
n_points_attempted and include n_points_usable only when the imported CSV
records convergence and geometry files for every point.
path-opt¶
Field |
Type |
Description |
|---|---|---|
|
string |
|
|
bool | null |
Convergence flag: |
|
string |
|
|
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 |
path-search¶
path-search has no --out-json flag. It writes summary.json; its fields
are listed in summary.json (path-search / all).
dft¶
Note: With
--out-json,dftwritesresult.jsonandsummary.jsonfor both converged and non-converged SCF attempts, recordingscientific_status: "failed"andconverged: falseon non-convergence. A non-converged SCF exits with code 1. An unhandled exception writes the standarderrorenvelope.
Field |
Type |
Description |
|---|---|---|
|
bool |
SCF converged? |
|
float |
ML-region DFT energy; the same values as |
|
float |
ML-region DFT energy |
|
float |
Recombined DFT/MM energy |
|
string |
XC functional |
|
string |
Basis set |
|
bool |
GPU acceleration used? |
|
bool |
Effective and requested low-memory state |
|
object |
Canonical scientific settings and effective host resources |
|
string/object | null |
Effective ECP passed to PySCF |
|
object |
Point-charge embedding: whether it is on, the cutoff, the number of charges, and a digest that identifies them |
|
object |
|
|
object |
|
|
int |
ML-region atom count |
|
int |
DFT grid level |
|
float |
SCF convergence tolerance |
|
int |
Maximum SCF iterations in effect after YAML and CLI are applied |
|
string |
Engine label of the run ( |
|
int |
ML-region charge |
|
int |
ML-region multiplicity |
|
string |
Input structure path |
|
object |
|
extract¶
Field |
Type |
Description |
|---|---|---|
|
int |
Atoms after extraction |
|
float |
Computed total charge |
|
float |
Protein charge |
|
float |
Ligand charge sum |
|
float |
Ion charge sum |
|
object |
|
|
string |
Substrate specification (the |
|
float |
Extraction radius (angstrom) |
|
string[] |
Input PDB paths |
|
int |
Atoms in the selected residues before backbone/truncation filtering (not the whole input structure) |
|
int |
Link H atoms added at severed bonds |
|
object |
Map of written files (pocket PDB per input, etc.) |
|
bool |
Value of |
|
bool |
Value of |
|
string |
The |
|
array |
List of |
trj2fig¶
Field |
Type |
Description |
|---|---|---|
|
int |
Number of trajectory frames |
|
float |
Minimum and maximum frame energies |
|
string |
|
|
string | null |
Calculator used to recompute the energies; all are null in trajectory-comment mode |
|
int | null |
Charge and multiplicity used for the recomputation; null in comment mode. When only one is given, the other defaults to 0 or 1. |
|
string[] |
Ordered paths of every output; keeps files with the same basename in different directories |
|
object |
Basename-to-path map; when two outputs share a basename only one is kept, so prefer |
Supplying either -q/--charge or -m/--multiplicity recomputes every frame with the selected MLIP. This rescoring uses the MLIP alone: the command takes no topology or ML-region input and does not calculate an ONIOM energy.
energy-diagram¶
Field |
Type |
Description |
|---|---|---|
|
int |
Number of energy data points |
|
object |
Output diagram filename-to-path map |
bond-summary¶
With --json, bond-summary prints JSON to stdout and writes no result.json; redirect stdout to keep it.
Field |
Type |
Description |
|---|---|---|
|
string / string |
|
|
object[] |
Per-pair comparison with |
Rigid projection provenance¶
freq, irc, and tsopt results include a rigid_projection object; opt includes it when --flatten runs. freq --dump also writes the same object to thermoanalysis.yaml.
Field |
Type |
Description |
|---|---|---|
|
string |
Fixed rigid-mode treatment: |
|
string |
Name of the projection method |
|
int |
Number of rigid directions removed from the Hessian of the movable atoms |
|
int |
Rank of the rigid motions of the whole system before the frozen atoms are taken into account |
|
int |
Rank removed because the frozen atoms must stay in place |
|
float |
Relative SVD tolerance used for the rank decision |
|
int |
Movable and frozen atom counts |
|
int[] |
0-based indices of the movable and frozen atoms |
|
string |
|
|
string |
Hessian provenance. |
|
int[2] |
Input Hessian shape. |
|
int / float[] |
Number and values of the modes within ± |
constrained removes only the rigid motions of the whole system that keep the frozen atoms in place; see freq.
summary.json (path-search / all)¶
The all and path-search commands write summary.json with a richer structure:
Field |
Type |
Description |
|---|---|---|
|
string / string |
Execution completeness and completion of requested numerical/calculation stages. |
|
string[] |
Reasons for missing or unusable requested results; omitted on success. |
|
object | absent |
Present only on an early stop. |
|
string[] |
Expected and observed stage identifiers. |
|
int |
Segment count |
|
int |
Effective recursion cap; |
|
string[] |
Single-structure optimizers actually used during path preparation/refinement ( |
|
bool / bool | null |
Whether endpoint preoptimization ran, and whether every endpoint converged; |
|
object[] |
Per-segment |
|
object[] |
Energy profiles with labels and kcal/mol values |
|
string |
Backend name ( |
|
string | null |
Exact model/checkpoint name, or |
|
string | null |
Publication-facing model label |
|
string | null |
Backend task for a multi-domain model |
|
string | null |
Effective |
|
int |
ML-region charge |
|
int |
ML-region multiplicity |
|
object |
Hardware info |
|
object[] |
Methods actually used by the run, as |
The all command additionally includes:
Field |
Type |
Description |
|---|---|---|
|
object |
Effective settings. |
|
int |
Number of non-bridge (reactive) segments |
|
object |
Highest local barrier among the reactive segments, as |
|
float |
Overall reaction energy |
|
string |
Method of the overall reaction energy, from the same list as |
|
list |
Per-segment TS/IRC/freq/DFT results |
|
int / float[] |
n_imag of the optimized TS and its imaginary frequencies (cm⁻¹, negative) |
|
object |
R, TS, and P energies at one level, with |
|
bool |
|
|
int / int|null |
TS optimization cycles executed and configured limit. These are reported for both converged and normally non-converged runs. |
|
object |
IRC stop diagnostics, endpoint orientation, and endpoint-OPT convergence, respectively. In TS-only mode, |
|
object |
Child-reported point-group and rotational-symmetry provenance by state: R/TS/P, including TS-only runs. States with valid symmetry-number provenance are included; missing states are omitted, and the field is absent only when no state has valid provenance. |
|
object |
Current-run output index: root filename → description; each |
|
string[] |
Sorted paths relative to |
Usage examples¶
Python¶
The script reads result_opt/result.json, which opt --out-json writes.
import json
with open("result_opt/result.json") as f:
result = json.load(f)
status = result.get("optimization_status")
if result["execution_status"] == "failed":
raise RuntimeError(f"{result['error_type']}: {result['error']}")
elif status == "converged":
print(f"Energy: {result['energy_hartree']:.6f} Hartree")
elif status in {"not_converged", "stalled"}:
print(f"Not converged after {result['n_opt_cycles']} cycles")
if result.get("final_max_force") is not None:
print(f"Max force: {result['final_max_force']:.6f}")
else:
print(f"Status: {status}")
jq¶
# Check convergence
jq '{execution_status, scientific_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
# Get each segment's barrier from all (after --tsopt)
jq '.post_segments[] | {index, barrier_kcal: .mlip.barrier_kcal}' result_all/summary.json
Notes¶
A run that fails while the CLI options or the input are being checked (before the output directory is set up) can stop without writing any JSON. Treat a nonzero exit code as a failure, and read stderr or the job log for the message.
allandpath-searchwritesummary.jsononly once the run reaches its summary step, so an early input error leaves no file.
See Also¶
Exit codes — what each exit code means
Output layout — where
result.jsonandsummary.jsonare writtenTroubleshooting — what to change after a failed or non-converged run
YAML Reference — configuration inputs whose values surface in these schemas
all, path-search — subcommands that write
summary.jsonwithout--out-jsonopt, sp, tsopt, freq, irc, scan, scan2d, scan3d, path-opt, dft, extract, trj2fig, energy-diagram, bond-summary — subcommands that write JSON only with
--out-json(--jsonforbond-summary)