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.
|
|
@@ -17,6 +17,8 @@
|
|
|
17
17
|
#
|
|
18
18
|
#
|
|
19
19
|
import argparse
|
|
20
|
+
from argparse import Namespace
|
|
21
|
+
from typing import Any, Callable, Dict, List, Optional, Tuple, Union
|
|
20
22
|
|
|
21
23
|
from matplotlib.pyplot import *
|
|
22
24
|
from tqdm import tqdm
|
|
@@ -26,7 +28,32 @@ import rapidtide.io as tide_io
|
|
|
26
28
|
import rapidtide.workflows.parser_funcs as pf
|
|
27
29
|
|
|
28
30
|
|
|
29
|
-
def _get_parser():
|
|
31
|
+
def _get_parser() -> Any:
|
|
32
|
+
"""
|
|
33
|
+
Create and configure an argument parser for the spatialfit command-line tool.
|
|
34
|
+
|
|
35
|
+
This function sets up an `argparse.ArgumentParser` with specific arguments
|
|
36
|
+
required for fitting a 3D or 4D NIFTI file to a spatial template. It includes
|
|
37
|
+
validation for file inputs and supports optional masking and fitting parameters.
|
|
38
|
+
|
|
39
|
+
Returns
|
|
40
|
+
-------
|
|
41
|
+
argparse.ArgumentParser
|
|
42
|
+
Configured argument parser with defined command-line arguments.
|
|
43
|
+
|
|
44
|
+
Notes
|
|
45
|
+
-----
|
|
46
|
+
The parser is configured with:
|
|
47
|
+
- Required positional arguments: `datafile`, `templatefile`, and `outputroot`.
|
|
48
|
+
- Optional arguments: `--datamask`, `--templatemask`, `--order`, and `--debug`.
|
|
49
|
+
|
|
50
|
+
Examples
|
|
51
|
+
--------
|
|
52
|
+
>>> parser = _get_parser()
|
|
53
|
+
>>> args = parser.parse_args(['data.nii', 'template.nii', 'output_root'])
|
|
54
|
+
>>> print(args.datafile)
|
|
55
|
+
'data.nii'
|
|
56
|
+
"""
|
|
30
57
|
# get the command line parameters
|
|
31
58
|
parser = argparse.ArgumentParser(
|
|
32
59
|
prog="spatialfit",
|
|
@@ -80,7 +107,55 @@ def _get_parser():
|
|
|
80
107
|
return parser
|
|
81
108
|
|
|
82
109
|
|
|
83
|
-
def spatialfit(args):
|
|
110
|
+
def spatialfit(args: Any) -> None:
|
|
111
|
+
"""
|
|
112
|
+
Perform spatial fitting of fMRI data using a template-based linear regression model.
|
|
113
|
+
|
|
114
|
+
This function reads input data and template files, performs masking, and fits a
|
|
115
|
+
linear model at each spatial location to estimate spatially varying linear coefficients,
|
|
116
|
+
offsets, and R² values. It outputs time series of these parameters along with fitted,
|
|
117
|
+
residual, and normalized data volumes.
|
|
118
|
+
|
|
119
|
+
Parameters
|
|
120
|
+
----------
|
|
121
|
+
args : Any
|
|
122
|
+
Parsed command-line arguments. Expected to contain the following attributes:
|
|
123
|
+
- datafile : str
|
|
124
|
+
Path to the input NIfTI data file.
|
|
125
|
+
- templatefile : str
|
|
126
|
+
Path to the template NIfTI file.
|
|
127
|
+
- dmask : str, optional
|
|
128
|
+
Path to the data mask NIfTI file.
|
|
129
|
+
- tmask : str, optional
|
|
130
|
+
Path to the template mask NIfTI file.
|
|
131
|
+
- outputroot : str
|
|
132
|
+
Root name for output files.
|
|
133
|
+
- debug : bool, optional
|
|
134
|
+
Enable debug printing.
|
|
135
|
+
|
|
136
|
+
Returns
|
|
137
|
+
-------
|
|
138
|
+
None
|
|
139
|
+
This function does not return a value but writes multiple NIfTI and text files
|
|
140
|
+
to disk.
|
|
141
|
+
|
|
142
|
+
Notes
|
|
143
|
+
-----
|
|
144
|
+
The function assumes that the input data and template files have compatible
|
|
145
|
+
spatial dimensions. It performs a linear regression for each timepoint and
|
|
146
|
+
stores the resulting coefficients, offsets, and R² values.
|
|
147
|
+
|
|
148
|
+
Examples
|
|
149
|
+
--------
|
|
150
|
+
>>> import argparse
|
|
151
|
+
>>> args = argparse.Namespace(
|
|
152
|
+
... datafile='data.nii.gz',
|
|
153
|
+
... templatefile='template.nii.gz',
|
|
154
|
+
... outputroot='output',
|
|
155
|
+
... debug=False
|
|
156
|
+
... )
|
|
157
|
+
>>> spatialfit(args)
|
|
158
|
+
"""
|
|
84
159
|
# get the command line parameters
|
|
85
160
|
try:
|
|
86
161
|
args = _get_parser().parse_args()
|
|
@@ -180,7 +255,7 @@ def spatialfit(args):
|
|
|
180
255
|
newmask = np.zeros((numspatiallocs), dtype="float")
|
|
181
256
|
lincoffs = np.zeros((timepoints), dtype="float")
|
|
182
257
|
offsets = np.zeros((timepoints), dtype="float")
|
|
183
|
-
|
|
258
|
+
r2vals = np.zeros((timepoints), dtype="float")
|
|
184
259
|
|
|
185
260
|
if args.debug:
|
|
186
261
|
print(fitdata.shape)
|
|
@@ -190,7 +265,7 @@ def spatialfit(args):
|
|
|
190
265
|
print(newmask.shape)
|
|
191
266
|
print(lincoffs.shape)
|
|
192
267
|
print(offsets.shape)
|
|
193
|
-
print(
|
|
268
|
+
print(r2vals.shape)
|
|
194
269
|
|
|
195
270
|
# mask everything
|
|
196
271
|
print("masking data and template")
|
|
@@ -215,10 +290,10 @@ def spatialfit(args):
|
|
|
215
290
|
):
|
|
216
291
|
if args.debug:
|
|
217
292
|
print("fitting")
|
|
218
|
-
thefit,
|
|
293
|
+
thefit, R2 = tide_fit.mlregress(maskedtemplate[:, 0], maskeddata[:, thetime])
|
|
219
294
|
lincoffs[thetime] = thefit[0, 1]
|
|
220
295
|
offsets[thetime] = thefit[0, 0]
|
|
221
|
-
|
|
296
|
+
r2vals[thetime] = R2
|
|
222
297
|
if args.debug:
|
|
223
298
|
print("generating fit data")
|
|
224
299
|
print(
|
|
@@ -241,7 +316,7 @@ def spatialfit(args):
|
|
|
241
316
|
print("writing time series")
|
|
242
317
|
tide_io.writenpvecs(lincoffs, args.outputroot + "_lincoffs.txt")
|
|
243
318
|
tide_io.writenpvecs(offsets, args.outputroot + "_offsets.txt")
|
|
244
|
-
tide_io.writenpvecs(
|
|
319
|
+
tide_io.writenpvecs(r2vals, args.outputroot + "_r2vals.txt")
|
|
245
320
|
print("slope mean, std:", np.mean(lincoffs), np.std(lincoffs))
|
|
246
321
|
print("offset mean, std:", np.mean(offsets), np.std(offsets))
|
|
247
322
|
|
rapidtide/workflows/spatialmi.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,8 +18,11 @@
|
|
|
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.correlate as tide_corr
|
|
25
28
|
import rapidtide.filter as tide_filt
|
|
@@ -28,9 +31,32 @@ import rapidtide.io as tide_io
|
|
|
28
31
|
import rapidtide.miscmath as tide_math
|
|
29
32
|
|
|
30
33
|
|
|
31
|
-
def _get_parser():
|
|
34
|
+
def _get_parser() -> Any:
|
|
32
35
|
"""
|
|
33
|
-
Argument parser for
|
|
36
|
+
Argument parser for spatialmi.
|
|
37
|
+
|
|
38
|
+
This function constructs and returns an `argparse.ArgumentParser` object configured
|
|
39
|
+
to parse command-line arguments for the `spatialmi` tool, which calculates localized
|
|
40
|
+
spatial mutual information between two NIfTI images.
|
|
41
|
+
|
|
42
|
+
Returns
|
|
43
|
+
-------
|
|
44
|
+
argparse.ArgumentParser
|
|
45
|
+
Configured argument parser for the spatial mutual information calculation tool.
|
|
46
|
+
|
|
47
|
+
Notes
|
|
48
|
+
-----
|
|
49
|
+
The parser requires four mandatory positional arguments: two input NIfTI image filenames,
|
|
50
|
+
two corresponding mask filenames, and an output root name. Optional arguments allow
|
|
51
|
+
customization of the calculation, including neighborhood shape, filtering, normalization,
|
|
52
|
+
and debugging output.
|
|
53
|
+
|
|
54
|
+
Examples
|
|
55
|
+
--------
|
|
56
|
+
>>> parser = _get_parser()
|
|
57
|
+
>>> args = parser.parse_args()
|
|
58
|
+
>>> print(args.inputfilename1)
|
|
59
|
+
'input1.nii.gz'
|
|
34
60
|
"""
|
|
35
61
|
parser = argparse.ArgumentParser(
|
|
36
62
|
prog="spatialmi",
|
|
@@ -138,23 +164,77 @@ def _get_parser():
|
|
|
138
164
|
|
|
139
165
|
|
|
140
166
|
def getneighborhood(
|
|
141
|
-
indata,
|
|
142
|
-
xloc,
|
|
143
|
-
yloc,
|
|
144
|
-
zloc,
|
|
145
|
-
xsize,
|
|
146
|
-
ysize,
|
|
147
|
-
zsize,
|
|
148
|
-
radius,
|
|
149
|
-
spherical=False,
|
|
150
|
-
kernelwidth=1.5,
|
|
151
|
-
slop=0.01,
|
|
152
|
-
debug=False,
|
|
153
|
-
):
|
|
167
|
+
indata: NDArray[np.floating[Any]],
|
|
168
|
+
xloc: Any,
|
|
169
|
+
yloc: Any,
|
|
170
|
+
zloc: Any,
|
|
171
|
+
xsize: Any,
|
|
172
|
+
ysize: Any,
|
|
173
|
+
zsize: Any,
|
|
174
|
+
radius: Any,
|
|
175
|
+
spherical: bool = False,
|
|
176
|
+
kernelwidth: float = 1.5,
|
|
177
|
+
slop: float = 0.01,
|
|
178
|
+
debug: bool = False,
|
|
179
|
+
) -> NDArray[np.floating[Any]]:
|
|
180
|
+
"""
|
|
181
|
+
Extract a neighborhood from a 3D dataset, either as a weighted kernel or a spherical region.
|
|
182
|
+
|
|
183
|
+
This function retrieves a local neighborhood around a specified 3D location in a dataset.
|
|
184
|
+
The neighborhood can be extracted either as a cubic region with a Gaussian-weighted kernel
|
|
185
|
+
(when `spherical=False`) or as a spherical region (when `spherical=True`).
|
|
186
|
+
|
|
187
|
+
Parameters
|
|
188
|
+
----------
|
|
189
|
+
indata : NDArray[np.floating[Any]]
|
|
190
|
+
Input 3D dataset from which the neighborhood is extracted.
|
|
191
|
+
xloc, yloc, zloc : float or int
|
|
192
|
+
The center coordinates of the neighborhood in the dataset.
|
|
193
|
+
xsize, ysize, zsize : int
|
|
194
|
+
Dimensions of the input dataset along each axis.
|
|
195
|
+
radius : float or int
|
|
196
|
+
The radius of the neighborhood. For `spherical=False`, this defines the cubic
|
|
197
|
+
kernel size. For `spherical=True`, it defines the spherical radius.
|
|
198
|
+
spherical : bool, optional
|
|
199
|
+
If True, extracts a spherical neighborhood. If False, extracts a cubic neighborhood
|
|
200
|
+
with a Gaussian kernel. Default is False.
|
|
201
|
+
kernelwidth : float, optional
|
|
202
|
+
Width parameter for the Gaussian kernel used when `spherical=False`. Default is 1.5.
|
|
203
|
+
slop : float, optional
|
|
204
|
+
Tolerance for spherical radius checking. Default is 0.01.
|
|
205
|
+
debug : bool, optional
|
|
206
|
+
If True, prints debug information about the index list initialization. Default is False.
|
|
207
|
+
|
|
208
|
+
Returns
|
|
209
|
+
-------
|
|
210
|
+
NDArray[np.floating[Any]]
|
|
211
|
+
A flattened array of the neighborhood values. When `spherical=False`, the values
|
|
212
|
+
are weighted by a Gaussian kernel. When `spherical=True`, the values are unweighted.
|
|
213
|
+
|
|
214
|
+
Notes
|
|
215
|
+
-----
|
|
216
|
+
- The function uses global variables `kernel`, `usedwidth`, `indexlist`, and `usedradius`
|
|
217
|
+
to cache computations for performance. These are initialized on first call.
|
|
218
|
+
- For `spherical=False`, the function returns a flattened array of the kernel-weighted
|
|
219
|
+
neighborhood.
|
|
220
|
+
- For `spherical=True`, the function returns a flattened array of values within the
|
|
221
|
+
spherical neighborhood.
|
|
222
|
+
|
|
223
|
+
Examples
|
|
224
|
+
--------
|
|
225
|
+
>>> import numpy as np
|
|
226
|
+
>>> data = np.random.rand(10, 10, 10)
|
|
227
|
+
>>> neighborhood = getneighborhood(data, 5, 5, 5, 10, 10, 10, 2, spherical=False)
|
|
228
|
+
>>> print(neighborhood.shape)
|
|
229
|
+
(125,)
|
|
230
|
+
>>> neighborhood = getneighborhood(data, 5, 5, 5, 10, 10, 10, 2, spherical=True)
|
|
231
|
+
>>> print(neighborhood.shape)
|
|
232
|
+
(33,)
|
|
233
|
+
"""
|
|
154
234
|
if not spherical:
|
|
155
235
|
global usedwidth, kernel
|
|
156
236
|
try:
|
|
157
|
-
kernel
|
|
237
|
+
dummy = kernel
|
|
158
238
|
except NameError:
|
|
159
239
|
usedwidth = kernelwidth
|
|
160
240
|
kernel = None
|
|
@@ -230,7 +310,66 @@ def getneighborhood(
|
|
|
230
310
|
return np.array(outdata)
|
|
231
311
|
|
|
232
312
|
|
|
233
|
-
def getMI(
|
|
313
|
+
def getMI(
|
|
314
|
+
x: Any,
|
|
315
|
+
y: Any,
|
|
316
|
+
norm: bool = True,
|
|
317
|
+
bins: int = -1,
|
|
318
|
+
init: bool = False,
|
|
319
|
+
prebin: bool = True,
|
|
320
|
+
sigma: float = 0.25,
|
|
321
|
+
debug: bool = False,
|
|
322
|
+
) -> None:
|
|
323
|
+
"""
|
|
324
|
+
Compute the mutual information between two variables using binned estimation.
|
|
325
|
+
|
|
326
|
+
This function calculates the mutual information between two input arrays `x` and `y`,
|
|
327
|
+
using a binned approach. It supports normalization, automatic bin selection, and
|
|
328
|
+
optional pre-binning for performance optimization.
|
|
329
|
+
|
|
330
|
+
Parameters
|
|
331
|
+
----------
|
|
332
|
+
x : array-like
|
|
333
|
+
First input variable.
|
|
334
|
+
y : array-like
|
|
335
|
+
Second input variable.
|
|
336
|
+
norm : bool, optional
|
|
337
|
+
If True, normalize the input variables using standard normalization
|
|
338
|
+
(zero mean, unit variance). Default is True.
|
|
339
|
+
bins : int, optional
|
|
340
|
+
Number of bins to use for the 2D histogram. If less than 1, the number
|
|
341
|
+
of bins is automatically determined as `max(int(sqrt(len(x) / 5)), 3)`.
|
|
342
|
+
Default is -1.
|
|
343
|
+
init : bool, optional
|
|
344
|
+
If True, reinitialize the global binning structure. Default is False.
|
|
345
|
+
prebin : bool, optional
|
|
346
|
+
If True, use precomputed bin edges. If False, use the number of bins
|
|
347
|
+
directly. Default is True.
|
|
348
|
+
sigma : float, optional
|
|
349
|
+
Standard deviation for Gaussian smoothing in the mutual information
|
|
350
|
+
calculation. Default is 0.25.
|
|
351
|
+
debug : bool, optional
|
|
352
|
+
If True, print debugging information during execution. Default is False.
|
|
353
|
+
|
|
354
|
+
Returns
|
|
355
|
+
-------
|
|
356
|
+
None
|
|
357
|
+
The function returns the result of `tide_corr.mutual_info_2d`, which is
|
|
358
|
+
not explicitly returned here but is the core output of the function.
|
|
359
|
+
|
|
360
|
+
Notes
|
|
361
|
+
-----
|
|
362
|
+
The function uses a global variable `thebins` to store binning information.
|
|
363
|
+
If `init` is True or `thebins` is None, bin edges are computed and stored
|
|
364
|
+
in `thebins`. The function relies on `tide_math.stdnormalize` for normalization
|
|
365
|
+
and `tide_corr.mutual_info_2d` for the actual mutual information computation.
|
|
366
|
+
|
|
367
|
+
Examples
|
|
368
|
+
--------
|
|
369
|
+
>>> x = [1, 2, 3, 4, 5]
|
|
370
|
+
>>> y = [2, 4, 6, 8, 10]
|
|
371
|
+
>>> getMI(x, y, norm=True, bins=10, debug=False)
|
|
372
|
+
"""
|
|
234
373
|
global thebins
|
|
235
374
|
|
|
236
375
|
if norm:
|
|
@@ -274,18 +413,102 @@ def getMI(x, y, norm=True, bins=-1, init=False, prebin=True, sigma=0.25, debug=F
|
|
|
274
413
|
f"normy min, max, mean, std: {np.min(normy)}, {np.max(normy)}, {np.mean(normy)}, {np.std(normy)}"
|
|
275
414
|
)
|
|
276
415
|
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
416
|
+
if fast:
|
|
417
|
+
return tide_corr.mutual_info_2d_fast(
|
|
418
|
+
normx,
|
|
419
|
+
normy,
|
|
420
|
+
thebins,
|
|
421
|
+
normalized=norm,
|
|
422
|
+
sigma=sigma,
|
|
423
|
+
debug=debug,
|
|
424
|
+
)
|
|
425
|
+
else:
|
|
426
|
+
return tide_corr.mutual_info_2d(
|
|
427
|
+
normx,
|
|
428
|
+
normy,
|
|
429
|
+
thebins,
|
|
430
|
+
normalized=norm,
|
|
431
|
+
sigma=sigma,
|
|
432
|
+
debug=debug,
|
|
433
|
+
)
|
|
286
434
|
|
|
287
435
|
|
|
288
|
-
def spatialmi(args):
|
|
436
|
+
def spatialmi(args: Any) -> None:
|
|
437
|
+
"""
|
|
438
|
+
Compute spatial mutual information (MI) between two 3D images over a specified neighborhood.
|
|
439
|
+
|
|
440
|
+
This function reads two input NIfTI images and their corresponding masks, computes the
|
|
441
|
+
mutual information between the images within a local neighborhood for each voxel,
|
|
442
|
+
and saves the result as a NIfTI file. Optional spatial filtering can be applied
|
|
443
|
+
before computing the MI.
|
|
444
|
+
|
|
445
|
+
Parameters
|
|
446
|
+
----------
|
|
447
|
+
args : Any
|
|
448
|
+
Parsed command-line arguments containing:
|
|
449
|
+
- inputfilename1 : str
|
|
450
|
+
Path to the first input NIfTI image.
|
|
451
|
+
- inputfilename2 : str
|
|
452
|
+
Path to the second input NIfTI image.
|
|
453
|
+
- maskfilename1 : str
|
|
454
|
+
Path to the mask for the first image.
|
|
455
|
+
- maskfilename2 : str
|
|
456
|
+
Path to the mask for the second image.
|
|
457
|
+
- index1 : int, optional
|
|
458
|
+
Index of the time point to use from the first image (default is 0).
|
|
459
|
+
- index2 : int, optional
|
|
460
|
+
Index of the time point to use from the second image (default is 0).
|
|
461
|
+
- radius : float
|
|
462
|
+
Neighborhood radius for computing mutual information.
|
|
463
|
+
- sigma : float, optional
|
|
464
|
+
Standard deviation for spatial smoothing (default is None).
|
|
465
|
+
- spherical : bool
|
|
466
|
+
Whether to use a spherical neighborhood (default is False).
|
|
467
|
+
- kernelwidth : float
|
|
468
|
+
Width of the kernel for neighborhood computation (default is None).
|
|
469
|
+
- norm : bool
|
|
470
|
+
Whether to normalize the data before computing MI (default is False).
|
|
471
|
+
- prebin : bool
|
|
472
|
+
Whether to pre-bin the data (default is False).
|
|
473
|
+
- debug : bool
|
|
474
|
+
Enable debug output (default is False).
|
|
475
|
+
- outputroot : str
|
|
476
|
+
Root name for the output NIfTI file.
|
|
477
|
+
|
|
478
|
+
Returns
|
|
479
|
+
-------
|
|
480
|
+
None
|
|
481
|
+
The function writes the computed spatial mutual information to a NIfTI file
|
|
482
|
+
named `<outputroot>_result.nii.gz`.
|
|
483
|
+
|
|
484
|
+
Notes
|
|
485
|
+
-----
|
|
486
|
+
- The function requires that both input images and their masks have matching spatial dimensions.
|
|
487
|
+
- If `sigma` is specified, spatial filtering is applied using a Gaussian kernel.
|
|
488
|
+
- The neighborhood is defined by the `radius` and `spherical` parameters.
|
|
489
|
+
- The output file contains mutual information values for each voxel in the masked region.
|
|
490
|
+
|
|
491
|
+
Examples
|
|
492
|
+
--------
|
|
493
|
+
>>> import argparse
|
|
494
|
+
>>> args = argparse.Namespace(
|
|
495
|
+
... inputfilename1='image1.nii.gz',
|
|
496
|
+
... inputfilename2='image2.nii.gz',
|
|
497
|
+
... maskfilename1='mask1.nii.gz',
|
|
498
|
+
... maskfilename2='mask2.nii.gz',
|
|
499
|
+
... index1=0,
|
|
500
|
+
... index2=0,
|
|
501
|
+
... radius=5.0,
|
|
502
|
+
... sigma=None,
|
|
503
|
+
... spherical=True,
|
|
504
|
+
... kernelwidth=None,
|
|
505
|
+
... norm=False,
|
|
506
|
+
... prebin=False,
|
|
507
|
+
... debug=False,
|
|
508
|
+
... outputroot='output'
|
|
509
|
+
... )
|
|
510
|
+
>>> spatialmi(args)
|
|
511
|
+
"""
|
|
289
512
|
global thebins
|
|
290
513
|
thebins = None
|
|
291
514
|
|
|
@@ -352,7 +575,7 @@ def spatialmi(args):
|
|
|
352
575
|
totalmask = mask1_data * mask2_data
|
|
353
576
|
print(f"totalmask.shape = {totalmask.shape}")
|
|
354
577
|
xsize, ysize, numslices, timepoints = tide_io.parseniftidims(thedims1)
|
|
355
|
-
outputdata = image1
|
|
578
|
+
outputdata = np.zeros_like(image1)
|
|
356
579
|
|
|
357
580
|
# spatial filter if desired
|
|
358
581
|
if args.sigma is not None:
|