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/externaltools.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
# -*- coding: utf-8 -*-
|
|
3
3
|
#
|
|
4
|
-
# Copyright 2016-
|
|
4
|
+
# Copyright 2016-2025 Blaise Frederick
|
|
5
5
|
#
|
|
6
6
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
7
|
# you may not use this file except in compliance with the License.
|
|
@@ -24,7 +24,33 @@ import rapidtide.io as tide_io
|
|
|
24
24
|
import rapidtide.util as tide_util
|
|
25
25
|
|
|
26
26
|
|
|
27
|
-
def fslinfo():
|
|
27
|
+
def fslinfo() -> str | None:
|
|
28
|
+
"""
|
|
29
|
+
Get FSL directory path from environment variable.
|
|
30
|
+
|
|
31
|
+
This function retrieves the FSL directory path from the FSLDIR environment
|
|
32
|
+
variable. It also sets a global flag `fslexists` to indicate whether FSL
|
|
33
|
+
is available in the current environment.
|
|
34
|
+
|
|
35
|
+
Returns
|
|
36
|
+
-------
|
|
37
|
+
str or None
|
|
38
|
+
The path to the FSL directory if FSLDIR environment variable is set,
|
|
39
|
+
otherwise None.
|
|
40
|
+
|
|
41
|
+
Notes
|
|
42
|
+
-----
|
|
43
|
+
This function modifies the global variable `fslexists` which is set to
|
|
44
|
+
True if FSLDIR is found, False otherwise. The function does not perform
|
|
45
|
+
any validation of the FSL directory existence or integrity.
|
|
46
|
+
|
|
47
|
+
Examples
|
|
48
|
+
--------
|
|
49
|
+
>>> fslinfo()
|
|
50
|
+
'/usr/local/fsl' # if FSLDIR is set
|
|
51
|
+
>>> fslinfo()
|
|
52
|
+
None # if FSLDIR is not set
|
|
53
|
+
"""
|
|
28
54
|
global fslexists
|
|
29
55
|
fsldir = os.environ.get("FSLDIR")
|
|
30
56
|
if fsldir is not None:
|
|
@@ -34,7 +60,35 @@ def fslinfo():
|
|
|
34
60
|
return fsldir
|
|
35
61
|
|
|
36
62
|
|
|
37
|
-
def whatexists():
|
|
63
|
+
def whatexists() -> tuple[bool, bool, bool]:
|
|
64
|
+
"""
|
|
65
|
+
Check for existence of FSL, c3d, and ANTS executables.
|
|
66
|
+
|
|
67
|
+
This function checks whether the FSL directory is set in the environment
|
|
68
|
+
and verifies the existence of c3d_affine_tool and antsApplyTransforms
|
|
69
|
+
executables in the system PATH.
|
|
70
|
+
|
|
71
|
+
Returns
|
|
72
|
+
-------
|
|
73
|
+
tuple[bool, bool, bool]
|
|
74
|
+
A tuple containing three boolean values:
|
|
75
|
+
- First value: True if FSLDIR environment variable is set, False otherwise
|
|
76
|
+
- Second value: True if c3d_affine_tool executable is found, False otherwise
|
|
77
|
+
- Third value: True if antsApplyTransforms executable is found, False otherwise
|
|
78
|
+
|
|
79
|
+
Notes
|
|
80
|
+
-----
|
|
81
|
+
The function uses os.environ.get() to check for FSLDIR and tide_util.isexecutable()
|
|
82
|
+
to check for executable existence. The results are printed to stdout for debugging
|
|
83
|
+
purposes.
|
|
84
|
+
|
|
85
|
+
Examples
|
|
86
|
+
--------
|
|
87
|
+
>>> whatexists()
|
|
88
|
+
c3dexists = True
|
|
89
|
+
antsexists = False
|
|
90
|
+
(True, True, False)
|
|
91
|
+
"""
|
|
38
92
|
fsldir = os.environ.get("FSLDIR")
|
|
39
93
|
if fsldir is not None:
|
|
40
94
|
fslexists = True
|
|
@@ -48,15 +102,91 @@ def whatexists():
|
|
|
48
102
|
return fslexists, c3dexists, antsexists
|
|
49
103
|
|
|
50
104
|
|
|
51
|
-
def getfslcmds():
|
|
105
|
+
def getfslcmds() -> tuple[str | None, str | None, str | None]:
|
|
106
|
+
"""
|
|
107
|
+
Get paths to FSL command executables.
|
|
108
|
+
|
|
109
|
+
This function retrieves the paths to three core FSL commands (fsl_sub, flirt, and applywarp)
|
|
110
|
+
by looking up the FSLDIR environment variable. If FSLDIR is not set, all returned paths will be None.
|
|
111
|
+
|
|
112
|
+
Returns
|
|
113
|
+
-------
|
|
114
|
+
tuple[str | None, str | None, str | None]
|
|
115
|
+
A tuple containing three elements:
|
|
116
|
+
- fslsubcmd: Path to fsl_sub command, or None if FSLDIR is not set
|
|
117
|
+
- flirtcmd: Path to flirt command, or None if FSLDIR is not set
|
|
118
|
+
- applywarpcmd: Path to applywarp command, or None if FSLDIR is not set
|
|
119
|
+
|
|
120
|
+
Notes
|
|
121
|
+
-----
|
|
122
|
+
The function expects the FSLDIR environment variable to be set to the FSL installation directory.
|
|
123
|
+
The returned paths are constructed by joining the FSLDIR with "bin/fsl_sub", "bin/flirt", and "bin/applywarp".
|
|
124
|
+
|
|
125
|
+
Examples
|
|
126
|
+
--------
|
|
127
|
+
>>> fslsub, flirt, applywarp = getfslcmds()
|
|
128
|
+
>>> print(fslsub)
|
|
129
|
+
'/usr/local/fsl/bin/fsl_sub' # if FSLDIR is set
|
|
130
|
+
>>> print(flirt)
|
|
131
|
+
'/usr/local/fsl/bin/flirt' # if FSLDIR is set
|
|
132
|
+
>>> print(applywarp)
|
|
133
|
+
'/usr/local/fsl/bin/applywarp' # if FSLDIR is set
|
|
134
|
+
"""
|
|
52
135
|
fsldir = os.environ.get("FSLDIR")
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
136
|
+
if fsldir is not None:
|
|
137
|
+
fslsubcmd = os.path.join(fsldir, "bin", "fsl_sub")
|
|
138
|
+
flirtcmd = os.path.join(fsldir, "bin", "flirt")
|
|
139
|
+
applywarpcmd = os.path.join(fsldir, "bin", "applywarp")
|
|
140
|
+
else:
|
|
141
|
+
fslsubcmd = None
|
|
142
|
+
flirtcmd = None
|
|
143
|
+
applywarpcmd = None
|
|
56
144
|
return fslsubcmd, flirtcmd, applywarpcmd
|
|
57
145
|
|
|
58
146
|
|
|
59
|
-
def runcmd(thecmd, fake=False, debug=False):
|
|
147
|
+
def runcmd(thecmd: list[str], fake: bool = False, debug: bool = False) -> None:
|
|
148
|
+
"""
|
|
149
|
+
Execute a command using subprocess.call or simulate execution.
|
|
150
|
+
|
|
151
|
+
This function executes a command represented as a list of strings using
|
|
152
|
+
subprocess.call. It can also simulate command execution for testing purposes
|
|
153
|
+
when the 'fake' parameter is set to True.
|
|
154
|
+
|
|
155
|
+
Parameters
|
|
156
|
+
----------
|
|
157
|
+
thecmd : list[str]
|
|
158
|
+
Command to execute, represented as a list of strings where the first
|
|
159
|
+
element is the command and subsequent elements are arguments.
|
|
160
|
+
fake : bool, optional
|
|
161
|
+
If True, print the command that would be executed without actually
|
|
162
|
+
running it. Default is False.
|
|
163
|
+
debug : bool, optional
|
|
164
|
+
If True, print the command before executing or simulating. Default is False.
|
|
165
|
+
|
|
166
|
+
Returns
|
|
167
|
+
-------
|
|
168
|
+
None
|
|
169
|
+
This function does not return any value.
|
|
170
|
+
|
|
171
|
+
Notes
|
|
172
|
+
-----
|
|
173
|
+
The function uses subprocess.call to execute commands, which means it will
|
|
174
|
+
block until the command completes. The 'fake' mode is useful for testing
|
|
175
|
+
without actually executing commands.
|
|
176
|
+
|
|
177
|
+
Examples
|
|
178
|
+
--------
|
|
179
|
+
>>> runcmd(['ls', '-l'])
|
|
180
|
+
# Executes 'ls -l' command
|
|
181
|
+
|
|
182
|
+
>>> runcmd(['echo', 'hello'], fake=True)
|
|
183
|
+
# Prints: echo hello
|
|
184
|
+
# But does not actually execute the echo command
|
|
185
|
+
|
|
186
|
+
>>> runcmd(['python', '--version'], debug=True)
|
|
187
|
+
# Prints: ['python', '--version']
|
|
188
|
+
# Then executes the command
|
|
189
|
+
"""
|
|
60
190
|
if debug:
|
|
61
191
|
print(thecmd)
|
|
62
192
|
if fake:
|
|
@@ -67,8 +197,59 @@ def runcmd(thecmd, fake=False, debug=False):
|
|
|
67
197
|
|
|
68
198
|
|
|
69
199
|
def makeflirtcmd(
|
|
70
|
-
inputfile
|
|
71
|
-
|
|
200
|
+
inputfile: str,
|
|
201
|
+
targetname: str,
|
|
202
|
+
xform: str,
|
|
203
|
+
outputname: str,
|
|
204
|
+
warpfile: str | None = None,
|
|
205
|
+
cluster: bool = False,
|
|
206
|
+
debug: bool = False,
|
|
207
|
+
) -> list[str]:
|
|
208
|
+
"""
|
|
209
|
+
Create FSL FLIRT command for image registration.
|
|
210
|
+
|
|
211
|
+
This function generates a command list for FSL's FLIRT tool to perform either
|
|
212
|
+
linear or nonlinear image registration depending on whether a warp file is provided.
|
|
213
|
+
|
|
214
|
+
Parameters
|
|
215
|
+
----------
|
|
216
|
+
inputfile : str
|
|
217
|
+
Path to the input image file to be registered
|
|
218
|
+
targetname : str
|
|
219
|
+
Path to the target reference image
|
|
220
|
+
xform : str
|
|
221
|
+
Path to the transformation matrix file (for linear registration)
|
|
222
|
+
outputname : str
|
|
223
|
+
Path where the registered output image will be saved
|
|
224
|
+
warpfile : str, optional
|
|
225
|
+
Path to the warp field file for nonlinear registration. If None,
|
|
226
|
+
linear registration is performed (default is None)
|
|
227
|
+
cluster : bool, optional
|
|
228
|
+
If True, prefix the command with fslsub for cluster execution (default is False)
|
|
229
|
+
debug : bool, optional
|
|
230
|
+
If True, print the constructed command for debugging purposes (default is False)
|
|
231
|
+
|
|
232
|
+
Returns
|
|
233
|
+
-------
|
|
234
|
+
list[str]
|
|
235
|
+
List of command arguments that can be executed using subprocess or similar
|
|
236
|
+
|
|
237
|
+
Notes
|
|
238
|
+
-----
|
|
239
|
+
- For linear registration, the function uses FLIRT with the -applyxfm flag
|
|
240
|
+
- For nonlinear registration, the function uses applywarp instead of FLIRT
|
|
241
|
+
- The function prints transformation type information to stdout
|
|
242
|
+
|
|
243
|
+
Examples
|
|
244
|
+
--------
|
|
245
|
+
>>> cmd = makeflirtcmd('input.nii', 'target.nii', 'xform.mat', 'output.nii')
|
|
246
|
+
>>> print(' '.join(cmd))
|
|
247
|
+
flirt -in input.nii -ref target.nii -applyxfm -init xform.mat -out output.nii
|
|
248
|
+
|
|
249
|
+
>>> cmd = makeflirtcmd('input.nii', 'target.nii', 'xform.mat', 'output.nii', 'warp.nii')
|
|
250
|
+
>>> print(' '.join(cmd))
|
|
251
|
+
applywarp --ref=target.nii --in=input.nii --out=output.nii --warp=warp.nii
|
|
252
|
+
"""
|
|
72
253
|
fslsubcmd, flirtcmd, applywarpcmd = getfslcmds()
|
|
73
254
|
thecommand = []
|
|
74
255
|
if warpfile is None:
|
|
@@ -99,12 +280,101 @@ def makeflirtcmd(
|
|
|
99
280
|
return thecommand
|
|
100
281
|
|
|
101
282
|
|
|
102
|
-
def runflirt(
|
|
283
|
+
def runflirt(
|
|
284
|
+
inputfile: str,
|
|
285
|
+
targetname: str,
|
|
286
|
+
xform: str,
|
|
287
|
+
outputname: str,
|
|
288
|
+
warpfile: str | None = None,
|
|
289
|
+
fake: bool = False,
|
|
290
|
+
debug: bool = False,
|
|
291
|
+
) -> None:
|
|
292
|
+
"""
|
|
293
|
+
Run FLIRT (FMRIB's Linear Image Registration Tool) for image registration.
|
|
294
|
+
|
|
295
|
+
This function constructs and executes a FLIRT command for linear image registration
|
|
296
|
+
between an input file and a target file. It supports various transformation types
|
|
297
|
+
and can optionally generate warp fields for non-linear registration.
|
|
298
|
+
|
|
299
|
+
Parameters
|
|
300
|
+
----------
|
|
301
|
+
inputfile : str
|
|
302
|
+
Path to the input image file to be registered
|
|
303
|
+
targetname : str
|
|
304
|
+
Path to the target image file for registration
|
|
305
|
+
xform : str
|
|
306
|
+
Transformation type to use (e.g., 'rigid', 'affine', 'syn')
|
|
307
|
+
outputname : str
|
|
308
|
+
Path where the registered output image will be saved
|
|
309
|
+
warpfile : str, optional
|
|
310
|
+
Path to save the warp field file (default is None)
|
|
311
|
+
fake : bool, optional
|
|
312
|
+
If True, only print the command without executing it (default is False)
|
|
313
|
+
debug : bool, optional
|
|
314
|
+
If True, enable debug mode with additional output (default is False)
|
|
315
|
+
|
|
316
|
+
Returns
|
|
317
|
+
-------
|
|
318
|
+
None
|
|
319
|
+
This function does not return any value
|
|
320
|
+
|
|
321
|
+
Notes
|
|
322
|
+
-----
|
|
323
|
+
This function relies on the `makeflirtcmd` function to construct the command
|
|
324
|
+
and `runcmd` function to execute it. The actual FLIRT command execution
|
|
325
|
+
is delegated to these helper functions.
|
|
326
|
+
|
|
327
|
+
Examples
|
|
328
|
+
--------
|
|
329
|
+
>>> runflirt('input.nii.gz', 'target.nii.gz', 'affine', 'output.nii.gz')
|
|
330
|
+
>>> runflirt('input.nii.gz', 'target.nii.gz', 'rigid', 'output.nii.gz',
|
|
331
|
+
... warpfile='warpfield.nii.gz', fake=True)
|
|
332
|
+
"""
|
|
103
333
|
thecommand = makeflirtcmd(inputfile, targetname, xform, outputname, warpfile=warpfile)
|
|
104
334
|
runcmd(thecommand, fake=fake, debug=debug)
|
|
105
335
|
|
|
106
336
|
|
|
107
|
-
def n4correct(inputfile, outputdir, fake=False, debug=False):
|
|
337
|
+
def n4correct(inputfile: str, outputdir: str, fake: bool = False, debug: bool = False) -> None:
|
|
338
|
+
"""
|
|
339
|
+
Apply N4 bias field correction to MRI images.
|
|
340
|
+
|
|
341
|
+
This function performs N4 bias field correction using the ANTs N4BiasFieldCorrection
|
|
342
|
+
tool. It corrects intensity inhomogeneities in MRI images by estimating and removing
|
|
343
|
+
the bias field component from the input image.
|
|
344
|
+
|
|
345
|
+
Parameters
|
|
346
|
+
----------
|
|
347
|
+
inputfile : str
|
|
348
|
+
Path to the input NIfTI image file to be corrected
|
|
349
|
+
outputdir : str
|
|
350
|
+
Directory path where the corrected output file will be saved
|
|
351
|
+
fake : bool, optional
|
|
352
|
+
If True, only print the command that would be executed without actually running it
|
|
353
|
+
Default is False
|
|
354
|
+
debug : bool, optional
|
|
355
|
+
If True, enable debug mode to print additional information during execution
|
|
356
|
+
Default is False
|
|
357
|
+
|
|
358
|
+
Returns
|
|
359
|
+
-------
|
|
360
|
+
None
|
|
361
|
+
This function does not return any value but saves the corrected image to the
|
|
362
|
+
specified output directory
|
|
363
|
+
|
|
364
|
+
Notes
|
|
365
|
+
-----
|
|
366
|
+
The output file will be saved with the naming convention: {input_filename}_n4{file_extension}
|
|
367
|
+
|
|
368
|
+
Examples
|
|
369
|
+
--------
|
|
370
|
+
>>> n4correct('subject1.nii.gz', '/path/to/output')
|
|
371
|
+
>>> n4correct('subject1.nii.gz', '/path/to/output', fake=True, debug=True)
|
|
372
|
+
|
|
373
|
+
See Also
|
|
374
|
+
--------
|
|
375
|
+
tide_io.niftisplitext : Function used to split filename and extension
|
|
376
|
+
runcmd : Function used to execute the N4 command
|
|
377
|
+
"""
|
|
108
378
|
thename, theext = tide_io.niftisplitext(inputfile)
|
|
109
379
|
n4cmd = []
|
|
110
380
|
n4cmd += ["N4BiasFieldCorrection"]
|
|
@@ -114,7 +384,52 @@ def n4correct(inputfile, outputdir, fake=False, debug=False):
|
|
|
114
384
|
runcmd(n4cmd, fake=fake, debug=debug)
|
|
115
385
|
|
|
116
386
|
|
|
117
|
-
def antsapply(
|
|
387
|
+
def antsapply(
|
|
388
|
+
inputname: str,
|
|
389
|
+
targetname: str,
|
|
390
|
+
outputroot: str,
|
|
391
|
+
transforms: list[str],
|
|
392
|
+
fake: bool = False,
|
|
393
|
+
debug: bool = False,
|
|
394
|
+
) -> None:
|
|
395
|
+
"""
|
|
396
|
+
Apply ANTs transforms to an input image using antsApplyTransforms.
|
|
397
|
+
|
|
398
|
+
This function constructs and executes an antsApplyTransforms command to apply
|
|
399
|
+
a series of transforms to an input image, resampling it to match a target image.
|
|
400
|
+
|
|
401
|
+
Parameters
|
|
402
|
+
----------
|
|
403
|
+
inputname : str
|
|
404
|
+
Path to the input image to be transformed
|
|
405
|
+
targetname : str
|
|
406
|
+
Path to the target image (reference space) for resampling
|
|
407
|
+
outputroot : str
|
|
408
|
+
Root name for the output file (without extension)
|
|
409
|
+
transforms : list[str]
|
|
410
|
+
List of transform files to apply in order
|
|
411
|
+
fake : bool, optional
|
|
412
|
+
If True, only print the command without executing it (default: False)
|
|
413
|
+
debug : bool, optional
|
|
414
|
+
If True, print additional debug information (default: False)
|
|
415
|
+
|
|
416
|
+
Returns
|
|
417
|
+
-------
|
|
418
|
+
None
|
|
419
|
+
This function does not return a value but executes the antsApplyTransforms command
|
|
420
|
+
|
|
421
|
+
Notes
|
|
422
|
+
-----
|
|
423
|
+
The function uses antsApplyTransforms with the following fixed parameters:
|
|
424
|
+
- Default value set to 0
|
|
425
|
+
- Dimensionality set to 3
|
|
426
|
+
- Uses the target image as reference for resampling
|
|
427
|
+
|
|
428
|
+
Examples
|
|
429
|
+
--------
|
|
430
|
+
>>> antsapply('input.nii.gz', 'target.nii.gz', 'output', ['transform1.nii.gz', 'transform2.nii.gz'])
|
|
431
|
+
>>> antsapply('input.nii.gz', 'target.nii.gz', 'output', ['transform1.nii.gz'], fake=True)
|
|
432
|
+
"""
|
|
118
433
|
applyxfmcmd = []
|
|
119
434
|
applyxfmcmd += ["antsApplyTransforms"]
|
|
120
435
|
applyxfmcmd += ["--default-value", "0"]
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
#
|
|
4
|
+
# Copyright 2016-2025 Blaise Frederick
|
|
5
|
+
#
|
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
# you may not use this file except in compliance with the License.
|
|
8
|
+
# You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
# See the License for the specific language governing permissions and
|
|
16
|
+
# limitations under the License.
|
|
17
|
+
#
|
|
18
|
+
#
|
|
19
|
+
from typing import Any
|
|
20
|
+
|
|
21
|
+
import numpy as np
|
|
22
|
+
from numpy.typing import NDArray
|
|
23
|
+
|
|
24
|
+
import rapidtide.io as tide_io
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class fMRIData:
|
|
28
|
+
header = None
|
|
29
|
+
data = None
|
|
30
|
+
data_byvoxel = None
|
|
31
|
+
data_valid = None
|
|
32
|
+
nativeshape = None
|
|
33
|
+
mask = None
|
|
34
|
+
validvoxels = None
|
|
35
|
+
filename = None
|
|
36
|
+
filetype = None
|
|
37
|
+
|
|
38
|
+
def __init__(
|
|
39
|
+
self,
|
|
40
|
+
filename: str | None = None,
|
|
41
|
+
header: Any | None = None,
|
|
42
|
+
data: NDArray | None = None,
|
|
43
|
+
mask: NDArray | None = None,
|
|
44
|
+
validvoxels: NDArray | None = None,
|
|
45
|
+
dims: tuple | None = None,
|
|
46
|
+
sizes: tuple | None = None,
|
|
47
|
+
description: str | None = None,
|
|
48
|
+
) -> None:
|
|
49
|
+
"""
|
|
50
|
+
Initialize a new instance.
|
|
51
|
+
|
|
52
|
+
Parameters
|
|
53
|
+
----------
|
|
54
|
+
filename : str, optional
|
|
55
|
+
Path to the data file. Default is None.
|
|
56
|
+
header : Any, optional
|
|
57
|
+
Header information associated with the data. Default is None.
|
|
58
|
+
data : NDArray, optional
|
|
59
|
+
Main data array. Default is None.
|
|
60
|
+
mask : NDArray, optional
|
|
61
|
+
Mask array for data filtering. Default is None.
|
|
62
|
+
validvoxels : NDArray, optional
|
|
63
|
+
Array indicating valid voxels. Default is None.
|
|
64
|
+
dims : tuple, optional
|
|
65
|
+
Dimensions of the data. Default is None.
|
|
66
|
+
sizes : tuple, optional
|
|
67
|
+
Size information for the data. Default is None.
|
|
68
|
+
description : str, optional
|
|
69
|
+
Description of the data. Default is None.
|
|
70
|
+
|
|
71
|
+
Returns
|
|
72
|
+
-------
|
|
73
|
+
None
|
|
74
|
+
This method initializes the instance attributes but does not return anything.
|
|
75
|
+
|
|
76
|
+
Notes
|
|
77
|
+
-----
|
|
78
|
+
This constructor sets up the basic attributes for data handling. All parameters
|
|
79
|
+
are optional and can be None, allowing for flexible initialization of instances.
|
|
80
|
+
|
|
81
|
+
Examples
|
|
82
|
+
--------
|
|
83
|
+
>>> instance = MyClass()
|
|
84
|
+
>>> instance = MyClass(filename="data.nii", data=np.array([1, 2, 3]))
|
|
85
|
+
"""
|
|
86
|
+
self.filename = filename
|
|
87
|
+
self.header = header
|
|
88
|
+
self.data = data
|
|
89
|
+
self.mask = mask
|
|
90
|
+
self.validvoxels = validvoxels
|
|
91
|
+
self.dims = dims
|
|
92
|
+
self.sizes = sizes
|
|
93
|
+
self.description = description
|
|
94
|
+
|
|
95
|
+
def load(self, filename: str) -> None:
|
|
96
|
+
"""
|
|
97
|
+
Load fMRI data from a file.
|
|
98
|
+
|
|
99
|
+
Load fMRI data from a file, supporting text, CIFTI, and NIFTI formats.
|
|
100
|
+
The function determines the file type and reads the data accordingly,
|
|
101
|
+
setting appropriate attributes such as data shape, timepoints, and spatial dimensions.
|
|
102
|
+
|
|
103
|
+
Parameters
|
|
104
|
+
----------
|
|
105
|
+
filename : str
|
|
106
|
+
Path to the input file. Supported formats are text, CIFTI, and NIFTI.
|
|
107
|
+
|
|
108
|
+
Returns
|
|
109
|
+
-------
|
|
110
|
+
None
|
|
111
|
+
This function does not return a value but updates the instance attributes
|
|
112
|
+
with loaded data and metadata.
|
|
113
|
+
|
|
114
|
+
Notes
|
|
115
|
+
-----
|
|
116
|
+
This function modifies the instance state by setting the following attributes:
|
|
117
|
+
- `filename`: The path to the input file.
|
|
118
|
+
- `filetype`: The type of the file ('text', 'cifti', or 'nifti').
|
|
119
|
+
- `data`: The loaded data array.
|
|
120
|
+
- `header`: The header information (if available).
|
|
121
|
+
- `xsize`, `ysize`, `numslices`, `timepoints`: Spatial and temporal dimensions.
|
|
122
|
+
- `thesizes`: A list containing the dimensions of the data.
|
|
123
|
+
- `numspatiallocs`: Total number of spatial locations.
|
|
124
|
+
- `nativespaceshape`: Shape of the native space.
|
|
125
|
+
- `cifti_hdr`: CIFTI header (if applicable).
|
|
126
|
+
|
|
127
|
+
Examples
|
|
128
|
+
--------
|
|
129
|
+
>>> loader = DataReader()
|
|
130
|
+
>>> loader.load('fmri_data.nii.gz')
|
|
131
|
+
>>> print(loader.timepoints)
|
|
132
|
+
100
|
|
133
|
+
"""
|
|
134
|
+
self.filename = filename
|
|
135
|
+
####################################################
|
|
136
|
+
# Read data
|
|
137
|
+
####################################################
|
|
138
|
+
# open the fmri datafile
|
|
139
|
+
if tide_io.checkiftext(self.filename):
|
|
140
|
+
self.filetype = "text"
|
|
141
|
+
self.data = tide_io.readvecs(self.filename)
|
|
142
|
+
self.header = None
|
|
143
|
+
theshape = np.shape(nim_data)
|
|
144
|
+
self.xsize = theshape[0]
|
|
145
|
+
self.ysize = 1
|
|
146
|
+
self.numslices = 1
|
|
147
|
+
self.timepoints = theshape[1]
|
|
148
|
+
self.thesizes = [0, int(self.xsize), 1, 1, int(self.timepoints)]
|
|
149
|
+
self.numspatiallocs = int(self.xsize)
|
|
150
|
+
self.nativespaceshape = self.xsize
|
|
151
|
+
self.cifti_hdr = None
|
|
152
|
+
elif tide_io.checkifcifti(self.filename):
|
|
153
|
+
self.filetype = "cifti"
|
|
154
|
+
(
|
|
155
|
+
cifti,
|
|
156
|
+
cifti_hdr,
|
|
157
|
+
self.data,
|
|
158
|
+
self.header,
|
|
159
|
+
thedims,
|
|
160
|
+
thesizes,
|
|
161
|
+
dummy,
|
|
162
|
+
) = tide_io.readfromcifti(self.filename)
|
|
163
|
+
self.isgrayordinate = True
|
|
164
|
+
self.timepoints = nim_data.shape[1]
|
|
165
|
+
numspatiallocs = nim_data.shape[0]
|
|
166
|
+
LGR.debug(f"cifti file has {timepoints} timepoints, {numspatiallocs} numspatiallocs")
|
|
167
|
+
slicesize = numspatiallocs
|
|
168
|
+
nativespaceshape = (1, 1, 1, 1, numspatiallocs)
|
|
169
|
+
else:
|
|
170
|
+
self.filetype = "nifti"
|
|
171
|
+
LGR.debug("input file is NIFTI")
|
|
172
|
+
nim, self.data, self.header, thedims, thesizes = tide_io.readfromnifti(fmrifilename)
|
|
173
|
+
optiondict["isgrayordinate"] = False
|
|
174
|
+
xsize, ysize, numslices, timepoints = tide_io.parseniftidims(thedims)
|
|
175
|
+
numspatiallocs = int(xsize) * int(ysize) * int(numslices)
|
|
176
|
+
cifti_hdr = None
|
|
177
|
+
nativespaceshape = (xsize, ysize, numslices)
|
|
178
|
+
xdim, ydim, slicethickness, tr = tide_io.parseniftisizes(thesizes)
|