Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improved energy calculation for high l states (l>5) and quantum defect updates for Cs and K. #173

Open
wants to merge 4 commits into
base: draft_v3.6.0
Choose a base branch
from

Conversation

johnny-sa
Copy link

Overview

These changes are aimed at improving the way arc calculates the quantum defect (and hence energy) of states with high angular momentum (l>5). This will improve accuracy of Stark maps etc. arc has an edge case where quantum defects for states with l >= 5 are approximated by scaling the measured (tabled) value of the g (l=4) quantum defect.

I also include some updates to the Caesium and potassium quantum defects which will improve the calculation of energies. These are from Deiglmayr, Johannes, et al. Physical Review A 93.1 (2016): 013424. and Peper, Michael, et al. Physical Review A 100.1 (2019): 012501.

Methods

The code replaces the current method by direct calculation of the polarisation energy (effective adiabatic polarisation energy) which is more accurate than the current method. This requires two constants $\alpha_{d}$ and $\alpha_{q}$, the effective dipole and quadrupole polarizability of the Ion species (Cs+, Rb+... etc.) and the expectation values of the hydrogenic wavefunction (where closed forms exist). The former are taken from the available literature which are referenced in the code. The latter is calculated, (r4 and r6). I have also added hydrogenic fine structure splitting to high l states to lift degeneracy.

Examples

Transition Old Method (GHz) New Method (GHz) Literature (GHz)
Cs 17g -> 17h [3][5] 6.119 6.013 6.018(3), 6.0072(7)
Cs 17h -> 17i [3][5] 1.850 1.855 1.850(1), 1.8513(7)
Cs 15g -> 15h [5] 8.814 8.708 8.7008(4)
Cs 15h -> 15i [5] 2.693 2.681 2.6751(5)
Cs 16i -> 16k [5] 0.801 0.8396 0.840(1)
Cs 17k -> 17l [5] 0.280 0.3058 0.306(1)
Rb 18g -> 18h [4] 2.964 2.8868 2.8704
Rb 18h -> 18i [4] 0.884 0.8985 0.8976
Rb 19g -> 19h [4] 2.526 2.456 2.4447
Rb 19h -> 19i [4] 0.752 0.7657 0.7659

Most improvements are to the calculation of h (l=5) levels which are over ~100MHz different from measured. The others improve from ~15 MHz to <5 MHz accuracy.

Details

The current approximation in the code is

$$\delta_{\ell} = \delta_{g}(4/l)^{5}$$

This approximation is from [1] and is based on the formula for the polarisation energy (for an introduction see [2]) that is

$$\delta E = \frac{\delta_{l}}{n^{3}} = -\frac{1}{2}\alpha_{d}\langle r^{-4}\rangle -\frac{1}{2}\alpha_{q}\langle r^{-6}\rangle$$ where $\alpha_{d}$ are constants associated with the Ion (e.g. Cs+).

By approximating $$\langle r^{-4} \rangle \approx \frac{3}{2n^{3}l^{5}}$$ and taking the $\langle r^{-6}\rangle$ expression to be zero, we find

$$\delta_{\ell} \simeq \frac{3\alpha_{\rm d}}{4\ell^{5}} \Rightarrow \ell^{5}\delta_{\ell} = \textrm{const.}$$

which is the current approximation. Instead, the code calculates the full expression for the polarisation and adds this onto the hydrogenic energy. We also add hydrogenic energy splitting's to states with l>5 (which is set to be zero presently). This is expected and seen in [4] as there is little core penetration in high angular momentum states.

References:

[1] - Gallagher, Thomas F. "Rydberg atoms."
[2] - Freeman and Kleppner Physical Review A 14.5 (1976): 1614.
[3] - Safinya, K. A., T. F. Gallagher, and W. Sandner. Physical Review A 22.6 (1980): 2672.
[4] - Berl, S. J., et al. Physical Review A 102.6 (2020): 062818.
[5] - Unpublished own work (in prep.)

Added more accurate energy for states with non-penetrating states (l>5). A (worse) approximation was used before which itself is based on the polarisation energy.
Updated qds for K and Cs and Core polarisabilities to include two new publications. Also added a property to each class a_eff_d and a_eff_q which are the effective dipole and quadrupole polarisabilities of the species Ion (e.g. Cs+). This is used when calculating the polarisation energy which is used for high l states (l >5)
Improved accuracy of high l states to include effective polarisability calculation of energies. Uses constants from literature for the effective polarisabilities.
Also included hydrogenice fine stucture for these states (also g states) to remove degeneracy
@nikolasibalic nikolasibalic self-requested a review July 8, 2024 05:55
@nikolasibalic nikolasibalic added this to the v3.6.0 milestone Jul 8, 2024
@nikolasibalic nikolasibalic changed the base branch from master to draft_v3.6.0 August 3, 2024 12:51
Copy link
Owner

@nikolasibalic nikolasibalic left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@johnny-sa Many thanks for this fantastic contribution, very nicely documented!

Could you please just review the comments above? I will try to release update version as soon as I hear back from you. Many thanks!

