Skip to content
Snippets Groups Projects
Unverified Commit 50e8a953 authored by Michiel Cottaar's avatar Michiel Cottaar
Browse files

Fix reading of Pulseq extensions

parent 6b699008
No related branches found
No related tags found
1 merge request!3Add InstantPulse and InstantGradient pulseq extension support
......@@ -6,7 +6,7 @@ import Interpolations: linear_interpolation
import ..PulseqIO.Types: PulseqSequence, PulseqBlock, PulseqTrapezoid, PulseqGradient, PulseqRFPulse, PulseqShape, PulseqADC
import ..PulseqIO.Extensions: parse_extension, get_extension_name, add_extension_definition!, PulseqExtension, PulseqExtensionDefinition
import ...Containers: Sequence, BuildingBlock, BaseBuildingBlock, events, waveform, iter_blocks, start_time
import ...Components: GenericPulse, ADC, RFPulseComponent, InstantPulse, InstantGradient
import ...Components: GenericPulse, ADC, RFPulseComponent, InstantPulse, InstantGradient, InstantGradient3D
import ...Scanners: Scanner
import ...Variables: variables, make_generic
......@@ -187,7 +187,7 @@ end
# I/O of InstantPulse
function parse_extension(ext::PulseqExtensionDefinition{:InstantPulse})
mapping = Dict{Int, InstantPulse}()
mapping = Dict{Int, Tuple{Float64, InstantPulse}}()
for line in ext.content
(id, delay, flip_angle, phase) = parse.((Int, Float64, Float64, Float64), split(line))
mapping[id] = (delay, InstantPulse(flip_angle, phase, nothing))
......@@ -212,7 +212,7 @@ end
# I/O of InstantGradient
function parse_extension(ext::PulseqExtensionDefinition{:InstantGradient})
mapping = Dict{Int, InstantGradient}()
mapping = Dict{Int, Tuple{Float64, InstantGradient3D}}()
for line in ext.content
(id, delay, qvec...) = parse.((Int, Float64, Float64, Float64, Float64), split(line))
mapping[id] = (delay, InstantGradient3D([qvec...], nothing))
......
......@@ -19,7 +19,7 @@ function parse_section(section::PulseqSection{:blocks}; version, rf=Dict(), grad
_get_component(props[:gy], all_grad),
_get_component(props[:gz], all_grad),
_get_component(props[:adc], adc),
iszero(props[:ext]) ? Tuple{PulseqExtension, Int}[] : _get_component(props[:ext], extensions),
iszero(props[:ext]) ? [] : _get_component(props[:ext], extensions),
))
end
return res
......
......@@ -3,19 +3,19 @@ import ..Extensions: parse_extension, get_extension_name, add_extension_definiti
function parse_section(section::PulseqSection{:extensions}; kwargs...)
current_extension = -1
pre_amble = true
linked_list = Dict{Int, NTuple{3, Int}}()
linked_list = Dict{Int, NamedTuple}()
extensions = Dict{Int, PulseqExtensionDefinition}()
for line in section.content
if startswith(line, "extension ")
pre_amble = false
(_, name, str_id) = split(line)
current_extension = int(str_id)
extensions[current_extension] = PulseqExtensionDefinition{name}(String[])
elseif pre_ample
(id, type, ref, next) = int.(split(line))
current_extension = parse(Int, str_id)
extensions[current_extension] = PulseqExtensionDefinition{Symbol(name)}(String[])
elseif pre_amble
(id, type, ref, next) = parse.(Int, split(line))
linked_list[id] = (type=type, ref=ref, next=next)
else
push!(extensions[current_extension], line)
push!(extensions[current_extension].content, line)
end
end
......@@ -23,7 +23,7 @@ function parse_section(section::PulseqSection{:extensions}; kwargs...)
function get_extension_list(key::Int)
if iszero(key)
return Tuple{PulseqExtension, Int}[]
return []
else
base = get_extension_list(linked_list[key].next)
pushfirst!(base, extension_mappers[linked_list[key].type][linked_list[key].ref])
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment