diff --git a/src/MRIBuilder.jl b/src/MRIBuilder.jl index 5c63fd16c97a44f7f64fdc1b6746bffba5997067..4d4bb01a644d85cb5dab1c439d97f2e7049f5093 100644 --- a/src/MRIBuilder.jl +++ b/src/MRIBuilder.jl @@ -18,8 +18,8 @@ export build_sequence, global_model, global_scanner import .Scanners: Scanner, B0, Siemens_Connectom, Siemens_Prisma, Siemens_Terra export Scanner, B0, Siemens_Connectom, Siemens_Prisma, Siemens_Terra -import .Variables: variables, duration, effective_time, flip_angle, amplitude, phase, frequency, bandwidth, N_left, N_right, qval, δ, rise_time, flat_time, slew_rate, gradient_strength, qvec, qval_square, slice_thickness, inverse_slice_thickness, fov, inverse_fov, voxel_size, inverse_voxel_size, resolution, nsamples, oversample, dwell_time, ramp_overlap, spoiler_scale, TR, Δ -export variables, duration, effective_time, flip_angle, amplitude, phase, frequency, bandwidth, N_left, N_right, qval, δ, rise_time, flat_time, slew_rate, gradient_strength, qvec, qval_square, slice_thickness, inversne_slice_thickness, fov, inverse_fov, voxel_size, inverse_voxel_size, resolution, nsamples, oversample, dwell_time, ramp_overlap, spoiler_scale, TR, Δ +import .Variables: variables, duration, effective_time, flip_angle, amplitude, phase, frequency, bandwidth, N_left, N_right, qval, δ, rise_time, flat_time, slew_rate, gradient_strength, qvec, qval_square, slice_thickness, inverse_slice_thickness, fov, inverse_fov, voxel_size, inverse_voxel_size, resolution, nsamples, oversample, dwell_time, ramp_overlap, spoiler_scale, TR, Δ, get_gradient, get_pulse, get_readout +export variables, duration, effective_time, flip_angle, amplitude, phase, frequency, bandwidth, N_left, N_right, qval, δ, rise_time, flat_time, slew_rate, gradient_strength, qvec, qval_square, slice_thickness, inversne_slice_thickness, fov, inverse_fov, voxel_size, inverse_voxel_size, resolution, nsamples, oversample, dwell_time, ramp_overlap, spoiler_scale, TR, Δ, get_gradient, get_pulse, get_readout import .Components: InstantPulse, ConstantPulse, SincPulse, GenericPulse, InstantGradient, SingleReadout, ADC export InstantPulse, ConstantPulse, SincPulse, GenericPulse, InstantGradient, SingleReadout, ADC diff --git a/src/variables.jl b/src/variables.jl index 7008fc726f75bdc524929aec7f71506abe5ff068..061e76816abd8525c0d9105b4bc98ea8c56e7582 100644 --- a/src/variables.jl +++ b/src/variables.jl @@ -249,7 +249,15 @@ for (target_name, all_vars) in all_variables_symbols throw(VariableNotAvailable(typeof(bb), Variables.$variable_func)) catch e if $use_get_func && e isa VariableNotAvailable && hasmethod($get_func, tuple(typeof(bb))) - return Variables.$variable_func($get_func(bb)) + apply_to = $(get_func)(bb) + if apply_to isa AbstractBlock + return Variables.$variable_func(apply_to) + elseif apply_to isa NamedTuple + return NamedTuple(k => Variables.$variable_func(v) for (k, v) in pairs(apply_to)) + elseif apply_to isa AbstractVector{<:AbstractBlock} || apply_to isa Tuple + return Variables.$variable_func.(apply_to) + end + error("$($(use_get_func)) returned an unexpected type for $(bb).") end rethrow() end