source: sans/Dev/trunk/NCNR_User_Procedures/Reduction/VSANS/V_Transmission.ipf @ 1096

Last change on this file since 1096 was 1096, checked in by srkline, 5 years ago

bug fixes in transmission calculation to use the panel as defined when the box coordinates are set, and to treat empty cell files (intent) as scattering files for the purpose of calculating transmission.

File size: 21.5 KB
Line 
1#pragma TextEncoding = "MacRoman"
2#pragma rtGlobals=3             // Use modern global access method and strict wave access.
3
4
5
6// TODO
7// x- initialization
8// x- link to main panel
9//
10// ?? redesign the panel based on the CATALOG?
11// -- refresh the catalog, then work with those waves?
12//
13// -- this still seems to be very awkward to use. Come up with something better
14//
15// -- need more checks - be sure that the files match
16// -- SDD, wavelength, beam on proper panel, etc.
17//
18// -- need popups (transmission, open) to respond to popup changes and
19//   update their fields, since they may be auto-located incorrectly.
20//
21// to patch the box coordinates
22// err = V_writeBoxCoordinates(fname,V_List2NumWave(str,";","inW"))
23
24
25
26//
27Function V_InitTransmissionPanel()
28       
29        DoWindow/F V_TransmissionPanel
30        if(V_Flag == 0)
31                V_InitTransPanelGlobals()
32                Execute "V_TransmissionPanel()"
33        endif
34End
35
36Function V_InitTransPanelGlobals()
37
38// root:Packages:NIST:VSANS:Globals:Transmission
39        NewDataFolder/O/S root:Packages:NIST:VSANS:Globals:Transmission
40        Variable/G gSamGrpID,gTrnGrpID,gTrans,gTransErr
41        String/G gSamLabel="file label",gTransLabel="file label",gEmptyLabel="file label"
42        String/G gEmptyBoxCoord="1;2;3;4;",gEmptyPanel="ENTER PANEL"
43        String/G gSamMatchList = "_none_"
44
45
46        SetDataFolder root:
47        return(0)
48End
49
50Window V_TransmissionPanel() : Panel
51        PauseUpdate; Silent 1           // building window...
52        NewPanel /W=(1496,366,1974,990) /K=1
53        ModifyPanel cbRGB=(32896,16448,0,19621)
54        DoWindow/C V_TransmissionPanel
55
56//      ShowTools/A
57        PopupMenu popup_0,pos={16.00,359.00},size={104.00,23.00},fstyle=1,fsize=12,proc=V_TSamFilePopMenuProc,title="Sample"
58        PopupMenu popup_0,mode=1,popvalue="_none_",value= #"root:Packages:NIST:VSANS:Globals:Transmission:gSamMatchList "
59        PopupMenu popup_1,pos={12.00,229.00},size={195.00,23.00},fstyle=1,fsize=12,proc=V_TTransmFilePopMenuProc,title="Transmission"
60        PopupMenu popup_1,mode=1,popvalue="sans3584.nxs.ngv",value= V_getFilePurposeList("TRANSMISSION",0)
61        PopupMenu popup_2,pos={17.00,79.00},size={188.00,23.00},fstyle=1,fsize=12,proc=V_TEmpBeamPopMenuProc,title="Open Beam"
62        PopupMenu popup_2,mode=1,popvalue="sans3584.nxs.ngv",value= V_getFileIntentList("OPEN BEAM",0)
63        Button button_0,pos={34.00,499.00},size={100.00,20.00},proc=V_CalcTransmButtonProc,title="Calculate"
64        Button button_2,pos={349.00,13.00},size={30.00,20.00},proc=V_HelpTransmButtonProc,title="?"
65        Button button_3,pos={410.00,13.00},size={50.00,20.00},proc=V_DoneTransmButtonProc,title="Done"
66        Button button_4,pos={164.00,500.00},size={150.00,20.00},proc=V_CalcTransmListButtonProc,title="Calculate All In Popup"
67        SetVariable setvar_0,pos={18.00,390.00},size={300.00,14.00},title="Label:"
68        SetVariable setvar_0,limits={-inf,inf,0},value= root:Packages:NIST:VSANS:Globals:Transmission:gSamLabel
69        SetVariable setvar_1,pos={18.00,417.00},size={300.00,14.00},title="Group ID:"
70        SetVariable setvar_1,limits={-inf,inf,0},value= root:Packages:NIST:VSANS:Globals:Transmission:gSamGrpID
71        SetVariable setvar_2,pos={15.00,257.00},size={300.00,14.00},title="Label:"
72        SetVariable setvar_2,limits={-inf,inf,0},value= root:Packages:NIST:VSANS:Globals:Transmission:gTransLabel
73        SetVariable setvar_3,pos={14.00,283.00},size={300.00,14.00},title="Group ID:"
74        SetVariable setvar_3,limits={-inf,inf,0},value= root:Packages:NIST:VSANS:Globals:Transmission:gTrnGrpID
75        SetVariable setvar_4,pos={18.00,108.00},size={300.00,14.00},title="Label:"
76        SetVariable setvar_4,limits={-inf,inf,0},value= root:Packages:NIST:VSANS:Globals:Transmission:gEmptyLabel
77        SetVariable setvar_5,pos={18.00,132.00},size={300.00,14.00},title="XY Box:"
78        SetVariable setvar_5,limits={-inf,inf,0},value= root:Packages:NIST:VSANS:Globals:Transmission:gEmptyBoxCoord
79        SetVariable setvar_6,pos={18.00,157.00},size={300.00,14.00},fstyle=1,fsize=12,title="Panel:"
80        SetVariable setvar_6,limits={-inf,inf,0},value= root:Packages:NIST:VSANS:Globals:Transmission:gEmptyPanel
81        SetVariable setvar_7,pos={18.00,442.00},size={300.00,14.00},title="Transmission:"
82        SetVariable setvar_7,limits={-inf,inf,0},value= root:Packages:NIST:VSANS:Globals:Transmission:gTrans
83        SetVariable setvar_8,pos={18.00,467.00},size={300.00,14.00},title="Error:"
84        SetVariable setvar_8,limits={-inf,inf,0},value= root:Packages:NIST:VSANS:Globals:Transmission:gTransErr
85EndMacro
86
87
88//Window V_TransmissionPanel() : Panel
89//      PauseUpdate; Silent 1           // building window...
90//      NewPanel /W=(1286,328,1764,952)
91//      ModifyPanel cbRGB=(32896,16448,0,19621)
92//      DoWindow/C V_TransmissionPanel
93//
94////    ShowTools/A
95//      PopupMenu popup_0,pos={19.00,55.00},size={86.00,23.00},proc=V_TSamFilePopMenuProc,title="Sample"
96////    PopupMenu popup_0,mode=1,value= V_getFilePurposeList("SCATTERING",0)//+V_getFileIntentList("EMPTY CELL",0)
97//      PopupMenu popup_0,mode=1,value=root:Packages:NIST:VSANS:Globals:Transmission:gSamMatchList
98//      PopupMenu popup_1,pos={102,248},size={72.00,23.00},proc=V_TTransmFilePopMenuProc,title="Transmission"
99//      PopupMenu popup_1,mode=1,value= V_getFilePurposeList("TRANSMISSION",0)
100//      PopupMenu popup_2,pos={164,353},size={72.00,23.00},proc=V_TEmpBeamPopMenuProc,title="Open Beam"
101////    PopupMenu popup_2,mode=1,value= V_getFileIntentList("EMPTY BEAM",0)
102//      PopupMenu popup_2,mode=1,value= V_getFileIntentList("OPEN BEAM",0)
103//      Button button_0,pos={37,193},size={100.00,20.00},proc=V_CalcTransmButtonProc,title="Calculate"
104////    Button button_1,pos={23.00,491.00},size={100.00,20.00},proc=V_WriteTransmButtonProc,title="Write"
105//      Button button_2,pos={349.00,13.00},size={30.00,20.00},proc=V_HelpTransmButtonProc,title="?"
106//      Button button_3,pos={410.00,13.00},size={50.00,20.00},proc=V_DoneTransmButtonProc,title="Done"
107//      SetVariable setvar_0,pos={21.00,86.00},size={300.00,14.00},title="Label:"
108//      SetVariable setvar_0,limits={-inf,inf,0},value= root:Packages:NIST:VSANS:Globals:Transmission:gSamLabel
109//      SetVariable setvar_1,pos={21.00,113.00},size={300.00,14.00},title="Group ID:"
110//      SetVariable setvar_1,limits={-inf,inf,0},value= root:Packages:NIST:VSANS:Globals:Transmission:gSamGrpID
111//      SetVariable setvar_2,pos={105,276.00},size={300.00,14.00},title="Label:"
112//      SetVariable setvar_2,limits={-inf,inf,0},value= root:Packages:NIST:VSANS:Globals:Transmission:gTransLabel
113//      SetVariable setvar_3,pos={104,302},size={300.00,14.00},title="Group ID:"
114//      SetVariable setvar_3,limits={-inf,inf,0},value= root:Packages:NIST:VSANS:Globals:Transmission:gTrnGrpID
115//      SetVariable setvar_4,pos={165,382},size={300.00,14.00},title="Label:"
116//      SetVariable setvar_4,limits={-inf,inf,0},value= root:Packages:NIST:VSANS:Globals:Transmission:gEmptyLabel
117//      SetVariable setvar_5,pos={165,406},size={300.00,14.00},title="XY Box:"
118//      SetVariable setvar_5,limits={-inf,inf,0},value= root:Packages:NIST:VSANS:Globals:Transmission:gEmptyBoxCoord
119//      SetVariable setvar_6,pos={165,431},size={300.00,14.00},title="Panel:"
120//      SetVariable setvar_6,limits={-inf,inf,0},value= root:Packages:NIST:VSANS:Globals:Transmission:gEmptyPanel
121//      SetVariable setvar_7,pos={21,138},size={300.00,14.00},title="Transmission:"
122//      SetVariable setvar_7,limits={-inf,inf,0},value= root:Packages:NIST:VSANS:Globals:Transmission:gTrans
123//      SetVariable setvar_8,pos={21,163},size={300.00,14.00},title="Error:"
124//      SetVariable setvar_8,limits={-inf,inf,0},value= root:Packages:NIST:VSANS:Globals:Transmission:gTransErr
125//EndMacro
126
127// TODO
128// -- fill in the details
129// -- currently, I pick these from the Catalog, for speed
130// -- ? is the catalog current?
131// -- T error is not part of the Catalog - is that OK?
132//
133// when the SAM file menu is popped:
134//  fill in the fields:
135// x- label
136// x- group id
137// x- transmission
138// -- T error
139//
140Function V_TSamFilePopMenuProc(pa) : PopupMenuControl
141        STRUCT WMPopupAction &pa
142
143
144// **** TODO
145// short-circuit the switch, and simply report the values
146// -- the TransFile popup now drives the panel
147                SVAR gSamLabel = root:Packages:NIST:VSANS:Globals:Transmission:gSamLabel
148                gSamLabel = V_getSampleDescription(pa.popStr)
149                NVAR gSamGrpID = root:Packages:NIST:VSANS:Globals:Transmission:gSamGrpID
150                gSamGrpID = V_getSample_GroupID(pa.popStr)
151                NVAR gTrans = root:Packages:NIST:VSANS:Globals:Transmission:gTrans
152                gTrans = V_getSampleTransmission(pa.popStr)
153                NVAR gTransErr = root:Packages:NIST:VSANS:Globals:Transmission:gTransErr
154                gTransErr = V_getSampleTransError(pa.popStr)
155
156        return(0)       
157       
158//      switch( pa.eventCode )
159//              case 2: // mouse up
160//                      Variable popNum = pa.popNum
161//                      String popStr = pa.popStr
162//                     
163//                      Variable ii,np
164//                     
165//                      WAVE/T fileNameW = root:Packages:NIST:VSANS:CatVSHeaderInfo:Filenames
166//                      WAVE/T labelW = root:Packages:NIST:VSANS:CatVSHeaderInfo:Labels
167//                      WAVE groupIDW = root:Packages:NIST:VSANS:CatVSHeaderInfo:Group_ID
168//                      WAVE transmW = root:Packages:NIST:VSANS:CatVSHeaderInfo:Transmission
169//                      WAVE/T intentW = root:Packages:NIST:VSANS:CatVSHeaderInfo:Intent
170//                     
171//                      // TODO
172//                      // I don't have a wave for the transmission error value, so it's not displayed here
173//                      // -- do I read it in, or just ignore it...     
174//                      np = numpnts(labelW)            //fileNameW is LONGER - so don't use numpnts(fileWave)
175//                      for(ii=0;ii<np;ii+=1)
176//                              if(cmpstr(fileNameW[ii],popStr)==0)
177//                             
178//                                      SetVariable setvar_0,value=labelW[ii]
179//                                      SetVariable setvar_1,value=groupIDW[ii]
180//                                      SetVariable setvar_7,value=transmW[ii]
181//                                      break           //found, get out
182//                              endif           
183//                      endfor
184//             
185//              // loop back through to find the transmission file with the matching group id
186//              // TODO x- set the popup string to the matching name on exit
187//                      Variable targetID = groupIDW[ii]
188////                    String list = V_getFilePurposeList("TRANSMISSION",0)
189//                      String list = V_getFileIntentPurposeList("SAMPLE","TRANSMISSION",0)
190//                     
191//                      WAVE/T purposeW = root:Packages:NIST:VSANS:CatVSHeaderInfo:Purpose
192//                      for(ii=0;ii<np;ii+=1)
193//                              if(cmpstr(purposeW[ii],"TRANSMISSION")==0 && cmpstr(intentW[ii],"SAMPLE")==0 && groupIDW[ii] == targetID)
194//                                      Print "transmission file match at ",filenameW[ii]
195//                                      SetVariable setvar_2,value=labelW[ii]
196//                                      SetVariable setvar_3,value=groupIDW[ii]
197//                                      PopupMenu popup_1,mode=WhichListItem(fileNameW[ii], list )+1,popValue=fileNameW[ii]
198//                                      break
199//                              endif           
200//                      endfor
201//
202//              // now loop back through to find the empty beam file
203//              // TODO
204//              // x- fill in the XY box
205//              // x-  Detector Panel field is hard-wired for "B"
206//              // -- do I use "EMPTY BEAM", "OPEN BEAM" or both?? I think "OPEN BEAM" is what NICE will use in a drop-down menu
207//              //     
208////                    list = V_getFileIntentList("EMPTY BEAM",0)
209//                      list = V_getFileIntentList("OPEN BEAM",0)
210//                     
211//                      for(ii=0;ii<np;ii+=1)
212//                              if(cmpstr(intentW[ii],"OPEN BEAM")==0)
213//                                      Print "Open beam match at ",filenameW[ii]
214//                                      SetVariable setvar_4,value=labelW[ii]
215//                                      PopupMenu popup_2,mode=WhichListItem(fileNameW[ii], list )+1,popValue=fileNameW[ii]
216//                                     
217////                                    SetVariable setvar_6,value =_STR:"ML"
218//
219//                                      WAVE boxCoord = V_getBoxCoordinates(filenameW[ii])
220//                                      Print boxCoord
221//                                      SetVariable setvar_5,value=_STR:V_NumWave2List(boxCoord,";")
222//
223//                                     
224//                                      break
225//                              endif           
226//                      endfor
227//                                                             
228//                      break
229//              case -1: // control being killed
230//                      break
231//      endswitch
232
233        return 0
234End
235
236// TODO
237//
238// Given the group ID of the sample, try to locate a (the) matching transmission file
239// by locating a matching ID in the list of transmission (intent) files
240//
241// then pop the menu
242//
243//
244Function V_TTransmFilePopMenuProc(pa) : PopupMenuControl
245        STRUCT WMPopupAction &pa
246
247        switch( pa.eventCode )
248                case 2: // mouse up
249                        Variable popNum = pa.popNum
250                        String popStr = pa.popStr
251                       
252                        SVAR gTransLabel = root:Packages:NIST:VSANS:Globals:Transmission:gTransLabel
253                        gTransLabel = V_getSampleDescription(popStr)
254                        NVAR gTrnGrpID = root:Packages:NIST:VSANS:Globals:Transmission:gTrnGrpID
255                        gTrnGrpID = V_getSample_GroupID(popStr)                 
256                       
257                        SVAR gSamMatchList = root:Packages:NIST:VSANS:Globals:Transmission:gSamMatchList
258                        String quote = "\""
259                        gSamMatchList = quote + V_getFileIntentPurposeIDList("SAMPLE","SCATTERING",gTrnGrpID,0) + quote
260                        // this resets a global string, since I can't pass a parameter (only constants) in value=fn()           
261//                      PopupMenu popup_0,mode=1,value=#gSamMatchList
262                        PopupMenu popup_0,mode=1,value=V_getSamListForPopup()
263                       
264                        break
265                case -1: // control being killed
266                        break
267        endswitch
268
269        return 0
270End
271
272Function/S V_getSamListForPopup()
273
274//      String quote = "\""
275        NVAR gTrnGrpID = root:Packages:NIST:VSANS:Globals:Transmission:gTrnGrpID
276
277        String retStr = V_getFileIntentPurposeIDList("SAMPLE","SCATTERING",gTrnGrpID,0)
278
279// and be sure to add in the empty cell, since it's not a "sample"
280        retStr += V_getFileIntentPurposeIDList("EMPTY CELL","SCATTERING",gTrnGrpID,0)
281       
282        return(retStr)
283End
284
285Function V_TEmpBeamPopMenuProc(pa) : PopupMenuControl
286        STRUCT WMPopupAction &pa
287
288        switch( pa.eventCode )
289                case 2: // mouse up
290                        Variable popNum = pa.popNum
291                        String popStr = pa.popStr
292                       
293                        Print "empty beam match at ",popStr
294                        SetVariable setvar_4,value=_STR:V_getSampleDescription(popStr)
295                       
296
297                        WAVE boxCoord = V_getBoxCoordinates(popStr)
298                        Print boxCoord
299                        SetVariable setvar_5,value=_STR:V_NumWave2List(boxCoord,";")
300                       
301                        String detStr = V_getReduction_BoxPanel(popStr)
302                        SetVariable setvar_6,value =_STR:detStr
303                       
304                        break
305                case -1: // control being killed
306                        break
307        endswitch
308
309        return 0
310End
311
312
313// NOTE: DIV is not needed for the transmission calculation, since it's a ratio
314// and the DIV simply drops out. (DIV is needed for ABS scaling calculation of Kappa, since
315// that is not a ratio)
316//
317// TODO
318// -- figure out which detector corrections are necessary to do on loading
319// data for calculation. Then set/reset preferences accordingly
320// (see V_isoCorrectButtonProc() for example of how to do this)
321//
322//  -- DIV (turn off)
323// -- NonLinear (turn off ?)
324// -- solid angle (turn off ?)
325// -- dead time (keep on?)
326//
327// -- once calculated, update the Transmission panel
328// -- update the data file
329// -- update the CATALOG (and/or delete the RawVSANS to force a re-read)
330//
331Function V_CalcTransmButtonProc(ba) : ButtonControl
332        STRUCT WMButtonAction &ba
333
334        switch( ba.eventCode )
335                case 2: // mouse up
336                        // click code here
337
338                        String SamFile,TransFile,EmptyFile
339
340                        ControlInfo/W=V_TransmissionPanel popup_0
341                        SamFile = S_Value
342
343                        ControlInfo/W=V_TransmissionPanel popup_1
344                        TransFile = S_Value             
345               
346                        ControlInfo/W=V_TransmissionPanel popup_2
347                        EmptyFile = S_Value
348               
349                        V_CalcOneTransmission(SamFile,TransFile,EmptyFile)                     
350
351                       
352                        // done
353                        break
354                case -1: // control being killed
355                        break
356        endswitch
357
358
359        return 0
360End
361
362Function V_CalcTransmListButtonProc(ba) : ButtonControl
363        STRUCT WMButtonAction &ba
364
365        switch( ba.eventCode )
366                case 2: // mouse up
367                        // click code here
368
369                        SVAR gSamMatchList = root:Packages:NIST:VSANS:Globals:Transmission:gSamMatchList
370
371                        String SamFile,TransFile,EmptyFile
372
373                        ControlInfo/W=V_TransmissionPanel popup_1
374                        TransFile = S_Value             
375               
376                        ControlInfo/W=V_TransmissionPanel popup_2
377                        EmptyFile = S_Value
378               
379                        // gSamMatchStr has " at each end. remove these
380                        String list
381                        list = gSamMatchList
382                        list = list[1,strlen(list)-1]
383                        list = list[0,strlen(list)-2]
384                       
385                        Variable num,ii
386                        num = ItemsInList(list, ";")
387                        for(ii=0;ii<num;ii+=1)
388                                SamFile = StringFromList(ii, list, ";")
389                               
390                                if(ii==0)
391                                        // calculate the transmission for the first file
392                                        V_CalcOneTransmission(SamFile,TransFile,EmptyFile)     
393                                else
394                                        // then just write in the values (globals) that V_CalcOne determined
395                                        NVAR gTrans = root:Packages:NIST:VSANS:Globals:Transmission:gTrans
396                                        NVAR gTransErr = root:Packages:NIST:VSANS:Globals:Transmission:gTransErr
397                                       
398                                        // write both out to the sample *scattering* file on disk
399                                        V_writeSampleTransmission(SamFile,gTrans)
400                                        V_writeSampleTransError(SamFile,gTransErr)     
401
402                                endif           
403                        endfor
404                       
405                        Print "Done Processing Transmission List"
406
407                        // done
408                        break
409                case -1: // control being killed
410                        break
411        endswitch
412
413
414        return 0
415End
416
417
418
419Function V_CalcOneTransmission(SamFileName,TransFileName,EmptyFileName)                 
420        String SamFileName,TransFileName,EmptyFileName
421
422                Variable trans,trans_err
423                Variable emptyCts,empty_ct_err,samCts,sam_ct_err
424                String detStr
425               
426               
427                // save preferences for file loading
428                Variable savDivPref,savSAPref
429                NVAR gDoDIVCor = root:Packages:NIST:VSANS:Globals:gDoDIVCor
430                savDivPref = gDoDIVCor
431                NVAR gDoSolidAngleCor = root:Packages:NIST:VSANS:Globals:gDoSolidAngleCor
432                savSAPref = gDoSolidAngleCor
433               
434                // set local preferences
435                gDoDIVCor = 0
436                gDoSolidAngleCor = 0
437               
438                // check for sample transmission + error
439                // if present -- exit
440               
441                trans = V_getSampleTransmission(samfileName)
442                trans_err = V_getSampleTransError(samfileName)
443//                      // TODO
444//                      // -- this criteria is rather crude. think it through better
445//                      // -- or should I simply let it overwrite? What is the harm in that?
446//                      if(trans != 0 && trans < 1 && trans_err != 0)
447//                              Printf "Sample transmission, error = %g +/- %g   already exists, nothing calculated\r",trans,trans_err
448//                              break
449//                      endif
450               
451        // for empty beam               
452                emptyCts = V_getBoxCounts(emptyFileName)
453                empty_ct_err = V_getBoxCountsError(emptyFileName)
454                WAVE xyBoxW = V_getBoxCoordinates(emptyFileName)
455                // TODO
456                // x- need to get the panel string for the sum.
457                // x- the detector string is currently hard-wired
458                detStr = V_getReduction_BoxPanel(emptyFileName)
459               
460                SVAR gEmptyPanel = root:Packages:NIST:VSANS:Globals:Transmission:gEmptyPanel
461                gEmptyPanel = detStr
462
463               
464                // check for box count + error values
465                // if present, proceed
466                // TODO
467                // -- this criteria is rather crude. think it through better
468                if(emptyCts > 1 && empty_ct_err != 0)
469                        Printf "Empty beam box counts, error = %g +/- %g   already exists, box counts not re-calculated\r",emptyCts,empty_ct_err
470                       
471                else
472                        // else the counts have not been determined
473                        // read in the data file
474                        V_LoadAndPlotRAW_wName(emptyFileName)
475                        // convert raw->SAM
476                        V_Raw_to_work("SAM")
477                        V_UpdateDisplayInformation("SAM")       
478                       
479                        // and determine box sum and error
480                        // store these locally
481                        emptyCts = V_SumCountsInBox(xyBoxW[0],xyBoxW[1],xyBoxW[2],xyBoxW[3],empty_ct_err,"SAM",detStr)
482       
483                        Print "empty counts = ",emptyCts
484                        Print "empty err/counts = ",empty_ct_err/emptyCts
485                       
486                        // TODO
487                        // write these back to the file
488                        // (write locally?)
489                       
490                endif
491
492        // for Sample Transmission File
493               
494                // check for box count + error values
495                samCts = V_getBoxCounts(TransFileName)
496                sam_ct_err = V_getBoxCountsError(TransFileName)
497                // if present, proceed
498                // TODO
499                // -- this criteria is rather crude. think it through better
500                if(samCts > 1 && sam_ct_err != 0)
501                        Printf "Sam Trans box counts, error = %g +/- %g   already exists, nothing calculated\r",samCts,sam_ct_err
502                       
503                else
504                        // else
505                        // read in the data file
506                        V_LoadAndPlotRAW_wName(TransFileName)
507                        // convert raw->SAM
508                        V_Raw_to_work("SAM")
509                        V_UpdateDisplayInformation("SAM")       
510                       
511                        // get the box coordinates
512                        // and determine box sum and error
513                       
514                        // store these locally
515                        samCts = V_SumCountsInBox(xyBoxW[0],xyBoxW[1],xyBoxW[2],xyBoxW[3],sam_ct_err,"SAM",detStr)
516       
517                        Print "sam counts = ",samCts
518                        Print "sam err/counts = ",sam_ct_err/samCts
519                       
520                        // TODO
521                        // write these back to the file
522                        // (write locally?)     
523                endif
524               
525        //then calculate the transmission
526                Variable empAttenFactor,emp_atten_err,samAttenFactor,sam_atten_err,attenRatio
527               
528                // get the attenuation factor for the empty beam
529                empAttenFactor = V_getAttenuator_transmission(emptyFileName)
530                emp_atten_err = V_getAttenuator_trans_err(emptyFileName)
531                // get the attenuation factor for the sample transmission
532                samAttenFactor = V_getAttenuator_transmission(TransFileName)
533                sam_atten_err = V_getAttenuator_trans_err(TransFileName)       
534                AttenRatio = empAttenFactor/samAttenFactor             
535                // calculate the transmission
536                // calculate the transmission error
537                trans = samCts/emptyCts * AttenRatio
538                                       
539                // squared, relative error
540                if(AttenRatio == 1)
541                        trans_err = (sam_ct_err/samCts)^2 + (empty_ct_err/emptyCts)^2           //same atten, att_err drops out
542                else
543                        trans_err = (sam_ct_err/samCts)^2 + (empty_ct_err/emptyCts)^2 + (sam_atten_err/samAttenFactor)^2 + (emp_atten_err/empAttenFactor)^2
544                endif
545                trans_err = sqrt(trans_err)
546                trans_err *= trans              // now, one std deviation
547               
548                //write out counts and transmission to history window, showing the attenuator ratio, if it is not unity
549                If(attenRatio==1)
550                        Printf "%s\t\tTrans Counts = %g\tTrans = %g +/- %g\r",SamFileName, samCts,trans,trans_err
551                else
552                        Printf "%s\t\tTrans Counts = %g\tTrans = %g +/- %g\tAttenuatorRatio = %g\r",SamFileName, samCts,trans,trans_err,attenRatio
553                endif
554               
555                // write both out to the sample *scattering* file on disk
556                V_writeSampleTransmission(SamFileName,trans)
557                V_writeSampleTransError(SamFileName,trans_err) 
558               
559                // (DONE)
560                // x- update the value displayed in the panel
561                // (NO) update the local value in the file catalog
562                // x- delete the file from RawVSANS to force a re-read?
563                NVAR gTrans = root:Packages:NIST:VSANS:Globals:Transmission:gTrans
564                gTrans = trans
565                NVAR gTransErr = root:Packages:NIST:VSANS:Globals:Transmission:gTransErr
566                gTransErr = trans_err
567
568                V_KillNamedDataFolder(V_RemoveDotExtension(samFileName))
569
570        // restore preferences on exit
571        gDoDIVCor = savDivPref
572        gDoSolidAngleCor = savSAPref
573
574        return(0)                       
575
576End
577
578
579
580
581
582
583
584Function V_WriteTransmButtonProc(ba) : ButtonControl
585        STRUCT WMButtonAction &ba
586
587        switch( ba.eventCode )
588                case 2: // mouse up
589                        // click code here
590                        break
591                case -1: // control being killed
592                        break
593        endswitch
594
595        return 0
596End
597
598Function V_HelpTransmButtonProc(ba) : ButtonControl
599        STRUCT WMButtonAction &ba
600
601        switch( ba.eventCode )
602                case 2: // mouse up
603                        // click code here
604                       
605                        DoAlert 0,"Transmission Help not written yet"
606                       
607                        break
608                case -1: // control being killed
609                        break
610        endswitch
611
612        return 0
613End
614
615Function V_DoneTransmButtonProc(ba) : ButtonControl
616        STRUCT WMButtonAction &ba
617
618        switch( ba.eventCode )
619                case 2: // mouse up
620                        // click code here
621                        DoWindow/K V_TransmissionPanel
622                        break
623                case -1: // control being killed
624                        break
625        endswitch
626
627        return 0
628End
629
Note: See TracBrowser for help on using the repository browser.