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.
- cloud/gmscalc-HCPYA +1 -1
- cloud/mount-and-run +2 -0
- cloud/rapidtide-HCPYA +3 -3
- rapidtide/Colortables.py +538 -38
- rapidtide/OrthoImageItem.py +1094 -51
- rapidtide/RapidtideDataset.py +1709 -114
- rapidtide/__init__.py +0 -8
- rapidtide/_version.py +4 -4
- rapidtide/calccoherence.py +242 -97
- rapidtide/calcnullsimfunc.py +240 -140
- rapidtide/calcsimfunc.py +314 -129
- rapidtide/correlate.py +1211 -389
- rapidtide/data/examples/src/testLD +56 -0
- rapidtide/data/examples/src/test_findmaxlag.py +2 -2
- rapidtide/data/examples/src/test_mlregressallt.py +32 -17
- rapidtide/data/examples/src/testalign +1 -1
- rapidtide/data/examples/src/testatlasaverage +35 -7
- rapidtide/data/examples/src/testboth +21 -0
- rapidtide/data/examples/src/testcifti +11 -0
- rapidtide/data/examples/src/testdelayvar +13 -0
- rapidtide/data/examples/src/testdlfilt +25 -0
- rapidtide/data/examples/src/testfft +35 -0
- rapidtide/data/examples/src/testfileorfloat +37 -0
- rapidtide/data/examples/src/testfmri +94 -27
- rapidtide/data/examples/src/testfuncs +3 -3
- rapidtide/data/examples/src/testglmfilt +8 -6
- rapidtide/data/examples/src/testhappy +84 -51
- rapidtide/data/examples/src/testinitdelay +19 -0
- rapidtide/data/examples/src/testmodels +33 -0
- rapidtide/data/examples/src/testnewrefine +26 -0
- rapidtide/data/examples/src/testnoiseamp +21 -0
- rapidtide/data/examples/src/testppgproc +17 -0
- rapidtide/data/examples/src/testrefineonly +22 -0
- rapidtide/data/examples/src/testretro +26 -13
- rapidtide/data/examples/src/testretrolagtcs +16 -0
- rapidtide/data/examples/src/testrolloff +11 -0
- rapidtide/data/examples/src/testsimdata +45 -28
- rapidtide/data/models/model_cnn_pytorch/loss.png +0 -0
- rapidtide/data/models/model_cnn_pytorch/loss.txt +1 -0
- rapidtide/data/models/model_cnn_pytorch/model.pth +0 -0
- rapidtide/data/models/model_cnn_pytorch/model_meta.json +68 -0
- rapidtide/data/models/model_cnn_pytorch_fulldata/loss.png +0 -0
- rapidtide/data/models/model_cnn_pytorch_fulldata/loss.txt +1 -0
- rapidtide/data/models/model_cnn_pytorch_fulldata/model.pth +0 -0
- rapidtide/data/models/model_cnn_pytorch_fulldata/model_meta.json +80 -0
- rapidtide/data/models/model_cnnbp_pytorch_fullldata/loss.png +0 -0
- rapidtide/data/models/model_cnnbp_pytorch_fullldata/loss.txt +1 -0
- rapidtide/data/models/model_cnnbp_pytorch_fullldata/model.pth +0 -0
- rapidtide/data/models/model_cnnbp_pytorch_fullldata/model_meta.json +138 -0
- rapidtide/data/models/model_cnnfft_pytorch_fulldata/loss.png +0 -0
- rapidtide/data/models/model_cnnfft_pytorch_fulldata/loss.txt +1 -0
- rapidtide/data/models/model_cnnfft_pytorch_fulldata/model.pth +0 -0
- rapidtide/data/models/model_cnnfft_pytorch_fulldata/model_meta.json +128 -0
- rapidtide/data/models/model_ppgattention_pytorch_w128_fulldata/loss.png +0 -0
- rapidtide/data/models/model_ppgattention_pytorch_w128_fulldata/loss.txt +1 -0
- rapidtide/data/models/model_ppgattention_pytorch_w128_fulldata/model.pth +0 -0
- rapidtide/data/models/model_ppgattention_pytorch_w128_fulldata/model_meta.json +49 -0
- rapidtide/data/models/model_revised_tf2/model.keras +0 -0
- rapidtide/data/models/{model_serdar → model_revised_tf2}/model_meta.json +1 -1
- rapidtide/data/models/model_serdar2_tf2/model.keras +0 -0
- rapidtide/data/models/{model_serdar2 → model_serdar2_tf2}/model_meta.json +1 -1
- rapidtide/data/models/model_serdar_tf2/model.keras +0 -0
- rapidtide/data/models/{model_revised → model_serdar_tf2}/model_meta.json +1 -1
- rapidtide/data/reference/HCP1200v2_MTT_2mm.nii.gz +0 -0
- rapidtide/data/reference/HCP1200v2_binmask_2mm.nii.gz +0 -0
- rapidtide/data/reference/HCP1200v2_csf_2mm.nii.gz +0 -0
- rapidtide/data/reference/HCP1200v2_gray_2mm.nii.gz +0 -0
- rapidtide/data/reference/HCP1200v2_graylaghist.json +7 -0
- rapidtide/data/reference/HCP1200v2_graylaghist.tsv.gz +0 -0
- rapidtide/data/reference/HCP1200v2_laghist.json +7 -0
- rapidtide/data/reference/HCP1200v2_laghist.tsv.gz +0 -0
- rapidtide/data/reference/HCP1200v2_mask_2mm.nii.gz +0 -0
- rapidtide/data/reference/HCP1200v2_maxcorr_2mm.nii.gz +0 -0
- rapidtide/data/reference/HCP1200v2_maxtime_2mm.nii.gz +0 -0
- rapidtide/data/reference/HCP1200v2_maxwidth_2mm.nii.gz +0 -0
- rapidtide/data/reference/HCP1200v2_negmask_2mm.nii.gz +0 -0
- rapidtide/data/reference/HCP1200v2_timepercentile_2mm.nii.gz +0 -0
- rapidtide/data/reference/HCP1200v2_white_2mm.nii.gz +0 -0
- rapidtide/data/reference/HCP1200v2_whitelaghist.json +7 -0
- rapidtide/data/reference/HCP1200v2_whitelaghist.tsv.gz +0 -0
- rapidtide/data/reference/JHU-ArterialTerritoriesNoVent-LVL1-seg2.xml +131 -0
- rapidtide/data/reference/JHU-ArterialTerritoriesNoVent-LVL1-seg2_regions.txt +60 -0
- rapidtide/data/reference/JHU-ArterialTerritoriesNoVent-LVL1-seg2_space-MNI152NLin6Asym_2mm.nii.gz +0 -0
- rapidtide/data/reference/JHU-ArterialTerritoriesNoVent-LVL1_space-MNI152NLin2009cAsym_2mm.nii.gz +0 -0
- rapidtide/data/reference/JHU-ArterialTerritoriesNoVent-LVL1_space-MNI152NLin2009cAsym_2mm_mask.nii.gz +0 -0
- rapidtide/data/reference/JHU-ArterialTerritoriesNoVent-LVL1_space-MNI152NLin6Asym_2mm_mask.nii.gz +0 -0
- rapidtide/data/reference/JHU-ArterialTerritoriesNoVent-LVL2_space-MNI152NLin6Asym_2mm_mask.nii.gz +0 -0
- rapidtide/data/reference/MNI152_T1_1mm_Brain_FAST_seg.nii.gz +0 -0
- rapidtide/data/reference/MNI152_T1_1mm_Brain_Mask.nii.gz +0 -0
- rapidtide/data/reference/MNI152_T1_2mm_Brain_FAST_seg.nii.gz +0 -0
- rapidtide/data/reference/MNI152_T1_2mm_Brain_Mask.nii.gz +0 -0
- rapidtide/decorators.py +91 -0
- rapidtide/dlfilter.py +2553 -414
- rapidtide/dlfiltertorch.py +5201 -0
- rapidtide/externaltools.py +328 -13
- rapidtide/fMRIData_class.py +178 -0
- rapidtide/ffttools.py +168 -0
- rapidtide/filter.py +2704 -1462
- rapidtide/fit.py +2361 -579
- rapidtide/genericmultiproc.py +197 -0
- rapidtide/happy_supportfuncs.py +3255 -548
- rapidtide/helper_classes.py +590 -1181
- rapidtide/io.py +2569 -468
- rapidtide/linfitfiltpass.py +784 -0
- rapidtide/makelaggedtcs.py +267 -97
- rapidtide/maskutil.py +555 -25
- rapidtide/miscmath.py +867 -137
- rapidtide/multiproc.py +217 -44
- rapidtide/patchmatch.py +752 -0
- rapidtide/peakeval.py +32 -32
- rapidtide/ppgproc.py +2205 -0
- rapidtide/qualitycheck.py +353 -40
- rapidtide/refinedelay.py +854 -0
- rapidtide/refineregressor.py +939 -0
- rapidtide/resample.py +725 -204
- rapidtide/scripts/__init__.py +1 -0
- rapidtide/scripts/{adjustoffset → adjustoffset.py} +7 -2
- rapidtide/scripts/{aligntcs → aligntcs.py} +7 -2
- rapidtide/scripts/{applydlfilter → applydlfilter.py} +7 -2
- rapidtide/scripts/applyppgproc.py +28 -0
- rapidtide/scripts/{atlasaverage → atlasaverage.py} +7 -2
- rapidtide/scripts/{atlastool → atlastool.py} +7 -2
- rapidtide/scripts/{calcicc → calcicc.py} +7 -2
- rapidtide/scripts/{calctexticc → calctexticc.py} +7 -2
- rapidtide/scripts/{calcttest → calcttest.py} +7 -2
- rapidtide/scripts/{ccorrica → ccorrica.py} +7 -2
- rapidtide/scripts/delayvar.py +28 -0
- rapidtide/scripts/{diffrois → diffrois.py} +7 -2
- rapidtide/scripts/{endtidalproc → endtidalproc.py} +7 -2
- rapidtide/scripts/{fdica → fdica.py} +7 -2
- rapidtide/scripts/{filtnifti → filtnifti.py} +7 -2
- rapidtide/scripts/{filttc → filttc.py} +7 -2
- rapidtide/scripts/{fingerprint → fingerprint.py} +20 -16
- rapidtide/scripts/{fixtr → fixtr.py} +7 -2
- rapidtide/scripts/{gmscalc → gmscalc.py} +7 -2
- rapidtide/scripts/{happy → happy.py} +7 -2
- rapidtide/scripts/{happy2std → happy2std.py} +7 -2
- rapidtide/scripts/{happywarp → happywarp.py} +8 -4
- rapidtide/scripts/{histnifti → histnifti.py} +7 -2
- rapidtide/scripts/{histtc → histtc.py} +7 -2
- rapidtide/scripts/{glmfilt → linfitfilt.py} +7 -4
- rapidtide/scripts/{localflow → localflow.py} +7 -2
- rapidtide/scripts/{mergequality → mergequality.py} +7 -2
- rapidtide/scripts/{pairproc → pairproc.py} +7 -2
- rapidtide/scripts/{pairwisemergenifti → pairwisemergenifti.py} +7 -2
- rapidtide/scripts/{physiofreq → physiofreq.py} +7 -2
- rapidtide/scripts/{pixelcomp → pixelcomp.py} +7 -2
- rapidtide/scripts/{plethquality → plethquality.py} +7 -2
- rapidtide/scripts/{polyfitim → polyfitim.py} +7 -2
- rapidtide/scripts/{proj2flow → proj2flow.py} +7 -2
- rapidtide/scripts/{rankimage → rankimage.py} +7 -2
- rapidtide/scripts/{rapidtide → rapidtide.py} +7 -2
- rapidtide/scripts/{rapidtide2std → rapidtide2std.py} +7 -2
- rapidtide/scripts/{resamplenifti → resamplenifti.py} +7 -2
- rapidtide/scripts/{resampletc → resampletc.py} +7 -2
- rapidtide/scripts/retrolagtcs.py +28 -0
- rapidtide/scripts/retroregress.py +28 -0
- rapidtide/scripts/{roisummarize → roisummarize.py} +7 -2
- rapidtide/scripts/{runqualitycheck → runqualitycheck.py} +7 -2
- rapidtide/scripts/{showarbcorr → showarbcorr.py} +7 -2
- rapidtide/scripts/{showhist → showhist.py} +7 -2
- rapidtide/scripts/{showstxcorr → showstxcorr.py} +7 -2
- rapidtide/scripts/{showtc → showtc.py} +7 -2
- rapidtide/scripts/{showxcorr_legacy → showxcorr_legacy.py} +8 -8
- rapidtide/scripts/{showxcorrx → showxcorrx.py} +7 -2
- rapidtide/scripts/{showxy → showxy.py} +7 -2
- rapidtide/scripts/{simdata → simdata.py} +7 -2
- rapidtide/scripts/{spatialdecomp → spatialdecomp.py} +7 -2
- rapidtide/scripts/{spatialfit → spatialfit.py} +7 -2
- rapidtide/scripts/{spatialmi → spatialmi.py} +7 -2
- rapidtide/scripts/{spectrogram → spectrogram.py} +7 -2
- rapidtide/scripts/stupidramtricks.py +238 -0
- rapidtide/scripts/{synthASL → synthASL.py} +7 -2
- rapidtide/scripts/{tcfrom2col → tcfrom2col.py} +7 -2
- rapidtide/scripts/{tcfrom3col → tcfrom3col.py} +7 -2
- rapidtide/scripts/{temporaldecomp → temporaldecomp.py} +7 -2
- rapidtide/scripts/{testhrv → testhrv.py} +1 -1
- rapidtide/scripts/{threeD → threeD.py} +7 -2
- rapidtide/scripts/{tidepool → tidepool.py} +7 -2
- rapidtide/scripts/{variabilityizer → variabilityizer.py} +7 -2
- rapidtide/simFuncClasses.py +2113 -0
- rapidtide/simfuncfit.py +312 -108
- rapidtide/stats.py +579 -247
- rapidtide/tests/.coveragerc +27 -6
- rapidtide-2.9.5.data/scripts/fdica → rapidtide/tests/cleanposttest +4 -6
- rapidtide/tests/happycomp +9 -0
- rapidtide/tests/resethappytargets +1 -1
- rapidtide/tests/resetrapidtidetargets +1 -1
- rapidtide/tests/resettargets +1 -1
- rapidtide/tests/runlocaltest +3 -3
- rapidtide/tests/showkernels +1 -1
- rapidtide/tests/test_aliasedcorrelate.py +4 -4
- rapidtide/tests/test_aligntcs.py +1 -1
- rapidtide/tests/test_calcicc.py +1 -1
- rapidtide/tests/test_cleanregressor.py +184 -0
- rapidtide/tests/test_congrid.py +70 -81
- rapidtide/tests/test_correlate.py +1 -1
- rapidtide/tests/test_corrpass.py +4 -4
- rapidtide/tests/test_delayestimation.py +54 -59
- rapidtide/tests/test_dlfiltertorch.py +437 -0
- rapidtide/tests/test_doresample.py +2 -2
- rapidtide/tests/test_externaltools.py +69 -0
- rapidtide/tests/test_fastresampler.py +9 -5
- rapidtide/tests/test_filter.py +96 -57
- rapidtide/tests/test_findmaxlag.py +50 -19
- rapidtide/tests/test_fullrunhappy_v1.py +15 -10
- rapidtide/tests/test_fullrunhappy_v2.py +19 -13
- rapidtide/tests/test_fullrunhappy_v3.py +28 -13
- rapidtide/tests/test_fullrunhappy_v4.py +30 -11
- rapidtide/tests/test_fullrunhappy_v5.py +62 -0
- rapidtide/tests/test_fullrunrapidtide_v1.py +61 -7
- rapidtide/tests/test_fullrunrapidtide_v2.py +27 -15
- rapidtide/tests/test_fullrunrapidtide_v3.py +28 -8
- rapidtide/tests/test_fullrunrapidtide_v4.py +16 -8
- rapidtide/tests/test_fullrunrapidtide_v5.py +15 -6
- rapidtide/tests/test_fullrunrapidtide_v6.py +142 -0
- rapidtide/tests/test_fullrunrapidtide_v7.py +114 -0
- rapidtide/tests/test_fullrunrapidtide_v8.py +66 -0
- rapidtide/tests/test_getparsers.py +158 -0
- rapidtide/tests/test_io.py +59 -18
- rapidtide/tests/{test_glmpass.py → test_linfitfiltpass.py} +10 -10
- rapidtide/tests/test_mi.py +1 -1
- rapidtide/tests/test_miscmath.py +1 -1
- rapidtide/tests/test_motionregress.py +5 -5
- rapidtide/tests/test_nullcorr.py +6 -9
- rapidtide/tests/test_padvec.py +216 -0
- rapidtide/tests/test_parserfuncs.py +101 -0
- rapidtide/tests/test_phaseanalysis.py +1 -1
- rapidtide/tests/test_rapidtideparser.py +59 -53
- rapidtide/tests/test_refinedelay.py +296 -0
- rapidtide/tests/test_runmisc.py +5 -5
- rapidtide/tests/test_sharedmem.py +60 -0
- rapidtide/tests/test_simroundtrip.py +132 -0
- rapidtide/tests/test_simulate.py +1 -1
- rapidtide/tests/test_stcorrelate.py +4 -2
- rapidtide/tests/test_timeshift.py +2 -2
- rapidtide/tests/test_valtoindex.py +1 -1
- rapidtide/tests/test_zRapidtideDataset.py +5 -3
- rapidtide/tests/utils.py +10 -9
- rapidtide/tidepoolTemplate.py +88 -70
- rapidtide/tidepoolTemplate.ui +60 -46
- rapidtide/tidepoolTemplate_alt.py +88 -53
- rapidtide/tidepoolTemplate_alt.ui +62 -52
- rapidtide/tidepoolTemplate_alt_qt6.py +921 -0
- rapidtide/tidepoolTemplate_big.py +1125 -0
- rapidtide/tidepoolTemplate_big.ui +2386 -0
- rapidtide/tidepoolTemplate_big_qt6.py +1129 -0
- rapidtide/tidepoolTemplate_qt6.py +793 -0
- rapidtide/util.py +1389 -148
- rapidtide/voxelData.py +1048 -0
- rapidtide/wiener.py +138 -25
- rapidtide/wiener2.py +114 -8
- rapidtide/workflows/adjustoffset.py +107 -5
- rapidtide/workflows/aligntcs.py +86 -3
- rapidtide/workflows/applydlfilter.py +231 -89
- rapidtide/workflows/applyppgproc.py +540 -0
- rapidtide/workflows/atlasaverage.py +309 -48
- rapidtide/workflows/atlastool.py +130 -9
- rapidtide/workflows/calcSimFuncMap.py +490 -0
- rapidtide/workflows/calctexticc.py +202 -10
- rapidtide/workflows/ccorrica.py +123 -15
- rapidtide/workflows/cleanregressor.py +415 -0
- rapidtide/workflows/delayvar.py +1268 -0
- rapidtide/workflows/diffrois.py +84 -6
- rapidtide/workflows/endtidalproc.py +149 -9
- rapidtide/workflows/fdica.py +197 -17
- rapidtide/workflows/filtnifti.py +71 -4
- rapidtide/workflows/filttc.py +76 -5
- rapidtide/workflows/fitSimFuncMap.py +578 -0
- rapidtide/workflows/fixtr.py +74 -4
- rapidtide/workflows/gmscalc.py +116 -6
- rapidtide/workflows/happy.py +1242 -480
- rapidtide/workflows/happy2std.py +145 -13
- rapidtide/workflows/happy_parser.py +277 -59
- rapidtide/workflows/histnifti.py +120 -4
- rapidtide/workflows/histtc.py +85 -4
- rapidtide/workflows/{glmfilt.py → linfitfilt.py} +128 -14
- rapidtide/workflows/localflow.py +329 -29
- rapidtide/workflows/mergequality.py +80 -4
- rapidtide/workflows/niftidecomp.py +323 -19
- rapidtide/workflows/niftistats.py +178 -8
- rapidtide/workflows/pairproc.py +99 -5
- rapidtide/workflows/pairwisemergenifti.py +86 -3
- rapidtide/workflows/parser_funcs.py +1488 -56
- rapidtide/workflows/physiofreq.py +139 -12
- rapidtide/workflows/pixelcomp.py +211 -9
- rapidtide/workflows/plethquality.py +105 -23
- rapidtide/workflows/polyfitim.py +159 -19
- rapidtide/workflows/proj2flow.py +76 -3
- rapidtide/workflows/rankimage.py +115 -8
- rapidtide/workflows/rapidtide.py +1833 -1919
- rapidtide/workflows/rapidtide2std.py +101 -3
- rapidtide/workflows/rapidtide_parser.py +607 -372
- rapidtide/workflows/refineDelayMap.py +249 -0
- rapidtide/workflows/refineRegressor.py +1215 -0
- rapidtide/workflows/regressfrommaps.py +308 -0
- rapidtide/workflows/resamplenifti.py +86 -4
- rapidtide/workflows/resampletc.py +92 -4
- rapidtide/workflows/retrolagtcs.py +442 -0
- rapidtide/workflows/retroregress.py +1501 -0
- rapidtide/workflows/roisummarize.py +176 -7
- rapidtide/workflows/runqualitycheck.py +72 -7
- rapidtide/workflows/showarbcorr.py +172 -16
- rapidtide/workflows/showhist.py +87 -3
- rapidtide/workflows/showstxcorr.py +161 -4
- rapidtide/workflows/showtc.py +172 -10
- rapidtide/workflows/showxcorrx.py +250 -62
- rapidtide/workflows/showxy.py +186 -16
- rapidtide/workflows/simdata.py +418 -112
- rapidtide/workflows/spatialfit.py +83 -8
- rapidtide/workflows/spatialmi.py +252 -29
- rapidtide/workflows/spectrogram.py +306 -33
- rapidtide/workflows/synthASL.py +157 -6
- rapidtide/workflows/tcfrom2col.py +77 -3
- rapidtide/workflows/tcfrom3col.py +75 -3
- rapidtide/workflows/tidepool.py +3829 -666
- rapidtide/workflows/utils.py +45 -19
- rapidtide/workflows/utils_doc.py +293 -0
- rapidtide/workflows/variabilityizer.py +118 -5
- {rapidtide-2.9.5.dist-info → rapidtide-3.1.3.dist-info}/METADATA +30 -223
- rapidtide-3.1.3.dist-info/RECORD +393 -0
- {rapidtide-2.9.5.dist-info → rapidtide-3.1.3.dist-info}/WHEEL +1 -1
- rapidtide-3.1.3.dist-info/entry_points.txt +65 -0
- rapidtide-3.1.3.dist-info/top_level.txt +2 -0
- rapidtide/calcandfitcorrpairs.py +0 -262
- rapidtide/data/examples/src/testoutputsize +0 -45
- rapidtide/data/models/model_revised/model.h5 +0 -0
- rapidtide/data/models/model_serdar/model.h5 +0 -0
- rapidtide/data/models/model_serdar2/model.h5 +0 -0
- rapidtide/data/reference/ASPECTS_nlin_asym_09c_2mm.nii.gz +0 -0
- rapidtide/data/reference/ASPECTS_nlin_asym_09c_2mm_mask.nii.gz +0 -0
- rapidtide/data/reference/ATTbasedFlowTerritories_split_nlin_asym_09c_2mm.nii.gz +0 -0
- rapidtide/data/reference/ATTbasedFlowTerritories_split_nlin_asym_09c_2mm_mask.nii.gz +0 -0
- rapidtide/data/reference/HCP1200_binmask_2mm_2009c_asym.nii.gz +0 -0
- rapidtide/data/reference/HCP1200_lag_2mm_2009c_asym.nii.gz +0 -0
- rapidtide/data/reference/HCP1200_mask_2mm_2009c_asym.nii.gz +0 -0
- rapidtide/data/reference/HCP1200_negmask_2mm_2009c_asym.nii.gz +0 -0
- rapidtide/data/reference/HCP1200_sigma_2mm_2009c_asym.nii.gz +0 -0
- rapidtide/data/reference/HCP1200_strength_2mm_2009c_asym.nii.gz +0 -0
- rapidtide/glmpass.py +0 -434
- rapidtide/refine_factored.py +0 -641
- rapidtide/scripts/retroglm +0 -23
- rapidtide/workflows/glmfrommaps.py +0 -202
- rapidtide/workflows/retroglm.py +0 -643
- rapidtide-2.9.5.data/scripts/adjustoffset +0 -23
- rapidtide-2.9.5.data/scripts/aligntcs +0 -23
- rapidtide-2.9.5.data/scripts/applydlfilter +0 -23
- rapidtide-2.9.5.data/scripts/atlasaverage +0 -23
- rapidtide-2.9.5.data/scripts/atlastool +0 -23
- rapidtide-2.9.5.data/scripts/calcicc +0 -22
- rapidtide-2.9.5.data/scripts/calctexticc +0 -23
- rapidtide-2.9.5.data/scripts/calcttest +0 -22
- rapidtide-2.9.5.data/scripts/ccorrica +0 -23
- rapidtide-2.9.5.data/scripts/diffrois +0 -23
- rapidtide-2.9.5.data/scripts/endtidalproc +0 -23
- rapidtide-2.9.5.data/scripts/filtnifti +0 -23
- rapidtide-2.9.5.data/scripts/filttc +0 -23
- rapidtide-2.9.5.data/scripts/fingerprint +0 -593
- rapidtide-2.9.5.data/scripts/fixtr +0 -23
- rapidtide-2.9.5.data/scripts/glmfilt +0 -24
- rapidtide-2.9.5.data/scripts/gmscalc +0 -22
- rapidtide-2.9.5.data/scripts/happy +0 -25
- rapidtide-2.9.5.data/scripts/happy2std +0 -23
- rapidtide-2.9.5.data/scripts/happywarp +0 -350
- rapidtide-2.9.5.data/scripts/histnifti +0 -23
- rapidtide-2.9.5.data/scripts/histtc +0 -23
- rapidtide-2.9.5.data/scripts/localflow +0 -23
- rapidtide-2.9.5.data/scripts/mergequality +0 -23
- rapidtide-2.9.5.data/scripts/pairproc +0 -23
- rapidtide-2.9.5.data/scripts/pairwisemergenifti +0 -23
- rapidtide-2.9.5.data/scripts/physiofreq +0 -23
- rapidtide-2.9.5.data/scripts/pixelcomp +0 -23
- rapidtide-2.9.5.data/scripts/plethquality +0 -23
- rapidtide-2.9.5.data/scripts/polyfitim +0 -23
- rapidtide-2.9.5.data/scripts/proj2flow +0 -23
- rapidtide-2.9.5.data/scripts/rankimage +0 -23
- rapidtide-2.9.5.data/scripts/rapidtide +0 -23
- rapidtide-2.9.5.data/scripts/rapidtide2std +0 -23
- rapidtide-2.9.5.data/scripts/resamplenifti +0 -23
- rapidtide-2.9.5.data/scripts/resampletc +0 -23
- rapidtide-2.9.5.data/scripts/retroglm +0 -23
- rapidtide-2.9.5.data/scripts/roisummarize +0 -23
- rapidtide-2.9.5.data/scripts/runqualitycheck +0 -23
- rapidtide-2.9.5.data/scripts/showarbcorr +0 -23
- rapidtide-2.9.5.data/scripts/showhist +0 -23
- rapidtide-2.9.5.data/scripts/showstxcorr +0 -23
- rapidtide-2.9.5.data/scripts/showtc +0 -23
- rapidtide-2.9.5.data/scripts/showxcorr_legacy +0 -536
- rapidtide-2.9.5.data/scripts/showxcorrx +0 -23
- rapidtide-2.9.5.data/scripts/showxy +0 -23
- rapidtide-2.9.5.data/scripts/simdata +0 -23
- rapidtide-2.9.5.data/scripts/spatialdecomp +0 -23
- rapidtide-2.9.5.data/scripts/spatialfit +0 -23
- rapidtide-2.9.5.data/scripts/spatialmi +0 -23
- rapidtide-2.9.5.data/scripts/spectrogram +0 -23
- rapidtide-2.9.5.data/scripts/synthASL +0 -23
- rapidtide-2.9.5.data/scripts/tcfrom2col +0 -23
- rapidtide-2.9.5.data/scripts/tcfrom3col +0 -23
- rapidtide-2.9.5.data/scripts/temporaldecomp +0 -23
- rapidtide-2.9.5.data/scripts/threeD +0 -236
- rapidtide-2.9.5.data/scripts/tidepool +0 -23
- rapidtide-2.9.5.data/scripts/variabilityizer +0 -23
- rapidtide-2.9.5.dist-info/RECORD +0 -357
- rapidtide-2.9.5.dist-info/top_level.txt +0 -86
- {rapidtide-2.9.5.dist-info → rapidtide-3.1.3.dist-info/licenses}/LICENSE +0 -0
rapidtide/workflows/happy2std.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
# -*- coding: utf-8 -*-
|
|
3
3
|
#
|
|
4
|
-
# Copyright 2016-
|
|
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-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
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
|
|
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=
|
|
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="
|
|
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
|
-
"--
|
|
207
|
-
dest="
|
|
268
|
+
"--estweights",
|
|
269
|
+
dest="estweightsname",
|
|
208
270
|
action="store",
|
|
209
|
-
metavar="
|
|
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
|
-
"--
|
|
433
|
-
dest="
|
|
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
|
-
"--
|
|
440
|
-
dest="
|
|
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
|
|
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
|
-
|
|
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
|
|