rapidtide 2.9.5__py3-none-any.whl → 3.1.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (405) hide show
  1. cloud/gmscalc-HCPYA +1 -1
  2. cloud/mount-and-run +2 -0
  3. cloud/rapidtide-HCPYA +3 -3
  4. rapidtide/Colortables.py +538 -38
  5. rapidtide/OrthoImageItem.py +1094 -51
  6. rapidtide/RapidtideDataset.py +1709 -114
  7. rapidtide/__init__.py +0 -8
  8. rapidtide/_version.py +4 -4
  9. rapidtide/calccoherence.py +242 -97
  10. rapidtide/calcnullsimfunc.py +240 -140
  11. rapidtide/calcsimfunc.py +314 -129
  12. rapidtide/correlate.py +1211 -389
  13. rapidtide/data/examples/src/testLD +56 -0
  14. rapidtide/data/examples/src/test_findmaxlag.py +2 -2
  15. rapidtide/data/examples/src/test_mlregressallt.py +32 -17
  16. rapidtide/data/examples/src/testalign +1 -1
  17. rapidtide/data/examples/src/testatlasaverage +35 -7
  18. rapidtide/data/examples/src/testboth +21 -0
  19. rapidtide/data/examples/src/testcifti +11 -0
  20. rapidtide/data/examples/src/testdelayvar +13 -0
  21. rapidtide/data/examples/src/testdlfilt +25 -0
  22. rapidtide/data/examples/src/testfft +35 -0
  23. rapidtide/data/examples/src/testfileorfloat +37 -0
  24. rapidtide/data/examples/src/testfmri +94 -27
  25. rapidtide/data/examples/src/testfuncs +3 -3
  26. rapidtide/data/examples/src/testglmfilt +8 -6
  27. rapidtide/data/examples/src/testhappy +84 -51
  28. rapidtide/data/examples/src/testinitdelay +19 -0
  29. rapidtide/data/examples/src/testmodels +33 -0
  30. rapidtide/data/examples/src/testnewrefine +26 -0
  31. rapidtide/data/examples/src/testnoiseamp +21 -0
  32. rapidtide/data/examples/src/testppgproc +17 -0
  33. rapidtide/data/examples/src/testrefineonly +22 -0
  34. rapidtide/data/examples/src/testretro +26 -13
  35. rapidtide/data/examples/src/testretrolagtcs +16 -0
  36. rapidtide/data/examples/src/testrolloff +11 -0
  37. rapidtide/data/examples/src/testsimdata +45 -28
  38. rapidtide/data/models/model_cnn_pytorch/loss.png +0 -0
  39. rapidtide/data/models/model_cnn_pytorch/loss.txt +1 -0
  40. rapidtide/data/models/model_cnn_pytorch/model.pth +0 -0
  41. rapidtide/data/models/model_cnn_pytorch/model_meta.json +68 -0
  42. rapidtide/data/models/model_cnn_pytorch_fulldata/loss.png +0 -0
  43. rapidtide/data/models/model_cnn_pytorch_fulldata/loss.txt +1 -0
  44. rapidtide/data/models/model_cnn_pytorch_fulldata/model.pth +0 -0
  45. rapidtide/data/models/model_cnn_pytorch_fulldata/model_meta.json +80 -0
  46. rapidtide/data/models/model_cnnbp_pytorch_fullldata/loss.png +0 -0
  47. rapidtide/data/models/model_cnnbp_pytorch_fullldata/loss.txt +1 -0
  48. rapidtide/data/models/model_cnnbp_pytorch_fullldata/model.pth +0 -0
  49. rapidtide/data/models/model_cnnbp_pytorch_fullldata/model_meta.json +138 -0
  50. rapidtide/data/models/model_cnnfft_pytorch_fulldata/loss.png +0 -0
  51. rapidtide/data/models/model_cnnfft_pytorch_fulldata/loss.txt +1 -0
  52. rapidtide/data/models/model_cnnfft_pytorch_fulldata/model.pth +0 -0
  53. rapidtide/data/models/model_cnnfft_pytorch_fulldata/model_meta.json +128 -0
  54. rapidtide/data/models/model_ppgattention_pytorch_w128_fulldata/loss.png +0 -0
  55. rapidtide/data/models/model_ppgattention_pytorch_w128_fulldata/loss.txt +1 -0
  56. rapidtide/data/models/model_ppgattention_pytorch_w128_fulldata/model.pth +0 -0
  57. rapidtide/data/models/model_ppgattention_pytorch_w128_fulldata/model_meta.json +49 -0
  58. rapidtide/data/models/model_revised_tf2/model.keras +0 -0
  59. rapidtide/data/models/{model_serdar → model_revised_tf2}/model_meta.json +1 -1
  60. rapidtide/data/models/model_serdar2_tf2/model.keras +0 -0
  61. rapidtide/data/models/{model_serdar2 → model_serdar2_tf2}/model_meta.json +1 -1
  62. rapidtide/data/models/model_serdar_tf2/model.keras +0 -0
  63. rapidtide/data/models/{model_revised → model_serdar_tf2}/model_meta.json +1 -1
  64. rapidtide/data/reference/HCP1200v2_MTT_2mm.nii.gz +0 -0
  65. rapidtide/data/reference/HCP1200v2_binmask_2mm.nii.gz +0 -0
  66. rapidtide/data/reference/HCP1200v2_csf_2mm.nii.gz +0 -0
  67. rapidtide/data/reference/HCP1200v2_gray_2mm.nii.gz +0 -0
  68. rapidtide/data/reference/HCP1200v2_graylaghist.json +7 -0
  69. rapidtide/data/reference/HCP1200v2_graylaghist.tsv.gz +0 -0
  70. rapidtide/data/reference/HCP1200v2_laghist.json +7 -0
  71. rapidtide/data/reference/HCP1200v2_laghist.tsv.gz +0 -0
  72. rapidtide/data/reference/HCP1200v2_mask_2mm.nii.gz +0 -0
  73. rapidtide/data/reference/HCP1200v2_maxcorr_2mm.nii.gz +0 -0
  74. rapidtide/data/reference/HCP1200v2_maxtime_2mm.nii.gz +0 -0
  75. rapidtide/data/reference/HCP1200v2_maxwidth_2mm.nii.gz +0 -0
  76. rapidtide/data/reference/HCP1200v2_negmask_2mm.nii.gz +0 -0
  77. rapidtide/data/reference/HCP1200v2_timepercentile_2mm.nii.gz +0 -0
  78. rapidtide/data/reference/HCP1200v2_white_2mm.nii.gz +0 -0
  79. rapidtide/data/reference/HCP1200v2_whitelaghist.json +7 -0
  80. rapidtide/data/reference/HCP1200v2_whitelaghist.tsv.gz +0 -0
  81. rapidtide/data/reference/JHU-ArterialTerritoriesNoVent-LVL1-seg2.xml +131 -0
  82. rapidtide/data/reference/JHU-ArterialTerritoriesNoVent-LVL1-seg2_regions.txt +60 -0
  83. rapidtide/data/reference/JHU-ArterialTerritoriesNoVent-LVL1-seg2_space-MNI152NLin6Asym_2mm.nii.gz +0 -0
  84. rapidtide/data/reference/JHU-ArterialTerritoriesNoVent-LVL1_space-MNI152NLin2009cAsym_2mm.nii.gz +0 -0
  85. rapidtide/data/reference/JHU-ArterialTerritoriesNoVent-LVL1_space-MNI152NLin2009cAsym_2mm_mask.nii.gz +0 -0
  86. rapidtide/data/reference/JHU-ArterialTerritoriesNoVent-LVL1_space-MNI152NLin6Asym_2mm_mask.nii.gz +0 -0
  87. rapidtide/data/reference/JHU-ArterialTerritoriesNoVent-LVL2_space-MNI152NLin6Asym_2mm_mask.nii.gz +0 -0
  88. rapidtide/data/reference/MNI152_T1_1mm_Brain_FAST_seg.nii.gz +0 -0
  89. rapidtide/data/reference/MNI152_T1_1mm_Brain_Mask.nii.gz +0 -0
  90. rapidtide/data/reference/MNI152_T1_2mm_Brain_FAST_seg.nii.gz +0 -0
  91. rapidtide/data/reference/MNI152_T1_2mm_Brain_Mask.nii.gz +0 -0
  92. rapidtide/decorators.py +91 -0
  93. rapidtide/dlfilter.py +2553 -414
  94. rapidtide/dlfiltertorch.py +5201 -0
  95. rapidtide/externaltools.py +328 -13
  96. rapidtide/fMRIData_class.py +178 -0
  97. rapidtide/ffttools.py +168 -0
  98. rapidtide/filter.py +2704 -1462
  99. rapidtide/fit.py +2361 -579
  100. rapidtide/genericmultiproc.py +197 -0
  101. rapidtide/happy_supportfuncs.py +3255 -548
  102. rapidtide/helper_classes.py +590 -1181
  103. rapidtide/io.py +2569 -468
  104. rapidtide/linfitfiltpass.py +784 -0
  105. rapidtide/makelaggedtcs.py +267 -97
  106. rapidtide/maskutil.py +555 -25
  107. rapidtide/miscmath.py +867 -137
  108. rapidtide/multiproc.py +217 -44
  109. rapidtide/patchmatch.py +752 -0
  110. rapidtide/peakeval.py +32 -32
  111. rapidtide/ppgproc.py +2205 -0
  112. rapidtide/qualitycheck.py +353 -40
  113. rapidtide/refinedelay.py +854 -0
  114. rapidtide/refineregressor.py +939 -0
  115. rapidtide/resample.py +725 -204
  116. rapidtide/scripts/__init__.py +1 -0
  117. rapidtide/scripts/{adjustoffset → adjustoffset.py} +7 -2
  118. rapidtide/scripts/{aligntcs → aligntcs.py} +7 -2
  119. rapidtide/scripts/{applydlfilter → applydlfilter.py} +7 -2
  120. rapidtide/scripts/applyppgproc.py +28 -0
  121. rapidtide/scripts/{atlasaverage → atlasaverage.py} +7 -2
  122. rapidtide/scripts/{atlastool → atlastool.py} +7 -2
  123. rapidtide/scripts/{calcicc → calcicc.py} +7 -2
  124. rapidtide/scripts/{calctexticc → calctexticc.py} +7 -2
  125. rapidtide/scripts/{calcttest → calcttest.py} +7 -2
  126. rapidtide/scripts/{ccorrica → ccorrica.py} +7 -2
  127. rapidtide/scripts/delayvar.py +28 -0
  128. rapidtide/scripts/{diffrois → diffrois.py} +7 -2
  129. rapidtide/scripts/{endtidalproc → endtidalproc.py} +7 -2
  130. rapidtide/scripts/{fdica → fdica.py} +7 -2
  131. rapidtide/scripts/{filtnifti → filtnifti.py} +7 -2
  132. rapidtide/scripts/{filttc → filttc.py} +7 -2
  133. rapidtide/scripts/{fingerprint → fingerprint.py} +20 -16
  134. rapidtide/scripts/{fixtr → fixtr.py} +7 -2
  135. rapidtide/scripts/{gmscalc → gmscalc.py} +7 -2
  136. rapidtide/scripts/{happy → happy.py} +7 -2
  137. rapidtide/scripts/{happy2std → happy2std.py} +7 -2
  138. rapidtide/scripts/{happywarp → happywarp.py} +8 -4
  139. rapidtide/scripts/{histnifti → histnifti.py} +7 -2
  140. rapidtide/scripts/{histtc → histtc.py} +7 -2
  141. rapidtide/scripts/{glmfilt → linfitfilt.py} +7 -4
  142. rapidtide/scripts/{localflow → localflow.py} +7 -2
  143. rapidtide/scripts/{mergequality → mergequality.py} +7 -2
  144. rapidtide/scripts/{pairproc → pairproc.py} +7 -2
  145. rapidtide/scripts/{pairwisemergenifti → pairwisemergenifti.py} +7 -2
  146. rapidtide/scripts/{physiofreq → physiofreq.py} +7 -2
  147. rapidtide/scripts/{pixelcomp → pixelcomp.py} +7 -2
  148. rapidtide/scripts/{plethquality → plethquality.py} +7 -2
  149. rapidtide/scripts/{polyfitim → polyfitim.py} +7 -2
  150. rapidtide/scripts/{proj2flow → proj2flow.py} +7 -2
  151. rapidtide/scripts/{rankimage → rankimage.py} +7 -2
  152. rapidtide/scripts/{rapidtide → rapidtide.py} +7 -2
  153. rapidtide/scripts/{rapidtide2std → rapidtide2std.py} +7 -2
  154. rapidtide/scripts/{resamplenifti → resamplenifti.py} +7 -2
  155. rapidtide/scripts/{resampletc → resampletc.py} +7 -2
  156. rapidtide/scripts/retrolagtcs.py +28 -0
  157. rapidtide/scripts/retroregress.py +28 -0
  158. rapidtide/scripts/{roisummarize → roisummarize.py} +7 -2
  159. rapidtide/scripts/{runqualitycheck → runqualitycheck.py} +7 -2
  160. rapidtide/scripts/{showarbcorr → showarbcorr.py} +7 -2
  161. rapidtide/scripts/{showhist → showhist.py} +7 -2
  162. rapidtide/scripts/{showstxcorr → showstxcorr.py} +7 -2
  163. rapidtide/scripts/{showtc → showtc.py} +7 -2
  164. rapidtide/scripts/{showxcorr_legacy → showxcorr_legacy.py} +8 -8
  165. rapidtide/scripts/{showxcorrx → showxcorrx.py} +7 -2
  166. rapidtide/scripts/{showxy → showxy.py} +7 -2
  167. rapidtide/scripts/{simdata → simdata.py} +7 -2
  168. rapidtide/scripts/{spatialdecomp → spatialdecomp.py} +7 -2
  169. rapidtide/scripts/{spatialfit → spatialfit.py} +7 -2
  170. rapidtide/scripts/{spatialmi → spatialmi.py} +7 -2
  171. rapidtide/scripts/{spectrogram → spectrogram.py} +7 -2
  172. rapidtide/scripts/stupidramtricks.py +238 -0
  173. rapidtide/scripts/{synthASL → synthASL.py} +7 -2
  174. rapidtide/scripts/{tcfrom2col → tcfrom2col.py} +7 -2
  175. rapidtide/scripts/{tcfrom3col → tcfrom3col.py} +7 -2
  176. rapidtide/scripts/{temporaldecomp → temporaldecomp.py} +7 -2
  177. rapidtide/scripts/{testhrv → testhrv.py} +1 -1
  178. rapidtide/scripts/{threeD → threeD.py} +7 -2
  179. rapidtide/scripts/{tidepool → tidepool.py} +7 -2
  180. rapidtide/scripts/{variabilityizer → variabilityizer.py} +7 -2
  181. rapidtide/simFuncClasses.py +2113 -0
  182. rapidtide/simfuncfit.py +312 -108
  183. rapidtide/stats.py +579 -247
  184. rapidtide/tests/.coveragerc +27 -6
  185. rapidtide-2.9.5.data/scripts/fdica → rapidtide/tests/cleanposttest +4 -6
  186. rapidtide/tests/happycomp +9 -0
  187. rapidtide/tests/resethappytargets +1 -1
  188. rapidtide/tests/resetrapidtidetargets +1 -1
  189. rapidtide/tests/resettargets +1 -1
  190. rapidtide/tests/runlocaltest +3 -3
  191. rapidtide/tests/showkernels +1 -1
  192. rapidtide/tests/test_aliasedcorrelate.py +4 -4
  193. rapidtide/tests/test_aligntcs.py +1 -1
  194. rapidtide/tests/test_calcicc.py +1 -1
  195. rapidtide/tests/test_cleanregressor.py +184 -0
  196. rapidtide/tests/test_congrid.py +70 -81
  197. rapidtide/tests/test_correlate.py +1 -1
  198. rapidtide/tests/test_corrpass.py +4 -4
  199. rapidtide/tests/test_delayestimation.py +54 -59
  200. rapidtide/tests/test_dlfiltertorch.py +437 -0
  201. rapidtide/tests/test_doresample.py +2 -2
  202. rapidtide/tests/test_externaltools.py +69 -0
  203. rapidtide/tests/test_fastresampler.py +9 -5
  204. rapidtide/tests/test_filter.py +96 -57
  205. rapidtide/tests/test_findmaxlag.py +50 -19
  206. rapidtide/tests/test_fullrunhappy_v1.py +15 -10
  207. rapidtide/tests/test_fullrunhappy_v2.py +19 -13
  208. rapidtide/tests/test_fullrunhappy_v3.py +28 -13
  209. rapidtide/tests/test_fullrunhappy_v4.py +30 -11
  210. rapidtide/tests/test_fullrunhappy_v5.py +62 -0
  211. rapidtide/tests/test_fullrunrapidtide_v1.py +61 -7
  212. rapidtide/tests/test_fullrunrapidtide_v2.py +27 -15
  213. rapidtide/tests/test_fullrunrapidtide_v3.py +28 -8
  214. rapidtide/tests/test_fullrunrapidtide_v4.py +16 -8
  215. rapidtide/tests/test_fullrunrapidtide_v5.py +15 -6
  216. rapidtide/tests/test_fullrunrapidtide_v6.py +142 -0
  217. rapidtide/tests/test_fullrunrapidtide_v7.py +114 -0
  218. rapidtide/tests/test_fullrunrapidtide_v8.py +66 -0
  219. rapidtide/tests/test_getparsers.py +158 -0
  220. rapidtide/tests/test_io.py +59 -18
  221. rapidtide/tests/{test_glmpass.py → test_linfitfiltpass.py} +10 -10
  222. rapidtide/tests/test_mi.py +1 -1
  223. rapidtide/tests/test_miscmath.py +1 -1
  224. rapidtide/tests/test_motionregress.py +5 -5
  225. rapidtide/tests/test_nullcorr.py +6 -9
  226. rapidtide/tests/test_padvec.py +216 -0
  227. rapidtide/tests/test_parserfuncs.py +101 -0
  228. rapidtide/tests/test_phaseanalysis.py +1 -1
  229. rapidtide/tests/test_rapidtideparser.py +59 -53
  230. rapidtide/tests/test_refinedelay.py +296 -0
  231. rapidtide/tests/test_runmisc.py +5 -5
  232. rapidtide/tests/test_sharedmem.py +60 -0
  233. rapidtide/tests/test_simroundtrip.py +132 -0
  234. rapidtide/tests/test_simulate.py +1 -1
  235. rapidtide/tests/test_stcorrelate.py +4 -2
  236. rapidtide/tests/test_timeshift.py +2 -2
  237. rapidtide/tests/test_valtoindex.py +1 -1
  238. rapidtide/tests/test_zRapidtideDataset.py +5 -3
  239. rapidtide/tests/utils.py +10 -9
  240. rapidtide/tidepoolTemplate.py +88 -70
  241. rapidtide/tidepoolTemplate.ui +60 -46
  242. rapidtide/tidepoolTemplate_alt.py +88 -53
  243. rapidtide/tidepoolTemplate_alt.ui +62 -52
  244. rapidtide/tidepoolTemplate_alt_qt6.py +921 -0
  245. rapidtide/tidepoolTemplate_big.py +1125 -0
  246. rapidtide/tidepoolTemplate_big.ui +2386 -0
  247. rapidtide/tidepoolTemplate_big_qt6.py +1129 -0
  248. rapidtide/tidepoolTemplate_qt6.py +793 -0
  249. rapidtide/util.py +1389 -148
  250. rapidtide/voxelData.py +1048 -0
  251. rapidtide/wiener.py +138 -25
  252. rapidtide/wiener2.py +114 -8
  253. rapidtide/workflows/adjustoffset.py +107 -5
  254. rapidtide/workflows/aligntcs.py +86 -3
  255. rapidtide/workflows/applydlfilter.py +231 -89
  256. rapidtide/workflows/applyppgproc.py +540 -0
  257. rapidtide/workflows/atlasaverage.py +309 -48
  258. rapidtide/workflows/atlastool.py +130 -9
  259. rapidtide/workflows/calcSimFuncMap.py +490 -0
  260. rapidtide/workflows/calctexticc.py +202 -10
  261. rapidtide/workflows/ccorrica.py +123 -15
  262. rapidtide/workflows/cleanregressor.py +415 -0
  263. rapidtide/workflows/delayvar.py +1268 -0
  264. rapidtide/workflows/diffrois.py +84 -6
  265. rapidtide/workflows/endtidalproc.py +149 -9
  266. rapidtide/workflows/fdica.py +197 -17
  267. rapidtide/workflows/filtnifti.py +71 -4
  268. rapidtide/workflows/filttc.py +76 -5
  269. rapidtide/workflows/fitSimFuncMap.py +578 -0
  270. rapidtide/workflows/fixtr.py +74 -4
  271. rapidtide/workflows/gmscalc.py +116 -6
  272. rapidtide/workflows/happy.py +1242 -480
  273. rapidtide/workflows/happy2std.py +145 -13
  274. rapidtide/workflows/happy_parser.py +277 -59
  275. rapidtide/workflows/histnifti.py +120 -4
  276. rapidtide/workflows/histtc.py +85 -4
  277. rapidtide/workflows/{glmfilt.py → linfitfilt.py} +128 -14
  278. rapidtide/workflows/localflow.py +329 -29
  279. rapidtide/workflows/mergequality.py +80 -4
  280. rapidtide/workflows/niftidecomp.py +323 -19
  281. rapidtide/workflows/niftistats.py +178 -8
  282. rapidtide/workflows/pairproc.py +99 -5
  283. rapidtide/workflows/pairwisemergenifti.py +86 -3
  284. rapidtide/workflows/parser_funcs.py +1488 -56
  285. rapidtide/workflows/physiofreq.py +139 -12
  286. rapidtide/workflows/pixelcomp.py +211 -9
  287. rapidtide/workflows/plethquality.py +105 -23
  288. rapidtide/workflows/polyfitim.py +159 -19
  289. rapidtide/workflows/proj2flow.py +76 -3
  290. rapidtide/workflows/rankimage.py +115 -8
  291. rapidtide/workflows/rapidtide.py +1833 -1919
  292. rapidtide/workflows/rapidtide2std.py +101 -3
  293. rapidtide/workflows/rapidtide_parser.py +607 -372
  294. rapidtide/workflows/refineDelayMap.py +249 -0
  295. rapidtide/workflows/refineRegressor.py +1215 -0
  296. rapidtide/workflows/regressfrommaps.py +308 -0
  297. rapidtide/workflows/resamplenifti.py +86 -4
  298. rapidtide/workflows/resampletc.py +92 -4
  299. rapidtide/workflows/retrolagtcs.py +442 -0
  300. rapidtide/workflows/retroregress.py +1501 -0
  301. rapidtide/workflows/roisummarize.py +176 -7
  302. rapidtide/workflows/runqualitycheck.py +72 -7
  303. rapidtide/workflows/showarbcorr.py +172 -16
  304. rapidtide/workflows/showhist.py +87 -3
  305. rapidtide/workflows/showstxcorr.py +161 -4
  306. rapidtide/workflows/showtc.py +172 -10
  307. rapidtide/workflows/showxcorrx.py +250 -62
  308. rapidtide/workflows/showxy.py +186 -16
  309. rapidtide/workflows/simdata.py +418 -112
  310. rapidtide/workflows/spatialfit.py +83 -8
  311. rapidtide/workflows/spatialmi.py +252 -29
  312. rapidtide/workflows/spectrogram.py +306 -33
  313. rapidtide/workflows/synthASL.py +157 -6
  314. rapidtide/workflows/tcfrom2col.py +77 -3
  315. rapidtide/workflows/tcfrom3col.py +75 -3
  316. rapidtide/workflows/tidepool.py +3829 -666
  317. rapidtide/workflows/utils.py +45 -19
  318. rapidtide/workflows/utils_doc.py +293 -0
  319. rapidtide/workflows/variabilityizer.py +118 -5
  320. {rapidtide-2.9.5.dist-info → rapidtide-3.1.3.dist-info}/METADATA +30 -223
  321. rapidtide-3.1.3.dist-info/RECORD +393 -0
  322. {rapidtide-2.9.5.dist-info → rapidtide-3.1.3.dist-info}/WHEEL +1 -1
  323. rapidtide-3.1.3.dist-info/entry_points.txt +65 -0
  324. rapidtide-3.1.3.dist-info/top_level.txt +2 -0
  325. rapidtide/calcandfitcorrpairs.py +0 -262
  326. rapidtide/data/examples/src/testoutputsize +0 -45
  327. rapidtide/data/models/model_revised/model.h5 +0 -0
  328. rapidtide/data/models/model_serdar/model.h5 +0 -0
  329. rapidtide/data/models/model_serdar2/model.h5 +0 -0
  330. rapidtide/data/reference/ASPECTS_nlin_asym_09c_2mm.nii.gz +0 -0
  331. rapidtide/data/reference/ASPECTS_nlin_asym_09c_2mm_mask.nii.gz +0 -0
  332. rapidtide/data/reference/ATTbasedFlowTerritories_split_nlin_asym_09c_2mm.nii.gz +0 -0
  333. rapidtide/data/reference/ATTbasedFlowTerritories_split_nlin_asym_09c_2mm_mask.nii.gz +0 -0
  334. rapidtide/data/reference/HCP1200_binmask_2mm_2009c_asym.nii.gz +0 -0
  335. rapidtide/data/reference/HCP1200_lag_2mm_2009c_asym.nii.gz +0 -0
  336. rapidtide/data/reference/HCP1200_mask_2mm_2009c_asym.nii.gz +0 -0
  337. rapidtide/data/reference/HCP1200_negmask_2mm_2009c_asym.nii.gz +0 -0
  338. rapidtide/data/reference/HCP1200_sigma_2mm_2009c_asym.nii.gz +0 -0
  339. rapidtide/data/reference/HCP1200_strength_2mm_2009c_asym.nii.gz +0 -0
  340. rapidtide/glmpass.py +0 -434
  341. rapidtide/refine_factored.py +0 -641
  342. rapidtide/scripts/retroglm +0 -23
  343. rapidtide/workflows/glmfrommaps.py +0 -202
  344. rapidtide/workflows/retroglm.py +0 -643
  345. rapidtide-2.9.5.data/scripts/adjustoffset +0 -23
  346. rapidtide-2.9.5.data/scripts/aligntcs +0 -23
  347. rapidtide-2.9.5.data/scripts/applydlfilter +0 -23
  348. rapidtide-2.9.5.data/scripts/atlasaverage +0 -23
  349. rapidtide-2.9.5.data/scripts/atlastool +0 -23
  350. rapidtide-2.9.5.data/scripts/calcicc +0 -22
  351. rapidtide-2.9.5.data/scripts/calctexticc +0 -23
  352. rapidtide-2.9.5.data/scripts/calcttest +0 -22
  353. rapidtide-2.9.5.data/scripts/ccorrica +0 -23
  354. rapidtide-2.9.5.data/scripts/diffrois +0 -23
  355. rapidtide-2.9.5.data/scripts/endtidalproc +0 -23
  356. rapidtide-2.9.5.data/scripts/filtnifti +0 -23
  357. rapidtide-2.9.5.data/scripts/filttc +0 -23
  358. rapidtide-2.9.5.data/scripts/fingerprint +0 -593
  359. rapidtide-2.9.5.data/scripts/fixtr +0 -23
  360. rapidtide-2.9.5.data/scripts/glmfilt +0 -24
  361. rapidtide-2.9.5.data/scripts/gmscalc +0 -22
  362. rapidtide-2.9.5.data/scripts/happy +0 -25
  363. rapidtide-2.9.5.data/scripts/happy2std +0 -23
  364. rapidtide-2.9.5.data/scripts/happywarp +0 -350
  365. rapidtide-2.9.5.data/scripts/histnifti +0 -23
  366. rapidtide-2.9.5.data/scripts/histtc +0 -23
  367. rapidtide-2.9.5.data/scripts/localflow +0 -23
  368. rapidtide-2.9.5.data/scripts/mergequality +0 -23
  369. rapidtide-2.9.5.data/scripts/pairproc +0 -23
  370. rapidtide-2.9.5.data/scripts/pairwisemergenifti +0 -23
  371. rapidtide-2.9.5.data/scripts/physiofreq +0 -23
  372. rapidtide-2.9.5.data/scripts/pixelcomp +0 -23
  373. rapidtide-2.9.5.data/scripts/plethquality +0 -23
  374. rapidtide-2.9.5.data/scripts/polyfitim +0 -23
  375. rapidtide-2.9.5.data/scripts/proj2flow +0 -23
  376. rapidtide-2.9.5.data/scripts/rankimage +0 -23
  377. rapidtide-2.9.5.data/scripts/rapidtide +0 -23
  378. rapidtide-2.9.5.data/scripts/rapidtide2std +0 -23
  379. rapidtide-2.9.5.data/scripts/resamplenifti +0 -23
  380. rapidtide-2.9.5.data/scripts/resampletc +0 -23
  381. rapidtide-2.9.5.data/scripts/retroglm +0 -23
  382. rapidtide-2.9.5.data/scripts/roisummarize +0 -23
  383. rapidtide-2.9.5.data/scripts/runqualitycheck +0 -23
  384. rapidtide-2.9.5.data/scripts/showarbcorr +0 -23
  385. rapidtide-2.9.5.data/scripts/showhist +0 -23
  386. rapidtide-2.9.5.data/scripts/showstxcorr +0 -23
  387. rapidtide-2.9.5.data/scripts/showtc +0 -23
  388. rapidtide-2.9.5.data/scripts/showxcorr_legacy +0 -536
  389. rapidtide-2.9.5.data/scripts/showxcorrx +0 -23
  390. rapidtide-2.9.5.data/scripts/showxy +0 -23
  391. rapidtide-2.9.5.data/scripts/simdata +0 -23
  392. rapidtide-2.9.5.data/scripts/spatialdecomp +0 -23
  393. rapidtide-2.9.5.data/scripts/spatialfit +0 -23
  394. rapidtide-2.9.5.data/scripts/spatialmi +0 -23
  395. rapidtide-2.9.5.data/scripts/spectrogram +0 -23
  396. rapidtide-2.9.5.data/scripts/synthASL +0 -23
  397. rapidtide-2.9.5.data/scripts/tcfrom2col +0 -23
  398. rapidtide-2.9.5.data/scripts/tcfrom3col +0 -23
  399. rapidtide-2.9.5.data/scripts/temporaldecomp +0 -23
  400. rapidtide-2.9.5.data/scripts/threeD +0 -236
  401. rapidtide-2.9.5.data/scripts/tidepool +0 -23
  402. rapidtide-2.9.5.data/scripts/variabilityizer +0 -23
  403. rapidtide-2.9.5.dist-info/RECORD +0 -357
  404. rapidtide-2.9.5.dist-info/top_level.txt +0 -86
  405. {rapidtide-2.9.5.dist-info → rapidtide-3.1.3.dist-info/licenses}/LICENSE +0 -0
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding: utf-8 -*-
3
3
  #
