From 73e061ae58c74b49bb46f4c4c2e1be3fb1c59acf Mon Sep 17 00:00:00 2001 From: Michael Huth Date: Thu, 15 Jun 2023 16:34:01 +0200 Subject: [PATCH 1/8] EP: EP_CollectEpochInfo remove headstage variable as it was unused --- Packages/MIES/MIES_Epochs.ipf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Packages/MIES/MIES_Epochs.ipf b/Packages/MIES/MIES_Epochs.ipf index 31d8b9fc99..68c91a6534 100644 --- a/Packages/MIES/MIES_Epochs.ipf +++ b/Packages/MIES/MIES_Epochs.ipf @@ -61,7 +61,8 @@ End /// @param device device /// @param s struct holding all input Function EP_CollectEpochInfo(string device, STRUCT DataConfigurationResult &s) - variable i, channel, headstage, singleSetLength, epochOffset, epochBegin, epochEnd + + variable i, channel, singleSetLength, epochOffset, epochBegin, epochEnd variable stimsetCol, startOffset, stopCollectionPoint string tags @@ -80,7 +81,6 @@ Function EP_CollectEpochInfo(string device, STRUCT DataConfigurationResult &s) endif channel = s.DACList[i] - headstage = s.headstageDAC[i] startOffset = s.insertStart[i] singleSetLength = s.setLength[i] WAVE singleStimSet = s.stimSet[i] From 590ac538a35cc82ada86d1de06e46c9aea2cbfc7 Mon Sep 17 00:00:00 2001 From: Michael Huth Date: Thu, 15 Jun 2023 16:45:30 +0200 Subject: [PATCH 2/8] Introduce DB_AXIS_PART_EPOCHS constant for epoch axis prefix in DB graph - replaced all occurences --- Packages/MIES/MIES_BrowserSettingsPanel.ipf | 4 ++-- Packages/MIES/MIES_Constants.ipf | 6 ++++++ Packages/MIES/MIES_MiesUtilities.ipf | 10 +++++----- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/Packages/MIES/MIES_BrowserSettingsPanel.ipf b/Packages/MIES/MIES_BrowserSettingsPanel.ipf index e250f3d39c..f4e2485132 100644 --- a/Packages/MIES/MIES_BrowserSettingsPanel.ipf +++ b/Packages/MIES/MIES_BrowserSettingsPanel.ipf @@ -1633,8 +1633,8 @@ Function BSP_AddTracesForEpochs(string win) // use our own y axis // need to replace for both AD and DA cases - yaxis = ReplaceString("_DA", yaxis, "_EP_DA") - yaxis = ReplaceString("_AD", yaxis, "_EP_DA") + yaxis = ReplaceString("_DA", yaxis, DB_AXIS_PART_EPOCHS + "_DA") + yaxis = ReplaceString("_AD", yaxis, DB_AXIS_PART_EPOCHS + "_DA") headstage = str2num(traceInfos[j][%headstage]) sweepNumber = str2num(traceInfos[j][%sweepNumber]) diff --git a/Packages/MIES/MIES_Constants.ipf b/Packages/MIES/MIES_Constants.ipf index 03350d69ff..0b4c5c0862 100644 --- a/Packages/MIES/MIES_Constants.ipf +++ b/Packages/MIES/MIES_Constants.ipf @@ -2094,3 +2094,9 @@ Constant SATURDAY = 7 /// @} Constant SECONDS_PER_DAY = 86400 + +/// @name DataBrowser visualisation constants +/// @anchor DataBrowserVisualizationConstants +/// @{ +Strconstant DB_AXIS_PART_EPOCHS = "_EP" +/// @} diff --git a/Packages/MIES/MIES_MiesUtilities.ipf b/Packages/MIES/MIES_MiesUtilities.ipf index 0f57490359..3afe520539 100644 --- a/Packages/MIES/MIES_MiesUtilities.ipf +++ b/Packages/MIES/MIES_MiesUtilities.ipf @@ -2320,11 +2320,11 @@ Function LayoutGraph(string win, STRUCT TiledGraphSettings &tgs) // up to three blocks // (? Date: Thu, 15 Jun 2023 17:14:46 +0200 Subject: [PATCH 3/8] BSP: In BSP_AddTracesForEpochs use EP_FetchEpochs Preparation for unassoc DA channel support: previously GetLastSetting was called that supports only associated channels, now EP_FetchEpochs is called that relies only on the DA channel. If the displayed channel is an AD channel the DA channel is determined through the headstage relation. --- Packages/MIES/MIES_BrowserSettingsPanel.ipf | 34 ++++++++++++--------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/Packages/MIES/MIES_BrowserSettingsPanel.ipf b/Packages/MIES/MIES_BrowserSettingsPanel.ipf index f4e2485132..a95e12b690 100644 --- a/Packages/MIES/MIES_BrowserSettingsPanel.ipf +++ b/Packages/MIES/MIES_BrowserSettingsPanel.ipf @@ -1598,7 +1598,7 @@ End Function BSP_AddTracesForEpochs(string win) variable i, j, k, numEntries, start_x, start_y, end_x, end_y, yOffset - variable headstage, yLevelOffset, level, idx, numTraces, numEpochs + variable headstage, channelType, channelNumber, channelNumberDA, yLevelOffset, level, idx, numTraces, numEpochs variable sweepNumber, traceIndex STRUCT RGBColor c string xaxis, yaxis, axes, axis, levels_x_name, levels_y_name, name, epochInfoStr @@ -1638,29 +1638,33 @@ Function BSP_AddTracesForEpochs(string win) headstage = str2num(traceInfos[j][%headstage]) sweepNumber = str2num(traceInfos[j][%sweepNumber]) + channelType = WhichListItem(traceInfos[j][%channelType], XOP_CHANNEL_NAMES) + channelNumber = str2num(traceInfos[j][%channelNumber]) + + switch(channelType) + case XOP_CHANNEL_TYPE_ADC: + channelNumberDA = SFH_GetDAChannel(win, sweepNumber, channelType, channelNumber) + break + case XOP_CHANNEL_TYPE_DAC: + channelNumberDA = channelNumber + break + default: + ASSERT(0, "Unsupported channelType") + endswitch WAVE/Z/T textualValues = BSP_GetLogbookWave(win, LBT_LABNOTEBOOK, LBN_TEXTUAL_VALUES, sweepNumber = sweepNumber) ASSERT(WaveExists(textualValues), "Textual LabNotebook not found.") - + WAVE/Z/T numericalValues = BSP_GetLogbookWave(win, LBT_LABNOTEBOOK, LBN_NUMERICAL_VALUES, sweepNumber = sweepNumber) + ASSERT(WaveExists(numericalValues), "Numerical LabNotebook not found.") // present since a2172f03 (Added generations of epoch information wave, 2019-05-22) - WAVE/T/Z epochLBEntries = GetLastSetting(textualValues, sweepNumber, EPOCHS_ENTRY_KEY, DATA_ACQUISITION_MODE) - - if(!WaveExists(epochLBEntries)) + WAVE/T/Z epochsFromLBN = EP_FetchEpochs(numericalValues, textualValues, sweepNumber, channelNumberDA, XOP_CHANNEL_TYPE_DAC) + if(!WaveExists(epochsFromLBN)) continue endif - epochInfoStr = epochLBEntries[headstage] - - if(IsEmpty(epochInfoStr)) - continue - endif - - WAVE/T epochs = EP_EpochStrToWave(epochInfoStr) - SetEpochsDimensionLabels(epochs) - sprintf name, "epochs_sweep%d_HS%d", sweepNumber, headstage - Duplicate/O/T epochs, dfr:$name/Wave=epochs + Duplicate/O/T epochsFromLBN, dfr:$name/Wave=epochs yLevelOffset = 10 yOffset = - yLevelOffset From 0566add008cc7d1609b2512a45da660b779b8cdb Mon Sep 17 00:00:00 2001 From: Michael Huth Date: Thu, 15 Jun 2023 17:14:10 +0200 Subject: [PATCH 4/8] BSP: BSP_AddTracesForEpochs add support for unassoc DA channel epochs - get also unassoc DA channels from traceInfos - use more generic string for unique name of displayed epoch waves - also consider unassic DA channel traces in LayoutGraph --- Packages/MIES/MIES_BrowserSettingsPanel.ipf | 40 +++++++++++++-------- Packages/MIES/MIES_MiesUtilities.ipf | 16 +++++---- 2 files changed, 35 insertions(+), 21 deletions(-) diff --git a/Packages/MIES/MIES_BrowserSettingsPanel.ipf b/Packages/MIES/MIES_BrowserSettingsPanel.ipf index a95e12b690..9771f48b8f 100644 --- a/Packages/MIES/MIES_BrowserSettingsPanel.ipf +++ b/Packages/MIES/MIES_BrowserSettingsPanel.ipf @@ -1601,7 +1601,7 @@ Function BSP_AddTracesForEpochs(string win) variable headstage, channelType, channelNumber, channelNumberDA, yLevelOffset, level, idx, numTraces, numEpochs variable sweepNumber, traceIndex STRUCT RGBColor c - string xaxis, yaxis, axes, axis, levels_x_name, levels_y_name, name, epochInfoStr + string xaxis, yaxis, axes, axis, levels_x_name, levels_y_name, name, epochInfoStr, idPart string level_0_trace, level_1_trace, level_2_trace, level_3_trace, level_4_trace if(!BSP_IsDataBrowser(win) && !BSP_IsSweepBrowser(win)) @@ -1613,15 +1613,24 @@ Function BSP_AddTracesForEpochs(string win) DFREF dfr = GetEpochsVisualizationFolder(BSP_GetFolder(win, MIES_BSP_PANEL_FOLDER)) BSP_RemoveTraces(win) - WAVE/T/Z traceInfos = GetTraceInfos(win, addFilterKeys = {"channelType", "AssociatedHeadstage"}, addFilterValues = {"AD", "1"}) + WAVE/T/Z traceInfosHS = GetTraceInfos(win, addFilterKeys = {"channelType", "AssociatedHeadstage"}, addFilterValues = {"AD", "1"}) - if(!WaveExists(traceInfos)) + if(!WaveExists(traceInfosHS)) // fallback to DA traces - WAVE/T/Z traceInfos = GetTraceInfos(win, addFilterKeys = {"channelType", "AssociatedHeadstage"}, addFilterValues = {"DA", "1"}) + WAVE/T/Z traceInfosHS = GetTraceInfos(win, addFilterKeys = {"channelType", "AssociatedHeadstage"}, addFilterValues = {"DA", "1"}) + endif - if(!WaveExists(traceInfos)) - return NaN - endif + WAVE/T/Z traceInfosUnassocDA = GetTraceInfos(win, addFilterKeys = {"channelType", "AssociatedHeadstage"}, addFilterValues = {"DA", "0"}) + + if(!WaveExists(traceInfosHS) && !WaveExists(traceInfosUnassocDA)) + return NaN + elseif(!WaveExists(traceInfosHS)) + WAVE/T traceInfos = traceInfosUnassocDA + elseif(!WaveExists(traceInfosUnassocDA)) + WAVE/T traceInfos = traceInfosHS + else + Concatenate/FREE/T/NP=(ROWS) {traceInfosUnassocDA}, traceInfosHS + WAVE/T traceInfos = traceInfosHS endif traceIndex = GetNextTraceIndex(win) @@ -1662,7 +1671,8 @@ Function BSP_AddTracesForEpochs(string win) continue endif - sprintf name, "epochs_sweep%d_HS%d", sweepNumber, headstage + sprintf idPart, "_sweep%d_chan%d_type%d_HS%d", sweepNumber, channelNumber, channelType, headstage + sprintf name, "epochs_%s", idPart Duplicate/O/T epochsFromLBN, dfr:$name/Wave=epochs @@ -1673,11 +1683,11 @@ Function BSP_AddTracesForEpochs(string win) Make/FREE/N=(5) currentLevel, indexInLevel - sprintf levels_x_name, "levels_x_sweep%d_HS%d", sweepNumber, headstage + sprintf levels_x_name, "levels_x_%s", idpart Make/O/N=(numEpochs * 3, 5, 2) dfr:$levels_x_name/WAVE=levels_x levels_x = NaN - sprintf levels_y_name, "levels_y_sweep%d_HS%d", sweepNumber, headstage + sprintf levels_y_name, "levels_y_%s", idPart Make/O/N=(numEpochs * 3, 5, 2) dfr:$levels_y_name/WAVE=levels_y levels_y = NaN SetStringInWaveNote(levels_y, "EpochInfo", GetWavesDataFolder(epochs, 2)) @@ -1709,11 +1719,11 @@ Function BSP_AddTracesForEpochs(string win) currentLevel[level] += 1 endfor - sprintf level_0_trace, "%s_level%d_x_sweep%d_HS%d", GetTraceNamePrefix(traceIndex++), 0, sweepNumber, headstage - sprintf level_1_trace, "%s_level%d_x_sweep%d_HS%d", GetTraceNamePrefix(traceIndex++), 1, sweepNumber, headstage - sprintf level_2_trace, "%s_level%d_x_sweep%d_HS%d", GetTraceNamePrefix(traceIndex++), 2, sweepNumber, headstage - sprintf level_3_trace, "%s_level%d_x_sweep%d_HS%d", GetTraceNamePrefix(traceIndex++), 3, sweepNumber, headstage - sprintf level_4_trace, "%s_level%d_x_sweep%d_HS%d", GetTraceNamePrefix(traceIndex++), 4, sweepNumber, headstage + sprintf level_0_trace, "%s_level%d_x_%s", GetTraceNamePrefix(traceIndex++), 0, idPart + sprintf level_1_trace, "%s_level%d_x_%s", GetTraceNamePrefix(traceIndex++), 1, idPart + sprintf level_2_trace, "%s_level%d_x_%s", GetTraceNamePrefix(traceIndex++), 2, idPart + sprintf level_3_trace, "%s_level%d_x_%s", GetTraceNamePrefix(traceIndex++), 3, idPart + sprintf level_4_trace, "%s_level%d_x_%s", GetTraceNamePrefix(traceIndex++), 4, idPart AppendToGraph/W=$win/L=$yAxis levels_y[][0]/TN=$level_0_trace vs levels_x[][0] TUD_SetUserDataFromWaves(win, level_0_trace, {"traceType", "occurence", "XAXIS", "YAXIS"}, {"EpochVis", "", "bottom", yaxis}) diff --git a/Packages/MIES/MIES_MiesUtilities.ipf b/Packages/MIES/MIES_MiesUtilities.ipf index 3afe520539..2407904214 100644 --- a/Packages/MIES/MIES_MiesUtilities.ipf +++ b/Packages/MIES/MIES_MiesUtilities.ipf @@ -2392,8 +2392,8 @@ Function LayoutGraph(string win, STRUCT TiledGraphSettings &tgs) WAVE/T/Z axes = GrepWave(allVerticalAxes, regex) numBlocksDA = WaveExists(axes) ? DimSize(axes, ROWS) : 0 - // epoch info for associated DA channels - sprintf regex, ".*col0%s_DA_(?:[[:digit:]]{1,2})_HS_(?:[[:digit:]]{1,2})$", DB_AXIS_PART_EPOCHS + // epoch info slots for associated and unassociated DA channels + sprintf regex, ".*col0%s_DA_(?:[[:digit:]]{1,2})_HS_(?:([[:digit:]]{1,2}|NaN))$", DB_AXIS_PART_EPOCHS WAVE/T/Z axes = GrepWave(allVerticalAxes, regex) numBlocksEpoch = WaveExists(axes) ? DimSize(axes, ROWS) : 0 @@ -2462,10 +2462,17 @@ Function LayoutGraph(string win, STRUCT TiledGraphSettings &tgs) // unassoc DA for(i = 0; i < numBlocksUnassocDA; i += 1) - regex = ".*DA_" + num2str(unassocDA[i]) + "_HS_NaN" + sprintf regex, ".*(? Date: Thu, 15 Jun 2023 23:03:25 +0200 Subject: [PATCH 5/8] SF: Adapt SFH_GetSweepsForFormula DA channel resolve for epoch retrieval - SFH_GetSweepsForFormula tried to resolve the DA channel for epoch retrieval always through SFH_GetDAChannel. That function only supports associated channels and it i sonly senseful to call for AD channels or to verify a channelNumber for DA. -> It is now only called to resolve AD to DA channels. --- Packages/MIES/MIES_SweepFormula_Helpers.ipf | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/Packages/MIES/MIES_SweepFormula_Helpers.ipf b/Packages/MIES/MIES_SweepFormula_Helpers.ipf index 4a1cac9067..7a9b7248b8 100644 --- a/Packages/MIES/MIES_SweepFormula_Helpers.ipf +++ b/Packages/MIES/MIES_SweepFormula_Helpers.ipf @@ -456,7 +456,17 @@ Function/WAVE SFH_GetSweepsForFormula(string graph, WAVE range, WAVE/Z selectDat endif if(WaveExists(epochNames)) - DAChannel = SFH_GetDAChannel(graph, sweepNo, chanType, chanNr) + switch(chanType) + case XOP_CHANNEL_TYPE_ADC: + DAChannel = SFH_GetDAChannel(graph, sweepNo, chanType, chanNr) + SFH_ASSERT(!IsNaN(DAChannel), "No epochs for unassoc AD channel AD" + num2istr(chanNr)) + break + case XOP_CHANNEL_TYPE_DAC: + DAChannel = chanNr + break + default: + ASSERT(0, "Unsupported channelType") + endswitch WAVE/Z numericalValues = BSP_GetLogbookWave(graph, LBT_LABNOTEBOOK, LBN_NUMERICAL_VALUES, sweepNumber = sweepNo) WAVE/Z textualValues = BSP_GetLogbookWave(graph, LBT_LABNOTEBOOK, LBN_TEXTUAL_VALUES, sweepNumber = sweepNo) SFH_ASSERT(WaveExists(textualValues) && WaveExists(numericalValues), "LBN not found for sweep " + num2istr(sweepNo)) From 037975bb6b7b6d67d4a66b4cef7c5d27cec41f8e Mon Sep 17 00:00:00 2001 From: Michael Huth Date: Thu, 15 Jun 2023 23:39:05 +0200 Subject: [PATCH 6/8] Test: Add test for operation data/epochs for unassoc DA - checks if data and epochs operation retrievel data refered by epoch short names correctly from unassociated DA channels --- .../UTF_SweepFormulaHardware.ipf | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/Packages/tests/HardwareBasic/UTF_SweepFormulaHardware.ipf b/Packages/tests/HardwareBasic/UTF_SweepFormulaHardware.ipf index f1bb2310ab..ae46e8400c 100644 --- a/Packages/tests/HardwareBasic/UTF_SweepFormulaHardware.ipf +++ b/Packages/tests/HardwareBasic/UTF_SweepFormulaHardware.ipf @@ -770,3 +770,45 @@ static Function SF_InsertedTPVersusTP_REENTRY([str]) CHECK_EQUAL_WAVES(steadyStateInsertedHS1, steadyStateTPStorage_HS1, mode = WAVE_DATA, tol = 0.1) CHECK_EQUAL_WAVES(instInsertedHS1, instTPStorage_HS1, mode = WAVE_DATA, tol = 0.1) End + +// UTF_TD_GENERATOR DeviceNameGeneratorMD1 +static Function SF_UnassociatedDATTL_Epochs([str]) + string str + + STRUCT DAQSettings s + InitDAQSettingsFromString(s, "MD1_RA0_I0_L0_BKG1" + \ + "__HS0_DA0_AD0_CM:VC:_ST:StimulusSetA_DA_0:" + \ + "__HS1_DA1_AD1_CM:VC:_ST:StimulusSetC_DA_0:" + \ + "__HS2_DA2_AD2_CM:VC:_ST:StimulusSetA_DA_0:_ASO0" + \ + "__TTL1_ST:StimulusSetA_TTL_0:" + \ + "__TTL3_ST:StimulusSetB_TTL_0:" + \ + "__TTL5_ST:StimulusSetA_TTL_0:" + \ + "__TTL7_ST:StimulusSetB_TTL_0:") + + AcquireData_NG(s, str) +End + +static Function SF_UnassociatedDATTL_Epochs_REENTRY([string str]) + + string graph, formula, bsPanel + + graph = DB_OpenDataBrowser() + bsPanel = BSP_GetPanel(graph) + PGC_SetAndActivateControl(bsPanel, "check_BrowserSettings_DAC", val=1) + + formula = "data(\"E0_PT_*\",select(channels(DA2),sweeps()))" + WAVE/WAVE data = SF_ExecuteFormula(formula, graph, useVariables=0) + CHECK_WAVE(data, WAVE_WAVE) + CHECK_EQUAL_VAR(DimSize(data, ROWS), 29) + WAVE epochData = data[0] + CHECK_WAVE(epochData, NUMERIC_WAVE) + CHECK_GT_VAR(DimSize(epochData, ROWS), 1) + + formula = "epochs(\"E0_PT_*\",select(channels(DA2),sweeps()),name)" + WAVE/WAVE data = SF_ExecuteFormula(formula, graph, useVariables=0) + CHECK_WAVE(data, WAVE_WAVE) + CHECK_EQUAL_VAR(DimSize(data, ROWS), 29) + WAVE/T epochDataT = data[0] + CHECK_WAVE(epochDataT, TEXT_WAVE) + CHECK_EQUAL_STR(epochDataT[0], "E0_PT_P0_P") +End From c64c94e858b75b6e16ac00a088a2e466e17a17f4 Mon Sep 17 00:00:00 2001 From: Michael Huth Date: Mon, 12 Jun 2023 18:29:29 +0200 Subject: [PATCH 7/8] BSP: BSP_AddTracesForEpochs, put trace creation in a loop - shorter code --- Packages/MIES/MIES_BrowserSettingsPanel.ipf | 47 ++++++--------------- 1 file changed, 13 insertions(+), 34 deletions(-) diff --git a/Packages/MIES/MIES_BrowserSettingsPanel.ipf b/Packages/MIES/MIES_BrowserSettingsPanel.ipf index 9771f48b8f..100d0ec353 100644 --- a/Packages/MIES/MIES_BrowserSettingsPanel.ipf +++ b/Packages/MIES/MIES_BrowserSettingsPanel.ipf @@ -28,6 +28,8 @@ static StrConstant SWEEPCONTROL_CONTROLS_SWEEPBROWSER = "popup_SweepControl_Sele static StrConstant BSP_USER_DATA_SF_CONTENT_CRC = "SweepFormulaContentCRC" +static Constant BSP_EPOCH_LEVELS = 5 + /// @brief return the name of the external panel depending on main window name /// /// @param mainPanel mainWindow panel name @@ -1601,8 +1603,7 @@ Function BSP_AddTracesForEpochs(string win) variable headstage, channelType, channelNumber, channelNumberDA, yLevelOffset, level, idx, numTraces, numEpochs variable sweepNumber, traceIndex STRUCT RGBColor c - string xaxis, yaxis, axes, axis, levels_x_name, levels_y_name, name, epochInfoStr, idPart - string level_0_trace, level_1_trace, level_2_trace, level_3_trace, level_4_trace + string xaxis, yaxis, axes, axis, levels_x_name, levels_y_name, name, epochInfoStr, idPart, level_x_trace if(!BSP_IsDataBrowser(win) && !BSP_IsSweepBrowser(win)) printf "The current window is neither a databrowser nor a sweepbrowser windows.\r" @@ -1681,7 +1682,7 @@ Function BSP_AddTracesForEpochs(string win) numEpochs = DimSize(epochs, ROWS) - Make/FREE/N=(5) currentLevel, indexInLevel + Make/FREE/N=(BSP_EPOCH_LEVELS) currentLevel, indexInLevel sprintf levels_x_name, "levels_x_%s", idpart Make/O/N=(numEpochs * 3, 5, 2) dfr:$levels_x_name/WAVE=levels_x @@ -1719,37 +1720,15 @@ Function BSP_AddTracesForEpochs(string win) currentLevel[level] += 1 endfor - sprintf level_0_trace, "%s_level%d_x_%s", GetTraceNamePrefix(traceIndex++), 0, idPart - sprintf level_1_trace, "%s_level%d_x_%s", GetTraceNamePrefix(traceIndex++), 1, idPart - sprintf level_2_trace, "%s_level%d_x_%s", GetTraceNamePrefix(traceIndex++), 2, idPart - sprintf level_3_trace, "%s_level%d_x_%s", GetTraceNamePrefix(traceIndex++), 3, idPart - sprintf level_4_trace, "%s_level%d_x_%s", GetTraceNamePrefix(traceIndex++), 4, idPart - - AppendToGraph/W=$win/L=$yAxis levels_y[][0]/TN=$level_0_trace vs levels_x[][0] - TUD_SetUserDataFromWaves(win, level_0_trace, {"traceType", "occurence", "XAXIS", "YAXIS"}, {"EpochVis", "", "bottom", yaxis}) - - AppendToGraph/W=$win/L=$yAxis levels_y[][1]/TN=$level_1_trace vs levels_x[][1] - TUD_SetUserDataFromWaves(win, level_1_trace, {"traceType", "occurence", "XAXIS", "YAXIS"}, {"EpochVis", "", "bottom", yaxis}) - - AppendToGraph/W=$win/L=$yAxis levels_y[][2]/TN=$level_2_trace vs levels_x[][2] - TUD_SetUserDataFromWaves(win, level_2_trace, {"traceType", "occurence", "XAXIS", "YAXIS"}, {"EpochVis", "", "bottom", yaxis}) - - AppendToGraph/W=$win/L=$yAxis levels_y[][3]/TN=$level_3_trace vs levels_x[][3] - TUD_SetUserDataFromWaves(win, level_3_trace, {"traceType", "occurence", "XAXIS", "YAXIS"}, {"EpochVis", "", "bottom", yaxis}) - - AppendToGraph/W=$win/L=$yAxis levels_y[][4]/TN=$level_4_trace vs levels_x[][4] - TUD_SetUserDataFromWaves(win, level_4_trace, {"traceType", "occurence", "XAXIS", "YAXIS"}, {"EpochVis", "", "bottom", yaxis}) - - [c] = GetTraceColor(0) - ModifyGraph/W=$win marker($level_0_trace)=10, mode($level_0_trace)=4, rgb($level_0_trace)=(c.red, c.green, c.blue) - [c] = GetTraceColor(1) - ModifyGraph/W=$win marker($level_1_trace)=10, mode($level_1_trace)=4, rgb($level_1_trace)=(c.red, c.green, c.blue) - [c] = GetTraceColor(2) - ModifyGraph/W=$win marker($level_2_trace)=10, mode($level_2_trace)=4, rgb($level_2_trace)=(c.red, c.green, c.blue) - [c] = GetTraceColor(3) - ModifyGraph/W=$win marker($level_3_trace)=10, mode($level_3_trace)=4, rgb($level_3_trace)=(c.red, c.green, c.blue) - [c] = GetTraceColor(4) - ModifyGraph/W=$win marker($level_4_trace)=10, mode($level_4_trace)=4, rgb($level_4_trace)=(c.red, c.green, c.blue) + for(k = 0; k < BSP_EPOCH_LEVELS; k += 1) + sprintf level_x_trace, "%s_level%d_x_%s", GetTraceNamePrefix(traceIndex++), k, idPart + + AppendToGraph/W=$win/L=$yAxis levels_y[][k]/TN=$level_x_trace vs levels_x[][k] + TUD_SetUserDataFromWaves(win, level_x_trace, {"traceType", "occurence", "XAXIS", "YAXIS"}, {"EpochVis", "", "bottom", yaxis}) + + [c] = GetTraceColor(k) + ModifyGraph/W=$win marker($level_x_trace)=10, mode($level_x_trace)=4, rgb($level_x_trace)=(c.red, c.green, c.blue) + endfor SetWindow $win tooltipHook(hook) = BSP_EpochGraphToolTip From 55641383095c6eecb49a4c329765a46523d2002c Mon Sep 17 00:00:00 2001 From: Michael Huth Date: Mon, 12 Jun 2023 18:36:02 +0200 Subject: [PATCH 8/8] BSP: BSP_AddTracesForEpochs correct loop vars j, k -> i, j - according to coding conventions and nesting order --- Packages/MIES/MIES_BrowserSettingsPanel.ipf | 36 ++++++++++----------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/Packages/MIES/MIES_BrowserSettingsPanel.ipf b/Packages/MIES/MIES_BrowserSettingsPanel.ipf index 100d0ec353..6f9f357c45 100644 --- a/Packages/MIES/MIES_BrowserSettingsPanel.ipf +++ b/Packages/MIES/MIES_BrowserSettingsPanel.ipf @@ -1599,7 +1599,7 @@ End /// @brief Debug function to add traces with epoch information Function BSP_AddTracesForEpochs(string win) - variable i, j, k, numEntries, start_x, start_y, end_x, end_y, yOffset + variable i, j, numEntries, start_x, start_y, end_x, end_y, yOffset variable headstage, channelType, channelNumber, channelNumberDA, yLevelOffset, level, idx, numTraces, numEpochs variable sweepNumber, traceIndex STRUCT RGBColor c @@ -1637,19 +1637,19 @@ Function BSP_AddTracesForEpochs(string win) traceIndex = GetNextTraceIndex(win) numTraces = DimSize(traceInfos, ROWS) - for(j = 0; j < numTraces; j += 1) - yaxis = traceInfos[j][%YAXIS] - xaxis = traceInfos[j][%XAXIS] + for(i = 0; i < numTraces; i += 1) + yaxis = traceInfos[i][%YAXIS] + xaxis = traceInfos[i][%XAXIS] // use our own y axis // need to replace for both AD and DA cases yaxis = ReplaceString("_DA", yaxis, DB_AXIS_PART_EPOCHS + "_DA") yaxis = ReplaceString("_AD", yaxis, DB_AXIS_PART_EPOCHS + "_DA") - headstage = str2num(traceInfos[j][%headstage]) - sweepNumber = str2num(traceInfos[j][%sweepNumber]) - channelType = WhichListItem(traceInfos[j][%channelType], XOP_CHANNEL_NAMES) - channelNumber = str2num(traceInfos[j][%channelNumber]) + headstage = str2num(traceInfos[i][%headstage]) + sweepNumber = str2num(traceInfos[i][%sweepNumber]) + channelType = WhichListItem(traceInfos[i][%channelType], XOP_CHANNEL_NAMES) + channelNumber = str2num(traceInfos[i][%channelNumber]) switch(channelType) case XOP_CHANNEL_TYPE_ADC: @@ -1693,13 +1693,13 @@ Function BSP_AddTracesForEpochs(string win) levels_y = NaN SetStringInWaveNote(levels_y, "EpochInfo", GetWavesDataFolder(epochs, 2)) - for(k = 0; k < numEpochs; k += 1) + for(j = 0; j < numEpochs; j += 1) - start_x = str2num(epochs[k][0]) * ONE_TO_MILLI - end_x = str2num(epochs[k][1]) * ONE_TO_MILLI + start_x = str2num(epochs[j][0]) * ONE_TO_MILLI + end_x = str2num(epochs[j][1]) * ONE_TO_MILLI // handle EPOCH_USER_LEVEL being -1 - level = str2num(epochs[k][3]) + 1 + level = str2num(epochs[j][3]) + 1 start_y = yOffset - yLevelOffset * level - 0.1 * yLevelOffset * currentLevel[level] end_y = start_y @@ -1708,25 +1708,25 @@ Function BSP_AddTracesForEpochs(string win) levels_x[idx][level][0] = start_x levels_x[idx + 1][level][0] = end_x levels_x[idx + 2][level][0] = NaN - levels_x[idx, idx + 2][level][1] = k + levels_x[idx, idx + 2][level][1] = j levels_y[idx][level][0] = start_y levels_y[idx + 1][level][0] = end_y levels_y[idx + 2][level][0] = NaN - levels_y[idx, idx + 2][level][1] = k + levels_y[idx, idx + 2][level][1] = j indexInLevel[level] = idx + 3 currentLevel[level] += 1 endfor - for(k = 0; k < BSP_EPOCH_LEVELS; k += 1) - sprintf level_x_trace, "%s_level%d_x_%s", GetTraceNamePrefix(traceIndex++), k, idPart + for(j = 0; j < BSP_EPOCH_LEVELS; j += 1) + sprintf level_x_trace, "%s_level%d_x_%s", GetTraceNamePrefix(traceIndex++), j, idPart - AppendToGraph/W=$win/L=$yAxis levels_y[][k]/TN=$level_x_trace vs levels_x[][k] + AppendToGraph/W=$win/L=$yAxis levels_y[][j]/TN=$level_x_trace vs levels_x[][j] TUD_SetUserDataFromWaves(win, level_x_trace, {"traceType", "occurence", "XAXIS", "YAXIS"}, {"EpochVis", "", "bottom", yaxis}) - [c] = GetTraceColor(k) + [c] = GetTraceColor(j) ModifyGraph/W=$win marker($level_x_trace)=10, mode($level_x_trace)=4, rgb($level_x_trace)=(c.red, c.green, c.blue) endfor