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