KSFoundation  [October2024]
A platform for structured EPIC programming on GE MR systems
ksfse_implementation.e File Reference
#include "ksdesign.h"
#include "ksscan.h"
#include "ksinversion.h"

Data Structures

struct  KSFSE_SEQUENCE
 

Macros

#define KSFSE_MINHNOVER   6
 
#define KSFSE_MIN_SSI_TIME   200
 
#define KSFSE_MAXTHICKFACT   3.0
 
#define KSFSE_INIT_SEQUENCE   {KS_INIT_SEQ_CONTROL, KS_INIT_READTRAP, KS_INIT_TRAP, KS_INIT_PHASER, KS_INIT_PHASER, KS_INIT_TRAP, KS_INIT_SELRF, KS_INIT_SELRF, KS_INIT_SELRF, KS_INIT_SELRF, KS_INIT_SELRF, KS_INIT_SELRF};
 
#define KSFSE_PHASEENCODING_MEMORYPOOL_SIZE   25000
 

Enumerations

enum  { KSFSE_RECOVERY_OFF, KSFSE_RECOVERY_T1WOPT, KSFSE_RECOVERY_FAST }
 

Functions

 abstract ("FSE [KSFoundation]")
 
 psdname ("ksfse")
 
void ksfse_eval_TEmenu (int esp, int maxte, int etl, double optechono)
 
STATUS ksfse_calc_echo (double *bestecho, double *optecho, KS_PHASER *pe, int TE, int etl, int esp)
 
STATUS ksfse_pg (int start_time)
 
KS_CORESLICETIME ksfse_scan_coreslice (const SCAN_INFO *slice_pos, KS_DYNAMIC_STATE *dynamic)
 
KS_CORESLICETIME ksfse_scan_coreslicegroup (const SCAN_INFO *slice_pos, KS_DYNAMIC_STATE *dynamic)
 
KS_CORESLICETIME ksfse_scan_irslice (const SCAN_INFO *slice_pos, KS_DYNAMIC_STATE *dynamic)
 
s64 ksfse_scan_scanloop ()
 
STATUS ksfse_scan_seqstate (SCAN_INFO slice_pos, KS_PHASEENCODING_SHOTCOORDS shot_coords)
 
const KSSCAN_LOOP_CONTROLksfse_get_loop_ctrl ()
 
void ksfse_init_imagingoptions (void)
 
STATUS ksfse_init_UI (void)
 
STATUS ksfse_eval_UI ()
 
int ksfse_eval_esp (int *min90_180, int *min180_echo, int slicecheck, KSFSE_SEQUENCE *seq)
 
int ksfse_eval_optimalkxnover (KSFSE_SEQUENCE *seq)
 
float ksfse_eval_rfstretchfactor (float patientweight, float flipangle, int tailoredrf_flag)
 
STATUS ksfse_eval_setuprfpulses_2D (KSFSE_SEQUENCE *seq, float crusher_dephasing)
 
STATUS ksfse_eval_setuprfpulses_3D (KSFSE_SEQUENCE *seq)
 
STATUS ksfse_eval_setuprfpulses_recovery (KSFSE_SEQUENCE *seq)
 
int ksfse_eval_ssitime ()
 
STATUS ksfse_eval_setupobjects ()
 
STATUS ksfse_eval_TErange ()
 
void ksfse_set_kspace_design (KS_KSPACE_DESIGN *kdesign)
 
void ksfse_set_slicetiming_design (KS_SLICETIMING_DESIGN *slicetiming_design)
 
STATUS ksfse_set_loop_control_design (KSSCAN_LOOP_CONTROL_DESIGN *loop_design)
 
STATUS ksfse_set_inversion_loop_control_design (KSINV_LOOP_CONTROL_DESIGN *invloopctrl_design)
 
STATUS ksfse_eval_inversion (KS_SEQ_COLLECTION *seqcollection)
 
STATUS ksfse_eval_sat (KS_SEQ_COLLECTION *seqcollection)
 
STATUS ksfse_gradheat_play (const INT max_encode_mode, int nargs, void **args)
 
STATUS ksfse_eval_loops (KS_SEQ_COLLECTION *seqcollection)
 
STATUS ksfse_eval_scantime (KS_SEQ_COLLECTION *seqcollection)
 
STATUS ksfse_update_UI ()
 
STATUS ksfse_predownload_plot (KS_SEQ_COLLECTION *seqcollection)
 
STATUS ksfse_predownload_setrecon ()
 
void ksfse_scan_rf_off ()
 
void ksfse_scan_rf_on ()
 
STATUS ksfse_scan_init (void)
 
void ksfse_scan_prescanloop (int nloops, int dda)
 

Variables

float ksfse_excthickness = 0
 
float ksfse_gscalerfexc = 0.9
 
float ksfse_flipexc = 90.0 with {0.0, 180.0, 90.0, VIS, "Excitation flip angle [deg]",}
 
float ksfse_spoilerarea = 2000.0 with {0.0, 20000.0, 5000.0, VIS, "ksfse spoiler gradient area",}
 
