JuliaHealth / KomaMRI.jl

Koma is a Pulseq-compatible framework to efficiently simulate Magnetic Resonance Imaging (MRI) acquisitions. The main focus of this package is to simulate general scenarios that could arise in pulse sequence development.
https://JuliaHealth.github.io/KomaMRI.jl/dev/
MIT License
107 stars 18 forks source link

PulseDesigner submodule #4

Open cncastillo opened 3 years ago

cncastillo commented 3 years ago

Inspired on Pulseq we need to add a submodule with common pulse sequence blocks.

General

PulseDesigner

:information_source: IMPORTANT

The main difference between these functions and the constructors is the use of the Scanner object. Examples: If $G_\max$ is too low it will make the block longer, Add a delay after the RF blocks to satisfy the ring-down time, etc.

RF

The submodule could be the same as the one for gradient optimization.

cncastillo commented 2 years ago

The functions to be implemented should be: Pulseq aux functions

A basic prototype is being made in the submodule PulseDesigner.

cncastillo commented 9 months ago

I think in particular I think it is very important to allow the use of

As a reminder of what we talked in an internal Koma meeting image

The idea would be to have an equivalent of

seq.addBlock(rf,gx,gy,adc,delay)

but in a more Julian way

seq += [rf,gx,gy,adc,delay]

where rf::RF<:MRIEvent, g::Matrix{Grad}<:MRIEvent, adc::<:MRIEvent, and delay::Delay<:MRIEvent.

A simple example that could be helpful for this:

julia> struct MyType
           a
       end

julia> struct MyType2
           a
       end

julia> import Base.+

julia> x::MyType + ys::AbstractVector{MyType2} = MyType(x.a + sum([y.a for y in ys]))

julia> MyType(1) + [MyType2(1) for i = 1:3]