rapidtide 3.0a13__py3-none-any.whl → 3.0a15__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 (232) hide show
  1. rapidtide/Colortables.py +1 -1
  2. rapidtide/DerivativeDelay.py +4 -2
  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/testdelayvar +2 -1
  13. rapidtide/data/examples/src/testfmri +3 -2
  14. rapidtide/data/examples/src/testfuncs +1 -1
  15. rapidtide/data/examples/src/testhappy +12 -1
  16. rapidtide/data/examples/src/testmodels +33 -0
  17. rapidtide/data/models/model_cnn_w064_l13_fn20_fl08/loss.png +0 -0
  18. rapidtide/data/models/model_cnn_w064_l13_fn20_fl08/loss.txt +1 -0
  19. rapidtide/data/models/model_cnn_w064_l13_fn20_fl08/model.keras +0 -0
  20. rapidtide/data/models/model_cnn_w064_l13_fn20_fl08/model_meta.json +167 -0
  21. rapidtide/data/models/model_revised_tf2/model.keras +0 -0
  22. rapidtide/data/models/{model_serdar → model_revised_tf2}/model_meta.json +1 -1
  23. rapidtide/data/models/model_serdar2_tf2/model.keras +0 -0
  24. rapidtide/data/models/{model_serdar2 → model_serdar2_tf2}/model_meta.json +1 -1
  25. rapidtide/data/models/model_serdar_tf2/model.keras +0 -0
  26. rapidtide/data/models/{model_revised → model_serdar_tf2}/model_meta.json +1 -1
  27. rapidtide/dlfilter.py +325 -241
  28. rapidtide/externaltools.py +1 -1
  29. rapidtide/fMRIData_class.py +1 -1
  30. rapidtide/filter.py +1 -8
  31. rapidtide/fit.py +1 -8
  32. rapidtide/happy_supportfuncs.py +30 -1
  33. rapidtide/helper_classes.py +1 -1
  34. rapidtide/io.py +1 -1
  35. rapidtide/linfitfiltpass.py +3 -1
  36. rapidtide/makelaggedtcs.py +9 -6
  37. rapidtide/maskutil.py +1 -1
  38. rapidtide/miscmath.py +1 -8
  39. rapidtide/multiproc.py +9 -12
  40. rapidtide/patchmatch.py +1 -1
  41. rapidtide/peakeval.py +1 -1
  42. rapidtide/qualitycheck.py +1 -1
  43. rapidtide/refinedelay.py +174 -89
  44. rapidtide/refineregressor.py +1 -1
  45. rapidtide/resample.py +1 -1
  46. rapidtide/scripts/adjustoffset.py +1 -1
  47. rapidtide/scripts/aligntcs.py +1 -1
  48. rapidtide/scripts/applydlfilter.py +1 -1
  49. rapidtide/scripts/atlasaverage.py +1 -1
  50. rapidtide/scripts/atlastool.py +1 -1
  51. rapidtide/scripts/calcicc.py +1 -1
  52. rapidtide/scripts/calctexticc.py +1 -1
  53. rapidtide/scripts/calcttest.py +1 -1
  54. rapidtide/scripts/ccorrica.py +1 -1
  55. rapidtide/scripts/delayvar.py +2 -2
  56. rapidtide/scripts/diffrois.py +1 -1
  57. rapidtide/scripts/endtidalproc.py +1 -1
  58. rapidtide/scripts/fdica.py +1 -1
  59. rapidtide/scripts/filtnifti.py +1 -1
  60. rapidtide/scripts/filttc.py +1 -1
  61. rapidtide/scripts/fingerprint.py +1 -1
  62. rapidtide/scripts/fixtr.py +1 -1
  63. rapidtide/scripts/gmscalc.py +1 -1
  64. rapidtide/scripts/happy.py +1 -1
  65. rapidtide/scripts/happy2std.py +1 -1
  66. rapidtide/scripts/happywarp.py +1 -1
  67. rapidtide/scripts/histnifti.py +1 -1
  68. rapidtide/scripts/histtc.py +1 -1
  69. rapidtide/scripts/linfitfilt.py +1 -1
  70. rapidtide/scripts/localflow.py +1 -1
  71. rapidtide/scripts/mergequality.py +1 -1
  72. rapidtide/scripts/pairproc.py +1 -1
  73. rapidtide/scripts/pairwisemergenifti.py +1 -1
  74. rapidtide/scripts/physiofreq.py +1 -1
  75. rapidtide/scripts/pixelcomp.py +1 -1
  76. rapidtide/scripts/plethquality.py +1 -1
  77. rapidtide/scripts/polyfitim.py +1 -1
  78. rapidtide/scripts/proj2flow.py +1 -1
  79. rapidtide/scripts/rankimage.py +1 -1
  80. rapidtide/scripts/rapidtide.py +1 -1
  81. rapidtide/scripts/rapidtide2std.py +1 -1
  82. rapidtide/scripts/resamplenifti.py +1 -1
  83. rapidtide/scripts/resampletc.py +1 -1
  84. rapidtide/scripts/retrolagtcs.py +1 -1
  85. rapidtide/scripts/retroregress.py +1 -1
  86. rapidtide/scripts/roisummarize.py +1 -1
  87. rapidtide/scripts/runqualitycheck.py +1 -1
  88. rapidtide/scripts/showarbcorr.py +1 -1
  89. rapidtide/scripts/showhist.py +1 -1
  90. rapidtide/scripts/showstxcorr.py +1 -1
  91. rapidtide/scripts/showtc.py +1 -1
  92. rapidtide/scripts/showxcorr_legacy.py +1 -1
  93. rapidtide/scripts/showxcorrx.py +1 -1
  94. rapidtide/scripts/showxy.py +1 -1
  95. rapidtide/scripts/simdata.py +1 -1
  96. rapidtide/scripts/spatialdecomp.py +1 -1
  97. rapidtide/scripts/spatialfit.py +1 -1
  98. rapidtide/scripts/spatialmi.py +1 -1
  99. rapidtide/scripts/spectrogram.py +1 -1
  100. rapidtide/scripts/stupidramtricks.py +1 -1
  101. rapidtide/scripts/synthASL.py +1 -1
  102. rapidtide/scripts/tcfrom2col.py +1 -1
  103. rapidtide/scripts/tcfrom3col.py +1 -1
  104. rapidtide/scripts/temporaldecomp.py +1 -1
  105. rapidtide/scripts/testhrv.py +1 -1
  106. rapidtide/scripts/threeD.py +1 -1
  107. rapidtide/scripts/tidepool.py +1 -1
  108. rapidtide/scripts/variabilityizer.py +1 -1
  109. rapidtide/simfuncfit.py +1 -1
  110. rapidtide/stats.py +1 -8
  111. rapidtide/tests/cleanposttest +1 -1
  112. rapidtide/tests/resethappytargets +1 -1
  113. rapidtide/tests/resetrapidtidetargets +1 -1
  114. rapidtide/tests/resettargets +1 -1
  115. rapidtide/tests/runlocaltest +1 -1
  116. rapidtide/tests/showkernels +1 -1
  117. rapidtide/tests/test_aliasedcorrelate.py +1 -1
  118. rapidtide/tests/test_aligntcs.py +1 -1
  119. rapidtide/tests/test_calcicc.py +1 -1
  120. rapidtide/tests/test_congrid.py +1 -1
  121. rapidtide/tests/test_correlate.py +1 -1
  122. rapidtide/tests/test_corrpass.py +1 -1
  123. rapidtide/tests/test_delayestimation.py +1 -1
  124. rapidtide/tests/test_doresample.py +1 -1
  125. rapidtide/tests/test_fastresampler.py +1 -1
  126. rapidtide/tests/test_findmaxlag.py +1 -1
  127. rapidtide/tests/test_fullrunhappy_v1.py +15 -7
  128. rapidtide/tests/test_fullrunhappy_v2.py +18 -10
  129. rapidtide/tests/test_fullrunhappy_v3.py +18 -10
  130. rapidtide/tests/test_fullrunhappy_v4.py +18 -10
  131. rapidtide/tests/test_fullrunhappy_v5.py +15 -9
  132. rapidtide/tests/test_fullrunrapidtide_v1.py +19 -11
  133. rapidtide/tests/test_fullrunrapidtide_v2.py +24 -14
  134. rapidtide/tests/test_fullrunrapidtide_v3.py +15 -7
  135. rapidtide/tests/test_fullrunrapidtide_v4.py +15 -8
  136. rapidtide/tests/test_fullrunrapidtide_v5.py +13 -5
  137. rapidtide/tests/test_fullrunrapidtide_v6.py +24 -16
  138. rapidtide/tests/test_io.py +1 -1
  139. rapidtide/tests/test_linfitfiltpass.py +1 -1
  140. rapidtide/tests/test_mi.py +1 -1
  141. rapidtide/tests/test_miscmath.py +1 -1
  142. rapidtide/tests/test_motionregress.py +1 -1
  143. rapidtide/tests/test_nullcorr.py +1 -1
  144. rapidtide/tests/test_padvec.py +1 -1
  145. rapidtide/tests/test_phaseanalysis.py +1 -1
  146. rapidtide/tests/test_rapidtideparser.py +1 -1
  147. rapidtide/tests/test_refinedelay.py +4 -3
  148. rapidtide/tests/test_runmisc.py +1 -1
  149. rapidtide/tests/test_sharedmem.py +1 -1
  150. rapidtide/tests/test_simulate.py +1 -1
  151. rapidtide/tests/test_stcorrelate.py +1 -1
  152. rapidtide/tests/test_timeshift.py +1 -1
  153. rapidtide/tests/test_valtoindex.py +1 -1
  154. rapidtide/tests/test_zRapidtideDataset.py +1 -1
  155. rapidtide/tests/utils.py +1 -1
  156. rapidtide/transformerdlfilter.py +2 -4
  157. rapidtide/util.py +37 -14
  158. rapidtide/voxelData.py +278 -0
  159. rapidtide/wiener.py +1 -1
  160. rapidtide/wiener2.py +1 -1
  161. rapidtide/workflows/adjustoffset.py +1 -1
  162. rapidtide/workflows/aligntcs.py +1 -1
  163. rapidtide/workflows/applydlfilter.py +20 -65
  164. rapidtide/workflows/atlasaverage.py +41 -13
  165. rapidtide/workflows/atlastool.py +1 -1
  166. rapidtide/workflows/calctexticc.py +1 -1
  167. rapidtide/workflows/ccorrica.py +1 -1
  168. rapidtide/workflows/cleanregressor.py +243 -0
  169. rapidtide/workflows/delayestimation.py +488 -0
  170. rapidtide/workflows/delayvar.py +122 -34
  171. rapidtide/workflows/diffrois.py +1 -1
  172. rapidtide/workflows/endtidalproc.py +1 -1
  173. rapidtide/workflows/fdica.py +1 -1
  174. rapidtide/workflows/filtnifti.py +1 -1
  175. rapidtide/workflows/filttc.py +1 -1
  176. rapidtide/workflows/fixtr.py +1 -1
  177. rapidtide/workflows/gmscalc.py +1 -1
  178. rapidtide/workflows/happy.py +49 -3
  179. rapidtide/workflows/happy2std.py +1 -1
  180. rapidtide/workflows/happy_parser.py +30 -6
  181. rapidtide/workflows/histnifti.py +1 -1
  182. rapidtide/workflows/histtc.py +1 -1
  183. rapidtide/workflows/linfitfilt.py +1 -1
  184. rapidtide/workflows/localflow.py +1 -1
  185. rapidtide/workflows/mergequality.py +1 -1
  186. rapidtide/workflows/niftidecomp.py +1 -1
  187. rapidtide/workflows/niftistats.py +1 -1
  188. rapidtide/workflows/pairproc.py +1 -1
  189. rapidtide/workflows/pairwisemergenifti.py +1 -1
  190. rapidtide/workflows/parser_funcs.py +1 -1
  191. rapidtide/workflows/physiofreq.py +1 -1
  192. rapidtide/workflows/pixelcomp.py +1 -1
  193. rapidtide/workflows/plethquality.py +1 -1
  194. rapidtide/workflows/polyfitim.py +1 -1
  195. rapidtide/workflows/proj2flow.py +1 -1
  196. rapidtide/workflows/rankimage.py +1 -1
  197. rapidtide/workflows/rapidtide.py +174 -686
  198. rapidtide/workflows/rapidtide2std.py +1 -1
  199. rapidtide/workflows/rapidtide_parser.py +14 -113
  200. rapidtide/workflows/regressfrommaps.py +6 -48
  201. rapidtide/workflows/resamplenifti.py +1 -1
  202. rapidtide/workflows/resampletc.py +1 -1
  203. rapidtide/workflows/retrolagtcs.py +2 -1
  204. rapidtide/workflows/retroregress.py +26 -2
  205. rapidtide/workflows/roisummarize.py +1 -1
  206. rapidtide/workflows/runqualitycheck.py +1 -1
  207. rapidtide/workflows/showarbcorr.py +1 -1
  208. rapidtide/workflows/showhist.py +1 -1
  209. rapidtide/workflows/showstxcorr.py +1 -1
  210. rapidtide/workflows/showtc.py +1 -1
  211. rapidtide/workflows/showxcorrx.py +1 -1
  212. rapidtide/workflows/showxy.py +1 -1
  213. rapidtide/workflows/simdata.py +1 -1
  214. rapidtide/workflows/spatialfit.py +1 -1
  215. rapidtide/workflows/spatialmi.py +1 -1
  216. rapidtide/workflows/spectrogram.py +1 -1
  217. rapidtide/workflows/synthASL.py +1 -1
  218. rapidtide/workflows/tcfrom2col.py +1 -1
  219. rapidtide/workflows/tcfrom3col.py +1 -1
  220. rapidtide/workflows/tidepool.py +2 -1
  221. rapidtide/workflows/utils.py +1 -1
  222. rapidtide/workflows/variabilityizer.py +1 -1
  223. {rapidtide-3.0a13.dist-info → rapidtide-3.0a15.dist-info}/METADATA +1 -1
  224. rapidtide-3.0a15.dist-info/RECORD +353 -0
  225. {rapidtide-3.0a13.dist-info → rapidtide-3.0a15.dist-info}/WHEEL +1 -1
  226. rapidtide/data/models/model_revised/model.h5 +0 -0
  227. rapidtide/data/models/model_serdar/model.h5 +0 -0
  228. rapidtide/data/models/model_serdar2/model.h5 +0 -0
  229. rapidtide-3.0a13.dist-info/RECORD +0 -345
  230. {rapidtide-3.0a13.dist-info → rapidtide-3.0a15.dist-info}/entry_points.txt +0 -0
  231. {rapidtide-3.0a13.dist-info → rapidtide-3.0a15.dist-info}/licenses/LICENSE +0 -0
  232. {rapidtide-3.0a13.dist-info → rapidtide-3.0a15.dist-info}/top_level.txt +0 -0
