rapidtide 3.0a14__py3-none-any.whl → 3.0.1__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.
- rapidtide/Colortables.py +1 -1
- rapidtide/DerivativeDelay.py +1 -1
- rapidtide/OrthoImageItem.py +1 -1
- rapidtide/RapidtideDataset.py +3 -1
- rapidtide/RegressorRefiner.py +1 -1
- rapidtide/calcandfitcorrpairs.py +1 -1
- rapidtide/calccoherence.py +1 -1
- rapidtide/calcnullsimfunc.py +1 -1
- rapidtide/calcsimfunc.py +1 -1
- rapidtide/correlate.py +1 -1
- rapidtide/data/examples/src/test_findmaxlag.py +1 -1
- rapidtide/data/examples/src/testfmri +3 -2
- rapidtide/data/examples/src/testfuncs +1 -1
- rapidtide/data/examples/src/testhappy +12 -1
- rapidtide/data/examples/src/testmodels +33 -0
- rapidtide/data/models/model_cnn_w064_l13_fn20_fl08/loss.png +0 -0
- rapidtide/data/models/model_cnn_w064_l13_fn20_fl08/loss.txt +1 -0
- rapidtide/data/models/model_cnn_w064_l13_fn20_fl08/model.keras +0 -0
- rapidtide/data/models/model_cnn_w064_l13_fn20_fl08/model_meta.json +167 -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/dlfilter.py +325 -241
- rapidtide/externaltools.py +1 -1
- rapidtide/fMRIData_class.py +1 -1
- rapidtide/filter.py +1 -8
- rapidtide/fit.py +1 -8
- rapidtide/happy_supportfuncs.py +30 -1
- rapidtide/helper_classes.py +1 -1
- rapidtide/io.py +1 -1
- rapidtide/linfitfiltpass.py +1 -1
- rapidtide/makelaggedtcs.py +1 -1
- rapidtide/maskutil.py +1 -1
- rapidtide/miscmath.py +1 -8
- rapidtide/multiproc.py +1 -1
- rapidtide/patchmatch.py +1 -1
- rapidtide/peakeval.py +1 -1
- rapidtide/qualitycheck.py +1 -1
- rapidtide/refinedelay.py +1 -3
- rapidtide/refineregressor.py +1 -1
- rapidtide/resample.py +1 -1
- rapidtide/scripts/adjustoffset.py +1 -1
- rapidtide/scripts/aligntcs.py +1 -1
- rapidtide/scripts/applydlfilter.py +1 -1
- rapidtide/scripts/atlasaverage.py +1 -1
- rapidtide/scripts/atlastool.py +1 -1
- rapidtide/scripts/calcicc.py +1 -1
- rapidtide/scripts/calctexticc.py +1 -1
- rapidtide/scripts/calcttest.py +1 -1
- rapidtide/scripts/ccorrica.py +1 -1
- rapidtide/scripts/delayvar.py +2 -2
- rapidtide/scripts/diffrois.py +1 -1
- rapidtide/scripts/endtidalproc.py +1 -1
- rapidtide/scripts/fdica.py +1 -1
- rapidtide/scripts/filtnifti.py +1 -1
- rapidtide/scripts/filttc.py +1 -1
- rapidtide/scripts/fingerprint.py +1 -1
- rapidtide/scripts/fixtr.py +1 -1
- rapidtide/scripts/gmscalc.py +1 -1
- rapidtide/scripts/happy.py +1 -1
- rapidtide/scripts/happy2std.py +1 -1
- rapidtide/scripts/happywarp.py +1 -1
- rapidtide/scripts/histnifti.py +1 -1
- rapidtide/scripts/histtc.py +1 -1
- rapidtide/scripts/linfitfilt.py +1 -1
- rapidtide/scripts/localflow.py +1 -1
- rapidtide/scripts/mergequality.py +1 -1
- rapidtide/scripts/pairproc.py +1 -1
- rapidtide/scripts/pairwisemergenifti.py +1 -1
- rapidtide/scripts/physiofreq.py +1 -1
- rapidtide/scripts/pixelcomp.py +1 -1
- rapidtide/scripts/plethquality.py +1 -1
- rapidtide/scripts/polyfitim.py +1 -1
- rapidtide/scripts/proj2flow.py +1 -1
- rapidtide/scripts/rankimage.py +1 -1
- rapidtide/scripts/rapidtide.py +1 -1
- rapidtide/scripts/rapidtide2std.py +1 -1
- rapidtide/scripts/resamplenifti.py +1 -1
- rapidtide/scripts/resampletc.py +1 -1
- rapidtide/scripts/retrolagtcs.py +1 -1
- rapidtide/scripts/retroregress.py +1 -1
- rapidtide/scripts/roisummarize.py +1 -1
- rapidtide/scripts/runqualitycheck.py +1 -1
- rapidtide/scripts/showarbcorr.py +1 -1
- rapidtide/scripts/showhist.py +1 -1
- rapidtide/scripts/showstxcorr.py +1 -1
- rapidtide/scripts/showtc.py +1 -1
- rapidtide/scripts/showxcorr_legacy.py +1 -1
- rapidtide/scripts/showxcorrx.py +1 -1
- rapidtide/scripts/showxy.py +1 -1
- rapidtide/scripts/simdata.py +1 -1
- rapidtide/scripts/spatialdecomp.py +1 -1
- rapidtide/scripts/spatialfit.py +1 -1
- rapidtide/scripts/spatialmi.py +1 -1
- rapidtide/scripts/spectrogram.py +1 -1
- rapidtide/scripts/stupidramtricks.py +1 -1
- rapidtide/scripts/synthASL.py +1 -1
- rapidtide/scripts/tcfrom2col.py +1 -1
- rapidtide/scripts/tcfrom3col.py +1 -1
- rapidtide/scripts/temporaldecomp.py +1 -1
- rapidtide/scripts/testhrv.py +1 -1
- rapidtide/scripts/threeD.py +1 -1
- rapidtide/scripts/tidepool.py +1 -1
- rapidtide/scripts/variabilityizer.py +1 -1
- rapidtide/simfuncfit.py +1 -1
- rapidtide/stats.py +1 -8
- rapidtide/tests/cleanposttest +1 -1
- rapidtide/tests/resethappytargets +1 -1
- rapidtide/tests/resetrapidtidetargets +1 -1
- rapidtide/tests/resettargets +1 -1
- rapidtide/tests/runlocaltest +1 -1
- rapidtide/tests/showkernels +1 -1
- rapidtide/tests/test_aliasedcorrelate.py +1 -1
- rapidtide/tests/test_aligntcs.py +1 -1
- rapidtide/tests/test_calcicc.py +1 -1
- rapidtide/tests/test_congrid.py +1 -1
- rapidtide/tests/test_correlate.py +1 -1
- rapidtide/tests/test_corrpass.py +1 -1
- rapidtide/tests/test_delayestimation.py +1 -1
- rapidtide/tests/test_doresample.py +1 -1
- rapidtide/tests/test_fastresampler.py +1 -1
- rapidtide/tests/test_findmaxlag.py +1 -1
- rapidtide/tests/test_fullrunhappy_v1.py +2 -2
- rapidtide/tests/test_fullrunhappy_v2.py +2 -2
- rapidtide/tests/test_fullrunhappy_v3.py +2 -2
- rapidtide/tests/test_fullrunhappy_v4.py +2 -2
- rapidtide/tests/test_fullrunhappy_v5.py +1 -3
- rapidtide/tests/test_fullrunrapidtide_v1.py +1 -1
- rapidtide/tests/test_fullrunrapidtide_v2.py +3 -1
- rapidtide/tests/test_fullrunrapidtide_v3.py +1 -1
- rapidtide/tests/test_fullrunrapidtide_v4.py +1 -1
- rapidtide/tests/test_fullrunrapidtide_v5.py +1 -1
- rapidtide/tests/test_fullrunrapidtide_v6.py +1 -1
- rapidtide/tests/test_io.py +1 -1
- rapidtide/tests/test_linfitfiltpass.py +1 -1
- rapidtide/tests/test_mi.py +1 -1
- rapidtide/tests/test_miscmath.py +1 -1
- rapidtide/tests/test_motionregress.py +1 -1
- rapidtide/tests/test_nullcorr.py +1 -1
- rapidtide/tests/test_padvec.py +1 -1
- rapidtide/tests/test_phaseanalysis.py +1 -1
- rapidtide/tests/test_rapidtideparser.py +1 -1
- rapidtide/tests/test_refinedelay.py +1 -2
- rapidtide/tests/test_runmisc.py +1 -1
- rapidtide/tests/test_sharedmem.py +1 -1
- rapidtide/tests/test_simulate.py +1 -1
- rapidtide/tests/test_stcorrelate.py +1 -1
- rapidtide/tests/test_timeshift.py +1 -1
- rapidtide/tests/test_valtoindex.py +1 -1
- rapidtide/tests/test_zRapidtideDataset.py +1 -1
- rapidtide/tests/utils.py +1 -1
- rapidtide/transformerdlfilter.py +2 -4
- rapidtide/util.py +37 -14
- rapidtide/voxelData.py +278 -0
- rapidtide/wiener.py +1 -1
- rapidtide/wiener2.py +1 -1
- rapidtide/workflows/adjustoffset.py +1 -1
- rapidtide/workflows/aligntcs.py +1 -1
- rapidtide/workflows/applydlfilter.py +20 -65
- rapidtide/workflows/atlasaverage.py +1 -1
- rapidtide/workflows/atlastool.py +1 -1
- rapidtide/workflows/calctexticc.py +1 -1
- rapidtide/workflows/ccorrica.py +1 -1
- rapidtide/workflows/cleanregressor.py +243 -0
- rapidtide/workflows/delayestimation.py +488 -0
- rapidtide/workflows/delayvar.py +1 -1
- rapidtide/workflows/diffrois.py +1 -1
- rapidtide/workflows/endtidalproc.py +1 -1
- rapidtide/workflows/fdica.py +1 -1
- rapidtide/workflows/filtnifti.py +1 -1
- rapidtide/workflows/filttc.py +1 -1
- rapidtide/workflows/fixtr.py +1 -1
- rapidtide/workflows/gmscalc.py +1 -1
- rapidtide/workflows/happy.py +49 -3
- rapidtide/workflows/happy2std.py +1 -1
- rapidtide/workflows/happy_parser.py +30 -6
- rapidtide/workflows/histnifti.py +1 -1
- rapidtide/workflows/histtc.py +1 -1
- rapidtide/workflows/linfitfilt.py +1 -1
- rapidtide/workflows/localflow.py +1 -1
- rapidtide/workflows/mergequality.py +1 -1
- rapidtide/workflows/niftidecomp.py +1 -1
- rapidtide/workflows/niftistats.py +1 -1
- rapidtide/workflows/pairproc.py +1 -1
- rapidtide/workflows/pairwisemergenifti.py +1 -1
- rapidtide/workflows/parser_funcs.py +1 -1
- rapidtide/workflows/physiofreq.py +1 -1
- rapidtide/workflows/pixelcomp.py +1 -1
- rapidtide/workflows/plethquality.py +1 -1
- rapidtide/workflows/polyfitim.py +1 -1
- rapidtide/workflows/proj2flow.py +1 -1
- rapidtide/workflows/rankimage.py +1 -1
- rapidtide/workflows/rapidtide.py +163 -679
- rapidtide/workflows/rapidtide2std.py +1 -1
- rapidtide/workflows/rapidtide_parser.py +1 -98
- rapidtide/workflows/regressfrommaps.py +4 -48
- rapidtide/workflows/resamplenifti.py +1 -1
- rapidtide/workflows/resampletc.py +1 -1
- rapidtide/workflows/retrolagtcs.py +1 -1
- rapidtide/workflows/retroregress.py +1 -1
- rapidtide/workflows/roisummarize.py +1 -1
- rapidtide/workflows/runqualitycheck.py +1 -1
- rapidtide/workflows/showarbcorr.py +1 -1
- rapidtide/workflows/showhist.py +1 -1
- rapidtide/workflows/showstxcorr.py +1 -1
- rapidtide/workflows/showtc.py +1 -1
- rapidtide/workflows/showxcorrx.py +1 -1
- rapidtide/workflows/showxy.py +1 -1
- rapidtide/workflows/simdata.py +1 -1
- rapidtide/workflows/spatialfit.py +1 -1
- rapidtide/workflows/spatialmi.py +1 -1
- rapidtide/workflows/spectrogram.py +1 -1
- rapidtide/workflows/synthASL.py +1 -1
- rapidtide/workflows/tcfrom2col.py +1 -1
- rapidtide/workflows/tcfrom3col.py +1 -1
- rapidtide/workflows/tidepool.py +2 -1
- rapidtide/workflows/utils.py +1 -1
- rapidtide/workflows/variabilityizer.py +1 -1
- {rapidtide-3.0a14.dist-info → rapidtide-3.0.1.dist-info}/METADATA +7 -9
- rapidtide-3.0.1.dist-info/RECORD +353 -0
- {rapidtide-3.0a14.dist-info → rapidtide-3.0.1.dist-info}/WHEEL +1 -1
- 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-3.0a14.dist-info/RECORD +0 -345
- {rapidtide-3.0a14.dist-info → rapidtide-3.0.1.dist-info}/entry_points.txt +0 -0
- {rapidtide-3.0a14.dist-info → rapidtide-3.0.1.dist-info}/licenses/LICENSE +0 -0
- {rapidtide-3.0a14.dist-info → rapidtide-3.0.1.dist-info}/top_level.txt +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
# -*- coding: utf-8 -*-
|
|
3
3
|
#
|
|
4
|
-
# Copyright 2016-
|
|
4
|
+
# Copyright 2016-2025 Blaise Frederick
|
|
5
5
|
#
|
|
6
6
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
7
|
# you may not use this file except in compliance with the License.
|
|
@@ -26,6 +26,7 @@ import rapidtide.correlate as tide_corr
|
|
|
26
26
|
import rapidtide.dlfilter as tide_dlfilt
|
|
27
27
|
import rapidtide.filter as tide_filt
|
|
28
28
|
import rapidtide.fit as tide_fit
|
|
29
|
+
import rapidtide.happy_supportfuncs as happy_support
|
|
29
30
|
import rapidtide.io as tide_io
|
|
30
31
|
import rapidtide.miscmath as tide_math
|
|
31
32
|
import rapidtide.util as tide_util
|
|
@@ -87,65 +88,6 @@ def _get_parser():
|
|
|
87
88
|
return parser
|
|
88
89
|
|
|
89
90
|
|
|
90
|
-
def checkcardmatch(reference, candidate, samplerate, refine=True, zeropadding=0, debug=False):
|
|
91
|
-
thecardfilt = tide_filt.NoncausalFilter(filtertype="cardiac")
|
|
92
|
-
trimlength = np.min([len(reference), len(candidate)])
|
|
93
|
-
thexcorr = tide_corr.fastcorrelate(
|
|
94
|
-
tide_math.corrnormalize(
|
|
95
|
-
thecardfilt.apply(samplerate, reference),
|
|
96
|
-
detrendorder=3,
|
|
97
|
-
windowfunc="hamming",
|
|
98
|
-
)[:trimlength],
|
|
99
|
-
tide_math.corrnormalize(
|
|
100
|
-
thecardfilt.apply(samplerate, candidate),
|
|
101
|
-
detrendorder=3,
|
|
102
|
-
windowfunc="hamming",
|
|
103
|
-
)[:trimlength],
|
|
104
|
-
usefft=True,
|
|
105
|
-
zeropadding=zeropadding,
|
|
106
|
-
)
|
|
107
|
-
xcorrlen = len(thexcorr)
|
|
108
|
-
sampletime = 1.0 / samplerate
|
|
109
|
-
xcorr_x = np.r_[0.0:xcorrlen] * sampletime - (xcorrlen * sampletime) / 2.0 + sampletime / 2.0
|
|
110
|
-
searchrange = 5.0
|
|
111
|
-
trimstart = tide_util.valtoindex(xcorr_x, -2.0 * searchrange)
|
|
112
|
-
trimend = tide_util.valtoindex(xcorr_x, 2.0 * searchrange)
|
|
113
|
-
(
|
|
114
|
-
maxindex,
|
|
115
|
-
maxdelay,
|
|
116
|
-
maxval,
|
|
117
|
-
maxsigma,
|
|
118
|
-
maskval,
|
|
119
|
-
failreason,
|
|
120
|
-
peakstart,
|
|
121
|
-
peakend,
|
|
122
|
-
) = tide_fit.findmaxlag_gauss(
|
|
123
|
-
xcorr_x[trimstart:trimend],
|
|
124
|
-
thexcorr[trimstart:trimend],
|
|
125
|
-
-searchrange,
|
|
126
|
-
searchrange,
|
|
127
|
-
3.0,
|
|
128
|
-
refine=refine,
|
|
129
|
-
zerooutbadfit=False,
|
|
130
|
-
useguess=False,
|
|
131
|
-
fastgauss=False,
|
|
132
|
-
displayplots=False,
|
|
133
|
-
)
|
|
134
|
-
if debug:
|
|
135
|
-
print(
|
|
136
|
-
"CORRELATION: maxindex, maxdelay, maxval, maxsigma, maskval, failreason, peakstart, peakend:",
|
|
137
|
-
maxindex,
|
|
138
|
-
maxdelay,
|
|
139
|
-
maxval,
|
|
140
|
-
maxsigma,
|
|
141
|
-
maskval,
|
|
142
|
-
failreason,
|
|
143
|
-
peakstart,
|
|
144
|
-
peakend,
|
|
145
|
-
)
|
|
146
|
-
return maxval, maxdelay, failreason
|
|
147
|
-
|
|
148
|
-
|
|
149
91
|
def applydlfilter(args):
|
|
150
92
|
if args.display:
|
|
151
93
|
import matplotlib as mpl
|
|
@@ -184,8 +126,6 @@ def applydlfilter(args):
|
|
|
184
126
|
)
|
|
185
127
|
thedlfilter = tide_dlfilt.DeepLearningFilter(modelpath=modelpath)
|
|
186
128
|
thedlfilter.loadmodel(args.model)
|
|
187
|
-
model = thedlfilter.model
|
|
188
|
-
window_size = thedlfilter.window_size
|
|
189
129
|
usebadpts = thedlfilter.usebadpts
|
|
190
130
|
|
|
191
131
|
badpts = None
|
|
@@ -204,17 +144,32 @@ def applydlfilter(args):
|
|
|
204
144
|
# read in the data
|
|
205
145
|
if args.verbose:
|
|
206
146
|
print("reading in", infilename)
|
|
207
|
-
|
|
208
|
-
|
|
147
|
+
(
|
|
148
|
+
thesamplerate,
|
|
149
|
+
thestarttime,
|
|
150
|
+
thecolumns,
|
|
151
|
+
fmridata,
|
|
152
|
+
compressed,
|
|
153
|
+
filetype,
|
|
154
|
+
) = tide_io.readvectorsfromtextfile(infilename, onecol=True, debug=args.verbose)
|
|
155
|
+
if args.verbose:
|
|
156
|
+
print("data is read")
|
|
157
|
+
if thesamplerate != 25.0:
|
|
158
|
+
print("sampling rate", thesamplerate)
|
|
159
|
+
sys.exit()
|
|
209
160
|
if args.verbose:
|
|
210
161
|
print("filtering...")
|
|
211
162
|
predicteddata = thedlfilter.apply(fmridata, badpts=badpts)
|
|
163
|
+
if args.verbose:
|
|
164
|
+
print("done...")
|
|
212
165
|
|
|
213
166
|
if args.verbose:
|
|
214
167
|
print("writing to", outfilenamelist[idx])
|
|
215
168
|
tide_io.writevec(predicteddata, outfilenamelist[idx])
|
|
216
169
|
|
|
217
|
-
maxval, maxdelay, failreason = checkcardmatch(
|
|
170
|
+
maxval, maxdelay, failreason = happy_support.checkcardmatch(
|
|
171
|
+
fmridata, predicteddata, 25.0, debug=False
|
|
172
|
+
)
|
|
218
173
|
print(infilename, "max correlation input to output:", maxval)
|
|
219
174
|
|
|
220
175
|
if args.display:
|
|
@@ -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.
|
rapidtide/workflows/atlastool.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
# -*- coding: utf-8 -*-
|
|
3
3
|
#
|
|
4
|
-
# Copyright 2016-
|
|
4
|
+
# Copyright 2016-2025 Blaise Frederick
|
|
5
5
|
#
|
|
6
6
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
7
|
# you may not use this file except in compliance with the License.
|
|
@@ -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.
|
rapidtide/workflows/ccorrica.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.
|
|
@@ -0,0 +1,243 @@
|
|
|
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
|
+
import numpy as np
|
|
20
|
+
|
|
21
|
+
import rapidtide.correlate as tide_corr
|
|
22
|
+
import rapidtide.filter as tide_filt
|
|
23
|
+
import rapidtide.helper_classes as tide_classes
|
|
24
|
+
import rapidtide.io as tide_io
|
|
25
|
+
import rapidtide.miscmath as tide_math
|
|
26
|
+
import rapidtide.simfuncfit as tide_simfuncfit
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def cleanregressor(
|
|
30
|
+
outputname,
|
|
31
|
+
thepass,
|
|
32
|
+
referencetc,
|
|
33
|
+
resampref_y,
|
|
34
|
+
resampnonosref_y,
|
|
35
|
+
fmrifreq,
|
|
36
|
+
oversampfreq,
|
|
37
|
+
osvalidsimcalcstart,
|
|
38
|
+
osvalidsimcalcend,
|
|
39
|
+
lagmininpts,
|
|
40
|
+
lagmaxinpts,
|
|
41
|
+
theFitter,
|
|
42
|
+
theCorrelator,
|
|
43
|
+
lagmin,
|
|
44
|
+
lagmax,
|
|
45
|
+
LGR=None,
|
|
46
|
+
check_autocorrelation=True,
|
|
47
|
+
fix_autocorrelation=True,
|
|
48
|
+
despeckle_thresh=5.0,
|
|
49
|
+
lthreshval=0.0,
|
|
50
|
+
fixdelay=False,
|
|
51
|
+
detrendorder=3,
|
|
52
|
+
windowfunc="hamming",
|
|
53
|
+
respdelete=False,
|
|
54
|
+
debug=False,
|
|
55
|
+
rt_floattype="float64",
|
|
56
|
+
rt_floatset=np.float64,
|
|
57
|
+
):
|
|
58
|
+
# check the regressor for periodic components in the passband
|
|
59
|
+
dolagmod = True
|
|
60
|
+
doreferencenotch = True
|
|
61
|
+
if respdelete:
|
|
62
|
+
resptracker = tide_classes.FrequencyTracker(nperseg=64)
|
|
63
|
+
thetimes, thefreqs = resptracker.track(resampref_y, oversampfreq)
|
|
64
|
+
tide_io.writevec(thefreqs, f"{outputname}_peakfreaks_pass{thepass}.txt")
|
|
65
|
+
resampref_y = resptracker.clean(resampref_y, oversampfreq, thetimes, thefreqs)
|
|
66
|
+
tide_io.writevec(resampref_y, f"{outputname}_respfilt_pass{thepass}.txt")
|
|
67
|
+
referencetc = tide_math.corrnormalize(
|
|
68
|
+
resampref_y[osvalidsimcalcstart : osvalidsimcalcend + 1],
|
|
69
|
+
detrendorder=detrendorder,
|
|
70
|
+
windowfunc=windowfunc,
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
if check_autocorrelation:
|
|
74
|
+
if LGR is not None:
|
|
75
|
+
LGR.info("checking reference regressor autocorrelation properties")
|
|
76
|
+
lagmod = 1000.0
|
|
77
|
+
lagindpad = np.max((lagmininpts, lagmaxinpts))
|
|
78
|
+
acmininpts = lagindpad
|
|
79
|
+
acmaxinpts = lagindpad
|
|
80
|
+
theCorrelator.setreftc(referencetc)
|
|
81
|
+
theCorrelator.setlimits(acmininpts, acmaxinpts)
|
|
82
|
+
# theCorrelator.setlimits(lagmininpts, lagmaxinpts)
|
|
83
|
+
print("check_autocorrelation:", acmininpts, acmaxinpts, lagmininpts, lagmaxinpts)
|
|
84
|
+
thexcorr, accheckcorrscale, dummy = theCorrelator.run(
|
|
85
|
+
resampref_y[osvalidsimcalcstart : osvalidsimcalcend + 1]
|
|
86
|
+
)
|
|
87
|
+
theFitter.setcorrtimeaxis(accheckcorrscale)
|
|
88
|
+
(
|
|
89
|
+
dummy,
|
|
90
|
+
dummy,
|
|
91
|
+
dummy,
|
|
92
|
+
acwidth,
|
|
93
|
+
dummy,
|
|
94
|
+
dummy,
|
|
95
|
+
dummy,
|
|
96
|
+
dummy,
|
|
97
|
+
) = tide_simfuncfit.onesimfuncfit(
|
|
98
|
+
thexcorr,
|
|
99
|
+
theFitter,
|
|
100
|
+
despeckle_thresh=despeckle_thresh,
|
|
101
|
+
lthreshval=lthreshval,
|
|
102
|
+
fixdelay=fixdelay,
|
|
103
|
+
rt_floatset=rt_floatset,
|
|
104
|
+
rt_floattype=rt_floattype,
|
|
105
|
+
)
|
|
106
|
+
tide_io.writebidstsv(
|
|
107
|
+
f"{outputname}_desc-autocorr_timeseries",
|
|
108
|
+
thexcorr,
|
|
109
|
+
1.0 / (accheckcorrscale[1] - accheckcorrscale[0]),
|
|
110
|
+
starttime=accheckcorrscale[0],
|
|
111
|
+
extraheaderinfo={
|
|
112
|
+
"Description": "Autocorrelation of the probe regressor for each pass"
|
|
113
|
+
},
|
|
114
|
+
columns=[f"pass{thepass}"],
|
|
115
|
+
append=(thepass > 1),
|
|
116
|
+
)
|
|
117
|
+
thelagthresh = np.max((abs(lagmin), abs(lagmax)))
|
|
118
|
+
theampthresh = 0.1
|
|
119
|
+
if LGR is not None:
|
|
120
|
+
LGR.info(
|
|
121
|
+
f"searching for sidelobes with amplitude > {theampthresh} "
|
|
122
|
+
f"with abs(lag) < {thelagthresh} s"
|
|
123
|
+
)
|
|
124
|
+
sidelobetime, sidelobeamp = tide_corr.check_autocorrelation(
|
|
125
|
+
accheckcorrscale,
|
|
126
|
+
thexcorr,
|
|
127
|
+
acampthresh=theampthresh,
|
|
128
|
+
aclagthresh=thelagthresh,
|
|
129
|
+
detrendorder=detrendorder,
|
|
130
|
+
)
|
|
131
|
+
absmaxsigma = acwidth * 10.0
|
|
132
|
+
passsuffix = "_pass" + str(thepass)
|
|
133
|
+
if sidelobetime is not None:
|
|
134
|
+
despeckle_thresh = np.max([despeckle_thresh, sidelobetime / 2.0])
|
|
135
|
+
LGR.warning(
|
|
136
|
+
f"\n\nWARNING: check_autocorrelation found bad sidelobe at {sidelobetime} "
|
|
137
|
+
f"seconds ({1.0 / sidelobetime} Hz)..."
|
|
138
|
+
)
|
|
139
|
+
# bidsify
|
|
140
|
+
"""tide_io.writebidstsv(
|
|
141
|
+
f"{outputname}_desc-movingregressor_timeseries",
|
|
142
|
+
tide_math.stdnormalize(resampnonosref_y),
|
|
143
|
+
1.0 / fmritr,
|
|
144
|
+
columns=["pass1"],
|
|
145
|
+
append=False,
|
|
146
|
+
)"""
|
|
147
|
+
tide_io.writenpvecs(
|
|
148
|
+
np.array([sidelobetime]),
|
|
149
|
+
f"{outputname}_autocorr_sidelobetime" + passsuffix + ".txt",
|
|
150
|
+
)
|
|
151
|
+
if fix_autocorrelation:
|
|
152
|
+
if LGR is not None:
|
|
153
|
+
LGR.info("Removing sidelobe")
|
|
154
|
+
if dolagmod:
|
|
155
|
+
if LGR is not None:
|
|
156
|
+
LGR.info("subjecting lag times to modulus")
|
|
157
|
+
lagmod = sidelobetime / 2.0
|
|
158
|
+
if doreferencenotch:
|
|
159
|
+
if LGR is not None:
|
|
160
|
+
LGR.info("removing spectral component at sidelobe frequency")
|
|
161
|
+
acstopfreq = 1.0 / sidelobetime
|
|
162
|
+
acfixfilter = tide_filt.NoncausalFilter(
|
|
163
|
+
debug=debug,
|
|
164
|
+
)
|
|
165
|
+
acfixfilter.settype("arb_stop")
|
|
166
|
+
acfixfilter.setfreqs(
|
|
167
|
+
acstopfreq * 0.9,
|
|
168
|
+
acstopfreq * 0.95,
|
|
169
|
+
acstopfreq * 1.05,
|
|
170
|
+
acstopfreq * 1.1,
|
|
171
|
+
)
|
|
172
|
+
cleaned_resampref_y = tide_math.corrnormalize(
|
|
173
|
+
acfixfilter.apply(oversampfreq, resampref_y),
|
|
174
|
+
windowfunc="None",
|
|
175
|
+
detrendorder=detrendorder,
|
|
176
|
+
)
|
|
177
|
+
cleaned_referencetc = tide_math.corrnormalize(
|
|
178
|
+
cleaned_resampref_y,
|
|
179
|
+
detrendorder=detrendorder,
|
|
180
|
+
windowfunc=windowfunc,
|
|
181
|
+
)
|
|
182
|
+
cleaned_nonosreferencetc = tide_math.stdnormalize(
|
|
183
|
+
acfixfilter.apply(fmrifreq, resampnonosref_y)
|
|
184
|
+
)
|
|
185
|
+
tide_io.writebidstsv(
|
|
186
|
+
f"{outputname}_desc-cleanedreferencefmrires_info",
|
|
187
|
+
cleaned_nonosreferencetc,
|
|
188
|
+
fmrifreq,
|
|
189
|
+
columns=[f"pass{thepass}"],
|
|
190
|
+
append=(thepass > 1),
|
|
191
|
+
)
|
|
192
|
+
tide_io.writebidstsv(
|
|
193
|
+
f"{outputname}_desc-cleanedreference_info",
|
|
194
|
+
cleaned_referencetc,
|
|
195
|
+
oversampfreq,
|
|
196
|
+
columns=[f"pass{thepass}"],
|
|
197
|
+
append=(thepass > 1),
|
|
198
|
+
)
|
|
199
|
+
tide_io.writebidstsv(
|
|
200
|
+
f"{outputname}_desc-cleanedresamprefy_info",
|
|
201
|
+
cleaned_resampref_y,
|
|
202
|
+
oversampfreq,
|
|
203
|
+
columns=[f"pass{thepass}"],
|
|
204
|
+
append=(thepass > 1),
|
|
205
|
+
)
|
|
206
|
+
else:
|
|
207
|
+
cleaned_resampref_y = 1.0 * tide_math.corrnormalize(
|
|
208
|
+
resampref_y,
|
|
209
|
+
windowfunc="None",
|
|
210
|
+
detrendorder=detrendorder,
|
|
211
|
+
)
|
|
212
|
+
cleaned_referencetc = 1.0 * referencetc
|
|
213
|
+
cleaned_nonosreferencetc = 1.0 * resampnonosref_y
|
|
214
|
+
else:
|
|
215
|
+
if LGR is not None:
|
|
216
|
+
LGR.info("no sidelobes found in range")
|
|
217
|
+
cleaned_resampref_y = 1.0 * tide_math.corrnormalize(
|
|
218
|
+
resampref_y,
|
|
219
|
+
windowfunc="None",
|
|
220
|
+
detrendorder=detrendorder,
|
|
221
|
+
)
|
|
222
|
+
cleaned_referencetc = 1.0 * referencetc
|
|
223
|
+
cleaned_nonosreferencetc = 1.0 * resampnonosref_y
|
|
224
|
+
else:
|
|
225
|
+
acwidth = None
|
|
226
|
+
absmaxsigma = None
|
|
227
|
+
cleaned_resampref_y = 1.0 * tide_math.corrnormalize(
|
|
228
|
+
resampref_y, windowfunc="None", detrendorder=detrendorder
|
|
229
|
+
)
|
|
230
|
+
cleaned_referencetc = 1.0 * referencetc
|
|
231
|
+
cleaned_nonosreferencetc = 1.0 * resampnonosref_y
|
|
232
|
+
|
|
233
|
+
return (
|
|
234
|
+
cleaned_resampref_y,
|
|
235
|
+
cleaned_referencetc,
|
|
236
|
+
cleaned_nonosreferencetc,
|
|
237
|
+
despeckle_thresh,
|
|
238
|
+
sidelobeamp,
|
|
239
|
+
sidelobetime,
|
|
240
|
+
lagmod,
|
|
241
|
+
acwidth,
|
|
242
|
+
absmaxsigma,
|
|
243
|
+
)
|