Source code for lasy.profiles.transverse.jinc_profile
import numpy as np
import scipy.special as scispe
from .transverse_profile import TransverseProfile
[docs]
class JincTransverseProfile(TransverseProfile):
r"""
Class for the analytic profile of a Jinc laser pulse.
The transverse envelope corresponds to:
.. math::
\mathcal{T}(x, y) = 2\frac{J_1(r/w_0)}{r/w_0} \textrm{, with } r=\sqrt{x^2+y^2}
where :math:`J_1` is the Bessel function of the first kind of order one
Parameters
----------
w0 : float (in meter)
The waist of the laser pulse, i.e. :math:`w_0` in the above formula.
"""
def __init__(self, w0):
super().__init__()
self.w0 = w0
def _evaluate(self, x, y):
"""
Return the transverse envelope.
Parameters
----------
x, y : ndarrays of floats
Define points on which to evaluate the envelope
These arrays need to all have the same shape.
Returns
-------
envelope : ndarray of complex numbers
Contains the value of the envelope at the specified points
This array has the same shape as the arrays x, y
"""
r_over_w0 = np.sqrt(x**2 + y**2) / self.w0
envelope = np.ones_like(r_over_w0)
# Avoid dividing by zero
np.divide(
2.0 * scispe.jv(1, r_over_w0),
r_over_w0,
out=envelope,
where=r_over_w0 > 0.0,
)
return envelope