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
rapidtide/wiener.py CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding: utf-8 -*-
3
3
  #
4
- # Copyright 2016-2024 Blaise Frederick
4
+ # Copyright 2016-2025 Blaise Frederick
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
7
7
  # you may not use this file except in compliance with the License.
@@ -17,41 +17,156 @@
17
17
  #
18
18
  #
19
19
  import numpy as np
20
+ from numpy.typing import NDArray
20
21
  from tqdm import tqdm
21
22
 
22
23
  import rapidtide.fit as tide_fit
23
24
  import rapidtide.multiproc as tide_multiproc
24
25
 
25
26
 
26
- def _procOneVoxelWiener(vox, lagtc, inittc, rt_floatset=np.float64, rt_floattype="float64"):
27
- thefit, R = tide_fit.mlregress(lagtc, inittc)
28
- fitcoff = rt_floatset(thefit[0, 1])
29
- datatoremove = rt_floatset(fitcoff * lagtc)
27
+ def _procOneVoxelWiener(
28
+ vox: int,
29
+ lagtc: NDArray,
30
+ inittc: NDArray,
31
+ rt_floattype: np.dtype = np.float64,
32
+ ) -> tuple[int, float, float, float, float, NDArray, NDArray, NDArray]:
33
+ """
34
+ Perform Wiener filter processing on a single voxel time series.
35
+
36
+ This function applies a Wiener filter to remove the lagged component from
37
+ the initial time course, returning both the filtered and unfiltered results
38
+ along with fitting statistics.
39
+
40
+ Parameters
41
+ ----------
42
+ vox : int
43
+ Voxel index identifier
44
+ lagtc : NDArray
45
+ Lagged time course data (input signal)
46
+ inittc : NDArray
47
+ Initial time course data (target signal)
48
+ rt_floattype : np.dtype, optional
49
+ Rapidtide float type for output arrays, default is np.float64
50
+
51
+ Returns
52
+ -------
53
+ tuple[int, NDArray, NDArray, NDArray, NDArray, NDArray, NDArray, NDArray]
54
+ A tuple containing:
55
+ - vox (int): Input voxel index
56
+ - intercept (NDArray): Regression intercept term
57
+ - sqrt_R2 (NDArray): Square root of coefficient of determination
58
+ - R2 (NDArray): Coefficient of determination
59
+ - fitcoff (NDArray): Fitting coefficient
60
+ - ratio (NDArray): Ratio of slope to intercept
61
+ - datatoremove (NDArray): Data to be removed (filtered signal)
62
+ - residual (NDArray): Residual signal (unfiltered data)
63
+
64
+ Notes
65
+ -----
66
+ This function uses maximum likelihood regression to estimate the relationship
67
+ between lagged and initial time courses, then applies the Wiener filter
68
+ to remove the lagged component from the initial signal.
69
+
70
+ Examples
71
+ --------
72
+ >>> import numpy as np
73
+ >>> lagtc = np.array([1.0, 2.0, 3.0, 4.0])
74
+ >>> inittc = np.array([2.0, 4.0, 6.0, 8.0])
75
+ >>> result = _procOneVoxelWiener(0, lagtc, inittc)
76
+ >>> print(result[0]) # voxel index
77
+ 0
78
+ >>> print(result[4]) # fitting coefficient
79
+ 2.0
80
+ """
81
+ thefit, R2 = tide_fit.mlregress(lagtc, inittc)
82
+ fitcoff = thefit[0, 1]
83
+ datatoremove = (fitcoff * lagtc).astype(rt_floattype)
30
84
  return (
31
85
  vox,
32
- rt_floatset(thefit[0, 0]),
33
- rt_floatset(R),
34
- rt_floatset(R * R),
86
+ thefit[0, 0],
87
+ np.sqrt(R2),
88
+ R2,
35
89
  fitcoff,
36
- rt_floatset(thefit[0, 1] / thefit[0, 0]),
90
+ thefit[0, 1] / thefit[0, 0],
37
91
  datatoremove,
38
- rt_floatset(inittc - datatoremove),
92
+ (inittc - datatoremove).astype(rt_floattype),
39
93
  )
