Simulation of microscopy-related data#
Fluoresence microscopy images#
Each fluorophore appears in the microscope as a diffraction limited spot. The
whole image is made up by the superposition of such spots. The
simulate_gauss() function provides functions to simulate images like
that.
Examples
First, create some data:
>>> shape = (120, 120) # shape of the simulated image
>>> coords = numpy.array([np.arange(10, 101, 10)]*2).T # create some data
>>> amplitudes = numpy.arange(100, 1001, 100)
>>> sigmas = numpy.arange(1, 11, 1)
Now, use the data to simulate the image (ideal case, no noise) using
simulate_gauss():
>>> img = simulate_gauss(shape, coords, amplitudes, sigmas)
Finally, shot noise (Poissonian) and camera noise (Gaussian) can be added:
>>> img_noisy = numpy.random.poisson(img) # shot noise
>>> img_noisy += numpy.random.normal(200, 20, img_noisy.shape) # camera noise
Single molecule tracking data#
Simulate trajectories of particles undergoing Brownian motion using the
simulate_brownian() function.
Examples
Create 10 tracks with exponentially distributed track lengths (mean 100), diffusion coefficient 0.7 μm²/s, lag time 10 ms and particles distributed initially randomly in a 30 μm x 30 μm square:
>>> trc = sm_tracks.simulate_brownian(10, 100, 0.7, size=(30, 30), lag_t=0.01,
track_len_dist="exp")
>>> trc.head()
x y frame particle
0 16.657713 19.759589 0 0
1 16.816584 19.994379 1 0
2 16.792206 20.014007 2 0
3 16.676282 20.041114 3 0
4 16.590677 20.002406 4 0
Programming reference#
- sdt.sim.simulate_gauss(shape, centers, amplitudes, sigmas, cutoff=5.0, mass=False, engine='numba')[source]#
Simulate an image from multiple Gaussian PSFs
Given a list of coordinates, amplitudes and sigmas, simulate a fluorescent image. This is a frontend to the lower level functions
gauss_psf_numba(),gauss_psf(), andgauss_psf_full().- Parameters:
shape (tuple of int, len=2) – Shape of the output image. First entry is the width, second is the height.
centers (numpy.ndarray, shape=(n, 2)) – Coordinates of the PSF centers
amplitudes (array_like) – Amplitudes of the PSFs. Either a scalar that is used for all Gaussians or an 1D array specifying the amplitude for each Gaussian. See also the mass parameter.
sigmas (array_like) – If it is one number, this will be used as sigma for all Gaussians. An array of two numbers will be interpreted as sigmas in x and y directions for all Gaussians. A one-dimensional array of length n can be used to specify sigma for each Gaussian, and a 2D array of shape (n, 2) gives sigmas in x and y directions for each Gaussian.
cutoff (float, optional) – Each Gaussian is only calculated in a box cutoff times sigma pixels around the center. Does not apply if engine is “python_full”. Defaults to 5.
mass (bool, optional) – If True, the value(s) given by amplitude are the integrated Gaussians. If False, they are amplitudes. Defaults to False.
engine ({"numba", "python", "python_full"}, optional) – “numba” is a
numba-optimized version, which is by far the fastest. “python” is written in pure python. “python_full” is also pure python and calculates each Gaussian for the whole image (not only in a region around the center, where it is significant), which makes it the slowest. Defaults to “numba”.
- Returns:
Simulated image.
- Return type:
numpy.ndarray
- sdt.sim.simulate_brownian(n_tracks, track_len, d, size=None, initial=None, pa=0, lagt=1, track_len_dist='const', random_state=None, columns={})[source]#
Simulate particles undergoing Brownian motion
- Parameters:
n_tracks (int) – Number of tracks to simulate
track_len (int) – Average track length (see also track_len_dist parameter )
d (float) – Diffusion coefficient
size (tuple, optional) – Size of the region where to simulate particles. If initial is None, this is used to randomly distribute the n_tracks particles.
initial (array-like, shape(n_tracks, m), optional) – Initial positions of the particles. If None, the particles will be placed randomly; in that case, size needs to be given.
pa (float, optional) – Positional (in)accuracy. Defaults to 0.
lagt (float) – Time between two recorded positions. Defaults to 1.
track_len_dist ({"const", "exp"} or callable, optional) – Track length distribution. If “const”, all tracks will be of length track_len. If “exp”, track lengths will be exponentially distributed with mean track_len. A callable has to take two arguments (n_tracks, track_len) and return a 1D array of ints containing the lengths of the tracks. Defaults to “const”
random_state (numpy.random.RandomState, optional) – If given, it will use this to create random numbers. Otherwise, a new
RandomStateobject will be created and used.columns (dict, optional) – Override default column names as defined in
config.columns. Relevant names are coords, particle, and time. This means, if your DataFrame has coordinate columns “x” and “z” and the time column “alt_frame”, setcolumns={"coords": ["x", "z"], "time": "alt_frame"}.
- Returns:
Simulated tracking data. Columns are coordinates, time, and particle columns as specified in the columns arg.
- Return type:
pandas.DataFrame
Low level simulation functions#
- sdt.sim.gauss_psf_full(shape, centers, amplitudes, sigmas)[source]#
Simulate an image from multiple Gaussian PSFs
Given a list of coordinates, amplitudes and sigmas, simulate a fluorescent image. For each emitter, the Gaussian is calculated over the whole image area, which makes this very slow (since calculating exponentials is quite time consuming.)
- Parameters:
shape (tuple of int, len=2) – Shape of the output image. First entry is the width, second is the height.
centers (numpy.ndarray, shape=(n, 2)) – Coordinates of the PSF centers
amplitudes (list of float, len=n) – Amplitudes of the Gaussians
sigmas (numpy.ndarray, shape(n, 2)) – x and y sigmas of the Gaussians
- Returns:
Simulated image.
- Return type:
numpy.ndarray
- sdt.sim.gauss_psf(shape, centers, amplitudes, sigmas, cutoff)[source]#
Simulate an image from multiple Gaussian PSFs
Given a list of coordinates, amplitudes and sigmas, simulate a fluorescent image. For each emitter, the Gaussian is calculated only in a square of 2*`roi_size`+1 pixels width, which can make it considerably faster than
gauss_psf_full().- Parameters:
shape (tuple of int, len=2) – Shape of the output image. First entry is the width, second is the height.
centers (numpy.ndarray, shape=(n, 2)) – Coordinates of the PSF centers
amplitudes (list of float, len=n) – Amplitudes of the Gaussians
sigmas (numpy.ndarray, shape(n, 2)) – x and y sigmas of the Gaussians
cutoff (float) – Each Gaussian is only calculated in a box cutoff times sigma pixels around the center.
- Returns:
Simulated image.
- Return type:
numpy.ndarray
- sdt.sim.gauss_psf_numba(shape, centers, amplitudes, sigmas, cutoff)[source]#
Simulate an image from multiple Gaussian PSFs
Given a list of coordinates, amplitudes and sigmas, simulate a fluorescent image. For each emitter, the Gaussian is calculated only in a square of 2*`roi_size`+1 pixels width. Also, the
numbapackage is used, which can make it considerably faster thangauss_psf_full()andgauss_psf().- Parameters:
shape (tuple of int, len=2) – Shape of the output image. First entry is the width, second is the height.
centers (numpy.ndarray, shape=(n, 2)) – Coordinates of the PSF centers
amplitudes (list of float, len=n) – Amplitudes of the Gaussians
sigmas (numpy.ndarray, shape(n, 2)) – x and y sigmas of the Gaussians
cutoff (float) – Each Gaussian is only calculated in a box cutoff times sigma pixels around the center.
- Returns:
Simulated image.
- Return type:
numpy.ndarray
- sdt.sim.brownian_track(track_len, d, size=None, initial=None, pa=0, lagt=1, random_state=None)[source]#
Simulate a single particle undergoing Brownian motion
- Parameters:
track_len (int) – Average track length (see also track_len_dist parameter )
d (float) – Diffusion coefficient
size (tuple, optional) – Size of the region where to simulate particles. If initial is None, this is used to randomly distribute the n_tracks particles.
initial (array-like, shape(n_tracks, m), optional) – Initial positions of the particles. If None, the particles will be placed randomly; in that case, size needs to be given.
pa (float, optional) – Positional (in)accuracy. Defaults to 0.
lagt (float) – Time between two recorded positions. Defaults to 1.
random_state (numpy.random.RandomState, optional) – If given, it will use this to create random numbers. Otherwise, a new
RandomStateobject will be created and used.
- Returns:
Simulated coordinates of the particle, one set of coordinates per row.
- Return type:
numpy.ndarray, shape(track_len, ndim)