Source code for crystalpy.polarization.CrystalPhasePlate

"""
Represents a Phase Plate by a perfect crystal.
"""
from crystalpy.polarization.MuellerMatrix import MuellerMatrix
import numpy


# TODO rename to PerfectCrystalMuellerMatrix
[docs]class CrystalPhasePlate(MuellerMatrix): """Constructor. Parameters ---------- intensity_sigma : float intensity sigma phase_sigma : float phase sigma intensity_pi : float intensity pi phase_pi : float phase pi incoming_stokes_vector : StokesVector instance the Stokes vectoR. inclination_angle : float, optional The inclination angle in rad. """ def __init__(self, # incoming_stokes_vector, intensity_sigma, phase_sigma, intensity_pi, phase_pi, inclination_angle=0.0): phase_plate_matrix = self._create_matrix(intensity_sigma, phase_sigma, intensity_pi, phase_pi, inclination_angle) super(CrystalPhasePlate, self).__init__(phase_plate_matrix) def _create_matrix(self, intensity_sigma, phase_sigma, intensity_pi, phase_pi, inclination_angle): """Create a Mueller matrix for a phase plate. intensity_sigma : float intensity sigma phase_sigma : float phase sigma intensity_pi : float intensity pi phase_pi : float phase pi incoming_stokes_vector : StokesVector instance the Stokes vectoR. inclination_angle : float The inclination angle in rad. Returns ------- numpy array The Mueller matrix. """ alpha = inclination_angle # radians. # Create the Mueller matrix for a phase plate as a numpy array. phase_plate_matrix = numpy.zeros([4, 4]) # First row. phase_plate_matrix[0, 0] = 0.5 * (intensity_sigma + intensity_pi) phase_plate_matrix[0, 1] = 0.5 * (intensity_sigma - intensity_pi) * numpy.cos(2 * alpha) phase_plate_matrix[0, 2] = 0.5 * (intensity_sigma - intensity_pi) * numpy.sin(2 * alpha) phase_plate_matrix[0, 3] = 0.0 # Second row. phase_plate_matrix[1, 0] = 0.5 * (intensity_sigma - intensity_pi) phase_plate_matrix[1, 1] = 0.5 * (intensity_sigma + intensity_pi) * numpy.cos(2 * alpha) phase_plate_matrix[1, 2] = 0.5 * (intensity_sigma + intensity_pi) * numpy.sin(2 * alpha) phase_plate_matrix[1, 3] = 0.0 scalar = numpy.sqrt(intensity_sigma) * numpy.sqrt(intensity_pi) delta_phase = phase_pi - phase_sigma # Third row. phase_plate_matrix[2, 0] = 0.0 phase_plate_matrix[2, 1] = - scalar * numpy.cos(delta_phase) * numpy.sin(2 * alpha) phase_plate_matrix[2, 2] = scalar * numpy.cos(delta_phase) * numpy.cos(2 * alpha) phase_plate_matrix[2, 3] = - scalar * numpy.sin(delta_phase) # Fourth row. phase_plate_matrix[3, 0] = 0.0 phase_plate_matrix[3, 1] = - scalar * numpy.sin(delta_phase) * numpy.sin(2 * alpha) phase_plate_matrix[3, 2] = scalar * numpy.sin(delta_phase) * numpy.cos(2 * alpha) phase_plate_matrix[3, 3] = scalar * numpy.cos(delta_phase) return phase_plate_matrix