40
94
 
41
95
 
42
96
  def wienerpass(
43
- numspatiallocs,
44
- fmri_data,
45
- threshval,
46
- lagtc,
47
- optiondict,
48
- wienerdeconv,
49
- wpeak,
50
- resampref_y,
51
- rt_floatset=np.float64,
52
- rt_floattype="float64",
53
- ):
54
- rt_floatset = (rt_floatset,)
97
+ numspatiallocs: int,
98
+ fmri_data: NDArray,
99
+ threshval: float,
100
+ lagtc: NDArray,
101
+ optiondict: dict,
102
+ wienerdeconv: NDArray,
103
+ wpeak: NDArray,
104
+ resampref_y: NDArray,
105
+ rt_floattype: np.dtype = np.float64,
106
+ ) -> int:
107
+ """
108
+ Perform Wiener deconvolution on fMRI data voxels.
109
+
110
+ This function applies Wiener deconvolution to each voxel in the fMRI data
111
+ based on the provided lagged time course and threshold. It supports both
112
+ single-threaded and multi-threaded processing depending on the configuration
113
+ in `optiondict`.
114
+
115
+ Parameters
116
+ ----------
117
+ numspatiallocs : int
118
+ Number of spatial locations (voxels) in the fMRI data.
119
+ fmri_data : NDArray
120
+ 2D array of fMRI data with shape (numspatiallocs, timepoints).
121
+ threshval : float
122
+ Threshold value for masking voxels based on mean signal intensity.
123
+ lagtc : NDArray
124
+ 2D array of lagged time courses with shape (numspatiallocs, timepoints).
125
+ optiondict : dict
126
+ Dictionary containing processing options including:
127
+ - 'nprocs': number of processors to use (default: 1)
128
+ - 'showprogressbar': whether to show progress bar (default: True)
129
+ - 'mp_chunksize': chunk size for multiprocessing (default: 10)
130
+ wienerdeconv : NDArray
131
+ Wiener deconvolution kernel or filter.
132
+ wpeak : NDArray
133
+ Peak values associated with the Wiener deconvolution.
134
+ resampref_y : NDArray
135
+ Resampled reference signal for filtering.
136
+ rt_floattype : np.dtype, optional
137
+ Data type for floating-point numbers, default is `np.float64`.
138
+
139
+ Returns
140
+ -------
141
+ int
142
+ Total number of voxels processed.
143
+
144
+ Notes
145
+ -----
146
+ - Voxels are masked based on their mean signal intensity exceeding `threshval`.
147
+ - If `nprocs` > 1, multiprocessing is used to process voxels in parallel.
148
+ - The function modifies global variables such as `meanvalue`, `rvalue`, etc.,
149
+ which are assumed to be defined in the outer scope.
150
+
151
+ Examples
152
+ --------
153
+ >>> import numpy as np
154
+ >>> fmri_data = np.random.rand(100, 50)
155
+ >>> lagtc = np.random.rand(100, 50)
156
+ >>> optiondict = {'nprocs': 4, 'showprogressbar': True, 'mp_chunksize': 5}
157
+ >>> result = wienerpass(
158
+ ... numspatiallocs=100,
159
+ ... fmri_data=fmri_data,
160
+ ... threshval=0.1,
161
+ ... lagtc=lagtc,
162
+ ... optiondict=optiondict,
163
+ ... wienerdeconv=np.array([1, 2, 1]),
164
+ ... wpeak=np.array([0.5]),
165
+ ... resampref_y=np.array([1, 1, 1])
166
+ ... )
167
+ >>> print(result)
168
+ 100
169
+ """
55
170
  rt_floattype = rt_floattype
56
171
  inputshape = np.shape(fmri_data)
57
172
  themask = np.where(np.mean(fmri_data, axis=1) > threshval, 1, 0)
@@ -73,7 +188,6 @@ def wienerpass(
73
188
  val,
74
189
  lagtc[val, :],
75
190
  fmri_data[val, :],
76
- rt_floatset=rt_floatset,
77
191
  rt_floattype=rt_floattype,
78
192
  )
