rapidtide 3.0a10__py3-none-any.whl → 3.0a12__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.
Files changed (37) hide show
  1. rapidtide/Colortables.py +45 -10
  2. rapidtide/RapidtideDataset.py +21 -3
  3. rapidtide/Refiner.py +464 -0
  4. rapidtide/__init__.py +1 -2
  5. rapidtide/_version.py +63 -93
  6. rapidtide/data/examples/src/testfmri +3 -119
  7. rapidtide/data/examples/src/testhappy +1 -6
  8. rapidtide/data/examples/src/testinitdelay +19 -0
  9. rapidtide/data/examples/src/testnewrefine +49 -0
  10. rapidtide/data/examples/src/testrefineonly +22 -0
  11. rapidtide/glmpass.py +8 -1
  12. rapidtide/refinedelay.py +72 -32
  13. rapidtide/refineregressor.py +38 -24
  14. rapidtide/tests/test_fastresampler.py +6 -2
  15. rapidtide/tests/test_fullrunhappy_v1.py +0 -1
  16. rapidtide/tests/test_fullrunhappy_v4.py +1 -0
  17. rapidtide/tests/test_runmisc.py +4 -4
  18. rapidtide/tidepoolTemplate.py +1 -0
  19. rapidtide/tidepoolTemplate.ui +1 -0
  20. rapidtide/tidepoolTemplate_alt.py +5 -4
  21. rapidtide/tidepoolTemplate_alt.ui +3 -2
  22. rapidtide/tidepoolTemplate_alt_qt6.py +5 -4
  23. rapidtide/tidepoolTemplate_big.py +1 -0
  24. rapidtide/tidepoolTemplate_big.ui +1 -0
  25. rapidtide/tidepoolTemplate_big_qt6.py +1 -0
  26. rapidtide/tidepoolTemplate_qt6.py +1 -0
  27. rapidtide/workflows/parser_funcs.py +10 -2
  28. rapidtide/workflows/rapidtide.py +197 -325
  29. rapidtide/workflows/rapidtide_parser.py +35 -13
  30. rapidtide/workflows/retroglm.py +145 -60
  31. rapidtide/workflows/tidepool.py +34 -15
  32. {rapidtide-3.0a10.dist-info → rapidtide-3.0a12.dist-info}/METADATA +1 -1
  33. {rapidtide-3.0a10.dist-info → rapidtide-3.0a12.dist-info}/RECORD +37 -33
  34. {rapidtide-3.0a10.dist-info → rapidtide-3.0a12.dist-info}/WHEEL +1 -1
  35. {rapidtide-3.0a10.dist-info → rapidtide-3.0a12.dist-info}/LICENSE +0 -0
  36. {rapidtide-3.0a10.dist-info → rapidtide-3.0a12.dist-info}/entry_points.txt +0 -0
  37. {rapidtide-3.0a10.dist-info → rapidtide-3.0a12.dist-info}/top_level.txt +0 -0
@@ -80,6 +80,7 @@ DEFAULT_REFINE_PRENORM = "var"
80
80
  DEFAULT_REFINE_WEIGHTING = "None"
81
81
  DEFAULT_REFINE_PCACOMPONENTS = 0.8
82
82
  DEFAULT_GLMDERIVS = 0
83
+ DEFAULT_REFINEGLMDERIVS = 1
83
84
 
84
85
  DEFAULT_DENOISING_LAGMIN = -10.0
85
86
  DEFAULT_DENOISING_LAGMAX = 10.0
@@ -309,7 +310,7 @@ def _get_parser():
309
310
  dest="realtr",
310
311
  action="store",
311
312
  metavar="TSTEP",
