Avogadro::Core::Constraint#
-
class Constraint#
Constraints for optimization / dynamics.
This class represents a distance, angle, or torsional constraint / restraint during optimization or dynamics. More technically, these are implemented as stiff harmonic oscillators restraining a particular atom set towards the value.
- Author
Geoffrey R. Hutchison
Distances are stored in Angstrom and angles / torsions in degrees, matching what the user sees in the property tables and constraint dialog. Energy calculators convert angular values to radians internally, so the angular force constants are in kJ/mol/radian^2.
Public Types
Public Functions
-
inline Constraint(Index a, Index b, Index c = MaxIndex, Index d = MaxIndex, Real value = 0.0)#
Constructor, results in a zero distance constraint
- Parameters:
a – Atom index of the first atom of the constraint
b – Atom index of the second atom of the constraint
c – Atom index of the third atom (for angles or torsions) or MaxIndex
d – Atom index of the fourth atom (for torsion constraints) or MaxIndex
value – The value of the constraint, either Angstrom for distance or degrees for angles and torsions
-
inline void set(Index a, Index b, Index c = MaxIndex, Index d = MaxIndex, Real value = 0.0)#
Set the constraint
- Parameters:
a – Atom index of the first atom of the constraint
b – Atom index of the second atom of the constraint
c – Atom index of the third atom (for angles or torsions) or MaxIndex
d – Atom index of the fourth atom (for torsion constraints) or MaxIndex
value – The value of the constraint, either Angstrom for distance or degrees for angles and torsions
-
inline void setValue(Real value)#
Set the constraint value (distance, angle, dihedral)
- Parameters:
value – The value of the constraint, either Angstrom for distance or degrees for angles and torsions
-
inline Real value() const#
- Returns:
the constraint value
-
inline std::tuple<Index, Index, Index, Index> atoms() const#
- Returns:
the atoms in the constraint as a tuple
-
inline Index aIndex() const#
- Returns:
the atom index from the constraint or MaxIndex
-
inline Index bIndex() const#
-
inline Index cIndex() const#
-
inline Index dIndex() const#
-
inline Real k() const#
- Returns:
the harmonic force constant, either kJ/mol/Angstrom^2 for a distance restraint or kJ/mol/radian^2 for an angular one. If no force constant has been set explicitly, a type-appropriate default is used — the two have different units and cannot share a value.
-
inline void setK(Real k)#
-
inline Constraint::Type type() const#
- Returns:
the type of constraint
-
inline bool matches(Index a, Index b, Index c = MaxIndex, Index d = MaxIndex) const#
Whether this constraint is on the coordinate the given atoms name. A coordinate read backwards is the same coordinate — the distance a-b is the distance b-a, and the torsion a-b-c-d is the torsion d-c-b-a — so both directions match. A table that lists a coordinate in its own order can then find the constraint on it however it happens to be stored. Out of plane constraints have no such symmetry and are matched exactly.
-
inline bool isValid(Index atomCount) const#
Check that every atom this constraint names still exists.
Constraints outlive the atoms they name, since deleting an atom leaves the stored indices behind.
- Parameters:
atomCount – The number of atoms available
- Returns:
True if the constraint can be evaluated against that many atoms
-
inline bool evaluate(const Array<Vector3> &positions, Real &value) const#
Measure this constraint’s coordinate in a set of atomic positions, which need not be the molecule’s active one — a trajectory or relaxed scan can be measured frame by frame.
- Parameters:
positions – The atomic positions to measure
value – Receives the measurement: Angstrom for a distance, degrees for an angle or torsion, matching value()
- Returns:
True if the constraint could be measured, false if it names an atom the positions do not have or has no single coordinate (out of plane)
-
inline void setType(Constraint::Type type) const#
Set the type of constraint. An explicit type survives later set() calls, since it cannot always be inferred from the atom indices — an out-of-plane constraint has the same four indices as a torsion. Pass None to go back to inferring the type from the indices.
- Parameters:
type – The type of constraint