Use JSON XOP for finding LNB key
Opened this issue · 0 comments
MichaelHuth commented
diff --git a/Packages/MIES/MIES_Constants.ipf b/Packages/MIES/MIES_Constants.ipf
index 84e9b698c..ba30be858 100644
--- a/Packages/MIES/MIES_Constants.ipf
+++ b/Packages/MIES/MIES_Constants.ipf
@@ -2313,3 +2313,5 @@ /// @anchor FFTWinFunctions
Constant SUTTER_MAX_MAX_TP_PULSES = 10000
Constant INVALID_SWEEP_NUMBER = -1
+
+StrConstant LNB_JSON_PREFIX = "/keyIndices"
diff --git a/Packages/MIES/MIES_ExperimentDocumentation.ipf b/Packages/MIES/MIES_ExperimentDocumentation.ipf
index 34d86af5e..1e555c5b0 100644
--- a/Packages/MIES/MIES_ExperimentDocumentation.ipf
+++ b/Packages/MIES/MIES_ExperimentDocumentation.ipf
@@ -493,6 +493,7 @@ static Function ED_WriteChangedValuesToNoteText(device, sweepNo)
static Function [WAVE colIndizes, variable rowIndex] ED_FindIndizesAndRedimension(WAVE/T incomingKey, WAVE incomingValues, WAVE/T key, WAVE values, variable logbookType)
variable numCols, numKeyRows, numKeyCols, i, j, numAdditions, idx
variable lastValidIncomingKeyRow, descIndex, isUserEntry, headstageCont, headstageContDesc, isUnAssoc
+ variable jsonId
string msg, searchStr
numKeyRows = DimSize(key, ROWS)
@@ -503,6 +504,7 @@ static Function [WAVE colIndizes, variable rowIndex] ED_FindIndizesAndRedimensio
WAVE/T/ZZ desc
+ jsonId = GetLNBJsonId(values)
numCols = DimSize(incomingKey, COLS)
for(i = 0; i < numCols; i += 1)
searchStr = incomingKey[0][i]
@@ -522,6 +524,7 @@ static Function [WAVE colIndizes, variable rowIndex] ED_FindIndizesAndRedimensio
key[0, lastValidIncomingKeyRow][idx] = incomingKey[p][i]
indizes[i] = idx
numAdditions += 1
+ JSON_AddVariable(jsonId, LNB_JSON_PREFIX + "/" + ReplaceString("/", searchStr, "_"), idx)
isUserEntry = (strsearch(searchStr, LABNOTEBOOK_USER_PREFIX, 0) == 0)
diff --git a/Packages/MIES/MIES_MiesUtilities.ipf b/Packages/MIES/MIES_MiesUtilities.ipf
index 5c8ffa249..451c99abb 100644
--- a/Packages/MIES/MIES_MiesUtilities.ipf
+++ b/Packages/MIES/MIES_MiesUtilities.ipf
@@ -47,6 +47,8 @@ /// @brief This file holds utility functions which need to know about MIES inter
static Constant ARCHIVE_SIZETHRESHOLD = 52428800
+static StrConstant LNB_JSONID_KEY = "jsonIdLNBKeys"
+
Menu "GraphMarquee"
"Horiz Expand (VisX)", /Q, HorizExpandWithVisX()
End
@@ -1042,6 +1044,29 @@ threadsafe static Function [WAVE/Z wv, variable index] GetLastSettingChannelInte
return [$"", NaN]
End
+threadsafe Function GetLNBJsonId(WAVE values)
+
+ variable jsonId = GetNumberFromWaveNote(values, LNB_JSONID_KEY)
+ if(IsFinite(jsonId) && JSON_Exists(jsonId, ""))
+ return jsonId
+ endif
+
+ jsonId = JSON_New()
+ SetNumberInWaveNote(values, LNB_JSONID_KEY, jsonId)
+
+ JSON_AddTreeObject(jsonId, LNB_JSON_PREFIX)
+ Make/FREE/N=(DimSize(values, COLS)) indexHelper
+ MultiThread indexHelper = JSON_AddVariable(jsonId, LNB_JSON_PREFIX + "/" + ReplaceString("/", GetDimLabel(values, COLS, p), "_"), p)
+
+ return jsonId
+End
+
+threadsafe Function GetLNBSettingsColumn(WAVE values, string key)
+
+ variable index = JSON_GetVariable(GetLNBJsonId(values), LNB_JSON_PREFIX + "/" + ReplaceString("/", key, "_"), ignoreErr = 1)
+ return IsNaN(index) ? -2 : index
+End
+
threadsafe Function GetLNBSettingsColumn(WAVE values, string key)
string cacheKey, sortedkeyWaveName
then replace in GetLastSetting the line with
settingCol = FindDimLabel(values, COLS, setting)
with a call to GetLNBSettingsColumn
requires a thread aware JSON XOP