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.
@@ -21,11 +21,39 @@ import glob
21
21
  import os
22
22
  import subprocess
23
23
  import sys
24
+ from argparse import Namespace
25
+ from typing import Any, Callable, Dict, List, Optional, Tuple, Union
24
26
 
25
27
  import rapidtide.externaltools as tide_extern
26
28
 
27
29
 
28
- def _get_parser():
30
+ def _get_parser() -> Any:
31
+ """
32
+ Create and configure an argument parser for the rapidtide2std command-line tool.
33
+
34
+ This function sets up an `argparse.ArgumentParser` with specific arguments
35
+ required for registering happy output maps to standard space. It defines
36
+ positional and optional arguments for input file roots, output directories,
37
+ and various transformation options.
38
+
39
+ Returns
40
+ -------
41
+ argparse.ArgumentParser
42
+ Configured argument parser object with defined arguments for
43
+ the rapidtide2std tool.
44
+
45
+ Notes
46
+ -----
47
+ The parser is configured with a program name, description, and usage string
48
+ specific to the rapidtide2std tool. It expects three positional arguments:
49
+ inputfileroot, outputdir, and featdirectory, followed by several optional
50
+ flags that control the registration process.
51
+
52
+ Examples
53
+ --------
54
+ >>> parser = _get_parser()
55
+ >>> args = parser.parse_args()
56
+ """
29
57
  # get the command line parameters
30
58
  parser = argparse.ArgumentParser(
31
59
  prog="rapidtide2std",
@@ -84,16 +112,74 @@ def _get_parser():
84
112
 
85
113
 
86
114
  def transformmaps(
87
- thepath,
88
- theoutputdir,
89
- subjroot,
90
- reftarget,
91
- xformfuncmat,
92
- warpfuncfile,
93
- thefmrimaps=None,
94
- theanatmaps=None,
95
- preponly=False,
96
- ):
115
+ thepath: Any,
116
+ theoutputdir: Any,
117
+ subjroot: Any,
118
+ reftarget: Any,
119
+ xformfuncmat: Any,
120
+ warpfuncfile: Any,
121
+ thefmrimaps: Optional[Any] = None,
122
+ theanatmaps: Optional[Any] = None,
123
+ preponly: bool = False,
124
+ ) -> None:
125
+ """
126
+ Apply spatial transformations to fMRI and anatomical maps from a happy dataset using FLIRT and/or
127
+ copy commands.
128
+
129
+ This function applies rigid-body and non-linear transformations to a set of fMRI and/or
130
+ anatomical maps, based on provided transformation matrices and warp fields. It supports
131
+ both functional and anatomical image processing pipelines.
132
+
133
+ Parameters
134
+ ----------
135
+ thepath : Any
136
+ Path to the directory containing input fMRI maps.
137
+ theoutputdir : Any
138
+ Directory where transformed maps will be saved.
139
+ subjroot : Any
140
+ Subject identifier used to construct input and output file names.
141
+ reftarget : Any
142
+ Reference image to which maps are transformed.
143
+ xformfuncmat : Any
144
+ Transformation matrix for functional-to-standard space alignment.
145
+ warpfuncfile : Any
146
+ Warp field file for non-linear functional-to-standard space transformation.
147
+ thefmrimaps : Optional[Any], default=None
148
+ List of fMRI map names to transform. If None, no fMRI maps are processed.
149
+ theanatmaps : Optional[Any], default=None
150
+ List of anatomical map names to transform. If None, no anatomical maps are processed.
151
+ preponly : bool, default=False
152
+ If True, only print the commands without executing them.
153
+
154
+ Returns
155
+ -------
156
+ None
157
+ This function does not return any value; it performs file I/O operations.
158
+
159
+ Notes
160
+ -----
161
+ - For fMRI maps, the function uses `tide_extern.makeflirtcmd` to generate and execute
162
+ FLIRT commands for transformation.
163
+ - For anatomical maps, it either copies the file or applies a transformation using
164
+ `tide_extern.makeflirtcmd`, depending on the `aligntohires` flag.
165
+ - If `preponly` is True, the commands are printed but not executed.
166
+ - The function assumes that input files exist and are named according to the
167
+ pattern: ``{subjroot}_{mapname}.nii.gz``.
168
+
169
+ Examples
170
+ --------
171
+ >>> transformmaps(
172
+ ... thepath="/data/subj1",
173
+ ... theoutputdir="/data/subj1/transformed",
174
+ ... subjroot="subj1",
175
+ ... reftarget="/data/templates/MNI152_T1_2mm.nii.gz",
176
+ ... xformfuncmat="/data/subj1/reg/func2standard.mat",
177
+ ... warpfuncfile="/data/subj1/reg/warpfield.nii.gz",
178
+ ... thefmrimaps=["bold", "mask"],
179
+ ... theanatmaps=["brain"],
180
+ ... preponly=False
181
+ ... )
182
+ """
97
183
  print("entering transformmaps with:")
