rapidtide 2.9.5__py3-none-any.whl → 3.1.3__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 (405) hide show
  1. cloud/gmscalc-HCPYA +1 -1
  2. cloud/mount-and-run +2 -0
  3. cloud/rapidtide-HCPYA +3 -3
  4. rapidtide/Colortables.py +538 -38
  5. rapidtide/OrthoImageItem.py +1094 -51
  6. rapidtide/RapidtideDataset.py +1709 -114
  7. rapidtide/__init__.py +0 -8
  8. rapidtide/_version.py +4 -4
  9. rapidtide/calccoherence.py +242 -97
  10. rapidtide/calcnullsimfunc.py +240 -140
  11. rapidtide/calcsimfunc.py +314 -129
  12. rapidtide/correlate.py +1211 -389
  13. rapidtide/data/examples/src/testLD +56 -0
  14. rapidtide/data/examples/src/test_findmaxlag.py +2 -2
  15. rapidtide/data/examples/src/test_mlregressallt.py +32 -17
  16. rapidtide/data/examples/src/testalign +1 -1
  17. rapidtide/data/examples/src/testatlasaverage +35 -7
  18. rapidtide/data/examples/src/testboth +21 -0
  19. rapidtide/data/examples/src/testcifti +11 -0
  20. rapidtide/data/examples/src/testdelayvar +13 -0
  21. rapidtide/data/examples/src/testdlfilt +25 -0
  22. rapidtide/data/examples/src/testfft +35 -0
  23. rapidtide/data/examples/src/testfileorfloat +37 -0
  24. rapidtide/data/examples/src/testfmri +94 -27
  25. rapidtide/data/examples/src/testfuncs +3 -3
  26. rapidtide/data/examples/src/testglmfilt +8 -6
  27. rapidtide/data/examples/src/testhappy +84 -51
  28. rapidtide/data/examples/src/testinitdelay +19 -0
  29. rapidtide/data/examples/src/testmodels +33 -0
  30. rapidtide/data/examples/src/testnewrefine +26 -0
  31. rapidtide/data/examples/src/testnoiseamp +21 -0
  32. rapidtide/data/examples/src/testppgproc +17 -0
  33. rapidtide/data/examples/src/testrefineonly +22 -0
  34. rapidtide/data/examples/src/testretro +26 -13
  35. rapidtide/data/examples/src/testretrolagtcs +16 -0
  36. rapidtide/data/examples/src/testrolloff +11 -0
  37. rapidtide/data/examples/src/testsimdata +45 -28
  38. rapidtide/data/models/model_cnn_pytorch/loss.png +0 -0
  39. rapidtide/data/models/model_cnn_pytorch/loss.txt +1 -0
  40. rapidtide/data/models/model_cnn_pytorch/model.pth +0 -0
  41. rapidtide/data/models/model_cnn_pytorch/model_meta.json +68 -0
  42. rapidtide/data/models/model_cnn_pytorch_fulldata/loss.png +0 -0
  43. rapidtide/data/models/model_cnn_pytorch_fulldata/loss.txt +1 -0
  44. rapidtide/data/models/model_cnn_pytorch_fulldata/model.pth +0 -0
  45. rapidtide/data/models/model_cnn_pytorch_fulldata/model_meta.json +80 -0
  46. rapidtide/data/models/model_cnnbp_pytorch_fullldata/loss.png +0 -0
  47. rapidtide/data/models/model_cnnbp_pytorch_fullldata/loss.txt +1 -0
  48. rapidtide/data/models/model_cnnbp_pytorch_fullldata/model.pth +0 -0
  49. rapidtide/data/models/model_cnnbp_pytorch_fullldata/model_meta.json +138 -0
  50. rapidtide/data/models/model_cnnfft_pytorch_fulldata/loss.png +0 -0
  51. rapidtide/data/models/model_cnnfft_pytorch_fulldata/loss.txt +1 -0
  52. rapidtide/data/models/model_cnnfft_pytorch_fulldata/model.pth +0 -0
  53. rapidtide/data/models/model_cnnfft_pytorch_fulldata/model_meta.json +128 -0
  54. rapidtide/data/models/model_ppgattention_pytorch_w128_fulldata/loss.png +0 -0
  55. rapidtide/data/models/model_ppgattention_pytorch_w128_fulldata/loss.txt +1 -0
  56. rapidtide/data/models/model_ppgattention_pytorch_w128_fulldata/model.pth +0 -0
  57. rapidtide/data/models/model_ppgattention_pytorch_w128_fulldata/model_meta.json +49 -0
  58. rapidtide/data/models/model_revised_tf2/model.keras +0 -0
  59. rapidtide/data/models/{model_serdar → model_revised_tf2}/model_meta.json +1 -1
  60. rapidtide/data/models/model_serdar2_tf2/model.keras +0 -0
  61. rapidtide/data/models/{model_serdar2 → model_serdar2_tf2}/model_meta.json +1 -1
  62. rapidtide/data/models/model_serdar_tf2/model.keras +0 -0
  63. rapidtide/data/models/{model_revised → model_serdar_tf2}/model_meta.json +1 -1
  64. rapidtide/data/reference/HCP1200v2_MTT_2mm.nii.gz +0 -0
  65. rapidtide/data/reference/HCP1200v2_binmask_2mm.nii.gz +0 -0
  66. rapidtide/data/reference/HCP1200v2_csf_2mm.nii.gz +0 -0
  67. rapidtide/data/reference/HCP1200v2_gray_2mm.nii.gz +0 -0
  68. rapidtide/data/reference/HCP1200v2_graylaghist.json +7 -0
  69. rapidtide/data/reference/HCP1200v2_graylaghist.tsv.gz +0 -0
  70. rapidtide/data/reference/HCP1200v2_laghist.json +7 -0
  71. rapidtide/data/reference/HCP1200v2_laghist.tsv.gz +0 -0
  72. rapidtide/data/reference/HCP1200v2_mask_2mm.nii.gz +0 -0
  73. rapidtide/data/reference/HCP1200v2_maxcorr_2mm.nii.gz +0 -0
  74. rapidtide/data/reference/HCP1200v2_maxtime_2mm.nii.gz +0 -0
  75. rapidtide/data/reference/HCP1200v2_maxwidth_2mm.nii.gz +0 -0
  76. rapidtide/data/reference/HCP1200v2_negmask_2mm.nii.gz +0 -0
  77. rapidtide/data/reference/HCP1200v2_timepercentile_2mm.nii.gz +0 -0
  78. rapidtide/data/reference/HCP1200v2_white_2mm.nii.gz +0 -0
  79. rapidtide/data/reference/HCP1200v2_whitelaghist.json +7 -0
  80. rapidtide/data/reference/HCP1200v2_whitelaghist.tsv.gz +0 -0
  81. rapidtide/data/reference/JHU-ArterialTerritoriesNoVent-LVL1-seg2.xml +131 -0
  82. rapidtide/data/reference/JHU-ArterialTerritoriesNoVent-LVL1-seg2_regions.txt +60 -0
  83. rapidtide/data/reference/JHU-ArterialTerritoriesNoVent-LVL1-seg2_space-MNI152NLin6Asym_2mm.nii.gz +0 -0
  84. rapidtide/data/reference/JHU-ArterialTerritoriesNoVent-LVL1_space-MNI152NLin2009cAsym_2mm.nii.gz +0 -0
  85. rapidtide/data/reference/JHU-ArterialTerritoriesNoVent-LVL1_space-MNI152NLin2009cAsym_2mm_mask.nii.gz +0 -0
  86. rapidtide/data/reference/JHU-ArterialTerritoriesNoVent-LVL1_space-MNI152NLin6Asym_2mm_mask.nii.gz +0 -0
  87. rapidtide/data/reference/JHU-ArterialTerritoriesNoVent-LVL2_space-MNI152NLin6Asym_2mm_mask.nii.gz +0 -0
  88. rapidtide/data/reference/MNI152_T1_1mm_Brain_FAST_seg.nii.gz +0 -0
  89. rapidtide/data/reference/MNI152_T1_1mm_Brain_Mask.nii.gz +0 -0
  90. rapidtide/data/reference/MNI152_T1_2mm_Brain_FAST_seg.nii.gz +0 -0
  91. rapidtide/data/reference/MNI152_T1_2mm_Brain_Mask.nii.gz +0 -0
  92. rapidtide/decorators.py +91 -0
  93. rapidtide/dlfilter.py +2553 -414
  94. rapidtide/dlfiltertorch.py +5201 -0
  95. rapidtide/externaltools.py +328 -13
  96. rapidtide/fMRIData_class.py +178 -0
  97. rapidtide/ffttools.py +168 -0
  98. rapidtide/filter.py +2704 -1462
  99. rapidtide/fit.py +2361 -579
  100. rapidtide/genericmultiproc.py +197 -0
  101. rapidtide/happy_supportfuncs.py +3255 -548
  102. rapidtide/helper_classes.py +590 -1181
  103. rapidtide/io.py +2569 -468
  104. rapidtide/linfitfiltpass.py +784 -0
  105. rapidtide/makelaggedtcs.py +267 -97
  106. rapidtide/maskutil.py +555 -25
  107. rapidtide/miscmath.py +867 -137
  108. rapidtide/multiproc.py +217 -44
  109. rapidtide/patchmatch.py +752 -0
  110. rapidtide/peakeval.py +32 -32
  111. rapidtide/ppgproc.py +2205 -0
  112. rapidtide/qualitycheck.py +353 -40
  113. rapidtide/refinedelay.py +854 -0
  114. rapidtide/refineregressor.py +939 -0
  115. rapidtide/resample.py +725 -204
  116. rapidtide/scripts/__init__.py +1 -0
  117. rapidtide/scripts/{adjustoffset → adjustoffset.py} +7 -2
  118. rapidtide/scripts/{aligntcs → aligntcs.py} +7 -2
  119. rapidtide/scripts/{applydlfilter → applydlfilter.py} +7 -2
  120. rapidtide/scripts/applyppgproc.py +28 -0
  121. rapidtide/scripts/{atlasaverage → atlasaverage.py} +7 -2
  122. rapidtide/scripts/{atlastool → atlastool.py} +7 -2
  123. rapidtide/scripts/{calcicc → calcicc.py} +7 -2
  124. rapidtide/scripts/{calctexticc → calctexticc.py} +7 -2
  125. rapidtide/scripts/{calcttest → calcttest.py} +7 -2
  126. rapidtide/scripts/{ccorrica → ccorrica.py} +7 -2
  127. rapidtide/scripts/delayvar.py +28 -0
  128. rapidtide/scripts/{diffrois → diffrois.py} +7 -2
  129. rapidtide/scripts/{endtidalproc → endtidalproc.py} +7 -2
  130. rapidtide/scripts/{fdica → fdica.py} +7 -2
  131. rapidtide/scripts/{filtnifti → filtnifti.py} +7 -2
  132. rapidtide/scripts/{filttc → filttc.py} +7 -2
  133. rapidtide/scripts/{fingerprint → fingerprint.py} +20 -16
  134. rapidtide/scripts/{fixtr → fixtr.py} +7 -2
  135. rapidtide/scripts/{gmscalc → gmscalc.py} +7 -2
  136. rapidtide/scripts/{happy → happy.py} +7 -2
  137. rapidtide/scripts/{happy2std → happy2std.py} +7 -2
  138. rapidtide/scripts/{happywarp → happywarp.py} +8 -4
  139. rapidtide/scripts/{histnifti → histnifti.py} +7 -2
  140. rapidtide/scripts/{histtc → histtc.py} +7 -2
  141. rapidtide/scripts/{glmfilt → linfitfilt.py} +7 -4
  142. rapidtide/scripts/{localflow → localflow.py} +7 -2
  143. rapidtide/scripts/{mergequality → mergequality.py} +7 -2
  144. rapidtide/scripts/{pairproc → pairproc.py} +7 -2
  145. rapidtide/scripts/{pairwisemergenifti → pairwisemergenifti.py} +7 -2
  146. rapidtide/scripts/{physiofreq → physiofreq.py} +7 -2
  147. rapidtide/scripts/{pixelcomp → pixelcomp.py} +7 -2
  148. rapidtide/scripts/{plethquality → plethquality.py} +7 -2
  149. rapidtide/scripts/{polyfitim → polyfitim.py} +7 -2
  150. rapidtide/scripts/{proj2flow → proj2flow.py} +7 -2
  151. rapidtide/scripts/{rankimage → rankimage.py} +7 -2
  152. rapidtide/scripts/{rapidtide → rapidtide.py} +7 -2
  153. rapidtide/scripts/{rapidtide2std → rapidtide2std.py} +7 -2
  154. rapidtide/scripts/{resamplenifti → resamplenifti.py} +7 -2
  155. rapidtide/scripts/{resampletc → resampletc.py} +7 -2
  156. rapidtide/scripts/retrolagtcs.py +28 -0
  157. rapidtide/scripts/retroregress.py +28 -0
  158. rapidtide/scripts/{roisummarize → roisummarize.py} +7 -2
  159. rapidtide/scripts/{runqualitycheck → runqualitycheck.py} +7 -2
  160. rapidtide/scripts/{showarbcorr → showarbcorr.py} +7 -2
  161. rapidtide/scripts/{showhist → showhist.py} +7 -2
  162. rapidtide/scripts/{showstxcorr → showstxcorr.py} +7 -2
  163. rapidtide/scripts/{showtc → showtc.py} +7 -2
  164. rapidtide/scripts/{showxcorr_legacy → showxcorr_legacy.py} +8 -8
  165. rapidtide/scripts/{showxcorrx → showxcorrx.py} +7 -2
  166. rapidtide/scripts/{showxy → showxy.py} +7 -2
  167. rapidtide/scripts/{simdata → simdata.py} +7 -2
  168. rapidtide/scripts/{spatialdecomp → spatialdecomp.py} +7 -2
  169. rapidtide/scripts/{spatialfit → spatialfit.py} +7 -2
  170. rapidtide/scripts/{spatialmi → spatialmi.py} +7 -2
  171. rapidtide/scripts/{spectrogram → spectrogram.py} +7 -2
  172. rapidtide/scripts/stupidramtricks.py +238 -0
  173. rapidtide/scripts/{synthASL → synthASL.py} +7 -2
  174. rapidtide/scripts/{tcfrom2col → tcfrom2col.py} +7 -2
  175. rapidtide/scripts/{tcfrom3col → tcfrom3col.py} +7 -2
  176. rapidtide/scripts/{temporaldecomp → temporaldecomp.py} +7 -2
  177. rapidtide/scripts/{testhrv → testhrv.py} +1 -1
  178. rapidtide/scripts/{threeD → threeD.py} +7 -2
  179. rapidtide/scripts/{tidepool → tidepool.py} +7 -2
  180. rapidtide/scripts/{variabilityizer → variabilityizer.py} +7 -2
  181. rapidtide/simFuncClasses.py +2113 -0
  182. rapidtide/simfuncfit.py +312 -108
  183. rapidtide/stats.py +579 -247
  184. rapidtide/tests/.coveragerc +27 -6
  185. rapidtide-2.9.5.data/scripts/fdica → rapidtide/tests/cleanposttest +4 -6
  186. rapidtide/tests/happycomp +9 -0
  187. rapidtide/tests/resethappytargets +1 -1
  188. rapidtide/tests/resetrapidtidetargets +1 -1
  189. rapidtide/tests/resettargets +1 -1
  190. rapidtide/tests/runlocaltest +3 -3
  191. rapidtide/tests/showkernels +1 -1
  192. rapidtide/tests/test_aliasedcorrelate.py +4 -4
  193. rapidtide/tests/test_aligntcs.py +1 -1
  194. rapidtide/tests/test_calcicc.py +1 -1
  195. rapidtide/tests/test_cleanregressor.py +184 -0
  196. rapidtide/tests/test_congrid.py +70 -81
  197. rapidtide/tests/test_correlate.py +1 -1
  198. rapidtide/tests/test_corrpass.py +4 -4
  199. rapidtide/tests/test_delayestimation.py +54 -59
  200. rapidtide/tests/test_dlfiltertorch.py +437 -0
  201. rapidtide/tests/test_doresample.py +2 -2
  202. rapidtide/tests/test_externaltools.py +69 -0
  203. rapidtide/tests/test_fastresampler.py +9 -5
  204. rapidtide/tests/test_filter.py +96 -57
  205. rapidtide/tests/test_findmaxlag.py +50 -19
  206. rapidtide/tests/test_fullrunhappy_v1.py +15 -10
  207. rapidtide/tests/test_fullrunhappy_v2.py +19 -13
  208. rapidtide/tests/test_fullrunhappy_v3.py +28 -13
  209. rapidtide/tests/test_fullrunhappy_v4.py +30 -11
  210. rapidtide/tests/test_fullrunhappy_v5.py +62 -0
  211. rapidtide/tests/test_fullrunrapidtide_v1.py +61 -7
  212. rapidtide/tests/test_fullrunrapidtide_v2.py +27 -15
  213. rapidtide/tests/test_fullrunrapidtide_v3.py +28 -8
  214. rapidtide/tests/test_fullrunrapidtide_v4.py +16 -8
  215. rapidtide/tests/test_fullrunrapidtide_v5.py +15 -6
  216. rapidtide/tests/test_fullrunrapidtide_v6.py +142 -0
  217. rapidtide/tests/test_fullrunrapidtide_v7.py +114 -0
  218. rapidtide/tests/test_fullrunrapidtide_v8.py +66 -0
  219. rapidtide/tests/test_getparsers.py +158 -0
  220. rapidtide/tests/test_io.py +59 -18
  221. rapidtide/tests/{test_glmpass.py → test_linfitfiltpass.py} +10 -10
  222. rapidtide/tests/test_mi.py +1 -1
  223. rapidtide/tests/test_miscmath.py +1 -1
  224. rapidtide/tests/test_motionregress.py +5 -5
  225. rapidtide/tests/test_nullcorr.py +6 -9
  226. rapidtide/tests/test_padvec.py +216 -0
  227. rapidtide/tests/test_parserfuncs.py +101 -0
  228. rapidtide/tests/test_phaseanalysis.py +1 -1
  229. rapidtide/tests/test_rapidtideparser.py +59 -53
  230. rapidtide/tests/test_refinedelay.py +296 -0
  231. rapidtide/tests/test_runmisc.py +5 -5
  232. rapidtide/tests/test_sharedmem.py +60 -0
  233. rapidtide/tests/test_simroundtrip.py +132 -0
  234. rapidtide/tests/test_simulate.py +1 -1
  235. rapidtide/tests/test_stcorrelate.py +4 -2
  236. rapidtide/tests/test_timeshift.py +2 -2
  237. rapidtide/tests/test_valtoindex.py +1 -1
  238. rapidtide/tests/test_zRapidtideDataset.py +5 -3
  239. rapidtide/tests/utils.py +10 -9
  240. rapidtide/tidepoolTemplate.py +88 -70
  241. rapidtide/tidepoolTemplate.ui +60 -46
  242. rapidtide/tidepoolTemplate_alt.py +88 -53
  243. rapidtide/tidepoolTemplate_alt.ui +62 -52
  244. rapidtide/tidepoolTemplate_alt_qt6.py +921 -0
  245. rapidtide/tidepoolTemplate_big.py +1125 -0
  246. rapidtide/tidepoolTemplate_big.ui +2386 -0
  247. rapidtide/tidepoolTemplate_big_qt6.py +1129 -0
  248. rapidtide/tidepoolTemplate_qt6.py +793 -0
  249. rapidtide/util.py +1389 -148
  250. rapidtide/voxelData.py +1048 -0
  251. rapidtide/wiener.py +138 -25
  252. rapidtide/wiener2.py +114 -8
  253. rapidtide/workflows/adjustoffset.py +107 -5
  254. rapidtide/workflows/aligntcs.py +86 -3
  255. rapidtide/workflows/applydlfilter.py +231 -89
  256. rapidtide/workflows/applyppgproc.py +540 -0
  257. rapidtide/workflows/atlasaverage.py +309 -48
  258. rapidtide/workflows/atlastool.py +130 -9
  259. rapidtide/workflows/calcSimFuncMap.py +490 -0
  260. rapidtide/workflows/calctexticc.py +202 -10
  261. rapidtide/workflows/ccorrica.py +123 -15
  262. rapidtide/workflows/cleanregressor.py +415 -0
  263. rapidtide/workflows/delayvar.py +1268 -0
  264. rapidtide/workflows/diffrois.py +84 -6
  265. rapidtide/workflows/endtidalproc.py +149 -9
  266. rapidtide/workflows/fdica.py +197 -17
  267. rapidtide/workflows/filtnifti.py +71 -4
  268. rapidtide/workflows/filttc.py +76 -5
  269. rapidtide/workflows/fitSimFuncMap.py +578 -0
  270. rapidtide/workflows/fixtr.py +74 -4
  271. rapidtide/workflows/gmscalc.py +116 -6
  272. rapidtide/workflows/happy.py +1242 -480
  273. rapidtide/workflows/happy2std.py +145 -13
  274. rapidtide/workflows/happy_parser.py +277 -59
  275. rapidtide/workflows/histnifti.py +120 -4
  276. rapidtide/workflows/histtc.py +85 -4
  277. rapidtide/workflows/{glmfilt.py → linfitfilt.py} +128 -14
  278. rapidtide/workflows/localflow.py +329 -29
  279. rapidtide/workflows/mergequality.py +80 -4
  280. rapidtide/workflows/niftidecomp.py +323 -19
  281. rapidtide/workflows/niftistats.py +178 -8
  282. rapidtide/workflows/pairproc.py +99 -5
  283. rapidtide/workflows/pairwisemergenifti.py +86 -3
  284. rapidtide/workflows/parser_funcs.py +1488 -56
  285. rapidtide/workflows/physiofreq.py +139 -12
  286. rapidtide/workflows/pixelcomp.py +211 -9
  287. rapidtide/workflows/plethquality.py +105 -23
  288. rapidtide/workflows/polyfitim.py +159 -19
  289. rapidtide/workflows/proj2flow.py +76 -3
  290. rapidtide/workflows/rankimage.py +115 -8
  291. rapidtide/workflows/rapidtide.py +1833 -1919
  292. rapidtide/workflows/rapidtide2std.py +101 -3
  293. rapidtide/workflows/rapidtide_parser.py +607 -372
  294. rapidtide/workflows/refineDelayMap.py +249 -0
  295. rapidtide/workflows/refineRegressor.py +1215 -0
  296. rapidtide/workflows/regressfrommaps.py +308 -0
  297. rapidtide/workflows/resamplenifti.py +86 -4
  298. rapidtide/workflows/resampletc.py +92 -4
  299. rapidtide/workflows/retrolagtcs.py +442 -0
  300. rapidtide/workflows/retroregress.py +1501 -0
  301. rapidtide/workflows/roisummarize.py +176 -7
  302. rapidtide/workflows/runqualitycheck.py +72 -7
  303. rapidtide/workflows/showarbcorr.py +172 -16
  304. rapidtide/workflows/showhist.py +87 -3
  305. rapidtide/workflows/showstxcorr.py +161 -4
  306. rapidtide/workflows/showtc.py +172 -10
  307. rapidtide/workflows/showxcorrx.py +250 -62
  308. rapidtide/workflows/showxy.py +186 -16
  309. rapidtide/workflows/simdata.py +418 -112
  310. rapidtide/workflows/spatialfit.py +83 -8
  311. rapidtide/workflows/spatialmi.py +252 -29
  312. rapidtide/workflows/spectrogram.py +306 -33
  313. rapidtide/workflows/synthASL.py +157 -6
  314. rapidtide/workflows/tcfrom2col.py +77 -3
  315. rapidtide/workflows/tcfrom3col.py +75 -3
  316. rapidtide/workflows/tidepool.py +3829 -666
  317. rapidtide/workflows/utils.py +45 -19
  318. rapidtide/workflows/utils_doc.py +293 -0
  319. rapidtide/workflows/variabilityizer.py +118 -5
  320. {rapidtide-2.9.5.dist-info → rapidtide-3.1.3.dist-info}/METADATA +30 -223
  321. rapidtide-3.1.3.dist-info/RECORD +393 -0
  322. {rapidtide-2.9.5.dist-info → rapidtide-3.1.3.dist-info}/WHEEL +1 -1
  323. rapidtide-3.1.3.dist-info/entry_points.txt +65 -0
  324. rapidtide-3.1.3.dist-info/top_level.txt +2 -0
  325. rapidtide/calcandfitcorrpairs.py +0 -262
  326. rapidtide/data/examples/src/testoutputsize +0 -45
  327. rapidtide/data/models/model_revised/model.h5 +0 -0
  328. rapidtide/data/models/model_serdar/model.h5 +0 -0
  329. rapidtide/data/models/model_serdar2/model.h5 +0 -0
  330. rapidtide/data/reference/ASPECTS_nlin_asym_09c_2mm.nii.gz +0 -0
  331. rapidtide/data/reference/ASPECTS_nlin_asym_09c_2mm_mask.nii.gz +0 -0
  332. rapidtide/data/reference/ATTbasedFlowTerritories_split_nlin_asym_09c_2mm.nii.gz +0 -0
  333. rapidtide/data/reference/ATTbasedFlowTerritories_split_nlin_asym_09c_2mm_mask.nii.gz +0 -0
  334. rapidtide/data/reference/HCP1200_binmask_2mm_2009c_asym.nii.gz +0 -0
  335. rapidtide/data/reference/HCP1200_lag_2mm_2009c_asym.nii.gz +0 -0
  336. rapidtide/data/reference/HCP1200_mask_2mm_2009c_asym.nii.gz +0 -0
  337. rapidtide/data/reference/HCP1200_negmask_2mm_2009c_asym.nii.gz +0 -0
  338. rapidtide/data/reference/HCP1200_sigma_2mm_2009c_asym.nii.gz +0 -0
  339. rapidtide/data/reference/HCP1200_strength_2mm_2009c_asym.nii.gz +0 -0
  340. rapidtide/glmpass.py +0 -434
  341. rapidtide/refine_factored.py +0 -641
  342. rapidtide/scripts/retroglm +0 -23
  343. rapidtide/workflows/glmfrommaps.py +0 -202
  344. rapidtide/workflows/retroglm.py +0 -643
  345. rapidtide-2.9.5.data/scripts/adjustoffset +0 -23
  346. rapidtide-2.9.5.data/scripts/aligntcs +0 -23
  347. rapidtide-2.9.5.data/scripts/applydlfilter +0 -23
  348. rapidtide-2.9.5.data/scripts/atlasaverage +0 -23
  349. rapidtide-2.9.5.data/scripts/atlastool +0 -23
  350. rapidtide-2.9.5.data/scripts/calcicc +0 -22
  351. rapidtide-2.9.5.data/scripts/calctexticc +0 -23
  352. rapidtide-2.9.5.data/scripts/calcttest +0 -22
  353. rapidtide-2.9.5.data/scripts/ccorrica +0 -23
  354. rapidtide-2.9.5.data/scripts/diffrois +0 -23
  355. rapidtide-2.9.5.data/scripts/endtidalproc +0 -23
  356. rapidtide-2.9.5.data/scripts/filtnifti +0 -23
  357. rapidtide-2.9.5.data/scripts/filttc +0 -23
  358. rapidtide-2.9.5.data/scripts/fingerprint +0 -593
  359. rapidtide-2.9.5.data/scripts/fixtr +0 -23
  360. rapidtide-2.9.5.data/scripts/glmfilt +0 -24
  361. rapidtide-2.9.5.data/scripts/gmscalc +0 -22
  362. rapidtide-2.9.5.data/scripts/happy +0 -25
  363. rapidtide-2.9.5.data/scripts/happy2std +0 -23
  364. rapidtide-2.9.5.data/scripts/happywarp +0 -350
  365. rapidtide-2.9.5.data/scripts/histnifti +0 -23
  366. rapidtide-2.9.5.data/scripts/histtc +0 -23
  367. rapidtide-2.9.5.data/scripts/localflow +0 -23
  368. rapidtide-2.9.5.data/scripts/mergequality +0 -23
  369. rapidtide-2.9.5.data/scripts/pairproc +0 -23
  370. rapidtide-2.9.5.data/scripts/pairwisemergenifti +0 -23
  371. rapidtide-2.9.5.data/scripts/physiofreq +0 -23
  372. rapidtide-2.9.5.data/scripts/pixelcomp +0 -23
  373. rapidtide-2.9.5.data/scripts/plethquality +0 -23
  374. rapidtide-2.9.5.data/scripts/polyfitim +0 -23
  375. rapidtide-2.9.5.data/scripts/proj2flow +0 -23
  376. rapidtide-2.9.5.data/scripts/rankimage +0 -23
  377. rapidtide-2.9.5.data/scripts/rapidtide +0 -23
  378. rapidtide-2.9.5.data/scripts/rapidtide2std +0 -23
  379. rapidtide-2.9.5.data/scripts/resamplenifti +0 -23
  380. rapidtide-2.9.5.data/scripts/resampletc +0 -23
  381. rapidtide-2.9.5.data/scripts/retroglm +0 -23
  382. rapidtide-2.9.5.data/scripts/roisummarize +0 -23
  383. rapidtide-2.9.5.data/scripts/runqualitycheck +0 -23
  384. rapidtide-2.9.5.data/scripts/showarbcorr +0 -23
  385. rapidtide-2.9.5.data/scripts/showhist +0 -23
  386. rapidtide-2.9.5.data/scripts/showstxcorr +0 -23
  387. rapidtide-2.9.5.data/scripts/showtc +0 -23
  388. rapidtide-2.9.5.data/scripts/showxcorr_legacy +0 -536
  389. rapidtide-2.9.5.data/scripts/showxcorrx +0 -23
  390. rapidtide-2.9.5.data/scripts/showxy +0 -23
  391. rapidtide-2.9.5.data/scripts/simdata +0 -23
  392. rapidtide-2.9.5.data/scripts/spatialdecomp +0 -23
  393. rapidtide-2.9.5.data/scripts/spatialfit +0 -23
  394. rapidtide-2.9.5.data/scripts/spatialmi +0 -23
  395. rapidtide-2.9.5.data/scripts/spectrogram +0 -23
  396. rapidtide-2.9.5.data/scripts/synthASL +0 -23
  397. rapidtide-2.9.5.data/scripts/tcfrom2col +0 -23
  398. rapidtide-2.9.5.data/scripts/tcfrom3col +0 -23
  399. rapidtide-2.9.5.data/scripts/temporaldecomp +0 -23
  400. rapidtide-2.9.5.data/scripts/threeD +0 -236
  401. rapidtide-2.9.5.data/scripts/tidepool +0 -23
  402. rapidtide-2.9.5.data/scripts/variabilityizer +0 -23
  403. rapidtide-2.9.5.dist-info/RECORD +0 -357
  404. rapidtide-2.9.5.dist-info/top_level.txt +0 -86
  405. {rapidtide-2.9.5.dist-info → rapidtide-3.1.3.dist-info/licenses}/LICENSE +0 -0
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding: utf-8 -*-
3
3
  #
