Transforms

Module holding the classes for different FFT operators.

class pyqmri.transforms.PyOpenCL3DRadialNUFFT(ctx, queue, par, kwidth=5, klength=200, DTYPE=<class 'numpy.complex64'>, DTYPE_real=<class 'numpy.float32'>, streamed=False)

Non-uniform FFT object.

This class performs the 3D non-uniform FFT (NUFFT) operation. Linear interpolation of a sampled gridding kernel is used to regrid points from the non-cartesian grid back on the cartesian grid.

Parameters:
  • ctx (PyOpenCL.Context) – The context for the PyOpenCL computations.
  • queue (PyOpenCL.Queue) – The computation Queue for the PyOpenCL kernels.
  • par (dict) – A python dict containing the necessary information to setup the object. Needs to contain the number of slices (NSlice), number of scans (NScan), image dimensions (dimX, dimY), number of coils (NC), sampling points (N) and read outs (NProj) a PyOpenCL queue (queue) and the complex coil sensitivities (C).
  • kwidth (int) – The width of the sampling kernel for regridding of non-uniform kspace samples.
  • klength (int) – The length of the kernel lookup table which samples the contineous gridding kernel.
  • DTYPE (Numpy.dtype) – The comlex precision type. Currently complex64 is used.
  • DTYPE_real (Numpy.dtype) – The real precision type. Currently float32 is used.
traj

The comlex sampling trajectory

Type:PyOpenCL.Array
dcf

The densitiy compenation function

Type:PyOpenCL.Array
ogf(float)

The overgriddingfactor for non-cartesian k-spaces.

fft_shape

3 dimensional tuple. Dim 0 containts all Scans, Coils and Slices. Dim 1 and 2 the overgridded image dimensions.

Type:tuple of ints
fft_scale

The scaling factor to achieve a good adjointness of the forward and backward FFT.

Type:float32
cl_kerneltable(PyOpenCL.Buffer)

The gridding lookup table as read only Buffer

cl_deapo(PyOpenCL.Buffer)

The deapodization lookup table as read only Buffer

par_fft

The number of parallel fft calls. Typically it iterates over the Scans.

Type:int
fft

The fft object created from gpyfft (A wrapper for clFFT). The object is created only once an reused in each iterations, iterationg over all scans to keep the memory footprint low.

Type:gpyfft.fft.FFT
prg

The PyOpenCL.Program object containing the necessary kernels to execute the linear Operator. This will be determined by the factory and set after the object is created.

Type:PyOpenCL.Program
FFT(s, sg, wait_for=None, scan_offset=0)

Perform the forward NUFFT operation.

Parameters:
  • s (PyOpenCL.Array) – The non-uniformly gridded k-space.
  • sg (PyOpenCL.Array) – The complex image data.
  • wait_for (list of PyopenCL.Event, None) – A List of PyOpenCL events to wait for.
  • scan_offset (int, 0) – Offset compared to the first acquired scan.
Returns:

PyOpenCL.Event

Return type:

A PyOpenCL event to wait for.

FFTH(sg, s, wait_for=None, scan_offset=0)

Perform the inverse (adjoint) NUFFT operation.

Parameters:
  • sg (PyOpenCL.Array) – The complex image data.
  • s (PyOpenCL.Array) – The non-uniformly gridded k-space
  • wait_for (list of PyopenCL.Event, None) – A List of PyOpenCL events to wait for.
  • scan_offset (int, 0) – Offset compared to the first acquired scan.
Returns:

PyOpenCL.Event

Return type:

A PyOpenCL event to wait for.

class pyqmri.transforms.PyOpenCLCartNUFFT(ctx, queue, par, DTYPE=<class 'numpy.complex64'>, DTYPE_real=<class 'numpy.float32'>, streamed=False)

Cartesian FFT object.

This class performs the FFT operation.