rapidtide/refinedelay.py CHANGED
@@ -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,7 +26,7 @@ import rapidtide.filter as tide_filt
26
26
  import rapidtide.io as tide_io
27
27
  import rapidtide.workflows.regressfrommaps as tide_regressfrommaps
28
28
 
29
- global ratiotooffsetfunc, maplimits
29
+ global ratiotooffsetfunc, funcoffsets, maplimits
30
30
 
31
31
 
32
32
  def smooth(y, box_pts):
@@ -40,37 +40,39 @@ def trainratiotooffset(
40
40
  timeaxis,
41
41
  outputname,
42
42
  outputlevel,
43
- trainwidth=0.0,
44
- trainstep=0.5,
43
+ trainlagmin=0.0,
44
+ trainlagmax=0.0,
45
+ trainlagstep=0.5,
45
46
  mindelay=-3.0,
46
47
  maxdelay=3.0,
47
48
  numpoints=501,
48
49
  smoothpts=3,
49
50
  edgepad=5,
50
51
  regressderivs=1,
52
+ LGR=None,
53
+ TimingLGR=None,
54
+ verbose=False,
51
55
  debug=False,
52
56
  ):
53
- global ratiotooffsetfunc, maplimits
57
+ global ratiotooffsetfunc, funcoffsets, maplimits
54
58
 
