Skip to content

Commit

Permalink
changes
Browse files Browse the repository at this point in the history
  • Loading branch information
t-b committed Nov 23, 2023
1 parent ae44ca6 commit a5e25ed
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 57 deletions.
14 changes: 8 additions & 6 deletions Packages/MIES/MIES_AnalysisFunctions_PatchSeq.ipf
Original file line number Diff line number Diff line change
Expand Up @@ -1845,7 +1845,7 @@ End
///
/// @retval fitOffset offsets of all line fits
/// @retval fitSlope slopes of all line fits
static Function [WAVE fitOffset, WAVE fitSlope] PSQ_DS_FitFrequencyCurrentData(string device, variable sweepNo, WAVE apfreq, WAVE DAScales, variable numPointsForLineFit)
static Function [WAVE/D fitOffset, WAVE/D fitSlope] PSQ_DS_FitFrequencyCurrentData(string device, variable sweepNo, WAVE apfreq, WAVE DAScales, variable numPointsForLineFit)

variable i, numPoints, numFits, first, last, hasEnoughPoints, initialFit
string line, databrowser, key
Expand Down Expand Up @@ -1905,7 +1905,7 @@ static Function [WAVE fitOffset, WAVE fitSlope] PSQ_DS_FitFrequencyCurrentData(s

WAVE/T textualResultsValues = BSP_GetLogbookWave(databrowser, LBT_RESULTS, LBN_TEXTUAL_VALUES, selectedExpDevice = 1)

Make/FREE/N=(numFits) fitOffset, fitSlope
Make/FREE/D/N=(numFits) fitOffset, fitSlope
for(i = 0; i < numFits; i += 1)
sprintf key, "Sweep Formula store [Fit result %d]", i
WAVE/Z fitResult = PSQ_GetSweepFormulaResultWave(textualResultsValues, key, sweepNo)
Expand Down Expand Up @@ -1984,7 +1984,7 @@ End
/// smaller than `maxFrequencyChangePercent`.
static Function/WAVE PSQ_DS_GatherOvershootCorrection(WAVE apfreqParam, WAVE DAScalesParam, variable maxFrequencyChangePercent)

variable numEntries, numIterations, x, xp, y, yp, idx, i, xm
variable numEntries, numIterations, x, xp, y, yp, idx, i, xm, frac
string msg

Duplicate/FREE apfreqParam, apfreq
Expand All @@ -2006,7 +2006,9 @@ static Function/WAVE PSQ_DS_GatherOvershootCorrection(WAVE apfreqParam, WAVE DAS
y = apfreq[i]
yp = apfreq[i + 1]

if(yp > (y * (1 + maxFrequencyChangePercent * PERCENT_TO_ONE)))
frac = yp / y - 1

if(frac > (maxFrequencyChangePercent * PERCENT_TO_ONE))
x = DAScales[i]
xp = DAScales[i + 1]
xm = (xp + x) / 2
Expand All @@ -2016,7 +2018,7 @@ static Function/WAVE PSQ_DS_GatherOvershootCorrection(WAVE apfreqParam, WAVE DAS
EnsureLargeEnoughWave(results, indexShouldExist = idx)
ASSERT(yp > y, "Incorrect data ordering")

sprintf msg, "adding DAScale entry: xm=%g, [x, xp]=[%g, %g], idx=%g", xm, x, xp, idx
sprintf msg, "adding DAScale entry: xm=%g, [x, xp]=[%g, %g], [y, yp]=[%g, %g], frac=%g, maxFreqChangePerc=%g, idx=%g", xm, x, xp, y, yp, frac, maxFrequencyChangePercent, idx
DEBUGPRINT(msg)

results[idx] = xm
Expand Down Expand Up @@ -3217,7 +3219,7 @@ Function PSQ_DAScale(device, s)
// we only want to calculate new DAScale values for passing sweeps
// and if the initial FI slope is invalid we only need to measure futureDAScale values
DAScalesIndex[s.headstage] += 1

dascale = PSQ_DS_CalculateDAScale(fitOffset, fitSlope, apfreq, maxFrequencyChangePercent)
Make/FREE/D DAScaleNew = {dascale}
Concatenate/NP=(ROWS) {DAScaleNew}, futureDAScales
Expand Down
120 changes: 69 additions & 51 deletions Packages/tests/HardwareAnalysisFunctions/UTF_PatchSeqDAScale_Adapt.ipf
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,9 @@ static Function/WAVE GetEntries_IGNORE(string device, variable sweepNo)
wv[%validSlopePass] = GetLBNSingleEntry_IGNORE(device, sweepNo, PSQ_FMT_LBN_DA_AT_VALID_SLOPE_PASS)
wv[%initialValidSlopePass] = GetLBNSingleEntry_IGNORE(device, sweepNo, PSQ_FMT_LBN_DA_AT_INIT_VALID_SLOPE_PASS)

Make/Free/N=(DimSize(wv, ROWS)) junk
junk[] = WaveExists(wv[p]) ? ChangeFreeWaveName(wv[p], GetDimLabel(wv, ROWS, p)) : NaN

return wv
End

Expand All @@ -214,26 +217,29 @@ static Function [WAVE apFreqRef, WAVE apfreqFromSupra, WAVE DAScalesFromSupra] E
return [apFreqRef, apfreqFromSupra, DAScalesFromSupra]
End

// WAVE wv = entries[%maxSlope]
// print/D wv
//
// WAVE wv = entries[%fiSlope]
// print/D wv
//
// WAVE wv = entries[%fiOffset]
// print/D wv
//
// WAVE wv = entries[%futureDAScales]
// print/D wv
//
// WAVE wv = entries[%fiSlopesFromSupra]
// print/D wv
//
// WAVE wv = entries[%fiOffsetsFromSupra]
// print/D wv
//
// WAVE wv = entries[%dascale]
// print/D wv
static Function PrintSomeValues(WAVE/WAVE entries)

WAVE wv = entries[%maxSlope]
print/D wv

WAVE wv = entries[%fiSlope]
print/D wv

WAVE wv = entries[%fiOffset]
print/D wv

WAVE wv = entries[%futureDAScales]
print/D wv

WAVE wv = entries[%fiSlopesFromSupra]
print/D wv

WAVE wv = entries[%fiOffsetsFromSupra]
print/D wv

WAVE wv = entries[%dascale]
print/D wv
End

static Function PS_DS_AD1_preAcq(string device)

Expand All @@ -242,6 +248,8 @@ static Function PS_DS_AD1_preAcq(string device)

// SamplingMultiplier, SamplingFrequency use defaults

AFH_AddAnalysisParameter("PSQ_DaScale_Adapt_DA_0", "MaxFrequencyChangePercent", var=25)

// use defaults for the rest

Make/FREE asyncChannels = {2, 4}
Expand All @@ -254,7 +262,7 @@ static Function PS_DS_AD1_preAcq(string device)
JWN_SetWaveInWaveNote(overrideResults, "PassingSupraSweep", {7})
JWN_SetWaveInWaveNote(overrideResults, "PassingSupraSweeps", {4, 5, 6, 7})

Make/FREE/D daScalesFromSupra = {1e-3, 2e-3, 3e-3, 4e-3}
Make/FREE/D daScalesFromSupra = {1, 2, 3, 4}
JWN_SetWaveInWaveNote(overrideResults, "DAScalesSupra", daScalesFromSupra)

Make/FREE/D apFrequenciesFromSupra = {10, 11, 13, 16}
Expand Down Expand Up @@ -305,16 +313,16 @@ static Function PS_DS_AD1_REENTRY([string str])
CHECK_EQUAL_WAVES(entries[%apfreqFromSupra], apFreqFromSupra, mode = WAVE_DATA)
CHECK_EQUAL_WAVES(entries[%dascaleFromSupra], DAScalesFromSupra, mode = WAVE_DATA)

Make/FREE/D maxSlopeRef = {3.000000106112566e-07 ,3.000000106112566e-07, 3.000000106112566e-07}
Make/FREE/D fiSlopeRef = {3.000000106112566e-07, 3.000000106112566e-07, 3.000000106112566e-07}
Make/FREE/D maxSlopeRef = {2.999999970665357e-10 ,2.999999970665357e-10, 2.999999970665357e-10}
Make/FREE/D fiSlopeRef = {2.999999970665357e-10, 2.999999970665357e-10, 2.999999970665357e-10}
Make/FREE/D fiOffsetRef = {4, 4, 4}
Make/FREE/T futureDAScalesRef = {"0.00495999982456056;", \
"0.00495999982456056;", \
"0.00495999982456056;"}
Make/FREE/T futureDAScalesRef = {"5.22666666666667;", \
"5.22666666666667;", \
"5.22666666666667;"}

Make/FREE/D fiSlopesFromSupraRef = {1e-07, 2e-07, 3e-07}
Make/FREE/D fiSlopesFromSupraRef = {1e-07, 2e-10, 3e-10}
Make/FREE/D fiOffsetsFromSupraRef = {9, 7, 4}
Make/FREE/D DAScalesRef = {0.004959999824560564, 0.004959999824560559, 0.004959999824560559}
Make/FREE/D DAScalesRef = {5.226666666666667, 5.226666666666667, 5.226666666666667}

CHECK_EQUAL_WAVES(entries[%maxSlope], maxSlopeRef, mode = WAVE_DATA, tol = 1e-14)
CHECK_EQUAL_WAVES(entries[%fiSlope], fiSlopeRef, mode = WAVE_DATA, tol = 1e-14)
Expand All @@ -334,6 +342,8 @@ static Function PS_DS_AD2_preAcq(string device)

// SamplingMultiplier, SamplingFrequency use defaults

AFH_AddAnalysisParameter("PSQ_DaScale_Adapt_DA_0", "MaxFrequencyChangePercent", var=25)

// use defaults for the rest

Make/FREE asyncChannels = {2, 4}
Expand All @@ -346,7 +356,7 @@ static Function PS_DS_AD2_preAcq(string device)
JWN_SetWaveInWaveNote(overrideResults, "PassingSupraSweep", {7})
JWN_SetWaveInWaveNote(overrideResults, "PassingSupraSweeps", {4, 5, 6, 7})

Make/FREE/D daScalesFromSupra = {1e-3, 2e-3, 3e-3, 4e-3}
Make/FREE/D daScalesFromSupra = {1, 2, 3, 4}
JWN_SetWaveInWaveNote(overrideResults, "DAScalesSupra", daScalesFromSupra)

Make/FREE/D apFrequenciesFromSupra = {10, 11, 13, 16}
Expand Down Expand Up @@ -397,14 +407,14 @@ static Function PS_DS_AD2_REENTRY([string str])
CHECK_EQUAL_WAVES(entries[%apfreqFromSupra], apFreqFromSupra, mode = WAVE_DATA)
CHECK_EQUAL_WAVES(entries[%dascaleFromSupra], DAScalesFromSupra, mode = WAVE_DATA)

Make/FREE/D maxSlopeRef = {3.000000106112566e-07}
Make/FREE/D fiSlopeRef = {1.041666841672395e-08}
Make/FREE/D fiOffsetRef = {15.58333301544189}
Make/FREE/T futureDAScalesRef = {"0.00495999982456056;"}
Make/FREE/D maxSlopeRef = {3e-10}
Make/FREE/D fiSlopeRef = {8.15217391304348e-12}
Make/FREE/D fiOffsetRef = {15.67391304347826}
Make/FREE/T futureDAScalesRef = {"5.22666666666667;"}

Make/FREE/D fiSlopesFromSupraRef = {1e-07, 2e-07, 3e-07}
Make/FREE/D fiSlopesFromSupraRef = {1e-10, 2e-10, 3e-10}
Make/FREE/D fiOffsetsFromSupraRef = {9, 7, 4}
Make/FREE/D DAScalesRef = {0.00495999982456056}
Make/FREE/D DAScalesRef = {5.226666666666667}

CHECK_EQUAL_WAVES(entries[%maxSlope], maxSlopeRef, mode = WAVE_DATA, tol = 1e-12)
CHECK_EQUAL_WAVES(entries[%fiSlope], fiSlopeRef, mode = WAVE_DATA, tol = 1e-14)
Expand All @@ -424,6 +434,8 @@ static Function PS_DS_AD3_preAcq(string device)

// SamplingMultiplier, SamplingFrequency use defaults

AFH_AddAnalysisParameter("PSQ_DaScale_Adapt_DA_0", "MaxFrequencyChangePercent", var=25)

// use defaults for the rest

Make/FREE asyncChannels = {2, 4}
Expand All @@ -436,7 +448,7 @@ static Function PS_DS_AD3_preAcq(string device)
JWN_SetWaveInWaveNote(overrideResults, "PassingSupraSweep", {7})
JWN_SetWaveInWaveNote(overrideResults, "PassingSupraSweeps", {4, 5, 6, 7})

Make/FREE/D daScalesFromSupra = {1e-3, 2e-3, 3e-3, 4e-3}
Make/FREE/D daScalesFromSupra = {1, 2, 3, 4}
JWN_SetWaveInWaveNote(overrideResults, "DAScalesSupra", daScalesFromSupra)

Make/FREE/D apFrequenciesFromSupra = {10, 11, 13, 16}
Expand Down Expand Up @@ -491,14 +503,14 @@ static Function PS_DS_AD3_REENTRY([string str])
CHECK_EQUAL_WAVES(entries[%apfreqFromSupra], apFreqFromSupra, mode = WAVE_DATA)
CHECK_EQUAL_WAVES(entries[%dascaleFromSupra], DAScalesFromSupra, mode = WAVE_DATA)

Make/FREE/D maxSlopeRef = {3.000000106112566e-07, 3.000000106112566e-07}
Make/FREE/D fiSlopeRef = {3.000000106112566e-07, 1.041666841672395e-08 }
Make/FREE/D fiOffsetRef = {4, 15.58333301544189}
Make/FREE/T futureDAScalesRef = {"0.00495999982456056;", ""}
Make/FREE/D maxSlopeRef = {3e-10, 3e-10}
Make/FREE/D fiSlopeRef = {3e-10, 8.152173913043478e-12 }
Make/FREE/D fiOffsetRef = {4, 15.67391304347826}
Make/FREE/T futureDAScalesRef = {"5.22666666666667;", ""}

Make/FREE/D fiSlopesFromSupraRef = {1e-07, 2e-07, 3e-07}
Make/FREE/D fiSlopesFromSupraRef = {1e-10, 2e-10, 3e-10}
Make/FREE/D fiOffsetsFromSupraRef = {9, 7, 4}
Make/FREE/D DAScalesRef = {0.00495999982456056, 0.004959999824560559}
Make/FREE/D DAScalesRef = {5.226666666666667, 5.226666666666667}

CHECK_EQUAL_WAVES(entries[%maxSlope], maxSlopeRef, mode = WAVE_DATA, tol = 1e-14)
CHECK_EQUAL_WAVES(entries[%fiSlope], fiSlopeRef, mode = WAVE_DATA, tol = 1e-14)
Expand All @@ -518,19 +530,22 @@ static Function PS_DS_AD4_preAcq(string device)

// SamplingMultiplier, SamplingFrequency use defaults

AFH_AddAnalysisParameter("PSQ_DaScale_Adapt_DA_0", "MaxFrequencyChangePercent", var=25)

// use defaults for the rest

Make/FREE asyncChannels = {2, 4}
AFH_AddAnalysisParameter("PSQ_DaScale_Adapt_DA_0", "AsyncQCChannels", wv = asyncChannels)

SetAsyncChannelProperties(device, asyncChannels, -1e6, +1e6)

Make/O/N=0 root:overrideResults

WAVE/Z overrideResults = GetOverrideResults()
CHECK_WAVE(overrideResults, NUMERIC_WAVE)
JWN_SetWaveInWaveNote(overrideResults, "PassingSupraSweep", {7})
JWN_SetWaveInWaveNote(overrideResults, "PassingSupraSweeps", {4, 5, 6, 7})

Make/FREE/D daScalesFromSupra = {1e-3, 2e-3, 3e-3, 4e-3}
Make/FREE/D daScalesFromSupra = {1, 2, 3, 4}
JWN_SetWaveInWaveNote(overrideResults, "DAScalesSupra", daScalesFromSupra)

Make/FREE/D apFrequenciesFromSupra = {10, 11, 13, 16}
Expand Down Expand Up @@ -563,6 +578,7 @@ static Function PS_DS_AD5_preAcq(string device)
// SamplingMultiplier, SamplingFrequency use defaults

AFH_AddAnalysisParameter("PSQ_DaScale_Adapt_DA_0", "NumPointsForLineFit", var=3)
AFH_AddAnalysisParameter("PSQ_DaScale_Adapt_DA_0", "MaxFrequencyChangePercent", var=25)

// defaults for the rest

Expand All @@ -576,7 +592,7 @@ static Function PS_DS_AD5_preAcq(string device)
JWN_SetWaveInWaveNote(overrideResults, "PassingSupraSweep", {7})
JWN_SetWaveInWaveNote(overrideResults, "PassingSupraSweeps", {4, 5})

Make/FREE/D daScalesFromSupra = {1e-3, 2e-3}
Make/FREE/D daScalesFromSupra = {1, 2}
JWN_SetWaveInWaveNote(overrideResults, "DAScalesSupra", daScalesFromSupra)

Make/FREE/D apFrequenciesFromSupra = {10, 11}
Expand Down Expand Up @@ -607,6 +623,8 @@ static Function PS_DS_AD6_preAcq(string device)
AFH_AddAnalysisParameter("PSQ_DaScale_Adapt_DA_0", "BaselineRMSShortThreshold", var=0.07)

// SamplingMultiplier, SamplingFrequency use defaults

AFH_AddAnalysisParameter("PSQ_DaScale_Adapt_DA_0", "MaxFrequencyChangePercent", var=25)

// use defaults for the rest

Expand All @@ -620,7 +638,7 @@ static Function PS_DS_AD6_preAcq(string device)
JWN_SetWaveInWaveNote(overrideResults, "PassingSupraSweep", {7})
JWN_SetWaveInWaveNote(overrideResults, "PassingSupraSweeps", {4, 5, 6, 7})

Make/FREE/D daScalesFromSupra = {1e-3, 2e-3, 3e-3, 4e-3}
Make/FREE/D daScalesFromSupra = {1, 2, 3, 4}
JWN_SetWaveInWaveNote(overrideResults, "DAScalesSupra", daScalesFromSupra)

// invalid initial valid fit QC
Expand All @@ -637,7 +655,7 @@ static Function PS_DS_AD6([string str])
WAVE wv = PSQ_CreateOverrideResults(str, PSQ_TEST_HEADSTAGE, PSQ_DA_SCALE, opMode = PSQ_DS_ADAPT)

// all tests pass
wv[][][%APFrequency] = 16.1 - 5 * q
wv[][][%APFrequency] = 7 - 5 * q
wv[][][%AsyncQC] = 1
wv[][][%BaselineQC] = 1
End
Expand Down Expand Up @@ -672,11 +690,11 @@ static Function PS_DS_AD6_REENTRY([string str])
CHECK_EQUAL_WAVES(entries[%apfreqFromSupra], apFreqFromSupra, mode = WAVE_DATA)
CHECK_EQUAL_WAVES(entries[%dascaleFromSupra], DAScalesFromSupra, mode = WAVE_DATA)

Make/FREE/D maxSlopeRef = {2.000000023372195e-07}
Make/FREE/D fiSlopeRef = {8.132530204818522e-10}
Make/FREE/D fiOffsetRef = {7.967469692230225}
Make/FREE/D maxSlopeRef = {2e-10}
Make/FREE/D fiSlopeRef = {3.333333333333333e-11}
Make/FREE/D fiOffsetRef = {6.666666666666667}

Make/FREE/D fiSlopesFromSupraRef = {1e-07, 2e-07, -4.99999998737621e-07}
Make/FREE/D fiSlopesFromSupraRef = {1e-07, 2e-10, -5e-10}
Make/FREE/D fiOffsetsFromSupraRef = {9, 7, 28}
Make/FREE/D DAScalesRef = {1}

Expand Down

0 comments on commit a5e25ed

Please sign in to comment.