Parameters:
  • ctx (PyOpenCL.Context) – The context for the PyOpenCL computations.
  • queue (PyOpenCL.Queue) – The computation Queue for the PyOpenCL kernels.
  • par (dict A python dict containing the necessary information to) – setup the object. Needs to contain the number of slices (NSlice), number of scans (NScan), image dimensions (dimX, dimY), number of coils (NC), sampling points (N) and read outs (NProj) a PyOpenCL queue (queue) and the complex coil sensitivities (C).
  • DTYPE (Numpy.dtype) – The comlex precision type. Currently complex64 is used.
  • DTYPE_real (Numpy.dtype) – The real precision type. Currently float32 is used.
fft_shape

3 dimensional tuple. Dim 0 containts all Scans, Coils and Slices. Dim 1 and 2 the overgridded image dimensions.

Type:tuple of ints
fft_scale

The scaling factor to achieve a good adjointness of the forward and backward FFT.

Type:float32
par_fft

The number of parallel fft calls. Typically it iterates over the Scans.

Type:int
fft

The fft object created from gpyfft (A wrapper for clFFT). The object is created only once an reused in each iterations, iterationg over all scans to keep the memory footprint low.

Type:gpyfft.fft.FFT
mask

The undersampling mask for the Cartesian grid.

Type:PyOpenCL.Array
prg

The PyOpenCL.Program object containing the necessary kernels to execute the linear Operator. This will be determined by the factory and set after the object is created.

Type:PyOpenCL.Program
FFT(s, sg, wait_for=None, scan_offset=0)

Perform the forward FFT operation.

Parameters:
  • s (PyOpenCL.Array) – The uniformly gridded k-space.
  • sg (PyOpenCL.Array) – The complex image data.
  • wait_for (list of PyopenCL.Event, None) – A List of PyOpenCL events to wait for.
  • scan_offset (int, 0) – Offset compared to the first acquired scan.
Returns:

PyOpenCL.Event

Return type:

A PyOpenCL event to wait for.

FFTH(sg, s, wait_for=None, scan_offset=0)

Perform the inverse (adjoint) FFT operation.

Parameters:
  • sg (PyOpenCL.Array) – The complex image data.
  • s (PyOpenCL.Array) – The uniformly gridded k-space
  • wait_for (list of PyopenCL.Event, None) – A List of PyOpenCL events to wait for.
  • scan_offset (int, 0) – Offset compared to the first acquired scan.
Returns:

PyOpenCL.Event

Return type:

A PyOpenCL event to wait for.

class pyqmri.transforms.PyOpenCLRadialNUFFT(ctx, queue, par, kwidth=5, klength=200, DTYPE=<class 'numpy.complex64'>, DTYPE_real=<class 'numpy.float32'>, streamed=False)

Non-uniform FFT object.

This class performs the non-uniform FFT (NUFFT) operation. Linear interpolation of a sampled gridding kernel is used to regrid points from the non-cartesian grid back on the cartesian grid.

Parameters:
  • ctx (PyOpenCL.Context) – The context for the PyOpenCL computations.
  • queue (PyOpenCL.Queue) – The computation Queue for the PyOpenCL kernels.
  • par (dict) – A python dict containing the necessary information to setup the object. Needs to contain the number of slices (NSlice), number of scans (NScan), image dimensions (dimX, dimY), number of coils (NC), sampling points (N) and read outs (NProj) a PyOpenCL queue (queue) and the complex coil sensitivities (C).
  • kwidth (int) – The width of the sampling kernel for regridding of non-uniform kspace samples.
  • klength (int) – The length of the kernel lookup table which samples the contineous gridding kernel.
  • DTYPE (Numpy.dtype) – The comlex precision type. Currently complex64 is used.
  • DTYPE_real (Numpy.dtype) – The real precision type. Currently float32 is used.
traj

The comlex sampling trajectory

Type:PyOpenCL.Array
dcf

The densitiy compenation function

Type:PyOpenCL.Array
ogf(float)

The overgriddingfactor for non-cartesian k-spaces.

fft_shape

3 dimensional tuple. Dim 0 containts all Scans, Coils and Slices. Dim 1 and 2 the overgridded image dimensions.

