Docs are under construction. Content may be incomplete or change.

tako.transitionState Settings

Page type: Reference · Generated from src/script/takoScriptDocs.ts · Verified 2026-07-11T00:00:00.000Z
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 transitionStateFinalStructure with the same atoms in the same order as the initial structure, exactly as for tako.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: 0 to skip dimer refinement and keep the NEB saddle estimate. The visible UI cannot select zero.
  • Require result.neb.converged, non-null converged result.dimer, and result.vibrations.imaginaryModes === 1 separately. 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

SettingTypeDefaultValuesUnitValidationDescription
calculatorcalculatorRequired for calculator-backed operations; validate the operation, structure element coverage, and requested properties before executionCalculator 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.
propertiespropertieslevel-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, elfUnknown 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.
transitionStateFinalStructurestructureRequired. 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.
transitionStateImageCountinteger7Floored positive and capped at 21 in TypeScript, then clamped to 3–21 in WASM.Total linearly interpolated images including both fixed endpoints.
transitionStateNebMaxStepsinteger100stepsFloored 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.
transitionStateDimerMaxStepsinteger50stepsNormalized 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.
transitionStateFmaxEvPerAngstromnumber0.05eV/ÅA nonpositive or nonfinite value falls back to 0.05.Shared convergence threshold for the NEB residual and dimer force-like residual.
transitionStateMaxstepAngstromnumber0.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.
transitionStateSpringConstantnumber0.1raw internal Hartree/bohr² in current bridgeA 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.
transitionStateVibrationCheckbooleantrueBoolean 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.

