diff --git a/src/containers/base_sequences.jl b/src/containers/base_sequences.jl index 41dcb7add1daf7f6907b909e83bdf40cf9729bd9..162234409529e1a18712001f63fefafa668715b8 100644 --- a/src/containers/base_sequences.jl +++ b/src/containers/base_sequences.jl @@ -100,14 +100,14 @@ repetition_time(bs::BaseSequence) = duration(bs) duration(bs::BaseSequence{0}) = 0. duration(bs::BaseSequence) = sum(duration.(bs); init=0.) -function edge_times(seq::BaseSequence) +function edge_times(seq::BaseSequence; tol=1e-6) res = Float64[] for (index, block) in enumerate(seq) append!(res, edge_times(block) .+ start_time(seq, index)) end unique_res = Float64[res[1]] for edge in res - if !isapprox(edge, unique_res[end], atol=1e-6) + if !isapprox(edge, unique_res[end], atol=tol) push!(unique_res, edge) end end diff --git a/test/test_sequences.jl b/test/test_sequences.jl index e0a8228e1126e67e51c7007008eafbe920b1584e..888f2bbc6f96369593d0874d7549b34d69a1f2e7 100644 --- a/test/test_sequences.jl +++ b/test/test_sequences.jl @@ -25,6 +25,7 @@ @test TR(seq) ≈ 80. @test 4.8 < bval(seq) < 4.9 @test rise_time(seq[:gradient]) ≈ min_rise_time rtol=1e-4 + @test all(isapprox.(edge_times(seq, tol=1e-3), [0., min_rise_time, 40. - min_rise_time, 40, 40 + min_rise_time, 80 - min_rise_time, 80.], atol=1e-4)) # can also maximise q-value seq2 = DiffusionSpinEcho(TE=80., qval=:max) @@ -41,6 +42,7 @@ @test 0.72 < bval(seq) < 0.73 @test readout_times(seq)[1] ≈ TE(seq) @test rise_time(seq[:gradient]) ≈ min_rise_time rtol=1e-4 + @test all(isapprox.(edge_times(seq), [0., min_rise_time, 10. - min_rise_time, 10., 40, 70, 70 + min_rise_time, 80 - min_rise_time, 80.], atol=1e-4)) end @testset "Set gradient duration" begin seq = DiffusionSpinEcho(TE=80., gradient=(duration=10., ), bval=:max)