Source code for qpsphere.models

import numbers
import numpy as np

from .mod_mie import mie
from .mod_mie_avg import mie_avg
from .mod_proj import projection
from .mod_rytov import rytov
from .mod_rytov_sc import rytov_sc

model_dict = {"mie": mie,
              "mie-avg": mie_avg,
              "projection": projection,
              "rytov": rytov,
              "rytov-sc": rytov_sc,

#: available light-scattering models
available = sorted(list(model_dict.keys()))

[docs]def simulate(radius=5e-6, sphere_index=1.339, medium_index=1.333, wavelength=550e-9, grid_size=(80, 80), model="projection", pixel_size=None, center=None): """Simulate scattering at a sphere Parameters ---------- radius: float Radius of the sphere [m] sphere_index: float Refractive index of the object medium_index: float Refractive index of the surrounding medium wavelength: float Vacuum wavelength of the imaging light [m] grid_size: tuple of ints or int Resulting image size in x and y [px] model: str Sphere model to use (see :const:`available`) pixel_size: float or None Pixel size [m]; if set to `None` the pixel size is chosen such that the radius fits at least three to four times into the grid. center: tuple of floats or None Center position in image coordinates [px]; if set to None, the center of the image (grid_size - 1)/2 is used. Returns ------- qpi: qpimage.QPImage Quantitative phase data set """ if isinstance(grid_size, numbers.Integral): # default to square-shape grid grid_size = (grid_size, grid_size) if pixel_size is None: # select simulation automatically rl = radius / wavelength if rl < 5: # a lot of diffraction artifacts may occur; # use 4x radius to capture the full field fact = 4 elif rl >= 5 and rl <= 10: # linearly decrease towards 3x radius fact = 4 - (rl - 5) / 5 else: # not many diffraction artifacts occur; # 3x radius is enough and allows to # simulate larger radii with BHFIELD fact = 3 pixel_size = fact * radius / np.min(grid_size) if center is None: center = (np.array(grid_size) - 1) / 2 model = model_dict[model] qpi = model(radius=radius, sphere_index=sphere_index, medium_index=medium_index, wavelength=wavelength, pixel_size=pixel_size, grid_size=grid_size, center=center) return qpi