# Operators¶

Module holding the classes for different linear Operators.

class pyqmri.operator.Operator(par, prg, DTYPE=<class 'numpy.complex64'>, DTYPE_real=<class 'numpy.float32'>)

Abstract base class for linear Operators used in the optimization.

This class serves as the base class for all linear operators used in the varous optimization algorithms. it requires to implement a forward and backward application in and out of place.

Parameters: 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). prg (PyOpenCL.Program) – The PyOpenCL.Program object containing the necessary kernels to execute the linear Operator. DTYPE (numpy.dtype, numpy.complex64) – Complex working precission. DTYPE_real (numpy.dtype, numpy.float32) – Real working precission.
NScan

Number of total measurements (Scans)

Type: int
NC

Number of complex coils

Type: int
NSlice

Number ofSlices

Type: int
dimX

X dimension of the parameter maps

Type: int
dimY

Y dimension of the parameter maps

Type: int
N

N number of samples per readout

Type: int
Nproj

Type: int
unknowns_TGV

Number of unknowns which should be regularized with TGV. It is assumed that these occure first in the unknown vector. Currently at least 1 TGV unknown is required.

Type: int
unknowns_H1

Number of unknowns which should be regularized with H1. It is assumed that these occure after all TGV unknowns in the unknown vector. Currently this number can be zero which implies that no H1 regularization is used.

Type: int
unknowns

The sum of TGV and H1 unknowns.

Type: int
ctx

The context for the PyOpenCL computations. If streamed operations are used a list of ctx is required. One for each computation device.

Type: list of PyOpenCL.Context
queue

The computation Queue for the PyOpenCL kernels. If streamed operations are used a list of queues is required. Four for each computation device.

Type: list of PyOpenCL.Queue
dz

The ratio between the physical X,Y dimensions vs the Z dimension. This allows for anisotrpic regularization along the Z dimension.

Type: float
num_dev

Number of compute devices

Type: int
NUFFT

A PyOpenCLnuFFT object to perform forward and backword transformations from image to k-space and vice versa.

Type: PyQMRI.transforms.PyOpenCLnuFFT
prg

The PyOpenCL program containing all compiled kernels.

Type: PyOpenCL.Program
self.DTYPE

Complex working precission. Currently single precission only.

Type: numpy.dtype
self.DTYPE_real

Real working precission. Currently single precission only.

Type: numpy.dtype
static GradientOperatorFactory(par, prg, DTYPE, DTYPE_real, streamed=False)

Parameters: 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). prg (PyOpenCL.Program) – The PyOpenCL.Program object containing the necessary kernels to execute the linear Operator. DTYPE (numpy.dtype, numpy.complex64) – Complex working precission. DTYPE_real (numpy.dtype, numpy.float32) – Real working precission. streamed (bool, false) – Use standard reconstruction (false) or streaming of memory blocks to the compute device (true). Only use this if data does not fit in one block. A specialized instance of a PyQMRI.Operator to perform forward and ajoint gradient calculations. PyQMRI.Operator
static MRIOperatorFactory(par, prg, DTYPE, DTYPE_real, trafo=False, imagespace=False, SMS=False, streamed=False)

Parameters: 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). prg (PyOpenCL.Program) – The PyOpenCL.Program object containing the necessary kernels to execute the linear Operator. DTYPE (numpy.dtype, numpy.complex64) – Complex working precission. DTYPE_real (numpy.dtype, numpy.float32) – Real working precission. trafo (bool, false) – Select between radial (True) or cartesian FFT (false). imagespace (bool, false) – Select between fitting in imagespace (True) or k-space (false). SMS (bool, false) – Select between simulatneous multi-slice reconstruction or standard. streamed (bool, false) – Use standard reconstruction (false) or streaming of memory blocks to the compute device (true). Only use this if data does not fit in one block. PyQMRI.Operator – A specialized instance of a PyQMRI.Operator to perform forward and ajoint operations for fitting. PyQMRI.NUFFT – An instance of the used (nu-)FFT if k-space fitting is performed, None otherwise.
static SymGradientOperatorFactory(par, prg, DTYPE, DTYPE_real, streamed=False)

Parameters: 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). prg (PyOpenCL.Program) – The PyOpenCL.Program object containing the necessary kernels to execute the linear Operator. DTYPE (numpy.dtype, numpy.complex64) – Complex working precission. DTYPE_real (numpy.dtype, numpy.float32) – Real working precission. streamed (bool, false) – Use standard reconstruction (false) or streaming of memory blocks to the compute device (true). Only use this if data does not fit in one block. A specialized instance of a PyQMRI.Operator to perform forward and ajoint symmetriced gradient calculations. PyQMRI.Operator
adj(out, inp, **kwargs)

Apply the linear operator from measurement space to parameter space If streamed operations are used the PyOpenCL.Arrays are replaced by Numpy.Array

