Skip to content
Snippets Groups Projects

Add writing to Pulseq files

Merged Michiel Cottaar requested to merge pulseq-refactor into main
2 files
+ 7
11
Compare changes
  • Side-by-side
  • Inline
Files
2
+ 5
9
@@ -23,24 +23,21 @@ function BuildingBlock(pulseq::PulseqBlock; version, BlockDurationRaster, Radiof
@@ -23,24 +23,21 @@ function BuildingBlock(pulseq::PulseqBlock; version, BlockDurationRaster, Radiof
stated_duration = pulseq.duration * BlockDurationRaster * 1e3
stated_duration = pulseq.duration * BlockDurationRaster * 1e3
events = []
events = []
min_duration = 0.
if !isnothing(pulseq.rf)
if !isnothing(pulseq.rf)
 
f(samples) = isnothing(pulseq.rf.time) ? [samples[1], samples..., samples[end]] : samples
if isnothing(pulseq.rf.time)
if isnothing(pulseq.rf.time)
time = ((1:length(pulseq.rf.magnitude.samples)) .- 0.5) .* RadiofrequencyRasterTime .* 1e3
time = [0., ((1:length(pulseq.rf.magnitude.samples)) .- 0.5)..., length(pulseq.rf.magnitude.samples)] .* RadiofrequencyRasterTime .* 1e3
rf_dur = length(pulseq.rf.magnitude.samples) * RadiofrequencyRasterTime * 1e3
else
else
time = pulseq.rf.time.samples .* 1e3 * RadiofrequencyRasterTime
time = pulseq.rf.time.samples .* 1e3 * RadiofrequencyRasterTime
rf_dur = maximum(time)
end
end
push!(events, (
push!(events, (
pulseq.rf.delay * 1e-3,
pulseq.rf.delay * 1e-3,
GenericPulse(
GenericPulse(
time,
time,
pulseq.rf.magnitude.samples * pulseq.rf.amplitude * 1e-3,
f(pulseq.rf.magnitude.samples) * pulseq.rf.amplitude * 1e-3,
rad2deg.(pulseq.rf.phase.samples .+ pulseq.rf.phase_offset .+ pulseq.rf.frequency .* time .* 2π)
rad2deg.(f(pulseq.rf.phase.samples) .+ pulseq.rf.phase_offset .+ pulseq.rf.frequency .* time .* 2π)
)
)
))
))
min_duration = max(min_duration, events[end][1] + rf_dur)
end
end
if !isnothing(pulseq.adc)
if !isnothing(pulseq.adc)
dwell_time = pulseq.adc.dwell * 1e-6
dwell_time = pulseq.adc.dwell * 1e-6
@@ -53,12 +50,11 @@ function BuildingBlock(pulseq::PulseqBlock; version, BlockDurationRaster, Radiof
@@ -53,12 +50,11 @@ function BuildingBlock(pulseq::PulseqBlock; version, BlockDurationRaster, Radiof
1.
1.
)
)
))
))
min_duration = max(min_duration, events[end][1] + duration(events[end][2]))
end
end
grads = [pulseq.gx, pulseq.gy, pulseq.gz]
grads = [pulseq.gx, pulseq.gy, pulseq.gz]
min_duration = max(
min_duration = max(
min_duration,
maximum(e[1] + duration(e[2]) for e in events; init=0.),
maximum(vcat(_control_times.(grads, GradientRasterTime)...); init=0.)
maximum(vcat(_control_times.(grads, GradientRasterTime)...); init=0.)
)
)
Loading