From 0bfa5869faf0ab541577d49d44e65c0e34c321bd Mon Sep 17 00:00:00 2001
From: Michiel Cottaar <michiel.cottaar@ndcn.ox.ac.uk>
Date: Thu, 21 Mar 2024 16:45:27 +0000
Subject: [PATCH] Store instants in dense vector form

---
 src/containers/linearise.jl | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/src/containers/linearise.jl b/src/containers/linearise.jl
index 85cd928..5af0151 100644
--- a/src/containers/linearise.jl
+++ b/src/containers/linearise.jl
@@ -123,7 +123,7 @@ function split_times(sequences::AbstractVector{<:BaseSequence}, tstart::Number,
 
         timestep = Float64(max_timestep)
         for sequence in sequences
-            (block_time, block) = sequence[mod(tmean, duration(sequence))]
+            (block_time, block) = sequence(mod(tmean, duration(sequence)))
             for key in keys(block)
                 if !(start_time(block, key) < block_time < end_time(block, key))
                     continue
@@ -156,8 +156,8 @@ If multiple sequences are provided a vector of `LinearSequence` objects are retu
 """
 struct LinearSequence
     finite_parts :: Vector{SequencePart}
-    instant_pulses :: Vector{Tuple{Int, InstantPulse}}
-    instant_gradient :: Vector{Tuple{Int, InstantGradient3D}}
+    instant_pulses :: Vector{Union{Nothing, InstantPulse}}
+    instant_gradient :: Vector{Union{Nothing, InstantGradient3D}}
 end
 
 LinearSequence(sequence::BaseSequence; kwargs...) = LinearSequence(sequence, 0., duration(sequence); kwargs...)
@@ -169,8 +169,8 @@ function LinearSequence(container::BaseSequence, times::AbstractVector{<:Number}
     tstart = times[1]
     tfinal = times[end]
 
-    pulses = Tuple{Int, InstantPulse}[]
-    gradients = Tuple{Int, InstantGradient3D}[]
+    pulses = Union{Nothing, InstantPulse}[nothing for _ in 1:length(times)]
+    gradients = Union{Nothing, InstantGradient3D}[nothing for _ in 1:length(times)]
     for nTR in div(tstart, duration(container), RoundDown):div(tfinal, duration(container), RoundUp)
         for (to_store, func) in [
             (pulses, iter_instant_pulses),
@@ -181,8 +181,8 @@ function LinearSequence(container::BaseSequence, times::AbstractVector{<:Number}
                 if !(tstart <= real_time < tfinal)
                     continue
                 end
-                index = findmin(t -> abs(t - real_time), times)[2]-1 
-                push!(to_store, (index, pulse))
+                index = findmin(t -> abs(t - real_time), times)[2] 
+                to_store[index] = pulse
             end
         end
     end
-- 
GitLab