From 8388477b44d5f2c798606673118c0e8aa66c6f17 Mon Sep 17 00:00:00 2001 From: Michael Huth Date: Tue, 12 Mar 2024 13:20:00 +0100 Subject: [PATCH 1/2] AB: fix AB_LoadStimsetFromFile was not updating the stimset list After loading stimsets the AB did not properly update the list of stimsets if the WB was already open. This was added now. most lilely since introduction of loading stimsets in ceab4d6 --- Packages/MIES/MIES_AnalysisBrowser.ipf | 2 ++ .../tests/Basic/UTF_AnalysisBrowserTest.ipf | 14 ++++++++++ Packages/tests/UTF_HelperFunctions.ipf | 27 +++++++++++++------ 3 files changed, 35 insertions(+), 8 deletions(-) diff --git a/Packages/MIES/MIES_AnalysisBrowser.ipf b/Packages/MIES/MIES_AnalysisBrowser.ipf index 11f50a1ae2..9a54001692 100644 --- a/Packages/MIES/MIES_AnalysisBrowser.ipf +++ b/Packages/MIES/MIES_AnalysisBrowser.ipf @@ -1883,6 +1883,8 @@ static Function AB_LoadStimsetFromFile(discLocation, dataFolder, fileType, devic sprintf msg, "Loaded stimsets %s of device %s and %s\r", stimsets, device, discLocation DEBUGPRINT(msg) + WB_UpdateChangedStimsets() + return 0 End diff --git a/Packages/tests/Basic/UTF_AnalysisBrowserTest.ipf b/Packages/tests/Basic/UTF_AnalysisBrowserTest.ipf index 406fecf52d..c6233fe331 100644 --- a/Packages/tests/Basic/UTF_AnalysisBrowserTest.ipf +++ b/Packages/tests/Basic/UTF_AnalysisBrowserTest.ipf @@ -10,6 +10,7 @@ static StrConstant PXP_FILENAME = "input:AB_LoadSweepsFromIgorData.pxp" static StrConstant PXP2_FILENAME = "input:AB_SweepsFromMultipleDevices.pxp" static StrConstant NWB1_FILENAME = "input:AB_SweepsFromMultipleDevices-compressed-V1.nwb" static StrConstant NWB2_FILENAME = "input:AB_SweepsFromMultipleDevices-compressed-V2.nwb" +static StrConstant NWB3_FILENAME = ":_2017_09_01_192934-compressed.nwb" static Function LoadSweepsFromIgor() @@ -138,3 +139,16 @@ static Function TestABLoadWave() CHECK_WAVE(wv, NUMERIC_WAVE) End + +static Function LoadStimsetsFromNWB() + + string abWin, sweepBrowsers + + WBP_CreateWaveBuilderPanel() + [abWin, sweepBrowsers] = OpenAnalysisBrowser({NWB3_FILENAME}, loadStimsets = 1) + WAVE/T epochCombineList = GetWBEpochCombineList(CHANNEL_TYPE_DAC) + CHECK_WAVE(epochCombineList, TEXT_WAVE) + CHECK_GT_VAR(DimSize(epochCombineList, ROWS), 0) + + KillWindow $abWin +End diff --git a/Packages/tests/UTF_HelperFunctions.ipf b/Packages/tests/UTF_HelperFunctions.ipf index 0da1e50279..9f1f8251b5 100644 --- a/Packages/tests/UTF_HelperFunctions.ipf +++ b/Packages/tests/UTF_HelperFunctions.ipf @@ -965,7 +965,7 @@ Function/S LoadSweeps(string winAB) End /// @brief Open the given files, located relative to the symbolic path `home`, into an analysis browser -Function [string abWin, string sweepBrowsers] OpenAnalysisBrowser(WAVE/T files, [variable loadSweeps]) +Function [string abWin, string sweepBrowsers] OpenAnalysisBrowser(WAVE/T files, [variable loadSweeps, variable loadStimsets]) variable idx string filePath, fullFilePath @@ -975,6 +975,7 @@ Function [string abWin, string sweepBrowsers] OpenAnalysisBrowser(WAVE/T files, else loadSweeps = !!loadSweeps endif + loadStimsets = ParamIsDefault(loadStimsets) ? 0 : !!loadStimsets PathInfo home REQUIRE_EQUAL_VAR(V_flag, 1) @@ -992,10 +993,11 @@ Function [string abWin, string sweepBrowsers] OpenAnalysisBrowser(WAVE/T files, PGC_SetAndActivateControl(abWin, "button_AB_refresh") - if(!loadSweeps) + if(!loadSweeps && !loadStimsets) return [abWin, ""] endif + sweepBrowsers = "" WAVE/T expBrowserList = GetExperimentBrowserGUIList() WAVE expBrowserSel = GetExperimentBrowserGUISel() @@ -1003,13 +1005,22 @@ Function [string abWin, string sweepBrowsers] OpenAnalysisBrowser(WAVE/T files, INFO("Trying to load files @%s", s = files) CHECK_WAVE(indizes, NUMERIC_WAVE) - for(idx : indizes) - expBrowserSel[idx][0][0] = LISTBOX_TREEVIEW | LISTBOX_SELECTED - PGC_SetAndActivateControl(abWin, "button_load_sweeps") - endfor + if(loadSweeps) + for(idx : indizes) + expBrowserSel[idx][0][0] = LISTBOX_TREEVIEW | LISTBOX_SELECTED + PGC_SetAndActivateControl(abWin, "button_load_sweeps") + endfor + + sweepBrowsers = WinList("*", ";", "WIN:" + num2istr(WINTYPE_GRAPH)) + CHECK_PROPER_STR(sweepBrowsers) + endif - sweepBrowsers = WinList("*", ";", "WIN:" + num2istr(WINTYPE_GRAPH)) - CHECK_PROPER_STR(sweepBrowsers) + if(loadStimsets) + for(idx : indizes) + expBrowserSel[idx][0][0] = LISTBOX_TREEVIEW | LISTBOX_SELECTED + PGC_SetAndActivateControl(abWin, "button_load_stimsets") + endfor + endif return [abWin, sweepBrowsers] End From f926fef75d07718a35bbb40694a7ed9aeb94b4c4 Mon Sep 17 00:00:00 2001 From: Michael Huth Date: Tue, 12 Mar 2024 13:23:31 +0100 Subject: [PATCH 2/2] WB: fix recursive resolving dependet stimsets (e.g. formulas) the algorithm in WB_StimsetChildren referenced the wrong column of the WPT wave. Fix: use the right stimset epoch type column (EPOCH_TYPE_COMBINE). since introduction of dependent stimsets (EPOCH_TYPE_COMBINE) --- Packages/MIES/MIES_WaveBuilder.ipf | 2 +- .../tests/Basic/UTF_AnalysisBrowserTest.ipf | 12 ++++++++++++ .../Basic/input/SourceOfDependentStimset.pxp | Bin 0 -> 54940 bytes 3 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 Packages/tests/Basic/input/SourceOfDependentStimset.pxp diff --git a/Packages/MIES/MIES_WaveBuilder.ipf b/Packages/MIES/MIES_WaveBuilder.ipf index fb9f88ca80..21f1e5de04 100644 --- a/Packages/MIES/MIES_WaveBuilder.ipf +++ b/Packages/MIES/MIES_WaveBuilder.ipf @@ -2313,7 +2313,7 @@ static Function/S WB_StimsetChildren([stimset]) // search for stimsets in all formula-epochs by a regex pattern for(i = 0; i < numEpochs; i += 1) if(SegWvType[i] == 8) - formula = WPT[6][i][EPOCH_TYPE_CUSTOM] + formula = WPT[6][i][EPOCH_TYPE_COMBINE] numStimsets = CountSubstrings(formula, "?") for(j = 0; j < numStimsets; j += 1) WAVE/T/Z wv = SearchStringBase(formula, "(.*)\\b(\\w+)\\b\\?(.*)") diff --git a/Packages/tests/Basic/UTF_AnalysisBrowserTest.ipf b/Packages/tests/Basic/UTF_AnalysisBrowserTest.ipf index c6233fe331..2b2474976e 100644 --- a/Packages/tests/Basic/UTF_AnalysisBrowserTest.ipf +++ b/Packages/tests/Basic/UTF_AnalysisBrowserTest.ipf @@ -8,6 +8,7 @@ static StrConstant PXP_FILENAME = "input:AB_LoadSweepsFromIgorData.pxp" static StrConstant PXP2_FILENAME = "input:AB_SweepsFromMultipleDevices.pxp" +static StrConstant PXP3_FILENAME = "input:SourceOfDependentStimset.pxp" static StrConstant NWB1_FILENAME = "input:AB_SweepsFromMultipleDevices-compressed-V1.nwb" static StrConstant NWB2_FILENAME = "input:AB_SweepsFromMultipleDevices-compressed-V2.nwb" static StrConstant NWB3_FILENAME = ":_2017_09_01_192934-compressed.nwb" @@ -152,3 +153,14 @@ static Function LoadStimsetsFromNWB() KillWindow $abWin End + +static Function LoadDependentStimsetsFromPXP() + + string abWin, sweepBrowsers, formulaSet + + [abWin, sweepBrowsers] = OpenAnalysisBrowser({PXP3_FILENAME}, loadStimsets = 1) + formulaSet = MIES_WB#WB_StimsetChildren(stimset="baseset_DA_0") + CHECK_EQUAL_STR(formulaSet, "formula_da_0;") + + KillWindow $abWin +End diff --git a/Packages/tests/Basic/input/SourceOfDependentStimset.pxp b/Packages/tests/Basic/input/SourceOfDependentStimset.pxp new file mode 100644 index 0000000000000000000000000000000000000000..171539554452e010262017f278b7da49830e11e8 GIT binary patch literal 54940 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 nh}vwIMh@v+b{d3_+Sv1()>W?)-!jBc4c