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
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
#
|
|
4
|
+
# Copyright 2016-2025 Blaise Frederick
|
|
5
|
+
#
|
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
# you may not use this file except in compliance with the License.
|
|
8
|
+
# You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
# See the License for the specific language governing permissions and
|
|
16
|
+
# limitations under the License.
|
|
17
|
+
#
|
|
18
|
+
#
|
|
19
|
+
|
|
20
|
+
from typing import Any, Callable, Dict, List, Optional, Tuple, Union
|
|
21
|
+
|
|
22
|
+
import numpy as np
|
|
23
|
+
from numpy.typing import NDArray
|
|
24
|
+
|
|
25
|
+
import rapidtide.io as tide_io
|
|
26
|
+
import rapidtide.linfitfiltpass as tide_linfitfiltpass
|
|
27
|
+
import rapidtide.makelaggedtcs as tide_makelagged
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def regressfrommaps(
|
|
31
|
+
fmri_data_valid: Any,
|
|
32
|
+
validvoxels: Any,
|
|
33
|
+
initial_fmri_x: Any,
|
|
34
|
+
lagtimes: Any,
|
|
35
|
+
fitmask: Any,
|
|
36
|
+
genlagtc: Any,
|
|
37
|
+
mode: Any,
|
|
38
|
+
outputname: Any,
|
|
39
|
+
oversamptr: Any,
|
|
40
|
+
sLFOfitmean: Any,
|
|
41
|
+
rvalue: Any,
|
|
42
|
+
r2value: Any,
|
|
43
|
+
fitNorm: Any,
|
|
44
|
+
fitcoeff: Any,
|
|
45
|
+
movingsignal: Any,
|
|
46
|
+
lagtc: Any,
|
|
47
|
+
filtereddata: Any,
|
|
48
|
+
LGR: Any,
|
|
49
|
+
TimingLGR: Any,
|
|
50
|
+
regressfiltthreshval: Any,
|
|
51
|
+
saveminimumsLFOfiltfiles: Any,
|
|
52
|
+
nprocs_makelaggedtcs: int = 1,
|
|
53
|
+
nprocs_regressionfilt: int = 1,
|
|
54
|
+
regressderivs: int = 0,
|
|
55
|
+
chunksize: int = 50000,
|
|
56
|
+
showprogressbar: bool = True,
|
|
57
|
+
alwaysmultiproc: bool = False,
|
|
58
|
+
saveEVsandquit: bool = False,
|
|
59
|
+
coefficientsonly: bool = False,
|
|
60
|
+
timemask: Optional[NDArray] = None,
|
|
61
|
+
debug: bool = False,
|
|
62
|
+
) -> Tuple[int, NDArray, NDArray]:
|
|
63
|
+
"""
|
|
64
|
+
Perform regression analysis on fMRI data using lagged timecourses.
|
|
65
|
+
|
|
66
|
+
This function generates voxel-specific regressors from lagged timecourses,
|
|
67
|
+
applies filtering, and performs regression to estimate model coefficients.
|
|
68
|
+
It supports various modes including cross-validation regression (cvrmap),
|
|
69
|
+
and can optionally save intermediate results or quit early.
|
|
70
|
+
|
|
71
|
+
Parameters
|
|
72
|
+
----------
|
|
73
|
+
fmri_data_valid : array-like
|
|
74
|
+
Valid fMRI data to be processed.
|
|
75
|
+
validvoxels : array-like
|
|
76
|
+
Indices or mask of valid voxels.
|
|
77
|
+
initial_fmri_x : array-like
|
|
78
|
+
Initial fMRI timecourse (e.g., stimulus timing).
|
|
79
|
+
lagtimes : array-like
|
|
80
|
+
Time lags to be used for generating lagged regressors.
|
|
81
|
+
fitmask : array-like
|
|
82
|
+
Mask for selecting voxels to fit.
|
|
83
|
+
genlagtc : object
|
|
84
|
+
Generator for lagged timecourses.
|
|
85
|
+
mode : str
|
|
86
|
+
Processing mode (e.g., 'cvrmap').
|
|
87
|
+
outputname : str
|
|
88
|
+
Base name for output files.
|
|
89
|
+
oversamptr : float
|
|
90
|
+
Oversampling rate for timecourse generation.
|
|
91
|
+
sLFOfitmean : array-like
|
|
92
|
+
Mean of sLFO fit values.
|
|
93
|
+
rvalue : array-like
|
|
94
|
+
R-values from regression.
|
|
95
|
+
r2value : array-like
|
|
96
|
+
R-squared values from regression.
|
|
97
|
+
fitNorm : array-like
|
|
98
|
+
Normalization values for fit.
|
|
99
|
+
fitcoeff : array-like
|
|
100
|
+
Coefficients from the fit.
|
|
101
|
+
movingsignal : array-like
|
|
102
|
+
Moving signal components.
|
|
103
|
+
lagtc : array-like
|
|
104
|
+
Lagged timecourses.
|
|
105
|
+
filtereddata : array-like
|
|
106
|
+
Filtered fMRI data.
|
|
107
|
+
LGR : object, optional
|
|
108
|
+
Logger for general logging.
|
|
109
|
+
TimingLGR : object, optional
|
|
110
|
+
Logger for timing information.
|
|
111
|
+
regressfiltthreshval : float
|
|
112
|
+
Threshold for regression filtering.
|
|
113
|
+
saveminimumsLFOfiltfiles : bool
|
|
114
|
+
Whether to save noise removed timeseries.
|
|
115
|
+
nprocs_makelaggedtcs : int, optional
|
|
116
|
+
Number of processes for making lagged timecourses (default is 1).
|
|
117
|
+
nprocs_regressionfilt : int, optional
|
|
118
|
+
Number of processes for regression filtering (default is 1).
|
|
119
|
+
regressderivs : int, optional
|
|
120
|
+
Order of derivatives to include in regressors (default is 0).
|
|
121
|
+
chunksize : int, optional
|
|
122
|
+
Size of chunks for processing (default is 50000).
|
|
123
|
+
showprogressbar : bool, optional
|
|
124
|
+
Whether to show progress bar (default is True).
|
|
125
|
+
alwaysmultiproc : bool, optional
|
|
126
|
+
Force multiprocessing even for small tasks (default is False).
|
|
127
|
+
saveEVsandquit : bool, optional
|
|
128
|
+
Save EVs and quit early (default is False).
|
|
129
|
+
coefficientsonly : bool, optional
|
|
130
|
+
Return only coefficients (default is False).
|
|
131
|
+
timemask : NDArray, optional
|
|
132
|
+
Mask of timepoints to include in regression filtering.
|
|
133
|
+
debug : bool, optional
|
|
134
|
+
Enable debug output (default is False).
|
|
135
|
+
|
|
136
|
+
Returns
|
|
137
|
+
-------
|
|
138
|
+
tuple
|
|
139
|
+
If `saveEVsandquit` is True, returns (0, regressorset, evset).
|
|
140
|
+
Otherwise, returns (voxelsprocessed_regressionfilt, regressorset, evset).
|
|
141
|
+
|
|
142
|
+
Notes
|
|
143
|
+
-----
|
|
144
|
+
- The function modifies `fitcoeff` in-place when `mode == "cvrmap"` by multiplying by 100.
|
|
145
|
+
- The function uses multiprocessing if `alwaysmultiproc` is True or if `nprocs > 1`.
|
|
146
|
+
- Filtering is performed using `tide_linfitfiltpass.linfitfiltpass`.
|
|
147
|
+
|
|
148
|
+
Examples
|
|
149
|
+
--------
|
|
150
|
+
>>> regressfrommaps(
|
|
151
|
+
... fmri_data_valid=data,
|
|
152
|
+
... validvoxels=voxels,
|
|
153
|
+
... initial_fmri_x=stimulus,
|
|
154
|
+
... lagtimes=lags,
|
|
155
|
+
... fitmask=mask,
|
|
156
|
+
... genlagtc=gen,
|
|
157
|
+
... mode="cvrmap",
|
|
158
|
+
... outputname="output",
|
|
159
|
+
... oversamptr=2.0,
|
|
160
|
+
... sLFOfitmean=mean,
|
|
161
|
+
... rvalue=r_vals,
|
|
162
|
+
... r2value=r2_vals,
|
|
163
|
+
... fitNorm=norm,
|
|
164
|
+
... fitcoeff=coeffs,
|
|
165
|
+
... movingsignal=moving,
|
|
166
|
+
... lagtc=lagged_tc,
|
|
167
|
+
... filtereddata=filtered,
|
|
168
|
+
... LGR=logger,
|
|
169
|
+
... TimingLGR=timing_logger,
|
|
170
|
+
... regressfiltthreshval=0.5,
|
|
171
|
+
... saveminimumsLFOfiltfiles=True,
|
|
172
|
+
... nprocs_makelaggedtcs=4,
|
|
173
|
+
... nprocs_regressionfilt=2,
|
|
174
|
+
... regressderivs=2,
|
|
175
|
+
... chunksize=10000,
|
|
176
|
+
... showprogressbar=True,
|
|
177
|
+
... alwaysmultiproc=False,
|
|
178
|
+
... saveEVsandquit=False,
|
|
179
|
+
... coefficientsonly=False,
|
|
180
|
+
... debug=False,
|
|
181
|
+
... )
|
|
182
|
+
"""
|
|
183
|
+
if debug:
|
|
184
|
+
print("regressfrommaps: Starting")
|
|
185
|
+
print(f"\t{nprocs_makelaggedtcs=}")
|
|
186
|
+
print(f"\t{nprocs_regressionfilt=}")
|
|
187
|
+
print(f"\t{regressderivs=}")
|
|
188
|
+
print(f"\t{chunksize=}")
|
|
189
|
+
print(f"\t{showprogressbar=}")
|
|
190
|
+
print(f"\t{alwaysmultiproc=}")
|
|
191
|
+
print(f"\t{mode=}")
|
|
192
|
+
print(f"\t{outputname=}")
|
|
193
|
+
print(f"\t{oversamptr=}")
|
|
194
|
+
print(f"\t{regressfiltthreshval=}")
|
|
195
|
+
rt_floattype = np.float64
|
|
196
|
+
numvalidspatiallocs = np.shape(validvoxels)[0]
|
|
197
|
+
|
|
198
|
+
# generate the voxel specific regressors
|
|
199
|
+
if LGR is not None:
|
|
200
|
+
LGR.info("Start lagged timecourse creation")
|
|
201
|
+
if TimingLGR is not None:
|
|
202
|
+
TimingLGR.info("Start lagged timecourse creation")
|
|
203
|
+
|
|
204
|
+
voxelsprocessed_makelagged = tide_makelagged.makelaggedtcs(
|
|
205
|
+
genlagtc,
|
|
206
|
+
initial_fmri_x,
|
|
207
|
+
fitmask,
|
|
208
|
+
lagtimes,
|
|
209
|
+
lagtc,
|
|
210
|
+
LGR=LGR,
|
|
211
|
+
nprocs=nprocs_makelaggedtcs,
|
|
212
|
+
alwaysmultiproc=alwaysmultiproc,
|
|
213
|
+
showprogressbar=showprogressbar,
|
|
214
|
+
chunksize=chunksize,
|
|
215
|
+
rt_floattype=rt_floattype,
|
|
216
|
+
debug=debug,
|
|
217
|
+
)
|
|
218
|
+
if timemask is not None:
|
|
219
|
+
lagtc = lagtc * timemask[None, :]
|
|
220
|
+
|
|
221
|
+
if debug:
|
|
222
|
+
print(f"\t{lagtimes.shape=}")
|
|
223
|
+
threshmask = np.where(fitmask > 0, 1, 0)
|
|
224
|
+
print(f"\t{np.sum(threshmask)} nonzero mask voxels")
|
|
225
|
+
print(f"\tafter makelaggedtcs: shifted {voxelsprocessed_makelagged} timecourses")
|
|
226
|
+
if LGR is not None:
|
|
227
|
+
LGR.info("End lagged timecourse creation")
|
|
228
|
+
if TimingLGR is not None:
|
|
229
|
+
TimingLGR.info(
|
|
230
|
+
"Lagged timecourse creation end",
|
|
231
|
+
{
|
|
232
|
+
"message2": voxelsprocessed_makelagged,
|
|
233
|
+
"message3": "voxels",
|
|
234
|
+
},
|
|
235
|
+
)
|
|
236
|
+
|
|
237
|
+
if regressderivs > 0:
|
|
238
|
+
if debug:
|
|
239
|
+
print(f"adding derivatives up to order {regressderivs} prior to regression")
|
|
240
|
+
regressorset = tide_linfitfiltpass.makevoxelspecificderivs(lagtc, regressderivs)
|
|
241
|
+
baseev = (genlagtc.yfromx(initial_fmri_x)).astype(rt_floattype)
|
|
242
|
+
evset = tide_linfitfiltpass.makevoxelspecificderivs(
|
|
243
|
+
baseev.reshape((1, -1)), regressderivs
|
|
244
|
+
).reshape((-1, 2))
|
|
245
|
+
else:
|
|
246
|
+
if debug:
|
|
247
|
+
print(f"using raw lagged regressors for regression")
|
|
248
|
+
regressorset = lagtc
|
|
249
|
+
evset = (genlagtc.yfromx(initial_fmri_x)).astype(rt_floattype)
|
|
250
|
+
if debug:
|
|
251
|
+
print(f"{regressorset.shape=}")
|
|
252
|
+
|
|
253
|
+
if saveEVsandquit:
|
|
254
|
+
return 0, regressorset, evset
|
|
255
|
+
|
|
256
|
+
# now do the filtering
|
|
257
|
+
if LGR is not None:
|
|
258
|
+
LGR.info("Start filtering operation")
|
|
259
|
+
if TimingLGR is not None:
|
|
260
|
+
TimingLGR.info("Start filtering operation")
|
|
261
|
+
|
|
262
|
+
voxelsprocessed_regressionfilt = tide_linfitfiltpass.linfitfiltpass(
|
|
263
|
+
numvalidspatiallocs,
|
|
264
|
+
fmri_data_valid,
|
|
265
|
+
regressfiltthreshval,
|
|
266
|
+
regressorset,
|
|
267
|
+
sLFOfitmean,
|
|
268
|
+
rvalue,
|
|
269
|
+
r2value,
|
|
270
|
+
fitcoeff,
|
|
271
|
+
fitNorm,
|
|
272
|
+
movingsignal,
|
|
273
|
+
filtereddata,
|
|
274
|
+
coefficientsonly=coefficientsonly,
|
|
275
|
+
nprocs=nprocs_regressionfilt,
|
|
276
|
+
alwaysmultiproc=alwaysmultiproc,
|
|
277
|
+
showprogressbar=showprogressbar,
|
|
278
|
+
verbose=(LGR is not None),
|
|
279
|
+
chunksize=chunksize,
|
|
280
|
+
rt_floattype=rt_floattype,
|
|
281
|
+
debug=debug,
|
|
282
|
+
)
|
|
283
|
+
|
|
284
|
+
if mode == "cvrmap":
|
|
285
|
+
# if we are doing a cvr map, multiply the fitcoeff by 100, so we are in percent
|
|
286
|
+
fitcoeff *= 100.0
|
|
287
|
+
|
|
288
|
+
# determine what was removed
|
|
289
|
+
if not coefficientsonly:
|
|
290
|
+
removeddata = fmri_data_valid - filtereddata
|
|
291
|
+
noiseremoved = np.var(removeddata, axis=0)
|
|
292
|
+
if saveminimumsLFOfiltfiles:
|
|
293
|
+
tide_io.writebidstsv(
|
|
294
|
+
f"{outputname}_desc-lfofilterNoiseRemoved_timeseries",
|
|
295
|
+
noiseremoved,
|
|
296
|
+
1.0 / oversamptr,
|
|
297
|
+
starttime=0.0,
|
|
298
|
+
columns=[f"removedbyglm"],
|
|
299
|
+
extraheaderinfo={
|
|
300
|
+
"Description": "Variance over space of data removed by the sLFO filter at each timepoint"
|
|
301
|
+
},
|
|
302
|
+
append=False,
|
|
303
|
+
)
|
|
304
|
+
|
|
305
|
+
if debug:
|
|
306
|
+
print("regressfrommaps: End\n\n")
|
|
307
|
+
|
|
308
|
+
return voxelsprocessed_regressionfilt, regressorset, evset
|
|
@@ -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.
|
|
@@ -30,6 +30,10 @@ with warnings.catch_warnings():
|
|
|
30
30
|
else:
|
|
31
31
|
pyfftwpresent = True
|
|
32
32
|
|
|
33
|
+
from argparse import Namespace
|
|
34
|
+
from typing import Any, Callable, Dict, List, Optional, Tuple, Union
|
|
35
|
+
|
|
36
|
+
from numpy.typing import NDArray
|
|
33
37
|
from scipy import fftpack
|
|
34
38
|
|
|
35
39
|
import rapidtide.io as tide_io
|
|
@@ -40,9 +44,37 @@ if pyfftwpresent:
|
|
|
40
44
|
pyfftw.interfaces.cache.enable()
|
|
41
45
|
|
|
42
46
|
|
|
43
|
-
def _get_parser():
|
|
47
|
+
def _get_parser() -> Any:
|
|
44
48
|
"""
|
|
45
|
-
Argument parser for resamplenifti
|
|
49
|
+
Argument parser for resamplenifti.
|
|
50
|
+
|
|
51
|
+
Creates and configures an argument parser for the resamplenifti command-line tool
|
|
52
|
+
that resamples NIfTI files to a different temporal resolution (TR).
|
|
53
|
+
|
|
54
|
+
Returns
|
|
55
|
+
-------
|
|
56
|
+
argparse.ArgumentParser
|
|
57
|
+
Configured argument parser object with all required and optional arguments
|
|
58
|
+
for the resamplenifti tool.
|
|
59
|
+
|
|
60
|
+
Notes
|
|
61
|
+
-----
|
|
62
|
+
The returned parser includes the following positional arguments:
|
|
63
|
+
- inputfile: Path to the input NIfTI file
|
|
64
|
+
- outputfile: Path to the output NIfTI file
|
|
65
|
+
- outputtr: Target temporal resolution in seconds
|
|
66
|
+
|
|
67
|
+
And the following optional arguments:
|
|
68
|
+
- --noantialias: Disable antialiasing filter (enabled by default)
|
|
69
|
+
- --normalize: Normalize data and save as UINT16 (disabled by default)
|
|
70
|
+
- --debug: Print debugging information (disabled by default)
|
|
71
|
+
|
|
72
|
+
Examples
|
|
73
|
+
--------
|
|
74
|
+
>>> parser = _get_parser()
|
|
75
|
+
>>> args = parser.parse_args(['input.nii', 'output.nii', '2.0'])
|
|
76
|
+
>>> print(args.inputfile)
|
|
77
|
+
'input.nii'
|
|
46
78
|
"""
|
|
47
79
|
parser = argparse.ArgumentParser(
|
|
48
80
|
prog="resamplenifti",
|
|
@@ -78,7 +110,57 @@ def _get_parser():
|
|
|
78
110
|
return parser
|
|
79
111
|
|
|
80
112
|
|
|
81
|
-
def resamplenifti(args):
|
|
113
|
+
def resamplenifti(args: Any) -> None:
|
|
114
|
+
"""
|
|
115
|
+
Resample a 4D NIfTI file to a specified temporal resolution.
|
|
116
|
+
|
|
117
|
+
This function reads a 4D NIfTI file, resamples its time series data to a
|
|
118
|
+
new temporal resolution specified by `args.outputtr`, and saves the
|
|
119
|
+
resampled data to a new NIfTI file. The resampling is performed using
|
|
120
|
+
spline interpolation, and optional antialiasing is applied based on the
|
|
121
|
+
input and output temporal resolutions.
|
|
122
|
+
|
|
123
|
+
Parameters
|
|
124
|
+
----------
|
|
125
|
+
args : argparse.Namespace
|
|
126
|
+
An object containing the following attributes:
|
|
127
|
+
- inputfile : str
|
|
128
|
+
Path to the input NIfTI file.
|
|
129
|
+
- outputfile : str
|
|
130
|
+
Path to the output NIfTI file.
|
|
131
|
+
- outputtr : float
|
|
132
|
+
Desired output temporal resolution (TR) in seconds.
|
|
133
|
+
- antialias : bool, optional
|
|
134
|
+
Whether to apply antialiasing during resampling. Default is True.
|
|
135
|
+
- debug : bool, optional
|
|
136
|
+
If True, print debugging information. Default is False.
|
|
137
|
+
|
|
138
|
+
Returns
|
|
139
|
+
-------
|
|
140
|
+
None
|
|
141
|
+
This function does not return a value but saves the resampled NIfTI
|
|
142
|
+
file to the specified output path.
|
|
143
|
+
|
|
144
|
+
Notes
|
|
145
|
+
-----
|
|
146
|
+
- If the input TR is greater than the output TR (i.e., upsampling), antialiasing
|
|
147
|
+
is automatically disabled.
|
|
148
|
+
- The function processes each voxel individually, which may be time-consuming
|
|
149
|
+
for large datasets.
|
|
150
|
+
- The output NIfTI header is updated to reflect the new temporal resolution.
|
|
151
|
+
|
|
152
|
+
Examples
|
|
153
|
+
--------
|
|
154
|
+
>>> import argparse
|
|
155
|
+
>>> args = argparse.Namespace(
|
|
156
|
+
... inputfile='input.nii.gz',
|
|
157
|
+
... outputfile='output.nii.gz',
|
|
158
|
+
... outputtr=1.0,
|
|
159
|
+
... antialias=True,
|
|
160
|
+
... debug=False
|
|
161
|
+
... )
|
|
162
|
+
>>> resamplenifti(args)
|
|
163
|
+
"""
|
|
82
164
|
# get the input TR
|
|
83
165
|
inputtr, numinputtrs = tide_io.fmritimeinfo(args.inputfile)
|
|
84
166
|
if args.debug:
|
|
@@ -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.
|
|
@@ -17,18 +17,49 @@
|
|
|
17
17
|
#
|
|
18
18
|
#
|
|
19
19
|
import argparse
|
|
20
|
+
from argparse import Namespace
|
|
21
|
+
from typing import Any, Callable, Dict, List, Optional, Tuple, Union
|
|
20
22
|
|
|
21
23
|
import matplotlib.pyplot as plt
|
|
22
24
|
import numpy as np
|
|
25
|
+
from numpy.typing import NDArray
|
|
23
26
|
|
|
24
27
|
import rapidtide.io as tide_io
|
|
25
28
|
import rapidtide.resample as tide_resample
|
|
26
29
|
import rapidtide.workflows.parser_funcs as pf
|
|
27
30
|
|
|
28
31
|
|
|
29
|
-
def _get_parser():
|
|
32
|
+
def _get_parser() -> Any:
|
|
30
33
|
"""
|
|
31
|
-
Argument parser for resamp1tc
|
|
34
|
+
Argument parser for resamp1tc.
|
|
35
|
+
|
|
36
|
+
This function constructs and returns an `argparse.ArgumentParser` object configured
|
|
37
|
+
for parsing command-line arguments for the `resamp1tc` utility. It defines required
|
|
38
|
+
and optional arguments needed to resample a timeseries file.
|
|
39
|
+
|
|
40
|
+
Returns
|
|
41
|
+
-------
|
|
42
|
+
argparse.ArgumentParser
|
|
43
|
+
Configured argument parser for the resamp1tc utility.
|
|
44
|
+
|
|
45
|
+
Notes
|
|
46
|
+
-----
|
|
47
|
+
The parser includes the following required arguments:
|
|
48
|
+
|
|
49
|
+
- ``inputfile``: Path to the input timeseries file.
|
|
50
|
+
- ``insamplerate``: Input sample rate in Hz.
|
|
51
|
+
- ``outputfile``: Path to the output resampled file.
|
|
52
|
+
- ``outsamplerate``: Output sample rate in Hz.
|
|
53
|
+
|
|
54
|
+
Optional arguments include:
|
|
55
|
+
|
|
56
|
+
- ``--nodisplay``: Do not display data.
|
|
57
|
+
- ``--noantialias``: Disable antialiasing.
|
|
58
|
+
|
|
59
|
+
Examples
|
|
60
|
+
--------
|
|
61
|
+
>>> parser = _get_parser()
|
|
62
|
+
>>> args = parser.parse_args()
|
|
32
63
|
"""
|
|
33
64
|
parser = argparse.ArgumentParser(
|
|
34
65
|
prog="resampletc",
|
|
@@ -91,7 +122,64 @@ def _get_parser():
|
|
|
91
122
|
return parser
|
|
92
123
|
|
|
93
124
|
|
|
94
|
-
def resampletc(args):
|
|
125
|
+
def resampletc(args: Any) -> None:
|
|
126
|
+
"""
|
|
127
|
+
Resample a time series signal from an input file to a specified output sampling rate.
|
|
128
|
+
|
|
129
|
+
This function reads a time series from a text file, resamples it to a new sampling rate,
|
|
130
|
+
and writes the resampled data to an output file. Optionally, it displays the original
|
|
131
|
+
and resampled signals for visual comparison.
|
|
132
|
+
|
|
133
|
+
Parameters
|
|
134
|
+
----------
|
|
135
|
+
args : Any
|
|
136
|
+
An object containing the following attributes:
|
|
137
|
+
- `inputfile` : str
|
|
138
|
+
Path to the input text file containing the time series data.
|
|
139
|
+
- `outputfile` : str
|
|
140
|
+
Path to the output text file where resampled data will be written.
|
|
141
|
+
- `insamplerate` : float
|
|
142
|
+
Input sampling rate (Hz) of the data in the input file.
|
|
143
|
+
- `outsamplerate` : float
|
|
144
|
+
Desired output sampling rate (Hz) for the resampled data.
|
|
145
|
+
- `antialias` : bool
|
|
146
|
+
Whether to apply anti-aliasing during resampling.
|
|
147
|
+
- `display` : bool
|
|
148
|
+
If True, plots the original and resampled signals.
|
|
149
|
+
- `starttime` : float, optional
|
|
150
|
+
Start time for the output signal. If None, uses the start time from input.
|
|
151
|
+
- `endtime` : float, optional
|
|
152
|
+
End time for the output signal. If None, uses the end time from input.
|
|
153
|
+
|
|
154
|
+
Returns
|
|
155
|
+
-------
|
|
156
|
+
None
|
|
157
|
+
This function does not return a value. It writes the resampled data to a file
|
|
158
|
+
and optionally displays a plot.
|
|
159
|
+
|
|
160
|
+
Notes
|
|
161
|
+
-----
|
|
162
|
+
- The input file is expected to contain a single column of time series data.
|
|
163
|
+
- If the sampling rate specified in the input file does not match `args.insamplerate`,
|
|
164
|
+
a warning is printed.
|
|
165
|
+
- The function uses `tide_resample.arbresample` for resampling with configurable
|
|
166
|
+
anti-aliasing.
|
|
167
|
+
- If `args.display` is True, the original and resampled signals are plotted
|
|
168
|
+
with the original in black and the resampled in red.
|
|
169
|
+
|
|
170
|
+
Examples
|
|
171
|
+
--------
|
|
172
|
+
>>> import argparse
|
|
173
|
+
>>> args = argparse.Namespace(
|
|
174
|
+
... inputfile='input.txt',
|
|
175
|
+
... outputfile='output.txt',
|
|
176
|
+
... insamplerate=10.0,
|
|
177
|
+
... outsamplerate=5.0,
|
|
178
|
+
... antialias=True,
|
|
179
|
+
... display=False
|
|
180
|
+
... )
|
|
181
|
+
>>> resampletc(args)
|
|
182
|
+
"""
|
|
95
183
|
intimestep = 1.0 / args.insamplerate
|
|
96
184
|
outtimestep = 1.0 / args.outsamplerate
|
|
97
185
|
(
|