tako.transitionState 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.transitionState
Runs a fixed combined CI-NEB, optional dimer, and optional vibration-count workflow. A resolved result requires stage-specific convergence checks and does not expose the band, barrier, full modes, or restart state.
Signature: await tako.transitionState(initialStructure, { calculator, properties, transitionStateFinalStructure, transitionStateImageCount, transitionStateNebMaxSteps, transitionStateDimerMaxSteps, transitionStateFmaxEvPerAngstrom, transitionStateMaxstepAngstrom, transitionStateSpringConstant, transitionStateVibrationCheck })
Theory
- A transition state is a first-order saddle on the potential energy surface: a maximum along the reaction coordinate and a minimum in every orthogonal direction, with exactly one imaginary vibrational frequency.
- The combined search linearly interpolates Cartesian endpoint positions, runs improved-tangent climbing-image NEB from step one with a static optimizer, then optionally refines the highest interior image with a hardcoded BFGS dimer initialized from the band tangent.
- The optional fixed 0.01-bohr two-point vibration check counts projected internal imaginary modes. It runs even when NEB or dimer reports nonconvergence, and the public result does not return mode vectors for connectivity verification.
Usage Notes
- Provide
transitionStateFinalStructurewith the same atoms in the same order as the initial structure, exactly as fortako.reactionPath. - The initial endpoint supplies cell, PBC, constraints, charge, and spin for every image. The final endpoint contributes positions and element order; equivalent-atom mapping and matching cell/constraints are caller invariants.
- Set
transitionStateDimerMaxSteps: 0to skip dimer refinement and keep the NEB saddle estimate. The visible UI cannot select zero. - Require
result.neb.converged, non-null convergedresult.dimer, andresult.vibrations.imaginaryModes === 1separately. Completion alone is not a convergence or first-order-saddle predicate. - The one returned frame/final atoms contain final saddle geometry, but their/top-level energy and fmax are NEB values. Run a separate single point for coherent refined-saddle scalars.
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 | level-dependent normalization; MLIP: ['energy', 'forces']; GFN2: ['energy', 'forces', 'charges', 'dos', 'pdos'] | energy, forces, stress, dos, pdos, charges, electronDensity, chargeDensity, nci, molden, wfn, hdf5, orbitals, spinDensity, esp, densityDerivatives, fukui, elf | Unknown names are removed and energy/forces are reinserted. The combined worker consumes energies and forces only; normalized electronic post-processing names create no transition-state outputs. | Shared calculator request retained in calculation settings. Charges, DOS/PDOS, density, NCI, and WFN are not returned by this operation. | |
transitionStateFinalStructure | structure | Required. Runtime validates equal atom count and element by index only. | Final endpoint positions and element sequence. Its cell, PBC, constraints, charge, and spin are not propagated; every band image clones the initial structure metadata. | |||
transitionStateImageCount | integer | 7 | Floored positive and capped at 21 in TypeScript, then clamped to 3–21 in WASM. | Total linearly interpolated images including both fixed endpoints. | ||
transitionStateNebMaxSteps | integer | 100 | steps | Floored positive, capped at 1000, and clamped again to 1–1000. | Static climbing-image NEB budget. Budget exhaustion resolves with neb.converged: false and does not stop later stages. | |
transitionStateDimerMaxSteps | integer | 50 | steps | Normalized to an integer from 0–1000. Zero skips dimer refinement. | BFGS dimer budget after NEB. Budget exhaustion resolves with dimer.converged: false and does not stop vibration checking. | |
transitionStateFmaxEvPerAngstrom | number | 0.05 | eV/Å | A nonpositive or nonfinite value falls back to 0.05. | Shared convergence threshold for the NEB residual and dimer force-like residual. | |
transitionStateMaxstepAngstrom | number | 0.2 | Å | A nonpositive or nonfinite value falls back to 0.2. | Maximum dimer translation step. The hardcoded static NEB optimizer does not apply this value. | |
transitionStateSpringConstant | number | 0.1 | raw internal Hartree/bohr² in current bridge | A nonpositive or nonfinite value falls back to 0.1; no eV/Ų conversion is applied. | Combined-NEB spring. The current bridge passes this value raw, so the same numeric value is about 97 times stiffer than the standalone reaction-path eV/Ų interpretation. | |
transitionStateVibrationCheck | boolean | true | Boolean default true. Any vibration-calculation failure rejects the whole call. | Runs fixed two-point central differences at 0.01 bohr after dimer/NEB regardless of their convergence flags; returns only an imaginary-mode count summary. |
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.transitionState(initial, {
calculator,
transitionStateFinalStructure: final,
transitionStateVibrationCheck: true,
});
await tako.output("output/transition-state.json", result);
Result
Transition-state summary with NEB and optional dimer stage scalars, final saddle structure, minimal vibration/quality summaries, and one hybrid compatibility frame. No NEB path, barrier, optimizer trace, full frequencies/modes, coherent refined-saddle energy, settings record, or restart state is returned.
| Field | Type | Unit | Availability | Description |
|---|---|---|---|---|
kind | ”transition_state” | Every resolved result | Runtime result discriminator. | |
level_of_theory | string | Every resolved result | Normalized calculator level. | |
engine | ”gfn2” | “mlip” | Every resolved result | Calculator engine family. | |
neb | object | Every resolved result | Final climbing-image NEB stage summary. Per-step trace from ase.rs is discarded by the WASM response. | |
neb.converged | boolean | Every resolved result | Whether the static NEB residual fell below the shared threshold before its budget ended. | |
neb.steps | integer | accepted steps | Every resolved result | NEB optimizer steps used. |
neb.final_energy_ev | number | eV | Every resolved result | Highest current band-image potential energy, not a band sum, barrier, or dimer-refined saddle energy. |
neb.final_fmax_ev_per_angstrom | number | eV/Å | Every resolved result | Final NEB residual converted to public units. |
dimer | object | null | Object when transitionStateDimerMaxSteps > 0; null when zero skips refinement | Dimer-stage summary. Nonconvergence still returns an object. | |
dimer.converged | boolean | With dimer | Whether the dimer residual fell below the shared threshold. | |
dimer.steps | integer | accepted steps | With dimer | Dimer BFGS steps used. |
dimer.final_energy_ev | number | eV | With dimer | Dimer objective potential energy at its final geometry. |
dimer.final_fmax_ev_per_angstrom | number | eV/Å | With dimer | Final dimer force-like residual. |
saddle_image | integer | Every resolved result | Zero-based highest interior NEB image selected before optional dimer refinement. | |
saddle_structure | object | Every resolved result | Final saddle geometry: dimer-refined when dimer ran, otherwise selected NEB image. | |
saddle_structure.symbols | string[] | Every resolved result | Element symbols in atom order. | |
saddle_structure.positionsAngstrom | number[atom][3] | Å | Every resolved result | Final saddle Cartesian coordinates. |
saddle_structure.cellAngstrom | 3×3 number array | Å | When the initial endpoint has a cell | Initial-endpoint cell retained across the band and saddle. |
saddle_structure.pbc | [boolean, boolean, boolean] | Every resolved result | Periodic flags inherited from the initial calculation structure. | |
saddle_structure.charge | number | e | Every resolved result | Total charge inherited from calculation settings. |
saddle_structure.unpaired | integer | Every resolved result | Unpaired-electron count inherited from calculation settings. | |
vibrations | object | Every resolved result | Minimal fixed finite-difference saddle check; no full spectrum or modes. | |
vibrations.checked | boolean | Every resolved result | True only when vibration checking was requested and completed. | |
vibrations.hasImaginaryMode | boolean | Every resolved result | True when the projected internal imaginary-mode count is greater than zero; not an exactly-one predicate. | |
vibrations.imaginaryModes | integer | Every resolved result | Projected internal imaginary-mode count; zero when checking was disabled. | |
vibrations.lowestFrequencyCmInv | number | cm^-1 | Only when vibration checking ran and produced a nonempty spectrum | Lowest signed raw-spectrum frequency; negative when imaginary. |
saddle_quality | object | Every resolved result | Small duplicated quality summary with mixed residual units. | |
saddle_quality.imaginaryModes | integer | Every resolved result | Duplicate of vibrations.imaginaryModes. | |
saddle_quality.nebResidual | number | Hartree/bohr (current unconverted implementation) | Every resolved result when the backend produces a residual | Raw NEB residual; use neb.final_fmax_ev_per_angstrom for public eV/Å units. |
saddle_quality.dimerFmax | number | eV/Å | With dimer | Dimer final fmax converted to public units. |
frames | [object] | Every resolved result; exactly one element | One compatibility saddle frame, not a NEB path or dimer trace. Geometry and scalar stage provenance differ. | |
frames[0].step | integer | Every resolved result | NEB step count, even when the geometry was later dimer-refined. | |
frames[0].time_fs | null | Every resolved result | No physical time for optimization. | |
frames[0].energy_hartree | number | Hartree | Every resolved result | NEB highest-image energy converted from neb.final_energy_ev, not necessarily energy of the returned geometry. |
frames[0].energy_ev | number | eV | Every resolved result | NEB highest-image energy, not necessarily energy of the returned geometry. |
frames[0].kinetic_energy_ev | null | Every resolved result | No kinetic energy for saddle optimization. | |
frames[0].total_energy_ev | null | Every resolved result | No MD total energy. | |
frames[0].temperature_k | null | Every resolved result | No MD temperature. | |
frames[0].fmax_hartree_per_bohr | number | Hartree/bohr | Every resolved result | NEB residual converted back from its public value. |
frames[0].fmax_ev_per_angstrom | number | eV/Å | Every resolved result | NEB residual, not necessarily force residual of the returned geometry. |
frames[0].maxstep_bohr | 0 | Every resolved result | Generic compatibility value; no combined-step diagnostic. | |
frames[0].maxstep_angstrom | 0 | Every resolved result | Generic compatibility value; no combined-step diagnostic. | |
frames[0].label | ”TS” | Every resolved result | Display label. | |
frames[0].cell | object | null | Every resolved result | Final saddle cell in public frame shape or null. | |
frames[0].cell.vectors | 3×3 number array | Å | Periodic/cell-bearing saddle frame | Cell vectors. |
frames[0].atoms | object[] | Every resolved result | Final saddle atoms using input IDs/selective flags with current positions. | |
frames[0].atoms[].id | integer | Every frame atom | Stable initial input identifier. | |
frames[0].atoms[].element | string | Every frame atom | Element symbol. | |
frames[0].atoms[].x | number | Å | Every frame atom | Final saddle x coordinate. |
frames[0].atoms[].y | number | Å | Every frame atom | Final saddle y coordinate. |
frames[0].atoms[].z | number | Å | Every frame atom | Final saddle z coordinate. |
frames[0].atoms[].selective | [boolean, boolean, boolean] | Frame atoms whose initial input carried selective flags | Initial per-axis mobility flags copied into the output record. | |
trajectory_xyz | string | Every resolved result | Simple one-frame XYZ serialization; no band, cell, constraints, or stage scalars. | |
atoms | object[] | Every resolved result | Top-level duplicate of final saddle atom records. | |
atoms[].id | integer | Every final atom | Stable initial input identifier. | |
atoms[].element | string | Every final atom | Element symbol. | |
atoms[].x | number | Å | Every final atom | Final saddle x coordinate. |
atoms[].y | number | Å | Every final atom | Final saddle y coordinate. |
atoms[].z | number | Å | Every final atom | Final saddle z coordinate. |
atoms[].selective | [boolean, boolean, boolean] | Final atoms whose initial input carried selective flags | Initial per-axis mobility flags. | |
final_energy_ev | number | eV | Every resolved result | Duplicate of neb.final_energy_ev; not necessarily energy of the returned dimer-refined saddle. |
final_fmax_ev_per_angstrom | number | eV/Å | Every resolved result | Duplicate of neb.final_fmax_ev_per_angstrom; not necessarily residual of the returned dimer-refined saddle. |
Errors and Promise Behavior
- Rejects when the final structure is absent, atom counts differ, or element symbols differ at any index. It does not reject mismatched cell/PBC/constraints or swapped equivalent atoms.
- Calculator, NEB, dimer, or vibration execution failure rejects the whole promise. No structured earlier-stage result is exposed because the combined call uses no event sink.
- NEB or dimer numerical nonconvergence does not reject and does not stop later stages; inspect both stage flags explicitly.
- Cancellation terminates the worker and exposes no band, saddle checkpoint, optimizer state, dimer orientation, or vibration cache. A retry starts from endpoint interpolation.
- Frames or derived workspace artifacts must not be mistaken for returned fields: the public object contains one saddle frame only and no barrier/path/vibration artifacts.