Composite sequence object for data readout during a wave (1-D resampling)
KS_READWAVE is a composite sequence object used to read out data while a wave is played out. The KS_READWAVE object is set up by calling ks_eval_readwave(), but before calling this function, the following fields in KS_READWAVE must be set up:
.fov
: Desired image Field-of-View (FOV) in [mm] along the sequence board one intends to place the KS_READWAVE on (typically XGRAD)
.res
: Number of pixels within the FOV
.acq.rbw
: Receiver bandwidth (rBW) in [kHz/FOV]. Maximum is 250
.nover
: Number of overscans. If 0, a full echo will be generated (filling k-space). If > 0, fractional echo (i.e. shorter TE) will be set up with .nover
number of extra sample points beyond .res/2
. The total number of samples will be .res/2 + .nover
. Values of .nover
between 1 and about 16 should be avoided since half Fourier reconstruction methods will likely have difficulties
.freqoffHz
: Static offset frequency in Hz. Can be used to e.g. center fat instead of water
If the KS_READWAVE object is initialized with KS_INIT_READWAVE, all input fields are set to 0
Based on the information in the KS_READWAVE object, ks_eval_readwave() will set up its .grad
trapezoid (KS_WAVE) and its acquisition window .acq
(KS_READ). The ks_eval_readwave() function takes in a KS_WAVE object called acq_waves and appends crushers on either side. It therefore automatically populates the acqdelay field as this value is only known once the "crushers" have been evaluated.
A function ks_eval_readwave_multistated is also available if you want to switch out the readout waveforms during the scan. This function makes use of wavestates to evaluate the readout gradient for an array of acquisition windows (acq_waves). Wavestates are more efficient than wave2hw.
An omega wave is always generated for KS_READWAVE objects to enable field of view offsets (ks_scan_offsetfov_iso_readwave) even when the bandwidth changes throughout the readout. The KS_READWAVE only supports 1-D resampling at the moment, for a 2-D (spiral) or 3-D extension you can use this as starting point.
Be aware that this readout type is not compatible with GE's online recon. In order to perform the resampling you need to interpret the acq_waves.bin file that is generated with ks_print_acqwaves and perform resampling in your custom recon.
It is a requirement that there is a (sequence generating) function in the @pg
section (containing the ks_pg_readwave() call(s)) that can be run on both HOST and TGT. This function should be called once in cveval()
(after ks_eval_readwave() and other ks_eval_***()
functions). ks_pg_readwave() will throw an error on TGT if this has not been done.