79
193
  )
@@ -125,8 +239,7 @@ def wienerpass(
125
239
  vox,
126
240
  lagtc[vox, :],
127
241
  inittc,
128
- rt_floatset=rt_floatset,
129
- t_floattype=rt_floattype,
242
+ rt_floattype=rt_floattype,
130
243
  )
131
244
  volumetotal += 1
132
245
 
rapidtide/wiener2.py CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding: utf-8 -*-
3
3
  #
4
- # Copyright 2016-2024 Blaise Frederick
4
+ # Copyright 2016-2025 Blaise Frederick
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
7
7
  # you may not use this file except in compliance with the License.
@@ -30,6 +30,7 @@ import matplotlib.pyplot as plt
30
30
  import numpy as np
31
31
  from matplotlib.backends.backend_pdf import PdfPages
32
32
  from numpy.fft import fft, ifft, ifftshift
33
+ from numpy.typing import NDArray
33
34
 
34
35
  plt.rcParams.update({"font.size": 6})
35
36
 
@@ -43,8 +44,42 @@ lambd_est = 1e-3 # estimated noise lev
43
44
  ##########################
44
45
 
45
46
 
46
- def gen_son(length):
47
- "Generate a synthetic un-reverberated 'sound event' template"
47
+ def gen_son(length: int) -> NDArray:
48
+ """
49
+ Generate a synthetic un-reverberated 'sound event' template.
50
+
51
+ This function creates a synthetic sound template by generating white noise,
52
+ integrating it, applying an envelope, and normalizing the result.
53
+
54
+ Parameters
55
+ ----------
56
+ length : int
57
+ The length of the output array in samples.
58
+
59
+ Returns
60
+ -------
61
+ NDArray
62
+ A normalized synthetic sound event template of shape (length,) containing
63
+ floating point values.
64
+
65
+ Notes
66
+ -----
67
+ The generated sound template follows these steps:
68
+ 1. Generate white noise using random.randn
69
+ 2. Integrate the noise using cumulative sum
70
+ 3. Apply a triangular envelope with 12.5% attack time
71
+ 4. Normalize the result to unit energy
72
+
73
+ Examples
74
+ --------
75
+ >>> import numpy as np
76
+ >>> son = gen_son(1000)
77
+ >>> print(son.shape)
78
+ (1000,)
79
+ >>> print(f"Energy: {np.sum(son * son):.2f}")
80
+ Energy: 1.00
81
+ """
82
+ # "Generate a synthetic un-reverberated 'sound event' template"
48
83
  # (whitenoise -> integrate -> envelope -> normalise)
49
84
  son = np.cumsum(np.random.randn(length))
50
85
  # apply envelope
@@ -55,8 +90,43 @@ def gen_son(length):
55
90
  return son
56
91
 
57
92
 
58
- def gen_ir(length):
59
- "Generate a synthetic impulse response"
93
+ def gen_ir(length: int) -> NDArray:
94
+ """
95
+ Generate a synthetic impulse response.
96
+
97
+ This function creates a synthetic impulse response with a quiet tail, attack envelope,
98
+ direct signal component, and early reflection spikes. The resulting impulse response
99
+ is normalized to unit energy.
100
+
101
+ Parameters
102
+ ----------
103
+ length : int
104
+ The length of the impulse response array to generate.
105
+
106
+ Returns
107
+ -------
108
+ NDArray
109
+ A normalized numpy array of shape (length,) representing the synthetic impulse response.
110
+
111
+ Notes
112
+ -----
113
+ The generated impulse response includes:
114
+ - A quiet tail with random noise
115
+ - An attack envelope that rises from 0.1 to 1 and then falls back to 0.1
116
+ - A direct signal component at index 5 with amplitude 1
117
+ - 10 early reflection spikes with random positions and amplitudes
118
+ - Normalization to unit energy (L2 norm equals 1)
119
+
120
+ Examples
121
+ --------
122
+ >>> import numpy as np
123
+ >>> ir = gen_ir(100)
124
+ >>> print(ir.shape)
125
+ (100,)
126
+ >>> print(np.isclose(np.sum(ir * ir), 1.0))
127
+ True
128
+ """
129
+ # "Generate a synthetic impulse response"
60
130
  # First we generate a quietish tail
