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
rapidtide/simfuncfit.py CHANGED
@@ -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.
@@ -19,8 +19,10 @@
19
19
  import bisect
20
20
  import gc
21
21
  import logging
22
+ from typing import Any, Callable, Optional, Tuple, Union
22
23
 
23
24
  import numpy as np
25
+ from numpy.typing import ArrayLike, NDArray
24
26
  from tqdm import tqdm
25
27
 
26
28
  import rapidtide.fit as tide_fit
@@ -30,20 +32,76 @@ LGR = logging.getLogger("GENERAL")
30
32
 
31
33
 
32
34
  def onesimfuncfit(
33
- correlationfunc,
34
- thefitter,
35
- disablethresholds=False,
36
- initiallag=None,
37
- despeckle_thresh=5.0,
38
- lthreshval=0.0,
39
- fixdelay=False,
40
- fixeddelayvalue=0.0,
41
- rt_floatset=np.float64,
42
- rt_floattype="float64",
43
- ):
35
+ correlationfunc: ArrayLike,
36
+ thefitter: Any,
37
+ disablethresholds: bool = False,
38
+ initiallag: Optional[float] = None,
39
+ despeckle_thresh: float = 5.0,
40
+ lthreshval: float = 0.0,
41
+ fixdelay: bool = False,
42
+ initialdelayvalue: float = 0.0,
43
+ rt_floattype: np.dtype = np.float64,
44
+ ) -> Tuple[int, float, float, float, int, int, int, int]:
45
+ """
46
+ Perform a single fit on a correlation function using the provided fitter.
47
+
48
+ This function sets up the fitter with initial parameters and thresholds,
49
+ then performs a fit on the provided correlation function. If `fixdelay` is
50
+ True, the fit is skipped and a fixed delay value is used instead.
51
+
52
+ Parameters
53
+ ----------
54
+ correlationfunc : ArrayLike
55
+ The correlation function data to be fitted.
56
+ thefitter : Any
57
+ An object with methods `setguess`, `setrange`, `setlthresh`, and `fit`.
58
+ disablethresholds : bool, optional
59
+ If True, disables the threshold setting in the fitter. Default is False.
60
+ initiallag : float, optional
61
+ Initial guess for the lag value. If None, no initial guess is set.
62
+ Default is None.
63
+ despeckle_thresh : float, optional
64
+ Threshold for despeckling. Default is 5.0.
65
+ lthreshval : float, optional
66
+ Low threshold value for the fitter. Default is 0.0.
67
+ fixdelay : bool, optional
68
+ If True, uses a fixed delay value instead of performing a fit.
69
+ Default is False.
70
+ initialdelayvalue : float, optional
71
+ The fixed delay value to use when `fixdelay=True`. Default is 0.0.
72
+ rt_floattype : np.dtype, optional
73
+ The data type to use for floating-point values. Default is `np.float64`.
74
+
75
+ Returns
76
+ -------
77
+ tuple of (int, float, float, float, int, int, int, int)
78
+ A tuple containing:
79
+ - maxindex (int): Index of the maximum value in the correlation function.
80
+ - maxlag (float): The lag value at the maximum.
81
+ - maxval (float): The maximum value in the correlation function.
82
+ - maxsigma (float): The sigma (standard deviation) of the fit.
83
+ - maskval (int): A mask value indicating fit quality.
84
+ - peakstart (int): Start index of the fitted peak.
85
+ - peakend (int): End index of the fitted peak.
86
+ - failreason (int): Reason for fit failure (0 if successful).
87
+
88
+ Notes
89
+ -----
90
+ When `fixdelay=True`, the function bypasses the fitting process and returns
91
+ precomputed values based on `initialdelayvalue`.
92
+
93
+ Examples
94
+ --------
95
+ >>> import numpy as np
96
+ >>> corr_func = np.random.rand(100)
97
+ >>> fitter = some_fitter_class()
98
+ >>> result = onesimfuncfit(corr_func, fitter)
99
+ >>> print(result)
100
+ (50, 0.5, 0.95, 0.02, 1, 45, 55, 0)
101
+ """
44
102
  if initiallag is not None:
