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.
@@ -18,17 +18,42 @@
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.io as tide_io
25
28
  import rapidtide.miscmath as tide_math
26
29
  import rapidtide.workflows.parser_funcs as pf
27
30
 
28
31
 
29
- def _get_parser():
32
+ def _get_parser() -> Any:
30
33
  """
31
- Argument parser for filttc
34
+ Argument parser for filttc.
35
+
36
+ This function constructs and returns an `argparse.ArgumentParser` object configured
37
+ for parsing command-line arguments for the `filttc` tool, which filters timecourse
38
+ data in text files. It includes support for specifying sampling rate or timestep,
39
+ filter options, normalization methods, and miscellaneous flags.
40
+
41
+ Returns
42
+ -------
43
+ argparse.ArgumentParser
44
+ Configured argument parser for the filttc tool.
45
+
46
+ Notes
47
+ -----
48
+ The `--samplerate` and `--sampletstep` arguments are mutually exclusive and define
49
+ the sampling frequency of the input timecourses. The sampling frequency can be
50
+ specified either as a frequency (Hz) or as a timestep (seconds), with the latter
51
+ being the inverse of the former.
52
+
53
+ Examples
54
+ --------
55
+ >>> parser = _get_parser()
56
+ >>> args = parser.parse_args(['--inputfile', 'input.txt', '--outputfile', 'output.txt'])
32
57
  """
