pub struct SymmetryOperation {
pub generating_element: SymmetryElement,
pub power: i32,
pub positive_hemisphere: Option<PositiveHemisphere>,
/* private fields */
}
Expand description
Structure for managing symmetry operations generated from symmetry elements.
A symmetry element serves as a generator for symmetry operations. Thus, a symmetry element together with a signed integer indicating the number of times the symmetry element is applied (positively or negatively) specifies a symmetry operation.
Fields§
§generating_element: SymmetryElement
The generating symmetry element for this symmetry operation.
power: i32
The integral power indicating the number of times
Self::generating_element
is applied to form the symmetry operation.
positive_hemisphere: Option<PositiveHemisphere>
The positive hemisphere used for distinguishing positive and negative rotation poles. If
None
, the standard positive hemisphere as defined in S.L. Altmann, Rotations,
Quaternions, and Double Groups (Dover Publications, Inc., New York, 2005) is used.
Implementations§
source§impl SymmetryOperation
impl SymmetryOperation
sourcepub fn from_quaternion(
qtn: (f64, Vector3<f64>),
proper: bool,
thresh: f64,
max_trial_power: u32,
tr: bool,
su2: bool,
poshem: Option<PositiveHemisphere>,
) -> Self
pub fn from_quaternion( qtn: (f64, Vector3<f64>), proper: bool, thresh: f64, max_trial_power: u32, tr: bool, su2: bool, poshem: Option<PositiveHemisphere>, ) -> Self
Constructs a finite-order-element-generated symmetry operation from a quaternion.
The rotation angle encoded in the quaternion is taken to be non-negative and assigned as the proper rotation angle associated with the element generating the operation.
If an improper operation is required, its generator will be constructed in the inversion-centre convention.
§Arguments
qtn
- A quaternion encoding the proper rotation associated with the generating element of the operation to be constructed.proper
- A boolean indicating if the operation is proper or improper.thresh
- Threshold for comparisons.tr
- A boolean indicating if the resulting symmetry operation should be accompanied by a time-reversal operation.su2
- A boolean indicating if the resulting symmetry operation is to contain a proper rotation in $\mathsf{SU}(2)
$. The homotopy class of the operation will be deduced from the specified quaternion.poshem
- An option containing any custom positive hemisphere used to distinguish positive and negative rotation poles.
§Returns
The constructed symmetry operation.
§Panics
Panics when the scalar part of the provided quaternion lies outside $[0, 1]
$ by more than
the specified threshold thresh
, or when the rotation angle associated with the quaternion
cannot be gracefully converted into an integer tuple of order and power.
sourcepub fn calc_quaternion(&self) -> (f64, Vector3<f64>)
pub fn calc_quaternion(&self) -> (f64, Vector3<f64>)
Finds the quaternion associated with this operation.
The rotation angle encoded in the quaternion is taken to be non-negative and assigned as the proper rotation angle associated with the element generating the operation.
If this is an operation generated from an improper element, the inversion-centre convention will be used to determine the angle of proper rotation.
Both $\mathsf{SO}(3)
$ and $\mathsf{SU}(2)
$ proper rotations are supported. For
$\mathsf{SO}(3)
$ proper rotations, only quaternions in the standardised form are
returned.
See S.L. Altmann, Rotations, Quaternions, and Double Groups (Dover Publications, Inc., New York, 2005) (Chapter 9) for further information.
§Returns
The quaternion associated with this operation.
§Panics
Panics if the calculated scalar part of the quaternion lies outside the closed interval
$[0, 1]
$ by more than the threshold value stored in the generating element in self
.
sourcepub fn calc_pole(&self) -> Point3<f64>
pub fn calc_pole(&self) -> Point3<f64>
Finds the pole associated with this operation with respect to the positive hemisphere
defined in Self::positive_hemisphere
.
This is the point on the unit sphere that is left invariant by the operation.
For improper operations, the inversion-centre convention is used to define the pole. This allows a proper rotation and its improper partner to have the same pole, thus facilitating the consistent specification of poles for the identity / inversion and binary rotations / reflections.
Note that binary rotations / reflections have unique poles on the positive
hemisphere (i.e., $C_2(\hat{\mathbf{n}}) = C_2^{-1}(\hat{\mathbf{n}})
$
and $\sigma(\hat{\mathbf{n}}) = \sigma^{-1}(\hat{\mathbf{n}})
$).
See S.L. Altmann, Rotations, Quaternions, and Double Groups (Dover Publications, Inc., New York, 2005) (Chapter 9) for further information.
§Returns
The pole associated with this operation.
§Panics
Panics when no total proper fractions could be found for this operation.
sourcepub fn calc_proper_rotation_pole(&self) -> Point3<f64>
pub fn calc_proper_rotation_pole(&self) -> Point3<f64>
Finds the pole associated with the proper rotation of this operation.
This is the point on the unit sphere that is left invariant by the proper rotation part of the operation.
For improper operations, no conversions will be performed, unlike in Self::calc_pole
.
Note that binary rotations have unique poles on the positive hemisphere (i.e.,
$C_2(\hat{\mathbf{n}}) = C_2^{-1}(\hat{\mathbf{n}})
$ and
$\sigma(\hat{\mathbf{n}}) = \sigma^{-1}(\hat{\mathbf{n}})
$).
See S.L. Altmann, Rotations, Quaternions, and Double Groups (Dover Publications, Inc., New York, 2005) (Chapter 9) for further information.
§Returns
The pole associated with the proper rotation of this operation.
§Panics
Panics when no total proper fractions could be found for this operation.
sourcepub fn calc_pole_angle(&self) -> f64
pub fn calc_pole_angle(&self) -> f64
Finds the pole angle associated with this operation.
This is the non-negative angle that, together with the pole, uniquely determines the proper
part of this operation. This angle lies in the interval $[0, \pi]
$.
For improper operations, the inversion-centre convention is used to define the pole angle. This allows a proper rotation and its improper partner to have the same pole angle, thus facilitating the consistent specification of poles for the identity / inversion and binary rotations / reflections.
§Returns
The pole angle associated with this operation.
§Panics
Panics when no total proper fractions could be found for this operation.
sourcepub fn convert_to_improper_kind(
&self,
improper_kind: &SymmetryElementKind,
) -> Self
pub fn convert_to_improper_kind( &self, improper_kind: &SymmetryElementKind, ) -> Self
Returns a copy of the current symmetry operation with the generating element converted to the requested improper kind (power-preserving), provided that it is an improper element.
§Arguments
improper_kind
- The improper kind to whichself
is to be converted. There is no need to make sure the time reversal specification inimproper_kind
matches that of the generating element ofself
as the conversion will take care of this.
§Panics
Panics if the converted symmetry operation cannot be constructed.
sourcepub fn to_symmetry_element(&self) -> SymmetryElement
pub fn to_symmetry_element(&self) -> SymmetryElement
Converts the current symmetry operation $O
$ to an equivalent symmetry element $E
$ such
that $O = E^1
$.
The proper rotation axis of $E
$ is the proper rotation pole (not the overall pole) of
$O
$, and the proper rotation angle of $E
$ is the total proper rotation angle of $O
$,
either as an (order, power) integer tuple or an angle floating-point number.
If $O
$ is improper, then the improper generating element for $E
$ is the same as that in
the generating element of $O
$.
§Returns
The equivalent symmetry element $E
$.
sourcepub fn get_abbreviated_symbol(&self) -> String
pub fn get_abbreviated_symbol(&self) -> String
Generates the abbreviated symbol for this symmetry operation.
sourcepub fn get_3d_spatial_matrix(&self) -> Array2<f64>
pub fn get_3d_spatial_matrix(&self) -> Array2<f64>
Returns the representation matrix for the spatial part of this symmetry operation.
This representation matrix is in the basis of coordinate functions $(y, z, x)
$.
sourcepub fn to_su2_class_0(&self) -> Self
pub fn to_su2_class_0(&self) -> Self
Convert the proper rotation of the current operation to one in hopotopy class 0 of
$\mathsf{SU}(2)
$.
§Returns
A symmetry element in $\mathsf{SU}(2)
$.
sourcepub fn set_positive_hemisphere(&mut self, poshem: Option<&PositiveHemisphere>)
pub fn set_positive_hemisphere(&mut self, poshem: Option<&PositiveHemisphere>)
Sets the positive hemisphere governing this symmetry operation.
§Arguments
poshem
- AnOption
containing a custom positive hemisphere, if any.
Trait Implementations§
source§impl Clone for SymmetryOperation
impl Clone for SymmetryOperation
source§fn clone(&self) -> SymmetryOperation
fn clone(&self) -> SymmetryOperation
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for SymmetryOperation
impl Debug for SymmetryOperation
source§impl<'de> Deserialize<'de> for SymmetryOperation
impl<'de> Deserialize<'de> for SymmetryOperation
source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
source§impl Display for SymmetryOperation
impl Display for SymmetryOperation
source§impl FiniteOrder for SymmetryOperation
impl FiniteOrder for SymmetryOperation
source§impl Hash for SymmetryOperation
impl Hash for SymmetryOperation
source§impl<M> IntoPermutation<M> for SymmetryOperation
impl<M> IntoPermutation<M> for SymmetryOperation
source§fn act_permute(&self, rhs: &M) -> Option<Permutation<usize>>
fn act_permute(&self, rhs: &M) -> Option<Permutation<usize>>
rhs
considered as a collection induced by the action of
self
on rhs
considered as an element in its domain. If no such permutation could be
found, None
is returned.source§impl Inv for &SymmetryOperation
impl Inv for &SymmetryOperation
source§impl Inv for SymmetryOperation
impl Inv for SymmetryOperation
source§impl Mul<&SymmetryOperation> for &SymmetryOperation
impl Mul<&SymmetryOperation> for &SymmetryOperation
§type Output = SymmetryOperation
type Output = SymmetryOperation
*
operator.source§impl Mul<&SymmetryOperation> for SymmetryOperation
impl Mul<&SymmetryOperation> for SymmetryOperation
§type Output = SymmetryOperation
type Output = SymmetryOperation
*
operator.source§impl Mul<SymmetryOperation> for &SymmetryOperation
impl Mul<SymmetryOperation> for &SymmetryOperation
§type Output = SymmetryOperation
type Output = SymmetryOperation
*
operator.source§impl Mul for SymmetryOperation
impl Mul for SymmetryOperation
§type Output = SymmetryOperation
type Output = SymmetryOperation
*
operator.source§impl PartialEq for SymmetryOperation
impl PartialEq for SymmetryOperation
source§impl Pow<i32> for &SymmetryOperation
impl Pow<i32> for &SymmetryOperation
source§impl Pow<i32> for SymmetryOperation
impl Pow<i32> for SymmetryOperation
source§impl Serialize for SymmetryOperation
impl Serialize for SymmetryOperation
source§impl SpecialSymmetryTransformation for SymmetryOperation
impl SpecialSymmetryTransformation for SymmetryOperation
source§fn is_proper(&self) -> bool
fn is_proper(&self) -> bool
Checks if the spatial part of the symmetry operation is proper.
§Returns
A boolean indicating if the spatial part of the symmetry operation is proper.
source§fn is_spatial_identity(&self) -> bool
fn is_spatial_identity(&self) -> bool
Checks if the spatial part of the symmetry operation is the spatial identity.
§Returns
A boolean indicating if the spatial part of the symmetry operation is the spatial identity.
source§fn is_spatial_binary_rotation(&self) -> bool
fn is_spatial_binary_rotation(&self) -> bool
Checks if the spatial part of the symmetry operation is a spatial binary rotation.
§Returns
A boolean indicating if the spatial part of the symmetry operation is a spatial binary rotation.
source§fn is_spatial_inversion(&self) -> bool
fn is_spatial_inversion(&self) -> bool
Checks if the spatial part of the symmetry operation is the spatial inversion.
§Returns
A boolean indicating if the spatial part of the symmetry operation is the spatial inversion.
source§fn is_spatial_reflection(&self) -> bool
fn is_spatial_reflection(&self) -> bool
Checks if the spatial part of the symmetry operation is a spatial reflection.
§Returns
A boolean indicating if the spatial part of the symmetry operation is a spatial reflection.
source§fn contains_time_reversal(&self) -> bool
fn contains_time_reversal(&self) -> bool
Checks if the symmetry operation is antiunitary or not.
§Returns
A boolean indicating if the symmetry oppperation is antiunitary.
source§fn is_su2(&self) -> bool
fn is_su2(&self) -> bool
Checks if the proper rotation part of the symmetry operation is in $\mathsf{SU}(2)
$.
§Returns
A boolean indicating if this symmetry operation contains an $\mathsf{SU}(2)
$ proper
rotation.
source§fn is_su2_class_1(&self) -> bool
fn is_su2_class_1(&self) -> bool
Checks if the proper rotation part of the symmetry operation is in $\mathsf{SU}(2)
$ and
connected to the identity via a homotopy path of class 1.
§Returns
A boolean indicating if this symmetry operation contains an $\mathsf{SU}(2)
$ proper
rotation connected to the identity via a homotopy path of class 1.
source§fn is_identity(&self) -> bool
fn is_identity(&self) -> bool
\mathsf{O}(3)
$, E
, or
in $\mathsf{SU}(2)
$, E(Σ)
. Read moresource§fn is_time_reversal(&self) -> bool
fn is_time_reversal(&self) -> bool
\mathsf{O}(3)
$, θ
, or
in $\mathsf{SU}(2)
$, θ(Σ)
. Read moresource§fn is_inversion(&self) -> bool
fn is_inversion(&self) -> bool
\mathsf{O}(3)
$, i
, but not in
$\mathsf{SU}(2)
$, i(Σ)
. Read moresource§fn is_reflection(&self) -> bool
fn is_reflection(&self) -> bool
\mathsf{O}(3)
$, σ
, but not in
$\mathsf{SU}(2)
$, σ(Σ)
. Read moreimpl Eq for SymmetryOperation
Auto Trait Implementations§
impl Freeze for SymmetryOperation
impl RefUnwindSafe for SymmetryOperation
impl Send for SymmetryOperation
impl Sync for SymmetryOperation
impl Unpin for SymmetryOperation
impl UnwindSafe for SymmetryOperation
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§default unsafe fn clone_to_uninit(&self, dst: *mut T)
default unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)§impl<T> Conv for T
impl<T> Conv for T
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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 Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
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) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
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
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
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
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
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
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self
from the equivalent element of its
superset. Read more§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self
is actually part of its subset T
(and can be converted to it).§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset
but without any property checks. Always succeeds.§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self
to the equivalent element of its superset.§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.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
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.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
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.