4
- # Copyright 2016-2024 Blaise Frederick
4
+ # Copyright 2016-2025 Blaise Frederick
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
7
7
  # you may not use this file except in compliance with the License.
@@ -17,6 +17,8 @@
17
17
  #
18
18
  #
19
19
  import argparse
20
+ from argparse import Namespace
21
+ from typing import Any, Callable, Dict, List, Optional, Tuple, Union
20
22
 
21
23
  from matplotlib.pyplot import *
22
24
  from tqdm import tqdm
@@ -26,7 +28,32 @@ import rapidtide.io as tide_io
26
28
  import rapidtide.workflows.parser_funcs as pf
27
29
 
28
30
 
29
- def _get_parser():
31
+ def _get_parser() -> Any:
32
+ """
33
+ Create and configure an argument parser for the spatialfit command-line tool.
34
+
35
+ This function sets up an `argparse.ArgumentParser` with specific arguments
36
+ required for fitting a 3D or 4D NIFTI file to a spatial template. It includes
37
+ validation for file inputs and supports optional masking and fitting parameters.
38
+
39
+ Returns
40
+ -------
41
+ argparse.ArgumentParser
42
+ Configured argument parser with defined command-line arguments.
43
+
44
+ Notes
45
+ -----
46
+ The parser is configured with:
47
+ - Required positional arguments: `datafile`, `templatefile`, and `outputroot`.
48
+ - Optional arguments: `--datamask`, `--templatemask`, `--order`, and `--debug`.
49
+
50
+ Examples
51
+ --------
52
+ >>> parser = _get_parser()
53
+ >>> args = parser.parse_args(['data.nii', 'template.nii', 'output_root'])
54
+ >>> print(args.datafile)
55
+ 'data.nii'
56
+ """
30
57
  # get the command line parameters
