You're reading the documentation of the v0.8. For the latest released version, please have a look at v0.12.

Polarization

Polarization encoding is stored in Basic State objects as a special P Annotation.

Their value follows Jones calculus. Annotations values are represented by two angles \((\theta, \phi)\).

The representation of the polarization in \(\begin{pmatrix}E_h\\E_v\end{pmatrix}\) basis is obtained by applying Jones conversion: \(\overrightarrow{J}=\begin{pmatrix}\cos \frac{\theta}{2}\\e^{i\phi}\sin \frac{\theta}{2}\end{pmatrix}\). The same can also be noted: \(\cos \frac{\theta}{2}\ket{H}+e^{i\phi}\sin \frac{\theta}{2}\ket{V}\).

For instance, the following defines a polarization with \(\theta=\frac{\pi}{2},\phi=\frac{\pi}{4}\) corresponding to Jones vector: \(\begin{pmatrix}\cos \frac{\pi}{4}\\e^{i\frac{\pi}{4}}\sin \frac{\pi}{4}\end{pmatrix}\)

>>> p = pcvl.Polarization(sp.pi/2, sp.pi/4)
>>> p.project_ev_eh()
(sqrt(2)/2, sqrt(2)*exp(I*pi/4)/2)

It is also possible to use H, V, D, A, L and R as shortcuts to predefined values:

Code

\((\phi,\theta)\)

Jones vector

H

\((0,0)\)

\(\begin{pmatrix}1\\0\end{pmatrix}\)

V

\((\pi,0)\)

\(\begin{pmatrix}0\\1\end{pmatrix}\)

D

\((\frac{\pi}{2},0)\)

\(\frac{1}{\sqrt 2}\begin{pmatrix}1\\1\end{pmatrix}\)

A

\((\frac{\pi}{2},\pi)\)

\(\frac{1}{\sqrt 2}\begin{pmatrix}1\\-1\end{pmatrix}\)

L

\((\frac{\pi}{2},\frac{\pi}{2})\)

\(\frac{1}{\sqrt 2}\begin{pmatrix}1\\i\end{pmatrix}\)

R

\((\frac{\pi}{2},\frac{3\pi}{2})\)

\(\frac{1}{\sqrt 2}\begin{pmatrix}1\\-i\end{pmatrix}\)

>>> p = pcvl.Polarization("D")
>>> p.theta_phi
(pi/2, 0)
>>> p.project_ev_eh())
(sqrt(2)/2, sqrt(2)/2)

Defining states with polarization is then simply to use the Annotation P:

>>> st2 = pcvl.BasicState("|{P:H},{P:V}>")
>>> st2 = pcvl.BasicState("|{P:(sp.pi/2,sp.pi/3)>")

If polarization is used for any photon in the state, the state is considered as using polarization:

>>> pcvl.BasicState("|{P:H},0,{P:V}>").has_polarization
True
>>> pcvl.BasicState("|{P:V},0,1>").has_polarization
True
>>> pcvl.BasicState("|1,0,1>").has_polarization
False

Note

To simplify the notation:

  • linear polarization can be defined with a single parameter: {P:sp.pi/2} is equivalent to {P:(sp.pi/2,0}

  • if the polarization annotation is omitted for some photons, these photons will be considered as having a horizontal polarization.

See Polarization Object code documentation.