Slice-Selective Acquisition of 3D Phantom

Scanner
  B0: Float64 1.5
  B1: Float64 1.0e-5
  Gmax: Float64 0.06
  Smax: Int64 500
  ADC_ฮ”t: Float64 2.0e-6
  seq_ฮ”t: Float64 1.0e-5
  GR_ฮ”t: Float64 1.0e-5
  RF_ฮ”t: Float64 1.0e-6
  RF_ring_down_T: Float64 2.0e-5
  RF_dead_time_T: Float64 0.0001
  ADC_dead_time_T: Float64 1.0e-5

While in the previous examples we simulated using hard RF pulses, in this demonstration we will illustrate the principles of slice selection. First, let's import a 3D phantom, in this case a brain slab (thickness of $2\,\mathrm{cm}$), by calling the function brain_phantom3D.

obj = brain_phantom3D()
obj.ฮ”w .= 0 # Removes the off-resonance
p1 = plot_phantom_map(obj, :T2 ; height=400)
"../assets/3-phantom.html"

Now, we are going to import a sequence which acquires 3 slices in the longitudinal axis. Note that the sequence contains three EPIs to acquire 3 slices of the phantom.

seq_file = joinpath(dirname(pathof(KomaMRI)), "../examples/1.sequences/epi_multislice.seq")
seq = read_seq(seq_file)
p2 = plot_seq(seq; range=[0,10], height=400)
"../assets/3-seq.html"

We can take a look to the slice profiles by using the function simulate_slice_profile:

z = range(-2., 2., 200) * 1e-2; # -2 to 2 cm
rf1, rf2, rf3 = findall(is_RF_on.(seq))
M1 = simulate_slice_profile(seq[rf1]; z)
M2 = simulate_slice_profile(seq[rf2]; z)
M3 = simulate_slice_profile(seq[rf3]; z)
"../assets/3-profile.html"

Now let's simulate the acquisition. Notice the three echoes, one for every slice excitation.

raw = simulate(obj, seq, sys; sim_params=Dict{String,Any}("Nblocks"=>20))
p3 = plot_signal(raw; slider=false, height=300)
"../assets/3-signal.html"

Finally, we reconstruct the acquiered images.

# Get the acquisition data
acq = AcquisitionData(raw)

# Setting up the reconstruction parameters and perform reconstruction
Nx, Ny = raw.params["reconSize"][1:2]
reconParams = Dict{Symbol,Any}(:reco=>"direct", :reconSize=>(Nx, Ny))
image = reconstruction(acq, reconParams)

# Plotting the slices
p4 = plot_image(abs.(image[:, :, 1]); height=360, title="Slice 1")
p5 = plot_image(abs.(image[:, :, 2]); height=360, title="Slice 2")
p6 = plot_image(abs.(image[:, :, 3]); height=360, title="Slice 3")
"../assets/3-recon3.html"

This page was generated using Literate.jl.