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.
Files changed (231) hide show
  1. rapidtide/Colortables.py +1 -1
  2. rapidtide/DerivativeDelay.py +1 -1
  3. rapidtide/OrthoImageItem.py +1 -1
  4. rapidtide/RapidtideDataset.py +3 -1
  5. rapidtide/RegressorRefiner.py +1 -1
  6. rapidtide/calcandfitcorrpairs.py +1 -1
  7. rapidtide/calccoherence.py +1 -1
  8. rapidtide/calcnullsimfunc.py +1 -1
  9. rapidtide/calcsimfunc.py +1 -1
  10. rapidtide/correlate.py +1 -1
  11. rapidtide/data/examples/src/test_findmaxlag.py +1 -1
  12. rapidtide/data/examples/src/testfmri +3 -2
  13. rapidtide/data/examples/src/testfuncs +1 -1
  14. rapidtide/data/examples/src/testhappy +12 -1
  15. rapidtide/data/examples/src/testmodels +33 -0
  16. rapidtide/data/models/model_cnn_w064_l13_fn20_fl08/loss.png +0 -0
  17. rapidtide/data/models/model_cnn_w064_l13_fn20_fl08/loss.txt +1 -0
  18. rapidtide/data/models/model_cnn_w064_l13_fn20_fl08/model.keras +0 -0
  19. rapidtide/data/models/model_cnn_w064_l13_fn20_fl08/model_meta.json +167 -0
  20. rapidtide/data/models/model_revised_tf2/model.keras +0 -0
  21. rapidtide/data/models/{model_serdar → model_revised_tf2}/model_meta.json +1 -1
  22. rapidtide/data/models/model_serdar2_tf2/model.keras +0 -0
  23. rapidtide/data/models/{model_serdar2 → model_serdar2_tf2}/model_meta.json +1 -1
  24. rapidtide/data/models/model_serdar_tf2/model.keras +0 -0
  25. rapidtide/data/models/{model_revised → model_serdar_tf2}/model_meta.json +1 -1
  26. rapidtide/dlfilter.py +325 -241
  27. rapidtide/externaltools.py +1 -1
  28. rapidtide/fMRIData_class.py +1 -1
  29. rapidtide/filter.py +1 -8
  30. rapidtide/fit.py +1 -8
  31. rapidtide/happy_supportfuncs.py +30 -1
  32. rapidtide/helper_classes.py +1 -1
  33. rapidtide/io.py +1 -1
  34. rapidtide/linfitfiltpass.py +1 -1
  35. rapidtide/makelaggedtcs.py +1 -1
  36. rapidtide/maskutil.py +1 -1
  37. rapidtide/miscmath.py +1 -8
  38. rapidtide/multiproc.py +1 -1
  39. rapidtide/patchmatch.py +1 -1
  40. rapidtide/peakeval.py +1 -1
  41. rapidtide/qualitycheck.py +1 -1
  42. rapidtide/refinedelay.py +1 -3
  43. rapidtide/refineregressor.py +1 -1
  44. rapidtide/resample.py +1 -1
  45. rapidtide/scripts/adjustoffset.py +1 -1
  46. rapidtide/scripts/aligntcs.py +1 -1
  47. rapidtide/scripts/applydlfilter.py +1 -1
  48. rapidtide/scripts/atlasaverage.py +1 -1
  49. rapidtide/scripts/atlastool.py +1 -1
  50. rapidtide/scripts/calcicc.py +1 -1
  51. rapidtide/scripts/calctexticc.py +1 -1
  52. rapidtide/scripts/calcttest.py +1 -1
  53. rapidtide/scripts/ccorrica.py +1 -1
  54. rapidtide/scripts/delayvar.py +2 -2
  55. rapidtide/scripts/diffrois.py +1 -1
  56. rapidtide/scripts/endtidalproc.py +1 -1
  57. rapidtide/scripts/fdica.py +1 -1
  58. rapidtide/scripts/filtnifti.py +1 -1
  59. rapidtide/scripts/filttc.py +1 -1
  60. rapidtide/scripts/fingerprint.py +1 -1
  61. rapidtide/scripts/fixtr.py +1 -1
  62. rapidtide/scripts/gmscalc.py +1 -1
  63. rapidtide/scripts/happy.py +1 -1
  64. rapidtide/scripts/happy2std.py +1 -1
  65. rapidtide/scripts/happywarp.py +1 -1
  66. rapidtide/scripts/histnifti.py +1 -1
  67. rapidtide/scripts/histtc.py +1 -1
  68. rapidtide/scripts/linfitfilt.py +1 -1
  69. rapidtide/scripts/localflow.py +1 -1
  70. rapidtide/scripts/mergequality.py +1 -1
  71. rapidtide/scripts/pairproc.py +1 -1
  72. rapidtide/scripts/pairwisemergenifti.py +1 -1
  73. rapidtide/scripts/physiofreq.py +1 -1
  74. rapidtide/scripts/pixelcomp.py +1 -1
  75. rapidtide/scripts/plethquality.py +1 -1
  76. rapidtide/scripts/polyfitim.py +1 -1
  77. rapidtide/scripts/proj2flow.py +1 -1
  78. rapidtide/scripts/rankimage.py +1 -1
  79. rapidtide/scripts/rapidtide.py +1 -1
  80. rapidtide/scripts/rapidtide2std.py +1 -1
  81. rapidtide/scripts/resamplenifti.py +1 -1
  82. rapidtide/scripts/resampletc.py +1 -1
  83. rapidtide/scripts/retrolagtcs.py +1 -1
  84. rapidtide/scripts/retroregress.py +1 -1
  85. rapidtide/scripts/roisummarize.py +1 -1
  86. rapidtide/scripts/runqualitycheck.py +1 -1
  87. rapidtide/scripts/showarbcorr.py +1 -1
  88. rapidtide/scripts/showhist.py +1 -1
  89. rapidtide/scripts/showstxcorr.py +1 -1
  90. rapidtide/scripts/showtc.py +1 -1
  91. rapidtide/scripts/showxcorr_legacy.py +1 -1
  92. rapidtide/scripts/showxcorrx.py +1 -1
  93. rapidtide/scripts/showxy.py +1 -1
  94. rapidtide/scripts/simdata.py +1 -1
  95. rapidtide/scripts/spatialdecomp.py +1 -1
  96. rapidtide/scripts/spatialfit.py +1 -1
  97. rapidtide/scripts/spatialmi.py +1 -1
  98. rapidtide/scripts/spectrogram.py +1 -1
  99. rapidtide/scripts/stupidramtricks.py +1 -1
  100. rapidtide/scripts/synthASL.py +1 -1
  101. rapidtide/scripts/tcfrom2col.py +1 -1
  102. rapidtide/scripts/tcfrom3col.py +1 -1
  103. rapidtide/scripts/temporaldecomp.py +1 -1
  104. rapidtide/scripts/testhrv.py +1 -1
  105. rapidtide/scripts/threeD.py +1 -1
  106. rapidtide/scripts/tidepool.py +1 -1
  107. rapidtide/scripts/variabilityizer.py +1 -1
  108. rapidtide/simfuncfit.py +1 -1
  109. rapidtide/stats.py +1 -8
  110. rapidtide/tests/cleanposttest +1 -1
  111. rapidtide/tests/resethappytargets +1 -1
  112. rapidtide/tests/resetrapidtidetargets +1 -1
  113. rapidtide/tests/resettargets +1 -1
  114. rapidtide/tests/runlocaltest +1 -1
  115. rapidtide/tests/showkernels +1 -1
  116. rapidtide/tests/test_aliasedcorrelate.py +1 -1
  117. rapidtide/tests/test_aligntcs.py +1 -1
  118. rapidtide/tests/test_calcicc.py +1 -1
  119. rapidtide/tests/test_congrid.py +1 -1
  120. rapidtide/tests/test_correlate.py +1 -1
  121. rapidtide/tests/test_corrpass.py +1 -1
  122. rapidtide/tests/test_delayestimation.py +1 -1
  123. rapidtide/tests/test_doresample.py +1 -1
  124. rapidtide/tests/test_fastresampler.py +1 -1
  125. rapidtide/tests/test_findmaxlag.py +1 -1
  126. rapidtide/tests/test_fullrunhappy_v1.py +2 -2
  127. rapidtide/tests/test_fullrunhappy_v2.py +2 -2
  128. rapidtide/tests/test_fullrunhappy_v3.py +2 -2
  129. rapidtide/tests/test_fullrunhappy_v4.py +2 -2
  130. rapidtide/tests/test_fullrunhappy_v5.py +1 -3
  131. rapidtide/tests/test_fullrunrapidtide_v1.py +1 -1
  132. rapidtide/tests/test_fullrunrapidtide_v2.py +3 -1
  133. rapidtide/tests/test_fullrunrapidtide_v3.py +1 -1
  134. rapidtide/tests/test_fullrunrapidtide_v4.py +1 -1
  135. rapidtide/tests/test_fullrunrapidtide_v5.py +1 -1
  136. rapidtide/tests/test_fullrunrapidtide_v6.py +1 -1
  137. rapidtide/tests/test_io.py +1 -1
  138. rapidtide/tests/test_linfitfiltpass.py +1 -1
  139. rapidtide/tests/test_mi.py +1 -1
  140. rapidtide/tests/test_miscmath.py +1 -1
  141. rapidtide/tests/test_motionregress.py +1 -1
  142. rapidtide/tests/test_nullcorr.py +1 -1
  143. rapidtide/tests/test_padvec.py +1 -1
  144. rapidtide/tests/test_phaseanalysis.py +1 -1
  145. rapidtide/tests/test_rapidtideparser.py +1 -1
  146. rapidtide/tests/test_refinedelay.py +1 -2
  147. rapidtide/tests/test_runmisc.py +1 -1
  148. rapidtide/tests/test_sharedmem.py +1 -1
  149. rapidtide/tests/test_simulate.py +1 -1
  150. rapidtide/tests/test_stcorrelate.py +1 -1
  151. rapidtide/tests/test_timeshift.py +1 -1
  152. rapidtide/tests/test_valtoindex.py +1 -1
  153. rapidtide/tests/test_zRapidtideDataset.py +1 -1
  154. rapidtide/tests/utils.py +1 -1
  155. rapidtide/transformerdlfilter.py +2 -4
  156. rapidtide/util.py +37 -14
  157. rapidtide/voxelData.py +278 -0
  158. rapidtide/wiener.py +1 -1
  159. rapidtide/wiener2.py +1 -1
  160. rapidtide/workflows/adjustoffset.py +1 -1
  161. rapidtide/workflows/aligntcs.py +1 -1
  162. rapidtide/workflows/applydlfilter.py +20 -65
  163. rapidtide/workflows/atlasaverage.py +1 -1
  164. rapidtide/workflows/atlastool.py +1 -1
  165. rapidtide/workflows/calctexticc.py +1 -1
  166. rapidtide/workflows/ccorrica.py +1 -1
  167. rapidtide/workflows/cleanregressor.py +243 -0
  168. rapidtide/workflows/delayestimation.py +488 -0
  169. rapidtide/workflows/delayvar.py +1 -1
  170. rapidtide/workflows/diffrois.py +1 -1
  171. rapidtide/workflows/endtidalproc.py +1 -1
  172. rapidtide/workflows/fdica.py +1 -1
  173. rapidtide/workflows/filtnifti.py +1 -1
  174. rapidtide/workflows/filttc.py +1 -1
  175. rapidtide/workflows/fixtr.py +1 -1
  176. rapidtide/workflows/gmscalc.py +1 -1
  177. rapidtide/workflows/happy.py +49 -3
  178. rapidtide/workflows/happy2std.py +1 -1
  179. rapidtide/workflows/happy_parser.py +30 -6
  180. rapidtide/workflows/histnifti.py +1 -1
  181. rapidtide/workflows/histtc.py +1 -1
  182. rapidtide/workflows/linfitfilt.py +1 -1
  183. rapidtide/workflows/localflow.py +1 -1
  184. rapidtide/workflows/mergequality.py +1 -1
  185. rapidtide/workflows/niftidecomp.py +1 -1
  186. rapidtide/workflows/niftistats.py +1 -1
  187. rapidtide/workflows/pairproc.py +1 -1
  188. rapidtide/workflows/pairwisemergenifti.py +1 -1
  189. rapidtide/workflows/parser_funcs.py +1 -1
  190. rapidtide/workflows/physiofreq.py +1 -1
  191. rapidtide/workflows/pixelcomp.py +1 -1
  192. rapidtide/workflows/plethquality.py +1 -1
  193. rapidtide/workflows/polyfitim.py +1 -1
  194. rapidtide/workflows/proj2flow.py +1 -1
  195. rapidtide/workflows/rankimage.py +1 -1
  196. rapidtide/workflows/rapidtide.py +163 -679
  197. rapidtide/workflows/rapidtide2std.py +1 -1
  198. rapidtide/workflows/rapidtide_parser.py +1 -98
  199. rapidtide/workflows/regressfrommaps.py +4 -48
  200. rapidtide/workflows/resamplenifti.py +1 -1
  201. rapidtide/workflows/resampletc.py +1 -1
  202. rapidtide/workflows/retrolagtcs.py +1 -1
  203. rapidtide/workflows/retroregress.py +1 -1
  204. rapidtide/workflows/roisummarize.py +1 -1
  205. rapidtide/workflows/runqualitycheck.py +1 -1
  206. rapidtide/workflows/showarbcorr.py +1 -1
  207. rapidtide/workflows/showhist.py +1 -1
  208. rapidtide/workflows/showstxcorr.py +1 -1
  209. rapidtide/workflows/showtc.py +1 -1
  210. rapidtide/workflows/showxcorrx.py +1 -1
  211. rapidtide/workflows/showxy.py +1 -1
  212. rapidtide/workflows/simdata.py +1 -1
  213. rapidtide/workflows/spatialfit.py +1 -1
  214. rapidtide/workflows/spatialmi.py +1 -1
  215. rapidtide/workflows/spectrogram.py +1 -1
  216. rapidtide/workflows/synthASL.py +1 -1
  217. rapidtide/workflows/tcfrom2col.py +1 -1
  218. rapidtide/workflows/tcfrom3col.py +1 -1
  219. rapidtide/workflows/tidepool.py +2 -1
  220. rapidtide/workflows/utils.py +1 -1
  221. rapidtide/workflows/variabilityizer.py +1 -1
  222. {rapidtide-3.0a14.dist-info → rapidtide-3.0.1.dist-info}/METADATA +7 -9
  223. rapidtide-3.0.1.dist-info/RECORD +353 -0
  224. {rapidtide-3.0a14.dist-info → rapidtide-3.0.1.dist-info}/WHEEL +1 -1
  225. rapidtide/data/models/model_revised/model.h5 +0 -0
  226. rapidtide/data/models/model_serdar/model.h5 +0 -0
  227. rapidtide/data/models/model_serdar2/model.h5 +0 -0
  228. rapidtide-3.0a14.dist-info/RECORD +0 -345
  229. {rapidtide-3.0a14.dist-info → rapidtide-3.0.1.dist-info}/entry_points.txt +0 -0
  230. {rapidtide-3.0a14.dist-info → rapidtide-3.0.1.dist-info}/licenses/LICENSE +0 -0
  231. {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-2024 Blaise Frederick
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
- fmridata = tide_io.readvec(infilename)
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(fmridata, predicteddata, 25.0, debug=False)
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-2024 Blaise Frederick
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-2024 Blaise Frederick
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-2024 Blaise Frederick
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-2024 Blaise Frederick
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
+ )