Class mueller_operator_t

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 Types

using matrix_type = mat4_t

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*=(f_t scalar) noexcept
inline auto &operator/=(f_t scalar) noexcept
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 tangent t2.

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.