|
SCATMECH > Classes and Functions >
Polarization >
StokesVector
class StokesVector
The class StokesVector represents a Stokes vector in
the Stokes-Mueller representation of polarization states.
Arithmetic operations between Mueller matrices and Stokes
vectors, various properties of a Stokes vector, and
transformation operations are defined.
The elements of the Stokes vector are
(Is+Ip,
Is-Ip, Is+p-Is-p,
Ilcp-Ircp), where
Is is the intensity of the light
polarized in the s-direction, Ip is the
intensity of the light polarized in the p-direction,
Is+p is the intensity of the light
polarized in the s+p-direction, Is-p is
the intensity of the light polarized in the s-p-direction,
Ilcp is the left circularly polarized
intensity, Ircp is the right circularly
polarized intensity,
Include file:
#include "mueller.h"
Source code:
stokes.cpp
See also:
SCATMECH Home,
Conventions, MuellerMatrix, JonesMatrix, JonesVector
C. F. Bohren and D. R. Huffman, Absorption and
Scattering of Light by Small Particles, (Wiley, New
York, 1983).
H. C. van de Hulst, Light Scattering by Small
Particles, (Dover, New York, 1981).
R. A. Chipman, "Polarimetry." in Handbook of Optics,
(McGraw-Hill, New York, 1995).
Definition of public
elements:
class StokesVector {
public:
StokesVector();
StokesVector(const double I,const double Q,const double U,const double V);
StokesVector(const StokesVector& x);
StokesVector(const JonesVector& j);
StokesVector& operator=(const StokesVector& x);
~StokesVector();
double& I();
double I() const;
double& Q();
double Q() const;
double& U();
double U() const;
double& V();
double V() const;
double& operator[](int i);
double operator[](int i) const;
StokesVector operator*(const MuellerMatrix& matrix) const;
double operator*(const StokesVector& a) const;
StokesVector operator+(const StokesVector& a) const;
StokesVector operator-(const StokesVector& a) const;
StokesVector operator-() const;
StokesVector operator*(double d) const;
friend StokesVector operator*(double d,const StokesVector& s);
StokesVector& operator*=(double d);
StokesVector operator/(double d) const;
StokesVector& operator/=(double d);
StokesVector rotate(double angle) const;
double eta() const;
double intensity() const;
double DOLP() const;
double DOP() const;
double DOCP() const;
double e() const;
double delta() const;
double psi() const;
double eccentricity() const;
StokesVector pol_part() const;
StokesVector unpol_part() const;
};
ostream& operator<<(ostream& os,const StokesVector& j);
istream& operator>>(istream& is, StokesVector& j);
Null constructor.
Top of Page
Constructor for a StokesVector that initializes
the vector with four real numbers.
Example:
StokesVector s(1,0,0,0); // Unpolarized light of unity intensity
Top of Page
Copy constructor.
Example:
StokesVector a;
StokesVector b(a);
Top of Page
Constructor that converts a JonesVector to a
StokesVector.
Example:
JonesVector j;
StokesVector s(j);
Top of Page
Assignment operator.
Example:
StokesVector a,b
a=b;
Top of Page
Class destructor.
Top of Page
Operators that return references to each of the elements
of the StokesVector, using the notation (I,Q,U,V).
Example:
StokesVector s;
// Circularly polarized light:
s.I()=1.;
s.Q()=0.;
s.U()=0.;
s.V()=1.;
cout << s.I() << '/t' << s.Q() << '/t' << s.U() << '/t' << s.V() << '/t' << endl;
Top of Page
Operators that returns a reference to a specific element
by number.
Example:
StokesVector s;
// Circularly polarized light...
s[0]=1.;
s[1]=0.;
s[2]=0.;
s[3]=1.;
cout << s[0] << '/t' << s[1] << '/t' << s[2] << '/t' << s[3] << '/t' << endl;
Top of Page
Right multiplication of a StokesVector by a
MuellerMatrix.
Example:
StokesVector vector;
MuellerMatrix matrix;
vector = vector*matrix;
Top of Page
Scalar product between two StokesVector objects.
Example:
StokesVector vector1,vector2;
double scalar = vector1*vector2;
Top of Page
Addition or subtraction of two StokesVector
objects.
Example:
StokesVector vector1,vector2,vector3;
vector3 = vector1+vector2;
vector3 = vector1-vector2;
Top of Page
Negation of a StokesVector.
Example:
StokesVector vector;
vector = -vector;
Top of Page
Multiplication and division of a StokesVector by a
scalar.
Example:
StokesVector vector;
double scalar;
vector = vector*scalar;
vector = scalar*vector; // Same thing.
vector *= scalar; // Also same thing.
vector = vector/scalar;
vector /= scalar; // Same thing.
vector = scalar/vector; // Not allowed.
Top of Page
Function that returns a StokesVector rotated by
some angle. The vector is rotated in a clockwise
direction for positive angle.
Example:
StokesVector a,b;
a = b.rotate(45.*PI/180.); // rotate b by 45 degrees.
Top of Page
Function that returns the principal angle of the
polarization. The angle is measured counterclockwise from
s-polarization.
Example:
StokesVector a;
cout << "Principal angle = " << a.eta()/PI*180. << " degrees" << endl;
Top of Page
Function that returns the intensity associated with a
StokesVector. This function is equivalent to
I().
Example:
StokesVector a;
cout << "Intensity = " << a.intensity() << endl;
Top of Page
Functions that return the degrees of linear polarization
(DOLP), full polarization (DOP), and
circular polarization (DOCP). The degree of
circular polarization is positive for left-circularly
polarized light.
Example:
StokesVector a;
cout << "Degrees of polarization: " << endl
<< "DOLP: " << a.DOLP() << endl
<< "DOP: " << a.DOP() << endl
<< "DOCP: " << a.DOCP() << endl;
Top of Page
Function that returns the ellipticity of the field (ratio
of minor axis to major axis).
Example:
StokesVector a;
cout << "Ellipticity = " << a.e() << endl;
Top of Page
Function that returns the phase difference between the
two components of the light.
Example:
StokesVector a;
cout << "delta = " << a.delta() << endl;
Top of Page
Function that returns the arc tangent of the ratio
between the two components of the polarized part of the
light. The returned value is zero for p-polarized light.
Example:
StokesVector a;
cout << "delta = " << a.delta() << endl;
Top of Page
Function that returns the eccentricity of the light.
Example:
StokesVector a;
cout << "eccentricity = " << a.eccentricity() << endl;
Top of Page
Functions that return the polarized and unpolarized parts
of a StokesVector.
Example:
StokesVector a,pol,unpol;
pol = a.pol();
unpol = a.unpol();
Top of Page
Operator that prints a StokesVector to an output
stream.
Top of Page
Operator that reads a StokesVector from an input
stream.
Top of Page
For More Information
SCATMECH Technical Information and Questions
Optical Technology Division (OTD) Home Page
OTD Technical Inquiries
OTD Website Comments
Current SCATMECH version: 6.00 (February 2008)
This page first online: Version 1.00 (March 2000)
This page last modified: Version 6.00 (February 2008)
|