#include <KSFoundation.h>
Data Fields | |
KS_READTRAP | read |
KS_TRAP | read_flyback |
KS_TRAP | readphaser |
KS_TRAP | blip |
KS_TRAP | caipiblip |
KS_PHASER | blipphaser |
KS_PHASER | zphaser |
int | epi_readout_mode |
int | R_ky |
int | etl |
int | read_spacing |
int | duration |
int | time2center |
float | blipoversize |
float | minbliparea |
int | compressed_bam |
The KS_EPI composite sequence object controls an entire EPI train (including de/rephasers on freq & phase axes). The KS_EPI object consists of several fields, four of which are other sequence objects:
.read
: The EPI readout lobes including data acquisition.readphaser
: The dephaser and rephaser gradients before and after the core EPI train, on the same board as .read
.blip
: The blip gradients in the phase encoding direction between the readout lobes.blipphaser
: The dephaser & rephaser gradients on the same board as the .blip
gradients. For multi-shot EPI these gradients will change in scan() when calling ks_scan_epi_shotcontrol()The KS_EPI object is set up in cveval()
using ks_eval_epi(), but before calling this function, portions of the .read
field (KS_READTRAP) and .blipphaser
field (KS_PHASER) must be set up. Here follows a minimal list of fields that must be set:
.read.fov
: The Field-of-View (FOV) in the frequency encoding (readout) direction.read.res
: The number of pixels within the FOV along the frequency encoding direction.blipphaser.fov
: The Field-of-View (FOV) in the phase encoding direction.blipphaser.res
: The number of pixels within the FOV along the phase encoding direction.blipphaser.R
: Either the number of EPI shots or the parallel imaging factor.read.rampsampling
: Whether rampsampling should be used (see KS_READTRAP). Value of 1 is recommended for EPI.read.acq.rbw
: The receiver bandwidth in [kHz/FOV]. Maximum: 250If the KS_EPI object is initialized with KS_INIT_EPI on declaration, .read.rampsampling
will already be set to 1 and .read.acq.rbw
will be set to 250.0 (hence steps 6-7 can be skipped).
Single-shot EPI acquisitions are geometrically distorted to some degree depending on chosen .read.res
and .blipphaser.fov
. To reduce the EPI distortions, either multi-shot EPI or parallel imaging acceleration can be used. For both alternatives, every Rth phase encoding line is acquired in k-space as the EPI train is played out. R corresponds to the number of shots (opnshots
menu in the UI) or the parallel imaging factor. Therefore, e.g. a 4-shot EPI readout is identical to an R = 4 accelerated EPI readout with the same FOV and resolution, why one same field .R
may be used to control the EPI train setup, be it multi-shot or parallel imaging acceleration (but not both at the same time). What differs between multi-shot and parallel imaging acceleration in the acquisition is only whether the .blipphaser
should change from TR to TR. Hence, to set up a KS_EPI object, use the field .R
for both multi-shot EPI and parallel imaging scenarios.
The remaining fields of interest in the KS_EPI sequence objects are:
.etl
: This is the echo-train-length (ETL) of the EPI readout train, set by ks_eval_epi() based on .blipphaser.res
and .blipphaser.R
.read_spacing
: Additional spacing in [us] between readout lobes. Default value is zero, but can be set > 0 if additional gradients is to be inserted between the readout lobes. One scenario is adding CAIPIRINHA blips on ZGRAD during the time where the EPI readout is played out in the pulse sequence.duration
: Convenience information for timing calculations, set by ks_eval_epi(). This is the total time in [us] for the EPI train, including the dephasers and rephasers on the frequency and phase axes. Note that there are also .duration
fields for each of the four KS_***
sequence objects in KS_EPI, stating the duration of each of these components..time2center
: Convenience information for timing calculations, set by ks_eval_epi(). The time in [us] from the start of the first dephaser until the center of k-space is reached. This deviates from .duration/2
for partial Fourier EPI trains where .blipphaser.nover > 0
(a.k.a. fractional NEX, but typically shown as MiniumTE in the UI for EPI)It is a requirement that there is a (sequence generating) function in the @pg
section (containing the ks_pg_epi() call(s)) that can be run on both HOST and TGT. This function should be called exactly once in cveval()
(after ks_eval_epi() and other ks_eval_***()
functions). ks_pg_epi() will throw an error on TGT if this has not been done.
KS_READTRAP read |
EPI readout lobe (etl instances per EPI train)
KS_TRAP read_flyback |
flyback gradient for monopolar EPI
KS_TRAP readphaser |
EPI read dephaser (instance #0) and read rephaser (instance #1)
KS_TRAP blip |
EPI blips (.etl
-1 instances per EPI train)
KS_TRAP caipiblip |
CAIPI-blips (.etl
-1 instances per EPI train)
KS_PHASER blipphaser |
EPI blip dephaser (instance #0) and blip rephaser (instance #1)
KS_PHASER zphaser |
Second phase encoding (ZGRAD) field, zphaser.res > 1 triggers 3D (ks_eval_epi)
int epi_readout_mode |
0 [default]: 1 (KS_EPI_SPLITODDEVEN), positive and negative readout lobes will be placed in separate k-spaces 2: KS_EPI_FLYBACK monopolar EPI, read_flyback is used to rewind (for 1 and 2 no nyquist ghost correction needed)
int R_ky |
Undersampling of k-space along ky (3D: outside the kz acs region) .blipphaser.R must be divisible by R_ky (default: 1 = fully sampled k-space)
int etl |
Echo-Train-Length (ETL), set by ks_eval_epi()
int read_spacing |
0 [default]: Optional extra spacing between readout lobes [us]
int duration |
Duration of EPI train, including dephasers and rephasers [us]
int time2center |
Time from the beginning of first EPI dephaser to the position corresponding to the center of k-space [us]
float blipoversize |
1.0 [default]: Blip widening factor to allow for oblique Nyquist ghost correction
float minbliparea |
(Internal use) Minimum blip area until the blip needs to be widened to reduce discretization errors. If .blip.area < .minbliparea
, .blipoversize
will be increased above 1.5
int compressed_bam |