Ignore:
Timestamp:
Dec 1, 2017 2:53:00 PM (5 years ago)
Author:
srkline
Message:

changes here are mostly to facilitate the generation and display of DIV files. Set up a simple sequence to normalize DIV data sets and copy the normalized panels to the temporary folder for saving. Made a simple panel to display the 4 panels from a carriage, and to do simple subtract or divide comparison to track changes in DIV over time.

For mask drawing, made the overlay semi-transparent so that the original data can be seen through it - but kept the toggle. log/lin scaling is now based on the VSANS preference.

Adjusted the mouse tracking of the pixel on the RAW data display to properly track the T/B panels with their half-size pixels.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sans/Dev/trunk/NCNR_User_Procedures/Reduction/VSANS/V_DIVUtils.ipf

    r1071 r1075  
    2525// the high angle issues. 
    2626// 
    27 // -- what about the T/B panels? Since a large chunk of these detectors may be obscured, 
     27// x- what about the T/B panels? Since a large chunk of these detectors may be obscured, 
    2828//   the normalization will be way off -- and the "active" area will end up much larger  
    2929//   than it should be - since the wings of the detector are mostly zero... 
     
    3434 
    3535/// TODO: 
    36 // -- this is the basic renormalization that is done in PRODIV. see that file for all of the  
     36// -- need a way to view the DIV data (each panel) and see the stats on the values 
     37//  (maybe a simple panel viewer, one-at-a-time, or all 4 as individuals, not on the same scale) 
     38 
     39// x- this is the basic renormalization that is done in PRODIV. see that file for all of the  
    3740//    details of how it's used 
    38 // -- update to VSANS file locations and data reads 
    39 // -- expand this to do a basic renormalization of all 9 panels, and move the data into the  
     41// x- update to VSANS file locations and data reads 
     42// x- expand this to do a basic renormalization of all 9 panels, and move the data into the  
    4043//    appropriate locations for saving as a DIV file. 
    4144// x- (YES, done) what about error propogation? Can I store the error in the data file? 
    4245//    Makes a difference if the DIV is not collected for long "enough". 
    4346// x- then I need to be able to read the error in (done) 
    44 // 
     47 
    4548 
    4649 
    4750// Basic function: 
    48 // -- first, reduce the data (to the COR level?) 
    49 // -- next, V_NormalizeDIV() 
    50 // -- then Setup_VSANS_DIV_Struct() 
     51// -- Setup_VSANS_DIV_Struct() 
     52// -- then, reduce the data (to the COR level?) 
     53// -- next, V_NormalizeDIV() (one panel at a time, using the mask) 
    5154// -- next, V_CopyDIVToSave() -or- V_CopyDIVToSave_OnePanel() 
    5255// -- last, Save_VSANS_DIV_Nexus()  
    5356// 
    5457 
     58 
     59 
     60 
     61 
     62 
     63 
     64Proc V_NormalizeDIV_proc(type,detStr) 
     65        String type,detStr 
     66        V_NormalizeDIV_onePanel(type,detStr) 
     67end 
     68 
     69// Normalizes a single panel 
     70// then copies that panel over to the DIV_Struct for later saving 
     71// 
     72// type is the work folder where the (? corrected) data is currently 
     73// 
     74// TODO 
     75// x- data should be copied to some alternate work folder before this step 
     76// x- for T/B detectors, this may not work as intended if the whole detector is not illuminated. 
     77//    How to handle? A mask? 
     78// x- is this the correct calculation of the error? (YES) It should be correct up to this point since the 
     79//    standard reduction has been used, but now the normalization step is a multiplication 
     80//    by a constant (w/no error). Be sure this error transformation is correct. (YES - this is correct, and is 
     81//    what is done in SANS) 
     82// 
     83Function V_NormalizeDIV_onePanel(type,detStr) 
     84        String type,detStr 
     85 
     86        Variable ii,totCts,pixelX,pixelY 
     87 
     88 
     89        Wave w = V_getDetectorDataW(type,detStr) 
     90        Wave w_err = V_getDetectorDataErrW(type,detStr) 
     91//      pixelX = V_getDet_pixel_num_x(type,detStr) 
     92//      pixelY = V_getDet_pixel_num_y(type,detStr) 
     93 
     94        // get the mask data 
     95        // 1== mask, 0 == no mask 
     96        Wave maskW = $("root:Packages:NIST:VSANS:MSK:entry:instrument:detector_"+detStr+":data") 
     97 
     98// work on a copy of the data and error 
     99        Duplicate/O w w_copy 
     100        Duplicate/O w_err w_err_copy 
     101         
     102        w_copy = (maskW == 1) ? NaN : w_copy     
     103        WaveStats/Q/M=1 w_copy 
     104        totCts = V_npnts*V_avg          // does not count the NaN values 
     105 
     106 
     107        w_copy /= totCts 
     108        w_copy *= V_npnts 
     109 
     110        w_err_copy /= totCts 
     111        w_err_copy *= V_npnts 
     112 
     113// TODO: 
     114// -- do I want to replace the NaN values with 1 for the DIV (the user will mask the data as 
     115//    needed, and the NaN values may be an issue later... 
     116        w_copy = (numtype(w_copy) == 2) ? 1 : w_copy                    //turns 2==NaN into 1 
     117         
     118 
     119// copy the normalized data to the folder to save 
     120        Wave w_norm = $("root:VSANS_DIV_file:entry:instrument:detector_"+detStr+":data") 
     121        Wave w_norm_err = $("root:VSANS_DIV_file:entry:instrument:detector_"+detStr+":linear_data_error") 
     122                 
     123        w_norm = w_copy 
     124        w_norm_err = w_err_copy 
     125 
     126 
     127        KillWaves/Z w_copy,w_err_copy 
     128         
     129        return(0) 
     130End 
    55131 
    56132 
     
    211287                        Make/O/T/N=1    name    = "NG3_VSANS" 
    212288                NewDataFolder/O/S root:VSANS_DIV_file:entry:instrument:detector_B        
    213                         Make/O/D/N=(150,150)    data    = 1 //+ (enoise(0.1)) 
    214                         Make/O/D/N=(150,150)    linear_data_error       = 0.01*abs(gnoise(1)) 
     289                        Make/O/D/N=(150,150)    data    = 1  
     290                        Make/O/D/N=(150,150)    linear_data_error       = 0.01 
    215291                NewDataFolder/O/S root:VSANS_DIV_file:entry:instrument:detector_MR               
    216292                        Make/O/D/N=(48,128)     data = 1 
    217 //                      data[][0] = 1+enoise(0.1) 
    218 //                      data[][] = data[p][0] 
    219                         Make/O/D/N=(48,128)     linear_data_error       = 0.01*abs(gnoise(1)) 
     293                        Make/O/D/N=(48,128)     linear_data_error       = 0.01 
    220294                NewDataFolder/O/S root:VSANS_DIV_file:entry:instrument:detector_ML               
    221295                        Make/O/D/N=(48,128)     data = 1 
    222 //                      data[][0] = 1+enoise(0.1) 
    223 //                      data[][] = data[p][0] 
    224                         Make/O/D/N=(48,128)     linear_data_error       = 0.01*abs(gnoise(1)) 
     296                        Make/O/D/N=(48,128)     linear_data_error       = 0.01 
    225297                NewDataFolder/O/S root:VSANS_DIV_file:entry:instrument:detector_MT               
    226                         Make/O/D/N=(128,48)     data    = 1// + (enoise(0.1)) 
    227                         Make/O/D/N=(128,48)     linear_data_error       = 0.01*abs(gnoise(1)) 
     298                        Make/O/D/N=(128,48)     data    = 1 
     299                        Make/O/D/N=(128,48)     linear_data_error       = 0.01 
    228300                NewDataFolder/O/S root:VSANS_DIV_file:entry:instrument:detector_MB               
    229                         Make/O/D/N=(128,48)     data    = 1 //+ (enoise(0.1)) 
    230                         Make/O/D/N=(128,48)     linear_data_error       = 0.01*abs(gnoise(1)) 
     301                        Make/O/D/N=(128,48)     data    = 1  
     302                        Make/O/D/N=(128,48)     linear_data_error       = 0.01 
    231303                NewDataFolder/O/S root:VSANS_DIV_file:entry:instrument:detector_FR               
    232304                        Make/O/D/N=(48,128)     data = 1 
    233 //                      data[][0] = 1+enoise(0.1) 
    234 //                      data[][] = data[p][0] 
    235                         Make/O/D/N=(48,128)     linear_data_error       = 0.01*abs(gnoise(1)) 
     305                        Make/O/D/N=(48,128)     linear_data_error       = 0.01 
    236306                NewDataFolder/O/S root:VSANS_DIV_file:entry:instrument:detector_FL               
    237307                        Make/O/D/N=(48,128)     data = 1 
    238 //                      data[][0] = 1+enoise(0.1) 
    239 //                      data[][] = data[p][0] 
    240                         Make/O/D/N=(48,128)     linear_data_error       = 0.01*abs(gnoise(1)) 
     308                        Make/O/D/N=(48,128)     linear_data_error       = 0.01 
    241309                NewDataFolder/O/S root:VSANS_DIV_file:entry:instrument:detector_FT               
    242                         Make/O/D/N=(128,48)     data    = 1 //+ (enoise(0.1)) 
    243                         Make/O/D/N=(128,48)     linear_data_error       = 0.01*abs(gnoise(1)) 
     310                        Make/O/D/N=(128,48)     data    = 1  
     311                        Make/O/D/N=(128,48)     linear_data_error       = 0.01 
    244312                NewDataFolder/O/S root:VSANS_DIV_file:entry:instrument:detector_FB               
    245                         Make/O/D/N=(128,48)     data    = 1 //+ (enoise(0.1)) 
    246                         Make/O/D/N=(128,48)     linear_data_error       = 0.01*abs(gnoise(1)) 
     313                        Make/O/D/N=(128,48)     data    = 1  
     314                        Make/O/D/N=(128,48)     linear_data_error       = 0.01 
    247315 
    248316// 
     
    302370 
    303371End 
     372 
     373 
     374 
     375// 
     376// simple panel to display the 4 detector panels 
     377// 
     378// TODO: 
     379// -- label panels, axes 
     380// x- any manipulations, stats ? 
     381// x- add an "update" button (to update the status of the data - this may be automatic with an operation) 
     382// -- add a "load DIV" button 
     383// -- add a "copy" button 
     384// x- add a "ratio" button 
     385// x- add a "difference" button 
     386// -- propagate the error in the arithmetic (see WorkFileMath) 
     387// -- un hard-wire the Front carriage from the panel proc 
     388 
     389Proc V_Display_DIV_Panels() 
     390        PauseUpdate; Silent 1           // building window... 
     391        NewPanel /W=(720,45,1530,570)/N=VSANS_DIVPanels/K=1 
     392        DoWindow/C VSANS_DIVPanels 
     393//      ModifyPanel fixedSize=1,noEdit =1 
     394 
     395 
     396        PopupMenu popup0,pos={17.00,10.00},size={77.00,23.00},proc=V_DispCarriagePopMenuProc,title="Carriage" 
     397        PopupMenu popup0,mode=1,value= #"\"F;M;\"" 
     398        PopupMenu popup1,pos={134.00,10.00},size={68.00,23.00},proc=V_DispFolderPopMenuProc,title="Folder" 
     399        PopupMenu popup1,mode=1,popvalue="RAW",value= #"\"SAM;EMP;BGD;DIV;COR;CAL;RAW;ABS;STO;SUB;DRK;MSK;ADJ;\"" 
     400        PopupMenu popup2,pos={246.00,10.00},size={83.00,23.00},proc=V_DispOperationPopMenuProc,title="Operation" 
     401        PopupMenu popup2,mode=1,value= #"\"none;ADJ=STO-SUB;ADJ=STO/SUB;\"" 
     402        Button button0,pos={440.00,10.00},size={70.00,20.00},proc=V_DispUpdateButtonProc,title="Update" 
     403 
     404 
     405//      Display/W=(745,45,945,425)/HOST=#  
     406        Display/W=(10,45,210,425)/HOST=#  
     407        AppendImage/T/G=1 :Packages:NIST:VSANS:RAW:entry:instrument:detector_FL:data            //  /G=1 flag prevents interpretation as RGB so 3, 4 slices display correctly 
     408        ModifyImage data ctab= {*,*,ColdWarm,0} 
     409        ModifyImage data ctabAutoscale=3 
     410        ModifyGraph margin(left)=14,margin(bottom)=14,margin(top)=14,margin(right)=14 
     411        ModifyGraph mirror=2 
     412        ModifyGraph nticks=4 
     413        ModifyGraph minor=1 
     414        ModifyGraph fSize=9 
     415        ModifyGraph standoff=0 
     416        ModifyGraph tkLblRot(left)=90 
     417        ModifyGraph btLen=3 
     418        ModifyGraph tlOffset=-2 
     419        RenameWindow #,Panel_L 
     420        SetActiveSubwindow ## 
     421 
     422//      Display/W=(1300,45,1500,425)/HOST=#  
     423        Display/W=(565,45,765,425)/HOST=#  
     424        AppendImage/T/G=1 :Packages:NIST:VSANS:RAW:entry:instrument:detector_FR:data            //  /G=1 flag prevents interpretation as RGB so 3, 4 slices display correctly 
     425        ModifyImage data ctab= {*,*,ColdWarm,0} 
     426        ModifyImage data ctabAutoscale=3 
     427        ModifyGraph margin(left)=14,margin(bottom)=14,margin(top)=14,margin(right)=14 
     428        ModifyGraph mirror=2 
     429        ModifyGraph nticks=4 
     430        ModifyGraph minor=1 
     431        ModifyGraph fSize=9 
     432        ModifyGraph standoff=0 
     433        ModifyGraph tkLblRot(left)=90 
     434        ModifyGraph btLen=3 
     435        ModifyGraph tlOffset=-2 
     436        RenameWindow #,Panel_R 
     437        SetActiveSubwindow ## 
     438 
     439//      Display/W=(945,45,1300,235)/HOST=#  
     440        Display/W=(210,45,565,235)/HOST=#  
     441        AppendImage/T/G=1 :Packages:NIST:VSANS:RAW:entry:instrument:detector_FT:data            //  /G=1 flag prevents interpretation as RGB so 3, 4 slices display correctly 
     442        ModifyImage data ctab= {*,*,ColdWarm,0} 
     443        ModifyImage data ctabAutoscale=3 
     444        ModifyGraph margin(left)=14,margin(bottom)=14,margin(top)=14,margin(right)=14 
     445        ModifyGraph mirror=2 
     446        ModifyGraph nticks=4 
     447        ModifyGraph minor=1 
     448        ModifyGraph fSize=9 
     449        ModifyGraph standoff=0 
     450        ModifyGraph tkLblRot(left)=90 
     451        ModifyGraph btLen=3 
     452        ModifyGraph tlOffset=-2 
     453        RenameWindow #,Panel_T 
     454        SetActiveSubwindow ## 
     455 
     456//      Display/W=(945,235,1300,425)/HOST=#  
     457        Display/W=(210,235,565,425)/HOST=#  
     458        AppendImage/T/G=1 :Packages:NIST:VSANS:RAW:entry:instrument:detector_FB:data            //  /G=1 flag prevents interpretation as RGB so 3, 4 slices display correctly 
     459        ModifyImage data ctab= {*,*,ColdWarm,0} 
     460        ModifyImage data ctabAutoscale=3 
     461        ModifyGraph margin(left)=14,margin(bottom)=14,margin(top)=14,margin(right)=14 
     462        ModifyGraph mirror=2 
     463        ModifyGraph nticks=4 
     464        ModifyGraph minor=1 
     465        ModifyGraph fSize=9 
     466        ModifyGraph standoff=0 
     467        ModifyGraph tkLblRot(left)=90 
     468        ModifyGraph btLen=3 
     469        ModifyGraph tlOffset=-2 
     470        RenameWindow #,Panel_B 
     471        SetActiveSubwindow ## 
     472// 
     473 
     474        String/G root:Packages:NIST:VSANS:Globals:gDIVstr0 = "this is the title box0\rwith two lines" 
     475        String/G root:Packages:NIST:VSANS:Globals:gDIVstr1 = "this is the title box1\rwith two lines" 
     476        String/G root:Packages:NIST:VSANS:Globals:gDIVstr2 = "this is the title box2\rwith two lines" 
     477        String/G root:Packages:NIST:VSANS:Globals:gDIVstr3 = "this is the title box3\rwith two lines" 
     478         
     479         
     480        TitleBox title0 pos={15,450},size={112,36},title=root:Packages:NIST:VSANS:Globals:gDIVstr0,fSize=11 
     481        TitleBox title1 pos={300,433},size={112,36},title=root:Packages:NIST:VSANS:Globals:gDIVstr1,fSize=11 
     482        TitleBox title2 pos={300,482},size={112,36},title=root:Packages:NIST:VSANS:Globals:gDIVstr2,fSize=11 
     483        TitleBox title3 pos={580,450},size={112,36},title=root:Packages:NIST:VSANS:Globals:gDIVstr3,fSize=11 
     484 
     485 
     486        V_UpdateDIVStrings() 
     487End 
     488 
     489 
     490// called by the "update" button 
     491Proc V_UpdatePanelDisp() 
     492 
     493        ControlInfo popup0 
     494        String carrStr = S_value 
     495         
     496        ControlInfo popup1 
     497        String folder = S_Value 
     498         
     499        // remove the image 
     500        // append the new image 
     501        RemoveImage/Z/W=VSANS_DIVPanels#Panel_L data 
     502        AppendImage/T/G=1/W=VSANS_DIVPanels#Panel_L $("root:Packages:NIST:VSANS:"+folder+":entry:instrument:detector_"+carrStr+"L:data")                 
     503        SetActiveSubwindow VSANS_DIVPanels#Panel_L 
     504        ModifyImage data ctab= {*,*,ColdWarm,0} 
     505        ModifyImage data ctabAutoscale=3 
     506        ModifyGraph margin(left)=14,margin(bottom)=14,margin(top)=14,margin(right)=14 
     507        ModifyGraph mirror=2 
     508        ModifyGraph nticks=4 
     509        ModifyGraph minor=1 
     510        ModifyGraph fSize=9 
     511        ModifyGraph standoff=0 
     512        ModifyGraph tkLblRot(left)=90 
     513        ModifyGraph btLen=3 
     514        ModifyGraph tlOffset=-2 
     515        SetActiveSubwindow ## 
     516 
     517 
     518        RemoveImage/Z/W=VSANS_DIVPanels#Panel_T data 
     519        AppendImage/T/G=1/W=VSANS_DIVPanels#Panel_T $("root:Packages:NIST:VSANS:"+folder+":entry:instrument:detector_"+carrStr+"T:data")                 
     520        SetActiveSubwindow VSANS_DIVPanels#Panel_T 
     521        ModifyImage data ctab= {*,*,ColdWarm,0} 
     522        ModifyImage data ctabAutoscale=3 
     523        ModifyGraph margin(left)=14,margin(bottom)=14,margin(top)=14,margin(right)=14 
     524        ModifyGraph mirror=2 
     525        ModifyGraph nticks=4 
     526        ModifyGraph minor=1 
     527        ModifyGraph fSize=9 
     528        ModifyGraph standoff=0 
     529        ModifyGraph tkLblRot(left)=90 
     530        ModifyGraph btLen=3 
     531        ModifyGraph tlOffset=-2 
     532        SetActiveSubwindow ## 
     533         
     534        RemoveImage/Z/W=VSANS_DIVPanels#Panel_B data 
     535        AppendImage/T/G=1/W=VSANS_DIVPanels#Panel_B $("root:Packages:NIST:VSANS:"+folder+":entry:instrument:detector_"+carrStr+"B:data")                 
     536        SetActiveSubwindow VSANS_DIVPanels#Panel_B 
     537        ModifyImage data ctab= {*,*,ColdWarm,0} 
     538        ModifyImage data ctabAutoscale=3 
     539        ModifyGraph margin(left)=14,margin(bottom)=14,margin(top)=14,margin(right)=14 
     540        ModifyGraph mirror=2 
     541        ModifyGraph nticks=4 
     542        ModifyGraph minor=1 
     543        ModifyGraph fSize=9 
     544        ModifyGraph standoff=0 
     545        ModifyGraph tkLblRot(left)=90 
     546        ModifyGraph btLen=3 
     547        ModifyGraph tlOffset=-2 
     548        SetActiveSubwindow ## 
     549 
     550        RemoveImage/Z/W=VSANS_DIVPanels#Panel_R data 
     551        AppendImage/T/G=1/W=VSANS_DIVPanels#Panel_R $("root:Packages:NIST:VSANS:"+folder+":entry:instrument:detector_"+carrStr+"R:data")                 
     552        SetActiveSubwindow VSANS_DIVPanels#Panel_R 
     553        ModifyImage data ctab= {*,*,ColdWarm,0} 
     554        ModifyImage data ctabAutoscale=3 
     555        ModifyGraph margin(left)=14,margin(bottom)=14,margin(top)=14,margin(right)=14 
     556        ModifyGraph mirror=2 
     557        ModifyGraph nticks=4 
     558        ModifyGraph minor=1 
     559        ModifyGraph fSize=9 
     560        ModifyGraph standoff=0 
     561        ModifyGraph tkLblRot(left)=90 
     562        ModifyGraph btLen=3 
     563        ModifyGraph tlOffset=-2 
     564        SetActiveSubwindow ## 
     565 
     566End 
     567 
     568 
     569 
     570 
     571Function V_DispFolderPopMenuProc(pa) : PopupMenuControl 
     572        STRUCT WMPopupAction &pa 
     573 
     574        switch( pa.eventCode ) 
     575                case 2: // mouse up 
     576                        Variable popNum = pa.popNum 
     577                        String popStr = pa.popStr 
     578                        break 
     579                case -1: // control being killed 
     580                        break 
     581        endswitch 
     582 
     583        return 0 
     584End 
     585 
     586Function V_DispCarriagePopMenuProc(pa) : PopupMenuControl 
     587        STRUCT WMPopupAction &pa 
     588 
     589        switch( pa.eventCode ) 
     590                case 2: // mouse up 
     591                        Variable popNum = pa.popNum 
     592                        String popStr = pa.popStr 
     593                        break 
     594                case -1: // control being killed 
     595                        break 
     596        endswitch 
     597 
     598        return 0 
     599End 
     600 
     601Function V_DispOperationPopMenuProc(pa) : PopupMenuControl 
     602        STRUCT WMPopupAction &pa 
     603 
     604        switch( pa.eventCode ) 
     605                case 2: // mouse up 
     606                        Variable popNum = pa.popNum 
     607                        String popStr = pa.popStr 
     608                        break 
     609                case -1: // control being killed 
     610                        break 
     611        endswitch 
     612 
     613        return 0 
     614End 
     615 
     616Function V_DispUpdateButtonProc(ba) : ButtonControl 
     617        STRUCT WMButtonAction &ba 
     618 
     619        switch( ba.eventCode ) 
     620                case 2: // mouse up 
     621                        // click code here 
     622                         
     623                        // if there is an operation, do it 
     624                        V_DoDIVOperation() 
     625                         
     626                        // update the data that is displayed 
     627                        Execute "V_UpdatePanelDisp()" 
     628                         
     629                         
     630                        // update the global strings 
     631                        V_UpdateDIVStrings() 
     632 
     633                         
     634                        break 
     635                case -1: // control being killed 
     636                        break 
     637        endswitch 
     638 
     639        return 0 
     640End 
     641 
     642Function V_UpdateDIVStrings() 
     643 
     644        SVAR gDIVstr0 = root:Packages:NIST:VSANS:Globals:gDIVstr0  
     645        SVAR gDIVstr1 = root:Packages:NIST:VSANS:Globals:gDIVstr1 
     646        SVAR gDIVstr2 = root:Packages:NIST:VSANS:Globals:gDIVstr2 
     647        SVAR gDIVstr3 = root:Packages:NIST:VSANS:Globals:gDIVstr3 
     648         
     649        ControlInfo popup0 
     650        String carrStr = S_value 
     651         
     652        ControlInfo popup1 
     653        String folder = S_Value 
     654         
     655        String  formatStr="Avg = %g +/- %g\rMin = %g, Max = %g" 
     656         
     657        WaveStats/Q $("root:Packages:NIST:VSANS:"+folder+":entry:instrument:detector_"+carrStr+"L:data") 
     658        sprintf gDIVstr0,formatStr,V_avg,V_sdev,V_min,V_max 
     659         
     660        WaveStats/Q $("root:Packages:NIST:VSANS:"+folder+":entry:instrument:detector_"+carrStr+"T:data") 
     661        sprintf gDIVstr1,formatStr,V_avg,V_sdev,V_min,V_max 
     662         
     663        WaveStats/Q $("root:Packages:NIST:VSANS:"+folder+":entry:instrument:detector_"+carrStr+"B:data") 
     664        sprintf gDIVstr2,formatStr,V_avg,V_sdev,V_min,V_max 
     665         
     666        WaveStats/Q $("root:Packages:NIST:VSANS:"+folder+":entry:instrument:detector_"+carrStr+"R:data") 
     667        sprintf gDIVstr3,formatStr,V_avg,V_sdev,V_min,V_max 
     668 
     669        TitleBox title0 title=gDIVstr0 
     670        TitleBox title1 title=gDIVstr1 
     671        TitleBox title2 title=gDIVstr2 
     672        TitleBox title3 title=gDIVstr3 
     673                         
     674        return(0) 
     675end 
     676 
     677// if there is a simple operation called, do it 
     678Function V_DoDIVOperation() 
     679 
     680        ControlInfo popup2 
     681        String opStr = S_value 
     682         
     683        if(cmpstr(opStr,"none")==0) 
     684                return(0) 
     685        endif 
     686         
     687        ControlInfo popup0 
     688        String carrStr = S_value 
     689        // an operation is desired 
     690        // hard-wired use of STO and SUB, copy results to ADJ 
     691         
     692        // make sure that something is in ADJ 
     693        // TODO -- reset the values of the data in ADJ, or it will look like the wrong calculation was done 
     694        //V_CopyWorkFolder("STO","ADJ")         // this is a macro, use the function instead 
     695        V_CopyHDFToWorkFolder("STO","ADJ") 
     696 
     697        WAVE w_sto_L = $("root:Packages:NIST:VSANS:STO:entry:instrument:detector_"+carrStr+"L:data") 
     698        WAVE w_sub_L = $("root:Packages:NIST:VSANS:SUB:entry:instrument:detector_"+carrStr+"L:data") 
     699        Duplicate/O w_sto_L $("root:Packages:NIST:VSANS:ADJ:entry:instrument:detector_"+carrStr+"L:data") 
     700        WAVE w_adj_L = $("root:Packages:NIST:VSANS:ADJ:entry:instrument:detector_"+carrStr+"L:data") 
     701 
     702        WAVE w_sto_R = $("root:Packages:NIST:VSANS:STO:entry:instrument:detector_"+carrStr+"R:data") 
     703        WAVE w_sub_R = $("root:Packages:NIST:VSANS:SUB:entry:instrument:detector_"+carrStr+"R:data") 
     704        Duplicate/O w_sto_R $("root:Packages:NIST:VSANS:ADJ:entry:instrument:detector_"+carrStr+"R:data") 
     705        WAVE w_adj_R = $("root:Packages:NIST:VSANS:ADJ:entry:instrument:detector_"+carrStr+"R:data") 
     706 
     707        WAVE w_sto_T = $("root:Packages:NIST:VSANS:STO:entry:instrument:detector_"+carrStr+"T:data") 
     708        WAVE w_sub_T = $("root:Packages:NIST:VSANS:SUB:entry:instrument:detector_"+carrStr+"T:data") 
     709        Duplicate/O w_sto_T $("root:Packages:NIST:VSANS:ADJ:entry:instrument:detector_"+carrStr+"T:data") 
     710        WAVE w_adj_T = $("root:Packages:NIST:VSANS:ADJ:entry:instrument:detector_"+carrStr+"T:data") 
     711 
     712        WAVE w_sto_B = $("root:Packages:NIST:VSANS:STO:entry:instrument:detector_"+carrStr+"B:data") 
     713        WAVE w_sub_B = $("root:Packages:NIST:VSANS:SUB:entry:instrument:detector_"+carrStr+"B:data") 
     714        Duplicate/O w_sto_B $("root:Packages:NIST:VSANS:ADJ:entry:instrument:detector_"+carrStr+"B:data") 
     715        WAVE w_adj_B = $("root:Packages:NIST:VSANS:ADJ:entry:instrument:detector_"+carrStr+"B:data") 
     716 
     717         
     718        if(cmpstr(opStr,"ADJ=STO/SUB")==0) 
     719                w_adj_L = w_sto_L/w_sub_L 
     720                w_adj_R = w_sto_R/w_sub_R 
     721                w_adj_T = w_sto_T/w_sub_T 
     722                w_adj_B = w_sto_B/w_sub_B 
     723        else 
     724                w_adj_L = w_sto_L - w_sub_L 
     725                w_adj_R = w_sto_R - w_sub_R 
     726                w_adj_T = w_sto_T - w_sub_T 
     727                w_adj_B = w_sto_B - w_sub_B 
     728        endif 
     729 
     730        return(0) 
     731end 
     732 
     733 
     734// 
     735// Simple panel to walk through the steps of generating a DIV file 
     736// 
     737 
     738 
     739 
     740 
     741Proc DIV_Setup_Panel() : Panel 
     742        PauseUpdate; Silent 1           // building window... 
     743        NewPanel /W=(1207,593,1444,953)/N=DIV_Setup_Panel/K=1 
     744        DoWindow/C DIV_Setup_Panel 
     745        Button button0,pos={54.00,10.00},size={120.00,20.00},proc=V_DIVSetupButtonProc,title="Setup Folder" 
     746        Button button1,pos={54.00,100.00},size={120.00,20.00},proc=V_DIVNormalizeButtonProc,title="Normalize" 
     747        Button button2,pos={54.00,200.00},size={120.00,20.00},proc=V_DIVSaveButtonProc,title="Save DIV" 
     748EndMacro 
     749 
     750// set up the folder structure for the DIV file to fill in 
     751Function V_DIVSetupButtonProc(ba) : ButtonControl 
     752        STRUCT WMButtonAction &ba 
     753 
     754        switch( ba.eventCode ) 
     755                case 2: // mouse up 
     756                        // click code here 
     757                        Execute "Setup_VSANS_DIV_Struct()" 
     758                        break 
     759                case -1: // control being killed 
     760                        break 
     761        endswitch 
     762 
     763        return 0 
     764End 
     765 
     766 
     767Function V_DIVNormalizeButtonProc(ba) : ButtonControl 
     768        STRUCT WMButtonAction &ba 
     769 
     770        switch( ba.eventCode ) 
     771                case 2: // mouse up 
     772                        // click code here 
     773                        Execute "V_NormalizeDIV_proc()" 
     774                        break 
     775                case -1: // control being killed 
     776                        break 
     777        endswitch 
     778 
     779        return 0 
     780End 
     781 
     782Function V_DIVSaveButtonProc(ba) : ButtonControl 
     783        STRUCT WMButtonAction &ba 
     784 
     785        switch( ba.eventCode ) 
     786                case 2: // mouse up 
     787                        // click code here 
     788                        Execute "Save_VSANS_DIV_Nexus()" 
     789                        break 
     790                case -1: // control being killed 
     791                        break 
     792        endswitch 
     793 
     794        return 0 
     795End 
Note: See TracChangeset for help on using the changeset viewer.