Skip to content

Various PSX fixes #2362

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 51 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
d45f0a8
SF_FormulaPlotter: Factor traceCnt check out
t-b May 7, 2025
799d588
SF_CombineYUnits: Prefer TextWaveToList
t-b May 7, 2025
6f4d298
SF_GatherYUnits: Drop return value
t-b May 7, 2025
7655d99
SF_FormulaPlotter: Generalize y axis label handling
t-b May 7, 2025
e5a8269
SF_FormulaPlotter: Move SF_CombineAxisLabels closer to its usage
t-b May 7, 2025
bd95dc8
Tests: Add TestAxisLabelGathering
t-b May 7, 2025
c333176
SF_GatherFormulaResults: Skip special case for single x and y wave pairs
t-b May 9, 2025
7650ffb
SF_GatherFormulaResults: Prefer Duplicate over new Make
t-b May 9, 2025
0b7355d
SF_FormatUnit: Factor it out
t-b May 9, 2025
86a73e9
SF_GatherAxisLabels: Also gather the x-labels
t-b May 9, 2025
55d1d9e
Merge branch 'bugfix/2423-sweepformula-multiple-axis-labels-for-x-axi…
t-b May 9, 2025
c8f672a
UpdateInfoButtonHelp: Set machine-readable text for C&P
t-b Apr 7, 2025
450f845
Merge branch 'feature/2424-easier-copy-and-paste-from-psx-to-excel' i…
t-b May 9, 2025
608b1a8
PSX_RestoreGuiState: Prefer GUI control setter over PGC
t-b Apr 1, 2025
e5b6bc4
PSX_GetEventIndexAndComboIndex: Handle vs in keyboard navigation
t-b Apr 4, 2025
5bab074
PSX: Tweak detection algorithm
timjarsky Mar 18, 2025
7bf64d5
PSX: Calculate the starting point for the average fit better
t-b Mar 19, 2025
34214cd
PSX_GetEventFitRange: Change starting position
t-b Mar 19, 2025
7771db9
PSX_CalculateEventProperties: Tweak baseline calculation
t-b Mar 19, 2025
dba0ee1
UTF_SweepFormula_PSX.ipf: Fix tests
t-b Mar 19, 2025
3198d7d
PSX_GetGoodTau: Handle edge case
t-b Mar 25, 2025
11c85ba
PSX_PlotStartupSettings: Handle no userdata properly
t-b Mar 25, 2025
6798280
MIES_SweepFormula_PSX.ipf: Tweak PSX_TAU_CALC_FACTOR
timjarsky Mar 19, 2025
357ee3c
MIES_SweepFormula_PSX.ipf: Tweak peak and baseline calculation
t-b Apr 7, 2025
e9a7eee
PSX_CalculateRiseTime: Factor it out
t-b Mar 25, 2025
0eab240
PSX_CalculateRiseTime: Return error when xStart is NaN
t-b Mar 26, 2025
bc3296a
PSX_UpdateDisplayedFit: Remove yOffset
t-b Apr 7, 2025
9311c36
PSX_FitAcceptAverage: Use different method for calculating start posi…
t-b Mar 25, 2025
c644f6f
MIES_SweepFormula_PSX.ipf: Revise event peak and baseline calculation
t-b Apr 7, 2025
bfc3020
PSX_GetEventFitRange/PSX_FitEventDecay: Revise them
t-b Apr 7, 2025
8cfd85f
PSX_FitEventDecay: Switch from single exponential to double exponenti…
timjarsky Apr 2, 2025
b6c6895
PSX_FitAcceptAverage: Multiple simultaneous fits to the accepted all …
timjarsky Apr 2, 2025
91e23ac
PSX_FilterEventsKernelAmpSign: Ignore events with non-finite deconv v…
t-b Apr 7, 2025
8676bc4
PSX: Add more vertical lines for peak_t and baseline_t
t-b Apr 7, 2025
cebe735
PSX_FitEventDecay: Support three tau instead of one
t-b Apr 2, 2025
bfc9226
PSX_AppendTracesToAllEventGraph: Fix function comment
t-b Apr 7, 2025
48a6ba0
stopping the collapse of the universe by filtering out negative time …
timjarsky Apr 10, 2025
6b0f96f
another tau filter
timjarsky Apr 10, 2025
219f394
BandPassWithRingingDetection: Add it
timjarsky Apr 23, 2025
299adfb
psxDeconvFilter: Rework it
t-b May 9, 2025
118aea3
MIES_SweepFormula_PSX.ipf: Document SweepFormula operation signatures
t-b May 9, 2025
af67258
psxSweepBPFilter: Add it
t-b May 9, 2025
41cdf61
PSX_FilterSweepData/PSX_DeconvoluteSweepData: Always make order even
t-b May 12, 2025
7166396
SFH_GetArgumentAsNumeric: Add assertion
t-b May 12, 2025
deb90fd
BandPassWithRingingDetection: Minor cleanup
t-b May 12, 2025
cb93233
BandPassWithRingingDetection: Remove the offset for every iteration
t-b May 12, 2025
b0c9eff
BandPassWithRingingDetection: Reorganize the code
t-b May 12, 2025
6396470
PSX_Operation: Fix data gathering after failure
t-b May 13, 2025
86c868b
PSX_Operation: Backdown filtering order
t-b May 14, 2025
dcadaf1
MIES_SweepFormula_PSX.ipf: Check number of arguments in all operations
t-b May 14, 2025
b400252
SF_CheckInputCode: Preprocess code
t-b May 14, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Packages/MIES/MIES_Cache.ipf
Original file line number Diff line number Diff line change
Expand Up @@ -442,7 +442,7 @@ End
/// @param psxParameters JSON dump of the psx/psxKernel operation parameters
Function/S CA_PSXEventsKey(string comboKey, string psxParameters)

