Class mueller_operator_t¶
Defined in File mueller.hpp
Class Documentation¶
-
class mueller_operator_t¶
Mueller operator/matrix, that quantifies the action of an optical element acting upon a Stokes parameters vector. Mueller operators are defined with respect to an implicit frame. It is the user’s responsibility to keep track of the correct frame.
Public Functions
-
inline mueller_operator_t() noexcept = default¶
-
inline explicit mueller_operator_t(const matrix_type &M) noexcept¶
-
inline mueller_operator_t(f_t m00, f_t m01, f_t m02, f_t m03, f_t m10, f_t m11, f_t m12, f_t m13, f_t m20, f_t m21, f_t m22, f_t m23, f_t m30, f_t m31, f_t m32, f_t m33) noexcept¶
-
mueller_operator_t(const mueller_operator_t&) noexcept = default¶
-
mueller_operator_t &operator=(const mueller_operator_t&) noexcept = default¶
-
inline bool isfinite() const noexcept¶
-
inline bool isnan() const noexcept¶
-
inline auto mean_intensity() const noexcept¶
Returns the mean intensity (top-left element of the Mueller matrix).
-
inline const matrix_type &matrix() const noexcept¶
Returns the underlying 4x4 Mueller matrix.
-
inline auto &operator*=(const mueller_operator_t &M) noexcept¶
Composes the action of 2 Mueller operators acting in sequence.
-
inline auto &operator+=(const mueller_operator_t &M) noexcept¶
Sums Mueller operators.
-
template<Quantity Q>
inline stokes_parameters_t<Q> operator()(const stokes_parameters_t<Q> &S, const frame_t &Sin, const frame_t &Min) const noexcept¶ Transformation of a Stokes parameters vector via Mueller matrix. The frame of the resulting Stokes parameters vector is the exitant frame of
M
.- Parameters:
Sin – frame of
S
before transformation.Min – incident frame of
M
.
-
template<Quantity Q>
inline stokes_parameters_t<Q> operator()(const stokes_parameters_t<Q> &S, const frame_t &Sin, const frame_t &Min, const frame_t &Sout, const frame_t &Mout) const noexcept¶ Transformation of a Stokes parameters vector via Mueller matrix.
- Parameters:
Sin – frame of
S
before transformation.Min – incident frame of
M
.Sout – desired frame of
S
after transformation.Min – exitant frame of
M
.
-
inline mueller_operator_t change_incident_frame(const frame_t &old_frame, const frame_t &new_frame) const noexcept¶
Reorients the Mueller operator such that it is defined with respect to a new incident frame.
-
inline mueller_operator_t change_exitant_frame(const frame_t &old_frame, const frame_t &new_frame) const noexcept¶
Reorients the Mueller operator such that it is defined with respect to a new exitant frame.
Public Static Functions
-
static inline mueller_operator_t identity() noexcept¶
Constructs an identity (null interaction) Mueller operator.
-
static inline mueller_operator_t handness_flip() noexcept¶
Constructs a Mueller operator that flips a Stokes vector’s frame handness.
-
static inline mueller_operator_t rotation(const dir2_t &t1, const dir2_t &t2) noexcept¶
Constructs a Mueller rotation operator. Rotates from tangent
t1
to tangentt2
.
-
static inline mueller_operator_t linear_polarizer(const Angle auto &theta) noexcept¶
Constructs a Mueller operator for a linear polarizer, with polarization angle
theta
.
-
static inline mueller_operator_t perfect_depolarizer() noexcept¶
Constructs a Mueller operator for an idealised depolarizer.
-
static inline mueller_operator_t fresnel(const c_t fs, const c_t fp) noexcept¶
Constructs a Mueller operator for a Fresnel interaction (reflection or refraction).
- Parameters:
fs – s-polarization (complex-valued) Fresnel coefficient.
fp – p-polarization (complex-valued) Fresnel coefficient.
-
static inline mueller_operator_t fresnel_reflection(c_t eta_12, const dir3_t &w, const dir3_t &n = {0, 0, 1}) noexcept¶
Constructs a Mueller operator for a Fresnel reflection.
- Parameters:
eta_12 – Refractive-index ratio (top interface to bottom interface).
w – Incidence direction (pointing away from the surface).
n – Surface normal direction.
-
static inline mueller_operator_t fresnel_transmission(c_t eta_12, const dir3_t &w, const dir3_t &n = {0, 0, 1}) noexcept¶
Constructs a Mueller operator for a Fresnel refraction.
- Parameters:
eta_12 – Refractive-index ratio (top interface to bottom interface).
w – Incidence direction (pointing away from the surface).
n – Surface normal direction.
-
static inline mueller_operator_t fresnel(c_t eta_12, bool reflection, const dir3_t &w, const dir3_t &n = {0, 0, 1}) noexcept¶
Constructs a Mueller operator for a Fresnel.
- Parameters:
eta_12 – Refractive-index ratio (top interface to bottom interface).
reflection – Selects reflection or refraction.
w – Incidence direction (pointing away from the surface).
n – Surface normal direction.
-
static inline mueller_operator_t inv_one_minus_fresnel(const c_t fs, const c_t fp) noexcept¶
Computes I/(I-M), where I is identity and M is the Mueller operator for a Fresnel interaction. This is a closed-form expression for an infinite sequence of Fresnel reflections.
- Parameters:
fs – s-polarization (complex-valued) Fresnel coefficient.
fp – p-polarization (complex-valued) Fresnel coefficient.
-
static inline mueller_operator_t inv_one_minus_fresnel_reflection(c_t eta_12, const dir3_t &w, const dir3_t &n = {0, 0, 1}) noexcept¶
Computes I/(I-M), where I is identity and M is the Mueller operator for a Fresnel reflection. This is a closed-form expression for an infinite sequence of Fresnel reflections.
- Parameters:
eta_12 – Refractive-index ratio (top interface to bottom interface).
w – Incidence direction (pointing away from the surface).
n – Surface normal direction.
Friends
-
inline friend auto operator*(f_t scalar, const mueller_operator_t &M) noexcept¶
-
inline friend auto operator*(const mueller_operator_t &M, f_t scalar) noexcept¶
-
inline friend auto operator/(const mueller_operator_t &M, f_t scalar) noexcept¶
-
inline friend auto operator*(const mueller_operator_t &M1, const mueller_operator_t &M2) noexcept¶
Composes the action of 2 Mueller operators acting in sequence.
-
inline friend auto operator+(const mueller_operator_t &M1, const mueller_operator_t &M2) noexcept¶
Sums Mueller operators.
-
template<Quantity Q>
inline friend auto operator*(const mueller_operator_t &M, const stokes_parameters_t<Q> &S) noexcept¶ Transformation of a Stokes parameters vector via Mueller matrix. Frames are assumed to match.
-
inline mueller_operator_t() noexcept = default¶