angular_momentum

edrixs.angular_momentum.cf_cubic_d(ten_dq)[source]

Given 10Dq, return cubic crystal field matrix for d orbitals in the complex harmonics basis.

Parameters:
ten_dq: float scalar

The splitting between \(eg\) and \(t2g\) orbitals.

Returns:
cf: 2d complex array, shape=(10, 10)

The matrix form of crystal field Hamiltonian in complex harmonics basis.

edrixs.angular_momentum.cf_square_planar_d(ten_dq, ds)[source]

Given 10Dq, ds, return square planar crystal field matrix for d orbitals in the complex harmonics basis. This is the limit of strong tetragonal distortion with two axial ligands at infinity. Note that in this case the three parameters, ten_dq, ds, and dt, are no longer independent: dt = 2/35*ten_dq and the levels depend on only two parameters ten_dq and ds.

Parameters:
ten_dq: float scalar

Parameter associated with eg-t2g splitting.

ds: float scalar

Paramter associated with splitting orbitals with z-components.

Returns:
cf: 2d complex array, shape=(10, 10)

The matrix form of crystal field Hamiltonian in complex harmonics basis.

edrixs.angular_momentum.cf_tetragonal_d(ten_dq, d1, d3)[source]

Given 10Dq, d1, d3, return tetragonal crystal field matrix for d orbitals in the complex harmonics basis.

Parameters:
ten_dq: float scalar

Parameter used to label cubic crystal splitting.

d1: float scalar

Paramter used to label tetragonal splitting.

d3: float scalar

Paramter used to label tetragonal splitting.

Returns:
cf: 2d complex array, shape=(10, 10)

The matrix form of crystal field Hamiltonian in complex harmonics basis.

edrixs.angular_momentum.cf_trigonal_t2g(delta)[source]

Given delta, return trigonal crystal field matrix for t2g orbitals in the complex harmonics basis.

Parameters:
delta: float scalar

Parameter used to label trigonal crystal splitting.

Returns:
cf: 2d complex array, shape=(6, 6)

The matrix form of crystal field Hamiltonian in complex harmonics basis.

edrixs.angular_momentum.dmat_spinor(alpha, beta, gamma)[source]

Given three Euler angle: \(\alpha, \beta, \gamma\), return the transformation matrix for \(\frac{1}{2}\)-spinor.

Parameters:
alpha: float

Euler angle \(\alpha\) in radian [0, \(2\pi\)].

beta: float

Euler angle \(\beta\) in radian [0, \(\pi\)].

gamma: float

Euler angle \(\gamma\) in radian [0, \(2\pi\)].

Returns:
dmat: 2d complex array

The \(2 \times 2\) transformation matrix.

edrixs.angular_momentum.euler_to_rmat(alpha, beta, gamma)[source]

Given Euler angle: \(\alpha, \beta, \gamma\), generate the \(3 \times 3\) rotational matrix \(R\).

Parameters:
alpha: float

Euler angle, in radian, [0, \(2\pi\)]

beta: float

Euler angle, in radian, [0, \(\pi\)]

gamma: float

Euler angle, in radian, [0, \(2\pi\)]

Returns:
rmat: 2d float array

The \(3 \times 3\) rotational matrix.

edrixs.angular_momentum.get_ladd(ll, ispin=False)[source]

Get the matrix form of the raising operator \(l^+\) in the complex spherical harmonics basis

\[l^+|ll,m> = \sqrt{(ll-m)(ll+m+1)} |ll,m+1>\]
Parameters:
ll: int

Orbital angular momentum number.

ispin: logical

Whether including spin or not (default: False).

Returns:
ladd: 2d complex array

The matrix form of \(l^+\).

If ispin=True, the dimension will be \(2(2ll+1) \times 2(2ll+1)\),

otherwise, it will be \((2ll+1) \times (2ll+1)\).

edrixs.angular_momentum.get_lminus(ll, ispin=False)[source]

Get the matrix form of the lowering operator \(l^-\) in the complex spherical harmonics basis

\[l^-|ll,m> = \sqrt{(ll+m)(ll-m+1)} |ll,m-1>\]
Parameters:
ll: int

