Skip to content

pcSenseTimeSeg

template <typename T1> class pcSenseTimeSeg

Phase-corrected multi-shot SENSE with time-segmented field-map correction.

Combines per-shot phase correction (pcSENSE) with time-segmented off-resonance correction (TimeSegmentation), providing accurate forward and adjoint models for multi-shot non-Cartesian acquisitions with significant \(B_0\) inhomogeneity. This is the full model for techniques such as multi-shot spiral DWI.

The combined forward model applies shot-varying phase correction and time-segmented field correction together:

\[\mathbf{d}_{c,s} = A_s(P_s \circ S_c \circ \mathbf{x})\]

where \(A_s\) is the time-segmented NUFFT operator for shot \(s\) (which incorporates the off-resonance field map \(\omega(\mathbf{r})\)), \(P_s = e^{i\phi_s(\mathbf{r})}\) is the shot-specific phase map, and \(S_c\) is the coil sensitivity map.

When to use: - Use this operator when both shot-varying phase correction AND off-resonance field correction are needed (e.g., multi-shot spiral diffusion-weighted imaging). - If only phase correction is needed (short readouts, minimal off-resonance), use pcSENSE instead. - If only field correction is needed (single-shot acquisition with off-resonance), use TimeSegmentation wrapping SENSE.

pcSenseTimeSeg<float> P(kx, ky, kz, Nx, Ny, Nz, nc, tvec,
                         L, interpType, SENSEmap, fieldMap,
                         shotPhaseMap);
Col<cx_float> kdata = P * image;   // forward
Col<cx_float> recon = P / kdata;   // adjoint

See : pcSENSE

See : TimeSegmentation

See : SENSE

T1 : Floating-point precision type (float or double).

Variables

Name Description
SMap Number of k-space samples per shot.
PMap Per-shot phase maps in radians, size Ni x Ns.
FMap Off-resonance field map (rad/s), length Ni.
Kx k-space x-coordinates, size (samples/shot) x Ns.
Ky k-space y-coordinates, size (samples/shot) x Ns.
Kz k-space z-coordinates, size (samples/shot) x Ns.
Tvec Readout time vector (s), size (samples/shot) x Ns.
Nx Image size in x.
Ny Image size in y.
Nz Image size in z.
Ix Image-space x-coordinates, length Ni.
Iy Image-space y-coordinates, length Ni.
Iz Image-space z-coordinates, length Ni.
i Imaginary unit constant for phase computations.
type Interpolation type: 1 = Hanning, 2 = min-max.
L Number of time segments for field-map correction.
shotSpecificSenseMap Shot-specific combined (sensitivity x phase) maps, size Ni x (Nc*Ns).
conjShotSpecificSenseMap Conjugate shot-specific maps, size Ni x (Nc*Ns).
shotSpecificSenseMap_pg GPU-ready shot-specific combined sensitivity+phase maps for Metal path.
conjShotSpecificSenseMap_pg GPU-ready conjugate shot-specific maps for Metal adjoint path.

Operators

Name Description
operator* Forward transform: image -> k-space with phase and field-map correction. d : Input image vector of length Ni. Return : Stacked k-space vector of length NdNsNc.
operator/ Adjoint transform: k-space -> image with phase and field-map correction. d : Input k-space vector of length NdNsNc. Return : Output image vector of length Ni.
operator* Forward transform (forgeCol overload for Metal path).
operator/ Adjoint transform (forgeCol overload for Metal path).

Functions

Name Description
pcSenseTimeSeg Default constructor.
~pcSenseTimeSeg Destructor — frees per-shot NUFFT and TimeSegmentation operator arrays.
pcSenseTimeSeg Array of per-shot NUFFT operator pointers.

Variable Details

FMap

Col<T1> FMap

Off-resonance field map (rad/s), length Ni.

Ix

Col<T1> Ix

Image-space x-coordinates, length Ni.

Iy

Col<T1> Iy

Image-space y-coordinates, length Ni.

Iz

Col<T1> Iz

Image-space z-coordinates, length Ni.

Kx

Mat<T1> Kx

