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