Hindered Rotor Candidates
Automatically identify single-bond torsions that behave as hindered rotors — rotations that are neither free rotation nor pure harmonic vibrations. These candidates are the torsions you should scan to obtain one-dimensional rotational potentials for quantitative thermochemistry.
Summary
The job analyses the molecular geometry, optimises it, computes its harmonic vibrational modes, and then projects each candidate torsion onto the low-frequency normal modes. Bonds whose torsional coordinate overlaps strongly with one or more low-frequency modes are returned as candidates.
The overlap threshold and low-frequency cutoff are documented below. The system-dependent nature of hindered rotors means these defaults work well for most organic molecules but may need custom tuning for especially floppy or especially rigid systems. Contact us if you need custom thresholds.
Quick Example
import atomiverse
from atomiverse import Atoms, HinderedRotorCandidates
from atomiverse.levels import GFN2_XTB
butane = Atoms.from_smiles("CCCC")
job = HinderedRotorCandidates(
atoms=butane,
level_of_theory=GFN2_XTB,
)
job.submit()
result = job.require_result()
print(f"Dihedrals: {result.dihedrals}")
# Output: [(0,1,2,3), (1,2,3,4), ...]
Inputs
| Field | Type | Description |
|---|---|---|
atoms | Atoms | Input molecular geometry (3D coordinates). |
charge | int | Total system charge (default 0). |
multiplicity | int | Spin multiplicity 2S+1 (default 1). |
level_of_theory | LevelOfTheory | Computational method (DFT, semi-empirical, MLIP). |
Results
| Field | Type | Description |
|---|---|---|
dihedrals | list[tuple[int,int,int,int]] | 0-based atom-index quadruplets per candidate. |
Each dihedral is a (a,i,j,b) quadruplet where i–j is the rotor bond and
a and b are the outer anchor atoms.
Algorithm Details
Candidate bond detection
RDKit identifies candidate single bonds with a custom SMARTS pattern based on the Lipinski rotatable-bond definition but without excluding terminal heavy atoms (e.g. methyl rotors). The SMARTS is:
[!$(*#*)&!#1]-&!@[!$(*#*)&!#1]
This matches single bonds that are not in rings and are not adjacent to multiple bonds.
Optimisation and vibrations
The input geometry is optimised at the requested level of theory, followed by a harmonic frequency calculation. If any genuine imaginary frequencies remain (above 20 cm⁻¹), the job fails — hindered rotor candidates must be derived from a local minimum.
Mode projection
For each candidate bond i–j, a torsional displacement vector is constructed
by rotating the smaller molecular fragment around the i–j axis by a small
angle. Mass-weighted normal modes are computed from the Cartesian Hessian.
The mass-weighted overlap (absolute dot product) between the torsion vector and each low-frequency normal mode is evaluated.
Filtering
A candidate bond is kept when its maximum overlap with any low-frequency mode meets or exceeds the overlap threshold.
Default thresholds
| Parameter | Value | Description |
|---|---|---|
| Low-frequency cutoff | 300 cm⁻¹ | Only modes ≤ this value are considered. |
| Overlap threshold | 0.35 | Minimum mass-weighted overlap to keep a candidate. |
| Imaginary frequency tolerance | 20 cm⁻¹ | Modes below −20 cm⁻¹ are treated as genuine imaginary. |
Floppy molecules may benefit from a higher cutoff; rigid conjugated systems may need a lower one. The torsional scan itself determines symmetry.
Compute Resources
This job performs one geometry optimisation and one vibrational analysis, so walltime is comparable to an optimisation + frequency calculation on the same system. Typical walltime multipliers reflect this two-step nature.