rapidtide 2.9.6__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 +92 -42
- 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 +2 -2
- 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 +108 -92
- 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 +587 -1116
- rapidtide/io.py +2569 -468
- rapidtide/linfitfiltpass.py +784 -0
- rapidtide/makelaggedtcs.py +267 -97
- rapidtide/maskutil.py +555 -25
- rapidtide/miscmath.py +835 -144
- 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.6.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 +26 -14
- 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 +1785 -1858
- rapidtide/workflows/rapidtide2std.py +101 -3
- rapidtide/workflows/rapidtide_parser.py +590 -389
- 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.6.dist-info → rapidtide-3.1.3.dist-info}/METADATA +30 -223
- rapidtide-3.1.3.dist-info/RECORD +393 -0
- {rapidtide-2.9.6.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.6.data/scripts/adjustoffset +0 -23
- rapidtide-2.9.6.data/scripts/aligntcs +0 -23
- rapidtide-2.9.6.data/scripts/applydlfilter +0 -23
- rapidtide-2.9.6.data/scripts/atlasaverage +0 -23
- rapidtide-2.9.6.data/scripts/atlastool +0 -23
- rapidtide-2.9.6.data/scripts/calcicc +0 -22
- rapidtide-2.9.6.data/scripts/calctexticc +0 -23
- rapidtide-2.9.6.data/scripts/calcttest +0 -22
- rapidtide-2.9.6.data/scripts/ccorrica +0 -23
- rapidtide-2.9.6.data/scripts/diffrois +0 -23
- rapidtide-2.9.6.data/scripts/endtidalproc +0 -23
- rapidtide-2.9.6.data/scripts/filtnifti +0 -23
- rapidtide-2.9.6.data/scripts/filttc +0 -23
- rapidtide-2.9.6.data/scripts/fingerprint +0 -593
- rapidtide-2.9.6.data/scripts/fixtr +0 -23
- rapidtide-2.9.6.data/scripts/glmfilt +0 -24
- rapidtide-2.9.6.data/scripts/gmscalc +0 -22
- rapidtide-2.9.6.data/scripts/happy +0 -25
- rapidtide-2.9.6.data/scripts/happy2std +0 -23
- rapidtide-2.9.6.data/scripts/happywarp +0 -350
- rapidtide-2.9.6.data/scripts/histnifti +0 -23
- rapidtide-2.9.6.data/scripts/histtc +0 -23
- rapidtide-2.9.6.data/scripts/localflow +0 -23
- rapidtide-2.9.6.data/scripts/mergequality +0 -23
- rapidtide-2.9.6.data/scripts/pairproc +0 -23
- rapidtide-2.9.6.data/scripts/pairwisemergenifti +0 -23
- rapidtide-2.9.6.data/scripts/physiofreq +0 -23
- rapidtide-2.9.6.data/scripts/pixelcomp +0 -23
- rapidtide-2.9.6.data/scripts/plethquality +0 -23
- rapidtide-2.9.6.data/scripts/polyfitim +0 -23
- rapidtide-2.9.6.data/scripts/proj2flow +0 -23
- rapidtide-2.9.6.data/scripts/rankimage +0 -23
- rapidtide-2.9.6.data/scripts/rapidtide +0 -23
- rapidtide-2.9.6.data/scripts/rapidtide2std +0 -23
- rapidtide-2.9.6.data/scripts/resamplenifti +0 -23
- rapidtide-2.9.6.data/scripts/resampletc +0 -23
- rapidtide-2.9.6.data/scripts/retroglm +0 -23
- rapidtide-2.9.6.data/scripts/roisummarize +0 -23
- rapidtide-2.9.6.data/scripts/runqualitycheck +0 -23
- rapidtide-2.9.6.data/scripts/showarbcorr +0 -23
- rapidtide-2.9.6.data/scripts/showhist +0 -23
- rapidtide-2.9.6.data/scripts/showstxcorr +0 -23
- rapidtide-2.9.6.data/scripts/showtc +0 -23
- rapidtide-2.9.6.data/scripts/showxcorr_legacy +0 -536
- rapidtide-2.9.6.data/scripts/showxcorrx +0 -23
- rapidtide-2.9.6.data/scripts/showxy +0 -23
- rapidtide-2.9.6.data/scripts/simdata +0 -23
- rapidtide-2.9.6.data/scripts/spatialdecomp +0 -23
- rapidtide-2.9.6.data/scripts/spatialfit +0 -23
- rapidtide-2.9.6.data/scripts/spatialmi +0 -23
- rapidtide-2.9.6.data/scripts/spectrogram +0 -23
- rapidtide-2.9.6.data/scripts/synthASL +0 -23
- rapidtide-2.9.6.data/scripts/tcfrom2col +0 -23
- rapidtide-2.9.6.data/scripts/tcfrom3col +0 -23
- rapidtide-2.9.6.data/scripts/temporaldecomp +0 -23
- rapidtide-2.9.6.data/scripts/threeD +0 -236
- rapidtide-2.9.6.data/scripts/tidepool +0 -23
- rapidtide-2.9.6.data/scripts/variabilityizer +0 -23
- rapidtide-2.9.6.dist-info/RECORD +0 -359
- rapidtide-2.9.6.dist-info/top_level.txt +0 -86
- {rapidtide-2.9.6.dist-info → rapidtide-3.1.3.dist-info/licenses}/LICENSE +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
# -*- coding: utf-8 -*-
|
|
3
3
|
#
|
|
4
|
-
# Copyright 2016-
|
|
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,22 +19,65 @@
|
|
|
19
19
|
import argparse
|
|
20
20
|
import os
|
|
21
21
|
import sys
|
|
22
|
+
from typing import Any
|
|
22
23
|
|
|
23
|
-
import
|
|
24
|
-
|
|
25
|
-
import rapidtide.correlate as tide_corr
|
|
26
|
-
import rapidtide.dlfilter as tide_dlfilt
|
|
27
|
-
import rapidtide.filter as tide_filt
|
|
28
|
-
import rapidtide.fit as tide_fit
|
|
24
|
+
import rapidtide.dlfiltertorch as tide_dlfilt
|
|
25
|
+
import rapidtide.happy_supportfuncs as happy_support
|
|
29
26
|
import rapidtide.io as tide_io
|
|
30
27
|
import rapidtide.miscmath as tide_math
|
|
31
|
-
import rapidtide.util as tide_util
|
|
32
28
|
import rapidtide.workflows.parser_funcs as pf
|
|
33
29
|
|
|
30
|
+
DEFAULT_MODEL = "model_cnn_pytorch"
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def findfirst(searchlist: list, available: list, debug: bool = False) -> tuple[int, str | None]:
|
|
34
|
+
if debug:
|
|
35
|
+
print(f"FINDFIRST: {searchlist=}, {available=}")
|
|
36
|
+
try:
|
|
37
|
+
index = available.index(searchlist[0])
|
|
38
|
+
return index, available[index]
|
|
39
|
+
except ValueError:
|
|
40
|
+
if len(searchlist) > 1:
|
|
41
|
+
if debug:
|
|
42
|
+
print("FINDFIRST: calling again")
|
|
43
|
+
findfirst(searchlist[1:], available, debug=debug)
|
|
44
|
+
else:
|
|
45
|
+
if debug:
|
|
46
|
+
print("FINDFIRST: giving up")
|
|
47
|
+
return -1, None
|
|
48
|
+
|
|
34
49
|
|
|
35
|
-
def _get_parser():
|
|
50
|
+
def _get_parser() -> Any:
|
|
36
51
|
"""
|
|
37
|
-
Argument parser for
|
|
52
|
+
Argument parser for applydlfilter.
|
|
53
|
+
|
|
54
|
+
This function creates and configures an argument parser for the `applydlfilter`
|
|
55
|
+
command-line tool, which applies a deep learning filter to a timecourse.
|
|
56
|
+
|
|
57
|
+
Returns
|
|
58
|
+
-------
|
|
59
|
+
argparse.ArgumentParser
|
|
60
|
+
Configured argument parser object with defined arguments for `applydlfilter`.
|
|
61
|
+
|
|
62
|
+
Notes
|
|
63
|
+
-----
|
|
64
|
+
The parser includes the following required and optional arguments:
|
|
65
|
+
|
|
66
|
+
- ``infilename``: Input text file (or list of files) containing timecourse data.
|
|
67
|
+
- ``outfilename``: Output text file (or list of files) to save filtered data.
|
|
68
|
+
- ``--model``: Model root name to use for filtering (default: ``model_revised``).
|
|
69
|
+
- ``--filesarelists``: Flag indicating input file contains lists of filenames.
|
|
70
|
+
- ``--nodisplay``: Flag to disable plotting (for non-interactive use).
|
|
71
|
+
- ``--verbose``: Flag to enable verbose output.
|
|
72
|
+
|
|
73
|
+
Examples
|
|
74
|
+
--------
|
|
75
|
+
>>> parser = _get_parser()
|
|
76
|
+
>>> args = parser.parse_args(['input.txt', 'output.txt', '--model', 'custom_model'])
|
|
77
|
+
>>> print(args.infilename)
|
|
78
|
+
'input.txt'
|
|
79
|
+
>>> print(args.model)
|
|
80
|
+
'custom_model'
|
|
38
81
|
"""
|
|
39
82
|
parser = argparse.ArgumentParser(
|
|
40
83
|
prog="applydlfilter",
|
|
@@ -60,8 +103,8 @@ def _get_parser():
|
|
|
60
103
|
action="store",
|
|
61
104
|
metavar="MODELROOT",
|
|
62
105
|
type=str,
|
|
63
|
-
help=("Use model named MODELROOT (default is
|
|
64
|
-
default=
|
|
106
|
+
help=(f"Use model named MODELROOT (default is {DEFAULT_MODEL})."),
|
|
107
|
+
default=DEFAULT_MODEL,
|
|
65
108
|
)
|
|
66
109
|
parser.add_argument(
|
|
67
110
|
"--filesarelists",
|
|
@@ -87,66 +130,62 @@ def _get_parser():
|
|
|
87
130
|
return parser
|
|
88
131
|
|
|
89
132
|
|
|
90
|
-
def
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
maxval,
|
|
117
|
-
maxsigma,
|
|
118
|
-
maskval,
|
|
119
|
-
failreason,
|
|
120
|
-
peakstart,
|
|
121
|
-
peakend,
|
|
122
|
-
) = tide_fit.findmaxlag_gauss(
|
|
123
|
-
xcorr_x[trimstart:trimend],
|
|
124
|
-
thexcorr[trimstart:trimend],
|
|
125
|
-
-searchrange,
|
|
126
|
-
searchrange,
|
|
127
|
-
3.0,
|
|
128
|
-
refine=refine,
|
|
129
|
-
zerooutbadfit=False,
|
|
130
|
-
useguess=False,
|
|
131
|
-
fastgauss=False,
|
|
132
|
-
displayplots=False,
|
|
133
|
-
)
|
|
134
|
-
if debug:
|
|
135
|
-
print(
|
|
136
|
-
"CORRELATION: maxindex, maxdelay, maxval, maxsigma, maskval, failreason, peakstart, peakend:",
|
|
137
|
-
maxindex,
|
|
138
|
-
maxdelay,
|
|
139
|
-
maxval,
|
|
140
|
-
maxsigma,
|
|
141
|
-
maskval,
|
|
142
|
-
failreason,
|
|
143
|
-
peakstart,
|
|
144
|
-
peakend,
|
|
145
|
-
)
|
|
146
|
-
return maxval, maxdelay, failreason
|
|
133
|
+
def applydlfilter(args: Any) -> None:
|
|
134
|
+
"""
|
|
135
|
+
Apply a deep learning filter to fMRI data files.
|
|
136
|
+
|
|
137
|
+
This function reads fMRI data from input files, applies a deep learning filter
|
|
138
|
+
to denoise the data, and writes the filtered output to specified files. It supports
|
|
139
|
+
processing multiple files either from lists or a single file, and optionally displays
|
|
140
|
+
the filtering results using matplotlib.
|
|
141
|
+
|
|
142
|
+
Parameters
|
|
143
|
+
----------
|
|
144
|
+
args : Any
|
|
145
|
+
An object containing the following attributes:
|
|
146
|
+
- `infilename` : str
|
|
147
|
+
Path to the input file or list of input files.
|
|
148
|
+
- `outfilename` : str
|
|
149
|
+
Path to the output file or list of output files.
|
|
150
|
+
- `filesarelists` : bool
|
|
151
|
+
If True, `infilename` and `outfilename` are treated as paths to text files
|
|
152
|
+
containing lists of input and output filenames, respectively.
|
|
153
|
+
- `model` : str
|
|
154
|
+
Path to the deep learning model to be used for filtering.
|
|
155
|
+
- `display` : bool
|
|
156
|
+
If True, displays the original and filtered data using matplotlib.
|
|
157
|
+
- `verbose` : bool
|
|
158
|
+
If True, prints verbose output during processing.
|
|
147
159
|
|
|
160
|
+
Returns
|
|
161
|
+
-------
|
|
162
|
+
None
|
|
163
|
+
This function does not return any value. It writes filtered data to files
|
|
164
|
+
and optionally displays plots.
|
|
148
165
|
|
|
149
|
-
|
|
166
|
+
Notes
|
|
167
|
+
-----
|
|
168
|
+
- The function assumes that the input data has a sampling rate of 25.0 Hz.
|
|
169
|
+
- If `filesarelists` is True, the input and output filenames are read from
|
|
170
|
+
text files, where each line contains a single filename.
|
|
171
|
+
- The function checks for matching list lengths when processing multiple files.
|
|
172
|
+
- If a bad points file is specified, it is read and used during filtering.
|
|
173
|
+
- The deep learning model is loaded from a predefined model path within the
|
|
174
|
+
`rapidtide` package.
|
|
175
|
+
|
|
176
|
+
Examples
|
|
177
|
+
--------
|
|
178
|
+
>>> import argparse
|
|
179
|
+
>>> args = argparse.Namespace(
|
|
180
|
+
... infilename="input.txt",
|
|
181
|
+
... outfilename="output.txt",
|
|
182
|
+
... filesarelists=False,
|
|
183
|
+
... model="model.h5",
|
|
184
|
+
... display=False,
|
|
185
|
+
... verbose=True
|
|
186
|
+
... )
|
|
187
|
+
>>> applydlfilter(args)
|
|
188
|
+
"""
|
|
150
189
|
if args.display:
|
|
151
190
|
import matplotlib as mpl
|
|
152
191
|
|
|
@@ -184,41 +223,144 @@ def applydlfilter(args):
|
|
|
184
223
|
)
|
|
185
224
|
thedlfilter = tide_dlfilt.DeepLearningFilter(modelpath=modelpath)
|
|
186
225
|
thedlfilter.loadmodel(args.model)
|
|
187
|
-
model = thedlfilter.model
|
|
188
|
-
window_size = thedlfilter.window_size
|
|
189
226
|
usebadpts = thedlfilter.usebadpts
|
|
227
|
+
showpleth = True
|
|
190
228
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
229
|
+
# set the list of column names
|
|
230
|
+
datanames = [
|
|
231
|
+
"cardiacfromfmri_25.0Hz",
|
|
232
|
+
"normcardiac_25.0Hz",
|
|
233
|
+
"normcardiacfromfmri_dlfiltered_25.0Hz",
|
|
234
|
+
"cardiacfromfmri_dlfiltered_25.0Hz",
|
|
235
|
+
]
|
|
236
|
+
badptsnames = ["badpts"]
|
|
237
|
+
plethnames = [
|
|
238
|
+
"pleth",
|
|
239
|
+
"normpleth",
|
|
240
|
+
"plethenv",
|
|
241
|
+
"pleth_dlfiltered",
|
|
242
|
+
]
|
|
202
243
|
|
|
203
244
|
for idx, infilename in enumerate(infilenamelist):
|
|
204
245
|
# read in the data
|
|
205
246
|
if args.verbose:
|
|
206
247
|
print("reading in", infilename)
|
|
207
|
-
|
|
248
|
+
(
|
|
249
|
+
thesamplerate,
|
|
250
|
+
thestarttime,
|
|
251
|
+
thecolumns,
|
|
252
|
+
thedata,
|
|
253
|
+
compressed,
|
|
254
|
+
columnsource,
|
|
255
|
+
extrainfo,
|
|
256
|
+
) = tide_io.readbidstsv(infilename, debug=args.verbose)
|
|
208
257
|
|
|
258
|
+
# check to see what we have in the file
|
|
259
|
+
if args.verbose:
|
|
260
|
+
print(f"File columns: {thecolumns}")
|
|
261
|
+
|
|
262
|
+
# get the data
|
|
263
|
+
datacol, dataname = findfirst(datanames, thecolumns, debug=args.verbose)
|
|
264
|
+
if dataname is None:
|
|
265
|
+
print("file contains no usable raw data")
|
|
266
|
+
sys.exit()
|
|
267
|
+
if args.verbose:
|
|
268
|
+
print(f"Data column: {datacol}, ({dataname})")
|
|
269
|
+
fmridata = thedata[datacol, :]
|
|
270
|
+
|
|
271
|
+
# get the badpts
|
|
272
|
+
badptscol, badptsname = findfirst(badptsnames, thecolumns, debug=args.verbose)
|
|
273
|
+
if usebadpts and (badptsname is None):
|
|
274
|
+
print("file contains no usable badpts data")
|
|
275
|
+
sys.exit()
|
|
276
|
+
if args.verbose:
|
|
277
|
+
print(f"Bad points column: {badptscol}, ({badptsname})")
|
|
278
|
+
if badptsname is None:
|
|
279
|
+
badpts = None
|
|
280
|
+
else:
|
|
281
|
+
badpts = thedata[badptscol, :]
|
|
282
|
+
|
|
283
|
+
# get the pleth (if it is there)
|
|
284
|
+
plethcol, plethname = findfirst(plethnames, thecolumns, debug=args.verbose)
|
|
285
|
+
if args.verbose:
|
|
286
|
+
print(f"Pleth column: {plethcol}, ({plethname})")
|
|
287
|
+
print(f"{thedata.shape=}")
|
|
288
|
+
if plethname is None:
|
|
289
|
+
plethwave = None
|
|
290
|
+
else:
|
|
291
|
+
plethwave = thedata[plethcol, :]
|
|
292
|
+
|
|
293
|
+
if args.verbose:
|
|
294
|
+
print("data is read")
|
|
295
|
+
if thesamplerate != 25.0:
|
|
296
|
+
print("sampling rate", thesamplerate)
|
|
297
|
+
sys.exit()
|
|
209
298
|
if args.verbose:
|
|
210
299
|
print("filtering...")
|
|
211
300
|
predicteddata = thedlfilter.apply(fmridata, badpts=badpts)
|
|
301
|
+
if args.verbose:
|
|
302
|
+
print("done...")
|
|
303
|
+
|
|
304
|
+
# performance metrics
|
|
305
|
+
extradict = {}
|
|
306
|
+
maxval, maxdelay, failreason = happy_support.checkcardmatch(
|
|
307
|
+
fmridata, predicteddata, 25.0, debug=False
|
|
308
|
+
)
|
|
309
|
+
print(infilename, "max correlation of raw data to dl filtered data:", maxval)
|
|
310
|
+
extradict["corr_rawtodlfiltered"] = maxval + 0.0
|
|
311
|
+
|
|
312
|
+
if plethwave is not None:
|
|
313
|
+
maxval, maxdelay, failreason = happy_support.checkcardmatch(
|
|
314
|
+
fmridata, plethwave, 25.0, debug=False
|
|
315
|
+
)
|
|
316
|
+
print(infilename, "max correlation of raw data to target plethysmogram:", maxval)
|
|
317
|
+
extradict["corr_rawtopleth"] = maxval + 0.0
|
|
318
|
+
|
|
319
|
+
maxval, maxdelay, failreason = happy_support.checkcardmatch(
|
|
320
|
+
predicteddata, plethwave, 25.0, debug=False
|
|
321
|
+
)
|
|
322
|
+
print(
|
|
323
|
+
infilename, "max correlation of dl filtered data to target plethysmogram:", maxval
|
|
324
|
+
)
|
|
325
|
+
extradict["corr_dlfilteredtopleth"] = maxval + 0.0
|
|
212
326
|
|
|
213
327
|
if args.verbose:
|
|
214
328
|
print("writing to", outfilenamelist[idx])
|
|
215
|
-
tide_io.
|
|
329
|
+
tide_io.writebidstsv(
|
|
330
|
+
outfilenamelist[idx],
|
|
331
|
+
predicteddata,
|
|
332
|
+
25.0,
|
|
333
|
+
extraheaderinfo=extradict,
|
|
334
|
+
columns=["filtered_signal"],
|
|
335
|
+
debug=args.verbose,
|
|
336
|
+
)
|
|
216
337
|
|
|
217
|
-
|
|
218
|
-
|
|
338
|
+
# normalize
|
|
339
|
+
fmridata = tide_math.stdnormalize(fmridata)
|
|
340
|
+
predicteddata = tide_math.stdnormalize(predicteddata)
|
|
219
341
|
|
|
342
|
+
spacing = 3.0
|
|
343
|
+
numwaves = 2
|
|
344
|
+
if badpts is not None:
|
|
345
|
+
numwaves += 1
|
|
346
|
+
if plethwave is not None:
|
|
347
|
+
numwaves += 1
|
|
348
|
+
offset = (numwaves - 1) * spacing
|
|
220
349
|
if args.display:
|
|
221
350
|
plt.figure()
|
|
222
|
-
|
|
223
|
-
plt.plot(
|
|
351
|
+
legendlist = [dataname, "filtereddata"]
|
|
352
|
+
plt.plot(fmridata + offset)
|
|
353
|
+
offset += spacing
|
|
354
|
+
plt.plot(predicteddata + offset)
|
|
355
|
+
offset += spacing
|
|
356
|
+
if plethwave is not None:
|
|
357
|
+
legendlist.append(plethname)
|
|
358
|
+
plt.plot(plethwave + offset)
|
|
359
|
+
offset += spacing
|
|
360
|
+
if badpts is not None:
|
|
361
|
+
legendlist.append(badptsname)
|
|
362
|
+
plt.plot(badpts + offset)
|
|
363
|
+
offset += spacing
|
|
364
|
+
plt.legend(legendlist)
|
|
365
|
+
plt.title(args.model)
|
|
224
366
|
plt.show()
|