45
103
  thefitter.setguess(True, maxguess=initiallag)
46
- widthmax = despeckle_thresh
104
+ thefitter.setrange(-despeckle_thresh / 2.0, despeckle_thresh / 2.0)
47
105
  else:
48
106
  thefitter.setguess(False)
49
107
 
@@ -66,10 +124,10 @@ def onesimfuncfit(
66
124
  else:
67
125
  # do something different
68
126
  failreason = np.uint32(0)
69
- maxlag = rt_floatset(fixeddelayvalue)
70
- maxindex = np.int16(bisect.bisect_left(thefitter.corrtimeaxis, fixeddelayvalue))
71
- maxval = rt_floatset(correlationfunc[maxindex])
72
- maxsigma = rt_floatset(1.0)
127
+ maxlag = initialdelayvalue
128
+ maxindex = np.int16(bisect.bisect_left(thefitter.corrtimeaxis, initialdelayvalue))
129
+ maxval = correlationfunc[maxindex]
130
+ maxsigma = 1.0
73
131
  maskval = np.uint16(1)
74
132
  peakstart = maxindex
75
133
  peakend = maxindex
@@ -78,17 +136,80 @@ def onesimfuncfit(
78
136
 
79
137
 
80
138
  def _procOneVoxelFitcorr(
81
- vox,
82
- corr_y,
83
- thefitter,
84
- disablethresholds=False,
85
- despeckle_thresh=5.0,
86
- initiallag=None,
87
- fixdelay=False,
88
- fixeddelayvalue=0.0,
89
- rt_floatset=np.float64,
90
- rt_floattype="float64",
91
- ):
139
+ vox: int,
140
+ corr_y: ArrayLike,
141
+ thefitter: Any,
142
+ disablethresholds: bool = False,
143
+ despeckle_thresh: float = 5.0,
144
+ initiallag: Optional[float] = None,
145
+ fixdelay: bool = False,
146
+ initialdelayvalue: float = 0.0,
147
+ rt_floattype: np.dtype = np.float64,
148
+ ) -> Tuple[int, int, float, float, float, NDArray, NDArray, float, int, int]:
149
+ """
150
+ Process a single voxel for correlation fitting.
151
+
152
+ This function performs correlation fitting on a single voxel's data using the provided fitter.
153
+ It returns fitting results including time, strength, sigma, Gaussian fit, window mask, R² value,
154
+ and metadata such as mask value and failure reason.
155
+
156
+ Parameters
157
+ ----------
158
+ vox : int
159
+ Voxel index.
160
+ corr_y : ArrayLike
161
+ Correlation data for the voxel.
162
+ thefitter : Any
163
+ Fitter object containing fitting parameters and methods.
164
+ disablethresholds : bool, optional
165
+ If True, disables thresholding during fitting. Default is False.
166
+ despeckle_thresh : float, optional
167
+ Threshold for despeckling. Default is 5.0.
168
+ initiallag : float, optional
169
+ Initial lag value for fitting. Default is None.
170
+ fixdelay : bool, optional
171
+ If True, fixes the delay during fitting. Default is False.
172
+ initialdelayvalue : float, optional
173
+ Initial delay value if `fixdelay` is True. Default is 0.0.
174
+ rt_floattype : np.dtype, optional
175
+ Type to use for real-valued floating-point arrays. Default is `np.float64`.
176
+
177
+ Returns
178
+ -------
179
+ tuple of (int, int, float, float, float, ndarray, ndarray, float, int, int)
180
+ A tuple containing:
181
+ - `vox`: Voxel index.
182
+ - `volumetotalinc`: 1 if fit was successful, 0 otherwise.
183
+ - `thetime`: Fitted time value.
184
+ - `thestrength`: Fitted strength value.
185
+ - `thesigma`: Fitted sigma value.
186
+ - `thegaussout`: Gaussian fit evaluated over the time axis.
187
+ - `thewindowout`: Binary window mask indicating the peak region.
188
+ - `theR2`: R-squared value of the fit.
189
+ - `maskval`: Mask value from the fitting process.
190
+ - `failreason`: Reason for failure, if any.
191
+
192
+ Notes
193
+ -----
194
+ - If `maxval > 0.3`, plotting is disabled.
195
+ - The function uses `onesimfuncfit` to perform the actual fitting.
196
+ - The `thefitter` object must have attributes like `zerooutbadfit`, `lagmod`, and `corrtimeaxis`.
197
+
198
+ Examples
199
+ --------
200
+ >>> result = _procOneVoxelFitcorr(
201
+ ... vox=10,
202
+ ... corr_y=corr_data,
203
+ ... thefitter=fitter_obj,
204
+ ... disablethresholds=False,
205
+ ... despeckle_thresh=5.0,
206
+ ... fixdelay=False,
207
+ ... initialdelayvalue=0.0,
208
+ ... rt_floattype=np.float64,
209
+ ... )
210
+ >>> print(result)
211
+ (10, 1, 1.23, 0.95, 0.12, array([...]), array([...]), 0.90, 1, 0)
212
+ """
92
213
  (
93
214
  maxindex,
94
215
  maxlag,
@@ -104,9 +225,8 @@ def _procOneVoxelFitcorr(
104
225
  disablethresholds=disablethresholds,
105
226
  despeckle_thresh=despeckle_thresh,
106
227
  fixdelay=fixdelay,
107
- fixeddelayvalue=fixeddelayvalue,
228
+ initialdelayvalue=initialdelayvalue,
108
229
  initiallag=initiallag,
109
- rt_floatset=rt_floatset,
110
230
  rt_floattype=rt_floattype,
111
231
  )
112
232
 
@@ -115,29 +235,29 @@ def _procOneVoxelFitcorr(
115
235
 
116
236
  # now tuck everything away in the appropriate output array
117
237
  volumetotalinc = 0
118
- thewindowout = rt_floatset(0.0 * corr_y)
238
+ thewindowout = np.zeros_like(corr_y, rt_floattype)
119
239
  thewindowout[peakstart : peakend + 1] = 1.0
120
240
  if (maskval == 0) and thefitter.zerooutbadfit:
121
- thetime = rt_floatset(0.0)
122
- thestrength = rt_floatset(0.0)
123
- thesigma = rt_floatset(0.0)
124
- thegaussout = 0.0 * corr_y
125
- theR2 = rt_floatset(0.0)
241
+ thetime = 0.0
242
+ thestrength = 0.0
243
+ thesigma = 0.0
244
+ thegaussout = np.zeros_like(corr_y, rt_floattype)
245
+ theR2 = 0.0
126
246
  else:
127
247
  volumetotalinc = 1
128
- thetime = rt_floatset(np.fmod(maxlag, thefitter.lagmod))
129
- thestrength = rt_floatset(maxval)
130
- thesigma = rt_floatset(maxsigma)
131
- thegaussout = rt_floatset(0.0 * corr_y)
132
- thewindowout = rt_floatset(0.0 * corr_y)
248
+ thetime = np.fmod(maxlag, thefitter.lagmod)
249
+ thestrength = maxval
250
+ thesigma = maxsigma
251
+ thegaussout = np.zeros_like(corr_y, rt_floattype)
252
+ thewindowout = np.zeros_like(corr_y, rt_floattype)
133
253
  if (not fixdelay) and (maxsigma != 0.0):
134
- thegaussout = rt_floatset(
135
- tide_fit.gauss_eval(thefitter.corrtimeaxis, [maxval, maxlag, maxsigma])
136
- )
254
+ thegaussout = tide_fit.gauss_eval(
255
+ thefitter.corrtimeaxis, [maxval, maxlag, maxsigma]
256
+ ).astype(rt_floattype)
137
257
  else:
138
- thegaussout = rt_floatset(0.0)
139
- thewindowout = rt_floatset(0.0)
140
- theR2 = rt_floatset(thestrength * thestrength)
258
+ thegaussout = 0.0
259
+ thewindowout = 0.0
260
+ theR2 = thestrength * thestrength
141
261
 
142
262
  return (
143
263
  vox,
@@ -154,30 +274,112 @@ def _procOneVoxelFitcorr(
154
274
 
155
275
 
156
276
  def fitcorr(
157
- corrtimescale,
158
- thefitter,
159
- corrout,
160
- lagmask,
161
- failimage,
162
- lagtimes,
163
- lagstrengths,
164
- lagsigma,
165
- gaussout,
166
- windowout,
167
- R2,
168
- despeckling=False,
169
- peakdict=None,
170
- nprocs=1,
171
- alwaysmultiproc=False,
172
- fixdelay=False,
173
- fixdelayvalue=0.0,
174
- showprogressbar=True,
175
- chunksize=1000,
176
- despeckle_thresh=5.0,
177
- initiallags=None,
178
- rt_floatset=np.float64,
179
- rt_floattype="float64",
180
- ):
277
+ corrtimescale: ArrayLike,
278
+ thefitter: Any,
279
+ corrout: NDArray,
280
+ lagmask: NDArray,
281
+ failimage: NDArray,
282
+ lagtimes: NDArray,
283
+ lagstrengths: NDArray,
284
+ lagsigma: NDArray,
285
+ gaussout: NDArray,
286
+ windowout: NDArray,
287
+ R2: NDArray,
288
+ despeckling: bool = False,
289
+ peakdict: Optional[dict] = None,
290
+ nprocs: int = 1,
291
+ alwaysmultiproc: bool = False,
292
+ fixdelay: bool = False,
293
+ initialdelayvalue: Union[float, NDArray] = 0.0,
294
+ showprogressbar: bool = True,
295
+ chunksize: int = 1000,
296
+ despeckle_thresh: float = 5.0,
297
+ initiallags: Optional[NDArray] = None,
298
+ rt_floattype: np.dtype = np.float64,
299
+ ) -> int:
300
+ """
301
+ Fit correlation data to extract lag parameters and related statistics for each voxel.
302
+
303
+ This function performs a fitting procedure on correlation data for each voxel,
304
+ extracting lag times, strengths, sigma values, Gaussian fits, window functions,
305
+ and R² values. It supports both single-threaded and multi-threaded processing.
306
+
307
+ Parameters
308
+ ----------
309
+ corrtimescale : ArrayLike
310
+ Time scale of the correlation data.
311
+ thefitter : Any
312
+ Fitter object used to perform the fitting. Must have methods like `setcorrtimeaxis`.
313
+ corrout : NDArray
314
+ Correlation data for all voxels, shape (n_voxels, n_timepoints).
315
+ lagmask : NDArray
316
+ Mask indicating valid lags for each voxel, shape (n_voxels,).
317
+ failimage : NDArray
318
+ Image to store failure flags for each voxel, shape (n_voxels,).
319
+ lagtimes : NDArray
320
+ Output array for lag times, shape (n_voxels,).
321
+ lagstrengths : NDArray
322
+ Output array for lag strengths, shape (n_voxels,).
323
+ lagsigma : NDArray
324
+ Output array for lag sigma values, shape (n_voxels,).
325
+ gaussout : NDArray
326
+ Output array for Gaussian fit parameters, shape (n_voxels, n_timepoints).
327
+ windowout : NDArray
328
+ Output array for window function values, shape (n_voxels, n_timepoints).
329
+ R2 : NDArray
330
+ Output array for R² values, shape (n_voxels,).
331
+ despeckling : bool, optional
332
+ If True, performs despeckling pass, only accepting successful fits, by default False.
333
+ peakdict : dict, optional
334
+ Dictionary of peak information, by default None.
335
+ nprocs : int, optional
336
+ Number of processes to use for multiprocessing, by default 1.
337
+ alwaysmultiproc : bool, optional
338
+ If True, always use multiprocessing even for single process, by default False.
339
+ fixdelay : bool, optional
340
+ If True, fix the delay value, by default False.
341
+ initialdelayvalue : Union[float, NDArray], optional
342
+ Initial delay value(s), by default 0.0.
343
+ showprogressbar : bool, optional
344
+ If True, show progress bar, by default True.
345
+ chunksize : int, optional
346
+ Size of chunks for multiprocessing, by default 1000.
347
+ despeckle_thresh : float, optional
348
+ Threshold for despeckling, by default 5.0.
349
+ initiallags : NDArray, optional
350
+ Initial lag values for each voxel, by default None.
351
+ rt_floattype : np.dtype, optional
352
+ Floating-point type for runtime, by default np.float64.
353
+
354
+ Returns
355
+ -------
356
+ int
357
+ Total number of voxels successfully processed.
358
+
359
+ Notes
360
+ -----
361
+ The function modifies the input arrays (`lagtimes`, `lagstrengths`, `lagsigma`,
362
+ `gaussout`, `windowout`, `R2`, `lagmask`, `failimage`) in-place.
363
+
364
+ Examples
365
+ --------
366
+ >>> fitcorr(
367
+ ... corrtimescale=timescale,
368
+ ... thefitter=fitter,
369
+ ... corrout=correlation_data,
370
+ ... lagmask=lag_mask,
371
+ ... failimage=fail_image,
372
+ ... lagtimes=lag_times,
373
+ ... lagstrengths=lag_strengths,
374
+ ... lagsigma=lag_sigma,
375
+ ... gaussout=gaussian_out,
376
+ ... windowout=window_out,
377
+ ... R2=r2_values,
378
+ ... nprocs=4,
379
+ ... despeckling=True,
380
+ ... )
381
+ 12345
382
+ """
181
383
  thefitter.setcorrtimeaxis(corrtimescale)
182
384
  inputshape = np.shape(corrout)
183
385
  if initiallags is None:
@@ -208,17 +410,17 @@ def fitcorr(
208
410
  break
209
411
 
210
412
  # process and send the data
211
- if (lagmask is None) or (initiallags is None):
413
+ if (themask is None) or (initiallags is None):
212
414
  thislag = None
213
415
  else:
214
- if lagmask[val] > 0:
416
+ if themask[val] > 0:
215
417
  thislag = initiallags[val]
216
418
  else:
217
419
  thislag = None
218
- """if initiallags is None:
219
- thislag = None
420
+ if isinstance(initialdelayvalue, np.ndarray):
421
+ thisinitialdelayvalue = initialdelayvalue[val]
220
422
  else:
221
- thislag = initiallags[val]"""
423
+ thisinitialdelayvalue = initialdelayvalue
222
424
  outQ.put(
223
425
  _procOneVoxelFitcorr(
224
426
  val,
@@ -228,8 +430,7 @@ def fitcorr(
228
430
  despeckle_thresh=despeckle_thresh,
229
431
  initiallag=thislag,
230
432
  fixdelay=fixdelay,
231
- fixeddelayvalue=fixdelayvalue,
232
- rt_floatset=rt_floatset,
433
+ initialdelayvalue=thisinitialdelayvalue,
233
434
  rt_floattype=rt_floattype,
234
435
  )
235
436
  )
@@ -289,28 +490,23 @@ def fitcorr(
289
490
  unit="voxels",
290
491
  disable=(not showprogressbar),
291
492
  ):
292
- if themask is None:
293
- dothisone = True
493
+ # process and send the data
494
+ if (themask is None) or (initiallags is None):
294
495
  thislag = None
295
- elif themask[vox] > 0:
296
496
  dothisone = True
297
- thislag = initiallags[vox]
298
497
  else:
299
- dothisone = False
300
- thislag = None
498
+ if themask[vox] > 0:
499
+ thislag = initiallags[vox]
500
+ dothisone = True
501
+ else:
502
+ thislag = None
503
+ dothisone = False
504
+ if isinstance(initialdelayvalue, np.ndarray):
505
+ thisinitialdelayvalue = initialdelayvalue[vox]
506
+ else:
507
+ thisinitialdelayvalue = initialdelayvalue
301
508
  if dothisone:
302
- (
303
- dummy,
304
- volumetotalinc,
305
- lagtimes[vox],
306
- lagstrengths[vox],
307
- lagsigma[vox],
308
- gaussout[vox, :],
309
- windowout[vox, :],
310
- R2[vox],
311
- lagmask[vox],
312
- failreason,
313
- ) = _procOneVoxelFitcorr(
509
+ voxel = _procOneVoxelFitcorr(
314
510
  vox,
315
511
  corrout[vox, :],
316
512
  thefitter,
@@ -318,33 +514,41 @@ def fitcorr(
318
514
  despeckle_thresh=despeckle_thresh,
319
515
  initiallag=thislag,
320
516
  fixdelay=fixdelay,
321
- fixeddelayvalue=fixdelayvalue,
322
- rt_floatset=rt_floatset,
517
+ initialdelayvalue=thisinitialdelayvalue,
323
518
  rt_floattype=rt_floattype,
324
519
  )
325
- volumetotal += volumetotalinc
326
520
  if (
327
521
  thefitter.FML_INITAMPLOW
328
522
  | thefitter.FML_INITAMPHIGH
329
523
  | thefitter.FML_FITAMPLOW
330
524
  | thefitter.FML_FITAMPHIGH
331
- ) & failreason:
525
+ ) & voxel[9]:
332
526
  ampfails += 1
333
- if (thefitter.FML_INITWIDTHLOW | thefitter.FML_FITWIDTHLOW) & failreason:
527
+ if (thefitter.FML_INITWIDTHLOW | thefitter.FML_FITWIDTHLOW) & voxel[9]:
334
528
  lowwidthfails += 1
335
- if (thefitter.FML_INITWIDTHHIGH | thefitter.FML_FITWIDTHHIGH) & failreason:
529
+ if (thefitter.FML_INITWIDTHHIGH | thefitter.FML_FITWIDTHHIGH) & voxel[9]:
336
530
  highwidthfails += 1
337
- if (thefitter.FML_INITLAGLOW | thefitter.FML_INITLAGHIGH) & failreason:
531
+ if (thefitter.FML_INITLAGLOW | thefitter.FML_FITLAGLOW) & voxel[9]:
338
532
  lowlagfails += 1
339
- if (thefitter.FML_INITLAGLOW | thefitter.FML_FITLAGLOW) & failreason:
340
- lowlagfails += 1
341
- if (thefitter.FML_INITLAGHIGH | thefitter.FML_FITLAGHIGH) & failreason:
533
+ if (thefitter.FML_INITLAGHIGH | thefitter.FML_FITLAGHIGH) & voxel[9]:
342
534
  highlagfails += 1
343
- if thefitter.FML_INITFAIL & failreason:
535
+ if thefitter.FML_INITFAIL & voxel[9]:
344
536
  initfails += 1
345
- if thefitter.FML_FITFAIL & failreason:
537
+ if thefitter.FML_FITFAIL & voxel[9]:
346
538
  fitfails += 1
347
539
 
540
+ # if this is a despeckle pass, only accept the new values if the fit did not fail
541
+ if (voxel[9] == 0) or not despeckling:
542
+ volumetotal += voxel[1]
543
+ lagtimes[vox] = voxel[2]
544
+ lagstrengths[vox] = voxel[3]
545
+ lagsigma[vox] = voxel[4]
546
+ gaussout[vox, :] = voxel[5]
547
+ windowout[vox, :] = voxel[6]
548
+ R2[vox] = voxel[7]
549
+ lagmask[vox] = voxel[8]
550
+ failimage[vox] = voxel[9] & 0xFFFF
551
+
348
552
  LGR.info(f"\nSimilarity function fitted in {volumetotal} voxels")
349
553
  LGR.info(
350
554
  f"\tampfails: {ampfails}"