KSFoundation  [October2024]
A platform for structured EPIC programming on GE MR systems
ksinversion.h File Reference
#include <KSFoundation.h>
#include <ksscan.h>

Data Structures

struct  KSINV_DESIGN
 
struct  KSINV_MODULE
 
struct  KSINV_LOOP_CONTROL_DESIGN
 
struct  KSINV_LOOP_CONTROL
 
struct  KSINV_CHAIN_DESIGN
 
struct  KSINV_MULTI_INV_VOL
 
struct  KSINV_CHAIN
 

Macros

#define KSINV_DEFAULT_FLIP   180
 
#define KSINV_DEFAULT_SPOILERAREA   5000
 
#define KSINV_MINTR_T2FLAIR   8000000
 
#define KSINV_MINTR_T1FLAIR   1400000
 
#define KSINV_MAXTR_T1FLAIR   2800000
 
#define T1_CSF_3T   4400000
 
#define T1_CSF_1_5T   3600000
 
#define T1_GM_3T   1400000
 
#define T1_GM_1_5T   1100000
 
#define T1_WM_3T   750000
 
#define T1_WM_1_5T   600000
 
#define T1_FAT_3T   340000
 
#define T1_FAT_1_5T   260000
 
#define KSINV_SPOILX   1
 
#define KSINV_SPOILY   2
 
#define KSINV_SPOILZ   4
 
#define KSINV_INIT_DESIGN   {"inversion", KS_INIT_SELRF_INVDESIGN, 0, KSINV_GSCALE_NONOVERLAP, 1000.0, KSINV_SPOILX + KSINV_SPOILY + KSINV_SPOILZ, 0, KS_DEFAULT_SSI_TIME}
 
#define KSINV_INIT_MODULE   {KS_INIT_SEQ_CONTROL, KS_INIT_SELRF, KS_INIT_TRAP, KSINV_SPOILX + KSINV_SPOILY + KSINV_SPOILZ, 0}
 
#define KSINV_INIT_LOOP_CONTROL_DESIGN   {KSINV_OFF, KS_NOTSET, KS_NOTSET, FALSE, KS_DEFAULT_SSI_TIME, KSSCAN_INIT_LOOP_CONTROL_DESIGN}
 
#define KSINV_INIT_LOOP_CONTROL   {KSINV_OFF, KS_NOTSET, KS_NOTSET, KS_NOTSET, KS_NOTSET, KS_NOTSET, 0, KSSCAN_INIT_LOOP_CONTROL, KS_INIT_SEQ_CONTROL}
 
#define KSINV_MULTI_INV_MAX_NUM_VOLS   16
 
#define KSINV_INIT_CHAIN_DESIGN   {0, {0}, {KS_INIT_PHASEENCODING_PLAN_DESIGN}, {0}}
 
#define KSINV_INIT_CHAIN   {0, {{0, KS_INIT_PHASEENCODING_PLAN, 0, 0}}}
 

Enumerations

enum  KSINV_MODE { KSINV_OFF, KSINV_ON_INTERLEAVED, KSINV_ON_FLAIR_BLOCK }
 
enum  KSINV_LOOP_MODE { KSINV_LOOP_NORMAL, KSINV_LOOP_SLICEAHEAD_FIRST, KSINV_LOOP_SLICEAHEAD_LAST }
 
enum  KSINV_GSCALE_POLICY { KSINV_GSCALE_SET, KSINV_GSCALE_NONOVERLAP, KSINV_GSCALE_MAXWIDTH }
 

Functions

void ksinv_init_loopcontrol (KSINV_LOOP_CONTROL *loop_control)
 
void ksinv_init_design (KSINV_DESIGN *design, const char *desc)
 
void ksinv_init_sequence (KSINV_MODULE *seq)
 
STATUS ksinv_eval_validatedesign (KSINV_DESIGN *design)
 
STATUS ksinv_eval_setupobjects (KSINV_MODULE *seq, const KSINV_DESIGN *design)
 
STATUS ksinv_pg (KSINV_MODULE *seq)
 
STATUS ksinv_scan_seqstate (KSINV_MODULE *seq, const SCAN_INFO *slice_pos)
 
KS_CORESLICETIME ksinv_scan_irslice (KSINV_MODULE *seq, const SCAN_INFO *slice_pos, KS_DYNAMIC_STATE *dynamic)
 
float ksinv_eval_gscale (float slice_thickness, float slice_spacing, int numacqs, KSINV_GSCALE_POLICY gscale_policy)
 
STATUS ksinv_eval_design (KSINV_MODULE *invseq, KSINV_DESIGN *invseq_design, int npasses, KS_SEQ_COLLECTION *seqcollection)
 
STATUS ksinv_loop_control_eval_design (KSINV_LOOP_CONTROL *inv_loopctrl, KS_CORESLICETIME irslice(const SCAN_INFO *slice_pos, KS_DYNAMIC_STATE *dynamic), KS_SEQ_CONTROL *invseq_seqctrl_ptr, KS_CORESLICETIME coreslice(const SCAN_INFO *slice_pos, KS_DYNAMIC_STATE *dynamic), KS_SEQ_CONTROL *mainseq_seqctrl_ptr, const KSINV_LOOP_CONTROL_DESIGN *design, KS_SEQ_COLLECTION *seqcollection)
 
