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/diffrois.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.
|
|
@@ -18,18 +18,46 @@
|
|
|
18
18
|
#
|
|
19
19
|
import argparse
|
|
20
20
|
import copy
|
|
21
|
+
from argparse import Namespace
|
|
22
|
+
from typing import Any, Callable, Dict, List, Optional, Tuple, Union
|
|
21
23
|
|
|
22
24
|
import nibabel as nib
|
|
23
25
|
import numpy as np
|
|
24
26
|
import pandas as pd
|
|
27
|
+
from numpy.typing import NDArray
|
|
25
28
|
|
|
26
29
|
import rapidtide.io as tide_io
|
|
27
30
|
import rapidtide.workflows.parser_funcs as pf
|
|
28
31
|
|
|
29
32
|
|
|
30
|
-
def _get_parser():
|
|
33
|
+
def _get_parser() -> Any:
|
|
31
34
|
"""
|
|
32
|
-
Argument parser for diffrois
|
|
35
|
+
Argument parser for diffrois.
|
|
36
|
+
|
|
37
|
+
This function creates and configures an argument parser for the diffrois command-line tool.
|
|
38
|
+
It defines required and optional arguments needed to process ROI (Region of Interest) data
|
|
39
|
+
from a CSV file and generate difference matrices.
|
|
40
|
+
|
|
41
|
+
Returns
|
|
42
|
+
-------
|
|
43
|
+
argparse.ArgumentParser
|
|
44
|
+
Configured argument parser object with defined arguments for diffrois.
|
|
45
|
+
|
|
46
|
+
Notes
|
|
47
|
+
-----
|
|
48
|
+
The parser is configured with:
|
|
49
|
+
- A required datafile argument (CSV input)
|
|
50
|
+
- A required outputroot argument (root name for output files)
|
|
51
|
+
- Optional keyfile argument to specify region label order
|
|
52
|
+
- Optional maxlines argument to limit processing to first N lines
|
|
53
|
+
- Optional debug flag for verbose output
|
|
54
|
+
|
|
55
|
+
Examples
|
|
56
|
+
--------
|
|
57
|
+
>>> parser = _get_parser()
|
|
58
|
+
>>> args = parser.parse_args(['data.csv', 'output_root'])
|
|
59
|
+
>>> print(args.datafile)
|
|
60
|
+
'data.csv'
|
|
33
61
|
"""
|
|
34
62
|
parser = argparse.ArgumentParser(
|
|
35
63
|
prog="diffrois",
|
|
@@ -77,7 +105,57 @@ def _get_parser():
|
|
|
77
105
|
return parser
|
|
78
106
|
|
|
79
107
|
|
|
80
|
-
def diffrois(args):
|
|
108
|
+
def diffrois(args: Any) -> None:
|
|
109
|
+
"""
|
|
110
|
+
Compute pairwise differences between regions in a CSV file and save results as NIfTI images.
|
|
111
|
+
|
|
112
|
+
This function reads region data from a CSV file, computes pairwise differences between
|
|
113
|
+
regions, and saves the results as NIfTI images. It also computes mean and standard
|
|
114
|
+
deviation maps of the differences and saves those as well. The function supports
|
|
115
|
+
optional masking of invalid (NaN) values and can limit the number of input lines
|
|
116
|
+
processed.
|
|
117
|
+
|
|
118
|
+
Parameters
|
|
119
|
+
----------
|
|
120
|
+
args : argparse.Namespace
|
|
121
|
+
An object containing the following attributes:
|
|
122
|
+
- datafile : str
|
|
123
|
+
Path to the input CSV file containing region data.
|
|
124
|
+
- keyfile : str, optional
|
|
125
|
+
Path to a file listing column keys in the CSV to use for processing.
|
|
126
|
+
- outputroot : str
|
|
127
|
+
Root name for output NIfTI files.
|
|
128
|
+
- maxlines : int, optional
|
|
129
|
+
Maximum number of lines to process from the input CSV.
|
|
130
|
+
- debug : bool
|
|
131
|
+
If True, print debug information during execution.
|
|
132
|
+
|
|
133
|
+
Returns
|
|
134
|
+
-------
|
|
135
|
+
None
|
|
136
|
+
This function does not return any value but saves multiple NIfTI files to disk.
|
|
137
|
+
|
|
138
|
+
Notes
|
|
139
|
+
-----
|
|
140
|
+
The function saves the following NIfTI files:
|
|
141
|
+
- `{outputroot}_diffs.nii.gz`: Pairwise differences between regions.
|
|
142
|
+
- `{outputroot}_mask.nii.gz`: Binary mask indicating valid (non-NaN) values.
|
|
143
|
+
- `{outputroot}_meandiffs.nii.gz`: Mean of differences for each region pair.
|
|
144
|
+
- `{outputroot}_stddiffs.nii.gz`: Standard deviation of differences for each region pair.
|
|
145
|
+
- `{outputroot}_demeaneddiffs.nii.gz`: Demeaned differences (difference minus mean).
|
|
146
|
+
|
|
147
|
+
Examples
|
|
148
|
+
--------
|
|
149
|
+
>>> import argparse
|
|
150
|
+
>>> args = argparse.Namespace(
|
|
151
|
+
... datafile='data.csv',
|
|
152
|
+
... keyfile='keys.txt',
|
|
153
|
+
... outputroot='output',
|
|
154
|
+
... maxlines=100,
|
|
155
|
+
... debug=False
|
|
156
|
+
... )
|
|
157
|
+
>>> diffrois(args)
|
|
158
|
+
"""
|
|
81
159
|
df = pd.read_csv(args.datafile)
|
|
82
160
|
|
|
83
161
|
theregions = np.array(df.columns[1:].values)
|
|
@@ -141,8 +219,8 @@ def diffrois(args):
|
|
|
141
219
|
numvox = numoutregions * numoutregions
|
|
142
220
|
thediffs_rs = thediffs.reshape((numvox, numlabels))
|
|
143
221
|
themask_rs = themask.reshape((numvox, numlabels))
|
|
144
|
-
themeandiffs_rs = thediffs_rs[:, 0]
|
|
145
|
-
thestddiffs_rs = thediffs_rs[:, 0]
|
|
222
|
+
themeandiffs_rs = np.zeros_like(thediffs_rs[:, 0])
|
|
223
|
+
thestddiffs_rs = np.zeros_like(thediffs_rs[:, 0])
|
|
146
224
|
for idx in range(numvox):
|
|
147
225
|
inputvec = thediffs_rs[idx, :]
|
|
148
226
|
inputmask = themask_rs[idx, :]
|
|
@@ -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.
|
|
@@ -19,19 +19,85 @@
|
|
|
19
19
|
import argparse
|
|
20
20
|
import bisect
|
|
21
21
|
import sys
|
|
22
|
+
from argparse import Namespace
|
|
23
|
+
from typing import Any, Callable, Dict, List, Optional, Tuple, Union
|
|
22
24
|
|
|
23
25
|
import numpy as np
|
|
26
|
+
from numpy.typing import NDArray
|
|
24
27
|
|
|
25
28
|
import rapidtide.fit as tide_fit
|
|
26
29
|
import rapidtide.io as tide_io
|
|
27
30
|
from rapidtide.workflows.parser_funcs import invert_float, is_float
|
|
28
31
|
|
|
29
32
|
|
|
30
|
-
def phase(mcv):
|
|
33
|
+
def phase(mcv: Any) -> None:
|
|
34
|
+
"""
|
|
35
|
+
Compute the phase angle of a complex number.
|
|
36
|
+
|
|
37
|
+
This function calculates the phase angle (also known as the argument) of a complex number
|
|
38
|
+
using the arctan2 function, which correctly handles all quadrants and special cases.
|
|
39
|
+
|
|
40
|
+
Parameters
|
|
41
|
+
----------
|
|
42
|
+
mcv : Any
|
|
43
|
+
A complex number or array of complex numbers for which to compute the phase angle.
|
|
44
|
+
Can be a scalar complex number or an array-like object containing complex numbers.
|
|
45
|
+
|
|
46
|
+
Returns
|
|
47
|
+
-------
|
|
48
|
+
ndarray or scalar
|
|
49
|
+
The phase angle in radians. The return type matches the input type, returning
|
|
50
|
+
a scalar for scalar input or an array for array input. The phase angle is
|
|
51
|
+
in the range [-π, π].
|
|
52
|
+
|
|
53
|
+
Notes
|
|
54
|
+
-----
|
|
55
|
+
This function uses `np.arctan2(mcv.imag, mcv.real)` which is preferred over
|
|
56
|
+
`np.arctan(mcv.imag/mcv.real)` because it correctly handles the quadrant
|
|
57
|
+
and avoids division by zero errors.
|
|
58
|
+
|
|
59
|
+
Examples
|
|
60
|
+
--------
|
|
61
|
+
>>> import numpy as np
|
|
62
|
+
>>> phase(1+1j)
|
|
63
|
+
0.7853981633974483
|
|
64
|
+
|
|
65
|
+
>>> phase(-1-1j)
|
|
66
|
+
-2.3561944901923448
|
|
67
|
+
|
|
68
|
+
>>> phase(np.array([1+1j, -1-1j]))
|
|
69
|
+
array([ 0.78539816, -2.35619449])
|
|
70
|
+
"""
|
|
31
71
|
return np.arctan2(mcv.imag, mcv.real)
|
|
32
72
|
|
|
33
73
|
|
|
34
|
-
def _get_parser():
|
|
74
|
+
def _get_parser() -> Any:
|
|
75
|
+
"""
|
|
76
|
+
Create and configure an argument parser for the endtidalproc command-line tool.
|
|
77
|
+
|
|
78
|
+
This function sets up an `argparse.ArgumentParser` with various options to process
|
|
79
|
+
a gas trace and generate an endtidal waveform. It supports input and output file
|
|
80
|
+
specifications, sample rate configuration, time range settings, threshold for
|
|
81
|
+
peak detection, and debugging options.
|
|
82
|
+
|
|
83
|
+
Returns
|
|
84
|
+
-------
|
|
85
|
+
argparse.ArgumentParser
|
|
86
|
+
Configured argument parser object with all required and optional arguments.
|
|
87
|
+
|
|
88
|
+
Notes
|
|
89
|
+
-----
|
|
90
|
+
The parser is designed for use with the `endtidalproc` program and includes
|
|
91
|
+
mutually exclusive group for specifying sample rate either as frequency or
|
|
92
|
+
time step. The default sample rate is 1 Hz.
|
|
93
|
+
|
|
94
|
+
Examples
|
|
95
|
+
--------
|
|
96
|
+
>>> parser = _get_parser()
|
|
97
|
+
>>> args = parser.parse_args(['input.txt', 'output.txt'])
|
|
98
|
+
>>> print(args.infilename)
|
|
99
|
+
'input.txt'
|
|
100
|
+
"""
|
|
35
101
|
# get the command line parameters
|
|
36
102
|
parser = argparse.ArgumentParser(
|
|
37
103
|
prog="endtidalproc",
|
|
@@ -90,7 +156,7 @@ def _get_parser():
|
|
|
90
156
|
dest="thresh",
|
|
91
157
|
metavar="PCT",
|
|
92
158
|
type=float,
|
|
93
|
-
help="Amount of fall (or rise) needed, in percent, to recognize a peak (or
|
|
159
|
+
help="Amount of fall (or rise) needed, in percent, to recognize a peak (or through).",
|
|
94
160
|
default=1.0,
|
|
95
161
|
)
|
|
96
162
|
parser.add_argument(
|
|
@@ -104,7 +170,45 @@ def _get_parser():
|
|
|
104
170
|
return parser
|
|
105
171
|
|
|
106
172
|
|
|
107
|
-
def process_args():
|
|
173
|
+
def process_args(args: Any) -> None:
|
|
174
|
+
"""
|
|
175
|
+
Process and validate input arguments for audio processing.
|
|
176
|
+
|
|
177
|
+
This function sets default values for samplerate if not provided and
|
|
178
|
+
optionally prints debug information when debug mode is enabled.
|
|
179
|
+
|
|
180
|
+
Parameters
|
|
181
|
+
----------
|
|
182
|
+
args : Any
|
|
183
|
+
An object containing audio processing arguments. Expected to have
|
|
184
|
+
attributes 'samplerate' and 'debug'. The 'samplerate' attribute
|
|
185
|
+
will be set to 1.0 if None, and 'debug' controls whether to print
|
|
186
|
+
argument information.
|
|
187
|
+
|
|
188
|
+
Returns
|
|
189
|
+
-------
|
|
190
|
+
None
|
|
191
|
+
This function modifies the args object in-place and does not return
|
|
192
|
+
a value.
|
|
193
|
+
|
|
194
|
+
Notes
|
|
195
|
+
-----
|
|
196
|
+
- The function modifies the input args object in-place
|
|
197
|
+
- Default samplerate is set to 1.0 when None is provided
|
|
198
|
+
- Debug output is printed only when args.debug is True
|
|
199
|
+
|
|
200
|
+
Examples
|
|
201
|
+
--------
|
|
202
|
+
>>> class Args:
|
|
203
|
+
... def __init__(self):
|
|
204
|
+
... self.samplerate = None
|
|
205
|
+
... self.debug = True
|
|
206
|
+
...
|
|
207
|
+
>>> args = Args()
|
|
208
|
+
>>> process_args(args)
|
|
209
|
+
>>> print(args.samplerate)
|
|
210
|
+
1.0
|
|
211
|
+
"""
|
|
108
212
|
if args.samplerate is None:
|
|
109
213
|
args.samplerate = 1.0
|
|
110
214
|
|
|
@@ -116,8 +220,44 @@ def process_args():
|
|
|
116
220
|
return args
|
|
117
221
|
|
|
118
222
|
|
|
119
|
-
def endtidalproc(
|
|
120
|
-
|
|
223
|
+
def endtidalproc() -> None:
|
|
224
|
+
"""
|
|
225
|
+
Process tidal data to detect peaks and interpolate values for output.
|
|
226
|
+
|
|
227
|
+
This function reads a time series from an input file, detects either maximum or
|
|
228
|
+
minimum peaks depending on whether the data is treated as oxygen or CO2, and
|
|
229
|
+
interpolates the peak values over the full time range. The resulting interpolated
|
|
230
|
+
data is written to an output file.
|
|
231
|
+
|
|
232
|
+
Parameters
|
|
233
|
+
----------
|
|
234
|
+
None
|
|
235
|
+
This function does not take any direct parameters. It reads from command-line
|
|
236
|
+
arguments and system input files.
|
|
237
|
+
|
|
238
|
+
Returns
|
|
239
|
+
-------
|
|
240
|
+
None
|
|
241
|
+
This function does not return any value. It performs file I/O operations
|
|
242
|
+
and writes results to disk.
|
|
243
|
+
|
|
244
|
+
Notes
|
|
245
|
+
-----
|
|
246
|
+
- The function uses `bisect` to find the start and end indices in the time vector
|
|
247
|
+
based on the provided start and end times.
|
|
248
|
+
- Peak detection is performed using `tide_fit.peakdetect`, which requires a
|
|
249
|
+
`lookahead` parameter and a `delta` threshold.
|
|
250
|
+
- If `isoxygen` is True, the function detects minimum peaks; otherwise, it detects
|
|
251
|
+
maximum peaks.
|
|
252
|
+
- The interpolation is linear between detected peaks.
|
|
253
|
+
|
|
254
|
+
Examples
|
|
255
|
+
--------
|
|
256
|
+
>>> endtidalproc()
|
|
257
|
+
Fitting trace as CO2
|
|
258
|
+
endtime must be greater then starttime;
|
|
259
|
+
"""
|
|
260
|
+
args = process_args(_get_parser().parse_args(sys.argv[1:]))
|
|
121
261
|
|
|
122
262
|
if args.isoxygen:
|
|
123
263
|
print("Fitting trace as oxygen")
|
|
@@ -138,7 +278,7 @@ def endtidalproc(args):
|
|
|
138
278
|
args.thestarttime = xvec[thestartpoint]
|
|
139
279
|
args.theendtime = xvec[theendpoint]
|
|
140
280
|
|
|
141
|
-
# set parameters - maxtime is the longest to look ahead for a peak (or
|
|
281
|
+
# set parameters - maxtime is the longest to look ahead for a peak (or through) in seconds
|
|
142
282
|
# lookahead should be '(samples / period) / f' where '4 >= f >= 1.25' might be a good value
|
|
143
283
|
maxtime = 1.0
|
|
144
284
|
f = 2.0
|
|
@@ -166,4 +306,4 @@ def endtidalproc(args):
|
|
|
166
306
|
|
|
167
307
|
|
|
168
308
|
if __name__ == "__main__":
|
|
169
|
-
|
|
309
|
+
endtidalproc()
|
rapidtide/workflows/fdica.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.
|
|
@@ -40,22 +40,126 @@ if pyfftwpresent:
|
|
|
40
40
|
pyfftw.interfaces.cache.enable()
|
|
41
41
|
|
|
42
42
|
|
|
43
|
+
from argparse import Namespace
|
|
44
|
+
from typing import Any, Callable, Dict, List, Optional, Tuple, Union
|
|
45
|
+
|
|
46
|
+
from numpy.typing import NDArray
|
|
47
|
+
|
|
43
48
|
import rapidtide.filter as tide_filt
|
|
44
49
|
import rapidtide.io as tide_io
|
|
45
50
|
from rapidtide.workflows.parser_funcs import is_valid_file
|
|
46
51
|
|
|
47
52
|
|
|
48
|
-
def P2R(radii, angles):
|
|
53
|
+
def P2R(radii: Any, angles: Any) -> None:
|
|
54
|
+
"""
|
|
55
|
+
Convert polar coordinates to complex numbers.
|
|
56
|
+
|
|
57
|
+
Convert polar coordinates (radii, angles) to complex numbers using the formula
|
|
58
|
+
z = r * exp(i * θ), where r is the radius and θ is the angle in radians.
|
|
59
|
+
|
|
60
|
+
Parameters
|
|
61
|
+
----------
|
|
62
|
+
radii : Any
|
|
63
|
+
The radial coordinates (magnitude) of the points in polar coordinates.
|
|
64
|
+
Should be a numeric type or array-like object.
|
|
65
|
+
angles : Any
|
|
66
|
+
The angular coordinates (in radians) of the points in polar coordinates.
|
|
67
|
+
Should be a numeric type or array-like object.
|
|
68
|
+
|
|
69
|
+
Returns
|
|
70
|
+
-------
|
|
71
|
+
complex
|
|
72
|
+
Complex numbers in the form z = r * exp(i * θ).
|
|
73
|
+
Returns None if the input parameters are not compatible.
|
|
74
|
+
|
|
75
|
+
Notes
|
|
76
|
+
-----
|
|
77
|
+
This function assumes that the angles are provided in radians.
|
|
78
|
+
The function uses NumPy's exponential function for complex number computation.
|
|
79
|
+
|
|
80
|
+
Examples
|
|
81
|
+
--------
|
|
82
|
+
>>> import numpy as np
|
|
83
|
+
>>> P2R(1, 0)
|
|
84
|
+
(1+0j)
|
|
85
|
+
|
|
86
|
+
>>> P2R(2, np.pi/2)
|
|
87
|
+
(1.2246467991473532e-16+2j)
|
|
88
|
+
|
|
89
|
+
>>> P2R([1, 2, 3], [0, np.pi/2, np.pi])
|
|
90
|
+
[1.+0.j 2.+0.j 3.+0.j]
|
|
91
|
+
"""
|
|
49
92
|
return radii * np.exp(1j * angles)
|
|
50
93
|
|
|
51
94
|
|
|
52
|
-
def R2P(x):
|
|
95
|
+
def R2P(x: Any) -> None:
|
|
96
|
+
"""
|
|
97
|
+
Convert rectangular coordinates to polar coordinates.
|
|
98
|
+
|
|
99
|
+
This function converts complex numbers from rectangular (Cartesian) coordinates
|
|
100
|
+
to polar coordinates, returning the magnitude (absolute value) and phase angle.
|
|
101
|
+
|
|
102
|
+
Parameters
|
|
103
|
+
----------
|
|
104
|
+
x : Any
|
|
105
|
+
Input array-like object containing complex numbers or real numbers.
|
|
106
|
+
Can be a scalar, list, tuple, or numpy array.
|
|
107
|
+
|
|
108
|
+
Returns
|
|
109
|
+
-------
|
|
110
|
+
tuple
|
|
111
|
+
A tuple containing two numpy arrays:
|
|
112
|
+
- First array: absolute values (magnitudes) of input elements
|
|
113
|
+
- Second array: angles (in radians) of input elements
|
|
114
|
+
|
|
115
|
+
Notes
|
|
116
|
+
-----
|
|
117
|
+
For real numbers, the angle is 0 for positive values and π for negative values.
|
|
118
|
+
For complex numbers, the angle is computed using numpy's angle function.
|
|
119
|
+
|
|
120
|
+
Examples
|
|
121
|
+
--------
|
|
122
|
+
>>> import numpy as np
|
|
123
|
+
>>> R2P([1+1j, -1-1j, 2])
|
|
124
|
+
(array([1.41421356, 1.41421356, 2. ]), array([0.78539816, -2.35619449, 0. ]))
|
|
125
|
+
|
|
126
|
+
>>> R2P(np.array([3+4j, 1-1j]))
|
|
127
|
+
(array([5., 1.41421356]), array([0.92729522, -0.78539816]))
|
|
128
|
+
"""
|
|
53
129
|
return np.absolute(x), np.angle(x)
|
|
54
130
|
|
|
55
131
|
|
|
56
|
-
def _get_parser():
|
|
132
|
+
def _get_parser() -> Any:
|
|
57
133
|
"""
|
|
58
|
-
Argument parser for fdica
|
|
134
|
+
Argument parser for fdica.
|
|
135
|
+
|
|
136
|
+
This function constructs and returns an `argparse.ArgumentParser` object configured
|
|
137
|
+
for parsing command-line arguments for the `fdica` tool. The parser is designed to
|
|
138
|
+
handle inputs for fitting a spatial template to 3D or 4D NIFTI files, with options
|
|
139
|
+
for spatial filtering, PCA, and ICA decomposition.
|
|
140
|
+
|
|
141
|
+
Returns
|
|
142
|
+
-------
|
|
143
|
+
argparse.ArgumentParser
|
|
144
|
+
Configured argument parser for the fdica tool.
|
|
145
|
+
|
|
146
|
+
Notes
|
|
147
|
+
-----
|
|
148
|
+
The parser expects three required positional arguments:
|
|
149
|
+
- `datafile`: The 3D or 4D NIFTI file to fit.
|
|
150
|
+
- `datamask`: A 3D NIFTI file mask (must match `datafile`).
|
|
151
|
+
- `outputroot`: Root name for output files.
|
|
152
|
+
|
|
153
|
+
Optional arguments include:
|
|
154
|
+
- `--spatialfilt`: Apply Gaussian spatial filtering.
|
|
155
|
+
- `--pcacomponents`: Number of PCA components for phase fitting.
|
|
156
|
+
- `--icacomponents`: Number of ICA components for decomposition.
|
|
157
|
+
- `--debug`: Enable debugging output.
|
|
158
|
+
|
|
159
|
+
Examples
|
|
160
|
+
--------
|
|
161
|
+
>>> parser = _get_parser()
|
|
162
|
+
>>> args = parser.parse_args()
|
|
59
163
|
"""
|
|
60
164
|
parser = argparse.ArgumentParser(
|
|
61
165
|
prog="fdica",
|
|
@@ -117,16 +221,65 @@ def _get_parser():
|
|
|
117
221
|
|
|
118
222
|
|
|
119
223
|
def fdica(
|
|
120
|
-
datafile,
|
|
121
|
-
datamask,
|
|
122
|
-
outputroot,
|
|
123
|
-
gausssigma=0.0,
|
|
124
|
-
pcacomponents="mle",
|
|
125
|
-
icacomponents=None,
|
|
126
|
-
lowerfreq=0.009,
|
|
127
|
-
upperfreq=0.15,
|
|
128
|
-
debug=False,
|
|
129
|
-
):
|
|
224
|
+
datafile: Any,
|
|
225
|
+
datamask: Any,
|
|
226
|
+
outputroot: Any,
|
|
227
|
+
gausssigma: float = 0.0,
|
|
228
|
+
pcacomponents: str = "mle",
|
|
229
|
+
icacomponents: Optional[Any] = None,
|
|
230
|
+
lowerfreq: float = 0.009,
|
|
231
|
+
upperfreq: float = 0.15,
|
|
232
|
+
debug: bool = False,
|
|
233
|
+
) -> None:
|
|
234
|
+
"""
|
|
235
|
+
Perform frequency-domain independent component analysis (FDICA) on fMRI data.
|
|
236
|
+
|
|
237
|
+
This function reads fMRI data and a corresponding mask, applies spatial filtering if
|
|
238
|
+
requested, performs FFT, and conducts PCA and ICA on the frequency-domain data to
|
|
239
|
+
decompose the signal into independent components. It saves various intermediate and
|
|
240
|
+
final outputs including magnitude, phase, PCA components, and ICA components.
|
|
241
|
+
|
|
242
|
+
Parameters
|
|
243
|
+
----------
|
|
244
|
+
datafile : Any
|
|
245
|
+
Path to the input NIfTI fMRI data file.
|
|
246
|
+
datamask : Any
|
|
247
|
+
Path to the NIfTI mask file defining the region of interest.
|
|
248
|
+
outputroot : Any
|
|
249
|
+
Root name for output NIfTI files.
|
|
250
|
+
gausssigma : float, optional
|
|
251
|
+
Standard deviation for Gaussian spatial smoothing. If less than 0, automatically
|
|
252
|
+
calculated as mean of spatial dimensions divided by 2. Default is 0.0.
|
|
253
|
+
pcacomponents : str or int, optional
|
|
254
|
+
Number of PCA components to retain. If "mle", uses the minimum description
|
|
255
|
+
length criterion. Default is "mle".
|
|
256
|
+
icacomponents : int, optional
|
|
257
|
+
Number of ICA components to extract. If None, defaults to the number of PCA
|
|
258
|
+
components. Default is None.
|
|
259
|
+
lowerfreq : float, optional
|
|
260
|
+
Lower frequency bound in Hz. Default is 0.009.
|
|
261
|
+
upperfreq : float, optional
|
|
262
|
+
Upper frequency bound in Hz. Default is 0.15.
|
|
263
|
+
debug : bool, optional
|
|
264
|
+
If True, enables debug output. Default is False.
|
|
265
|
+
|
|
266
|
+
Returns
|
|
267
|
+
-------
|
|
268
|
+
None
|
|
269
|
+
The function writes multiple NIfTI files and text files to disk but does not return anything.
|
|
270
|
+
|
|
271
|
+
Notes
|
|
272
|
+
-----
|
|
273
|
+
- The function assumes the input data is in NIfTI format and the mask is 3D.
|
|
274
|
+
- Frequency trimming is performed based on the specified lower and upper bounds.
|
|
275
|
+
- PCA and ICA are applied to the phase data after detrending.
|
|
276
|
+
- Intermediate outputs include magnitude, phase, PCA components, and ICA components.
|
|
277
|
+
- The final reconstructed signal is saved as a NIfTI file.
|
|
278
|
+
|
|
279
|
+
Examples
|
|
280
|
+
--------
|
|
281
|
+
>>> fdica('fmri_data.nii', 'mask.nii', 'output', gausssigma=2.0, lowerfreq=0.01, upperfreq=0.1)
|
|
282
|
+
"""
|
|
130
283
|
# read in data
|
|
131
284
|
print("reading in data arrays")
|
|
132
285
|
(
|
|
@@ -269,7 +422,7 @@ def fdica(
|
|
|
269
422
|
# remove mean and linear component
|
|
270
423
|
phasemeans = np.zeros((numfitvoxels), dtype="float")
|
|
271
424
|
phaseslopes = np.zeros((numfitvoxels), dtype="float")
|
|
272
|
-
detrendedphasedata = phasedata
|
|
425
|
+
detrendedphasedata = np.zeros_like(phasedata)
|
|
273
426
|
print(f"shape of detrendedphasedata: {detrendedphasedata.shape}")
|
|
274
427
|
X = np.linspace(lowerbin * hzperpoint, upperbin * hzperpoint, trimmedsize)
|
|
275
428
|
for i in range(numfitvoxels):
|
|
@@ -422,7 +575,34 @@ def fdica(
|
|
|
422
575
|
)
|
|
423
576
|
|
|
424
577
|
|
|
425
|
-
def main():
|
|
578
|
+
def main() -> None:
|
|
579
|
+
"""
|
|
580
|
+
Main function to execute the FDICA (Fast Independent Component Analysis) pipeline.
|
|
581
|
+
|
|
582
|
+
This function parses command line arguments, prints them for debugging purposes,
|
|
583
|
+
and executes the FDICA algorithm with the specified parameters.
|
|
584
|
+
|
|
585
|
+
Parameters
|
|
586
|
+
----------
|
|
587
|
+
None
|
|
588
|
+
|
|
589
|
+
Returns
|
|
590
|
+
-------
|
|
591
|
+
None
|
|
592
|
+
This function does not return any value but executes the FDICA pipeline
|
|
593
|
+
and produces output files based on the provided arguments.
|
|
594
|
+
|
|
595
|
+
Notes
|
|
596
|
+
-----
|
|
597
|
+
The function uses a parser to handle command line arguments and includes
|
|
598
|
+
error handling for argument parsing. If parsing fails, the help message is
|
|
599
|
+
displayed before raising the SystemExit exception.
|
|
600
|
+
|
|
601
|
+
Examples
|
|
602
|
+
--------
|
|
603
|
+
>>> main()
|
|
604
|
+
# This would execute the FDICA pipeline with arguments parsed from command line
|
|
605
|
+
"""
|
|
426
606
|
try:
|
|
427
607
|
args = _get_parser().parse_args()
|
|
428
608
|
except SystemExit:
|
rapidtide/workflows/filtnifti.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.
|
|
@@ -17,17 +17,40 @@
|
|
|
17
17
|
#
|
|
18
18
|
#
|
|
19
19
|
import argparse
|
|
20
|
+
from argparse import Namespace
|
|
21
|
+
from typing import Any, Callable, Dict, List, Optional, Tuple, Union
|
|
20
22
|
|
|
21
23
|
import numpy as np
|
|
24
|
+
from numpy.typing import NDArray
|
|
22
25
|
|
|
23
26
|
import rapidtide.filter as tide_filt
|
|
24
27
|
import rapidtide.io as tide_io
|
|
25
28
|
|
|
26
29
|
|
|
27
|
-
def _get_parser():
|
|
30
|
+
def _get_parser() -> Any:
|
|
28
31
|
"""
|
|
29
|
-
Argument parser for filtnifti
|
|
32
|
+
Argument parser for filtnifti.
|
|
30
33
|
|
|
34
|
+
Creates and configures an argument parser for the filtnifti command-line tool
|
|
35
|
+
that temporally filters NIFTI files.
|
|
36
|
+
|
|
37
|
+
Returns
|
|
38
|
+
-------
|
|
39
|
+
argparse.ArgumentParser
|
|
40
|
+
Configured argument parser object with required command-line arguments
|
|
41
|
+
|
|
42
|
+
Notes
|
|
43
|
+
-----
|
|
44
|
+
The parser expects four command-line arguments in the following order:
|
|
45
|
+
1. inputfilename - path to input NIFTI file
|
|
46
|
+
2. outputfilename - path to output NIFTI file
|
|
47
|
+
3. lowestfreq - low passband frequency limit in Hz (negative values disable HPF)
|
|
48
|
+
4. highestfreq - high passband frequency limit in Hz (negative values disable LPF)
|
|
49
|
+
|
|
50
|
+
Examples
|
|
51
|
+
--------
|
|
52
|
+
>>> parser = _get_parser()
|
|
53
|
+
>>> args = parser.parse_args(['input.nii', 'output.nii', '0.01', '0.1'])
|
|
31
54
|
"""
|
|
32
55
|
# get the command line parameters
|
|
33
56
|
parser = argparse.ArgumentParser(
|
|
@@ -50,7 +73,51 @@ def _get_parser():
|
|
|
50
73
|
return parser
|
|
51
74
|
|
|
52
75
|
|
|
53
|
-
def filtnifti(args):
|
|
76
|
+
def filtnifti(args: Any) -> None:
|
|
77
|
+
"""
|
|
78
|
+
Apply a frequency-domain filter to a 4D NIfTI file containing fMRI data.
|
|
79
|
+
|
|
80
|
+
This function reads an input NIfTI file, applies a bandpass or arbitrary frequency filter
|
|
81
|
+
to each voxel's time series, and saves the filtered data to a new NIfTI file. The filter
|
|
82
|
+
parameters are specified via the `args` object, which should contain attributes such as
|
|
83
|
+
`inputfilename`, `outputfilename`, `lowestfreq`, and `highestfreq`.
|
|
84
|
+
|
|
85
|
+
Parameters
|
|
86
|
+
----------
|
|
87
|
+
args : Any
|
|
88
|
+
An object containing the following attributes:
|
|
89
|
+
- inputfilename : str
|
|
90
|
+
Path to the input NIfTI file.
|
|
91
|
+
- outputfilename : str
|
|
92
|
+
Path to the output NIfTI file.
|
|
93
|
+
- lowestfreq : float
|
|
94
|
+
Lowest frequency for the filter. If negative, highpass filtering is disabled.
|
|
95
|
+
- highestfreq : float
|
|
96
|
+
Highest frequency for the filter. If negative, lowpass filtering is disabled.
|
|
97
|
+
|
|
98
|
+
Returns
|
|
99
|
+
-------
|
|
100
|
+
None
|
|
101
|
+
This function does not return a value but saves the filtered data to a NIfTI file.
|
|
102
|
+
|
|
103
|
+
Notes
|
|
104
|
+
-----
|
|
105
|
+
- The function uses a non-causal filter (`tide_filt.NoncausalFilter`) for filtering.
|
|
106
|
+
- The TR (repetition time) is read from the NIfTI header, and the sampling frequency
|
|
107
|
+
is computed as `Fs = 1 / TR`.
|
|
108
|
+
- Filtering is applied slice-by-slice to each voxel's time series.
|
|
109
|
+
- If `lowestfreq` or `highestfreq` is set to a negative value, the corresponding filter
|
|
110
|
+
is disabled.
|
|
111
|
+
|
|
112
|
+
Examples
|
|
113
|
+
--------
|
|
114
|
+
Assuming `args` is an object with the required attributes:
|
|
115
|
+
|
|
116
|
+
>>> filtnifti(args)
|
|
117
|
+
|
|
118
|
+
This will read the input NIfTI file, apply the specified filter, and save the result
|
|
119
|
+
to the output file.
|
|
120
|
+
"""
|
|
54
121
|
# get the input TR
|
|
55
122
|
inputtr_fromfile, numinputtrs = tide_io.fmritimeinfo(args.inputfilename)
|
|
56
123
|
print("input data: ", numinputtrs, " timepoints, tr = ", inputtr_fromfile)
|