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
rapidtide/workflows/filttc.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,17 +18,42 @@
|
|
|
18
18
|
#
|
|
19
19
|
import argparse
|
|
20
20
|
import sys
|
|
21
|
+
from argparse import Namespace
|
|
22
|
+
from typing import Any, Callable, Dict, List, Optional, Tuple, Union
|
|
21
23
|
|
|
22
24
|
import numpy as np
|
|
25
|
+
from numpy.typing import NDArray
|
|
23
26
|
|
|
24
27
|
import rapidtide.io as tide_io
|
|
25
28
|
import rapidtide.miscmath as tide_math
|
|
26
29
|
import rapidtide.workflows.parser_funcs as pf
|
|
27
30
|
|
|
28
31
|
|
|
29
|
-
def _get_parser():
|
|
32
|
+
def _get_parser() -> Any:
|
|
30
33
|
"""
|
|
31
|
-
Argument parser for filttc
|
|
34
|
+
Argument parser for filttc.
|
|
35
|
+
|
|
36
|
+
This function constructs and returns an `argparse.ArgumentParser` object configured
|
|
37
|
+
for parsing command-line arguments for the `filttc` tool, which filters timecourse
|
|
38
|
+
data in text files. It includes support for specifying sampling rate or timestep,
|
|
39
|
+
filter options, normalization methods, and miscellaneous flags.
|
|
40
|
+
|
|
41
|
+
Returns
|
|
42
|
+
-------
|
|
43
|
+
argparse.ArgumentParser
|
|
44
|
+
Configured argument parser for the filttc tool.
|
|
45
|
+
|
|
46
|
+
Notes
|
|
47
|
+
-----
|
|
48
|
+
The `--samplerate` and `--sampletstep` arguments are mutually exclusive and define
|
|
49
|
+
the sampling frequency of the input timecourses. The sampling frequency can be
|
|
50
|
+
specified either as a frequency (Hz) or as a timestep (seconds), with the latter
|
|
51
|
+
being the inverse of the former.
|
|
52
|
+
|
|
53
|
+
Examples
|
|
54
|
+
--------
|
|
55
|
+
>>> parser = _get_parser()
|
|
56
|
+
>>> args = parser.parse_args(['--inputfile', 'input.txt', '--outputfile', 'output.txt'])
|
|
32
57
|
"""
|
|
33
58
|
parser = argparse.ArgumentParser(
|
|
34
59
|
prog="filttc",
|
|
@@ -104,7 +129,53 @@ def _get_parser():
|
|
|
104
129
|
return parser
|
|
105
130
|
|
|
106
131
|
|
|
107
|
-
def filttc(args):
|
|
132
|
+
def filttc(args: Any) -> None:
|
|
133
|
+
"""
|
|
134
|
+
Apply a filter to timecourse data read from a text file and write the filtered output.
|
|
135
|
+
|
|
136
|
+
This function reads timecourse data from a specified input file, applies a filter
|
|
137
|
+
to each timecourse, and writes the filtered data to an output file. It supports
|
|
138
|
+
normalization, demeaning, and automatic sampling rate detection from the input file
|
|
139
|
+
or command-line arguments.
|
|
140
|
+
|
|
141
|
+
Parameters
|
|
142
|
+
----------
|
|
143
|
+
args : Any
|
|
144
|
+
An object containing command-line arguments. Expected attributes include:
|
|
145
|
+
- `inputfile`: Path to the input text file containing timecourse data.
|
|
146
|
+
- `outputfile`: Path to the output text file where filtered data will be written.
|
|
147
|
+
- `samplerate`: Sampling rate of the data, or 'auto' to detect from file.
|
|
148
|
+
- `normfirst`: Boolean indicating whether to normalize before filtering.
|
|
149
|
+
- `normmethod`: Normalization method to use (e.g., 'zscore', 'minmax').
|
|
150
|
+
- `demean`: Boolean indicating whether to remove the mean from the filtered data.
|
|
151
|
+
|
|
152
|
+
Returns
|
|
153
|
+
-------
|
|
154
|
+
None
|
|
155
|
+
This function does not return a value. It writes the filtered timecourse data
|
|
156
|
+
to the specified output file.
|
|
157
|
+
|
|
158
|
+
Notes
|
|
159
|
+
-----
|
|
160
|
+
- The input file must contain a header specifying the sampling rate, or the
|
|
161
|
+
sampling rate must be provided via command-line arguments.
|
|
162
|
+
- The filtering and normalization are applied independently to each timecourse.
|
|
163
|
+
- If `normfirst` is True, normalization is applied before filtering; otherwise,
|
|
164
|
+
filtering is applied before normalization.
|
|
165
|
+
|
|
166
|
+
Examples
|
|
167
|
+
--------
|
|
168
|
+
>>> import argparse
|
|
169
|
+
>>> args = argparse.Namespace(
|
|
170
|
+
... inputfile='input.txt',
|
|
171
|
+
... outputfile='output.txt',
|
|
172
|
+
... samplerate='auto',
|
|
173
|
+
... normfirst=False,
|
|
174
|
+
... normmethod='zscore',
|
|
175
|
+
... demean=True
|
|
176
|
+
... )
|
|
177
|
+
>>> filttc(args)
|
|
178
|
+
"""
|
|
108
179
|
args, thefilter = pf.postprocessfilteropts(args)
|
|
109
180
|
|
|
110
181
|
# read in data
|
|
@@ -136,7 +207,7 @@ def filttc(args):
|
|
|
136
207
|
else:
|
|
137
208
|
print("there are", numvecs, "timecourses")
|
|
138
209
|
print("samplerate is", samplerate)
|
|
139
|
-
outvecs = invecs
|
|
210
|
+
outvecs = np.zeros_like(invecs)
|
|
140
211
|
for i in range(numvecs):
|
|
141
212
|
if args.normfirst:
|
|
142
213
|
outvecs[i, :] = thefilter.apply(
|
|
@@ -0,0 +1,578 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
#
|
|
4
|
+
# Copyright 2016-2025 Blaise Frederick
|
|
5
|
+
#
|
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
# you may not use this file except in compliance with the License.
|
|
8
|
+
# You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
# See the License for the specific language governing permissions and
|
|
16
|
+
# limitations under the License.
|
|
17
|
+
#
|
|
18
|
+
#
|
|
19
|
+
from typing import Any, Callable, Dict, List, Optional, Tuple, Union
|
|
20
|
+
|
|
21
|
+
import numpy as np
|
|
22
|
+
from numpy.typing import NDArray
|
|
23
|
+
from scipy import ndimage
|
|
24
|
+
|
|
25
|
+
import rapidtide.io as tide_io
|
|
26
|
+
import rapidtide.patchmatch as tide_patch
|
|
27
|
+
import rapidtide.peakeval as tide_peakeval
|
|
28
|
+
import rapidtide.resample as tide_resample
|
|
29
|
+
import rapidtide.simfuncfit as tide_simfuncfit
|
|
30
|
+
import rapidtide.util as tide_util
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def fitSimFunc(
|
|
34
|
+
fmri_data_valid: NDArray[np.floating[Any]],
|
|
35
|
+
validsimcalcstart: int,
|
|
36
|
+
validsimcalcend: int,
|
|
37
|
+
osvalidsimcalcstart: int,
|
|
38
|
+
osvalidsimcalcend: int,
|
|
39
|
+
initial_fmri_x: NDArray[np.floating[Any]],
|
|
40
|
+
os_fmri_x: NDArray[np.floating[Any]],
|
|
41
|
+
theMutualInformationator: Any,
|
|
42
|
+
cleaned_referencetc: Any,
|
|
43
|
+
corrout: NDArray[np.floating[Any]],
|
|
44
|
+
outputname: str,
|
|
45
|
+
validvoxels: Any,
|
|
46
|
+
nativespaceshape: Any,
|
|
47
|
+
bidsbasedict: Any,
|
|
48
|
+
numspatiallocs: Any,
|
|
49
|
+
gaussout: Any,
|
|
50
|
+
theinitialdelay: Any,
|
|
51
|
+
windowout: Any,
|
|
52
|
+
R2: Any,
|
|
53
|
+
thesizes: Any,
|
|
54
|
+
internalspaceshape: Any,
|
|
55
|
+
numvalidspatiallocs: Any,
|
|
56
|
+
theinputdata: Any,
|
|
57
|
+
theheader: Any,
|
|
58
|
+
theFitter: Any,
|
|
59
|
+
fitmask: Any,
|
|
60
|
+
lagtimes: Any,
|
|
61
|
+
lagstrengths: Any,
|
|
62
|
+
lagsigma: Any,
|
|
63
|
+
failreason: Any,
|
|
64
|
+
outmaparray: Any,
|
|
65
|
+
trimmedcorrscale: Any,
|
|
66
|
+
similaritytype: Any,
|
|
67
|
+
thepass: Any,
|
|
68
|
+
optiondict: Any,
|
|
69
|
+
LGR: Any,
|
|
70
|
+
TimingLGR: Any,
|
|
71
|
+
simplefit: bool = False,
|
|
72
|
+
upsampfac: int = 8,
|
|
73
|
+
rt_floattype: np.dtype = np.float64,
|
|
74
|
+
) -> NDArray | None:
|
|
75
|
+
"""
|
|
76
|
+
Perform similarity function fitting and time lag estimation for fMRI data.
|
|
77
|
+
|
|
78
|
+
This function conducts either a simple or full fitting process for estimating time lags
|
|
79
|
+
between fMRI signals and a reference time course. It supports hybrid similarity metrics
|
|
80
|
+
and includes optional despeckling and patch shifting steps.
|
|
81
|
+
|
|
82
|
+
Parameters
|
|
83
|
+
----------
|
|
84
|
+
fmri_data_valid : NDArray[np.floating[Any]]
|
|
85
|
+
Valid fMRI data for processing.
|
|
86
|
+
validsimcalcstart : int
|
|
87
|
+
Start index for valid similarity calculation.
|
|
88
|
+
validsimcalcend : int
|
|
89
|
+
End index for valid similarity calculation.
|
|
90
|
+
osvalidsimcalcstart : int
|
|
91
|
+
Start index for oversampled valid similarity calculation.
|
|
92
|
+
osvalidsimcalcend : int
|
|
93
|
+
End index for oversampled valid similarity calculation.
|
|
94
|
+
initial_fmri_x : NDArray[np.floating[Any]]
|
|
95
|
+
Initial fMRI x values.
|
|
96
|
+
os_fmri_x : NDArray[np.floating[Any]]
|
|
97
|
+
Oversampled fMRI x values.
|
|
98
|
+
theMutualInformationator : object
|
|
99
|
+
Mutual information calculator.
|
|
100
|
+
cleaned_referencetc : array_like
|
|
101
|
+
Cleaned reference time course.
|
|
102
|
+
corrout : NDArray[np.floating[Any]]
|
|
103
|
+
Correlation output array.
|
|
104
|
+
outputname : str
|
|
105
|
+
Output filename prefix.
|
|
106
|
+
validvoxels : array_like
|
|
107
|
+
Indices of valid voxels.
|
|
108
|
+
nativespaceshape : tuple
|
|
109
|
+
Native space shape of the data.
|
|
110
|
+
bidsbasedict : dict
|
|
111
|
+
BIDS-based dictionary for output metadata.
|
|
112
|
+
numspatiallocs : int
|
|
113
|
+
Number of spatial locations.
|
|
114
|
+
gaussout : array_like
|
|
115
|
+
Gaussian output array.
|
|
116
|
+
theinitialdelay : float
|
|
117
|
+
Initial delay value.
|
|
118
|
+
windowout : array_like
|
|
119
|
+
Window output array.
|
|
120
|
+
R2 : array_like
|
|
121
|
+
R-squared values.
|
|
122
|
+
thesizes : array_like
|
|
123
|
+
Sizes for processing.
|
|
124
|
+
internalspaceshape : tuple
|
|
125
|
+
Internal space shape.
|
|
126
|
+
numvalidspatiallocs : int
|
|
127
|
+
Number of valid spatial locations.
|
|
128
|
+
theinputdata : object
|
|
129
|
+
Input data object.
|
|
130
|
+
theheader : dict
|
|
131
|
+
Header information.
|
|
132
|
+
theFitter : object
|
|
133
|
+
Fitter object for similarity function fitting.
|
|
134
|
+
fitmask : array_like
|
|
135
|
+
Mask for fitting.
|
|
136
|
+
lagtimes : array_like
|
|
137
|
+
Array to store estimated lag times.
|
|
138
|
+
lagstrengths : array_like
|
|
139
|
+
Array to store lag strengths.
|
|
140
|
+
lagsigma : array_like
|
|
141
|
+
Array to store sigma values for lags.
|
|
142
|
+
failreason : array_like
|
|
143
|
+
Array to store failure reasons.
|
|
144
|
+
outmaparray : array_like
|
|
145
|
+
Output map array.
|
|
146
|
+
trimmedcorrscale : array_like
|
|
147
|
+
Trimmed correlation scale.
|
|
148
|
+
similaritytype : str
|
|
149
|
+
Type of similarity metric used.
|
|
150
|
+
thepass : int
|
|
151
|
+
Current pass number.
|
|
152
|
+
optiondict : dict
|
|
153
|
+
Dictionary of options for processing.
|
|
154
|
+
LGR : object
|
|
155
|
+
Logger for general messages.
|
|
156
|
+
TimingLGR : object
|
|
157
|
+
Logger for timing information.
|
|
158
|
+
simplefit : bool, optional
|
|
159
|
+
If True, perform simple fitting using upsampling. Default is False.
|
|
160
|
+
upsampfac : int, optional
|
|
161
|
+
Upsampling factor for simple fitting. Default is 8.
|
|
162
|
+
rt_floattype : np.dtype, optional
|
|
163
|
+
Real-time floating-point data type. Default is np.float64.
|
|
164
|
+
|
|
165
|
+
Returns
|
|
166
|
+
-------
|
|
167
|
+
internaldespeckleincludemask : NDArray[np.floating[Any]] or None
|
|
168
|
+
Mask indicating which voxels were included in despeckling, or None if no despeckling was performed.
|
|
169
|
+
|
|
170
|
+
Notes
|
|
171
|
+
-----
|
|
172
|
+
- This function supports both simple and hybrid similarity metrics.
|
|
173
|
+
- Despeckling and patch shifting steps are optional and controlled by `optiondict`.
|
|
174
|
+
- The function modifies `lagtimes`, `lagstrengths`, `lagsigma`, and `fitmask` in-place.
|
|
175
|
+
|
|
176
|
+
Examples
|
|
177
|
+
--------
|
|
178
|
+
>>> fitSimFunc(
|
|
179
|
+
... fmri_data_valid,
|
|
180
|
+
... validsimcalcstart,
|
|
181
|
+
... validsimcalcend,
|
|
182
|
+
... osvalidsimcalcstart,
|
|
183
|
+
... osvalidsimcalcend,
|
|
184
|
+
... initial_fmri_x,
|
|
185
|
+
... os_fmri_x,
|
|
186
|
+
... theMutualInformationator,
|
|
187
|
+
... cleaned_referencetc,
|
|
188
|
+
... corrout,
|
|
189
|
+
... outputname,
|
|
190
|
+
... validvoxels,
|
|
191
|
+
... nativespaceshape,
|
|
192
|
+
... bidsbasedict,
|
|
193
|
+
... numspatiallocs,
|
|
194
|
+
... gaussout,
|
|
195
|
+
... theinitialdelay,
|
|
196
|
+
... windowout,
|
|
197
|
+
... R2,
|
|
198
|
+
... thesizes,
|
|
199
|
+
... internalspaceshape,
|
|
200
|
+
... numvalidspatiallocs,
|
|
201
|
+
... theinputdata,
|
|
202
|
+
... theheader,
|
|
203
|
+
... theFitter,
|
|
204
|
+
... fitmask,
|
|
205
|
+
... lagtimes,
|
|
206
|
+
... lagstrengths,
|
|
207
|
+
... lagsigma,
|
|
208
|
+
... failreason,
|
|
209
|
+
... outmaparray,
|
|
210
|
+
... trimmedcorrscale,
|
|
211
|
+
... similaritytype,
|
|
212
|
+
... thepass,
|
|
213
|
+
... optiondict,
|
|
214
|
+
... LGR,
|
|
215
|
+
... TimingLGR,
|
|
216
|
+
... simplefit=False,
|
|
217
|
+
... upsampfac=8,
|
|
218
|
+
... rt_floattype="float64",
|
|
219
|
+
... )
|
|
220
|
+
"""
|
|
221
|
+
# Do a peak prefit if doing hybrid
|
|
222
|
+
if optiondict["similaritymetric"] == "hybrid":
|
|
223
|
+
LGR.info(f"\n\nPeak prefit calculation, pass {thepass}")
|
|
224
|
+
TimingLGR.info(f"Peak prefit calculation start, pass {thepass}")
|
|
225
|
+
|
|
226
|
+
tide_util.disablemkl(optiondict["nprocs_peakeval"], debug=optiondict["threaddebug"])
|
|
227
|
+
voxelsprocessed_pe, thepeakdict = tide_peakeval.peakevalpass(
|
|
228
|
+
fmri_data_valid[:, validsimcalcstart : validsimcalcend + 1],
|
|
229
|
+
cleaned_referencetc,
|
|
230
|
+
initial_fmri_x[validsimcalcstart : validsimcalcend + 1],
|
|
231
|
+
os_fmri_x[osvalidsimcalcstart : osvalidsimcalcend + 1],
|
|
232
|
+
theMutualInformationator,
|
|
233
|
+
trimmedcorrscale,
|
|
234
|
+
corrout,
|
|
235
|
+
nprocs=optiondict["nprocs_peakeval"],
|
|
236
|
+
alwaysmultiproc=optiondict["alwaysmultiproc"],
|
|
237
|
+
bipolar=optiondict["bipolar"],
|
|
238
|
+
oversampfactor=optiondict["oversampfactor"],
|
|
239
|
+
interptype=optiondict["interptype"],
|
|
240
|
+
showprogressbar=optiondict["showprogressbar"],
|
|
241
|
+
chunksize=optiondict["mp_chunksize"],
|
|
242
|
+
rt_floattype=rt_floattype,
|
|
243
|
+
)
|
|
244
|
+
tide_util.enablemkl(optiondict["mklthreads"], debug=optiondict["threaddebug"])
|
|
245
|
+
|
|
246
|
+
TimingLGR.info(
|
|
247
|
+
f"Peak prefit end, pass {thepass}",
|
|
248
|
+
{
|
|
249
|
+
"message2": voxelsprocessed_pe,
|
|
250
|
+
"message3": "voxels",
|
|
251
|
+
},
|
|
252
|
+
)
|
|
253
|
+
mipeaks = np.zeros_like(lagtimes)
|
|
254
|
+
for i in range(numvalidspatiallocs):
|
|
255
|
+
if len(thepeakdict[str(i)]) > 0:
|
|
256
|
+
mipeaks[i] = thepeakdict[str(i)][0][0]
|
|
257
|
+
else:
|
|
258
|
+
thepeakdict = None
|
|
259
|
+
|
|
260
|
+
if simplefit:
|
|
261
|
+
basedelay = trimmedcorrscale[0]
|
|
262
|
+
delaystep = (trimmedcorrscale[1] - trimmedcorrscale[0]) / upsampfac
|
|
263
|
+
for thevox in range(numvalidspatiallocs):
|
|
264
|
+
fitmask[thevox] = 1
|
|
265
|
+
upsampcorrout = tide_resample.upsample(
|
|
266
|
+
corrout[thevox, :], 1, upsampfac, intfac=True, dofilt=False
|
|
267
|
+
)
|
|
268
|
+
if optiondict["bipolar"]:
|
|
269
|
+
thismax = np.argmax(np.fabs(upsampcorrout))
|
|
270
|
+
else:
|
|
271
|
+
thismax = np.argmax(upsampcorrout)
|
|
272
|
+
lagtimes[thevox] = basedelay + thismax * delaystep
|
|
273
|
+
lagstrengths[thevox] = upsampcorrout[thismax]
|
|
274
|
+
lagsigma[thevox] = 1.0
|
|
275
|
+
internaldespeckleincludemask = None
|
|
276
|
+
else:
|
|
277
|
+
# Similarity function fitting and time lag estimation
|
|
278
|
+
# write out the current version of the run options
|
|
279
|
+
optiondict["currentstage"] = f"presimfuncfit_pass{thepass}"
|
|
280
|
+
tide_io.writedicttojson(optiondict, f"{outputname}_desc-runoptions_info.json")
|
|
281
|
+
LGR.info(f"\n\nTime lag estimation pass {thepass}")
|
|
282
|
+
TimingLGR.info(f"Time lag estimation start, pass {thepass}")
|
|
283
|
+
|
|
284
|
+
theFitter.setfunctype(optiondict["similaritymetric"])
|
|
285
|
+
theFitter.setcorrtimeaxis(trimmedcorrscale)
|
|
286
|
+
|
|
287
|
+
# use initial lags if this is a hybrid fit
|
|
288
|
+
if optiondict["similaritymetric"] == "hybrid" and thepeakdict is not None:
|
|
289
|
+
initlags = mipeaks
|
|
290
|
+
else:
|
|
291
|
+
initlags = None
|
|
292
|
+
|
|
293
|
+
tide_util.disablemkl(optiondict["nprocs_fitcorr"], debug=optiondict["threaddebug"])
|
|
294
|
+
voxelsprocessed_fc = tide_simfuncfit.fitcorr(
|
|
295
|
+
trimmedcorrscale,
|
|
296
|
+
theFitter,
|
|
297
|
+
corrout,
|
|
298
|
+
fitmask,
|
|
299
|
+
failreason,
|
|
300
|
+
lagtimes,
|
|
301
|
+
lagstrengths,
|
|
302
|
+
lagsigma,
|
|
303
|
+
gaussout,
|
|
304
|
+
windowout,
|
|
305
|
+
R2,
|
|
306
|
+
despeckling=False,
|
|
307
|
+
peakdict=thepeakdict,
|
|
308
|
+
nprocs=optiondict["nprocs_fitcorr"],
|
|
309
|
+
alwaysmultiproc=optiondict["alwaysmultiproc"],
|
|
310
|
+
fixdelay=optiondict["fixdelay"],
|
|
311
|
+
initialdelayvalue=theinitialdelay,
|
|
312
|
+
showprogressbar=optiondict["showprogressbar"],
|
|
313
|
+
chunksize=optiondict["mp_chunksize"],
|
|
314
|
+
despeckle_thresh=optiondict["despeckle_thresh"],
|
|
315
|
+
initiallags=initlags,
|
|
316
|
+
rt_floattype=rt_floattype,
|
|
317
|
+
)
|
|
318
|
+
tide_util.enablemkl(optiondict["mklthreads"], debug=optiondict["threaddebug"])
|
|
319
|
+
|
|
320
|
+
TimingLGR.info(
|
|
321
|
+
f"Time lag estimation end, pass {thepass}",
|
|
322
|
+
{
|
|
323
|
+
"message2": voxelsprocessed_fc,
|
|
324
|
+
"message3": "voxels",
|
|
325
|
+
},
|
|
326
|
+
)
|
|
327
|
+
|
|
328
|
+
# Correlation time despeckle
|
|
329
|
+
if optiondict["despeckle_passes"] > 0:
|
|
330
|
+
LGR.info(f"\n\n{similaritytype} despeckling pass {thepass}")
|
|
331
|
+
LGR.info(f"\tUsing despeckle_thresh = {optiondict['despeckle_thresh']:.3f}")
|
|
332
|
+
TimingLGR.info(f"{similaritytype} despeckle start, pass {thepass}")
|
|
333
|
+
|
|
334
|
+
# find lags that are very different from their neighbors, and refit starting at the median lag for the point
|
|
335
|
+
voxelsprocessed_fc_ds = 0
|
|
336
|
+
despecklingdone = False
|
|
337
|
+
lastnumdespeckled = 1000000
|
|
338
|
+
for despecklepass in range(optiondict["despeckle_passes"]):
|
|
339
|
+
LGR.info(f"\n\n{similaritytype} despeckling subpass {despecklepass + 1}")
|
|
340
|
+
outmaparray *= 0.0
|
|
341
|
+
outmaparray[validvoxels] = eval("lagtimes")[:]
|
|
342
|
+
|
|
343
|
+
# find voxels to despeckle
|
|
344
|
+
medianlags = ndimage.median_filter(
|
|
345
|
+
outmaparray.reshape(nativespaceshape), 3
|
|
346
|
+
).reshape(numspatiallocs)
|
|
347
|
+
# voxels that we're happy with have initlags set to -1000000.0
|
|
348
|
+
initlags = np.where(
|
|
349
|
+
np.abs(outmaparray - medianlags) > optiondict["despeckle_thresh"],
|
|
350
|
+
medianlags,
|
|
351
|
+
-1000000.0,
|
|
352
|
+
)[validvoxels]
|
|
353
|
+
|
|
354
|
+
if len(initlags) > 0:
|
|
355
|
+
numdespeckled = len(np.where(initlags != -1000000.0)[0])
|
|
356
|
+
if lastnumdespeckled > numdespeckled > 0:
|
|
357
|
+
lastnumdespeckled = numdespeckled
|
|
358
|
+
tide_util.disablemkl(
|
|
359
|
+
optiondict["nprocs_fitcorr"], debug=optiondict["threaddebug"]
|
|
360
|
+
)
|
|
361
|
+
voxelsprocessed_thispass = tide_simfuncfit.fitcorr(
|
|
362
|
+
trimmedcorrscale,
|
|
363
|
+
theFitter,
|
|
364
|
+
corrout,
|
|
365
|
+
fitmask,
|
|
366
|
+
failreason,
|
|
367
|
+
lagtimes,
|
|
368
|
+
lagstrengths,
|
|
369
|
+
lagsigma,
|
|
370
|
+
gaussout,
|
|
371
|
+
windowout,
|
|
372
|
+
R2,
|
|
373
|
+
despeckling=True,
|
|
374
|
+
peakdict=thepeakdict,
|
|
375
|
+
nprocs=optiondict["nprocs_fitcorr"],
|
|
376
|
+
alwaysmultiproc=optiondict["alwaysmultiproc"],
|
|
377
|
+
fixdelay=optiondict["fixdelay"],
|
|
378
|
+
initialdelayvalue=theinitialdelay,
|
|
379
|
+
showprogressbar=optiondict["showprogressbar"],
|
|
380
|
+
chunksize=optiondict["mp_chunksize"],
|
|
381
|
+
despeckle_thresh=optiondict["despeckle_thresh"],
|
|
382
|
+
initiallags=initlags,
|
|
383
|
+
rt_floattype=rt_floattype,
|
|
384
|
+
)
|
|
385
|
+
tide_util.enablemkl(
|
|
386
|
+
optiondict["mklthreads"], debug=optiondict["threaddebug"]
|
|
387
|
+
)
|
|
388
|
+
|
|
389
|
+
voxelsprocessed_fc_ds += voxelsprocessed_thispass
|
|
390
|
+
optiondict[
|
|
391
|
+
"despecklemasksize_pass" + str(thepass) + "_d" + str(despecklepass + 1)
|
|
392
|
+
] = voxelsprocessed_thispass
|
|
393
|
+
optiondict[
|
|
394
|
+
"despecklemaskpct_pass" + str(thepass) + "_d" + str(despecklepass + 1)
|
|
395
|
+
] = (100.0 * voxelsprocessed_thispass / optiondict["corrmasksize"])
|
|
396
|
+
else:
|
|
397
|
+
despecklingdone = True
|
|
398
|
+
else:
|
|
399
|
+
despecklingdone = True
|
|
400
|
+
if despecklingdone:
|
|
401
|
+
LGR.info("Nothing left to do! Terminating despeckling")
|
|
402
|
+
break
|
|
403
|
+
|
|
404
|
+
internaldespeckleincludemask = np.where(
|
|
405
|
+
np.abs(outmaparray - medianlags) > optiondict["despeckle_thresh"],
|
|
406
|
+
medianlags,
|
|
407
|
+
0.0,
|
|
408
|
+
)
|
|
409
|
+
if optiondict["savedespecklemasks"] and (optiondict["despeckle_passes"] > 0):
|
|
410
|
+
despecklesavemask = np.where(
|
|
411
|
+
internaldespeckleincludemask[validvoxels] == 0.0, 0, 1
|
|
412
|
+
)
|
|
413
|
+
if thepass == optiondict["passes"]:
|
|
414
|
+
if theinputdata.filetype != "text":
|
|
415
|
+
if theinputdata.filetype == "cifti":
|
|
416
|
+
timeindex = theheader["dim"][0] - 1
|
|
417
|
+
spaceindex = theheader["dim"][0]
|
|
418
|
+
theheader["dim"][timeindex] = 1
|
|
419
|
+
theheader["dim"][spaceindex] = numspatiallocs
|
|
420
|
+
else:
|
|
421
|
+
theheader["dim"][0] = 3
|
|
422
|
+
theheader["dim"][4] = 1
|
|
423
|
+
theheader["pixdim"][4] = 1.0
|
|
424
|
+
masklist = [
|
|
425
|
+
(
|
|
426
|
+
despecklesavemask,
|
|
427
|
+
"despeckle",
|
|
428
|
+
"mask",
|
|
429
|
+
None,
|
|
430
|
+
"Voxels that underwent despeckling in the final pass",
|
|
431
|
+
)
|
|
432
|
+
]
|
|
433
|
+
tide_io.savemaplist(
|
|
434
|
+
outputname,
|
|
435
|
+
masklist,
|
|
436
|
+
validvoxels,
|
|
437
|
+
nativespaceshape,
|
|
438
|
+
theheader,
|
|
439
|
+
bidsbasedict,
|
|
440
|
+
filetype=theinputdata.filetype,
|
|
441
|
+
rt_floattype=rt_floattype,
|
|
442
|
+
cifti_hdr=theinputdata.cifti_hdr,
|
|
443
|
+
)
|
|
444
|
+
LGR.info(
|
|
445
|
+
f"\n\n{voxelsprocessed_fc_ds} voxels despeckled in "
|
|
446
|
+
f"{optiondict['despeckle_passes']} passes"
|
|
447
|
+
)
|
|
448
|
+
TimingLGR.info(
|
|
449
|
+
f"{similaritytype} despeckle end, pass {thepass}",
|
|
450
|
+
{
|
|
451
|
+
"message2": voxelsprocessed_fc_ds,
|
|
452
|
+
"message3": "voxels",
|
|
453
|
+
},
|
|
454
|
+
)
|
|
455
|
+
else:
|
|
456
|
+
internaldespeckleincludemask = None
|
|
457
|
+
|
|
458
|
+
# Patch shifting
|
|
459
|
+
if optiondict["patchshift"]:
|
|
460
|
+
outmaparray *= 0.0
|
|
461
|
+
outmaparray[validvoxels] = eval("lagtimes")[:]
|
|
462
|
+
# new method
|
|
463
|
+
masklist = [
|
|
464
|
+
(
|
|
465
|
+
outmaparray[validvoxels],
|
|
466
|
+
f"lagtimes_prepatch_pass{thepass}",
|
|
467
|
+
"map",
|
|
468
|
+
None,
|
|
469
|
+
f"Input lagtimes map prior to patch map generation pass {thepass}",
|
|
470
|
+
),
|
|
471
|
+
]
|
|
472
|
+
tide_io.savemaplist(
|
|
473
|
+
outputname,
|
|
474
|
+
masklist,
|
|
475
|
+
validvoxels,
|
|
476
|
+
nativespaceshape,
|
|
477
|
+
theheader,
|
|
478
|
+
bidsbasedict,
|
|
479
|
+
filetype=theinputdata.filetype,
|
|
480
|
+
rt_floattype=rt_floattype,
|
|
481
|
+
cifti_hdr=theinputdata.cifti_hdr,
|
|
482
|
+
)
|
|
483
|
+
|
|
484
|
+
# create list of anomalous 3D regions that don't match surroundings
|
|
485
|
+
if theinputdata.nim_affine is not None:
|
|
486
|
+
# make an atlas of anomalous patches - each patch shares the same integer value
|
|
487
|
+
step1 = tide_patch.calc_DoG(
|
|
488
|
+
outmaparray.reshape(nativespaceshape).copy(),
|
|
489
|
+
theinputdata.nim_affine,
|
|
490
|
+
thesizes,
|
|
491
|
+
fwhm=optiondict["patchfwhm"],
|
|
492
|
+
ratioopt=False,
|
|
493
|
+
debug=True,
|
|
494
|
+
)
|
|
495
|
+
masklist = [
|
|
496
|
+
(
|
|
497
|
+
step1.reshape(internalspaceshape)[validvoxels],
|
|
498
|
+
f"DoG_pass{thepass}",
|
|
499
|
+
"map",
|
|
500
|
+
None,
|
|
501
|
+
f"DoG map for pass {thepass}",
|
|
502
|
+
),
|
|
503
|
+
]
|
|
504
|
+
tide_io.savemaplist(
|
|
505
|
+
outputname,
|
|
506
|
+
masklist,
|
|
507
|
+
validvoxels,
|
|
508
|
+
nativespaceshape,
|
|
509
|
+
theheader,
|
|
510
|
+
bidsbasedict,
|
|
511
|
+
filetype=theinputdata.filetype,
|
|
512
|
+
rt_floattype=rt_floattype,
|
|
513
|
+
cifti_hdr=theinputdata.cifti_hdr,
|
|
514
|
+
)
|
|
515
|
+
step2 = tide_patch.invertedflood3D(
|
|
516
|
+
step1,
|
|
517
|
+
1,
|
|
518
|
+
)
|
|
519
|
+
masklist = [
|
|
520
|
+
(
|
|
521
|
+
step2.reshape(internalspaceshape)[validvoxels],
|
|
522
|
+
f"invertflood_pass{thepass}",
|
|
523
|
+
"map",
|
|
524
|
+
None,
|
|
525
|
+
f"Inverted flood map for pass {thepass}",
|
|
526
|
+
),
|
|
527
|
+
]
|
|
528
|
+
tide_io.savemaplist(
|
|
529
|
+
outputname,
|
|
530
|
+
masklist,
|
|
531
|
+
validvoxels,
|
|
532
|
+
nativespaceshape,
|
|
533
|
+
theheader,
|
|
534
|
+
bidsbasedict,
|
|
535
|
+
filetype=theinputdata.filetype,
|
|
536
|
+
rt_floattype=rt_floattype,
|
|
537
|
+
cifti_hdr=theinputdata.cifti_hdr,
|
|
538
|
+
)
|
|
539
|
+
|
|
540
|
+
patchmap = tide_patch.separateclusters(
|
|
541
|
+
step2,
|
|
542
|
+
sizethresh=optiondict["patchminsize"],
|
|
543
|
+
debug=True,
|
|
544
|
+
)
|
|
545
|
+
# patchmap = tide_patch.getclusters(
|
|
546
|
+
# outmaparray.reshape(nativespaceshape),
|
|
547
|
+
# theinputdata.nim_affine,
|
|
548
|
+
# thesizes,
|
|
549
|
+
# fwhm=optiondict["patchfwhm"],
|
|
550
|
+
# ratioopt=True,
|
|
551
|
+
# sizethresh=optiondict["patchminsize"],
|
|
552
|
+
# debug=True,
|
|
553
|
+
# )
|
|
554
|
+
masklist = [
|
|
555
|
+
(
|
|
556
|
+
patchmap[validvoxels],
|
|
557
|
+
f"patch_pass{thepass}",
|
|
558
|
+
"map",
|
|
559
|
+
None,
|
|
560
|
+
f"Patch map for despeckling pass {thepass}",
|
|
561
|
+
),
|
|
562
|
+
]
|
|
563
|
+
tide_io.savemaplist(
|
|
564
|
+
outputname,
|
|
565
|
+
masklist,
|
|
566
|
+
validvoxels,
|
|
567
|
+
nativespaceshape,
|
|
568
|
+
theheader,
|
|
569
|
+
bidsbasedict,
|
|
570
|
+
filetype=theinputdata.filetype,
|
|
571
|
+
rt_floattype=rt_floattype,
|
|
572
|
+
cifti_hdr=theinputdata.cifti_hdr,
|
|
573
|
+
)
|
|
574
|
+
|
|
575
|
+
# now shift the patches to align with the majority of the image
|
|
576
|
+
tide_patch.interppatch(lagtimes, patchmap[validvoxels])
|
|
577
|
+
|
|
578
|
+
return internaldespeckleincludemask
|