| 
         SCATMECH > Classes and Functions >
        Polarization >
        JonesMatrix 
        class JonesMatrix
         
        The class JonesMatrix represents a Jones matrix in a
        Jones representation of polarization states. Arithmetic
        operations between Jones matrices and Jones vectors,
        various properties of a Jones matrix, and transformation
        operations are defined.
	 Include file:
          
#include "mueller.h"
 
        Source code:
          
jmatrix.cpp
 
        See also:
        SCATMECH Home,  
        Conventions,   MuellerMatrix,   JonesVector,   StokesVector 
        
	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 JonesMatrix {
    public:
        JonesMatrix();
        JonesMatrix(const JonesMatrix& x);
        JonesMatrix(const COMPLEX& pp,const COMPLEX& ss,const COMPLEX& ps,const COMPLEX& sp);
        explicit JonesMatrix(const MuellerMatrix& x);
        JonesMatrix& operator=(const JonesMatrix& x);
        JonesMatrix operator*(const JonesMatrix& matrix) const;
        JonesMatrix operator*(const COMPLEX& x) const;
        friend JonesMatrix operator*(const COMPLEX& x,const JonesMatrix& y);
        JonesMatrix operator/(const COMPLEX& x) const;
        JonesMatrix& operator*=(const JonesMatrix& a);
        JonesMatrix& operator*=(const COMPLEX& a);
        JonesMatrix& operator/=(const COMPLEX& a);
        JonesVector operator*(const JonesVector& a) const;
        JonesMatrix operator+(const JonesMatrix& a) const;
        JonesMatrix operator-(const JonesMatrix& a) const;
        JonesMatrix operator+=(const JonesMatrix& a);
        JonesMatrix operator-=(const JonesMatrix& a);
        JonesMatrix operator-() const;
        COMPLEX& operator[](int i);
        const COMPLEX& operator[](int i) const;
        JonesMatrix rotate(double angle) const;
        JonesMatrix transpose() const;
        COMPLEX& PP();
        COMPLEX PP() const ;
        COMPLEX& SS();
        COMPLEX SS() const ;
        COMPLEX& PS();
        COMPLEX PS() const ;
        COMPLEX& SP();
        COMPLEX SP() const ;
};
ostream& operator<<(ostream& os,const JonesMatrix& j);
istream& operator>>(istream& is, JonesMatrix& j);
         
        
	JonesMatrix()
        
          Null  constructor.
          
        Top of Page 
	
	JonesMatrix(const JonesMatrix& x)
        
        Copy constructor.
          
        Top of Page 
	
        JonesMatrix(const COMPLEX& pp,const COMPLEX& ss,const COMPLEX& ps,const COMPLEX& sp)
        
          Explicit constructor with COMPLEX elements. Note
          that the order of the parameters is important. ps
          is the p to s matrix element, while sp is the s to
          p matrix element.
         Example:
          
JonesMatrix a(COMPLEX(1,0),COMPLEX(1,0),0.,0.);
 
         
        Top of Page 
	
	
	explicit JonesMatrix(const MuellerMatrix& x)
        
          Explicit constructor that converts a MuellerMatrix to a
          JonesMatrix. This conversion is "improper" since a
          MuellerMatrix does not
          maintain phase information and allows for depolarization.
          The result is the JonesMatrix that corresponds to
          the part of the MuellerMatrix that is
          polarization preserving.
         Example:
          
MuellerMatrix m;
JonesMatrix j(m);
 
         
        Top of Page 
	
	JonesMatrix& operator=(const JonesMatrix& x)
        
          The assignment operator.
         Example:
          
JonesMatrix j1,j2;
j1=j2;
 
         
        Top of Page 
	
	JonesMatrix operator*(const JonesMatrix& matrix) const
        
          Multiplication of one JonesMatrix by another.
         Example:
          
JonesMatrix j1,j2,j3;
j3=j1*j2;
 
         
        Top of Page 
	
        
          Multiplication and division of a JonesMatrix by a
          scalar.
         Example:
          
COMPLEX scalar;
JonesMatrix matrix;
matrix = matrix * scalar;
matrix = scalar * matrix;
matrix *= scalar;
matrix = matrix / scalar;
matrix = scalar / matrix; // Not allowed.
matrix /= scalar;
 
         
        Top of Page 
	
	JonesVector operator*(const JonesVector& a) const
        
          Left multiplication of a JonesVector by a
          JonesMatrix.
         Example:
          
JonesMatrix matrix;
JonesVector vector;
vector = matrix*vector;
 
         
        Top of Page 
	
        
          Addition and subtraction of two JonesMatrix
          objects.
         Example:
          
JonesMatrix matrix1,matrix2,matrix3;
matrix3=matrix1+matrix2;
matrix3=matrix1-matrix2;
matrix1+=matrix2;
matrix1-=matrix2;
 
         
        Top of Page 
	
	JonesMatrix operator-() const
        
          Negation of a JonesMatrix.
         Example:
          
JonesMatrix matrix;
matrix= -matrix;
 
         
        Top of Page 
	
	COMPLEX& operator[](int i) 
	  const COMPLEX& operator[](int i) const
        
          Element referencing operator. The elements are defined in
          the example.
         Example:
          
JonesMatrix a;
COMPLEX pp,ss,ps,sp;
a[0]=pp;
a[1]=ss;
a[2]=ps;
a[3]=sp;
 
         
        Top of Page 
	
	JonesMatrix rotate(const double angle) const
        
          Function that returns a JonesMatrix rotated by
          angle clockwise about the direction of
          propagation.
         Example:
          
JonesMatrix a,b;
a = b.rotate(45.*PI/180.);
 
         
        Top of Page 
	
	
	JonesMatrix transpose() const
        
          Function that returns the transpose of a
          JonesMatrix.
         Example:
          
JonesMatrix a,b;
a = b.transpose();
 
         
        Top of Page 
	COMPLEX& PP() 
        const COMPLEX& PP() const 
        COMPLEX& SS() 
        const COMPLEX& SS() const 
        COMPLEX& PS() 
        const COMPLEX& PS() const 
        COMPLEX& SP() 
	const  COMPLEX& SP() const
        
          Element referencing by name.  PS() corresponds to the p-in/s-out configuration, and SP() corresponds to the s-in/p-out configuration.
         Example:
          
JonesMatrix a;
a.PP() = COMPLEX(1.,0.);
cout << a.SS() << " " << a.PS() << endl
     << a.SP() << " " << a.PP() << endl;
         
        Top of Page 
	
	  ostream& operator<<(ostream& os,const JonesMatrix& j)
        
         Operator to output a JonesMatrix to an output
          stream. The result is four complex numbers, separated by commas, and surrounded by parentheses, e.g., ((1,2),(3,4),(5,6),(7,8)). 
	   The order of the values is: P to P, S to S, P to S, S to P.
	    Example:
	   
JonesMatrix J;
cout << "J = " << J << endl;
 
         
        Top of Page 
        
	istream& operator>>(istream& is, JonesMatrix& j)
        
         Operator to input a JonesMatrix from an input
          stream. The stream should contain four complex numbers, separated by commas, and surrounded by parentheses, e.g., ((1,2),(3,4),(5,6),(7,8)). 
	   The order of the values is: P to P, S to S, P to S, S to P.
	    Example:
	   
JonesMatrix J;
cin >> J;
 
         
        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) 
 
  |