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

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

major changes to how the transmission panel functions. Now the transmission file pop selects all of the related sample files (using group_id) to allow easier batch calculation of the transmission.

File size: 20.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                       
263                        break
264                case -1: // control being killed
265                        break
266        endswitch
267
268        return 0
269End
270
271
272Function V_TEmpBeamPopMenuProc(pa) : PopupMenuControl
273        STRUCT WMPopupAction &pa
274
275        switch( pa.eventCode )
276                case 2: // mouse up
277                        Variable popNum = pa.popNum
278                        String popStr = pa.popStr
279                       
280                        Print "empty beam match at ",popStr
281                        SetVariable setvar_4,value=_STR:V_getSampleDescription(popStr)
282                       
283//                      SetVariable setvar_6,value =_STR:"ML"
284
285                        WAVE boxCoord = V_getBoxCoordinates(popStr)
286                        Print boxCoord
287                        SetVariable setvar_5,value=_STR:V_NumWave2List(boxCoord,";")
288                       
289                       
290                        break
291                case -1: // control being killed
292                        break
293        endswitch
294
295        return 0
296End
297
298
299// NOTE: DIV is not needed for the transmission calculation, since it's a ratio
300// and the DIV simply drops out. (DIV is needed for ABS scaling calculation of Kappa, since
301// that is not a ratio)
302//
303// TODO
304// -- figure out which detector corrections are necessary to do on loading
305// data for calculation. Then set/reset preferences accordingly
306// (see V_isoCorrectButtonProc() for example of how to do this)
307//
308//  -- DIV (turn off)
309// -- NonLinear (turn off ?)
310// -- solid angle (turn off ?)
311// -- dead time (keep on?)
312//
313// -- once calculated, update the Transmission panel
314// -- update the data file
315// -- update the CATALOG (and/or delete the RawVSANS to force a re-read)
316//
317Function V_CalcTransmButtonProc(ba) : ButtonControl
318        STRUCT WMButtonAction &ba
319
320        switch( ba.eventCode )
321                case 2: // mouse up
322                        // click code here
323
324                        String SamFile,TransFile,EmptyFile
325
326                        ControlInfo/W=V_TransmissionPanel popup_0
327                        SamFile = S_Value
328
329                        ControlInfo/W=V_TransmissionPanel popup_1
330                        TransFile = S_Value             
331               
332                        ControlInfo/W=V_TransmissionPanel popup_2
333                        EmptyFile = S_Value
334               
335                        V_CalcOneTransmission(SamFile,TransFile,EmptyFile)                     
336
337                       
338                        // done
339                        break
340                case -1: // control being killed
341                        break
342        endswitch
343
344
345        return 0
346End
347
348Function V_CalcTransmListButtonProc(ba) : ButtonControl
349        STRUCT WMButtonAction &ba
350
351        switch( ba.eventCode )
352                case 2: // mouse up
353                        // click code here
354
355                        SVAR gSamMatchList = root:Packages:NIST:VSANS:Globals:Transmission:gSamMatchList
356
357                        String SamFile,TransFile,EmptyFile
358
359                        ControlInfo/W=V_TransmissionPanel popup_1
360                        TransFile = S_Value             
361               
362                        ControlInfo/W=V_TransmissionPanel popup_2
363                        EmptyFile = S_Value
364               
365                        // gSamMatchStr has " at each end. remove these
366                        String list
367                        list = gSamMatchList
368                        list = list[1,strlen(list)-1]
369                        list = list[0,strlen(list)-2]
370                       
371                        Variable num,ii
372                        num = ItemsInList(list, ";")
373                        for(ii=0;ii<num;ii+=1)
374                                SamFile = StringFromList(ii, list, ";")
375                                V_CalcOneTransmission(SamFile,TransFile,EmptyFile)                     
376                        endfor
377                       
378                        Print "Done Processing Transmission List"
379
380                        // done
381                        break
382                case -1: // control being killed
383                        break
384        endswitch
385
386
387        return 0
388End
389
390
391
392Function V_CalcOneTransmission(SamFileName,TransFileName,EmptyFileName)                 
393        String SamFileName,TransFileName,EmptyFileName
394
395                Variable trans,trans_err
396                Variable emptyCts,empty_ct_err,samCts,sam_ct_err
397                String detStr
398               
399               
400                // save preferences for file loading
401                Variable savDivPref,savSAPref
402                NVAR gDoDIVCor = root:Packages:NIST:VSANS:Globals:gDoDIVCor
403                savDivPref = gDoDIVCor
404                NVAR gDoSolidAngleCor = root:Packages:NIST:VSANS:Globals:gDoSolidAngleCor
405                savSAPref = gDoSolidAngleCor
406               
407                // set local preferences
408                gDoDIVCor = 0
409                gDoSolidAngleCor = 0
410               
411                // check for sample transmission + error
412                // if present -- exit
413               
414                trans = V_getSampleTransmission(samfileName)
415                trans_err = V_getSampleTransError(samfileName)
416//                      // TODO
417//                      // -- this criteria is rather crude. think it through better
418//                      // -- or should I simply let it overwrite? What is the harm in that?
419//                      if(trans != 0 && trans < 1 && trans_err != 0)
420//                              Printf "Sample transmission, error = %g +/- %g   already exists, nothing calculated\r",trans,trans_err
421//                              break
422//                      endif
423               
424        // for empty beam               
425                emptyCts = V_getBoxCounts(emptyFileName)
426                empty_ct_err = V_getBoxCountsError(emptyFileName)
427                WAVE xyBoxW = V_getBoxCoordinates(emptyFileName)
428                // TODO
429                // x- need to get the panel string for the sum.
430                // x- the detector string is currently hard-wired
431                SVAR gEmptyPanel = root:Packages:NIST:VSANS:Globals:Transmission:gEmptyPanel
432                detStr = gEmptyPanel
433
434               
435                // check for box count + error values
436                // if present, proceed
437                // TODO
438                // -- this criteria is rather crude. think it through better
439                if(emptyCts > 1 && empty_ct_err != 0)
440                        Printf "Empty beam box counts, error = %g +/- %g   already exists, box counts not re-calculated\r",emptyCts,empty_ct_err
441                       
442                else
443                        // else the counts have not been determined
444                        // read in the data file
445                        V_LoadAndPlotRAW_wName(emptyFileName)
446                        // convert raw->SAM
447                        V_Raw_to_work("SAM")
448                        V_UpdateDisplayInformation("SAM")       
449                       
450                        // and determine box sum and error
451                        // store these locally
452                        emptyCts = V_SumCountsInBox(xyBoxW[0],xyBoxW[1],xyBoxW[2],xyBoxW[3],empty_ct_err,"SAM",detStr)
453       
454                        Print "empty counts = ",emptyCts
455                        Print "empty err/counts = ",empty_ct_err/emptyCts
456                       
457                        // TODO
458                        // write these back to the file
459                        // (write locally?)
460                       
461                endif
462
463        // for Sample Transmission File
464               
465                // check for box count + error values
466                samCts = V_getBoxCounts(TransFileName)
467                sam_ct_err = V_getBoxCountsError(TransFileName)
468                // if present, proceed
469                // TODO
470                // -- this criteria is rather crude. think it through better
471                if(samCts > 1 && sam_ct_err != 0)
472                        Printf "Sam Trans box counts, error = %g +/- %g   already exists, nothing calculated\r",samCts,sam_ct_err
473                       
474                else
475                        // else
476                        // read in the data file
477                        V_LoadAndPlotRAW_wName(TransFileName)
478                        // convert raw->SAM
479                        V_Raw_to_work("SAM")
480                        V_UpdateDisplayInformation("SAM")       
481                       
482                        // get the box coordinates
483                        // and determine box sum and error
484                       
485                        // store these locally
486                        samCts = V_SumCountsInBox(xyBoxW[0],xyBoxW[1],xyBoxW[2],xyBoxW[3],sam_ct_err,"SAM",detStr)
487       
488                        Print "sam counts = ",samCts
489                        Print "sam err/counts = ",sam_ct_err/samCts
490                       
491                        // TODO
492                        // write these back to the file
493                        // (write locally?)     
494                endif
495               
496        //then calculate the transmission
497                Variable empAttenFactor,emp_atten_err,samAttenFactor,sam_atten_err,attenRatio
498               
499                // get the attenuation factor for the empty beam
500                empAttenFactor = V_getAttenuator_transmission(emptyFileName)
501                emp_atten_err = V_getAttenuator_trans_err(emptyFileName)
502                // get the attenuation factor for the sample transmission
503                samAttenFactor = V_getAttenuator_transmission(TransFileName)
504                sam_atten_err = V_getAttenuator_trans_err(TransFileName)       
505                AttenRatio = empAttenFactor/samAttenFactor             
506                // calculate the transmission
507                // calculate the transmission error
508                trans = samCts/emptyCts * AttenRatio
509                                       
510                // squared, relative error
511                if(AttenRatio == 1)
512                        trans_err = (sam_ct_err/samCts)^2 + (empty_ct_err/emptyCts)^2           //same atten, att_err drops out
513                else
514                        trans_err = (sam_ct_err/samCts)^2 + (empty_ct_err/emptyCts)^2 + (sam_atten_err/samAttenFactor)^2 + (emp_atten_err/empAttenFactor)^2
515                endif
516                trans_err = sqrt(trans_err)
517                trans_err *= trans              // now, one std deviation
518               
519                //write out counts and transmission to history window, showing the attenuator ratio, if it is not unity
520                If(attenRatio==1)
521                        Printf "%s\t\tTrans Counts = %g\tTrans = %g +/- %g\r",SamFileName, samCts,trans,trans_err
522                else
523                        Printf "%s\t\tTrans Counts = %g\tTrans = %g +/- %g\tAttenuatorRatio = %g\r",SamFileName, samCts,trans,trans_err,attenRatio
524                endif
525               
526                // write both out to the sample *scattering* file on disk
527                V_writeSampleTransmission(SamFileName,trans)
528                V_writeSampleTransError(SamFileName,trans_err) 
529               
530                // (DONE)
531                // x- update the value displayed in the panel
532                // (NO) update the local value in the file catalog
533                // x- delete the file from RawVSANS to force a re-read?
534                NVAR gTrans = root:Packages:NIST:VSANS:Globals:Transmission:gTrans
535                gTrans = trans
536                NVAR gTransErr = root:Packages:NIST:VSANS:Globals:Transmission:gTransErr
537                gTransErr = trans_err
538
539                V_KillNamedDataFolder(V_RemoveDotExtension(samFileName))
540
541        // restore preferences on exit
542        gDoDIVCor = savDivPref
543        gDoSolidAngleCor = savSAPref
544
545        return(0)                       
546
547End
548
549
550
551
552
553
554
555Function V_WriteTransmButtonProc(ba) : ButtonControl
556        STRUCT WMButtonAction &ba
557
558        switch( ba.eventCode )
559                case 2: // mouse up
560                        // click code here
561                        break
562                case -1: // control being killed
563                        break
564        endswitch
565
566        return 0
567End
568
569Function V_HelpTransmButtonProc(ba) : ButtonControl
570        STRUCT WMButtonAction &ba
571
572        switch( ba.eventCode )
573                case 2: // mouse up
574                        // click code here
575                       
576                        DoAlert 0,"Transmission Help not written yet"
577                       
578                        break
579                case -1: // control being killed
580                        break
581        endswitch
582
583        return 0
584End
585
586Function V_DoneTransmButtonProc(ba) : ButtonControl
587        STRUCT WMButtonAction &ba
588
589        switch( ba.eventCode )
590                case 2: // mouse up
591                        // click code here
592                        DoWindow/K V_TransmissionPanel
593                        break
594                case -1: // control being killed
595                        break
596        endswitch
597
598        return 0
599End
600
Note: See TracBrowser for help on using the repository browser.