31
58
  parser = argparse.ArgumentParser(
32
59
  prog="spatialfit",
@@ -80,7 +107,55 @@ def _get_parser():
80
107
  return parser
81
108
 
82
109
 
83
- def spatialfit(args):
110
+ def spatialfit(args: Any) -> None:
111
+ """
112
+ Perform spatial fitting of fMRI data using a template-based linear regression model.
113
+
114
+ This function reads input data and template files, performs masking, and fits a
115
+ linear model at each spatial location to estimate spatially varying linear coefficients,
116
+ offsets, and R² values. It outputs time series of these parameters along with fitted,
117
+ residual, and normalized data volumes.
118
+
119
+ Parameters
120
+ ----------
121
+ args : Any
122
+ Parsed command-line arguments. Expected to contain the following attributes:
123
+ - datafile : str
124
+ Path to the input NIfTI data file.
125
+ - templatefile : str
126
+ Path to the template NIfTI file.
127
+ - dmask : str, optional
128
+ Path to the data mask NIfTI file.
129
+ - tmask : str, optional
130
+ Path to the template mask NIfTI file.
131
+ - outputroot : str
132
+ Root name for output files.
133
+ - debug : bool, optional
134
+ Enable debug printing.
135
+
136
+ Returns
137
+ -------
138
+ None
139
+ This function does not return a value but writes multiple NIfTI and text files
140
+ to disk.
141
+
142
+ Notes
143
+ -----
144
+ The function assumes that the input data and template files have compatible
145
+ spatial dimensions. It performs a linear regression for each timepoint and
146
+ stores the resulting coefficients, offsets, and R² values.
147
+
148
+ Examples
149
+ --------
150
+ >>> import argparse
151
+ >>> args = argparse.Namespace(
152
+ ... datafile='data.nii.gz',
153
+ ... templatefile='template.nii.gz',
154
+ ... outputroot='output',
155
+ ... debug=False
156
+ ... )
157
+ >>> spatialfit(args)
158
+ """
84
159
  # get the command line parameters
85
160
  try:
86
161
  args = _get_parser().parse_args()
@@ -180,7 +255,7 @@ def spatialfit(args):
180
255
  newmask = np.zeros((numspatiallocs), dtype="float")
181
256
  lincoffs = np.zeros((timepoints), dtype="float")
182
257
  offsets = np.zeros((timepoints), dtype="float")
183
- rvals = np.zeros((timepoints), dtype="float")
258
+ r2vals = np.zeros((timepoints), dtype="float")
184
259
 
185
260
  if args.debug:
186
261
  print(fitdata.shape)
@@ -190,7 +265,7 @@ def spatialfit(args):
190
265
  print(newmask.shape)
191
266
  print(lincoffs.shape)
192
267
  print(offsets.shape)
193
- print(rvals.shape)
268
+ print(r2vals.shape)
194
269
 
195
270
  # mask everything
196
271
  print("masking data and template")
@@ -215,10 +290,10 @@ def spatialfit(args):
215
290
  ):
