FourierOperatorBase#

class mrinufft.operators.base.FourierOperatorBase[source]#

Bases: ABC

Base Fourier Operator class.

Every (Linear) Fourier operator inherits from this class, to ensure that we have all the functions rightly implemented as required by ModOpt.

Methods

__init__

adj_op

Compute adjoint operator transform.

cg

Conjugate Gradient method to solve the inverse problem.

check_shape

Validate the shapes of the image or k-space data against operator shapes.

compute_density

Compute the density compensation weights and set it.

compute_smaps

Compute the sensitivity maps and set it.

data_consistency

Compute the gradient data consistency.

get_lipschitz_cst

Return the Lipschitz constant of the operator.

make_autograd

Make a new Operator with autodiff support.

op

Compute operator transform.

with_autograd

Return a Fourier operator with autograd capabilities.

with_off_resonance_correction

Return a new operator with Off Resonnance Correction.

Attributes

autograd_available

cpx_dtype

Return complex floating precision of the operator.

density

Density compensation of the operator.

dtype

Return floating precision of the operator.

interfaces

n_coils

Number of coils for the operator.

n_samples

Return the number of samples used by the operator.

ndim

Number of dimensions in image space of the operator.

norm_factor

Normalization factor of the operator.

samples

Return the samples used by the operator.

shape

Shape of the image space of the operator.

smaps

Sensitivity maps of the operator.

uses_density

Return True if the operator uses density compensation.

uses_sense

Return True if the operator uses sensitivity maps.

backend

available

Examples using mrinufft.operators.base.FourierOperatorBase#

Reconstruction with conjugate gradient

Reconstruction with conjugate gradient

Off-resonance corrected NUFFT operator

Off-resonance corrected NUFFT operator

Minimal example script

Minimal example script

Stacked NUFFT operator

Stacked NUFFT operator

Subspace NUFFT Operator

Subspace NUFFT Operator
check_shape(*, image=None, ksp=None)[source]#

Validate the shapes of the image or k-space data against operator shapes.

Parameters:
  • image (np.ndarray, optional) – If passed, the shape of image data will be checked.

  • ksp (np.ndarray or object, optional) – If passed, the shape of the k-space data will be checked.

Raises:

ValueError – If the shape of the provided image does not match the expected operator shape, or if the number of k-space samples does not match the expected number of samples.

abstract op(data)[source]#

Compute operator transform.

Parameters:

data (np.ndarray) – input as array.

Returns:

result – operator transform of the input.

Return type:

np.ndarray

abstract adj_op(coeffs)[source]#

Compute adjoint operator transform.

Parameters:

x (np.ndarray) – input data array.

Returns:

results – adjoint operator transform.

Return type:

np.ndarray

data_consistency(image_data, obs_data)[source]#

Compute the gradient data consistency.

This is the naive implementation using adj_op(op(x)-y). Specific backend can (and should!) implement a more efficient version.

with_off_resonance_correction(B, C, indices)[source]#

Return a new operator with Off Resonnance Correction.

compute_smaps(method=None)[source]#

Compute the sensitivity maps and set it.

Parameters:

method (callable or dict or array) – The method to use to compute the sensitivity maps. If an array, it should be of shape (NCoils,XYZ) and will be used as is. If a dict, it should have a key ‘name’, to determine which method to use. other items will be used as kwargs. If a callable, it should take the samples and the shape as input. Note that this callable function should also hold the k-space data (use funtools.partial)

make_autograd(wrt_data=True, wrt_traj=False)[source]#

Make a new Operator with autodiff support.

Parameters:
  • variable (, default data) – variable on which the gradient is computed with respect to.

  • wrt_data (bool, optional) – If the gradient with respect to the data is computed, default is true

  • wrt_traj (bool, optional) – If the gradient with respect to the trajectory is computed, default is false

Returns:

A NUFFT operator with autodiff capabilities.

Return type:

torch.nn.module

Raises:

ValueError – If autograd is not available.

compute_density(method=None)[source]#

Compute the density compensation weights and set it.

Parameters:

method (str or callable or array or dict or bool) –

The method to use to compute the density compensation.

  • If a string, the method should be registered in the density registry.

  • If a callable, it should take the samples and the shape as input.

  • If a dict, it should have a key ‘name’, to determine which method to use.

other items will be used as kwargs. - If an array, it should be of shape (Nsamples,) and will be used as is. - If True, the method pipe is chosen as default estimation method.

Notes

The “pipe” method is only available for the following backends: tensorflow, finufft, cufinufft, gpunufft, torchkbnufft-cpu and torchkbnufft-gpu.

get_lipschitz_cst(max_iter=10, **kwargs)[source]#

Return the Lipschitz constant of the operator.

Parameters:
  • max_iter (int) – number of iteration to compute the lipschitz constant.

  • **kwargs – Extra arguments givent

Returns:

Spectral Radius

Return type:

float

Notes

This uses the Iterative Power Method to compute the largest singular value of a minified version of the nufft operator. No coil or B0 compensation is used, but includes any computed density.

cg(kspace_data, compute_loss=False, **kwargs)[source]#

Conjugate Gradient method to solve the inverse problem.

Parameters:
  • kspace_data (np.ndarray) – The k-space data to reconstruct.

  • computer_loss (bool) – Whether to compute the loss at each iteration. If True, loss is calculated and returned, otherwise, it’s skipped.

  • **kwargs – Extra arguments to pass to the conjugate gradient method.

Returns:

  • np.ndarray – Reconstructed image

  • np.ndarray, optional – array of loss at each iteration, if compute_loss is True.

property uses_sense#

Return True if the operator uses sensitivity maps.

property uses_density#

Return True if the operator uses density compensation.

property ndim#

Number of dimensions in image space of the operator.

property shape#

Shape of the image space of the operator.

property n_coils#

Number of coils for the operator.

property smaps#

Sensitivity maps of the operator.

_check_smaps_shape(smaps)[source]#

Check the shape of the sensitivity maps.

property density#

Density compensation of the operator.

property dtype#

Return floating precision of the operator.

property cpx_dtype#

Return complex floating precision of the operator.

property samples#

Return the samples used by the operator.

property n_samples#

Return the number of samples used by the operator.

property norm_factor#

Normalization factor of the operator.

classmethod with_autograd(wrt_data=True, wrt_traj=False, *args, **kwargs)[source]#

Return a Fourier operator with autograd capabilities.