Output Directory Layout¶
Each pdb2reaction subcommand writes to its output directory under the filename conventions below, which agents and downstream scripts can rely on.
Filename conventions¶
Filename |
Written by |
Purpose |
|---|---|---|
|
|
Authoritative aggregate JSON envelope (see JSON Output Reference). Early CLI/input validation may fail before it exists. |
|
per-stage/report runs that reach their result writer with |
Compatibility mirror of the leaf |
|
same writer-reaching conditions as the per-stage |
Authoritative leaf/report envelope. Controlled nonconvergence may still produce it; early validation/import failures may occur before it exists. |
|
dispatched CLI and Colab runs once their output directory exists |
Shell-safe command plus stdout/stderr emitted during command execution. Early Click validation, help, version, dry-run, and file-only utilities do not create it. |
|
|
Human-readable run log (one row per segment / stage). |
|
|
Optimized geometry (XYZ, full precision). |
|
|
Reaction path frames; |
|
|
Standalone path-opt trajectory (full path) and highest-energy image ( |
|
|
Energy profile (PNG) of the MEP. ( |
|
|
IRC trajectories (full path plus per-branch; |
|
|
Vibrational mode listing. |
|
various (when |
Identifier-preserving mmCIF or Gaussian-format companion structure, according to the input template. |
Default --out-dir¶
Subcommand |
Default |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Override stage directories with --out-dir <path> (or -o). extract uses repeatable -o/--output <file> instead.
Standalone vs all¶
A subcommand run on its own writes a flat result directory. The same writer, when orchestrated by all, nests into a structured tree. The two layouts differ by design:
Standalone subcommand → flat
result_<subcmd>/with the files above. There is nosegments/and no_work/; those only appear whenallcoordinates several writers in one run.Inside
all, leaf writers nest unchanged. A per-segment leaf output atsegments/seg_NN/<subcmd>/is structurally identical to the standaloneresult_<subcmd>/—allsimply hands the same writer a different output directory.path-search/path-optare the engine exception. Run standalone, each is itself a deliverable:path-search→result_path_search/(summary.log,mep.pdb, optionalmep.cif,mep_trj.xyz,mep_plot.png,energy_diagram_MEP.png), andpath-opt→result_path_opt/(final_geometries_trj.xyz,hei.xyz). Insideall, the raw engine output is treated as scratch under_work/path_opt/(or_work/path_search/with--refine-path), and only the core products (mep.pdb, optionalmep.cif,mep_trj.xyz, optional inspectionmep_w_ref.pdb/.cifwith--write-ref-merge,energy_diagram_MEP.png) are promoted to the pipeline root.
The all tree therefore has three zones:
result_all/
├─ summary.log · summary.json # authored at the root
├─ mep.{pdb,cif} · mep_trj.xyz # Core MEP coordinates
├─ mep_w_ref.{pdb,cif} # Composite for inspection (--write-ref-merge)
├─ energy_diagram_MEP.png · energy_diagram_*.png
├─ segments/
│ └─ seg_NN/ # 2-digit per-reactive-segment deliverables
│ ├─ reactant.{pdb,cif,xyz,gjf} · ts.* · product.* # canonical R/TS/P
│ └─ ts/ · irc/ · freq/{R,TS,P}/ · dft/ # per-stage working files (--tsopt / --thermo / --dft)
└─ _work/ # pipeline scratch (safe to rm -rf)
├─ models/ · scan/ · add_elem_info/ · fix_altloc/
└─ path_opt/ # raw MEP-engine output (path_search/ with --refine-path)
In TSOPT-only mode there is no MEP stage, so _work/path_opt/ is absent and the deliverables live under segments/seg_01/. See all for the full per-mode breakdown.
Agent recipe¶
# Select the authoritative name for the command that produced out_dir.
import json
from pathlib import Path
out_dir = "result_opt" # replace with the directory you used
subcommand = "opt" # replace with the command you ran
primary = "summary.json" if subcommand in {"all", "path-search"} else "result.json"
summary = json.loads((Path(out_dir) / primary).read_text())
if summary["status"] == "error":
error_type = summary.get("error_type", "RuntimeError")
raise RuntimeError(f"{error_type}: {summary['error']}")
summary.json / result.json are written on successful per-stage runs only
when --out-json is passed (default --no-out-json). A caught runtime error
may emit a best-effort error envelope even without the flag; validation exits
or failures before output setup may emit none. When written, the envelope
carries schema version + status (and, on the error path, the class chain).