@@ -708,3 +708,53 @@ def sanity_check(self, msgs: list[str] | None = None) -> None:
708708 msgs .append (f"{ self .f_c = } , { self .j_r = } , { self .f_tot = } don't satisfy spin addition rule." )
709709
710710 super ().sanity_check (msgs )
711+
712+
713+ def quantum_numbers_to_angular_ket (
714+ species : str | SpeciesObject ,
715+ s_c : float | None = None ,
716+ l_c : int = 0 ,
717+ j_c : float | None = None ,
718+ f_c : float | None = None ,
719+ s_r : float = 0.5 ,
720+ l_r : int | None = None ,
721+ j_r : float | None = None ,
722+ s_tot : float | None = None ,
723+ l_tot : int | None = None ,
724+ j_tot : float | None = None ,
725+ f_tot : float | None = None ,
726+ m : float | None = None ,
727+ ) -> AngularKetBase :
728+ r"""Return an AngularKet object in the corresponding coupling scheme from the given quantum numbers.
729+
730+ Args:
731+ species: Atomic species.
732+ s_c: Spin quantum number of the core electron (0 for Alkali, 0.5 for divalent atoms).
733+ l_c: Orbital angular momentum quantum number of the core electron.
734+ j_c: Total angular momentum quantum number of the core electron.
735+ f_c: Total angular momentum quantum number of the core (core electron + nucleus).
736+ s_r: Spin quantum number of the rydberg electron always 0.5)
737+ l_r: Orbital angular momentum quantum number of the rydberg electron.
738+ j_r: Total angular momentum quantum number of the rydberg electron.
739+ s_tot: Total spin quantum number of all electrons.
740+ l_tot: Total orbital angular momentum quantum number of all electrons.
741+ j_tot: Total angular momentum quantum number of all electrons.
742+ f_tot: Total angular momentum quantum number of the atom (rydberg electron + core)
743+ m: Total magnetic quantum number.
744+ Optional, only needed for concrete angular matrix elements.
745+
746+ """
747+ if all (qn is None for qn in [j_c , f_c , j_r ]):
748+ return AngularKetLS (
749+ 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
750+ )
751+ if all (qn is None for qn in [s_tot , l_tot , f_c ]):
752+ return AngularKetJJ (
753+ 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
754+ )
755+ if all (qn is None for qn in [s_tot , l_tot , j_tot ]):
756+ return AngularKetFJ (
757+ 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
758+ )
759+
760+ raise ValueError ("Invalid combination of angular quantum numbers provided." )
0 commit comments