Parameters: out (PyOpenCL.Array) – The complex parameter space data which is the result of the computation. inp (PyOpenCL.Array) – The complex measurement space data which is used as input. PyOpenCL.Event A PyOpenCL event to wait for.
adjoop(inp, **kwargs)

Apply the linear operator from measurement space to parameter space If streamed operations are used the PyOpenCL.Arrays are replaced by Numpy.Array This method need to generate a temporary array and will return it as the result.

Parameters: inp (PyOpenCL.Array) – The complex measurement space which is used as input. PyOpenCL.Array (A PyOpenCL array containing the result of the) computation.
fwd(out, inp, **kwargs)

Forward operator application in-place.

Apply the linear operator from parameter space to measurement space If streamed operations are used the PyOpenCL.Arrays are replaced by Numpy.Array

Parameters: out (PyOpenCL.Array) – The complex measurement space data which is the result of the computation. inp (PyOpenCL.Array) – The complex parameter space data which is used as input. A PyOpenCL event to wait for. PyOpenCL.Event
fwdoop(inp, **kwargs)

Forward operator application out-of-place.

Apply the linear operator from parameter space to measurement space If streamed operations are used the PyOpenCL.Arrays are replaced by Numpy.Array This method need to generate a temporary array and will return it as the result.

Parameters: inp (PyOpenCL.Array) – The complex parameter space data which is used as input. PyOpenCL.Array (A PyOpenCL array containing the result of the) computation.
class pyqmri.operator.OperatorFiniteGradient(par, prg, DTYPE=<class 'numpy.complex64'>, DTYPE_real=<class 'numpy.float32'>)

This class implements the finite difference gradient operation and the adjoint (negative divergence).

Parameters: 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). prg (PyOpenCL.Program) – The PyOpenCL.Program object containing the necessary kernels to execute the linear Operator. DTYPE (numpy.dtype, numpy.complex64) – Complex working precission. DTYPE_real (numpy.dtype, numpy.float32) – Real working precission.
ctx

The context for the PyOpenCL computations.

Type: PyOpenCL.Context
queue

The computation Queue for the PyOpenCL kernels.

Type: PyOpenCL.Queue
ratio

Ratio between the different unknowns

Type: list of PyOpenCL.Array
adj(out, inp, **kwargs)

Apply the linear operator from measurement space to parameter space If streamed operations are used the PyOpenCL.Arrays are replaced by Numpy.Array

Parameters: out (PyOpenCL.Array) – The complex parameter space data which is the result of the computation. inp (PyOpenCL.Array) – The complex measurement space data which is used as input. wait_for (list of PyopenCL.Event) – A List of PyOpenCL events to wait for. PyOpenCL.Event A PyOpenCL event to wait for.
adjoop(inp, **kwargs)

Apply the linear operator from measurement space to parameter space If streamed operations are used the PyOpenCL.Arrays are replaced by Numpy.Array This method need to generate a temporary array and will return it as the result.

Parameters: inp (PyOpenCL.Array) – The complex measurement space which is used as input. wait_for (list of PyopenCL.Event) – A List of PyOpenCL events to wait for. PyOpenCL.Array (A PyOpenCL array containing the result of the) computation.
fwd(out, inp, **kwargs)

Forward operator application in-place.

Apply the linear operator from parameter space to measurement space If streamed operations are used the PyOpenCL.Arrays are replaced by Numpy.Array

Parameters: out (PyOpenCL.Array) – The complex data which is the result of the computation. inp (PyOpenCL.Array) – The complex data which is used as input. wait_for (list of PyopenCL.Event) – A List of PyOpenCL events to wait for. A PyOpenCL event to wait for. PyOpenCL.Event
fwdoop(inp, **kwargs)

Forward operator application out-of-place.

Apply the linear operator from parameter space to measurement space If streamed operations are used the PyOpenCL.Arrays are replaced by Numpy.Array This method need to generate a temporary array and will return it as the result.

Parameters: inp (PyOpenCL.Array) – The complex parameter space data which is used as input. wait_for (list of PyopenCL.Event) – A List of PyOpenCL events to wait for. PyOpenCL.Array (A PyOpenCL array containing the result of the) computation.
updateRatio(inp)
class pyqmri.operator.OperatorFiniteGradientStreamed(par, prg, DTYPE=<class 'numpy.complex64'>, DTYPE_real=<class 'numpy.float32'>)

This class implements the finite difference gradient operation and the adjoint (negative divergence).

Parameters: 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). prg (PyOpenCL.Program) – The PyOpenCL.Program object containing the necessary kernels to execute the linear Operator. DTYPE (numpy.dtype, numpy.complex64) – Complex working precission. DTYPE_real (numpy.dtype, numpy.float32) – Real working precission.
ctx

The context for the PyOpenCL computations.

Type: PyOpenCL.Context
queue

The computation Queue for the PyOpenCL kernels.

Type: PyOpenCL.Queue
par_slices

Slices to parallel transfer to the compute device.

Type: int
ratio

Ratio between the different unknowns

Type: list of PyOpenCL.Array
adj(out, inp, **kwargs)