61
131
  son = np.random.randn(length)
62
132
  attacklen = int(length // 2)
@@ -73,8 +143,44 @@ def gen_ir(length):
73
143
  return son
74
144
 
75
145
 
76
- def wiener_deconvolution(signal, kernel, lambd):
77
- "lambd is the SNR"
146
+ def wiener_deconvolution(signal: NDArray, kernel: NDArray, lambd: float) -> NDArray:
147
+ """
148
+ Perform Wiener deconvolution on a signal.
149
+
150
+ Wiener deconvolution is a method for reversing the effects of convolution
151
+ in the presence of noise. It uses a regularization parameter to balance
152
+ between deconvolution accuracy and noise amplification.
153
+
154
+ Parameters
155
+ ----------
156
+ signal : NDArray
157
+ Input signal to be deconvolved, assumed to be 1D.
158
+ kernel : NDArray
159
+ Convolution kernel (point spread function), assumed to be 1D.
160
+ lambd : float
161
+ Regularization parameter (signal-to-noise ratio). Higher values
162
+ result in more smoothing and less noise amplification.
163
+
164
+ Returns
165
+ -------
166
+ NDArray
167
+ Deconvolved signal with same length as input signal.
168
+
169
+ Notes
170
+ -----
171
+ The function zero-pads the kernel to match the signal length before
172
+ performing frequency domain operations. The Wiener filter is applied
173
+ in the frequency domain using the formula:
174
+ output = real(ifft(fft(signal) * conj(H) / (|H|² + λ²)))
175
+
176
+ Examples
177
+ --------
178
+ >>> import numpy as np
179
+ >>> signal = np.array([1, 2, 3, 2, 1])
180
+ >>> kernel = np.array([1, 0.5, 0.25])
181
+ >>> result = wiener_deconvolution(signal, kernel, lambd=0.1)
182
+ """
183
+ # "lambd is the SNR"
78
184
  kernel = np.hstack(
79
185
  (kernel, np.zeros(len(signal) - len(kernel)))
80
186
  ) # zero pad the kernel to same length
@@ -84,7 +190,7 @@ def wiener_deconvolution(signal, kernel, lambd):
84
190
 
85
191
 
86
192
  if __name__ == "__main__":
87
- "simple test: get one soundtype and one impulse response, convolve them, deconvolve them, and check the result (plot it!)"
193
+ # "simple test: get one soundtype and one impulse response, convolve them, deconvolve them, and check the result (plot it!)"
88
194
  son = gen_son(sonlen)
89
195
  ir = gen_ir(irlen)
90
196
  obs = np.convolve(son, ir, mode="full")
@@ -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,6 +18,7 @@
18
18
  #
19
19
  import argparse
20
20
  import copy
21
+ from typing import Any
21
22
 
22
23
  import matplotlib.pyplot as plt
23
24
  import numpy as np
@@ -33,9 +34,35 @@ DEFAULT_PEAKTHRESH = 0.33
33
34
  DEFAULT_HISTBINS = 151
34
35
 
35
36
 
36
- def _get_parser():
37
+ def _get_parser() -> Any:
37
38
  """
38
- Argument parser for adjust offset
39
+ Argument parser for adjust offset.
40
+
41
+ This function constructs and returns an `argparse.ArgumentParser` object configured
42
+ for parsing command-line arguments used by the `adjustoffset` tool. It defines
43
+ various options for adjusting the offset of a rapidtide delay map, including
44
+ masking, histogram-based peak detection, and output control.
45
+
46
+ Returns
47
+ -------
48
+ argparse.ArgumentParser
49
+ Configured argument parser for the adjustoffset tool.
50
+
51
+ Notes
52
+ -----
53
+ The parser includes support for:
54
+ - Input and output file specifications
55
+ - Masking options (include, exclude, extra)
56
+ - Histogram-based offset estimation
57
+ - Search range limiting
58
+ - Debugging and display options
59
+
60
+ Examples
61
+ --------
62
+ >>> parser = _get_parser()
63
+ >>> args = parser.parse_args(['input.nii', 'output_root'])
64
+ >>> print(args.inputmap)
65
+ 'input.nii'
39
66
  """
40
67
  parser = argparse.ArgumentParser(
41
68
  prog="adjustoffset",
@@ -159,7 +186,82 @@ def _get_parser():
159
186
  return parser
160
187
 
161
188
 
162
- def adjustoffset(args):
189
+ def adjustoffset(args: Any) -> None:
190
+ """
191
+ Adjust the offset of a NIfTI map based on histogram analysis and optional masking.
192
+
193
+ This function reads a NIfTI map file, applies optional inclusion and exclusion masks,
194
+ and computes a peak location from the histogram of valid voxels. The computed offset
195
+ is then added to the map values, unless a fixed offset is specified via `args.setoffset`.
196
+
197
+ Parameters
198
+ ----------
199
+ args : Any
200
+ An object containing the following attributes:
201
+ - `inputmap` : str
202
+ Path to the input NIfTI map file.
203
+ - `debug` : bool
204
+ If True, prints debug information.
205
+ - `includespec` : str, optional
206
+ Specification for including voxels in the analysis.
207
+ - `excludespec` : str, optional
208
+ Specification for excluding voxels from the analysis.
209
+ - `extramaskname` : str, optional
210
+ Path to an additional mask file.
211
+ - `histbins` : int
212
+ Number of histogram bins to use.
213
+ - `searchrange` : tuple of float, optional
214
+ Range of values to consider for histogram analysis.
215
+ - `refine` : bool
216
+ Whether to refine the peak detection.
217
+ - `pickleft` : bool
218
+ Whether to pick the leftmost peak.
219
+ - `pickleftthresh` : float, optional
220
+ Threshold for leftmost peak picking.
221
+ - `display` : bool
222
+ Whether to display the histogram.
223
+ - `histonly` : bool
224
+ If True, only compute and display the histogram, do not adjust the map.
225
+ - `setoffset` : float, optional
226
+ Fixed offset value to apply to the map.
227
+ - `outputroot` : str
228
+ Root name for output files.
229
+
230
+ Returns
231
+ -------
232
+ None
233
+ This function does not return a value but saves two NIfTI files:
234
+ - `<outputroot>_maskmap.nii.gz`: The generated mask map.
235
+ - `<outputroot>_adjustedmaxtime.nii.gz`: The adjusted map with offset applied.
236
+
237
+ Notes
238
+ -----
239
+ - The function uses `tide_io.readfromnifti` to read the input map and `tide_io.savetonifti` to save outputs.
240
+ - Masks are generated using `tide_mask.getmaskset` based on inclusion/exclusion specifications.
241
+ - Histogram analysis is performed using `tide_stats.gethistprops` and `tide_stats.makehistogram`.
242
+ - If `args.setoffset` is provided, it overrides the computed peak location as the offset.
243
+
244
+ Examples
245
+ --------
246
+ >>> class Args:
247
+ ... inputmap = "input_map.nii.gz"
248
+ ... debug = True
249
+ ... includespec = "brain"
250
+ ... excludespec = None
251
+ ... extramaskname = None
252
+ ... histbins = 100
253
+ ... searchrange = (0.0, 10.0)
254
+ ... refine = True
255
+ ... pickleft = False
256
+ ... pickleftthresh = 0.5
257
+ ... display = False
258
+ ... histonly = False
259
+ ... setoffset = None
260
+ ... outputroot = "output"
261
+ ...
262
+ >>> args = Args()
263
+ >>> adjustoffset(args)
264
+ """
163
265
  if args.debug:
164
266
  print(f"reading map file {args.inputmap}")
165
267
  (
@@ -209,7 +311,7 @@ def adjustoffset(args):
209
311
  )
210
312
 
211
313
  theflatmap = themap_data.reshape((numspatiallocs))
212
- theflatmask = theflatmap * 0 + 1
314
+ theflatmask = np.ones_like(theflatmap)
213
315
  if includemask is not None:
214
316
  theflatmask = theflatmask * includemask.reshape((numspatiallocs))
215
317
  if excludemask is not None:
@@ -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,6 +17,7 @@
17
17
  #
18
18
  #
19
19
  import argparse
20
+ from typing import Any
20
21
 
21
22
  import numpy as np
22
23
 
@@ -28,7 +29,32 @@ import rapidtide.resample as tide_resample
28
29
  import rapidtide.workflows.parser_funcs as pf
29
30
 
30
31
 
31
- def _get_parser():
32
+ def _get_parser() -> Any:
33
+ """
34
+ Construct and return an argument parser for aligning two time series.
35
+
36
+ This function sets up an `argparse.ArgumentParser` with required and optional
37
+ arguments for resampling and aligning two time series datasets. It supports
38
+ specifying input files, sample rates, output file, and various processing options
39
+ such as plotting and verbosity.
40
+
41
+ Returns
42
+ -------
43
+ argparse.ArgumentParser
44
+ Configured argument parser object with all necessary arguments for
45
+ time series alignment.
46
+
47
+ Notes
48
+ -----
49
+ The function uses a custom helper `pf.is_float` to validate sample rate inputs.
50
+ It also adds search range and filter options via `pf.addsearchrangeopts` and
51
+ `pf.addfilteropts`.
52
+
53
+ Examples
54
+ --------
55
+ >>> parser = _get_parser()
56
+ >>> args = parser.parse_args()
57
+ """
32
58
  # get the command line parameters
33
59
  parser = argparse.ArgumentParser(
34
60
  prog="aligntcs",
@@ -83,7 +109,64 @@ def _get_parser():
83
109
  return parser
84
110
 
85
111
 
86
- def aligntcs(args):
112
+ def aligntcs(args: Any) -> None:
113
+ """
114
+ Align two time series using cross-correlation and resampling.
115
+
116
+ This function reads two input time series from text files, aligns them based on
117
+ cross-correlation, and writes the aligned second time series to an output file.
118
+ Optional plotting of cross-correlation and aligned signals can be enabled via
119
+ the `displayplots` argument in `args`.
120
+
121
+ Parameters
122
+ ----------
123
+ args : Any
124
+ An object containing the following attributes:
125
+ - infile1 : str
126
+ Path to the first input text file.
127
+ - infile2 : str
128
+ Path to the second input text file.
129
+ - insamplerate1 : float
130
+ Sampling rate of the first input signal.
131
+ - insamplerate2 : float
132
+ Sampling rate of the second input signal.
133
+ - outputfile : str
134
+ Path to the output file where the aligned second signal will be written.
135
+ - lagmin : float
136
+ Minimum lag for cross-correlation search.
137
+ - lagmax : float
138
+ Maximum lag for cross-correlation search.
139
+ - displayplots : bool
140
+ If True, displays cross-correlation and aligned signals using matplotlib.
141
+
142
+ Returns
143
+ -------
144
+ None
145
+ This function does not return a value but writes the aligned data to a file
146
+ and optionally displays plots.
147
+
148
+ Notes
149
+ -----
150
+ - The function applies a prefilter to the input data before alignment.
151
+ - The second time series is resampled to match the timing of the first.
152
+ - Cross-correlation is performed using a fast correlation method.
153
+ - If `displayplots` is True, the function will use the 'TkAgg' backend for matplotlib.
154
+
155
+ Examples
156
+ --------
157
+ >>> import argparse
158
+ >>> args = argparse.Namespace(
159
+ ... infile1='signal1.txt',
160
+ ... infile2='signal2.txt',
161
+ ... insamplerate1=100.0,
162
+ ... insamplerate2=100.0,
163
+ ... outputfile='aligned_signal2.txt',
164
+ ... lagmin=-0.1,
165
+ ... lagmax=0.1,
166
+ ... displayplots=False
167
+ ... )
168
+ >>> aligntcs(args)
169
+ """
87
170
  if args.displayplots:
88
171
  import matplotlib as mpl
89
172