KSFoundation  [April-2021]
A platform for simpler EPIC programming on GE MR systems
ksepi_implementation.e File Reference

Data Structures

struct  KSEPI_SEQUENCE
 
struct  KSEPI_FLEET_SEQUENCE
 

Macros

#define KSEPI_MINHNOVER   8 /* N.B. overscans below about 16-24 should be avoided for long TE */
 
#define KSEPI_MAXRBW_NORAMPSAMPLING   125.0
 
#define KSEPI_DEFAULT_SSI_TIME_ICEHARDWARE   100
 
#define KSEPI_DEFAULT_SSI_TIME   1500
 
#define KSEPI_INIT_SEQUENCE1   KS_INIT_SEQ_CONTROL, KS_INIT_EPI, KS_INIT_EPI, KS_INIT_TRAP, KS_INIT_SELRF, KS_INIT_SELRF, KS_INIT_SELRF, KS_INIT_TRAP, KS_INIT_TRAP, KS_INIT_WAIT, KS_INIT_WAIT
 
#define KSEPI_INIT_SEQUENCE2   KS_INIT_TRAP, KS_INIT_TRAP, KS_INIT_PHASEENCODING_PLAN, KS_INIT_PHASEENCODING_PLAN, KS_INIT_PHASEENCODING_PLAN, NULL
 
#define KSEPI_INIT_SEQUENCE   {KSEPI_INIT_SEQUENCE1, KSEPI_INIT_SEQUENCE2};
 
#define KSEPI_FLEET_INIT_SEQUENCE   {KS_INIT_SEQ_CONTROL, KS_INIT_EPI, KS_INIT_TRAP, KS_INIT_SELRF, KS_INIT_WAIT, KS_INIT_WAIT, KS_INIT_PHASEENCODING_PLAN};
 

Enumerations

enum  KSEPI_MULTISHOT_MODE { KSEPI_MULTISHOT_OFF, KSEPI_MULTISHOT_ALLVOLS, KSEPI_MULTISHOT_1STVOL, KSEPI_MULTISHOT_B0VOLS }
 

Functions

 abstract ("EPI [KSFoundation]")
 
 psdname ("ksepi")
 
STATUS ksepi_eval_flowcomp_phase (KS_TRAP *fcphase, const KS_EPI *epi, const char *desc)
 
STATUS ksepi_pg (int start_time)
 
int ksepi_scan_coreslice (const SCAN_INFO *slice_pos, int dabslice, int shot)
 
int ksepi_scan_coreslice_nargs (const SCAN_INFO *slice_pos, int dabslice, int nargs, void **args)
 
int ksepi_scan_sliceloop (int slperpass, int volindx, int passindx, int shot)
 
int ksepi_scan_sliceloop_nargs (int slperpass, int nargs, void **args)
 
STATUS ksepi_scan_seqstate (SCAN_INFO slice_info, int shot)
 
float ksepi_scan_acqloop (int passindx, int volindx, int multishotflag)
 
float ksepi_scan_scanloop ()
 
void ksepi_init_imagingoptions (void)
 
STATUS ksepi_init_UI (void)
 
STATUS ksepi_eval_UI ()
 
STATUS ksepi_eval_setuprf_3dexc (KS_SELRF *selrfexc, int rf3Dopt)
 
STATUS ksepi_eval_setuprf ()
 
STATUS ksepi_eval_setupfleet ()
 
STATUS ksepi_eval_setupobjects ()
 
STATUS ksepi_eval_TErange ()
 
STATUS ksepi_eval_inversion (KS_SEQ_COLLECTION *seqcollection)
 
STATUS ksepi_eval_tr (KS_SEQ_COLLECTION *seqcollection)
 
int ksepi_eval_ssitime ()
 
STATUS ksepi_eval_scantime ()
 
STATUS ksepi_check ()
 
STATUS ksepi_predownload_plot (KS_SEQ_COLLECTION *seqcollection)
 
STATUS ksepi_predownload_setrecon ()
 
STATUS ksepi_pg_fleet (int start_time)
 
STATUS ksepi_fleet_scan_seqstate (const SCAN_INFO *slice_info, int shot)
 
void ksepi_scan_rf_off ()
 
int ksepi_fleet_scan_coreslice (const SCAN_INFO *slice_pos, int dabslice, int shot)
 
int ksepi_fleet_scan_sliceloop (int slperpass, int volindx, int passindx)
 
STATUS ksepi_scan_init (void)
 
STATUS ksepi_scan_prescanloop (int nloops, int dda)
 

Variables

float ksepi_excthickness = 0
 
float ksepi_gscalerfexc = 0.9 with {0.1, 3.0, 0.9, VIS, "Excitation slice thk scaling (< 1.0 thicker slice)",}
 
int ksepi_slicecheck = 0 with {0, 1, 0, VIS, "move readout to z axis for slice thickness test",}
 
float ksepi_spoilerarea = 3000.0 with {0.0, 10000.0, 3000.0, VIS, "ksepi ksepi.spoiler gradient area",}
 
int ksepi_rfspoiling = 1 with {0, 1, 1, VIS, "Enable RF spoiling 1:on 0:off",}
 
int ksepi_fse90 = 0 with {0, 1, 0, VIS, "Use FSE90 instead of SPSP for non-fatsat",}
 
int ksepi_rf3Dopt = 0 with {0, 10, 0, VIS, "Choose optimized SPSP pulse for 3D [0:OFF]",}
 
float ksepi_kissoff_factor = 0.04 with {0, 1, 0.04, VIS, "Slice oversampling fraction on each side (3D)",}
 
float ksepi_crusherscale = 1.0 with { -20.0, 20.0, 1.0, VIS, "scaling of crusher gradient area",}
 