4
- # Copyright 2016-2024 Blaise Frederick
4
+ # Copyright 2016-2025 Blaise Frederick
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
7
7
  # you may not use this file except in compliance with the License.
@@ -18,17 +18,49 @@
18
18
  #
19
19
  import argparse
20
20
  import sys
21
+ from argparse import Namespace
22
+ from typing import Any, Callable, Dict, List, Optional, Tuple, Union
21
23
 
22
24
  import numpy as np
25
+ from numpy.typing import NDArray
23
26
 
24
27
  import rapidtide.fit as tide_fit
25
28
  import rapidtide.io as tide_io
26
29
  from rapidtide.workflows.parser_funcs import is_valid_file
27
30
 
28
31
 
29
- def _get_parser():
32
+ def _get_parser() -> Any:
30
33
  """
31
- Argument parser for polyfitim
34
+ Argument parser for polyfitim.
35
+
36
+ This function constructs and returns an `argparse.ArgumentParser` object configured
37
+ to parse command-line arguments for the `polyfitim` tool. It is designed to handle
38
+ the fitting of a spatial template to 3D or 4D NIFTI files, with optional region-specific
39
+ fitting using an atlas file.
40
+
41
+ Returns
42
+ -------
43
+ argparse.ArgumentParser
44
+ Configured argument parser for `polyfitim` command-line interface.
45
+
46
+ Notes
47
+ -----
48
+ The parser expects several required NIFTI files:
49
+ - Data file (`datafile`)
50
+ - Data mask file (`datamask`)
51
+ - Template file (`templatefile`)
52
+ - Template mask file (`templatemask`)
53
+
54
+ Optional arguments include:
55
+ - `--regionatlas`: File containing a 3D NIFTI atlas for region-specific fitting.
56
+ - `--order`: Polynomial order for the fit (default is 1).
57
+
58
+ Examples
59
+ --------
60
+ >>> parser = _get_parser()
61
+ >>> args = parser.parse_args(['data.nii', 'mask.nii', 'template.nii', 'template_mask.nii', 'output'])
62
+ >>> print(args.datafile)
63
+ 'data.nii'
32
64
  """
