Skip to content

Commit

Permalink
PSQ_Chirp: Add support for DAScale limit checks
Browse files Browse the repository at this point in the history
  • Loading branch information
t-b committed Nov 18, 2024
1 parent 3fb80aa commit 08d331e
Show file tree
Hide file tree
Showing 3 changed files with 170 additions and 7 deletions.
8 changes: 8 additions & 0 deletions Packages/MIES/MIES_AnalysisFunctions_Dashboard.ipf
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ static Function/S AD_GetResultMessage(variable anaFuncType, variable passed, WAV
// - baseline QC
// - needs at least PSQ_CR_NUM_SWEEPS_PASS passing sweeps with the same to-full-pA rounded DAScale
// - spike found while none expected (optional)
// - Out of range DAScale

// PSQ_DA
// - baseline QC
Expand Down Expand Up @@ -687,6 +688,13 @@ static Function/S AD_GetChirpFailMsg(WAVE numericalValues, WAVE/T textualValues,
string text = ""
variable i, numSweeps, setPassed, maxOccurences

key = CreateAnaFuncLBNKey(PSQ_CHIRP, PSQ_FMT_LBN_DASCALE_OOR, query = 1)
WAVE/Z oorDASCale = GetLastSettingEachSCI(numericalValues, sweepNo, key, headstage, UNKNOWN_MODE)

if(AD_LabnotebookEntryExistsAndIsTrue(oorDASCale))
return AD_OOR_DASCALE_MSG
endif

msg = AD_GetPerSweepFailMessage(PSQ_CHIRP, numericalValues, textualValues, sweepNo, sweepDFR, headstage, numRequiredPasses = PSQ_CR_NUM_SWEEPS_PASS)

if(!IsEmpty(msg))
Expand Down
35 changes: 29 additions & 6 deletions Packages/MIES/MIES_AnalysisFunctions_PatchSeq.ipf
Original file line number Diff line number Diff line change
Expand Up @@ -6096,9 +6096,9 @@ Function PSQ_Chirp(string device, STRUCT AnalysisFunction_V3 &s)
variable InnerRelativeBound, OuterRelativeBound, sweepPassed, setPassed, boundsAction, failsInSet, leftSweeps, chunk, multiplier
variable length, minLength, DAC, resistance, passingDaScaleSweep, sweepsInSet, passesInSet, acquiredSweepsInSet, samplingFrequencyPassed
variable targetVoltage, initialDAScale, baselineQCPassed, insideBounds, scalingFactorDAScale, initLPF, ampBesselFilter
variable fifoTime, i, ret, range, chirpStart, chirpDuration, userOnsetDelay, asyncAlarmPassed
variable fifoTime, i, ret, range, chirpStart, chirpDuration, userOnsetDelay, asyncAlarmPassed, limitCheck
variable numberOfChirpCycles, cycleEnd, maxOccurences, level, numberOfSpikesFound, abortDueToSpikes, spikeCheck, besselFilterRestore
variable spikeCheckPassed, daScaleModifier, chirpEnd, numSweepsFailedAllowed, boundsEvaluationMode, stimsetPass
variable spikeCheckPassed, daScaleModifier, chirpEnd, numSweepsFailedAllowed, boundsEvaluationMode, stimsetPass, oorDAScalePassed
string setName, key, msg, stimset, str, daScaleOperator

innerRelativeBound = AFH_GetAnalysisParamNumerical("InnerRelativeBound", s.params)
Expand Down Expand Up @@ -6231,7 +6231,8 @@ Function PSQ_Chirp(string device, STRUCT AnalysisFunction_V3 &s)
result[INDEP_HEADSTAGE] = initialDAScale
ED_AddEntryToLabnotebook(device, key, result, overrideSweepNo = s.sweepNo)

SetDAScale(device, s.sweepNo, s.headstage, absolute = initialDAScale, roundTopA = 1)
// not checking DAScale limits as we can't do that in PRE_SET_EVENT
SetDAScale(device, s.sweepNo, s.headstage, absolute = initialDAScale, roundTopA = 1, limitCheck = 0)

WAVE result = LBN_GetNumericWave()
key = CreateAnaFuncLBNKey(PSQ_CHIRP, PSQ_FMT_LBN_CR_INIT_UOD)
Expand Down Expand Up @@ -6292,7 +6293,16 @@ Function PSQ_Chirp(string device, STRUCT AnalysisFunction_V3 &s)
WAVE asyncChannels = AFH_GetAnalysisParamWave("AsyncQCChannels", s.params)
asyncAlarmPassed = PSQ_CheckAsyncAlarmStateAndStoreInLabnotebook(device, PSQ_CHIRP, s.sweepNo, asyncChannels)

sweepPassed = (baselineQCPassed == 1 && insideBounds == 1 && samplingFrequencyPassed == 1 && asyncAlarmPassed == 1 && stimsetPass == 1)
key = CreateAnaFuncLBNKey(PSQ_CHIRP, PSQ_FMT_LBN_DASCALE_OOR, query = 1)
WAVE/Z oorDAScaleLBN = GetLastSetting(numericalValues, s.sweepNo, key, UNKNOWN_MODE)
oorDAScalePassed = !(WaveExists(oorDAScaleLBN) ? oorDAScaleLBN[s.headstage] : 0)

sweepPassed = (baselineQCPassed == 1 \
&& insideBounds == 1 \
&& samplingFrequencyPassed == 1 \
&& asyncAlarmPassed == 1 \
&& stimsetPass == 1 \
&& oorDAScalePassed == 1)

if(spikeCheck)
sweepPassed = (sweepPassed == 1 && spikeCheckPassed == 1)
Expand Down Expand Up @@ -6454,6 +6464,8 @@ Function PSQ_Chirp(string device, STRUCT AnalysisFunction_V3 &s)
endif
endif

limitCheck = !AFH_LastSweepInSet(device, s.sweepNo, s.headstage, s.eventType)

// no early return here because we want to do baseline QC checks (and chunk creation) always

if(IsNaN(baselineQCPassed))
Expand All @@ -6470,7 +6482,10 @@ Function PSQ_Chirp(string device, STRUCT AnalysisFunction_V3 &s)
// adapt DAScale and finish
daScaleModifier = AFH_GetAnalysisParamNumerical("DAScaleModifier", s.params)
daScaleOperator = AFH_GetAnalysisParamTextual("DAScaleOperator", s.params)
SetDAScaleModOp(device, s.sweepNo, s.headstage, daScaleModifier, daScaleOperator, roundTopA = 1)

WAVE oorDAScale = LBN_GetNumericWave()
oorDAScale[s.headstage] = SetDAScaleModOp(device, s.sweepNo, s.headstage, daScaleModifier, daScaleOperator, roundTopA = 1, limitCheck = limitCheck)
ReportOutOfRangeDAScale(device, s.sweepNo, PSQ_CHIRP, oorDAScale)

return ANALYSIS_FUNC_RET_EARLY_STOP
endif
Expand All @@ -6487,18 +6502,26 @@ Function PSQ_Chirp(string device, STRUCT AnalysisFunction_V3 &s)
key = CreateAnaFuncLBNKey(PSQ_CHIRP, PSQ_FMT_LBN_CR_INSIDE_BOUNDS)
ED_AddEntryToLabnotebook(device, key, result, overrideSweepNo = s.sweepNo, unit = LABNOTEBOOK_BINARY_UNIT)

WAVE oorDAScale = LBN_GetNumericWave()

switch(boundsAction)
case PSQ_CR_PASS:
case PSQ_CR_RERUN: // fallthrough-by-design
// nothing to do
break
case PSQ_CR_INCREASE:
case PSQ_CR_DECREASE: // fallthrough-by-design
SetDAScale(device, s.sweepNo, s.headstage, relative = scalingFactorDAScale, roundTopA = 1)
oorDAScale[s.headstage] = SetDAScale(device, s.sweepNo, s.headstage, relative = scalingFactorDAScale, roundTopA = 1, limitCheck = limitCheck)

if(oorDAScale[s.headstage])
return ANALYSIS_FUNC_RET_EARLY_STOP
endif
break
default:
ASSERT(0, "impossible case")
endswitch

ReportOutOfRangeDAScale(device, s.sweepNo, PSQ_CHIRP, oorDAScale)
endif

if(IsFinite(baselineQCPassed) && baselineQCPassed)
Expand Down
Loading

0 comments on commit 08d331e

Please sign in to comment.