Analyzer

An Analyzer is a polarization selective device in the beam path that is described by a complex 2x2 Jones matrix. An unpolarized detection for example is

\[\begin{split}A= \begin{pmatrix} 1 & 0\\ 0 & 1 \end{pmatrix},\end{split}\]

which is created by the default arguments during initialization via nx.Analyzer().

The polarization analyzer matrix of the beam (in version 1) is given by [Sturhahn2000]

\[\begin{split}J = \frac{1}{2} \begin{pmatrix} 2 - \xi (1- \cos{\chi} \cos{2\varphi}) & \xi (\sin{2\varphi}\cos{\chi} -i \sin{\chi}) \\ \xi (\sin{2\varphi}\cos{\chi} + i \sin{\chi}) & 2 - \xi (1 + \cos{\chi} \cos{2\varphi}) \end{pmatrix}\end{split}\]

where \(\xi\) is the polarization detection efficiency, \(\chi\) is the mixing angle, and \(\varphi\) is the canting angle (which is corrected by a factor of 2 compared to [Sturhahn2000] to account for the correct polarization rotation).

Changed in version 2.0.0

The mixing angle is changed by a factor of 2 in order to be consistet with the theory of optics (e.g. [Born]), see Scattering geometry .

The three parameters \(\xi\), \(\chi\) and \(\varphi\) are fittable now.

The actual analyzer matrix used since version 2 is given by the unpolarized coherency matrix \(I_2\) and the normalized Jones vector \(\boldsymbol{j}\) [Gil]

\[J = (1-\xi) I_2 + \xi \boldsymbol{j} \boldsymbol{j}^{\dagger}\]

with

\[\begin{split}\boldsymbol{j} = R(\varphi) \begin{pmatrix} \cos\chi \\ i \sin\chi \end{pmatrix} = \begin{pmatrix} \cos\varphi & -\sin\varphi \\ \sin\varphi & \cos\varphi \end{pmatrix} \begin{pmatrix} \cos\chi \\ i \sin\chi \end{pmatrix}.\end{split}\]

where \(R\) is the rotation matrix. The mixing angle now corresponds to the ellipticiy angle of the ellipse of the Jones vector. One obtains

\[\begin{split}J = \frac{1}{2} \begin{pmatrix} 2 - \xi (1 - \cos{2\chi} \cos{2\varphi}) & \xi (\sin{2\varphi}\cos{2\chi} -i \sin{2\chi}) \\ \xi (\sin{2\varphi}\cos{2\chi} + i \sin{2\chi}) & 2 - \xi (1 + \cos{2\chi} \cos{2\varphi}) \end{pmatrix}\end{split}\]

It leads to the same matrix as used in verison 1 but the mixing angle multiplied by a factor of 2.

The following parameters are Var objects and can be fit:

  • efficiency (since v2.0.0)

  • mixing_angle (since v2.0.0)

  • canting_angle (since v2.0.0)

When you set up an analyzer you can specify several parameters which are similar as in CONUSS. Those are the efficiency, the mixing angle between the polarization components, and the canting angle of the beam with respect to \(\sigma\) direction.

import nexus as nx
import numpy as np

# set beam along pi polarization via initialization parameters
# those values are the default arguments
analyzer = nx.Analyzer(efficiency = 1, mixing_angle = 0, canting_angle = 90)

print(analyzer)
[[0.000000e+00+0.j 6.123234e-17+0.j]
 [6.123234e-17+0.j 1.000000e+00+0.j]]

There are methods to set specific polarization selective states.

  • analyzer.Unpolarized()

  • analyzer.LinearSigma()

  • analyzer.LinearPi()

  • analyzer.CircularLeft()

  • analyzer.CircularRight()

analyzer = nx.Analyzer()
analyzer.CircularLeft()

print(analyzer.matrix)
[[ 0.5+0.j  -0. -0.5j]
 [ 0. +0.5j  0.5+0.j ]]

or you can set the Jones matrix directly

# set the Jones matrix directly to unpolarized detection
analyzer.SetJonesMatrix(np.array([[1,0], [0,1]], dtype=complex))

An analyzer is added to the objects list of the experiment

exp = nx.Experiment(id = "test experiment",
                    objects [sample1, analyzer, sample2],
                    isotope = nx.lib.Moessbauer.Sn119)

You can also rotate an analyzer by a certain angle

analyzer.Rotate(45)  # angle in deg

print(analyzer)
Analyzer
  .id:
  .matrix:
[[0.5+0.j 0.5+0.j]
 [0.5+0.j 0.5+0.j]]

Notebooks

analyzer - nb_analyzer.ipynb.

polarization analysis - nb_polarization.ipynb.

Please have a look to the API Reference for more information.