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.
@@ -20,18 +20,42 @@ import argparse
20
20
  import os
21
21
  import subprocess
22
22
  import sys
23
+ from argparse import Namespace
23
24
  from glob import glob
25
+ from typing import Any, Callable, Dict, List, Optional, Tuple, Union
24
26
 
25
27
  import numpy as np
28
+ from numpy.typing import NDArray
26
29
 
27
30
  import rapidtide.externaltools as tide_exttools
28
31
  import rapidtide.io as tide_io
29
32
  import rapidtide.workflows.parser_funcs as pf
30
33
 
31
34
 
32
- def _get_parser():
35
+ def _get_parser() -> Any:
33
36
  """
34
- Argument parser for atlastool
37
+ Argument parser for atlastool.
38
+
39
+ This function constructs and returns an `argparse.ArgumentParser` object configured
40
+ with all the necessary arguments for the `atlastool` utility. It supports parsing
41
+ of NIfTI atlas files, with options for transforming, splitting, masking, and
42
+ reformatting atlas data.
43
+
44
+ Returns
45
+ -------
46
+ argparse.ArgumentParser
47
+ Configured argument parser for atlastool.
48
+
49
+ Notes
50
+ -----
51
+ The parser includes both required and optional arguments for handling NIfTI files,
52
+ including support for 3D and 4D output formats, splitting regions along the midline,
53
+ applying masks, and debugging options.
54
+
55
+ Examples
56
+ --------
57
+ >>> parser = _get_parser()
58
+ >>> args = parser.parse_args()
35
59
  """
36
60
  parser = argparse.ArgumentParser(
37
61
  prog="atlastool",
@@ -75,7 +99,7 @@ def _get_parser():
75
99
  action="store",
76
100
  type=lambda x: pf.is_float(parser, x),
77
101
  metavar="FILE",
78
- help=("Threshhold for autogenerated mask (default is 0.25)."),
102
+ help=("Threshold for autogenerated mask (default is 0.25)."),
79
103
  default=0.25,
80
104
  )
