source: sans/Dev/trunk/NCNR_User_Procedures/Reduction/VSANS/V_MainPanel.ipf @ 1041

Last change on this file since 1041 was 1041, checked in by srkline, 6 years ago

Added the angle dependent transmission correction to the data correction in the raw_to_work step, in 2D

added a testing file that can generate fake event data, read, write, and decode it. Read is based on GBLoadWave. Hoepfully I'll not need to write an XOP. manipulation of the 64 bit words are done with simple bit shifts and logic.

also added are a number of error checking routines to improve behavior when wave, folders, etc. are missing.

  • Property svn:executable set to *
File size: 17.8 KB
Line 
1#pragma rtGlobals=1             // Use modern global access method.
2
3
4//*********************
5//
6//draws main panel of buttons for all data reduction operations
7//panel can't be killed (without really trying)
8// V_initialize() from the VSANS menu will redraw the panel
9//panel simply dispatches to previously written procedures (not functions)
10//
11// **function names are really self-explanatory...see the called function for the real details
12//
13//**********************
14
15
16// TODO
17//
18// -- update this to be VSANS-specific, eliminating junk that is SANS only or VAX-specific
19//
20
21
22// TODO-- decide whether to automatically read in the mask, or not
23// -- there could be a default mask, or look for the mask that is speficied in the
24// next file that is read in from the path
25Proc PickPath_MainButtonProc(ctrlName) : ButtonControl
26        String ctrlName
27       
28        V_PickPath()
29        // read in DEFAULT.MASK, if it exists, otherwise, do nothing
30        //
31//      PathInfo catPathName
32//      if(V_flag==1)
33//              String str = S_Path + "DEFAULT.MASK"
34//              Variable refnum
35//              Open/R/Z=1 refnum as str
36//              if(strlen(S_filename) != 0)
37//                      Close refnum            //file can be found OK
38//                      ReadMCID_MASK(str)
39//              else
40//                      // file not found, close just in case
41//                      Close/A
42//              endif
43//      endif
44End
45
46Proc DrawMask_MainButtonProc(ctrlName) : ButtonControl
47        String ctrlName
48       
49        V_Edit_a_Mask()
50End
51
52
53//
54// this will only load the data into RAW, overwriting whatever is there. no copy is put in rawVSANS
55//
56Proc DisplayMainButtonProc(ctrlName) : ButtonControl
57        String ctrlName
58
59        Variable err=   V_LoadHDF5Data("","RAW")                        // load the data
60//      Print "Load err = "+num2str(err)
61        if(!err)
62                String hdfDF = root:file_name                   // last file loaded, may not be the safest way to pass
63                String folder = StringFromList(0,hdfDF,".")
64               
65                // this (in SANS) just passes directly to fRawWindowHook()
66                V_UpdateDisplayInformation("RAW")               // plot the data in whatever folder type
67                               
68                // set the global to display ONLY if the load was called from here, not from the
69                // other routines that load data (to read in values)
70                root:Packages:NIST:VSANS:Globals:gLastLoadedFile = root:file_name
71               
72        endif
73End
74
75Proc PatchMainButtonProc(ctrlName) : ButtonControl
76        String ctrlName
77
78        V_PatchFiles()
79End
80
81Proc Patch_XY_MainButtonProc(ctrlName) : ButtonControl
82        String ctrlName
83
84        V_PatchDet_xyCenters_Panel()
85End
86
87Proc Patch_DeadTime_MainButtonProc(ctrlName) : ButtonControl
88        String ctrlName
89
90        V_PatchDetectorDeadtimePanel()
91End
92
93Proc Patch_Calib_MainButtonProc(ctrlName) : ButtonControl
94        String ctrlName
95
96        V_PatchDetectorCalibrationPanel()
97End
98
99
100Proc TransMainButtonProc(ctrlName) : ButtonControl
101        String ctrlName
102
103         V_InitTransmissionPanel()
104End
105
106Proc BuildProtocol_MainButtonProc(ctrlName) : ButtonControl
107        String ctrlName
108
109        V_ReductionProtocolPanel()
110End
111
112Proc ReduceAFile_MainButtonProc(ctrlName) : ButtonControl
113        String ctrlName
114
115        ReduceAFile()
116End
117
118Proc ReduceMultiple_MainButtonProc(ctrlName) : ButtonControl
119        String ctrlName
120
121        V_ReduceMultipleFiles()
122End
123
124Proc Plot1D_MainButtonProc(ctrlName) : ButtonControl
125        String ctrlName
126
127        //LoadOneDData()
128        Show_Plot_Manager()
129End
130
131Proc Sort1D_MainButtonProc(ctrlName) : ButtonControl
132        String ctrlName
133
134//      ShowNSORTPanel()
135       
136End
137
138Proc Combine1D_MainButtonProc(ctrlName) : ButtonControl
139        String ctrlName
140
141//      ShowCombinePanel()
142        V_CombineDataGraph()
143End
144
145
146Proc Fit1D_MainButtonProc(ctrlName) : ButtonControl
147        String ctrlName
148
149        OpenFITPanel()
150End
151
152//Proc FitRPA_MainButtonProc(ctrlName) : ButtonControl
153//      String ctrlName
154//
155//      OpenFITRPAPanel()
156//End
157
158Proc Subtract1D_MainButtonProc(ctrlName) : ButtonControl
159        String ctrlName
160
161        OpenSubtract1DPanel()
162End
163
164Proc Arithmetic1D_MainButtonProc(ctrlName) : ButtonControl
165        String ctrlName
166
167        MakeDAPanel()
168End
169
170Proc DisplayInterm_MainButtonProc(ctrlName) : ButtonControl
171        String ctrlName
172
173        V_ChangeDisplay()
174End
175
176// TODO -- fill in with a proper reader that will display the mask(s)
177Proc ReadMask_MainButtonProc(ctrlName) : ButtonControl
178        String ctrlName
179
180        DoAlert 0, "Loading MASK data"
181        V_LoadMASKData()
182End
183
184Proc Draw3D_MainButtonProc(ctrlName) : ButtonControl
185        String ctrlName
186
187        Plot3DSurface()
188End
189
190////on Misc Ops tab, generates a notebook
191//Proc CatShort_MainButtonProc(ctrlName) : ButtonControl
192//      String ctrlName
193//
194//      BuildCatShortNotebook()
195//End
196
197//button is labeled "File Catalog"
198Proc CatVShort_MainButtonProc(ctrlName) : ButtonControl
199        String ctrlName
200
201        V_BuildCatVeryShortTable()
202End
203
204Proc CatSort_MainButtonProc(ctrlName) : ButtonControl
205        String ctrlName
206       
207        V_Catalog_Sort()
208End
209
210Proc ShowCatShort_MainButtonProc(ctrlName) : ButtonControl
211        String ctrlName
212
213        ShowCATWindow()
214End
215
216Proc ShowSchematic_MainButtonProc(ctrlName) : ButtonControl
217        String ctrlName
218       
219        if(root:myGlobals:isDemoVersion == 1)
220                //      comment out in DEMO_MODIFIED version, and show the alert
221                DoAlert 0,"This operation is not available in the Demo version of IGOR"
222        else
223                ShowSchematic()
224        endif
225End
226
227Proc ShowAvePanel_MainButtonProc(ctrlName) : ButtonControl
228        String ctrlName
229
230        ShowAveragePanel()
231End
232
233Proc HelpMainButtonProc(ctrlName) : ButtonControl
234        String ctrlName
235        DisplayHelpTopic/Z/K=1 "VSANS Data Reduction Tutorial"
236        if(V_flag !=0)
237                DoAlert 0,"The VSANS Data Reduction Tutorial Help file could not be found"
238        endif
239End
240
241Proc ShowTilePanel_MainButtonProc(ctrlName) : ButtonControl
242        String ctrlName
243       
244        if(root:myGlobals:isDemoVersion == 1)
245                //      comment out in DEMO_MODIFIED version, and show the alert
246                DoAlert 0,"This operation is not available in the Demo version of IGOR"
247        else
248                Show_Tile_2D_Panel()
249        endif
250End
251
252Proc NG1TransConv_MainButtonProc(ctrlName) : ButtonControl
253        String ctrlName
254
255        TransformToTransFile()
256End
257
258Proc CopyWork_MainButtonProc(ctrlName) : ButtonControl
259        String ctrlName
260
261        V_CopyWorkFolder()              //will put up missing param dialog
262End
263
264Proc PRODIV_MainButtonProc(ctrlName) : ButtonControl
265        String ctrlName
266
267        //new, May 2009. show a full panel for input
268        BuildDIVPanel()
269//      MakeDIVFile("","")                     
270End
271
272
273Proc WorkMath_MainButtonProc(ctrlName) : ButtonControl
274        String ctrlName
275
276        Show_WorkMath_Panel()
277End
278
279//Proc TISANE_MainButtonProc(ctrlName) : ButtonControl
280//      String ctrlName
281//     
282//      if(exists("Show_TISANE_Panel")==0)
283//              // procedure file was not loaded
284//              DoAlert 0,"This operation is not available in this set of macros"
285//      else
286//              Show_TISANE_Panel()
287//      endif
288//     
289//End
290
291Proc Event_MainButtonProc(ctrlName) : ButtonControl
292        String ctrlName
293       
294        if(exists("Show_Event_Panel")==0)
295                // procedure file was not loaded
296                DoAlert 0,"This operation is not available in this set of macros"
297        else
298                Show_Event_Panel()
299        endif
300       
301End
302
303Proc Raw2ASCII_MainButtonProc(ctrlName) : ButtonControl
304        String ctrlName
305
306        Export_RAW_Ascii_Panel()
307End
308
309Proc RealTime_MainButtonProc(ctrlName) : ButtonControl
310        String ctrlName
311
312        if(exists("V_Init_RT")==0)
313                // procedure file was not loaded
314                DoAlert 0,"This operation is not available in this set of macros"
315        else
316                Show_RealTime_Panel()
317        endif
318End
319
320Proc RTReduce_MainButtonProc(ctrlName) : ButtonControl
321        String ctrlName
322
323        V_ShowOnlineReductionPanel()
324End
325
326Proc Preferences_MainButtonProc(ctrlName) : ButtonControl
327        String ctrlName
328
329        Show_VSANSPreferences_Panel()
330End
331
332
333Proc DataTree_MainButtonProc(ctrlName) : ButtonControl
334        String ctrlName
335
336        V_ShowDataFolderTree()
337End
338
339////////////////////////////////////////////////
340//************* NEW version of Main control Panel *****************
341//
342// button management for the different tabs is handled by consistent
343// naming of each button with its tab number as documented below
344// then MainTabProc() can enable/disable the appropriate buttons for the
345// tab that is displayed
346//
347// panel must be killed and redrawn for new buttons to appear
348//
349Window Main_VSANS_Panel()
350        PauseUpdate; Silent 1           // building window...
351        NewPanel /W=(500,60,924,320) /K=2 as "VSANS Reduction Controls"
352        ModifyPanel cbRGB=(49694,61514,27679)
353        ModifyPanel fixedSize=1
354//////
355//on main portion of panel
356        Button MainButtonA,pos={8,8},size={80,20},title="Pick Path",proc=PickPath_MainButtonProc
357        Button MainButtonA,help={"Pick the local data folder that contains the SANS data"}
358        Button MainButtonB,pos={100,8},size={90,20},proc=CatVShort_MainButtonProc,title="File Catalog"
359        Button MainButtonB,help={"This will generate a condensed CATalog table of all files in a specified local folder"}
360        Button MainButtonC,pos={250,8},size={50,20},proc=HelpMainButtonProc,title="Help"
361        Button MainButtonC,help={"Display the help file"}
362        Button MainButtonD,pos={320,8},size={80,20},proc=SR_OpenTracTicketPage,title="Feedback"
363        Button MainButtonD,help={"Submit bug reports or feature requests"}
364       
365        TabControl MainTab,pos={7,49},size={410,202},tabLabel(0)="Raw Data",proc=MainTabProc
366        TabControl MainTab,tabLabel(1)="Reduction",tabLabel(2)="1-D Ops",tabLabel(3)="2-D Ops",tabLabel(4)="Misc Ops"
367        TabControl MainTab,value=0
368        //
369        TabControl MainTab labelBack=(47748,57192,54093)
370       
371//on tab(0) - Raw Data - initially visible
372        Button MainButton_0a,pos={15,90},size={130,20},proc=DisplayMainButtonProc,title="Display Raw Data"
373        Button MainButton_0a,help={"Display will load and plot a single 2-D raw data file"}
374        Button MainButton_0b,pos={15,120},size={70,20},proc=PatchMainButtonProc,title="Patch"
375        Button MainButton_0b,help={"Patch will update incorrect information in raw data headers"}
376        Button MainButton_0c,pos={15,150},size={110,20},proc=TransMainButtonProc,title="Transmission"
377        Button MainButton_0c,help={"Shows the panel which allows calculation of sample transmissions and entering these values into raw data headers"}
378        Button MainButton_0d,pos={15,180},size={130,20},proc=RealTime_MainButtonProc,title="RealTime Display"
379        Button MainButton_0d,help={"Shows the panel for control of the RealTime data display. Only used during data collection"}
380        Button MainButton_0e,pos={15,210},size={130,20},proc=CatSort_MainButtonProc,title="Sort Catalog"
381        Button MainButton_0e,help={"Sort the Data Catalog, courtesy of ANSTO"}
382        Button MainButton_0f,pos={300,90},size={90,20},proc=DataTree_MainButtonProc,title="Data Tree"
383        Button MainButton_0f,help={"Show the header and data tree"}
384        Button MainButton_0g,pos={170,180},size={110,20},proc=RTReduce_MainButtonProc,title="RT Reduction"
385        Button MainButton_0g,help={"Reduce live (incomplete) data files during acquisition"}
386        Button MainButton_0h,pos={170,90},size={90,20},proc=Patch_XY_MainButtonProc,title="Patch XY"
387        Button MainButton_0h,help={"Patch will update incorrect information in raw data headers"}
388        Button MainButton_0i,pos={170,120},size={110,20},proc=Patch_DeadTime_MainButtonProc,title="Patch DeadTime"
389        Button MainButton_0i,help={"Patch will update incorrect information in raw data headers"}
390        Button MainButton_0j,pos={170,150},size={90,20},proc=Patch_Calib_MainButtonProc,title="Patch Calib"
391        Button MainButton_0j,help={"Patch will update incorrect information in raw data headers"}
392
393//on tab(1) - Reduction
394        Button MainButton_1a,pos={15,90},size={110,20},proc=BuildProtocol_MainButtonProc,title="Build Protocol"
395        Button MainButton_1a,help={"Shows a panel where the CATalog window is used as input for creating a protocol. Can also be used for standard reductions"}
396        Button MainButton_1b,pos={15,120},size={110,20},proc=ReduceAFile_MainButtonProc,title="Reduce a File"
397        Button MainButton_1b,help={"Presents a questionnare for creating a reduction protocol, then reduces a single file"}
398        Button MainButton_1c,pos={15,150},size={160,20},proc=ReduceMultiple_MainButtonProc,title="Reduce Multiple Files"
399        Button MainButton_1c,help={"Use for reducing multiple raw datasets after protocol(s) have been created"}
400//      Button MainButton_1d,pos={15,180},size={110,20},proc=ShowCatShort_MainButtonProc,title="Show CAT Table"
401//      Button MainButton_1d,help={"This button will bring the CATalog window to the front, if it exists"}
402        Button MainButton_1a,disable=1
403        Button MainButton_1b,disable=1
404        Button MainButton_1c,disable=1
405//      Button MainButton_1d,disable=1
406
407//on tab(2) - 1-D operations
408        Button MainButton_2a,pos={15,90},size={60,20},proc=Plot1D_MainButtonProc,title="Plot"
409        Button MainButton_2a,help={"Loads and plots a 1-D dataset in the format expected by \"FIT\""}
410//      Button MainButton_2b,pos={15,120},size={60,20},proc=Sort1D_MainButtonProc,title="Sort"
411//      Button MainButton_2b,help={"Sorts and combines 2 or 3 separate 1-D datasets into a single file. Use \"Plot\" button to import 1-D data files"}
412        Button MainButton_2c,pos={15,150},size={60,20},proc=Fit1D_MainButtonProc,title="FIT"
413        Button MainButton_2c,help={"Shows panel for performing a variety of linearized fits to 1-D data files. Use \"Plot\" button to import 1-D data files"}
414//      Button MainButton_2d,pos={15,180},size={60,20},proc=FITRPA_MainButtonProc,title="FIT/RPA"
415//      Button MainButton_2d,help={"Shows panel for performing a fit to a polymer standard."}
416//      Button MainButton_2e,pos={120,90},size={90,20},proc=Subtract1D_MainButtonProc,title="Subtract 1D"
417//      Button MainButton_2e,help={"Shows panel for subtracting two 1-D data sets"}
418        Button MainButton_2e,pos={120,90},size={110,20},proc=Arithmetic1D_MainButtonProc,title="1D Arithmetic"
419        Button MainButton_2e,help={"Shows panel for doing arithmetic on 1D data sets"}
420        Button MainButton_2f,pos={120,120},size={130,20},proc=Combine1D_MainButtonProc,title="Combine 1D Files"
421        Button MainButton_2f,help={"Shows panel for batch combination of 1D data files. Use after you're comfortable with NSORT"}
422        Button MainButton_2a,disable=1
423//      Button MainButton_2b,disable=1
424        Button MainButton_2c,disable=1
425//      Button MainButton_2d,disable=1
426        Button MainButton_2e,disable=1
427        Button MainButton_2f,disable=1
428
429
430
431//on tab(3) - 2-D Operations
432        Button MainButton_3a,pos={15,90},size={90,20},proc=DisplayInterm_MainButtonProc,title="Display 2D"
433        Button MainButton_3a,help={"Display will plot a 2-D work data file that has previously been created during data reduction"}
434        Button MainButton_3b,pos={15,120},size={90,20},title="Draw Mask",proc=DrawMask_MainButtonProc
435        Button MainButton_3b,help={"Draw a mask file and save it."}
436        Button MainButton_3c,pos={15,150},size={90,20},proc=ReadMask_MainButtonProc,title="Read Mask"
437        Button MainButton_3c,help={"Reads a mask file into the proper work folder, and displays a small image of the mask. Yellow areas will be excluded from the data"}
438//      Button MainButton_3d,pos={15,180},size={100,20},title="Tile RAW 2D",proc=ShowTilePanel_MainButtonProc
439//      Button MainButton_3d,help={"Adds selected RAW data files to a layout."}
440        Button MainButton_3e,pos={150,90},size={100,20},title="Copy Work",proc=CopyWork_MainButtonProc
441        Button MainButton_3e,help={"Copies WORK data from specified folder to destination folder."}
442//      Button MainButton_3f,pos={150,120},size={110,20},title="WorkFile Math",proc=WorkMath_MainButtonProc
443//      Button MainButton_3f,help={"Perfom simple math operations on workfile data"}
444        Button MainButton_3g,pos={150,180},size={100,20},title="Event Data",proc=Event_MainButtonProc
445        Button MainButton_3g,help={"Manipulate TISANE Timeslice data"}
446       
447        Button MainButton_3a,disable=1
448        Button MainButton_3b,disable=1
449        Button MainButton_3c,disable=1
450//      Button MainButton_3d,disable=1
451        Button MainButton_3e,disable=1
452//      Button MainButton_3f,disable=1
453        Button MainButton_3g,disable=1
454
455//on tab(4) - Miscellaneous operations
456        Button MainButton_4a,pos={15,90},size={80,20},proc=Draw3D_MainButtonProc,title="3D Display"
457        Button MainButton_4a,help={"Plots a 3-D surface of the selected file type"}
458//      Button MainButton_4b,pos={15,120},size={120,20},proc=ShowSchematic_MainButtonProc,title="Show Schematic"
459//      Button MainButton_4b,help={"Use this to show a schematic of the data reduction process for a selected sample file and reduction protocol"}
460//      Button MainButton_4c,pos={15,150},size={80,20},proc=ShowAvePanel_MainButtonProc,title="Average"
461//      Button MainButton_4c,help={"Shows a panel for interactive selection of the 1-D averaging step"}
462//      Button MainButton_4d,pos={15,180},size={110,20},proc=CatShort_MainButtonProc,title="CAT/Notebook"
463//      Button MainButton_4d,help={"This will generate a CATalog notebook of all files in a specified local folder"}
464//      Button MainButton_4e,pos={180,90},size={130,20},proc=NG1TransConv_MainButtonProc,title="NG1 Files to Trans"
465//      Button MainButton_4e,help={"Converts NG1 transmission data files to be interpreted as such"}
466        Button MainButton_4f,pos={180,120},size={130,20},proc=PRODIV_MainButtonProc,title="Make DIV file"
467        Button MainButton_4f,help={"Merges two stored workfiles (CORrected) into a DIV file, and saves the result"}
468//      Button MainButton_4g,pos={180,150},size={130,20},proc=Raw2ASCII_MainButtonProc,title="RAW ASCII Export"
469//      Button MainButton_4g,help={"Exports selected RAW (2D) data file(s) as ASCII, either as pixel values or I(Qx,Qy)"}
470        Button MainButton_4h,pos={180,180},size={130,20},proc=Preferences_MainButtonProc,title="Preferences"
471        Button MainButton_4h,help={"Sets user preferences for selected parameters"}
472       
473        Button MainButton_4a,disable=1
474//      Button MainButton_4b,disable=1
475//      Button MainButton_4c,disable=1
476//      Button MainButton_4d,disable=1
477//      Button MainButton_4e,disable=1
478        Button MainButton_4f,disable=1
479//      Button MainButton_4g,disable=1
480        Button MainButton_4h,disable=1
481//     
482EndMacro
483
484// function to control the drawing of buttons in the TabControl on the main panel
485// Naming scheme for the buttons MUST be strictly adhered to... else buttons will
486// appear in odd places...
487// all buttons are named MainButton_NA where N is the tab number and A is the letter denoting
488// the button's position on that particular tab.
489// in this way, buttons will always be drawn correctly..
490//
491Function MainTabProc(name,tab)
492        String name
493        Variable tab
494       
495//      Print "name,number",name,tab
496        String ctrlList = ControlNameList("",";"),item="",nameStr=""
497        Variable num = ItemsinList(ctrlList,";"),ii,onTab
498        for(ii=0;ii<num;ii+=1)
499                //items all start w/"MainButton_"
500                item=StringFromList(ii, ctrlList ,";")
501                nameStr=item[0,10]
502                if(cmpstr(nameStr,"MainButton_")==0)
503                        onTab = str2num(item[11])
504                        Button $item,disable=(tab!=onTab)
505                endif
506        endfor
507End
508
509//
510Function SR_OpenTracTicketPage(ctrlName)
511        String ctrlName
512        DoAlert 1,"Your web browser will open to a page where you can submit your bug report or feature request. OK?"
513        if(V_flag==1)
514                BrowseURL "http://danse.chem.utk.edu/trac/newticket"
515        endif
516End
517
Note: See TracBrowser for help on using the repository browser.