rapidtide 3.0a8__py3-none-any.whl → 3.0a10__py3-none-any.whl
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.
- rapidtide/OrthoImageItem.py +12 -4
- rapidtide/RapidtideDataset.py +75 -8
- rapidtide/data/examples/src/testfmri +1 -1
- rapidtide/tidepoolTemplate.py +80 -167
- rapidtide/tidepoolTemplate.ui +57 -44
- rapidtide/tidepoolTemplate_alt.py +88 -175
- rapidtide/tidepoolTemplate_alt.ui +59 -50
- rapidtide/tidepoolTemplate_alt_qt6.py +15 -6
- rapidtide/tidepoolTemplate_big.py +987 -0
- rapidtide/tidepoolTemplate_big.ui +577 -80
- rapidtide/tidepoolTemplate_big_qt6.py +985 -0
- rapidtide/tidepoolTemplate_qt6.py +15 -9
- rapidtide/workflows/rapidtide.py +8 -5
- rapidtide/workflows/tidepool.py +423 -369
- {rapidtide-3.0a8.dist-info → rapidtide-3.0a10.dist-info}/METADATA +1 -1
- {rapidtide-3.0a8.dist-info → rapidtide-3.0a10.dist-info}/RECORD +20 -18
- {rapidtide-3.0a8.dist-info → rapidtide-3.0a10.dist-info}/WHEEL +1 -1
- {rapidtide-3.0a8.dist-info → rapidtide-3.0a10.dist-info}/LICENSE +0 -0
- {rapidtide-3.0a8.dist-info → rapidtide-3.0a10.dist-info}/entry_points.txt +0 -0
- {rapidtide-3.0a8.dist-info → rapidtide-3.0a10.dist-info}/top_level.txt +0 -0
rapidtide/OrthoImageItem.py
CHANGED
|
@@ -19,13 +19,10 @@
|
|
|
19
19
|
"""
|
|
20
20
|
A widget for orthographically displaying 3 and 4 dimensional data
|
|
21
21
|
"""
|
|
22
|
-
|
|
23
|
-
import copy
|
|
24
22
|
import os
|
|
25
23
|
|
|
26
24
|
import numpy as np
|
|
27
25
|
import pyqtgraph as pg
|
|
28
|
-
from more_itertools.more import first
|
|
29
26
|
from pyqtgraph.Qt import QtCore, QtGui, QtWidgets
|
|
30
27
|
|
|
31
28
|
try:
|
|
@@ -35,6 +32,14 @@ try:
|
|
|
35
32
|
except ImportError:
|
|
36
33
|
PILexists = False
|
|
37
34
|
|
|
35
|
+
try:
|
|
36
|
+
from PyQt6.QtCore import QT_VERSION_STR
|
|
37
|
+
except ImportError:
|
|
38
|
+
pyqtversion = 5
|
|
39
|
+
else:
|
|
40
|
+
pyqtversion = 6
|
|
41
|
+
print(f"using {pyqtversion=}")
|
|
42
|
+
|
|
38
43
|
|
|
39
44
|
def newColorbar(left, top, impixpervoxx, impixpervoxy, imgsize):
|
|
40
45
|
cb_xdim = imgsize // 10
|
|
@@ -515,7 +520,10 @@ class OrthoImageItem(QtWidgets.QWidget):
|
|
|
515
520
|
if self.verbose > 1:
|
|
516
521
|
print("saving main window")
|
|
517
522
|
mydialog = QtWidgets.QFileDialog()
|
|
518
|
-
|
|
523
|
+
if pyqtversion == 5:
|
|
524
|
+
options = mydialog.Options()
|
|
525
|
+
else:
|
|
526
|
+
options = mydialog.options()
|
|
519
527
|
thedir = str(
|
|
520
528
|
mydialog.getExistingDirectory(options=options, caption="Image output directory")
|
|
521
529
|
)
|
rapidtide/RapidtideDataset.py
CHANGED
|
@@ -39,6 +39,34 @@ atlases = {
|
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
|
|
42
|
+
def check_rt_spatialmatch(dataset1, dataset2):
|
|
43
|
+
if (
|
|
44
|
+
(dataset1.xdim == dataset2.xdim)
|
|
45
|
+
and (dataset1.ydim == dataset2.ydim)
|
|
46
|
+
and (dataset1.zdim == dataset2.zdim)
|
|
47
|
+
):
|
|
48
|
+
dimmatch = True
|
|
49
|
+
else:
|
|
50
|
+
dimmatch = False
|
|
51
|
+
if (
|
|
52
|
+
(dataset1.xsize == dataset2.xsize)
|
|
53
|
+
and (dataset1.ysize == dataset2.ysize)
|
|
54
|
+
and (dataset1.zsize == dataset2.zsize)
|
|
55
|
+
):
|
|
56
|
+
sizematch = True
|
|
57
|
+
else:
|
|
58
|
+
sizematch = False
|
|
59
|
+
if dataset1.space == dataset2.space:
|
|
60
|
+
spacematch = True
|
|
61
|
+
else:
|
|
62
|
+
spacematch = False
|
|
63
|
+
if dataset1.affine == dataset2.affine:
|
|
64
|
+
affinematch = True
|
|
65
|
+
else:
|
|
66
|
+
affinematch = False
|
|
67
|
+
return dimmatch, sizematch, spacematch, affinematch
|
|
68
|
+
|
|
69
|
+
|
|
42
70
|
class Timecourse:
|
|
43
71
|
"Store a timecourse and some information about it"
|
|
44
72
|
|
|
@@ -53,6 +81,7 @@ class Timecourse:
|
|
|
53
81
|
label=None,
|
|
54
82
|
report=False,
|
|
55
83
|
isbids=False,
|
|
84
|
+
limits=None,
|
|
56
85
|
verbose=0,
|
|
57
86
|
):
|
|
58
87
|
self.verbose = verbose
|
|
@@ -63,6 +92,7 @@ class Timecourse:
|
|
|
63
92
|
self.displaysamplerate = displaysamplerate
|
|
64
93
|
self.starttime = starttime
|
|
65
94
|
self.isbids = isbids
|
|
95
|
+
self.limits = limits
|
|
66
96
|
|
|
67
97
|
if label is None:
|
|
68
98
|
self.label = name
|
|
@@ -89,11 +119,21 @@ class Timecourse:
|
|
|
89
119
|
self.timeaxis = (
|
|
90
120
|
np.linspace(0.0, self.length, num=self.length, endpoint=False) / self.samplerate
|
|
91
121
|
) - self.starttime
|
|
122
|
+
if self.limits is not None:
|
|
123
|
+
startpoint = np.max((int(np.round(self.limits[0] * self.samplerate, 0)), 0))
|
|
124
|
+
endpoint = np.min((int(np.round(self.limits[1] * self.samplerate, 0)), self.length))
|
|
125
|
+
else:
|
|
126
|
+
startpoint = 0
|
|
127
|
+
endpoint = self.length
|
|
92
128
|
self.specaxis, self.specdata = tide_filt.spectrum(
|
|
93
|
-
tide_math.corrnormalize(self.timedata), self.samplerate
|
|
129
|
+
tide_math.corrnormalize(self.timedata[startpoint:endpoint]), self.samplerate
|
|
130
|
+
)
|
|
131
|
+
self.kurtosis, self.kurtosis_z, self.kurtosis_p = tide_stats.kurtosisstats(
|
|
132
|
+
self.timedata[startpoint:endpoint]
|
|
133
|
+
)
|
|
134
|
+
self.skewness, self.skewness_z, self.skewness_p = tide_stats.skewnessstats(
|
|
135
|
+
self.timedata[startpoint:endpoint]
|
|
94
136
|
)
|
|
95
|
-
self.kurtosis, self.kurtosis_z, self.kurtosis_p = tide_stats.kurtosisstats(self.timedata)
|
|
96
|
-
self.skewness, self.skewness_z, self.skewness_p = tide_stats.skewnessstats(self.timedata)
|
|
97
137
|
|
|
98
138
|
if self.verbose > 1:
|
|
99
139
|
print("Timecourse data range:", np.min(self.timedata), np.max(self.timedata))
|
|
@@ -135,6 +175,7 @@ class Overlay:
|
|
|
135
175
|
alpha=128,
|
|
136
176
|
endalpha=0,
|
|
137
177
|
display_state=True,
|
|
178
|
+
invertonload=False,
|
|
138
179
|
isaMask=False,
|
|
139
180
|
init_LUT=True,
|
|
140
181
|
verbose=1,
|
|
@@ -152,6 +193,7 @@ class Overlay:
|
|
|
152
193
|
self.namebase = namebase
|
|
153
194
|
if self.verbose > 1:
|
|
154
195
|
print("reading map ", self.name, " from ", self.filename, "...")
|
|
196
|
+
self.invertonload = invertonload
|
|
155
197
|
self.readImageData(isaMask=isaMask)
|
|
156
198
|
self.mask = None
|
|
157
199
|
self.maskeddata = None
|
|
@@ -159,6 +201,8 @@ class Overlay:
|
|
|
159
201
|
self.setGeomMask(geommask, maskdata=False)
|
|
160
202
|
self.maskData()
|
|
161
203
|
self.updateStats()
|
|
204
|
+
self.dispmin = self.robustmin
|
|
205
|
+
self.dispmax = self.robustmax
|
|
162
206
|
if init_LUT:
|
|
163
207
|
self.gradient = getagradient()
|
|
164
208
|
self.lut_state = lut_state
|
|
@@ -242,8 +286,6 @@ class Overlay:
|
|
|
242
286
|
self.pct75,
|
|
243
287
|
self.robustmax,
|
|
244
288
|
) = tide_stats.getfracvals(calcmaskeddata, [0.02, 0.25, 0.5, 0.75, 0.98], nozero=False)
|
|
245
|
-
self.dispmin = self.robustmin
|
|
246
|
-
self.dispmax = self.robustmax
|
|
247
289
|
self.histy, self.histx = np.histogram(
|
|
248
290
|
calcmaskeddata, bins=np.linspace(self.minval, self.maxval, 200)
|
|
249
291
|
)
|
|
@@ -270,6 +312,8 @@ class Overlay:
|
|
|
270
312
|
self.nim, self.data, self.header, self.dims, self.sizes = tide_io.readfromnifti(
|
|
271
313
|
self.filename
|
|
272
314
|
)
|
|
315
|
+
if self.invertonload:
|
|
316
|
+
self.data *= -1.0
|
|
273
317
|
if isaMask:
|
|
274
318
|
if self.filevals is None:
|
|
275
319
|
self.data[np.where(self.data < 0.5)] = 0.0
|
|
@@ -452,6 +496,8 @@ class RapidtideDataset:
|
|
|
452
496
|
ysize = 0.0
|
|
453
497
|
zsize = 0.0
|
|
454
498
|
tr = 0.0
|
|
499
|
+
space = None
|
|
500
|
+
affine = None
|
|
455
501
|
|
|
456
502
|
def __init__(
|
|
457
503
|
self,
|
|
@@ -470,7 +516,7 @@ class RapidtideDataset:
|
|
|
470
516
|
coordinatespace="unspecified",
|
|
471
517
|
offsettime=0.0,
|
|
472
518
|
init_LUT=True,
|
|
473
|
-
verbose=
|
|
519
|
+
verbose=0,
|
|
474
520
|
):
|
|
475
521
|
self.verbose = verbose
|
|
476
522
|
self.name = name
|
|
@@ -526,6 +572,7 @@ class RapidtideDataset:
|
|
|
526
572
|
label=thisregressor[1],
|
|
527
573
|
starttime=thisregressor[5],
|
|
528
574
|
isbids=self.bidsformat,
|
|
575
|
+
limits=self.regressorsimcalclimits,
|
|
529
576
|
verbose=self.verbose,
|
|
530
577
|
)
|
|
531
578
|
if theregressor.timedata is not None:
|
|
@@ -543,6 +590,7 @@ class RapidtideDataset:
|
|
|
543
590
|
)
|
|
544
591
|
|
|
545
592
|
def _loadfuncmaps(self):
|
|
593
|
+
mapstoinvert = ["varChange"]
|
|
546
594
|
self.loadedfuncmaps = []
|
|
547
595
|
xdim = 0
|
|
548
596
|
ydim = 0
|
|
@@ -558,12 +606,17 @@ class RapidtideDataset:
|
|
|
558
606
|
" exists - reading...",
|
|
559
607
|
)
|
|
560
608
|
thepath, thebase = os.path.split(self.fileroot)
|
|
609
|
+
if mapname in mapstoinvert:
|
|
610
|
+
invertthismap = True
|
|
611
|
+
else:
|
|
612
|
+
invertthismap = False
|
|
561
613
|
self.overlays[mapname] = Overlay(
|
|
562
614
|
mapname,
|
|
563
615
|
self.fileroot + mapfilename + ".nii.gz",
|
|
564
616
|
thebase,
|
|
565
617
|
init_LUT=self.init_LUT,
|
|
566
618
|
report=True,
|
|
619
|
+
invertonload=invertthismap,
|
|
567
620
|
verbose=self.verbose,
|
|
568
621
|
)
|
|
569
622
|
if xdim == 0:
|
|
@@ -1058,7 +1111,11 @@ class RapidtideDataset:
|
|
|
1058
1111
|
return self.regressors
|
|
1059
1112
|
|
|
1060
1113
|
def setfocusregressor(self, whichregressor):
|
|
1061
|
-
|
|
1114
|
+
try:
|
|
1115
|
+
testregressor = self.regressors[whichregressor]
|
|
1116
|
+
self.focusregressor = whichregressor
|
|
1117
|
+
except KeyError:
|
|
1118
|
+
self.focusregressor = "prefilt"
|
|
1062
1119
|
|
|
1063
1120
|
def setupoverlays(self):
|
|
1064
1121
|
# load the overlays
|
|
@@ -1074,6 +1131,11 @@ class RapidtideDataset:
|
|
|
1074
1131
|
["lagsigma", "desc-maxwidth_map"],
|
|
1075
1132
|
["MTT", "desc-MTT_map"],
|
|
1076
1133
|
["R2", "desc-lfofilterR2_map"],
|
|
1134
|
+
["CoV", "desc-CoV_map"],
|
|
1135
|
+
["confoundR2", "desc-confoundfilterR2_map"],
|
|
1136
|
+
["varBefore", "desc-lfofilterInbandVarianceBefore_map"],
|
|
1137
|
+
["varAfter", "desc-lfofilterInbandVarianceAfter_map"],
|
|
1138
|
+
["varChange", "desc-lfofilterInbandVarianceChange_map"],
|
|
1077
1139
|
["fitNorm", "desc-lfofilterNorm_map"],
|
|
1078
1140
|
["fitcoff", "desc-lfofilterCoeff_map"],
|
|
1079
1141
|
["neglog10p", "desc-neglog10p_map"],
|
|
@@ -1166,6 +1228,7 @@ class RapidtideDataset:
|
|
|
1166
1228
|
["lagmask", "desc-corrfit_mask"],
|
|
1167
1229
|
["refinemask", "desc-refine_mask"],
|
|
1168
1230
|
["meanmask", "desc-globalmean_mask"],
|
|
1231
|
+
["brainmask", "desc-brainmask_mask"],
|
|
1169
1232
|
["preselectmask", "desc-globalmeanpreselect_mask"],
|
|
1170
1233
|
]
|
|
1171
1234
|
if not ("neglog10p" in self.loadedfuncmaps):
|
|
@@ -1287,4 +1350,8 @@ class RapidtideDataset:
|
|
|
1287
1350
|
return self.overlays
|
|
1288
1351
|
|
|
1289
1352
|
def setfocusmap(self, whichmap):
|
|
1290
|
-
|
|
1353
|
+
try:
|
|
1354
|
+
testmap = self.overlays[whichmap]
|
|
1355
|
+
self.focusmap = whichmap
|
|
1356
|
+
except KeyError:
|
|
1357
|
+
self.focusmap = "lagtimes"
|