312
- type=lambda x: pf.is_float(parser, x),
313
+ type=lambda x: pf.is_float(parser, x, minval=0.0),
313
314
  help=(
314
315
  "Set the timestep of the data file to TSTEP. "
315
316
  "This will override the TR in an "
@@ -395,7 +396,7 @@ def _get_parser():
395
396
  "--detrendorder",
396
397
  dest="detrendorder",
397
398
  action="store",
398
- type=int,
399
+ type=lambda x: pf.is_int(parser, x, minval=0),
399
400
  metavar="ORDER",
400
401
  help=(f"Set order of trend removal (0 to disable). Default is {DEFAULT_DETREND_ORDER}."),
401
402
  default=DEFAULT_DETREND_ORDER,
@@ -514,7 +515,7 @@ def _get_parser():
514
515
  "--confoundpowers",
515
516
  dest="confound_power",
516
517
  metavar="N",
517
- type=int,
518
+ type=lambda x: pf.is_int(parser, x, minval=1),
518
519
  help=(
519
520
  "Include powers of each confound regressor up to order N. Default is 1 (no expansion). "
520
521
  ),
@@ -580,7 +581,7 @@ def _get_parser():
580
581
  "--numskip",
581
582
  dest="preprocskip",
582
583
  action="store",
583
- type=int,
584
+ type=lambda x: pf.is_int(parser, x, minval=0),
584
585
  metavar="SKIP",
585
586
  help=(
586
587
  "SKIP TRs were previously deleted during "
@@ -672,7 +673,7 @@ def _get_parser():
672
673
  "--regressorfreq",
673
674
  dest="inputfreq",
674
675
  action="store",
675
- type=lambda x: pf.is_float(parser, x),
676
+ type=lambda x: pf.is_float(parser, x, minval=0.0),
676
677
  metavar="FREQ",
677
678
  help=(
678
679
  "Probe regressor in file has sample "
@@ -888,7 +889,7 @@ def _get_parser():
888
889
  "--despecklepasses",
889
890
  dest="despeckle_passes",
890
891
  action=pf.IndicateSpecifiedAction,
891
- type=int,
892
+ type=lambda x: pf.is_int(parser, x, minval=0),
892
893
  metavar="PASSES",
893
894
  help=(
894
895
  "Detect and refit suspect correlations to "
@@ -943,7 +944,7 @@ def _get_parser():
943
944
  "--passes",
944
945
  dest="passes",
945
946
  action=pf.IndicateSpecifiedAction,
946
- type=int,
947
+ type=lambda x: pf.is_int(parser, x, minval=1),
947
948
  metavar="PASSES",
948
949
  help=("Set the number of processing passes to PASSES. " f"Default is {DEFAULT_PASSES}."),
949
950
  default=DEFAULT_PASSES,
@@ -1157,7 +1158,7 @@ def _get_parser():
1157
1158
  "--maxpasses",
1158
1159
  dest="maxpasses",
1159
1160
  action="store",
1160
- type=int,
1161
+ type=lambda x: pf.is_int(parser, x, minval=1),
1161
1162
  metavar="MAXPASSES",
1162
1163
  help=(
1163
1164
  "Terminate refinement after MAXPASSES passes, whether or not convergence has occurred. "
@@ -1203,7 +1204,7 @@ def _get_parser():
1203
1204
  "--glmderivs",
1204
1205
  dest="glmderivs",
1205
1206
  action="store",
1206
- type=int,
1207
+ type=lambda x: pf.is_int(parser, x, minval=0),
1207
1208
  metavar="NDERIVS",
1208
1209
  help=(
1209
1210
  f"When doing final GLM, include derivatives up to NDERIVS order. Default is {DEFAULT_GLMDERIVS}"
@@ -1221,7 +1222,9 @@ def _get_parser():
1221
1222
  "--refinedelay",
1222
1223
  dest="dummy",
1223
1224
  action="store_true",
1224
- help=("Calculate a refined delay map using GLM information. ***DEPRECATED*** - this is now on by default."),
1225
+ help=(
1226
+ "Calculate a refined delay map using GLM information. ***DEPRECATED*** - this is now on by default."
1227
+ ),
1225
1228
  default=True,
1226
1229
  )
1227
1230
  glm.add_argument(
@@ -1297,7 +1300,7 @@ def _get_parser():
1297
1300
  "--histlen", # was -h
1298
1301
  dest="histlen",
1299
1302
  action="store",
1300
- type=int,
1303
+ type=lambda x: pf.is_int(parser, x, minval=5),
1301
1304
  metavar="HISTLEN",
1302
1305
  help=(f"Change the histogram length to HISTLEN. Default is {DEFAULT_HISTLEN}."),
1303
1306
  default=DEFAULT_HISTLEN,
@@ -1349,7 +1352,7 @@ def _get_parser():
1349
1352
  "--mklthreads",
1350
1353
  dest="mklthreads",
1351
1354
  action="store",
1352
- type=int,
1355
+ type=lambda x: pf.is_int(parser, x, minval=1),
1353
1356
  metavar="MKLTHREADS",
1354
1357
  help=(
1355
1358
  "If mkl library is installed, use no more than MKLTHREADS worker "
@@ -1463,6 +1466,25 @@ def _get_parser():
1463
1466
  experimental = parser.add_argument_group(
1464
1467
  "Experimental options (not fully tested, or not tested at all, may not work). Beware!"
1465
1468
  )
1469
+ experimental.add_argument(
1470
+ "--refineglmderivs",
1471
+ dest="refineglmderivs",
1472
+ action="store",
1473
+ type=lambda x: pf.is_int(parser, x, minval=1),
1474
+ metavar="NDERIVS",
1475
+ help=(
1476
+ f"When doing GLM for delay refinement, include derivatives up to NDERIVS order. Must be 1 or more. "
1477
+ f"Default is {DEFAULT_REFINEGLMDERIVS}"
1478
+ ),
1479
+ default=DEFAULT_REFINEGLMDERIVS,
1480
+ )
1481
+ experimental.add_argument(
1482
+ "--dofinalrefine",
1483
+ dest="dofinalrefine",
1484
+ action="store_true",
1485
+ help=("Do regressor refinement on the final pass."),
1486
+ default=False,
1487
+ )
1466
1488
  experimental.add_argument(
1467
1489
  "--territorymap",
1468
1490
  dest="territorymap",
@@ -1542,7 +1564,7 @@ def _get_parser():
1542
1564
  "--noisefreq",
1543
1565
  dest="noisefreq",
1544
1566
  action="store",
1545
- type=lambda x: pf.is_float(parser, x),
1567
+ type=lambda x: pf.is_float(parser, x, minval=0.0),
1546
1568
  metavar="FREQ",
1547
1569
  help=(
1548
1570
  "Noise timecourse in file has sample "
@@ -57,6 +57,7 @@ DEFAULT_REFINEDELAYMINDELAY = -5.0
57
57
  DEFAULT_REFINEDELAYMAXDELAY = 5.0
58
58
  DEFAULT_REFINEDELAYNUMPOINTS = 501
59
59
  DEFAULT_DELAYOFFSETSPATIALFILT = -1
60
+ DEFAULT_REFINEGLMDERIVS = 1
60
61
 
61
62
 
62
63
  def _get_parser():
@@ -91,7 +92,7 @@ def _get_parser():
91
92
  "--glmderivs",
92
93
  dest="glmderivs",
93
94
  action="store",
94
- type=int,
95
+ type=lambda x: pf.is_int(parser, x, minval=0),
95
96
  metavar="NDERIVS",
96
97
  help=(
97
98
  f"When doing final GLM, include derivatives up to NDERIVS order. Default is {DEFAULT_GLMDERIVS}"
@@ -115,7 +116,7 @@ def _get_parser():
115
116
  "--numskip",
116
117
  dest="numskip",
117
118
  action="store",
118
- type=int,
119
+ type=lambda x: pf.is_int(parser, x, minval=0),
119
120
  metavar="NUMSKIP",
120
121
  help=("Skip NUMSKIP points at the beginning of the fmri file."),
121
122
  default=0,
@@ -213,6 +214,21 @@ def _get_parser():
213
214
  help=("Output lots of helpful information on a limited subset of operations."),
214
215
  default=False,
215
216
  )
217
+ experimental = parser.add_argument_group(
218
+ "Experimental options (not fully tested, or not tested at all, may not work). Beware!"
219
+ )
220
+ experimental.add_argument(
221
+ "--refineglmderivs",
222
+ dest="refineglmderivs",
223
+ action="store",
224
+ type=lambda x: pf.is_int(parser, x, minval=1),
225
+ metavar="NDERIVS",
226
+ help=(
227
+ f"When doing GLM for delay refinement, include derivatives up to NDERIVS order. Must be 1 or more. "
228
+ f"Default is {DEFAULT_REFINEGLMDERIVS}"
229
+ ),
230
+ default=DEFAULT_REFINEGLMDERIVS,
231
+ )
216
232
 
217
233
  return parser
218
234
 
@@ -430,7 +446,7 @@ def retroglm(args):
430
446
  print(f"{numvalidspatiallocs=}")
431
447
  internalvalidspaceshape = numvalidspatiallocs
432
448
  if args.refinedelay:
433
- derivaxissize = np.max([2, args.glmderivs + 1])
449
+ derivaxissize = np.max([args.refineglmderivs + 1, args.glmderivs + 1])
434
450
  else:
435
451
  derivaxissize = args.glmderivs + 1
436
452
  internalvalidspaceshapederivs = (
@@ -505,6 +521,7 @@ def retroglm(args):
505
521
  threshval = therunoptions["glmthreshval"]
506
522
  except KeyError:
507
523
  threshval = 0.0
524
+ therunoptions["glmthreshval"] = threshval
508
525
  mode = "glm"
509
526
 
510
527
  if args.debug or args.focaldebug:
@@ -579,54 +596,94 @@ def retroglm(args):
579
596
  glmmean,
580
597
  rvalue,
581
598
  r2value,
582
- fitNorm[:, :2],
583
- fitcoeff[:, :2],
599
+ fitNorm[:, : (args.refineglmderivs + 1)],
600
+ fitcoeff[:, : (args.refineglmderivs + 1)],
584
601
  movingsignal,
585
602
  lagtc,
586
603
  filtereddata,
587
604
  LGR,
588
605
  TimingLGR,
589
606
  therunoptions,
607
+ glmderivs=args.refineglmderivs,
590
608
  debug=args.debug,
591
609
  )
592
610
 
593
- medfiltglmderivratios, filteredglmderivratios, delayoffsetMAD = (
594
- tide_refinedelay.filterderivratios(
595
- glmderivratios,
596
- (xsize, ysize, numslices),
597
- validvoxels,
598
- (xdim, ydim, slicedim),
599
- gausssigma=args.delayoffsetgausssigma,
600
- patchthresh=args.delaypatchthresh,
601
- fileiscifti=False,
602
- textio=False,
603
- rt_floattype=rt_floattype,
611
+ if args.refineglmderivs == 1:
612
+ medfiltglmderivratios, filteredglmderivratios, delayoffsetMAD = (
613
+ tide_refinedelay.filterderivratios(
614
+ glmderivratios,
615
+ (xsize, ysize, numslices),
616
+ validvoxels,
617
+ (xdim, ydim, slicedim),
618
+ gausssigma=args.delayoffsetgausssigma,
619
+ patchthresh=args.delaypatchthresh,
620
+ fileiscifti=False,
621
+ textio=False,
622
+ rt_floattype=rt_floattype,
623
+ debug=args.debug,
624
+ )
625
+ )
626
+
627
+ # find the mapping of glm ratios to delays
628
+ tide_refinedelay.trainratiotooffset(
629
+ genlagtc,
630
+ initial_fmri_x,
631
+ outputname,
632
+ args.outputlevel,
633
+ mindelay=args.mindelay,
634
+ maxdelay=args.maxdelay,
635
+ numpoints=args.numpoints,
604
636
  debug=args.debug,
605
637
  )
606
- )
638
+ TimingLGR.info("Refinement calibration end")
639
+
640
+ # now calculate the delay offsets
641
+ TimingLGR.info("Calculating delay offsets")
642
+ delayoffset = np.zeros_like(filteredglmderivratios)
643
+ if args.focaldebug:
644
+ print(f"calculating delayoffsets for {filteredglmderivratios.shape[0]} voxels")
645
+ for i in range(filteredglmderivratios.shape[0]):
646
+ delayoffset[i] = tide_refinedelay.ratiotodelay(filteredglmderivratios[i])
647
+ """delayoffset[i] = tide_refinedelay.coffstodelay(
648
+ np.asarray([filteredglmderivratios[i]]),
649
+ mindelay=args.mindelay,
650
+ maxdelay=args.maxdelay,
651
+ )"""
652
+
653
+ refinedvoxelstoreport = filteredglmderivratios.shape[0]
654
+ else:
655
+ medfiltglmderivratios = np.zeros_like(glmderivratios)
656
+ filteredglmderivratios = np.zeros_like(glmderivratios)
657
+ delayoffsetMAD = np.zeros(args.refineglmderivs, dtype=float)
658
+ for i in range(args.refineglmderivs):
659
+ medfiltglmderivratios[i, :], filteredglmderivratios[i, :], delayoffsetMAD[i] = (
660
+ tide_refinedelay.filterderivratios(
661
+ glmderivratios[i, :],
662
+ (xsize, ysize, numslices),
663
+ validvoxels,
664
+ (xdim, ydim, slicedim),
665
+ gausssigma=args.delayoffsetgausssigma,
666
+ patchthresh=args.delaypatchthresh,
667
+ fileiscifti=False,
668
+ textio=False,
669
+ rt_floattype=rt_floattype,
670
+ debug=args.debug,
671
+ )
672
+ )
673
+
674
+ # now calculate the delay offsets
675
+ delayoffset = np.zeros_like(filteredglmderivratios[0, :])
676
+ if args.debug:
677
+ print(f"calculating delayoffsets for {filteredglmderivratios.shape[1]} voxels")
678
+ for i in range(filteredglmderivratios.shape[1]):
679
+ delayoffset[i] = tide_refinedelay.coffstodelay(
680
+ filteredglmderivratios[:, i],
681
+ mindelay=args.mindelay,
682
+ maxdelay=args.maxdelay,
683
+ )
684
+ refinedvoxelstoreport = filteredglmderivratios.shape[1]
607
685
 
608
- # find the mapping of glm ratios to delays
609
- tide_refinedelay.trainratiotooffset(
610
- genlagtc,
611
- initial_fmri_x,
612
- outputname,
613
- args.outputlevel,
614
- mindelay=args.mindelay,
615
- maxdelay=args.maxdelay,
616
- numpoints=args.numpoints,
617
- debug=args.debug,
618
- )
619
- TimingLGR.info("Refinement calibration end")
620
-
621
- # now calculate the delay offsets
622
- TimingLGR.info("Calculating delay offsets")
623
- delayoffset = filteredglmderivratios * 0.0
624
- if args.focaldebug:
625
- print(f"calculating delayoffsets for {filteredglmderivratios.shape[0]} voxels")
626
- for i in range(filteredglmderivratios.shape[0]):
627
- delayoffset[i] = tide_refinedelay.ratiotodelay(filteredglmderivratios[i])
628
686
  namesuffix = "_desc-delayoffset_hist"
629
-
630
687
  tide_stats.makeandsavehistogram(
631
688
  delayoffset,
632
689
  therunoptions["histlen"],
@@ -641,7 +698,7 @@ def retroglm(args):
641
698
  TimingLGR.info(
642
699
  "Delay offset calculation done",
643
700
  {
644
- "message2": filteredglmderivratios.shape[0],
701
+ "message2": refinedvoxelstoreport,
645
702
  "message3": "voxels",
646
703
  },
647
704
  )
@@ -824,28 +881,56 @@ def retroglm(args):
824
881
  ]
825
882
 
826
883
  if args.refinedelay:
884
+ if args.refineglmderivs > 1:
885
+ for i in range(args.refineglmderivs):
886
+ maplist += [
887
+ (
888
+ glmderivratios[i, :],
889
+ f"glmderivratios_{i}",
890
+ "map",
891
+ None,
892
+ f"Ratio of derivative {i+1} of delayed sLFO to the delayed sLFO",
893
+ ),
894
+ (
895
+ medfiltglmderivratios[i, :],
896
+ f"medfiltglmderivratios_{i}",
897
+ "map",
898
+ None,
899
+ f"Median filtered version of the glmderivratios_{i} map",
900
+ ),
901
+ (
902
+ filteredglmderivratios[i, :],
903
+ f"filteredglmderivratios_{i}",
904
+ "map",
905
+ None,
906
+ f"glmderivratios_{i}, with outliers patched using median filtered data",
907
+ ),
908
+ ]
909
+ else:
910
+ maplist += [
911
+ (
912
+ glmderivratios,
913
+ "glmderivratios",
914
+ "map",
915
+ None,
916
+ "Ratio of the first derivative of delayed sLFO to the delayed sLFO",
917
+ ),
918
+ (
919
+ medfiltglmderivratios,
920
+ "medfiltglmderivratios",
921
+ "map",
922
+ None,
923
+ "Median filtered version of the glmderivratios map",
924
+ ),
925
+ (
926
+ filteredglmderivratios,
927
+ "filteredglmderivratios",
928
+ "map",
929
+ None,
930
+ "glmderivratios, with outliers patched using median filtered data",
931
+ ),
932
+ ]
827
933
  maplist += [
828
- (
829
- glmderivratios,
830
- "glmderivratios",
831
- "map",
832
- None,
833
- "Ratio of the first derivative of delayed sLFO to the delayed sLFO",
834
- ),
835
- (
836
- medfiltglmderivratios,
837
- "medfiltglmderivratios",
838
- "map",
839
- None,
840
- "Median filtered version of the glmderivratios map",
841
- ),
842
- (
843
- filteredglmderivratios,
844
- "filteredglmderivratios",
845
- "map",
846
- None,
847
- "glmderivratios, with outliers patched using median filtered data",
848
- ),
849
934
  (
850
935
  delayoffset,
851
936
  "delayoffset",
@@ -87,7 +87,7 @@ def _get_parser():
87
87
  "--dataset",
88
88
  nargs="*",
89
89
  help=(
90
- "Use this dataset root name (skip initial selection step). The root name is the entire path "
90
+ "Specify one or more dataset root names (skip initial selection step). The root name is the entire path "
91
91
  "to the rapidtide output data (including the underscore) that precedes 'desc-maxtime_map.nii.gz'"
92
92
  ),
93
93
  dest="datafileroot",
@@ -106,8 +106,12 @@ def _get_parser():
106
106
  "--uistyle",
107
107
  action="store",
108
108
  type=str,
109
- choices=["normal", "old", "big"],
110
- help="Set the window layout style. Default is 'normal'.",
109
+ choices=["normal", "big"],
110
+ help=(
111
+ "Set the window layout style. The 'normal' uistyle loads 8 data maps into display panes, "
112
+ "and fits comfortably on the screen of a 14in MacbookPro screen. The 'big' uistyle has 16 display "
113
+ "panes, and fits on a 16in MBP screen. Default is 'normal'."
114
+ ),
111
115
  default="normal",
112
116
  )
113
117
  parser.add_argument(
@@ -120,7 +124,7 @@ def _get_parser():
120
124
  )
121
125
  parser.add_argument(
122
126
  "--ignoredimmatch",
123
- help="Do not check to see if dataset sizes match",
127
+ help="Do not check to see if dataset sizes match. This is almost certainly a terrible idea.",
124
128
  dest="ignoredimmatch",
125
129
  action="store_true",
126
130
  default=False,
@@ -1114,6 +1118,7 @@ def setMask(maskname):
1114
1118
  }
1115
1119
  print(maskinfodicts[maskname]["msg"])
1116
1120
  ui.setMask_Button.setText(maskinfodicts[maskname]["label"])
1121
+ currentdataset.setFuncMaskName(maskname)
1117
1122
  for themap in currentdataset.loadedfuncmaps:
1118
1123
  if maskname == "nomask":
1119
1124
  overlays[themap].setFuncMask(None)
@@ -1149,16 +1154,19 @@ def overlay_radioButton_clicked(which, enabled):
1149
1154
  thedispmin = overlays[currentdataset.focusmap].dispmin
1150
1155
  thedispmax = overlays[currentdataset.focusmap].dispmax
1151
1156
  if verbosity > 1:
1152
- print("currentdataset.focusmap set to ", currentdataset.focusmap)
1153
- if overlays[currentdataset.focusmap].lut_state == gen_gray_state():
1157
+ print(f"currentdataset.focusmap set to {currentdataset.focusmap}")
1158
+ print(
1159
+ f"overlays[currentdataset.focusmap].LUTname set to {overlays[currentdataset.focusmap].LUTname}"
1160
+ )
1161
+ if overlays[currentdataset.focusmap].LUTname == "gray":
1154
1162
  ui.gray_radioButton.setChecked(True)
1155
- elif overlays[currentdataset.focusmap].lut_state == gen_thermal_state():
1163
+ elif overlays[currentdataset.focusmap].LUTname == "thermal":
1156
1164
  ui.thermal_radioButton.setChecked(True)
1157
- elif overlays[currentdataset.focusmap].lut_state == gen_plasma_state():
1165
+ elif overlays[currentdataset.focusmap].LUTname == "plasma":
1158
1166
  ui.plasma_radioButton.setChecked(True)
1159
- elif overlays[currentdataset.focusmap].lut_state == gen_viridis_state():
1167
+ elif overlays[currentdataset.focusmap].LUTname == "viridis":
1160
1168
  ui.viridis_radioButton.setChecked(True)
1161
- elif overlays[currentdataset.focusmap].lut_state == gen_turbo_state():
1169
+ elif overlays[currentdataset.focusmap].LUTname == "turbo":
1162
1170
  ui.turbo_radioButton.setChecked(True)
1163
1171
  else:
1164
1172
  ui.rainbow_radioButton.setChecked(True)
@@ -1563,9 +1571,10 @@ def activateDataset(currentdataset, ui, win, defaultdict, overlayGraphicsViews,
1563
1571
  overlays["atlas"].setGeomMask(thegeommask)
1564
1572
  overlays["atlas"].setFuncMask(overlays["atlasmask"].data)
1565
1573
 
1566
- if verbosity > 0:
1567
- for theoverlay in overlays:
1568
- overlays[theoverlay].summarize()
1574
+ if not panesinitialized:
1575
+ if verbosity > 0:
1576
+ for theoverlay in overlays:
1577
+ overlays[theoverlay].summarize()
1569
1578
 
1570
1579
  if verbosity > 1:
1571
1580
  print("focusmap is:", currentdataset.focusmap, "bgmap is:", bgmap)
@@ -1668,6 +1677,11 @@ def activateDataset(currentdataset, ui, win, defaultdict, overlayGraphicsViews,
1668
1677
  updateRegressor()
1669
1678
  updateRegressorSpectrum()
1670
1679
 
1680
+ # update the mask menu
1681
+ if currentdataset.funcmaskname is not None:
1682
+ print(f"updating the mask menu to {currentdataset.funcmaskname}")
1683
+ setMask(currentdataset.funcmaskname)
1684
+
1671
1685
 
1672
1686
  def loadpane(
1673
1687
  themap,
@@ -1968,13 +1982,13 @@ def tidepool(args):
1968
1982
  "funcmask": "p_lt_0p050_mask",
1969
1983
  },
1970
1984
  "lagsigma": {
1971
- "colormap": gen_spectrum_state(),
1985
+ "colormap": gen_plasma_state(),
1972
1986
  "label": "Similarity width",
1973
1987
  "display": True,
1974
1988
  "funcmask": "p_lt_0p050_mask",
1975
1989
  },
1976
1990
  "MTT": {
1977
- "colormap": gen_spectrum_state(),
1991
+ "colormap": gen_plasma_state(),
1978
1992
  "label": "MTT",
1979
1993
  "display": extramaps,
1980
1994
  "funcmask": "p_lt_0p050_mask",
@@ -2457,4 +2471,9 @@ def tidepool(args):
2457
2471
  updateRegressorSpectrum()
2458
2472
  uiinitialized = True
2459
2473
 
2474
+ # for profiling
2475
+ """for i in range(20):
2476
+ selectDataset((i + 1) % 2)
2477
+ sys.exit(0)"""
2478
+
2460
2479
  QtWidgets.QApplication.instance().exec()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: rapidtide
3
- Version: 3.0a10
3
+ Version: 3.0a12
4
4
  Summary: Tools for performing correlation analysis on fMRI data.
5
5
  Author: Taylor Salo, Daniel M. Drucker, Ph.D., Jeffrey N Stout, Yaroslav O. Halchenko, Derek Monroe
6
6
  Author-email: "Blaise deB. Frederick" <blaise.frederick@gmail.com>