return CA_PSXBaseKey(comboKey, psxParameters) + " Events " + ":Version 2"
return CA_PSXBaseKey(comboKey, psxParameters) + " Events " + ":Version 3"
End

Function/S CA_PSXOperationKey(string comboKey, string psxParameters)
Expand All @@ -452,7 +452,7 @@ End

Function/S CA_PSXAnalyzePeaks(string comboKey, string psxParameters)

return CA_PSXBaseKey(comboKey, psxParameters) + " Analyze Peaks " + ":Version 2"
return CA_PSXBaseKey(comboKey, psxParameters) + " Analyze Peaks " + ":Version 3"
End

/// @brief Return the key for the igor info entries
Expand Down
20 changes: 12 additions & 8 deletions Packages/MIES/MIES_Constants.ipf
Original file line number Diff line number Diff line change
Expand Up @@ -2339,12 +2339,13 @@ Constant SECONDS_PER_DAY = 86400
StrConstant DB_AXIS_PART_EPOCHS = "_EP"
///@}

StrConstant SF_OP_PSX = "psx"
StrConstant SF_OP_PSX_KERNEL = "psxKernel"
StrConstant SF_OP_PSX_STATS = "psxStats"
StrConstant SF_OP_PSX_RISETIME = "psxRiseTime"
StrConstant SF_OP_PSX_PREP = "psxPrep"
StrConstant SF_OP_PSX_DECONV_FILTER = "psxDeconvFilter"
StrConstant SF_OP_PSX = "psx"
StrConstant SF_OP_PSX_KERNEL = "psxKernel"
StrConstant SF_OP_PSX_STATS = "psxStats"
StrConstant SF_OP_PSX_RISETIME = "psxRiseTime"
StrConstant SF_OP_PSX_PREP = "psxPrep"
StrConstant SF_OP_PSX_DECONV_BP_FILTER = "psxDeconvBPFilter"
StrConstant SF_OP_PSX_SWEEP_BP_FILTER = "psxSweepBPFilter"

/// @name Available PSX states
/// @anchor PSXStates
Expand Down Expand Up @@ -2373,7 +2374,9 @@ Constant PSX_MARKER_UNDET = 18
/// @name Custom error codes for PSX_FitEventDecay()
/// @anchor FitEventDecayCustomErrors
///@{
Constant PSX_DECAY_FIT_ERROR = -10000
Constant PSX_DECAY_FIT_ERROR = -10000
Constant PSX_DECAY_FIT_INVALID_RANGE_ERROR = -10001

///@}