81
105
  parser.add_argument(
@@ -156,7 +180,80 @@ def _get_parser():
156
180
  return parser
157
181
 
158
182
 
159
- def atlastool(args):
183
+ def atlastool(args: Any) -> None:
184
+ """
185
+ Process and convert atlas templates for neuroimaging analysis.
186
+
187
+ This function reads a template NIfTI file, reshapes it into a 4D array, and optionally
188
+ splits left-right regions, resamples to a target resolution, applies a mask, and saves
189
+ the processed data as a new NIfTI file. It supports both 3D and 4D input templates,
190
+ and can handle label files for region mapping.
191
+
192
+ Parameters
193
+ ----------
194
+ args : Any
195
+ An object containing command-line arguments. Expected attributes include:
196
+ - inputtemplatename : str
197
+ Path to the input NIfTI template file.
198
+ - debug : bool
199
+ If True, print debug information.
200
+ - maxval : float, optional
201
+ Maximum value to truncate template data.
202
+ - labelfile : str, optional
203
+ Path to a text file containing region labels.
204
+ - dosplit : bool
205
+ If True, split regions into left and right hemispheres.
206
+ - LtoR : bool
207
+ If True, assign left hemisphere labels first.
208
+ - targetfile : str, optional
209
+ Path to a target NIfTI file for resampling.
210
+ - xfm : str, optional
211
+ Path to transformation file for resampling.
212
+ - maskfile : str, optional
213
+ Path to a mask NIfTI file.
214
+ - maskthresh : float
215
+ Threshold for generating mask from template if no maskfile is provided.
216
+ - removeemptyregions : bool
217
+ If True, remove regions with no voxels.
218
+ - volumeperregion : bool
219
+ If True, save each region as a separate volume; otherwise, save as a
220
+ single label map.
221
+ - outputtemplatename : str
222
+ Path for the output NIfTI file.
223
+
224
+ Returns
225
+ -------
226
+ None
227
+ This function does not return a value but saves processed data to disk.
228
+
229
+ Notes
230
+ -----
231
+ - The function supports both 3D and 4D input templates.
232
+ - If `targetfile` is provided, the template is resampled using FSL or ANTs.
233
+ - If `maskfile` is not provided, a mask is generated from the template using
234
+ `maskthresh`.
235
+ - Labels from `labelfile` are used in the output if provided.
236
+
237
+ Examples
238
+ --------
239
+ >>> import argparse
240
+ >>> args = argparse.Namespace(
241
+ ... inputtemplatename='template.nii.gz',
242
+ ... debug=False,
243
+ ... maxval=None,
244
+ ... labelfile='labels.txt',
245
+ ... dosplit=True,
246
+ ... LtoR=True,
247
+ ... targetfile='target.nii.gz',
248
+ ... xfm='transform.mat',
249
+ ... maskfile=None,
250
+ ... maskthresh=0.5,
251
+ ... removeemptyregions=True,
252
+ ... volumeperregion=False,
253
+ ... outputtemplatename='output.nii.gz'
254
+ ... )
255
+ >>> atlastool(args)
256
+ """
160
257
  if args.debug:
161
258
  print(args)
162
259
 
@@ -198,13 +295,13 @@ def atlastool(args):
198
295
  if args.debug:
199
296
  print(f"numregions is {numregions}")
200
297
  rs_template = np.reshape(template_data, numvoxels)
298
+ print(f"{rs_template.shape=}")
201
299
  templatevoxels = np.zeros((numvoxels, numregions))
202
300
  validvoxels = np.where(rs_template > 0)[0]
203
301
  print(f"{len(validvoxels)} valid voxels")
204
302
  for thevoxel in validvoxels:
205
303
  templatevoxels[thevoxel, int(round(rs_template[thevoxel], 0)) - 1] = 1
206
- maskvoxels = np.max(templatevoxels, axis=1).astype(np.uint16)
207
- maskvoxels[np.where(maskvoxels > args.maskthresh)] = 1
304
+ print(f"{templatevoxels.shape=}")
208
305
 
209
306
  # read in the label file, if there is one
210
307
  if args.labelfile is not None:
@@ -386,8 +483,24 @@ def atlastool(args):
386
483
  f"Dimensions of {args.maskfile} do not match the target dimensions - exiting"
387
484
  )
388
485
  else:
389
- maskvoxels = np.max(templatevoxels, axis=1).astype(np.uint16)
390
- maskvoxels[np.where(maskvoxels > args.maskthresh)] = 1
486
+ maskvoxels = np.max(templatevoxels, axis=1)
487
+ mask_hdr = template_hdr.copy()
488
+ mask_hdr["dim"][4] = 1
489
+ if args.debug:
490
+ tide_io.savetonifti(
491
+ maskvoxels.reshape((xsize, ysize, numslices)),
492
+ mask_hdr,
493
+ "masktemp1",
494
+ )
495
+ maskvoxels = np.where(maskvoxels > args.maskthresh, 1, 0)
496
+ maskvoxels = maskvoxels.astype(np.uint16)
497
+ if args.debug:
498
+ tide_io.savetonifti(
499
+ maskvoxels.reshape((xsize, ysize, numslices)),
500
+ mask_hdr,
501
+ "masktemp2",
502
+ )
503
+ print(f"{np.sum(maskvoxels)=}")
391
504
 
392
505
  # eliminate any newly missing values
393
506
  numnonzero = 0
@@ -404,9 +517,17 @@ def atlastool(args):
404
517
  else:
405
518
  print(f"no voxels with value {i + 1} - removing.")
406
519
  numregions = numnonzero
520
+ else:
521
+ numnonzero = numregions
407
522
 
408
523
  for theregion in range(numregions):
524
+ if args.debug:
525
+ print(f"region {theregion}:")
526
+ print(f"\tprior to masking: {np.sum(templatevoxels[:, theregion])} voxels")
409
527
  templatevoxels[:, theregion] *= maskvoxels
528
+ if args.debug:
529
+ print(f"\tafter masking: {np.sum(templatevoxels[:, theregion])} voxels")
530
+ print()
410
531
 
411
532
  if args.volumeperregion:
