finesse.knm.maps.map_scattering_coefficients¶
- finesse.knm.maps.map_scattering_coefficients(q: BeamParam, int max_order, double[::1] x, double[::1] y, double complex[:, ::1] Z, bool reverse_gouy=False)¶
Calculates the mode scattering coefficients up to some maximum mode order for a uniformly spaced 2-dimensional map. Essentially it is computing multiple overlap integrals between each input and output mode for some complex valued abberation map, Z.
ab are the output mode indicies
nm are the input mode indicies
- Parameters:
- qBeamParam
Setting input and output complex beam parameters for overlap calcuations. Options are: - q : all input/output beam parameters are the same - (qx, qy) : astigmatic input/output beam parameters - (q_ix, q_iy, q_ox, q_oy) : general case, each x/y input/out can be different
- max_orderint
Maximum order of mode scattering to compute up to.
- x, yarray[double]
1-dimensional arrays specifying the x and y uniformally sampled axis for the map
- Zarray[complex]
2-dimensional array describing the complex abberation being applied to some input beam. The shape of this array should be Z[Ny, Nx], where Ny and Nx are the number of y and x samples respectively.
- reverse_gouybool, optional
If true, the gouy phase terms are removed from the scattering coefficients
- Returns:
- Karray[complex]
Coupling coefficients array with indexing (inx, outx, iny, outy) upto max_order input.
Examples
Same input and output beam parameter but computing the scattering from some arbitrary map:
import finesse from finesse.knm.maps import map_scattering_coefficients import numpy as np maxtem = 10 q = finesse.BeamParam(w0=1e-3, z=0) x = np.linspace(-4*q.w, 4*q.w, 201) y = np.linspace(-4*q.w, 4*q.w, 200) X, Y = np.meshgrid(x, y) # Mix of liner and quadratic phase terms to compute scattering # coefficients for Z = np.exp( 1j * 1e-6 * 2 * np.pi * (0.2*X + 0.1*Y + 1000*X**2 - 1000*Y**2) / 1064e-9 ) K = map_scattering_coefficients(q, maxtem, x, y, Z) print("HG 10 -> 30", K[1,3,0,0]) print("HG 00 -> 00", K[0,0,0,0]) print("HG 00 -> 21", K[0,2,0,1])
Different input and output beam parameters. Here modelling mode mismatch between different beam parameters:
qx1 = finesse.BeamParam(w0=1e-3, z=0) qy1 = qx1 qx2 = finesse.BeamParam(w0=1.2e-3, z=0) qy2 = qx2 Z = np.ones_like(Z) K = map_scattering_coefficients((qx1,qy1,qx2,qy2), maxtem, x, y, Z) print("HG 00 -> 20", K[0,2,0,0]) print("HG 00 -> 00", K[0,0,0,0])