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

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)

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

JonesMatrix operator+(const JonesMatrix& a) const
JonesMatrix operator-(const JonesMatrix& a) const
JonesMatrix operator+=(const JonesMatrix& a)
JonesMatrix operator-=(const JonesMatrix& a)

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)