The SKIRT project
advanced radiative transfer for astrophysics
Public Member Functions | Private Attributes | List of all members
StokesVector Class Reference

#include <StokesVector.hpp>

Inheritance diagram for StokesVector:
Inheritance graph
[legend]

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
 

Detailed Description

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.

Constructor & Destructor Documentation

◆ StokesVector() [1/2]

StokesVector::StokesVector ( )
inline

The default constructor initializes the Stokes vector to an unpolarized state.

◆ StokesVector() [2/2]

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.

Member Function Documentation

◆ applyMueller() [1/2]

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}\).

◆ applyMueller() [2/2]

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}\).

◆ isPolarized()

bool StokesVector::isPolarized ( ) const
inline

This function returns true if the Stokes vector represents polarised radiation, and false if it represents unpolarised radiation.

◆ linearPolarizationDegree()

double StokesVector::linearPolarizationDegree ( ) const

This function returns the linear polarization degree for the Stokes vector.

◆ normal()

Direction StokesVector::normal ( ) const
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.

◆ polarizationAngle()

double StokesVector::polarizationAngle ( ) const

This function returns the polarization position angle in radians for the Stokes vector.

◆ rotateIntoPlane()

double StokesVector::rotateIntoPlane ( Direction  k,
Direction  knew 
)

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.

◆ rotateStokes()

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}. \]

◆ setPolarized() [1/3]

void StokesVector::setPolarized ( const StokesVector polarization)

This function copies the specified Stokes vector into the receiver.

◆ setPolarized() [2/3]

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.

◆ setPolarized() [3/3]

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.

◆ setUnpolarized()

void StokesVector::setUnpolarized ( )
inline

This function sets the Stokes vector to an unpolarized state.

◆ stokes()

void StokesVector::stokes ( double &  I,
double &  Q,
double &  U,
double &  V 
)
inline

This function returns the Stokes parameters in the provided arguments.

◆ stokesI()

double StokesVector::stokesI ( ) const
inline

This function returns the Stokes parameter \(I\), which is always equal to one.

◆ stokesQ()

double StokesVector::stokesQ ( ) const
inline

This function returns the Stokes parameter \(Q\).

◆ stokesU()

double StokesVector::stokesU ( ) const
inline

This function returns the Stokes parameter \(U\).

◆ stokesV()

double StokesVector::stokesV ( ) const
inline

This function returns the Stokes parameter \(V\).

◆ totalPolarizationDegree()

double StokesVector::totalPolarizationDegree ( ) const

This function returns the total polarization degree for the Stokes vector.


The documentation for this class was generated from the following file: