#include <StokesVector.hpp>
Public Member Functions | |
StokesVector () | |
StokesVector (double I, double Q, double U, double V, Direction n) | |
void | applyMueller (double S11, double S12, double S22, double S33, double S34, double S44) |
void | applyMueller (double S11, double S12, double S33, double S34) |
bool | isPolarized () const |
double | linearPolarizationDegree () const |
Direction | normal () const |
double | polarizationAngle () const |
double | rotateIntoPlane (Direction k, Direction knew) |
void | rotateStokes (double phi, Direction k) |
void | setPolarized (const StokesVector &polarization) |
void | setPolarized (double I, double Q, double U, double V) |
void | setPolarized (double I, double Q, double U, double V, Direction n) |
void | setUnpolarized () |
void | stokes (double &I, double &Q, double &U, double &V) |
double | stokesI () const |
double | stokesQ () const |
double | stokesU () const |
double | stokesV () const |
double | totalPolarizationDegree () const |
Private Attributes | |
Direction | _normal |
bool | _polarized |
double | _Q |
double | _U |
double | _V |
An object of the StokesVector class describes the polarization state of a photon packet, and offers functions to apply certain transformations to it. Specifically, a Stokes vector contains the four Stokes parameters \(I\), \(Q\), \(U\), and \(V\) that are defined with respect to a reference direction. For efficiency reasons we store the normal to the propagation direction of the photon and the Stokes vector reference direction instead of the reference direction itself. The first parameter ( \(I\)) indicates the total intensity, and the remaining parameters ( \(Q\), \(U\), and \(V\)) represent various degrees of linear and circular polarization. Stokes parameters have a dimension of intensity. However, in our implementation, the parameters are normalized to dimensionless values through division by \(I\). Consequently \(I=1\) at all times, so that this parameter does not need to be stored. As the StokesVector does not store the propagation direction, it has to be provided for most transformations. The StokesVector is initialized in an unpolarized state. While unpolarized, the stored normal is the zero vector.
|
inline |
The default constructor initializes the Stokes vector to an unpolarized state.
StokesVector::StokesVector | ( | double | I, |
double | Q, | ||
double | U, | ||
double | V, | ||
Direction | n | ||
) |
This constructor initializes the Stokes vector to the specified parameter values, after normalizing them through division by \(I\). If \(I=0\), the Stokes vector is set to an unpolarized state.
void StokesVector::applyMueller | ( | double | S11, |
double | S12, | ||
double | S22, | ||
double | S33, | ||
double | S34, | ||
double | S44 | ||
) |
This function transforms the polarization state described by this Stokes vector by applying to its existing state a Mueller matrix of the form
\[ {\bf{M}} \propto \begin{pmatrix} {\rm S}_{11} & {\rm S}_{12} & 0 & 0 \\ {\rm S}_{12} & {\rm S}_{22} & 0 & 0 \\ 0 & 0 & {\rm S}_{33} & {\rm S}_{34} \\ 0 & 0 & -{\rm S}_{34} & {\rm S}_{44} \end{pmatrix}, \]
assuming that \({\rm S}_{21} = {\rm S}_{12}\) and \({\rm S}_{43} = -{\rm S}_{34}\).
void StokesVector::applyMueller | ( | double | S11, |
double | S12, | ||
double | S33, | ||
double | S34 | ||
) |
This function transforms the polarization state described by this Stokes vector by applying to its existing state a Mueller matrix of the form
\[ {\bf{M}} \propto \begin{pmatrix} {\rm S}_{11} & {\rm S}_{12} & 0 & 0 \\ {\rm S}_{12} & {\rm S}_{11} & 0 & 0 \\ 0 & 0 & {\rm S}_{33} & {\rm S}_{34} \\ 0 & 0 & -{\rm S}_{34} & {\rm S}_{33} \end{pmatrix}, \]
assuming that \({\rm S}_{21} = {\rm S}_{12}\), \({\rm S}_{43} = -{\rm S}_{34}\), \({\rm S}_{22} = {\rm S}_{11}\) and \({\rm S}_{44} = {\rm S}_{44}\).
|
inline |
This function returns true if the Stokes vector represents polarised radiation, and false if it represents unpolarised radiation.
double StokesVector::linearPolarizationDegree | ( | ) | const |
This function returns the linear polarization degree for the Stokes vector.
|
inline |
This function returns the normal to the propagation direction of the photon and the reference direction in which the Stokes vector is defined. If the Stokes vector is in an unpolarized state, the zero vector is returned.
double StokesVector::polarizationAngle | ( | ) | const |
This function returns the polarization position angle in radians for the Stokes vector.
This function adjusts the stokes vector reference axis so it is in the plane of the given propagation direction \(\bf{k}\) and any direction \(\bf{knew}\). The stored Stokes parameters are updated and the reference direction created if necessary. The function returns the angle by which the reference axis was rotated.
void StokesVector::rotateStokes | ( | double | phi, |
Direction | k | ||
) |
This function adjusts the Stokes vector for a rotation of the reference axis about the given flight direction \(\bf{k}\) over the specified angle \(\phi\), clockwise when looking along \(\bf{k}\). Such rotation is described by the transformation matrix
\[ {\bf{R}} = \begin{pmatrix} 1 & 0 & 0 & 0 \\ 0 & \cos 2\phi & \sin 2\phi & 0 \\ 0 & -\sin 2\phi & \cos 2\phi & 0 \\ 0 & 0 & 0 & 1 \end{pmatrix}. \]
void StokesVector::setPolarized | ( | const StokesVector & | polarization | ) |
This function copies the specified Stokes vector into the receiver.
void StokesVector::setPolarized | ( | double | I, |
double | Q, | ||
double | U, | ||
double | V | ||
) |
This function sets the Stokes vector to the specified vector components leaving the normal to the reference direction unchanged. This function can be used when the reference direction should not be updated, or in case it is determined by an external convention and no further transformations will be performed on the Stokes vector. The \(Q, U, V\) components are normalized through division by \(I\). If \(I=0\), the Stokes vector is set to an unpolarized state.
void StokesVector::setPolarized | ( | double | I, |
double | Q, | ||
double | U, | ||
double | V, | ||
Direction | n | ||
) |
This function sets the Stokes vector to the specified vector components and the specified normal to the reference direction. The \(Q, U, V\) components are normalized through division by \(I\). If \(I=0\) or \(n\) is the null vector, the Stokes vector is set to an unpolarized state.
|
inline |
This function sets the Stokes vector to an unpolarized state.
|
inline |
This function returns the Stokes parameters in the provided arguments.
|
inline |
This function returns the Stokes parameter \(I\), which is always equal to one.
|
inline |
This function returns the Stokes parameter \(Q\).
|
inline |
This function returns the Stokes parameter \(U\).
|
inline |
This function returns the Stokes parameter \(V\).
double StokesVector::totalPolarizationDegree | ( | ) | const |
This function returns the total polarization degree for the Stokes vector.