From c585709e7efd36416d5fc16cfe368181d08aa899 Mon Sep 17 00:00:00 2001 From: Michiel Cottaar <michiel.cottaar@ndcn.ox.ac.uk> Date: Wed, 21 Feb 2024 13:03:05 +0000 Subject: [PATCH] Fix duration calculation --- src/components/gradient_waveforms/no_gradient_blocks.jl | 2 +- src/containers/building_blocks.jl | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/components/gradient_waveforms/no_gradient_blocks.jl b/src/components/gradient_waveforms/no_gradient_blocks.jl index 75fc5dc..6beb655 100644 --- a/src/components/gradient_waveforms/no_gradient_blocks.jl +++ b/src/components/gradient_waveforms/no_gradient_blocks.jl @@ -23,7 +23,7 @@ struct NoGradient{N} <: GradientWaveform{N} end end -duration(ngb::NoGradient) = duration(ngb) +duration(ngb::NoGradient) = ngb.duration for func in (:qval, :gradient_strength, :slew_rate) @eval $func(::NoGradient{1}) = 0. @eval $func(::NoGradient{3}) = zero(SVector{3, Float64}) diff --git a/src/containers/building_blocks.jl b/src/containers/building_blocks.jl index 244e11a..0dcb475 100644 --- a/src/containers/building_blocks.jl +++ b/src/containers/building_blocks.jl @@ -24,7 +24,6 @@ Main interface: Sub-types need to implement: - `Base.keys`: returns sequence of keys to all the components. - `Base.getindex`: returns the actual component for each key. -- [`duration`](@ref): total duration of the building block. """ abstract type BaseBuildingBlock <: ContainerBlock end @@ -126,6 +125,8 @@ function start_time(building_block::BaseBuildingBlock, index) error("Building block with index '$index' not found") end +duration(bb::BaseBuildingBlock) = sum([duration(wv) for (_, wv) in waveform_sequence(bb)]) + # Pathway support """ waveform_sequence(building_block, first, last) @@ -259,8 +260,6 @@ make_generic(other_block::BaseBuildingBlock) = BuildingBlock(duration(other_bloc Base.keys(bb::BuildingBlock) = 1:length(bb.parts) Base.getindex(bb::BuildingBlock, i::Integer) = bb.parts[i] -duration(bb::BuildingBlock) = sum(duration, waveform_sequence(bb); init=0.) - function get_pulse(bb::BuildingBlock) pulses = [p for p in events(bb) if p isa RFPulseComponent] if length(pulses) == 0 -- GitLab