{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Intro to Mueller Calculus\n", "\n", "_Written by Jaren N. Ashcraft_\n", "\n", "This tutorial reviews Mueller Calculus in brief, though we refer the reader to Chapters 3 and 6 _Polarized Light and Optical Systems_ by Chipman, Lam, and Young for a more comprehensive tutorial.\n", "\n", "When describing polarized light, we must look to representations of the optical field that are capable of describing it's vector nature. This naturally leads us toward matrix calculus, which is able to perform operations directly on the electric field vector. One popular descriptor is [Jones Calculus](https://en.wikipedia.org/wiki/Jones_calculus), which is a $2 \\times 2$ matrix calculus that performs operations on the coefficients of the electric field. This enables operations on both the _amplitude_ and _phase_ of light. However, by making operations on the electric field it makes the assumption that light is _fully_ polarized. It is also very difficult to measure Jones matrices in the lab because it requires the ability to measure both amplitude and phase, which is impossible to do directly at optical frequencies.\n", "\n", "A complementary calculus exists that allows for the description of _partially_ polarized light with quantities that can be measured in the laboratory. [Mueller Calculus](https://en.wikipedia.org/wiki/Mueller_calculus) is a $4 \\times 4$ matrix calculus that traces the polarization state of light projected onto three different polarization bases. In contrast to Jones calculus, which keeps track of the complex amplitudes of the electric field; Mueller calculus tracks the polarization of light in terms of power, or the squared modulus of the electric field. This power is described by the _Stokes Vector_ $\\mathbf{s}$,\n", "\n", "$$\\mathbf{s} = [I, Q, U, V] = [S_{0}, S_{1}, S_{2}, S_{3}].$$\n", "\n", "$\\mathbf{s}$ is a 4-vector that contains the _Stokes parameters_ that describe the polarization of light. Intuitively, the parameters can be described by a set of measurements made using the following six power measurements:\n", "\n", " - $P_{H}$: A power measurement made with a linear polarizer oriented at $0^{\\circ}$\n", " - $P_{V}$: A power measurement made with a linear polarizer oriented at $90^{\\circ}$\n", " - $P_{+}$: A power measurement made with a linear polarizer oriented at $45^{\\circ}$\n", " - $P_{-}$: A power measurement made with a linear polarizer oriented at $135^{\\circ}$\n", " - $P_{R}$: A power measurement made with a right-circular polarizer\n", " - $P_{L}$: A power measurement made with a left-circular polarizer\n", "\n", "From these measurements, the Stokes parameters are defined as follows:\n", "\n", "$$\n", "\\mathbf{s} = \n", "\\begin{pmatrix}\n", "I \\\\\n", "Q \\\\\n", "U \\\\\n", "V \\\\\n", "\\end{pmatrix}\n", "=\n", "\\begin{pmatrix}\n", "P_{H} + P_{V} \\\\\n", "P_{H} - P_{V} \\\\\n", "P_{+} - P_{-} \\\\\n", "P_{R} - P_{L} \\\\\n", "\\end{pmatrix}\n", "$$\n", "\n", "What this means is that $I$ describes the total unpolarized power in the system, $Q$ is the degree of linear polarization along $0^{\\circ}$ and $90^{\\circ}$, $U$ is the degree of linear polarization along $45^{\\circ}$ and $135^{\\circ}$, and $V$ is the degree of circular polarization. In `katsu`, we treat the Stokes vector as a simple array of vectors." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "s = [[ 1. 0. 0.25 -0.2 ]]\n" ] } ], "source": [ "from katsu.mueller import stokes_from_parameters\n", "\n", "s = stokes_from_parameters(1, 0, 0.25, -0.2)\n", "print('s = ',s.T)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We do this because it enables the initialization of an array of Stokes parameters, which can be done by supplying a `shape` keyword." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "array of stokes shape = (32, 32, 4, 1)\n" ] } ], "source": [ "s = stokes_from_parameters(1, 0, 0.25, -0.2, shape=[32, 32])\n", "print('array of stokes shape = ', s.shape)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is done so that we can perform operations on Stokes images, which are generally 3D arrays. Below we show an example of such a homogeneous stokes image." ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "def plot_stokes(s):\n", "\n", " titles = ['I', 'Q', 'U', 'V']\n", " fig, axs = plt.subplots(figsize=[12,3],ncols=4)\n", " for i, ax in enumerate(axs):\n", " im = ax.imshow(s[...,i,0], vmin=-1, vmax=1, cmap='RdBu_r')\n", " ax.set_title(titles[i])\n", " fig.colorbar(im, ax=axs)\n", " plt.show()\n", "\n", "plot_stokes(s)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A $4 \\times 1$ vector requires a corresponding $4 \\times 4$ matrix operator in order to perform transformations on the vector. The operators on Stokes vectors are called _Mueller Matrices_, and take the following form:\n", "\n", "$$\n", "\\begin{pmatrix}\n", "M_{I\\rightarrow I} & M_{Q\\rightarrow I} & M_{U\\rightarrow I} & M_{V\\rightarrow I} \\\\\n", "M_{I\\rightarrow Q} & M_{Q\\rightarrow Q} & M_{U\\rightarrow Q} & M_{V\\rightarrow Q} \\\\\n", "M_{I\\rightarrow U} & M_{Q\\rightarrow U} & M_{U\\rightarrow U} & M_{V\\rightarrow U} \\\\\n", "M_{I\\rightarrow V} & M_{Q\\rightarrow V} & M_{U\\rightarrow V} & M_{V\\rightarrow V} \\\\\n", "\\end{pmatrix}\n", "\\begin{pmatrix}\n", "I \\\\\n", "Q \\\\\n", "U \\\\\n", "V \\\\\n", "\\end{pmatrix}\n", "=\n", "\\begin{pmatrix}\n", "I' \\\\\n", "Q' \\\\\n", "U' \\\\\n", "V' \\\\\n", "\\end{pmatrix}.\n", "$$\n", "\n", "Here the subscripts are of the form $A \\rightarrow B$, where $A$ is the Stokes parameter before transformation and $B$ is the Stokes parameter after transformation. The \"transformation\" is a simple matrix multiplication. Mueller matrices are also available in `katsu`. Below we show an example of a linear polarizer oriented at $0^{\\circ}$, or a \"horizontal\" polarizer that only passes the $Q$ parameter." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Horizontal Polarizer\n", "[[0.5 0.5 0. 0. ]\n", " [0.5 0.5 0. 0. ]\n", " [0. 0. 0. 0. ]\n", " [0. 0. 0. 0. ]]\n" ] } ], "source": [ "from katsu.mueller import linear_polarizer\n", "\n", "horizontal_polarizer = linear_polarizer(0)\n", "print('Horizontal Polarizer')\n", "print(horizontal_polarizer)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Simmilarly, `katsu`'s Mueller matrices take a `shape` keyword to initialize them as an array, which we perform below." ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "polarizer shape = (32, 32, 4, 4)\n" ] } ], "source": [ "horizontal_polarizer = linear_polarizer(0, shape=[32, 32])\n", "print('polarizer shape = ', horizontal_polarizer.shape)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Herein lies the reason why the matrix elements are packed into the final two dimensions of the array. Because both the Stokes vector and Mueller matrices are constructed in this way, we can take advantage of `numpy`'s broadcasted matrix multiplication to perform the operation. Below we use the matrix multiplication operator `@` to perform the operation." ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "data": { "image/png": "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9e/fX9I/PqDdbjd1onVG0fCdhPMvYeRB5xAN30m4/yLcnAsul0tSdPzOO5to+E7IAwQSDd9JuPPgUgVzOH17H14/depUnThxQjt37lRjY6NmzZqluXPnqqioqMX+qampOnHihM+1559/Xo8//rjGjx/vc/2ll15Sbm6u9+evn48ajIgrCgEAAACgLXk8RhDLR9tvpvDgwYMqLi7WBx98oFGjRkmSnnnmGd1888164oknWpyFjYmJkcPh8Lm2detW/fu///sFs4s9e/a8oG8oLvnwegAAAACIZM0bzQRq7aW0tFQ9e/b0FoSSlJ2dLavVqrKysqDGKC8vV0VFhWbPnn3BvXnz5qlPnz4aPXq01q9fH/JS2IieKbTZbFq+fLlsNlu4Q8FX+E46Hr/zyMN30vH4nUcevpOOx+888vCddB6h7D7avFS7mc1mu+Tv2Ol0ql+/fj7XunTposTERDmdzqDGePHFFzVkyBBdf/31PtdXrlypm266Sd27d9fbb7+te+65R3V1dfrxj38cdHwRd04hAAAAALSF5nMKr7z7FcXYuvvt6z53Rp88970Lri9fvlwrVqxo8TVLlizRo48+6nfcgwcP6vXXX9fGjRt16NAhn3v9+vXTz372M919991+x/jyyy+VnJysZcuWadGiRX77FhQU6KWXXlJlZaXffl8X0TOFAAAAAHCpPG6PLE3+d5LxuM/f/+fdZP3NEi5atEgzZ870O+7AgQPlcDh08uRJn+tNTU06ffp0UM8C/vd//7fOnDmj6dOnB+ybmZmpVatW6dy5c0HPcFIUAgAAADA1w2ME3EimefloKLvJ9u3bV3379g3YLysrS9XV1SovL1dGRoYkadeuXfJ4PMrMzAz4+hdffFG33nprUO9VUVGhXr16hbTklaIQAAAAgKmF+5zCIUOGKDc3V3PmzNG6devU2NiovLw8TZkyxbvz6GeffaaxY8dq06ZNGj16tPe1n376qd5991399re/vWDcHTt2qKqqStddd53i4uK0c+dOPfzww7r33ntDio+iEAAAAICphbLRTHt5+eWXlZeXp7Fjx3oPr1+zZo33fmNjow4dOqQzZ874vG79+vXq37+/xo0bd8GYXbt21dq1a7Vw4UIZhqFBgwbpySef1Jw5c0KKLWKPpFi7dq3S0tIUFxenzMxM7d27N9whRY3CwkJde+21io+P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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "stokes_out = horizontal_polarizer @ s\n", "plot_stokes(stokes_out)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is one of `katsu`'s main features. All of the calculations are set up to take advantage of broadcasted matrix calculations so that there is no need to loop over images. Other polarizing elements, such as diattenuators and retarders, also exist in `katsu.mueller`, but will be showcased in a different demo. " ] } ], "metadata": { "kernelspec": { "display_name": "katsudev", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.14" } }, "nbformat": 4, "nbformat_minor": 2 }