| 
         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(double I,double Q,double U,double V);
        StokesVector(const StokesVector& x);
        StokesVector(const JonesVector& j);
        StokesVector& operator=(const StokesVector& x);
        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;
	bool valid() const;
        StokesVector pol_part() const;
        StokesVector unpol_part() const;
};
ostream& operator<<(ostream& os,const StokesVector& j);
istream& operator>>(istream& is, StokesVector& j);
         
        
	StokesVector()
        
         The default constructor leaves the elements unassigned.
          
        Top of Page 
	
        StokesVector(double I,double Q,double U,double V)
        
          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 
	
	StokesVector(const StokesVector& x)
        
          Copy constructor.
         Example:
          
StokesVector a;
StokesVector b(a);
 
         
        Top of Page 
	
	    StokesVector(const JonesVector& j)
        
          Constructor that converts a JonesVector to a
          StokesVector.
         Example:
          
JonesVector j;
StokesVector s(j);
 
         
        Top of Page 
	
	StokesVector& operator=(const StokesVector& x)
        
          Assignment operator.
         Example:
          
StokesVector a,b
a=b;
 
         
        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 
	
	    StokesVector operator*(const MuellerMatrix& matrix) const
        
          Right multiplication of a StokesVector by a
          MuellerMatrix.
         Example:
          
StokesVector vector;
MuellerMatrix matrix;
vector = vector*matrix;
 
         
        Top of Page 
	
	double operator*(const StokesVector& a) const
        
          Scalar product between two StokesVector objects.
         Example:
          
StokesVector vector1,vector2;
double scalar = vector1*vector2;
 
         
        Top of Page 
	
        
	StokesVector operator+(const StokesVector& a) const 
	  StokesVector operator-(const StokesVector& a) const
        
          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 
	
        
          Function that returns true if the Stokes vector is physically valid and false otherwise.  It
	  checks that the first element is greater than or equal to the square rooot of the sum of squares of
	  the other elements.
          
        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. The output contains four floating point numbers, separated by commas, and surrounded by parentheses, e.g.,
	  (5.321,3.432,-2.332,1.034)
         Example:
          
StokesVector a;
cout << "a = " << a << endl;
 
         
        Top of Page 
	
        
          Operator that reads a StokesVector from an input
          stream.  The input must contain four floating point numbers, separated by commas, and be surrounded by parentheses, e.g.,
	  (5.321,3.432,-2.332,1.034). 
         Example:
          
StokesVector a;
cin >> a;
 
         
        Top of Page 
 
For More Information
SCATMECH Technical Information and Questions 
Sensor Science Division Home Page 
Sensor Science Division Inquiries 
Website Comments
 
Current SCATMECH version: 7.22 (April 2021) 
 
  |