-
Notifications
You must be signed in to change notification settings - Fork 21
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
New motion approach to combine SimpleMotion and ArbitraryMotion into the same phantom #410
Comments
This is a very good idea! We just need to think about how this will impact:
|
Another possible approach regarding periodicity:
abstract type TimeScale{T<:Real} end
struct Periodic{T<:Real} <: TimeScale{T}
period::T
asymmetry::T
end
struct TimeRange{T<:Real} <: TimeScale{T}
t_start::T
t_end::T
end
struct Translation{T<:Real, TS<:TimeScale{T}} <: SimpleMotionType{T}
dx::T
dy::T
dz::T
times::TS
end This way we could avoid re-defining structs and methods for periodic types. |
Regarding flow: function reset_magnetization!(M::Mag{T}, Mxy::AbstractArray{T}, motion<:Vector{Motion{T}})
for m in motion
reset_magnetization!(M, Mxy, m)
end
return nothing
end
function reset_magnetization!(M::Mag{T}, Mxy::AbstractArray{T}, motion<:Motion{T})
return nothing
end
function reset_magnetization!(M::Mag{T}, Mxy::AbstractArray{T}, motion::FlowTrajectory{T})
# do things with flow (create interpolation functions, resolve them, etc):
Mxy .= ...
M.z .= ...
return nothing
end This will be called from simulation functions: function run_spin_precession!(...)
...
#Mxy precession and relaxation, and Mz relaxation
tp = cumsum(seq.Δt) # t' = t - t0
dur = sum(seq.Δt) # Total length, used for signal relaxation
Mxy = [M.xy M.xy .* exp.(1im .* ϕ .- tp' ./ p.T2)] #This assumes Δw and T2 are constant in time
M.z .= M.z .* exp.(-dur ./ p.T1) .+ p.ρ .* (1 .- exp.(-dur ./ p.T1))
reset_magnetization!(M, Mxy, phantom.motion)
M.xy .= Mxy[:, end]
#Acquired signal
sig .= transpose(sum(Mxy[:, findall(seq.ADC)]; dims=1)) #<--- TODO: add coil sensitivities
return nothing |
Merged
6 tasks
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Idea for new motion related types and structs redistribution, in order to be able to combine them and make them more alike:
Specific motion structures:
That way, phantom struct will look like this:
and motion will be initialized, for example, like this:
The text was updated successfully, but these errors were encountered: