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.
@@ -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
- options = mydialog.Options()
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
  )
@@ -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=1,
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
- self.focusregressor = whichregressor
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
- self.focusmap = whichmap
1353
+ try:
1354
+ testmap = self.overlays[whichmap]
1355
+ self.focusmap = whichmap
1356
+ except KeyError:
1357
+ self.focusmap = "lagtimes"
@@ -23,7 +23,7 @@ rapidtide \
23
23
  --nprocs -1 \
24
24
  --searchrange -5 20 \
25
25
  --simcalcrange 50 -1 \
26
- --norefinedelay \
26
+ --refinedelay \
27
27
  sub-RAPIDTIDETEST.nii.gz \
28
28
  ../dst/sub-RAPIDTIDETEST_nofilt
29
29