dylab/HelperClasses/TransitionClass.py
2022-07-30 21:50:53 +02:00

58 lines
2.1 KiB
Python

# A self defined constant dictionary class
# It is used for storing the physical constant related to transition
import numpy as np
import scipy.constants as constant
class Transition(dict):
class ConstError(TypeError):
pass
def __setitem__(self, name, value):
if name in self.__dict__:
raise self.ConstError("Can't change const %s" % name)
super().__setitem__(name, value)
self.__dict__[name] = value
def __getattr__(self, name):
return self[name]
def __dir__(self):
return sorted(self)
def __init__(self, wavelength, linewidth, landauFactor):
super().__init__()
wavevector = 2 * constant.pi / wavelength
frequency = constant.speed_of_light / wavelength
circular_frequency = 2 * constant.pi * frequency
natural_linewidth = 2 * constant.pi * linewidth
lifetime = 1 / natural_linewidth
saturation_intensity = 2 * constant.pi ** 2 / 3 * \
constant.hbar * constant.c * natural_linewidth / wavelength ** 3
resonance_cross_section = constant.hbar * circular_frequency * \
natural_linewidth / 2 / saturation_intensity
self['wavelength'] = wavelength
self['wavevector'] = wavevector
self['frequency'] = frequency
self['circular_frequency'] = circular_frequency
self['linewidth'] = linewidth
self['natural_linewidth'] = natural_linewidth
self['landauFactor'] = landauFactor
self['lifetime'] = lifetime
self['saturation_intensity'] = saturation_intensity
self['resonance_cross_section'] = resonance_cross_section
def get_rabi_frequency(self, intensity):
rabi_frequency = np.sqrt(intensity / self['saturation_intensity'] / 2) * self['natural_linewidth']
return rabi_frequency
def get_cross_section(self, detuning, intensity):
cross_section = self['resonance_cross_section'] / (
1 + 4 * (detuning / self['natural_linewidth']) ** 2 + intensity / self['saturation_intensity'])
return cross_section