Measurements

This module contains tools to simulate various measurement models

All the measurements here are safe to use in an automatic differentiation model. There exist tools to simulate detectors with finite saturation thresholds, backgrounds, and more.

cdtools.tools.measurements.intensity(wavefield, detector_slice=None, epsilon=1e-07, saturation=None, oversampling=1, simulate_finite_pixels=False)

Returns the intensity of a wavefield

The intensity is defined as the magnitude squared of the wavefront. If a detector slice is given, the returned array will only include that slice from the simulated wavefront.

Parameters:
  • wavefield (torch.Tensor) – A JxMxN stack of complex-valued wavefields

  • detector_slice (slice) – Optional, a slice or tuple of slices defining a section of the simulation to return

  • saturation (float) – Optional, a maximum saturation value to clamp the resulting intensities to

  • oversampling (int) – Default 1, the width of the region pixels in the wavefield to bin into a single detector pixel

Returns:

sim_patterns – A real MxN array storing the wavefield’s intensities

Return type:

torch.Tensor

cdtools.tools.measurements.incoherent_sum(wavefields, detector_slice=None, epsilon=1e-07, saturation=None, oversampling=1, simulate_finite_pixels=False)

Returns the incoherent sum of the intensities of the wavefields

The intensity is defined as the sum of the magnitudes squared of the wavefields. If a detector slice is given, the returned array will only include that slice from the simulated wavefronts.

The (-3) index is the set of incoherently adding patterns, and any indexes further to the front correspond to the set of diffraction patterns to measure. The (-2) and (-1) indices are the wavefield, and the final index is the complex index

Parameters:
  • wavefields (torch.Tensor) – An LxJxMxNx stack of complex wavefields

  • detector_slice (slice) – Optional, a slice or tuple of slices defining a section of the simulation to return

  • saturation (float) – Optional, a maximum saturation value to clamp the resulting intensities to

  • oversampling (int) – Default 1, the width of the region pixels in the wavefield to bin into a single detector pixel

Returns:

sim_patterns – A real LXMxN array storing the incoherently summed intensities

Return type:

torch.Tensor

cdtools.tools.measurements.quadratic_background(wavefield, background, *args, detector_slice=None, measurement=<function intensity>, epsilon=1e-07, saturation=None, oversampling=1, simulate_finite_pixels=False)

Returns the intensity of a wavefield plus a background

The intensity is calculated via the given measurment function Then, the square of the given background is added. This kind of background model is commonly used to enforce positivity of the background model.

Parameters:
  • wavefield (torch.Tensor) – A JxMxN stack of complex-valued wavefields

  • background (torch.Tensor) – An tensor storing the square root of the detector background

  • detector_slice (slice) – Optional, a slice or tuple of slices defining a section of the simulation to return

  • measurement (function) – Default is measurements.intensity, the measurement function to use.

  • saturation (float) – Optional, a maximum saturation value to clamp the resulting intensities to

  • oversampling (int) – Default 1, the width of the region pixels in the wavefield to bin into a single detector pixel

Returns:

sim_patterns – A real MxN array storing the wavefield’s intensities

Return type:

torch.Tensor