Get started
Example data acquired on a phantom can be downloaded here. There are available examples scripts and expected results to get started.
MRINavigator.jl is developed for and tested on data acquired with a specific set of parameters on Siemens scanners. The requirements are specified in the following paragraphs. The navigator-based correction may fail when used outside this domain.
Data requirements
The navigator based correction can only be applied on the raw data of a gradient echo acquisitions in MRD format. The gradient echo acquisition can be multi-echo or single-echo. The slices should be positioned axially (can be angulated) and one average per repetition should be used. The concatenation value should be set to one, meaning that the sequence repetition time (TR) shold be long enough to acquire one line in every slice. This is necessary to correctly identify and remove the reference data from the Siemens scans. The gradient echo acquisition must include a navigator readout through the center of k-space at the end of each TR. During the acquisition, it is advisable to collect the signal from a respiratory belt as a reference. This can be used to unwrap the navigator's phase estimates if phase wrapping is present.
Other than the main acquisition, which is usually undersampled, a lower resolution, fully sampled scan is also necessary to compute the coils sensitivity maps and reconstruct the images. This low-resolution scan is also called a reference scan and should include only one echo. It is possible to extract a single echo from a multi echo acquisition using the selectEcho!
function.
Data reshaping
All the data should be exported from the scanner in raw format. Then they should be converted to ISMRMRD format. Siemens TWIX data can be converted to ISMRMRD using siemenstoismrmrd. The example data are in ISMRMRD format and do no require any conversion. Data in ISMRMRD format can be loaded into the Julia framework. Conversion of data from other vendors has not been explicitly tested by the authors. The repiratory belt recording must be synchronised with the time stamps in the image acquisition (i.e resampled). Then they must be saved in a two-column vector (1:time [ms], 2:trace) in .mat format. Each repetition should be in a different file. The time should be expressed in seconds from the beginning of the day and contain time points before and after the image acquisition (at least 4 s).
The parameters dictionary
Before calling the package functions, the relevant correction pipeline should be chosen and the parameters dictionary should be filled. Also the data paths and results paths need to be defined. For more details regarding the correction pipelines and parameters read the Navigator-based correction pipelines page. All the information necessary to apply the corrections is defined in a dictionary. This includes all the file paths and analysis parameters. The user can also add items to the dictionary if needed. Here is an example of a params
dictionary:
params = Dict{Symbol,Any}()
params[:subject] = "sub_01"
params[:slices] = [1,2] # type nothing for all slices
params[:echoes] = [3,4] # type nothing for all echoes
params[:rep] = 0
params[:comp_sensit] = true
params[:comp_centerline] = true
params[:trust_SCT] = false
params[:use_centerline] = true
params[:corr_type] = "FFT_unwrap"
params[:FFT_interval] = 35 # millimetres
params[:mask_thresh] = 0.13
params[:root_path] = "/Users/me/my_data/"
params[:label] = params[:corr_type] * "_rep_" * string(params[:rep])
params[:path_imgData] = params[:root_path] * params[:subject] * "/h5/gre2D.h5"
params[:path_refData] = params[:root_path] * params[:subject] * "/h5/gre2D_Ref.h5"
params[:path_niftiMap] = params[:root_path] * params[:subject] * "/Nifti/gre2D_Ref.nii"
params[:path_centerline] = params[:root_path] * params[:subject] * "/Nifti/"
params[:path_physio] = params[:root_path] * params[:subject] * "/Physiological_trace/belt_reco_rep"
params[:path_sensit] = params[:root_path] * params[:subject] * "/Results/senseMap_GRE.jld2"
params[:path_noise] = params[:root_path] * params[:subject] * "/Results/noisemat.jld2"
params[:path_results] = params[:root_path] * params[:subject] * "/Results/"
params[:file_name] = "gre2D"
User examples
Three user examples are available in the folder user examples:
- Compact: runs all the selected pipeline automatically but it is not customizable and not amenable to debugging.
- Semi-Compact: allows for some level of customization and it is easy to debug.
- Complete: requires more knowledge of the data structures but it is flexible and adaptable.
Disclaimer
Siemens data only were used to develop MRINavigator. All the functions to adjust the data before running the pipeline (e.g., the function to extract the navigator profiles or to remove the reference profiles) have been tested on Siemens data only. There is no guarantee that all of these functions are needed and will work on other vendors data. Other vendors users should convert the raw data in ISMRMRD format and when loading these into the Julia framework they should make sure that all the needed information is present. Please start from the complete user example if doing this. The functions to compute and apply the corrections should then work correctly.