float ksepi_gscalerfref = 0.9 with {0.1, 3.0, 0.9, VIS, "Refocusing slice thk scaling (< 1.0 thicker slice)",}
 
int ksepi_rampsampling = 1 with {0, 1, 1, VIS, "Rampsampling [0:OFF 1:ON]",}
 
int ksepi_readlobegap = 0 with {0, 10ms, 0, VIS, "extra gap between readout lobes [us]",}
 
int ksepi_echogap = 0 with {0, 100ms, 0, VIS, "extra gap between EPI echoes [us]",}
 
int ksepi_readsign = 1 with { -1, 1, 1, VIS, "Readout polarity: +1/-1",}
 
float ksepi_readampmax = 3.0 with {0.0, 5.0, 3.0, VIS, "Max grad amp for EPI readout lobes",}
 
float ksepi_sr = 0.01 with {0.0, , 0.01, VIS, "EPI SR: amp/ramp [(G/cm) / us]",}
 
int ksepi_esp = 0 with {0, 1000000, 0, VIS, "View-only: Echo spacing in [us]",}
 
int ksepi_blipsign = KS_EPI_POSBLIPS with {KS_EPI_NEGBLIPS, KS_EPI_POSBLIPS, KS_EPI_POSBLIPS, VIS, "Blip polarity: +1/-1",}
 
int ksepi_echotime_shifting = 1 with {0, 1, 1, VIS, "Enable echo time shifting for multi shot",}
 
int ksepi_kynover = 24 with {KSEPI_MINHNOVER, 512, 24, VIS, "#extralines for MinTE",}
 
int ksepi_kznover = 0 with {0, 512, 0, VIS, "#extralines in kz",}
 
int ksepi_ky_R = 1 with {1, 512, 1, VIS, "Acceleration in ky",}
 
int ksepi_kz_R = 1 with {1, 512, 1, VIS, "Acceleration in kz",}
 
int ksepi_kz_nacslines = 16 with {0, 512, 16, VIS, "Number of acs lines in kz",}
 
int ksepi_caipi = 0 with {0, 512, 0, VIS, "CAIPIRINHA shift (affects 3D epi only. Set 0 for no CAIPI)",}
 
int ksepi_fcy = 1 with {0, 1, 0, VIS, "Flowcomp Y when opfcomp"}
 
int ksepi_fcz = 1 with {0, 1, 0, VIS, "Flowcomp Z when opfcomp"}
 
int ksepi_fleet = 0 with {0, 1, 0, VIS, "FLEET calibration volume [0:OFF 1:ON]",}
 
float ksepi_fleet_flip = 15.0 with {0.1, 90.0, 15.0, VIS, "FLEET flip angle [deg]",}
 
int ksepi_fleet_dda = 0 with {0, 200, 0, VIS, "Dummies for FLEET module",}
 
int ksepi_fleet_num_ky = 36 with {1, 512, 36, VIS, "Number of ky encodes for FLEET module",}
 
int ksepi_fleet_num_kz = 24 with {1, 512, 24, VIS, "Number of kz encodes for FLEET module (3D only)",}
 
int ksepi_reflines = 0 with {0, 96, 0, VIS, "Number of phase reference lines per shot",}
 
int ksepi_swi_returnmode = 0 with {0, 7, 0, VIS, "SWI recon 0:Off 1:Acq 2:SWI 4:SWIphase",}
 
int ksepi_pos_start = KS_RFSSP_PRETIME with {0, , KS_RFSSP_PRETIME, INVIS, "us from start until the first waveform begins",}
 
int ksepi_ssi_time = KSEPI_DEFAULT_SSI_TIME with {32, , KSEPI_DEFAULT_SSI_TIME, VIS, "time from eos to ssi in intern trig",}
 
int ksepi_dda = 1 with {0, 200, 1, VIS, "Number of dummy scans for steady state",}
 
int ksepi_debug = 1 with {0, 100, 1, VIS, "Write out e.g. plot files (unless scan on HW)"}
 
int ksepi_imsize = KS_IMSIZE_POW2 with {KS_IMSIZE_NATIVE, KS_IMSIZE_MIN256, KS_IMSIZE_POW2, VIS, "img. upsamp. [0:native 1:pow2 2:min256]"}
 
int ksepi_abort_on_kserror = FALSE with {0, 1, 0, VIS, "Hard program abort on ks_error [0:OFF 1:ON]",}
 
int ksepi_ghostcorr = 1 with {0, 1, 1, VIS, "Ghost correction [0:OFF 1:ON]",}
 
int ksepi_ref_nsegments = 1 with {1, 512, 1, VIS, "Number of kz segments in reference volume",}
 
int ksepi_multishot_control = KSEPI_MULTISHOT_B0VOLS with {KSEPI_MULTISHOT_OFF, KSEPI_MULTISHOT_B0VOLS, KSEPI_MULTISHOT_B0VOLS, VIS, "0:PI 1:All MulShot 2:1stMulShot 3:b0MulShot",}
 
float ksepi_epiqfact = 1.0 with {1.0, 10.0, 1.0, VIS, "Quetness factor for the EPI readout only",}
 
KSEPI_SEQUENCE ksepi = KSEPI_INIT_SEQUENCE
 
KSEPI_FLEET_SEQUENCE ksepi_fleetseq = KSEPI_FLEET_INIT_SEQUENCE
 
int ksepi_interechotime = 0
 
float ksepi_echotime_shifting_shotdelay = 0
 
int ksepi_echotime_shifting_sumdelay = 0
 
int sequence_iopts []
 
int rfspoiling_phase_counter = 0
 

Detailed Description

This file contains the implementation details for the ksepi psd.