Skip to content

Simulation breaks down for small beam waists? #24

@bodokaiser

Description

@bodokaiser

Hello,

Thank you for publishing this great library! I also read your thesis, very nice!

Right now, I am also writing my PhD thesis and I would like to reproduce some of the following plots

Image

from David Gröthers's master's thesis

The following code reproduces the argmin plot of the top tweezer size plot (but for even smaller beam waists):

NA = 0.6

dx_nm = 20
dz_nm = 30
wav_nm = 759

nx = 512
nr = nx//2 - 1
nz = 256

base_kwargs_3d = {
    "n_pix_pupil": nr,
    "na": NA,
    "wavelength": wav_nm,
    "pix_size": dx_nm,
    "defocus_step": dz_nm,
}

def _():
    waists = np.linspace(0.1, 1, 100)
    #radii = np.arange(nx // 2) * dx_nm / 2 / wav_nm # units of wavelength
    rayleigh_limit = 0.61 * wav_nm / NA
    radii = np.arange(nx // 2) * dx_nm / rayleigh_limit # units of Rayleigh diffraction limit

    argmins = []
    valid_waists = []

    for waist in waists:
        prop = ScalarSphericalPropagator(
            n_pix_psf=nx, n_defocus=1, envelope=waist, **base_kwargs_3d
        )
        ff = prop.compute_focus_field().squeeze().numpy()
        ip = np.abs(ff[nx//2, nx//2:])**2

        imin, _ = find_first_local_minimum(ip)
        if imin is not None:
            valid_waists.append(waist)
            argmins.append(radii[imin])
        else:
            print(f"waist {waist:.3f} has no minimum")

    fig, ax = plt.subplots(figsize=(6, 4))
    ax.plot(valid_waists, argmins, marker='o')
    ax.set_xlabel(r"$w_0/R$")
    ax.set_ylabel(r"$r_{\min}/\zeta_0$")
    ax.set_title("First minimum position vs beam waist")

    return mo.mpl.interactive(fig)
Image

However, as you see something happens below w_0=0.2:

Image

Do you have any idea, what this could be?

Thank you and best wishes,
Bodo

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions