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 polarization

ATTENTION : 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: Polarization

Circular Left polarization (observer point of vue)

class atomsmltr.environment.lasers.polarization.CircularRight[source]#

Bases: Polarization

Circular Right polarization (observer point of vue)

class atomsmltr.environment.lasers.polarization.Horizontal[source]#

Bases: Polarization

Horizontal polarization (along y in the laser frame)

class atomsmltr.environment.lasers.polarization.Linear(angle: float)[source]#

Bases: Polarization

Arbitrary linear polarization.

Here, angle is 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

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: ABC

An object to handle laser polarization.

gen_infostring_obj()[source]#

Returns an info string object for the current polarization state

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 LaserBeam class

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 :

|Psi⟩ = exp(-i*v) cos(u/2) |R⟩ + exp(i*v) sin(u/2) |L⟩

with |R⟩, |L⟩ the right- and left-handed circular polarization states. We also have

|x⟩ = |V⟩ = (1/sqrt(2)) (|L⟩ + |R⟩) |y⟩ = |H⟩ = (i/sqrt(2)) (|L⟩ - |L⟩)

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 :

|Psi⟩ = exp(-i*v) cos(u/2) |R⟩ + exp(i*v) sin(u/2) |L⟩

with |R⟩, |L⟩ the right- and left-handed circular polarization states. We also have

|x⟩ = |V⟩ = (1/sqrt(2)) (|L⟩ + |R⟩) |y⟩ = |H⟩ = (i/sqrt(2)) (|L⟩ - |L⟩)

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'
refresh_polarization_vector_angles()[source]#

Updates the polarization vector angles u & v to match the current value of the polarization vector.

class atomsmltr.environment.lasers.polarization.Vector(vector: ndarray)[source]#

Bases: Polarization

Allows to define an arbitrary polarization.

The polarization vector has to be given with the vector argument. vector 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 polarization

ATTENTION : 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: Polarization

Vertical polarization (along x in the laser frame)