Source code for crystalpy.util.PolarizedPhoton

"""
This object represents a polarized photon, characterized by energy, direction vector and Stokes parameters.

"""

from crystalpy.util.Photon import Photon
from crystalpy.util.StokesVector import StokesVector
from crystalpy.polarization.MuellerMatrix import MuellerMatrix

[docs]class PolarizedPhoton(Photon): """Constructor. Parameters ---------- energy_in_ev : float Photon energy in eV. direction_vector : Vector instance The direction of the photon (no need to be normalized). stokes_vector : StokesVector instance Stokes vector describing the polarization state. """ def __init__(self, energy_in_ev, direction_vector, stokes_vector): super(PolarizedPhoton, self).__init__(energy_in_ev, direction_vector) self._stokes_vector = stokes_vector # def duplicate(self): # """Duplicates a stokes photon. # # Returns # ------- # PolarizedPhoton instance # New PolarizedPhoton instance with identical photon. # # """ # return PolarizedPhoton(self._energy_in_ev, # self._unit_direction_vector.duplicate(), # self._stokes_vector.duplicate())
[docs] def stokesVector(self): """Returns the Stokes vector. Returns ------- StokesVector instance The Stokes vector (referenced, not copied). """ return self._stokes_vector
[docs] def setStokesVector(self, stokes_vector): """Sets the stokes vector Parameters ---------- stokes_vector : StokesVector instance """ self._stokes_vector = stokes_vector
[docs] def applyMuellerMatrix(self,mueller_matrix=MuellerMatrix()): """Modify the stokes vector by a Muller matrix. Parameters ---------- mueller_matrix : MuellerMatrix instance, optional The Mueller matrix See Also -------- crystalpy.polarization.MuellerMatrix.MuellerMatrix """ s_in = self.stokesVector() s_out = mueller_matrix.calculate_stokes_vector( s_in ) self.setStokesVector(s_out)
[docs] def circularPolarizationDegree(self): """Returns the degree of circular polarization. Returns ------- float The polarization degree. """ return self._stokes_vector.circularPolarizationDegree()
def __eq__(self, candidate): if ((self.energy() == candidate.energy() and self.unitDirectionVector() == candidate.unitDirectionVector()) and self.stokesVector() == candidate.stokesVector()): return True return False