98
184
  print(thepath)
99
185
  print(subjroot)
@@ -151,7 +237,53 @@ def transformmaps(
151
237
  print("no hires anatomic found - skipping")
152
238
 
153
239
 
154
- def happy2std(args):
240
+ def happy2std(args: Any) -> None:
241
+ """
242
+ Apply FSL-based spatial transformation to fMRI data and anatomical maps.
243
+
244
+ This function performs spatial normalization of fMRI data to either high-resolution
245
+ or standard MNI152 space, using FSL transformation matrices and warp fields. It supports
246
+ both linear and nonlinear transformations, and can process either a single file or
247
+ a set of files based on input arguments.
248
+
249
+ Parameters
250
+ ----------
251
+ args : Any
252
+ An object containing command-line arguments. Expected attributes include:
253
+ - featdirectory : str
254
+ Path to the FEAT directory containing registration files.
255
+ - aligntohires : bool
256
+ If True, align to high-resolution anatomical space; otherwise to standard MNI152.
257
+ - forcelinear : bool
258
+ If True, forces use of a linear transformation even if warp files are present.
259
+ - onefilename : str or None
260
+ If provided, process only this single file.
261
+ - preponly : bool
262
+ If True, print the FSL command without executing it.
263
+ - inputfileroot : str
264
+ Root path to input files for batch processing.
265
+ - outputdir : str
266
+ Output directory for transformed files.
267
+ - all : bool
268
+ If True, include additional fMRI maps in processing.
269
+
270
+ Returns
271
+ -------
272
+ None
273
+ This function does not return a value but may exit the program on error.
274
+
275
+ Notes
276
+ -----
277
+ This function requires the FSL environment variable ``FSLDIR`` to be set.
278
+ It relies on FSL tools like `applywarp` and `flirt` for transformations.
279
+ The function supports processing of both single files and batches of files
280
+ using glob patterns.
281
+
282
+ Examples
283
+ --------
284
+ >>> args = parse_args() # Assume args is parsed from command line
285
+ >>> happy2std(args)
286
+ """
155
287
  # make sure the appropriate transformation matrix and targets exist
156
288
  fsldir = os.environ.get("FSLDIR")
157
289
  if fsldir is None:
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding: utf-8 -*-
3
3
  #
4
- # Copyright 2019-2024 Blaise Frederick
4
+ # Copyright 2019-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,17 +17,61 @@
17
17
  #
18
18
  #
19
19
  import argparse
20
- import sys
20
+ from typing import Any, Optional
21
21
 
22
22
  import numpy as np
23
23
 
24
24
  import rapidtide.io as tide_io
25
+ import rapidtide.multiproc as tide_multiproc
25
26
  import rapidtide.workflows.parser_funcs as pf
26
27
 
28
+ try:
29
+ import tensorflow as tf
27
30
 
28
- def _get_parser():
31
+ tensorflowpresent = True
32
+ except ImportError:
33
+ tensorflowpresent = False
34
+
35
+ DEFAULT_ALIASEDCORRELATIONWIDTH = 5.0
36
+ DEFAULT_PULSATILITYSIGMA = 6.0
37
+ DEFAULT_PULSATILITYTHRESHOLD = 0.5
38
+ DEFAULT_TF_DL_MODEL = "model_revised_tf2"
39
+ DEFAULT_PT_DL_MODEL = "model_ppgattention_pytorch_w128_fulldata"
40
+
41
+
42
+ def _get_parser() -> Any:
29
43
  """
30
- Argument parser for happy
44
+ Create and configure an argument parser for the happy command-line tool.
45
+
46
+ This function sets up an `argparse.ArgumentParser` with numerous options for
47
+ configuring the hypersampling by analytic phase projection (HAPPY) pipeline.
48
+ It includes arguments for input files, processing steps, performance tuning,
49
+ preprocessing, cardiac and respiration estimation, output handling, and debugging.
50
+
51
+ Returns
52
+ -------
53
+ argparse.ArgumentParser
54
+ Configured argument parser with all supported command-line options.
55
+
56
+ Notes
57
+ -----
58
+ The parser includes multiple argument groups for different functional areas:
59
+ - Processing steps
60
+ - Performance
61
+ - Preprocessing
62
+ - Cardiac estimation tuning
63
+ - External cardiac waveform options
64
+ - External respiration waveform options
65
+ - Output processing
66
+ - Output options
67
+ - Phase projection tuning
68
+ - Miscellaneous options
69
+ - Debugging options
70
+
71
+ Examples
72
+ --------
73
+ >>> parser = _get_parser()
74
+ >>> args = parser.parse_args()
31
75
  """
32
76
  parser = argparse.ArgumentParser(
33
77
  prog="happy",
@@ -70,18 +114,19 @@ def _get_parser():
70
114
  help="Disable deep learning cardiac waveform filter. ",
71
115
  default=True,
72
116
  )
73
- processing_steps.add_argument(
74
- "--usesuperdangerousworkaround",
75
- dest="mpfix",
76
- action="store_true",
77
- help=(
78
- "Some versions of tensorflow seem to have some weird conflict with MKL which"
79
- "I don't seem to be able to fix. If the dl filter bombs complaining about "
80
- "multiple openmp libraries, try rerunning with the secret and inadvisable "
81
- "'--usesuperdangerousworkaround' flag. Good luck! "
82
- ),
83
- default=False,
84
- )
117
+ if tensorflowpresent:
118
+ processing_steps.add_argument(
119
+ "--usesuperdangerousworkaround",
120
+ dest="mpfix",
121
+ action="store_true",
122
+ help=(
123
+ "Some versions of tensorflow seem to have some weird conflict with MKL which"
124
+ "I don't seem to be able to fix. If the dl filter bombs complaining about "
125
+ "multiple openmp libraries, try rerunning with the secret and inadvisable "
126
+ "'--usesuperdangerousworkaround' flag. Good luck! "
127
+ ),
128
+ default=False,
129
+ )
85
130
  processing_steps.add_argument(
86
131
  "--slicetimesareinseconds",
87
132
  action="store_true",
@@ -98,10 +143,10 @@ def _get_parser():
98
143
  dest="modelname",
99
144
  metavar="MODELNAME",
100
145
  help=(
101
- "Use model MODELNAME for dl filter (default is model_revised - "
102
- "from the revised NeuroImage paper. "
146
+ f"Use model MODELNAME for dl filter (default is {DEFAULT_PT_DL_MODEL} - "
147
+ "from the revised NeuroImage paper.) "
103
148
  ),
104
- default="model_revised",
149
+ default=None,
105
150
  )
106
151
 
107
152
  # Performance
@@ -119,7 +164,20 @@ def _get_parser():
119
164
  ),