StrConstant PSX_STATS_LABELS = "Average;Median;Average Deviation;Standard deviation;Skewness;Kurtosis"
Expand All @@ -2391,7 +2394,8 @@ Constant PSX_HORIZ_OFFSET_SLEW = 2

Constant PSX_DECONV_FILTER_DEF_LOW = 500
Constant PSX_DECONV_FILTER_DEF_HIGH = 50
Constant PSX_DECONV_FILTER_DEF_ORDER = 7
Constant PSX_SWEEP_FILTER_DEF_ORDER = 6
Constant PSX_DECONV_FILTER_DEF_ORDER = 8

StrConstant PSX_JWN_COMBO_KEYS_NAME = "ComboKeys"

Expand Down
77 changes: 77 additions & 0 deletions Packages/MIES/MIES_MiesUtilities_Algorithm.ipf
Original file line number Diff line number Diff line change
Expand Up @@ -595,3 +595,80 @@ threadsafe Function/WAVE FindIndizes(WAVE numericOrTextWave, [variable col, stri

return result
End

/// @brief Band‑pass filters a wave while automatically reducing IIR filter
/// order until the output contains no NaNs/Infs and its SEM is not larger than
/// the original (simple ringing detection).
///
/// @param src – input wave
/// @param fHigh – pass‑band edge frequencies in Hz (Igor’s band‑pass requires fLow > fHigh; the routine swaps them if needed)
/// @param fLow – low part
/// @param maxOrder – starting (maximum) IIR filter order to try (>0)
///
/// Logic: iteratively lowers the filter order until three conditions are met:
/// 1. FilterIIR executes without error.
/// 2. WaveStats reports V_numNaNs = 0 and V_numInfs = 0.
/// 3. SEM(filtered) ≤ SEM(original).
///
/// @retval realOrder filter order that finally succeeded (NaN if every order failed)
/// @retval filtered filtered data
Function [variable realOrder, WAVE filtered] BandPassWithRingingDetection(WAVE src, variable fHigh, variable fLow, variable maxOrder)

variable err, samp, semOrig, offset, i
string msg

ASSERT(IsInteger(maxOrder) && maxOrder > 0 && isEven(maxOrder), "maxOrder must be a positive and even integer")

// Igor band-pass expects fLow > fHigh
[fHigh, fLow] = MinMax(fLow, fHigh)

// Sampling rate (Hz) – assumes X scaling is in milliseconds
samp = 1 / (DeltaX(src) * MILLI_TO_ONE)

// Pre-compute SEM(original) once
WaveStats/Q src
semOrig = V_sem
offset = v_avg
ASSERT(V_numNaNs == 0 && V_numInfs == 0, "Expected only finite value in input data")

// Prepare destination wave
Duplicate/FREE src, filtered

for(i = maxOrder; i > 0; i -= 2)
Multithread filtered = src - offset

FilterIIR/LO=(fLow / samp)/HI=(fHigh / samp)/DIM=(ROWS)/ORD=(i) filtered; err = GetRTError(1)
if(err)
continue
endif

WaveStats/Q filtered
if(V_numNaNs > 0 || V_numInfs > 0)
sprintf msg, "V_numNaNs: %g, V_numInfs: %g", V_numNaNs, V_numInfs
DEBUGPRINT(msg)

// bad numerical output → lower order
continue
endif

if(V_sem > semOrig)
sprintf msg, "V_sem: %g,semOrig: %g", V_sem, semOrig
DEBUGPRINT(msg)

// noisier than original → ringing
continue
endif

Multithread filtered += offset

sprintf msg, "maxOrder: %g, realOrder: %g", maxOrder, i
DEBUGPRINT(msg)

return [i, filtered]
endfor

sprintf msg, "maxOrder: %g, realOrder: NaN", maxOrder
DEBUGPRINT(msg)

return [NaN, $""]
End
128 changes: 73 additions & 55 deletions Packages/MIES/MIES_SweepFormula.ipf
Original file line number Diff line number Diff line change
Expand Up @@ -252,7 +252,8 @@ Function/WAVE SF_GetNamedOperations()
SF_OP_LOG10, SF_OP_APFREQUENCY, SF_OP_CURSORS, SF_OP_SELECTSWEEPS, SF_OP_AREA, SF_OP_SETSCALE, SF_OP_BUTTERWORTH, \
SF_OP_SELECTCHANNELS, SF_OP_DATA, SF_OP_LABNOTEBOOK, SF_OP_WAVE, SF_OP_FINDLEVEL, SF_OP_EPOCHS, SF_OP_TP, \
SF_OP_STORE, SF_OP_SELECT, SF_OP_POWERSPECTRUM, SF_OP_TPSS, SF_OP_TPBASE, SF_OP_TPINST, SF_OP_TPFIT, \
SF_OP_PSX, SF_OP_PSX_KERNEL, SF_OP_PSX_STATS, SF_OP_PSX_RISETIME, SF_OP_PSX_PREP, SF_OP_PSX_DECONV_FILTER, \
SF_OP_PSX, SF_OP_PSX_KERNEL, SF_OP_PSX_STATS, SF_OP_PSX_RISETIME, SF_OP_PSX_PREP, SF_OP_PSX_DECONV_BP_FILTER, \
SF_OP_PSX_SWEEP_BP_FILTER, \
SF_OP_MERGE, SF_OP_FIT, SF_OP_FITLINE, SF_OP_DATASET, SF_OP_SELECTVIS, SF_OP_SELECTCM, SF_OP_SELECTSTIMSET, \
SF_OP_SELECTIVSCCSWEEPQC, SF_OP_SELECTIVSCCSETQC, SF_OP_SELECTRANGE, SF_OP_SELECTEXP, SF_OP_SELECTDEV, \
SF_OP_SELECTEXPANDSCI, SF_OP_SELECTEXPANDRAC, SF_OP_SELECTSETCYCLECOUNT, SF_OP_SELECTSETSWEEPCOUNT, \
Expand Down Expand Up @@ -1164,8 +1165,11 @@ static Function/WAVE SF_FormulaExecutor(string graph, variable jsonID, [string j
case SF_OP_PSX_PREP:
WAVE out = PSX_OperationPrep(jsonId, jsonPath, graph)
break
case SF_OP_PSX_DECONV_FILTER:
WAVE out = PSX_OperationDeconvFilter(jsonId, jsonPath, graph)
case SF_OP_PSX_DECONV_BP_FILTER:
WAVE out = PSX_OperationDeconvBPFilter(jsonId, jsonPath, graph)
break
case SF_OP_PSX_SWEEP_BP_FILTER:
WAVE out = PSX_OperationSweepBPFilter(jsonId, jsonPath, graph)
break
case SF_OP_MERGE:
WAVE out = SF_OperationMerge(jsonId, jsonPath, graph)
Expand Down Expand Up @@ -1266,16 +1270,9 @@ static Function [WAVE/WAVE formulaResults, STRUCT SF_PlotMetaData plotMetaData]
if(WaveExists(wvXRef))
if(numResultsX == 1)
WAVE/Z wvXdata = wvXRef[0]
if(WaveExists(wvXdata) && DimSize(wvXdata, ROWS) == numResultsY && numpnts(wvYdata) == 1)
if(IsTextWave(wvXdata))
WAVE/T wT = wvXdata
Make/FREE/T wvXnewDataT = {wT[i]}
formulaResults[i][%FORMULAX] = wvXnewDataT
else
WAVE wv = wvXdata
Make/FREE/D wvXnewDataD = {wv[i]}
formulaResults[i][%FORMULAX] = wvXnewDataD
endif
if(WaveExists(wvXdata) && DimSize(wvXdata, ROWS) == numResultsY && numpnts(wvYdata) == 1 && numpnts(wvXdata) != 1)
Duplicate/FREE/T/RMD=[i] wvXdata, wvXnewData
formulaResults[i][%FORMULAX] = wvXnewData
else
formulaResults[i][%FORMULAX] = wvXRef[0]
endif
Expand All @@ -1302,7 +1299,7 @@ static Function [WAVE/WAVE formulaResults, STRUCT SF_PlotMetaData plotMetaData]

dataUnits = ""
if(!IsNull(dataUnitCheck))
dataUnits = SelectString(addDataUnitsInAnnotation && !IsEmpty(dataUnitCheck), "", "(" + dataUnitCheck + ")")
dataUnits = SelectString(addDataUnitsInAnnotation && !IsEmpty(dataUnitCheck), "", SF_FormatUnit(dataUnitCheck))
endif

plotMetaData.dataType = JWN_GetStringFromWaveNote(wvYRef, SF_META_DATATYPE)
Expand All @@ -1314,6 +1311,11 @@ static Function [WAVE/WAVE formulaResults, STRUCT SF_PlotMetaData plotMetaData]
return [formulaResults, plotMetaData]
End

static Function/S SF_FormatUnit(string unit)

return "(" + unit + ")"
End

static Function/S SF_GetAnnotationPrefix(string dataType)

strswitch(dataType)
Expand Down Expand Up @@ -1744,48 +1746,59 @@ static Function SF_CommonWindowSetup(string win, string graph)
DoWindow/T $win, newTitle
End

static Function/WAVE SF_GatherYUnits(WAVE/WAVE formulaResults, string explicitLbl, WAVE/Z/T yUnits)
static Function SF_GatherAxisLabels(WAVE/WAVE formulaResults, string explicitLbl, string formulaLabel, WAVE/T axisLabels)

variable i, size, numData
string unit

if(!WaveExists(yUnits))
Make/FREE/T/N=0 yUnits
endif

size = DimSize(yUnits, ROWS)
size = DimSize(axisLabels, ROWS)
if(!isEmpty(explicitLbl))
Redimension/N=(size + 1) yUnits
yUnits[size] = explicitLbl
return yUnits
Redimension/N=(size + 1) axisLabels
axisLabels[size] = explicitLbl
return NaN
endif

numData = DimSize(formulaResults, ROWS)
Redimension/N=(size + numData) yUnits
Redimension/N=(size + numData) axisLabels

for(i = 0; i < numData; i += 1)
WAVE/Z wvResultY = formulaResults[i][%FORMULAY]
if(!WaveExists(wvResultY))
continue
endif
yUnits[size] = WaveUnits(wvResultY, COLS)
size += 1

strswitch(formulaLabel)
case "FORMULAY":
unit = WaveUnits(wvResultY, COLS)
break
case "FORMULAX":
WAVE/Z wvResultX = formulaResults[i][%FORMULAX]
if(WaveExists(wvResultX))
unit = WaveUnits(wvResultX, ROWS)
else
unit = WaveUnits(wvResultY, ROWS)
endif
break
default:
ASSERT(0, "Unsupported formulaLabel: " + formulaLabel)
break
endswitch

// fallback to the unit if present
if(!IsEmpty(unit))
axisLabels[size] = SF_FormatUnit(unit)
size += 1
endif
endfor
Redimension/N=(size) yUnits

return yUnits
Redimension/N=(size) axisLabels
End

static Function/S SF_CombineYUnits(WAVE/T units)

string separator = " / "
string result = ""
static Function/S SF_CombineAxisLabels(WAVE/T axisLabels)

WAVE/T unique = GetUniqueEntries(units, dontDuplicate = 1)
for(unit : unique)
result += unit + separator
endfor
WAVE/T unique = GetUniqueEntries(axisLabels, dontDuplicate = 1)

return RemoveEndingRegExp(result, separator)
return TextWaveToList(unique, " / ", trailSep = 0)
End

static Function SF_CheckNumTraces(string graph, variable numTraces)
Expand Down Expand Up @@ -1869,7 +1882,7 @@ static Function SF_FormulaPlotter(string graph, string formula, [variable dmMode
variable winDisplayMode, showLegend, tagCounter, overrideMarker
variable xMxN, yMxN, xPoints, yPoints, keepUserSelection, numAnnotations, formulasAreDifferent, postPlotPSX
variable formulaCounter, gdIndex, markerCode, lineCode, lineStyle, traceToFront, isCategoryAxis
string win, wList, winNameTemplate, exWList, wName, annotation, yAxisLabel, wvName, info, xAxis
string win, wList, winNameTemplate, exWList, wName, annotation, xAxisLabel, yAxisLabel, wvName, info, xAxis
string formulasRemain, yAndXFormula, xFormula, yFormula, tagText, name, winHook
STRUCT SF_PlotMetaData plotMetaData
STRUCT RGBColor color
Expand Down Expand Up @@ -1897,8 +1910,9 @@ static Function SF_FormulaPlotter(string graph, string formula, [variable dmMode
postPlotPSX = 0
showLegend = 1
formulaCounter = 0
WAVE/Z wvX = $""
WAVE/Z/T yUnits = $""
WAVE/Z wvX = $""

Make/FREE/T/N=0 xAxisLabels, yAxisLabels

formulasRemain = graphCode[j]

Expand Down Expand Up @@ -1930,8 +1944,8 @@ static Function SF_FormulaPlotter(string graph, string formula, [variable dmMode
Abort
endtry

WAVE/T yUnitsResult = SF_GatherYUnits(formulaResults, plotMetaData.yAxisLabel, yUnits)
WAVE/T yUnits = yUnitsResult
SF_GatherAxisLabels(formulaResults, plotMetaData.xAxisLabel, "FORMULAX", xAxisLabels)
SF_GatherAxisLabels(formulaResults, plotMetaData.yAxisLabel, "FORMULAY", yAxisLabels)

if(!cmpstr(plotMetaData.dataType, SF_DATATYPE_PSX))
PSX_Plot(win, graph, formulaResults, plotMetaData)
Expand Down Expand Up @@ -2122,8 +2136,6 @@ static Function SF_FormulaPlotter(string graph, string formula, [variable dmMode
formulaCounter += 1
while(1)

yAxisLabel = SF_CombineYUnits(yUnits)

if(showLegend)
customLegend = JWN_GetStringFromWaveNote(formulaResults, SF_META_CUSTOM_LEGEND)

Expand Down Expand Up @@ -2263,15 +2275,19 @@ static Function SF_FormulaPlotter(string graph, string formula, [variable dmMode
endfor
endfor

if(!IsEmpty(plotMetaData.xAxisLabel) && traceCnt > 0)
Label/W=$win bottom, plotMetaData.xAxisLabel
ModifyGraph/W=$win tickUnit(bottom)=1
endif
if(!IsEmpty(yAxisLabel) && traceCnt > 0)
Label/W=$win left, yAxisLabel
ModifyGraph/W=$win tickUnit(left)=1
endif
if(traceCnt > 0)
xAxisLabel = SF_CombineAxisLabels(xAxisLabels)
if(!IsEmpty(xAxisLabel))
Label/W=$win bottom, xAxisLabel
ModifyGraph/W=$win tickUnit(bottom)=1
endif

yAxisLabel = SF_CombineAxisLabels(yAxisLabels)
if(!IsEmpty(yAxisLabel))
Label/W=$win left, yAxisLabel
ModifyGraph/W=$win tickUnit(left)=1
endif

ModifyGraph/W=$win zapTZ(bottom)=1
endif

Expand Down Expand Up @@ -2899,16 +2915,18 @@ End
static Function SF_CheckInputCode(string code, string graph)

variable i, numGraphs, jsonIDy, jsonIDx, subFormulaCnt
string jsonPath, xFormula, yFormula, formulasRemain, subPath, yAndXFormula
string jsonPath, xFormula, yFormula, formulasRemain, subPath, yAndXFormula, codeWithoutVariables, preProcCode

NVAR jsonID = $GetSweepFormulaJSONid(SF_GetBrowserDF(graph))
JSON_Release(jsonID, ignoreErr = 1)
jsonID = JSON_New()
JSON_AddObjects(jsonID, "")

code = SF_CheckVariableAssignments(code, jsonID)
preProcCode = SF_PreprocessInput(code)

codeWithoutVariables = SF_CheckVariableAssignments(preProcCode, jsonID)

WAVE/T graphCode = SF_SplitCodeToGraphs(SF_PreprocessInput(code))
WAVE/T graphCode = SF_SplitCodeToGraphs(codeWithoutVariables)

numGraphs = DimSize(graphCode, ROWS)
for(i = 0; i < numGraphs; i += 1)
Expand Down
1 change: 1 addition & 0 deletions Packages/MIES/MIES_SweepFormula_Helpers.ipf
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ Function SFH_GetArgumentAsNumeric(variable jsonId, string jsonPath, string graph
endif

if(ParamIsDefault(defValue))
ASSERT(ParamIsDefault(checkDefault), "Without defValue passing checkDefault does not make sense")
checkExist = 1
else
checkExist = 0
Expand Down
Loading
Loading