From e0b8f424ef9f57b3d50ce30d618109d072dc674c Mon Sep 17 00:00:00 2001 From: Michiel Cottaar <michiel.cottaar@ndcn.ox.ac.uk> Date: Tue, 30 Jan 2024 16:03:50 +0000 Subject: [PATCH] Avoid divisions in ChangingGradientBlocks --- src/gradients/changing_gradient_blocks.jl | 6 ++++-- src/gradients/pulsed_gradients.jl | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/gradients/changing_gradient_blocks.jl b/src/gradients/changing_gradient_blocks.jl index 850fe6c..e589c2f 100644 --- a/src/gradients/changing_gradient_blocks.jl +++ b/src/gradients/changing_gradient_blocks.jl @@ -8,7 +8,7 @@ import ...BuildingBlocks: GradientBlock, fixed, RFPulseBlock struct AbstractChangingGradientBlock{T<:VariableType} <: GradientBlock gradient_strength_start :: SVector{3, T} - gradient_strength_end :: SVector{3, T} + slew_rate :: SVector{3, T} duration :: T rotate :: Union{Nothing, Symbol} scale :: Union{Nothing, Symbol} @@ -34,7 +34,9 @@ const FixedChangingGradientBlock = AbstractChangingGradientBlock{Float64} duration(cgb::AbstractChangingGradientBlock) = cgb.duration -slew_rate(cgb::AbstractChangingGradientBlock) = (cgb.gradient_strength_end .- cgb.gradient_strength_start) ./ duration(cgb) +grad_start(cgb::AbstractChangingGradientBlock) = cgb.gradient_strength_start +slew_rate(cgb::AbstractChangingGradientBlock) = cgb.slew_rate +grad_end(cgb::AbstractChangingGradientBlock) = gradient_strength(cgb) .+ slew_rate(cgb) .* duration(cgb) gradient_strength(cgb::AbstractChangingGradientBlock) = max.(cgb.gradient_strength_start, cgb.gradient_strength_start) qvec(cgb::AbstractChangingGradientBlock) = (cgb.gradient_strength_start .+ cgb.gradient_strength_end) .* (duration(cgb)/2) diff --git a/src/gradients/pulsed_gradients.jl b/src/gradients/pulsed_gradients.jl index 8897d98..372039b 100644 --- a/src/gradients/pulsed_gradients.jl +++ b/src/gradients/pulsed_gradients.jl @@ -85,9 +85,9 @@ function PulsedGradient(model::Model; orientation=nothing, rise_time=nothing, fl res = PulsedGradient( model, - ChangingGradientBlock(zeros(3), grad, rise_time, rotate, scale), + ChangingGradientBlock(zeros(3), slew_rate, rise_time, rotate, scale), ConstantGradientBlock(grad, flat_time, rotate, scale), - ChangingGradientBlock(grad, zeros(3), rise_time, rotate, scale), + ChangingGradientBlock(grad, -slew_rate, rise_time, rotate, scale), slew_rate, rate_1d, rotate, -- GitLab