MRArbGrad 1.1.6__tar.gz → 2.0.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {mrarbgrad-1.1.6 → mrarbgrad-2.0.1/MRArbGrad.egg-info}/PKG-INFO +1 -1
- {mrarbgrad-1.1.6 → mrarbgrad-2.0.1}/MRArbGrad.egg-info/SOURCES.txt +3 -1
- {mrarbgrad-1.1.6/MRArbGrad.egg-info → mrarbgrad-2.0.1}/PKG-INFO +1 -1
- {mrarbgrad-1.1.6 → mrarbgrad-2.0.1}/example/example_BuiltInTraj.py +11 -10
- {mrarbgrad-1.1.6 → mrarbgrad-2.0.1}/example/example_ExternalFunction2D.py +3 -2
- {mrarbgrad-1.1.6 → mrarbgrad-2.0.1}/example/example_ExternalSamples2D.py +3 -2
- {mrarbgrad-1.1.6 → mrarbgrad-2.0.1}/example/example_ExternalSamples3D.py +9 -9
- mrarbgrad-2.0.1/mrarbgrad_src/Function.py +369 -0
- {mrarbgrad-1.1.6 → mrarbgrad-2.0.1}/mrarbgrad_src/Utility.py +7 -6
- {mrarbgrad-1.1.6 → mrarbgrad-2.0.1}/mrarbgrad_src/__init__.py +3 -3
- mrarbgrad-2.0.1/mrarbgrad_src/ext/mag/Mag.cpp +438 -0
- mrarbgrad-2.0.1/mrarbgrad_src/ext/mag/Mag.h +194 -0
- mrarbgrad-2.0.1/mrarbgrad_src/ext/main.cpp +748 -0
- mrarbgrad-2.0.1/mrarbgrad_src/ext/traj/Cones.h +149 -0
- mrarbgrad-2.0.1/mrarbgrad_src/ext/traj/MrTraj.h +416 -0
- mrarbgrad-2.0.1/mrarbgrad_src/ext/traj/MrTraj_2D.h +69 -0
- mrarbgrad-2.0.1/mrarbgrad_src/ext/traj/Rosette.h +108 -0
- mrarbgrad-2.0.1/mrarbgrad_src/ext/traj/Seiffert.h +210 -0
- mrarbgrad-2.0.1/mrarbgrad_src/ext/traj/Shell3d.h +114 -0
- mrarbgrad-2.0.1/mrarbgrad_src/ext/traj/Spiral.h +60 -0
- mrarbgrad-2.0.1/mrarbgrad_src/ext/traj/TrajFunc.h +90 -0
- mrarbgrad-2.0.1/mrarbgrad_src/ext/traj/VarDenSpiral.h +132 -0
- mrarbgrad-2.0.1/mrarbgrad_src/ext/traj/Yarnball.h +195 -0
- mrarbgrad-2.0.1/mrarbgrad_src/ext/utility/Intp.h +91 -0
- mrarbgrad-2.0.1/mrarbgrad_src/ext/utility/LinIntp.h +62 -0
- mrarbgrad-2.0.1/mrarbgrad_src/ext/utility/SplineIntp.h +104 -0
- mrarbgrad-2.0.1/mrarbgrad_src/ext/utility/global.cpp +1 -0
- mrarbgrad-2.0.1/mrarbgrad_src/ext/utility/global.h +52 -0
- mrarbgrad-2.0.1/mrarbgrad_src/ext/utility/v3.cpp +361 -0
- mrarbgrad-2.0.1/mrarbgrad_src/ext/utility/v3.h +158 -0
- {mrarbgrad-1.1.6 → mrarbgrad-2.0.1}/pyproject.toml +2 -2
- {mrarbgrad-1.1.6 → mrarbgrad-2.0.1}/setup.py +1 -1
- mrarbgrad-1.1.6/mrarbgrad_src/Function.py +0 -335
- mrarbgrad-1.1.6/mrarbgrad_src/ext/main.cpp +0 -766
- mrarbgrad-1.1.6/mrarbgrad_src/ext/traj/Cones.h +0 -162
- mrarbgrad-1.1.6/mrarbgrad_src/ext/traj/MrTraj.h +0 -429
- mrarbgrad-1.1.6/mrarbgrad_src/ext/traj/MrTraj_2D.h +0 -77
- mrarbgrad-1.1.6/mrarbgrad_src/ext/traj/Rosette.h +0 -117
- mrarbgrad-1.1.6/mrarbgrad_src/ext/traj/Seiffert.h +0 -289
- mrarbgrad-1.1.6/mrarbgrad_src/ext/traj/Shell3d.h +0 -124
- mrarbgrad-1.1.6/mrarbgrad_src/ext/traj/Spiral.h +0 -58
- mrarbgrad-1.1.6/mrarbgrad_src/ext/traj/TrajFunc.h +0 -56
- mrarbgrad-1.1.6/mrarbgrad_src/ext/traj/VarDenSpiral.h +0 -62
- mrarbgrad-1.1.6/mrarbgrad_src/ext/traj/Yarnball.h +0 -124
- mrarbgrad-1.1.6/mrarbgrad_src/ext/utility/Intp.h +0 -91
- mrarbgrad-1.1.6/mrarbgrad_src/ext/utility/LinIntp.h +0 -62
- mrarbgrad-1.1.6/mrarbgrad_src/ext/utility/SplineIntp.h +0 -104
- mrarbgrad-1.1.6/mrarbgrad_src/ext/utility/global.cpp +0 -1
- mrarbgrad-1.1.6/mrarbgrad_src/ext/utility/global.h +0 -27
- mrarbgrad-1.1.6/mrarbgrad_src/ext/utility/v3.cpp +0 -322
- mrarbgrad-1.1.6/mrarbgrad_src/ext/utility/v3.h +0 -155
- {mrarbgrad-1.1.6 → mrarbgrad-2.0.1}/LICENSE +0 -0
- {mrarbgrad-1.1.6 → mrarbgrad-2.0.1}/MANIFEST.in +0 -0
- {mrarbgrad-1.1.6 → mrarbgrad-2.0.1}/MRArbGrad.egg-info/dependency_links.txt +0 -0
- {mrarbgrad-1.1.6 → mrarbgrad-2.0.1}/MRArbGrad.egg-info/requires.txt +0 -0
- {mrarbgrad-1.1.6 → mrarbgrad-2.0.1}/MRArbGrad.egg-info/top_level.txt +0 -0
- {mrarbgrad-1.1.6 → mrarbgrad-2.0.1}/README.md +0 -0
- {mrarbgrad-1.1.6 → mrarbgrad-2.0.1}/mrarbgrad_src/TrajFunc.py +0 -0
- {mrarbgrad-1.1.6 → mrarbgrad-2.0.1}/mrarbgrad_src/ext/mag/GradGen.cpp +0 -0
- {mrarbgrad-1.1.6 → mrarbgrad-2.0.1}/mrarbgrad_src/ext/mag/GradGen.h +0 -0
- {mrarbgrad-1.1.6 → mrarbgrad-2.0.1}/mrarbgrad_src/trajfunc/__init__.py +0 -0
- {mrarbgrad-1.1.6 → mrarbgrad-2.0.1}/mrarbgrad_src/trajfunc/main.py +0 -0
- {mrarbgrad-1.1.6 → mrarbgrad-2.0.1}/setup.cfg +0 -0
|
@@ -4,7 +4,7 @@ README.md
|
|
|
4
4
|
pyproject.toml
|
|
5
5
|
setup.py
|
|
6
6
|
./mrarbgrad_src/ext/main.cpp
|
|
7
|
-
./mrarbgrad_src/ext/mag/
|
|
7
|
+
./mrarbgrad_src/ext/mag/Mag.cpp
|
|
8
8
|
./mrarbgrad_src/ext/utility/global.cpp
|
|
9
9
|
./mrarbgrad_src/ext/utility/v3.cpp
|
|
10
10
|
MRArbGrad.egg-info/PKG-INFO
|
|
@@ -23,6 +23,8 @@ mrarbgrad_src/__init__.py
|
|
|
23
23
|
mrarbgrad_src/ext/main.cpp
|
|
24
24
|
mrarbgrad_src/ext/mag/GradGen.cpp
|
|
25
25
|
mrarbgrad_src/ext/mag/GradGen.h
|
|
26
|
+
mrarbgrad_src/ext/mag/Mag.cpp
|
|
27
|
+
mrarbgrad_src/ext/mag/Mag.h
|
|
26
28
|
mrarbgrad_src/ext/traj/Cones.h
|
|
27
29
|
mrarbgrad_src/ext/traj/MrTraj.h
|
|
28
30
|
mrarbgrad_src/ext/traj/MrTraj_2D.h
|
|
@@ -6,11 +6,12 @@ from numpy.linalg import norm
|
|
|
6
6
|
gamma = 42.5756e6
|
|
7
7
|
fov = 0.256
|
|
8
8
|
nPix = 256
|
|
9
|
-
sLim = 50 * gamma * fov/nPix
|
|
10
|
-
gLim = 20e-3 * gamma * fov/nPix
|
|
11
9
|
dtGrad = 10e-6
|
|
12
10
|
dtADC = 2.5e-6
|
|
13
|
-
|
|
11
|
+
sLim = 50 * gamma * fov/nPix
|
|
12
|
+
gLim = 20e-3 * gamma * fov/nPix
|
|
13
|
+
# gLim = 1/nPix/dtADC
|
|
14
|
+
argCom = dict(fov=fov, nPix=nPix, sLim=sLim, gLim=gLim, dt=dtGrad)
|
|
14
15
|
|
|
15
16
|
mag.setSolverMtg(0) # set solver, 0 for proposed method, 1 for baseline method, baseline method may be removed due to copyright reason
|
|
16
17
|
mag.setTrajRev(0) # reverse the trajectory
|
|
@@ -18,20 +19,20 @@ mag.setGoldAng(1) # enable golden-angle interleaving (only for 2D)
|
|
|
18
19
|
mag.setShuf(0) # enable TR-shuffling
|
|
19
20
|
mag.setMaxG0(0) # use maximum possible initial gradient amplitude
|
|
20
21
|
mag.setMaxG1(0) # use maximum possible final gradient amplitude
|
|
21
|
-
mag.
|
|
22
|
-
mag.setMagOv(8) # set oversampling ratio (default: 8, reduce only if hardware performance is too low to support real-time)
|
|
22
|
+
mag.setMagOverSamp(8) # set oversampling ratio (default: 8, reduce only if hardware performance is too low to support real-time)
|
|
23
23
|
mag.setMagSFS(0) # disable DTFBS (experimental)
|
|
24
24
|
mag.setMagGradRep(1) # enable gradient reparameterization (experimental)
|
|
25
25
|
mag.setMagTrajRep(1) # enable trajectory reparameterization (experimental)
|
|
26
26
|
mag.setDbgPrint(1) # enable debug info (for benchmark purpose)
|
|
27
27
|
|
|
28
28
|
# calculate gradient
|
|
29
|
-
# lstArrK0, lstArrGrad = mag.getG_Spiral(
|
|
30
|
-
# lstArrK0, lstArrGrad = mag.getG_VarDenSpiral(
|
|
31
|
-
|
|
32
|
-
# lstArrK0, lstArrGrad = mag.
|
|
29
|
+
# lstArrK0, lstArrGrad = mag.getG_Spiral(is3D=0, **argCom); nAx = 2
|
|
30
|
+
# lstArrK0, lstArrGrad = mag.getG_VarDenSpiral(is3D=0, **argCom); nAx = 2
|
|
31
|
+
lstArrK0, lstArrGrad = mag.getG_VarDenSpiral_RT(is3D=0, **argCom); nAx = 2
|
|
32
|
+
# lstArrK0, lstArrGrad = mag.getG_Rosette(is3D=0, **argCom); nAx = 2
|
|
33
|
+
# lstArrK0, lstArrGrad = mag.getG_Rosette_Trad(**argCom); nAx = 2
|
|
33
34
|
# lstArrK0, lstArrGrad = mag.getG_Shell3d(**argCom); nAx = 3
|
|
34
|
-
lstArrK0, lstArrGrad = mag.getG_Yarnball(**argCom); nAx = 3
|
|
35
|
+
# lstArrK0, lstArrGrad = mag.getG_Yarnball(**argCom); nAx = 3
|
|
35
36
|
# lstArrK0, lstArrGrad = mag.getG_Seiffert(**argCom); nAx = 3
|
|
36
37
|
# lstArrK0, lstArrGrad = mag.getG_Cones(**argCom); nAx = 3
|
|
37
38
|
|
|
@@ -6,10 +6,11 @@ import mrarbgrad as mag
|
|
|
6
6
|
gamma = 42.5756e6
|
|
7
7
|
fov = 0.256
|
|
8
8
|
nPix = 256
|
|
9
|
-
sLim = 100 * gamma * fov/nPix
|
|
10
|
-
gLim = 120e-3 * gamma * fov/nPix
|
|
11
9
|
dtGrad = 10e-6
|
|
12
10
|
dtADC = 2.5e-6
|
|
11
|
+
sLim = 50 * gamma * fov/nPix
|
|
12
|
+
gLim = 20e-3 * gamma * fov/nPix
|
|
13
|
+
# gLim = 1/nPix/dtADC
|
|
13
14
|
|
|
14
15
|
# Rosette
|
|
15
16
|
nAx = 2
|
|
@@ -6,10 +6,11 @@ import mrarbgrad as mag
|
|
|
6
6
|
gamma = 42.5756e6
|
|
7
7
|
fov = 0.256
|
|
8
8
|
nPix = 256
|
|
9
|
-
sLim = 100 * gamma * fov/nPix
|
|
10
|
-
gLim = 120e-3 * gamma * fov/nPix
|
|
11
9
|
dtGrad = 10e-6
|
|
12
10
|
dtADC = 2.5e-6
|
|
11
|
+
sLim = 50 * gamma * fov/nPix
|
|
12
|
+
gLim = 20e-3 * gamma * fov/nPix
|
|
13
|
+
# gLim = 1/nPix/dtADC
|
|
13
14
|
|
|
14
15
|
# Rosette
|
|
15
16
|
om1 = 5*pi
|
|
@@ -6,10 +6,11 @@ import mrarbgrad as mag
|
|
|
6
6
|
gamma = 42.5756e6
|
|
7
7
|
fov = 0.256
|
|
8
8
|
nPix = 256
|
|
9
|
-
sLim = 100 * gamma * fov/nPix
|
|
10
|
-
gLim = 120e-3 * gamma * fov/nPix
|
|
11
9
|
dtGrad = 10e-6
|
|
12
10
|
dtADC = 2.5e-6
|
|
11
|
+
sLim = 50 * gamma * fov/nPix
|
|
12
|
+
gLim = 20e-3 * gamma * fov/nPix
|
|
13
|
+
# gLim = 1/nPix/dtADC
|
|
13
14
|
|
|
14
15
|
# Yarnball
|
|
15
16
|
nAx = 3
|
|
@@ -19,9 +20,10 @@ Yarnball = lambda sqrtTht: mag.trajfunc.Yarnball(sqrtTht, kRhoPhi)
|
|
|
19
20
|
pLim = mag.trajfunc.prange_Yarnball(kRhoPhi)
|
|
20
21
|
|
|
21
22
|
arrP = linspace(pLim[0], pLim[1], 1000)
|
|
22
|
-
arrK = Yarnball(arrP)
|
|
23
|
+
arrK = Yarnball(arrP)
|
|
23
24
|
|
|
24
25
|
# derive slew-rate constrained trajectory
|
|
26
|
+
mag.setDbgPrint(1)
|
|
25
27
|
arrG, _ = mag.calGrad4ExSamp(True, fov, nPix, sLim, gLim, dtGrad, arrK)
|
|
26
28
|
nRO, _ = arrG.shape
|
|
27
29
|
|
|
@@ -32,16 +34,14 @@ arrK, _ = mag.cvtGrad2Traj(arrG, dtGrad, dtADC, 0.5)
|
|
|
32
34
|
|
|
33
35
|
# derive reference trajectory
|
|
34
36
|
arrP_Ref = linspace(pLim[0], pLim[1], int(1e4))
|
|
35
|
-
arrK_Ref = Yarnball(arrP_Ref)
|
|
37
|
+
arrK_Ref = Yarnball(arrP_Ref)
|
|
36
38
|
|
|
37
39
|
# plot
|
|
38
40
|
figure(figsize=(20,10), dpi=120)
|
|
39
41
|
|
|
40
|
-
subplot(221, projection=
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
if nAx==2: plot(arrK[:,0], arrK[:,1], ".-", label="K_Imp")
|
|
44
|
-
if nAx==3: plot(arrK[:,0], arrK[:,1], arrK[:,2], ".-", label="K_Imp")
|
|
42
|
+
subplot(221, projection="3d")
|
|
43
|
+
plot(arrK_Ref[:,0], arrK_Ref[:,1], arrK_Ref[:,2], "--", label="K_Ref")
|
|
44
|
+
plot(arrK[:,0], arrK[:,1], arrK[:,2], ".-", label="K_Imp")
|
|
45
45
|
xlim(-0.5,0.5)
|
|
46
46
|
ylim(-0.5,0.5)
|
|
47
47
|
axis("equal")
|
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
from numpy import *
|
|
2
|
+
from matplotlib.pyplot import *
|
|
3
|
+
from numpy.typing import NDArray
|
|
4
|
+
from typing import Callable
|
|
5
|
+
import mrarbgrad.ext as ext
|
|
6
|
+
from .Utility import *
|
|
7
|
+
|
|
8
|
+
goldang = getGoldang()
|
|
9
|
+
|
|
10
|
+
def calGrad4ExFunc\
|
|
11
|
+
(
|
|
12
|
+
is3D: bool = False,
|
|
13
|
+
fov: float64 = 0.256,
|
|
14
|
+
nPix: int64 = 256,
|
|
15
|
+
|
|
16
|
+
sLim: float64 = 50 * 42.5756e6 * 0.256 / 256,
|
|
17
|
+
gLim: float64 = 50e-3 * 42.5756e6 * 0.256 / 256,
|
|
18
|
+
dt: float64 = 10e-6,
|
|
19
|
+
|
|
20
|
+
getK: Callable|None = None,
|
|
21
|
+
getDkDp: Callable|None = None,
|
|
22
|
+
getD2kDp2: Callable|None = None,
|
|
23
|
+
|
|
24
|
+
p0:float64 = 0e0,
|
|
25
|
+
p1:float64 = 1e0,
|
|
26
|
+
) -> tuple[NDArray, NDArray]:
|
|
27
|
+
'''
|
|
28
|
+
:return: gradient waveform, corresponding parameter
|
|
29
|
+
:rtype: tuple[NDArray, NDArray]
|
|
30
|
+
'''
|
|
31
|
+
return ext.calGrad4ExFunc\
|
|
32
|
+
(
|
|
33
|
+
int64(is3D),
|
|
34
|
+
float64(fov),
|
|
35
|
+
int64(nPix),
|
|
36
|
+
|
|
37
|
+
float64(sLim),
|
|
38
|
+
float64(gLim),
|
|
39
|
+
float64(dt),
|
|
40
|
+
|
|
41
|
+
getK,
|
|
42
|
+
getDkDp,
|
|
43
|
+
getD2kDp2,
|
|
44
|
+
|
|
45
|
+
float64(p0),
|
|
46
|
+
float64(p1),
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
def calGrad4ExSamp\
|
|
50
|
+
(
|
|
51
|
+
is3D: bool = False,
|
|
52
|
+
fov: float64 = 0.256,
|
|
53
|
+
nPix: int64 = 256,
|
|
54
|
+
|
|
55
|
+
sLim: float64 = 50 * 42.5756e6 * 0.256 / 256,
|
|
56
|
+
gLim: float64 = 50e-3 * 42.5756e6 * 0.256 / 256,
|
|
57
|
+
dt: float64 = 10e-6,
|
|
58
|
+
|
|
59
|
+
arrK: NDArray = np.empty((0,3)),
|
|
60
|
+
) -> tuple[NDArray, NDArray]:
|
|
61
|
+
'''
|
|
62
|
+
:return: gradient waveform, corresponding parameter
|
|
63
|
+
:rtype: tuple[NDArray, NDArray]
|
|
64
|
+
'''
|
|
65
|
+
return ext.calGrad4ExSamp\
|
|
66
|
+
(
|
|
67
|
+
int64(is3D),
|
|
68
|
+
float64(fov),
|
|
69
|
+
int64(nPix),
|
|
70
|
+
|
|
71
|
+
float64(sLim),
|
|
72
|
+
float64(gLim),
|
|
73
|
+
float64(dt),
|
|
74
|
+
|
|
75
|
+
arrK
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
def getG_Spiral\
|
|
79
|
+
(
|
|
80
|
+
is3D: bool = False,
|
|
81
|
+
fov: float64 = 0.256,
|
|
82
|
+
nPix: int64 = 256,
|
|
83
|
+
|
|
84
|
+
sLim: float64 = 50 * 42.5756e6 * 0.256 / 256,
|
|
85
|
+
gLim: float64 = 50e-3 * 42.5756e6 * 0.256 / 256,
|
|
86
|
+
dt: float64 = 10e-6,
|
|
87
|
+
|
|
88
|
+
kRhoPhi: float64 = 0.5 / (4 * pi)
|
|
89
|
+
) -> tuple[list[NDArray], list[NDArray]]:
|
|
90
|
+
'''
|
|
91
|
+
:return: list of trajectory start, list of gradient waveforms
|
|
92
|
+
:rtype: tuple[list[NDArray], list[NDArray]]
|
|
93
|
+
'''
|
|
94
|
+
return ext.getG_Spiral\
|
|
95
|
+
(
|
|
96
|
+
int64(is3D),
|
|
97
|
+
float64(fov),
|
|
98
|
+
int64(nPix),
|
|
99
|
+
|
|
100
|
+
float64(sLim),
|
|
101
|
+
float64(gLim),
|
|
102
|
+
float64(dt),
|
|
103
|
+
|
|
104
|
+
float64(kRhoPhi)
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
def getG_VarDenSpiral\
|
|
108
|
+
(
|
|
109
|
+
is3D: bool = False,
|
|
110
|
+
fov: float64 = 0.256,
|
|
111
|
+
nPix: int64 = 256,
|
|
112
|
+
|
|
113
|
+
sLim: float64 = 50 * 42.5756e6 * 0.256 / 256,
|
|
114
|
+
gLim: float64 = 50e-3 * 42.5756e6 * 0.256 / 256,
|
|
115
|
+
dt: float64 = 10e-6,
|
|
116
|
+
|
|
117
|
+
kRhoPhi0: float64 = 0.5 / (8 * pi),
|
|
118
|
+
kRhoPhi1: float64 = 0.5 / (2 * pi),
|
|
119
|
+
) -> tuple[list[NDArray], list[NDArray]]:
|
|
120
|
+
'''
|
|
121
|
+
:return: list of trajectory start, list of gradient waveforms
|
|
122
|
+
:rtype: tuple[list[NDArray], list[NDArray]]
|
|
123
|
+
'''
|
|
124
|
+
return ext.getG_VarDenSpiral\
|
|
125
|
+
(
|
|
126
|
+
int64(is3D),
|
|
127
|
+
float64(fov),
|
|
128
|
+
int64(nPix),
|
|
129
|
+
|
|
130
|
+
float64(sLim),
|
|
131
|
+
float64(gLim),
|
|
132
|
+
float64(dt),
|
|
133
|
+
|
|
134
|
+
float64(kRhoPhi0),
|
|
135
|
+
float64(kRhoPhi1)
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
def getG_VarDenSpiral_RT\
|
|
139
|
+
(
|
|
140
|
+
is3D: bool = False,
|
|
141
|
+
fov: float64 = 0.256,
|
|
142
|
+
nPix: int64 = 256,
|
|
143
|
+
|
|
144
|
+
sLim: float64 = 50 * 42.5756e6 * 0.256 / 256,
|
|
145
|
+
gLim: float64 = 50e-3 * 42.5756e6 * 0.256 / 256,
|
|
146
|
+
dt: float64 = 10e-6,
|
|
147
|
+
|
|
148
|
+
kRhoPhi0: float64 = 0.5 / (8 * pi),
|
|
149
|
+
kRhoPhi1: float64 = 0.5 / (2 * pi),
|
|
150
|
+
nAcq: int64 = 1000,
|
|
151
|
+
) -> tuple[list[NDArray], list[NDArray]]:
|
|
152
|
+
'''
|
|
153
|
+
:return: list of trajectory start, list of gradient waveforms
|
|
154
|
+
:rtype: tuple[list[NDArray], list[NDArray]]
|
|
155
|
+
'''
|
|
156
|
+
return ext.getG_VarDenSpiral_RT\
|
|
157
|
+
(
|
|
158
|
+
int64(is3D),
|
|
159
|
+
float64(fov),
|
|
160
|
+
int64(nPix),
|
|
161
|
+
|
|
162
|
+
float64(sLim),
|
|
163
|
+
float64(gLim),
|
|
164
|
+
float64(dt),
|
|
165
|
+
|
|
166
|
+
float64(kRhoPhi0),
|
|
167
|
+
float64(kRhoPhi1),
|
|
168
|
+
|
|
169
|
+
int64(nAcq)
|
|
170
|
+
)
|
|
171
|
+
|
|
172
|
+
def getG_Rosette\
|
|
173
|
+
(
|
|
174
|
+
is3D: bool = False,
|
|
175
|
+
fov: float64 = 0.256,
|
|
176
|
+
nPix: int64 = 256,
|
|
177
|
+
|
|
178
|
+
sLim: float64 = 50 * 42.5756e6 * 0.256 / 256,
|
|
179
|
+
gLim: float64 = 50e-3 * 42.5756e6 * 0.256 / 256,
|
|
180
|
+
dt: float64 = 10e-6,
|
|
181
|
+
|
|
182
|
+
om1: float64 = 5*pi,
|
|
183
|
+
om2: float64 = 3*pi,
|
|
184
|
+
tMax: float64 = 1e0,
|
|
185
|
+
) -> tuple[list[NDArray], list[NDArray]]:
|
|
186
|
+
'''
|
|
187
|
+
:return: list of trajectory start, list of gradient waveforms
|
|
188
|
+
:rtype: tuple[list[NDArray], list[NDArray]]
|
|
189
|
+
'''
|
|
190
|
+
return ext.getG_Rosette\
|
|
191
|
+
(
|
|
192
|
+
int64(is3D),
|
|
193
|
+
float64(fov),
|
|
194
|
+
int64(nPix),
|
|
195
|
+
|
|
196
|
+
float64(sLim),
|
|
197
|
+
float64(gLim),
|
|
198
|
+
float64(dt),
|
|
199
|
+
|
|
200
|
+
float64(om1),
|
|
201
|
+
float64(om2),
|
|
202
|
+
float64(tMax)
|
|
203
|
+
)
|
|
204
|
+
|
|
205
|
+
def getG_Rosette_Trad\
|
|
206
|
+
(
|
|
207
|
+
is3D: bool = False,
|
|
208
|
+
fov: float64 = 0.256,
|
|
209
|
+
nPix: int64 = 256,
|
|
210
|
+
|
|
211
|
+
sLim: float64 = 50 * 42.5756e6 * 0.256 / 256,
|
|
212
|
+
gLim: float64 = 50e-3 * 42.5756e6 * 0.256 / 256,
|
|
213
|
+
dt: float64 = 10e-6,
|
|
214
|
+
|
|
215
|
+
om1: float64 = 5*pi,
|
|
216
|
+
om2: float64 = 3*pi,
|
|
217
|
+
tMax: float64 = 1e0,
|
|
218
|
+
tAcq: float64 = 2.523e-3,
|
|
219
|
+
) -> tuple[list[NDArray], list[NDArray]]:
|
|
220
|
+
'''
|
|
221
|
+
:return: list of trajectory start, list of gradient waveforms
|
|
222
|
+
:rtype: tuple[list[NDArray], list[NDArray]]
|
|
223
|
+
'''
|
|
224
|
+
return ext.getG_Rosette_Trad\
|
|
225
|
+
(
|
|
226
|
+
int64(is3D),
|
|
227
|
+
float64(fov),
|
|
228
|
+
int64(nPix),
|
|
229
|
+
|
|
230
|
+
float64(sLim),
|
|
231
|
+
float64(gLim),
|
|
232
|
+
float64(dt),
|
|
233
|
+
|
|
234
|
+
float64(om1),
|
|
235
|
+
float64(om2),
|
|
236
|
+
float64(tMax),
|
|
237
|
+
float64(tAcq)
|
|
238
|
+
)
|
|
239
|
+
|
|
240
|
+
def getG_Shell3d\
|
|
241
|
+
(
|
|
242
|
+
is3D: bool = False,
|
|
243
|
+
fov: float64 = 0.256,
|
|
244
|
+
nPix: int64 = 256,
|
|
245
|
+
|
|
246
|
+
sLim: float64 = 50 * 42.5756e6 * 0.256 / 256,
|
|
247
|
+
gLim: float64 = 50e-3 * 42.5756e6 * 0.256 / 256,
|
|
248
|
+
dt: float64 = 10e-6,
|
|
249
|
+
|
|
250
|
+
kRhoTht: float64 = 0.5 / (2 * pi),
|
|
251
|
+
) -> tuple[list[NDArray], list[NDArray]]:
|
|
252
|
+
'''
|
|
253
|
+
:return: list of trajectory start, list of gradient waveforms
|
|
254
|
+
:rtype: tuple[list[NDArray], list[NDArray]]
|
|
255
|
+
'''
|
|
256
|
+
return ext.getG_Shell3d\
|
|
257
|
+
(
|
|
258
|
+
int64(is3D),
|
|
259
|
+
float64(fov),
|
|
260
|
+
int64(nPix),
|
|
261
|
+
|
|
262
|
+
float64(sLim),
|
|
263
|
+
float64(gLim),
|
|
264
|
+
float64(dt),
|
|
265
|
+
|
|
266
|
+
float64(kRhoTht),
|
|
267
|
+
)
|
|
268
|
+
|
|
269
|
+
def getG_Yarnball\
|
|
270
|
+
(
|
|
271
|
+
is3D: bool = False,
|
|
272
|
+
fov: float64 = 0.256,
|
|
273
|
+
nPix: int64 = 256,
|
|
274
|
+
|
|
275
|
+
sLim: float64 = 50 * 42.5756e6 * 0.256 / 256,
|
|
276
|
+
gLim: float64 = 50e-3 * 42.5756e6 * 0.256 / 256,
|
|
277
|
+
dt: float64 = 10e-6,
|
|
278
|
+
|
|
279
|
+
kRhoPhi: float64 = 0.5 / (2 * pi),
|
|
280
|
+
) -> tuple[list[NDArray], list[NDArray]]:
|
|
281
|
+
'''
|
|
282
|
+
:return: list of trajectory start, list of gradient waveforms
|
|
283
|
+
:rtype: tuple[list[NDArray], list[NDArray]]
|
|
284
|
+
'''
|
|
285
|
+
return ext.getG_Yarnball\
|
|
286
|
+
(
|
|
287
|
+
int64(is3D),
|
|
288
|
+
float64(fov),
|
|
289
|
+
int64(nPix),
|
|
290
|
+
|
|
291
|
+
float64(sLim),
|
|
292
|
+
float64(gLim),
|
|
293
|
+
float64(dt),
|
|
294
|
+
|
|
295
|
+
float64(kRhoPhi),
|
|
296
|
+
)
|
|
297
|
+
|
|
298
|
+
def getG_Seiffert\
|
|
299
|
+
(
|
|
300
|
+
is3D: bool = False,
|
|
301
|
+
fov: float64 = 0.256,
|
|
302
|
+
nPix: int64 = 256,
|
|
303
|
+
|
|
304
|
+
sLim: float64 = 50 * 42.5756e6 * 0.256 / 256,
|
|
305
|
+
gLim: float64 = 50e-3 * 42.5756e6 * 0.256 / 256,
|
|
306
|
+
dt: float64 = 10e-6,
|
|
307
|
+
|
|
308
|
+
m: float64 = 0.07,
|
|
309
|
+
uMax: float64 = 20.0,
|
|
310
|
+
) -> tuple[list[NDArray], list[NDArray]]:
|
|
311
|
+
'''
|
|
312
|
+
:return: list of trajectory start, list of gradient waveforms
|
|
313
|
+
:rtype: tuple[list[NDArray], list[NDArray]]
|
|
314
|
+
'''
|
|
315
|
+
return ext.getG_Seiffert\
|
|
316
|
+
(
|
|
317
|
+
int64(is3D),
|
|
318
|
+
float64(fov),
|
|
319
|
+
int64(nPix),
|
|
320
|
+
|
|
321
|
+
float64(sLim),
|
|
322
|
+
float64(gLim),
|
|
323
|
+
float64(dt),
|
|
324
|
+
|
|
325
|
+
float64(m),
|
|
326
|
+
float64(uMax),
|
|
327
|
+
)
|
|
328
|
+
|
|
329
|
+
def getG_Cones\
|
|
330
|
+
(
|
|
331
|
+
is3D: bool = False,
|
|
332
|
+
fov: float64 = 0.256,
|
|
333
|
+
nPix: int64 = 256,
|
|
334
|
+
|
|
335
|
+
sLim: float64 = 50 * 42.5756e6 * 0.256 / 256,
|
|
336
|
+
gLim: float64 = 50e-3 * 42.5756e6 * 0.256 / 256,
|
|
337
|
+
dt: float64 = 10e-6,
|
|
338
|
+
|
|
339
|
+
kRhoPhi: float64 = 0.5 / (4 * pi),
|
|
340
|
+
) -> tuple[list[NDArray], list[NDArray]]:
|
|
341
|
+
'''
|
|
342
|
+
:return: list of trajectory start, list of gradient waveforms
|
|
343
|
+
:rtype: tuple[list[NDArray], list[NDArray]]
|
|
344
|
+
'''
|
|
345
|
+
return ext.getG_Cones\
|
|
346
|
+
(
|
|
347
|
+
int64(is3D),
|
|
348
|
+
float64(fov),
|
|
349
|
+
int64(nPix),
|
|
350
|
+
|
|
351
|
+
float64(sLim),
|
|
352
|
+
float64(gLim),
|
|
353
|
+
float64(dt),
|
|
354
|
+
|
|
355
|
+
float64(kRhoPhi),
|
|
356
|
+
)
|
|
357
|
+
|
|
358
|
+
def setSolverMtg(x): ext.setSolverMtg(x)
|
|
359
|
+
def setTrajRev(x): ext.setTrajRev(x)
|
|
360
|
+
def setGoldAng(x): ext.setGoldAng(x)
|
|
361
|
+
def setShuf(x): ext.setShuf(x)
|
|
362
|
+
def setMaxG0(x): ext.setMaxG0(x)
|
|
363
|
+
def setMaxG1(x): ext.setMaxG1(x)
|
|
364
|
+
def setExGEnd(x): ext.setExGEnd(x)
|
|
365
|
+
def setMagOverSamp(x): ext.setMagOverSamp(x)
|
|
366
|
+
def setMagSFS(x): ext.setMagSFS(x)
|
|
367
|
+
def setMagGradRep(x): ext.setMagGradRep(x)
|
|
368
|
+
def setMagTrajRep(x): ext.setMagTrajRep(x)
|
|
369
|
+
def setDbgPrint(x): ext.setDbgPrint(x)
|
|
@@ -8,12 +8,13 @@ goldang = (2*pi)/(1+goldrat)
|
|
|
8
8
|
getGoldrat = lambda: goldrat
|
|
9
9
|
getGoldang = lambda: goldang
|
|
10
10
|
|
|
11
|
-
def
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
11
|
+
def rand3d(i:int|NDArray, nAx:int=3, kx=sqrt(2), ky=sqrt(3), kz=sqrt(7)) -> NDArray:
|
|
12
|
+
return (hstack if size(i)==1 else vstack)\
|
|
13
|
+
([
|
|
14
|
+
(i**1 * 1/(1+kx))%1,
|
|
15
|
+
(i**2 * 1/(1+ky))%1,
|
|
16
|
+
(i**3 * 1/(1+kz))%1
|
|
17
|
+
][:nAx]).T
|
|
17
18
|
|
|
18
19
|
def cvtGrad2Traj(arrG:NDArray, dtGrad:int|float, dtADC:int|float, nShift:int|float=1.0) -> tuple[NDArray, NDArray]:
|
|
19
20
|
"""
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from .Function import calGrad4ExFunc, calGrad4ExSamp
|
|
2
|
-
from .Function import getG_Cones, getG_Rosette, getG_Rosette_Trad, getG_Seiffert, getG_Shell3d, getG_Spiral, getG_VarDenSpiral, getG_Yarnball
|
|
3
|
-
from .Function import setSolverMtg, setTrajRev, setGoldAng, setShuf, setMaxG0, setMaxG1, setExGEnd,
|
|
4
|
-
from .Utility import _calDiaphony, rotate, _calJacElip, _calCompElipInt, _calSphFibPt, cvtGrad2Traj, getGoldang, getGoldrat,
|
|
2
|
+
from .Function import getG_Cones, getG_Rosette, getG_Rosette_Trad, getG_Seiffert, getG_Shell3d, getG_Spiral, getG_VarDenSpiral, getG_VarDenSpiral_RT, getG_Yarnball
|
|
3
|
+
from .Function import setSolverMtg, setTrajRev, setGoldAng, setShuf, setMaxG0, setMaxG1, setExGEnd, setMagOverSamp, setMagSFS, setMagGradRep, setMagTrajRep, setDbgPrint
|
|
4
|
+
from .Utility import _calDiaphony, rotate, _calJacElip, _calCompElipInt, _calSphFibPt, cvtGrad2Traj, getGoldang, getGoldrat, rand3d
|
|
5
5
|
|
|
6
6
|
from . import trajfunc
|