From 16a1c9130219eaf6246a89f7148f7e10e0552ae2 Mon Sep 17 00:00:00 2001 From: Michiel Cottaar <MichielCottaar@protonmail.com> Date: Tue, 21 May 2024 14:30:21 +0100 Subject: [PATCH] Add edge points to RF pulse --- src/sequence_io/pulseq.jl | 14 +++++--------- test/test_IO.jl | 4 ++-- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/src/sequence_io/pulseq.jl b/src/sequence_io/pulseq.jl index 133ed60..525fa74 100644 --- a/src/sequence_io/pulseq.jl +++ b/src/sequence_io/pulseq.jl @@ -23,24 +23,21 @@ function BuildingBlock(pulseq::PulseqBlock; version, BlockDurationRaster, Radiof stated_duration = pulseq.duration * BlockDurationRaster * 1e3 events = [] - min_duration = 0. if !isnothing(pulseq.rf) + f(samples) = isnothing(pulseq.rf.time) ? [samples[1], samples..., samples[end]] : samples if isnothing(pulseq.rf.time) - time = ((1:length(pulseq.rf.magnitude.samples)) .- 0.5) .* RadiofrequencyRasterTime .* 1e3 - rf_dur = length(pulseq.rf.magnitude.samples) * RadiofrequencyRasterTime * 1e3 + time = [0., ((1:length(pulseq.rf.magnitude.samples)) .- 0.5)..., length(pulseq.rf.magnitude.samples)] .* RadiofrequencyRasterTime .* 1e3 else time = pulseq.rf.time.samples .* 1e3 * RadiofrequencyRasterTime - rf_dur = maximum(time) end push!(events, ( pulseq.rf.delay * 1e-3, GenericPulse( time, - pulseq.rf.magnitude.samples * pulseq.rf.amplitude * 1e-3, - rad2deg.(pulseq.rf.phase.samples .+ pulseq.rf.phase_offset .+ pulseq.rf.frequency .* time .* 2π) + f(pulseq.rf.magnitude.samples) * pulseq.rf.amplitude * 1e-3, + 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 if !isnothing(pulseq.adc) dwell_time = pulseq.adc.dwell * 1e-6 @@ -53,12 +50,11 @@ function BuildingBlock(pulseq::PulseqBlock; version, BlockDurationRaster, Radiof 1. ) )) - min_duration = max(min_duration, events[end][1] + duration(events[end][2])) end grads = [pulseq.gx, pulseq.gy, pulseq.gz] 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.) ) diff --git a/test/test_IO.jl b/test/test_IO.jl index 68b6c9c..25bcbbe 100644 --- a/test/test_IO.jl +++ b/test/test_IO.jl @@ -9,8 +9,8 @@ @test length(events(seq[1])) == 1 (index, pulse) = events(seq[1])[1] - @test start_time(seq, 1, index) ≈ 0.1 - @test end_time(seq, 1, index) ≈ 0.2195 + @test start_time(seq, 1, index) == 0.1 + @test end_time(seq, 1, index) == 0.22 for (time, ampl, phase_check) in [ (0.09, 0., isnan), -- GitLab