float rf_stretch_rfexc = 1.0 with {0.01, 100.0, 1.0, VIS, "Stretch RF excitation pulse if > 1.0",}
 
int ksfse_inflowsuppression = 0 with {0, 1, 0, VIS, "In-flow Suppression [0:OFF, 1:ON]",}
 
float ksfse_inflowsuppression_mm = 0.0 with {0.0, 100.0, 0.0, VIS, "In-flow suppression [mm]",}
 
int ksfse_vfa = 1 with {0, 1, 1, VIS, "Variable flip angles [0:OFF, 1:ON]",}
 
float ksfse_crusher_dephasing = 6.0 with {0.0, 100.0, 6.0, VIS, "scaling of crusher gradient area [cycles]",}
 
float ksfse_gscalerfref = 0.9
 
int ksfse_slicecheck = 0 with {0, 1, 0, VIS, "move readout to z axis for slice thickness test",}
 
float rf_stretch_rfref = 1.0 with {0.01, 100.0, 1.0, VIS, "Stretch RF refocusing pulses if > 1.0",}
 
float rf_stretch_all = 1.0 with {0.01, 100.0, 1.0, VIS, "Stretch all RF pulses if > 1.0",}
 
int ksfse_recovery = KSFSE_RECOVERY_OFF with {KSFSE_RECOVERY_OFF, KSFSE_RECOVERY_FAST, KSFSE_RECOVERY_OFF, VIS, "Recovery. 0:off 1:T1wopt 2:T2fast", }
 
float rf_stretch_rfrecovery = 1.0 with {0.01, 100.0, 1.0, VIS, "Stretch RF recovery pulses if > 1.0",}
 
int ksfse_kxnover_min = KSFSE_MINHNOVER with {KSFSE_MINHNOVER, 512, KSFSE_MINHNOVER, VIS, "Min mum kx overscans for minTE",}
 
int ksfse_kxnover = 32 with {KSFSE_MINHNOVER, 512, 32, VIS, "Num kx overscans for minTE",}
 
int ksfse_rampsampling = 0 with {0, 1, 0, VIS, "Rampsampling [0:OFF 1:ON]",}
 
int ksfse_extragap = 0 with {0, 100ms, 0, VIS, "extra gap between readout [us]",}
 
int ksfse_etlte = 1 with {0, 1, 1, VIS, "ETL controls TE",}
 
float ksfse_xcrusherarea = 100.0 with {0.0, 1000.0, 100.0, VIS, "x crusher area for readout",}
 
int ksfse_esp = 0 with {0, 1000000, 0, VIS, "View-only: Echo spacing in [us]",}
 
int ksfse_noph = 0 with {0, 1, 0, VIS, "Turn OFF phase encoding [0:Disabled 1:Enabled]",}
 
int ksfse_minacslines = 12 with {0, 512, 12, VIS, "Minimum ACS lines for ARC",}
 
int ksfse_minzacslines = 12 with {0, 512, 12, VIS, "Minimum z ACS lines for ARC",}
 
int ksfse_pos_start = KS_RFSSP_PRETIME with {0, , KS_RFSSP_PRETIME, VIS, "us from start until the first waveform begins",}
 
int ksfse_ssi_time = KSFSE_MIN_SSI_TIME with {50, , KSFSE_MIN_SSI_TIME, VIS, "time from eos to ssi in intern trig",}
 
int ksfse_dda = 2 with {0, 200, 2, VIS, "Number of dummy scans for steady state",}
 
int ksfse_debug = 1 with {0, 100, 1, VIS, "Write out e.g. plot files (unless scan on HW)",}
 
int ksfse_imsize = KS_IMSIZE_NATIVE with {KS_IMSIZE_NATIVE, KS_IMSIZE_MIN256, KS_IMSIZE_MIN256, VIS, "img. upsamp. [0:native 1:pow2 2:min256]"}
 
int ksfse_abort_on_kserror = FALSE with {0, 1, 0, VIS, "Hard program abort on ks_error [0:OFF 1:ON]",}
 
int ksfse_mintr = 0 with {0, 20s, 0, VIS, "Min TR (ms) [0: Disabled]",}
 
int ksfse_maxtr = 0 with {0, 40s, 0, VIS, "Max TR (ms) [0: Disabled]",}
 
KSFSE_SEQUENCE ksfse = KSFSE_INIT_SEQUENCE
 
KSSCAN_LOOP_CONTROL ksfse_loopctrl = KSSCAN_INIT_LOOP_CONTROL
 
KSINV_MODULE ksfse_inv = KSINV_INIT_MODULE
 
KSINV_LOOP_CONTROL ksfse_inv_loopctrl = KSINV_INIT_LOOP_CONTROL
 
KS_PHASEENCODING_COORD ksfse_phaseencoding_memorypool [KSFSE_PHASEENCODING_MEMORYPOOL_SIZE] = {KS_INIT_PHASEENCODING_COORD}
 
KS_KSPACE_ACQ kacq = KS_INIT_KSPACE_ACQ
 
int sequence_iopts []
 

Detailed Description

This file contains the implementation details for the ksfse psd