55
59
  if debug:
56
60
  print("ratiotooffsetfunc:")
57
61
  lagtcgenerator.info(prefix="\t")
58
62
  print("\ttimeaxis:", timeaxis)
59
63
  print("\toutputname:", outputname)
60
- print("\ttrainwidth:", trainwidth)
61
- print("\ttrainstep:", trainstep)
64
+ print("\ttrainlagmin:", trainlagmin)
65
+ print("\ttrainlagmax:", trainlagmax)
66
+ print("\ttrainlagstep:", trainlagstep)
62
67
  print("\tmindelay:", mindelay)
63
68
  print("\tmaxdelay:", maxdelay)
64
69
  print("\tsmoothpts:", smoothpts)
65
70
  print("\tedgepad:", edgepad)
66
71
  print("\tregressderivs:", regressderivs)
67
72
  print("\tlagtcgenerator:", lagtcgenerator)
73
+
68
74
  # make a delay map
69
75
  delaystep = (maxdelay - mindelay) / (numpoints - 1)
70
- if debug:
71
- print(f"{delaystep=}")
72
- print(f"{mindelay=}")
73
- print(f"{maxdelay=}")
74
76
  lagtimes = np.linspace(
75
77
  mindelay - edgepad * delaystep,
76
78
  maxdelay + edgepad * delaystep,
@@ -80,6 +82,7 @@ def trainratiotooffset(
80
82
  if debug:
81
83
  print(f"{mindelay=}")
82
84
  print(f"{maxdelay=}")
85
+ print(f"{delaystep=}")
83
86
  print("lagtimes=", lagtimes)
84
87
 
85
88
  # set up for getratioderivs call
@@ -105,109 +108,147 @@ def trainratiotooffset(
105
108
  "mp_chunksize": 1000,
106
109
  "showprogressbar": False,
107
110
  "alwaysmultiproc": False,
108
- "memprofile": False,
109
111
  "focaldebug": debug,
110
112
  "fmrifreq": 1.0 / sampletime,
111
113
  "textio": False,
112
114
  }
113
115
 
114
- if trainwidth > 0.0:
115
- numsteps = int(trainwidth / trainstep)
116
- numsteps += 1 - numsteps % 2 # force numsteps to be odd
117
- numsteps = np.max((numsteps, 3)) # ensure at least 1 positive and 1 negative step
116
+ if trainlagmax - trainlagmin > 0.0:
117
+ numnegoffsets = np.max((-int(np.round(trainlagmin / trainlagstep, 0)), 1))
118
+ numposoffsets = np.max((int(np.round(trainlagmax / trainlagstep, 0)), 1))
119
+ numoffsets = numnegoffsets + 1 + numposoffsets
118
120
  trainoffsets = (
119
- np.linspace(0, numsteps * trainstep, numsteps, endpoint=True)
120
- - (numsteps // 2) * trainstep
121
+ np.linspace(0, (numoffsets - 1) * trainlagstep, numoffsets, endpoint=True)
122
+ - numnegoffsets * trainlagstep
121
123
  )
122
124
  else:
123
125
  trainoffsets = np.array([0.0], dtype=float)
126
+ numoffsets = 1
124
127
  if debug:
125
128
  print("trainoffsets:", trainoffsets)
129
+ allsmoothregressderivratios = np.zeros(
130
+ (numpoints + 2 * edgepad, numoffsets), dtype=rt_floattype
131
+ )
132
+ theEVs = np.zeros((numoffsets, timeaxis.shape[0]), dtype=float)
126
133
 
127
- for i in range(len(trainoffsets)):
128
- pass
134
+ if verbose and (LGR is not None):
135
+ thisLGR = LGR
136
+ thisTimingLGR = TimingLGR
137
+ else:
138
+ thisLGR = None
139
+ thisTimingLGR = None
129
140
 
130
- # now make synthetic fMRI data
131
- for i in range(numpoints + 2 * edgepad):
132
- fmridata[i, :] = lagtcgenerator.yfromx(timeaxis - lagtimes[i])
141
+ for whichoffset in range(numoffsets):
142
+ thisoffset = trainoffsets[whichoffset]
133
143
 
134
- regressderivratios, regressrvalues = getderivratios(
135
- fmridata,
136
- validvoxels,
137
- timeaxis,
138
- 0.0 * lagtimes,
139
- fmrimask,
140
- lagtcgenerator,
141
- "glm",
142
- "refinedelaytest",
143
- sampletime,
144
- sLFOfitmean,
145
- rvalue,
146
- r2value,
147
- fitNorm[:, :2],
148
- fitcoeff[:, :2],
149
- movingsignal,
150
- lagtc,
151
- filtereddata,
152
- None,
153
- None,
154
- optiondict,
155
- regressderivs=regressderivs,
156
- debug=debug,
157
- )
158
- if debug:
159
- print("before trimming")
160
- print(f"{regressderivratios.shape=}")
161
- print(f"{lagtimes.shape=}")
162
- if regressderivs == 1:
163
- smoothregressderivratios = tide_filt.unpadvec(
164
- smooth(tide_filt.padvec(regressderivratios, padlen=20, padtype="constant"), smoothpts),
165
- padlen=20,
144
+ # now make synthetic fMRI data
145
+ for i in range(numpoints + 2 * edgepad):
146
+ fmridata[i, :] = lagtcgenerator.yfromx(timeaxis - lagtimes[i] + thisoffset)
147
+
148
+ theEVs[whichoffset, :] = lagtcgenerator.yfromx(timeaxis + thisoffset)
149
+
150
+ regressderivratios, regressrvalues = getderivratios(
151
+ fmridata,
152
+ validvoxels,
153
+ timeaxis + thisoffset,
154
+ 0.0 * lagtimes,
155
+ fmrimask,
156
+ lagtcgenerator,
157
+ "glm",
158
+ "refinedelaytest",
159
+ sampletime,
160
+ sLFOfitmean,
161
+ rvalue,
162
+ r2value,
163
+ fitNorm[:, :2],
164
+ fitcoeff[:, :2],
165
+ movingsignal,
166
+ lagtc,
167
+ filtereddata,
168
+ thisLGR,
169
+ thisTimingLGR,
170
+ optiondict,
171
+ regressderivs=regressderivs,
172
+ debug=debug,
166
173
  )
167
- regressderivratios = regressderivratios[edgepad:-edgepad]
168
- smoothregressderivratios = smoothregressderivratios[edgepad:-edgepad]
169
- else:
170
- smoothregressderivratios = np.zeros_like(regressderivratios)
171
- for i in range(regressderivs):
172
- smoothregressderivratios[i, :] = tide_filt.unpadvec(
174
+ if debug:
175
+ print("before trimming")
176
+ print(f"{regressderivratios.shape=}")
177
+ print(f"{lagtimes.shape=}")
178
+ if regressderivs == 1:
179
+ smoothregressderivratios = tide_filt.unpadvec(
173
180
  smooth(
174
- tide_filt.padvec(regressderivratios[i, :], padlen=20, padtype="constant"),
175
- smoothpts,
181
+ tide_filt.padvec(regressderivratios, padlen=20, padtype="constant"), smoothpts
176
182
  ),
177
183
  padlen=20,
178
184
  )
179
- regressderivratios = regressderivratios[:, edgepad:-edgepad]
180
- smoothregressderivratios = smoothregressderivratios[:, edgepad:-edgepad]
185
+ # regressderivratios = regressderivratios[edgepad:-edgepad]
186
+ allsmoothregressderivratios[:, whichoffset] = smoothregressderivratios + 0.0
187
+ else:
188
+ smoothregressderivratios = np.zeros_like(regressderivratios)
189
+ for i in range(regressderivs):
190
+ allsmoothregressderivratios[i, :] = tide_filt.unpadvec(
191
+ smooth(
192
+ tide_filt.padvec(regressderivratios[i, :], padlen=20, padtype="constant"),
193
+ smoothpts,
194
+ ),
195
+ padlen=20,
196
+ )
197
+ # regressderivratios = regressderivratios[:, edgepad:-edgepad]
198
+ allsmoothregressderivratios = smoothregressderivratios + 0.0
199
+
200
+ allsmoothregressderivratios = allsmoothregressderivratios[edgepad:-edgepad, :]
181
201
  lagtimes = lagtimes[edgepad:-edgepad]
182
202
  if debug:
183
203
  print("after trimming")
184
204
  print(f"{regressderivratios.shape=}")
185
- print(f"{smoothregressderivratios.shape=}")
205
+ print(f"{allsmoothregressderivratios.shape=}")
186
206
  print(f"{lagtimes.shape=}")
187
207
 
188
- # make sure the mapping function is legal
189
- xaxis = smoothregressderivratios[::-1]
190
- yaxis = lagtimes[::-1]
191
- midpoint = int(len(xaxis) // 2)
192
- lowerlim = midpoint + 0
193
- while (lowerlim > 1) and xaxis[lowerlim] > xaxis[lowerlim - 1]:
194
- lowerlim -= 1
195
- upperlim = midpoint + 0
196
- while (upperlim < len(xaxis) - 2) and xaxis[upperlim] < xaxis[upperlim + 1]:
197
- upperlim += 1
198
- xaxis = xaxis[lowerlim : upperlim + 1]
199
- yaxis = yaxis[lowerlim : upperlim + 1]
200
- ratiotooffsetfunc = CubicSpline(xaxis, yaxis)
208
+ # find the minimum legal limits of the mapping function
209
+ highestlowerlim = 0
210
+ lowestupperlim = numpoints
211
+ for whichoffset in range(numoffsets):
212
+ xaxis = allsmoothregressderivratios[::-1, whichoffset]
213
+ midpoint = int(len(xaxis) // 2)
214
+ lowerlim = midpoint + 0
215
+ while (lowerlim > 1) and xaxis[lowerlim] > xaxis[lowerlim - 1]:
216
+ lowerlim -= 1
217
+ upperlim = midpoint + 0
218
+ while (upperlim < len(xaxis) - 2) and xaxis[upperlim] < xaxis[upperlim + 1]:
219
+ upperlim += 1
220
+ if lowerlim > highestlowerlim:
221
+ highestlowerlim = lowerlim
222
+ if upperlim < lowestupperlim:
223
+ lowestupperlim = upperlim
224
+
225
+ ratiotooffsetfunc = []
226
+ funcoffsets = []
227
+ for whichoffset in range(numoffsets):
228
+ xaxis = allsmoothregressderivratios[::-1, whichoffset]
229
+ yaxis = lagtimes[::-1]
230
+ xaxis = xaxis[highestlowerlim : lowestupperlim + 1]
231
+ yaxis = yaxis[highestlowerlim : lowestupperlim + 1]
232
+ ratiotooffsetfunc.append(CubicSpline(xaxis, yaxis))
233
+ funcoffsets.append(trainoffsets[whichoffset] + 0.0)
201
234
  maplimits = (xaxis[0], xaxis[-1])
202
235
 
203
236
  if outputlevel != "min":
204
237
  resampaxis = np.linspace(xaxis[0], xaxis[-1], num=len(xaxis), endpoint=True)
238
+ outputfuncs = np.zeros((resampaxis.size, numoffsets), dtype=float)
239
+ colnames = []
240
+ for whichoffset in range(numoffsets):
241
+ colnames.append(f"{funcoffsets[whichoffset]}")
242
+ outputfuncs[:, whichoffset] = ratiotooffsetfunc[whichoffset](resampaxis)
243
+ if debug:
244
+ print(f"{colnames=}")
245
+ print(f"{outputfuncs.shape=}")
205
246
  tide_io.writebidstsv(
206
247
  f"{outputname}_desc-ratiotodelayfunc_timeseries",
207
- ratiotooffsetfunc(resampaxis),
248
+ np.transpose(outputfuncs),
208
249
  1.0 / (resampaxis[1] - resampaxis[0]),
209
250
  starttime=resampaxis[0],
210
- columns=["delay"],
251
+ columns=colnames,
211
252
  extraheaderinfo={
212
253
  "Description": "The function mapping derivative ratio to delay",
213
254
  "minratio": f"{resampaxis[0]}",
@@ -217,16 +258,59 @@ def trainratiotooffset(
217
258
  yaxislabel="time",
218
259
  append=False,
219
260
  )
261
+ if numoffsets > 1:
262
+ print(f"{theEVs.shape=}, {numoffsets=}, {(numoffsets>1)=}")
263
+ tide_io.writebidstsv(
264
+ f"{outputname}_desc-trainratioEV_timeseries",
265
+ theEVs,
266
+ 1.0 / (timeaxis[1] - timeaxis[0]),
267
+ starttime=timeaxis[0],
268
+ columns=colnames,
269
+ extraheaderinfo={"Description": f"EVs used for each offset"},
270
+ append=False,
271
+ )
272
+
220
273
 
274
+ def ratiotodelay(theratio, offset=0.0, debug=False):
275
+ global ratiotooffsetfunc, funcoffsets, maplimits
276
+
277
+ # find the closest calculated offset
278
+ closestindex = 0
279
+ for offsetindex in range(1, len(funcoffsets)):
280
+ if np.fabs(funcoffsets[offsetindex] - offset) < np.fabs(
281
+ funcoffsets[closestindex] - offset
282
+ ):
283
+ closestindex = offsetindex
284
+ closestoffset = funcoffsets[closestindex]
285
+ distance = np.fabs(funcoffsets[closestindex] - offset)
286
+ """if (maplimits[0] < theratio < maplimits[1]) and (
287
+ distance < (funcoffsets[1] - funcoffsets[0]) / 2
288
+ ):
289
+ return (
290
+ ratiotooffsetfunc[closestindex](theratio) + (offset - closestoffset),
291
+ closestoffset,
292
+ )
293
+ else:
294
+ return (
295
+ 0.0,
296
+ closestoffset,
297
+ )"""
221
298
 
222
- def ratiotodelay(theratio):
223
- global ratiotooffsetfunc, maplimits
224
299
  if theratio < maplimits[0]:
225
- return ratiotooffsetfunc(maplimits[0])
300
+ return (
301
+ ratiotooffsetfunc[closestindex](maplimits[0]) + (offset - closestoffset),
302
+ closestoffset,
303
+ )
226
304
  elif theratio > maplimits[1]:
227
- return ratiotooffsetfunc(maplimits[1])
305
+ return (
306
+ ratiotooffsetfunc[closestindex](maplimits[1]),
307
+ closestoffset,
308
+ )
228
309
  else:
229
- return ratiotooffsetfunc(theratio)
310
+ return (
311
+ ratiotooffsetfunc[closestindex](theratio),
312
+ closestoffset,
313
+ )
230
314
 
231
315
 
232
316
  def coffstodelay(thecoffs, mindelay=-3.0, maxdelay=3.0, debug=False):
@@ -316,14 +400,13 @@ def getderivratios(
316
400
  LGR,
317
401
  TimingLGR,
318
402
  optiondict["regressfiltthreshval"],
319
- optiondict["saveminimumsLFOfiltfiles"],
403
+ False,
320
404
  nprocs_makelaggedtcs=optiondict["nprocs_makelaggedtcs"],
321
405
  nprocs_regressionfilt=optiondict["nprocs_regressionfilt"],
322
406
  regressderivs=regressderivs,
323
407
  mp_chunksize=optiondict["mp_chunksize"],
324
408
  showprogressbar=optiondict["showprogressbar"],
325
409
  alwaysmultiproc=optiondict["alwaysmultiproc"],
326
- memprofile=optiondict["memprofile"],
327
410
  debug=debug,
328
411
  )
329
412
 
@@ -349,6 +432,7 @@ def filterderivratios(
349
432
  fileiscifti=False,
350
433
  textio=False,
351
434
  rt_floattype="float64",
435
+ verbose=True,
352
436
  debug=False,
353
437
  ):
354
438
 
@@ -360,7 +444,8 @@ def filterderivratios(
360
444
 
361
445
  # filter the ratio to find weird values
362
446
  themad = mad(regressderivratios).astype(np.float64)
363
- print(f"MAD of regression fit derivative ratios = {themad}")
447
+ if verbose:
448
+ print(f"MAD of regression fit derivative ratios = {themad}")
364
449
  outmaparray, internalspaceshape = tide_io.makedestarray(
365
450
  nativespaceshape,
366
451
  textio=textio,
@@ -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.
rapidtide/resample.py CHANGED
@@ -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.
@@ -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.
@@ -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.
@@ -16,8 +16,8 @@
16
16
  # limitations under the License.
17
17
  #
18
18
  #
19
- import rapidtide.workflows.parser_funcs as pf
20
19
  import rapidtide.workflows.delayvar as theworkflow
20
+ import rapidtide.workflows.parser_funcs as pf
21
21
 
22
22
 
23
23
  def entrypoint():
@@ -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.
@@ -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.
@@ -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.
@@ -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.