Apply the linear operator from measurement space to parameter space If streamed operations are used the PyOpenCL.Arrays are replaced by Numpy.Array

Parameters: out (PyOpenCL.Array) – The complex parameter space data which is the result of the computation. inp (PyOpenCL.Array) – The complex measurement space data which is used as input. wait_for (list of PyopenCL.Event) – A List of PyOpenCL events to wait for. PyOpenCL.Event A PyOpenCL event to wait for.
adjoop(inp, **kwargs)

Apply the linear operator from measurement space to parameter space If streamed operations are used the PyOpenCL.Arrays are replaced by Numpy.Array This method need to generate a temporary array and will return it as the result.

Parameters: inp (PyOpenCL.Array) – The complex measurement space which is used as input. wait_for (list of PyopenCL.Event) – A List of PyOpenCL events to wait for. PyOpenCL.Array (A PyOpenCL array containing the result of the) computation.
fwd(out, inp, **kwargs)

Forward operator application in-place.

Apply the linear operator from parameter space to measurement space If streamed operations are used the PyOpenCL.Arrays are replaced by Numpy.Array

Parameters: out (PyOpenCL.Array) – The complex data which is the result of the computation. inp (PyOpenCL.Array) – The complex data which is used as input. wait_for (list of PyopenCL.Event) – A List of PyOpenCL events to wait for. A PyOpenCL event to wait for. PyOpenCL.Event
fwdoop(inp, **kwargs)

Forward operator application out-of-place.

Apply the linear operator from parameter space to measurement space If streamed operations are used the PyOpenCL.Arrays are replaced by Numpy.Array This method need to generate a temporary array and will return it as the result.

Parameters: inp (PyOpenCL.Array) – The complex parameter space data which is used as input. wait_for (list of PyopenCL.Event) – A List of PyOpenCL events to wait for. PyOpenCL.Array (A PyOpenCL array containing the result of the) computation.
getStreamedGradientObject()

Returns: A PyQMRI streaming object for the gradient computation. PyqMRI.Streaming.Stream
updateRatio(inp)
class pyqmri.operator.OperatorFiniteSymGradient(par, prg, DTYPE=<class 'numpy.complex64'>, DTYPE_real=<class 'numpy.float32'>)

This class implements the finite difference symmetrized gradient operation and the adjoint (negative symmetrized divergence).

Parameters: 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). prg (PyOpenCL.Program) – The PyOpenCL.Program object containing the necessary kernels to execute the linear Operator. DTYPE (numpy.dtype, numpy.complex64) – Complex working precission. DTYPE_real (numpy.dtype, numpy.float32) – Real working precission.
ctx

The context for the PyOpenCL computations.

Type: PyOpenCL.Context
queue

The computation Queue for the PyOpenCL kernels.

Type: PyOpenCL.Queue
ratio

Ratio between the different unknowns

Type: list of PyOpenCL.Array
adj(out, inp, **kwargs)

Apply the linear operator from measurement space to parameter space If streamed operations are used the PyOpenCL.Arrays are replaced by Numpy.Array

Parameters: out (PyOpenCL.Array) – The complex parameter space data which is the result of the computation. inp (PyOpenCL.Array) – The complex measurement space data which is used as input. wait_for (list of PyopenCL.Event) – A List of PyOpenCL events to wait for. PyOpenCL.Event A PyOpenCL event to wait for.
adjoop(inp, **kwargs)

Apply the linear operator from measurement space to parameter space If streamed operations are used the PyOpenCL.Arrays are replaced by Numpy.Array This method need to generate a temporary array and will return it as the result.

Parameters: inp (PyOpenCL.Array) – The complex measurement space which is used as input. wait_for (list of PyopenCL.Event) – A List of PyOpenCL events to wait for. PyOpenCL.Array (A PyOpenCL array containing the result of the) computation.
fwd(out, inp, **kwargs)

Forward operator application in-place.

Apply the linear operator from parameter space to measurement space If streamed operations are used the PyOpenCL.Arrays are replaced by Numpy.Array

Parameters: out (PyOpenCL.Array) – The complex data which is the result of the computation. inp (PyOpenCL.Array) – The complex data which is used as input. wait_for (list of PyopenCL.Event) – A List of PyOpenCL events to wait for. A PyOpenCL event to wait for. PyOpenCL.Event
fwdoop(inp, **kwargs)

Forward operator application out-of-place.

Apply the linear operator from parameter space to measurement space If streamed operations are used the PyOpenCL.Arrays are replaced by Numpy.Array This method need to generate a temporary array and will return it as the result.

Parameters: inp (PyOpenCL.Array) – The complex parameter space data which is used as input. wait_for (list of PyopenCL.Event) – A List of PyOpenCL events to wait for. PyOpenCL.Array (A PyOpenCL array containing the result of the) computation.
updateRatio(inp)
class pyqmri.operator.OperatorFiniteSymGradientStreamed(par, prg, DTYPE=<class 'numpy.complex64'>, DTYPE_real=<class 'numpy.float32'>)

