nikolasibalic / ARC-Alkali-Rydberg-Calculator

Object-oriented Python library for computation of properties of highly-excited Rydbeg states of alkali and divalent atoms.
https://atomcalc.org
BSD 3-Clause "New" or "Revised" License
91 stars 81 forks source link

Added `getPower` Method to Calculate Laser Power for Resonantly Driven Atoms #169

Open francois-marie opened 5 months ago

francois-marie commented 5 months ago

Description

This PR introduces a new method getPower to the ARC package. The getPower method calculates the laser power required for resonantly driving a transition between two atomic states in the center of a TEM00 mode of a driving field.

Method Details

def getPower(
    self, n1, l1, j1, mj1, n2, l2, j2, mj2, q, rabiFrequency, laserWaist, s=0.5
):
    """
    Returns a laser power for resonantly driven atom in a
    center of TEM00 mode of a driving field

    Args:
        n1, l1, j1, mj1 : state from which we are driving transition
        n2, l2, j2, mj2 : state to which we are driving transition
        q : laser polarization (-1,0,1 correspond to :math:`\\sigma^-`,
            :math:`\\pi` and :math:`\\sigma^+` respectively)
        rabiFrequency : laser power in units of rad/s
        laserWaist : laser :math:`1/e^2` waist (radius) in units of m
        s (float): optional, total spin angular momentum of state.
            By default 0.5 for Alkali atoms.

    Returns:
        float:
            laserPower in units of W
    """
    if abs(mj2) - 0.1 > j2:
        return 0
    dipole = (
                self.getDipoleMatrixElement(
                    n1, l1, j1, mj1, n2, l2, j2, mj2, q, s=s
                )
                * C_e
                * physical_constants["Bohr radius"][0]
            )
    return pi/4 * C_c * epsilon_0 * (laserWaist * hbar * rabiFrequency / abs(dipole))**2

Parameters

Returns

Usage

This method can be used to determine the necessary laser power for experiments involving resonantly driven transitions in Alkali atoms. It takes into account the dipole matrix element and other physical constants to provide an accurate calculation.

Example

# Quantum numbers for the ground and excited states
ground_state = [5, 0, 0.5, 0.5]
excited_state = [6, 1, 1.5, 1.5]

# Desired Rabi frequency
target_rabi_freq = 2*pi*70e6  # in Hz

# Waist of the laser beam
waist = 200e-6  # in m

# Polarization of the laser
q = 1

laserPower = getPower(
    *ground_state, *excited_state, q, rabiFrequency=target_rabi_freq, laserWaist=waist
)
print(f"{laserPower*1e3=:.2f} mW")