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¶
opt, sp, tsopt, freq, irc, scan, scan2d, scan3d, path-opt,
dft, extract, trj2fig, and energy-diagram 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.
pdb2reaction opt -i r.pdb -q -1 --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.
The summary.json that all and path-search write without an
--out-json flag is a different file with its own structure.
Common fields¶
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) |
|
string | null |
Optional backend identifier; null when a plot-only command did not evaluate a calculator |
|
string | null |
Optional exact model/checkpoint identifier, kept separate from the backend |
|
string | null |
Optional publication-facing model label derived from the exact identifier |
|
string | null |
Optional backend task used by a multi-domain model; |
|
string | null |
Effective public precision token ( |
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.
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 fields (when a command stops on an exception)¶
Field |
Type |
Description |
|---|---|---|
|
string |
|
|
string |
Exception class name |
|
list[string] |
Names of the exception class and all its parent classes, so agents can match the hierarchy without parsing text |
|
string |
Module the exception class was defined in |
|
string |
High-level CLI stage label |
Error handling¶
When a run 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". Optimizer results include the final
force/step or cycle fields that apply; DFT and Dimer omit the fields they do not
have. 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 why the run stopped.
Subcommand schemas¶
sp¶
Field |
Type |
Description |
|---|---|---|
|
string |
|
|
string |
Input path used for the calculation |
|
string / string | null |
MLIP backend and model; the same values appear in the common |
|
string | null |
|
|
int / int |
Total charge and multiplicity |
|
int |
Atom count |
|
float |
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 early without converging ( |
|
float |
Final energy (Hartree) |
|
int |
Optimization cycles completed |
|
string |
|
|
string |
Calculator backend ( |
|
int |
System charge |
|
int |
Spin multiplicity |
|
string |
MLIP model identifier, or |
|
int |
Total atoms |
|
int |
Frozen atoms |
|
string |
Implicit solvent or |
|
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 |
|
|
object |
Output file map |
|
object |
Optional; present when |
tsopt¶
All fields from opt, plus:
Field |
Type |
Description |
|---|---|---|
|
string |
Numerical optimizer outcome: |
|
string |
|
|
string |
|
|
int|null |
0-based index, in the PHVA frequency list, of the imaginary mode that |
|
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 |
Cutoff in cm⁻¹ (default |
|
string |
Name of the counting rule; the value is |
|
float |
The same cutoff with a negative sign (default |
|
string |
|
|
string |
Requested CLI preset ( |
|
string |
Effective optimizer algorithm used by the run |
|
string|null |
Advanced path-mode file supplied through |
|
object |
Hessian-TS diagnostics, including exact saddle checks, final target-mode identity/overlap, stop reason, and any explicitly enabled mode-loss/recovery activity. These recovery paths are inactive by default. |
|
object |
Rigid-mode and exact-Hessian provenance; see projection provenance |
The files object may include imaginary_mode_files (list of vib file paths) and hessian_npy (absolute path of the --dump-hess file).
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. 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.
Dimer results have the same TS
fields but no per-cycle force/step details and no safeguards object.
freq¶
Field |
Type |
Description |
|---|---|---|
|
int |
Total normal modes |
|
int |
Imaginary frequency count (n_imag): frequencies below − |
|
int |
Number of negative frequencies of any size, including those within the cutoff |
|
float[] |
All frequencies (cm⁻¹) |
|
float[] |
The frequencies counted in |
|
object|null |
Thermodynamic data (see below) |
|
string |
MLIP backend |
|
int |
System charge |
|
int |
Spin multiplicity |
|
string |
Model identifier |
|
int |
Total atoms |
|
int |
Frozen atoms |
|
string |
Implicit solvent or |
|
float |
Temperature (K) |
|
float |
Pressure (atm) |
|
string |
Input filename |
|
object |
|
|
object |
Rigid-mode and Hessian provenance; also written to |
thermochemistry:
Field |
Type |
Unit |
|---|---|---|
|
string |
Automatically detected molecular point group |
|
string |
|
|
int |
External rotational symmetry number |
|
string |
|
|
float |
Hartree |
|
float |
Hartree |
|
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 finished_first (the forward end) through the TS to finished_last (the backward end); which end is R and which is P is not decided by the order.
Field |
Type |
Description |
|---|---|---|
|
int |
Forward IRC frames |
|
bool |
Branch produced at most three frames without reaching the cycle cap; diagnostic only |
|
int |
Backward IRC frames |
|
int |
Total frames |
|
float |
Energy of |
|
float |
TS energy |
|
float |
Energy of |
|
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 | null |
Final forward step exceeded |
|
bool | null |
Final backward step exceeded |
|
string |
MLIP backend |
|
int |
System charge |
|
int |
Spin multiplicity |
|
string |
Model identifier |
|
bool |
Whether opt-in physical endpoint-stop bypass mode was enabled |
|
int |
Number of energy-rise or one-step energy-change stop events actually bypassed |
|
int |
Frozen atoms |
|
string |
Implicit solvent or |
|
object |
Directed first→last |
|
string |
|
|
float |
IRC step length (Bohr) |
|
int |
Maximum IRC steps |
|
string |
Input filename |
|
object |
Trajectory files (XYZ, plus PDB/CIF versions when available) |
|
object |
Rigid-mode and initial-Hessian provenance; see projection provenance |
scan¶
Field |
Type |
Description |
|---|---|---|
|
string |
Optimizer preset used for the constrained relaxations |
|
string |
Effective optimizer identity ( |
|
int |
System charge |
|
int |
Spin multiplicity |
|
string |
MLIP backend |
|
string |
Model identifier |
|
string |
Implicit solvent or |
|
bool |
Pre-optimization performed? |
|
float |
Max bond-length step per increment (Å) |
|
int |
Number of scan stages |
|
object[] |
Per-stage data (see below) |
|
object |
Output files |
stages[]:
Field |
Type |
Description |
|---|---|---|
|
int |
1-based stage index |
|
int |
Steps in this stage |
|
bool |
Constrained optimization converged? |
|
list |
Atom pairs (1-based) |
|
list |
Starting distances |
|
list |
Target distances |
|
float |
Energy at last step |
|
float[] |
Per-step energies |
|
object |
|
scan2d / scan3d¶
Field |
Type |
Description |
|---|---|---|
|
int | null |
System charge; null for plot-only |
|
int | null |
Spin multiplicity; null for plot-only |
|
string | null |
MLIP backend; null for plot-only |
|
string | null |
Model identifier; null for plot-only |
|
string | null |
Implicit solvent or |
|
float |
Max bond-length step per increment (Å, |
|
int |
Grid rows excluding |
|
string |
Execution-level completion state |
|
int |
Fresh-run grid points attempted, excluding preoptimization |
|
int |
Fresh-run points eligible for scientific reuse |
|
object[] |
Per-point convergence, energy, artifact, and eligibility data |
|
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 |
|
int[] |
Grid dimensions (only when running fresh; absent under |
|
object |
|
|
float |
Surface minimum energy |
|
object |
CSV + plot files |
The outcome-count fields are emitted by fresh scans. Plot-only scan3d --csv
does not report an attempted count and may omit usable count when the imported
CSV lacks complete provenance.
path-opt¶
Field |
Type |
Description |
|---|---|---|
|
string |
|
|
bool | null |
Convergence flag: |
|
string |
|
|
string |
MLIP backend |
|
int |
System charge |
|
int |
Spin multiplicity |
|
string |
Model identifier |
|
string |
Implicit solvent or |
|
bool |
Whether endpoint pre-optimization was enabled |
|
float |
First-image energy (Hartree) |
|
float |
Last-image energy (Hartree) |
|
float[] |
All image energies |
|
int |
Image count |
|
int |
Highest-energy image index |
|
float |
HEI energy (Hartree) |
|
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.
Field |
Type |
Description |
|---|---|---|
|
bool |
SCF converged? |
|
int |
System charge |
|
int |
Spin multiplicity |
|
int |
Atom count |
|
int |
DFT grid level |
|
float |
SCF convergence tolerance |
|
int |
Maximum SCF cycles |
|
string |
Input filename |
|
float |
DFT energy |
|
float |
DFT energy (kcal/mol) |
|
string |
XC functional |
|
string |
Basis set |
|
string |
Effective engine label ( |
|
bool |
GPU acceleration used? |
|
bool |
Low-memory GPU4PySCF solver actually used? (False on open-shell, CPU, or |
|
bool |
Whether low-memory mode was requested |
|
object |
Canonical scientific settings and effective host resources |
|
string/object | null |
Effective ECP passed to PySCF |
|
string |
Effective native implicit-solvent settings |
|
object |
|
|
object |
|
|
object |
|
extract¶
Field |
Type |
Description |
|---|---|---|
|
int |
Atoms in selected residues before backbone/truncation filtering (not the whole input structure) |
|
int |
Selected atoms kept after truncation, before cap-H addition |
|
float |
Computed total charge |
|
float |
Protein charge |
|
float |
Ligand charge sum |
|
float |
Ion charge sum |
|
list |
|
|
object |
|
|
int |
Cap hydrogens added at carbon-parent truncation bonds; the model has |
|
bool |
Whether backbone atoms were excluded |
|
bool |
Whether crystallographic waters were included |
|
string | null |
User-supplied mapping, or null when omitted |
|
string |
Center residue |
|
float |
Extraction radius (angstrom) |
|
string[] |
Original input PDB/mmCIF paths |
|
object |
Output PDB / cluster filenames |
trj2fig¶
Field |
Type |
Description |
|---|---|---|
|
int |
Number of trajectory frames |
|
float |
Minimum energy across frames |
|
float |
Maximum energy across frames |
|
string |
|
|
string | null |
Effective recomputation provenance; all are null in trajectory-comment mode |
|
string[] |
Per-frame energy source provenance |
|
string |
Stored energy unit ( |
|
string | null |
MLIP backend only when frame energies were recomputed; null in comment-energy mode |
|
int | null |
Charge and multiplicity used when energies were recomputed, otherwise null |
|
string | null |
Recomputed-calculator solvent settings, otherwise null |
|
string[] |
Canonical ordered paths for every output; preserves 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 |
energy-diagram¶
Field |
Type |
Description |
|---|---|---|
|
int |
Number of energy data points |
|
object |
Output diagram files |
bond-summary¶
With --json, bond-summary prints JSON to stdout and, unlike the subcommands above, writes no result.json file:
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. |
|
object | absent |
Preliminary scan status, stage outcomes and diagnostics in scan-seeded |
|
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 identifier |
|
string | null |
Model identifier, recorded separately from the backend |
|
string | null |
Publication-facing model label |
|
string | null |
Backend task for a multi-domain model |
|
string | null |
Effective |
|
int |
System charge |
|
int |
Spin multiplicity |
|
object |
Hardware info |
|
object[] |
Methods actually used by the run, as |
The all command additionally includes:
Field |
Type |
Description |
|---|---|---|
|
object |
Effective settings. |
|
object |
Highest local barrier among the reactive segments, taken at the highest-level method available for every segment ( |
|
float |
Overall reaction energy |
|
string |
Method of the overall reaction energy ( |
|
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. |
|
object |
Child-reported point-group and rotational-symmetry provenance by state. Only R/TS/P states with valid symmetry-number provenance are included; missing states are omitted, and the field is absent only when no state has valid provenance. |
|
string[] |
Sorted paths relative to |
|
object |
Current-run output index: root filename → description; each |
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")
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.The per-command sections also have their own
backend/modelfields. Scripts that read several commands should usemlip_backend/mlip_model/mlip_precision, which mean the same thing in every command.How the IRC stopped does not enter
scientific_status: a standaloneircreportssuccesswhen the integration finishes, also at--max-cycles, andalljudges the TS and endpoint optimizations.
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 — subcommands that emit
result.jsononly under--out-json