Orbital angular momentum number.

ispin: logical

Whether including spin or not (default: False).

Returns:
lminus: 2d complex array

The matrix form of \(l^-\).

If ispin=True, the dimension will be \(2(2ll+1) \times 2(2ll+1)\),

otherwise, it will be \((2ll+1) \times (2ll+1)\).

edrixs.angular_momentum.get_lx(ll, ispin=False)[source]

Get the matrix form of the orbital angular momentum operator \(l_x\) in the complex spherical harmonics basis,

\[l_x = \frac{1}{2} (l^+ + l^-)\]
Parameters:
ll: int

Orbital angular momentum number.

ispin: logical

Whether including spin or not (default: False).

Returns:
lx: 2d complex array

The matrix form of \(l_x\).

If ispin=True, the dimension will be \(2(2ll+1) \times 2(2ll+1)\),

otherwise, it will be \((2ll+1) \times (2ll+1)\).

edrixs.angular_momentum.get_ly(ll, ispin=False)[source]

Get the matrix form of the orbital angular momentum operator \(l_y\) in the complex spherical harmonics basis,

\[l_y = \frac{-i}{2} (l^+ - l^-)\]
Parameters:
ll: int

Orbital angular momentum number.

ispin: logical

Whether including spin or not (default: False).

Returns:
ly: 2d complex array

The matrix form of \(l_y\).

If ispin=True, the dimension will be \(2(2ll+1) \times 2(2ll+1)\),

otherwise, it will be \((2ll+1) \times (2ll+1)\).

edrixs.angular_momentum.get_lz(ll, ispin=False)[source]

Get the matrix form of the orbital angular momentum operator \(l_z\) in the complex spherical harmonics basis.

Parameters:
ll: int

Orbital angular momentum number.

ispin: logical

Whether including spin or not (default: False).

Returns:
lz: 2d complex array

The matrix form of \(l_z\).

If ispin=True, the dimension will be \(2(2ll+1) \times 2(2ll+1)\),

otherwise, it will be \((2ll+1) \times (2ll+1)\).

edrixs.angular_momentum.get_orb_momentum(ll, ispin=False)[source]

Get the matrix form of the orbital angular momentum operator \(l_x, l_y, l_z\) in the complex spherical harmonics basis.

Parameters:
ll: int

Orbital angular momentum number.

ispin: logical

Whether including spin or not (default: False).

Returns:
res: 3d complex array

The matrix form of

  • res[0]: \(l_x\)

  • res[1]: \(l_y\)

  • res[2]: \(l_z\)

If ispin=True, the dimension will be \(3 \times 2(2ll+1) \times 2(2ll+1)\),

otherwise, it will be \(3 \times (2ll+1) \times (2ll+1)\).

edrixs.angular_momentum.get_pauli()[source]

Get the Pauli matrix

Returns:
sigma: 3d complex array, shape=(3, 2, 2)
  • sigma[0] is \(\sigma_x\),

  • sigma[1] is \(\sigma_y\),

  • sigma[2] is \(\sigma_z\),

edrixs.angular_momentum.get_spin_momentum(ll)[source]

Get the matrix form of the spin angular momentum operator \(s_x, s_y, s_z\) in the complex spherical harmonics basis.

Parameters:
ll: int

Orbital angular momentum number.

Returns:
res: 3d complex array

The matrix form of

  • res[0]: \(s_x\)

  • res[1]: \(s_y\)

  • res[2]: \(s_z\)

the dimension is \(3 \times 2(2ll+1) \times 2(2ll+1)\),

Orbital order is: |-ll,up>, |-ll,down>, …, |+ll, up>, |+ll,down>

edrixs.angular_momentum.get_sx(ll)[source]

Get the matrix form of spin angular momentum operator \(s_x\) in the complex spherical harmonics basis.

Parameters:
ll: int

Quantum number of orbital angular momentum.

Returns:
sx: 2d complex array.

Matrix form of \(s_x\), the dimension is \(2(2ll+1) \times 2(2ll+1)\),

