Polarization#
Here we implement the Polarization class that we use to define the polarization of lasers
Remarks#
We define the polarization in the frame of the laser, with laser propagation along z.
We denote x as the ‘horizontal’ axis and y as the ‘vertical’ axis.
For circular polarizations, we take the observer convention.
To have a combined formalism for all polarization, in the end we define a polarization vector p_vec,
following the Poincarré formalism. ATTENTION: there might be different ways of defining this vector,
refer to the package documentation for a thorough definition.
In the case of ‘linear’ polarization, an additionnal argument angle has to be provided, that gives
the angle of the linear polarization with respect to the x axis. Hence angle = 0 corresponds to a
linear polarization along x, and angle = pi/2 to a linear polarization along y
In the case of ‘vector’ polarization, polarization vector has to be given with the vec argument. vec
are the cartesian coordinates of the vector in the (x,y,z) basis. For instance :
> vec = (1, 0, 0) : linear polarization along x> vec = (0, 1, 0) : linear polarization along y> vec = (0, 0, 1) : circular right polarization> vec = (0, 0, -1) : circular left polarizationATTENTION : for ease of use, the vector does not have to be normalized, but the resulting one will be.
- class atomsmltr.environment.lasers.polarization.CircularLeft[source]#
Bases:
PolarizationCircular Left polarization (observer point of vue)
- class atomsmltr.environment.lasers.polarization.CircularRight[source]#
Bases:
PolarizationCircular Right polarization (observer point of vue)
- class atomsmltr.environment.lasers.polarization.Horizontal[source]#
Bases:
PolarizationHorizontal polarization (along y in the laser frame)
- class atomsmltr.environment.lasers.polarization.Linear(angle: float)[source]#
Bases:
PolarizationArbitrary linear polarization.
Here,
angleis the angle of the linear polarization with respect to the x axis. Henceangle = 0corresponds to a linear polarization along x, andangle = pi/2to a linear polarization along y- Parameters:
angle (float) – angle of the arbitrary linear polarization w.r.t the x axis (radians)
- property angle: float#
angle of the arbitrary linear polarization w.r.t the x axis (radians)
- Type:
float
- class atomsmltr.environment.lasers.polarization.Polarization[source]#
Bases:
ABCAn object to handle laser polarization.
- get_polarization_vector_angles() tuple[source]#
Returns the angles describing the current polarization vector.
(see documentation for thorough description)
- Returns:
u, v – the u (polar) and v (azimuthal) angles
- Return type:
floats
Notes
The polarization is decribed in the Poincarré/Bloch-like sphere as a vector. This function yields the angles u (polar) and v (azimuthal)
Note that we do not use theta or phi as those angles are already used to describe the orientation of the laser propagation vector in the
LaserBeamclass
- get_polarization_vector_projection(target: str) complex[source]#
Returns the scalar projection of the current polarization vector on a target polarization state
- Parameters:
target (str) – the state on which to project (see docstring Notes)
- Returns:
proj – the projection
- Return type:
complex
Notes
The polarization Psi is defined as :
with |R⟩, |L⟩ the right- and left-handed circular polarization states. We also have
Target should refer to the special polarization states defined in the class :
>>> 'vertical', 'horizontal', 'circular left', 'circular right'
and corresponding shorthands:
>>> 'V' or 'x', 'H' or 'y', 'R', 'L'
- get_polarization_vector_projection_norm(target: str) float[source]#
Returns the squared norm of scalar projection of the current polarization vector on a target polarization state
- Parameters:
target (str) – the state on which to project (see docstring Notes)
- Returns:
norm – the squared norm of the projection
- Return type:
float
Notes
The polarization Psi is defined as :
with |R⟩, |L⟩ the right- and left-handed circular polarization states. We also have
Target should refer to the special polarization states defined in the class :
>>> 'vertical', 'horizontal', 'circular left', 'circular right'
and corresponding shorthands:
>>> 'V' or 'x', 'H' or 'y', 'R', 'L'
- class atomsmltr.environment.lasers.polarization.Vector(vector: ndarray)[source]#
Bases:
PolarizationAllows to define an arbitrary polarization.
The polarization vector has to be given with the
vectorargument.vectorare the cartesian coordinates of the vector in the (x,y,z) basis.For instance :
> vec = (1, 0, 0): linear polarization along x> vec = (0, 1, 0): linear polarization along y> vec = (0, 0, 1): circular right polarization> vec = (0, 0, -1): circular left polarizationATTENTION : for ease of use, the vector does not have to be normalized, but the resulting one will be.
- Parameters:
vector (array of shape (,3)) – polarization vector cartesian coordinates in laser frame (see documentation for its exact definition)
- property vector#
polarization vector cartesian coordinates in laser frame
- Type:
array of shape (3,)
- class atomsmltr.environment.lasers.polarization.Vertical[source]#
Bases:
PolarizationVertical polarization (along x in the laser frame)