FieldTypeUnitAvailabilityDescription
kind”transition_state”Every resolved resultRuntime result discriminator.
level_of_theorystringEvery resolved resultNormalized calculator level.
engine”gfn2” | “mlip”Every resolved resultCalculator engine family.
nebobjectEvery resolved resultFinal climbing-image NEB stage summary. Per-step trace from ase.rs is discarded by the WASM response.
neb.convergedbooleanEvery resolved resultWhether the static NEB residual fell below the shared threshold before its budget ended.
neb.stepsintegeraccepted stepsEvery resolved resultNEB optimizer steps used.
neb.final_energy_evnumbereVEvery resolved resultHighest current band-image potential energy, not a band sum, barrier, or dimer-refined saddle energy.
neb.final_fmax_ev_per_angstromnumbereV/ÅEvery resolved resultFinal NEB residual converted to public units.
dimerobject | nullObject when transitionStateDimerMaxSteps > 0; null when zero skips refinementDimer-stage summary. Nonconvergence still returns an object.
dimer.convergedbooleanWith dimerWhether the dimer residual fell below the shared threshold.
dimer.stepsintegeraccepted stepsWith dimerDimer BFGS steps used.
dimer.final_energy_evnumbereVWith dimerDimer objective potential energy at its final geometry.
dimer.final_fmax_ev_per_angstromnumbereV/ÅWith dimerFinal dimer force-like residual.
saddle_imageintegerEvery resolved resultZero-based highest interior NEB image selected before optional dimer refinement.
saddle_structureobjectEvery resolved resultFinal saddle geometry: dimer-refined when dimer ran, otherwise selected NEB image.
saddle_structure.symbolsstring[]Every resolved resultElement symbols in atom order.
saddle_structure.positionsAngstromnumber[atom][3]ÅEvery resolved resultFinal saddle Cartesian coordinates.
saddle_structure.cellAngstrom3×3 number arrayÅWhen the initial endpoint has a cellInitial-endpoint cell retained across the band and saddle.
saddle_structure.pbc[boolean, boolean, boolean]Every resolved resultPeriodic flags inherited from the initial calculation structure.
saddle_structure.chargenumbereEvery resolved resultTotal charge inherited from calculation settings.
saddle_structure.unpairedintegerEvery resolved resultUnpaired-electron count inherited from calculation settings.
vibrationsobjectEvery resolved resultMinimal fixed finite-difference saddle check; no full spectrum or modes.
vibrations.checkedbooleanEvery resolved resultTrue only when vibration checking was requested and completed.
vibrations.hasImaginaryModebooleanEvery resolved resultTrue when the projected internal imaginary-mode count is greater than zero; not an exactly-one predicate.
vibrations.imaginaryModesintegerEvery resolved resultProjected internal imaginary-mode count; zero when checking was disabled.
vibrations.lowestFrequencyCmInvnumbercm^-1Only when vibration checking ran and produced a nonempty spectrumLowest signed raw-spectrum frequency; negative when imaginary.
saddle_qualityobjectEvery resolved resultSmall duplicated quality summary with mixed residual units.
saddle_quality.imaginaryModesintegerEvery resolved resultDuplicate of vibrations.imaginaryModes.
saddle_quality.nebResidualnumberHartree/bohr (current unconverted implementation)Every resolved result when the backend produces a residualRaw NEB residual; use neb.final_fmax_ev_per_angstrom for public eV/Å units.
saddle_quality.dimerFmaxnumbereV/ÅWith dimerDimer final fmax converted to public units.
frames[object]Every resolved result; exactly one elementOne compatibility saddle frame, not a NEB path or dimer trace. Geometry and scalar stage provenance differ.
frames[0].stepintegerEvery resolved resultNEB step count, even when the geometry was later dimer-refined.
frames[0].time_fsnullEvery resolved resultNo physical time for optimization.
frames[0].energy_hartreenumberHartreeEvery resolved resultNEB highest-image energy converted from neb.final_energy_ev, not necessarily energy of the returned geometry.
frames[0].energy_evnumbereVEvery resolved resultNEB highest-image energy, not necessarily energy of the returned geometry.
frames[0].kinetic_energy_evnullEvery resolved resultNo kinetic energy for saddle optimization.
frames[0].total_energy_evnullEvery resolved resultNo MD total energy.
frames[0].temperature_knullEvery resolved resultNo MD temperature.
frames[0].fmax_hartree_per_bohrnumberHartree/bohrEvery resolved resultNEB residual converted back from its public value.
frames[0].fmax_ev_per_angstromnumbereV/ÅEvery resolved resultNEB residual, not necessarily force residual of the returned geometry.
frames[0].maxstep_bohr0Every resolved resultGeneric compatibility value; no combined-step diagnostic.
frames[0].maxstep_angstrom0Every resolved resultGeneric compatibility value; no combined-step diagnostic.
frames[0].label”TS”Every resolved resultDisplay label.
frames[0].cellobject | nullEvery resolved resultFinal saddle cell in public frame shape or null.
frames[0].cell.vectors3×3 number arrayÅPeriodic/cell-bearing saddle frameCell vectors.
frames[0].atomsobject[]Every resolved resultFinal saddle atoms using input IDs/selective flags with current positions.
frames[0].atoms[].idintegerEvery frame atomStable initial input identifier.
frames[0].atoms[].elementstringEvery frame atomElement symbol.
frames[0].atoms[].xnumberÅEvery frame atomFinal saddle x coordinate.
frames[0].atoms[].ynumberÅEvery frame atomFinal saddle y coordinate.
frames[0].atoms[].znumberÅEvery frame atomFinal saddle z coordinate.
frames[0].atoms[].selective[boolean, boolean, boolean]Frame atoms whose initial input carried selective flagsInitial per-axis mobility flags copied into the output record.
trajectory_xyzstringEvery resolved resultSimple one-frame XYZ serialization; no band, cell, constraints, or stage scalars.
atomsobject[]Every resolved resultTop-level duplicate of final saddle atom records.
atoms[].idintegerEvery final atomStable initial input identifier.
atoms[].elementstringEvery final atomElement symbol.
atoms[].xnumberÅEvery final atomFinal saddle x coordinate.
atoms[].ynumberÅEvery final atomFinal saddle y coordinate.
atoms[].znumberÅEvery final atomFinal saddle z coordinate.
atoms[].selective[boolean, boolean, boolean]Final atoms whose initial input carried selective flagsInitial per-axis mobility flags.
final_energy_evnumbereVEvery resolved resultDuplicate of neb.final_energy_ev; not necessarily energy of the returned dimer-refined saddle.
final_fmax_ev_per_angstromnumbereV/ÅEvery resolved resultDuplicate 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.