Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F88762985
radial_2d_fid.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, 13:50
Size
2 KB
Mime Type
text/x-python
Expires
Tue, Oct 22, 13:50 (2 d)
Engine
blob
Format
Raw Data
Handle
21817471
Attached To
rPYPULSEQ pypulseq
radial_2d_fid.py
View Options
"""
This is starter code to demonstrate a working example of a 2D Radial FID as a pure Python implementation.
"""
from
math
import
pi
,
ceil
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.opts
import
Opts
kwargs_for_opts
=
{
"max_grad"
:
32
,
"grad_unit"
:
"mT/m"
,
"max_slew"
:
130
,
"slew_unit"
:
"T/m/s"
}
system
=
Opts
(
kwargs_for_opts
)
seq
=
Sequence
(
system
)
fov
=
256e-3
Nx
=
256
Ny
=
256
slice_thickness
=
5e-3
dx
=
fov
/
Nx
TR
=
20e-3
TE
=
5e-3
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
)
delta_k
=
1
/
fov
k_width
=
Nx
*
delta_k
readout_time
=
6.4e-3
kwargs_for_gx
=
{
"channel"
:
'x'
,
"system"
:
system
,
"flat_area"
:
k_width
,
"flat_time"
:
readout_time
}
gx
=
make_trapezoid
(
kwargs_for_gx
)
kwargs_for_adc
=
{
"num_samples"
:
Nx
,
"duration"
:
gx
.
flat_time
,
"delay"
:
gx
.
rise_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
)
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
)
N_p
=
256
N_s
=
ceil
(
pi
*
N_p
)
dtheta
=
360
/
N_s
theta
=
np
.
arange
(
0
,
N_s
*
dtheta
,
dtheta
)
ktraj
=
np
.
zeros
((
N_s
,
adc
.
num_samples
))
for
s
in
range
(
n_slices
):
freq_offset
=
gz
.
amplitude
*
z
[
s
]
rf
.
freq_offset
=
freq_offset
for
N_p
in
range
(
N_s
):
seq
.
add_block
(
rf
,
gz
)
seq
.
add_block
(
gz_reph
)
kWidth_projx
=
np
.
multiply
(
k_width
,
np
.
cos
(
theta
[
N_p
]
*
pi
/
180
))
kWidth_projy
=
np
.
multiply
(
k_width
,
np
.
sin
(
theta
[
N_p
]
*
pi
/
180
))
kwargs_for_gx
=
{
"channel"
:
'x'
,
'system'
:
system
,
'flat_area'
:
kWidth_projx
,
'flat_time'
:
readout_time
}
gx
=
make_trapezoid
(
kwargs_for_gx
)
kwargs_for_gy
=
{
"channel"
:
'y'
,
'system'
:
system
,
'flat_area'
:
kWidth_projy
,
'flat_time'
:
readout_time
}
gy
=
make_trapezoid
(
kwargs_for_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
(
'radial_2d_256_3_16_python.seq'
)
Event Timeline
Log In to Comment