33
58
  parser = argparse.ArgumentParser(
34
59
  prog="filttc",
@@ -104,7 +129,53 @@ def _get_parser():
104
129
  return parser
105
130
 
106
131
 
107
- def filttc(args):
132
+ def filttc(args: Any) -> None:
133
+ """
134
+ Apply a filter to timecourse data read from a text file and write the filtered output.
135
+
136
+ This function reads timecourse data from a specified input file, applies a filter
137
+ to each timecourse, and writes the filtered data to an output file. It supports
138
+ normalization, demeaning, and automatic sampling rate detection from the input file
139
+ or command-line arguments.
140
+
141
+ Parameters
142
+ ----------
143
+ args : Any
144
+ An object containing command-line arguments. Expected attributes include:
145
+ - `inputfile`: Path to the input text file containing timecourse data.
146
+ - `outputfile`: Path to the output text file where filtered data will be written.
147
+ - `samplerate`: Sampling rate of the data, or 'auto' to detect from file.
148
+ - `normfirst`: Boolean indicating whether to normalize before filtering.
149
+ - `normmethod`: Normalization method to use (e.g., 'zscore', 'minmax').
150
+ - `demean`: Boolean indicating whether to remove the mean from the filtered data.
151
+
152
+ Returns
153
+ -------
154
+ None
155
+ This function does not return a value. It writes the filtered timecourse data
156
+ to the specified output file.
157
+
158
+ Notes
159
+ -----
160
+ - The input file must contain a header specifying the sampling rate, or the
161
+ sampling rate must be provided via command-line arguments.
162
+ - The filtering and normalization are applied independently to each timecourse.
163
+ - If `normfirst` is True, normalization is applied before filtering; otherwise,
164
+ filtering is applied before normalization.
165
+
166
+ Examples
167
+ --------
168
+ >>> import argparse
169
+ >>> args = argparse.Namespace(
170
+ ... inputfile='input.txt',
171
+ ... outputfile='output.txt',
172
+ ... samplerate='auto',
173
+ ... normfirst=False,
174
+ ... normmethod='zscore',
175
+ ... demean=True
176
+ ... )
177
+ >>> filttc(args)
178
+ """
108
179
  args, thefilter = pf.postprocessfilteropts(args)
109
180
 
110
181
  # read in data
@@ -136,7 +207,7 @@ def filttc(args):
136
207
  else:
137
208
  print("there are", numvecs, "timecourses")
138
209
  print("samplerate is", samplerate)
139
- outvecs = invecs * 0.0
210
+ outvecs = np.zeros_like(invecs)
140
211
  for i in range(numvecs):
141
212
  if args.normfirst:
142
213
  outvecs[i, :] = thefilter.apply(
@@ -0,0 +1,578 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding: utf-8 -*-
3
+ #
4
+ # Copyright 2016-2025 Blaise Frederick
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+ #
19
+ from typing import Any, Callable, Dict, List, Optional, Tuple, Union
20
+
21
+ import numpy as np
22
+ from numpy.typing import NDArray
23
+ from scipy import ndimage
24
+
25
+ import rapidtide.io as tide_io
26
+ import rapidtide.patchmatch as tide_patch
27
+ import rapidtide.peakeval as tide_peakeval
28
+ import rapidtide.resample as tide_resample
29
+ import rapidtide.simfuncfit as tide_simfuncfit
30
+ import rapidtide.util as tide_util
31
+
32
+
33
+ def fitSimFunc(
34
+ fmri_data_valid: NDArray[np.floating[Any]],
35
+ validsimcalcstart: int,
36
+ validsimcalcend: int,
37
+ osvalidsimcalcstart: int,
38
+ osvalidsimcalcend: int,
39
+ initial_fmri_x: NDArray[np.floating[Any]],
40
+ os_fmri_x: NDArray[np.floating[Any]],
41
+ theMutualInformationator: Any,
42
+ cleaned_referencetc: Any,
43
+ corrout: NDArray[np.floating[Any]],
44
+ outputname: str,
45
+ validvoxels: Any,
46
+ nativespaceshape: Any,
47
+ bidsbasedict: Any,
48
+ numspatiallocs: Any,
49
+ gaussout: Any,
50
+ theinitialdelay: Any,
51
+ windowout: Any,
52
+ R2: Any,
53
+ thesizes: Any,
54
+ internalspaceshape: Any,
55
+ numvalidspatiallocs: Any,
56
+ theinputdata: Any,
57
+ theheader: Any,
58
+ theFitter: Any,
59
+ fitmask: Any,
60
+ lagtimes: Any,
61
+ lagstrengths: Any,
62
+ lagsigma: Any,
63
+ failreason: Any,
64
+ outmaparray: Any,
65
+ trimmedcorrscale: Any,
66
+ similaritytype: Any,
67
+ thepass: Any,
68
+ optiondict: Any,
69
+ LGR: Any,
70
+ TimingLGR: Any,
71
+ simplefit: bool = False,
72
+ upsampfac: int = 8,
73
+ rt_floattype: np.dtype = np.float64,
74
+ ) -> NDArray | None:
75
+ """
76
+ Perform similarity function fitting and time lag estimation for fMRI data.
77
+
78
+ This function conducts either a simple or full fitting process for estimating time lags
79
+ between fMRI signals and a reference time course. It supports hybrid similarity metrics
80
+ and includes optional despeckling and patch shifting steps.
81
+
82
+ Parameters
83
+ ----------
84
+ fmri_data_valid : NDArray[np.floating[Any]]
85
+ Valid fMRI data for processing.
86
+ validsimcalcstart : int
87
+ Start index for valid similarity calculation.
88
+ validsimcalcend : int
89
+ End index for valid similarity calculation.
90
+ osvalidsimcalcstart : int
91
+ Start index for oversampled valid similarity calculation.
92
+ osvalidsimcalcend : int
93
+ End index for oversampled valid similarity calculation.
94
+ initial_fmri_x : NDArray[np.floating[Any]]
95
+ Initial fMRI x values.
96
+ os_fmri_x : NDArray[np.floating[Any]]
97
+ Oversampled fMRI x values.
98
+ theMutualInformationator : object
99
+ Mutual information calculator.
100
+ cleaned_referencetc : array_like
101
+ Cleaned reference time course.
102
+ corrout : NDArray[np.floating[Any]]
103
+ Correlation output array.
104
+ outputname : str
105
+ Output filename prefix.
106
+ validvoxels : array_like
107
+ Indices of valid voxels.
108
+ nativespaceshape : tuple
109
+ Native space shape of the data.
110
+ bidsbasedict : dict
111
+ BIDS-based dictionary for output metadata.
112
+ numspatiallocs : int
113
+ Number of spatial locations.
114
+ gaussout : array_like
115
+ Gaussian output array.
116
+ theinitialdelay : float
117
+ Initial delay value.
118
+ windowout : array_like
119
+ Window output array.
120
+ R2 : array_like
121
+ R-squared values.
122
+ thesizes : array_like
123
+ Sizes for processing.
124
+ internalspaceshape : tuple
125
+ Internal space shape.
126
+ numvalidspatiallocs : int
127
+ Number of valid spatial locations.
128
+ theinputdata : object
129
+ Input data object.
130
+ theheader : dict
131
+ Header information.
132
+ theFitter : object
133
+ Fitter object for similarity function fitting.
134
+ fitmask : array_like
135
+ Mask for fitting.
136
+ lagtimes : array_like
137
+ Array to store estimated lag times.
138
+ lagstrengths : array_like
139
+ Array to store lag strengths.
140
+ lagsigma : array_like
141
+ Array to store sigma values for lags.
142
+ failreason : array_like
143
+ Array to store failure reasons.
144
+ outmaparray : array_like
145
+ Output map array.
146
+ trimmedcorrscale : array_like
147
+ Trimmed correlation scale.
148
+ similaritytype : str
149
+ Type of similarity metric used.
150
+ thepass : int
151
+ Current pass number.
152
+ optiondict : dict
153
+ Dictionary of options for processing.
154
+ LGR : object
155
+ Logger for general messages.
156
+ TimingLGR : object
157
+ Logger for timing information.
158
+ simplefit : bool, optional
159
+ If True, perform simple fitting using upsampling. Default is False.
160
+ upsampfac : int, optional
161
+ Upsampling factor for simple fitting. Default is 8.
162
+ rt_floattype : np.dtype, optional
163
+ Real-time floating-point data type. Default is np.float64.
164
+
165
+ Returns
166
+ -------
167
+ internaldespeckleincludemask : NDArray[np.floating[Any]] or None
168
+ Mask indicating which voxels were included in despeckling, or None if no despeckling was performed.
169
+
170
+ Notes
171
+ -----
172
+ - This function supports both simple and hybrid similarity metrics.
173
+ - Despeckling and patch shifting steps are optional and controlled by `optiondict`.
174
+ - The function modifies `lagtimes`, `lagstrengths`, `lagsigma`, and `fitmask` in-place.
175
+
176
+ Examples
177
+ --------
178
+ >>> fitSimFunc(
179
+ ... fmri_data_valid,
180
+ ... validsimcalcstart,
181
+ ... validsimcalcend,
182
+ ... osvalidsimcalcstart,
183
+ ... osvalidsimcalcend,
184
+ ... initial_fmri_x,
185
+ ... os_fmri_x,
186
+ ... theMutualInformationator,
187
+ ... cleaned_referencetc,
188
+ ... corrout,
189
+ ... outputname,
190
+ ... validvoxels,
191
+ ... nativespaceshape,
192
+ ... bidsbasedict,
193
+ ... numspatiallocs,
194
+ ... gaussout,
195
+ ... theinitialdelay,
196
+ ... windowout,
197
+ ... R2,
198
+ ... thesizes,
199
+ ... internalspaceshape,
200
+ ... numvalidspatiallocs,
201
+ ... theinputdata,
202
+ ... theheader,
203
+ ... theFitter,
204
+ ... fitmask,
205
+ ... lagtimes,
206
+ ... lagstrengths,
207
+ ... lagsigma,
208
+ ... failreason,
209
+ ... outmaparray,
210
+ ... trimmedcorrscale,
211
+ ... similaritytype,
212
+ ... thepass,
213
+ ... optiondict,
214
+ ... LGR,
215
+ ... TimingLGR,
216
+ ... simplefit=False,
217
+ ... upsampfac=8,
218
+ ... rt_floattype="float64",
219
+ ... )
220
+ """
221
+ # Do a peak prefit if doing hybrid
222
+ if optiondict["similaritymetric"] == "hybrid":
223
+ LGR.info(f"\n\nPeak prefit calculation, pass {thepass}")
224
+ TimingLGR.info(f"Peak prefit calculation start, pass {thepass}")
225
+
226
+ tide_util.disablemkl(optiondict["nprocs_peakeval"], debug=optiondict["threaddebug"])
227
+ voxelsprocessed_pe, thepeakdict = tide_peakeval.peakevalpass(
228
+ fmri_data_valid[:, validsimcalcstart : validsimcalcend + 1],
229
+ cleaned_referencetc,
230
+ initial_fmri_x[validsimcalcstart : validsimcalcend + 1],
231
+ os_fmri_x[osvalidsimcalcstart : osvalidsimcalcend + 1],
232
+ theMutualInformationator,
233
+ trimmedcorrscale,
234
+ corrout,
235
+ nprocs=optiondict["nprocs_peakeval"],
236
+ alwaysmultiproc=optiondict["alwaysmultiproc"],
237
+ bipolar=optiondict["bipolar"],
238
+ oversampfactor=optiondict["oversampfactor"],
239
+ interptype=optiondict["interptype"],
240
+ showprogressbar=optiondict["showprogressbar"],
241
+ chunksize=optiondict["mp_chunksize"],
242
+ rt_floattype=rt_floattype,
243
+ )
244
+ tide_util.enablemkl(optiondict["mklthreads"], debug=optiondict["threaddebug"])
245
+
246
+ TimingLGR.info(
247
+ f"Peak prefit end, pass {thepass}",
248
+ {
249
+ "message2": voxelsprocessed_pe,
250
+ "message3": "voxels",
251
+ },
252
+ )
253
+ mipeaks = np.zeros_like(lagtimes)
254
+ for i in range(numvalidspatiallocs):
255
+ if len(thepeakdict[str(i)]) > 0:
256
+ mipeaks[i] = thepeakdict[str(i)][0][0]
257
+ else:
258
+ thepeakdict = None
259
+
260
+ if simplefit:
261
+ basedelay = trimmedcorrscale[0]
262
+ delaystep = (trimmedcorrscale[1] - trimmedcorrscale[0]) / upsampfac
263
+ for thevox in range(numvalidspatiallocs):
264
+ fitmask[thevox] = 1
265
+ upsampcorrout = tide_resample.upsample(
266
+ corrout[thevox, :], 1, upsampfac, intfac=True, dofilt=False
267
+ )
268
+ if optiondict["bipolar"]:
269
+ thismax = np.argmax(np.fabs(upsampcorrout))
270
+ else:
271
+ thismax = np.argmax(upsampcorrout)
272
+ lagtimes[thevox] = basedelay + thismax * delaystep
273
+ lagstrengths[thevox] = upsampcorrout[thismax]
274
+ lagsigma[thevox] = 1.0
275
+ internaldespeckleincludemask = None
276
+ else:
277
+ # Similarity function fitting and time lag estimation
278
+ # write out the current version of the run options
279
+ optiondict["currentstage"] = f"presimfuncfit_pass{thepass}"
280
+ tide_io.writedicttojson(optiondict, f"{outputname}_desc-runoptions_info.json")
281
+ LGR.info(f"\n\nTime lag estimation pass {thepass}")
282
+ TimingLGR.info(f"Time lag estimation start, pass {thepass}")
283
+
284
+ theFitter.setfunctype(optiondict["similaritymetric"])
285
+ theFitter.setcorrtimeaxis(trimmedcorrscale)
286
+
287
+ # use initial lags if this is a hybrid fit
288
+ if optiondict["similaritymetric"] == "hybrid" and thepeakdict is not None:
289
+ initlags = mipeaks
290
+ else:
291
+ initlags = None
292
+
293
+ tide_util.disablemkl(optiondict["nprocs_fitcorr"], debug=optiondict["threaddebug"])
294
+ voxelsprocessed_fc = tide_simfuncfit.fitcorr(
295
+ trimmedcorrscale,
296
+ theFitter,
297
+ corrout,
298
+ fitmask,
299
+ failreason,
300
+ lagtimes,
301
+ lagstrengths,
302
+ lagsigma,
303
+ gaussout,
304
+ windowout,
305
+ R2,
306
+ despeckling=False,
307
+ peakdict=thepeakdict,
308
+ nprocs=optiondict["nprocs_fitcorr"],
309
+ alwaysmultiproc=optiondict["alwaysmultiproc"],
310
+ fixdelay=optiondict["fixdelay"],
311
+ initialdelayvalue=theinitialdelay,
312
+ showprogressbar=optiondict["showprogressbar"],
313
+ chunksize=optiondict["mp_chunksize"],
314
+ despeckle_thresh=optiondict["despeckle_thresh"],
315
+ initiallags=initlags,
316
+ rt_floattype=rt_floattype,
317
+ )
318
+ tide_util.enablemkl(optiondict["mklthreads"], debug=optiondict["threaddebug"])
319
+
320
+ TimingLGR.info(
321
+ f"Time lag estimation end, pass {thepass}",
322
+ {
323
+ "message2": voxelsprocessed_fc,
324
+ "message3": "voxels",
325
+ },
326
+ )
327
+
328
+ # Correlation time despeckle
329
+ if optiondict["despeckle_passes"] > 0:
330
+ LGR.info(f"\n\n{similaritytype} despeckling pass {thepass}")
331
+ LGR.info(f"\tUsing despeckle_thresh = {optiondict['despeckle_thresh']:.3f}")
332
+ TimingLGR.info(f"{similaritytype} despeckle start, pass {thepass}")
333
+
334
+ # find lags that are very different from their neighbors, and refit starting at the median lag for the point
335
+ voxelsprocessed_fc_ds = 0
336
+ despecklingdone = False
337
+ lastnumdespeckled = 1000000
338
+ for despecklepass in range(optiondict["despeckle_passes"]):
339
+ LGR.info(f"\n\n{similaritytype} despeckling subpass {despecklepass + 1}")
340
+ outmaparray *= 0.0
341
+ outmaparray[validvoxels] = eval("lagtimes")[:]
342
+
343
+ # find voxels to despeckle
344
+ medianlags = ndimage.median_filter(
345
+ outmaparray.reshape(nativespaceshape), 3
346
+ ).reshape(numspatiallocs)
347
+ # voxels that we're happy with have initlags set to -1000000.0
348
+ initlags = np.where(
349
+ np.abs(outmaparray - medianlags) > optiondict["despeckle_thresh"],
350
+ medianlags,
351
+ -1000000.0,
352
+ )[validvoxels]
353
+
354
+ if len(initlags) > 0:
355
+ numdespeckled = len(np.where(initlags != -1000000.0)[0])
356
+ if lastnumdespeckled > numdespeckled > 0:
357
+ lastnumdespeckled = numdespeckled
358
+ tide_util.disablemkl(
359
+ optiondict["nprocs_fitcorr"], debug=optiondict["threaddebug"]
360
+ )
361
+ voxelsprocessed_thispass = tide_simfuncfit.fitcorr(
362
+ trimmedcorrscale,
363
+ theFitter,
364
+ corrout,
365
+ fitmask,
366
+ failreason,
367
+ lagtimes,
368
+ lagstrengths,
369
+ lagsigma,
370
+ gaussout,
371
+ windowout,
372
+ R2,
373
+ despeckling=True,
374
+ peakdict=thepeakdict,
375
+ nprocs=optiondict["nprocs_fitcorr"],
376
+ alwaysmultiproc=optiondict["alwaysmultiproc"],
377
+ fixdelay=optiondict["fixdelay"],
378
+ initialdelayvalue=theinitialdelay,
379
+ showprogressbar=optiondict["showprogressbar"],
380
+ chunksize=optiondict["mp_chunksize"],
381
+ despeckle_thresh=optiondict["despeckle_thresh"],
382
+ initiallags=initlags,
383
+ rt_floattype=rt_floattype,
384
+ )
385
+ tide_util.enablemkl(
386
+ optiondict["mklthreads"], debug=optiondict["threaddebug"]
387
+ )
388
+
389
+ voxelsprocessed_fc_ds += voxelsprocessed_thispass
390
+ optiondict[
391
+ "despecklemasksize_pass" + str(thepass) + "_d" + str(despecklepass + 1)
392
+ ] = voxelsprocessed_thispass
393
+ optiondict[
394
+ "despecklemaskpct_pass" + str(thepass) + "_d" + str(despecklepass + 1)
395
+ ] = (100.0 * voxelsprocessed_thispass / optiondict["corrmasksize"])
396
+ else:
397
+ despecklingdone = True
398
+ else:
399
+ despecklingdone = True
400
+ if despecklingdone:
401
+ LGR.info("Nothing left to do! Terminating despeckling")
402
+ break
403
+
404
+ internaldespeckleincludemask = np.where(
405
+ np.abs(outmaparray - medianlags) > optiondict["despeckle_thresh"],
406
+ medianlags,
407
+ 0.0,
408
+ )
409
+ if optiondict["savedespecklemasks"] and (optiondict["despeckle_passes"] > 0):
410
+ despecklesavemask = np.where(
411
+ internaldespeckleincludemask[validvoxels] == 0.0, 0, 1
412
+ )
413
+ if thepass == optiondict["passes"]:
414
+ if theinputdata.filetype != "text":
415
+ if theinputdata.filetype == "cifti":
416
+ timeindex = theheader["dim"][0] - 1
417
+ spaceindex = theheader["dim"][0]
418
+ theheader["dim"][timeindex] = 1
419
+ theheader["dim"][spaceindex] = numspatiallocs
420
+ else:
421
+ theheader["dim"][0] = 3
422
+ theheader["dim"][4] = 1
423
+ theheader["pixdim"][4] = 1.0
424
+ masklist = [
425
+ (
426
+ despecklesavemask,
427
+ "despeckle",
428
+ "mask",
429
+ None,
430
+ "Voxels that underwent despeckling in the final pass",
431
+ )
432
+ ]
433
+ tide_io.savemaplist(
434
+ outputname,
435
+ masklist,
436
+ validvoxels,
437
+ nativespaceshape,
438
+ theheader,
439
+ bidsbasedict,
440
+ filetype=theinputdata.filetype,
441
+ rt_floattype=rt_floattype,
442
+ cifti_hdr=theinputdata.cifti_hdr,
443
+ )
444
+ LGR.info(
445
+ f"\n\n{voxelsprocessed_fc_ds} voxels despeckled in "
446
+ f"{optiondict['despeckle_passes']} passes"
447
+ )
448
+ TimingLGR.info(
449
+ f"{similaritytype} despeckle end, pass {thepass}",
450
+ {
451
+ "message2": voxelsprocessed_fc_ds,
452
+ "message3": "voxels",
453
+ },
454
+ )
455
+ else:
456
+ internaldespeckleincludemask = None
457
+
458
+ # Patch shifting
459
+ if optiondict["patchshift"]:
460
+ outmaparray *= 0.0
461
+ outmaparray[validvoxels] = eval("lagtimes")[:]
462
+ # new method
463
+ masklist = [
464
+ (
465
+ outmaparray[validvoxels],
466
+ f"lagtimes_prepatch_pass{thepass}",
467
+ "map",
468
+ None,
469
+ f"Input lagtimes map prior to patch map generation pass {thepass}",
470
+ ),
471
+ ]
472
+ tide_io.savemaplist(
473
+ outputname,
474
+ masklist,
475
+ validvoxels,
476
+ nativespaceshape,
477
+ theheader,
478
+ bidsbasedict,
479
+ filetype=theinputdata.filetype,
480
+ rt_floattype=rt_floattype,
481
+ cifti_hdr=theinputdata.cifti_hdr,
482
+ )
483
+
484
+ # create list of anomalous 3D regions that don't match surroundings
485
+ if theinputdata.nim_affine is not None:
486
+ # make an atlas of anomalous patches - each patch shares the same integer value
487
+ step1 = tide_patch.calc_DoG(
488
+ outmaparray.reshape(nativespaceshape).copy(),
489
+ theinputdata.nim_affine,
490
+ thesizes,
491
+ fwhm=optiondict["patchfwhm"],
492
+ ratioopt=False,
493
+ debug=True,
494
+ )
495
+ masklist = [
496
+ (
497
+ step1.reshape(internalspaceshape)[validvoxels],
498
+ f"DoG_pass{thepass}",
499
+ "map",
500
+ None,
501
+ f"DoG map for pass {thepass}",
502
+ ),
503
+ ]
504
+ tide_io.savemaplist(
505
+ outputname,
506
+ masklist,
507
+ validvoxels,
508
+ nativespaceshape,
509
+ theheader,
510
+ bidsbasedict,
511
+ filetype=theinputdata.filetype,
512
+ rt_floattype=rt_floattype,
513
+ cifti_hdr=theinputdata.cifti_hdr,
514
+ )
515
+ step2 = tide_patch.invertedflood3D(
516
+ step1,
517
+ 1,
518
+ )
519
+ masklist = [
520
+ (
521
+ step2.reshape(internalspaceshape)[validvoxels],
522
+ f"invertflood_pass{thepass}",
523
+ "map",
524
+ None,
525
+ f"Inverted flood map for pass {thepass}",
526
+ ),
527
+ ]
528
+ tide_io.savemaplist(
529
+ outputname,
530
+ masklist,
531
+ validvoxels,
532
+ nativespaceshape,
533
+ theheader,
534
+ bidsbasedict,
535
+ filetype=theinputdata.filetype,
536
+ rt_floattype=rt_floattype,
537
+ cifti_hdr=theinputdata.cifti_hdr,
538
+ )
539
+
540
+ patchmap = tide_patch.separateclusters(
541
+ step2,
542
+ sizethresh=optiondict["patchminsize"],
543
+ debug=True,
544
+ )
545
+ # patchmap = tide_patch.getclusters(
546
+ # outmaparray.reshape(nativespaceshape),
547
+ # theinputdata.nim_affine,
548
+ # thesizes,
549
+ # fwhm=optiondict["patchfwhm"],
550
+ # ratioopt=True,
551
+ # sizethresh=optiondict["patchminsize"],
552
+ # debug=True,
553
+ # )
554
+ masklist = [
555
+ (
556
+ patchmap[validvoxels],
557
+ f"patch_pass{thepass}",
558
+ "map",
559
+ None,
560
+ f"Patch map for despeckling pass {thepass}",
561
+ ),
562
+ ]
563
+ tide_io.savemaplist(
564
+ outputname,
565
+ masklist,
566
+ validvoxels,
567
+ nativespaceshape,
568
+ theheader,
569
+ bidsbasedict,
570
+ filetype=theinputdata.filetype,
571
+ rt_floattype=rt_floattype,
572
+ cifti_hdr=theinputdata.cifti_hdr,
573
+ )
574
+
575
+ # now shift the patches to align with the majority of the image
576
+ tide_patch.interppatch(lagtimes, patchmap[validvoxels])
577
+
578
+ return internaldespeckleincludemask