diff --git a/src/sequence_io/pulseq.jl b/src/sequence_io/pulseq.jl index c8d355c24b1f05f4999e4fd9d60c022374ecc0b5..dccb853ae7f58b3ad46f07bd7ea7dd9b79a75dd2 100644 --- a/src/sequence_io/pulseq.jl +++ b/src/sequence_io/pulseq.jl @@ -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)) diff --git a/src/sequence_io/pulseq_io/parsers/blocks.jl b/src/sequence_io/pulseq_io/parsers/blocks.jl index 172847ba0aa06f591d997070cd5d729f2e7d07c4..db6ef52b2dcf1e2b7366071462f62049cb755e3f 100644 --- a/src/sequence_io/pulseq_io/parsers/blocks.jl +++ b/src/sequence_io/pulseq_io/parsers/blocks.jl @@ -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 diff --git a/src/sequence_io/pulseq_io/parsers/extensions.jl b/src/sequence_io/pulseq_io/parsers/extensions.jl index 9d39c8ce142a9bcd668f7fa6c8a0edf82d3593fa..0b35bb5fb17f49716bfda29bfbcc1f01041679c3 100644 --- a/src/sequence_io/pulseq_io/parsers/extensions.jl +++ b/src/sequence_io/pulseq_io/parsers/extensions.jl @@ -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])