k-space x-coordinates, size (samples/shot) x Ns.

Ky

Mat<T1> Ky

k-space y-coordinates, size (samples/shot) x Ns.

Kz

Mat<T1> Kz

k-space z-coordinates, size (samples/shot) x Ns.

L

uword L

Number of time segments for field-map correction.

Nx

uword Nx

Image size in x.

Ny

uword Ny

Image size in y.

Nz

uword Nz

Image size in z.

PMap

Mat<T1> PMap

Per-shot phase maps in radians, size Ni x Ns.

SMap

Mat<CxT1> SMap

Number of k-space samples per shot.
Number of image pixels.
Number of receiver coils.
Number of shots.
Coil sensitivity maps, size Ni x Nc.

Tvec

Mat<T1> Tvec

Readout time vector (s), size (samples/shot) x Ns.

conjShotSpecificSenseMap

Mat<CxT1> conjShotSpecificSenseMap

Conjugate shot-specific maps, size Ni x (Nc*Ns).

conjShotSpecificSenseMap_pg

forgeMat<forgeComplex<T1>> conjShotSpecificSenseMap_pg

GPU-ready conjugate shot-specific maps for Metal adjoint path.

i

CxT1 i

Imaginary unit constant for phase computations.

shotSpecificSenseMap

Mat<CxT1> shotSpecificSenseMap

Shot-specific combined (sensitivity x phase) maps, size Ni x (Nc*Ns).

shotSpecificSenseMap_pg

forgeMat<forgeComplex<T1>> shotSpecificSenseMap_pg

GPU-ready shot-specific combined sensitivity+phase maps for Metal path.

type

uword type

Interpolation type: 1 = Hanning, 2 = min-max.

Operator Details

operator*

Col<CxT1> operator*(const Col<CxT1>& d) const

Forward transform: image -> k-space with phase and field-map correction.

d : Input image vector of length Ni.

Return : Stacked k-space vector of length NdNsNc.

forgeCol<forgeComplex<T1>> operator*(const forgeCol<forgeComplex<T1>>& d) const

Forward transform (forgeCol overload for Metal path).

d : Input image vector of length Ni.

Return : Stacked k-space vector of length NdNsNc.

operator/

Col<CxT1> operator/(const Col<CxT1>& d) const

Adjoint transform: k-space -> image with phase and field-map correction.

d : Input k-space vector of length NdNsNc.

Return : Output image vector of length Ni.

forgeCol<forgeComplex<T1>> operator/(const forgeCol<forgeComplex<T1>>& d) const

Adjoint transform (forgeCol overload for Metal path).

d : Input k-space vector of length NdNsNc.

Return : Output image vector of length Ni.

Function Details

pcSenseTimeSeg

pcSenseTimeSeg()

Default constructor.

pcSenseTimeSeg(Col<T1> kx, Col<T1> ky, Col<T1> kz, uword nx, uword ny, uword nz, uword nc, Col<T1> t, uword L, uword intType, Col<CxT1> SENSEmap, Col<T1> FieldMap, Col<T1> ShotPhaseMap)

Array of per-shot NUFFT operator pointers.
Array of per-shot TimeSegmentation operator pointers.
Construct a phase-corrected SENSE+time-segmentation operator.

kx : k-space x-coordinates (all shots), length Nd*Ns.

ky : k-space y-coordinates, length Nd*Ns.

kz : k-space z-coordinates, length Nd*Ns.

nx : Image size in x.

ny : Image size in y.

nz : Image size in z.

nc : Number of receiver coils.

t : Per-sample readout time (s), length Nd*Ns.

L : Number of time segments.

intType : Interpolation type: 1 = Hanning, 2 = min-max.

SENSEmap : Sensitivity maps, flat vector length Ni*Nc.

FieldMap : Off-resonance field map (rad/s), length Ni.

ShotPhaseMap : Per-shot phase maps (rad), length Ni*Ns.

~pcSenseTimeSeg

~pcSenseTimeSeg()

Destructor — frees per-shot NUFFT and TimeSegmentation operator arrays.