MRArbGrad 4.1.1__tar.gz → 4.2.0__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-4.1.1 → mrarbgrad-4.2.0/MRArbGrad.egg-info}/PKG-INFO +1 -1
- {mrarbgrad-4.1.1/MRArbGrad.egg-info → mrarbgrad-4.2.0}/PKG-INFO +1 -1
- {mrarbgrad-4.1.1 → mrarbgrad-4.2.0}/mrarbgrad_src/Function.py +2 -0
- {mrarbgrad-4.1.1 → mrarbgrad-4.2.0}/mrarbgrad_src/__init__.py +1 -1
- {mrarbgrad-4.1.1 → mrarbgrad-4.2.0}/mrarbgrad_src/ext/mag/Mag.cpp +20 -18
- {mrarbgrad-4.1.1 → mrarbgrad-4.2.0}/mrarbgrad_src/ext/mag/Mag.h +7 -7
- {mrarbgrad-4.1.1 → mrarbgrad-4.2.0}/mrarbgrad_src/ext/main.cpp +20 -0
- {mrarbgrad-4.1.1 → mrarbgrad-4.2.0}/mrarbgrad_src/ext/traj/MrTraj.h +7 -3
- {mrarbgrad-4.1.1 → mrarbgrad-4.2.0}/mrarbgrad_src/ext/utility/LinIntp.h +0 -2
- {mrarbgrad-4.1.1 → mrarbgrad-4.2.0}/mrarbgrad_src/ext/utility/SplineIntp.h +0 -2
- {mrarbgrad-4.1.1 → mrarbgrad-4.2.0}/mrarbgrad_src/ext/utility/v3.cpp +16 -9
- {mrarbgrad-4.1.1 → mrarbgrad-4.2.0}/pyproject.toml +1 -1
- {mrarbgrad-4.1.1 → mrarbgrad-4.2.0}/LICENSE +0 -0
- {mrarbgrad-4.1.1 → mrarbgrad-4.2.0}/MANIFEST.in +0 -0
- {mrarbgrad-4.1.1 → mrarbgrad-4.2.0}/MRArbGrad.egg-info/SOURCES.txt +0 -0
- {mrarbgrad-4.1.1 → mrarbgrad-4.2.0}/MRArbGrad.egg-info/dependency_links.txt +0 -0
- {mrarbgrad-4.1.1 → mrarbgrad-4.2.0}/MRArbGrad.egg-info/requires.txt +0 -0
- {mrarbgrad-4.1.1 → mrarbgrad-4.2.0}/MRArbGrad.egg-info/top_level.txt +0 -0
- {mrarbgrad-4.1.1 → mrarbgrad-4.2.0}/README.md +0 -0
- {mrarbgrad-4.1.1 → mrarbgrad-4.2.0}/example/example_BuiltInTraj.py +0 -0
- {mrarbgrad-4.1.1 → mrarbgrad-4.2.0}/example/example_ExternalFunction2D.py +0 -0
- {mrarbgrad-4.1.1 → mrarbgrad-4.2.0}/example/example_ExternalSamples2D.py +0 -0
- {mrarbgrad-4.1.1 → mrarbgrad-4.2.0}/example/example_ExternalSamples3D.py +0 -0
- {mrarbgrad-4.1.1 → mrarbgrad-4.2.0}/mrarbgrad_src/Utility.py +0 -0
- {mrarbgrad-4.1.1 → mrarbgrad-4.2.0}/mrarbgrad_src/ext/traj/Cones.h +0 -0
- {mrarbgrad-4.1.1 → mrarbgrad-4.2.0}/mrarbgrad_src/ext/traj/MrTraj_2D.h +0 -0
- {mrarbgrad-4.1.1 → mrarbgrad-4.2.0}/mrarbgrad_src/ext/traj/Rosette.h +0 -0
- {mrarbgrad-4.1.1 → mrarbgrad-4.2.0}/mrarbgrad_src/ext/traj/Seiffert.h +0 -0
- {mrarbgrad-4.1.1 → mrarbgrad-4.2.0}/mrarbgrad_src/ext/traj/Shell3d.h +0 -0
- {mrarbgrad-4.1.1 → mrarbgrad-4.2.0}/mrarbgrad_src/ext/traj/Spiral.h +0 -0
- {mrarbgrad-4.1.1 → mrarbgrad-4.2.0}/mrarbgrad_src/ext/traj/TrajFunc.h +0 -0
- {mrarbgrad-4.1.1 → mrarbgrad-4.2.0}/mrarbgrad_src/ext/traj/VDSpiral.h +0 -0
- {mrarbgrad-4.1.1 → mrarbgrad-4.2.0}/mrarbgrad_src/ext/traj/Yarnball.h +0 -0
- {mrarbgrad-4.1.1 → mrarbgrad-4.2.0}/mrarbgrad_src/ext/utility/Intp.h +0 -0
- {mrarbgrad-4.1.1 → mrarbgrad-4.2.0}/mrarbgrad_src/ext/utility/global.cpp +0 -0
- {mrarbgrad-4.1.1 → mrarbgrad-4.2.0}/mrarbgrad_src/ext/utility/global.h +0 -0
- {mrarbgrad-4.1.1 → mrarbgrad-4.2.0}/mrarbgrad_src/ext/utility/v3.h +0 -0
- {mrarbgrad-4.1.1 → mrarbgrad-4.2.0}/mrarbgrad_src/trajfunc/__init__.py +0 -0
- {mrarbgrad-4.1.1 → mrarbgrad-4.2.0}/mrarbgrad_src/trajfunc/main.py +0 -0
- {mrarbgrad-4.1.1 → mrarbgrad-4.2.0}/setup.cfg +0 -0
- {mrarbgrad-4.1.1 → mrarbgrad-4.2.0}/setup.py +0 -0
|
@@ -371,6 +371,8 @@ def setGoldAng(x): ext.setGoldAng(x)
|
|
|
371
371
|
def setShuf(x): ext.setShuf(x)
|
|
372
372
|
def setMaxG0(x): ext.setMaxG0(x)
|
|
373
373
|
def setMaxG1(x): ext.setMaxG1(x)
|
|
374
|
+
def setMagGradSamp(x): ext.setMagGradSamp(x)
|
|
375
|
+
def setMagTrajSamp(x): ext.setMagTrajSamp(x)
|
|
374
376
|
def setMagOverSamp(x): ext.setMagOverSamp(x)
|
|
375
377
|
def setMagSFS(x): ext.setMagSFS(x)
|
|
376
378
|
def setMagGradRep(x): ext.setMagGradRep(x)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from .Function import calGrad4ExFunc, calGrad4ExSamp
|
|
2
2
|
from .Function import getG_Cones, getG_Rosette, getG_Rosette_Trad, getG_Seiffert, getG_Shell3d, getG_Spiral, getG_VDSpiral, getG_VDSpiral_RT, getG_Yarnball, getG_Yarnball_RT
|
|
3
|
-
from .Function import setSolverMtg, setTrajRev, setGoldAng, setShuf, setMaxG0, setMaxG1, setMagOverSamp, setMagSFS, setMagGradRep, setMagTrajRep, setDbgPrint, saveF64, loadF64, saveF32, loadF32
|
|
3
|
+
from .Function import setSolverMtg, setTrajRev, setGoldAng, setShuf, setMaxG0, setMaxG1, setMagGradSamp, setMagTrajSamp, setMagOverSamp, setMagSFS, setMagGradRep, setMagTrajRep, setDbgPrint, saveF64, loadF64, saveF32, loadF32
|
|
4
4
|
from .Utility import _calDiaphony, rotate, _calJacElip, _calCompElipInt, _calSphFibPt, cvtGrad2Traj, getGoldang, getGoldrat, rand3d, gradClip
|
|
5
5
|
|
|
6
6
|
from . import trajfunc
|
|
@@ -8,29 +8,31 @@ i64 gMag_oversamp = -1; // oversample ratio, overwrite the set value
|
|
|
8
8
|
bool gMag_enSFS = false; // Single Forward Sweep flag
|
|
9
9
|
bool gMag_enGradRep = true; // Gradient Reparameterization
|
|
10
10
|
bool gMag_enTrajRep = true; // use trajectory reparameterization for MAG solver
|
|
11
|
-
i64 gMag_nTrajSamp = 1000; // num. of samp. when doing Traj. Rep.
|
|
12
11
|
|
|
13
|
-
Mag::Mag()
|
|
12
|
+
Mag::Mag(i64 nGradSampRsv, i64 nTrajSampRsv)
|
|
14
13
|
{
|
|
15
14
|
// for solver
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
if (nGradSampRsv)
|
|
16
|
+
{
|
|
17
|
+
m_vf64P_Bac.reserve(nGradSampRsv * 8);
|
|
18
|
+
m_vv3G_Bac.reserve(nGradSampRsv * 8);
|
|
19
|
+
m_vf64GNorm_Bac.reserve(nGradSampRsv * 8);
|
|
18
20
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
m_vf64GNorm_Bac.reserve(nSampReserve*m_oversamp);
|
|
21
|
+
m_vf64P_For.reserve(nGradSampRsv * 8);
|
|
22
|
+
m_vv3G_For.reserve(nGradSampRsv * 8);
|
|
22
23
|
|
|
23
|
-
|
|
24
|
-
|
|
24
|
+
m_vf64P.reserve(nGradSampRsv);
|
|
25
|
+
m_vv3G.reserve(nGradSampRsv);
|
|
25
26
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
// for trajectory reparameterization
|
|
30
|
-
m_vv3TrajSamp.resize(gMag_nTrajSamp);
|
|
27
|
+
m_intp.init(nGradSampRsv * 8);
|
|
28
|
+
m_intp.m_eSearchMode = Intp::ECached;
|
|
29
|
+
}
|
|
31
30
|
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
// for trajectory reparameterization
|
|
32
|
+
if (gMrTraj_nTrajSampRsv)
|
|
33
|
+
{
|
|
34
|
+
m_vv3TrajSamp.resize(gMrTraj_nTrajSampRsv);
|
|
35
|
+
}
|
|
34
36
|
}
|
|
35
37
|
|
|
36
38
|
bool Mag::init
|
|
@@ -52,9 +54,9 @@ bool Mag::init
|
|
|
52
54
|
{
|
|
53
55
|
f64 p0 = ptTraj->getP0();
|
|
54
56
|
f64 p1 = ptTraj->getP1();
|
|
55
|
-
for (i64 i = 0; i <
|
|
57
|
+
for (i64 i = 0; i < gMrTraj_nTrajSampRsv; ++i)
|
|
56
58
|
{
|
|
57
|
-
f64 p = p0 + (p1-p0) * (i)/f64(
|
|
59
|
+
f64 p = p0 + (p1-p0) * (i)/f64(gMrTraj_nTrajSampRsv-1);
|
|
58
60
|
ptTraj->getK(&m_vv3TrajSamp[i], p);
|
|
59
61
|
}
|
|
60
62
|
m_sptfTraj = Spline_TrajFunc(m_vv3TrajSamp);
|
|
@@ -16,7 +16,7 @@ extern i64 gMag_oversamp;
|
|
|
16
16
|
extern bool gMag_enSFS;
|
|
17
17
|
extern bool gMag_enGradRep;
|
|
18
18
|
extern bool gMag_enTrajRep;
|
|
19
|
-
extern i64
|
|
19
|
+
extern i64 gMrTraj_nTrajSampRsv;
|
|
20
20
|
|
|
21
21
|
// virtual TrajFunc, take in discrete samples and construct a Segmentied Cubic Polynomial function
|
|
22
22
|
class Spline_TrajFunc: public TrajFunc
|
|
@@ -24,9 +24,9 @@ class Spline_TrajFunc: public TrajFunc
|
|
|
24
24
|
public:
|
|
25
25
|
Spline_TrajFunc():
|
|
26
26
|
TrajFunc(0,0),
|
|
27
|
-
m_intpX(
|
|
28
|
-
m_intpY(
|
|
29
|
-
m_intpZ(
|
|
27
|
+
m_intpX(gMrTraj_nTrajSampRsv),
|
|
28
|
+
m_intpY(gMrTraj_nTrajSampRsv),
|
|
29
|
+
m_intpZ(gMrTraj_nTrajSampRsv)
|
|
30
30
|
{}
|
|
31
31
|
|
|
32
32
|
Spline_TrajFunc(const vv3& vv3K):
|
|
@@ -97,19 +97,19 @@ protected:
|
|
|
97
97
|
class Mag
|
|
98
98
|
{
|
|
99
99
|
public:
|
|
100
|
-
Mag();
|
|
100
|
+
Mag(i64 nSampReserve=0, i64 nTrajSampRsv=0);
|
|
101
101
|
bool init
|
|
102
102
|
(
|
|
103
103
|
TrajFunc* ptTraj,
|
|
104
104
|
f64 sLim, f64 gLim,
|
|
105
|
-
f64 dt=10e-6, i64 oversamp=
|
|
105
|
+
f64 dt=10e-6, i64 oversamp=8,
|
|
106
106
|
f64 dG0Norm=0e0, f64 dG1Norm=0e0
|
|
107
107
|
);
|
|
108
108
|
bool init
|
|
109
109
|
(
|
|
110
110
|
const vv3& vv3TrajSamp,
|
|
111
111
|
f64 sLim, f64 gLim,
|
|
112
|
-
f64 dt=10e-6, i64 oversamp=
|
|
112
|
+
f64 dt=10e-6, i64 oversamp=8,
|
|
113
113
|
f64 dG0Norm=0e0, f64 dG1Norm=0e0
|
|
114
114
|
);
|
|
115
115
|
~Mag();
|
|
@@ -644,6 +644,24 @@ PyObject* setMaxG1(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
|
644
644
|
return Py_None;
|
|
645
645
|
}
|
|
646
646
|
|
|
647
|
+
PyObject* setMagGradSamp(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
648
|
+
{
|
|
649
|
+
extern i64 gMrTraj_nGradSampRsv;
|
|
650
|
+
chkNarg(narg, 1);
|
|
651
|
+
gMrTraj_nGradSampRsv = PyLong_AsLong(args[0]);
|
|
652
|
+
Py_INCREF(Py_None);
|
|
653
|
+
return Py_None;
|
|
654
|
+
}
|
|
655
|
+
|
|
656
|
+
PyObject* setMagTrajSamp(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
657
|
+
{
|
|
658
|
+
extern i64 gMrTraj_nTrajSampRsv;
|
|
659
|
+
chkNarg(narg, 1);
|
|
660
|
+
gMrTraj_nTrajSampRsv = PyLong_AsLong(args[0]);
|
|
661
|
+
Py_INCREF(Py_None);
|
|
662
|
+
return Py_None;
|
|
663
|
+
}
|
|
664
|
+
|
|
647
665
|
PyObject* setMagOverSamp(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
648
666
|
{
|
|
649
667
|
extern i64 gMag_oversamp;
|
|
@@ -822,6 +840,8 @@ static PyMethodDef aMeth[] =
|
|
|
822
840
|
{"setShuf", (PyCFunction)setShuf, METH_FASTCALL, ""},
|
|
823
841
|
{"setMaxG0", (PyCFunction)setMaxG0, METH_FASTCALL, ""},
|
|
824
842
|
{"setMaxG1", (PyCFunction)setMaxG1, METH_FASTCALL, ""},
|
|
843
|
+
{"setMagGradSamp", (PyCFunction)setMagGradSamp, METH_FASTCALL, ""},
|
|
844
|
+
{"setMagTrajSamp", (PyCFunction)setMagTrajSamp, METH_FASTCALL, ""},
|
|
825
845
|
{"setMagOverSamp", (PyCFunction)setMagOverSamp, METH_FASTCALL, ""},
|
|
826
846
|
{"setMagSFS", (PyCFunction)setMagSFS, METH_FASTCALL, ""},
|
|
827
847
|
{"setMagGradRep", (PyCFunction)setMagGradRep, METH_FASTCALL, ""},
|
|
@@ -13,6 +13,8 @@
|
|
|
13
13
|
bool gMrTraj_enMtg = false; // whether to use Lustig's minTimeGrad solver
|
|
14
14
|
f64 gMrTraj_g0Norm = 0e0; // initial gradient amplitude
|
|
15
15
|
f64 gMrTraj_g1Norm = 0e0; // final gradient amplitude
|
|
16
|
+
i64 gMrTraj_nGradSampRsv = 10000; // buffer size of mag solver
|
|
17
|
+
i64 gMrTraj_nTrajSampRsv = 10000; // num. of samp. when doing Traj. Rep.
|
|
16
18
|
|
|
17
19
|
/*
|
|
18
20
|
* A set of trajectories sufficient to fully-sample the k-space
|
|
@@ -51,7 +53,11 @@ public:
|
|
|
51
53
|
m_nAcq(m_nAcq),
|
|
52
54
|
m_nSampMax(m_nSampMax)
|
|
53
55
|
{
|
|
54
|
-
m_mag = Mag
|
|
56
|
+
m_mag = Mag
|
|
57
|
+
(
|
|
58
|
+
gMrTraj_nGradSampRsv,
|
|
59
|
+
gMrTraj_nTrajSampRsv
|
|
60
|
+
);
|
|
55
61
|
m_vv3GRampFront.reserve(1000);
|
|
56
62
|
m_vv3GRampBack.reserve(1000);
|
|
57
63
|
}
|
|
@@ -361,8 +367,6 @@ protected:
|
|
|
361
367
|
bool calGrad(v3* pv3M0PE, vv3* pvv3GRO, vf64* pvf64P, TrajFunc& tfTraj, GradPara& objGradPara, i64 oversamp=8)
|
|
362
368
|
{
|
|
363
369
|
bool ret = true;
|
|
364
|
-
const f64& sLim = objGradPara.sLim;
|
|
365
|
-
const f64& dt = objGradPara.dt;
|
|
366
370
|
|
|
367
371
|
// calculate GRO
|
|
368
372
|
TIC;
|
|
@@ -27,8 +27,6 @@ public:
|
|
|
27
27
|
|
|
28
28
|
virtual bool fit(const vf64& vf64X, const vf64& vf64Y)
|
|
29
29
|
{
|
|
30
|
-
ASSERT((i64)vf64X.size() <= m_sizCache);
|
|
31
|
-
ASSERT((i64)vf64Y.size() <= m_sizCache);
|
|
32
30
|
ASSERT(vf64X.size() == vf64Y.size());
|
|
33
31
|
const i64 nSamp = vf64X.size();
|
|
34
32
|
ASSERT(nSamp >= 2);
|
|
@@ -37,8 +37,6 @@ public:
|
|
|
37
37
|
|
|
38
38
|
virtual bool fit(const vf64& vf64X, const vf64& vf64Y)
|
|
39
39
|
{
|
|
40
|
-
ASSERT((i64)vf64X.size() <= m_sizCache);
|
|
41
|
-
ASSERT((i64)vf64Y.size() <= m_sizCache);
|
|
42
40
|
ASSERT(vf64X.size() == vf64Y.size());
|
|
43
41
|
const i64 nSamp = vf64X.size();
|
|
44
42
|
ASSERT(nSamp >= 2);
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
#include "v3.h"
|
|
2
2
|
#include <array>
|
|
3
|
-
#include <cinttypes>
|
|
4
3
|
#include <cstring> // test
|
|
5
4
|
|
|
6
5
|
v3::v3() :x(0e0), y(0e0), z(0e0) {}
|
|
@@ -386,11 +385,15 @@ bool v3::saveF64(FILE* pfHdr, FILE* pfBin, const vv3& vv3Data)
|
|
|
386
385
|
bool v3::loadF64(FILE* pfHdr, FILE* pfBin, vv3* pvv3Data)
|
|
387
386
|
{
|
|
388
387
|
bool ret = true;
|
|
389
|
-
i64 lenData = 0;
|
|
390
388
|
pvv3Data->clear();
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
389
|
+
i64 lenData = 0;
|
|
390
|
+
{
|
|
391
|
+
long _;
|
|
392
|
+
int nRead = fscanf(pfHdr, "float64[%ld][3];\n", &_);
|
|
393
|
+
lenData = (i64)_;
|
|
394
|
+
if (nRead == EOF) return true; // EOF
|
|
395
|
+
else if (nRead != 1) return false;
|
|
396
|
+
}
|
|
394
397
|
pvv3Data->resize(lenData);
|
|
395
398
|
|
|
396
399
|
f64* bufFile = (f64*)malloc(lenData*3*sizeof(f64));
|
|
@@ -424,11 +427,15 @@ bool v3::saveF32(FILE* pfHdr, FILE* pfBin, const vv3& vv3Data)
|
|
|
424
427
|
bool v3::loadF32(FILE* pfHdr, FILE* pfBin, vv3* pvv3Data)
|
|
425
428
|
{
|
|
426
429
|
bool ret = true;
|
|
427
|
-
i64 lenData = 0;
|
|
428
430
|
pvv3Data->clear();
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
431
|
+
i64 lenData = 0;
|
|
432
|
+
{
|
|
433
|
+
long _;
|
|
434
|
+
int nRead = fscanf(pfHdr, "float32[%ld][3];\n", &_);
|
|
435
|
+
lenData = (i64)_;
|
|
436
|
+
if (nRead == EOF) return true; // EOF
|
|
437
|
+
else if (nRead != 1) return false;
|
|
438
|
+
}
|
|
432
439
|
pvv3Data->resize(lenData);
|
|
433
440
|
|
|
434
441
|
f32* bufFile = (f32*)malloc(lenData*3*sizeof(f32));
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|