This class implements the finite difference symmetrized gradient operation and the adjoint (negative symmetrized divergence).

Parameters: 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). prg (PyOpenCL.Program) – The PyOpenCL.Program object containing the necessary kernels to execute the linear Operator. DTYPE (numpy.dtype, numpy.complex64) – Complex working precission. DTYPE_real (numpy.dtype, numpy.float32) – Real working precission.
ctx

The context for the PyOpenCL computations.

Type: PyOpenCL.Context
queue

The computation Queue for the PyOpenCL kernels.

Type: PyOpenCL.Queue
par_slices

Slices to parallel transfer to the compute device.

Type: int
ratio

Ratio between the different unknowns

Type: list of PyOpenCL.Array
adj(out, inp, **kwargs)

Apply the linear operator from measurement space to parameter space If streamed operations are used the PyOpenCL.Arrays are replaced by Numpy.Array

Parameters: out (PyOpenCL.Array) – The complex parameter space data which is the result of the computation. inp (PyOpenCL.Array) – The complex measurement space data which is used as input. wait_for (list of PyopenCL.Event) – A List of PyOpenCL events to wait for. PyOpenCL.Event A PyOpenCL event to wait for.
adjoop(inp, **kwargs)

Apply the linear operator from measurement space to parameter space If streamed operations are used the PyOpenCL.Arrays are replaced by Numpy.Array This method need to generate a temporary array and will return it as the result.

Parameters: inp (PyOpenCL.Array) – The complex measurement space which is used as input. wait_for (list of PyopenCL.Event) – A List of PyOpenCL events to wait for. PyOpenCL.Array (A PyOpenCL array containing the result of the) computation.
fwd(out, inp, **kwargs)

Forward operator application in-place.

Apply the linear operator from parameter space to measurement space If streamed operations are used the PyOpenCL.Arrays are replaced by Numpy.Array

Parameters: out (PyOpenCL.Array) – The complex data which is the result of the computation. inp (PyOpenCL.Array) – The complex data which is used as input. wait_for (list of PyopenCL.Event) – A List of PyOpenCL events to wait for. A PyOpenCL event to wait for. PyOpenCL.Event
fwdoop(inp, **kwargs)

Forward operator application out-of-place.

Apply the linear operator from parameter space to measurement space If streamed operations are used the PyOpenCL.Arrays are replaced by Numpy.Array This method need to generate a temporary array and will return it as the result.

Parameters: inp (PyOpenCL.Array) – The complex parameter space data which is used as input. wait_for (list of PyopenCL.Event) – A List of PyOpenCL events to wait for. PyOpenCL.Array (A PyOpenCL array containing the result of the) computation.
getStreamedSymGradientObject()

Access privat stream symmetrized gradient object.

Returns: A PyQMRI streaming object for the symmetrized gradient computation. PyqMRI.Streaming.Stream
updateRatio(inp)
class pyqmri.operator.OperatorImagespace(par, prg, DTYPE=<class 'numpy.complex64'>, DTYPE_real=<class 'numpy.float32'>)

Imagespace based Operator.

This class serves as linear operator between parameter and imagespace.

Use this operator if you want to perform complex parameter fitting from complex image space data without the need of performing FFTs.

Parameters: 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). prg (PyOpenCL.Program) – The PyOpenCL.Program object containing the necessary kernels to execute the linear Operator. DTYPE (numpy.dtype, numpy.complex64) – Complex working precission. DTYPE_real (numpy.dtype, numpy.float32) – Real working precission.
ctx

The context for the PyOpenCL computations.

Type: PyOpenCL.Context
queue

The computation Queue for the PyOpenCL kernels.

Type: PyOpenCL.Queue
adj(out, inp, **kwargs)

Apply the linear operator from measurement space to parameter space If streamed operations are used the PyOpenCL.Arrays are replaced by Numpy.Array

Parameters: out (PyOpenCL.Array) – The complex parameter space data which is the result of the computation. inp (PyOpenCL.Array) – The complex measurement space data which is used as input. wait_for (list of PyopenCL.Event) – A List of PyOpenCL events to wait for. PyOpenCL.Event A PyOpenCL event to wait for.
adjKyk1(out, inp, **kwargs)

Apply the linear operator from image space to parameter space.

This method fully implements the combined linear operator consisting of the data part as well as the TGV regularization part.

Parameters: out (PyOpenCL.Array) – The complex parameter space data which is the result of the computation. inp (PyOpenCL.Array) – The complex image space data which is used as input. wait_for (list of PyopenCL.Event) – A List of PyOpenCL events to wait for. PyOpenCL.Event A PyOpenCL event to wait for.
adjoop(inp, **kwargs)

Apply the linear operator from measurement space to parameter space If streamed operations are used the PyOpenCL.Arrays are replaced by Numpy.Array This method need to generate a temporary array and will return it as the result.

