Updating Panel instead of creating a new one
jmas340
Command(a,b)
And my procedure is
Macro Command(a,b)
//bunch of stuff
DataPanel()
End
Window DataPanel() : Panel
PauseUpdate; Silent 1
NewPanel/W=(500,100,1200,600) as "Data"
//stuff such as
Display/W=(70,270,320,450)/HOST=# a
//bunch of stuff
DataPanel()
End
Window DataPanel() : Panel
PauseUpdate; Silent 1
NewPanel/W=(500,100,1200,600) as "Data"
//stuff such as
Display/W=(70,270,320,450)/HOST=# a
How can I do this so that when I send Command(a,b), it only updates, not creates a newpanel.
It depends on what aspect of the panel you want updated. If you have, for instance, a SetVariable control that needs an updated value, you would use the SetVariable command with the "value" keyword if you originally made it with value=_NUM:, or you would simply assign a new value to the global variable if your SetVariable is attached to a global variable.
What needs to be updated?
John Weeks
WaveMetrics, Inc.
support@wavemetrics.com
July 26, 2016 at 10:57 am - Permalink
PauseUpdate; Silent 1
NewPanel/W=(509,107,1183,569) as "PulseInfo"
ShowTools/A
Variable/G StartFreq=18
Variable/G EndFreq = 25
Variable/G startindex=1
Variable/G endindex=3
SetVariable setvar0, pos={20,31}, size = {156,14},bodywidth=77, title="Start Frequency", Value = StartFreq
SetVariable setvar1, pos={19,54}, size={160,16}, bodywidth=84, title="End Frequency", Value = EndFreq
SetVariable setvar2, pos={240,18}, size = {122,14},bodywidth=77, title="Start File", Value = startindex
SetVariable setvar3, pos={245,44}, size={118,16}, bodywidth=84, title="End File", Value = endindex
Button button0, pos={50,81},size{80,30}, proc=ButtonProc, title="Gaussian Fit"
Button Button1, pos={274,15}, size={90,30}, proc=ButtonProc_average,tiele = "Average Pulse"
ValDisplay valdisp0,pos={112,222}, size={124,14}, bodyWidth=60, title = "Pulse Center"
ValDisplay valdisp0,limits={0,0,0},barmisc={0,1000}, value = centerfreqpulse
ValDisplay valdisp1,pos={443,222}, size={115,14}, bodyWidth=60, title = "Ref Center"
ValDisplay valdisp1,limits={0,0,0},barmisc={0,1000}, value = centerfreqref
Display/W=(68,266,320,445)/HOST=# $fftpulse
ModifyGraph frameStyle=1
SetAxis left 0,200; DelayUpdate
SetAxis bottom 1.8E7,2.8E7
RenameWindow #, G0
SetActiveSubwindow ##
Display/W=(375,266,627,445)/HOST=# $fftreference
ModifyGraph frameStyle=1
SetAxis left 0,200; DelayUpdate
SetAxis bottom 1.8E7,2.8E7
RenameWindow #, G1
SetActiveSubwindow ##
Display/W=(375,13,627,200)/HOST=# averagedwave
ModifyGraph frameStyle=1
SetAxis left 0,20; DelayUpdate
SetAxis bottom 1.8E7,2.8E7
RenameWindow #, G2
SetActiveSubwindow ##
EndMacro
July 26, 2016 at 11:13 am - Permalink
string file
Variable timestamp, index, npoints
Variable/G npoints1 = npoints
string newpulse, newreference
string/G fftpulse
string/G fftreference
string diff
LoadDataset("PathSelfHet", file, "pulse")
LoadDataset("PathSelfHet", file, "reference")
sprintf newpulse, "%s%d" "pulse", index
sprintf newreference, "%s%d" "reference", index
duplicate /O pulse, $newpulse
duplicate /O reference, $newreference
SetScale/P x 0, timestamp, "", $newpulse
SetScale/P x 0, timestamp, "", $newreference
sprintf fftpulse, "%s%d" "fftpulse", index
sprintf fftreference, "%s%d" "fftreference", index
FFT/OUT=4/DEST= $fftpulse $newpulse
FFT/OUT=4/DEST= $fftreference $newreference
$fftpulse[0]=nan
$fftreference[0]=nan
sprintf diff, "%s%d","diffpulse", index
Variable fftsize = npoints/2
make/N=(fftsize) $diff
$diff = $fftreference-$fftpulse
PulseInfo()
End
July 26, 2016 at 11:15 am - Permalink
* Learn to use Functions not Macros. I believe Macros are mostly considered obsolete except for backward compatibility.
* Learn to use DataFolderDFR functions to set or define locations of waves. These references to folders will help keep the code "transportable" as you move from one folder to another or one experiment to another and accidentally change the location of the current data folder.
* Put return values at the end of the Functions (e.g. return 0). This is good programming practice.
* Replace the Window PulseInfo() with a function call that is a bit more understandable, e.g. Function ShowPulseInfoPanel(). Again, good programming practice.
* Correspondingly remove all the unnecessary PauseUpdate, DelayUpdate, and Silent 1 commands in the ShowPulseInfoPanel() function. They are only there when the panel is being generated in a "one-step-at-a-time" approach as per a command line entree. They are useless in function calls.
Secondly, as for the question about updating graph displays, I have a suggestion and some observations.
* Suggestion: Display your graphs separately and debug their operation BEFORE you embed them in a panel. Graphs must operate independently of a panel anyway (as you have now learned).
* Observations: Your panel/graph display code has no definitions for the "$" waves that are to be displayed in the graphs. This means, they are basically non-existent references. Also, your Pulse code plays jostles around with "$" references to strings as wave names. This is confusing at best and potentially damage prone at worse. Any of these mistakes could leave the code "hanging" for lack of a proper reference point to wave, because that wave will not really exist at run time or it will exist somewhere in some location that is not the current data folder or it will not even be defined in the right way even when it does exist where it is supposed to exist.
--
J. J. Weimer
Chemistry / Chemical & Materials Engineering, UAH
July 26, 2016 at 11:42 am - Permalink
If you are creating new waves, use AppendToGraph to add them to your graph:
AppendToGraph/W=$mygraph#G0 newwave
It will take a different function from the one that built the panel with the graphs. I have left some things that you will have to figure out. It is a good idea, when you create the panel to give it a name that isn't likely to be the same as someone else's name:
NewPanel/N=jmas340Panel ...
and then you can use a hardcoded name in the update function:
AppendToGraph/W=jmas340Panel#G0 ...
John Weeks
WaveMetrics, Inc.
support@wavemetrics.com
July 26, 2016 at 04:13 pm - Permalink