hyperfine

Calculate factors for hyperfine structure in single-electron atoms.

class maxwellbloch.hyperfine.Atom1e(element=None, isotope=None)[source]

Bases: _JsonMixin

Represents an atom object and contains a list of J levels.

add_F_level(F_level)[source]
get_F_level_idx_map()[source]

Maps each element of the mF_list to a F_level index.

get_clebsch_hf_factors(F_level_idxs_a, F_level_idxs_b, q)[source]
Returns a list of Clebsch-Gordan coefficients for the hyperfine

transition dipole matrix elements for each coupled level pair.

Parameters:
  • F_level_idx_a (int) – F level the transition is from (lower level)

  • F_level_idx_b (int) – F level the transition is to (upper level)

  • q (int) – The field polarisation. Choose from [-1, 0, 1].

Returns:

factors, length of mF_list

Return type:

(list)

get_clebsch_hf_factors_iso(F_level_idxs_a, F_level_idxs_b)[source]

Returns a list of Clebsch-Gordan coefficients for the hyperfine transition dipole matrix elements for each coupled level pair. for an isotropic field.

Parameters:
  • F_level_idx_a (int) – F level the transition is from (lower level)

  • F_level_idx_b (int) – F level the transition is to (upper level)

Returns:

factors, length of mF_list

Return type:

(list)

Notes

  • An isotropic field is a field with equal components in all three possible polarizations.

  • Any given polarisation of the field only interacts with one of the three components of the dipole moment, so it is appropriate to average over the couplings (i.e. factor 1/3) rather than sum.

get_coupled_levels(F_level_idxs_a, F_level_idxs_b)[source]

Return all mF-level index pairs between two sets of F levels.

Parameters:
  • F_level_idxs_a – Indices into self.F_levels for the first group.

  • F_level_idxs_b – Indices into self.F_levels for the second group.

Returns:

List of [i, j] pairs where i is an mF index from group a and j is an mF index from group b.

Note

Selection rules (e.g. forbidding J=J’ transitions) are not enforced here. Callers are responsible for passing physically valid level index sets.

get_decay_factors(F_level_idxs_a, F_level_idxs_b)[source]

Returns a list of factors for the collapse operators for each hyperfine coupled level pair.

Parameters:
  • F_level_idx_a (int) – F level the transition is from (lower level)

  • F_level_idx_b (int) – F level the transition is to(upper level)

Notes

This is equivalent to the clebsch_hf_factors for all polarisations as decay photons are of all polarisations. Note that for any coupled levels pair there will be only one n on-zero factor to sum.

Returns: (list): factors, length of mF_list

get_energies()[source]

Returns a list of energies for each mF level in all J levels.

get_json_dict()[source]
get_mF_list()[source]

Unnests the mF levels into a single list of dicts.

get_num_mF_levels()[source]

Returns the total number of mF levels in all J levels.

get_strength_factor(F_level_idx_lower, F_level_idx_upper, mF_level_lower_idx=0)[source]
Relative hyperfine transition strength factors.

Equal for each ground state (mF_level_lower_idx), so this parameter never needs to be set, just used for testing that claim.

Notes

  • Sum of the matrix elements from a single ground-state sublevel to the levels in a particular F’ energy level.

  • The sum S_{FF’} is independent of the ground state sublevel chosen.

  • The sum of S_{FF’} over upper F levels should be 1.

Refs:

[0]: https://steck.us/alkalidata/rubidium87numbers.pdf

class maxwellbloch.hyperfine.LevelF(I, J, F, energy=0.0, mF_energies=None)[source]

Bases: _JsonMixin

Represents an F hyperfine structure level and holds its magnetic

sublevels mF.

F

Total atomic angular momentum number F.

Type:

float

energy

Energy of the level.

Type:

float

mf_levels

Energies of 2F+1 hyperfine sublevels.

Type:

list, length 2F+1

Notes

  • The magnitude of F can take values in the range

    |J - I| <= F <= J + I. A ValueError is raised if this is not satisfied.

  • The mF_energies are set _relative_ to the F level energy.

build_mF_levels(mF_energies=None)[source]

Builds the mF sublevels of the F level.

Parameters:

mF_energies (list, length 2F+1) – Energies of the 2F+1 hyperfine sublevels.

Returns:

self.mF_levels

get_json_dict()[source]
get_mF_range()[source]

Returns a range representing the m_F angular momentum sublevels [-F, -F+1, …, F-1, F].

class maxwellbloch.hyperfine.LevelMF(mF, energy=0.0)[source]

Bases: _JsonMixin

Represents an m_F hyperfine sublevel.

mF

Angular momentum number m_F

Type:

float

energy

The energy of the level

Type:

float

get_json_dict()[source]