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:
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.