Struct qsym2::auxiliary::molecule::Molecule

source ·
pub struct Molecule {
    pub atoms: Vec<Atom>,
    pub electric_atoms: Option<Vec<Atom>>,
    pub magnetic_atoms: Option<Vec<Atom>>,
    pub threshold: f64,
}
Expand description

Structure containing the atoms constituting a molecule.

Fields§

§atoms: Vec<Atom>

The atoms constituting this molecule.

§electric_atoms: Option<Vec<Atom>>

Optional special atom to represent the electric fields applied to this molecule.

§magnetic_atoms: Option<Vec<Atom>>

Optional special atoms to represent the magnetic fields applied to this molecule.

§threshold: f64

A threshold for approximate equality comparisons.

Implementations§

source§

impl Molecule

source

pub fn from_xyz<P: AsRef<Path>>(filename: P, thresh: f64) -> Self

Parses an XYZ file to construct a molecule.

§Arguments
  • filename - The XYZ file to be parsed.
§Returns

The parsed Molecule structure.

§Panics

Panics when unable to parse the provided XYZ file.

source

pub fn to_xyz<P: AsRef<Path>>(&self, filename: P) -> Result<(), Error>

Writes the ordinary atoms in the molecule to an XYZ file.

§Arguments
  • filename - The XYZ file to be written.
source

pub fn from_atoms(all_atoms: &[Atom], thresh: f64) -> Self

Construct a molecule from an array of atoms.

§Arguments
  • all_atoms - The atoms (of all types) constituting this molecule.
  • threshold - A threshold for approximate equality comparisons.
§Returns

The constructed Molecule struct.

§Panics

Panics when the numbers of fictitious special atoms, if any, are invalid. It is expected that, when present, there are two magnetic special atoms and/or one electric special atom.

source

pub fn molecule_ordinary_atoms(&self) -> Self

Constructs a new molecule containing only the ordinary atoms in this molecule.

source

pub fn molecule_magnetic_atoms(&self) -> Option<Self>

Constructs a new molecule containing only the fictitious magnetic atoms in this molecule, if any.

§Returns

Returns None if this molecule has no fictitious magnetic atoms.

source

pub fn molecule_electric_atoms(&self) -> Option<Self>

Constructs a new molecule containing only the fictitious electric atoms in this molecule, if any.

§Returns

Returns None if this molecule has no fictitious electric atoms.

source

pub fn get_all_atoms(&self) -> Vec<&Atom>

Retrieves a vector of references to all atoms in this molecule, including special ones, if any.

§Returns

All atoms in this molecule.

source

pub fn get_all_atoms_mut(&mut self) -> Vec<&mut Atom>

Retrieves a vector of mutable references to all atoms in this molecule, including special ones, if any.

§Returns

All atoms in this molecule.

source

pub fn calc_com(&self) -> Point3<f64>

Calculates the centre of mass of the molecule.

This does not take into account fictitious special atoms.

§Returns

The centre of mass.

source

pub fn calc_inertia_tensor(&self, origin: &Point3<f64>) -> Matrix3<f64>

Calculates the inertia tensor of the molecule.

This does take into account fictitious special atoms.

§Arguments
  • origin - An origin about which the inertia tensor is evaluated.
§Returns

The inertia tensor as a $3 \times 3$ matrix.

source

pub fn calc_moi(&self) -> ([f64; 3], [Vector3<f64>; 3])

Calculates the moments of inertia and the corresponding principal axes.

This does take into account fictitious special atoms.

§Returns
  • The moments of inertia in ascending order.
  • The corresponding principal axes.
§Panics

Panics when any of the moments of inertia cannot be compared.

source

pub fn calc_interatomic_distance_matrix(&self) -> (Array2<f64>, Vec<Vec<usize>>)

Determines the interatomic distance matrix and the indices of symmetry-equivalent atoms.

This does take into account fictitious special atoms.

§Returns
  • The interatomic distance matrix where the distances in each column are sorted in ascending order. Column $j$ contains the interatomic distances from atom $j$ to all other atoms (both ordinary and fictitious) in the molecule. Also note that all atoms (both ordinary and fictitious) are included here, so the matrix is square.
  • A vector of vectors of symmetry-equivalent atom indices. Each inner vector contains indices of atoms in one SEA group.
source

pub fn calc_sea_groups(&self) -> Vec<Vec<Atom>>

Determines the sets of symmetry-equivalent atoms.

This does take into account fictitious special atoms.

§Returns
  • Copies of the atoms in the molecule, grouped into symmetry-equivalent groups.
§Panics

Panics when the any of the mass-weighted interatomic distances cannot be compared.

source

pub fn set_magnetic_field(&mut self, magnetic_field: Option<Vector3<f64>>)

Adds two fictitious magnetic atoms to represent the magnetic field.

§Arguments
  • magnetic_field - The magnetic field vector. If zero or None, any magnetic field present will be removed.
§Panics

Panics when the number of atoms cannot be represented as an f64 value.

source

pub fn set_electric_field(&mut self, electric_field: Option<Vector3<f64>>)

Adds one fictitious electric atom to represent the electric field.

§Arguments
  • electric_field - The electric field vector. If zero or None, any electric field present will be removed.
§Panics

Panics when the number of atoms cannot be represented as an f64 value.

source

pub fn adjust_threshold(&self, thresh: f64) -> Self

Clones this molecule and adjusts all comparison thresholds to that specified by thresh.