120
165
  default=1,
121
166
  )
122
-
167
+ performance_opts.add_argument(
168
+ "--nprocs",
169
+ dest="nprocs",
170
+ action="store",
171
+ metavar="NPROCS",
172
+ type=lambda x: pf.is_int(parser, x),
173
+ help=(
174
+ "Use NPROCS CPUs to accelerate processing (defaults to 1 - more "
175
+ "CPUs up to the number of cores can accelerate processing a lot, but "
176
+ "you need to remember to ask for this many CPUs on clusters.) Entering a mulitprocessor "
177
+ "routine disables mklthreads (otherwise there's chaos)."
178
+ ),
179
+ default=1,
180
+ )
123
181
  # Preprocessing
124
182
  preprocessing_opts = parser.add_argument_group("Preprocessing")
125
183
  preprocessing_opts.add_argument(
@@ -142,7 +200,7 @@ def _get_parser():
142
200
  )
143
201
  preprocessing_opts.add_argument(
144
202
  "--motionfile",
145
- dest="motionfilename",
203
+ dest="motionfilespec",
146
204
  metavar="MOTFILE",
147
205
  help=(
148
206
  "Read 6 columns of motion regressors out of MOTFILE file (.par or BIDS .json) "
@@ -178,13 +236,6 @@ def _get_parser():
178
236
  ),
179
237
  default=True,
180
238
  )