33
65
  parser = argparse.ArgumentParser(
34
66
  prog="polyfitim",
@@ -78,14 +110,69 @@ def _get_parser():
78
110
 
79
111
 
80
112
  def polyfitim(
81
- datafile,
82
- datamask,
83
- templatefile,
84
- templatemask,
85
- outputroot,
86
- regionatlas=None,
87
- order=1,
88
- ):
113
+ datafile: Any,
114
+ datamask: Any,
115
+ templatefile: Any,
116
+ templatemask: Any,
117
+ outputroot: Any,
118
+ regionatlas: Optional[Any] = None,
119
+ order: int = 1,
120
+ ) -> None:
121
+ """
122
+ Fit polynomial models to time series data within regions defined by masks.
123
+
124
+ This function performs polynomial fitting of specified order to time series data
125
+ within spatial regions defined by a template mask. It supports both global and
126
+ region-specific fitting, and outputs fitted time series, polynomial coefficients,
127
+ and R² values.
128
+
129
+ Parameters
130
+ ----------
131
+ datafile : Any
132
+ Path to the input NIfTI file containing the time series data.
133
+ datamask : Any
134
+ Path to the NIfTI file containing the data mask. Can be 3D or 4D.
135
+ templatefile : Any
136
+ Path to the NIfTI file containing the template (e.g., a regressor) for fitting.
137
+ templatemask : Any
138
+ Path to the NIfTI file containing the mask for the template.
139
+ outputroot : Any
140
+ Root name for output files (e.g., 'output' will produce 'output_fit.nii.gz').
141
+ regionatlas : Any, optional
142
+ Path to the NIfTI file containing region labels. If provided, fitting is
143
+ performed separately for each region. Default is None.
144
+ order : int, optional
145
+ Order of the polynomial to fit. Must be >= 1. Default is 1 (linear fit).
146
+
147
+ Returns
148
+ -------
149
+ None
150
+ Function writes multiple output files:
151
+ - Fitted time series (NIfTI format)
152
+ - Residuals (NIfTI format)
153
+ - R² values (text file)
154
+ - Polynomial coefficients (text files)
155
+
156
+ Notes
157
+ -----
158
+ - The function assumes that all input files are in NIfTI format.
159
+ - If `datamask` is 4D, it is treated as a time-varying mask.
160
+ - If `regionatlas` is provided, fitting is performed separately for each region.
161
+ - The function uses `tide_io` for reading/writing NIfTI files and `tide_fit.mlregress`
162
+ for polynomial regression.
163
+
164
+ Examples
165
+ --------
166
+ >>> polyfitim(
167
+ ... datafile='data.nii.gz',
168
+ ... datamask='mask.nii.gz',
169
+ ... templatefile='template.nii.gz',
170
+ ... templatemask='template_mask.nii.gz',
171
+ ... outputroot='output',
172
+ ... regionatlas='atlas.nii.gz',
173
+ ... order=2
174
+ ... )
175
+ """
89
176
  # check the order
