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.
- rapidtide/Colortables.py +1 -1
- rapidtide/DerivativeDelay.py +4 -2
- 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/testdelayvar +2 -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 +3 -1
- rapidtide/makelaggedtcs.py +9 -6
- rapidtide/maskutil.py +1 -1
- rapidtide/miscmath.py +1 -8
- rapidtide/multiproc.py +9 -12
- rapidtide/patchmatch.py +1 -1
- rapidtide/peakeval.py +1 -1
- rapidtide/qualitycheck.py +1 -1
- rapidtide/refinedelay.py +174 -89
- 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 +15 -7
- rapidtide/tests/test_fullrunhappy_v2.py +18 -10
- rapidtide/tests/test_fullrunhappy_v3.py +18 -10
- rapidtide/tests/test_fullrunhappy_v4.py +18 -10
- rapidtide/tests/test_fullrunhappy_v5.py +15 -9
- rapidtide/tests/test_fullrunrapidtide_v1.py +19 -11
- rapidtide/tests/test_fullrunrapidtide_v2.py +24 -14
- rapidtide/tests/test_fullrunrapidtide_v3.py +15 -7
- rapidtide/tests/test_fullrunrapidtide_v4.py +15 -8
- rapidtide/tests/test_fullrunrapidtide_v5.py +13 -5
- rapidtide/tests/test_fullrunrapidtide_v6.py +24 -16
- 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 +4 -3
- 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 +41 -13
- 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 +122 -34
- 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 +174 -686
- rapidtide/workflows/rapidtide2std.py +1 -1
- rapidtide/workflows/rapidtide_parser.py +14 -113
- rapidtide/workflows/regressfrommaps.py +6 -48
- rapidtide/workflows/resamplenifti.py +1 -1
- rapidtide/workflows/resampletc.py +1 -1
- rapidtide/workflows/retrolagtcs.py +2 -1
- rapidtide/workflows/retroregress.py +26 -2
- 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.0a13.dist-info → rapidtide-3.0a15.dist-info}/METADATA +1 -1
- rapidtide-3.0a15.dist-info/RECORD +353 -0
- {rapidtide-3.0a13.dist-info → rapidtide-3.0a15.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.0a13.dist-info/RECORD +0 -345
- {rapidtide-3.0a13.dist-info → rapidtide-3.0a15.dist-info}/entry_points.txt +0 -0
- {rapidtide-3.0a13.dist-info → rapidtide-3.0a15.dist-info}/licenses/LICENSE +0 -0
- {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-
|
|
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
|
-
|
|
44
|
-
|
|
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("\
|
|
61
|
-
print("\
|
|
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
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
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,
|
|
120
|
-
-
|
|
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
|
-
|
|
128
|
-
|
|
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
|
-
|
|
131
|
-
|
|
132
|
-
fmridata[i, :] = lagtcgenerator.yfromx(timeaxis - lagtimes[i])
|
|
141
|
+
for whichoffset in range(numoffsets):
|
|
142
|
+
thisoffset = trainoffsets[whichoffset]
|
|
133
143
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
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
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
smoothregressderivratios
|
|
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
|
|
175
|
-
smoothpts,
|
|
181
|
+
tide_filt.padvec(regressderivratios, padlen=20, padtype="constant"), smoothpts
|
|
176
182
|
),
|
|
177
183
|
padlen=20,
|
|
178
184
|
)
|
|
179
|
-
|
|
180
|
-
|
|
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"{
|
|
205
|
+
print(f"{allsmoothregressderivratios.shape=}")
|
|
186
206
|
print(f"{lagtimes.shape=}")
|
|
187
207
|
|
|
188
|
-
#
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
lowerlim
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
upperlim
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
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
|
-
|
|
248
|
+
np.transpose(outputfuncs),
|
|
208
249
|
1.0 / (resampaxis[1] - resampaxis[0]),
|
|
209
250
|
starttime=resampaxis[0],
|
|
210
|
-
columns=
|
|
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
|
|
300
|
+
return (
|
|
301
|
+
ratiotooffsetfunc[closestindex](maplimits[0]) + (offset - closestoffset),
|
|
302
|
+
closestoffset,
|
|
303
|
+
)
|
|
226
304
|
elif theratio > maplimits[1]:
|
|
227
|
-
return
|
|
305
|
+
return (
|
|
306
|
+
ratiotooffsetfunc[closestindex](maplimits[1]),
|
|
307
|
+
closestoffset,
|
|
308
|
+
)
|
|
228
309
|
else:
|
|
229
|
-
return
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
rapidtide/refineregressor.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.
|
rapidtide/resample.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/scripts/aligntcs.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.
|
|
@@ -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/scripts/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.
|
rapidtide/scripts/calcicc.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.
|
rapidtide/scripts/calctexticc.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.
|
rapidtide/scripts/calcttest.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.
|
rapidtide/scripts/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.
|
rapidtide/scripts/delayvar.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.
|
|
@@ -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():
|
rapidtide/scripts/diffrois.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/scripts/fdica.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.
|
rapidtide/scripts/filtnifti.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.
|
rapidtide/scripts/filttc.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.
|
rapidtide/scripts/fingerprint.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.
|
rapidtide/scripts/fixtr.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.
|
rapidtide/scripts/gmscalc.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.
|
rapidtide/scripts/happy.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.
|
rapidtide/scripts/happy2std.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.
|
rapidtide/scripts/happywarp.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.
|
rapidtide/scripts/histnifti.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.
|
rapidtide/scripts/histtc.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.
|
rapidtide/scripts/linfitfilt.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.
|