Parameters: inp (PyOpenCL.Array) – The complex measurement space which is used as input. wait_for (list of PyopenCL.Event) – A List of PyOpenCL events to wait for. PyOpenCL.Array (A PyOpenCL array containing the result of the) computation.
fwd(out, inp, **kwargs)

Forward operator application in-place.

Apply the linear operator from parameter space to measurement space If streamed operations are used the PyOpenCL.Arrays are replaced by Numpy.Array

Parameters: out (PyOpenCL.Array) – The complex measurement space data which is the result of the computation. inp (PyOpenCL.Array) – The complex parameter space data which is used as input. wait_for (list of PyopenCL.Event) – A List of PyOpenCL events to wait for. A PyOpenCL event to wait for. PyOpenCL.Event
fwdoop(inp, **kwargs)

Forward operator application out-of-place.

Apply the linear operator from parameter space to measurement space If streamed operations are used the PyOpenCL.Arrays are replaced by Numpy.Array This method need to generate a temporary array and will return it as the result.

Parameters: inp (PyOpenCL.Array) – The complex parameter space data which is used as input. wait_for (list of PyopenCL.Event) – A List of PyOpenCL events to wait for. PyOpenCL.Array (A PyOpenCL array containing the result of the) computation.
class pyqmri.operator.OperatorImagespaceStreamed(par, prg, DTYPE=<class 'numpy.complex64'>, DTYPE_real=<class 'numpy.float32'>)

The streamed version of the Imagespace based Operator.

This class serves as linear operator between parameter and imagespace. All calculations are performed in a streamed fashion.

Use this operator if you want to perform complex parameter fitting from complex image space data without the need of performing FFTs. In contrast to non-streaming classes no out of place operations are implemented.

Parameters: 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). prg (PyOpenCL.Program) – The PyOpenCL.Program object containing the necessary kernels to execute the linear Operator. DTYPE (numpy.dtype, numpy.complex64) – Complex working precission. DTYPE_real (numpy.dtype, numpy.float32) – Real working precission.
overlap

Number of slices that overlap between adjacent blocks.

Type: int
par_slices

Number of slices per streamed block

Type: int
fwdstr

The streaming object to perform the forward evaluation

Type: PyQMRI.Stream
adjstr

The streaming object to perform the adjoint evaluation

Type: PyQMRI.Stream
adjstrKyk1

The streaming object to perform the adjoint evaluation including z1 of the algorithm.

Type: PyQMRI.Stream
unknown_shape

Size of the parameter maps

Type: tuple of int
data_shape

Size of the data

Type: tuple of int
adj(out, inp, **kwargs)

Apply the linear operator from measurement space to parameter space If streamed operations are used the PyOpenCL.Arrays are replaced by Numpy.Array

Parameters: out (PyOpenCL.Array) – The complex parameter space data which is the result of the computation. inp (PyOpenCL.Array) – The complex measurement space data which is used as input. wait_for (list of PyopenCL.Event) – A List of PyOpenCL events to wait for. PyOpenCL.Event A PyOpenCL event to wait for.
adjKyk1(out, inp)

Apply the linear operator from parameter space to image space.

This method fully implements the combined linear operator consisting of the data part as well as the TGV regularization part.

Parameters: out (numpy.Array) – The complex parameter space data which is used as input. inp (numpy.Array) – The complex parameter space data which is used as input.
adjoop(inp, **kwargs)

Apply the linear operator from measurement space to parameter space If streamed operations are used the PyOpenCL.Arrays are replaced by Numpy.Array This method need to generate a temporary array and will return it as the result.

Parameters: inp (PyOpenCL.Array) – The complex measurement space which is used as input. wait_for (list of PyopenCL.Event) – A List of PyOpenCL events to wait for. PyOpenCL.Array (A PyOpenCL array containing the result of the) computation.
fwd(out, inp, **kwargs)

Forward operator application in-place.

Apply the linear operator from parameter space to measurement space If streamed operations are used the PyOpenCL.Arrays are replaced by Numpy.Array

Parameters: out (PyOpenCL.Array) – The complex measurement space data which is the result of the computation. inp (PyOpenCL.Array) – The complex parameter space data which is used as input. wait_for (list of PyopenCL.Event) – A List of PyOpenCL events to wait for. A PyOpenCL event to wait for. PyOpenCL.Event
fwdoop(inp, **kwargs)

Forward operator application out-of-place.

Apply the linear operator from parameter space to measurement space If streamed operations are used the PyOpenCL.Arrays are replaced by Numpy.Array This method need to generate a temporary array and will return it as the result.

Parameters: inp (PyOpenCL.Array) – The complex parameter space data which is used as input. wait_for (list of PyopenCL.Event) – A List of PyOpenCL events to wait for. PyOpenCL.Array (A PyOpenCL array containing the result of the) computation.
class pyqmri.operator.OperatorKspace(par, prg, DTYPE=<class 'numpy.complex64'>, DTYPE_real=<class 'numpy.float32'>, trafo=True)

