Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F88705451
spiral_2d_nshot.py
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Sun, Oct 20, 06:43
Size
2 KB
Mime Type
text/x-python
Expires
Tue, Oct 22, 06:43 (1 d, 23 h)
Engine
blob
Format
Raw Data
Handle
21809656
Attached To
rPYPULSEQ pypulseq
spiral_2d_nshot.py
View Options
"""
This is starter code to demonstrate a working example of a 2D Spiral (N-shots) as a pure Python implementation.
"""
from
math
import
pi
import
numpy
as
np
from
pulseq.core.Sequence.sequence
import
Sequence
from
pulseq.core.calc_duration
import
calc_duration
from
pulseq.core.make_adc
import
makeadc
from
pulseq.core.make_delay
import
make_delay
from
pulseq.core.make_sinc
import
make_sinc_pulse
from
pulseq.core.make_trap
import
make_trapezoid
from
pulseq.core.makearbitrary_grad
import
makearbitrary_grad
from
pulseq.core.opts
import
Opts
from
pulseq.core.utils.vds_2d
import
vds_2d
kwargs_for_opts
=
{
"max_grad"
:
32
,
"grad_unit"
:
"mT/m"
,
"max_slew"
:
130
,
"slew_unit"
:
"T/m/s"
,
"grad_dead_time"
:
10e-6
}
system
=
Opts
(
kwargs_for_opts
)
seq
=
Sequence
(
system
)
fov
=
256e-3
Nx
=
128
Ny
=
256
slice_thickness
=
5e-3
dx
=
fov
/
Nx
TR
=
25e-3
TE
=
5e-3
n_shots
=
16
alpha
=
9
[
ktraj
,
G
,
lamda
]
=
vds_2d
(
fov
,
Nx
,
n_shots
,
alpha
,
system
)
ktraj
=
ktraj
*
1e-3
ktrajs
=
np
.
zeros
((
np
.
size
(
ktraj
,
0
),
np
.
size
(
ktraj
,
1
),
2
))
ktrajs
[:,
:,
0
]
=
np
.
real
(
ktraj
)
ktrajs
[:,
:,
1
]
=
np
.
imag
(
ktraj
)
flip
=
15
*
pi
/
180
kwargs_for_sinc
=
{
"flip_angle"
:
flip
,
"system"
:
system
,
"duration"
:
1.5e-3
,
"slice_thickness"
:
slice_thickness
,
"apodization"
:
0.5
,
"time_bw_product"
:
4
}
rf
,
gz
=
make_sinc_pulse
(
kwargs_for_sinc
,
2
)
kwargs_for_adc
=
{
"num_samples"
:
max
(
G
.
shape
),
"dwell"
:
system
.
grad_raster_time
}
adc
=
makeadc
(
kwargs_for_adc
)
n_slices
=
3
deltaz
=
n_slices
*
slice_thickness
z
=
np
.
linspace
(
-
(
deltaz
/
2
),
(
deltaz
/
2
),
deltaz
/
slice_thickness
+
1
)
pre_time
=
8e-4
kwargs_for_gz_reph
=
{
"channel"
:
'z'
,
"system"
:
system
,
"area"
:
-
gz
.
area
/
2
,
"duration"
:
1e-3
}
gz_reph
=
make_trapezoid
(
kwargs_for_gz_reph
)
kwargs_for_gz_spoil
=
{
"channel"
:
'z'
,
"system"
:
system
,
"area"
:
gz
.
area
*
2
,
"duration"
:
3
*
pre_time
}
gz_spoil
=
make_trapezoid
(
kwargs_for_gz_spoil
)
kwargs_for_arb_gx
=
{
"channel"
:
'x'
,
"system"
:
system
,
"waveform"
:
np
.
squeeze
(
np
.
real
(
G
[:,
0
]))}
gx
=
makearbitrary_grad
(
kwargs_for_arb_gx
)
delayTE
=
TE
-
calc_duration
(
gz_reph
)
-
(
calc_duration
(
rf
)
/
2
)
delayTR
=
TR
-
calc_duration
(
gz_reph
)
-
calc_duration
(
rf
)
-
calc_duration
(
gx
)
-
calc_duration
(
gz_spoil
)
delay1
=
make_delay
(
delayTE
)
delay2
=
make_delay
(
delayTR
)
for
s
in
range
(
n_slices
):
w
freq_offset
=
gz
.
amplitude
*
z
[
s
]
rf
.
freq_offset
=
freq_offset
for
ns
in
range
(
n_shots
):
seq
.
add_block
(
rf
,
gz
)
seq
.
add_block
(
gz_reph
)
kwargs_for_arb_gx
=
{
"channel"
:
'x'
,
'system'
:
system
,
'waveform'
:
np
.
squeeze
(
np
.
real
(
G
[:,
ns
]))}
gx
=
makearbitrary_grad
(
kwargs_for_arb_gx
)
kwargs_for_arb_gy
=
{
"channel"
:
'y'
,
'system'
:
system
,
'waveform'
:
np
.
squeeze
(
np
.
imag
(
G
[:,
ns
]))}
gy
=
makearbitrary_grad
(
kwargs_for_arb_gy
)
seq
.
add_block
(
delay1
)
seq
.
add_block
(
gx
,
gy
,
adc
)
seq
.
add_block
(
gz_spoil
)
seq
.
add_block
(
delay2
)
# Display entire plot
seq
.
plot
()
# The .seq file will be available inside the /gpi/<user>/imr_framework folder
seq
.
write
(
'spiral_2d_256_9_3_16_python.seq'
)
Event Timeline
Log In to Comment