412
533
  outputvoxels = templatevoxels[:, : numnonzero + 1]
@@ -0,0 +1,490 @@
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
+
24
+ import rapidtide.calcsimfunc as tide_calcsimfunc
25
+ import rapidtide.io as tide_io
26
+ import rapidtide.linfitfiltpass as tide_linfitfiltpass
27
+ import rapidtide.makelaggedtcs as tide_makelagged
28
+ import rapidtide.stats as tide_stats
29
+ import rapidtide.util as tide_util
30
+
31
+
32
+ def makeRIPTiDeRegressors(
33
+ initial_fmri_x: Any,
34
+ lagmin: Any,
35
+ lagmax: Any,
36
+ lagtcgenerator: Any,
37
+ LGR: Any,
38
+ nprocs: int = 1,
39
+ alwaysmultiproc: bool = False,
40
+ showprogressbar: bool = True,
41
+ chunksize: int = 1000,
42
+ targetstep: float = 2.5,
43
+ edgepad: int = 0,
44
+ rt_floattype: np.dtype = np.float64,
45
+ debug: bool = False,
46
+ ) -> Tuple[NDArray, NDArray]:
47
+ """
48
+ Generate regressors for RIPTiDe (Regressors for Inverse Temporal Deconvolution).
49
+
50
+ This function creates a set of lagged temporal regressors based on the provided
51
+ parameters, which are used in the context of fMRI data analysis for temporal
52
+ deconvolution. It leverages the `tide_makelagged.makelaggedtcs` function to
53
+ compute the actual regressor matrix.
54
+
55
+ Parameters
56
+ ----------
57
+ initial_fmri_x : array_like
58
+ The initial fMRI time series data used to generate the regressors.
59
+ lagmin : float
60
+ The minimum lag (in seconds) to consider for regressor generation.
61
+ lagmax : float
62
+ The maximum lag (in seconds) to consider for regressor generation.
63
+ lagtcgenerator : callable
64
+ A function or callable object that generates lagged time courses.
65
+ LGR : object
66
+ An object containing parameters for the lagged time course generation.
67
+ nprocs : int, optional
68
+ Number of processes to use for parallel computation (default is 1).
69
+ alwaysmultiproc : bool, optional
70
+ If True, always use multiprocessing even for small datasets (default is False).
71
+ showprogressbar : bool, optional
72
+ If True, display a progress bar during computation (default is True).
73
+ chunksize : int, optional
74
+ Size of chunks for processing in multiprocessing (default is 1000).
75
+ targetstep : float, optional
76
+ Target step size (in seconds) between lags (default is 2.5).
77
+ edgepad : int, optional
78
+ Number of padding steps at the beginning and end of the lag range (default is 0).
79
+ rt_floattype : np.dtype, optional
80
+ Data type for the regressor matrix (default is np.float64).
81
+ debug : bool, optional
82
+ If True, print debug information during execution (default is False).
83
+
84
+ Returns
85
+ -------
86
+ tuple of (NDArray, NDArray)
87
+ A tuple containing:
88
+ - regressorset : NDArray
89
+ The computed regressor matrix of shape (num_lags, num_timepoints).
90
+ - delaystouse : NDArray
91
+ The array of delay values used for regressor generation.
92
+
93
+ Notes
94
+ -----
95
+ This function is intended for use in fMRI data analysis workflows where
96
+ temporal deconvolution is required. The regressors generated can be used
97
+ in subsequent steps such as GLM fitting or temporal filtering.
98
+
99
+ Examples
100
+ --------
101
+ >>> import numpy as np
102
+ >>> fmri_data = np.random.rand(100, 50)
103
+ >>> regressors, delays = makeRIPTiDeRegressors(
104
+ ... initial_fmri_x=fmri_data,
105
+ ... lagmin=0.0,
106
+ ... lagmax=10.0,
107
+ ... lagtcgenerator=my_lag_generator,
108
+ ... LGR=my_lgr_object,
109
+ ... nprocs=4,
110
+ ... debug=True
111
+ ... )
112
+ """
113
+ # make the RIPTiDe evs
114
+ numdelays = int(np.round((lagmax - lagmin) / targetstep, 0))
115
+ numregressors = numdelays + 2 * edgepad
116
+ delaystep = (lagmax - lagmin) / numdelays
117
+ delaystouse = np.linspace(
118
+ lagmin - edgepad * delaystep,
119
+ lagmax + edgepad * delaystep,
120
+ numdelays + 2 * edgepad,
121
+ endpoint=True,
122
+ )
123
+ if debug:
124
+ print(f"{lagmin=}")
125
+ print(f"{lagmax=}")
126
+ print(f"{numdelays=}")
127
+ print(f"{edgepad=}")
128
+ print(f"{numregressors=}")
129
+ print(f"{delaystep=}")
130
+ print(f"{delaystouse=}, {len(delaystouse)}")
131
+ print(f"{len(initial_fmri_x)}")
132
+
133
+ regressorset = np.zeros((len(delaystouse), len(initial_fmri_x)), dtype=rt_floattype)
134
+
135
+ dummy = tide_makelagged.makelaggedtcs(
136
+ lagtcgenerator,
137
+ initial_fmri_x,
138
+ np.ones_like(delaystouse, dtype=np.float64),
139
+ delaystouse,
140
+ regressorset,
141
+ LGR=LGR,
142
+ nprocs=nprocs,
143
+ alwaysmultiproc=alwaysmultiproc,
144
+ showprogressbar=showprogressbar,
145
+ chunksize=chunksize,
146
+ rt_floattype=rt_floattype,
147
+ debug=debug,
148
+ )
149
+
150
+ if debug:
151
+ print(regressorset)
152
+
153
+ return regressorset, delaystouse
154
+
155
+
156
+ def calcSimFunc(
157
+ numvalidspatiallocs: Any,
158
+ fmri_data_valid: Any,
159
+ validsimcalcstart: Any,
160
+ validsimcalcend: Any,
161
+ osvalidsimcalcstart: Any,
162
+ osvalidsimcalcend: Any,
163
+ initial_fmri_x: Any,
164
+ os_fmri_x: Any,
165
+ theCorrelator: Any,
166
+ theMutualInformationator: Any,
167
+ cleaned_referencetc: Any,
168
+ corrout: Any,
169
+ regressorset: Any,
170
+ delayvals: Any,
171
+ sLFOfitmean: Any,
172
+ r2value: Any,
173
+ fitcoeff: Any,
174
+ fitNorm: Any,
175
+ meanval: Any,
176
+ corrscale: Any,
177
+ outputname: Any,
178
+ outcorrarray: Any,
179
+ validvoxels: Any,
180
+ nativecorrshape: Any,
181
+ theinputdata: Any,
182
+ theheader: Any,
183
+ lagmininpts: Any,
184
+ lagmaxinpts: Any,
185
+ thepass: Any,
186
+ optiondict: Any,
187
+ LGR: Any,
188
+ TimingLGR: Any,
189
+ similaritymetric: str = "correlation",
190
+ simcalcoffset: int = 0,
191
+ echocancel: bool = False,
192
+ checkpoint: bool = False,
193
+ nprocs: int = 1,
194
+ alwaysmultiproc: bool = False,
195
+ oversampfactor: int = 2,
196
+ interptype: str = "univariate",
197
+ showprogressbar: bool = True,
198
+ chunksize: int = 1000,
199
+ rt_floattype: np.dtype = np.float64,
200
+ mklthreads: int = 1,
201
+ threaddebug: bool = False,
202
+ debug: bool = False,
203
+ ) -> str:
204
+ """
205
+ Compute similarity metrics (correlation, mutual information, or RIPtiDe) between fMRI data and a reference time series.
206
+
207
+ This function performs similarity calculations across voxels using either correlation, mutual information,
208
+ or a hybrid method, depending on the specified `similaritymetric`. It supports multi-processing and can
209
+ optionally save intermediate results.
210
+
211
+ Parameters
212
+ ----------
213
+ numvalidspatiallocs : Any
214
+ Number of valid spatial locations in the fMRI data.
215
+ fmri_data_valid : Any
216
+ Valid fMRI data array, typically of shape (n_voxels, n_timepoints).
217
+ validsimcalcstart : Any
218
+ Start index for valid timepoints to use in similarity calculation.
219
+ validsimcalcend : Any
220
+ End index for valid timepoints to use in similarity calculation.
221
+ osvalidsimcalcstart : Any
222
+ Start index for oversampled valid timepoints.
223
+ osvalidsimcalcend : Any
224
+ End index for oversampled valid timepoints.
225
+ initial_fmri_x : Any
226
+ Initial fMRI timepoints (e.g., for correlation).
227
+ os_fmri_x : Any
228
+ Oversampled fMRI timepoints.
229
+ theCorrelator : Any
230
+ Correlator object used for computing correlations.
231
+ theMutualInformationator : Any
232
+ Mutual information calculator object.
233
+ cleaned_referencetc : Any
234
+ Cleaned reference time series.
235
+ corrout : Any
236
+ Output array for storing correlation results.
237
+ regressorset : Any
238
+ Set of regressors for fitting.
239
+ delayvals : Any
240
+ Array of delay values for RIPtiDe calculation.
241
+ sLFOfitmean : Any
242
+ Mean value for fitting.
243
+ r2value : Any
244
+ R² values for model fit.
245
+ fitcoeff : Any
246
+ Fitting coefficients.
247
+ fitNorm : Any
248
+ Normalization values for fitting.
249
+ meanval : Any
250
+ Mean value used in normalization.
251
+ corrscale : Any
252
+ Correlation scale for lag calculation.
253
+ outputname : Any
254
+ Base name for output files.
255
+ outcorrarray : Any
256
+ Array to store correlation output for checkpointing.
257
+ validvoxels : Any
258
+ Indices of valid voxels.
259
+ nativecorrshape : Any
260
+ Shape of the native correlation array.
261
+ theinputdata : Any
262
+ Input data object.
263
+ theheader : Any
264
+ Header information for NIfTI output.
265
+ lagmininpts : Any
266
+ Minimum lag in timepoints.
267
+ lagmaxinpts : Any
268
+ Maximum lag in timepoints.
269
+ thepass : Any
270
+ Pass number for tracking multiple iterations.
271
+ optiondict : Any
272
+ Dictionary of options for saving results.
273
+ LGR : Any
274
+ Logger for general messages.
275
+ TimingLGR : Any
276
+ Logger for timing information.
277
+ similaritymetric : str, optional
278
+ Type of similarity metric to compute. Options are:
279
+ 'correlation', 'mutualinfo', 'riptide', or 'hybrid'. Default is 'correlation'.
280
+ simcalcoffset : int, optional
281
+ Offset to subtract from computed lags. Default is 0.
282
+ echocancel : bool, optional
283
+ Whether to cancel echo effects. Default is False.
284
+ checkpoint : bool, optional
285
+ Whether to save intermediate results. Default is False.
286
+ nprocs : int, optional
287
+ Number of processes for multiprocessing. Default is 1.
288
+ alwaysmultiproc : bool, optional
289
+ Force multiprocessing even for single-core cases. Default is False.
290
+ oversampfactor : int, optional
291
+ Oversampling factor for interpolation. Default is 2.
292
+ interptype : str, optional
293
+ Interpolation type. Default is 'univariate'.
294
+ showprogressbar : bool, optional
295
+ Whether to show a progress bar. Default is True.
296
+ chunksize : int, optional
297
+ Size of chunks for processing. Default is 1000.
298
+ rt_floattype : np.dtype, optional
299
+ Rapidtide floating-point data type. Default is np.float64.
300
+ mklthreads : int, optional
301
+ Number of threads for Intel MKL. Default is 1.
302
+ threaddebug : bool, optional
303
+ Enable thread debugging. Default is False.
304
+ debug : bool, optional
305
+ Enable debug mode. Default is False.
306
+
307
+ Returns
308
+ -------
309
+ str
310
+ The type of similarity metric used in the calculation.
311
+
312
+ Notes
313
+ -----
314
+ - For 'riptide', the function fits linear models to delayed regressors.
315
+ - The function logs timing and processing information using `TimingLGR` and `LGR`.
316
+ - If `checkpoint` is True, intermediate correlation results are saved to disk.
317
+ - This function modifies `corrout` and `outcorrarray` in-place.
318
+
319
+ Examples
320
+ --------
321
+ >>> calcSimFunc(
322
+ ... numvalidspatiallocs=100,
323
+ ... fmri_data_valid=np.random.rand(100, 100),
324
+ ... validsimcalcstart=0,
325
+ ... validsimcalcend=99,
326
+ ... osvalidsimcalcstart=0,
327
+ ... osvalidsimcalcend=99,
328
+ ... initial_fmri_x=np.linspace(0, 1, 100),
329
+ ... os_fmri_x=np.linspace(0, 1, 100),
330
+ ... theCorrelator=correlator_obj,
331
+ ... theMutualInformationator=mi_obj,
332
+ ... cleaned_referencetc=np.random.rand(100),
333
+ ... corrout=np.zeros((100, 100)),
334
+ ... regressorset=np.random.rand(10, 100),
335
+ ... delayvals=np.array([0, 1, 2]),
336
+ ... sLFOfitmean=np.mean(np.random.rand(100)),
337
+ ... r2value=np.zeros(100),
338
+ ... fitcoeff=np.zeros((100, 1)),
339
+ ... fitNorm=np.ones(100),
340
+ ... meanval=np.mean(np.random.rand(100)),
341
+ ... corrscale=np.arange(100),
342
+ ... outputname="test_output",
343
+ ... outcorrarray=np.zeros((100, 100)),
344
+ ... validvoxels=np.arange(100),
345
+ ... nativecorrshape=(100, 100),
346
+ ... theinputdata=input_data_obj,
347
+ ... theheader=header,
348
+ ... lagmininpts=-5,
349
+ ... lagmaxinpts=5,
350
+ ... thepass=1,
351
+ ... optiondict={},
352
+ ... LGR=logging.getLogger(),
353
+ ... TimingLGR=logging.getLogger(),
354
+ ... similaritymetric="correlation",
355
+ ... nprocs=2,
356
+ ... checkpoint=True,
357
+ ... )
358
+ 'Correlation'
359
+ """
360
+ # Step 1 - Correlation step
361
+ if similaritymetric == "mutualinfo":
362
+ similaritytype = "Mutual information"
363
+ elif similaritymetric == "correlation":
364
+ similaritytype = "Correlation"
365
+ elif similaritymetric == "riptide":
366
+ similaritytype = "RIPTiDe"
367
+ else:
368
+ similaritytype = "MI enhanced correlation"
369
+ LGR.info(f"\n\n{similaritytype} calculation, pass {thepass}")
370
+ TimingLGR.info(f"{similaritytype} calculation start, pass {thepass}")
371
+
372
+ tide_util.disablemkl(nprocs, debug=threaddebug)
373
+ if similaritymetric == "mutualinfo":
374
+ theMutualInformationator.setlimits(lagmininpts, lagmaxinpts)
375
+ (
376
+ voxelsprocessed_cp,
377
+ theglobalmaxlist,
378
+ trimmedcorrscale,
379
+ ) = tide_calcsimfunc.correlationpass(
380
+ fmri_data_valid[:, validsimcalcstart : validsimcalcend + 1],
381
+ cleaned_referencetc,
382
+ theMutualInformationator,
383
+ initial_fmri_x[validsimcalcstart : validsimcalcend + 1],
384
+ os_fmri_x[osvalidsimcalcstart : osvalidsimcalcend + 1],
385
+ lagmininpts,
386
+ lagmaxinpts,
387
+ corrout,
388
+ meanval,
389
+ nprocs=nprocs,
390
+ alwaysmultiproc=alwaysmultiproc,
391
+ oversampfactor=oversampfactor,
392
+ interptype=interptype,
393
+ showprogressbar=showprogressbar,
394
+ chunksize=chunksize,
395
+ rt_floattype=rt_floattype,
396
+ debug=debug,
397
+ )
398
+ elif (similaritymetric == "correlation") or (similaritymetric == "hybrid"):
399
+ (
400
+ voxelsprocessed_cp,
401
+ theglobalmaxlist,
402
+ trimmedcorrscale,
403
+ ) = tide_calcsimfunc.correlationpass(
404
+ fmri_data_valid[:, validsimcalcstart : validsimcalcend + 1],
405
+ cleaned_referencetc,
406
+ theCorrelator,
407
+ initial_fmri_x[validsimcalcstart : validsimcalcend + 1],
408
+ os_fmri_x[osvalidsimcalcstart : osvalidsimcalcend + 1],
409
+ lagmininpts,
410
+ lagmaxinpts,
411
+ corrout,
412
+ meanval,
413
+ nprocs=nprocs,
414
+ alwaysmultiproc=alwaysmultiproc,
415
+ oversampfactor=oversampfactor,
416
+ interptype=interptype,
417
+ showprogressbar=showprogressbar,
418
+ chunksize=chunksize,
419
+ rt_floattype=rt_floattype,
420
+ debug=debug,
421
+ )
422
+ elif similaritymetric == "riptide":
423
+ # do the linear fit to the comb of delayed regressors
424
+ for thedelay in range(len(delayvals)):
425
+ print(f"Fitting delay {delayvals[thedelay]:.2f}")
426
+ voxelsprocessed_cp = tide_linfitfiltpass.linfitfiltpass(
427
+ numvalidspatiallocs,
428
+ fmri_data_valid[:, validsimcalcstart : validsimcalcend + 1],
429
+ 0.0,
430
+ regressorset[thedelay, validsimcalcstart : validsimcalcend + 1],
431
+ sLFOfitmean,
432
+ corrout[:, thedelay],
433
+ r2value,
434
+ fitcoeff,
435
+ fitNorm,
436
+ None,
437
+ None,
438
+ coefficientsonly=True,
439
+ constantevs=True,
440
+ nprocs=nprocs,
441
+ alwaysmultiproc=alwaysmultiproc,
442
+ showprogressbar=showprogressbar,
443
+ verbose=(LGR is not None),
444
+ chunksize=chunksize,
445
+ rt_floattype=rt_floattype,
446
+ debug=debug,
447
+ )
448
+ else:
449
+ print("illegal similarity metric")
450
+
451
+ tide_util.enablemkl(mklthreads, debug=threaddebug)
452
+
453
+ if similaritymetric != "riptide":
454
+ for i in range(len(theglobalmaxlist)):
455
+ theglobalmaxlist[i] = corrscale[theglobalmaxlist[i]] - simcalcoffset
456
+ namesuffix = "_desc-globallag_hist"
457
+ tide_stats.makeandsavehistogram(
458
+ np.asarray(theglobalmaxlist),
459
+ len(corrscale),
460
+ 0,
461
+ outputname + namesuffix,
462
+ displaytitle="Histogram of lag times from global lag calculation",
463
+ therange=(corrscale[0], corrscale[-1]),
464
+ refine=False,
465
+ dictvarname="globallaghist_pass" + str(thepass),
466
+ append=(echocancel or (thepass > 1)),
467
+ thedict=optiondict,
468
+ )
469
+
470
+ if checkpoint:
471
+ outcorrarray[:, :] = 0.0
472
+ outcorrarray[validvoxels, :] = corrout[:, :]
473
+ if theinputdata.filetype == "text":
474
+ tide_io.writenpvecs(
475
+ outcorrarray.reshape(nativecorrshape),
476
+ f"{outputname}_corrout_prefit_pass" + str(thepass) + ".txt",
477
+ )
478
+ else:
479
+ savename = f"{outputname}_desc-corroutprefit_pass-" + str(thepass)
480
+ tide_io.savetonifti(outcorrarray.reshape(nativecorrshape), theheader, savename)
481
+
482
+ TimingLGR.info(
483
+ f"{similaritytype} calculation end, pass {thepass}",
484
+ {
485
+ "message2": voxelsprocessed_cp,
486
+ "message3": "voxels",
487
+ },
488
+ )
489
+
490
+ return similaritytype