diff --git a/Packages/MIES/MIES_AnalysisBrowser.ipf b/Packages/MIES/MIES_AnalysisBrowser.ipf index ae213921c0..82f65c829b 100644 --- a/Packages/MIES/MIES_AnalysisBrowser.ipf +++ b/Packages/MIES/MIES_AnalysisBrowser.ipf @@ -2352,6 +2352,7 @@ Function AB_ButtonProc_LoadSweeps(ba) : ButtonControl oneValidSweep = AB_LoadFromFile(AB_LOAD_SWEEP, sweepBrowserDFR = dfr) SVAR/SDFR=dfr graph if(oneValidSweep) + AD_Update(graph) panel = BSP_GetSweepControlsPanel(graph) PGC_SetAndActivateControl(panel, "button_SweepControl_PrevSweep") else diff --git a/Packages/MIES/MIES_AnalysisBrowser_SweepBrowser.ipf b/Packages/MIES/MIES_AnalysisBrowser_SweepBrowser.ipf index bd27d41e9a..073a4f28b3 100644 --- a/Packages/MIES/MIES_AnalysisBrowser_SweepBrowser.ipf +++ b/Packages/MIES/MIES_AnalysisBrowser_SweepBrowser.ipf @@ -425,10 +425,27 @@ Function/S SB_GetSweepList(win) WAVE/T map = SB_GetSweepBrowserMapFromGraph(win) numRows = GetNumberFromWaveNote(map, NOTE_INDEX) - for(i = 0; i < numRows; i += 1) - sprintf str, "Sweep %d [%s.%s]", str2num(map[i][%Sweep]), ReplaceString(";", GetBaseName(map[i][%FileName]), "_"), GetFileSuffix(map[i][%FileName]) - list = AddListItem(str, list, ";", Inf) - endfor + + if(!numRows) + return "" + endif + + Duplicate/FREE/RMD=[0, numRows - 1][FindDimlabel(map, COLS, "FileName")] map, filenames + + WAVE/T uniqueEntries = GetUniqueEntries(filenames) + + // all sweeps are from the same experiment, use a less verbose list format + if(DimSize(uniqueEntries, ROWS) == 1) + for(i = 0; i < numRows; i += 1) + sprintf str, "Sweep %d", str2num(map[i][%Sweep]) + list = AddListItem(str, list, ";", Inf) + endfor + else + for(i = 0; i < numRows; i += 1) + sprintf str, "Sweep %d [%s.%s]", str2num(map[i][%Sweep]), ReplaceString(";", GetBaseName(map[i][%FileName]), "_"), GetFileSuffix(map[i][%FileName]) + list = AddListItem(str, list, ";", Inf) + endfor + endif return list End @@ -517,16 +534,18 @@ Function SB_PopupMenuSelectSweep(pa) : PopupMenuControl STRUCT WMPopupAction &pa string win, scPanel - variable newSweep + variable newSweep, newIndex switch(pa.eventCode) case 2: // mouse up win = pa.win - newSweep = pa.popNum - 1 + WAVE sweeps = SB_GetPlainSweepList(win) + newIndex = pa.popNum - 1 + newSweep = sweeps[newIndex] SetSetVariable(win, "setvar_SweepControl_SweepNo", newSweep) if(OVS_IsActive(win)) - OVS_ChangeSweepSelectionState(win, CHECKBOX_SELECTED, index=newSweep) + OVS_ChangeSweepSelectionState(win, CHECKBOX_SELECTED, index=newIndex) else UpdateSweepPlot(win) endif diff --git a/Packages/MIES/MIES_AnalysisFunctions_Dashboard.ipf b/Packages/MIES/MIES_AnalysisFunctions_Dashboard.ipf index f22610c39e..b2bf700d33 100644 --- a/Packages/MIES/MIES_AnalysisFunctions_Dashboard.ipf +++ b/Packages/MIES/MIES_AnalysisFunctions_Dashboard.ipf @@ -27,79 +27,157 @@ Function AD_UpdateAllDatabrowser() endfor End -/// @brief Update the dashboards of the given databrowser +static Function AD_GetColorForResultMessage(string result) + + strswitch(result) + case DASHBOARD_PASSING_MESSAGE: + return 2 + case NOT_AVAILABLE: + return 0 + default: + return 1 + endswitch +End + +/// @brief Update the dashboards of the given sweepbrowser/databrowser Function AD_Update(win) string win - string device, mainPanel + string mainPanel variable numEntries, refTime refTime = DEBUG_TIMER_START() + mainPanel = BSP_GetPanel(win) + DFREF dfr = BSP_GetFolder(win, MIES_BSP_PANEL_FOLDER) + WAVE/T helpWave = GetAnaFuncDashboardHelpWave(dfr) WAVE colorWave = GetAnaFuncDashboardColorWave(dfr) WAVE selWave = GetAnaFuncDashboardselWave(dfr) WAVE/T listWave = GetAnaFuncDashboardListWave(dfr) WAVE/T infoWave = GetAnaFuncDashboardInfoWave(dfr) - device = BSP_GetDevice(win) - numEntries = AD_FillWaves(device, listWave, infoWave) - Redimension/N=(numEntries, -1, -1) selWave, listWave, infoWave + if(BSP_IsActive(mainPanel, MIES_BSP_DS)) + numEntries = AD_FillWaves(win, listWave, infoWave) + endif + + Redimension/N=(numEntries, -1, -1) selWave, listWave, infoWave, helpWave if(numEntries > 0) - selWave[][][%foreColors] = cmpstr(listWave[p][%Result], DASHBOARD_PASSING_MESSAGE) == 0 ? 2 : 1 + selWave[][][%foreColors] = AD_GetColorForResultMessage(listWave[p][%Result]) - mainPanel = BSP_GetPanel(win) - EnableControls(mainPanel, "list_dashboard;check_BrowserSettings_DB_Failed;check_BrowserSettings_DB_Passed") + helpWave[] = "Result: " + listWave[p][%Result] + + EnableControls(mainPanel, "check_BrowserSettings_DB_Failed;check_BrowserSettings_DB_Passed") + else + SetNumberInWaveNote(listWave, NOTE_INDEX, 0) + DisableControls(mainPanel, "check_BrowserSettings_DB_Failed;check_BrowserSettings_DB_Passed") endif DEBUGPRINT_ELAPSED(refTime) End +static Function/S AD_GetResultMessage(variable anaFuncType, variable passed, WAVE numericalValues, WAVE/T textualValues, variable sweepNo, variable headstage) + + if(passed) + return "Pass" + endif + + // PSQ_DA, PSQ_RB, PSQ_RA, PSQ_SP, PSQ_CR + // PSQ_FMT_LBN_BL_QC_PASS + + // MSQ_DA + // - always passes + + // MSQ_FRE + // - MSQ_FMT_LBN_DASCALE_EXC present (optional) + // - Not enough sweeps + + // MSQ_SC + // - MSQ_FMT_LBN_RERUN_TRIALS_EXC present + // - Spike counts state + // - Spontaneous spiking check + // - Not enough sweeps + + // PSQ_CR + // - needs at least PSQ_CR_NUM_SWEEPS_PASS passing sweeps with the same to-full-pA rounded DAScale + + // PSQ_DA + // - needs at least $NUM_DA_SCALES passing sweeps + // and for supra mode if the FinalSlopePercent parameter is present this has to be reached as well + + // PSQ_RA + // - needs at least PSQ_RA_NUM_SWEEPS_PASS passing sweeps + + // PSQ_RB + // - Difference to initial DAScale larger than 60pA? + // - Not enough sweeps + + // PSQ_SP + // - only reached PSQ_FMT_LBN_STEPSIZE step size and not PSQ_SP_INIT_AMP_p10 with a spike + + switch(anaFuncType) + case MSQ_DA_SCALE: + BUG("Unknown reason for failure") + return "Failure" + case MSQ_FAST_RHEO_EST: + return AD_GetFastRheoEstFailMsg(numericalValues, sweepNo, headstage) + case PSQ_CHIRP: + return AD_GetChirpFailMsg(numericalValues, sweepNo, headstage) + case PSQ_DA_SCALE: + return AD_GetDaScaleFailMsg(numericalValues, textualValues, sweepNo, headstage) + case PSQ_RAMP: + return AD_GetRampFailMsg(numericalValues, sweepNo, headstage) + case PSQ_RHEOBASE: + return AD_GetRheobaseFailMsg(numericalValues, sweepNo, headstage) + case PSQ_SQUARE_PULSE: + return AD_GetSquarePulseFailMsg(numericalValues, sweepNo, headstage) + case SC_SPIKE_CONTROL: + return AD_GetSpikeControlFailMsg(numericalValues, textualValues, sweepNo, headstage) + case INVALID_ANALYSIS_FUNCTION: + return NOT_AVAILABLE + default: + ASSERT(0, "Unsupported analysis function") + endswitch +End + /// @brief Get result list of analysis function runs -static Function AD_FillWaves(panelTitle, list, info) - string panelTitle +static Function AD_FillWaves(win, list, info) + string win WAVE/T list, info - variable lastSweep, i, j, headstage, passed, sweepNo, numEntries + variable i, j, headstage, passed, sweepNo, numEntries variable index, anaFuncType, stimsetCycleID, firstValid, lastValid string key, anaFunc, stimset, msg - lastSweep = AFH_GetLastSweepAcquired(panelTitle) + WAVE/Z totalSweepsPresent = GetPlainSweepList(win) - if(isNan(lastSweep)) - return 0 - endif + // as many sweeps as entries in numericalValuesWave/textualValuesWave + WAVE/WAVE/Z numericalValuesWave = BSP_GetNumericalValues(win) + WAVE/WAVE/Z textualValuesWave = BSP_GetTextualValues(win) - WAVE numericalValues = GetLBNumericalValues(panelTitle) - WAVE textualValues = GetLBTextualValues(panelTitle) + if(!WaveExists(numericalValuesWave) || !WaveExists(textualValuesWave) || !WaveExists(totalSweepsPresent)) + return NaN + endif index = GetNumberFromWaveNote(list, NOTE_INDEX) - key = StringFromList(GENERIC_EVENT, EVENT_NAME_LIST_LBN) - WAVE/Z sweepsWithGenericFunc = GetSweepsWithSetting(textualValues, key) - - if(!WaveExists(sweepsWithGenericFunc)) - return 0 - endif - - numEntries = DimSize(sweepsWithGenericFunc, ROWS) + numEntries = DimSize(totalSweepsPresent, ROWS) for(i = 0; i < numEntries; i += 1) + sweepNo = totalSweepsPresent[i] - sweepNo = sweepsWithGenericFunc[i] + WAVE textualValues = textualValuesWave[i] + WAVE numericalValues = numericalValuesWave[i] key = StringFromList(GENERIC_EVENT, EVENT_NAME_LIST_LBN) WAVE/Z/T anaFuncs = GetLastSetting(textualValues, sweepNo, key, DATA_ACQUISITION_MODE) - if(!WaveExists(anaFuncs)) - continue - endif - - Make/N=(LABNOTEBOOK_LAYER_COUNT)/FREE anaFuncTypes = MapAnaFuncToConstant(anaFuncs[p]) - - if(!HasOneValidEntry(anaFuncTypes)) - continue + if(WaveExists(anaFuncs)) + Make/N=(LABNOTEBOOK_LAYER_COUNT)/FREE anaFuncTypes = MapAnaFuncToConstant(anaFuncs[p]) + else + Make/N=(LABNOTEBOOK_LAYER_COUNT)/FREE/T anaFuncs = NOT_AVAILABLE + Make/N=(LABNOTEBOOK_LAYER_COUNT)/FREE anaFuncTypes = INVALID_ANALYSIS_FUNCTION endif WAVE/Z headstages = GetLastSetting(numericalValues, sweepNo, "Headstage Active", DATA_ACQUISITION_MODE) @@ -113,20 +191,16 @@ static Function AD_FillWaves(panelTitle, list, info) headstage = j - if(IsNaN(headstages[headstage])) + if(headstages[headstage] != 1) continue endif anaFuncType = anaFuncTypes[headstage] anaFunc = anaFuncs[headstage] - if(IsNaN(anaFuncType)) // unsupported analysis function - continue - endif - WAVE/Z stimsetCycleIDs = GetLastSetting(numericalValues, sweepNo, STIMSET_ACQ_CYCLE_ID_KEY, DATA_ACQUISITION_MODE) - if(!WaveExists(stimsetCycleIDs)) // TP during DAQ + if(!WaveExists(stimsetCycleIDs)) // TP during DAQ or data before d6046561 (Add a stimset acquisition cycle ID, 2018-05-30) continue endif @@ -142,83 +216,17 @@ static Function AD_FillWaves(panelTitle, list, info) stimset = stimsets[headstage] - key = CreateAnaFuncLBNKey(anaFuncType, PSQ_FMT_LBN_SET_PASS, query = 1) - passed = GetLastSettingIndepSCI(numericalValues, sweepNo, key, headstage, UNKNOWN_MODE) + if(anaFuncType != INVALID_ANALYSIS_FUNCTION) + key = CreateAnaFuncLBNKey(anaFuncType, PSQ_FMT_LBN_SET_PASS, query = 1) + passed = GetLastSettingIndepSCI(numericalValues, sweepNo, key, headstage, UNKNOWN_MODE) - if(isNaN(passed)) - // the set is not yet finished - continue + if(isNaN(passed)) + // the set is not yet finished + continue + endif endif - if(passed) - msg = "Pass" - else - anaFuncType = MapAnaFuncToConstant(anaFunc) - ASSERT(IsFinite(anaFuncType), "Invalid analysis function type") - - // PSQ_DA, PSQ_RB, PSQ_RA, PSQ_SP, PSQ_CR - // PSQ_FMT_LBN_BL_QC_PASS - - // MSQ_DA - // - always passes - - // MSQ_FRE - // - MSQ_FMT_LBN_DASCALE_EXC present (optional) - // - Not enough sweeps - - // MSQ_SC - // - MSQ_FMT_LBN_RERUN_TRIALS_EXC present - // - Spike counts state - // - Spontaneous spiking check - // - Not enough sweeps - - // PSQ_CR - // - needs at least PSQ_CR_NUM_SWEEPS_PASS passing sweeps with the same to-full-pA rounded DAScale - - // PSQ_DA - // - needs at least $NUM_DA_SCALES passing sweeps - // and for supra mode if the FinalSlopePercent parameter is present this has to be reached as well - - // PSQ_RA - // - needs at least PSQ_RA_NUM_SWEEPS_PASS passing sweeps - - // PSQ_RB - // - Difference to initial DAScale larger than 60pA? - // - Not enough sweeps - - // PSQ_SP - // - only reached PSQ_FMT_LBN_STEPSIZE step size and not PSQ_SP_INIT_AMP_p10 with a spike - - switch(anaFuncType) - case MSQ_DA_SCALE: - BUG("Unknown reason for failure") - msg = "Failure" - break - case MSQ_FAST_RHEO_EST: - msg = AD_GetFastRheoEstFailMsg(numericalValues, sweepNo, headstage) - break - case PSQ_CHIRP: - msg = AD_GetChirpFailMsg(numericalValues, sweepNo, headstage) - break - case PSQ_DA_SCALE: - msg = AD_GetDaScaleFailMsg(numericalValues, textualValues, sweepNo, headstage) - break - case PSQ_RAMP: - msg = AD_GetRampFailMsg(numericalValues, sweepNo, headstage) - break - case PSQ_RHEOBASE: - msg = AD_GetRheobaseFailMsg(numericalValues, sweepNo, headstage) - break - case PSQ_SQUARE_PULSE: - msg = AD_GetSquarePulseFailMsg(numericalValues, sweepNo, headstage) - break - case SC_SPIKE_CONTROL: - msg = AD_GetSpikeControlFailMsg(numericalValues, textualValues, sweepNo, headstage) - break - default: - ASSERT(0, "Unsupported analysis function") - endswitch - endif + msg = AD_GetResultMessage(anaFuncType, passed, numericalValues, textualValues, sweepNo, headstage) EnsureLargeEnoughWave(list, dimension = ROWS, minimumSize = index) EnsureLargeEnoughWave(info, dimension = ROWS, minimumSize = index) @@ -271,6 +279,11 @@ static Function AD_FillWaves(panelTitle, list, info) WAVE/Z passingSweeps endif break + case INVALID_ANALYSIS_FUNCTION: + // all sweeps are both passing and failing + Duplicate/FREE sweeps, failingSweeps + Duplicate/FREE sweeps, passingSweeps + break default: ASSERT(0, "Unsupported analysis function") break @@ -625,13 +638,13 @@ static Function AD_SelectResult(win, [index]) return NaN endif - Make/D/N=0/FREE sweeps + Make/N=0/FREE sweepsWithDuplicates if(GetCheckBoxState(bspPanel, "check_BrowserSettings_DB_Passed")) list = info[index][%$"Passing Sweeps"] if(!IsEmpty(list)) WAVE wv = ListToNumericWave(list, ";") - Concatenate/NP {wv}, sweeps + Concatenate/NP {wv}, sweepsWithDuplicates endif endif @@ -640,7 +653,7 @@ static Function AD_SelectResult(win, [index]) if(!IsEmpty(list)) WAVE wv = ListToNumericWave(list, ";") - Concatenate/NP {wv}, sweeps + Concatenate/NP {wv}, sweepsWithDuplicates endif endif @@ -650,18 +663,19 @@ static Function AD_SelectResult(win, [index]) return NaN endif + WAVE sweeps = GetUniqueEntries(sweepsWithDuplicates) + numEntries = DimSize(sweeps, ROWS) if(!numEntries) WaveClear sweeps endif - WAVE/T ovsListWave = GetOverlaySweepsListWave(dfr) - WAVE ovsSelWave = GetOverlaySweepsListSelWave(dfr) - if(!GetCheckBoxState(bspPanel,"check_BrowserSettings_OVS")) PGC_SetAndActivateControl(bspPanel, "check_BrowserSettings_OVS", val = 1) - else + elseif(BSP_IsDataBrowser(win)) + WAVE/T ovsListWave = GetOverlaySweepsListWave(dfr) + // update databrowser if required and not already done WAVE/Z indizes = FindIndizes(ovsListWave, col = 0, var = (numEntries > 0 ? sweeps[numEntries - 1] : -1)) if(!WaveExists(indizes)) @@ -677,6 +691,15 @@ static Function AD_SelectResult(win, [index]) PGC_SetAndActivateControl(bspPanel, "check_BrowserSettings_DAC", val = 1) endif + if(!BSP_IsDataBrowser(win) && WaveExists(sweeps)) + WAVE allSweeps = GetPlainSweepList(win) + WAVE/Z presentSweeps = GetSetIntersection(allSweeps, sweeps) + if(!WaveExists(presentSweeps) || EqualWaves(presentSweeps, sweeps, 1) != 1) + printf "Some requested sweeps can not be displayed, as they are not loaded into this sweepbrowser.\r" + ControlWindowToFront() + endif + endif + OVS_ChangeSweepSelectionState(win, 1, sweeps = sweeps, invertOthers = 1) End @@ -716,3 +739,15 @@ Function AD_CheckProc_FailedSweeps(cba) : CheckBoxControl return 0 End + +Function AD_CheckProc_Toggle(cba) : CheckBoxControl + STRUCT WMCheckboxAction &cba + + switch(cba.eventCode) + case 2: // mouse up + AD_Update(cba.win) + break + endswitch + + return 0 +End diff --git a/Packages/MIES/MIES_BrowserSettingsPanel.ipf b/Packages/MIES/MIES_BrowserSettingsPanel.ipf index e4f5f2e766..e7ef2a0ad7 100644 --- a/Packages/MIES/MIES_BrowserSettingsPanel.ipf +++ b/Packages/MIES/MIES_BrowserSettingsPanel.ipf @@ -24,9 +24,6 @@ static strConstant BROWSERTYPE_SWEEPBROWSER = "S" static StrConstant BROWSERSETTINGS_CONTROLS_DATABROWSER = "popup_DB_lockedDevices;" static StrConstant BROWSERSETTINGS_AXES_SCALING_CHECKBOXES = "check_Display_VisibleXrange;check_Display_EqualYrange;check_Display_EqualYignore" -/// @brief List of controls that have specific control procedures set -static StrConstant SWEEPCONTROL_UNSET_CONTROLPROCEDURES = "setvar_SweepControl_SweepNo" - /// @brief exclusive controls that are enabled/disabled for the specific browser window type static StrConstant SWEEPCONTROL_CONTROLS_DATABROWSER = "check_SweepControl_AutoUpdate;setvar_SweepControl_SweepNo;" static StrConstant SWEEPCONTROL_CONTROLS_SWEEPBROWSER = "popup_SweepControl_Selector;" @@ -168,7 +165,6 @@ Function BSP_UnsetDynamicSweepControlOfDataBrowser(mainPanel) scPanel = BSP_GetSweepControlsPanel(mainPanel) ASSERT(WindowExists(scPanel), "external SweepControl panel not found") SetWindow $scPanel, hook(main)=$"" - SetControlProcedures(scPanel, SWEEPCONTROL_UNSET_CONTROLPROCEDURES, "") End /// @brief dynamic settings for panel initialization @@ -198,7 +194,6 @@ Function BSP_DynamicStartupSettings(mainPanel) EnableControls(bsPanel, BROWSERSETTINGS_CONTROLS_DATABROWSER) else DisableControls(bsPanel, BROWSERSETTINGS_CONTROLS_DATABROWSER) - DisableControls(bsPanel, "list_dashboard;check_BrowserSettings_DB_Failed;check_BrowserSettings_DB_Passed") endif PopupMenu popup_TimeAlignment_Master win=$bsPanel, value = #("TimeAlignGetAllTraces(\"" + mainPanel + "\")") @@ -284,10 +279,11 @@ Function BSP_BindListBoxWaves(win) BSP_ChannelSelectionWaveToGUI(bsPanel, channelSelection) // dashboard + WAVE listBoxHelpWave = GetAnaFuncDashboardHelpWave(dfr) WAVE listBoxColorWave = GetAnaFuncDashboardColorWave(dfr) WAVE listBoxSelWave = GetAnaFuncDashboardselWave(dfr) WAVE/T listBoxWave = GetAnaFuncDashboardListWave(dfr) - ListBox list_dashboard, win=$bsPanel, listWave=listBoxWave, colorWave=listBoxColorWave, selWave=listBoxSelWave + ListBox list_dashboard, win=$bsPanel, listWave=listBoxWave, colorWave=listBoxColorWave, selWave=listBoxSelWave, helpWave=listBoxHelpWave // sweep formula tab SetValDisplay(bsPanel, "status_sweepFormula_parser", var=1) @@ -770,17 +766,19 @@ End /// @brief update controls in scPanel and change to new sweep /// -/// @param win name of external panel or main window -/// @param ctrl name of the button that was pressed and is initiating the update -/// @param firstSweep first available sweep(DB) or index(SB) -/// @param lastSweep last available sweep(DB) or index(SB) +/// @param win name of external panel or main window +/// @param ctrl name of the button that was pressed and is initiating the update +/// @param firstSweepOrIndex first available sweep(DB) or index(SB) +/// @param lastSweepOrIndex last available sweep(DB) or index(SB) +/// /// @returns the new sweep number in case of DB or the index for SB -Function BSP_UpdateSweepControls(win, ctrl, firstSweep, lastSweep) +static Function BSP_UpdateSweepControls(win, ctrl, firstSweepOrIndex, lastSweepOrIndex) string win, ctrl - variable firstSweep, lastSweep + variable firstSweepOrIndex, lastSweepOrIndex string graph, scPanel - variable currentSweep, newSweep, step, direction + variable currentSweep, newSweep, step, direction, ret + variable firstSweep, lastSweep, firstIndex, lastIndex, currentIndex, newIndex graph = GetMainWindow(win) scPanel = BSP_GetSweepControlsPanel(graph) @@ -789,7 +787,6 @@ Function BSP_UpdateSweepControls(win, ctrl, firstSweep, lastSweep) DoAbortNow("The main panel is too old to be usable. Please close it and open a new one.") endif - currentSweep = GetSetVariable(scPanel, "setvar_SweepControl_SweepNo") step = GetSetVariable(scPanel, "setvar_SweepControl_SweepStep") if(!cmpstr(ctrl, "button_SweepControl_PrevSweep")) direction = -1 @@ -799,14 +796,38 @@ Function BSP_UpdateSweepControls(win, ctrl, firstSweep, lastSweep) ASSERT(0, "unhandled control name") endif - newSweep = currentSweep + direction * step - newSweep = limit(newSweep, firstSweep, lastSweep) + if(BSP_IsDataBrowser(graph)) + firstSweep = firstSweepOrIndex + lastSweep = lastSweepOrIndex + + currentSweep = GetSetVariable(scPanel, "setvar_SweepControl_SweepNo") + newSweep = currentSweep + direction * step + newSweep = limit(newSweep, firstSweep, lastSweep) + + ret = newSweep + else + WAVE sweeps = SB_GetPlainSweepList(win) + firstIndex = 0 + lastIndex = DimSize(sweeps, ROWS) - 1 + + currentIndex = GetPopupMenuIndex(scPanel, "popup_SweepControl_Selector") + newIndex = currentIndex + direction * step + newIndex = limit(newIndex, firstIndex, lastIndex) + + newSweep = sweeps[newIndex] + firstSweep = sweeps[firstIndex] + lastSweep = sweeps[lastIndex] + + SetPopupMenuIndex(scPanel, "popup_SweepControl_Selector", newIndex) + + ret = newIndex + endif SetSetVariable(scPanel, "setvar_SweepControl_SweepNo", newSweep) SetSetVariableLimits(scPanel, "setvar_SweepControl_SweepNo", firstSweep, lastSweep, step) SetValDisplay(scPanel, "valdisp_SweepControl_LastSweep", var = lastSweep) - return newSweep + return ret End /// @brief check if the specified setting is activated @@ -843,6 +864,9 @@ Function BSP_IsActive(win, elementID) case MIES_BSP_SF: control = "check_BrowserSettings_SF" break + case MIES_BSP_DS: + control = "check_BrowserSettings_DS" + break default: return 0 endswitch @@ -1262,7 +1286,6 @@ Function BSP_ButtonProc_ChangeSweep(ba) : ButtonControl OVS_ChangeSweepSelectionState(graph, CHECKBOX_SELECTED, sweepNo=sweepNo) else index = BSP_UpdateSweepControls(graph, ba.ctrlName, first, last) - SetPopupMenuIndex(scPanel, "popup_SweepControl_Selector", index) OVS_ChangeSweepSelectionState(graph, CHECKBOX_SELECTED, index=index) endif @@ -1317,7 +1340,7 @@ Function BSP_UpdateSweepNote(win) graph = GetMainWindow(win) scPanel = BSP_GetSweepControlsPanel(win) - index = GetSetVariable(scPanel, "setvar_SweepControl_SweepNo") + index = GetPopupMenuIndex(scPanel, "Popup_SweepControl_Selector") DFREF sweepBrowserDFR = SB_GetSweepBrowserFolder(graph) WAVE/T sweepMap = GetSweepBrowserMap(sweepBrowserDFR) diff --git a/Packages/MIES/MIES_Constants.ipf b/Packages/MIES/MIES_Constants.ipf index 7a21c7f95e..e39c4056a3 100644 --- a/Packages/MIES/MIES_Constants.ipf +++ b/Packages/MIES/MIES_Constants.ipf @@ -375,6 +375,7 @@ Constant MIES_BSP_CS = 2 Constant MIES_BSP_AR = 3 Constant MIES_BSP_PA = 4 Constant MIES_BSP_SF = 5 +Constant MIES_BSP_DS = 7 /// @} /// @name values for UserData in BrowserSettings and derived windows @@ -618,7 +619,7 @@ Constant HARDWARE_DAC_EXTERNAL_TRIGGER = 0x1 /// Used to upgrade the GuiStateWave as well as the DA Ephys panel Constant DA_EPHYS_PANEL_VERSION = 52 -Constant DATA_SWEEP_BROWSER_PANEL_VERSION = 26 +Constant DATA_SWEEP_BROWSER_PANEL_VERSION = 28 Constant WAVEBUILDER_PANEL_VERSION = 9 /// Version of the labnotebooks (numerical and textual) @@ -995,6 +996,8 @@ StrConstant PSQ_FMT_LBN_CR_SPIKE_PASS = "%s spike QC" /// Constant values must *not* overlap between PSQ_XXX and MSQ_YYY. /// @{ +Constant INVALID_ANALYSIS_FUNCTION = 0xFFFF + /// @anchor PatchSeqAnalysisFunctionTypes /// @{ Constant PSQ_DA_SCALE = 0x01 @@ -1484,3 +1487,5 @@ StrConstant LOGFILE_NAME = "Log.jsonl" StrConstant IVS_PUB_FILTER = "ivscc" Constant PSQ_CR_SPIKE_CHECK_DEFAULT = 1 + +StrConstant NOT_AVAILABLE = "n/a" diff --git a/Packages/MIES/MIES_DataBrowser_Macro.ipf b/Packages/MIES/MIES_DataBrowser_Macro.ipf index f5d9ec226b..2fcde570ef 100644 --- a/Packages/MIES/MIES_DataBrowser_Macro.ipf +++ b/Packages/MIES/MIES_DataBrowser_Macro.ipf @@ -11,1205 +11,1210 @@ Window DataBrowser() : Graph PauseUpdate; Silent 1 // building window... - Display /W=(387.75,660.5,819.75,1095.5)/K=1 as "DataBrowser" + Display /W=(1219.5,593,1651.5,1029.5)/K=1 as "DataBrowser" Button button_BSP_open,pos={3.00,3.00},size={24.00,24.00},disable=1,proc=DB_ButtonProc_Panel Button button_BSP_open,title="<<",help={"Open Side Panel"} - Button button_BSP_open,userdata(ResizeControlsInfo)= A"!!,>M!!#8L!!#=#!!#=#z!!#](Aon\"Qzzzzzzzzzzzzzz!!#](Aon\"Qzz" - Button button_BSP_open,userdata(ResizeControlsInfo) += A"zzzzzzzzzzzz!!#u:Du]kM!!#8L!!#=#!!#=#z!!#](Aon\"Qzzzzzzzzzzzzzz!!#](Aon\"Qzz" + Button button_BSP_open,userdata(ResizeControlsInfo)+=A"zzzzzzzzzzzz!!#u:Du]kJ,fQLzzzzzzzzzzzzzzzzzzzz" - SetWindow kwTopWin,userdata(ResizeControlsInfo) += A"zzzzzzzzzzzzzzzzzzzzzzzzz" - SetWindow kwTopWin,userdata(ResizeControlsInfo) += A"zzzzzzzzzzzzzzzzzzz!!!" - SetWindow kwTopWin,userdata(ResizeControlsHookStash)= "ResizeControls#ResizeControlsHook" - SetWindow kwTopWin,userdata(JSONSettings_StoreCoordinates)= "1" - SetWindow kwTopWin,userdata(JSONSettings_WindowName)= "datasweepbrowser" + SetWindow kwTopWin,userdata(BROWSER)= "D" + SetWindow kwTopWin,userdata(DEVICE)= "- none -" + SetWindow kwTopWin,userdata(Config_PanelType)= "DataBrowser" + SetWindow kwTopWin,userdata(ResizeControlsInfo)=A"!!*'\"z!!#C=!!#C>J,fQLzzzzzzzzzzzzzzzzzzzz" + SetWindow kwTopWin,userdata(ResizeControlsInfo)+=A"zzzzzzzzzzzzzzzzzzzzzzzzz" + SetWindow kwTopWin,userdata(ResizeControlsInfo)+=A"zzzzzzzzzzzzzzzzzzz!!!" + SetWindow kwTopWin,userdata(ResizeControlsHookStash)= "ResizeControls#ResizeControlsHook" + SetWindow kwTopWin,userdata(JSONSettings_StoreCoordinates)= "1" + SetWindow kwTopWin,userdata(JSONSettings_WindowName)= "datasweepbrowser" Execute/Q/Z "SetWindow kwTopWin sizeLimit={324,326.25,inf,inf}" // sizeLimit requires Igor 7 or later - NewPanel/HOST=#/EXT=2/W=(0,0,580,66) as "Sweep Control" - Button button_SweepControl_NextSweep,pos={333.00,0.00},size={150.00,36.00},proc=BSP_ButtonProc_ChangeSweep + NewPanel/HOST=#/EXT=2/W=(0,0,580,70) as "Sweep Control" + Button button_SweepControl_NextSweep,pos={331.00,4.00},size={150.00,36.00},proc=BSP_ButtonProc_ChangeSweep Button button_SweepControl_NextSweep,title="Next \\W649" Button button_SweepControl_NextSweep,help={"Displays the next sweep (sweep no. = last sweep number + step)"} Button button_SweepControl_NextSweep,fSize=20 - ValDisplay valdisp_SweepControl_LastSweep,pos={231.00,3.00},size={89.00,34.00},bodyWidth=60 + ValDisplay valdisp_SweepControl_LastSweep,pos={237.00,4.00},size={89.00,34.00},bodyWidth=60 ValDisplay valdisp_SweepControl_LastSweep,title="of" ValDisplay valdisp_SweepControl_LastSweep,help={"The number of the last sweep acquired for the device assigned to the data browser"} - ValDisplay valdisp_SweepControl_LastSweep,userdata(Config_DontRestore)= "1" - ValDisplay valdisp_SweepControl_LastSweep,userdata(Config_DontSave)= "1" - ValDisplay valdisp_SweepControl_LastSweep,fSize=24,frame=2,fStyle=1 + ValDisplay valdisp_SweepControl_LastSweep,userdata(Config_DontRestore)="1" + ValDisplay valdisp_SweepControl_LastSweep,userdata(Config_DontSave)="1",fSize=24 + ValDisplay valdisp_SweepControl_LastSweep,frame=2,fStyle=1 ValDisplay valdisp_SweepControl_LastSweep,limits={0,0,0},barmisc={0,1000} - ValDisplay valdisp_SweepControl_LastSweep,value= #"nan" - ValDisplay valdisp_SweepControl_LastSweep,barBackColor= (56576,56576,56576) - SetVariable setvar_SweepControl_SweepNo,pos={153.00,0.00},size={72.00,35.00} + ValDisplay valdisp_SweepControl_LastSweep,value=#"nan" + ValDisplay valdisp_SweepControl_LastSweep,barBackColor=(56576,56576,56576) + SetVariable setvar_SweepControl_SweepNo,pos={158.00,4.00},size={72.00,35.00},proc=DB_SetVarProc_SweepNo SetVariable setvar_SweepControl_SweepNo,help={"Sweep number of last sweep plotted"} - SetVariable setvar_SweepControl_SweepNo,userdata(lastSweep)= "NaN" - SetVariable setvar_SweepControl_SweepNo,userdata(Config_DontRestore)= "1" - SetVariable setvar_SweepControl_SweepNo,userdata(Config_DontSave)= "1",fSize=24 - SetVariable setvar_SweepControl_SweepNo,limits={0,0,1},value= _NUM:0,live= 1 - SetVariable setvar_SweepControl_SweepStep,pos={479.00,0.00},size={91.00,35.00},bodyWidth=40 + SetVariable setvar_SweepControl_SweepNo,userdata(lastSweep)="NaN" + SetVariable setvar_SweepControl_SweepNo,userdata(Config_DontRestore)="1" + SetVariable setvar_SweepControl_SweepNo,userdata(Config_DontSave)="1",fSize=24 + SetVariable setvar_SweepControl_SweepNo,limits={0,0,1},value=_NUM:0,live=1 + SetVariable setvar_SweepControl_SweepStep,pos={486.00,4.00},size={91.00,35.00},bodyWidth=40 SetVariable setvar_SweepControl_SweepStep,title="Step" SetVariable setvar_SweepControl_SweepStep,help={"Set the increment between sweeps"} - SetVariable setvar_SweepControl_SweepStep,userdata(lastSweep)= "0" - SetVariable setvar_SweepControl_SweepStep,userdata(Config_DontRestore)= "1" - SetVariable setvar_SweepControl_SweepStep,userdata(Config_DontSave)= "1" - SetVariable setvar_SweepControl_SweepStep,fSize=24 - SetVariable setvar_SweepControl_SweepStep,limits={1,inf,1},value= _NUM:1 - Button button_SweepControl_PrevSweep,pos={0.00,0.00},size={150.00,36.00},proc=BSP_ButtonProc_ChangeSweep + SetVariable setvar_SweepControl_SweepStep,userdata(lastSweep)="0" + SetVariable setvar_SweepControl_SweepStep,userdata(Config_DontRestore)="1" + SetVariable setvar_SweepControl_SweepStep,userdata(Config_DontSave)="1",fSize=24 + SetVariable setvar_SweepControl_SweepStep,limits={1,inf,1},value=_NUM:1 + Button button_SweepControl_PrevSweep,pos={3.00,4.00},size={150.00,36.00},proc=BSP_ButtonProc_ChangeSweep Button button_SweepControl_PrevSweep,title="\\W646 Previous" Button button_SweepControl_PrevSweep,help={"Displays the previous sweep (sweep no. = last sweep number - step)"} Button button_SweepControl_PrevSweep,fSize=20 - PopupMenu Popup_SweepControl_Selector,pos={144.00,39.00},size={175.00,19.00},bodyWidth=175,disable=2 + PopupMenu Popup_SweepControl_Selector,pos={154.00,42.00},size={175.00,19.00},bodyWidth=175,disable=2 PopupMenu Popup_SweepControl_Selector,help={"List of sweeps in this sweep browser"} - PopupMenu Popup_SweepControl_Selector,userdata(tabnum)= "0" - PopupMenu Popup_SweepControl_Selector,userdata(tabcontrol)= "Settings" - PopupMenu Popup_SweepControl_Selector,userdata(Config_DontRestore)= "1" - PopupMenu Popup_SweepControl_Selector,userdata(Config_DontSave)= "1" - PopupMenu Popup_SweepControl_Selector,mode=1,popvalue=" ",value= #"\" \"" - CheckBox check_SweepControl_AutoUpdate,pos={345.00,42.00},size={160.00,15.00} + PopupMenu Popup_SweepControl_Selector,userdata(tabnum)="0" + PopupMenu Popup_SweepControl_Selector,userdata(tabcontrol)="Settings" + PopupMenu Popup_SweepControl_Selector,userdata(Config_DontRestore)="1" + PopupMenu Popup_SweepControl_Selector,userdata(Config_DontSave)="1" + PopupMenu Popup_SweepControl_Selector,mode=1,popvalue=" ",value=#"\" \"" + CheckBox check_SweepControl_AutoUpdate,pos={343.00,44.00},size={160.00,15.00} CheckBox check_SweepControl_AutoUpdate,title="Display last sweep acquired" CheckBox check_SweepControl_AutoUpdate,help={"Displays the last sweep acquired when data acquistion is ongoing"} - CheckBox check_SweepControl_AutoUpdate,value= 1 + CheckBox check_SweepControl_AutoUpdate,value=1 RenameWindow #,SweepControl SetActiveSubwindow ## NewPanel/HOST=#/EXT=1/W=(399,0,0,585) as " " ModifyPanel fixedSize=0 GroupBox group_properties_sweepFormula,pos={5.00,85.00},size={388.00,499.00},disable=1 - GroupBox group_properties_sweepFormula,userdata(tabnum)= "5" - GroupBox group_properties_sweepFormula,userdata(tabcontrol)= "Settings" - GroupBox group_properties_sweepFormula,userdata(ResizeControlsInfo)= A"!!,?X!!#?c!!#C'!!#C^J,fQL!!#](Aon#azzzzzzzzzzzzzz!!#o2B4uAeBk2=!z" - GroupBox group_properties_sweepFormula,userdata(ResizeControlsInfo) += A"zzzzzzzzzzzz!!#N3Bk1ct9jqaR6>q*JDf>[Vzzzzzzzz" - GroupBox group_properties_sweepFormula,userdata(ResizeControlsInfo) += A"zzz!!#N3Bk1ct9jqaR6>q*8Dfg)>D#aP9zzzzzzzzzz!!!" - GroupBox group_calc,pos={28.00,195.00},size={288.00,51.00} - GroupBox group_calc,userdata(tabnum)= "0",userdata(tabcontrol)= "Settings" - GroupBox group_calc,userdata(ResizeControlsInfo)= A"!!,CD!!#AR!!#BJ!!#>Zz!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" - GroupBox group_calc,userdata(ResizeControlsInfo) += A"zzzzzzzzzzzz!!#u:Du]kq*JDf>[Vzzzzzzzz" + GroupBox group_properties_sweepFormula,userdata(ResizeControlsInfo)+=A"zzz!!#N3Bk1ct9jqaR6>q*8Dfg)>D#aP9zzzzzzzzzz!!!" + GroupBox group_calc,pos={28.00,195.00},size={288.00,51.00},userdata(tabnum)="0" + GroupBox group_calc,userdata(tabcontrol)="Settings" + GroupBox group_calc,userdata(ResizeControlsInfo)=A"!!,CD!!#AR!!#BJ!!#>Zz!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" + GroupBox group_calc,userdata(ResizeControlsInfo)+=A"zzzzzzzzzzzz!!#u:Du]kVz!!#](Aon\"Qzzzzzzzzzzzzzz!!#o2B4uAezz" - GroupBox group_enable_sweeps,userdata(ResizeControlsInfo) += A"zzzzzzzzzzzz!!#u:DuaGlAStpcCh5qOGZ8U#zzzzzzzz" - GroupBox group_enable_sweeps,userdata(ResizeControlsInfo) += A"zzz!!#u:Duafn!,c4SCh5qOGX?=jFDl!rzzzzzzzzzz!!!" + GroupBox group_enable_sweeps,title="Overlay Sweeps",userdata(tabnum)="1" + GroupBox group_enable_sweeps,userdata(tabcontrol)="Settings" + GroupBox group_enable_sweeps,userdata(ResizeControlsInfo)=A"!!,?X!!#=+!!#C'!!#>Vz!!#](Aon\"Qzzzzzzzzzzzzzz!!#o2B4uAezz" + GroupBox group_enable_sweeps,userdata(ResizeControlsInfo)+=A"zzzzzzzzzzzz!!#u:DuaGlAStpcCh5qOGZ8U#zzzzzzzz" + GroupBox group_enable_sweeps,userdata(ResizeControlsInfo)+=A"zzz!!#u:Duafn!,c4SCh5qOGX?=jFDl!rzzzzzzzzzz!!!" GroupBox group_enable_channels,pos={9.00,25.00},size={380.00,380.00},disable=1 - GroupBox group_enable_channels,title="Channel Selection",userdata(tabnum)= "2" - GroupBox group_enable_channels,userdata(tabcontrol)= "Settings" - GroupBox group_enable_channels,userdata(ResizeControlsInfo)= A"!!,@s!!#=+!!#C#!!#C#z!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" - GroupBox group_enable_channels,userdata(ResizeControlsInfo) += A"zzzzzzzzzzzz!!#u:Du]kVz!!#](Aon#azzzzzzzzzzzzzz!!#o2B4uAeBk2=!z" - GroupBox group_enable_artifact,userdata(ResizeControlsInfo) += A"zzzzzzzzzzzz!!#u:Du]kVz!!#](Aon#azzzzzzzzzzzzzz!!#o2B4uAeBk2=!z" + GroupBox group_enable_artifact,userdata(ResizeControlsInfo)+=A"zzzzzzzzzzzz!!#u:Du]k2!!#>>!!#A]z!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" - GroupBox group_channelSel_DA,userdata(ResizeControlsInfo) += A"zzzzzzzzzzzz!!#u:Du]k2!!#>>!!#A]z!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" + GroupBox group_channelSel_DA,userdata(ResizeControlsInfo)+=A"zzzzzzzzzzzz!!#u:Du]kVz!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" - GroupBox group_enable_pulse,userdata(ResizeControlsInfo) += A"zzzzzzzzzzzz!!#u:Du]kVz!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" + GroupBox group_enable_pulse,userdata(ResizeControlsInfo)+=A"zzzzzzzzzzzz!!#u:Du]k6!!#>F!!#A]z!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" - GroupBox group_channelSel_HEADSTAGE,userdata(ResizeControlsInfo) += A"zzzzzzzzzzzz!!#u:Du]k6!!#>F!!#A]z!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" + GroupBox group_channelSel_HEADSTAGE,userdata(ResizeControlsInfo)+=A"zzzzzzzzzzzz!!#u:Du]k6!!#?;!!#A[z!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" - GroupBox group_channelSel_AD,userdata(ResizeControlsInfo) += A"zzzzzzzzzzzz!!#u:Du]k6!!#?;!!#A[z!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" + GroupBox group_channelSel_AD,userdata(ResizeControlsInfo)+=A"zzzzzzzzzzzz!!#u:Du]kf!!#<`z!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" - Button button_RemoveRanges,userdata(ResizeControlsInfo) += A"zzzzzzzzzzzz!!#u:Du]kf!!#<`z!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" + Button button_RemoveRanges,userdata(ResizeControlsInfo)+=A"zzzzzzzzzzzz!!#u:Du]kB!!#B!!#!!#@e!!#=[!!#<(z!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" - CheckBox check_highlightRanges,userdata(ResizeControlsInfo) += A"zzzzzzzzzzzz!!#u:Du]k!!#@e!!#=[!!#<(z!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" + CheckBox check_highlightRanges,userdata(ResizeControlsInfo)+=A"zzzzzzzzzzzz!!#u:Du]kJ!!#>Z!!#<(z!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" - CheckBox check_BrowserSettings_OVS,userdata(ResizeControlsInfo) += A"zzzzzzzzzzzz!!#u:Du]kJ!!#>Z!!#<(z!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" + CheckBox check_BrowserSettings_OVS,userdata(ResizeControlsInfo)+=A"zzzzzzzzzzzz!!#u:Du]kJ!!#>Z!!#<(z!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" - CheckBox check_BrowserSettings_AR,userdata(ResizeControlsInfo) += A"zzzzzzzzzzzz!!#u:Du]kJ!!#>Z!!#<(z!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" + CheckBox check_BrowserSettings_AR,userdata(ResizeControlsInfo)+=A"zzzzzzzzzzzz!!#u:Du]kJ!!#>Z!!#<(z!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" - CheckBox check_BrowserSettings_PA,userdata(ResizeControlsInfo) += A"zzzzzzzzzzzz!!#u:Du]kJ!!#>Z!!#<(z!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" + CheckBox check_BrowserSettings_PA,userdata(ResizeControlsInfo)+=A"zzzzzzzzzzzz!!#u:Du]kN!!#<(z!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" - CheckBox check_BrowserSettings_dDAQ,userdata(ResizeControlsInfo) += A"zzzzzzzzzzzz!!#u:Du]kN!!#<(z!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" + CheckBox check_BrowserSettings_dDAQ,userdata(ResizeControlsInfo)+=A"zzzzzzzzzzzz!!#u:Du]kZ!!#<(z!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" - CheckBox check_BrowserSettings_TA,userdata(ResizeControlsInfo) += A"zzzzzzzzzzzz!!#u:Du]kZ!!#<(z!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" + CheckBox check_BrowserSettings_TA,userdata(ResizeControlsInfo)+=A"zzzzzzzzzzzz!!#u:Du]kN!!#N!!#2!!#<(z!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" - CheckBox check_Display_VisibleXrange,userdata(ResizeControlsInfo) += A"zzzzzzzzzzzz!!#u:Du]k2!!#<(z!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" + CheckBox check_Display_VisibleXrange,userdata(ResizeControlsInfo)+=A"zzzzzzzzzzzz!!#u:Du]kj!!#<(z!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" - CheckBox check_Display_EqualYrange,userdata(ResizeControlsInfo) += A"zzzzzzzzzzzz!!#u:Du]kj!!#<(z!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" + CheckBox check_Display_EqualYrange,userdata(ResizeControlsInfo)+=A"zzzzzzzzzzzz!!#u:Du]kn!!#BPz!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" - Slider slider_BrowserSettings_dDAQ,userdata(ResizeControlsInfo) += A"zzzzzzzzzzzz!!#u:Du]kn!!#BPz!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" + Slider slider_BrowserSettings_dDAQ,userdata(ResizeControlsInfo)+=A"zzzzzzzzzzzz!!#u:Du]k2!!#<(z!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" - CheckBox check_SweepControl_HideSweep,userdata(ResizeControlsInfo) += A"zzzzzzzzzzzz!!#u:Du]k2!!#<(z!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" + CheckBox check_SweepControl_HideSweep,userdata(ResizeControlsInfo)+=A"zzzzzzzzzzzz!!#u:Du]kVz!!#](Aon#azzzzzzzzzzzzzz!!#o2B4uAeBk2=!z" - GroupBox group_enable_sweepFormula,userdata(ResizeControlsInfo) += A"zzzzzzzzzzzz!!#N3Bk1ctAStpcCh5qOGZ8U#zzzzzzzz" - GroupBox group_enable_sweepFormula,userdata(ResizeControlsInfo) += A"zzz!!#N3Bk1ctAStpcCh5qOGX?=jFDl!rzzzzzzzzzz!!!" + GroupBox group_enable_sweepFormula,title="SweepFormula",userdata(tabnum)="5" + GroupBox group_enable_sweepFormula,userdata(tabcontrol)="Settings" + GroupBox group_enable_sweepFormula,userdata(ResizeControlsInfo)=A"!!,?X!!#=+!!#C'!!#>Vz!!#](Aon#azzzzzzzzzzzzzz!!#o2B4uAeBk2=!z" + GroupBox group_enable_sweepFormula,userdata(ResizeControlsInfo)+=A"zzzzzzzzzzzz!!#N3Bk1ctAStpcCh5qOGZ8U#zzzzzzzz" + GroupBox group_enable_sweepFormula,userdata(ResizeControlsInfo)+=A"zzz!!#N3Bk1ctAStpcCh5qOGX?=jFDl!rzzzzzzzzzz!!!" SetVariable setvar_sweepFormula_parseResult,pos={135.00,555.00},size={255.00,18.00},disable=1 - SetVariable setvar_sweepFormula_parseResult,userdata(tabnum)= "5" - SetVariable setvar_sweepFormula_parseResult,userdata(tabcontrol)= "Settings" - SetVariable setvar_sweepFormula_parseResult,userdata(ResizeControlsInfo)= A"!!,Fl!!#Co^]6`O!!#J!!#>Z!!#<(z!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" + CheckBox check_BrowserSettings_DS,userdata(ResizeControlsInfo)+=A"zzzzzzzzzzzz!!#N3Bk1ctAStpcCh5qOGZ8U#zzzzzzzz" + CheckBox check_BrowserSettings_DS,userdata(ResizeControlsInfo)+=A"zzz!!#N3Bk1ctAStpcCh5qOGX?=jFDl!rzzzzzzzzzz!!!" + CheckBox check_BrowserSettings_DS,value=0 GroupBox group_enable_dashboard,pos={5.00,25.00},size={388.00,60.00},disable=1 - GroupBox group_enable_dashboard,userdata(tabnum)= "7" - GroupBox group_enable_dashboard,userdata(tabcontrol)= "Settings" - GroupBox group_enable_dashboard,userdata(ResizeControlsInfo)= A"!!,?X!!#=+!!#C'!!#?)z!!#](Aon\"Qzzzzzzzzzzzzzz!!#o2B4uAezz" - GroupBox group_enable_dashboard,userdata(ResizeControlsInfo) += A"zzzzzzzzzzzz!!#u:Du]k*!!#>^!!#<(z!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" - CheckBox check_BrowserSettings_DB_Passed,userdata(ResizeControlsInfo) += A"zzzzzzzzzzzz!!#u:Du]k^!!#<(z!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" + CheckBox check_BrowserSettings_DB_Passed,userdata(ResizeControlsInfo)+=A"zzzzzzzzzzzz!!#u:Du]kJ!!#<(z!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" - CheckBox check_BrowserSettings_DB_Failed,userdata(ResizeControlsInfo) += A"zzzzzzzzzzzz!!#u:Du]kn!!#>J!!#<(z!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" + CheckBox check_BrowserSettings_DB_Failed,userdata(ResizeControlsInfo)+=A"zzzzzzzzzzzz!!#u:Du]kJ!!#>Z!!#<(z!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" - CheckBox check_BrowserSettings_SF,userdata(ResizeControlsInfo) += A"zzzzzzzzzzzz!!#N3Bk1ctAStpcCh5qOGZ8U#zzzzzzzz" - CheckBox check_BrowserSettings_SF,userdata(ResizeControlsInfo) += A"zzz!!#N3Bk1ctAStpcCh5qOGX?=jFDl!rzzzzzzzzzz!!!" - CheckBox check_BrowserSettings_SF,value= 0 + CheckBox check_BrowserSettings_SF,userdata(tabnum)="5" + CheckBox check_BrowserSettings_SF,userdata(tabcontrol)="Settings" + CheckBox check_BrowserSettings_SF,userdata(ResizeControlsInfo)=A"!!,G4!!#>J!!#>Z!!#<(z!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" + CheckBox check_BrowserSettings_SF,userdata(ResizeControlsInfo)+=A"zzzzzzzzzzzz!!#N3Bk1ctAStpcCh5qOGZ8U#zzzzzzzz" + CheckBox check_BrowserSettings_SF,userdata(ResizeControlsInfo)+=A"zzz!!#N3Bk1ctAStpcCh5qOGX?=jFDl!rzzzzzzzzzz!!!" + CheckBox check_BrowserSettings_SF,value=0 CheckBox check_channelSel_HEADSTAGE_ALL,pos={57.00,225.00},size={30.00,15.00},disable=1,proc=BSP_CheckProc_ChangedSetting CheckBox check_channelSel_HEADSTAGE_ALL,title="All" CheckBox check_channelSel_HEADSTAGE_ALL,help={"Toggle the display of all headstages"} - CheckBox check_channelSel_HEADSTAGE_ALL,userdata(tabcontrol)= "Settings" - CheckBox check_channelSel_HEADSTAGE_ALL,userdata(tabnum)= "2" - CheckBox check_channelSel_HEADSTAGE_ALL,userdata(ResizeControlsInfo)= A"!!,Ds!!#Ap!!#=S!!#<(z!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" - CheckBox check_channelSel_HEADSTAGE_ALL,userdata(ResizeControlsInfo) += A"zzzzzzzzzzzz!!#u:DuaGlAStpcCh5qOGZ8U#zzzzzzzz" - CheckBox check_channelSel_HEADSTAGE_ALL,userdata(ResizeControlsInfo) += A"zzz!!#u:DuaGlAStpcCh5qOGX?=jFDl!rzzzzzzzzzz!!!" - CheckBox check_channelSel_HEADSTAGE_ALL,value= 0 + CheckBox check_channelSel_HEADSTAGE_ALL,userdata(tabcontrol)="Settings" + CheckBox check_channelSel_HEADSTAGE_ALL,userdata(tabnum)="2" + CheckBox check_channelSel_HEADSTAGE_ALL,userdata(ResizeControlsInfo)=A"!!,Ds!!#Ap!!#=S!!#<(z!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" + CheckBox check_channelSel_HEADSTAGE_ALL,userdata(ResizeControlsInfo)+=A"zzzzzzzzzzzz!!#u:DuaGlAStpcCh5qOGZ8U#zzzzzzzz" + CheckBox check_channelSel_HEADSTAGE_ALL,userdata(ResizeControlsInfo)+=A"zzz!!#u:DuaGlAStpcCh5qOGX?=jFDl!rzzzzzzzzzz!!!" + CheckBox check_channelSel_HEADSTAGE_ALL,value=0 CheckBox check_channelSel_DA_All,pos={121.00,225.00},size={30.00,15.00},disable=1,proc=BSP_CheckProc_ChangedSetting CheckBox check_channelSel_DA_All,title="All" CheckBox check_channelSel_DA_All,help={"Toggle the display of all DA channels"} - CheckBox check_channelSel_DA_All,userdata(tabcontrol)= "Settings" - CheckBox check_channelSel_DA_All,userdata(tabnum)= "2" - CheckBox check_channelSel_DA_All,userdata(ResizeControlsInfo)= A"!!,FW!!#Ap!!#=S!!#<(z!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" - CheckBox check_channelSel_DA_All,userdata(ResizeControlsInfo) += A"zzzzzzzzzzzz!!#u:DuaGlAStpcCh5qOGZ8U#zzzzzzzz" - CheckBox check_channelSel_DA_All,userdata(ResizeControlsInfo) += A"zzz!!#u:DuaGlAStpcCh5qOGX?=jFDl!rzzzzzzzzzz!!!" - CheckBox check_channelSel_DA_All,value= 0 + CheckBox check_channelSel_DA_All,userdata(tabcontrol)="Settings" + CheckBox check_channelSel_DA_All,userdata(tabnum)="2" + CheckBox check_channelSel_DA_All,userdata(ResizeControlsInfo)=A"!!,FW!!#Ap!!#=S!!#<(z!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" + CheckBox check_channelSel_DA_All,userdata(ResizeControlsInfo)+=A"zzzzzzzzzzzz!!#u:DuaGlAStpcCh5qOGZ8U#zzzzzzzz" + CheckBox check_channelSel_DA_All,userdata(ResizeControlsInfo)+=A"zzz!!#u:DuaGlAStpcCh5qOGX?=jFDl!rzzzzzzzzzz!!!" + CheckBox check_channelSel_DA_All,value=0 CheckBox check_channelSel_AD_All,pos={188.00,225.00},size={30.00,15.00},disable=1,proc=BSP_CheckProc_ChangedSetting CheckBox check_channelSel_AD_All,title="All" CheckBox check_channelSel_AD_All,help={"Toggle the display of all AD channels"} - CheckBox check_channelSel_AD_All,userdata(tabcontrol)= "Settings" - CheckBox check_channelSel_AD_All,userdata(tabnum)= "2" - CheckBox check_channelSel_AD_All,userdata(ResizeControlsInfo)= A"!!,GL!!#Ap!!#=S!!#<(z!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" - CheckBox check_channelSel_AD_All,userdata(ResizeControlsInfo) += A"zzzzzzzzzzzz!!#u:DuaGlAStpcCh5qOGZ8U#zzzzzzzz" - CheckBox check_channelSel_AD_All,userdata(ResizeControlsInfo) += A"zzz!!#u:DuaGlAStpcCh5qOGX?=jFDl!rzzzzzzzzzz!!!" - CheckBox check_channelSel_AD_All,value= 0 + CheckBox check_channelSel_AD_All,userdata(tabcontrol)="Settings" + CheckBox check_channelSel_AD_All,userdata(tabnum)="2" + CheckBox check_channelSel_AD_All,userdata(ResizeControlsInfo)=A"!!,GL!!#Ap!!#=S!!#<(z!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" + CheckBox check_channelSel_AD_All,userdata(ResizeControlsInfo)+=A"zzzzzzzzzzzz!!#u:DuaGlAStpcCh5qOGZ8U#zzzzzzzz" + CheckBox check_channelSel_AD_All,userdata(ResizeControlsInfo)+=A"zzz!!#u:DuaGlAStpcCh5qOGX?=jFDl!rzzzzzzzzzz!!!" + CheckBox check_channelSel_AD_All,value=0 CheckBox check_pulseAver_searchFailedPulses,pos={214.00,340.00},size={119.00,15.00},disable=1,proc=PA_CheckProc_Common CheckBox check_pulseAver_searchFailedPulses,title="Search failed pulses" CheckBox check_pulseAver_searchFailedPulses,help={"Failed pulses don't have a signal above the given level in the diagonal elements"} - CheckBox check_pulseAver_searchFailedPulses,userdata(tabnum)= "4" - CheckBox check_pulseAver_searchFailedPulses,userdata(tabcontrol)= "Settings" - CheckBox check_pulseAver_searchFailedPulses,userdata(ResizeControlsInfo)= A"!!,Gf!!#Bd!!#@R!!#<(z!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" - CheckBox check_pulseAver_searchFailedPulses,userdata(ResizeControlsInfo) += A"zzzzzzzzzzzz!!#u:Du]k!!#Biz!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" - GroupBox group_pulseAver_general,userdata(ResizeControlsInfo) += A"zzzzzzzzzzzz!!#u:Du]k!!#Biz!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" + GroupBox group_pulseAver_general,userdata(ResizeControlsInfo)+=A"zzzzzzzzzzzz!!#u:Du]k!!#@4!!#<(z!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" - CheckBox check_pulseAver_showTraces,userdata(ResizeControlsInfo) += A"zzzzzzzzzzzz!!#u:Du]k!!#@4!!#<(z!!#`-A7TLfzzzzzzzzzzzzzz!!#r+D.OhkBk2=!z" + CheckBox check_pulseAver_showTraces,userdata(ResizeControlsInfo)+=A"zzzzzzzzzzzz!!#u:Du]kF!!#C#!!#B[J,fQL!!#](Aon#azzzzzzzzzzzzzz!!#o2B4uAeBk2=!z" - SetWindow kwTopWin,userdata(ResizeControlsInfo) += A"zzzzzzzzzzzz!!#u:Du]kF!!#C#!!#B[J,fQL!!#](Aon#azzzzzzzzzzzzzz!!#o2B4uAeBk2=!z" + SetWindow kwTopWin,userdata(ResizeControlsInfo)+=A"zzzzzzzzzzzz!!#u:Du]kF!!#C#!!#B[J,fQL!!#](Aon#azzzzzzzzzzzzzz!!#o2B4uAeBk2=!z" - SetWindow kwTopWin,userdata(ResizeControlsInfo) += A"zzzzzzzzzzzz!!#u:Du]kF!!#C#!!#B[J,fQL!!#](Aon#azzzzzzzzzzzzzz!!#o2B4uAeBk2=!z" + SetWindow kwTopWin,userdata(ResizeControlsInfo)+=A"zzzzzzzzzzzz!!#u:Du]kF!!#C#!!#B[J,fQL!!#](Aon#azzzzzzzzzzzzzz!!#o2B4uAeBk2=!z" - SetWindow kwTopWin,userdata(ResizeControlsInfo) += A"zzzzzzzzzzzz!!#u:Du]kF!!#C#!!#B[J,fQL!!#](Aon#azzzzzzzzzzzzzz!!#o2B4uAeBk2=!z" + SetWindow kwTopWin,userdata(ResizeControlsInfo)+=A"zzzzzzzzzzzz!!#u:Du]kF!!#C#!!#B[J,fQL!!#](Aon#azzzzzzzzzzzzzz!!#o2B4uAeBk2=!z" - SetWindow kwTopWin,userdata(ResizeControlsInfo) += A"zzzzzzzzzzzz!!#u:Du]kF!!#C#!!#B[J,fQL!!#](Aon#azzzzzzzzzzzzzz!!#o2B4uAeBk2=!z" + SetWindow kwTopWin,userdata(ResizeControlsInfo)+=A"zzzzzzzzzzzz!!#u:Du]kJz!!#N3Bk1ctJz!!#N3Bk1ct= 0, "Could not find sweep") - indices[i][0] = V_Value + indices1D[i] = V_Value >= 0 ? V_Value : NaN endfor + + Wave/Z indices = ZapNans(indices1D) endif else ASSERT(0, "Requires one of index or sweepNo") diff --git a/Packages/MIES/MIES_WaveDataFolderGetters.ipf b/Packages/MIES/MIES_WaveDataFolderGetters.ipf index 8960cef3fa..761d31d7ea 100644 --- a/Packages/MIES/MIES_WaveDataFolderGetters.ipf +++ b/Packages/MIES/MIES_WaveDataFolderGetters.ipf @@ -6334,6 +6334,29 @@ Function/WAVE GetAnaFuncDashboardColorWave(dfr) return wv End +/// @brief Return the analysis function dashboard help wave for the +/// databrowser or the sweepbrowser +Function/WAVE GetAnaFuncDashboardHelpWave(dfr) + DFREF dfr + + variable versionOfNewWave = 1 + + ASSERT(DataFolderExistsDFR(dfr), "Invalid dfr") + WAVE/T/Z/SDFR=dfr wv = dashboardHelpWave + + if(ExistsWithCorrectLayoutVersion(wv, versionOfNewWave)) + return wv + elseif(WaveExists(wv)) + // handle upgrade + else + Make/T/N=(0) dfr:dashboardHelpWave/Wave=wv + endif + + SetWaveVersion(wv, versionOfNewWave) + + return wv +End + /// @brief Return a wave with device information Function/WAVE GetDeviceInfoWave(panelTitle) string panelTitle diff --git a/Packages/Testing-MIES/UTF_HardwareMain.ipf b/Packages/Testing-MIES/UTF_HardwareMain.ipf index 681034feab..03cc31c851 100644 --- a/Packages/Testing-MIES/UTF_HardwareMain.ipf +++ b/Packages/Testing-MIES/UTF_HardwareMain.ipf @@ -815,7 +815,7 @@ End Function CheckDashboard(string device, WAVE headstageQC) - string databrowser + string databrowser, bsPanel variable numEntries, i, state databrowser = DB_FindDataBrowser(device) @@ -823,6 +823,10 @@ Function CheckDashboard(string device, WAVE headstageQC) WAVE/T/Z listWave = GetAnaFuncDashboardListWave(dfr) CHECK_WAVE(listWave, TEXT_WAVE) + // enable the dashboard + bsPanel = BSP_GetPanel(databrowser) + PGC_SetAndActivateControl(bsPanel, "check_BrowserSettings_DS", val = 1) + // Check that we have acquired some sweeps WAVE numericalValues = GetLBNumericalValues(device) WAVE/Z sweeps = GetSweepsWithSetting(numericalValues, "SweepNum")