rapidtide 2.9.6__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 +92 -42
  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 +2 -2
  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 +108 -92
  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 +587 -1116
  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 +835 -144
  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.6.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 +26 -14
  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 +1785 -1858
  292. rapidtide/workflows/rapidtide2std.py +101 -3
  293. rapidtide/workflows/rapidtide_parser.py +590 -389
  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.6.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.6.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.6.data/scripts/adjustoffset +0 -23
  346. rapidtide-2.9.6.data/scripts/aligntcs +0 -23
  347. rapidtide-2.9.6.data/scripts/applydlfilter +0 -23
  348. rapidtide-2.9.6.data/scripts/atlasaverage +0 -23
  349. rapidtide-2.9.6.data/scripts/atlastool +0 -23
  350. rapidtide-2.9.6.data/scripts/calcicc +0 -22
  351. rapidtide-2.9.6.data/scripts/calctexticc +0 -23
  352. rapidtide-2.9.6.data/scripts/calcttest +0 -22
  353. rapidtide-2.9.6.data/scripts/ccorrica +0 -23
  354. rapidtide-2.9.6.data/scripts/diffrois +0 -23
  355. rapidtide-2.9.6.data/scripts/endtidalproc +0 -23
  356. rapidtide-2.9.6.data/scripts/filtnifti +0 -23
  357. rapidtide-2.9.6.data/scripts/filttc +0 -23
  358. rapidtide-2.9.6.data/scripts/fingerprint +0 -593
  359. rapidtide-2.9.6.data/scripts/fixtr +0 -23
  360. rapidtide-2.9.6.data/scripts/glmfilt +0 -24
  361. rapidtide-2.9.6.data/scripts/gmscalc +0 -22
  362. rapidtide-2.9.6.data/scripts/happy +0 -25
  363. rapidtide-2.9.6.data/scripts/happy2std +0 -23
  364. rapidtide-2.9.6.data/scripts/happywarp +0 -350
  365. rapidtide-2.9.6.data/scripts/histnifti +0 -23
  366. rapidtide-2.9.6.data/scripts/histtc +0 -23
  367. rapidtide-2.9.6.data/scripts/localflow +0 -23
  368. rapidtide-2.9.6.data/scripts/mergequality +0 -23
  369. rapidtide-2.9.6.data/scripts/pairproc +0 -23
  370. rapidtide-2.9.6.data/scripts/pairwisemergenifti +0 -23
  371. rapidtide-2.9.6.data/scripts/physiofreq +0 -23
  372. rapidtide-2.9.6.data/scripts/pixelcomp +0 -23
  373. rapidtide-2.9.6.data/scripts/plethquality +0 -23
  374. rapidtide-2.9.6.data/scripts/polyfitim +0 -23
  375. rapidtide-2.9.6.data/scripts/proj2flow +0 -23
  376. rapidtide-2.9.6.data/scripts/rankimage +0 -23
  377. rapidtide-2.9.6.data/scripts/rapidtide +0 -23
  378. rapidtide-2.9.6.data/scripts/rapidtide2std +0 -23
  379. rapidtide-2.9.6.data/scripts/resamplenifti +0 -23
  380. rapidtide-2.9.6.data/scripts/resampletc +0 -23
  381. rapidtide-2.9.6.data/scripts/retroglm +0 -23
  382. rapidtide-2.9.6.data/scripts/roisummarize +0 -23
  383. rapidtide-2.9.6.data/scripts/runqualitycheck +0 -23
  384. rapidtide-2.9.6.data/scripts/showarbcorr +0 -23
  385. rapidtide-2.9.6.data/scripts/showhist +0 -23
  386. rapidtide-2.9.6.data/scripts/showstxcorr +0 -23
  387. rapidtide-2.9.6.data/scripts/showtc +0 -23
  388. rapidtide-2.9.6.data/scripts/showxcorr_legacy +0 -536
  389. rapidtide-2.9.6.data/scripts/showxcorrx +0 -23
  390. rapidtide-2.9.6.data/scripts/showxy +0 -23
  391. rapidtide-2.9.6.data/scripts/simdata +0 -23
  392. rapidtide-2.9.6.data/scripts/spatialdecomp +0 -23
  393. rapidtide-2.9.6.data/scripts/spatialfit +0 -23
  394. rapidtide-2.9.6.data/scripts/spatialmi +0 -23
  395. rapidtide-2.9.6.data/scripts/spectrogram +0 -23
  396. rapidtide-2.9.6.data/scripts/synthASL +0 -23
  397. rapidtide-2.9.6.data/scripts/tcfrom2col +0 -23
  398. rapidtide-2.9.6.data/scripts/tcfrom3col +0 -23
  399. rapidtide-2.9.6.data/scripts/temporaldecomp +0 -23
  400. rapidtide-2.9.6.data/scripts/threeD +0 -236
  401. rapidtide-2.9.6.data/scripts/tidepool +0 -23
  402. rapidtide-2.9.6.data/scripts/variabilityizer +0 -23
  403. rapidtide-2.9.6.dist-info/RECORD +0 -359
  404. rapidtide-2.9.6.dist-info/top_level.txt +0 -86
  405. {rapidtide-2.9.6.dist-info → rapidtide-3.1.3.dist-info/licenses}/LICENSE +0 -0
