SwiFTly Functions

C/C++

sdp_SwiFTly *sdp_swiftly_create(int64_t image_size, int64_t yN_size, int64_t xM_size, double W, sdp_Error *status)

Creates a plan for the SwiFTly algorithm (streaming widefield Fourier transform for large-scale interferometry)

Image, facet and subgrid sizes must be compatible. Facets and subgrids must be appropriately padded for algorithm to work. The most important rule is:

xA_size <= xM_size - W / yN_size * N

I.e. the usable subgrid region has a strict upper bound given by the size of the convolution function. Furthermore precision will degrade the more facet space gets used, proportional to the value of the PSWF.

Parameters:
  • image_size – Size of entire (virtual) image in pixels

  • xM_size – Internal padded subgrid size

  • yN_size – Internal padded facet size

  • W – Parameter for PSWF window function

  • status – Error status.

Returns:

sdp_SwiFTly* Handle to SwiFTly plan.

int64_t sdp_swiftly_get_image_size(sdp_SwiFTly *swiftly)

Queries image size associated with SwiFTly plan.

Parameters:

swiftly – SwiFTly plan.

int64_t sdp_swiftly_get_facet_size(sdp_SwiFTly *swiftly)

Queries facet size (yN) associated with SwiFTly plan.

Parameters:

swiftly – SwiFTly plan.

int64_t sdp_swiftly_get_subgrid_size(sdp_SwiFTly *swiftly)

Queries subgrid size (xM) associated with SwiFTly plan.

Parameters:

swiftly – SwiFTly plan.

void sdp_swiftly_free(sdp_SwiFTly *swiftly)

Destroys the SwiFTly plan.

Parameters:

swiftly – Handle to SwiFTly plan.

void sdp_swiftly_prepare_facet(sdp_SwiFTly *swiftly, sdp_Mem *facet, sdp_Mem *prep_facet_out, int64_t facet_offset, sdp_Error *status)

Performs facet preparation.

This multiplies by Fb and does Fourier transformation. Common work to be done for each facet (and axis) before calling sdp_swiftly_extract_from_facet()

Parameters:
  • swiftly – SwiFTly plan.

  • facet[*,<yN_size] Facet data

  • prep_facet_out[*,yN_size] Prepared facet output

  • facet_offset – Offset of facet mid-point relative to image mid-point

  • status – Error status

void sdp_swiftly_extract_from_facet(sdp_SwiFTly *swiftly, sdp_Mem *prep_facet, sdp_Mem *contribution_out, int64_t subgrid_offset, sdp_Error *status)

Extract facet contribution to a subgrid.