Type:tuple of ints
fft_scale

The scaling factor to achieve a good adjointness of the forward and backward FFT.

Type:float32
cl_kerneltable(PyOpenCL.Buffer)

The gridding lookup table as read only Buffer

cl_deapo(PyOpenCL.Buffer)

The deapodization lookup table as read only Buffer

par_fft

The number of parallel fft calls. Typically it iterates over the Scans.

Type:int
fft

The fft object created from gpyfft (A wrapper for clFFT). The object is created only once an reused in each iterations, iterationg over all scans to keep the memory footprint low.

Type:gpyfft.fft.FFT
prg

The PyOpenCL.Program object containing the necessary kernels to execute the linear Operator. This will be determined by the factory and set after the object is created.

Type:PyOpenCL.Program
FFT(s, sg, wait_for=None, scan_offset=0)

Perform the forward NUFFT operation.

Parameters:
  • s (PyOpenCL.Array) – The non-uniformly gridded k-space.
  • sg (PyOpenCL.Array) – The complex image data.
  • wait_for (list of PyopenCL.Event, None) – A List of PyOpenCL events to wait for.
  • scan_offset (int, 0) – Offset compared to the first acquired scan.
Returns:

PyOpenCL.Event

Return type:

A PyOpenCL event to wait for.

FFTH(sg, s, wait_for=None, scan_offset=0)

Perform the inverse (adjoint) NUFFT operation.

Parameters:
  • sg (PyOpenCL.Array) – The complex image data.
  • s (PyOpenCL.Array) – The non-uniformly gridded k-space
  • wait_for (list of PyopenCL.Event, None) – A List of PyOpenCL events to wait for.
  • scan_offset (int, 0) – Offset compared to the first acquired scan.
Returns:

PyOpenCL.Event

Return type:

A PyOpenCL event to wait for.

class pyqmri.transforms.PyOpenCLSMSNUFFT(ctx, queue, par, DTYPE=<class 'numpy.complex64'>, DTYPE_real=<class 'numpy.float32'>, streamed=False)

Cartesian FFT-SMS object.

This class performs the FFT operation assuming a SMS acquisition.

Parameters:
  • ctx (PyOpenCL.Context) – The context for the PyOpenCL computations.
  • queue (PyOpenCL.Queue) – The computation Queue for the PyOpenCL kernels.
  • par (dict A python dict containing the necessary information to) – setup the object. Needs to contain the number of slices (NSlice), number of scans (NScan), image dimensions (dimX, dimY), number of coils (NC), sampling points (N) and read outs (NProj) a PyOpenCL queue (queue) and the complex coil sensitivities (C).
  • DTYPE (Numpy.dtype) – The comlex precision type. Currently complex64 is used.
  • DTYPE_real (Numpy.dtype) – The real precision type. Currently float32 is used.
fft_shape

3 dimensional tuple. Dim 0 containts all Scans, Coils and Slices. Dim 1 and 2 the overgridded image dimensions.

Type:tuple of ints
fft_scale

The scaling factor to achieve a good adjointness of the forward and backward FFT.

Type:float32
par_fft

The number of parallel fft calls. Typically it iterates over the Scans.

Type:int
fft

The fft object created from gpyfft (A wrapper for clFFT). The object is created only once an reused in each iterations, iterationg over all scans to keep the memory footprint low.

Type:gpyfft.fft.FFT
mask

The undersampling mask for the Cartesian grid.

Type:PyOpenCL.Array
packs

The distance between the slices

Type:int
MB

The multiband factor

Type:int
shift

The vector pixel shifts used in the fft computation.

Type:PyOpenCL.Array
prg

The PyOpenCL.Program object containing the necessary kernels to execute the linear Operator. This will be determined by the factory and set after the object is created.

Type:PyOpenCL.Program
FFT(s, sg, wait_for=None, scan_offset=0)

Perform the forward FFT operation.