k-Space based Operator.

This class serves as linear operator between parameter and k-space.

Use this operator if you want to perform complex parameter fitting from complex k-space data. The type of fft is defined through the NUFFT object. The NUFFT object can also be used for simple Cartesian FFTs.

Parameters: 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). prg (PyOpenCL.Program) – The PyOpenCL.Program object containing the necessary kernels to execute the linear Operator. DTYPE (numpy.dtype, numpy.complex64) – Complex working precission. DTYPE_real (numpy.dtype, numpy.float32) – Real working precission. trafo (bool, true) – Switch between cartesian (false) and non-cartesian FFT (True, default).
ctx

The context for the PyOpenCL computations.

Type: PyOpenCL.Context
queue

The computation Queue for the PyOpenCL kernels.

Type: PyOpenCL.Queue
NUFFT

The (nu) FFT used for fitting.

Type: PyQMRI.PyOpenCLnuFFT
adj(out, inp, **kwargs)

Apply the linear operator from measurement space to parameter space If streamed operations are used the PyOpenCL.Arrays are replaced by Numpy.Array

Parameters: out (PyOpenCL.Array) – The complex parameter space data which is the result of the computation. inp (PyOpenCL.Array) – The complex measurement space data which is used as input. wait_for (list of PyopenCL.Event) – A List of PyOpenCL events to wait for. PyOpenCL.Event A PyOpenCL event to wait for.
adjKyk1(out, inp, **kwargs)

Apply the linear operator from parameter space to k-space.

This method fully implements the combined linear operator consisting of the data part as well as the TGV regularization part.

Parameters: out (PyOpenCL.Array) – The complex parameter space data which is used as input. inp (PyOpenCL.Array) – The complex parameter space data which is used as input. wait_for (list of PyopenCL.Event) – A List of PyOpenCL events to wait for. PyOpenCL.Event A PyOpenCL event to wait for.
adjoop(inp, **kwargs)

Apply the linear operator from measurement space to parameter space If streamed operations are used the PyOpenCL.Arrays are replaced by Numpy.Array This method need to generate a temporary array and will return it as the result.

Parameters: inp (PyOpenCL.Array) – The complex measurement space which is used as input. wait_for (list of PyopenCL.Event) – A List of PyOpenCL events to wait for. PyOpenCL.Array (A PyOpenCL array containing the result of the) computation.
fwd(out, inp, **kwargs)

Forward operator application in-place.

Apply the linear operator from parameter space to measurement space If streamed operations are used the PyOpenCL.Arrays are replaced by Numpy.Array

Parameters: out (PyOpenCL.Array) – The complex measurement space data which is the result of the computation. inp (PyOpenCL.Array) – The complex parameter space data which is used as input. wait_for (list of PyopenCL.Event) – A List of PyOpenCL events to wait for. A PyOpenCL event to wait for. PyOpenCL.Event
fwdoop(inp, **kwargs)

Forward operator application out-of-place.

Apply the linear operator from parameter space to measurement space If streamed operations are used the PyOpenCL.Arrays are replaced by Numpy.Array This method need to generate a temporary array and will return it as the result.

Parameters: inp (PyOpenCL.Array) – The complex parameter space data which is used as input. wait_for (list of PyopenCL.Event) – A List of PyOpenCL events to wait for. PyOpenCL.Array (A PyOpenCL array containing the result of the) computation.
class pyqmri.operator.OperatorKspaceSMS(par, prg, DTYPE=<class 'numpy.complex64'>, DTYPE_real=<class 'numpy.float32'>)

k-Space based Operator for SMS reconstruction.

This class serves as linear operator between parameter and k-space. It implements simultaneous-multi-slice (SMS) reconstruction.

Use this operator if you want to perform complex parameter fitting from complex k-space data measured with SMS. Currently only Cartesian FFTs are supported.

Parameters: 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). prg (PyOpenCL.Program) – The PyOpenCL.Program object containing the necessary kernels to execute the linear Operator. DTYPE (numpy.dtype, numpy.complex64) – Complex working precission. DTYPE_real (numpy.dtype, numpy.float32) – Real working precission.
packs

Number of SMS packs.

Type: int
ctx

The context for the PyOpenCL computations.

Type: PyOpenCL.Context
queue

The computation Queue for the PyOpenCL kernels.

Type: PyOpenCL.Queue
NUFFT

The (nu) FFT used for fitting.

Type: PyQMRI.PyOpenCLnuFFT
adj(out, inp, **kwargs)

Apply the linear operator from measurement space to parameter space If streamed operations are used the PyOpenCL.Arrays are replaced by Numpy.Array

Parameters: out (PyOpenCL.Array) – The complex parameter space data which is the result of the computation. inp (PyOpenCL.Array) – The complex measurement space data which is used as input. wait_for (list of PyopenCL.Event) – A List of PyOpenCL events to wait for. PyOpenCL.Event A PyOpenCL event to wait for.
adjKyk1(out, inp, **kwargs)