Copies out all data from facet prepared using `sdp_swiftly_prepare_facet() that relates to a subgrid at a particular offset. The returned representation is optimised for representing this data in a compact way, and should be used for distribution. Use sdp_swiftly_add_to_subgrid() or sdp_swiftly_add_to_subgrid_2d() in order to accumulate such contributions from multiple facets.

Parameters:
  • swiftly – SwiFTly plan.

  • prep_facet[*,yN_size] Prepared facet output

  • contribution_out[*,xM_yN_size] Facet contribution to subgrid

  • subgrid_offset – Offset of subgrid mid-point relative to grid mid-point

  • status – Error status

void sdp_swiftly_add_to_subgrid(sdp_SwiFTly *swiftly, sdp_Mem *contribution, sdp_Mem *subgrid_image_inout, int64_t facet_offset, sdp_Error *status)

Add facet contribution to a subgrid image.

Accumulates a facet contribution generated using sdp_swiftly_extract_from_facet() in subgrid image passed. Subgrid image should be filled with zeros when passed to function initially. Use sdp_swiftly_finish_subgrid_inplace() or sdp_swiftly_finish_subgrid_inplace_2d() to obtain subgrid data.

Parameters:
  • swiftly – SwiFTly plan.

  • contribution[*,xM_yN_size] Facet contribution to subgrid

  • subgrid_image_inout[*,xM_size] Subgrid image for accumulation

  • facet_offset – Offset of facet mid-point relative to image mid-point

  • status – Error status

void sdp_swiftly_add_to_subgrid_2d(sdp_SwiFTly *swiftly, sdp_Mem *contribution, sdp_Mem *subgrid_image_inout, int64_t facet_offset0, int64_t facet_offset1, sdp_Error *status)

Add facet contribution to a subgrid image (both axes)

Accumulates a facet contribution generated using sdp_swiftly_extract_from_facet() in subgrid image passed. Subgrid image should be filled with zeros when passed to function initially. Use sdp_swiftly_finish_subgrid_inplace() or sdp_swiftly_finish_subgrid_inplace_2d() to obtain subgrid data.

This is equivalent to applying sdp_swiftly_add_to_subgrid() to a contribution and subgrid image, then adding their transposition.

Parameters:
  • swiftly – SwiFTly plan.

  • contribution[xM_yN_size,xM_yN_size] Facet contribution to subgrid

  • subgrid_image_inout[xM_size,xM_size] Subgrid image for accumulation

  • facet_offset0 – Facet mid-point offset relative to image mid-point along first axis

  • facet_offset1 – Facet mid-point offset relative to image mid-point along second axis

  • status – Error status

void sdp_swiftly_finish_subgrid_inplace(sdp_SwiFTly *swiftly, sdp_Mem *subgrid_inout, int64_t subgrid_offset, sdp_Error *status)

Finish subgrid after contribution accumulation.

Performs the final Fourier Transformation to obtain the subgrid from the subgrid image sum generated using sdp_swiftly_add_to_subgrid() and/or sdp_swiftly_add_to_subgrid_2d().

Parameters:
  • swiftly – SwiFTly plan.

  • subgrid_inout[*,xM_size] Accumulated subgrid image / subgrid

  • subgrid_offset – Offset of subgrid mid-point relative to grid mid-point

  • status – Error status

void sdp_swiftly_finish_subgrid(sdp_SwiFTly *swiftly, sdp_Mem *subgrid_image, sdp_Mem *subgrid_out, int64_t subgrid_offset, sdp_Error *status)

Finish subgrid after contribution accumulation.

Performs the final Fourier Transformation to obtain the subgrid from the subgrid image sum generated using sdp_swiftly_add_to_subgrid() and/or sdp_swiftly_add_to_subgrid_2d().

Parameters:
  • swiftly – SwiFTly plan.

  • subgrid_image[*,xM_size] Subgrid image with accumulated contributions

  • subgrid_out[*,<xM_size] Finished subgrid

  • subgrid_offset – Offset of subgrid mid-point relative to grid mid-point

  • status – Error status

void sdp_swiftly_finish_subgrid_inplace_2d(sdp_SwiFTly *swiftly, sdp_Mem *subgrid_inout, int64_t subgrid_offset0, int64_t subgrid_offset1, sdp_Error *status)

Finish subgrid after contribution accumulation (both axes)

Performs the final Fourier Transformation to obtain the subgrid from the subgrid image sum. This performs the transformation on both axes - equivalent to applying sdp_swiftly_finish_subgrid_inplace() to a subgrid image, then its transposition.

Parameters:
  • swiftly – SwiFTly plan.

  • subgrid_inout[xM_size,xM_size] Subgrid / subgrid image for accumulation

  • subgrid_offset0 – Subgrid mid-point offset relative to grid mid-point along first axis

  • subgrid_offset1 – Subgrid mid-point offset relative to grid mid-point along second axis

  • status – Error status

void sdp_swiftly_prepare_subgrid_inplace(sdp_SwiFTly *swiftly, sdp_Mem *subgrid_inout, int64_t subgrid_offset, sdp_Error *status)

Performs subgrid preparation.

Performs the Fourier Transformation to obtain the subgrid image and applies appropriate offsets to allow extracting subgrid contributions using sdp_swiftly_extract_from_subgrid() and/or sdp_swiftly_extract_from_subgrid_2d(). See sdp_swiftly_prepare_subgrid_inplace_2d() for two-dimensional version.

Parameters:
  • swiftly – SwiFTly plan.

  • subgrid_inout[*,xM_size] Subgrid / subgrid image.

  • subgrid_offset – Subgrid mid-point offset relative to grid mid-point along second axis

  • status – Error status

void sdp_swiftly_prepare_subgrid_inplace_2d(sdp_SwiFTly *swiftly, sdp_Mem *subgrid_inout, int64_t subgrid_offset0, int64_t subgrid_offset1, sdp_Error *status)

Performs subgrid preparation.

Performs the Fourier Transformation to obtain the subgrid image and applies appropriate offsets to allow extracting subgrid contributions using sdp_swiftly_extract_from_subgrid() and/or sdp_swiftly_extract_from_subgrid_2d(). This performs the transformation on both axes - equivalent to applying sdp_swiftly_prepare_subgrid_inplace() to a subgrid, then its transposition.

Parameters:
  • swiftly – SwiFTly plan.

  • subgrid_inout[xM_size,xM_size] Subgrid / subgrid image.

  • subgrid_offset0 – Subgrid mid-point offset relative to grid mid-point along first axis

  • subgrid_offset1 – Subgrid mid-point offset relative to grid mid-point along second axis

  • status – Error status

void sdp_swiftly_extract_from_subgrid(sdp_SwiFTly *swiftly, sdp_Mem *subgrid_image, sdp_Mem *contribution_out, int64_t facet_offset, sdp_Error *status)

Extract subgrid contribution to a facet.

Copies out all data from subgrid prepared with sdp_swiftly_prepare_subgrid() that relates to a facet at a particular offset. The returned representation is optimised for representing this data in a compact way, and should be used for distribution. Use sdp_swiftly_add_to_facet() in order to accumulate such contributions from multiple facets. See sdp_swiftly_extract_from_subgrid_2d() for two-dimensional version.

Parameters:
  • swiftly – SwiFTly plan.

  • subgrid_image[*,xM_size] Prepared subgrid image

  • contribution_out[*,xM_yN_size] Subgrid contribution to facet

  • facet_offset – Offset of facet mid-point relative to image mid-point

  • status – Error status

void sdp_swiftly_extract_from_subgrid_2d(sdp_SwiFTly *swiftly, sdp_Mem *subgrid_image, sdp_Mem *contribution_out, int64_t facet_offset0, int64_t facet_offset1, sdp_Error *status)

Extract subgrid contribution to a facet.

Copies out all data from subgrid prepared with sdp_swiftly_prepare_subgrid() that relates to a facet at a particular offset. The returned representation is optimised for representing this data in a compact way, and should be used for distribution. Use sdp_swiftly_add_to_facet() in order to accumulate such contributions from multiple facets. This performs the transformation on both axes - equivalent to applying sdp_swiftly_extract_from_subgrid() to a subgrid image, then its transposition.

Parameters:
  • swiftly – SwiFTly plan.

  • subgrid_image[xM_size,xM_size] Prepared subgrid image

  • contribution_out[xM_yN_size,xM_yN_size] Subgrid contribution to facet

  • facet_offset0 – Offset of facet mid-point relative to image mid-point along first axis

  • facet_offset1 – Offset of facet mid-point relative to image mid-point along second axis

  • status – Error status

void sdp_swiftly_add_to_facet(sdp_SwiFTly *swiftly, sdp_Mem *contribution, sdp_Mem *prep_facet_inout, int64_t subgrid_offset, sdp_Error *status)

Add subgrid contribution to a facet.

Accumulates facet data from subgrid contributions generated by sdp_swiftly_extract_from_subgrid() or sdp_swiftly_extract_from_subgrid_2d(). Facet data should be filled with zeros when passed to function initially. Use sdp_swiftly_finish_facet() to obtain facet.

Parameters:
  • swiftly – SwiFTly plan.

  • contribution[*,xM_yN_size] Facet contribution to subgrid

  • prep_facet_inout[*,yN_size] Facet data for accumulation

  • subgrid_offset – Offset of subgrid mid-point relative to grid mid-point

  • status – Error status

void sdp_swiftly_finish_facet(sdp_SwiFTly *swiftly, sdp_Mem *prep_facet_inout, sdp_Mem *facet_out, int64_t facet_offset, sdp_Error *status)

Generate finished facet after accumulation.

Performs final Fourier transformation on facet data accumulated using sdp_swiftly_add_to_facet() and multiplies by Fb to obtain finished facet along an axis

Note that this function overwrites the contents of prep_facet_inout!

Parameters:
  • swiftly – SwiFTly plan.

  • prep_facet_inout[*,yN_size] Accumulated facet data

  • facet_out[*,yN_size] Accumulated facet data

  • subgrid_offset – Offset of subgrid mid-point relative to grid mid-point

  • status – Error status

Python

class ska_sdp_func.fourier_transforms.swiftly.Swiftly(image_size: int, yN_size: int, xM_size: int, W: float)

Creates a plan for the SwiFTly algorithm (streaming widefield Fourier transform for large-scale interferometry)

Image, facet and subgrid sizes must be compatible. Facets and subgrids must be appropriately padded for algorithm to work at any level of precision, this is the responsibility of the user.

Parameters:
  • image_size – Size of entire (virtual) image in pixels

  • xM_size – Internal padded subgrid size

  • yN_size – Internal padded facet size

  • W – Parameter for PSWF window function

property image_size

Returns image size

property facet_size

Returns padded facet size

property subgrid_size

Returns padded subgrid size

property contribution_size

Returns size of subgrid <> facet contribution

property pswf_parameter

Returns parameter used for PSWF

prepare_facet(facet: ndarray, prep_facet_out: ndarray, facet_offset: int)

Performs facet preparation, the starting point of SwiFTly facet-to-subgrid transformation.

This multiplies by Fb and does Fourier transformation to grid space. This must be done for each facet (and axis) before calling Swiftly.extract_from_facet().

Effectively inverse of Swiftly.finish_facet().

Parameters:
  • facet[*, <facet_size] Facet

  • prep_facet_out[*, facet_size] Prepared facet output

  • facet_offset – Facet mid-point offset relative to image mid-point

extract_from_facet(prep_facet: ndarray, contribution_out: ndarray, subgrid_offset: int)

Extract facet’s contribution to a subgrid

Copies out all data from prepared facet that relates to a subgrid at a particular offset. The returned representation is optimised for representing this data in a compact way, and should be used for distribution. Use Swiftly.add_to_subgrid() or Swiftly.add_to_subgrid_2d() in order to accumulate such contributions from multiple facets.

Effectively inverse of Swiftly.add_to_facet().

Parameters:
  • prep_facet[*, facet_size] Prepared facet output

  • contribution_out[*, contribution_size] Facet contribution to subgrid

  • subgrid_offset – Subgrid mid-point relative to grid mid-point

add_to_subgrid(contribution: ndarray, subgrid_image_inout: ndarray, facet_offset: int)

Add facet’s contribution to a subgrid image

Accumulates a facet contribution in given subgrid image. Subgrid image should be filled with zeros when passed to function initially. Use Swiftly.finish_subgrid_inplace() or Swiftly.finish_subgrid_inplace_2d() to obtain subgrid data.

Effectively inverse of Swiftly.extract_from_subgrid().

Parameters:
  • contribution[*, contribution_size] Facet contribution to subgrid.

  • subgrid_image_inout[*, subgrid_size] Subgrid image for accumulation.

  • facet_offset – Facet mid-point offset relative to image mid-point

add_to_subgrid_2d(contribution: ndarray, subgrid_image_inout: ndarray, facet_offset0: int, facet_offset1: int)

Add facet’s contribution to a subgrid image

Accumulates a facet contribution in given subgrid image. Subgrid image should be filled with zeros when passed to function initially. Use Swiftly.finish_subgrid_inplace() or Swiftly.finish_subgrid_inplace_2d() respectively to obtain subgrid data.

Effectively inverse of Swiftly.extract_from_subgrid_2d().

Parameters:
  • contribution[contribution_size, contribution_size] Facet contribution to subgrid.

  • subgrid_image_inout[subgrid_size, subgrid_size] Subgrid image for accumulation.

  • facet_offset0 – Facet mid-point offset relative to image mid-point along first axis

  • facet_offset1 – Facet mid-point offset relative to image mid-point along second axis

finish_subgrid_inplace(subgrid_inout: ndarray, subgrid_offset: int)

Finish subgrid after contribution accumulation

Performs the final Fourier Transformation to obtain the subgrid from the subgrid image sum.

Inverse of Swiftly.prepare_subgrid_inplace().

Subgrid_inout:

[*, subgrid_size] Subgrid / subgrid image for transform.

Subgrid_offset:

Subgrid mid-point offset relative to grid mid-point

finish_subgrid(subgrid_image: ndarray, subgrid_out: ndarray, subgrid_offset: int)

Finish subgrid after contribution accumulation

Performs the final Fourier Transformation to obtain the subgrid from the subgrid image sum. If subgrid_out is smaller than subgrid_image, a centre cut-out is generated.

Effectively inverse of Swiftly.prepare_subgrid_inplace().

Subgrid_image:

[*, subgrid_size] Subgrid image with accumulated contributions

Subgrid_out:

[*, <subgrid_size] Finished subgrid

Subgrid_offset:

Subgrid mid-point offset relative to grid mid-point

finish_subgrid_inplace_2d(subgrid_inout: ndarray, subgrid_offset0: int, subgrid_offset1: int)

Finish subgrid after contribution accumulation

Performs the final Fourier Transformation to obtain the subgrid from the subgrid image sum. This performs the transformation on both axes - equivalent to applying Swiftly.finish_subgrid_inplace() to a subarray image, then its transposition.

Inverse of Swiftly.prepare_subgrid_inplace_2d().

Subgrid_inout:

[subgrid_size, subgrid_size] Subgrid / subgrid image for transform.

Parameters:
  • subgrid_offset0 – Subgrid mid-point offset relative to grid mid-point along first axis

  • subgrid_offset1 – Subgrid mid-point offset relative to grid mid-point along second axis

prepare_subgrid_inplace(subgrid_inout: ndarray, subgrid_offset: int)

Performs subgrid preparation, the starting point of SwiFTly subgrid-to-facet transformation.

Performs the Fourier Transformation to obtain the subgrid image from subgrid data.

Inverse of Swiftly.finish_subgrid_inplace().

Subgrid_inout:

[*, subgrid_size] Finished subgrid (image)

Subgrid_offset:

Subgrid mid-point offset relative to grid mid-point

prepare_subgrid_inplace_2d(subgrid_inout: ndarray, subgrid_offset0: int, subgrid_offset1: int)

Performs subgrid preparation, the starting point of SwiFTly subgrid-to-facet transformation.

Performs the Fourier Transformation to obtain the subgrid image from subgrid data. This performs the transformation on both axes - equivalent to applying Swiftly.prepare_subgrid_inplace() to a subarray image, then its transposition.

Inverse of Swiftly.finish_subgrid_inplace_2d().

Subgrid_inout:

[subgrid_size, subgrid_size] Finished subgrid (image)

Parameters:
  • subgrid_offset0 – Subgrid mid-point offset relative to grid mid-point along first axis

  • subgrid_offset1 – Subgrid mid-point offset relative to grid mid-point along second axis

extract_from_subgrid(subgrid_image: ndarray, contribution_out: ndarray, facet_offset: int)

Extract subgrid’s contribution to a facet

Copies out all data from prepared subgrid that relates to a facet at a particular offset. The returned representation is optimised for representing this data in a compact way, and should be used for distribution. Use Swiftly.add_to_facet() or Swiftly.add_to_facet_2d() in order to accumulate such contributions from multiple subgrids.

Effectively inverse of Swiftly.add_to_subgrid().

Parameters:
  • subgrid_image[*, subgrid_size] Prepared facet output

  • contribution_out[*, contribution_size] Subgrid’s contribution to facet

  • facet_offset – Facet mid-point relative to image mid-point

extract_from_subgrid_2d(subgrid_image: ndarray, contribution_out: ndarray, facet_offset0: int, facet_offset1: int)

Extract subgrid’s contribution to a facet

Copies out all data from prepared subgrid that relates to a facet at a particular offset. The returned representation is optimised for representing this data in a compact way, and should be used for distribution. Use Swiftly.add_to_facet() or Swiftly.add_to_facet_2d() in order to accumulate such contributions from multiple subgrids.

Effectively inverse of Swiftly.add_to_subgrid_2d().

Parameters:
  • subgrid_image[*, subgrid_size] Prepared facet output

  • contribution_out[*, contribution_size] Subgrid’s contribution to facet

  • facet_offset0 – Facet mid-point offset relative to image mid-point along first axis

  • facet_offset1 – Facet mid-point offset relative to image mid-point along second axis

add_to_facet(contribution: ndarray, facet_data_inout: ndarray, subgrid_offset: int)

Add subgrid’s contribution to a facet

Accumulates a subgrid contribution in given facet. Facet data should be filled with zeros when passed to function initially. Use Swiftly.finish_facet_inplace() to obtain finished image.

Effectively inverse of Swiftly.extract_from_facet().

Parameters:
  • contribution[*, contribution_size] Subgrid contribution to facet.

  • facet_data_inout[*, facet_size] Facet data for accumulation.

Subgrid_offset:

Subgrid mid-point offset relative to grid mid-point

finish_facet(facet_data: ndarray, facet_out: ndarray, facet_offset: int)

Finish facet after contribution accumulation

Performs the final Fourier Transformation to obtain the facet from the facet data sum.

Effectively inverse of Swiftly.prepare_facet().

Facet_data:

[*, facet_size] Accumulated facet data

Facet_out:

[*, <facet_size] Finished facet data

Facet_offset:

Facet mid-point offset relative to image mid-point