Parameters:
  • s (PyOpenCL.Array) – The uniformly gridded k-space compressed by the MB factor.
  • sg (PyOpenCL.Array) – The complex image data.
  • wait_for (list of PyopenCL.Event, None) – A List of PyOpenCL events to wait for.
  • scan_offset (int, 0) – Offset compared to the first acquired scan.
Returns:

PyOpenCL.Event

Return type:

A PyOpenCL event to wait for.

FFTH(sg, s, wait_for=None, scan_offset=0)

Perform the inverse (adjoint) FFT operation.

Parameters:
  • sg (PyOpenCL.Array) – The complex image data.
  • s (PyOpenCL.Array) – The uniformly gridded k-space compressed by the MB factor.
  • wait_for (list of PyopenCL.Event, None) – A List of PyOpenCL events to wait for.
  • scan_offset (int, 0) – Offset compared to the first acquired scan.
Returns:

PyOpenCL.Event

Return type:

A PyOpenCL event to wait for.

class pyqmri.transforms.PyOpenCLnuFFT(ctx, queue, fft_dim, DTYPE, DTYPE_real)

Base class for FFT calculation.

This class serves as the base class for all FFT object used in the varous optimization algorithms. It provides a factory method to generate a FFT object based on the input.

Parameters:
  • ctx (PyOpenCL.Context) – The context for the PyOpenCL computations.
  • queue (PyOpenCL.Queue) – The computation Queue for the PyOpenCL kernels.
  • fft_dim (tuple of int) – The dimensions to take the fft over
  • DTYPE (Numpy.dtype) – The comlex precision type. Currently complex64 is used.
  • DTYPE_real (Numpy.dtype) – The real precision type. Currently float32 is used.
DTYPE

The comlex precision type. Currently complex64 is used.

Type:Numpy.dtype
DTYPE_real

The real precision type. Currently float32 is used.

Type:Numpy.dtype
ctx

The context for the PyOpenCL computations.

Type:PyOpenCL.Context
queue

The computation Queue for the PyOpenCL kernels.

Type:PyOpenCL.Queue
prg

The PyOpenCL Program Object containing the compiled kernels.

Type:PyOpenCL.Program
fft_dim

The dimensions to take the fft over

Type:tuple of int
static create(ctx, queue, par, kwidth=5, klength=1000, DTYPE=<class 'numpy.complex64'>, DTYPE_real=<class 'numpy.float32'>, radial=False, SMS=False, streamed=False)

FFT factory method.

Based on the inputs this method decides which FFT object should be returned.

Parameters:
  • ctx (PyOpenCL.Context) – The context for the PyOpenCL computations.
  • queue (PyOpenCL.Queue) – The computation Queue for the PyOpenCL kernels.
  • par (dict) – A python dict containing the necessary information to setup the object. Needs to contain the number of slices (NSlice), number of scans (NScan), image dimensions (dimX, dimY), number of coils (NC), sampling points (N) and read outs (NProj) a PyOpenCL queue (queue) and the complex coil sensitivities (C).
  • kwidth (int, 5) – The width of the sampling kernel for regridding of non-uniform kspace samples.
  • klength (int, 200) – The length of the kernel lookup table which samples the contineous gridding kernel.
  • DTYPE (Numpy.dtype, numpy.complex64) – The comlex precision type. Currently complex64 is used.
  • DTYPE_real (Numpy.dtype, numpy.float32) – The real precision type. Currently float32 is used.
  • radial (bool, False) – Switch for Cartesian (False) and non-Cartesian (True) FFT.
  • SMS (bool, False) – Switch between Simultaneous Multi Slice reconstruction (True) and simple slice by slice reconstruction.
  • streamed (bool, False) – Switch between normal reconstruction in one big block versus streamed reconstruction of smaller blocks.
Returns:

The setup FFT object.

Return type:

PyOpenCLnuFFT object

Raises:

AssertionError: – If the Combination of passed flags to choose the FFT aren’t compatible with each other. E.g.: Radial and SMS True.