tako.reactionPath Settings
On this page
This page is generated from code-owned Doxygen-style metadata in src/script/takoScriptDocs.ts. Update that file first, then regenerate this page so runtime capability descriptions, docs, and agent guidance stay aligned.
tako.reactionPath
Runs NEB/reaction-path calculations between an initial and final structure.
Signature: await tako.reactionPath(initialStructure, { calculator, reactionFinalStructure, reactionImageCount, reactionInterpolation, reactionNebMethod, reactionOptimizer, ... })
Theory
- Nudged elastic band represents a reaction path as images connected by springs. True forces are projected perpendicular to the path, while spring forces act along the path to maintain image spacing.
- The highest-energy image approximates the transition region. Climbing image NEB removes the spring component on that image and drives it uphill along the path to refine the saddle estimate.
- IDPP interpolation builds a better initial path by preserving pair-distance changes between endpoints. It often reduces atom crossing and improves convergence compared with pure linear interpolation.
- Barrier heights are model- and endpoint-dependent. Endpoints should be relaxed consistently, atom ordering must match between endpoints, and reported barriers should state whether zero-point, entropy, or solvent effects are omitted.
Usage Notes
- Always provide
reactionFinalStructurewith the same atoms in the same order as the initial structure. - Use
reactionInterpolateOnly: trueto inspect generated images before committing to a full NEB run. - Keep endpoint, path, and optional saddle vibration checks under the same calculator/settings for consistent barrier bookkeeping.
- Prefer the default
bfgsoptimizer for reaction paths. Any optimizer can reach a numerically converged unintended path, so inspect the image trajectory and mechanism. - For periodic paths, verify matching endpoint cells and consistently wrapped coordinates yourself; the runtime endpoint validator checks atom count and element order, not cell equality.
- Do not blindly pre-optimize both endpoints before calling
reactionPath, especially for weakly-bound or degenerate-exchange systems: independent endpoint relaxation can collapse reactant and product into the same minimum and destroy the path. - Use
tako.structure.fix(structure, indices)to freeze anchor atoms (for example a shared spectator atom in an exchange reaction) when the mechanism needs a constrained coordinate.
Settings
| Setting | Type | Default | Values | Unit | Validation | Description |
|---|---|---|---|---|---|---|
calculator | calculator | Required for calculator-backed operations; validate the operation, structure element coverage, and requested properties before execution | Calculator object from tako.calculator.gxtb(...), gfn2(...), mlip(...), or dft(...). It controls the level of theory, charge/spin where supported, runtime assets, property availability, and the synchronous supported-element list used by TakoScript and the UI. | |||
properties | properties | ['energy', 'forces'] | energy, forces | Other requested property channels are not returned by the reaction-path operation | Energy and forces drive each image. The public reaction-path result does not expose charges, DOS/PDOS, density, NCI, WFN, or stress channels. | |
reactionFinalStructure | structure | Final endpoint structure. Required for a real reaction path and must match the initial structure atom ordering. | ||||
reactionImageCount | integer | 7 | Integer, clamped to 3–21 | Total images including endpoints. More images resolve complex paths better but increase calculation cost. | ||
reactionNebMaxSteps | integer | 150 | Integer, clamped to 1–1000 | Maximum steps in the final optimizer run. For staged climbing, reactionPreclimbSteps run first and are not included in neb.steps. | ||
reactionOptimizer | enum | bfgs | bfgs, fire, mdmin, ode, static | NEB optimizer. bfgs and fire are common choices; ode exposes ODE-specific tolerances; static uses fixed step scaling. | ||
reactionNebMethod | enum | improvedTangent | improvedTangent, aseneb, fullSpring, spline, string | NEB tangent/spring formulation. improvedTangent is a robust default for most paths. | ||
reactionInterpolation | enum | linear | linear, idpp | Initial image interpolation. linear interpolates coordinates; idpp pre-optimizes pair distances to reduce bad intermediate geometries. | ||
reactionInterpolateOnly | boolean | false | Generate the seed without NEB. The result reports neb.converged: true, neb.steps: 0, and no reaction_barrier; convergence here means interpolation completed. | |||
reactionNebClimb | boolean | true | Enable climbing image refinement of the highest-energy image after the path has formed. | |||
reactionSpringConstant | number | 0.1 | eV A^-2 | Positive; invalid values use the default | Spring constant coupling neighboring images. | |
reactionFmaxEvPerAngstrom | number | 0.05 | eV A^-1 | Positive; invalid values use the default | NEB residual convergence threshold. | |
reactionMaxstepAngstrom | number | 0.05 | A | Positive; invalid values use the default | Maximum image displacement per optimizer step. | |
reactionVibrationCheck | boolean | false | Boolean | Run a vibration calculation on the selected highest image after the optimizer stops, even when the band is unconverged. Such data is not transition-state verification unless the band and saddle are independently validated. | ||
reactionIdppFmaxEvPerAngstrom | number | 0.1 | eV A^-1 | Positive; invalid values use the default | IDPP pre-optimization threshold when interpolation is idpp. | |
reactionIdppSteps | integer | 100 | Integer, clamped to 1–1000 | Maximum IDPP pre-optimization steps before NEB starts. | ||
reactionPreclimbSteps | integer | 30 | Integer, clamped to 0–1000 | Separate ordinary-band budget before a fresh climbing run for any optimizer. Set 0 to climb in the only run; pre-climb steps are not included in final neb.steps. | ||
reactionDynamicRelaxation | boolean | false | Skip or reduce work on already-converged images where supported by the NEB backend. | |||
reactionDynamicFmaxEvPerAngstrom | number | 0.05 | eV A^-1 | Positive; invalid values use the registered default, 0.05 | Force threshold used by dynamic relaxation image selection. | |
reactionDynamicScaleFmax | number | 0 | Nonnegative; negative values normalize to 0 | Dynamic relaxation residual scaling factor. Zero disables scaling. | ||
reactionOptimizerRtol | number | 0.1 | Positive fallback; used only by ODE | Relative tolerance of the ODE optimizer. | ||
reactionOptimizerC1 | number | 0.01 | Positive fallback; used only by ODE | ODE optimizer control parameter c1. | ||
reactionOptimizerC2 | number | 2 | Positive fallback; used only by ODE | ODE optimizer control parameter c2. | ||
reactionOptimizerHmin | number | 1e-10 | Positive fallback; used only by ODE | Minimum ODE optimizer step size. | ||
reactionStaticAlpha | number | 0.1 | eV^-1 A^2 | Positive fallback; used only by static | Static optimizer step scale. |
Example
const initial = await tako.input("input/reactant.extxyz");
const final = await tako.input("input/product.extxyz");
const calculator = tako.calculator.gfn2({ dispersion: "d4" });
const result = await tako.reactionPath(initial, {
calculator,
reactionFinalStructure: final,
reactionImageCount: 7,
reactionInterpolation: "idpp",
reactionNebMethod: "improvedTangent",
reactionNebClimb: true,
reactionFmaxEvPerAngstrom: 0.05,
});
await tako.output("output/reaction-path.json", result);
Result
Reaction-path output contains NEB/path/barrier/saddle data; it does not return the common charges, DOS/PDOS, density, NCI, WFN, or stress channels. Validation, engine failure, timeout, and cancellation reject the promise; cancelled bands are not restartable.
| Field | Type | Unit | Availability | Description |
|---|---|---|---|---|
kind | ”reaction_path” | Every successful return | Operation identity. | |
level_of_theory | string | Every successful return | Normalized calculator level recorded by the operation. | |
engine | ”gfn2” | “mlip” | Every successful return | Calculation backend. | |
neb.converged | boolean | Always on successful return | Final optimizer convergence; for interpolation-only, means seed generation completed. | |
neb.steps | integer | Always on successful return | Final optimizer-run steps; excludes a preceding staged pre-climb run. | |
neb.image_count | integer | Every successful return | Normalized total image count including endpoints. | |
neb.residual_hartree_per_bohr | number | null | Hartree Bohr^-1 | Optimized band | Final backend NEB residual in atomic units. |
neb.residual_ev_per_angstrom | number | null | eV A^-1 | Optimized band | Final backend NEB residual. |
neb.saddle_image | integer | null | Every successful return; null for interpolation-only | Selected highest-energy image index. | |
neb.settings.max_steps | integer | Every successful return | Normalized final optimizer-run budget. | |
neb.settings.fmax_ev_per_angstrom | number | eV A^-1 | Every successful return | Requested NEB residual threshold. |
neb.settings.maxstep_angstrom | number | A | Every successful return | Maximum image displacement per step. |
neb.settings.optimizer | string | Every successful return | Normalized optimizer name. | |
neb.settings.method | string | Every successful return | Normalized NEB formulation. | |
neb.settings.interpolation | string | Every successful return | Normalized interpolation name. | |
neb.settings.interpolate_only | boolean | Every successful return | Whether only the seed was generated. | |
neb.settings.climb | boolean | Every successful return | Whether climbing image was requested. | |
neb.settings.spring_constant | number | eV A^-2 | Every successful return | Spring constant used by the band. |
neb.settings.idpp_fmax_ev_per_angstrom | number | eV A^-1 | Every successful return | IDPP threshold. |
neb.settings.idpp_steps | integer | Every successful return | IDPP step budget. | |
neb.settings.preclimb_steps | integer | Optimized band | Ordinary-band pre-climb budget. | |
neb.settings.dynamic_relaxation | boolean | Optimized band | Dynamic relaxation setting. | |
neb.settings.dynamic_fmax_ev_per_angstrom | number | eV A^-1 | Optimized band | Dynamic relaxation threshold. |
neb.settings.dynamic_scale_fmax | number | Optimized band | Dynamic residual scaling factor. | |
neb.settings.optimizer_rtol | number | Optimized band | ODE relative tolerance setting. | |
neb.settings.optimizer_c1 | number | Optimized band | ODE c1 setting. | |
neb.settings.optimizer_c2 | number | Optimized band | ODE c2 setting. | |
neb.settings.optimizer_hmin | number | Optimized band | ODE minimum step setting. | |
neb.settings.static_alpha | number | eV^-1 A^2 | Optimized band | Static optimizer step scale. |
neb.result.converged | boolean | Every successful return | Backend final-run convergence; true for completed interpolation-only. | |
neb.result.steps | integer | Every successful return | Backend final-run step count; zero for interpolation-only. | |
neb.result.final_energy_hartree | number | Hartree | Optimized band | Final optimizer energy summary. |
neb.result.final_energy_ev | number | eV | Optimized band | Final optimizer energy summary. |
neb.result.final_fmax_hartree_per_bohr | number | Hartree Bohr^-1 | Optimized band | Final optimizer residual. |
neb.result.final_fmax_ev_per_angstrom | number | eV A^-1 | Optimized band | Final optimizer residual. |
neb.result.trace | array | Optimized band | Per-step optimizer trace. | |
neb.result.trace[].step | integer | Every optimizer trace entry | Final-run optimizer step. | |
neb.result.trace[].energy_hartree | number | Hartree | Every optimizer trace entry | Optimizer energy summary. |
neb.result.trace[].energy_ev | number | eV | Every optimizer trace entry | Optimizer energy summary. |
neb.result.trace[].fmax_hartree_per_bohr | number | Hartree Bohr^-1 | Every optimizer trace entry | Backend residual. |
neb.result.trace[].fmax_ev_per_angstrom | number | eV A^-1 | Every optimizer trace entry | Backend residual. |
neb.result.trace[].maxstep_bohr | number | Bohr | Every optimizer trace entry | Largest step. |
neb.result.trace[].maxstep_angstrom | number | A | Every optimizer trace entry | Largest step. |
reaction_path.frames | array | Every successful return | Ordered band images and associated data. | |
reaction_path.frames[].step | integer | Every path frame | Image index. | |
reaction_path.frames[].time_fs | null | fs | Every path frame | Reserved time field; null for reaction paths. |
reaction_path.frames[].energy_hartree | number | Hartree | Every path frame; zero for interpolation-only | Image electronic energy. |
reaction_path.frames[].energy_ev | number | eV | Every path frame; zero for interpolation-only | Image electronic energy. |
reaction_path.frames[].kinetic_energy_ev | null | eV | Every path frame | Reserved field; null for reaction paths. |
reaction_path.frames[].total_energy_ev | null | eV | Every path frame | Reserved field; null for reaction paths. |
reaction_path.frames[].temperature_k | null | K | Every path frame | Reserved field; null for reaction paths. |
reaction_path.frames[].fmax_hartree_per_bohr | number | Hartree Bohr^-1 | Every path frame | Frame-schema residual field; zero in stored path frames. |
reaction_path.frames[].fmax_ev_per_angstrom | number | eV A^-1 | Every path frame | Frame-schema residual field; zero in stored path frames. |
reaction_path.frames[].maxstep_bohr | number | Bohr | Every path frame | Frame-schema step field; zero in stored path frames. |
reaction_path.frames[].maxstep_angstrom | number | A | Every path frame | Frame-schema step field; zero in stored path frames. |
reaction_path.frames[].label | string | Every path frame | IS, FS, TS, or interior image label. | |
reaction_path.frames[].cell | array | null | A | Every path frame | Periodic cell when present. |
reaction_path.frames[].atoms | structure | A | Every path frame | Atomic symbols and Cartesian positions. |
reaction_path.xyz | string | Every successful return | Band serialized as XYZ text inside the path object. | |
reaction_path_xyz | string | Every successful return | Band serialized as XYZ text. | |
reaction_barrier.energies_ev | number[] | eV | Optimized band only | Absolute energy of every image. |
reaction_barrier.energies_hartree | number[] | Hartree | Optimized band only | Absolute energy of every image. |
reaction_barrier.relative_energies_ev | number[] | eV | Optimized band only | Image energies relative to the first endpoint. |
reaction_barrier.coordinate | number[] | Optimized band only | Normalized image indices i/(N-1), not geometric arc length. | |
reaction_barrier.barrier_ev | number | eV | Optimized band only | Maximum image energy minus first-endpoint energy. |
reaction_barrier.reaction_energy_ev | number | eV | Optimized band only | Final-endpoint energy minus first-endpoint energy. |
reaction_barrier.saddle_image | integer | Optimized band only | Highest-energy image index used in the barrier summary. | |
reaction_barrier.dimer_energy_hartree | number | null | Hartree | Always null for reactionPath | Reserved dimer-refined energy field used by combined transition-state workflows. |
reaction_barrier.dimer_energy_ev | number | null | eV | Always null for reactionPath | Reserved dimer-refined energy field. |
reaction_barrier.dimer_relative_energy_ev | number | null | eV | Always null for reactionPath | Reserved dimer-refined energy relative to the first endpoint. |
saddle_atoms | structure | Optimized band only | Selected highest-energy image for follow-up refinement. | |
vibration_check | object | null | Optimized result; object when requested, otherwise null; absent for interpolation-only | Vibration result on the selected image; may exist for an unconverged band. |