Updating the upper limit of a second set variable limits control
Ann
Hi all,
I am just wondering is there any way to set the upper limit of a second setvariable control which will be consequently updated after I insert the value of the first setvariable and do some stuff using a button control i.e. I want the upper limit of the second setvariable will be the value of the first setvariable?
I am attacing a portion of the code to make it clear what I want to do.
#pragma TextEncoding = "MacRoman"
#pragma rtGlobals=3 // Use modern global access method and strict wave access.
Menu "Macros"
"My Joint Histo Panel Creation", MyHisData()//MyJointHisData()//MyJoinHistoPanel()
End
Function MyHisData()
Make/O/N=5000000 timeData=30+gnoise(10)
Make/O/N=5000000 energyData=1000+gnoise(10)
Variable/G gtimeBin = 50
Variable/G genergyBin = 50
JointHistogram/BINS={gtimeBin, genergyBin}/C/DEST=myJointHisData energyData, timeData
// Energy projection (ON TIME BIN AXIS)
Make/O/N=(gtimeBin) timeBinAxis
Variable/G timebin_1 = 0, timebin_2=0, energybin_1=0, energybin_2=0
Variable row, column, sum_Event=0
Make/O/N=(timebin_2-timebin_1) timeBinAxis
For (row=timebin_1; row < timebin_2; row++)
For(column=energybin_1; column<energybin_2; column++ )
sum_Event +=myJointHisData[row][column]
endfor
timeBinAxis[row] = sum_Event
sum_Event = 0
endfor
End
Function ButtonProc(ba) : ButtonControl //button for 2d image bin setting
STRUCT WMButtonAction &ba
switch( ba.eventCode )
case 2: // mouse up
// click code here
WAVE/Z timeData
WAVE/Z energyData
NVAR gtimeBin, genergyBin
//NVAR genergyBin
JointHistogram/BINS={gtimeBin, genergyBin}/C/DEST=myJointHisData timeData, energyData
case -1: // control being killed
break
endswitch
return 0
End
Window Panel00() : Panel
PauseUpdate; Silent 1 // building window...
NewPanel /W=(304,279,993,759)
ShowTools/A
SetVariable setvar0,pos={0.00,1.00},size={99.00,14.00},bodyWidth=60,title="time bin"
SetVariable setvar0,limits={0,inf,1},value= gtimeBin
SetVariable setvar1,pos={137.00,4.00},size={114.00,14.00},bodyWidth=60, title="energy bin"
SetVariable setvar1,limits={0,inf,1},value= genergyBin
Button button0,pos={16.00,30.00},size={165.00,16.00},proc=ButtonProc,title="Draw 2dImage"
//for energy projection (ON TIME BIN AXIS)
SetVariable time1SetVariableSetLimt title="time1SetVariableSet", proc=SetVarProcForbin_1Limit,value=timebin_1
SetVariable setvar2,limits={0,gtimeBin,1},value=_NUM:0 //here I want the upper limit will be the value of setvar0's value
i.e. the number of time bin axis
Display/W=(172,120,517,360)/HOST=#
AppendImage myJointHisData
ModifyImage myJointHisData ctab= {0.1,*,Red,1}
ModifyGraph margin(left)=43,margin(bottom)=43,margin(top)=43,margin(right)=43
ModifyGraph mirror=0
RenameWindow #,G0
SetActiveSubwindow ##
EndMacro
//I think this fragment of code will parse the value of setvar0's but not sure how to extract that
Function SetVarProcForbin_1Limit(sva) : SetVariableControl
STRUCT WMSetVariableAction &sva
switch( sva.eventCode )
case 1: // mouse up
case 2: // Enter key
case 3: // Live update
Variable dval = sva.dval
String sval = sva.sval
break
case -1: // control being killed
break
endswitch
return 0
End
#pragma rtGlobals=3 // Use modern global access method and strict wave access.
Menu "Macros"
"My Joint Histo Panel Creation", MyHisData()//MyJointHisData()//MyJoinHistoPanel()
End
Function MyHisData()
Make/O/N=5000000 timeData=30+gnoise(10)
Make/O/N=5000000 energyData=1000+gnoise(10)
Variable/G gtimeBin = 50
Variable/G genergyBin = 50
JointHistogram/BINS={gtimeBin, genergyBin}/C/DEST=myJointHisData energyData, timeData
// Energy projection (ON TIME BIN AXIS)
Make/O/N=(gtimeBin) timeBinAxis
Variable/G timebin_1 = 0, timebin_2=0, energybin_1=0, energybin_2=0
Variable row, column, sum_Event=0
Make/O/N=(timebin_2-timebin_1) timeBinAxis
For (row=timebin_1; row < timebin_2; row++)
For(column=energybin_1; column<energybin_2; column++ )
sum_Event +=myJointHisData[row][column]
endfor
timeBinAxis[row] = sum_Event
sum_Event = 0
endfor
End
Function ButtonProc(ba) : ButtonControl //button for 2d image bin setting
STRUCT WMButtonAction &ba
switch( ba.eventCode )
case 2: // mouse up
// click code here
WAVE/Z timeData
WAVE/Z energyData
NVAR gtimeBin, genergyBin
//NVAR genergyBin
JointHistogram/BINS={gtimeBin, genergyBin}/C/DEST=myJointHisData timeData, energyData
case -1: // control being killed
break
endswitch
return 0
End
Window Panel00() : Panel
PauseUpdate; Silent 1 // building window...
NewPanel /W=(304,279,993,759)
ShowTools/A
SetVariable setvar0,pos={0.00,1.00},size={99.00,14.00},bodyWidth=60,title="time bin"
SetVariable setvar0,limits={0,inf,1},value= gtimeBin
SetVariable setvar1,pos={137.00,4.00},size={114.00,14.00},bodyWidth=60, title="energy bin"
SetVariable setvar1,limits={0,inf,1},value= genergyBin
Button button0,pos={16.00,30.00},size={165.00,16.00},proc=ButtonProc,title="Draw 2dImage"
//for energy projection (ON TIME BIN AXIS)
SetVariable time1SetVariableSetLimt title="time1SetVariableSet", proc=SetVarProcForbin_1Limit,value=timebin_1
SetVariable setvar2,limits={0,gtimeBin,1},value=_NUM:0 //here I want the upper limit will be the value of setvar0's value
i.e. the number of time bin axis
Display/W=(172,120,517,360)/HOST=#
AppendImage myJointHisData
ModifyImage myJointHisData ctab= {0.1,*,Red,1}
ModifyGraph margin(left)=43,margin(bottom)=43,margin(top)=43,margin(right)=43
ModifyGraph mirror=0
RenameWindow #,G0
SetActiveSubwindow ##
EndMacro
//I think this fragment of code will parse the value of setvar0's but not sure how to extract that
Function SetVarProcForbin_1Limit(sva) : SetVariableControl
STRUCT WMSetVariableAction &sva
switch( sva.eventCode )
case 1: // mouse up
case 2: // Enter key
case 3: // Live update
Variable dval = sva.dval
String sval = sva.sval
break
case -1: // control being killed
break
endswitch
return 0
End
The strswitch approach below would get you started:
STRUCT WMSetVariableAction &sva
switch( sva.eventCode )
case 1: // mouse up
case 2: // Enter key
case 3: // Live update
Variable dval = sva.dval
String sval = sva.sval
strswitch(sva.ctrlName)
case "setvar1":
// do whatever is required when setvar1 changes
...
// now change the limits on setvar2
SetVariable setvar2, win=..., limits={0,dval,1}
break
case "setvar2":
// do whatever is required when setvar2 changes
...
break
endswitch
break
case -1: // control being killed
break
endswitch
return 0
end
March 17, 2020 at 10:18 am - Permalink