rapidtide 2.9.5__py3-none-any.whl → 3.1.3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- cloud/gmscalc-HCPYA +1 -1
- cloud/mount-and-run +2 -0
- cloud/rapidtide-HCPYA +3 -3
- rapidtide/Colortables.py +538 -38
- rapidtide/OrthoImageItem.py +1094 -51
- rapidtide/RapidtideDataset.py +1709 -114
- rapidtide/__init__.py +0 -8
- rapidtide/_version.py +4 -4
- rapidtide/calccoherence.py +242 -97
- rapidtide/calcnullsimfunc.py +240 -140
- rapidtide/calcsimfunc.py +314 -129
- rapidtide/correlate.py +1211 -389
- rapidtide/data/examples/src/testLD +56 -0
- rapidtide/data/examples/src/test_findmaxlag.py +2 -2
- rapidtide/data/examples/src/test_mlregressallt.py +32 -17
- rapidtide/data/examples/src/testalign +1 -1
- rapidtide/data/examples/src/testatlasaverage +35 -7
- rapidtide/data/examples/src/testboth +21 -0
- rapidtide/data/examples/src/testcifti +11 -0
- rapidtide/data/examples/src/testdelayvar +13 -0
- rapidtide/data/examples/src/testdlfilt +25 -0
- rapidtide/data/examples/src/testfft +35 -0
- rapidtide/data/examples/src/testfileorfloat +37 -0
- rapidtide/data/examples/src/testfmri +94 -27
- rapidtide/data/examples/src/testfuncs +3 -3
- rapidtide/data/examples/src/testglmfilt +8 -6
- rapidtide/data/examples/src/testhappy +84 -51
- rapidtide/data/examples/src/testinitdelay +19 -0
- rapidtide/data/examples/src/testmodels +33 -0
- rapidtide/data/examples/src/testnewrefine +26 -0
- rapidtide/data/examples/src/testnoiseamp +21 -0
- rapidtide/data/examples/src/testppgproc +17 -0
- rapidtide/data/examples/src/testrefineonly +22 -0
- rapidtide/data/examples/src/testretro +26 -13
- rapidtide/data/examples/src/testretrolagtcs +16 -0
- rapidtide/data/examples/src/testrolloff +11 -0
- rapidtide/data/examples/src/testsimdata +45 -28
- rapidtide/data/models/model_cnn_pytorch/loss.png +0 -0
- rapidtide/data/models/model_cnn_pytorch/loss.txt +1 -0
- rapidtide/data/models/model_cnn_pytorch/model.pth +0 -0
- rapidtide/data/models/model_cnn_pytorch/model_meta.json +68 -0
- rapidtide/data/models/model_cnn_pytorch_fulldata/loss.png +0 -0
- rapidtide/data/models/model_cnn_pytorch_fulldata/loss.txt +1 -0
- rapidtide/data/models/model_cnn_pytorch_fulldata/model.pth +0 -0
- rapidtide/data/models/model_cnn_pytorch_fulldata/model_meta.json +80 -0
- rapidtide/data/models/model_cnnbp_pytorch_fullldata/loss.png +0 -0
- rapidtide/data/models/model_cnnbp_pytorch_fullldata/loss.txt +1 -0
- rapidtide/data/models/model_cnnbp_pytorch_fullldata/model.pth +0 -0
- rapidtide/data/models/model_cnnbp_pytorch_fullldata/model_meta.json +138 -0
- rapidtide/data/models/model_cnnfft_pytorch_fulldata/loss.png +0 -0
- rapidtide/data/models/model_cnnfft_pytorch_fulldata/loss.txt +1 -0
- rapidtide/data/models/model_cnnfft_pytorch_fulldata/model.pth +0 -0
- rapidtide/data/models/model_cnnfft_pytorch_fulldata/model_meta.json +128 -0
- rapidtide/data/models/model_ppgattention_pytorch_w128_fulldata/loss.png +0 -0
- rapidtide/data/models/model_ppgattention_pytorch_w128_fulldata/loss.txt +1 -0
- rapidtide/data/models/model_ppgattention_pytorch_w128_fulldata/model.pth +0 -0
- rapidtide/data/models/model_ppgattention_pytorch_w128_fulldata/model_meta.json +49 -0
- rapidtide/data/models/model_revised_tf2/model.keras +0 -0
- rapidtide/data/models/{model_serdar → model_revised_tf2}/model_meta.json +1 -1
- rapidtide/data/models/model_serdar2_tf2/model.keras +0 -0
- rapidtide/data/models/{model_serdar2 → model_serdar2_tf2}/model_meta.json +1 -1
- rapidtide/data/models/model_serdar_tf2/model.keras +0 -0
- rapidtide/data/models/{model_revised → model_serdar_tf2}/model_meta.json +1 -1
- rapidtide/data/reference/HCP1200v2_MTT_2mm.nii.gz +0 -0
- rapidtide/data/reference/HCP1200v2_binmask_2mm.nii.gz +0 -0
- rapidtide/data/reference/HCP1200v2_csf_2mm.nii.gz +0 -0
- rapidtide/data/reference/HCP1200v2_gray_2mm.nii.gz +0 -0
- rapidtide/data/reference/HCP1200v2_graylaghist.json +7 -0
- rapidtide/data/reference/HCP1200v2_graylaghist.tsv.gz +0 -0
- rapidtide/data/reference/HCP1200v2_laghist.json +7 -0
- rapidtide/data/reference/HCP1200v2_laghist.tsv.gz +0 -0
- rapidtide/data/reference/HCP1200v2_mask_2mm.nii.gz +0 -0
- rapidtide/data/reference/HCP1200v2_maxcorr_2mm.nii.gz +0 -0
- rapidtide/data/reference/HCP1200v2_maxtime_2mm.nii.gz +0 -0
- rapidtide/data/reference/HCP1200v2_maxwidth_2mm.nii.gz +0 -0
- rapidtide/data/reference/HCP1200v2_negmask_2mm.nii.gz +0 -0
- rapidtide/data/reference/HCP1200v2_timepercentile_2mm.nii.gz +0 -0
- rapidtide/data/reference/HCP1200v2_white_2mm.nii.gz +0 -0
- rapidtide/data/reference/HCP1200v2_whitelaghist.json +7 -0
- rapidtide/data/reference/HCP1200v2_whitelaghist.tsv.gz +0 -0
- rapidtide/data/reference/JHU-ArterialTerritoriesNoVent-LVL1-seg2.xml +131 -0
- rapidtide/data/reference/JHU-ArterialTerritoriesNoVent-LVL1-seg2_regions.txt +60 -0
- rapidtide/data/reference/JHU-ArterialTerritoriesNoVent-LVL1-seg2_space-MNI152NLin6Asym_2mm.nii.gz +0 -0
- rapidtide/data/reference/JHU-ArterialTerritoriesNoVent-LVL1_space-MNI152NLin2009cAsym_2mm.nii.gz +0 -0
- rapidtide/data/reference/JHU-ArterialTerritoriesNoVent-LVL1_space-MNI152NLin2009cAsym_2mm_mask.nii.gz +0 -0
- rapidtide/data/reference/JHU-ArterialTerritoriesNoVent-LVL1_space-MNI152NLin6Asym_2mm_mask.nii.gz +0 -0
- rapidtide/data/reference/JHU-ArterialTerritoriesNoVent-LVL2_space-MNI152NLin6Asym_2mm_mask.nii.gz +0 -0
- rapidtide/data/reference/MNI152_T1_1mm_Brain_FAST_seg.nii.gz +0 -0
- rapidtide/data/reference/MNI152_T1_1mm_Brain_Mask.nii.gz +0 -0
- rapidtide/data/reference/MNI152_T1_2mm_Brain_FAST_seg.nii.gz +0 -0
- rapidtide/data/reference/MNI152_T1_2mm_Brain_Mask.nii.gz +0 -0
- rapidtide/decorators.py +91 -0
- rapidtide/dlfilter.py +2553 -414
- rapidtide/dlfiltertorch.py +5201 -0
- rapidtide/externaltools.py +328 -13
- rapidtide/fMRIData_class.py +178 -0
- rapidtide/ffttools.py +168 -0
- rapidtide/filter.py +2704 -1462
- rapidtide/fit.py +2361 -579
- rapidtide/genericmultiproc.py +197 -0
- rapidtide/happy_supportfuncs.py +3255 -548
- rapidtide/helper_classes.py +590 -1181
- rapidtide/io.py +2569 -468
- rapidtide/linfitfiltpass.py +784 -0
- rapidtide/makelaggedtcs.py +267 -97
- rapidtide/maskutil.py +555 -25
- rapidtide/miscmath.py +867 -137
- rapidtide/multiproc.py +217 -44
- rapidtide/patchmatch.py +752 -0
- rapidtide/peakeval.py +32 -32
- rapidtide/ppgproc.py +2205 -0
- rapidtide/qualitycheck.py +353 -40
- rapidtide/refinedelay.py +854 -0
- rapidtide/refineregressor.py +939 -0
- rapidtide/resample.py +725 -204
- rapidtide/scripts/__init__.py +1 -0
- rapidtide/scripts/{adjustoffset → adjustoffset.py} +7 -2
- rapidtide/scripts/{aligntcs → aligntcs.py} +7 -2
- rapidtide/scripts/{applydlfilter → applydlfilter.py} +7 -2
- rapidtide/scripts/applyppgproc.py +28 -0
- rapidtide/scripts/{atlasaverage → atlasaverage.py} +7 -2
- rapidtide/scripts/{atlastool → atlastool.py} +7 -2
- rapidtide/scripts/{calcicc → calcicc.py} +7 -2
- rapidtide/scripts/{calctexticc → calctexticc.py} +7 -2
- rapidtide/scripts/{calcttest → calcttest.py} +7 -2
- rapidtide/scripts/{ccorrica → ccorrica.py} +7 -2
- rapidtide/scripts/delayvar.py +28 -0
- rapidtide/scripts/{diffrois → diffrois.py} +7 -2
- rapidtide/scripts/{endtidalproc → endtidalproc.py} +7 -2
- rapidtide/scripts/{fdica → fdica.py} +7 -2
- rapidtide/scripts/{filtnifti → filtnifti.py} +7 -2
- rapidtide/scripts/{filttc → filttc.py} +7 -2
- rapidtide/scripts/{fingerprint → fingerprint.py} +20 -16
- rapidtide/scripts/{fixtr → fixtr.py} +7 -2
- rapidtide/scripts/{gmscalc → gmscalc.py} +7 -2
- rapidtide/scripts/{happy → happy.py} +7 -2
- rapidtide/scripts/{happy2std → happy2std.py} +7 -2
- rapidtide/scripts/{happywarp → happywarp.py} +8 -4
- rapidtide/scripts/{histnifti → histnifti.py} +7 -2
- rapidtide/scripts/{histtc → histtc.py} +7 -2
- rapidtide/scripts/{glmfilt → linfitfilt.py} +7 -4
- rapidtide/scripts/{localflow → localflow.py} +7 -2
- rapidtide/scripts/{mergequality → mergequality.py} +7 -2
- rapidtide/scripts/{pairproc → pairproc.py} +7 -2
- rapidtide/scripts/{pairwisemergenifti → pairwisemergenifti.py} +7 -2
- rapidtide/scripts/{physiofreq → physiofreq.py} +7 -2
- rapidtide/scripts/{pixelcomp → pixelcomp.py} +7 -2
- rapidtide/scripts/{plethquality → plethquality.py} +7 -2
- rapidtide/scripts/{polyfitim → polyfitim.py} +7 -2
- rapidtide/scripts/{proj2flow → proj2flow.py} +7 -2
- rapidtide/scripts/{rankimage → rankimage.py} +7 -2
- rapidtide/scripts/{rapidtide → rapidtide.py} +7 -2
- rapidtide/scripts/{rapidtide2std → rapidtide2std.py} +7 -2
- rapidtide/scripts/{resamplenifti → resamplenifti.py} +7 -2
- rapidtide/scripts/{resampletc → resampletc.py} +7 -2
- rapidtide/scripts/retrolagtcs.py +28 -0
- rapidtide/scripts/retroregress.py +28 -0
- rapidtide/scripts/{roisummarize → roisummarize.py} +7 -2
- rapidtide/scripts/{runqualitycheck → runqualitycheck.py} +7 -2
- rapidtide/scripts/{showarbcorr → showarbcorr.py} +7 -2
- rapidtide/scripts/{showhist → showhist.py} +7 -2
- rapidtide/scripts/{showstxcorr → showstxcorr.py} +7 -2
- rapidtide/scripts/{showtc → showtc.py} +7 -2
- rapidtide/scripts/{showxcorr_legacy → showxcorr_legacy.py} +8 -8
- rapidtide/scripts/{showxcorrx → showxcorrx.py} +7 -2
- rapidtide/scripts/{showxy → showxy.py} +7 -2
- rapidtide/scripts/{simdata → simdata.py} +7 -2
- rapidtide/scripts/{spatialdecomp → spatialdecomp.py} +7 -2
- rapidtide/scripts/{spatialfit → spatialfit.py} +7 -2
- rapidtide/scripts/{spatialmi → spatialmi.py} +7 -2
- rapidtide/scripts/{spectrogram → spectrogram.py} +7 -2
- rapidtide/scripts/stupidramtricks.py +238 -0
- rapidtide/scripts/{synthASL → synthASL.py} +7 -2
- rapidtide/scripts/{tcfrom2col → tcfrom2col.py} +7 -2
- rapidtide/scripts/{tcfrom3col → tcfrom3col.py} +7 -2
- rapidtide/scripts/{temporaldecomp → temporaldecomp.py} +7 -2
- rapidtide/scripts/{testhrv → testhrv.py} +1 -1
- rapidtide/scripts/{threeD → threeD.py} +7 -2
- rapidtide/scripts/{tidepool → tidepool.py} +7 -2
- rapidtide/scripts/{variabilityizer → variabilityizer.py} +7 -2
- rapidtide/simFuncClasses.py +2113 -0
- rapidtide/simfuncfit.py +312 -108
- rapidtide/stats.py +579 -247
- rapidtide/tests/.coveragerc +27 -6
- rapidtide-2.9.5.data/scripts/fdica → rapidtide/tests/cleanposttest +4 -6
- rapidtide/tests/happycomp +9 -0
- rapidtide/tests/resethappytargets +1 -1
- rapidtide/tests/resetrapidtidetargets +1 -1
- rapidtide/tests/resettargets +1 -1
- rapidtide/tests/runlocaltest +3 -3
- rapidtide/tests/showkernels +1 -1
- rapidtide/tests/test_aliasedcorrelate.py +4 -4
- rapidtide/tests/test_aligntcs.py +1 -1
- rapidtide/tests/test_calcicc.py +1 -1
- rapidtide/tests/test_cleanregressor.py +184 -0
- rapidtide/tests/test_congrid.py +70 -81
- rapidtide/tests/test_correlate.py +1 -1
- rapidtide/tests/test_corrpass.py +4 -4
- rapidtide/tests/test_delayestimation.py +54 -59
- rapidtide/tests/test_dlfiltertorch.py +437 -0
- rapidtide/tests/test_doresample.py +2 -2
- rapidtide/tests/test_externaltools.py +69 -0
- rapidtide/tests/test_fastresampler.py +9 -5
- rapidtide/tests/test_filter.py +96 -57
- rapidtide/tests/test_findmaxlag.py +50 -19
- rapidtide/tests/test_fullrunhappy_v1.py +15 -10
- rapidtide/tests/test_fullrunhappy_v2.py +19 -13
- rapidtide/tests/test_fullrunhappy_v3.py +28 -13
- rapidtide/tests/test_fullrunhappy_v4.py +30 -11
- rapidtide/tests/test_fullrunhappy_v5.py +62 -0
- rapidtide/tests/test_fullrunrapidtide_v1.py +61 -7
- rapidtide/tests/test_fullrunrapidtide_v2.py +27 -15
- rapidtide/tests/test_fullrunrapidtide_v3.py +28 -8
- rapidtide/tests/test_fullrunrapidtide_v4.py +16 -8
- rapidtide/tests/test_fullrunrapidtide_v5.py +15 -6
- rapidtide/tests/test_fullrunrapidtide_v6.py +142 -0
- rapidtide/tests/test_fullrunrapidtide_v7.py +114 -0
- rapidtide/tests/test_fullrunrapidtide_v8.py +66 -0
- rapidtide/tests/test_getparsers.py +158 -0
- rapidtide/tests/test_io.py +59 -18
- rapidtide/tests/{test_glmpass.py → test_linfitfiltpass.py} +10 -10
- rapidtide/tests/test_mi.py +1 -1
- rapidtide/tests/test_miscmath.py +1 -1
- rapidtide/tests/test_motionregress.py +5 -5
- rapidtide/tests/test_nullcorr.py +6 -9
- rapidtide/tests/test_padvec.py +216 -0
- rapidtide/tests/test_parserfuncs.py +101 -0
- rapidtide/tests/test_phaseanalysis.py +1 -1
- rapidtide/tests/test_rapidtideparser.py +59 -53
- rapidtide/tests/test_refinedelay.py +296 -0
- rapidtide/tests/test_runmisc.py +5 -5
- rapidtide/tests/test_sharedmem.py +60 -0
- rapidtide/tests/test_simroundtrip.py +132 -0
- rapidtide/tests/test_simulate.py +1 -1
- rapidtide/tests/test_stcorrelate.py +4 -2
- rapidtide/tests/test_timeshift.py +2 -2
- rapidtide/tests/test_valtoindex.py +1 -1
- rapidtide/tests/test_zRapidtideDataset.py +5 -3
- rapidtide/tests/utils.py +10 -9
- rapidtide/tidepoolTemplate.py +88 -70
- rapidtide/tidepoolTemplate.ui +60 -46
- rapidtide/tidepoolTemplate_alt.py +88 -53
- rapidtide/tidepoolTemplate_alt.ui +62 -52
- rapidtide/tidepoolTemplate_alt_qt6.py +921 -0
- rapidtide/tidepoolTemplate_big.py +1125 -0
- rapidtide/tidepoolTemplate_big.ui +2386 -0
- rapidtide/tidepoolTemplate_big_qt6.py +1129 -0
- rapidtide/tidepoolTemplate_qt6.py +793 -0
- rapidtide/util.py +1389 -148
- rapidtide/voxelData.py +1048 -0
- rapidtide/wiener.py +138 -25
- rapidtide/wiener2.py +114 -8
- rapidtide/workflows/adjustoffset.py +107 -5
- rapidtide/workflows/aligntcs.py +86 -3
- rapidtide/workflows/applydlfilter.py +231 -89
- rapidtide/workflows/applyppgproc.py +540 -0
- rapidtide/workflows/atlasaverage.py +309 -48
- rapidtide/workflows/atlastool.py +130 -9
- rapidtide/workflows/calcSimFuncMap.py +490 -0
- rapidtide/workflows/calctexticc.py +202 -10
- rapidtide/workflows/ccorrica.py +123 -15
- rapidtide/workflows/cleanregressor.py +415 -0
- rapidtide/workflows/delayvar.py +1268 -0
- rapidtide/workflows/diffrois.py +84 -6
- rapidtide/workflows/endtidalproc.py +149 -9
- rapidtide/workflows/fdica.py +197 -17
- rapidtide/workflows/filtnifti.py +71 -4
- rapidtide/workflows/filttc.py +76 -5
- rapidtide/workflows/fitSimFuncMap.py +578 -0
- rapidtide/workflows/fixtr.py +74 -4
- rapidtide/workflows/gmscalc.py +116 -6
- rapidtide/workflows/happy.py +1242 -480
- rapidtide/workflows/happy2std.py +145 -13
- rapidtide/workflows/happy_parser.py +277 -59
- rapidtide/workflows/histnifti.py +120 -4
- rapidtide/workflows/histtc.py +85 -4
- rapidtide/workflows/{glmfilt.py → linfitfilt.py} +128 -14
- rapidtide/workflows/localflow.py +329 -29
- rapidtide/workflows/mergequality.py +80 -4
- rapidtide/workflows/niftidecomp.py +323 -19
- rapidtide/workflows/niftistats.py +178 -8
- rapidtide/workflows/pairproc.py +99 -5
- rapidtide/workflows/pairwisemergenifti.py +86 -3
- rapidtide/workflows/parser_funcs.py +1488 -56
- rapidtide/workflows/physiofreq.py +139 -12
- rapidtide/workflows/pixelcomp.py +211 -9
- rapidtide/workflows/plethquality.py +105 -23
- rapidtide/workflows/polyfitim.py +159 -19
- rapidtide/workflows/proj2flow.py +76 -3
- rapidtide/workflows/rankimage.py +115 -8
- rapidtide/workflows/rapidtide.py +1833 -1919
- rapidtide/workflows/rapidtide2std.py +101 -3
- rapidtide/workflows/rapidtide_parser.py +607 -372
- rapidtide/workflows/refineDelayMap.py +249 -0
- rapidtide/workflows/refineRegressor.py +1215 -0
- rapidtide/workflows/regressfrommaps.py +308 -0
- rapidtide/workflows/resamplenifti.py +86 -4
- rapidtide/workflows/resampletc.py +92 -4
- rapidtide/workflows/retrolagtcs.py +442 -0
- rapidtide/workflows/retroregress.py +1501 -0
- rapidtide/workflows/roisummarize.py +176 -7
- rapidtide/workflows/runqualitycheck.py +72 -7
- rapidtide/workflows/showarbcorr.py +172 -16
- rapidtide/workflows/showhist.py +87 -3
- rapidtide/workflows/showstxcorr.py +161 -4
- rapidtide/workflows/showtc.py +172 -10
- rapidtide/workflows/showxcorrx.py +250 -62
- rapidtide/workflows/showxy.py +186 -16
- rapidtide/workflows/simdata.py +418 -112
- rapidtide/workflows/spatialfit.py +83 -8
- rapidtide/workflows/spatialmi.py +252 -29
- rapidtide/workflows/spectrogram.py +306 -33
- rapidtide/workflows/synthASL.py +157 -6
- rapidtide/workflows/tcfrom2col.py +77 -3
- rapidtide/workflows/tcfrom3col.py +75 -3
- rapidtide/workflows/tidepool.py +3829 -666
- rapidtide/workflows/utils.py +45 -19
- rapidtide/workflows/utils_doc.py +293 -0
- rapidtide/workflows/variabilityizer.py +118 -5
- {rapidtide-2.9.5.dist-info → rapidtide-3.1.3.dist-info}/METADATA +30 -223
- rapidtide-3.1.3.dist-info/RECORD +393 -0
- {rapidtide-2.9.5.dist-info → rapidtide-3.1.3.dist-info}/WHEEL +1 -1
- rapidtide-3.1.3.dist-info/entry_points.txt +65 -0
- rapidtide-3.1.3.dist-info/top_level.txt +2 -0
- rapidtide/calcandfitcorrpairs.py +0 -262
- rapidtide/data/examples/src/testoutputsize +0 -45
- rapidtide/data/models/model_revised/model.h5 +0 -0
- rapidtide/data/models/model_serdar/model.h5 +0 -0
- rapidtide/data/models/model_serdar2/model.h5 +0 -0
- rapidtide/data/reference/ASPECTS_nlin_asym_09c_2mm.nii.gz +0 -0
- rapidtide/data/reference/ASPECTS_nlin_asym_09c_2mm_mask.nii.gz +0 -0
- rapidtide/data/reference/ATTbasedFlowTerritories_split_nlin_asym_09c_2mm.nii.gz +0 -0
- rapidtide/data/reference/ATTbasedFlowTerritories_split_nlin_asym_09c_2mm_mask.nii.gz +0 -0
- rapidtide/data/reference/HCP1200_binmask_2mm_2009c_asym.nii.gz +0 -0
- rapidtide/data/reference/HCP1200_lag_2mm_2009c_asym.nii.gz +0 -0
- rapidtide/data/reference/HCP1200_mask_2mm_2009c_asym.nii.gz +0 -0
- rapidtide/data/reference/HCP1200_negmask_2mm_2009c_asym.nii.gz +0 -0
- rapidtide/data/reference/HCP1200_sigma_2mm_2009c_asym.nii.gz +0 -0
- rapidtide/data/reference/HCP1200_strength_2mm_2009c_asym.nii.gz +0 -0
- rapidtide/glmpass.py +0 -434
- rapidtide/refine_factored.py +0 -641
- rapidtide/scripts/retroglm +0 -23
- rapidtide/workflows/glmfrommaps.py +0 -202
- rapidtide/workflows/retroglm.py +0 -643
- rapidtide-2.9.5.data/scripts/adjustoffset +0 -23
- rapidtide-2.9.5.data/scripts/aligntcs +0 -23
- rapidtide-2.9.5.data/scripts/applydlfilter +0 -23
- rapidtide-2.9.5.data/scripts/atlasaverage +0 -23
- rapidtide-2.9.5.data/scripts/atlastool +0 -23
- rapidtide-2.9.5.data/scripts/calcicc +0 -22
- rapidtide-2.9.5.data/scripts/calctexticc +0 -23
- rapidtide-2.9.5.data/scripts/calcttest +0 -22
- rapidtide-2.9.5.data/scripts/ccorrica +0 -23
- rapidtide-2.9.5.data/scripts/diffrois +0 -23
- rapidtide-2.9.5.data/scripts/endtidalproc +0 -23
- rapidtide-2.9.5.data/scripts/filtnifti +0 -23
- rapidtide-2.9.5.data/scripts/filttc +0 -23
- rapidtide-2.9.5.data/scripts/fingerprint +0 -593
- rapidtide-2.9.5.data/scripts/fixtr +0 -23
- rapidtide-2.9.5.data/scripts/glmfilt +0 -24
- rapidtide-2.9.5.data/scripts/gmscalc +0 -22
- rapidtide-2.9.5.data/scripts/happy +0 -25
- rapidtide-2.9.5.data/scripts/happy2std +0 -23
- rapidtide-2.9.5.data/scripts/happywarp +0 -350
- rapidtide-2.9.5.data/scripts/histnifti +0 -23
- rapidtide-2.9.5.data/scripts/histtc +0 -23
- rapidtide-2.9.5.data/scripts/localflow +0 -23
- rapidtide-2.9.5.data/scripts/mergequality +0 -23
- rapidtide-2.9.5.data/scripts/pairproc +0 -23
- rapidtide-2.9.5.data/scripts/pairwisemergenifti +0 -23
- rapidtide-2.9.5.data/scripts/physiofreq +0 -23
- rapidtide-2.9.5.data/scripts/pixelcomp +0 -23
- rapidtide-2.9.5.data/scripts/plethquality +0 -23
- rapidtide-2.9.5.data/scripts/polyfitim +0 -23
- rapidtide-2.9.5.data/scripts/proj2flow +0 -23
- rapidtide-2.9.5.data/scripts/rankimage +0 -23
- rapidtide-2.9.5.data/scripts/rapidtide +0 -23
- rapidtide-2.9.5.data/scripts/rapidtide2std +0 -23
- rapidtide-2.9.5.data/scripts/resamplenifti +0 -23
- rapidtide-2.9.5.data/scripts/resampletc +0 -23
- rapidtide-2.9.5.data/scripts/retroglm +0 -23
- rapidtide-2.9.5.data/scripts/roisummarize +0 -23
- rapidtide-2.9.5.data/scripts/runqualitycheck +0 -23
- rapidtide-2.9.5.data/scripts/showarbcorr +0 -23
- rapidtide-2.9.5.data/scripts/showhist +0 -23
- rapidtide-2.9.5.data/scripts/showstxcorr +0 -23
- rapidtide-2.9.5.data/scripts/showtc +0 -23
- rapidtide-2.9.5.data/scripts/showxcorr_legacy +0 -536
- rapidtide-2.9.5.data/scripts/showxcorrx +0 -23
- rapidtide-2.9.5.data/scripts/showxy +0 -23
- rapidtide-2.9.5.data/scripts/simdata +0 -23
- rapidtide-2.9.5.data/scripts/spatialdecomp +0 -23
- rapidtide-2.9.5.data/scripts/spatialfit +0 -23
- rapidtide-2.9.5.data/scripts/spatialmi +0 -23
- rapidtide-2.9.5.data/scripts/spectrogram +0 -23
- rapidtide-2.9.5.data/scripts/synthASL +0 -23
- rapidtide-2.9.5.data/scripts/tcfrom2col +0 -23
- rapidtide-2.9.5.data/scripts/tcfrom3col +0 -23
- rapidtide-2.9.5.data/scripts/temporaldecomp +0 -23
- rapidtide-2.9.5.data/scripts/threeD +0 -236
- rapidtide-2.9.5.data/scripts/tidepool +0 -23
- rapidtide-2.9.5.data/scripts/variabilityizer +0 -23
- rapidtide-2.9.5.dist-info/RECORD +0 -357
- rapidtide-2.9.5.dist-info/top_level.txt +0 -86
- {rapidtide-2.9.5.dist-info → rapidtide-3.1.3.dist-info/licenses}/LICENSE +0 -0
rapidtide/workflows/atlastool.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.
|
|
@@ -20,18 +20,42 @@ import argparse
|
|
|
20
20
|
import os
|
|
21
21
|
import subprocess
|
|
22
22
|
import sys
|
|
23
|
+
from argparse import Namespace
|
|
23
24
|
from glob import glob
|
|
25
|
+
from typing import Any, Callable, Dict, List, Optional, Tuple, Union
|
|
24
26
|
|
|
25
27
|
import numpy as np
|
|
28
|
+
from numpy.typing import NDArray
|
|
26
29
|
|
|
27
30
|
import rapidtide.externaltools as tide_exttools
|
|
28
31
|
import rapidtide.io as tide_io
|
|
29
32
|
import rapidtide.workflows.parser_funcs as pf
|
|
30
33
|
|
|
31
34
|
|
|
32
|
-
def _get_parser():
|
|
35
|
+
def _get_parser() -> Any:
|
|
33
36
|
"""
|
|
34
|
-
Argument parser for atlastool
|
|
37
|
+
Argument parser for atlastool.
|
|
38
|
+
|
|
39
|
+
This function constructs and returns an `argparse.ArgumentParser` object configured
|
|
40
|
+
with all the necessary arguments for the `atlastool` utility. It supports parsing
|
|
41
|
+
of NIfTI atlas files, with options for transforming, splitting, masking, and
|
|
42
|
+
reformatting atlas data.
|
|
43
|
+
|
|
44
|
+
Returns
|
|
45
|
+
-------
|
|
46
|
+
argparse.ArgumentParser
|
|
47
|
+
Configured argument parser for atlastool.
|
|
48
|
+
|
|
49
|
+
Notes
|
|
50
|
+
-----
|
|
51
|
+
The parser includes both required and optional arguments for handling NIfTI files,
|
|
52
|
+
including support for 3D and 4D output formats, splitting regions along the midline,
|
|
53
|
+
applying masks, and debugging options.
|
|
54
|
+
|
|
55
|
+
Examples
|
|
56
|
+
--------
|
|
57
|
+
>>> parser = _get_parser()
|
|
58
|
+
>>> args = parser.parse_args()
|
|
35
59
|
"""
|
|
36
60
|
parser = argparse.ArgumentParser(
|
|
37
61
|
prog="atlastool",
|
|
@@ -75,7 +99,7 @@ def _get_parser():
|
|
|
75
99
|
action="store",
|
|
76
100
|
type=lambda x: pf.is_float(parser, x),
|
|
77
101
|
metavar="FILE",
|
|
78
|
-
help=("
|
|
102
|
+
help=("Threshold for autogenerated mask (default is 0.25)."),
|
|
79
103
|
default=0.25,
|
|
80
104
|
)
|
|
81
105
|
parser.add_argument(
|
|
@@ -156,7 +180,80 @@ def _get_parser():
|
|
|
156
180
|
return parser
|
|
157
181
|
|
|
158
182
|
|
|
159
|
-
def atlastool(args):
|
|
183
|
+
def atlastool(args: Any) -> None:
|
|
184
|
+
"""
|
|
185
|
+
Process and convert atlas templates for neuroimaging analysis.
|
|
186
|
+
|
|
187
|
+
This function reads a template NIfTI file, reshapes it into a 4D array, and optionally
|
|
188
|
+
splits left-right regions, resamples to a target resolution, applies a mask, and saves
|
|
189
|
+
the processed data as a new NIfTI file. It supports both 3D and 4D input templates,
|
|
190
|
+
and can handle label files for region mapping.
|
|
191
|
+
|
|
192
|
+
Parameters
|
|
193
|
+
----------
|
|
194
|
+
args : Any
|
|
195
|
+
An object containing command-line arguments. Expected attributes include:
|
|
196
|
+
- inputtemplatename : str
|
|
197
|
+
Path to the input NIfTI template file.
|
|
198
|
+
- debug : bool
|
|
199
|
+
If True, print debug information.
|
|
200
|
+
- maxval : float, optional
|
|
201
|
+
Maximum value to truncate template data.
|
|
202
|
+
- labelfile : str, optional
|
|
203
|
+
Path to a text file containing region labels.
|
|
204
|
+
- dosplit : bool
|
|
205
|
+
If True, split regions into left and right hemispheres.
|
|
206
|
+
- LtoR : bool
|
|
207
|
+
If True, assign left hemisphere labels first.
|
|
208
|
+
- targetfile : str, optional
|
|
209
|
+
Path to a target NIfTI file for resampling.
|
|
210
|
+
- xfm : str, optional
|
|
211
|
+
Path to transformation file for resampling.
|
|
212
|
+
- maskfile : str, optional
|
|
213
|
+
Path to a mask NIfTI file.
|
|
214
|
+
- maskthresh : float
|
|
215
|
+
Threshold for generating mask from template if no maskfile is provided.
|
|
216
|
+
- removeemptyregions : bool
|
|
217
|
+
If True, remove regions with no voxels.
|
|
218
|
+
- volumeperregion : bool
|
|
219
|
+
If True, save each region as a separate volume; otherwise, save as a
|
|
220
|
+
single label map.
|
|
221
|
+
- outputtemplatename : str
|
|
222
|
+
Path for the output NIfTI file.
|
|
223
|
+
|
|
224
|
+
Returns
|
|
225
|
+
-------
|
|
226
|
+
None
|
|
227
|
+
This function does not return a value but saves processed data to disk.
|
|
228
|
+
|
|
229
|
+
Notes
|
|
230
|
+
-----
|
|
231
|
+
- The function supports both 3D and 4D input templates.
|
|
232
|
+
- If `targetfile` is provided, the template is resampled using FSL or ANTs.
|
|
233
|
+
- If `maskfile` is not provided, a mask is generated from the template using
|
|
234
|
+
`maskthresh`.
|
|
235
|
+
- Labels from `labelfile` are used in the output if provided.
|
|
236
|
+
|
|
237
|
+
Examples
|
|
238
|
+
--------
|
|
239
|
+
>>> import argparse
|
|
240
|
+
>>> args = argparse.Namespace(
|
|
241
|
+
... inputtemplatename='template.nii.gz',
|
|
242
|
+
... debug=False,
|
|
243
|
+
... maxval=None,
|
|
244
|
+
... labelfile='labels.txt',
|
|
245
|
+
... dosplit=True,
|
|
246
|
+
... LtoR=True,
|
|
247
|
+
... targetfile='target.nii.gz',
|
|
248
|
+
... xfm='transform.mat',
|
|
249
|
+
... maskfile=None,
|
|
250
|
+
... maskthresh=0.5,
|
|
251
|
+
... removeemptyregions=True,
|
|
252
|
+
... volumeperregion=False,
|
|
253
|
+
... outputtemplatename='output.nii.gz'
|
|
254
|
+
... )
|
|
255
|
+
>>> atlastool(args)
|
|
256
|
+
"""
|
|
160
257
|
if args.debug:
|
|
161
258
|
print(args)
|
|
162
259
|
|
|
@@ -198,13 +295,13 @@ def atlastool(args):
|
|
|
198
295
|
if args.debug:
|
|
199
296
|
print(f"numregions is {numregions}")
|
|
200
297
|
rs_template = np.reshape(template_data, numvoxels)
|
|
298
|
+
print(f"{rs_template.shape=}")
|
|
201
299
|
templatevoxels = np.zeros((numvoxels, numregions))
|
|
202
300
|
validvoxels = np.where(rs_template > 0)[0]
|
|
203
301
|
print(f"{len(validvoxels)} valid voxels")
|
|
204
302
|
for thevoxel in validvoxels:
|
|
205
303
|
templatevoxels[thevoxel, int(round(rs_template[thevoxel], 0)) - 1] = 1
|
|
206
|
-
|
|
207
|
-
maskvoxels[np.where(maskvoxels > args.maskthresh)] = 1
|
|
304
|
+
print(f"{templatevoxels.shape=}")
|
|
208
305
|
|
|
209
306
|
# read in the label file, if there is one
|
|
210
307
|
if args.labelfile is not None:
|
|
@@ -386,8 +483,24 @@ def atlastool(args):
|
|
|
386
483
|
f"Dimensions of {args.maskfile} do not match the target dimensions - exiting"
|
|
387
484
|
)
|
|
388
485
|
else:
|
|
389
|
-
maskvoxels = np.max(templatevoxels, axis=1)
|
|
390
|
-
|
|
486
|
+
maskvoxels = np.max(templatevoxels, axis=1)
|
|
487
|
+
mask_hdr = template_hdr.copy()
|
|
488
|
+
mask_hdr["dim"][4] = 1
|
|
489
|
+
if args.debug:
|
|
490
|
+
tide_io.savetonifti(
|
|
491
|
+
maskvoxels.reshape((xsize, ysize, numslices)),
|
|
492
|
+
mask_hdr,
|
|
493
|
+
"masktemp1",
|
|
494
|
+
)
|
|
495
|
+
maskvoxels = np.where(maskvoxels > args.maskthresh, 1, 0)
|
|
496
|
+
maskvoxels = maskvoxels.astype(np.uint16)
|
|
497
|
+
if args.debug:
|
|
498
|
+
tide_io.savetonifti(
|
|
499
|
+
maskvoxels.reshape((xsize, ysize, numslices)),
|
|
500
|
+
mask_hdr,
|
|
501
|
+
"masktemp2",
|
|
502
|
+
)
|
|
503
|
+
print(f"{np.sum(maskvoxels)=}")
|
|
391
504
|
|
|
392
505
|
# eliminate any newly missing values
|
|
393
506
|
numnonzero = 0
|
|
@@ -404,9 +517,17 @@ def atlastool(args):
|
|
|
404
517
|
else:
|
|
405
518
|
print(f"no voxels with value {i + 1} - removing.")
|
|
406
519
|
numregions = numnonzero
|
|
520
|
+
else:
|
|
521
|
+
numnonzero = numregions
|
|
407
522
|
|
|
408
523
|
for theregion in range(numregions):
|
|
524
|
+
if args.debug:
|
|
525
|
+
print(f"region {theregion}:")
|
|
526
|
+
print(f"\tprior to masking: {np.sum(templatevoxels[:, theregion])} voxels")
|
|
409
527
|
templatevoxels[:, theregion] *= maskvoxels
|
|
528
|
+
if args.debug:
|
|
529
|
+
print(f"\tafter masking: {np.sum(templatevoxels[:, theregion])} voxels")
|
|
530
|
+
print()
|
|
410
531
|
|
|
411
532
|
if args.volumeperregion:
|
|
412
533
|
outputvoxels = templatevoxels[:, : numnonzero + 1]
|
|
@@ -0,0 +1,490 @@
|
|
|
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
|
+
|
|
24
|
+
import rapidtide.calcsimfunc as tide_calcsimfunc
|
|
25
|
+
import rapidtide.io as tide_io
|
|
26
|
+
import rapidtide.linfitfiltpass as tide_linfitfiltpass
|
|
27
|
+
import rapidtide.makelaggedtcs as tide_makelagged
|
|
28
|
+
import rapidtide.stats as tide_stats
|
|
29
|
+
import rapidtide.util as tide_util
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def makeRIPTiDeRegressors(
|
|
33
|
+
initial_fmri_x: Any,
|
|
34
|
+
lagmin: Any,
|
|
35
|
+
lagmax: Any,
|
|
36
|
+
lagtcgenerator: Any,
|
|
37
|
+
LGR: Any,
|
|
38
|
+
nprocs: int = 1,
|
|
39
|
+
alwaysmultiproc: bool = False,
|
|
40
|
+
showprogressbar: bool = True,
|
|
41
|
+
chunksize: int = 1000,
|
|
42
|
+
targetstep: float = 2.5,
|
|
43
|
+
edgepad: int = 0,
|
|
44
|
+
rt_floattype: np.dtype = np.float64,
|
|
45
|
+
debug: bool = False,
|
|
46
|
+
) -> Tuple[NDArray, NDArray]:
|
|
47
|
+
"""
|
|
48
|
+
Generate regressors for RIPTiDe (Regressors for Inverse Temporal Deconvolution).
|
|
49
|
+
|
|
50
|
+
This function creates a set of lagged temporal regressors based on the provided
|
|
51
|
+
parameters, which are used in the context of fMRI data analysis for temporal
|
|
52
|
+
deconvolution. It leverages the `tide_makelagged.makelaggedtcs` function to
|
|
53
|
+
compute the actual regressor matrix.
|
|
54
|
+
|
|
55
|
+
Parameters
|
|
56
|
+
----------
|
|
57
|
+
initial_fmri_x : array_like
|
|
58
|
+
The initial fMRI time series data used to generate the regressors.
|
|
59
|
+
lagmin : float
|
|
60
|
+
The minimum lag (in seconds) to consider for regressor generation.
|
|
61
|
+
lagmax : float
|
|
62
|
+
The maximum lag (in seconds) to consider for regressor generation.
|
|
63
|
+
lagtcgenerator : callable
|
|
64
|
+
A function or callable object that generates lagged time courses.
|
|
65
|
+
LGR : object
|
|
66
|
+
An object containing parameters for the lagged time course generation.
|
|
67
|
+
nprocs : int, optional
|
|
68
|
+
Number of processes to use for parallel computation (default is 1).
|
|
69
|
+
alwaysmultiproc : bool, optional
|
|
70
|
+
If True, always use multiprocessing even for small datasets (default is False).
|
|
71
|
+
showprogressbar : bool, optional
|
|
72
|
+
If True, display a progress bar during computation (default is True).
|
|
73
|
+
chunksize : int, optional
|
|
74
|
+
Size of chunks for processing in multiprocessing (default is 1000).
|
|
75
|
+
targetstep : float, optional
|
|
76
|
+
Target step size (in seconds) between lags (default is 2.5).
|
|
77
|
+
edgepad : int, optional
|
|
78
|
+
Number of padding steps at the beginning and end of the lag range (default is 0).
|
|
79
|
+
rt_floattype : np.dtype, optional
|
|
80
|
+
Data type for the regressor matrix (default is np.float64).
|
|
81
|
+
debug : bool, optional
|
|
82
|
+
If True, print debug information during execution (default is False).
|
|
83
|
+
|
|
84
|
+
Returns
|
|
85
|
+
-------
|
|
86
|
+
tuple of (NDArray, NDArray)
|
|
87
|
+
A tuple containing:
|
|
88
|
+
- regressorset : NDArray
|
|
89
|
+
The computed regressor matrix of shape (num_lags, num_timepoints).
|
|
90
|
+
- delaystouse : NDArray
|
|
91
|
+
The array of delay values used for regressor generation.
|
|
92
|
+
|
|
93
|
+
Notes
|
|
94
|
+
-----
|
|
95
|
+
This function is intended for use in fMRI data analysis workflows where
|
|
96
|
+
temporal deconvolution is required. The regressors generated can be used
|
|
97
|
+
in subsequent steps such as GLM fitting or temporal filtering.
|
|
98
|
+
|
|
99
|
+
Examples
|
|
100
|
+
--------
|
|
101
|
+
>>> import numpy as np
|
|
102
|
+
>>> fmri_data = np.random.rand(100, 50)
|
|
103
|
+
>>> regressors, delays = makeRIPTiDeRegressors(
|
|
104
|
+
... initial_fmri_x=fmri_data,
|
|
105
|
+
... lagmin=0.0,
|
|
106
|
+
... lagmax=10.0,
|
|
107
|
+
... lagtcgenerator=my_lag_generator,
|
|
108
|
+
... LGR=my_lgr_object,
|
|
109
|
+
... nprocs=4,
|
|
110
|
+
... debug=True
|
|
111
|
+
... )
|
|
112
|
+
"""
|
|
113
|
+
# make the RIPTiDe evs
|
|
114
|
+
numdelays = int(np.round((lagmax - lagmin) / targetstep, 0))
|
|
115
|
+
numregressors = numdelays + 2 * edgepad
|
|
116
|
+
delaystep = (lagmax - lagmin) / numdelays
|
|
117
|
+
delaystouse = np.linspace(
|
|
118
|
+
lagmin - edgepad * delaystep,
|
|
119
|
+
lagmax + edgepad * delaystep,
|
|
120
|
+
numdelays + 2 * edgepad,
|
|
121
|
+
endpoint=True,
|
|
122
|
+
)
|
|
123
|
+
if debug:
|
|
124
|
+
print(f"{lagmin=}")
|
|
125
|
+
print(f"{lagmax=}")
|
|
126
|
+
print(f"{numdelays=}")
|
|
127
|
+
print(f"{edgepad=}")
|
|
128
|
+
print(f"{numregressors=}")
|
|
129
|
+
print(f"{delaystep=}")
|
|
130
|
+
print(f"{delaystouse=}, {len(delaystouse)}")
|
|
131
|
+
print(f"{len(initial_fmri_x)}")
|
|
132
|
+
|
|
133
|
+
regressorset = np.zeros((len(delaystouse), len(initial_fmri_x)), dtype=rt_floattype)
|
|
134
|
+
|
|
135
|
+
dummy = tide_makelagged.makelaggedtcs(
|
|
136
|
+
lagtcgenerator,
|
|
137
|
+
initial_fmri_x,
|
|
138
|
+
np.ones_like(delaystouse, dtype=np.float64),
|
|
139
|
+
delaystouse,
|
|
140
|
+
regressorset,
|
|
141
|
+
LGR=LGR,
|
|
142
|
+
nprocs=nprocs,
|
|
143
|
+
alwaysmultiproc=alwaysmultiproc,
|
|
144
|
+
showprogressbar=showprogressbar,
|
|
145
|
+
chunksize=chunksize,
|
|
146
|
+
rt_floattype=rt_floattype,
|
|
147
|
+
debug=debug,
|
|
148
|
+
)
|
|
149
|
+
|
|
150
|
+
if debug:
|
|
151
|
+
print(regressorset)
|
|
152
|
+
|
|
153
|
+
return regressorset, delaystouse
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
def calcSimFunc(
|
|
157
|
+
numvalidspatiallocs: Any,
|
|
158
|
+
fmri_data_valid: Any,
|
|
159
|
+
validsimcalcstart: Any,
|
|
160
|
+
validsimcalcend: Any,
|
|
161
|
+
osvalidsimcalcstart: Any,
|
|
162
|
+
osvalidsimcalcend: Any,
|
|
163
|
+
initial_fmri_x: Any,
|
|
164
|
+
os_fmri_x: Any,
|
|
165
|
+
theCorrelator: Any,
|
|
166
|
+
theMutualInformationator: Any,
|
|
167
|
+
cleaned_referencetc: Any,
|
|
168
|
+
corrout: Any,
|
|
169
|
+
regressorset: Any,
|
|
170
|
+
delayvals: Any,
|
|
171
|
+
sLFOfitmean: Any,
|
|
172
|
+
r2value: Any,
|
|
173
|
+
fitcoeff: Any,
|
|
174
|
+
fitNorm: Any,
|
|
175
|
+
meanval: Any,
|
|
176
|
+
corrscale: Any,
|
|
177
|
+
outputname: Any,
|
|
178
|
+
outcorrarray: Any,
|
|
179
|
+
validvoxels: Any,
|
|
180
|
+
nativecorrshape: Any,
|
|
181
|
+
theinputdata: Any,
|
|
182
|
+
theheader: Any,
|
|
183
|
+
lagmininpts: Any,
|
|
184
|
+
lagmaxinpts: Any,
|
|
185
|
+
thepass: Any,
|
|
186
|
+
optiondict: Any,
|
|
187
|
+
LGR: Any,
|
|
188
|
+
TimingLGR: Any,
|
|
189
|
+
similaritymetric: str = "correlation",
|
|
190
|
+
simcalcoffset: int = 0,
|
|
191
|
+
echocancel: bool = False,
|
|
192
|
+
checkpoint: bool = False,
|
|
193
|
+
nprocs: int = 1,
|
|
194
|
+
alwaysmultiproc: bool = False,
|
|
195
|
+
oversampfactor: int = 2,
|
|
196
|
+
interptype: str = "univariate",
|
|
197
|
+
showprogressbar: bool = True,
|
|
198
|
+
chunksize: int = 1000,
|
|
199
|
+
rt_floattype: np.dtype = np.float64,
|
|
200
|
+
mklthreads: int = 1,
|
|
201
|
+
threaddebug: bool = False,
|
|
202
|
+
debug: bool = False,
|
|
203
|
+
) -> str:
|
|
204
|
+
"""
|
|
205
|
+
Compute similarity metrics (correlation, mutual information, or RIPtiDe) between fMRI data and a reference time series.
|
|
206
|
+
|
|
207
|
+
This function performs similarity calculations across voxels using either correlation, mutual information,
|
|
208
|
+
or a hybrid method, depending on the specified `similaritymetric`. It supports multi-processing and can
|
|
209
|
+
optionally save intermediate results.
|
|
210
|
+
|
|
211
|
+
Parameters
|
|
212
|
+
----------
|
|
213
|
+
numvalidspatiallocs : Any
|
|
214
|
+
Number of valid spatial locations in the fMRI data.
|
|
215
|
+
fmri_data_valid : Any
|
|
216
|
+
Valid fMRI data array, typically of shape (n_voxels, n_timepoints).
|
|
217
|
+
validsimcalcstart : Any
|
|
218
|
+
Start index for valid timepoints to use in similarity calculation.
|
|
219
|
+
validsimcalcend : Any
|
|
220
|
+
End index for valid timepoints to use in similarity calculation.
|
|
221
|
+
osvalidsimcalcstart : Any
|
|
222
|
+
Start index for oversampled valid timepoints.
|
|
223
|
+
osvalidsimcalcend : Any
|
|
224
|
+
End index for oversampled valid timepoints.
|
|
225
|
+
initial_fmri_x : Any
|
|
226
|
+
Initial fMRI timepoints (e.g., for correlation).
|
|
227
|
+
os_fmri_x : Any
|
|
228
|
+
Oversampled fMRI timepoints.
|
|
229
|
+
theCorrelator : Any
|
|
230
|
+
Correlator object used for computing correlations.
|
|
231
|
+
theMutualInformationator : Any
|
|
232
|
+
Mutual information calculator object.
|
|
233
|
+
cleaned_referencetc : Any
|
|
234
|
+
Cleaned reference time series.
|
|
235
|
+
corrout : Any
|
|
236
|
+
Output array for storing correlation results.
|
|
237
|
+
regressorset : Any
|
|
238
|
+
Set of regressors for fitting.
|
|
239
|
+
delayvals : Any
|
|
240
|
+
Array of delay values for RIPtiDe calculation.
|
|
241
|
+
sLFOfitmean : Any
|
|
242
|
+
Mean value for fitting.
|
|
243
|
+
r2value : Any
|
|
244
|
+
R² values for model fit.
|
|
245
|
+
fitcoeff : Any
|
|
246
|
+
Fitting coefficients.
|
|
247
|
+
fitNorm : Any
|
|
248
|
+
Normalization values for fitting.
|
|
249
|
+
meanval : Any
|
|
250
|
+
Mean value used in normalization.
|
|
251
|
+
corrscale : Any
|
|
252
|
+
Correlation scale for lag calculation.
|
|
253
|
+
outputname : Any
|
|
254
|
+
Base name for output files.
|
|
255
|
+
outcorrarray : Any
|
|
256
|
+
Array to store correlation output for checkpointing.
|
|
257
|
+
validvoxels : Any
|
|
258
|
+
Indices of valid voxels.
|
|
259
|
+
nativecorrshape : Any
|
|
260
|
+
Shape of the native correlation array.
|
|
261
|
+
theinputdata : Any
|
|
262
|
+
Input data object.
|
|
263
|
+
theheader : Any
|
|
264
|
+
Header information for NIfTI output.
|
|
265
|
+
lagmininpts : Any
|
|
266
|
+
Minimum lag in timepoints.
|
|
267
|
+
lagmaxinpts : Any
|
|
268
|
+
Maximum lag in timepoints.
|
|
269
|
+
thepass : Any
|
|
270
|
+
Pass number for tracking multiple iterations.
|
|
271
|
+
optiondict : Any
|
|
272
|
+
Dictionary of options for saving results.
|
|
273
|
+
LGR : Any
|
|
274
|
+
Logger for general messages.
|
|
275
|
+
TimingLGR : Any
|
|
276
|
+
Logger for timing information.
|
|
277
|
+
similaritymetric : str, optional
|
|
278
|
+
Type of similarity metric to compute. Options are:
|
|
279
|
+
'correlation', 'mutualinfo', 'riptide', or 'hybrid'. Default is 'correlation'.
|
|
280
|
+
simcalcoffset : int, optional
|
|
281
|
+
Offset to subtract from computed lags. Default is 0.
|
|
282
|
+
echocancel : bool, optional
|
|
283
|
+
Whether to cancel echo effects. Default is False.
|
|
284
|
+
checkpoint : bool, optional
|
|
285
|
+
Whether to save intermediate results. Default is False.
|
|
286
|
+
nprocs : int, optional
|
|
287
|
+
Number of processes for multiprocessing. Default is 1.
|
|
288
|
+
alwaysmultiproc : bool, optional
|
|
289
|
+
Force multiprocessing even for single-core cases. Default is False.
|
|
290
|
+
oversampfactor : int, optional
|
|
291
|
+
Oversampling factor for interpolation. Default is 2.
|
|
292
|
+
interptype : str, optional
|
|
293
|
+
Interpolation type. Default is 'univariate'.
|
|
294
|
+
showprogressbar : bool, optional
|
|
295
|
+
Whether to show a progress bar. Default is True.
|
|
296
|
+
chunksize : int, optional
|
|
297
|
+
Size of chunks for processing. Default is 1000.
|
|
298
|
+
rt_floattype : np.dtype, optional
|
|
299
|
+
Rapidtide floating-point data type. Default is np.float64.
|
|
300
|
+
mklthreads : int, optional
|
|
301
|
+
Number of threads for Intel MKL. Default is 1.
|
|
302
|
+
threaddebug : bool, optional
|
|
303
|
+
Enable thread debugging. Default is False.
|
|
304
|
+
debug : bool, optional
|
|
305
|
+
Enable debug mode. Default is False.
|
|
306
|
+
|
|
307
|
+
Returns
|
|
308
|
+
-------
|
|
309
|
+
str
|
|
310
|
+
The type of similarity metric used in the calculation.
|
|
311
|
+
|
|
312
|
+
Notes
|
|
313
|
+
-----
|
|
314
|
+
- For 'riptide', the function fits linear models to delayed regressors.
|
|
315
|
+
- The function logs timing and processing information using `TimingLGR` and `LGR`.
|
|
316
|
+
- If `checkpoint` is True, intermediate correlation results are saved to disk.
|
|
317
|
+
- This function modifies `corrout` and `outcorrarray` in-place.
|
|
318
|
+
|
|
319
|
+
Examples
|
|
320
|
+
--------
|
|
321
|
+
>>> calcSimFunc(
|
|
322
|
+
... numvalidspatiallocs=100,
|
|
323
|
+
... fmri_data_valid=np.random.rand(100, 100),
|
|
324
|
+
... validsimcalcstart=0,
|
|
325
|
+
... validsimcalcend=99,
|
|
326
|
+
... osvalidsimcalcstart=0,
|
|
327
|
+
... osvalidsimcalcend=99,
|
|
328
|
+
... initial_fmri_x=np.linspace(0, 1, 100),
|
|
329
|
+
... os_fmri_x=np.linspace(0, 1, 100),
|
|
330
|
+
... theCorrelator=correlator_obj,
|
|
331
|
+
... theMutualInformationator=mi_obj,
|
|
332
|
+
... cleaned_referencetc=np.random.rand(100),
|
|
333
|
+
... corrout=np.zeros((100, 100)),
|
|
334
|
+
... regressorset=np.random.rand(10, 100),
|
|
335
|
+
... delayvals=np.array([0, 1, 2]),
|
|
336
|
+
... sLFOfitmean=np.mean(np.random.rand(100)),
|
|
337
|
+
... r2value=np.zeros(100),
|
|
338
|
+
... fitcoeff=np.zeros((100, 1)),
|
|
339
|
+
... fitNorm=np.ones(100),
|
|
340
|
+
... meanval=np.mean(np.random.rand(100)),
|
|
341
|
+
... corrscale=np.arange(100),
|
|
342
|
+
... outputname="test_output",
|
|
343
|
+
... outcorrarray=np.zeros((100, 100)),
|
|
344
|
+
... validvoxels=np.arange(100),
|
|
345
|
+
... nativecorrshape=(100, 100),
|
|
346
|
+
... theinputdata=input_data_obj,
|
|
347
|
+
... theheader=header,
|
|
348
|
+
... lagmininpts=-5,
|
|
349
|
+
... lagmaxinpts=5,
|
|
350
|
+
... thepass=1,
|
|
351
|
+
... optiondict={},
|
|
352
|
+
... LGR=logging.getLogger(),
|
|
353
|
+
... TimingLGR=logging.getLogger(),
|
|
354
|
+
... similaritymetric="correlation",
|
|
355
|
+
... nprocs=2,
|
|
356
|
+
... checkpoint=True,
|
|
357
|
+
... )
|
|
358
|
+
'Correlation'
|
|
359
|
+
"""
|
|
360
|
+
# Step 1 - Correlation step
|
|
361
|
+
if similaritymetric == "mutualinfo":
|
|
362
|
+
similaritytype = "Mutual information"
|
|
363
|
+
elif similaritymetric == "correlation":
|
|
364
|
+
similaritytype = "Correlation"
|
|
365
|
+
elif similaritymetric == "riptide":
|
|
366
|
+
similaritytype = "RIPTiDe"
|
|
367
|
+
else:
|
|
368
|
+
similaritytype = "MI enhanced correlation"
|
|
369
|
+
LGR.info(f"\n\n{similaritytype} calculation, pass {thepass}")
|
|
370
|
+
TimingLGR.info(f"{similaritytype} calculation start, pass {thepass}")
|
|
371
|
+
|
|
372
|
+
tide_util.disablemkl(nprocs, debug=threaddebug)
|
|
373
|
+
if similaritymetric == "mutualinfo":
|
|
374
|
+
theMutualInformationator.setlimits(lagmininpts, lagmaxinpts)
|
|
375
|
+
(
|
|
376
|
+
voxelsprocessed_cp,
|
|
377
|
+
theglobalmaxlist,
|
|
378
|
+
trimmedcorrscale,
|
|
379
|
+
) = tide_calcsimfunc.correlationpass(
|
|
380
|
+
fmri_data_valid[:, validsimcalcstart : validsimcalcend + 1],
|
|
381
|
+
cleaned_referencetc,
|
|
382
|
+
theMutualInformationator,
|
|
383
|
+
initial_fmri_x[validsimcalcstart : validsimcalcend + 1],
|
|
384
|
+
os_fmri_x[osvalidsimcalcstart : osvalidsimcalcend + 1],
|
|
385
|
+
lagmininpts,
|
|
386
|
+
lagmaxinpts,
|
|
387
|
+
corrout,
|
|
388
|
+
meanval,
|
|
389
|
+
nprocs=nprocs,
|
|
390
|
+
alwaysmultiproc=alwaysmultiproc,
|
|
391
|
+
oversampfactor=oversampfactor,
|
|
392
|
+
interptype=interptype,
|
|
393
|
+
showprogressbar=showprogressbar,
|
|
394
|
+
chunksize=chunksize,
|
|
395
|
+
rt_floattype=rt_floattype,
|
|
396
|
+
debug=debug,
|
|
397
|
+
)
|
|
398
|
+
elif (similaritymetric == "correlation") or (similaritymetric == "hybrid"):
|
|
399
|
+
(
|
|
400
|
+
voxelsprocessed_cp,
|
|
401
|
+
theglobalmaxlist,
|
|
402
|
+
trimmedcorrscale,
|
|
403
|
+
) = tide_calcsimfunc.correlationpass(
|
|
404
|
+
fmri_data_valid[:, validsimcalcstart : validsimcalcend + 1],
|
|
405
|
+
cleaned_referencetc,
|
|
406
|
+
theCorrelator,
|
|
407
|
+
initial_fmri_x[validsimcalcstart : validsimcalcend + 1],
|
|
408
|
+
os_fmri_x[osvalidsimcalcstart : osvalidsimcalcend + 1],
|
|
409
|
+
lagmininpts,
|
|
410
|
+
lagmaxinpts,
|
|
411
|
+
corrout,
|
|
412
|
+
meanval,
|
|
413
|
+
nprocs=nprocs,
|
|
414
|
+
alwaysmultiproc=alwaysmultiproc,
|
|
415
|
+
oversampfactor=oversampfactor,
|
|
416
|
+
interptype=interptype,
|
|
417
|
+
showprogressbar=showprogressbar,
|
|
418
|
+
chunksize=chunksize,
|
|
419
|
+
rt_floattype=rt_floattype,
|
|
420
|
+
debug=debug,
|
|
421
|
+
)
|
|
422
|
+
elif similaritymetric == "riptide":
|
|
423
|
+
# do the linear fit to the comb of delayed regressors
|
|
424
|
+
for thedelay in range(len(delayvals)):
|
|
425
|
+
print(f"Fitting delay {delayvals[thedelay]:.2f}")
|
|
426
|
+
voxelsprocessed_cp = tide_linfitfiltpass.linfitfiltpass(
|
|
427
|
+
numvalidspatiallocs,
|
|
428
|
+
fmri_data_valid[:, validsimcalcstart : validsimcalcend + 1],
|
|
429
|
+
0.0,
|
|
430
|
+
regressorset[thedelay, validsimcalcstart : validsimcalcend + 1],
|
|
431
|
+
sLFOfitmean,
|
|
432
|
+
corrout[:, thedelay],
|
|
433
|
+
r2value,
|
|
434
|
+
fitcoeff,
|
|
435
|
+
fitNorm,
|
|
436
|
+
None,
|
|
437
|
+
None,
|
|
438
|
+
coefficientsonly=True,
|
|
439
|
+
constantevs=True,
|
|
440
|
+
nprocs=nprocs,
|
|
441
|
+
alwaysmultiproc=alwaysmultiproc,
|
|
442
|
+
showprogressbar=showprogressbar,
|
|
443
|
+
verbose=(LGR is not None),
|
|
444
|
+
chunksize=chunksize,
|
|
445
|
+
rt_floattype=rt_floattype,
|
|
446
|
+
debug=debug,
|
|
447
|
+
)
|
|
448
|
+
else:
|
|
449
|
+
print("illegal similarity metric")
|
|
450
|
+
|
|
451
|
+
tide_util.enablemkl(mklthreads, debug=threaddebug)
|
|
452
|
+
|
|
453
|
+
if similaritymetric != "riptide":
|
|
454
|
+
for i in range(len(theglobalmaxlist)):
|
|
455
|
+
theglobalmaxlist[i] = corrscale[theglobalmaxlist[i]] - simcalcoffset
|
|
456
|
+
namesuffix = "_desc-globallag_hist"
|
|
457
|
+
tide_stats.makeandsavehistogram(
|
|
458
|
+
np.asarray(theglobalmaxlist),
|
|
459
|
+
len(corrscale),
|
|
460
|
+
0,
|
|
461
|
+
outputname + namesuffix,
|
|
462
|
+
displaytitle="Histogram of lag times from global lag calculation",
|
|
463
|
+
therange=(corrscale[0], corrscale[-1]),
|
|
464
|
+
refine=False,
|
|
465
|
+
dictvarname="globallaghist_pass" + str(thepass),
|
|
466
|
+
append=(echocancel or (thepass > 1)),
|
|
467
|
+
thedict=optiondict,
|
|
468
|
+
)
|
|
469
|
+
|
|
470
|
+
if checkpoint:
|
|
471
|
+
outcorrarray[:, :] = 0.0
|
|
472
|
+
outcorrarray[validvoxels, :] = corrout[:, :]
|
|
473
|
+
if theinputdata.filetype == "text":
|
|
474
|
+
tide_io.writenpvecs(
|
|
475
|
+
outcorrarray.reshape(nativecorrshape),
|
|
476
|
+
f"{outputname}_corrout_prefit_pass" + str(thepass) + ".txt",
|
|
477
|
+
)
|
|
478
|
+
else:
|
|
479
|
+
savename = f"{outputname}_desc-corroutprefit_pass-" + str(thepass)
|
|
480
|
+
tide_io.savetonifti(outcorrarray.reshape(nativecorrshape), theheader, savename)
|
|
481
|
+
|
|
482
|
+
TimingLGR.info(
|
|
483
|
+
f"{similaritytype} calculation end, pass {thepass}",
|
|
484
|
+
{
|
|
485
|
+
"message2": voxelsprocessed_cp,
|
|
486
|
+
"message3": "voxels",
|
|
487
|
+
},
|
|
488
|
+
)
|
|
489
|
+
|
|
490
|
+
return similaritytype
|