pub struct WignerDMatrix { /* private fields */ }Expand description
Precomputed helper for Wigner rotation matrix elements.
Stores all coefficients needed for repeated evaluation of
$d^j_{m' m}(\beta)$ and $D^j_{m' m}(\alpha,\beta,\gamma)$.
§Definitions
$D^j_{m' m}(\alpha,\beta,\gamma) = e^{-i m' \alpha} d^j_{m' m}(\beta) e^{-i m \gamma}$
§Notes
Designed for reuse across many angle evaluations.
Implementations§
Source§impl WignerDMatrix
impl WignerDMatrix
Sourcepub fn new(
j: impl TryInto<J>,
mp: impl TryInto<M>,
m: impl TryInto<M>,
) -> LadduPhysicsResult<Self>
pub fn new( j: impl TryInto<J>, mp: impl TryInto<M>, m: impl TryInto<M>, ) -> LadduPhysicsResult<Self>
Constructs a Wigner small-$d$/full-$D$ matrix element helper for fixed
quantum numbers $j$, $m'$, and $m$.
All angular momenta and projections are passed as strongly typed quantum numbers.
The constructed value precomputes the combinatorial factors and summation bounds needed for repeated evaluation of:
- the reduced Wigner matrix element $
d^j_{m' m}(\beta)$, and - the full Wigner matrix element $
D^j_{m' m}(\alpha,\beta,\gamma)$.
§Errors
This method will return an error result if:
|m'| > j|m| > jjandm'do not have matching integer/half-integer parityjandmdo not have matching integer/half-integer parity- the internally derived summation bounds are inconsistent
§Notes
The returned struct is intended for reuse when evaluating the same matrix element for many angles. This avoids recomputing factorial-based prefactors on every call.
§Examples
Integer angular momentum:
let w = WignerDMatrix::new(j!(1), m!(1), m!(0)).unwrap(); // j = 1, m' = 1, m = 0Half-integer angular momentum:
let w = WignerDMatrix::new(j!(1/2), m!(1/2), m!(-1/2)).unwrap(); // j = 1/2, m' = 1/2, m = -1/2Sourcepub fn d(&self, beta: impl Into<Expr>) -> Expr
pub fn d(&self, beta: impl Into<Expr>) -> Expr
Evaluates the reduced Wigner small-$d$ matrix element $d^j_{m' m}(\beta)$.
The quantum numbers $j$, $m'$, and $m$ are those fixed when the
WignerDMatrix was constructed.
§Parameters
beta: expression for the middle Euler angle $\beta$, in radians
§Returns
Returns an expression graph for the real-valued reduced Wigner matrix
element $d^j_{m' m}(\beta)$.
§Notes
This method builds the standard finite sum in powers of
$\cos(\beta/2)$ and $\sin(\beta/2)$.
§Examples
let w = WignerDMatrix::new(j!(1), m!(1), m!(0)).unwrap(); // j = 1, m' = 1, m = 0
let expr = w.d(event_scalar("beta"));Sourcepub fn D(
&self,
alpha: impl Into<Expr>,
beta: impl Into<Expr>,
gamma: impl Into<Expr>,
) -> Expr
pub fn D( &self, alpha: impl Into<Expr>, beta: impl Into<Expr>, gamma: impl Into<Expr>, ) -> Expr
Evaluates the full Wigner $D$ matrix element $D^j_{m' m}(\alpha,\beta,\gamma)$.
The implemented convention is
$D^j_{m' m}(\alpha,\beta,\gamma) = e^{-\imath m' \alpha} d^j_{m' m}(\beta) e^{-\imath m \gamma}$,
§Parameters
alpha: expression for the first Euler angle $\alpha$, in radiansbeta: expression for the middle Euler angle $\beta$, in radiansgamma: expression for the third Euler angle $\gamma$, in radians
§Returns
Returns an expression graph for the complex Wigner $D$ matrix element.
§Notes
Since $d^j_{m' m}(\beta)$ is real for real $\beta$, the complex phase comes
entirely from the $\alpha$ and $\gamma$ dependence.
§Examples
let w = WignerDMatrix::new(j!(1), m!(1), m!(0)).unwrap(); // j = 1, m' = 1, m = 0
let expr = w.D(event_scalar("alpha"), event_scalar("beta"), event_scalar("gamma"));Trait Implementations§
Source§impl Clone for WignerDMatrix
impl Clone for WignerDMatrix
Source§fn clone(&self) -> WignerDMatrix
fn clone(&self) -> WignerDMatrix
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreimpl Copy for WignerDMatrix
Source§impl<'de> Deserialize<'de> for WignerDMatrix
impl<'de> Deserialize<'de> for WignerDMatrix
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>,
Auto Trait Implementations§
impl Freeze for WignerDMatrix
impl RefUnwindSafe for WignerDMatrix
impl Send for WignerDMatrix
impl Sync for WignerDMatrix
impl Unpin for WignerDMatrix
impl UnsafeUnpin for WignerDMatrix
impl UnwindSafe for WignerDMatrix
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,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§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).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.