STATUS ksinv_eval_duration_simple (KSINV_LOOP_CONTROL *inv_loopctrl, KS_CORESLICETIME irslicetime, KS_CORESLICETIME coreslicetime, KS_SEQ_CONTROL *invseq_seqctrl_ptr, const KSINV_LOOP_CONTROL_DESIGN *design)
 
int ksinv_eval_nullti (int TR, int T1value, int seqdur)
 
int ksinv_eval_nulltr (int TI, int T1value, int seqdur)
 
STATUS ksinv_eval_duration_interleaved (KSINV_LOOP_CONTROL *inv_loopctrl, KS_CORESLICETIME irslicetime, KS_CORESLICETIME coreslicetime, KS_SEQ_CONTROL *invseq_seqctrl_ptr, KS_SEQ_CONTROL *mainseq_seqctrl_ptr, const KSINV_LOOP_CONTROL_DESIGN *design)
 
STATUS ksinv_eval_duration_flairblock (KSINV_LOOP_CONTROL *inv_loopctrl, KS_CORESLICETIME irslicetime, KS_CORESLICETIME coreslicetime, KS_SEQ_CONTROL *invseq_seqctrl_ptr, KS_SEQ_CONTROL *mainseq_seqctrl_ptr, const KSINV_LOOP_CONTROL_DESIGN *design)
 
STATUS ksinv_eval_duration_setfilltr (KS_SEQ_CONTROL *filltr, int duration)
 
STATUS ksinv_check ()
 
STATUS ksinv_predownload_setrecon ()
 
s64 ksinv_scan_sliceloop (KSINV_LOOP_CONTROL *inv_loopctrl, KS_DYNAMIC_STATE *dynamic, KSINV_LOOP_MODE ksinv_loop_mode, KS_CORESLICETIME coreslice(const SCAN_INFO *slice_pos, KS_DYNAMIC_STATE *dynamic), KS_CORESLICETIME irslice(const SCAN_INFO *slice_pos, KS_DYNAMIC_STATE *dynamic))
 
s64 ksinv_scan_sliceloop_flairblock (KSINV_LOOP_CONTROL *inv_loopctrl, KS_DYNAMIC_STATE *dynamic, KS_CORESLICETIME coreslice(const SCAN_INFO *slice_pos, KS_DYNAMIC_STATE *dynamic), KS_CORESLICETIME irslice(const SCAN_INFO *slice_pos, KS_DYNAMIC_STATE *dynamic))
 
s64 ksinv_scan_sliceloop_sliceahead (KSINV_LOOP_CONTROL *inv_loopctrl, KS_DYNAMIC_STATE *dynamic, KS_CORESLICETIME coreslice(const SCAN_INFO *slice_pos, KS_DYNAMIC_STATE *dynamic), KS_CORESLICETIME irslice(const SCAN_INFO *slice_pos, KS_DYNAMIC_STATE *dynamic), int nslicesahead_current, int nslicesahead_next, int play_core)
 
s64 ksinv_scan_acqloop (KSINV_LOOP_CONTROL *inv_loopctrl, KS_DYNAMIC_STATE *dynamic, KS_CORESLICETIME coreslice(const SCAN_INFO *slice_pos, KS_DYNAMIC_STATE *dynamic), KS_CORESLICETIME irslice(const SCAN_INFO *slice_pos, KS_DYNAMIC_STATE *dynamic), const int inv_rampup, const int inv_rampdown)
 
s64 ksinv_scan_scanloop (KSINV_LOOP_CONTROL *inv_loopctrl, KS_DYNAMIC_STATE *dynamic, KS_CORESLICETIME coreslice(const SCAN_INFO *slice_pos, KS_DYNAMIC_STATE *dynamic), KS_CORESLICETIME irslice(const SCAN_INFO *slice_pos, KS_DYNAMIC_STATE *dynamic))
 
void ksinv_prescanloop (KSINV_LOOP_CONTROL *inv_loopctrl, KS_CORESLICETIME coreslice(const SCAN_INFO *slice_pos, KS_DYNAMIC_STATE *dynamic), KS_CORESLICETIME irslice(const SCAN_INFO *slice_pos, KS_DYNAMIC_STATE *dynamic), int nloops, int dda)
 
STATUS ksinv_eval_chain_design (KSINV_CHAIN *inv_chain, KSINV_CHAIN_DESIGN *inv_chain_design, const KSINV_LOOP_CONTROL *inv_loopctrl)
 
s64 ksinv_scan_acqloop_chain (const KSINV_CHAIN *inv_chain, KSINV_LOOP_CONTROL *inv_loopctrl, KS_DYNAMIC_STATE *dynamic, KS_CORESLICETIME coreslice(const SCAN_INFO *slice_pos, KS_DYNAMIC_STATE *dynamic), KS_CORESLICETIME irslice(const SCAN_INFO *slice_pos, KS_DYNAMIC_STATE *dynamic))
 
s64 ksinv_scan_scanloop_chain (const KSINV_CHAIN *inv_chain, KSINV_LOOP_CONTROL *inv_loopctrl, KS_DYNAMIC_STATE *dynamic, KS_CORESLICETIME coreslice(const SCAN_INFO *slice_pos, KS_DYNAMIC_STATE *dynamic), KS_CORESLICETIME irslice(const SCAN_INFO *slice_pos, KS_DYNAMIC_STATE *dynamic))
 

Detailed Description

This file contains the structure for the inversion sequence generator