90
177
  if order < 1:
91
178
  print("order must be >= 1")
@@ -189,10 +276,10 @@ def polyfitim(
189
276
  fitdata = np.zeros((numspatiallocs, timepoints), dtype="float")
190
277
  if regionatlas is not None:
191
278
  polycoffs = np.zeros((numregions, order + 1, timepoints), dtype="float")
192
- rvals = np.zeros((numregions, timepoints), dtype="float")
279
+ r2vals = np.zeros((numregions, timepoints), dtype="float")
193
280
  else:
194
281
  polycoffs = np.zeros((order + 1, timepoints), dtype="float")
195
- rvals = np.zeros(timepoints, dtype="float")
282
+ r2vals = np.zeros(timepoints, dtype="float")
196
283
 
197
284
  if regionatlas is not None:
198
285
  print("making region masks")
@@ -219,7 +306,7 @@ def polyfitim(
219
306
  evlist = []
220
307
  for i in range(1, order + 1):
221
308
  evlist.append((rs_templatefile[voxelstofit]) ** i)
222
- thefit, R = tide_fit.mlregress(
309
+ thefit, R2 = tide_fit.mlregress(
223
310
  evlist,
224
311
  rs_datafile[voxelstofit, thetime][0],
225
312
  )
@@ -230,14 +317,14 @@ def polyfitim(
230
317
  fitdata[voxelstoreconstruct, thetime] += polycoffs[region, i, thetime] * (
231
318
  rs_templatefile[voxelstoreconstruct] ** i
232
319
  )
233
- rvals[region, thetime] = R
320
+ r2vals[region, thetime] = R2
234
321
  else:
235
322
  voxelstofit = np.where(thisdatamask > 0.5)
236
323
  voxelstoreconstruct = np.where(rs_templatemask > 0.5)
237
324
  evlist = []
238
325
  for i in range(1, order + 1):
239
326
  evlist.append((rs_templatefile[voxelstofit]) ** i)
240
- thefit, R = tide_fit.mlregress(evlist, rs_datafile[voxelstofit, thetime][0])
327
+ thefit, R2 = tide_fit.mlregress(evlist, rs_datafile[voxelstofit, thetime][0])
241
328
  for i in range(order + 1):
242
329
  polycoffs[i, thetime] = thefit[0, i]
243
330
  fitdata[voxelstoreconstruct, thetime] = polycoffs[0, thetime]
@@ -245,13 +332,13 @@ def polyfitim(
245
332
  fitdata[voxelstoreconstruct, thetime] += polycoffs[i, thetime] * (
246
333
  rs_templatefile[voxelstoreconstruct] ** i
247
334
  )
248
- rvals[thetime] = R
335
+ r2vals[thetime] = R2
249
336
  residuals = rs_datafile - fitdata
250
337
 
251
338
  # write out the data files
252
339
  print("writing time series")
253
340
 
254
- tide_io.writenpvecs(rvals, outputroot + "_rvals.txt")
341
+ tide_io.writenpvecs(r2vals, outputroot + "_r2vals.txt")
255
342
  if regionatlas is not None:
256
343
  for region in range(0, numregions):
257
344
  outstring = f"region {region + 1}:"
@@ -279,7 +366,60 @@ def polyfitim(
279
366
  )
280
367
 
281
368
 
282
- def main(args):
369
+ def main(args: Any) -> None:
370
+ """
371
+ Main function to perform polynomial fitting on imaging data.
372
+
373
+ This function serves as the entry point for polynomial fitting operations
374
+ on medical imaging data using template-based registration and fitting.
375
+
376
+ Parameters
377
+ ----------
378
+ args : Any
379
+ Namespace object containing all required arguments for the polynomial fitting
380
+ operation. Expected attributes include:
381
+
382
+ - datafile : str
383
+ Path to the input data file to be fitted
384
+ - datamask : str
385
+ Path to the data mask file for region of interest specification
386
+ - templatefile : str
387
+ Path to the template file for reference
388
+ - templatemask : str
389
+ Path to the template mask file for reference region specification
390
+ - outputroot : str
391
+ Root path for output files
392
+ - regionatlas : str, optional
393
+ Path to region atlas file for anatomical labeling
394
+ - order : int, optional
395
+ Order of the polynomial to fit (default is typically 1)
396
+
397
+ Returns
398
+ -------
399
+ None
400
+ This function does not return any value. It performs the polynomial fitting
401
+ operation and saves results to the specified output directory.
402
+
403
+ Notes
404
+ -----
405
+ The function internally calls `polyfitim` with the provided arguments to
406
+ perform the actual polynomial fitting computation. All input files must be
407
+ properly formatted and accessible.
408
+
409
+ Examples
410
+ --------
411
+ >>> import argparse
412
+ >>> args = argparse.Namespace(
413
+ ... datafile='data.nii.gz',
414
+ ... datamask='data_mask.nii.gz',
415
+ ... templatefile='template.nii.gz',
416
+ ... templatemask='template_mask.nii.gz',
417
+ ... outputroot='output',
418
+ ... regionatlas='atlas.nii.gz',
419
+ ... order=2
420
+ ... )
421
+ >>> main(args)
422
+ """
283
423
  polyfitim(
284
424
  args.datafile,
285
425
  args.datamask,
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding: utf-8 -*-
3
3
  #
4
- # Copyright 2016-2024 Blaise Frederick
4
+ # Copyright 2016-2025 Blaise Frederick
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
7
7
  # you may not use this file except in compliance with the License.
@@ -18,14 +18,44 @@
18
18
  #
19
19
  import argparse
20
20
  import copy
21
+ from argparse import Namespace
22
+ from typing import Any, Callable, Dict, List, Optional, Tuple, Union
21
23
 
22
24
  import numpy as np
25
+ from numpy.typing import NDArray
23
26
 
24
27
  import rapidtide.filter as tide_filt
25
28
  import rapidtide.io as tide_io
26
29
 
27
30
 
28
- def _get_parser():
31
+ def _get_parser() -> Any:
32
+ """
33
+ Create and configure argument parser for phase projection to velocity map conversion.
34
+
35
+ This function sets up the command line argument parser for the proj2flow tool,
36
+ which converts phase projection movies to velocity maps. It defines required
37
+ positional arguments for input and output files, as well as optional debugging
38
+ flag.
39
+
40
+ Returns
41
+ -------
42
+ argparse.ArgumentParser
43
+ Configured argument parser object with defined command line arguments
44
+
45
+ Notes
46
+ -----
47
+ The function currently has commented-out frequency filter arguments (lowestfreq
48
+ and highestfreq) that can be enabled if needed for specific use cases.
49
+
50
+ Examples
51
+ --------
52
+ >>> parser = _get_parser()
53
+ >>> args = parser.parse_args(['input.nii', 'output_root'])
54
+ >>> print(args.inputfilename)
55
+ 'input.nii'
56
+ >>> print(args.outputroot)
57
+ 'output_root'
58
+ """
29
59
  # get the command line parameters
30
60
  parser = argparse.ArgumentParser(
31
61
  prog="proj2flow",
@@ -57,7 +87,50 @@ def _get_parser():
57
87
  return parser
58
88
 
59
89
 
60
- def proj2flow(args):
90
+ def proj2flow(args: Any) -> None:
91
+ """
92
+ Compute 3D velocity fields from projected 4D fMRI data using forward and backward differences.
93
+
94
+ This function reads 4D NIfTI fMRI data, computes velocity fields at each timepoint by
95
+ calculating forward and backward differences in spatial and temporal dimensions, and
96
+ saves the resulting velocity fields as 3D NIfTI files. It also saves an average velocity
97
+ field across all timepoints.
98
+
99
+ Parameters
100
+ ----------
101
+ args : argparse.Namespace
102
+ Command-line arguments parsed by `_get_parser()`. Expected attributes include:
103
+ - `inputfilename` : str
104
+ Path to the input NIfTI file containing 4D fMRI data.
105
+ - `outputroot` : str
106
+ Root name for output NIfTI files.
107
+ - `debug` : bool, optional
108
+ If True, enables debug printing and additional checks.
109
+
110
+ Returns
111
+ -------
112
+ None
113
+ This function does not return a value. It writes NIfTI files to disk.
114
+
115
+ Notes
116
+ -----
117
+ - The function assumes the input data is in the same spatial and temporal dimensions
118
+ as specified by the NIfTI header.
119
+ - Forward and backward differences are computed using a 3x3x3 neighborhood in space
120
+ and a single timepoint difference.
121
+ - Velocity fields are saved with intent code 2003 (indicating a vector field).
122
+ - The output files are named using the format:
123
+ - `{outputroot}_{timepoint:02d}.nii.gz` for each timepoint
124
+ - `{outputroot}_average.nii.gz` for the average velocity field
125
+
126
+ Examples
127
+ --------
128
+ >>> import argparse
129
+ >>> args = argparse.Namespace(inputfilename='fmri_data.nii.gz',
130
+ ... outputroot='velocity',
131
+ ... debug=False)
132
+ >>> proj2flow(args)
133
+ """
61
134
  # set default variable values
62
135
  displayplots = False
63
136
 
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding: utf-8 -*-
3
3
  #
4
- # Copyright 2016-2024 Blaise Frederick
4
+ # Copyright 2016-2025 Blaise Frederick
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
7
7
  # you may not use this file except in compliance with the License.
@@ -17,16 +17,41 @@
17
17
  #
18
18
  #
19
19
  import argparse
20
+ from argparse import Namespace
21
+ from typing import Any, Callable, Dict, List, Optional, Tuple, Union
20
22
 
21
23
  import numpy as np
24
+ from numpy.typing import NDArray
22
25
  from scipy.stats import rankdata
23
26
 
24
27
  import rapidtide.io as tide_io
25
28
 
26
29
 
27
- def _get_parser():
30
+ def _get_parser() -> Any:
28
31
  """
29
- Argument parser for pixelcomp
32
+ Argument parser for rankimage.
33
+
34
+ Creates and configures an argument parser for the rankimage tool that converts
35
+ 3D or 4D nifti images into percentile maps.
36
+
37
+ Returns
38
+ -------
39
+ argparse.ArgumentParser
40
+ Configured argument parser object with all required and optional arguments
41
+ for the rankimage tool.
42
+
43
+ Notes
44
+ -----
45
+ The parser is configured with:
46
+ - Required arguments: inputfilename, maskfilename, outputroot
47
+ - Optional argument: --debug flag for additional debugging information
48
+
49
+ Examples
50
+ --------
51
+ >>> parser = _get_parser()
52
+ >>> args = parser.parse_args(['input.nii', 'mask.nii', 'output_root'])
53
+ >>> print(args.inputfilename)
54
+ 'input.nii'
30
55
  """
31
56
  parser = argparse.ArgumentParser(
32
57
  prog="rankimage",
@@ -50,12 +75,49 @@ def _get_parser():
50
75
  return parser
51
76
 
52
77
 
53
- def imtopercentile(image, mask, debug=False):
54
- outmaparray = image * 0.0
78
+ def imtopercentile(image: Any, mask: Any, debug: bool = False) -> NDArray:
79
+ """
80
+ Convert image values to percentile scores within masked region.
81
+
82
+ This function computes percentile rankings for all voxels within a specified
83
+ mask region of a 3D image. The percentile scores are calculated using the
84
+ 'dense' ranking method, where tied values receive the same rank.
85
+
86
+ Parameters
87
+ ----------
88
+ image : array-like
89
+ Input 3D image data array
90
+ mask : array-like
91
+ Binary mask defining the region of interest (values > 0 are considered valid)
92
+ debug : bool, optional
93
+ If True, print debugging information about processing (default is False)
94
+
95
+ Returns
96
+ -------
97
+ NDArray
98
+ Array of same shape as input image containing percentile scores for
99
+ valid voxels, with zeros for masked-out voxels
100
+
101
+ Notes
102
+ -----
103
+ - Only voxels where mask > 0 are processed
104
+ - Percentile calculation uses 'dense' ranking method
105
+ - The percentile score ranges from 0 to 100
106
+ - Invalid voxels (where mask <= 0) are set to 0 in output
107
+
108
+ Examples
109
+ --------
110
+ >>> import numpy as np
111
+ >>> image = np.random.rand(10, 10, 10)
112
+ >>> mask = np.ones((10, 10, 10))
113
+ >>> mask[0:5, :, :] = 0 # Mask out first 5 slices
114
+ >>> result = imtopercentile(image, mask)
115
+ """
116
+ outmaparray = np.zeros_like(image)
55
117
  nativespaceshape = image.shape
56
118
  validvoxels = np.where(mask > 0)
57
119
  numvalidspatiallocs = np.shape(validvoxels[0])[0]
58
- input_data_valid = image[validvoxels] + 0.0
120
+ input_data_valid = image[validvoxels].copy()
59
121
 
60
122
  if debug:
61
123
  print(
@@ -69,7 +131,52 @@ def imtopercentile(image, mask, debug=False):
69
131
  return outmaparray.reshape(nativespaceshape)
70
132
 
71
133
 
72
- def rankimage(args):
134
+ def rankimage(args: Any) -> None:
135
+ """
136
+ Convert input NIfTI image data to percentile-ranked values using a mask.
137
+
138
+ This function reads an input NIfTI image and a corresponding mask, checks
139
+ that their spatial dimensions match, and computes percentile-ranked values
140
+ for each voxel within the mask. The result is saved as a new NIfTI file with
141
+ associated BIDS metadata.
142
+
143
+ Parameters
144
+ ----------
145
+ args : Any
146
+ An object containing the following attributes:
147
+ - inputfilename : str
148
+ Path to the input NIfTI image file.
149
+ - maskfilename : str
150
+ Path to the mask NIfTI file.
151
+ - outputroot : str
152
+ Root name for the output NIfTI file (without extension).
153
+ - debug : bool, optional
154
+ If True, enables debug output. Default is False.
155
+
156
+ Returns
157
+ -------
158
+ None
159
+ The function writes the percentile-ranked image to a NIfTI file and
160
+ a JSON metadata file, but does not return any value.
161
+
162
+ Notes
163
+ -----
164
+ - The function supports both 3D and 4D NIfTI files.
165
+ - For 4D files, the percentile ranking is computed separately for each
166
+ timepoint.
167
+ - The output file is saved with the extension `.nii.gz`.
168
+ - BIDS metadata is saved in a `.json` file with the same root name.
169
+
170
+ Examples
171
+ --------
172
+ >>> class Args:
173
+ ... inputfilename = "input.nii.gz"
174
+ ... maskfilename = "mask.nii.gz"
175
+ ... outputroot = "output"
176
+ ... debug = False
177
+ >>> args = Args()
178
+ >>> rankimage(args)
179
+ """
73
180
  input_img, input_data, input_hdr, thedims, thesizes = tide_io.readfromnifti(args.inputfilename)
74
181
  (
75
182
  mask_img,
@@ -92,7 +199,7 @@ def rankimage(args):
92
199
 
93
200
  if is4d:
94
201
  print("processing 4D nifti file")
95
- percentiles = input_data * 0.0
202
+ percentiles = np.zeros_like(input_data)
96
203
  for i in range(timepoints):
97
204
  percentiles[:, :, :, i] = imtopercentile(
98
205
  input_data[:, :, :, i], mask_data[:, :, :, i], debug=args.debug