§Arguments
  • thresh - The new threshold to be assigned to the cloned molecule.
§Returns

A cloned copy of the molecule wit the adjusted threshold.

source

pub fn reorientate_mut(&mut self, moi_thresh: f64)

Reorientates the molecule in-place into a canonical alignment with the space-fixed axes of the coordinate system.

Fictitious special atoms are also moved during the reorientation.

If the molecule has a unique principal axis, then this axis becomes aligned with the $z$-axis and the other two degenerate axes become aligned with the $x$- and $y$-axes of the coordinate system. If the molecule has no unique principal axes, then the axes are aligned with $x$-, $y$-, and $z$-axes in ascending order of moments of inertia.

§Arguments
  • moi_thresh - Threshold for comparing moments of inertia.
source

pub fn reorientate(&self, moi_thresh: f64) -> Self

Clones and reorientates the molecule into a canonical alignment with the space-fixed axes of the coordinate system.

Fictitious special atoms are also moved during the reorientation.

If the molecule has a unique principal axis, then this axis becomes aligned with the $z$-axis and the other two degenerate axes become aligned with the $x$- and $y$-axes of the coordinate system. If the molecule has no unique principal axes, then the axes are aligned with $x$-, $y$-, and $z$-axes in ascending order of moments of inertia.

§Arguments
  • moi_thresh - Threshold for comparing moments of inertia.
§Returns

A reoriented copy of the molecule.

Trait Implementations§

source§

impl Clone for Molecule

source§

fn clone(&self) -> Molecule

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Molecule

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for Molecule

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for Molecule

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl From<PyMolecule> for Molecule

source§

fn from(pymol: PyMolecule) -> Self

Converts to this type from the input type.
source§

impl PartialEq for Molecule

source§

fn eq(&self, other: &Self) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl PermutableCollection for Molecule

source§

fn get_perm_of(&self, other: &Self) -> Option<Permutation<Self::Rank>>

Determines the permutation of all atoms to map self to other. Special fictitious atoms are included after ordinary atoms, with magnetic atoms before electric atoms.

§Arguments
  • other - Another molecule to be compared with self.
§Returns

Returns a permutation that permutes all atoms of self to give other, or None if no such permutation exists.

source§

fn permute(&self, perm: &Permutation<Self::Rank>) -> Result<Self, Error>

Permutes all atoms in this molecule (including special fictitious atoms) and places them in a new molecule to be returned.

§Arguments
  • perm - A permutation for the atoms. Special fictitious atoms are included after ordinary atoms, with magnetic atoms before electric atoms.
§Returns

A new molecule with the permuted atoms.

§Panics

Panics if the rank of perm does not match the number of atoms in this molecule, or if the permutation results in atoms of different kind (e.g. ordinary and magnetic) are permuted into each other.

source§

fn permute_mut(&mut self, perm: &Permutation<Self::Rank>) -> Result<(), Error>

Permutes in-place all atoms in this molecule (including special fictitious atoms).

The in-place rearrangement implementation is taken from here.

§Arguments
  • perm - A permutation for the atoms. Special fictitious atoms are included after ordinary atoms, with magnetic atoms before electric atoms.
§Panics

Panics if the rank of perm does not match the number of atoms in this molecule, or if the permutation results in atoms of different kind (e.g. ordinary and magnetic) are permuted into each other.

§

type Rank = usize

The type of the rank of the permutation.
source§

impl Serialize for Molecule

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Transform for Molecule

source§

fn transform_mut(&mut self, mat: &Matrix3<f64>)

Transforms in-place the coordinates about the origin by a given transformation. Read more
source§

fn rotate_mut(&mut self, angle: f64, axis: &Vector3<f64>)

Rotates in-place the coordinates through angle about axis. Read more
source§

fn improper_rotate_mut( &mut self, angle: f64, axis: &Vector3<f64>, kind: &ImproperRotationKind, )

Improper-rotates in-place the coordinates through angle about axis. Read more
source§

fn translate_mut(&mut self, tvec: &Vector3<f64>)

Translates in-place the coordinates by a specified translation vector in three dimensions. Read more
source§

fn recentre_mut(&mut self)

Recentres in-place to put the centre of mass at the origin.
source§

fn reverse_time_mut(&mut self)

Reverses time by reversing in-place the polarity of any magnetic special atoms.
source§

fn transform(&self, mat: &Matrix3<f64>) -> Self

Clones and transforms the coordinates about the origin by a given transformation. Read more
source§

fn rotate(&self, angle: f64, axis: &Vector3<f64>) -> Self

Clones and rotates the coordinates through angle about axis. Read more
source§

fn improper_rotate( &self, angle: f64, axis: &Vector3<f64>, kind: &ImproperRotationKind, ) -> Self

Clones and improper-rotates the coordinates through angle about axis. Read more
source§

fn translate(&self, tvec: &Vector3<f64>) -> Self

Clones and translates in-place the coordinates by a specified translation in three dimensions. Read more
source§

fn recentre(&self) -> Self

Clones and recentres to put the centre of mass at the origin. Read more
source§

fn reverse_time(&self) -> Self

Clones the molecule and reverses time by reversing the polarity of any magnetic special atoms. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> CloneToUninit for T
where T: Clone,

source§

default unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> Pipe for T
where T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same for T

§

type Output = T

Should always be Self
§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for T
where T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

source§

impl<T> Scalar for T
where T: 'static + Clone + PartialEq + Debug,

§

impl<T> Ungil for T
where T: Send,