Find graphs where a wave is plotted
pmazzoni
//Brings to the front the graphs containing a given wave
//Given a wavename (requires full path), returns a string containing a list of window names indicating the
//graphs that contain this wave as a trace, and brings those graphs to the front.
//Written to find graphs that are blocking deletion of a wave, i.e., to
//cope with the error message "1 object(s) could not be deleted because they are in use".
//One way to use this function: select, in the data browser, the wave you are having trouble deleting;
//copy; type the function's name, FindWaveWindow(), in the command window; paste the wave name
//between the parentheses.
//Or use the function below this one, ShowWaveGraphs, which prompt the user for the name of a wave in the
//current data folder and then calls FindWaveGraphs to find graphs with that wave.
//Written by Pietro Mazzoni as an extension of a function written by Rick Gerkin
Function /S FindWaveGraphs(waveSoughtFullName)
String waveSoughtFullName
Variable i, j
String wins = WinList("*",";","WIN:1")
String win, traces, trace, windowsList, yWaveRef, xWaveRef, prevWin
windowsList = ""
prevWin = ""
for(i = 0; i < ItemsInList(wins); i += 1) //Loop over all existing windows
win=StringFromList(i, wins)
traces=TraceNameList(win, ";", 3)
for(j = 0; j < ItemsInList(wins); j += 1) //Loop over all traces in current window
trace=StringFromList(j, traces)
wave yTraceWave = TraceNameToWaveRef(win, trace)
yWaveRef = getWavesDataFolder(yTraceWave, 2)
wave xTraceWave = xWaveRefFromTrace(win, trace)
if (waveExists(xTraceWave) == 1) //Checking for this avoids errors if the window is not a graph
xWaveRef = getWavesDataFolder(xTraceWave, 2)
else
xWaveRef = ""
endIf
//Does name of wave of current trace match the wave we are looking for?
if (StringMatch(yWaveRef, waveSoughtFullName) == 1 || StringMatch(xWaveRef, waveSoughtFullName) == 1)
if (stringMatch(win, prevWin) == 0)
doWindow /F $win
windowsList += win + ";"
prevWin = win
endIf
endif //if (StringMatch(fullWaveRef, wName))
endfor //Loop over all traces in current window
endfor //Loop over all existing windows
return windowslist
End //FindWaveGraphs
//Prompts user to select a wave in current data folder. Then calls the function
//FindWaveWindows to bring to the front all graphs that contain that wave
//either as a y trace or as an x trace
//Pietro Mazzoni
Function ShowWaveGraphs()
string wName, fullName
Prompt wName, "Name of wave to find in windows", popup sortList(waveList("*", ";", ""))
doPrompt "Choose wave:", wName
if (V_flag == 1)
print "Routine stopped"
Abort
endIf
fullName = getDataFolder(1) + wName
print "Bringing to the front all graphs containing traces for the wave:", fullName
print FindWaveGraphs(fullName)
print "\rNOTE: only graphs are found. Your wave may also be displayed in tables, not found by this routine"
doWindow /H
End //ShowWaveGraphs
//Given a wavename (requires full path), returns a string containing a list of window names indicating the
//graphs that contain this wave as a trace, and brings those graphs to the front.
//Written to find graphs that are blocking deletion of a wave, i.e., to
//cope with the error message "1 object(s) could not be deleted because they are in use".
//One way to use this function: select, in the data browser, the wave you are having trouble deleting;
//copy; type the function's name, FindWaveWindow(), in the command window; paste the wave name
//between the parentheses.
//Or use the function below this one, ShowWaveGraphs, which prompt the user for the name of a wave in the
//current data folder and then calls FindWaveGraphs to find graphs with that wave.
//Written by Pietro Mazzoni as an extension of a function written by Rick Gerkin
Function /S FindWaveGraphs(waveSoughtFullName)
String waveSoughtFullName
Variable i, j
String wins = WinList("*",";","WIN:1")
String win, traces, trace, windowsList, yWaveRef, xWaveRef, prevWin
windowsList = ""
prevWin = ""
for(i = 0; i < ItemsInList(wins); i += 1) //Loop over all existing windows
win=StringFromList(i, wins)
traces=TraceNameList(win, ";", 3)
for(j = 0; j < ItemsInList(wins); j += 1) //Loop over all traces in current window
trace=StringFromList(j, traces)
wave yTraceWave = TraceNameToWaveRef(win, trace)
yWaveRef = getWavesDataFolder(yTraceWave, 2)
wave xTraceWave = xWaveRefFromTrace(win, trace)
if (waveExists(xTraceWave) == 1) //Checking for this avoids errors if the window is not a graph
xWaveRef = getWavesDataFolder(xTraceWave, 2)
else
xWaveRef = ""
endIf
//Does name of wave of current trace match the wave we are looking for?
if (StringMatch(yWaveRef, waveSoughtFullName) == 1 || StringMatch(xWaveRef, waveSoughtFullName) == 1)
if (stringMatch(win, prevWin) == 0)
doWindow /F $win
windowsList += win + ";"
prevWin = win
endIf
endif //if (StringMatch(fullWaveRef, wName))
endfor //Loop over all traces in current window
endfor //Loop over all existing windows
return windowslist
End //FindWaveGraphs
//Prompts user to select a wave in current data folder. Then calls the function
//FindWaveWindows to bring to the front all graphs that contain that wave
//either as a y trace or as an x trace
//Pietro Mazzoni
Function ShowWaveGraphs()
string wName, fullName
Prompt wName, "Name of wave to find in windows", popup sortList(waveList("*", ";", ""))
doPrompt "Choose wave:", wName
if (V_flag == 1)
print "Routine stopped"
Abort
endIf
fullName = getDataFolder(1) + wName
print "Bringing to the front all graphs containing traces for the wave:", fullName
print FindWaveGraphs(fullName)
print "\rNOTE: only graphs are found. Your wave may also be displayed in tables, not found by this routine"
doWindow /H
End //ShowWaveGraphs
Forum
Support
Gallery
Igor Pro 9
Learn More
Igor XOP Toolkit
Learn More
Igor NIDAQ Tools MX
Learn More