Skip to main content

Quick Reaction Coordinate

A quick reaction coordinate job maps reactant and product endpoints from a transition-state guess by displacing along the imaginary-frequency normal mode and optimizing to the nearest minima.

This method is a fast alternative to full IRC path following — instead of tracing the reaction path step-by-step, it displaces the TS geometry in both directions and performs two geometry optimizations.

What It Runs

For each submitted job, Atomiverse executes:

  1. Saddle-point optimization on the TS guess.
  2. Vibrational analysis on the optimized structure.
  3. Validation that exactly one imaginary frequency exists (the reaction coordinate mode).
  4. Displacement along the reaction mode in both forward and reverse directions.
  5. Geometry optimization of each displaced structure to a minimum.

The result is the TS, reactant, and product structures, together with forward and reverse reaction barriers.

Your First Quick Reaction Coordinate

import atomiverse
from atomiverse import (
Atoms,
JobFailedError,
QuickReactionCoordinate,
)
from atomiverse.levels import GFN2_XTB

atomiverse.configure(api_key="your-api-key")

ts_guess = Atoms.from_smiles("[H][H]")

job = QuickReactionCoordinate(
ts_atoms=ts_guess,
level_of_theory=GFN2_XTB,
)
job.submit()

try:
result = job.require_result()
except JobFailedError as exc:
print(f"Job failed: {exc.failure.error}")
else:
print(f"TS Energy: {result.ts_energy:.6f} eV")
print(f"Forward barrier: {result.barrier_forward:.3f} eV")
print(f"Reverse barrier: {result.barrier_reverse:.3f} eV")
print(f"Reaction energy: {result.reaction_energy:.3f} eV")

Input Parameters

Required:

  • ts_atoms: transition-state guess structure
  • level_of_theory: electronic-structure method

Optional:

  • charge (default 0)
  • multiplicity (default 1)
  • amplitude (default 0.3): scaling factor for displacement along the reaction coordinate. Larger values push further from the saddle point; smaller values are safer for crowded geometries.
job = QuickReactionCoordinate(
ts_atoms=ts_guess,
charge=0,
multiplicity=1,
level_of_theory=GFN2_XTB,
amplitude=0.4,
)

Result

job.require_result() returns a QuickReactionCoordinateResult.

FieldTypeDescription
ts_atomsAtomsOptimized transition-state structure.
reactant_atomsAtoms | NoneOptimized reactant endpoint.
product_atomsAtoms | NoneOptimized product endpoint.
ts_energyfloatTS energy in eV.
reactant_energyfloat | NoneReactant energy in eV.
product_energyfloat | NoneProduct energy in eV.
barrier_forwardfloat | NoneForward barrier (TS − reactant) in eV.
barrier_reversefloat | NoneReverse barrier (TS − product) in eV.
reaction_energyfloat | NoneReaction energy (product − reactant) in eV.
imaginary_frequency_cm1float | NoneReaction mode frequency in cm⁻¹.
ts_optimization_trajectorylist[TrajectoryStep]Steps of the saddle-point search.
forward_convergedboolWhether forward optimization converged.
reverse_convergedboolWhether reverse optimization converged.

Non-blocking Submission

from atomiverse import State

job.submit(wait=False)
job.refresh()

if job.state == State.DONE:
result = job.require_result()
print(f"Forward barrier: {result.barrier_forward:.3f} eV")
elif job.state == State.FAILED:
print(job.require_failure().error)