Orbital order is: |-ll,up>, |-ll,down>, …, |+ll, up>, |+ll,down>.

edrixs.angular_momentum.get_sy(ll)[source]

Get the matrix form of spin angular momentum operator \(s_y\) in the complex spherical harmonics basis.

Parameters:
ll: int

Quantum number of orbital angular momentum.

Returns:
sy: 2d complex array.

Matrix form of \(s_y\), the dimension is \(2(2ll+1) \times 2(2ll+1)\), spin order is:

Orbital order is: |-ll,up>, |-ll,down>, …, |+ll, up>, |+ll,down>

edrixs.angular_momentum.get_sz(ll)[source]

Get the matrix form of spin angular momentum operator \(s_z\) in the complex spherical harmonics basis.

Parameters:
ll: int

Quantum number of orbital angular momentum.

Returns:
sz: 2d complex array.

Matrix form of \(s_z\), the dimension is \(2(2ll+1) \times 2(2ll+1)\).

Orbital order is: |-ll,up>, |-ll,down>, …, |+ll, up>, |+ll,down>

edrixs.angular_momentum.get_wigner_dmat(quant_2j, alpha, beta, gamma)[source]

Given quantum number and Euler angles, return the Wigner-D matrix.

Parameters:
quant_2j: int

Twice of the quantum number j: 2j, for example, quant_2j=1 means j=1/2, quant_2j=2 means j=1

alpha: float number

The first Euler angle \(\alpha\) in radian [0, \(2\pi\)].

beta: float number

The second Euler angle \(\beta\) in radian [0, \(\pi\)].

gamma: float number

The third Euler angle \(\gamma\) in radian [0, \(2\pi\)].

Returns:
result: 2d complex array, shape(quant_2j+1, quant_2j+1)

The Wigner D-matrix. For \(j=1/2\), the orbital order is: +1/2 (spin up), -1/2 (spin down). For \(j>1/2\), the orbital order is: \(-j, -j+1, ..., +j\)

Examples

>>> import edrixs
spin-1/2 D-matrix
>>> edrixs.get_wigner_dmat(1, 1, 2, 3)
array([[-0.224845-0.491295j, -0.454649-0.708073j],
       [ 0.454649-0.708073j, -0.224845+0.491295j]])
j=1 D-matrix
>>> edrixs.get_wigner_dmat(2, 1, 2, 3)
array([[-0.190816-0.220931j,  0.347398+0.541041j, -0.294663-0.643849j],
       [ 0.636536-0.090736j, -0.416147+0.j      , -0.636536-0.090736j],
       [-0.294663+0.643849j, -0.347398+0.541041j, -0.190816+0.220931j]])
edrixs.angular_momentum.rmat_to_euler(rmat)[source]

Given the \(3 \times 3\) rotational matrix \(R\), return the Euler angles: \(\alpha, \beta, \gamma\).

Parameters:
rmat: 2d float array

The \(3 \times 3\) rotational matrix \(R\).

Returns:
alpha: float

Euler angle \(\alpha\) in radian, [0, \(2\pi\)].

beta: float

Euler angle \(\beta\) in radian, [0, \(\pi\)].

gamma: float

Euler angle \(\gamma\) in radian, [0, \(2\pi\)]

edrixs.angular_momentum.where_is_angle(sina, cosa)[source]

Given sine and cosine of an angle \(\alpha\), return the angle \(\alpha\) range from [0, \(2\pi\)].

Parameters:
sina: float

\(\sin(\alpha)\).

cosa: float

\(\cos(\alpha)\).

Returns:
alpha: float

The angle \(\alpha\) in radian [0, \(2\pi\)].

edrixs.angular_momentum.zx_to_rmat(z, x)[source]

Given \(z\) vector and \(x\) vector, calculate \(y\) vector which satisfies the right-hand Cartesian coordinate and normalize them to unit if needed, and then return the \(3 \times 3\) rotational matrix \(R\).

Parameters:
z: 1d float array

The \(z\) vector.

x: 1d float array

The \(x\) vector.

Returns:
rmat: 2d float array

The \(3 \times 3\) rotational matrix \(R\).