else:
FS = (2*self.scaledRydbergConstant)*pow(scipy.constants.alpha,2)/(2*l*(l+1)*pow(n,3))
LI = -FS/(l+0.5)
return -self.scaledRydbergConstant / ((n) ** 2) -0.5*LI*(j*(j+1)-l*(l+1)-s*(s+1)) - 2*self.scaledRydbergConstant*defect
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is difference between l==4 and l>=4 cases here? It seems to me that second one is just expansion for small defect value right? If so, I would rather keep one case (without expansion). Please comment.

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is meaning of FS and LS ? Note that we try in general to stick to convention of camelCase naming of variables.

Additionally, where can you please add in code comment that references this equations in the literature? I am maybe looking at wrong place, but I cannot find them.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is difference between l==4 and l>=4 cases here? It seems to me that second one is just expansion for small defect value right? If so, I would rather keep one case (without expansion). Please comment.

I think that the expansion is needed in the case of l>=5 (not l>=4) as we are assuming that the energy difference is due to a perturbation and that there are no other effects (penetration, exchange interaction). i.e. We are not really calculating a quantum defect but an energy correction. I have simply used getQuantumDefect' as a way of obtaining a change in energy using the stored n,l,j values.

If you would like, it may be more appropriate to define one (or two) new functions to remove this confusion. i.e. getPolarisationEnergy' (and getHydrogenFS' splitting for the other) so that it is clear l>5 is treated differently.

That is, a correction to the hydrogenic energy level from some polarisation energy calculated from perturbation theory.

Copy link
Author

@johnny-sa johnny-sa Aug 5, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is meaning of FS and LS ? Note that we try in general to stick to convention of camelCase naming of variables.

Additionally, where can you please add in code comment that references this equations in the literature? I am maybe looking at wrong place, but I cannot find them.

Apologies, FS and LS are constants that I defined that are used in the convention of The Theory Of Atomic Spectra by [Shortley, G.h] (pg. 193 onwards). and from https://staff.fnwi.uva.nl/j.t.m.walraven/walraven/Publications_files/2023-AtomicPhysics.pdf section 4.5.2 onwards. FS and LS were mainly defined to improve the readability of the code (but are completely arbitrary). They could be renamed to fineStructSplit (for FS).

This is a bit hard to follow so I propose the following changes (following Foot. Atomic Physics pg. 37-38. So the code now reads.

`if l <= 3:
return -self.scaledRydbergConstant / ((n - defect) ** 2)
elif l == 4:
fineStructSplit = -(2self.scaledRydbergConstant)pow(scipy.constants.alpha,2)/(2l(l+0.5)*(l+1)*pow(n,3))

        if j == l + 0.5:
             
             fineStructSplit *= 0.5*l

        elif j == l - 0.5:

            fineStructSplit *= -1*0.5*(l+1)

        return -self.scaledRydbergConstant / ((n - defect) ** 2) - fineStructSplit
    else:
        fineStructSplit = -(2*self.scaledRydbergConstant)*pow(scipy.constants.alpha,2)/(2*l*(l+0.5)*(l+1)*pow(n,3))

        if j == l + 0.5:
             
             fineStructSplit *= 0.5*l

        elif j == l - 0.5:

            fineStructSplit *= -1*0.5*(l+1)
            
        return -self.scaledRydbergConstant / ((n) ** 2) - fineStructSplit - 2*self.scaledRydbergConstant*defect`

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is difference between l==4 and l>=4 cases here? It seems to me that second one is just expansion for small defect value right? If so, I would rather keep one case (without expansion). Please comment.

I think that the expansion is needed in the case of l>=5 (not l>=4) as we are assuming that the energy difference is due to a perturbation and that there are no other effects (penetration, exchange interaction). i.e. We are not really calculating a quantum defect but an energy correction. I have simply used getQuantumDefect' as a way of obtaining a change in energy using the stored n,l,j values.

If you would like, it may be more appropriate to define one (or two) new functions to remove this confusion. i.e. getPolarisationEnergy' (and getHydrogenFS' splitting for the other) so that it is clear l>5 is treated differently.

That is, a correction to the hydrogenic energy level from some polarisation energy calculated from perturbation theory.

To add to this, it is also how a recent treatment of alkali metal energies has been done. See https://journals.aps.org/pra/abstract/10.1103/PhysRevA.100.012501 Section VII.

defect = (
0.5 * (self.a_d_eff * r4 + self.a_q_eff * r6)
)

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe above is correct based on your numerical results, however, is there some reference where these equations have been originally derived, that we can reference in commend directly in code?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe the original is from J. E. Mayer and M. G. Mayer, Phys. Bev. 43, 605
(1933).

The Freeman and Kleppner Physical Review A 14.5 (1976): 1614 I reference cites this work.

On overview is also given in pgs 340-364 `Spectroscopy_of_alkali_Rydberg_states' in Gallagher's Rydberg atoms (which they themselves cite Mayer and Mayer as the origin)

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@nikolasibalic nikolasibalic mentioned this pull request Aug 3, 2024
Changed format of hydrogenic fine structure splitting (L.S coupling) for high l states.

Added references for calculating polarisation energy.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants