Source code for crystalpy.polarization.MuellerResult

"""
Represents Mueller calculation results.
"""
import numpy

# TODO inheritate from DiffractionResults?
[docs]class MuellerResult(object): """Constructor. Parameters ---------- diffraction_result : DiffractionResult instance result of the diffraction. See Also -------- crystalpy.diffraction.DiffractionResults.DiffractionResults """ def __init__(self, diffraction_result): self.diffraction_result = diffraction_result self.diffraction_setup = diffraction_result.diffractionSetup() number_energies = len(self.energies()) number_angles = len(self.angle_deviations()) # Stokes parameters. self._s0 = numpy.zeros((number_energies, number_angles)) self._s1 = numpy.zeros((number_energies, number_angles)) self._s2 = numpy.zeros((number_energies, number_angles)) self._s3 = numpy.zeros((number_energies, number_angles)) # degree of circular polarization. self._circular_polarization_degree = numpy.zeros((number_energies, number_angles))
[docs] def energies(self): """Returns the energies used for these results. Returns ------- numpy array The array with energies in eV """ return self.diffraction_result.energies()
def _energy_index(self, energy): """Returns the index of the entry in the energies list that is closest to the given energy. Parameters ---------- energy : Energy to find index for. Returns ------- type Energy index that corresponds to the energy. """ energy_index = abs(self.energies()-energy).argmin() return energy_index
[docs] def angle_deviations(self): """Returns the angle deviations used for these results. Returns ------- numpy array Angle deviations used for these results. """ return self.diffraction_result.angleDeviations()
def _deviation_index(self, deviation): """Returns the index of the entry in the angle deviations list that is closest to the given deviation. Parameters ---------- deviation : Deviation to find index for. Returns ------- int Deviation index that corresponds to the deviation. """ deviation_index = abs(self.angle_deviations()-deviation).argmin() return deviation_index
[docs] def s0_by_energy(self, energy): """Returns the S0 Stokes parameter. Parameters ---------- energy : float Energy corresponding to the returned S0. Returns ------- Stokesvector instance. S0. """ energy_index = self._energy_index(energy) return self._s0[energy_index, :]
[docs] def s1_by_energy(self, energy): """Returns the S1 Stokes parameter. Parameters ---------- energy : float Energy corresponding to the returned S1. Returns ------- Stokesvector instance. S1. """ energy_index = self._energy_index(energy) return self._s1[energy_index, :]
[docs] def s2_by_energy(self, energy): """Returns the S2 Stokes parameter. Parameters ---------- energy : float Energy corresponding to the returned S2. Returns ------- Stokesvector instance. S2. """ energy_index = self._energy_index(energy) return self._s2[energy_index, :]
[docs] def s3_by_energy(self, energy): """Returns the S3 Stokes parameter. Parameters ---------- energy : float Energy corresponding to the returned S3. Returns ------- Stokesvector instance. S3. """ energy_index = self._energy_index(energy) return self._s3[energy_index, :]
[docs] def polarization_degree_by_energy(self, energy): """Returns the degree of circular polarization. Parameters ---------- energy : float Energy corresponding to the returned circular polarization value. Returns ------- float degree of circular polarization. """ energy_index = self._energy_index(energy) return self._circular_polarization_degree[energy_index, :]
[docs] def s0_by_deviation(self, deviation): """Returns the S0 Stokes parameter for a given deviation value. Parameters ---------- deviation : float Deviation corresponding to the returned S0. Returns ------- float S0. """ deviation_index = self._deviation_index(deviation) return self._s0[deviation_index, :]
[docs] def s1_by_deviation(self, deviation): """Returns the S1 Stokes parameter for a given deviation value. Parameters ---------- deviation : float Deviation corresponding to the returned S1. Returns ------- float S1. """ deviation_index = self._deviation_index(deviation) return self._s1[deviation_index, :]
[docs] def s2_by_deviation(self, deviation): """Returns the S2 Stokes parameter for a given deviation value. Parameters ---------- deviation : float Deviation corresponding to the returned S2. Returns ------- float S2. """ deviation_index = self._deviation_index(deviation) return self._s2[deviation_index, :]
[docs] def s3_by_deviation(self, deviation): """Returns the S0 Stokes parameter for a given deviation value. Parameters ---------- deviation : float Deviation corresponding to the returned S3. Returns ------- float S3. """ deviation_index = self._deviation_index(deviation) return self._s3[deviation_index, :]
[docs] def polarization_degree_by_deviation(self, deviation): """Returns the degree of circular polarization for a given deviation. Parameters ---------- deviation : Deviation corresponding to the returned degree of circular polarization. Returns ------- float degree of circular polarization. """ deviation_index = self._deviation_index(deviation) return self._circular_polarization_degree[deviation_index, :]
[docs] def add(self, energy, deviation, stokes_vector): """Adds a diffraction result for a given energy and deviation. Parameters ---------- energy : float The energy in eV deviation : float The deviation angle in rad. stokes_vector : StokesVector instance The stokes vector """ energy_index = self._energy_index(energy) deviation_index = self._deviation_index(deviation) self._s0[energy_index, deviation_index] = stokes_vector.s0 self._s1[energy_index, deviation_index] = stokes_vector.s1 self._s2[energy_index, deviation_index] = stokes_vector.s2 self._s3[energy_index, deviation_index] = stokes_vector.s3 self._circular_polarization_degree[energy_index, deviation_index] = stokes_vector.circularPolarizationDegree()