When defining sequences, handle the fov parameter based on dimensionality and use dimension-specific k-space step variables.
Unpacking FOV
For 2D sequences, fov can be a float (isotropic) or a tuple[float, float]. For 3D sequences, it can be a float or a tuple[float, float, float].
# 2D sequences:
fov_x, fov_y = (fov, fov) if isinstance(fov, (int, float)) else fov
# 3D sequences:
fov_x, fov_y, fov_z = (fov, fov, fov) if isinstance(fov, (int, float)) else fov
k-Space Steps
Always use explicit variables for k-space steps. Never use a single delta_k for multiple dimensions:
delta_kx = 1 / fov_x
delta_ky = 1 / fov_y
delta_kz = 1 / fov_z # 3D only
Setting Definitions
Use the unpacked values when calling seq.set_definition():
- 2D:
seq.set_definition(key='FOV', value=[fov_x, fov_y, slice_thickness]) - 3D:
seq.set_definition(key='FOV', value=[fov_x, fov_y, fov_z])
# 2D sequences:
fov_x, fov_y = (fov, fov) if isinstance(fov, (int, float)) else fov
# 3D sequences:
fov_x, fov_y, fov_z = (fov, fov, fov) if isinstance(fov, (int, float)) else fov
delta_kx = 1 / fov_x
delta_ky = 1 / fov_y
seq.set_definition(key='FOV', value=[fov_x, fov_y, slice_thickness])