source: sans/Dev/trunk/NCNR_User_Procedures/Reduction/VSANS/V_Test_RAW_Panel.ipf @ 979

Last change on this file since 979 was 979, checked in by srkline, 7 years ago

more additions to start the work file flow of converting RAW folder to a WORK folder. Raw_to_Work will be the function that sequentially applies the corrections. All corrections can be turned on/off with preferences.

File size: 23.2 KB
Line 
1#pragma rtGlobals=3             // Use modern global access method and strict wave access.
2#pragma version=1.0
3#pragma IgorVersion=6.1
4
5//
6// this will become the equivalent of "RawWindowHook"
7//
8// Procedures to display the detector data along with whatever visualization tools
9// necessary to understand the data
10//
11
12
13// TODO
14//
15// -- have the status automatically fill in when a new file is loaded, rather than needing a click of the "status" button
16// -- need a place somewhere to show the currently displayed folder
17// -- checkboxes for "active" corrections?
18// -- display of Q, counts, QxQy, X and Y
19// -- do I need a color bar? or is this not used at all? I like it to be there, or the colors are a waste of information
20//              (then... where do I put the color bar?)
21// -- define the "hook" function, and attach it to the panel (or the main detector subwindow?)
22//
23
24
25//
26// call this after loading data to either draw the data display panel or to update the contents
27//
28// TODO
29// -- make sure that the "type" input is correctly used for the updating of the data, values, etc.
30// -- add a procedure to define the global variables for pos, counts, QxQy, etc.
31//
32Proc UpdateDisplayInformation(type)
33        String type
34       
35        DoWindow/F VSANS_Data
36        Print V_flag
37        if(V_flag==0)
38       
39                VSANSDataPanelGlobals()
40               
41                VSANS_DataPanel()               //draws the panel
42                // fake a click on all three tabs - to populate the data
43                FakeTabClick(2)
44                FakeTabClick(1)
45                FakeTabClick(0)
46        endif
47       
48        // TODO: update the information here  - in either case
49        // what isn't automatically picked up? What is "stale" on the display?
50        String/G root:Packages:NIST:VSANS:Globals:gCurDispType = type
51//      DoWindow/T VSANS_Data,type + " VSANS_Data"
52end
53
54//
55// creates/initializes the globals for display of the data panel
56//
57Function VSANSDataPanelGlobals()
58
59        SetDataFolder root:Packages:NIST:VSANS:Globals
60       
61        Variable/G gXPos=0
62        Variable/G gYPos=0
63        Variable/G gQX=0
64        Variable/G gQY=0
65        Variable/G gQQ=0
66        Variable/G gNCounts=0
67        String/G gCurDispFile = "default string"
68        String/G gCurTitle = ""
69        String/G gCurDispType = ""
70       
71        SetDataFolder root:
72End
73
74// TODO
75//
76// -- fill in the proper window title in the DoWindow/T command
77// -- add help text for all of the controls
78//
79Window VSANS_DataPanel() : Panel
80        PauseUpdate; Silent 1           // building window...
81        NewPanel /W=(37,45,1038,719) /N=VSANS_Data
82        ShowTools/A
83        ModifyPanel cbRGB=(65535,60076,49151)
84
85        String curFolder = root:Packages:NIST:VSANS:Globals:gCurDispType
86        DoWindow/T VSANS_Data,curFolder + " VSANS_Data"
87        SetWindow VSANS_Data,hook(dataHook)=VSANSDataHook,hookevents=2
88       
89        SetDrawLayer UserBack
90        SetDrawEnv linethick= 2,dash= 1,fillpat= 0
91        DrawRect 200,70,310,160
92        SetDrawEnv linethick= 2,dash= 1,fillpat= 0
93        DrawRect 320,70,430,160
94        SetDrawEnv linethick= 2,dash= 1,fillpat= 0
95        DrawRect 440,70,550,160
96       
97        SetDrawEnv fsize= 18
98        DrawText 230,115,"Front"
99        SetDrawEnv fsize= 18
100        DrawText 348,115,"Middle"
101        SetDrawEnv fsize= 18
102        DrawText 476,115,"Back"
103       
104        ToolsGrid visible=1
105
106
107        TabControl tab0,pos={13,41},size={572,617},proc=VDataTabProc,tabLabel(0)="Front"
108        TabControl tab0,tabLabel(1)="Middle",tabLabel(2)="Back",value= 2
109
110// on the side 
111        Button button_status,pos={607,146},size={70,20},proc=StatusButtonProc,title="Status"
112        Button button_IvsQ,pos={689,113},size={70,20},proc=IvsQPanelButtonProc,title="I vs. Q"
113        Button button_file_m,pos={619,55},size={50,20},proc=File_m_ButtonProc,title="File <"
114        Button button_file_p,pos={679,55},size={50,20},proc=File_p_ButtonProc,title="File >"
115        Button button_log,pos={689,146},size={70,20},proc=LogLinButtonProc,title="isLin",userData="0"
116        Button button_tab_p,pos={648,81},size={50,20},proc=Tab_p_ButtonProc,title="Tab >"
117        Button button_isolate,pos={606,114},size={70,20},proc=IsolateButtonProc,title="Isolate"
118
119        TitleBox title_file,pos={606,178},size={76,20},variable= file_name
120        TitleBox title_status,pos={606,210},size={76,20},variable= root:Packages:NIST:VSANS:Globals:gCurDispFile
121       
122        Button button_tagFile,pos={603,412},size={70,20},proc=TagFileButtonProc,title="Tag File"
123        Button button_BeamCtr,pos={603,450},size={70,20},proc=BeamCtrButtonProc,title="Beam Ctr"
124
125// on the tabs, always visible
126        TitleBox title_xy,pos={24,71},size={76,20},variable= file_name
127        Slider slider_hi,pos={558,224},size={16,80},proc=HiMapSliderProc
128        Slider slider_hi,limits={0,1,0},value= 1,ticks= 0
129        Slider slider_lo,pos={558,315},size={16,80},proc=LowMapSliderProc
130        Slider slider_lo,limits={0,1,0},value= 0,ticks= 0
131
132        SetVariable xpos,pos={22,97},size={50,17},title="X "
133        SetVariable xpos,limits={-Inf,Inf,0},value= root:Packages:NIST:VSANS:Globals:gXPos
134        SetVariable xpos,help={"x-position on the detector"},frame=0,noedit=1
135        SetVariable ypos,pos={22,121},size={50,17},title="Y "
136        SetVariable ypos,limits={-Inf,Inf,0},value= root:Packages:NIST:VSANS:Globals:gYPos
137        SetVariable ypos,help={"y-position on the detector"},frame=0,noedit=1
138        SetVariable counts,pos={22,151},size={150,17},title="Counts "
139        SetVariable counts,limits={-Inf,Inf,0},value= root:Packages:NIST:VSANS:Globals:gNCounts
140        SetVariable counts,help={"Neutron counts"},frame=0,noedit=1
141        SetVariable qxval,pos={83,94},size={85,17},title="qX"
142        SetVariable qxval,help={"q value in the x-direction on the detector"},frame=0,noedit=1
143        SetVariable qxval,format="%+7.5f",limits={-Inf,Inf,0},value= root:Packages:NIST:VSANS:Globals:gQX
144        SetVariable qyval,pos={83,113},size={85,17},title="qY"
145        SetVariable qyval,help={"q value in the y-direction on the detector"},frame=0,noedit=1
146        SetVariable qyval,format="%+7.5f",limits={-Inf,Inf,0},value= root:Packages:NIST:VSANS:Globals:gQY
147        SetVariable q_pos,pos={83,132},size={85,17},title="q "
148        SetVariable q_pos,help={"q-value on the detector at (x,y)"},format="%+7.5f"
149        SetVariable q_pos,limits={-Inf,Inf,0},value= root:Packages:NIST:VSANS:Globals:gQQ,frame=0,noedit=1
150       
151        Make/O/D tmp_asdf
152        // for back panels (in pixels?)
153        Display/W=(50,185,545,620)/HOST=# tmp_asdf
154        RenameWindow #,det_panelsB
155        ModifyGraph mode=2              // mode = 2 = dots
156        ModifyGraph marker=19
157        ModifyGraph rgb=(0,0,0)
158        ModifyGraph tick=2,mirror=1
159        Label left "pixels"
160        Label bottom "pixels"   
161        SetActiveSubwindow ##
162       
163        // for middle panels (in pixels?)       
164        Display/W=(50,185,545,620)/HOST=# tmp_asdf
165        RenameWindow #,det_panelsM
166        ModifyGraph mode=2              // mode = 2 = dots
167        ModifyGraph marker=19
168        ModifyGraph rgb=(0,0,0)
169        ModifyGraph tick=2,mirror=1
170        Label left "pixels"
171        Label bottom "pixels"   
172        SetActiveSubwindow ##
173       
174        // for front panels (in pixels?)       
175        Display/W=(50,185,545,620)/HOST=# tmp_asdf
176        RenameWindow #,det_panelsF
177        ModifyGraph mode=2              // mode = 2 = dots
178        ModifyGraph marker=19
179        ModifyGraph rgb=(0,0,0)
180        ModifyGraph tick=2,mirror=1
181        Label left "pixels"
182        Label bottom "pixels"   
183        SetActiveSubwindow ##
184       
185EndMacro
186
187//
188// event code 4 = mouse moved
189//
190// mouse moved is the only event that I really care about for the data display.
191//
192// TODO
193// -- figure out how to respond only to events in the main window
194// -- figure out which is the correct image to respond "from"
195//
196Function VSANSDataHook(s)
197        STRUCT WMWinHookStruct &s
198
199        Variable hookResult = 0
200
201        switch(s.eventCode)
202                case 0:                         // Activate
203                        // Handle activate
204//                      Print "Activate"
205                        break
206
207                case 1:                         // Deactivate
208                        // Handle deactivate
209                        break
210                       
211                case 3:         //mouse down
212//                      Print "mouse down"
213                        break
214                       
215                case 4:         // mouse moved
216                        NVAR xloc = root:Packages:NIST:VSANS:Globals:gXPos
217                        NVAR yloc = root:Packages:NIST:VSANS:Globals:gYPos
218                        NVAR gQX = root:Packages:NIST:VSANS:Globals:gQX
219                        NVAR gQY = root:Packages:NIST:VSANS:Globals:gQY
220                        NVAR gQQ = root:Packages:NIST:VSANS:Globals:gQQ
221                        NVAR gNCounts = root:Packages:NIST:VSANS:Globals:gNCounts
222                        SVAR gCurDispFile = root:Packages:NIST:VSANS:Globals:gCurDispFile
223                        SVAR gCurDispType = root:Packages:NIST:VSANS:Globals:gCurDispType               //the current folder
224                        Variable xaxval,yaxval,tab
225                       
226                        // is the mouse location within the "main" display window?
227                        // if so, do something, if not, do nothing?
228                        // right now, the "main" display is at (50,185,545,620). its name depends on the active tab
229                       
230//                              xloc = s.mouseLoc.h
231//                              yloc = s.mouseLoc.v
232
233//                      if out of bounds, exit now
234//              TODO - currently the values are hard-wired. eliminate this later if the size of the graph changes
235                        if(s.mouseLoc.h < 50 || s.mouseLoc.h > 545 || s.mouseLoc.v < 185 || s.mouseLoc.v > 620)
236                                break
237                        endif   
238                       
239//                      if(in bounds)
240//                              get the point location
241//                              update the globals --
242//                              but which data instance am I pointing to?
243//                              deduce the carriage and panel, and calculate Q
244//                      endif
245
246                        GetWindow $s.winName activeSW
247                        String activeSubwindow = S_value                // returns something like: "VSANS_Data#det_panelsF"
248                               
249                        xaxval= AxisValFromPixel("","bottom",s.mouseLoc.h)
250                        yaxval= AxisValFromPixel("","left",s.mouseLoc.v)
251                        xloc = round(xaxval)
252                        yloc = round(yaxval)
253                       
254                        // which tab is selected? -this is the main graph panel (subwindow may not be the active one!)
255                        ControlInfo/W=VSANS_Data tab0
256                        tab = V_Value
257                        if(tab == 0)
258                                activeSubwindow = "VSANS_Data#det_panelsF"
259                        elseif (tab == 1)
260                                activeSubwindow = "VSANS_Data#det_panelsM"
261                        else
262                                activeSubwindow = "VSANS_Data#det_panelsB"
263                        endif
264                       
265                        // which images are here?
266                        String detStr="",imStr,carriageStr
267                        String currentImageRef
268                        String imageList = ImageNameList(activeSubwindow,";")
269                        Variable ii,nIm,testX,testY,xctr,yctr,sdd,lam,pixSizeX,pixSizeY
270                        nIm = ItemsInList(imageList,";")
271                        gCurDispFile = imageList
272                        if(nIm==0)
273                                break           //problem, get out
274                        endif
275
276                        // images were added in the order TBLR, so look back through in the order RLBT, checking each to see if
277                        // the xy value is found on that (scaled) array
278                                               
279                        // loop backwards through the list of panels (may only be one if on the back)
280                        for(ii=nIm-1;ii>=0;ii-=1)
281                                Wave w = ImageNameToWaveRef(activeSubwindow,StringFromList(ii, imageList,";"))
282                               
283                                // which, if any image is the mouse xy location on?
284                                // use a multidemensional equivalent to x2pnt: (ScaledDimPos - DimOffset(waveName, dim))/DimDelta(waveName,dim)
285                                testX = trunc( (xloc - DimOffset(w,0))/DimDelta(w,0) )
286                                testY = trunc( (yloc - DimOffset(w,1))/DimDelta(w,1) )
287                               
288                                if( (testX > 0 && testX < DimSize(w,0)) && (testY > 0 && testY < DimSize(w,1)) )
289                                        // we're in-bounds on this wave
290                                       
291                                        // count value to the global
292                                        gNCounts = w[testX][testY]
293                                       
294                                        // deduce the detector panel
295                                        currentImageRef = StringFromList(ii, imageList,";")     //the image instance ##
296                                        // string is "data", or "data#2" etc. - so this returns "", "1", "2", or "3"
297                                        imStr = StringFromList(1, currentImageRef,"#")         
298                                        carriageStr = activeSubWindow[strlen(activeSubWindow)-1]
299                                       
300                                        if(cmpstr(carriageStr,"B")==0)
301                                                detStr = carriageStr
302                                        else
303                                                if(strlen(imStr)==0)
304                                                        imStr = "9"                     // a dummy value so I can replace it later
305                                                endif
306                                                detStr = carriageStr+imStr              // "F2" or something similar
307                                                detStr = ReplaceString("9", detStr, "T")        // ASSUMPTION :::: instances 0123 correspond to TBLR
308                                                detStr = ReplaceString("1", detStr, "B")        // ASSUMPTION :::: this is the order that the panels
309                                                detStr = ReplaceString("2", detStr, "L")        // ASSUMPTION :::: are ALWAYS added to the graph
310                                                detStr = ReplaceString("3", detStr, "R")        // ASSUMPTION ::::
311                                        endif
312                                        gCurDispFile = detStr
313
314                                        // now figure out q
315                                        // calculate the q-values, will be different depending on which panel is up (pixel size, geometry, etc.)
316                                        // TODO: !!!! get rid of the hard-wired values
317                                        // TODO: be sure that the units from HDF are what I expect
318                                        // TODO: beam center XY are pixels in the file, expected in the function, but are better suited for mm or cm
319                                        // TODO: units of xy pixel size are likely wrong
320                                        xctr = V_getDet_beam_center_x(gCurDispType,detStr)              //written in pixels
321                                        yctr = V_getDet_beam_center_y(gCurDispType,detStr)
322                                        sdd = V_getDet_distance(gCurDispType,detStr)    / 100   //written in cm, pass in meters
323                                        lam = V_getVSWavelength(gCurDispType)           //A
324                                        pixSizeX = V_getDet_x_pixel_size(gCurDispType,detStr)/10                // written mm? need cm
325                                        pixSizeY = V_getDet_y_pixel_size(gCurDispType,detStr)/10                // written mm? need cm
326                                       
327                                        gQQ = V_CalcQval(xaxval+1,yaxval+1,xctr,yctr,sdd,lam,pixSizeX,pixSizeY)
328                                        gQX = V_CalcQX(xaxval+1,yaxval+1,xctr,yctr,sdd,lam,pixSizeX,pixSizeY)
329                                        gQY = V_CalcQY(xaxval+1,yaxval+1,xctr,yctr,sdd,lam,pixSizeX,pixSizeY)
330
331                                        ii = -1         //look no further, set ii to bad value to exit the for loop
332                                endif   //end if(mouse is over a detector panel)
333                        endfor          // end loop over list of displayed images
334               
335                        break
336                       
337                // And so on . . .
338        endswitch
339
340        return hookResult               // 0 if nothing done, else 1
341End
342
343//
344//lots to to here:
345//
346// - 1 - display the appropriate controls for each tab, and hide the others
347// - 2 - display the correct detector data for each tab, and remove the others from the graph
348// -----?? can I draw 3 graphs, and just put the right one on top?? move the other two to the side?
349//
350//
351// TODO
352//  -- add all of the controls of the VCALC panel (log scaling, adjusting the axes, etc.)
353//  x- get the panel to be correctly populated first, rather than needing to click everywhere to fill in
354//  x- remove the dependency on VCALC being initialized first, and using dummy waves from there...
355//
356Function VDataTabProc(tca) : TabControl
357        STRUCT WMTabControlAction &tca
358
359        switch( tca.eventCode )
360                case 2: // mouse up
361                        Variable tab = tca.tab
362               
363//                      SetDataFolder root:Packages:NIST:VSANS:VCALC
364                        SetDataFolder root:
365                        RemoveFromGraph/Z /W=VSANS_Data#det_panelsB tmp_asdf
366                        RemoveFromGraph/Z /W=VSANS_Data#det_panelsM tmp_asdf
367                        RemoveFromGraph/Z /W=VSANS_Data#det_panelsF tmp_asdf
368                        SetDataFolder root:
369                       
370                        if(tab==2)
371                                //SetDataFolder root:Packages:NIST:VSANS:VCALC:Back
372                                //Wave det_B
373                                SetDataFolder root:Packages:NIST:VSANS:RAW:entry:entry:instrument:detector_B
374                                Wave det_B=data
375                                CheckDisplayed /W=VSANS_Data#det_panelsB det_B
376                                if(V_flag == 0)
377                                        AppendImage/W=VSANS_Data#det_panelsB det_B
378//                                      ModifyImage/W=VSANS_Data#det_panelsB det_B ctab= {*,*,ColdWarm,0}
379                                        ModifyImage/W=VSANS_Data#det_panelsB ''#0 ctab= {*,*,ColdWarm,0}
380                                endif
381                                MoveSubWindow/W=VSANS_Data#det_panelsB fnum=(50,185,545,620)
382                                MoveSubWindow/W=VSANS_Data#det_panelsM fnum=(320,70,430,160)
383                                MoveSubWindow/W=VSANS_Data#det_panelsF fnum=(200,70,310,160)
384                               
385                                SetActiveSubWindow VSANS_Data#det_panelsB
386                                SetDataFolder root:
387                        endif
388       
389                        if(tab==1)
390                                //SetDataFolder root:Packages:NIST:VSANS:VCALC:Middle
391                                //Wave det_MR,det_ML,det_MB,det_MT
392                                SetDataFolder root:Packages:NIST:VSANS:RAW:entry:entry:instrument:detector_ML
393                                Wave det_ML=data
394                                SetDataFolder root:Packages:NIST:VSANS:RAW:entry:entry:instrument:detector_MR
395                                Wave det_MR=data
396                                SetDataFolder root:Packages:NIST:VSANS:RAW:entry:entry:instrument:detector_MT
397                                Wave det_MT=data
398                                SetDataFolder root:Packages:NIST:VSANS:RAW:entry:entry:instrument:detector_MB
399                                Wave det_MB=data
400                                CheckDisplayed /W=VSANS_Data#det_panelsM det_MR
401                                if(V_flag == 0)
402                                        AppendImage/W=VSANS_Data#det_panelsM det_MT             //order is important here to get LR on "top" of display
403                                        AppendImage/W=VSANS_Data#det_panelsM det_MB
404                                        AppendImage/W=VSANS_Data#det_panelsM det_ML
405                                        AppendImage/W=VSANS_Data#det_panelsM det_MR
406//                                      ModifyImage/W=VSANS_Data#det_panelsM det_MT ctab= {*,*,ColdWarm,0}
407//                                      ModifyImage/W=VSANS_Data#det_panelsM det_MB ctab= {*,*,ColdWarm,0}
408//                                      ModifyImage/W=VSANS_Data#det_panelsM det_ML ctab= {*,*,ColdWarm,0}
409//                                      ModifyImage/W=VSANS_Data#det_panelsM det_MR ctab= {*,*,ColdWarm,0}
410                                        ModifyImage/W=VSANS_Data#det_panelsM ''#0 ctab= {*,*,ColdWarm,0}                // ''#n means act on the nth image (there are 4)
411                                        ModifyImage/W=VSANS_Data#det_panelsM ''#1 ctab= {*,*,ColdWarm,0}
412                                        ModifyImage/W=VSANS_Data#det_panelsM ''#2 ctab= {*,*,ColdWarm,0}
413                                        ModifyImage/W=VSANS_Data#det_panelsM ''#3 ctab= {*,*,ColdWarm,0}
414                                endif
415                                MoveSubWindow/W=VSANS_Data#det_panelsM fnum=(50,185,545,620)
416                                MoveSubWindow/W=VSANS_Data#det_panelsB fnum=(440,70,550,160)
417                                MoveSubWindow/W=VSANS_Data#det_panelsF fnum=(200,70,310,160)
418                               
419                                SetActiveSubWindow VSANS_Data#det_panelsM
420                                SetDataFolder root:
421                        endif
422
423                        if(tab==0)
424                                //SetDataFolder root:Packages:NIST:VSANS:VCALC:Front
425                                //Wave det_FL,det_FR,det_FT,det_FB
426                                SetDataFolder root:Packages:NIST:VSANS:RAW:entry:entry:instrument:detector_FL
427                                Wave det_FL=data
428                                SetDataFolder root:Packages:NIST:VSANS:RAW:entry:entry:instrument:detector_FR
429                                Wave det_FR=data
430                                SetDataFolder root:Packages:NIST:VSANS:RAW:entry:entry:instrument:detector_FT
431                                Wave det_FT=data
432                                SetDataFolder root:Packages:NIST:VSANS:RAW:entry:entry:instrument:detector_FB
433                                Wave det_FB=data
434                                CheckDisplayed /W=VSANS_Data#det_panelsF det_FL
435                                if(V_flag == 0)
436                                        AppendImage/W=VSANS_Data#det_panelsF det_FT
437                                        AppendImage/W=VSANS_Data#det_panelsF det_FB
438                                        AppendImage/W=VSANS_Data#det_panelsF det_FL
439                                        AppendImage/W=VSANS_Data#det_panelsF det_FR
440//                                      ModifyImage/W=VSANS_Data#det_panelsF det_FT ctab= {*,*,ColdWarm,0}
441//                                      ModifyImage/W=VSANS_Data#det_panelsF det_FB ctab= {*,*,ColdWarm,0}
442//                                      ModifyImage/W=VSANS_Data#det_panelsF det_FL ctab= {*,*,ColdWarm,0}
443//                                      ModifyImage/W=VSANS_Data#det_panelsF det_FR ctab= {*,*,ColdWarm,0}
444                                        ModifyImage/W=VSANS_Data#det_panelsF ''#0 ctab= {*,*,ColdWarm,0}
445                                        ModifyImage/W=VSANS_Data#det_panelsF ''#1 ctab= {*,*,ColdWarm,0}
446                                        ModifyImage/W=VSANS_Data#det_panelsF ''#2 ctab= {*,*,ColdWarm,0}
447                                        ModifyImage/W=VSANS_Data#det_panelsF ''#3 ctab= {*,*,ColdWarm,0}
448                                endif
449                                MoveSubWindow/W=VSANS_Data#det_panelsF fnum=(50,185,545,620)
450                                MoveSubWindow/W=VSANS_Data#det_panelsB fnum=(440,70,550,160)
451                                MoveSubWindow/W=VSANS_Data#det_panelsM fnum=(320,70,430,160)
452                               
453                                SetActiveSubWindow VSANS_Data#det_panelsF
454                                SetDataFolder root:
455                        endif
456                       
457                                               
458                        break
459                case -1: // control being killed
460                        break
461        endswitch
462
463        return 0
464End
465
466
467// fake click on each tab to populate the data
468Function FakeTabClick(tab)
469        Variable tab
470       
471        STRUCT WMTabControlAction tca
472
473        tca.eventCode = 2               //fake mouse up
474        tca.tab = tab
475        VDataTabProc(tca)
476       
477        TabControl tab0,win=VSANS_Data,value= tab               //select the proper tab
478        return(0)
479End
480
481// TODO
482//
483// move one file number back
484//
485Function File_m_ButtonProc(ba) : ButtonControl
486        STRUCT WMButtonAction &ba
487
488        switch( ba.eventCode )
489                case 2: // mouse up
490                        // click code here
491                        break
492                case -1: // control being killed
493                        break
494        endswitch
495
496        return 0
497End
498
499// TODO
500//
501// move one file number forward
502//
503Function File_p_ButtonProc(ba) : ButtonControl
504        STRUCT WMButtonAction &ba
505
506        switch( ba.eventCode )
507                case 2: // mouse up
508                        // click code here
509                        break
510                case -1: // control being killed
511                        break
512        endswitch
513
514        return 0
515End
516
517//
518// button that mimics a click on the tab, cycling through the tabs 0->1->2->0 etc.
519// only goes one direction
520//
521Function Tab_p_ButtonProc(ba) : ButtonControl
522        STRUCT WMButtonAction &ba
523
524        switch( ba.eventCode )
525                case 2: // mouse up
526                        // click code here
527                        ControlInfo/W=VSANS_Data tab0
528                       
529                        V_Value += 1
530                        if(V_Value == 3)
531                                V_Value = 0             //reset to 0
532                        endif
533                        FakeTabClick(V_Value)
534                        break
535                case -1: // control being killed
536                        break
537        endswitch
538
539        return 0
540End
541
542// TODO
543//
544// isolates a single panel to allow a better view of the details
545// useful for T/B panels which are partially blocked from view
546//
547// will open a separate graph or panel to display the selected detector
548// (lots to do here, depending what is necessary for instrument troubleshooting)
549// - like being able to turn corrections on/off and view with different axes (pix, mm, Q)
550//
551Function IsolateButtonProc(ba) : ButtonControl
552        STRUCT WMButtonAction &ba
553
554        switch( ba.eventCode )
555                case 2: // mouse up
556                        // click code here
557                        break
558                case -1: // control being killed
559                        break
560        endswitch
561
562        return 0
563End
564
565// TODO
566//
567// opens a separate panel with the I(q) representation of the data
568// ? controls here to select how the data is processed/grouped/saved, etc.
569//
570Function IvsQPanelButtonProc(ba) : ButtonControl
571        STRUCT WMButtonAction &ba
572
573        switch( ba.eventCode )
574                case 2: // mouse up
575                        // click code here
576                        break
577                case -1: // control being killed
578                        break
579        endswitch
580
581        return 0
582End
583
584// TODO
585//
586// gets the status of the currently displayed file and dumps it to the panel (not the cmd window)
587// - lots to decide here about what is the important stuff to display. There's a lot more information now
588//
589Function StatusButtonProc(ba) : ButtonControl
590        STRUCT WMButtonAction &ba
591
592        switch( ba.eventCode )
593                case 2: // mouse up
594                        // click code here
595                        break
596                case -1: // control being killed
597                        break
598        endswitch
599
600        return 0
601End
602
603
604// TODO
605// toggle the (z) value of the display log/lin
606//
607Function LogLinButtonProc(ba) : ButtonControl
608        STRUCT WMButtonAction &ba
609
610        switch( ba.eventCode )
611                case 2: // mouse up
612                        // click code here
613                       
614                        // which tab is active? does it matter - or do I log-scale everything?
615                        // log/lin current state is in the S_UserData string (0=linear, 1=log)
616                        ControlInfo/W=VSANS_Data button_log
617                        Variable curState,newState
618                        String newStateStr,newTitleStr
619                       
620                        curState = str2num(S_UserData)
621                       
622                        if(curState == 0)
623                                newState = 1
624                                newStateStr="1"
625                                newTitleStr = "isLog"
626                        else
627                                newState = 0
628                                newStateStr="0"
629                                newTitleStr = "isLin"
630                        endif
631                       
632                        // update the button and the global value
633                        Button button_log,userData=newStateStr,title=newTitleStr
634                        NVAR state = root:Packages:NIST:VSANS:Globals:gIsLogScale
635                        state = newState
636                       
637                        // on the front:                       
638                        ModifyImage/W=VSANS_Data#det_panelsF ''#0 log=newState
639                        ModifyImage/W=VSANS_Data#det_panelsF ''#1 log=newState
640                        ModifyImage/W=VSANS_Data#det_panelsF ''#2 log=newState
641                        ModifyImage/W=VSANS_Data#det_panelsF ''#3 log=newState
642                        //on the middle:
643                        ModifyImage/W=VSANS_Data#det_panelsM ''#0 log=newState
644                        ModifyImage/W=VSANS_Data#det_panelsM ''#1 log=newState
645                        ModifyImage/W=VSANS_Data#det_panelsM ''#2 log=newState
646                        ModifyImage/W=VSANS_Data#det_panelsM ''#3 log=newState
647                        // on the back:
648                        ModifyImage/W=VSANS_Data#det_panelsB ''#0 log=newState
649
650                        break
651                case -1: // control being killed
652                        break
653        endswitch
654
655        return 0
656End
657
658// TODO
659// possibly function to "tag" files right here in the disaply with things
660// like their intent, or other values that reduction will need,
661Function TagFileButtonProc(ba) : ButtonControl
662        STRUCT WMButtonAction &ba
663
664        switch( ba.eventCode )
665                case 2: // mouse up
666                        // click code here
667                        DoAlert 0, "TagFileButtonProc(ba) unfinished"
668                       
669                               
670                        break
671                case -1: // control being killed
672                        break
673        endswitch
674
675        return 0
676End
677
678//TODO
679//
680//link this to the beam center finding panel
681//
682Function BeamCtrButtonProc(ba) : ButtonControl
683        STRUCT WMButtonAction &ba
684
685        switch( ba.eventCode )
686                case 2: // mouse up
687                        // click code here
688                        break
689                case -1: // control being killed
690                        break
691        endswitch
692
693        return 0
694End
695
696// TODO
697//
698// link this slider to the "high" end of the color mapping for whatever is currently displayed
699//
700// -- see Buttons.ipf for the old SANS implementation
701//
702Function HiMapSliderProc(sa) : SliderControl
703        STRUCT WMSliderAction &sa
704
705        switch( sa.eventCode )
706                case -1: // control being killed
707                        break
708                default:
709                        if( sa.eventCode & 1 ) // value set
710                                Variable curval = sa.curval
711                        endif
712                        break
713        endswitch
714
715        return 0
716End
717
718// TODO
719//
720// link this slider to the "low" end of the color mapping for whatever is currently displayed
721//
722// -- see Buttons.ipf for the old SANS implementation
723//
724Function LowMapSliderProc(sa) : SliderControl
725        STRUCT WMSliderAction &sa
726
727        switch( sa.eventCode )
728                case -1: // control being killed
729                        break
730                default:
731                        if( sa.eventCode & 1 ) // value set
732                                Variable curval = sa.curval
733                        endif
734                        break
735        endswitch
736
737        return 0
738End
739
740
Note: See TracBrowser for help on using the repository browser.