class MuellerMatrix


The class MuellerMatrix represents a Mueller matrix in the Stokes-Mueller representation of polarization states. Arithmetic operations between Mueller matrices and Stokes vectors, various properties of a Mueller matrix, and transformation operations are defined.

Include file:

#include "mueller.h"

See also:

SCATMECH Home,   Conventions,   StokesVector,   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 MuellerMatrix {
    public:
        MuellerMatrix();
        MuellerMatrix(const JonesMatrix& j);
        MuellerMatrix(const MuellerMatrix& x);
        MuellerMatrix& operator=(const MuellerMatrix& x);
        ~MuellerMatrix();
        double* operator[](int i);
        const double* operator[](int i) const;
        double Tmax() const;
        double Tmin() const;
        double diattenuation() const;
        double linear_diattenuation() const;
        double polarization_dependent_loss() const;
        double polarizance() const;
        double extinction_ratio() const;
        MuellerMatrix rotate(double angle) const;
        MuellerMatrix parity() const;
        MuellerMatrix transpose() const;
        MuellerMatrix operator*(const MuellerMatrix& matrix) const;
        MuellerMatrix& operator*=(const MuellerMatrix& matrix);
        MuellerMatrix operator*(double d) const;
        friend MuellerMatrix operator*(double d,const MuellerMatrix &v);
        StokesVector operator*(const StokesVector& s) const;
        MuellerMatrix& operator*=(double d);
        MuellerMatrix operator/(double d) const;
        MuellerMatrix& operator/=(double d);
        MuellerMatrix operator+(const MuellerMatrix& a) const;
        MuellerMatrix operator-(const MuellerMatrix& a) const;
        MuellerMatrix operator-() const;
        MuellerMatrix& operator+=(MuellerMatrix& matrix);
        MuellerMatrix& operator-=(MuellerMatrix& matrix);
};

ostream& operator<<(ostream& os,const MuellerMatrix& mm);
istream& operator>>(istream& is, MuellerMatrix& mm);

MuellerMatrix()

Constructor for a MuellerMatrix that does not initialize any of the elements.

Top of Page

MuellerMatrix(const JonesMatrix& j)

Constructor that converts a JonesMatrix to a MuellerMatrix, using the algorithm described by Bohren and Huffman.

Example:

JonesMatrix j;
MuellerMatrix m(j); // Conversion from a Jones matrix to a Mueller matrix.

Top of Page

MuellerMatrix(const MuellerMatrix& x)

The copy constructor.

Example:

MuellerMatrix a;
MuellerMatrix b(a);

Top of Page

MuellerMatrix& operator=(const MuellerMatrix& x)

The assignment operator.

Example:

MuellerMatrix a;
MuellerMatrix b=a;

Top of Page

~MuellerMatrix()

The class destructor.

Top of Page

double* operator[](int i)
const double* operator[](int i) const

Operators to access specific elements of the MuellerMatrix.

Example:

MuellerMatrix a;
double b=a[0][0]; // Access the 00 term of the Mueller matrix

Top of Page

double Tmax() const
double Tmin() const
double diattenuation() const
double linear_diattenuation() const
double polarization_dependent_loss() const
double polarizance() const
double extinction_ratio() const

Functions to return the maximum and minimum transmissivity, the diattenuation, the linear diattenuation, the polarization-dependent loss, the polarizance, and the extinction ratio for the given Mueller matrix. These terms are defined in Chipman.

Example:

MuellerMatrix a;
cout << "Tmax = " << a.Tmax() << endl
     << "Tmin = " << a.Tmin() << endl
     << "diattenuation = " << a.diattenuation() << endl
     << "lineardiattenuation = " << a.lineardiattenuation() << endl;

Top of Page

MuellerMatrix rotate(double angle) const

Function that returns a MuellerMatrix rotated by angle in the clockwise direction, looking into the beam.

Example:

MuellerMatrix a,b;
b = a.rotate(45*PI/180.);

Top of Page

MuellerMatrix parity() const

Function that returns a MuellerMatrix that has undergone a mirror operation.

Example:

MuellerMatrix a,b;
b = a.parity();

Top of Page

MuellerMatrix transpose() const

Function that returns the transpose of a MuellerMatrix.

Example:

MuellerMatrix a,b;
b = a.transpose();

Top of Page

MuellerMatrix operator*(const MuellerMatrix& matrix) const
MuellerMatrix& operator*=(const MuellerMatrix& matrix)

Binary multiplication between two MuellerMatrix objects. If matrix2 is followed by matrix1, then matrix1*matrix2 returns the net MuellerMatrix. This operator is not commutative.

Example:

MuellerMatrix a,b,c;
c = a*b;
a *= b;  // Same as a = a*b;
c = b*a  // Note the same.

Top of Page

MuellerMatrix operator*(double d) const
friend MuellerMatrix operator*(double d,const MuellerMatrix &v)
MuellerMatrix& operator*=(double d)
MuellerMatrix operator/(double d) const
MuellerMatrix& operator/=(double d)

Multiplication and division of a MuellerMatrix by a scalar.

Example:

double scalar;
MuellerMatrix matrix;
matrix = matrix * scalar;
matrix = scalar * matrix;
matrix *= scalar;
matrix = matrix / scalar;
matrix = scalar / matrix; // Not allowed.
matrix /= scalar;

Top of Page

StokesVector operator*(const StokesVector &s) const

Left multiplication of a StokesVector by a MuellerMatrix.

Example:

MuellerMatrix matrix;
StokesVector vector;
vector = matrix*vector;

Top of Page

MuellerMatrix operator+(const MuellerMatrix& a) const
MuellerMatrix operator-(const MuellerMatrix& a) const
MuellerMatrix& operator+=(MuellerMatrix& matrix)
MuellerMatrix& operator-=(MuellerMatrix& matrix)

Addition and subtraction of MuellerMatrix objects.

Example:

MuellerMatrix matrix1,matrix2,matrix3;
matrix3=matrix1+matrix2;
matrix3=matrix1-matrix2;
matrix1+=matrix2;
matrix1-=matrix2;

Top of Page

MuellerMatrix operator-() const

Negation of a MuellerMatrix.

Example:

MuellerMatrix matrix;
matrix=-matrix;

Top of Page

ostream& operator<<(ostream& os,const MuellerMatrix& mm)

Operator to send a MuellerMatrix to an ostream.

Top of Page

istream& operator>>(istream& is, MuellerMatrix& mm)

Reads a MuellerMatrix 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)