Apply the linear operator from parameter space to k-space.

This method fully implements the combined linear operator consisting of the data part as well as the TGV regularization part.

Parameters: out (PyOpenCL.Array) – The complex parameter space data which is used as input. inp (PyOpenCL.Array) – The complex parameter space data which is used as input. wait_for (list of PyopenCL.Event) – A List of PyOpenCL events to wait for. PyOpenCL.Event A PyOpenCL event to wait for.
adjoop(inp, **kwargs)

Apply the linear operator from measurement space to parameter space If streamed operations are used the PyOpenCL.Arrays are replaced by Numpy.Array This method need to generate a temporary array and will return it as the result.

Parameters: inp (PyOpenCL.Array) – The complex measurement space which is used as input. wait_for (list of PyopenCL.Event) – A List of PyOpenCL events to wait for. PyOpenCL.Array (A PyOpenCL array containing the result of the) computation.
fwd(out, inp, **kwargs)

Forward operator application in-place.

Apply the linear operator from parameter space to measurement space If streamed operations are used the PyOpenCL.Arrays are replaced by Numpy.Array

Parameters: out (PyOpenCL.Array) – The complex measurement space data which is the result of the computation. inp (PyOpenCL.Array) – The complex parameter space data which is used as input. wait_for (list of PyopenCL.Event) – A List of PyOpenCL events to wait for. A PyOpenCL event to wait for. PyOpenCL.Event
fwdoop(inp, **kwargs)

Forward operator application out-of-place.

Apply the linear operator from parameter space to measurement space If streamed operations are used the PyOpenCL.Arrays are replaced by Numpy.Array This method need to generate a temporary array and will return it as the result.

Parameters: inp (PyOpenCL.Array) – The complex parameter space data which is used as input. wait_for (list of PyopenCL.Event) – A List of PyOpenCL events to wait for. PyOpenCL.Array (A PyOpenCL array containing the result of the) computation.
class pyqmri.operator.OperatorKspaceSMSStreamed(par, prg, DTYPE=<class 'numpy.complex64'>, DTYPE_real=<class 'numpy.float32'>)

The streamed version of the k-space based SMS Operator.

This class serves as linear operator between parameter and k-space. It implements simultaneous-multi-slice (SMS) reconstruction.

All calculations are performed in a streamed fashion.

Use this operator if you want to perform complex parameter fitting from complex k-space data measured with SMS. Currently only Cartesian FFTs are supported.

Parameters: 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). prg (PyOpenCL.Program) – The PyOpenCL.Program object containing the necessary kernels to execute the linear Operator. DTYPE (numpy.dtype, numpy.complex64) – Complex working precission. DTYPE_real (numpy.dtype, numpy.float32) – Real working precission.
overlap

Number of slices that overlap between adjacent blocks.

Type: int
par_slices

Number of slices per streamed block

Type: int
packs

Number of packs to stream

Type: int
fwdstr

The streaming object to perform the forward evaluation

Type: PyQMRI.Stream
adjstr

The streaming object to perform the adjoint evaluation

Type: PyQMRI.Stream
NUFFT

A list of NUFFT objects. One for each context.

Type: list of PyQMRI.transforms.PyOpenCLnuFFT
FTstr

A streamed version of the used (non-uniform) FFT, applied forward.

Type: PyQMRI.Stream
FTHstr

A streamed version of the used (non-uniform) FFT, applied adjoint.

Type: PyQMRI.Stream
updateKyk1SMSstreamed
dat_trans_axes

Order in which the data needs to be transformed during the SMS reconstruction and streaming.

Type: list of int
adj(out, inp, **kwargs)

Apply the linear operator from measurement space to parameter space If streamed operations are used the PyOpenCL.Arrays are replaced by Numpy.Array :param out: The complex parameter space data which is used as input. :type out: numpy.Array :param inp: The complex parameter space data which is used as input. :type inp: numpy.Array :param wait_for: A List of PyOpenCL events to wait for. :type wait_for: list of PyopenCL.Event

Returns: The lhs and rhs for the line search of the primal-dual algorithm. tupel of floats
adjKyk1(out, inp, **kwargs)

Apply the linear operator from parameter space to k-space.

This method fully implements the combined linear operator consisting of the data part as well as the TGV regularization part.

Parameters: out (numpy.Array) – The complex parameter space data which is used as input. inp (numpy.Array) – The complex parameter space data which is used as input. wait_for (list of PyopenCL.Event) – A List of PyOpenCL events to wait for. The lhs and rhs for the line search of the primal-dual algorithm. tupel of floats
adjoop(inp, **kwargs)

Apply the linear operator from measurement space to parameter space If streamed operations are used the PyOpenCL.Arrays are replaced by Numpy.Array This method need to generate a temporary array and will return it as the result.

Parameters: inp (PyOpenCL.Array) – The complex measurement space which is used as input. wait_for (list of PyopenCL.Event) – A List of PyOpenCL events to wait for. PyOpenCL.Array (A PyOpenCL array containing the result of the) computation.
fwd(out, inp, **kwargs)