216
291
  if args.debug:
217
292
  print("fitting")
218
- thefit, R = tide_fit.mlregress(maskedtemplate[:, 0], maskeddata[:, thetime])
293
+ thefit, R2 = tide_fit.mlregress(maskedtemplate[:, 0], maskeddata[:, thetime])
219
294
  lincoffs[thetime] = thefit[0, 1]
220
295
  offsets[thetime] = thefit[0, 0]
221
- rvals[thetime] = R
296
+ r2vals[thetime] = R2
222
297
  if args.debug:
223
298
  print("generating fit data")
224
299
  print(
@@ -241,7 +316,7 @@ def spatialfit(args):
241
316
  print("writing time series")
242
317
  tide_io.writenpvecs(lincoffs, args.outputroot + "_lincoffs.txt")
243
318
  tide_io.writenpvecs(offsets, args.outputroot + "_offsets.txt")
244
- tide_io.writenpvecs(rvals, args.outputroot + "_rvals.txt")
319
+ tide_io.writenpvecs(r2vals, args.outputroot + "_r2vals.txt")
245
320
  print("slope mean, std:", np.mean(lincoffs), np.std(lincoffs))
246
321
  print("offset mean, std:", np.mean(offsets), np.std(offsets))
247
322
 
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding: utf-8 -*-
3
3
  #
4
- # Copyright 2016-2024 Blaise Frederick
4
+ # Copyright 2016-2025 Blaise Frederick
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
7
7
  # you may not use this file except in compliance with the License.
@@ -18,8 +18,11 @@
18
18
  #
19
19
  import argparse
20
20
  import sys
21
+ from argparse import Namespace
22
+ from typing import Any, Callable, Dict, List, Optional, Tuple, Union
21
23
 
22
24
  import numpy as np
25
+ from numpy.typing import NDArray
23
26
 
24
27
  import rapidtide.correlate as tide_corr
25
28
  import rapidtide.filter as tide_filt
@@ -28,9 +31,32 @@ import rapidtide.io as tide_io
28
31
  import rapidtide.miscmath as tide_math
29
32
 
30
33
 
31
- def _get_parser():
34
+ def _get_parser() -> Any:
32
35
  """
33
- Argument parser for pixelcomp
36
+ Argument parser for spatialmi.
37
+
38
+ This function constructs and returns an `argparse.ArgumentParser` object configured
39
+ to parse command-line arguments for the `spatialmi` tool, which calculates localized
40
+ spatial mutual information between two NIfTI images.
41
+
42
+ Returns
43
+ -------
44
+ argparse.ArgumentParser
45
+ Configured argument parser for the spatial mutual information calculation tool.
46
+
47
+ Notes
48
+ -----
49
+ The parser requires four mandatory positional arguments: two input NIfTI image filenames,
50
+ two corresponding mask filenames, and an output root name. Optional arguments allow
51
+ customization of the calculation, including neighborhood shape, filtering, normalization,
52
+ and debugging output.
53
+
54
+ Examples
55
+ --------
56
+ >>> parser = _get_parser()
57
+ >>> args = parser.parse_args()
58
+ >>> print(args.inputfilename1)
59
+ 'input1.nii.gz'
34
60
  """
35
61
  parser = argparse.ArgumentParser(
36
62
  prog="spatialmi",
@@ -138,23 +164,77 @@ def _get_parser():
138
164
 
139
165
 
140
166
  def getneighborhood(
141
- indata,
142
- xloc,
143
- yloc,
144
- zloc,
145
- xsize,
146
- ysize,
147
- zsize,
148
- radius,
149
- spherical=False,
150
- kernelwidth=1.5,
151
- slop=0.01,
152
- debug=False,
153
- ):
167
+ indata: NDArray[np.floating[Any]],
168
+ xloc: Any,
169
+ yloc: Any,
170
+ zloc: Any,
171
+ xsize: Any,
172
+ ysize: Any,
173
+ zsize: Any,
174
+ radius: Any,
175
+ spherical: bool = False,
176
+ kernelwidth: float = 1.5,
177
+ slop: float = 0.01,
178
+ debug: bool = False,
179
+ ) -> NDArray[np.floating[Any]]:
180
+ """
181
+ Extract a neighborhood from a 3D dataset, either as a weighted kernel or a spherical region.
182
+
183
+ This function retrieves a local neighborhood around a specified 3D location in a dataset.
184
+ The neighborhood can be extracted either as a cubic region with a Gaussian-weighted kernel
185
+ (when `spherical=False`) or as a spherical region (when `spherical=True`).
186
+
187
+ Parameters
188
+ ----------
189
+ indata : NDArray[np.floating[Any]]
190
+ Input 3D dataset from which the neighborhood is extracted.
191
+ xloc, yloc, zloc : float or int
192
+ The center coordinates of the neighborhood in the dataset.
193
+ xsize, ysize, zsize : int
194
+ Dimensions of the input dataset along each axis.
195
+ radius : float or int
196
+ The radius of the neighborhood. For `spherical=False`, this defines the cubic
197
+ kernel size. For `spherical=True`, it defines the spherical radius.
198
+ spherical : bool, optional
199
+ If True, extracts a spherical neighborhood. If False, extracts a cubic neighborhood
200
+ with a Gaussian kernel. Default is False.
201
+ kernelwidth : float, optional
202
+ Width parameter for the Gaussian kernel used when `spherical=False`. Default is 1.5.
203
+ slop : float, optional
204
+ Tolerance for spherical radius checking. Default is 0.01.
205
+ debug : bool, optional
206
+ If True, prints debug information about the index list initialization. Default is False.
207
+
208
+ Returns
209
+ -------
210
+ NDArray[np.floating[Any]]
211
+ A flattened array of the neighborhood values. When `spherical=False`, the values
212
+ are weighted by a Gaussian kernel. When `spherical=True`, the values are unweighted.
213
+
214
+ Notes
215
+ -----
216
+ - The function uses global variables `kernel`, `usedwidth`, `indexlist`, and `usedradius`
217
+ to cache computations for performance. These are initialized on first call.
218
+ - For `spherical=False`, the function returns a flattened array of the kernel-weighted
219
+ neighborhood.
220
+ - For `spherical=True`, the function returns a flattened array of values within the
221
+ spherical neighborhood.
222
+
223
+ Examples
224
+ --------
225
+ >>> import numpy as np
226
+ >>> data = np.random.rand(10, 10, 10)
227
+ >>> neighborhood = getneighborhood(data, 5, 5, 5, 10, 10, 10, 2, spherical=False)
228
+ >>> print(neighborhood.shape)
229
+ (125,)
230
+ >>> neighborhood = getneighborhood(data, 5, 5, 5, 10, 10, 10, 2, spherical=True)
231
+ >>> print(neighborhood.shape)
232
+ (33,)
233
+ """
154
234
  if not spherical:
155
235
  global usedwidth, kernel
156
236
  try:
157
- kernel
237
+ dummy = kernel
158
238
  except NameError:
159
239
  usedwidth = kernelwidth
160
240
  kernel = None
@@ -230,7 +310,66 @@ def getneighborhood(
230
310
  return np.array(outdata)
231
311
 
232
312
 
233
- def getMI(x, y, norm=True, bins=-1, init=False, prebin=True, sigma=0.25, debug=False):
313
+ def getMI(
314
+ x: Any,
315
+ y: Any,
316
+ norm: bool = True,
317
+ bins: int = -1,
318
+ init: bool = False,
319
+ prebin: bool = True,
320
+ sigma: float = 0.25,
321
+ debug: bool = False,
322
+ ) -> None:
323
+ """
324
+ Compute the mutual information between two variables using binned estimation.
325
+
326
+ This function calculates the mutual information between two input arrays `x` and `y`,
327
+ using a binned approach. It supports normalization, automatic bin selection, and
328
+ optional pre-binning for performance optimization.
329
+
330
+ Parameters
331
+ ----------
332
+ x : array-like
333
+ First input variable.
334
+ y : array-like
335
+ Second input variable.
336
+ norm : bool, optional
337
+ If True, normalize the input variables using standard normalization
338
+ (zero mean, unit variance). Default is True.
339
+ bins : int, optional
340
+ Number of bins to use for the 2D histogram. If less than 1, the number
341
+ of bins is automatically determined as `max(int(sqrt(len(x) / 5)), 3)`.
342
+ Default is -1.
343
+ init : bool, optional
344
+ If True, reinitialize the global binning structure. Default is False.
345
+ prebin : bool, optional
346
+ If True, use precomputed bin edges. If False, use the number of bins
347
+ directly. Default is True.
348
+ sigma : float, optional
349
+ Standard deviation for Gaussian smoothing in the mutual information
350
+ calculation. Default is 0.25.
351
+ debug : bool, optional
352
+ If True, print debugging information during execution. Default is False.
353
+
354
+ Returns
355
+ -------
356
+ None
357
+ The function returns the result of `tide_corr.mutual_info_2d`, which is
358
+ not explicitly returned here but is the core output of the function.
359
+
360
+ Notes
361
+ -----
362
+ The function uses a global variable `thebins` to store binning information.
363
+ If `init` is True or `thebins` is None, bin edges are computed and stored
364
+ in `thebins`. The function relies on `tide_math.stdnormalize` for normalization
365
+ and `tide_corr.mutual_info_2d` for the actual mutual information computation.
366
+
367
+ Examples
368
+ --------
369
+ >>> x = [1, 2, 3, 4, 5]
370
+ >>> y = [2, 4, 6, 8, 10]
371
+ >>> getMI(x, y, norm=True, bins=10, debug=False)
372
+ """
234
373
  global thebins
235
374
 
236
375
  if norm:
@@ -274,18 +413,102 @@ def getMI(x, y, norm=True, bins=-1, init=False, prebin=True, sigma=0.25, debug=F
274
413
  f"normy min, max, mean, std: {np.min(normy)}, {np.max(normy)}, {np.mean(normy)}, {np.std(normy)}"
275
414
  )
276
415
 
277
- return tide_corr.mutual_info_2d(
278
- normx,
279
- normy,
280
- bins=thebins,
281
- normalized=norm,
282
- fast=fast,
283
- sigma=sigma,
284
- debug=debug,
285
- )
416
+ if fast:
417
+ return tide_corr.mutual_info_2d_fast(
418
+ normx,
419
+ normy,
420
+ thebins,
421
+ normalized=norm,
422
+ sigma=sigma,
423
+ debug=debug,
424
+ )
425
+ else:
426
+ return tide_corr.mutual_info_2d(
427
+ normx,
428
+ normy,
429
+ thebins,
430
+ normalized=norm,
431
+ sigma=sigma,
432
+ debug=debug,
433
+ )
286
434
 
287
435
 
288
- def spatialmi(args):
436
+ def spatialmi(args: Any) -> None:
437
+ """
438
+ Compute spatial mutual information (MI) between two 3D images over a specified neighborhood.
439
+
440
+ This function reads two input NIfTI images and their corresponding masks, computes the
441
+ mutual information between the images within a local neighborhood for each voxel,
442
+ and saves the result as a NIfTI file. Optional spatial filtering can be applied
443
+ before computing the MI.
444
+
445
+ Parameters
446
+ ----------
447
+ args : Any
448
+ Parsed command-line arguments containing:
449
+ - inputfilename1 : str
450
+ Path to the first input NIfTI image.
451
+ - inputfilename2 : str
452
+ Path to the second input NIfTI image.
453
+ - maskfilename1 : str
454
+ Path to the mask for the first image.
455
+ - maskfilename2 : str
456
+ Path to the mask for the second image.
457
+ - index1 : int, optional
458
+ Index of the time point to use from the first image (default is 0).
459
+ - index2 : int, optional
460
+ Index of the time point to use from the second image (default is 0).
461
+ - radius : float
462
+ Neighborhood radius for computing mutual information.
463
+ - sigma : float, optional
464
+ Standard deviation for spatial smoothing (default is None).
465
+ - spherical : bool
466
+ Whether to use a spherical neighborhood (default is False).
467
+ - kernelwidth : float
468
+ Width of the kernel for neighborhood computation (default is None).
469
+ - norm : bool
470
+ Whether to normalize the data before computing MI (default is False).
471
+ - prebin : bool
472
+ Whether to pre-bin the data (default is False).
473
+ - debug : bool
474
+ Enable debug output (default is False).
475
+ - outputroot : str
476
+ Root name for the output NIfTI file.
477
+
478
+ Returns
479
+ -------
480
+ None
481
+ The function writes the computed spatial mutual information to a NIfTI file
482
+ named `<outputroot>_result.nii.gz`.
483
+
484
+ Notes
485
+ -----
486
+ - The function requires that both input images and their masks have matching spatial dimensions.
487
+ - If `sigma` is specified, spatial filtering is applied using a Gaussian kernel.
488
+ - The neighborhood is defined by the `radius` and `spherical` parameters.
489
+ - The output file contains mutual information values for each voxel in the masked region.
490
+
491
+ Examples
492
+ --------
493
+ >>> import argparse
494
+ >>> args = argparse.Namespace(
495
+ ... inputfilename1='image1.nii.gz',
496
+ ... inputfilename2='image2.nii.gz',
497
+ ... maskfilename1='mask1.nii.gz',
498
+ ... maskfilename2='mask2.nii.gz',
499
+ ... index1=0,
500
+ ... index2=0,
501
+ ... radius=5.0,
502
+ ... sigma=None,
503
+ ... spherical=True,
504
+ ... kernelwidth=None,
505
+ ... norm=False,
506
+ ... prebin=False,
507
+ ... debug=False,
508
+ ... outputroot='output'
509
+ ... )
510
+ >>> spatialmi(args)
511
+ """
289
512
  global thebins
290
513
  thebins = None
291
514
 
@@ -352,7 +575,7 @@ def spatialmi(args):
352
575
  totalmask = mask1_data * mask2_data
353
576
  print(f"totalmask.shape = {totalmask.shape}")
354
577
  xsize, ysize, numslices, timepoints = tide_io.parseniftidims(thedims1)
355
- outputdata = image1 * 0
578
+ outputdata = np.zeros_like(image1)
356
579
 
357
580
  # spatial filter if desired
358
581
  if args.sigma is not None: