Output Directory Layout¶
Each mlmm subcommand writes to its output directory following the filename conventions below, which agents and downstream scripts can rely on.
Filename conventions¶
Filename |
Written by |
Purpose |
|---|---|---|
|
|
Authoritative JSON envelope (see JSON Output Reference). Read this first. Pure utility subcommands (e.g. |
|
per-stage subcommands only when |
Alternate filename — identical payload to |
|
|
Human-readable run log (one row per segment / stage). |
|
|
Optimized geometry (XYZ, full precision). |
|
|
Reaction path frames (PDB / XYZ); standalone |
|
|
Raw MEP energy profile (PNG). |
|
|
IRC trajectories (XYZ); companion |
|
|
Vibrational frequency listing (cm⁻¹). |
|
various (when |
Gaussian-format companion structure. |
Default --out-dir¶
Subcommand |
Default |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Override with --out-dir <path> (or -o); explicit paths take precedence over both per-stage defaults and YAML.
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:
Standalone subcommand → flat
result_<subcmd>/with the files above. There is nosegments/and no_work/— those appear only 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>/;alljust points the writer at a different directory.path-search/path-optare the engine exception. Run standalone,path-searchis itself a deliverable (result_path_search/with its ownsummary.log,mep.pdb,mep_trj.xyz,mep_plot.png,energy_diagram_MEP.png). Insideall, its raw output is engine scratch under_work/path_opt/(_work/path_search/only with--refine-path); the merged products (mep.pdb,mep_trj.xyz,mep_plot.png,energy_diagram_MEP.png) are moved to the pipeline root andsummary.{json,log}copied there. This asymmetry is intentional.
The all tree therefore has three zones:
result_all/
├─ summary.log · summary.json # copied to the root
├─ mep.pdb · mep_trj.xyz · mep_plot.png · energy_diagram_MEP.png # MEP products moved from the engine
├─ energy_diagram_*_all.png · irc_plot_all.png
├─ ml_region.pdb # ML-region definition (reusable as --model-pdb)
├─ mm_parm/ # MM topology <input>.parm7 / .rst7 (reusable as --parm)
├─ layered/ # layered full-system PDBs (B-factor annotated; reusable inputs)
├─ segments/
│ └─ seg_NN/ # 2-digit per-reactive-segment deliverables
│ ├─ reactant.pdb · ts.pdb · product.pdb # canonical R/TS/P
│ └─ ts/ · irc/ · freq/ · dft/ · structures/ # per-stage working files (--tsopt / --thermo / --dft)
└─ _work/ # pipeline scratch (safe to remove)
├─ pockets/ · scan/
└─ 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¶
# Read whichever subcommand's output, single filename across the board.
# (all / path-search write summary.json; per-stage subcommands need --out-json.)
import json
from pathlib import Path
summary = json.loads((Path(out_dir) / "summary.json").read_text())
if summary["status"] == "error":
chain = summary.get("error_class_chain", [])
if "OptimizationError" in chain:
# retry with looser convergence threshold
...
else:
raise RuntimeError(summary["error"])
summary.json / result.json are written by all and path-search, and by per-stage subcommands only when --out-json is passed (default --no-out-json). When written on the success path the envelope carries the schema version + status; do not assume a per-stage summary.json exists by default.