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/refine_factored.py
DELETED
|
@@ -1,641 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python
|
|
2
|
-
# -*- coding: utf-8 -*-
|
|
3
|
-
#
|
|
4
|
-
# Copyright 2016-2024 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
|
-
import gc
|
|
20
|
-
import logging
|
|
21
|
-
import sys
|
|
22
|
-
|
|
23
|
-
import numpy as np
|
|
24
|
-
from scipy.stats import pearsonr
|
|
25
|
-
from sklearn.decomposition import PCA, FastICA
|
|
26
|
-
from tqdm import tqdm
|
|
27
|
-
|
|
28
|
-
import rapidtide.fit as tide_fit
|
|
29
|
-
import rapidtide.io as tide_io
|
|
30
|
-
import rapidtide.miscmath as tide_math
|
|
31
|
-
import rapidtide.multiproc as tide_multiproc
|
|
32
|
-
import rapidtide.resample as tide_resample
|
|
33
|
-
import rapidtide.stats as tide_stats
|
|
34
|
-
|
|
35
|
-
LGR = logging.getLogger("GENERAL")
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
def _procOneVoxelTimeShift(
|
|
39
|
-
vox,
|
|
40
|
-
fmritc,
|
|
41
|
-
lagtime,
|
|
42
|
-
padtrs,
|
|
43
|
-
fmritr,
|
|
44
|
-
detrendorder=1,
|
|
45
|
-
offsettime=0.0,
|
|
46
|
-
rt_floatset=np.float64,
|
|
47
|
-
rt_floattype="float64",
|
|
48
|
-
):
|
|
49
|
-
if detrendorder > 0:
|
|
50
|
-
normtc = tide_fit.detrend(fmritc, order=detrendorder, demean=True)
|
|
51
|
-
else:
|
|
52
|
-
normtc = fmritc + 0.0
|
|
53
|
-
shifttr = -(-offsettime + lagtime) / fmritr # lagtime is in seconds
|
|
54
|
-
[shiftedtc, weights, paddedshiftedtc, paddedweights] = tide_resample.timeshift(
|
|
55
|
-
normtc, shifttr, padtrs
|
|
56
|
-
)
|
|
57
|
-
return vox, shiftedtc, weights, paddedshiftedtc, paddedweights
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
def alignvoxels(
|
|
61
|
-
fmridata,
|
|
62
|
-
fmritr,
|
|
63
|
-
shiftedtcs,
|
|
64
|
-
weights,
|
|
65
|
-
paddedshiftedtcs,
|
|
66
|
-
paddedweights,
|
|
67
|
-
lagtimes,
|
|
68
|
-
lagmask,
|
|
69
|
-
detrendorder=1,
|
|
70
|
-
offsettime=0.0,
|
|
71
|
-
nprocs=1,
|
|
72
|
-
alwaysmultiproc=False,
|
|
73
|
-
showprogressbar=True,
|
|
74
|
-
chunksize=1000,
|
|
75
|
-
padtrs=60,
|
|
76
|
-
debug=False,
|
|
77
|
-
rt_floatset=np.float64,
|
|
78
|
-
rt_floattype="float64",
|
|
79
|
-
):
|
|
80
|
-
"""
|
|
81
|
-
This routine applies a timeshift to every voxel in the image.
|
|
82
|
-
Inputs are:
|
|
83
|
-
fmridata - the fmri data, filtered to the passband
|
|
84
|
-
fmritr - the timestep of the data
|
|
85
|
-
shiftedtcs,
|
|
86
|
-
weights,
|
|
87
|
-
paddedshiftedtcs,
|
|
88
|
-
paddedweights,
|
|
89
|
-
lagtimes, lagmask - the results of the correlation fit.
|
|
90
|
-
detrendorder - the order of the polynomial to use to detrend the data
|
|
91
|
-
offsettime - the global timeshift to apply to all timecourses
|
|
92
|
-
nprocs - the number of processes to use if multiprocessing is enabled
|
|
93
|
-
|
|
94
|
-
Explicit outputs are:
|
|
95
|
-
volumetotal - the number of voxels processed
|
|
96
|
-
|
|
97
|
-
Implicit outputs:
|
|
98
|
-
shiftedtcs - voxelwise fmri data timeshifted to zero lag
|
|
99
|
-
weights - the weights of every timepoint in the final regressor
|
|
100
|
-
paddedshiftedtcs - voxelwise fmri data timeshifted to zero lag, with a bufffer of padtrs on each end
|
|
101
|
-
paddedweights - the weights of every timepoint in the final regressor, with a bufffer of padtrs on each end
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
Parameters
|
|
105
|
-
----------
|
|
106
|
-
fmridata : 4D numpy float array
|
|
107
|
-
fMRI data
|
|
108
|
-
fmritr : float
|
|
109
|
-
Data repetition rate, in seconds
|
|
110
|
-
shiftedtcs : 4D numpy float array
|
|
111
|
-
Destination array for time aligned voxel timecourses
|
|
112
|
-
weights : unknown
|
|
113
|
-
unknown
|
|
114
|
-
passnum : int
|
|
115
|
-
Number of the pass (for labelling output)
|
|
116
|
-
lagstrengths : 3D numpy float array
|
|
117
|
-
Maximum correlation coefficient in every voxel
|
|
118
|
-
lagtimes : 3D numpy float array
|
|
119
|
-
Time delay of maximum crosscorrelation in seconds
|
|
120
|
-
lagsigma : 3D numpy float array
|
|
121
|
-
Gaussian width of the crosscorrelation peak, in seconds.
|
|
122
|
-
lagmask : 3D numpy float array
|
|
123
|
-
Mask of voxels with successful correlation fits.
|
|
124
|
-
R2 : 3D numpy float array
|
|
125
|
-
Square of the maximum correlation coefficient in every voxel
|
|
126
|
-
theprefilter : function
|
|
127
|
-
The filter function to use
|
|
128
|
-
optiondict : dict
|
|
129
|
-
Dictionary of all internal rapidtide configuration variables.
|
|
130
|
-
padtrs : int, optional
|
|
131
|
-
Number of timepoints to pad onto each end
|
|
132
|
-
includemask : 3D array
|
|
133
|
-
Mask of voxels to include in refinement. Default is None (all voxels).
|
|
134
|
-
excludemask : 3D array
|
|
135
|
-
Mask of voxels to exclude from refinement. Default is None (no voxels).
|
|
136
|
-
debug : bool
|
|
137
|
-
Enable additional debugging output. Default is False
|
|
138
|
-
rt_floatset : function
|
|
139
|
-
Function to coerce variable types
|
|
140
|
-
rt_floattype : {'float32', 'float64'}
|
|
141
|
-
Data type for internal variables
|
|
142
|
-
|
|
143
|
-
Returns
|
|
144
|
-
-------
|
|
145
|
-
volumetotal : int
|
|
146
|
-
Number of voxels processed
|
|
147
|
-
outputdata : float array
|
|
148
|
-
New regressor
|
|
149
|
-
maskarray : 3D array
|
|
150
|
-
Mask of voxels used for refinement
|
|
151
|
-
"""
|
|
152
|
-
inputshape = np.shape(fmridata)
|
|
153
|
-
volumetotal = np.sum(lagmask)
|
|
154
|
-
|
|
155
|
-
# timeshift the valid voxels
|
|
156
|
-
if nprocs > 1 or alwaysmultiproc:
|
|
157
|
-
# define the consumer function here so it inherits most of the arguments
|
|
158
|
-
def timeshift_consumer(inQ, outQ):
|
|
159
|
-
while True:
|
|
160
|
-
try:
|
|
161
|
-
# get a new message
|
|
162
|
-
val = inQ.get()
|
|
163
|
-
|
|
164
|
-
# this is the 'TERM' signal
|
|
165
|
-
if val is None:
|
|
166
|
-
break
|
|
167
|
-
|
|
168
|
-
# process and send the data
|
|
169
|
-
outQ.put(
|
|
170
|
-
_procOneVoxelTimeShift(
|
|
171
|
-
val,
|
|
172
|
-
fmridata[val, :],
|
|
173
|
-
lagtimes[val],
|
|
174
|
-
padtrs,
|
|
175
|
-
fmritr,
|
|
176
|
-
detrendorder=detrendorder,
|
|
177
|
-
offsettime=offsettime,
|
|
178
|
-
rt_floatset=rt_floatset,
|
|
179
|
-
rt_floattype=rt_floattype,
|
|
180
|
-
)
|
|
181
|
-
)
|
|
182
|
-
|
|
183
|
-
except Exception as e:
|
|
184
|
-
print("error!", e)
|
|
185
|
-
break
|
|
186
|
-
|
|
187
|
-
data_out = tide_multiproc.run_multiproc(
|
|
188
|
-
timeshift_consumer,
|
|
189
|
-
inputshape,
|
|
190
|
-
lagmask,
|
|
191
|
-
nprocs=nprocs,
|
|
192
|
-
showprogressbar=showprogressbar,
|
|
193
|
-
chunksize=chunksize,
|
|
194
|
-
)
|
|
195
|
-
|
|
196
|
-
# unpack the data
|
|
197
|
-
for voxel in data_out:
|
|
198
|
-
shiftedtcs[voxel[0], :] = voxel[1]
|
|
199
|
-
weights[voxel[0], :] = voxel[2]
|
|
200
|
-
paddedshiftedtcs[voxel[0], :] = voxel[3]
|
|
201
|
-
paddedweights[voxel[0], :] = voxel[4]
|
|
202
|
-
del data_out
|
|
203
|
-
|
|
204
|
-
else:
|
|
205
|
-
for vox in tqdm(
|
|
206
|
-
range(0, inputshape[0]),
|
|
207
|
-
desc="Voxel timeshifts",
|
|
208
|
-
unit="voxels",
|
|
209
|
-
disable=(not showprogressbar),
|
|
210
|
-
):
|
|
211
|
-
if lagmask[vox] > 0.5:
|
|
212
|
-
retvals = _procOneVoxelTimeShift(
|
|
213
|
-
vox,
|
|
214
|
-
fmridata[vox, :],
|
|
215
|
-
lagtimes[vox],
|
|
216
|
-
padtrs,
|
|
217
|
-
fmritr,
|
|
218
|
-
detrendorder=detrendorder,
|
|
219
|
-
offsettime=offsettime,
|
|
220
|
-
rt_floatset=rt_floatset,
|
|
221
|
-
rt_floattype=rt_floattype,
|
|
222
|
-
)
|
|
223
|
-
shiftedtcs[retvals[0], :] = retvals[1]
|
|
224
|
-
weights[retvals[0], :] = retvals[2]
|
|
225
|
-
paddedshiftedtcs[retvals[0], :] = retvals[3]
|
|
226
|
-
paddedweights[retvals[0], :] = retvals[4]
|
|
227
|
-
LGR.info(
|
|
228
|
-
"Timeshift applied to " + str(int(volumetotal)) + " voxels",
|
|
229
|
-
)
|
|
230
|
-
|
|
231
|
-
# garbage collect
|
|
232
|
-
uncollected = gc.collect()
|
|
233
|
-
if uncollected != 0:
|
|
234
|
-
LGR.info(f"garbage collected - unable to collect {uncollected} objects")
|
|
235
|
-
else:
|
|
236
|
-
LGR.info("garbage collected")
|
|
237
|
-
|
|
238
|
-
return volumetotal
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
def makerefinemask(
|
|
242
|
-
lagstrengths,
|
|
243
|
-
lagtimes,
|
|
244
|
-
lagsigma,
|
|
245
|
-
lagmask,
|
|
246
|
-
offsettime=0.0,
|
|
247
|
-
ampthresh=0.3,
|
|
248
|
-
lagmaskside="both",
|
|
249
|
-
lagminthresh=0.5,
|
|
250
|
-
lagmaxthresh=5.0,
|
|
251
|
-
sigmathresh=100,
|
|
252
|
-
cleanrefined=False,
|
|
253
|
-
bipolar=False,
|
|
254
|
-
includemask=None,
|
|
255
|
-
excludemask=None,
|
|
256
|
-
debug=False,
|
|
257
|
-
rt_floatset=np.float64,
|
|
258
|
-
rt_floattype="float64",
|
|
259
|
-
):
|
|
260
|
-
"""
|
|
261
|
-
This routine determines which voxels should be used for regressor refinement.
|
|
262
|
-
|
|
263
|
-
Parameters
|
|
264
|
-
----------
|
|
265
|
-
lagstrengths : 3D numpy float array
|
|
266
|
-
Maximum correlation coefficient in every voxel
|
|
267
|
-
lagtimes : 3D numpy float array
|
|
268
|
-
Time delay of maximum crosscorrelation in seconds
|
|
269
|
-
lagsigma : 3D numpy float array
|
|
270
|
-
Gaussian width of the crosscorrelation peak, in seconds.
|
|
271
|
-
lagmask : 3D numpy float array
|
|
272
|
-
Mask of voxels with successful correlation fits.
|
|
273
|
-
offsettime: float
|
|
274
|
-
The offset time in seconds to apply to all regressors
|
|
275
|
-
ampthresh: float
|
|
276
|
-
The lower limit of correlation values to consider for refine mask inclusion
|
|
277
|
-
lagmaskside: str
|
|
278
|
-
Which side of the lag values to consider - upper, lower, or both
|
|
279
|
-
lagminthresh: float
|
|
280
|
-
The lower limit of absolute lag values to consider for refine mask inclusion
|
|
281
|
-
lagmaxthresh: float
|
|
282
|
-
The upper limit of absolute lag values to consider for refine mask inclusion
|
|
283
|
-
sigmathresh: float
|
|
284
|
-
The upper limit of lag peak width for refine mask inclusion
|
|
285
|
-
cleanrefined: bool
|
|
286
|
-
If True,
|
|
287
|
-
bipolar : bool
|
|
288
|
-
If True, consider positive and negative correlation peaks
|
|
289
|
-
includemask : 3D array
|
|
290
|
-
Mask of voxels to include in refinement. Default is None (all voxels).
|
|
291
|
-
excludemask : 3D array
|
|
292
|
-
Mask of voxels to exclude from refinement. Default is None (no voxels).
|
|
293
|
-
debug : bool
|
|
294
|
-
Enable additional debugging output. Default is False
|
|
295
|
-
rt_floatset : function
|
|
296
|
-
Function to coerce variable types
|
|
297
|
-
rt_floattype : {'float32', 'float64'}
|
|
298
|
-
Data type for internal variables
|
|
299
|
-
|
|
300
|
-
Returns
|
|
301
|
-
-------
|
|
302
|
-
volumetotal : int
|
|
303
|
-
Number of voxels processed
|
|
304
|
-
maskarray : 3D array
|
|
305
|
-
Mask of voxels used for refinement
|
|
306
|
-
locationfails: int
|
|
307
|
-
Number of locations eliminated due to the include and exclude masks
|
|
308
|
-
ampfails: int
|
|
309
|
-
Number of locations eliminated because the correlation value was too low
|
|
310
|
-
lagfails: int
|
|
311
|
-
Number of locations eliminated because the lag values were out of range
|
|
312
|
-
sigmafails: int
|
|
313
|
-
Number of locations eliminated because the correlation peak was too wide
|
|
314
|
-
"""
|
|
315
|
-
|
|
316
|
-
if ampthresh < 0.0:
|
|
317
|
-
if bipolar:
|
|
318
|
-
theampthresh = tide_stats.getfracval(np.fabs(lagstrengths), -ampthresh, nozero=True)
|
|
319
|
-
else:
|
|
320
|
-
theampthresh = tide_stats.getfracval(lagstrengths, -ampthresh, nozero=True)
|
|
321
|
-
LGR.info(f"setting ampthresh to the {-100.0 * ampthresh}th percentile ({theampthresh})")
|
|
322
|
-
else:
|
|
323
|
-
theampthresh = ampthresh
|
|
324
|
-
if bipolar:
|
|
325
|
-
ampmask = np.where(np.fabs(lagstrengths) >= theampthresh, np.int16(1), np.int16(0))
|
|
326
|
-
else:
|
|
327
|
-
ampmask = np.where(lagstrengths >= theampthresh, np.int16(1), np.int16(0))
|
|
328
|
-
if lagmaskside == "upper":
|
|
329
|
-
delaymask = np.where(
|
|
330
|
-
(lagtimes - offsettime) > lagminthresh,
|
|
331
|
-
np.int16(1),
|
|
332
|
-
np.int16(0),
|
|
333
|
-
) * np.where(
|
|
334
|
-
(lagtimes - offsettime) < lagmaxthresh,
|
|
335
|
-
np.int16(1),
|
|
336
|
-
np.int16(0),
|
|
337
|
-
)
|
|
338
|
-
elif lagmaskside == "lower":
|
|
339
|
-
delaymask = np.where(
|
|
340
|
-
(lagtimes - offsettime) < -lagminthresh,
|
|
341
|
-
np.int16(1),
|
|
342
|
-
np.int16(0),
|
|
343
|
-
) * np.where(
|
|
344
|
-
(lagtimes - offsettime) > -lagmaxthresh,
|
|
345
|
-
np.int16(1),
|
|
346
|
-
np.int16(0),
|
|
347
|
-
)
|
|
348
|
-
else:
|
|
349
|
-
abslag = abs(lagtimes - offsettime)
|
|
350
|
-
delaymask = np.where(abslag > lagminthresh, np.int16(1), np.int16(0)) * np.where(
|
|
351
|
-
abslag < lagmaxthresh, np.int16(1), np.int16(0)
|
|
352
|
-
)
|
|
353
|
-
sigmamask = np.where(lagsigma < sigmathresh, np.int16(1), np.int16(0))
|
|
354
|
-
locationmask = lagmask + 0
|
|
355
|
-
if includemask is not None:
|
|
356
|
-
locationmask = locationmask * includemask
|
|
357
|
-
if excludemask is not None:
|
|
358
|
-
locationmask = locationmask * (1 - excludemask)
|
|
359
|
-
locationmask = locationmask.astype(np.int16)
|
|
360
|
-
LGR.info("location mask created")
|
|
361
|
-
|
|
362
|
-
# first generate the refine mask
|
|
363
|
-
locationfails = np.sum(1 - locationmask)
|
|
364
|
-
ampfails = np.sum(1 - ampmask * locationmask)
|
|
365
|
-
lagfails = np.sum(1 - delaymask * locationmask)
|
|
366
|
-
sigmafails = np.sum(1 - sigmamask * locationmask)
|
|
367
|
-
refinemask = locationmask * ampmask * delaymask * sigmamask
|
|
368
|
-
if tide_stats.getmasksize(refinemask) == 0:
|
|
369
|
-
print("ERROR: no voxels in the refine mask:")
|
|
370
|
-
print(
|
|
371
|
-
"\n ",
|
|
372
|
-
locationfails,
|
|
373
|
-
" locationfails",
|
|
374
|
-
"\n ",
|
|
375
|
-
ampfails,
|
|
376
|
-
" ampfails",
|
|
377
|
-
"\n ",
|
|
378
|
-
lagfails,
|
|
379
|
-
" lagfails",
|
|
380
|
-
"\n ",
|
|
381
|
-
sigmafails,
|
|
382
|
-
" sigmafails",
|
|
383
|
-
)
|
|
384
|
-
if (includemask is None) and (excludemask is None):
|
|
385
|
-
print("\nRelax ampthresh, delaythresh, or sigmathresh - exiting")
|
|
386
|
-
else:
|
|
387
|
-
print(
|
|
388
|
-
"\nChange include/exclude masks or relax ampthresh, delaythresh, or sigmathresh - exiting"
|
|
389
|
-
)
|
|
390
|
-
return 0, None, locationfails, ampfails, lagfails, sigmafails, 0
|
|
391
|
-
|
|
392
|
-
if cleanrefined:
|
|
393
|
-
shiftmask = locationmask
|
|
394
|
-
else:
|
|
395
|
-
shiftmask = refinemask
|
|
396
|
-
volumetotal = np.sum(shiftmask)
|
|
397
|
-
LGR.info(
|
|
398
|
-
f"{int(volumetotal)} voxels will be used for refinement:"
|
|
399
|
-
+ f"\n {locationfails} locationfails"
|
|
400
|
-
+ f"\n {ampfails} ampfails"
|
|
401
|
-
+ f"\n {lagfails} lagfails"
|
|
402
|
-
+ f"\n {sigmafails} sigmafails"
|
|
403
|
-
)
|
|
404
|
-
numinmask = np.sum(lagmask)
|
|
405
|
-
if numinmask is None:
|
|
406
|
-
numinmask = 0
|
|
407
|
-
|
|
408
|
-
return volumetotal, shiftmask, locationfails, ampfails, lagfails, sigmafails, numinmask
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
def prenorm(
|
|
412
|
-
shiftedtcs,
|
|
413
|
-
refinemask,
|
|
414
|
-
lagtimes,
|
|
415
|
-
lagmaxthresh,
|
|
416
|
-
lagstrengths,
|
|
417
|
-
R2vals,
|
|
418
|
-
refineprenorm,
|
|
419
|
-
refineweighting,
|
|
420
|
-
debug=False,
|
|
421
|
-
):
|
|
422
|
-
if debug:
|
|
423
|
-
print(f"{shiftedtcs.shape=}"),
|
|
424
|
-
print(f"{refinemask.shape=}"),
|
|
425
|
-
print(f"{lagtimes.shape=}"),
|
|
426
|
-
print(f"{lagmaxthresh=}"),
|
|
427
|
-
print(f"{lagstrengths.shape=}"),
|
|
428
|
-
print(f"{R2vals.shape=}"),
|
|
429
|
-
print(f"{refineprenorm=}"),
|
|
430
|
-
print(f"{refineweighting=}"),
|
|
431
|
-
if refineprenorm == "mean":
|
|
432
|
-
thedivisor = np.mean(shiftedtcs, axis=1)
|
|
433
|
-
elif refineprenorm == "var":
|
|
434
|
-
thedivisor = np.var(shiftedtcs, axis=1)
|
|
435
|
-
elif refineprenorm == "std":
|
|
436
|
-
thedivisor = np.std(shiftedtcs, axis=1)
|
|
437
|
-
elif refineprenorm == "invlag":
|
|
438
|
-
thedivisor = np.where(np.fabs(lagtimes) < lagmaxthresh, lagmaxthresh - lagtimes, 0.0)
|
|
439
|
-
else:
|
|
440
|
-
thedivisor = shiftedtcs[:, 0] * 0.0 + 1.0
|
|
441
|
-
|
|
442
|
-
normfac = np.where(thedivisor != 0.0, 1.0 / thedivisor, 0.0)
|
|
443
|
-
|
|
444
|
-
if refineweighting == "R":
|
|
445
|
-
thisweight = lagstrengths
|
|
446
|
-
elif refineweighting == "R2":
|
|
447
|
-
thisweight = R2vals
|
|
448
|
-
else:
|
|
449
|
-
thisweight = np.where(lagstrengths > 0.0, 1.0, -1.0)
|
|
450
|
-
thisweight *= refinemask
|
|
451
|
-
|
|
452
|
-
if debug:
|
|
453
|
-
print(f"{thedivisor.shape=}")
|
|
454
|
-
print(f"{normfac.shape=}")
|
|
455
|
-
print(f"{thisweight.shape=}")
|
|
456
|
-
|
|
457
|
-
shiftedtcs *= (normfac * thisweight)[:, None]
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
def dorefine(
|
|
461
|
-
shiftedtcs,
|
|
462
|
-
refinemask,
|
|
463
|
-
weights,
|
|
464
|
-
theprefilter,
|
|
465
|
-
fmritr,
|
|
466
|
-
passnum,
|
|
467
|
-
lagstrengths,
|
|
468
|
-
lagtimes,
|
|
469
|
-
refinetype,
|
|
470
|
-
fmrifreq,
|
|
471
|
-
outputname,
|
|
472
|
-
detrendorder=1,
|
|
473
|
-
pcacomponents=0.8,
|
|
474
|
-
dodispersioncalc=False,
|
|
475
|
-
dispersioncalc_lower=0.0,
|
|
476
|
-
dispersioncalc_upper=0.0,
|
|
477
|
-
dispersioncalc_step=0.0,
|
|
478
|
-
windowfunc="hamming",
|
|
479
|
-
cleanrefined=False,
|
|
480
|
-
bipolar=False,
|
|
481
|
-
debug=False,
|
|
482
|
-
rt_floatset=np.float64,
|
|
483
|
-
rt_floattype="float64",
|
|
484
|
-
):
|
|
485
|
-
# now generate the refined timecourse(s)
|
|
486
|
-
inputshape = np.shape(shiftedtcs)
|
|
487
|
-
validlist = np.where(refinemask > 0)[0]
|
|
488
|
-
volumetotal = len(validlist)
|
|
489
|
-
refinevoxels = shiftedtcs[validlist, :]
|
|
490
|
-
if bipolar:
|
|
491
|
-
for thevoxel in range(len(validlist)):
|
|
492
|
-
if lagstrengths[validlist][thevoxel] < 0.0:
|
|
493
|
-
refinevoxels[thevoxel, :] *= -1.0
|
|
494
|
-
refineweights = weights[validlist]
|
|
495
|
-
weightsum = np.sum(refineweights, axis=0) / volumetotal
|
|
496
|
-
averagedata = np.sum(refinevoxels, axis=0) / volumetotal
|
|
497
|
-
if cleanrefined:
|
|
498
|
-
invalidlist = np.where((1 - refinemask) > 0)[0]
|
|
499
|
-
discardvoxels = shiftedtcs[invalidlist]
|
|
500
|
-
discardweights = weights[invalidlist]
|
|
501
|
-
discardweightsum = np.sum(discardweights, axis=0) / volumetotal
|
|
502
|
-
averagediscard = np.sum(discardvoxels, axis=0) / volumetotal
|
|
503
|
-
if dodispersioncalc:
|
|
504
|
-
LGR.info("splitting regressors by time lag for phase delay estimation")
|
|
505
|
-
laglist = np.arange(
|
|
506
|
-
dispersioncalc_lower,
|
|
507
|
-
dispersioncalc_upper,
|
|
508
|
-
dispersioncalc_step,
|
|
509
|
-
)
|
|
510
|
-
dispersioncalcout = np.zeros((np.shape(laglist)[0], inputshape[1]), dtype=rt_floattype)
|
|
511
|
-
fftlen = int(inputshape[1] // 2)
|
|
512
|
-
fftlen -= fftlen % 2
|
|
513
|
-
dispersioncalcspecmag = np.zeros((np.shape(laglist)[0], fftlen), dtype=rt_floattype)
|
|
514
|
-
dispersioncalcspecphase = np.zeros((np.shape(laglist)[0], fftlen), dtype=rt_floattype)
|
|
515
|
-
###### BBF dispersioncalc fails when the number of timepoints is odd (or even - not sure). Works the other way.
|
|
516
|
-
for lagnum in range(0, np.shape(laglist)[0]):
|
|
517
|
-
lower = laglist[lagnum] - dispersioncalc_step / 2.0
|
|
518
|
-
upper = laglist[lagnum] + dispersioncalc_step / 2.0
|
|
519
|
-
inlagrange = np.where(
|
|
520
|
-
refinemask
|
|
521
|
-
* np.where(lower < lagtimes, np.int16(1), np.int16(0))
|
|
522
|
-
* np.where(lagtimes < upper, np.int16(1), np.int16(0))
|
|
523
|
-
)[0]
|
|
524
|
-
LGR.info(
|
|
525
|
-
f"\tsumming {np.shape(inlagrange)[0]} regressors with lags from {lower} to {upper}"
|
|
526
|
-
)
|
|
527
|
-
if np.shape(inlagrange)[0] > 0:
|
|
528
|
-
dispersioncalcout[lagnum, :] = tide_math.corrnormalize(
|
|
529
|
-
np.mean(shiftedtcs[inlagrange], axis=0),
|
|
530
|
-
detrendorder=detrendorder,
|
|
531
|
-
windowfunc=windowfunc,
|
|
532
|
-
)
|
|
533
|
-
(
|
|
534
|
-
freqs,
|
|
535
|
-
dispersioncalcspecmag[lagnum, :],
|
|
536
|
-
dispersioncalcspecphase[lagnum, :],
|
|
537
|
-
) = tide_math.polarfft(dispersioncalcout[lagnum, :], 1.0 / fmritr)
|
|
538
|
-
inlagrange = None
|
|
539
|
-
tide_io.writenpvecs(
|
|
540
|
-
dispersioncalcout,
|
|
541
|
-
outputname + "_dispersioncalcvecs_pass" + str(passnum) + ".txt",
|
|
542
|
-
)
|
|
543
|
-
tide_io.writenpvecs(
|
|
544
|
-
dispersioncalcspecmag,
|
|
545
|
-
outputname + "_dispersioncalcspecmag_pass" + str(passnum) + ".txt",
|
|
546
|
-
)
|
|
547
|
-
tide_io.writenpvecs(
|
|
548
|
-
dispersioncalcspecphase,
|
|
549
|
-
outputname + "_dispersioncalcspecphase_pass" + str(passnum) + ".txt",
|
|
550
|
-
)
|
|
551
|
-
tide_io.writenpvecs(
|
|
552
|
-
freqs,
|
|
553
|
-
outputname + "_dispersioncalcfreqs_pass" + str(passnum) + ".txt",
|
|
554
|
-
)
|
|
555
|
-
|
|
556
|
-
if pcacomponents < 0.0:
|
|
557
|
-
pcacomponents = "mle"
|
|
558
|
-
elif pcacomponents >= 1.0:
|
|
559
|
-
pcacomponents = int(np.round(pcacomponents))
|
|
560
|
-
elif pcacomponents == 0.0:
|
|
561
|
-
print("0.0 is not an allowed value for pcacomponents")
|
|
562
|
-
sys.exit()
|
|
563
|
-
else:
|
|
564
|
-
pcacomponents = pcacomponents
|
|
565
|
-
icacomponents = 1
|
|
566
|
-
|
|
567
|
-
if refinetype == "ica":
|
|
568
|
-
LGR.info("performing ica refinement")
|
|
569
|
-
thefit = FastICA(n_components=icacomponents).fit(refinevoxels) # Reconstruct signals
|
|
570
|
-
LGR.info(f"Using first of {len(thefit.components_)} components")
|
|
571
|
-
icadata = thefit.components_[0]
|
|
572
|
-
filteredavg = tide_math.corrnormalize(
|
|
573
|
-
theprefilter.apply(fmrifreq, averagedata),
|
|
574
|
-
detrendorder=detrendorder,
|
|
575
|
-
)
|
|
576
|
-
filteredica = tide_math.corrnormalize(
|
|
577
|
-
theprefilter.apply(fmrifreq, icadata),
|
|
578
|
-
detrendorder=detrendorder,
|
|
579
|
-
)
|
|
580
|
-
thepxcorr = pearsonr(filteredavg, filteredica)[0]
|
|
581
|
-
LGR.info(f"ica/avg correlation = {thepxcorr}")
|
|
582
|
-
if thepxcorr > 0.0:
|
|
583
|
-
outputdata = 1.0 * icadata
|
|
584
|
-
else:
|
|
585
|
-
outputdata = -1.0 * icadata
|
|
586
|
-
elif refinetype == "pca":
|
|
587
|
-
# use the method of "A novel perspective to calibrate temporal delays in cerebrovascular reactivity
|
|
588
|
-
# using hypercapnic and hyperoxic respiratory challenges". NeuroImage 187, 154?165 (2019).
|
|
589
|
-
LGR.info(f"performing pca refinement with pcacomponents set to {pcacomponents}")
|
|
590
|
-
try:
|
|
591
|
-
thefit = PCA(n_components=pcacomponents).fit(refinevoxels)
|
|
592
|
-
except ValueError:
|
|
593
|
-
if pcacomponents == "mle":
|
|
594
|
-
LGR.info("mle estimation failed - falling back to pcacomponents=0.8")
|
|
595
|
-
thefit = PCA(n_components=0.8).fit(refinevoxels)
|
|
596
|
-
else:
|
|
597
|
-
print("unhandled math exception in PCA refinement - exiting")
|
|
598
|
-
sys.exit()
|
|
599
|
-
LGR.info(
|
|
600
|
-
f"Using {len(thefit.components_)} component(s), accounting for "
|
|
601
|
-
+ f"{100.0 * np.cumsum(thefit.explained_variance_ratio_)[len(thefit.components_) - 1]}% of the variance"
|
|
602
|
-
)
|
|
603
|
-
reduceddata = thefit.inverse_transform(thefit.transform(refinevoxels))
|
|
604
|
-
if debug:
|
|
605
|
-
print("complex processing: reduceddata.shape =", reduceddata.shape)
|
|
606
|
-
pcadata = np.mean(reduceddata, axis=0)
|
|
607
|
-
filteredavg = tide_math.corrnormalize(
|
|
608
|
-
theprefilter.apply(fmrifreq, averagedata),
|
|
609
|
-
detrendorder=detrendorder,
|
|
610
|
-
)
|
|
611
|
-
filteredpca = tide_math.corrnormalize(
|
|
612
|
-
theprefilter.apply(fmrifreq, pcadata),
|
|
613
|
-
detrendorder=detrendorder,
|
|
614
|
-
)
|
|
615
|
-
thepxcorr = pearsonr(filteredavg, filteredpca)[0]
|
|
616
|
-
LGR.info(f"pca/avg correlation = {thepxcorr}")
|
|
617
|
-
if thepxcorr > 0.0:
|
|
618
|
-
outputdata = 1.0 * pcadata
|
|
619
|
-
else:
|
|
620
|
-
outputdata = -1.0 * pcadata
|
|
621
|
-
elif refinetype == "weighted_average":
|
|
622
|
-
LGR.info("performing weighted averaging refinement")
|
|
623
|
-
outputdata = np.nan_to_num(averagedata / weightsum)
|
|
624
|
-
else:
|
|
625
|
-
LGR.info("performing unweighted averaging refinement")
|
|
626
|
-
outputdata = averagedata
|
|
627
|
-
|
|
628
|
-
if cleanrefined:
|
|
629
|
-
thefit, R = tide_fit.mlregress(averagediscard, averagedata)
|
|
630
|
-
fitcoff = rt_floatset(thefit[0, 1])
|
|
631
|
-
datatoremove = rt_floatset(fitcoff * averagediscard)
|
|
632
|
-
outputdata -= datatoremove
|
|
633
|
-
|
|
634
|
-
# garbage collect
|
|
635
|
-
uncollected = gc.collect()
|
|
636
|
-
if uncollected != 0:
|
|
637
|
-
LGR.info(f"garbage collected - unable to collect {uncollected} objects")
|
|
638
|
-
else:
|
|
639
|
-
LGR.info("garbage collected")
|
|
640
|
-
|
|
641
|
-
return volumetotal, outputdata
|
rapidtide/scripts/retroglm
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python
|
|
2
|
-
# -*- coding: utf-8 -*-
|
|
3
|
-
#
|
|
4
|
-
# Copyright 2016-2024 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
|
-
import rapidtide.workflows.parser_funcs as pf
|
|
20
|
-
import rapidtide.workflows.retroglm as theworkflow
|
|
21
|
-
|
|
22
|
-
if __name__ == "__main__":
|
|
23
|
-
pf.generic_init(theworkflow._get_parser, theworkflow.retroglm)
|