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/retroglm.py
DELETED
|
@@ -1,643 +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 argparse
|
|
20
|
-
import copy
|
|
21
|
-
import logging
|
|
22
|
-
import os
|
|
23
|
-
import sys
|
|
24
|
-
|
|
25
|
-
import numpy as np
|
|
26
|
-
|
|
27
|
-
import rapidtide.filter as tide_filt
|
|
28
|
-
import rapidtide.io as tide_io
|
|
29
|
-
import rapidtide.miscmath as tide_math
|
|
30
|
-
import rapidtide.multiproc as tide_multiproc
|
|
31
|
-
import rapidtide.resample as tide_resample
|
|
32
|
-
import rapidtide.util as tide_util
|
|
33
|
-
import rapidtide.workflows.glmfrommaps as tide_glmfrommaps
|
|
34
|
-
import rapidtide.workflows.parser_funcs as pf
|
|
35
|
-
|
|
36
|
-
LGR = logging.getLogger("GENERAL")
|
|
37
|
-
ErrorLGR = logging.getLogger("ERROR")
|
|
38
|
-
TimingLGR = logging.getLogger("TIMING")
|
|
39
|
-
|
|
40
|
-
DEFAULT_GLMDERIVS = 0
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
def _get_parser():
|
|
44
|
-
"""
|
|
45
|
-
Argument parser for glmfilt
|
|
46
|
-
"""
|
|
47
|
-
parser = argparse.ArgumentParser(
|
|
48
|
-
prog="retroglm",
|
|
49
|
-
description="Do the rapidtide GLM filtering using the maps generated from a previous analysis.",
|
|
50
|
-
allow_abbrev=False,
|
|
51
|
-
)
|
|
52
|
-
|
|
53
|
-
# Required arguments
|
|
54
|
-
parser.add_argument(
|
|
55
|
-
"fmrifile",
|
|
56
|
-
type=lambda x: pf.is_valid_file(parser, x),
|
|
57
|
-
help="The name of 4D nifti fmri file to filter.",
|
|
58
|
-
)
|
|
59
|
-
parser.add_argument(
|
|
60
|
-
"datafileroot",
|
|
61
|
-
type=str,
|
|
62
|
-
help="The root name of the previously run rapidtide dataset (everything up to but not including the underscore.)",
|
|
63
|
-
)
|
|
64
|
-
parser.add_argument(
|
|
65
|
-
"--alternateoutput",
|
|
66
|
-
dest="alternateoutput",
|
|
67
|
-
type=str,
|
|
68
|
-
help="Alternate output root (if not specified, will use the same root as the previous dataset).",
|
|
69
|
-
default=None,
|
|
70
|
-
)
|
|
71
|
-
parser.add_argument(
|
|
72
|
-
"--glmderivs",
|
|
73
|
-
dest="glmderivs",
|
|
74
|
-
action="store",
|
|
75
|
-
type=int,
|
|
76
|
-
metavar="NDERIVS",
|
|
77
|
-
help=(
|
|
78
|
-
f"When doing final GLM, include derivatives up to NDERIVS order. Default is {DEFAULT_GLMDERIVS}"
|
|
79
|
-
),
|
|
80
|
-
default=DEFAULT_GLMDERIVS,
|
|
81
|
-
)
|
|
82
|
-
parser.add_argument(
|
|
83
|
-
"--nprocs",
|
|
84
|
-
dest="nprocs",
|
|
85
|
-
action="store",
|
|
86
|
-
type=int,
|
|
87
|
-
metavar="NPROCS",
|
|
88
|
-
help=(
|
|
89
|
-
"Use NPROCS worker processes for multiprocessing. "
|
|
90
|
-
"Setting NPROCS to less than 1 sets the number of "
|
|
91
|
-
"worker processes to n_cpus."
|
|
92
|
-
),
|
|
93
|
-
default=1,
|
|
94
|
-
)
|
|
95
|
-
parser.add_argument(
|
|
96
|
-
"--numskip",
|
|
97
|
-
dest="numskip",
|
|
98
|
-
action="store",
|
|
99
|
-
type=int,
|
|
100
|
-
metavar="NUMSKIP",
|
|
101
|
-
help=("Skip NUMSKIP points at the beginning of the fmri file."),
|
|
102
|
-
default=0,
|
|
103
|
-
)
|
|
104
|
-
parser.add_argument(
|
|
105
|
-
"--outputlevel",
|
|
106
|
-
dest="outputlevel",
|
|
107
|
-
action="store",
|
|
108
|
-
type=str,
|
|
109
|
-
choices=["min", "less", "normal", "more", "max"],
|
|
110
|
-
help=(
|
|
111
|
-
"The level of file output produced. 'min' produces only absolutely essential files, 'less' adds in "
|
|
112
|
-
"the GLM filtered data (rather than just filter efficacy metrics), 'normal' saves what you "
|
|
113
|
-
"would typically want around for interactive data exploration, "
|
|
114
|
-
"'more' adds files that are sometimes useful, and 'max' outputs anything you might possibly want. "
|
|
115
|
-
"Selecting 'max' will produce ~3x your input datafile size as output. "
|
|
116
|
-
f'Default is "normal".'
|
|
117
|
-
),
|
|
118
|
-
default="normal",
|
|
119
|
-
)
|
|
120
|
-
parser.add_argument(
|
|
121
|
-
"--noprogressbar",
|
|
122
|
-
dest="showprogressbar",
|
|
123
|
-
action="store_false",
|
|
124
|
-
help=("Will disable showing progress bars (helpful if stdout is going to a file)."),
|
|
125
|
-
default=True,
|
|
126
|
-
)
|
|
127
|
-
parser.add_argument(
|
|
128
|
-
"--makepseudofile",
|
|
129
|
-
dest="makepseudofile",
|
|
130
|
-
action="store_true",
|
|
131
|
-
help=("Make a simulated input file from the mean and the movingsignal."),
|
|
132
|
-
default=False,
|
|
133
|
-
)
|
|
134
|
-
parser.add_argument(
|
|
135
|
-
"--debug",
|
|
136
|
-
dest="debug",
|
|
137
|
-
action="store_true",
|
|
138
|
-
help=("Output lots of helpful information."),
|
|
139
|
-
default=False,
|
|
140
|
-
)
|
|
141
|
-
return parser
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
def retroglm(args):
|
|
145
|
-
rt_floatset = np.float64
|
|
146
|
-
rt_floattype = "float64"
|
|
147
|
-
rt_outfloatset = np.float64
|
|
148
|
-
rt_outfloattype = "float64"
|
|
149
|
-
|
|
150
|
-
if args.outputlevel == "min":
|
|
151
|
-
args.saveminimumglmfiles = False
|
|
152
|
-
args.savenormalglmfiles = False
|
|
153
|
-
args.savemovingsignal = False
|
|
154
|
-
args.saveallglmfiles = False
|
|
155
|
-
elif args.outputlevel == "less":
|
|
156
|
-
args.saveminimumglmfiles = True
|
|
157
|
-
args.savenormalglmfiles = False
|
|
158
|
-
args.savemovingsignal = False
|
|
159
|
-
args.saveallglmfiles = False
|
|
160
|
-
elif args.outputlevel == "normal":
|
|
161
|
-
args.saveminimumglmfiles = True
|
|
162
|
-
args.savenormalglmfiles = True
|
|
163
|
-
args.savemovingsignal = False
|
|
164
|
-
args.saveallglmfiles = False
|
|
165
|
-
elif args.outputlevel == "more":
|
|
166
|
-
args.saveminimumglmfiles = True
|
|
167
|
-
args.savenormalglmfiles = True
|
|
168
|
-
args.savemovingsignal = True
|
|
169
|
-
args.saveallglmfiles = False
|
|
170
|
-
elif args.outputlevel == "max":
|
|
171
|
-
args.saveminimumglmfiles = True
|
|
172
|
-
args.savenormalglmfiles = True
|
|
173
|
-
args.savemovingsignal = True
|
|
174
|
-
args.saveallglmfiles = True
|
|
175
|
-
else:
|
|
176
|
-
print(f"illegal output level {args['outputlevel']}")
|
|
177
|
-
sys.exit()
|
|
178
|
-
|
|
179
|
-
thecommandline = " ".join(sys.argv[1:])
|
|
180
|
-
|
|
181
|
-
if args.nprocs < 1:
|
|
182
|
-
args.nprocs = tide_multiproc.maxcpus()
|
|
183
|
-
# don't use shared memory if there is only one process
|
|
184
|
-
if args.nprocs == 1:
|
|
185
|
-
usesharedmem = False
|
|
186
|
-
else:
|
|
187
|
-
usesharedmem = True
|
|
188
|
-
|
|
189
|
-
# read the runoptions file
|
|
190
|
-
print("reading runoptions")
|
|
191
|
-
runoptionsfile = f"{args.datafileroot}_desc-runoptions_info"
|
|
192
|
-
therunoptions = tide_io.readoptionsfile(runoptionsfile)
|
|
193
|
-
try:
|
|
194
|
-
candoretroglm = therunoptions["retroglmcompatible"]
|
|
195
|
-
except KeyError:
|
|
196
|
-
print("this rapidtide dataset does not support retrospective GLM calculation")
|
|
197
|
-
sys.exit()
|
|
198
|
-
|
|
199
|
-
# read the fmri input files
|
|
200
|
-
print("reading fmrifile")
|
|
201
|
-
fmri_input, fmri_data, fmri_header, fmri_dims, fmri_sizes = tide_io.readfromnifti(
|
|
202
|
-
args.fmrifile
|
|
203
|
-
)
|
|
204
|
-
if args.debug:
|
|
205
|
-
print(f"{fmri_data.shape=}")
|
|
206
|
-
xdim, ydim, slicedim, fmritr = tide_io.parseniftisizes(fmri_sizes)
|
|
207
|
-
xsize, ysize, numslices, timepoints = tide_io.parseniftidims(fmri_dims)
|
|
208
|
-
numspatiallocs = int(xsize) * int(ysize) * int(numslices)
|
|
209
|
-
fmri_data_spacebytime = fmri_data.reshape((numspatiallocs, timepoints))
|
|
210
|
-
if args.debug:
|
|
211
|
-
print(f"{fmri_data_spacebytime.shape=}")
|
|
212
|
-
|
|
213
|
-
# read the processed mask
|
|
214
|
-
print("reading procfit maskfile")
|
|
215
|
-
procmaskfile = f"{args.datafileroot}_desc-processed_mask.nii.gz"
|
|
216
|
-
(
|
|
217
|
-
procmask_input,
|
|
218
|
-
procmask,
|
|
219
|
-
procmask_header,
|
|
220
|
-
procmask_dims,
|
|
221
|
-
procmask_sizes,
|
|
222
|
-
) = tide_io.readfromnifti(procmaskfile)
|
|
223
|
-
if not tide_io.checkspacematch(fmri_header, procmask_header):
|
|
224
|
-
raise ValueError("procmask dimensions do not match fmri dimensions")
|
|
225
|
-
procmask_spacebytime = procmask.reshape((numspatiallocs))
|
|
226
|
-
if args.debug:
|
|
227
|
-
print(f"{procmask_spacebytime.shape=}")
|
|
228
|
-
|
|
229
|
-
# read the corrfit mask
|
|
230
|
-
print("reading corrfit maskfile")
|
|
231
|
-
corrmaskfile = f"{args.datafileroot}_desc-corrfit_mask.nii.gz"
|
|
232
|
-
(
|
|
233
|
-
corrmask_input,
|
|
234
|
-
corrmask,
|
|
235
|
-
corrmask_header,
|
|
236
|
-
corrmask_dims,
|
|
237
|
-
corrmask_sizes,
|
|
238
|
-
) = tide_io.readfromnifti(corrmaskfile)
|
|
239
|
-
if not tide_io.checkspacematch(fmri_header, corrmask_header):
|
|
240
|
-
raise ValueError("corrmask dimensions do not match fmri dimensions")
|
|
241
|
-
corrmask_spacebytime = corrmask.reshape((numspatiallocs))
|
|
242
|
-
if args.debug:
|
|
243
|
-
print(f"{corrmask_spacebytime.shape=}")
|
|
244
|
-
|
|
245
|
-
print("reading lagtimes")
|
|
246
|
-
lagtimesfile = f"{args.datafileroot}_desc-maxtime_map.nii.gz"
|
|
247
|
-
(
|
|
248
|
-
lagtimes_input,
|
|
249
|
-
lagtimes,
|
|
250
|
-
lagtimes_header,
|
|
251
|
-
lagtimes_dims,
|
|
252
|
-
lagtimes_sizes,
|
|
253
|
-
) = tide_io.readfromnifti(lagtimesfile)
|
|
254
|
-
if not tide_io.checkspacematch(fmri_header, lagtimes_header):
|
|
255
|
-
raise ValueError("lagtimes dimensions do not match fmri dimensions")
|
|
256
|
-
if args.debug:
|
|
257
|
-
print(f"{lagtimes.shape=}")
|
|
258
|
-
lagtimes_spacebytime = lagtimes.reshape((numspatiallocs))
|
|
259
|
-
if args.debug:
|
|
260
|
-
print(f"{lagtimes_spacebytime.shape=}")
|
|
261
|
-
|
|
262
|
-
startpt = args.numskip
|
|
263
|
-
endpt = timepoints - 1
|
|
264
|
-
validtimepoints = endpt - startpt + 1
|
|
265
|
-
skiptime = startpt * fmritr
|
|
266
|
-
initial_fmri_x = (
|
|
267
|
-
np.linspace(0.0, validtimepoints * fmritr, num=validtimepoints, endpoint=False) + skiptime
|
|
268
|
-
)
|
|
269
|
-
|
|
270
|
-
if therunoptions["arbvec"] is not None:
|
|
271
|
-
# NOTE - this vector is LOWERPASS, UPPERPASS, LOWERSTOP, UPPERSTOP
|
|
272
|
-
# setfreqs expects LOWERSTOP, LOWERPASS, UPPERPASS, UPPERSTOP
|
|
273
|
-
theprefilter = tide_filt.NoncausalFilter(
|
|
274
|
-
"arb",
|
|
275
|
-
transferfunc=therunoptions["filtertype"],
|
|
276
|
-
)
|
|
277
|
-
theprefilter.setfreqs(
|
|
278
|
-
therunoptions["arbvec"][2],
|
|
279
|
-
therunoptions["arbvec"][0],
|
|
280
|
-
therunoptions["arbvec"][1],
|
|
281
|
-
therunoptions["arbvec"][3],
|
|
282
|
-
)
|
|
283
|
-
else:
|
|
284
|
-
theprefilter = tide_filt.NoncausalFilter(
|
|
285
|
-
therunoptions["filterband"],
|
|
286
|
-
transferfunc=therunoptions["filtertype"],
|
|
287
|
-
padtime=therunoptions["padseconds"],
|
|
288
|
-
)
|
|
289
|
-
|
|
290
|
-
# read the lagtc generator file
|
|
291
|
-
print("reading lagtc generator")
|
|
292
|
-
lagtcgeneratorfile = f"{args.datafileroot}_desc-lagtcgenerator_timeseries"
|
|
293
|
-
genlagtc = tide_resample.FastResamplerFromFile(lagtcgeneratorfile)
|
|
294
|
-
|
|
295
|
-
# select the voxels in the mask
|
|
296
|
-
print("figuring out valid voxels")
|
|
297
|
-
validvoxels = np.where(procmask_spacebytime > 0)[0]
|
|
298
|
-
if args.debug:
|
|
299
|
-
print(f"{validvoxels.shape=}")
|
|
300
|
-
numvalidspatiallocs = np.shape(validvoxels)[0]
|
|
301
|
-
if args.debug:
|
|
302
|
-
print(f"{numvalidspatiallocs=}")
|
|
303
|
-
internalvalidspaceshape = numvalidspatiallocs
|
|
304
|
-
internalvalidspaceshapederivs = (
|
|
305
|
-
internalvalidspaceshape,
|
|
306
|
-
args.glmderivs + 1,
|
|
307
|
-
)
|
|
308
|
-
internalvalidfmrishape = (numvalidspatiallocs, np.shape(initial_fmri_x)[0])
|
|
309
|
-
if args.debug:
|
|
310
|
-
print(f"validvoxels shape = {numvalidspatiallocs}")
|
|
311
|
-
print(f"internalvalidfmrishape shape = {internalvalidfmrishape}")
|
|
312
|
-
|
|
313
|
-
# slicing to valid voxels
|
|
314
|
-
print("selecting valid voxels")
|
|
315
|
-
fmri_data_valid = fmri_data_spacebytime[validvoxels, :]
|
|
316
|
-
lagtimes_valid = lagtimes_spacebytime[validvoxels]
|
|
317
|
-
corrmask_valid = corrmask_spacebytime[validvoxels]
|
|
318
|
-
procmask_valid = procmask_spacebytime[validvoxels]
|
|
319
|
-
if args.debug:
|
|
320
|
-
print(f"{fmri_data_valid.shape=}")
|
|
321
|
-
|
|
322
|
-
if usesharedmem:
|
|
323
|
-
if args.debug:
|
|
324
|
-
print("allocating shared memory")
|
|
325
|
-
glmmean, dummy, dummy = tide_util.allocshared(internalvalidspaceshape, rt_outfloatset)
|
|
326
|
-
rvalue, dummy, dummy = tide_util.allocshared(internalvalidspaceshape, rt_outfloatset)
|
|
327
|
-
r2value, dummy, dummy = tide_util.allocshared(internalvalidspaceshape, rt_outfloatset)
|
|
328
|
-
fitNorm, dummy, dummy = tide_util.allocshared(
|
|
329
|
-
internalvalidspaceshapederivs, rt_outfloatset
|
|
330
|
-
)
|
|
331
|
-
fitcoeff, dummy, dummy = tide_util.allocshared(
|
|
332
|
-
internalvalidspaceshapederivs, rt_outfloatset
|
|
333
|
-
)
|
|
334
|
-
movingsignal, dummy, dummy = tide_util.allocshared(internalvalidfmrishape, rt_outfloatset)
|
|
335
|
-
lagtc, dummy, dummy = tide_util.allocshared(internalvalidfmrishape, rt_floatset)
|
|
336
|
-
filtereddata, dummy, dummy = tide_util.allocshared(internalvalidfmrishape, rt_outfloatset)
|
|
337
|
-
else:
|
|
338
|
-
if args.debug:
|
|
339
|
-
print("allocating memory")
|
|
340
|
-
glmmean = np.zeros(internalvalidspaceshape, dtype=rt_outfloattype)
|
|
341
|
-
rvalue = np.zeros(internalvalidspaceshape, dtype=rt_outfloattype)
|
|
342
|
-
r2value = np.zeros(internalvalidspaceshape, dtype=rt_outfloattype)
|
|
343
|
-
fitNorm = np.zeros(internalvalidspaceshapederivs, dtype=rt_outfloattype)
|
|
344
|
-
fitcoeff = np.zeros(internalvalidspaceshapederivs, dtype=rt_outfloattype)
|
|
345
|
-
movingsignal = np.zeros(internalvalidfmrishape, dtype=rt_outfloattype)
|
|
346
|
-
lagtc = np.zeros(internalvalidfmrishape, dtype=rt_floattype)
|
|
347
|
-
filtereddata = np.zeros(internalvalidfmrishape, dtype=rt_outfloattype)
|
|
348
|
-
|
|
349
|
-
oversampfactor = int(therunoptions["oversampfactor"])
|
|
350
|
-
if args.alternateoutput is None:
|
|
351
|
-
outputname = therunoptions["outputname"]
|
|
352
|
-
else:
|
|
353
|
-
outputname = args.alternateoutput
|
|
354
|
-
if args.debug:
|
|
355
|
-
print(f"{outputname=}")
|
|
356
|
-
oversamptr = fmritr / oversampfactor
|
|
357
|
-
try:
|
|
358
|
-
threshval = therunoptions["glmthreshval"]
|
|
359
|
-
except KeyError:
|
|
360
|
-
threshval = 0.0
|
|
361
|
-
mode = "glm"
|
|
362
|
-
|
|
363
|
-
outputpath = os.path.dirname(outputname)
|
|
364
|
-
rawsources = [
|
|
365
|
-
os.path.relpath(args.fmrifile, start=outputpath),
|
|
366
|
-
os.path.relpath(lagtimesfile, start=outputpath),
|
|
367
|
-
os.path.relpath(corrmaskfile, start=outputpath),
|
|
368
|
-
os.path.relpath(procmaskfile, start=outputpath),
|
|
369
|
-
os.path.relpath(runoptionsfile, start=outputpath),
|
|
370
|
-
os.path.relpath(lagtcgeneratorfile, start=outputpath),
|
|
371
|
-
]
|
|
372
|
-
|
|
373
|
-
bidsbasedict = {
|
|
374
|
-
"RawSources": rawsources,
|
|
375
|
-
"Units": "arbitrary",
|
|
376
|
-
"CommandLineArgs": thecommandline,
|
|
377
|
-
}
|
|
378
|
-
|
|
379
|
-
if args.debug:
|
|
380
|
-
# dump the fmri input file going to glm
|
|
381
|
-
theheader = copy.deepcopy(fmri_header)
|
|
382
|
-
theheader["dim"][4] = validtimepoints
|
|
383
|
-
theheader["pixdim"][4] = fmritr
|
|
384
|
-
|
|
385
|
-
maplist = [
|
|
386
|
-
(
|
|
387
|
-
fmri_data_valid,
|
|
388
|
-
"datatofilter",
|
|
389
|
-
"bold",
|
|
390
|
-
None,
|
|
391
|
-
"fMRI data that will be subjected to GLM filtering",
|
|
392
|
-
),
|
|
393
|
-
]
|
|
394
|
-
tide_io.savemaplist(
|
|
395
|
-
outputname,
|
|
396
|
-
maplist,
|
|
397
|
-
validvoxels,
|
|
398
|
-
(xsize, ysize, numslices, validtimepoints),
|
|
399
|
-
theheader,
|
|
400
|
-
bidsbasedict,
|
|
401
|
-
textio=False,
|
|
402
|
-
fileiscifti=False,
|
|
403
|
-
rt_floattype=rt_floattype,
|
|
404
|
-
cifti_hdr=None,
|
|
405
|
-
)
|
|
406
|
-
|
|
407
|
-
initialvariance = tide_math.imagevariance(fmri_data_valid, theprefilter, 1.0 / fmritr)
|
|
408
|
-
|
|
409
|
-
print("calling glmmfrommaps")
|
|
410
|
-
voxelsprocessed_glm, regressorset = tide_glmfrommaps.glmfrommaps(
|
|
411
|
-
fmri_data_valid,
|
|
412
|
-
validvoxels,
|
|
413
|
-
initial_fmri_x,
|
|
414
|
-
lagtimes_valid,
|
|
415
|
-
corrmask_valid,
|
|
416
|
-
genlagtc,
|
|
417
|
-
mode,
|
|
418
|
-
outputname,
|
|
419
|
-
oversamptr,
|
|
420
|
-
glmmean,
|
|
421
|
-
rvalue,
|
|
422
|
-
r2value,
|
|
423
|
-
fitNorm,
|
|
424
|
-
fitcoeff,
|
|
425
|
-
movingsignal,
|
|
426
|
-
lagtc,
|
|
427
|
-
filtereddata,
|
|
428
|
-
LGR,
|
|
429
|
-
TimingLGR,
|
|
430
|
-
threshval,
|
|
431
|
-
args.saveminimumglmfiles,
|
|
432
|
-
nprocs_makelaggedtcs=args.nprocs,
|
|
433
|
-
nprocs_glm=args.nprocs,
|
|
434
|
-
glmderivs=args.glmderivs,
|
|
435
|
-
showprogressbar=args.showprogressbar,
|
|
436
|
-
debug=args.debug,
|
|
437
|
-
)
|
|
438
|
-
|
|
439
|
-
print(f"filtered {voxelsprocessed_glm} voxels")
|
|
440
|
-
finalvariance = tide_math.imagevariance(filtereddata, theprefilter, 1.0 / fmritr)
|
|
441
|
-
divlocs = np.where(finalvariance > 0.0)
|
|
442
|
-
varchange = initialvariance * 0.0
|
|
443
|
-
varchange[divlocs] = 100.0 * (finalvariance[divlocs] / initialvariance[divlocs] - 1.0)
|
|
444
|
-
|
|
445
|
-
theheader = copy.deepcopy(lagtimes_header)
|
|
446
|
-
if mode == "glm":
|
|
447
|
-
maplist = [
|
|
448
|
-
(
|
|
449
|
-
initialvariance,
|
|
450
|
-
"lfofilterInbandVarianceBefore",
|
|
451
|
-
"map",
|
|
452
|
-
None,
|
|
453
|
-
"Inband variance prior to filtering",
|
|
454
|
-
),
|
|
455
|
-
(
|
|
456
|
-
finalvariance,
|
|
457
|
-
"lfofilterInbandVarianceAfter",
|
|
458
|
-
"map",
|
|
459
|
-
None,
|
|
460
|
-
"Inband variance after filtering",
|
|
461
|
-
),
|
|
462
|
-
(
|
|
463
|
-
varchange,
|
|
464
|
-
"lfofilterInbandVarianceChange",
|
|
465
|
-
"map",
|
|
466
|
-
"percent",
|
|
467
|
-
"Change in inband variance after filtering, in percent",
|
|
468
|
-
),
|
|
469
|
-
]
|
|
470
|
-
if args.saveminimumglmfiles:
|
|
471
|
-
maplist += [
|
|
472
|
-
(
|
|
473
|
-
r2value,
|
|
474
|
-
"lfofilterR2",
|
|
475
|
-
"map",
|
|
476
|
-
None,
|
|
477
|
-
"Squared R value of the GLM fit (proportion of variance explained)",
|
|
478
|
-
),
|
|
479
|
-
]
|
|
480
|
-
if args.savenormalglmfiles:
|
|
481
|
-
maplist += [
|
|
482
|
-
(rvalue, "lfofilterR", "map", None, "R value of the GLM fit"),
|
|
483
|
-
(glmmean, "lfofilterMean", "map", None, "Intercept from GLM fit"),
|
|
484
|
-
]
|
|
485
|
-
else:
|
|
486
|
-
maplist = [
|
|
487
|
-
(initialvariance, "lfofilterInbandVarianceBefore", "map", None),
|
|
488
|
-
(finalvariance, "lfofilterInbandVarianceAfter", "map", None),
|
|
489
|
-
(varchange, "CVRVariance", "map", None),
|
|
490
|
-
]
|
|
491
|
-
if args.savenormalglmfiles:
|
|
492
|
-
maplist += [
|
|
493
|
-
(rvalue, "CVRR", "map", None),
|
|
494
|
-
(r2value, "CVRR2", "map", None),
|
|
495
|
-
(fitcoeff, "CVR", "map", "percent"),
|
|
496
|
-
]
|
|
497
|
-
|
|
498
|
-
bidsdict = bidsbasedict.copy()
|
|
499
|
-
|
|
500
|
-
if args.debug:
|
|
501
|
-
maplist += [
|
|
502
|
-
(
|
|
503
|
-
lagtimes_valid,
|
|
504
|
-
"maxtimeREAD",
|
|
505
|
-
"map",
|
|
506
|
-
"second",
|
|
507
|
-
"Lag time in seconds used for calculation",
|
|
508
|
-
),
|
|
509
|
-
(corrmask_valid, "corrfitREAD", "mask", None, "Correlation mask used for calculation"),
|
|
510
|
-
(procmask_valid, "processedREAD", "mask", None, "Processed mask used for calculation"),
|
|
511
|
-
]
|
|
512
|
-
if args.savenormalglmfiles:
|
|
513
|
-
if args.glmderivs > 0:
|
|
514
|
-
maplist += [
|
|
515
|
-
(fitcoeff[:, 0], "lfofilterCoeff", "map", None, "Fit coefficient"),
|
|
516
|
-
(fitNorm[:, 0], "lfofilterNorm", "map", None, "Normalized fit coefficient"),
|
|
517
|
-
]
|
|
518
|
-
for thederiv in range(1, args.glmderivs + 1):
|
|
519
|
-
maplist += [
|
|
520
|
-
(
|
|
521
|
-
fitcoeff[:, thederiv],
|
|
522
|
-
f"lfofilterCoeffDeriv{thederiv}",
|
|
523
|
-
"map",
|
|
524
|
-
None,
|
|
525
|
-
f"Fit coefficient for temporal derivative {thederiv}",
|
|
526
|
-
),
|
|
527
|
-
(
|
|
528
|
-
fitNorm[:, thederiv],
|
|
529
|
-
f"lfofilterNormDeriv{thederiv}",
|
|
530
|
-
"map",
|
|
531
|
-
None,
|
|
532
|
-
f"Normalized fit coefficient for temporal derivative {thederiv}",
|
|
533
|
-
),
|
|
534
|
-
]
|
|
535
|
-
else:
|
|
536
|
-
maplist += [
|
|
537
|
-
(fitcoeff, "lfofilterCoeff", "map", None, "Fit coefficient"),
|
|
538
|
-
(fitNorm, "lfofilterNorm", "map", None, "Normalized fit coefficient"),
|
|
539
|
-
]
|
|
540
|
-
|
|
541
|
-
# write the 3D maps
|
|
542
|
-
tide_io.savemaplist(
|
|
543
|
-
outputname,
|
|
544
|
-
maplist,
|
|
545
|
-
validvoxels,
|
|
546
|
-
(xsize, ysize, numslices),
|
|
547
|
-
theheader,
|
|
548
|
-
bidsdict,
|
|
549
|
-
debug=args.debug,
|
|
550
|
-
)
|
|
551
|
-
|
|
552
|
-
# write the 4D maps
|
|
553
|
-
theheader = copy.deepcopy(fmri_header)
|
|
554
|
-
maplist = []
|
|
555
|
-
if args.saveminimumglmfiles:
|
|
556
|
-
maplist = [
|
|
557
|
-
(
|
|
558
|
-
filtereddata,
|
|
559
|
-
"lfofilterCleaned",
|
|
560
|
-
"bold",
|
|
561
|
-
None,
|
|
562
|
-
"fMRI data with sLFO signal filtered out",
|
|
563
|
-
),
|
|
564
|
-
]
|
|
565
|
-
if args.savemovingsignal:
|
|
566
|
-
maplist += [
|
|
567
|
-
(
|
|
568
|
-
movingsignal,
|
|
569
|
-
"lfofilterRemoved",
|
|
570
|
-
"bold",
|
|
571
|
-
None,
|
|
572
|
-
"sLFO signal filtered out of this voxel",
|
|
573
|
-
)
|
|
574
|
-
]
|
|
575
|
-
|
|
576
|
-
if args.saveallglmfiles:
|
|
577
|
-
if args.glmderivs > 0:
|
|
578
|
-
if args.debug:
|
|
579
|
-
print("going down the multiple EV path")
|
|
580
|
-
print(f"{regressorset[:, :, 0].shape=}")
|
|
581
|
-
maplist += [
|
|
582
|
-
(
|
|
583
|
-
regressorset[:, :, 0],
|
|
584
|
-
"lfofilterEV",
|
|
585
|
-
"bold",
|
|
586
|
-
None,
|
|
587
|
-
"Shifted sLFO regressor to filter",
|
|
588
|
-
),
|
|
589
|
-
]
|
|
590
|
-
for thederiv in range(1, args.glmderivs + 1):
|
|
591
|
-
if args.debug:
|
|
592
|
-
print(f"{regressorset[:, :, thederiv].shape=}")
|
|
593
|
-
maplist += [
|
|
594
|
-
(
|
|
595
|
-
regressorset[:, :, thederiv],
|
|
596
|
-
f"lfofilterEVDeriv{thederiv}",
|
|
597
|
-
"bold",
|
|
598
|
-
None,
|
|
599
|
-
f"Time derivative {thederiv} of shifted sLFO regressor",
|
|
600
|
-
),
|
|
601
|
-
]
|
|
602
|
-
else:
|
|
603
|
-
if args.debug:
|
|
604
|
-
print("going down the single EV path")
|
|
605
|
-
maplist += [
|
|
606
|
-
(
|
|
607
|
-
regressorset,
|
|
608
|
-
"lfofilterEV",
|
|
609
|
-
"bold",
|
|
610
|
-
None,
|
|
611
|
-
"Shifted sLFO regressor to filter",
|
|
612
|
-
),
|
|
613
|
-
]
|
|
614
|
-
if args.debug:
|
|
615
|
-
maplist.append((fmri_data_valid, "inputdata", "bold", None, None))
|
|
616
|
-
if args.makepseudofile:
|
|
617
|
-
print("reading mean image")
|
|
618
|
-
meanfile = f"{args.datafileroot}_desc-mean_map.nii.gz"
|
|
619
|
-
(
|
|
620
|
-
mean_input,
|
|
621
|
-
mean,
|
|
622
|
-
mean_header,
|
|
623
|
-
mean_dims,
|
|
624
|
-
mean_sizes,
|
|
625
|
-
) = tide_io.readfromnifti(meanfile)
|
|
626
|
-
if not tide_io.checkspacematch(fmri_header, mean_header):
|
|
627
|
-
raise ValueError("mean dimensions do not match fmri dimensions")
|
|
628
|
-
if args.debug:
|
|
629
|
-
print(f"{mean.shape=}")
|
|
630
|
-
mean_spacebytime = mean.reshape((numspatiallocs))
|
|
631
|
-
if args.debug:
|
|
632
|
-
print(f"{mean_spacebytime.shape=}")
|
|
633
|
-
pseudofile = mean_spacebytime[validvoxels, None] + movingsignal[:, :]
|
|
634
|
-
maplist.append((pseudofile, "pseudofile", "bold", None, None))
|
|
635
|
-
tide_io.savemaplist(
|
|
636
|
-
outputname,
|
|
637
|
-
maplist,
|
|
638
|
-
validvoxels,
|
|
639
|
-
(xsize, ysize, numslices, validtimepoints),
|
|
640
|
-
theheader,
|
|
641
|
-
bidsdict,
|
|
642
|
-
debug=args.debug,
|
|
643
|
-
)
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
#!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.adjustoffset as theworkflow
|
|
20
|
-
import rapidtide.workflows.parser_funcs as pf
|
|
21
|
-
|
|
22
|
-
if __name__ == "__main__":
|
|
23
|
-
pf.generic_init(theworkflow._get_parser, theworkflow.adjustoffset)
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
#!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.aligntcs as theworkflow
|
|
20
|
-
import rapidtide.workflows.parser_funcs as pf
|
|
21
|
-
|
|
22
|
-
if __name__ == "__main__":
|
|
23
|
-
pf.generic_init(theworkflow._get_parser, theworkflow.aligntcs)
|