|
1 | 1 | from __future__ import annotations |
2 | 2 |
|
3 | | -import contextlib |
4 | 3 | import logging |
5 | 4 | from abc import ABC |
6 | 5 | from typing import TYPE_CHECKING, Any, ClassVar, Literal, overload |
|
14 | 13 | is_angular_operator_type, |
15 | 14 | ) |
16 | 15 | from rydstate.angular.utils import ( |
| 16 | + InvalidQuantumNumbersError, |
17 | 17 | check_spin_addition_rule, |
18 | 18 | get_possible_quantum_number_values, |
19 | 19 | minus_one_pow, |
|
27 | 27 |
|
28 | 28 | from rydstate.angular.angular_matrix_element import AngularMomentumQuantumNumbers, AngularOperatorType |
29 | 29 | from rydstate.angular.angular_state import AngularState |
| 30 | + from rydstate.angular.utils import CouplingScheme |
30 | 31 |
|
31 | 32 | logger = logging.getLogger(__name__) |
32 | 33 |
|
33 | | -CouplingScheme = Literal["LS", "JJ", "FJ"] |
34 | | - |
35 | | - |
36 | | -class InvalidQuantumNumbersError(ValueError): |
37 | | - def __init__(self, ket: AngularKetBase, msg: str = "") -> None: |
38 | | - _msg = f"Invalid quantum numbers for {ket!r}" |
39 | | - if len(msg) > 0: |
40 | | - _msg += f"\n {msg}" |
41 | | - super().__init__(_msg) |
42 | | - |
43 | 34 |
|
44 | 35 | class AngularKetBase(ABC): |
45 | 36 | """Base class for a angular ket (i.e. a simple canonical spin ketstate).""" |
@@ -736,55 +727,3 @@ def sanity_check(self, msgs: list[str] | None = None) -> None: |
736 | 727 | msgs.append(f"{self.f_c=}, {self.j_r=}, {self.f_tot=} don't satisfy spin addition rule.") |
737 | 728 |
|
738 | 729 | super().sanity_check(msgs) |
739 | | - |
740 | | - |
741 | | -def quantum_numbers_to_angular_ket( |
742 | | - species: str | SpeciesObject, |
743 | | - s_c: float | None = None, |
744 | | - l_c: int = 0, |
745 | | - j_c: float | None = None, |
746 | | - f_c: float | None = None, |
747 | | - s_r: float = 0.5, |
748 | | - l_r: int | None = None, |
749 | | - j_r: float | None = None, |
750 | | - s_tot: float | None = None, |
751 | | - l_tot: int | None = None, |
752 | | - j_tot: float | None = None, |
753 | | - f_tot: float | None = None, |
754 | | - m: float | None = None, |
755 | | -) -> AngularKetBase: |
756 | | - r"""Return an AngularKet object in the corresponding coupling scheme from the given quantum numbers. |
757 | | -
|
758 | | - Args: |
759 | | - species: Atomic species. |
760 | | - s_c: Spin quantum number of the core electron (0 for Alkali, 0.5 for divalent atoms). |
761 | | - l_c: Orbital angular momentum quantum number of the core electron. |
762 | | - j_c: Total angular momentum quantum number of the core electron. |
763 | | - f_c: Total angular momentum quantum number of the core (core electron + nucleus). |
764 | | - s_r: Spin quantum number of the rydberg electron (always 0.5). |
765 | | - l_r: Orbital angular momentum quantum number of the rydberg electron. |
766 | | - j_r: Total angular momentum quantum number of the rydberg electron. |
767 | | - s_tot: Total spin quantum number of all electrons. |
768 | | - l_tot: Total orbital angular momentum quantum number of all electrons. |
769 | | - j_tot: Total angular momentum quantum number of all electrons. |
770 | | - f_tot: Total angular momentum quantum number of the atom (rydberg electron + core). |
771 | | - m: Total magnetic quantum number. |
772 | | - Optional, only needed for concrete angular matrix elements. |
773 | | -
|
774 | | - """ |
775 | | - with contextlib.suppress(InvalidQuantumNumbersError, ValueError): |
776 | | - return AngularKetLS( |
777 | | - s_c=s_c, l_c=l_c, s_r=s_r, l_r=l_r, s_tot=s_tot, l_tot=l_tot, j_tot=j_tot, f_tot=f_tot, m=m, species=species |
778 | | - ) |
779 | | - |
780 | | - with contextlib.suppress(InvalidQuantumNumbersError, ValueError): |
781 | | - return AngularKetJJ( |
782 | | - s_c=s_c, l_c=l_c, j_c=j_c, s_r=s_r, l_r=l_r, j_r=j_r, j_tot=j_tot, f_tot=f_tot, m=m, species=species |
783 | | - ) |
784 | | - |
785 | | - with contextlib.suppress(InvalidQuantumNumbersError, ValueError): |
786 | | - return AngularKetFJ( |
787 | | - s_c=s_c, l_c=l_c, j_c=j_c, f_c=f_c, s_r=s_r, l_r=l_r, j_r=j_r, f_tot=f_tot, m=m, species=species |
788 | | - ) |
789 | | - |
790 | | - raise ValueError("Invalid combination of angular quantum numbers provided.") |
0 commit comments