#include <KSFoundation.h>
Data Fields | |
KS_RF | rf |
float | slthick |
float | crusher_dephasing |
int | bridge_crushers |
float | pregrad_area_offset |
float | postgrad_area_offset |
KS_TRAP | pregrad |
KS_TRAP | grad |
KS_TRAP | postgrad |
KS_WAVE | gradwave |
int | grad2rf_start |
int | rf2grad_end |
KS_SMS_INFO | sms_info |
The KS_SELRF composite sequence object contains a KS_RF object and three KS_TRAP objects and an optional KS_WAVE object. The purpose of the KS_SELRF object is to provide a complete functionality for slice selection. Depending on the declared role (.rf.role
), and the fields like .slthick
, the KS_TRAP objects will be set up differently in ks_eval_selrf(). The KS_TRAP fields in KS_SELRF are:
.pregrad
: A gradient that may be present before the RF slice selection.grad
: The slice selection gradient that is applied at the same time as the KS_RF RF pulse.postgrad
: A gradient that may be present after the RF slice selectionThe following values of .rf.role
are allowed:
KS_RF_ROLE_EXC
, indicating an RF excitation role. ks_eval_selrf() will in this case:.pregrad
.grad
to have a plateautime equal to the RF duration (.rf.rfwave.duration
) and the gradient amplitude (.grad.amp
[G/cm]) will be set to the proper value, depending on the BW (.rf.bw
) and slice thickness (.slthick
). Note that the slice thickness often needs to be made larger to compensate from slice narrowing due to multiple RF pulses. GE uses gscale_rfX
CVs with values often between 0.8-0.9. Dividing with this number gives a thicker slice in the calculations. The field .grad.description
will have a ".trap" suffix added to it.postgrad
to have a gradient area that rephases the slice. This is dependent on the isodelay of the RF pulse (.rf.iso2end
) and the slice select gradient amplitude (.grad.amp
). The field .postgrad.description
will have a ".reph" suffix added to itKS_RF_ROLE_REF
, indicating an RF refocusing role. ks_eval_selrf() will in this case:.pregrad
to make the left crusher. The size of the crusher can be controlled by .crusherscale
. The field .pregrad.description
will have a ".LC" suffix added to it.grad
as done for KS_RF_ROLE_EXC
.postgrad
to make the right crusher. The size of the crusher can be controlled by .crusherscale
. The field .postgrad.description
will have a ".RC" suffix added to itKS_RF_ROLE_INV
, indicating an RF inversion role. ks_eval_selrf() will in this case:.pregrad
.grad
as done for KS_RF_ROLE_EXC
.postgrad
KS_RF_ROLE_SPSAT
, indicating a spatial RF saturation. ks_eval_selrf() will in this case:.pregrad
.grad
as done for KS_RF_ROLE_EXC
.postgrad
to make a gradient spoiler (never bridged with slice selection). The size of the spoiler can be controlled by .crusherscale
. The field .postgrad.description
will have a ".spoiler" suffix added to itThe role KS_RF_ROLE_CHEMSAT
, indicates a non-slice selective, chemically selective, RF (usually fat-sat). ks_eval_selrf() will in this case throw an error since no gradients should be used
With ks_eval_selrf(), the default slewrate and maximum gradient amplitude are used for the KS_TRAP objects, and it is possible (with few applications) to play out three simultaneous gradients during slice selection. For oblique slices, the maximum gradient strength will however be reduced. For high-bandwidth RF pulses and thin slices, it may be beneficial to allow for a larger maximum gradient strength for oblique slice planes. This can be done by instead calling:
To support e.g. VERSEd RF excitations, a custom gradient wave can be used.
If .gradwave.res > 0
, ks_eval_selrf() will disable .grad
and use .gradwave
instead. When .rf.role = KS_RF_ROLE_EXC
, the rephasing gradient area (in .postgrad
) will also be calculated by integrating the gradient waveform from the RF isocenter to the end. .gradwave
must be created before calling ks_eval_selrf() using either ks_eval_wave() or ks_eval_wave_file(), and the units must be in [G/cm]. To further scale the amplitude of .gradwave
before calling ks_pg_selrf(), consider e.g. .multiplyval(), ks_wave_absmax(), and possibly ks_wave_addval().
In the @pg
section, if .gradwave.res > 0
, ks_pg_selrf() will place out the .gradwave
instead of .grad
. As all KS_WAVE objects are double buffered, it is possible to swap out the gradient waveform in `scan() if necessary.
It is a requirement that there is a (sequence generating) function in the @pg
section (containing the ks_pg_selrf() call(s)) that can be run on both HOST and TGT. This function should be called once in cveval()
(after ks_eval_selrf() and other ks_eval_***()
functions). ks_pg_selrf() will throw an error on TGT if this has not been done. An error will also occur on TGT if the RF pulse and the associated KS_SEQ_CONTROL struct governing the sequence (module) has not undergone RF scaling using GEReq_eval_rfscaling().
float slthick |
Slice thickness in [mm] (often needs to be scaled up 10-15% to really achieve the expected thickness, depending on number of RF pulses)
float crusher_dephasing |
Crusher gradient dephasing over slice thickness [cycles]. Only used when .rf.role = KS_RF_ROLE_REF
. Default: 2.0. If = -1 then negative flowcomp z crushing is implemented
int bridge_crushers |
Bridges crushers for refocusing pulses by creating a single gradwave containing both crushers and slice-select gradients (1=on, 0=off)
float pregrad_area_offset |
[(G/cm)*us], pregrad.area - pregrad_area_offset
float postgrad_area_offset |
[(G/cm)*us], postgrad.area - postgrad_area_offset
KS_TRAP pregrad |
Pre Slice Select gradient. KS_RF_ROLE_REF
: Left Crusher. KS_RF_ROLE_EXC/KS_RF_ROLE_INV
: Off (Off state given by pregrad.duration = 0
)
KS_TRAP grad |
Slice Select gradient
KS_TRAP postgrad |
Post Slice Select gradient. KS_RF_ROLE_REF
: Right Crusher. KS_RF_ROLE_EXC
: Slice rephaser. KS_RF_ROLE_SPSAT
: Spoiler. KS_RF_ROLE_INV
: Off. (Off state given by postgrad.duration = 0
)
KS_WAVE gradwave |
Optional external gradient instead of using .grad
. Default: Off (Off state given by gradwave.res = 0
)
int grad2rf_start |
time [us] from start of gradients to start of rf
int rf2grad_end |
time [us] from end of rf to end of gradients
KS_SMS_INFO sms_info |
Information about the pulses SMS properties