Forward operator application in-place.

Apply the linear operator from parameter space to measurement space If streamed operations are used the PyOpenCL.Arrays are replaced by Numpy.Array

Parameters: out (PyOpenCL.Array) – The complex measurement space data which is the result of the computation. inp (PyOpenCL.Array) – The complex parameter space data which is used as input. wait_for (list of PyopenCL.Event) – A List of PyOpenCL events to wait for. A PyOpenCL event to wait for. PyOpenCL.Event
fwdoop(inp, **kwargs)

Forward operator application out-of-place.

Apply the linear operator from parameter space to measurement space If streamed operations are used the PyOpenCL.Arrays are replaced by Numpy.Array This method need to generate a temporary array and will return it as the result.

Parameters: inp (PyOpenCL.Array) – The complex parameter space data which is used as input. wait_for (list of PyopenCL.Event) – A List of PyOpenCL events to wait for. PyOpenCL.Array (A PyOpenCL array containing the result of the) computation.
class pyqmri.operator.OperatorKspaceStreamed(par, prg, DTYPE=<class 'numpy.complex64'>, DTYPE_real=<class 'numpy.float32'>, trafo=True)

The streamed version of the k-space based Operator.

This class serves as linear operator between parameter and k-space. All calculations are performed in a streamed fashion.

Use this operator if you want to perform complex parameter fitting from complex k-space data without the need of performing FFTs. In contrast to non-streaming classes no out of place operations are implemented.

Parameters: 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). prg (PyOpenCL.Program) – The PyOpenCL.Program object containing the necessary kernels to execute the linear Operator. DTYPE (numpy.dtype, numpy.complex64) – Complex working precission. DTYPE_real (numpy.dtype, numpy.float32) – Real working precission. trafo (bool, true) – Switch between cartesian (false) and non-cartesian FFT (True, default).
overlap

Number of slices that overlap between adjacent blocks.

Type: int
par_slices

Number of slices per streamed block.

Type: int
fwdstr

The streaming object to perform the forward evaluation.

Type: PyQMRI.Stream
adjstr

The streaming object to perform the adjoint evaluation.

Type: PyQMRI.Stream
adjstrKyk1

The streaming object to perform the adjoint evaluation including z1 of the algorithm.

Type: PyQMRI.Stream
NUFFT

A list of NUFFT objects. One for each context.

Type: list of PyQMRI.transforms.PyOpenCLnuFFT
FTstr

A streamed version of the used (non-uniform) FFT, applied forward.

Type: PyQMRI.Stream
unknown_shape

Size of the parameter maps

Type: tuple of int
data_shape

Size of the data

Type: tuple of int
adj(out, inp, **kwargs)

Apply the linear operator from measurement space to parameter space If streamed operations are used the PyOpenCL.Arrays are replaced by Numpy.Array

Parameters: out (PyOpenCL.Array) – The complex parameter space data which is the result of the computation. inp (PyOpenCL.Array) – The complex measurement space data which is used as input. wait_for (list of PyopenCL.Event) – A List of PyOpenCL events to wait for. PyOpenCL.Event A PyOpenCL event to wait for.
adjKyk1(out, inp)

Apply the linear operator from parameter space to k-space.

This method fully implements the combined linear operator consisting of the data part as well as the TGV regularization part.

Parameters: out (numpy.Array) – The complex parameter space data which is used as input. inp (numpy.Array) – The complex parameter space data which is used as input.
adjoop(inp, **kwargs)

Apply the linear operator from measurement space to parameter space If streamed operations are used the PyOpenCL.Arrays are replaced by Numpy.Array This method need to generate a temporary array and will return it as the result.

Parameters: inp (PyOpenCL.Array) – The complex measurement space which is used as input. wait_for (list of PyopenCL.Event) – A List of PyOpenCL events to wait for. PyOpenCL.Array (A PyOpenCL array containing the result of the) computation.
fwd(out, inp, **kwargs)

Forward operator application in-place.

Apply the linear operator from parameter space to measurement space If streamed operations are used the PyOpenCL.Arrays are replaced by Numpy.Array

Parameters: out (PyOpenCL.Array) – The complex measurement space data which is the result of the computation. inp (PyOpenCL.Array) – The complex parameter space data which is used as input. wait_for (list of PyopenCL.Event) – A List of PyOpenCL events to wait for. A PyOpenCL event to wait for. PyOpenCL.Event
fwdoop(inp, **kwargs)

Forward operator application out-of-place.

Apply the linear operator from parameter space to measurement space If streamed operations are used the PyOpenCL.Arrays are replaced by Numpy.Array This method need to generate a temporary array and will return it as the result.

Parameters: inp (PyOpenCL.Array) – The complex parameter space data which is used as input. wait_for (list of PyopenCL.Event) – A List of PyOpenCL events to wait for. PyOpenCL.Array (A PyOpenCL array containing the result of the) computation.