Source code for lasy.optical_elements.spectral_phase
import numpy as np
from .optical_element import OpticalElement
[docs]
class SpectralPhase(OpticalElement):
r"""
Class for an optical element that adds a spectral phase to a laser pulse.
The amplitude multiplier corresponds to:
.. math::
T(\omega) = \exp(i(\phi(\omega)))
where :math:`\phi(\omega)` is the spectral phase.
Parameters
----------
phase : 1D ndarray of floats (in rad)
Phase that should be applied to the laser pulse. The phase is assumed to be unwrapped.
omega : 1D ndarray of floats (in rad/s)
Angular frequencies at which the phase is defined.
"""
def __init__(self, phase, omega):
self.phase = phase
self.omega_in = omega
[docs]
def amplitude_multiplier(self, x, y, omega):
"""
Return the amplitude multiplier.
Parameters
----------
x, y, omega : ndarrays of floats
Define points on which to evaluate the multiplier.
These arrays need to all have the same shape.
Returns
-------
multiplier : ndarray of complex numbers
Contains the value of the multiplier at the specified points.
"""
# Sort the transmission function and angular frequencies to
# eliminate problems with interpolation (e.g. due to fftshifted data)
order = np.argsort(self.omega_in)
self.omega_in = self.omega_in[order]
self.phase = self.phase[order]
# interpolate transmission function to omega axis of the laser
phase = np.interp(omega, self.omega_in, self.phase)
return np.exp(1j * phase)