prysm.detector

Detector-related simulations.

class prysm.detector.Detector(pitch_x=None, pitch_y=None, pixel='rectangle', resolution=(1024, 1024), nbits=16, framebuffer=10)

Bases: object

Model of a image sensor.

capture(convolvable)

Sample a convolvable, mimics capturing a photo of an oversampled representation of an image.

Parameters

convolvable (prysm.Convolvable) – a convolvable object

Returns

a new convolvable object, as it would be sampled by the detector

Return type

prysm.convolvable

Raises

ValueError – if the convolvable would have to become supersampled by the detector; this would lead to an inaccurate result and is not supported

save_image(path, which='last')

Save an image captured by the detector.

Parameters
  • path (string) – path to save the image to

  • which (string or int) – if string, “first” or “last”, otherwise index into the capture buffer of the camera.

Raises

ValueError – bad target frame to save; should always be the a valid int < buffer_depth

show_image(which='last', fig=None, ax=None)

Show an image captured by the detector.

Parameters
  • which (string or int) – if string, “first” or “last”, otherwise index into the capture buffer of the camera

  • fig (matplotlib.figure.Figure, optional) – Figure containing the plot

  • ax (matplotlib.axes.Axis, optional) – Axis containing the plot

Returns

  • fig (`matplotlib.figure.Figure) – Figure containing the plot

  • ax (matplotlib.axes.Axis) – Axis containing the plot

pitch

1D pixel pitch - minimum of x/y pitches.

fill_factor_x

Fill factor in the X axis.

fill_factor_y

Fill factor in the Y axis.

fill_factor

1D fill factor – minimum of x/y fill factors.

fs

Sampling frequency in cy/mm.

nyquist

Nyquist frequency in cy/mm.

last

Last frame captured.

class prysm.detector.OLPF(width_x, width_y=None, sample_spacing=0, samples_x=None, samples_y=None)

Bases: prysm.convolution.Convolvable

Optical Low Pass Filter.

analytic_ft(x, y)

Analytic fourier transform of a pixel aperture.

Parameters
  • x (numpy.ndarray) – sample points in x axis

  • y (numpy.ndarray) – sample points in y axis

Returns

2D numpy array containing the analytic fourier transform

Return type

numpy.ndarray

center_x

Center “pixel” in x.

center_y

Center “pixel” in y.

conv(other)

Convolves this convolvable with another.

Parameters

other (Convolvable) – A convolvable object

Returns

a convolvable object

Return type

Convolvable

Notes

If self and other both have analytic Fourier transforms, no math will be done and the aFTs are merged directly.

If only one of self or other has an analytic Fourier transform, the output grid will be defined by the object which does not have an analytic Fourier transform.

If neither has an analytic transform, the output grid will: - span max(self.support, other.support) - have sample spacing min(self.sample_spacing, other.sample_spacing)

This ensures the signal remains Nyquist sampled and (probably) doesn’t expand beyond the extent of the output window. The latter condition will be violated when two large convolvables are convolved.

copy()

Return a (deep) copy of this instance.

deconv(other, balance=1000, reg=None, is_real=True, clip=False, postnormalize=True)

Perform the deconvolution of this convolvable object by another.

Parameters
  • other (Convolvable) – another convolvable object, used as the PSF in a Wiener deconvolution

  • balance (float, optional) – regularization parameter; passed through to skimage

  • reg (numpy.ndarray, optional) – regularization operator, passed through to skimage

  • is_real (bool, optional) – True if self and other are both real

  • clip (bool, optional) – clips self and other into (0,1)

  • postnormalize (bool, optional) – normalize the result such that it falls in [0,1]

Returns

a new Convolable object

Return type

Convolvable

Notes

See skimage: http://scikit-image.org/docs/dev/api/skimage.restoration.html#skimage.restoration.wiener

static from_file(path, scale)

Read a monochrome 8 bit per pixel file into a new Image instance.

Parameters
  • path (string) – path to a file

  • scale (float) – pixel scale, in microns

Returns

a new image object

Return type

Convolvable

plot_slice_xy(axlim=20, lw=3, zorder=3, fig=None, ax=None)

Create a plot of slices through the X and Y axes of the PSF.

Parameters
  • axlim (float or int, optional) – axis limits, in microns

  • lw (float, optional) – line width

  • zorder (int, optional) – zorder

  • fig (matplotlib.figure.Figure, optional) – Figure to draw plot in

  • ax (matplotlib.axes.Axis) – Axis to draw plot in

Returns

  • fig (matplotlib.figure.Figure, optional) – Figure containing the plot

  • ax (matplotlib.axes.Axis, optional) – Axis containing the plot

renorm()

Renormalize so that the peak is at a value of unity.

sample_spacing

center-to-center sample spacing.

samples_x

Number of samples in the x dimension.

samples_y

Number of samples in the y dimension.

save(path, nbits=8)

Write the image to a png, jpg, tiff, etc.

Parameters
  • path (string) – path to write the image to

  • nbits (int) – number of bits in the output image

shape

Proxy to phase or data shape.

show(xlim=None, ylim=None, interp_method=None, power=1, show_colorbar=True, fig=None, ax=None)

Display the image.

Parameters
  • xlim (iterable, optional) – x axis limits

  • ylim (iterable,) – y axis limits

  • interp_method (string) – interpolation technique used in display

  • power (float) – inverse of power to stretch image by. E.g. power=2 will plot img ** (1/2)

  • show_colorbar (bool) – whether to show the colorbar or not.

  • fig (matplotlib.figure.Figure, optional:) – Figure containing the plot

  • ax (matplotlib.axes.Axis, optional:) – Axis containing the plot

Returns

  • fig (matplotlib.figure.Figure, optional:) – Figure containing the plot

  • ax (matplotlib.axes.Axis, optional:) – Axis containing the plot

show_fourier(freq_x=None, freq_y=None, interp_method='lanczos', fig=None, ax=None)

Display the fourier transform of the image.

Parameters
  • interp_method (string) – method used to interpolate the data for display.

  • freq_x (iterable) – x frequencies to use for convolvable with analytical FT and no data

  • freq_y (iterable) – y frequencies to use for convolvable with analytic FT and no data

  • fig (matplotlib.figure.Figure) – Figure containing the plot

  • ax (matplotlib.axes.Axis) – Axis containing the plot

Returns

  • fig (matplotlib.figure.Figure) – Figure containing the plot

  • ax (matplotlib.axes.Axis) – Axis containing the plot

Notes

freq_x and freq_y are unused when the convolvable has a .data field.

size

Proxy to phase or data size.

slice_x

Retrieve a slice through the X axis of the phase.

Returns

  • self.unit (numpy.ndarray) – ordinate axis

  • slice of self.phase or self.data (numpy.ndarray)

slice_y

Retrieve a slice through the Y axis of the phase.

Returns

  • self.unit (numpy.ndarray) – ordinate axis

  • slice of self.phase or self.data (numpy.ndarray)

support

Width of the domain.

support_x

Width of the domain in X.

support_y

Width of the domain in Y.

class prysm.detector.PixelAperture(width_x, width_y=None, sample_spacing=0, samples_x=None, samples_y=None)

Bases: prysm.convolution.Convolvable

The aperture of a rectangular pixel.

analytic_ft(x, y)

Analytic fourier transform of a pixel aperture.

Parameters
  • x (numpy.ndarray) – sample points in x axis

  • y (numpy.ndarray) – sample points in y axis

Returns

2D numpy array containing the analytic fourier transform

Return type

numpy.ndarray

center_x

Center “pixel” in x.

center_y

Center “pixel” in y.

conv(other)

Convolves this convolvable with another.

Parameters

other (Convolvable) – A convolvable object

Returns

a convolvable object

Return type

Convolvable

Notes

If self and other both have analytic Fourier transforms, no math will be done and the aFTs are merged directly.

If only one of self or other has an analytic Fourier transform, the output grid will be defined by the object which does not have an analytic Fourier transform.

If neither has an analytic transform, the output grid will: - span max(self.support, other.support) - have sample spacing min(self.sample_spacing, other.sample_spacing)

This ensures the signal remains Nyquist sampled and (probably) doesn’t expand beyond the extent of the output window. The latter condition will be violated when two large convolvables are convolved.

copy()

Return a (deep) copy of this instance.

deconv(other, balance=1000, reg=None, is_real=True, clip=False, postnormalize=True)

Perform the deconvolution of this convolvable object by another.

Parameters
  • other (Convolvable) – another convolvable object, used as the PSF in a Wiener deconvolution

  • balance (float, optional) – regularization parameter; passed through to skimage

  • reg (numpy.ndarray, optional) – regularization operator, passed through to skimage

  • is_real (bool, optional) – True if self and other are both real

  • clip (bool, optional) – clips self and other into (0,1)

  • postnormalize (bool, optional) – normalize the result such that it falls in [0,1]

Returns

a new Convolable object

Return type

Convolvable

Notes

See skimage: http://scikit-image.org/docs/dev/api/skimage.restoration.html#skimage.restoration.wiener

static from_file(path, scale)

Read a monochrome 8 bit per pixel file into a new Image instance.

Parameters
  • path (string) – path to a file

  • scale (float) – pixel scale, in microns

Returns

a new image object

Return type

Convolvable

plot_slice_xy(axlim=20, lw=3, zorder=3, fig=None, ax=None)

Create a plot of slices through the X and Y axes of the PSF.

Parameters
  • axlim (float or int, optional) – axis limits, in microns

  • lw (float, optional) – line width

  • zorder (int, optional) – zorder

  • fig (matplotlib.figure.Figure, optional) – Figure to draw plot in

  • ax (matplotlib.axes.Axis) – Axis to draw plot in

Returns

  • fig (matplotlib.figure.Figure, optional) – Figure containing the plot

  • ax (matplotlib.axes.Axis, optional) – Axis containing the plot

renorm()

Renormalize so that the peak is at a value of unity.

sample_spacing

center-to-center sample spacing.

samples_x

Number of samples in the x dimension.

samples_y

Number of samples in the y dimension.

save(path, nbits=8)

Write the image to a png, jpg, tiff, etc.

Parameters
  • path (string) – path to write the image to

  • nbits (int) – number of bits in the output image

shape

Proxy to phase or data shape.

show(xlim=None, ylim=None, interp_method=None, power=1, show_colorbar=True, fig=None, ax=None)

Display the image.

Parameters
  • xlim (iterable, optional) – x axis limits

  • ylim (iterable,) – y axis limits

  • interp_method (string) – interpolation technique used in display

  • power (float) – inverse of power to stretch image by. E.g. power=2 will plot img ** (1/2)

  • show_colorbar (bool) – whether to show the colorbar or not.

  • fig (matplotlib.figure.Figure, optional:) – Figure containing the plot

  • ax (matplotlib.axes.Axis, optional:) – Axis containing the plot

Returns

  • fig (matplotlib.figure.Figure, optional:) – Figure containing the plot

  • ax (matplotlib.axes.Axis, optional:) – Axis containing the plot

show_fourier(freq_x=None, freq_y=None, interp_method='lanczos', fig=None, ax=None)

Display the fourier transform of the image.

Parameters
  • interp_method (string) – method used to interpolate the data for display.

  • freq_x (iterable) – x frequencies to use for convolvable with analytical FT and no data

  • freq_y (iterable) – y frequencies to use for convolvable with analytic FT and no data

  • fig (matplotlib.figure.Figure) – Figure containing the plot

  • ax (matplotlib.axes.Axis) – Axis containing the plot

Returns

  • fig (matplotlib.figure.Figure) – Figure containing the plot

  • ax (matplotlib.axes.Axis) – Axis containing the plot

Notes

freq_x and freq_y are unused when the convolvable has a .data field.

size

Proxy to phase or data size.

slice_x

Retrieve a slice through the X axis of the phase.

Returns

  • self.unit (numpy.ndarray) – ordinate axis

  • slice of self.phase or self.data (numpy.ndarray)

slice_y

Retrieve a slice through the Y axis of the phase.

Returns

  • self.unit (numpy.ndarray) – ordinate axis

  • slice of self.phase or self.data (numpy.ndarray)

support

Width of the domain.

support_x

Width of the domain in X.

support_y

Width of the domain in Y.

prysm.detector.pixelaperture_analytic_otf(width_x, width_y, freq_x, freq_y)

Analytic MTF of a rectangular pixel aperture.

Parameters
  • width_x (float) – x diameter of the pixel, in microns

  • width_y (float) – y diameter of the pixel, in microns

  • freq_x (numpy.ndarray) – x spatial frequency, in cycles per micron

  • freq_y (numpy.ndarray) – y spatial frequency, in cycles per micron

Returns

MTF of the pixel aperture

Return type

numpy.ndarray

prysm.detector.bindown(array, nsamples_x, nsamples_y=None, mode='avg')

Bin (resample) an array.

Parameters
  • array (numpy.ndarray) – array of values

  • nsamples_x (int) – number of samples in x axis to bin by

  • nsamples_y (int) – number of samples in y axis to bin by. If None, duplicates value from nsamples_x

  • mode (str, {‘avg’, ‘sum’}) – sum or avg, how to adjust the output signal

Returns

ndarray binned by given number of samples

Return type

numpy.ndarray

Notes

Array should be 2D. TODO: patch to allow 3D data.

If the size of array is not evenly divisible by the number of samples, the algorithm will trim around the border of the array. If the trim length is odd, one extra sample will be lost on the left side as opposed to the right side.

Raises

ValueError – invalid mode

prysm.detector.bindown_with_units(px_x, px_y, source_spacing, source_data)

Perform bindown, returning unit axes and data.

Parameters
  • px_x (float) – pixel pitch in the x direction, microns

  • px_y (float) – pixel pitch in the y direction, microns

  • source_spacing (float) – pixel pitch in the source data, microns

  • source_data (numpy.ndarray) – ndarray of regularly spaced data

Returns

  • ux (numpy.ndarray) – 1D array of sample coordinates in the x direction

  • uy (numpy.ndarray) – 1D array of sample coordinates in the y direction

  • data (numpy.ndarray) – binned-down data