@@ -1,641 +0,0 @@
1
- #!/usr/bin/env python
2
- # -*- coding: utf-8 -*-
3
- #
4
- # Copyright 2016-2024 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
- import gc
20
- import logging
21
- import sys
22
-
23
- import numpy as np
24
- from scipy.stats import pearsonr
25
- from sklearn.decomposition import PCA, FastICA
26
- from tqdm import tqdm
27
-
28
- import rapidtide.fit as tide_fit
29
- import rapidtide.io as tide_io
30
- import rapidtide.miscmath as tide_math
31
- import rapidtide.multiproc as tide_multiproc
32
- import rapidtide.resample as tide_resample
33
- import rapidtide.stats as tide_stats
34
-
35
- LGR = logging.getLogger("GENERAL")
36
-
37
-
38
- def _procOneVoxelTimeShift(
39
- vox,
40
- fmritc,
41
- lagtime,
42
- padtrs,
43
- fmritr,
44
- detrendorder=1,
45
- offsettime=0.0,
46
- rt_floatset=np.float64,
47
- rt_floattype="float64",
48
- ):
49
- if detrendorder > 0:
50
- normtc = tide_fit.detrend(fmritc, order=detrendorder, demean=True)
51
- else:
52
- normtc = fmritc + 0.0
53
- shifttr = -(-offsettime + lagtime) / fmritr # lagtime is in seconds
54
- [shiftedtc, weights, paddedshiftedtc, paddedweights] = tide_resample.timeshift(
55
- normtc, shifttr, padtrs
56
- )
57
- return vox, shiftedtc, weights, paddedshiftedtc, paddedweights
58
-
59
-
60
- def alignvoxels(
61
- fmridata,
62
- fmritr,
63
- shiftedtcs,
64
- weights,
65
- paddedshiftedtcs,
66
- paddedweights,
67
- lagtimes,
68
- lagmask,
69
- detrendorder=1,
70
- offsettime=0.0,
71
- nprocs=1,
72
- alwaysmultiproc=False,
73
- showprogressbar=True,
74
- chunksize=1000,
75
- padtrs=60,
76
- debug=False,
77
- rt_floatset=np.float64,
78
- rt_floattype="float64",
79
- ):
80
- """
81
- This routine applies a timeshift to every voxel in the image.
82
- Inputs are:
83
- fmridata - the fmri data, filtered to the passband
84
- fmritr - the timestep of the data
85
- shiftedtcs,
86
- weights,
87
- paddedshiftedtcs,
88
- paddedweights,
89
- lagtimes, lagmask - the results of the correlation fit.
90
- detrendorder - the order of the polynomial to use to detrend the data
91
- offsettime - the global timeshift to apply to all timecourses
92
- nprocs - the number of processes to use if multiprocessing is enabled
93
-
94
- Explicit outputs are:
95
- volumetotal - the number of voxels processed
96
-
97
- Implicit outputs:
98
- shiftedtcs - voxelwise fmri data timeshifted to zero lag
99
- weights - the weights of every timepoint in the final regressor
100
- paddedshiftedtcs - voxelwise fmri data timeshifted to zero lag, with a bufffer of padtrs on each end
101
- paddedweights - the weights of every timepoint in the final regressor, with a bufffer of padtrs on each end
102
-
103
-
104
- Parameters
105
- ----------
106
- fmridata : 4D numpy float array
107
- fMRI data
108
- fmritr : float
109
- Data repetition rate, in seconds
110
- shiftedtcs : 4D numpy float array
111
- Destination array for time aligned voxel timecourses
112
- weights : unknown
113
- unknown
114
- passnum : int
115
- Number of the pass (for labelling output)
116
- lagstrengths : 3D numpy float array
117
- Maximum correlation coefficient in every voxel
118
- lagtimes : 3D numpy float array
119
- Time delay of maximum crosscorrelation in seconds
120
- lagsigma : 3D numpy float array
121
- Gaussian width of the crosscorrelation peak, in seconds.
122
- lagmask : 3D numpy float array
123
- Mask of voxels with successful correlation fits.
124
- R2 : 3D numpy float array
125
- Square of the maximum correlation coefficient in every voxel
126
- theprefilter : function
127
- The filter function to use
128
- optiondict : dict
129
- Dictionary of all internal rapidtide configuration variables.
130
- padtrs : int, optional
131
- Number of timepoints to pad onto each end
132
- includemask : 3D array
133
- Mask of voxels to include in refinement. Default is None (all voxels).
134
- excludemask : 3D array
135
- Mask of voxels to exclude from refinement. Default is None (no voxels).
136
- debug : bool
137
- Enable additional debugging output. Default is False
138
- rt_floatset : function
139
- Function to coerce variable types
140
- rt_floattype : {'float32', 'float64'}
141
- Data type for internal variables
142
-
143
- Returns
144
- -------
145
- volumetotal : int
146
- Number of voxels processed
147
- outputdata : float array
148
- New regressor
149
- maskarray : 3D array
150
- Mask of voxels used for refinement
151
- """
152
- inputshape = np.shape(fmridata)
153
- volumetotal = np.sum(lagmask)
154
-
155
- # timeshift the valid voxels
156
- if nprocs > 1 or alwaysmultiproc:
157
- # define the consumer function here so it inherits most of the arguments
158
- def timeshift_consumer(inQ, outQ):
159
- while True:
160
- try:
161
- # get a new message
162
- val = inQ.get()
163
-
164
- # this is the 'TERM' signal
165
- if val is None:
166
- break
167
-
168
- # process and send the data
169
- outQ.put(
170
- _procOneVoxelTimeShift(
171
- val,
172
- fmridata[val, :],
173
- lagtimes[val],
174
- padtrs,
175
- fmritr,
176
- detrendorder=detrendorder,
177
- offsettime=offsettime,
178
- rt_floatset=rt_floatset,
179
- rt_floattype=rt_floattype,
180
- )
181
- )
182
-
183
- except Exception as e:
184
- print("error!", e)
185
- break
186
-
187
- data_out = tide_multiproc.run_multiproc(
188
- timeshift_consumer,
189
- inputshape,
190
- lagmask,
191
- nprocs=nprocs,
192
- showprogressbar=showprogressbar,
193
- chunksize=chunksize,
194
- )
195
-
196
- # unpack the data
197
- for voxel in data_out:
198
- shiftedtcs[voxel[0], :] = voxel[1]
199
- weights[voxel[0], :] = voxel[2]
200
- paddedshiftedtcs[voxel[0], :] = voxel[3]
201
- paddedweights[voxel[0], :] = voxel[4]
202
- del data_out
203
-
204
- else:
205
- for vox in tqdm(
206
- range(0, inputshape[0]),
207
- desc="Voxel timeshifts",
208
- unit="voxels",
209
- disable=(not showprogressbar),
210
- ):
211
- if lagmask[vox] > 0.5:
212
- retvals = _procOneVoxelTimeShift(
213
- vox,
214
- fmridata[vox, :],
215
- lagtimes[vox],
216
- padtrs,
217
- fmritr,
218
- detrendorder=detrendorder,
219
- offsettime=offsettime,
220
- rt_floatset=rt_floatset,
221
- rt_floattype=rt_floattype,
222
- )
223
- shiftedtcs[retvals[0], :] = retvals[1]
224
- weights[retvals[0], :] = retvals[2]
225
- paddedshiftedtcs[retvals[0], :] = retvals[3]
226
- paddedweights[retvals[0], :] = retvals[4]
227
- LGR.info(
228
- "Timeshift applied to " + str(int(volumetotal)) + " voxels",
229
- )
230
-
231
- # garbage collect
232
- uncollected = gc.collect()
233
- if uncollected != 0:
234
- LGR.info(f"garbage collected - unable to collect {uncollected} objects")
235
- else:
236
- LGR.info("garbage collected")
237
-
238
- return volumetotal
239
-
240
-
241
- def makerefinemask(
242
- lagstrengths,
243
- lagtimes,
244
- lagsigma,
245
- lagmask,
246
- offsettime=0.0,
247
- ampthresh=0.3,
248
- lagmaskside="both",
249
- lagminthresh=0.5,
250
- lagmaxthresh=5.0,
251
- sigmathresh=100,
252
- cleanrefined=False,
253
- bipolar=False,
254
- includemask=None,
255
- excludemask=None,
256
- debug=False,
257
- rt_floatset=np.float64,
258
- rt_floattype="float64",
259
- ):
260
- """
261
- This routine determines which voxels should be used for regressor refinement.
262
-
263
- Parameters
264
- ----------
265
- lagstrengths : 3D numpy float array
266
- Maximum correlation coefficient in every voxel
267
- lagtimes : 3D numpy float array
268
- Time delay of maximum crosscorrelation in seconds
269
- lagsigma : 3D numpy float array
270
- Gaussian width of the crosscorrelation peak, in seconds.
271
- lagmask : 3D numpy float array
272
- Mask of voxels with successful correlation fits.
273
- offsettime: float
274
- The offset time in seconds to apply to all regressors
275
- ampthresh: float
276
- The lower limit of correlation values to consider for refine mask inclusion
277
- lagmaskside: str
278
- Which side of the lag values to consider - upper, lower, or both
279
- lagminthresh: float
280
- The lower limit of absolute lag values to consider for refine mask inclusion
281
- lagmaxthresh: float
282
- The upper limit of absolute lag values to consider for refine mask inclusion
283
- sigmathresh: float
284
- The upper limit of lag peak width for refine mask inclusion
285
- cleanrefined: bool
286
- If True,
287
- bipolar : bool
288
- If True, consider positive and negative correlation peaks
289
- includemask : 3D array
290
- Mask of voxels to include in refinement. Default is None (all voxels).
291
- excludemask : 3D array
292
- Mask of voxels to exclude from refinement. Default is None (no voxels).
293
- debug : bool
294
- Enable additional debugging output. Default is False
295
- rt_floatset : function
296
- Function to coerce variable types
297
- rt_floattype : {'float32', 'float64'}
298
- Data type for internal variables
299
-
300
- Returns
301
- -------
302
- volumetotal : int
303
- Number of voxels processed
304
- maskarray : 3D array
305
- Mask of voxels used for refinement
306
- locationfails: int
307
- Number of locations eliminated due to the include and exclude masks
308
- ampfails: int
309
- Number of locations eliminated because the correlation value was too low
310
- lagfails: int
311
- Number of locations eliminated because the lag values were out of range
312
- sigmafails: int
313
- Number of locations eliminated because the correlation peak was too wide
314
- """
315
-
316
- if ampthresh < 0.0:
317
- if bipolar:
318
- theampthresh = tide_stats.getfracval(np.fabs(lagstrengths), -ampthresh, nozero=True)
319
- else:
320
- theampthresh = tide_stats.getfracval(lagstrengths, -ampthresh, nozero=True)
321
- LGR.info(f"setting ampthresh to the {-100.0 * ampthresh}th percentile ({theampthresh})")
322
- else:
323
- theampthresh = ampthresh
324
- if bipolar:
325
- ampmask = np.where(np.fabs(lagstrengths) >= theampthresh, np.int16(1), np.int16(0))
326
- else:
327
- ampmask = np.where(lagstrengths >= theampthresh, np.int16(1), np.int16(0))
328
- if lagmaskside == "upper":
329
- delaymask = np.where(
330
- (lagtimes - offsettime) > lagminthresh,
331
- np.int16(1),
332
- np.int16(0),
333
- ) * np.where(
334
- (lagtimes - offsettime) < lagmaxthresh,
335
- np.int16(1),
336
- np.int16(0),
337
- )
338
- elif lagmaskside == "lower":
339
- delaymask = np.where(
340
- (lagtimes - offsettime) < -lagminthresh,
341
- np.int16(1),
342
- np.int16(0),
343
- ) * np.where(
344
- (lagtimes - offsettime) > -lagmaxthresh,
345
- np.int16(1),
346
- np.int16(0),
347
- )
348
- else:
349
- abslag = abs(lagtimes - offsettime)
350
- delaymask = np.where(abslag > lagminthresh, np.int16(1), np.int16(0)) * np.where(
351
- abslag < lagmaxthresh, np.int16(1), np.int16(0)
352
- )
353
- sigmamask = np.where(lagsigma < sigmathresh, np.int16(1), np.int16(0))
354
- locationmask = lagmask + 0
355
- if includemask is not None:
356
- locationmask = locationmask * includemask
357
- if excludemask is not None:
358
- locationmask = locationmask * (1 - excludemask)
359
- locationmask = locationmask.astype(np.int16)
360
- LGR.info("location mask created")
361
-
362
- # first generate the refine mask
363
- locationfails = np.sum(1 - locationmask)
364
- ampfails = np.sum(1 - ampmask * locationmask)
365
- lagfails = np.sum(1 - delaymask * locationmask)
366
- sigmafails = np.sum(1 - sigmamask * locationmask)
367
- refinemask = locationmask * ampmask * delaymask * sigmamask
368
- if tide_stats.getmasksize(refinemask) == 0:
369
- print("ERROR: no voxels in the refine mask:")
370
- print(
371
- "\n ",
372
- locationfails,
373
- " locationfails",
374
- "\n ",
375
- ampfails,
376
- " ampfails",
377
- "\n ",
378
- lagfails,
379
- " lagfails",
380
- "\n ",
381
- sigmafails,
382
- " sigmafails",
383
- )
384
- if (includemask is None) and (excludemask is None):
385
- print("\nRelax ampthresh, delaythresh, or sigmathresh - exiting")
386
- else:
387
- print(
388
- "\nChange include/exclude masks or relax ampthresh, delaythresh, or sigmathresh - exiting"
389
- )
390
- return 0, None, locationfails, ampfails, lagfails, sigmafails, 0
391
-
392
- if cleanrefined:
393
- shiftmask = locationmask
394
- else:
395
- shiftmask = refinemask
396
- volumetotal = np.sum(shiftmask)
397
- LGR.info(
398
- f"{int(volumetotal)} voxels will be used for refinement:"
399
- + f"\n {locationfails} locationfails"
400
- + f"\n {ampfails} ampfails"
401
- + f"\n {lagfails} lagfails"
402
- + f"\n {sigmafails} sigmafails"
403
- )
404
- numinmask = np.sum(lagmask)
405
- if numinmask is None:
406
- numinmask = 0
407
-
408
- return volumetotal, shiftmask, locationfails, ampfails, lagfails, sigmafails, numinmask
409
-
410
-
411
- def prenorm(
412
- shiftedtcs,
413
- refinemask,
414
- lagtimes,
415
- lagmaxthresh,
416
- lagstrengths,
417
- R2vals,
418
- refineprenorm,
419
- refineweighting,
420
- debug=False,
421
- ):
422
- if debug:
423
- print(f"{shiftedtcs.shape=}"),
424
- print(f"{refinemask.shape=}"),
425
- print(f"{lagtimes.shape=}"),
426
- print(f"{lagmaxthresh=}"),
427
- print(f"{lagstrengths.shape=}"),
428
- print(f"{R2vals.shape=}"),
429
- print(f"{refineprenorm=}"),
430
- print(f"{refineweighting=}"),
431
- if refineprenorm == "mean":
432
- thedivisor = np.mean(shiftedtcs, axis=1)
433
- elif refineprenorm == "var":
434
- thedivisor = np.var(shiftedtcs, axis=1)
435
- elif refineprenorm == "std":
436
- thedivisor = np.std(shiftedtcs, axis=1)
437
- elif refineprenorm == "invlag":
438
- thedivisor = np.where(np.fabs(lagtimes) < lagmaxthresh, lagmaxthresh - lagtimes, 0.0)
439
- else:
440
- thedivisor = shiftedtcs[:, 0] * 0.0 + 1.0
441
-
442
- normfac = np.where(thedivisor != 0.0, 1.0 / thedivisor, 0.0)
443
-
444
- if refineweighting == "R":
445
- thisweight = lagstrengths
446
- elif refineweighting == "R2":
447
- thisweight = R2vals
448
- else:
449
- thisweight = np.where(lagstrengths > 0.0, 1.0, -1.0)
450
- thisweight *= refinemask
451
-
452
- if debug:
453
- print(f"{thedivisor.shape=}")
454
- print(f"{normfac.shape=}")
455
- print(f"{thisweight.shape=}")
456
-
457
- shiftedtcs *= (normfac * thisweight)[:, None]
458
-
459
-
460
- def dorefine(
461
- shiftedtcs,
462
- refinemask,
463
- weights,
464
- theprefilter,
465
- fmritr,
466
- passnum,
467
- lagstrengths,
468
- lagtimes,
469
- refinetype,
470
- fmrifreq,
471
- outputname,
472
- detrendorder=1,
473
- pcacomponents=0.8,
474
- dodispersioncalc=False,
475
- dispersioncalc_lower=0.0,
476
- dispersioncalc_upper=0.0,
477
- dispersioncalc_step=0.0,
478
- windowfunc="hamming",
479
- cleanrefined=False,
480
- bipolar=False,
481
- debug=False,
482
- rt_floatset=np.float64,
483
- rt_floattype="float64",
484
- ):
485
- # now generate the refined timecourse(s)
486
- inputshape = np.shape(shiftedtcs)
487
- validlist = np.where(refinemask > 0)[0]
488
- volumetotal = len(validlist)
489
- refinevoxels = shiftedtcs[validlist, :]
490
- if bipolar:
491
- for thevoxel in range(len(validlist)):
492
- if lagstrengths[validlist][thevoxel] < 0.0:
493
- refinevoxels[thevoxel, :] *= -1.0
494
- refineweights = weights[validlist]
495
- weightsum = np.sum(refineweights, axis=0) / volumetotal
496
- averagedata = np.sum(refinevoxels, axis=0) / volumetotal
497
- if cleanrefined:
498
- invalidlist = np.where((1 - refinemask) > 0)[0]
499
- discardvoxels = shiftedtcs[invalidlist]
500
- discardweights = weights[invalidlist]
501
- discardweightsum = np.sum(discardweights, axis=0) / volumetotal
502
- averagediscard = np.sum(discardvoxels, axis=0) / volumetotal
503
- if dodispersioncalc:
504
- LGR.info("splitting regressors by time lag for phase delay estimation")
505
- laglist = np.arange(
506
- dispersioncalc_lower,
507
- dispersioncalc_upper,
508
- dispersioncalc_step,
509
- )
510
- dispersioncalcout = np.zeros((np.shape(laglist)[0], inputshape[1]), dtype=rt_floattype)
511
- fftlen = int(inputshape[1] // 2)
512
- fftlen -= fftlen % 2
513
- dispersioncalcspecmag = np.zeros((np.shape(laglist)[0], fftlen), dtype=rt_floattype)
514
- dispersioncalcspecphase = np.zeros((np.shape(laglist)[0], fftlen), dtype=rt_floattype)
515
- ###### BBF dispersioncalc fails when the number of timepoints is odd (or even - not sure). Works the other way.
516
- for lagnum in range(0, np.shape(laglist)[0]):
517
- lower = laglist[lagnum] - dispersioncalc_step / 2.0
518
- upper = laglist[lagnum] + dispersioncalc_step / 2.0
519
- inlagrange = np.where(
520
- refinemask
521
- * np.where(lower < lagtimes, np.int16(1), np.int16(0))
522
- * np.where(lagtimes < upper, np.int16(1), np.int16(0))
523
- )[0]
524
- LGR.info(
525
- f"\tsumming {np.shape(inlagrange)[0]} regressors with lags from {lower} to {upper}"
526
- )
527
- if np.shape(inlagrange)[0] > 0:
528
- dispersioncalcout[lagnum, :] = tide_math.corrnormalize(
529
- np.mean(shiftedtcs[inlagrange], axis=0),
530
- detrendorder=detrendorder,
531
- windowfunc=windowfunc,
532
- )
533
- (
534
- freqs,
535
- dispersioncalcspecmag[lagnum, :],
536
- dispersioncalcspecphase[lagnum, :],
537
- ) = tide_math.polarfft(dispersioncalcout[lagnum, :], 1.0 / fmritr)
538
- inlagrange = None
539
- tide_io.writenpvecs(
540
- dispersioncalcout,
541
- outputname + "_dispersioncalcvecs_pass" + str(passnum) + ".txt",
542
- )
543
- tide_io.writenpvecs(
544
- dispersioncalcspecmag,
545
- outputname + "_dispersioncalcspecmag_pass" + str(passnum) + ".txt",
546
- )
547
- tide_io.writenpvecs(
548
- dispersioncalcspecphase,
549
- outputname + "_dispersioncalcspecphase_pass" + str(passnum) + ".txt",
550
- )
551
- tide_io.writenpvecs(
552
- freqs,
553
- outputname + "_dispersioncalcfreqs_pass" + str(passnum) + ".txt",
554
- )
555
-
556
- if pcacomponents < 0.0:
557
- pcacomponents = "mle"
558
- elif pcacomponents >= 1.0:
559
- pcacomponents = int(np.round(pcacomponents))
560
- elif pcacomponents == 0.0:
561
- print("0.0 is not an allowed value for pcacomponents")
562
- sys.exit()
563
- else:
564
- pcacomponents = pcacomponents
565
- icacomponents = 1
566
-
567
- if refinetype == "ica":
568
- LGR.info("performing ica refinement")
569
- thefit = FastICA(n_components=icacomponents).fit(refinevoxels) # Reconstruct signals
570
- LGR.info(f"Using first of {len(thefit.components_)} components")
571
- icadata = thefit.components_[0]
572
- filteredavg = tide_math.corrnormalize(
573
- theprefilter.apply(fmrifreq, averagedata),
574
- detrendorder=detrendorder,
575
- )
576
- filteredica = tide_math.corrnormalize(
577
- theprefilter.apply(fmrifreq, icadata),
578
- detrendorder=detrendorder,
579
- )
580
- thepxcorr = pearsonr(filteredavg, filteredica)[0]
581
- LGR.info(f"ica/avg correlation = {thepxcorr}")
582
- if thepxcorr > 0.0:
583
- outputdata = 1.0 * icadata
584
- else:
585
- outputdata = -1.0 * icadata
586
- elif refinetype == "pca":
587
- # use the method of "A novel perspective to calibrate temporal delays in cerebrovascular reactivity
588
- # using hypercapnic and hyperoxic respiratory challenges". NeuroImage 187, 154?165 (2019).
589
- LGR.info(f"performing pca refinement with pcacomponents set to {pcacomponents}")
590
- try:
591
- thefit = PCA(n_components=pcacomponents).fit(refinevoxels)
592
- except ValueError:
593
- if pcacomponents == "mle":
594
- LGR.info("mle estimation failed - falling back to pcacomponents=0.8")
595
- thefit = PCA(n_components=0.8).fit(refinevoxels)
596
- else:
597
- print("unhandled math exception in PCA refinement - exiting")
598
- sys.exit()
599
- LGR.info(
600
- f"Using {len(thefit.components_)} component(s), accounting for "
601
- + f"{100.0 * np.cumsum(thefit.explained_variance_ratio_)[len(thefit.components_) - 1]}% of the variance"
602
- )
603
- reduceddata = thefit.inverse_transform(thefit.transform(refinevoxels))
604
- if debug:
605
- print("complex processing: reduceddata.shape =", reduceddata.shape)
606
- pcadata = np.mean(reduceddata, axis=0)
607
- filteredavg = tide_math.corrnormalize(
608
- theprefilter.apply(fmrifreq, averagedata),
609
- detrendorder=detrendorder,
610
- )
611
- filteredpca = tide_math.corrnormalize(
612
- theprefilter.apply(fmrifreq, pcadata),
613
- detrendorder=detrendorder,
614
- )
615
- thepxcorr = pearsonr(filteredavg, filteredpca)[0]
616
- LGR.info(f"pca/avg correlation = {thepxcorr}")
617
- if thepxcorr > 0.0:
618
- outputdata = 1.0 * pcadata
619
- else:
620
- outputdata = -1.0 * pcadata
621
- elif refinetype == "weighted_average":
622
- LGR.info("performing weighted averaging refinement")
623
- outputdata = np.nan_to_num(averagedata / weightsum)
624
- else:
625
- LGR.info("performing unweighted averaging refinement")
626
- outputdata = averagedata
627
-
628
- if cleanrefined:
629
- thefit, R = tide_fit.mlregress(averagediscard, averagedata)
630
- fitcoff = rt_floatset(thefit[0, 1])
631
- datatoremove = rt_floatset(fitcoff * averagediscard)
632
- outputdata -= datatoremove
633
-
634
- # garbage collect
635
- uncollected = gc.collect()
636
- if uncollected != 0:
637
- LGR.info(f"garbage collected - unable to collect {uncollected} objects")
638
- else:
639
- LGR.info("garbage collected")
640
-
641
- return volumetotal, outputdata
@@ -1,23 +0,0 @@
1
- #!/usr/bin/env python
2
- # -*- coding: utf-8 -*-
3
- #
4
- # Copyright 2016-2024 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
- import rapidtide.workflows.parser_funcs as pf
20
- import rapidtide.workflows.retroglm as theworkflow
21
-
22
- if __name__ == "__main__":
23
- pf.generic_init(theworkflow._get_parser, theworkflow.retroglm)