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

astype(other_type)

Change this instance of one type into another.

Useful to access methods of the other class.

Parameters

other_type (object) – the name of the other type to “cast” to, e.g. Interferogram. Not a string.

Returns

type-converted to the other type.

Return type

self

center_x

Center “pixel” in x.

center_y

Center “pixel” in y.

change_xy_unit(to, inplace=True)

Change the x/y unit to a new one, scaling the data in the process.

Parameters
  • to (astropy.unit or str) – if not an astropy unit, a string that is a valid attribute of astropy.units.

  • inplace (bool, optional) – if True, returns self. Otherwise returns the modified data.

Returns

  • RichData – self, if inplace=True

  • numpy.ndarray, numpy.ndarray – x, y from self, if inplace=False

change_z_unit(to, inplace=True)

Change the z unit to a new one, scaling the data in the process.

Parameters
  • to (astropy.unit or str) – if not an astropy unit, a string that is a valid attribute of astropy.units.

  • inplace (bool, optional) – if True, returns self. Otherwise returns the modified data.

Returns

  • RichData – self, if inplace=True

  • numpy.ndarray – data from self, if inplace=False

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

exact_polar(rho, phi=None)

Retrieve data at the specified radial coordinates pairs.

Parameters
  • r (iterable) – radial coordinate(s) to sample

  • phi (iterable) – azimuthal coordinate(s) to sample

Returns

data at the given points

Return type

numpy.ndarray

exact_x(x)

Return data at an exact x coordinate along the y=0 axis.

Parameters

x (number or numpy.ndarray) – x coordinate(s) to return

Returns

ndarray of values

Return type

numpy.ndarray

exact_xy(x, y=None)

Retrieve data at the specified X-Y frequency pairs.

Parameters
  • x (iterable) – X coordinate(s) to retrieve

  • y (iterable) – Y coordinate(s) to retrieve

Returns

data at the given points

Return type

numpy.ndarray

exact_y(y)

Return data at an exact y coordinate along the x=0 axis.

Parameters

y (number or numpy.ndarray) – y coordinate(s) to return

Returns

ndarray of values

Return type

numpy.ndarray

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

msaa(factor=2)

Multi-Sample anti-aliasing.

Perform anti-aliasing by averaging blocks of (factor, factor) pixels into a simple value.

Parameters

factor (int, optional) – factor by which to decimate the data

Returns

self

Return type

Convolvable

plot2d(xlim=None, ylim=None, clim=None, cmap=None, log=False, power=1, interpolation=None, show_colorbar=True, show_axlabels=True, fig=None, ax=None)

Plot the data in 2D.

Parameters
  • xlim (float or iterable, optional) – x axis limits. If not iterable, symmetric version of the single value

  • ylim (float or iterable, optional) – y axis limits. If None and xlim is not None, copied from xlim. If not iterable, symmetric version of the single value.

  • clim (iterable, optional) – clim passed directly to matplotlib. If None, looked up on self._default_clim.

  • cmap (str, optional) – colormap to use, passed directly to matplotlib if not None. If None, looks up the default cmap for self._data_type on config

  • log (bool, optional) – if True, plot on a log color scale

  • power (float, optional) – if not 1, plot on a power stretched color scale

  • interpolation (str, optional) – interpolation method to use, passed directly to matplotlib

  • show_colorbar (bool, optional) – if True, draws the colorbar

  • show_axlabels (bool, optional) – if True, draws the axis labels

  • 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

renorm()

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

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.

size

Proxy to phase or data size.

slices(twosided=None)

Create a Slices instance from this instance.

Parameters

twosided (bool, optional) – if None, copied from self._default_twosided

Returns

a Slices object

Return type

Slices

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

astype(other_type)

Change this instance of one type into another.

Useful to access methods of the other class.

Parameters

other_type (object) – the name of the other type to “cast” to, e.g. Interferogram. Not a string.

Returns

type-converted to the other type.

Return type

self

center_x

Center “pixel” in x.

center_y

Center “pixel” in y.

change_xy_unit(to, inplace=True)

Change the x/y unit to a new one, scaling the data in the process.

Parameters
  • to (astropy.unit or str) – if not an astropy unit, a string that is a valid attribute of astropy.units.

  • inplace (bool, optional) – if True, returns self. Otherwise returns the modified data.

Returns

  • RichData – self, if inplace=True

  • numpy.ndarray, numpy.ndarray – x, y from self, if inplace=False

change_z_unit(to, inplace=True)

Change the z unit to a new one, scaling the data in the process.

Parameters
  • to (astropy.unit or str) – if not an astropy unit, a string that is a valid attribute of astropy.units.

  • inplace (bool, optional) – if True, returns self. Otherwise returns the modified data.

Returns

  • RichData – self, if inplace=True

  • numpy.ndarray – data from self, if inplace=False

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

exact_polar(rho, phi=None)

Retrieve data at the specified radial coordinates pairs.

Parameters
  • r (iterable) – radial coordinate(s) to sample

  • phi (iterable) – azimuthal coordinate(s) to sample

Returns

data at the given points

Return type

numpy.ndarray

exact_x(x)

Return data at an exact x coordinate along the y=0 axis.

Parameters

x (number or numpy.ndarray) – x coordinate(s) to return

Returns

ndarray of values

Return type

numpy.ndarray

exact_xy(x, y=None)

Retrieve data at the specified X-Y frequency pairs.

Parameters
  • x (iterable) – X coordinate(s) to retrieve

  • y (iterable) – Y coordinate(s) to retrieve

Returns

data at the given points

Return type

numpy.ndarray

exact_y(y)

Return data at an exact y coordinate along the x=0 axis.

Parameters

y (number or numpy.ndarray) – y coordinate(s) to return

Returns

ndarray of values

Return type

numpy.ndarray

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

msaa(factor=2)

Multi-Sample anti-aliasing.

Perform anti-aliasing by averaging blocks of (factor, factor) pixels into a simple value.

Parameters

factor (int, optional) – factor by which to decimate the data

Returns

self

Return type

Convolvable

plot2d(xlim=None, ylim=None, clim=None, cmap=None, log=False, power=1, interpolation=None, show_colorbar=True, show_axlabels=True, fig=None, ax=None)

Plot the data in 2D.

Parameters
  • xlim (float or iterable, optional) – x axis limits. If not iterable, symmetric version of the single value

  • ylim (float or iterable, optional) – y axis limits. If None and xlim is not None, copied from xlim. If not iterable, symmetric version of the single value.

  • clim (iterable, optional) – clim passed directly to matplotlib. If None, looked up on self._default_clim.

  • cmap (str, optional) – colormap to use, passed directly to matplotlib if not None. If None, looks up the default cmap for self._data_type on config

  • log (bool, optional) – if True, plot on a log color scale

  • power (float, optional) – if not 1, plot on a power stretched color scale

  • interpolation (str, optional) – interpolation method to use, passed directly to matplotlib

  • show_colorbar (bool, optional) – if True, draws the colorbar

  • show_axlabels (bool, optional) – if True, draws the axis labels

  • 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

renorm()

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

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.

size

Proxy to phase or data size.

slices(twosided=None)

Create a Slices instance from this instance.

Parameters

twosided (bool, optional) – if None, copied from self._default_twosided

Returns

a Slices object

Return type

Slices

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