181
- preprocessing_opts.add_argument(
182
- "--motpos",
183
- dest="motfilt_pos",
184
- action="store_true",
185
- help=("Include motion position regressors. "),
186
- default=False,
187
- )
188
239
  preprocessing_opts.add_argument(
189
240
  "--nomotderiv",
190
241
  dest="motfilt_deriv",
@@ -192,6 +243,17 @@ def _get_parser():
192
243
  help=("Do not use motion derivative regressors. "),
193
244
  default=True,
194
245
  )
246
+ preprocessing_opts.add_argument(
247
+ "--motfiltorder",
248
+ dest="motfilt_order",
249
+ action="store",
250
+ metavar="N",
251
+ type=lambda x: pf.is_int(parser, x),
252
+ help=(
253
+ "Include powers of each confound regressor up to order N. Default is 1 (no expansion). "
254
+ ),
255
+ default=1,
256
+ )
195
257
  preprocessing_opts.add_argument(
196
258
  "--discardmotionfiltered",
197
259
  dest="savemotionglmfilt",
@@ -203,10 +265,10 @@ def _get_parser():
203
265
  # Cardiac estimation tuning
204
266
  cardiac_est_tuning = parser.add_argument_group("Cardiac estimation tuning")
205
267
  cardiac_est_tuning.add_argument(
206
- "--estmask",
207
- dest="estmaskname",
268
+ "--estweights",
269
+ dest="estweightsname",
208
270
  action="store",
209
- metavar="MASKNAME",
271
+ metavar="WEIGHTSNAME",
210
272
  help=(
211
273
  "Generation of cardiac waveform from data will be restricted to "
212
274
  "voxels in MASKNAME and weighted by the mask intensity. If this is "
@@ -288,6 +350,15 @@ def _get_parser():
288
350
  ),
289
351
  default=False,
290
352
  )
353
+ cardiac_est_tuning.add_argument(
354
+ "--teoffset",
355
+ dest="teoffset",
356
+ action="store",
357
+ metavar="TE",
358
+ type=lambda x: pf.is_float(parser, x),
359
+ help="Specify the echo time in seconds. This is used when combining multiecho data. Default is 0. ",
360
+ default=None,
361
+ )
291
362
 
292
363
  # External cardiac waveform options
293
364
  external_cardiac_opts = parser.add_argument_group("External cardiac waveform options")
@@ -429,15 +500,15 @@ def _get_parser():
429
500
  # Output processing
430
501
  output_proc = parser.add_argument_group("Output processing")
431
502
  output_proc.add_argument(
432
- "--spatialglm",
433
- dest="dospatialglm",
503
+ "--spatialregression",
504
+ dest="dospatialregression",
434
505
  action="store_true",
435
506
  help="Generate framewise cardiac signal maps and filter them out of the input data. ",
436
507
  default=False,
437
508
  )
438
509
  output_proc.add_argument(
439
- "--temporalglm",
440
- dest="dotemporalglm",
510
+ "--temporalregression",
511
+ dest="dotemporalregression",
441
512
  action="store_true",
442
513
  help="Generate voxelwise aliased synthetic cardiac regressors and filter them out of the input data. ",
443
514
  default=False,
@@ -521,12 +592,49 @@ def _get_parser():
521
592
  help="Restrict cardiac waveform estimation to putative arteries only.",
522
593
  default=False,
523
594
  )
595
+ phase_proj_tuning.add_argument(
596
+ "--pulsatilitysigma",
597
+ dest="pulsatilitysigma",
598
+ action="store",
599
+ metavar="SIGMAINMM",
600
+ type=lambda x: pf.is_float(parser, x),
601
+ help=(
602
+ "Split pulsatility map spatial frequencies with a gaussian filter with sigma=SIGMAINMM. "
603
+ f"Default is {DEFAULT_PULSATILITYSIGMA}mm. "
604
+ ),
605
+ default=DEFAULT_PULSATILITYSIGMA,
606
+ )
607
+ phase_proj_tuning.add_argument(
608
+ "--pulsatilitythreshold",
609
+ dest="pulsatilitythreshold",
610
+ action="store",
611
+ metavar="THRESHPCT",
612
+ type=lambda x: pf.is_float(parser, x),
613
+ help=(
614
+ "Consider voxels with a high spatial frequency pulsatility above THRESHPCT percent "
615
+ "to be vessels. "
616
+ f"Default is {DEFAULT_PULSATILITYTHRESHOLD}mm. "
617
+ ),
618
+ default=DEFAULT_PULSATILITYSIGMA,
619
+ )
524
620
 
525
621
  # Add version options
526
622
  pf.addversionopts(parser)
527
623
 
528
624
  # Add miscellaneous options
529
625
  misc_opts = parser.add_argument_group("Miscellaneous options.")
626
+ misc_opts.add_argument(
627
+ "--processmask",
628
+ dest="processmask",
629
+ action="store",
630
+ metavar="MASKNAME",
631
+ help=(
632
+ "Instead of dynamically generating a processing mask from the data, use "
633
+ "the mask specified in the file MASKNAME. "
634
+ "The mask must be a 3D NIFTI file with x, y, z dimensions matching the fMRI data. "
635
+ ),
636
+ default=None,
637
+ )
530
638
  misc_opts.add_argument(
531
639
  "--aliasedcorrelation",
532
640
  dest="doaliasedcorrelation",
@@ -534,6 +642,15 @@ def _get_parser():
534
642
  help="Attempt to calculate absolute delay using an aliased correlation (experimental).",
535
643
  default=False,
536
644
  )
645
+ misc_opts.add_argument(
646
+ "--aliasedcorrelationwidth",
647
+ dest="aliasedcorrelationwidth",
648
+ metavar="WIDTH",
649
+ action="store",
650
+ type=lambda x: pf.is_float(parser, x),
651
+ help=f"Width of the aliased correlation calculation (default is {DEFAULT_ALIASEDCORRELATIONWIDTH}). ",
652
+ default=DEFAULT_ALIASEDCORRELATIONWIDTH,
653
+ )
537
654
  misc_opts.add_argument(
538
655
  "--upsample",
539
656
  dest="doupsampling",
@@ -555,6 +672,21 @@ def _get_parser():
555
672
  help="Will disable showing progress bars (helpful if stdout is going to a file). ",
556
673
  default=True,
557
674
  )
675
+ misc_opts.add_argument(
676
+ "--wrightiterations",
677
+ dest="wrightiterations",
678
+ action="store",
679
+ type=lambda x: pf.is_int(parser, x),
680
+ help="Number of iterations for calculating Wright map. Set to 0 to disable.",
681
+ default=0,
682
+ )
683
+ misc_opts.add_argument(
684
+ "--useoldvesselmethod",
685
+ dest="useoriginalvesselmethod",
686
+ action="store_true",
687
+ help="Will use the old method to find blood vessels. ",
688
+ default=False,
689
+ )
558
690
  pf.addtagopts(
559
691
  misc_opts,
560
692
  helptext="Additional key, value pairs to add to the info json file (useful for tracking analyses).",
@@ -577,6 +709,13 @@ def _get_parser():
577
709
  help="Disable data detrending. ",
578
710
  default=3,
579
711
  )
712
+ debug_opts.add_argument(
713
+ "--normvesselmap",
714
+ dest="unnormvesselmap",
715
+ action="store_false",
716
+ help="Find vessels using normalized phase projection. ",
717
+ default=True,
718
+ )
580
719
  debug_opts.add_argument(
581
720
  "--noorthog",
582
721
  dest="orthogonalize",
@@ -654,35 +793,92 @@ def _get_parser():
654
793
  help="Decrease the number of intermediate output files. ",
655
794
  default=0,
656
795
  )
796
+ debug_opts.add_argument(
797
+ "--nompdetrend",
798
+ dest="mpdetrend",
799
+ action="store_false",
800
+ help="Disable multiproc detrending.",
801
+ default=True,
802
+ )
803
+ debug_opts.add_argument(
804
+ "--nompphaseproject",
805
+ dest="mpphaseproject",
806
+ action="store_false",
807
+ help="Disable multiproc phase projection.",
808
+ default=True,
809
+ )
810
+ debug_opts.add_argument(
811
+ "--noprefillcongrid",
812
+ dest="preloadcongrid",
813
+ action="store_false",
814
+ help="Don't prefill the congrid value cache.",
815
+ default=True,
816
+ )
817
+ debug_opts.add_argument(
818
+ "--nocongridcache",
819
+ dest="congridcache",
820
+ action="store_false",
821
+ help="Disable the congrid value cache completely.",
822
+ default=True,
823
+ )
824
+ if tensorflowpresent:
825
+ debug_opts.add_argument(
826
+ "--usetensorflow",
827
+ dest="usepytorch",
828
+ action="store_false",
829
+ help=("Switch to the old style tensorflow deep learning filter"),
830
+ default=True,
831
+ )
832
+ debug_opts.add_argument(
833
+ "--focaldebug",
834
+ dest="focaldebug",
835
+ action="store_true",
836
+ help=("Enable targeted additional debugging output (used during development)."),
837
+ default=False,
838
+ )
657
839
 
658
840
  return parser
659
841
 
660
842
 
661
- def process_args(inputargs=None):
843
+ def process_args(inputargs: Optional[Any] = None) -> Any:
662
844
  """
663
- Compile arguments for rapidtide workflow.
845
+ Compile arguments for happy workflow.
846
+
847
+ This function processes input arguments for the happy workflow, handling
848
+ argument parsing, command line formatting, default model selection, and post-processing
849
+ of various parameters. It also manages motion file specifications, multiprocessing
850
+ settings, and output level calculations.
851
+
852
+ Parameters
853
+ ----------
854
+ inputargs : optional
855
+ Input arguments to be processed. If None, arguments are parsed from the command line.
856
+ Default is None.
857
+
858
+ Returns
859
+ -------
860
+ args : argparse.Namespace
861
+ Processed arguments namespace containing all parsed and defaulted values.
862
+
863
+ Notes
864
+ -----
865
+ - If no model is specified, the function sets a default based on whether PyTorch or TensorFlow
866
+ is being used.
867
+ - The function writes formatted command line arguments to files for logging purposes.
868
+ - Multiprocessing is currently disabled due to instability.
869
+ - The output level is adjusted based on user-provided increments and decrements.
870
+
871
+ Examples
872
+ --------
873
+ >>> args = process_args()
874
+ >>> print(args.outputroot)
875
+ >>> print(args.modelname)
664
876
  """
665
- if inputargs is None:
666
- print("processing command line arguments")
667
- # write out the command used
668
- try:
669
- args = _get_parser().parse_args()
670
- argstowrite = sys.argv
671
- except SystemExit:
672
- _get_parser().print_help()
673
- raise
674
- else:
675
- print("processing passed argument list:")
676
- try:
677
- args = _get_parser().parse_args(inputargs)
678
- argstowrite = inputargs
679
- except SystemExit:
680
- print("Use --help option for detailed informtion on options.")
681
- raise
877
+ args, argstowrite = pf.setargs(_get_parser, inputargs=inputargs)
682
878
 
683
879
  # save the raw and formatted command lines
684
880
  args.commandline = " ".join(argstowrite)
685
- tide_io.writevec([args.commandline], args.outputroot + "_commandline.txt")
881
+ tide_io.writevec(np.array([args.commandline]), args.outputroot + "_commandline.txt")
686
882
  formattedcommandline = []
687
883
  for thetoken in argstowrite[0:3]:
688
884
  formattedcommandline.append(thetoken)
@@ -701,7 +897,19 @@ def process_args(inputargs=None):
701
897
  else:
702
898
  suffix = ""
703
899
  formattedcommandline[i] = prefix + formattedcommandline[i] + suffix
704
- tide_io.writevec(formattedcommandline, args.outputroot + "_formattedcommandline.txt")
900
+ tide_io.writevec(np.array(formattedcommandline), args.outputroot + "_formattedcommandline.txt")
901
+
902
+ if not tensorflowpresent:
903
+ args.usepytorch = True
904
+ args.mpfix = False
905
+
906
+ # if user did not specify a model, set the default, depending on DL library
907
+ if args.modelname is None:
908
+ if args.usepytorch:
909
+ args.modelname = DEFAULT_PT_DL_MODEL
910
+ else:
911
+ args.modelname = DEFAULT_TF_DL_MODEL
912
+ print(f"No model specified. {args.usepytorch=}, so using {args.modelname}")
705
913
 
706
914
  if args.debug:
707
915
  print()
@@ -712,26 +920,36 @@ def process_args(inputargs=None):
712
920
  args.outputlevel = 1
713
921
  args.maskthreshpct = 10.0
714
922
  args.domadnorm = True
715
- args.nprocs = 1
716
923
  args.verbose = False
717
924
  args.smoothlen = 101
718
925
  args.envthresh = 0.2
719
926
  args.upsamplefac = 100
720
927
  args.centric = True
721
928
  args.pulsereconstepsize = 0.01
722
- args.aliasedcorrelationwidth = 3.0
723
- args.unnormvesselmap = True
724
929
  args.histlen = 100
725
930
  args.softvesselfrac = 0.4
726
931
  args.savecardiacnoise = True
727
932
  args.colnum = None
728
933
  args.colname = None
934
+ args.notchrolloff = 0.5
729
935
 
730
936
  # Additional argument parsing not handled by argparse
731
937
  # deal with notch filter logic
732
938
  if args.disablenotch:
733
939
  args.notchpct = None
734
940
 
941
+ # process motionfile information
942
+ if args.motionfilespec is not None:
943
+ (args.motionfilename, args.motionfilecolspec) = tide_io.parsefilespec(args.motionfilespec)
944
+ else:
945
+ args.motionfilename = None
946
+
947
+ # set the number of worker processes if multiprocessing
948
+ # Multiprocessing is very broken atm. Hard disable it.
949
+ # args.nprocs = 1
950
+ if args.nprocs < 1:
951
+ args.nprocs = tide_multiproc.maxcpus()
952
+
735
953
  # process infotags
736
954
  args = pf.postprocesstagopts(args)
737
955