|
SCATMECH > Classes and Functions >
Polarization > 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);
Constructor for a MuellerMatrix that does not
initialize any of the elements.
Top of Page
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
The copy constructor.
Example:
MuellerMatrix a;
MuellerMatrix b(a);
Top of Page
The assignment operator.
Example:
MuellerMatrix a;
MuellerMatrix b=a;
Top of Page
The class destructor.
Top of Page
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
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
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
Function that returns a MuellerMatrix that has
undergone a mirror operation.
Example:
MuellerMatrix a,b;
b = a.parity();
Top of Page
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
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
Left multiplication of a StokesVector by a
MuellerMatrix.
Example:
MuellerMatrix matrix;
StokesVector vector;
vector = matrix*vector;
Top of Page
Addition and subtraction of MuellerMatrix objects.
Example:
MuellerMatrix matrix1,matrix2,matrix3;
matrix3=matrix1+matrix2;
matrix3=matrix1-matrix2;
matrix1+=matrix2;
matrix1-=matrix2;
Top of Page
Negation of a MuellerMatrix.
Example:
MuellerMatrix matrix;
matrix=-matrix;
Top of Page
Operator to send a MuellerMatrix to an
ostream.
Top of Page
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)
|