Ignore:
Timestamp:
Jul 27, 2017 3:07:06 PM (5 years ago)
Author:
srkline
Message:

corrected the behavior of the annular averaging and added a button to the main panel to allow quick access.

Location:
sans/Dev/trunk/NCNR_User_Procedures/Reduction/VSANS
Files:
2 edited

Legend:

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

    r1057 r1059  
    66// 
    77// As for SANS, needs a Q-center and Q-delta to define the annular ring, 
    8 // and the number of bins to divide the 360 circle 
     8// and the number of bins to divide the 360 degree circle 
    99// 
    1010// 
     
    1616// -- integrate this with the protocol 
    1717// -- integrate this with a more general "average panel" 
    18 // -- draw the q-center and width on the image (as a contour?) 
    19  
     18// -- draw the q-center and width on the image (as a contour? - if no, use a draw layer...) 
     19//    Can I "flag" the pixels that contribute to the annualr average, and overlay them like a  
     20//    Mask(translucent?), like a "thresholding" operation, but act on the Q-value, not the Z- value. 
     21 
     22// 
     23// 
    2024Proc Annular_Binning(folderStr,detGroup,qCtr_Ann,qWidth) 
    2125        String folderStr="SAM",detGroup="F" 
     
    2327         
    2428        V_QBinAllPanels_Annular(folderStr,detGroup,qCtr_Ann,qWidth) 
    25          
    26         Phi_Graph(folderStr) 
    27          
     29 
     30        V_Phi_Graph_Proc(folderStr,detGroup) 
     31 
    2832End 
    2933 
     
    5054// done a lot faster, but... 
    5155 
    52  
    5356// TODO          
    5457                // detStr = "FLRTB" or "MLRTB", depending which panel the q-ring is centered on/ 
     
    5861 
    5962 
    60          
    61  
    6263        return(0) 
    6364End 
    6465 
    65 Window Phi_graph(folderStr) : Graph 
    66         String folderStr 
     66Proc V_Phi_Graph_Proc(folderStr,detGroup) 
     67        String folderStr,detGroup 
    6768         
    6869        PauseUpdate; Silent 1           // building window... 
    6970        String fldrSav0= GetDataFolder(1) 
    7071        SetDataFolder $("root:Packages:NIST:VSANS:"+folderStr) 
    71         Display /W=(35,45,572,419) /K=1 iBin_qxqy_FLRTB vs phiBin_qxqy_FLRTB 
    72         ModifyGraph mode=4 
    73         ModifyGraph marker=19 
    74         ErrorBars iBin_qxqy_FLRTB Y,wave=(eBin_qxqy_FLRTB,eBin_qxqy_FLRTB) 
     72 
     73        DoWindow/F V_Phi_Graph 
     74        if(V_flag == 0) 
     75                Display /W=(35,45,572,419)/N=V_Phi_Graph /K=1 
     76        else 
     77                RemoveFromGraph/Z iPhiBin_qxqy_FLRTB 
     78                RemoveFromGraph/Z iPhiBin_qxqy_MLRTB 
     79        endif 
     80 
     81        if(cmpstr(detGroup,"F") == 0) 
     82                AppendToGraph iPhiBin_qxqy_FLRTB vs phiBin_qxqy_FLRTB 
     83//              Display /W=(35,45,572,419)/N=V_Phi_Graph /K=1 iPhiBin_qxqy_FLRTB vs phiBin_qxqy_FLRTB 
     84                ModifyGraph mode=4 
     85                ModifyGraph marker=19 
     86                ErrorBars iPhiBin_qxqy_FLRTB Y,wave=(ePhiBin_qxqy_FLRTB,ePhiBin_qxqy_FLRTB) 
     87                Label left "Counts" 
     88                Label bottom "Phi (degrees)" 
     89                Legend 
     90        else 
     91                AppendToGraph iPhiBin_qxqy_MLRTB vs phiBin_qxqy_MLRTB 
     92                ModifyGraph mode=4 
     93                ModifyGraph marker=19 
     94                ErrorBars iPhiBin_qxqy_MLRTB Y,wave=(ePhiBin_qxqy_MLRTB,ePhiBin_qxqy_MLRTB) 
     95                Label left "Counts" 
     96                Label bottom "Phi (degrees)" 
     97                Legend 
     98        endif 
    7599 
    76100         
     
    272296//******TODO****** -- where to put the averaged data -- right now, folderStr is forced to ""     
    273297//      SetDataFolder $("root:"+folderStr)              //should already be here, but make sure...       
    274         Make/O/D/N=(nq)  $(folderPath+":"+"iBin_qxqy"+"_"+type) 
     298        Make/O/D/N=(nq)  $(folderPath+":"+"iPhiBin_qxqy"+"_"+type) 
    275299//      Make/O/D/N=(nq)  $(folderPath+":"+"qBin_qxqy"+"_"+type) 
    276300        Make/O/D/N=(nq)  $(folderPath+":"+"phiBin_qxqy"+"_"+type) 
    277         Make/O/D/N=(nq)  $(folderPath+":"+"nBin_qxqy"+"_"+type) 
    278         Make/O/D/N=(nq)  $(folderPath+":"+"iBin2_qxqy"+"_"+type) 
    279         Make/O/D/N=(nq)  $(folderPath+":"+"eBin_qxqy"+"_"+type) 
    280         Make/O/D/N=(nq)  $(folderPath+":"+"eBin2D_qxqy"+"_"+type) 
    281          
    282         Wave iBin_qxqy = $(folderPath+":"+"iBin_qxqy_"+type) 
     301        Make/O/D/N=(nq)  $(folderPath+":"+"nPhiBin_qxqy"+"_"+type) 
     302        Make/O/D/N=(nq)  $(folderPath+":"+"iPhiBin2_qxqy"+"_"+type) 
     303        Make/O/D/N=(nq)  $(folderPath+":"+"ePhiBin_qxqy"+"_"+type) 
     304        Make/O/D/N=(nq)  $(folderPath+":"+"ePhiBin2D_qxqy"+"_"+type) 
     305         
     306        Wave iPhiBin_qxqy = $(folderPath+":"+"iPhiBin_qxqy_"+type) 
    283307//      Wave qBin_qxqy = $(folderPath+":"+"qBin_qxqy"+"_"+type) 
    284308        Wave phiBin_qxqy = $(folderPath+":"+"phiBin_qxqy"+"_"+type) 
    285         Wave nBin_qxqy = $(folderPath+":"+"nBin_qxqy"+"_"+type) 
    286         Wave iBin2_qxqy = $(folderPath+":"+"iBin2_qxqy"+"_"+type) 
    287         Wave eBin_qxqy = $(folderPath+":"+"eBin_qxqy"+"_"+type) 
    288         Wave eBin2D_qxqy = $(folderPath+":"+"eBin2D_qxqy"+"_"+type) 
     309        Wave nPhiBin_qxqy = $(folderPath+":"+"nPhiBin_qxqy"+"_"+type) 
     310        Wave iPhiBin2_qxqy = $(folderPath+":"+"iPhiBin2_qxqy"+"_"+type) 
     311        Wave ePhiBin_qxqy = $(folderPath+":"+"ePhiBin_qxqy"+"_"+type) 
     312        Wave ePhiBin2D_qxqy = $(folderPath+":"+"ePhiBin2D_qxqy"+"_"+type) 
    289313         
    290314         
     
    305329         
    306330 
    307         iBin_qxqy = 0 
    308         iBin2_qxqy = 0 
    309         eBin_qxqy = 0 
    310         eBin2D_qxqy = 0 
    311         nBin_qxqy = 0   //number of intensities added to each bin 
     331        iPhiBin_qxqy = 0 
     332        iPhiBin2_qxqy = 0 
     333        ePhiBin_qxqy = 0 
     334        ePhiBin2D_qxqy = 0 
     335        nPhiBin_qxqy = 0        //number of intensities added to each bin 
    312336 
    313337 
     
    359383                                        endif 
    360384                                        if (numType(val)==0 && mask_val == 0)           //count only the good points, ignore Nan or Inf 
    361                                                 iBin_qxqy[iphi-1] += val 
    362                                                 iBin2_qxqy[iphi-1] += val*val 
    363                                                 eBin2D_qxqy[iphi-1] += iErr[ii][jj]*iErr[ii][jj] 
    364                                                 nBin_qxqy[iphi-1] += 1 
     385                                                iPhiBin_qxqy[iphi-1] += val 
     386                                                iPhiBin2_qxqy[iphi-1] += val*val 
     387                                                ePhiBin2D_qxqy[iphi-1] += iErr[ii][jj]*iErr[ii][jj] 
     388                                                nPhiBin_qxqy[iphi-1] += 1 
    365389                                        endif 
    366390                                 
     
    405429                                        endif 
    406430                                        if (numType(val)==0 && mask_val == 0)           //count only the good points, ignore Nan or Inf 
    407                                                 iBin_qxqy[iphi-1] += val 
    408                                                 iBin2_qxqy[iphi-1] += val*val 
    409                                                 eBin2D_qxqy[iphi-1] += iErr2[ii][jj]*iErr2[ii][jj] 
    410                                                 nBin_qxqy[iphi-1] += 1 
     431                                                iPhiBin_qxqy[iphi-1] += val 
     432                                                iPhiBin2_qxqy[iphi-1] += val*val 
     433                                                ePhiBin2D_qxqy[iphi-1] += iErr2[ii][jj]*iErr2[ii][jj] 
     434                                                nPhiBin_qxqy[iphi-1] += 1 
    411435                                        endif 
    412436                                 
     
    452476                                        endif 
    453477                                        if (numType(val)==0 && mask_val == 0)           //count only the good points, ignore Nan or Inf 
    454                                                 iBin_qxqy[iphi-1] += val 
    455                                                 iBin2_qxqy[iphi-1] += val*val 
    456                                                 eBin2D_qxqy[iphi-1] += iErr3[ii][jj]*iErr3[ii][jj] 
    457                                                 nBin_qxqy[iphi-1] += 1 
     478                                                iPhiBin_qxqy[iphi-1] += val 
     479                                                iPhiBin2_qxqy[iphi-1] += val*val 
     480                                                ePhiBin2D_qxqy[iphi-1] += iErr3[ii][jj]*iErr3[ii][jj] 
     481                                                nPhiBin_qxqy[iphi-1] += 1 
    458482                                        endif 
    459483                                 
     
    496520                                        endif 
    497521                                        if (numType(val)==0 && mask_val == 0)           //count only the good points, ignore Nan or Inf 
    498                                                 iBin_qxqy[iphi-1] += val 
    499                                                 iBin2_qxqy[iphi-1] += val*val 
    500                                                 eBin2D_qxqy[iphi-1] += iErr4[ii][jj]*iErr4[ii][jj] 
    501                                                 nBin_qxqy[iphi-1] += 1 
     522                                                iPhiBin_qxqy[iphi-1] += val 
     523                                                iPhiBin2_qxqy[iphi-1] += val*val 
     524                                                ePhiBin2D_qxqy[iphi-1] += iErr4[ii][jj]*iErr4[ii][jj] 
     525                                                nPhiBin_qxqy[iphi-1] += 1 
    502526                                        endif 
    503527                                 
     
    520544                phiBin_qxqy[ii] = dphi*ii 
    521545                 
    522                 if(nBin_qxqy[ii] == 0) 
     546                if(nPhiBin_qxqy[ii] == 0) 
    523547                        //no pixels in annuli, data unknown 
    524                         iBin_qxqy[ii] = 0 
    525                         eBin_qxqy[ii] = 1 
    526                         eBin2D_qxqy[ii] = NaN 
     548                        iPhiBin_qxqy[ii] = 0 
     549                        ePhiBin_qxqy[ii] = 1 
     550                        ePhiBin2D_qxqy[ii] = NaN 
    527551                else 
    528                         if(nBin_qxqy[ii] <= 1) 
     552                        if(nPhiBin_qxqy[ii] <= 1) 
    529553                                //need more than one pixel to determine error 
    530                                 iBin_qxqy[ii] /= nBin_qxqy[ii] 
    531                                 eBin_qxqy[ii] = 1 
    532                                 eBin2D_qxqy[ii] /= (nBin_qxqy[ii])^2 
     554                                iPhiBin_qxqy[ii] /= nPhiBin_qxqy[ii] 
     555                                ePhiBin_qxqy[ii] = 1 
     556                                ePhiBin2D_qxqy[ii] /= (nPhiBin_qxqy[ii])^2 
    533557                        else 
    534558                                //assume that the intensity in each pixel in annuli is normally distributed about mean... 
    535559                                //  -- this is correctly calculating the error as the standard error of the mean, as 
    536560                                //    was always done for SANS as well. 
    537                                 iBin_qxqy[ii] /= nBin_qxqy[ii] 
    538                                 avesq = iBin_qxqy[ii]^2 
    539                                 aveisq = iBin2_qxqy[ii]/nBin_qxqy[ii] 
     561                                iPhiBin_qxqy[ii] /= nPhiBin_qxqy[ii] 
     562                                avesq = iPhiBin_qxqy[ii]^2 
     563                                aveisq = iPhiBin2_qxqy[ii]/nPhiBin_qxqy[ii] 
    540564                                var = aveisq-avesq 
    541565                                if(var<=0) 
    542                                         eBin_qxqy[ii] = 1e-6 
     566                                        ePhiBin_qxqy[ii] = 1e-6 
    543567                                else 
    544                                         eBin_qxqy[ii] = sqrt(var/(nBin_qxqy[ii] - 1)) 
     568                                        ePhiBin_qxqy[ii] = sqrt(var/(nPhiBin_qxqy[ii] - 1)) 
    545569                                endif 
    546570                                // and calculate as it is propagated pixel-by-pixel 
    547                                 eBin2D_qxqy[ii] /= (nBin_qxqy[ii])^2 
     571                                ePhiBin2D_qxqy[ii] /= (nPhiBin_qxqy[ii])^2 
    548572                        endif 
    549573                endif 
    550574        endfor 
    551575         
    552         eBin2D_qxqy = sqrt(eBin2D_qxqy)         // as equation (3) of John's memo 
     576        ePhiBin2D_qxqy = sqrt(ePhiBin2D_qxqy)           // as equation (3) of John's memo 
    553577         
    554578        // find the last non-zero point, working backwards 
     
    556580        do 
    557581                val -= 1 
    558         while((nBin_qxqy[val] == 0) && val > 0) 
    559          
    560 //      print val, nBin_qxqy[val] 
    561         DeletePoints val, nq-val, iBin_qxqy,phiBin_qxqy,nBin_qxqy,iBin2_qxqy,eBin_qxqy,eBin2D_qxqy 
     582        while((nPhiBin_qxqy[val] == 0) && val > 0) 
     583         
     584//      print val, nPhiBin_qxqy[val] 
     585        DeletePoints val, nq-val, iPhiBin_qxqy,phiBin_qxqy,nPhiBin_qxqy,iPhiBin2_qxqy,ePhiBin_qxqy,ePhiBin2D_qxqy 
    562586 
    563587        if(val == 0) 
     
    572596        do 
    573597                val += 1 
    574         while(nBin_qxqy[val] == 0)       
    575         DeletePoints 0, val, iBin_qxqy,phiBin_qxqy,nBin_qxqy,iBin2_qxqy,eBin_qxqy,eBin2D_qxqy 
     598        while(nPhiBin_qxqy[val] == 0)    
     599        DeletePoints 0, val, iPhiBin_qxqy,phiBin_qxqy,nPhiBin_qxqy,iPhiBin2_qxqy,ePhiBin_qxqy,ePhiBin2D_qxqy 
    576600 
    577601        // ?? there still may be a point in the q-range that gets zero pixel contribution - so search this out and get rid of it 
    578         val = numpnts(nBin_qxqy)-1 
     602        val = numpnts(nPhiBin_qxqy)-1 
    579603        do 
    580                 if(nBin_qxqy[val] == 0) 
    581                         DeletePoints val, 1, iBin_qxqy,phiBin_qxqy,nBin_qxqy,iBin2_qxqy,eBin_qxqy,eBin2D_qxqy 
     604                if(nPhiBin_qxqy[val] == 0) 
     605                        DeletePoints val, 1, iPhiBin_qxqy,phiBin_qxqy,nPhiBin_qxqy,iPhiBin2_qxqy,ePhiBin_qxqy,ePhiBin2D_qxqy 
    582606                endif 
    583607                val -= 1 
     
    627651        if(cmpstr(detGroup,"F") == 0) 
    628652                Wave/Z pw = phiBin_qxqy_FLRTB 
    629                 Wave/Z iw = iBin_qxqy_FLRTB 
    630                 Wave/Z sw = eBin_qxqy_FLRTB 
     653                Wave/Z iw = iPhiBin_qxqy_FLRTB 
     654                Wave/Z sw = ePhiBin_qxqy_FLRTB 
    631655        else 
    632656                Wave/Z pw = phiBin_qxqy_MLRTB 
    633                 Wave/Z iw = iBin_qxqy_MLRTB 
    634                 Wave/Z sw = eBin_qxqy_MLRTB 
     657                Wave/Z iw = iPhiBin_qxqy_MLRTB 
     658                Wave/Z sw = ePhiBin_qxqy_MLRTB 
    635659        endif 
    636660 
  • sans/Dev/trunk/NCNR_User_Procedures/Reduction/VSANS/V_RAW_Data_Panel.ipf

    r1055 r1059  
    172172        Button button_tab_p,pos={648,81},size={50,20},proc=V_Tab_p_ButtonProc,title="Tab >" 
    173173        Button button_isolate,pos={606,114},size={70,20},proc=V_IsolateButtonProc,title="Isolate" 
    174         Button button_toWork,pos={770,113},size={70,20},proc=V_ToWorkFileButtonProc,title="to WORK" 
     174        Button button_toWork,pos={770,146},size={90,20},proc=V_ToWorkFileButtonProc,title="to WORK" 
     175        Button button_annular,pos={770,114},size={90,20},proc=V_annularAvgButtonProc,title="Annular Avg" 
    175176 
    176177        TitleBox title_file,pos={606,178},size={76,20},variable= root:Packages:NIST:VSANS:Globals:gLastLoadedFile 
     
    855856End 
    856857 
     858 
     859// 
     860// TODO: 
     861// -- simply calls the missing parameter dialog to do the average. 
     862//  see the file V_IQ_Annular.ipf for all of the features yet to be added. 
     863// 
     864// -- currently just the graph, no controls 
     865// -- this re-bins the data every time by calling V_QBinAllPanels(folderStr,binType) from inside V_BinningModePopup() 
     866Function V_annularAvgButtonProc(ba) : ButtonControl 
     867        STRUCT WMButtonAction &ba 
     868 
     869        switch( ba.eventCode ) 
     870                case 2: // mouse up 
     871                        // click code here 
     872                         
     873                        Execute "Annular_Binning()"                      
     874 
     875                        break 
     876                case -1: // control being killed 
     877                        break 
     878        endswitch 
     879 
     880        return 0 
     881End 
     882 
    857883// TODO 
    858884// 
Note: See TracChangeset for help on using the changeset viewer.