#include <KSFoundation.h>
Data Fields | |
int | numseq |
int | mode |
int | evaltrdone |
KS_SEQ_CONTROL * | seqctrlptr [KS_MAXUNIQUE_SEQUENCES] |
A pulse sequence consists of one or more sequence modules - one of them being the main pulse sequence, while the other ones may be add-on features like e.g. FatSat, Inversion etc. These sequence modules, each having its own KS_SEQ_CONTROL struct, are played in scan()
according to some pattern. As a collection they produce some:
To perform an overarching RF scaling (accounting also for the prescan RF pulses), TR timing and SAR calculation, the collection of sequence modules (KS_SEQ_COLLECTION) involved is used.
While the KS_SEQ_CONTROL struct could be viewed as the administrator for each sequence module, there is a single KS_SEQ_COLLECTION struct administrating the entire pulse sequence. This KS_SEQ_COLLECTION handle is only needed in cveval()
and is passed to GEReq_eval_rfscaling(), GEReq_eval_TR(), and GEReq_eval_checkTR_SAR(), which should all be called in cveval()
.
A sequence module (KS_SEQ_CONTROL) is added to the sequence collection (KS_SEQ_COLLECTION) by calling ks_eval_addtoseqcollection(), but it will be added only if seqctrl.duration > 0
. Setting mypluginmodule.duration = 0
indicates don't use, and hence it will neither be a part of RF scaling or SAR calculations. Moreover, since ks_scan_playsequence() in scan()
checks if seqctrl.duration = 0
(returns 0 duration and skips playing the module in scan()
), the TR timing follows automatically.
This is also analogous to how KS_TRAP, KS_RF and other sequence objects, on a smaller scale, are ignored by the ks_pg_***()
functions if the .duration
field is set to 0.
int numseq |
Number of sequence modules
int mode |
Flag to determine if new sequence modules may be added. Initialized to KS_SEQ_COLLECTION_ALLOWNEW, and set to KS_SEQ_COLLECTION_LOCKED by GEReq_eval_TR() and GEReq_eval_rfscaling() to prevent accidental adding of modules too late
int evaltrdone |
Flag to determine if TR timing has been done. The sequence may have more than one function that could be responsible for the TR timing, but only one should be called for any given configuration. As an example is the inversion module (KSInversion.e), which takes over the TR timing if the inversion flag is set
KS_SEQ_CONTROL* seqctrlptr[KS_MAXUNIQUE_SEQUENCES] |