Ignore:
Timestamp:
Jul 21, 2017 2:56:37 PM (5 years ago)
Author:
srkline
Message:

adding the annular average option to the protocol definition and execution.

File:
1 edited

Legend:

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

    r1056 r1057  
    1212// TODO 
    1313// x- add error bars to the plot of phi 
    14 // -- data writer to export annular data (3-column) 
    15 // -- loader to re-read annular data (will the normal loader work? 
     14// x- data writer to export annular data (3-column) 
     15// x- loader to re-read annular data (will the normal loader work?) -- yes 
    1616// -- integrate this with the protocol 
    1717// -- integrate this with a more general "average panel" 
     
    6969        String fldrSav0= GetDataFolder(1) 
    7070        SetDataFolder $("root:Packages:NIST:VSANS:"+folderStr) 
    71         Display /W=(35,45,572,419) iBin_qxqy_FLRTB vs phiBin_qxqy_FLRTB 
     71        Display /W=(35,45,572,419) /K=1 iBin_qxqy_FLRTB vs phiBin_qxqy_FLRTB 
    7272        ModifyGraph mode=4 
    7373        ModifyGraph marker=19 
     
    124124 
    125125        strswitch(type) // string switch 
    126 //              case "FL":              // execute if case matches expression 
    127 //              case "FR": 
    128 //                      detStr = type 
    129 //                      if(isVCALC) 
    130 //                              WAVE inten = $(folderPath+instPath+detStr+":det_"+detStr) 
    131 //                              WAVE/Z iErr = $("iErr_"+detStr)                 // 2D errors -- may not exist, especially for simulation 
    132 //                      else 
    133 //                              Wave inten = V_getDetectorDataW(folderStr,detStr) 
    134 //                              Wave iErr = V_getDetectorDataErrW(folderStr,detStr) 
    135 //                              Wave/Z mask = $("root:Packages:NIST:VSANS:MSK:entry:instrument:detector_"+detStr+":data") 
    136 //                              if(WaveExists(mask) == 1) 
    137 //                                      maskMissing = 0 
    138 //                              endif 
    139 //                               
    140 //                      endif 
    141 //                      NVAR delQ = $(folderPath+instPath+detStr+":gDelQ_"+detStr) 
    142 //                      Wave qTotal = $(folderPath+instPath+detStr+":qTot_"+detStr)                     // 2D q-values 
    143 //                      nSets = 1 
    144 //                      break    
    145 //                                                               
    146 //              case "FT":               
    147 //              case "FB": 
    148 //                      detStr = type 
    149 //                      if(isVCALC) 
    150 //                              WAVE inten = $(folderPath+instPath+detStr+":det_"+detStr) 
    151 //                              WAVE/Z iErr = $("iErr_"+detStr)                 // 2D errors -- may not exist, especially for simulation                 
    152 //                      else 
    153 //                              Wave inten = V_getDetectorDataW(folderStr,detStr) 
    154 //                              Wave iErr = V_getDetectorDataErrW(folderStr,detStr) 
    155 //                              Wave/Z mask = $("root:Packages:NIST:VSANS:MSK:entry:instrument:detector_"+detStr+":data") 
    156 //                              if(WaveExists(mask) == 1) 
    157 //                                      maskMissing = 0 
    158 //                              endif 
    159 //                      endif 
    160 //                      NVAR delQ = $(folderPath+instPath+detStr+":gDelQ_"+detStr) 
    161 //                      Wave qTotal = $(folderPath+instPath+detStr+":qTot_"+detStr)                     // 2D q-values 
    162 //                      nSets = 1 
    163 //                      break 
    164 //                       
    165 //              case "ML":               
    166 //              case "MR": 
    167 //                      detStr = type 
    168 //                      if(isVCALC) 
    169 //                              WAVE inten = $(folderPath+instPath+detStr+":det_"+detStr) 
    170 //                              WAVE/Z iErr = $("iErr_"+detStr)                 // 2D errors -- may not exist, especially for simulation                 
    171 //                      else 
    172 //                              Wave inten = V_getDetectorDataW(folderStr,detStr) 
    173 //                              Wave iErr = V_getDetectorDataErrW(folderStr,detStr) 
    174 //                              Wave/Z mask = $("root:Packages:NIST:VSANS:MSK:entry:instrument:detector_"+detStr+":data") 
    175 //                              if(WaveExists(mask) == 1) 
    176 //                                      maskMissing = 0 
    177 //                              endif 
    178 //                      endif    
    179 //                      //TODO: 
    180 //                      // -- decide on the proper deltaQ for binning. either nominal value for LR, or one  
    181 //                      //    determined specifically for that panel (currently using one tube width as deltaQ) 
    182 //                      // -- this is repeated multiple times in this switch 
    183 //                      NVAR delQ = $(folderPath+instPath+detStr+":gDelQ_"+detStr) 
    184 ////                    NVAR delQ = $(folderPath+instPath+"ML"+":gDelQ_ML") 
    185 //                      Wave qTotal = $(folderPath+instPath+detStr+":qTot_"+detStr)                     // 2D q-values 
    186 //                      nSets = 1 
    187 //                      break    
    188 //                                       
    189 //              case "MT":               
    190 //              case "MB": 
    191 //                      detStr = type 
    192 //                      if(isVCALC) 
    193 //                              WAVE inten = $(folderPath+instPath+detStr+":det_"+detStr) 
    194 //                              WAVE/Z iErr = $("iErr_"+detStr)                 // 2D errors -- may not exist, especially for simulation                 
    195 //                      else 
    196 //                              Wave inten = V_getDetectorDataW(folderStr,detStr) 
    197 //                              Wave iErr = V_getDetectorDataErrW(folderStr,detStr) 
    198 //                              Wave/Z mask = $("root:Packages:NIST:VSANS:MSK:entry:instrument:detector_"+detStr+":data") 
    199 //                              if(WaveExists(mask) == 1) 
    200 //                                      maskMissing = 0 
    201 //                              endif 
    202 //                      endif    
    203 //                      NVAR delQ = $(folderPath+instPath+detStr+":gDelQ_"+detStr) 
    204 //                      Wave qTotal = $(folderPath+instPath+detStr+":qTot_"+detStr)                     // 2D q-values 
    205 //                      nSets = 1 
    206 //                      break    
    207 //                                       
    208 //              case "B":        
    209 //                      detStr = type 
    210 //                      if(isVCALC) 
    211 //                              WAVE inten = $(folderPath+instPath+detStr+":det_"+detStr) 
    212 //                              WAVE/Z iErr = $("iErr_"+detStr)                 // 2D errors -- may not exist, especially for simulation                 
    213 //                      else 
    214 //                              Wave inten = V_getDetectorDataW(folderStr,detStr) 
    215 //                              Wave iErr = V_getDetectorDataErrW(folderStr,detStr) 
    216 //                              Wave/Z mask = $("root:Packages:NIST:VSANS:MSK:entry:instrument:detector_"+detStr+":data") 
    217 //                              if(WaveExists(mask) == 1) 
    218 //                                      maskMissing = 0 
    219 //                              endif 
    220 //                      endif    
    221 //                      NVAR delQ = $(folderPath+instPath+detStr+":gDelQ_B") 
    222 //                      Wave qTotal = $(folderPath+instPath+detStr+":qTot_"+detStr)                     // 2D q-values   
    223 //                      nSets = 1 
    224 //                      break    
    225 //                       
    226 //              case "FLR": 
    227 //              // detStr has multiple values now, so unfortuntely, I'm hard-wiring things... 
    228 //              // TODO 
    229 //              // -- see if I can un-hard-wire some of this below when more than one panel is combined 
    230 //                      if(isVCALC) 
    231 //                              WAVE inten = $(folderPath+instPath+"FL"+":det_"+"FL") 
    232 //                              WAVE/Z iErr = $("iErr_"+"FL")                   // 2D errors -- may not exist, especially for simulation                 
    233 //                              WAVE inten2 = $(folderPath+instPath+"FR"+":det_"+"FR") 
    234 //                              WAVE/Z iErr2 = $("iErr_"+"FR")                  // 2D errors -- may not exist, especially for simulation         
    235 //                      else 
    236 //                              Wave inten = V_getDetectorDataW(folderStr,"FL") 
    237 //                              Wave iErr = V_getDetectorDataErrW(folderStr,"FL") 
    238 //                              Wave inten2 = V_getDetectorDataW(folderStr,"FR") 
    239 //                              Wave iErr2 = V_getDetectorDataErrW(folderStr,"FR") 
    240 //                              Wave/Z mask = $("root:Packages:NIST:VSANS:MSK:entry:instrument:detector_"+"FL"+":data") 
    241 //                              Wave/Z mask2 = $("root:Packages:NIST:VSANS:MSK:entry:instrument:detector_"+"FR"+":data") 
    242 //                              if(WaveExists(mask) == 1 && WaveExists(mask2) == 1) 
    243 //                                      maskMissing = 0 
    244 //                              endif 
    245 //                      endif    
    246 //                      NVAR delQ = $(folderPath+instPath+"FL"+":gDelQ_FL") 
    247 //                       
    248 //                      Wave qTotal = $(folderPath+instPath+"FL"+":qTot_"+"FL")                 // 2D q-values   
    249 //                      Wave qTotal2 = $(folderPath+instPath+"FR"+":qTot_"+"FR")                        // 2D q-values   
    250 //               
    251 //                      nSets = 2 
    252 //                      break                    
    253 //               
    254 //              case "FTB": 
    255 //                      if(isVCALC) 
    256 //                              WAVE inten = $(folderPath+instPath+"FT"+":det_"+"FT") 
    257 //                              WAVE/Z iErr = $("iErr_"+"FT")                   // 2D errors -- may not exist, especially for simulation                 
    258 //                              WAVE inten2 = $(folderPath+instPath+"FB"+":det_"+"FB") 
    259 //                              WAVE/Z iErr2 = $("iErr_"+"FB")                  // 2D errors -- may not exist, especially for simulation         
    260 //                      else 
    261 //                              Wave inten = V_getDetectorDataW(folderStr,"FT") 
    262 //                              Wave iErr = V_getDetectorDataErrW(folderStr,"FT") 
    263 //                              Wave inten2 = V_getDetectorDataW(folderStr,"FB") 
    264 //                              Wave iErr2 = V_getDetectorDataErrW(folderStr,"FB") 
    265 //                              Wave/Z mask = $("root:Packages:NIST:VSANS:MSK:entry:instrument:detector_"+"FT"+":data") 
    266 //                              Wave/Z mask2 = $("root:Packages:NIST:VSANS:MSK:entry:instrument:detector_"+"FB"+":data") 
    267 //                              if(WaveExists(mask) == 1 && WaveExists(mask2) == 1) 
    268 //                                      maskMissing = 0 
    269 //                              endif 
    270 //                      endif    
    271 //                      NVAR delQ = $(folderPath+instPath+"FT"+":gDelQ_FT") 
    272 //                       
    273 //                      Wave qTotal = $(folderPath+instPath+"FT"+":qTot_"+"FT")                 // 2D q-values   
    274 //                      Wave qTotal2 = $(folderPath+instPath+"FB"+":qTot_"+"FB")                        // 2D q-values   
    275 //       
    276 //                      nSets = 2 
    277 //                      break            
     126 
    278127                 
    279128                case "FLRTB": 
     
    324173                        break            
    325174                         
    326 //              case "MLR": 
    327 //                      if(isVCALC) 
    328 //                              WAVE inten = $(folderPath+instPath+"ML"+":det_"+"ML") 
    329 //                              WAVE/Z iErr = $("iErr_"+"ML")                   // 2D errors -- may not exist, especially for simulation                 
    330 //                              WAVE inten2 = $(folderPath+instPath+"MR"+":det_"+"MR") 
    331 //                              WAVE/Z iErr2 = $("iErr_"+"MR")                  // 2D errors -- may not exist, especially for simulation         
    332 //                      else 
    333 //                              Wave inten = V_getDetectorDataW(folderStr,"ML") 
    334 //                              Wave iErr = V_getDetectorDataErrW(folderStr,"ML") 
    335 //                              Wave inten2 = V_getDetectorDataW(folderStr,"MR") 
    336 //                              Wave iErr2 = V_getDetectorDataErrW(folderStr,"MR") 
    337 //                              Wave/Z mask = $("root:Packages:NIST:VSANS:MSK:entry:instrument:detector_"+"ML"+":data") 
    338 //                              Wave/Z mask2 = $("root:Packages:NIST:VSANS:MSK:entry:instrument:detector_"+"MR"+":data") 
    339 //                              if(WaveExists(mask) == 1 && WaveExists(mask2) == 1) 
    340 //                                      maskMissing = 0 
    341 //                              endif 
    342 //                      endif    
    343 //                      NVAR delQ = $(folderPath+instPath+"ML"+":gDelQ_ML") 
    344 //                       
    345 //                      Wave qTotal = $(folderPath+instPath+"ML"+":qTot_"+"ML")                 // 2D q-values   
    346 //                      Wave qTotal2 = $(folderPath+instPath+"MR"+":qTot_"+"MR")                        // 2D q-values   
    347 //               
    348 //                      nSets = 2 
    349 //                      break                    
    350 //               
    351 //              case "MTB": 
    352 //                      if(isVCALC) 
    353 //                              WAVE inten = $(folderPath+instPath+"MT"+":det_"+"MT") 
    354 //                              WAVE/Z iErr = $("iErr_"+"MT")                   // 2D errors -- may not exist, especially for simulation                 
    355 //                              WAVE inten2 = $(folderPath+instPath+"MB"+":det_"+"MB") 
    356 //                              WAVE/Z iErr2 = $("iErr_"+"MB")                  // 2D errors -- may not exist, especially for simulation         
    357 //                      else 
    358 //                              Wave inten = V_getDetectorDataW(folderStr,"MT") 
    359 //                              Wave iErr = V_getDetectorDataErrW(folderStr,"MT") 
    360 //                              Wave inten2 = V_getDetectorDataW(folderStr,"MB") 
    361 //                              Wave iErr2 = V_getDetectorDataErrW(folderStr,"MB") 
    362 //                              Wave/Z mask = $("root:Packages:NIST:VSANS:MSK:entry:instrument:detector_"+"MT"+":data") 
    363 //                              Wave/Z mask2 = $("root:Packages:NIST:VSANS:MSK:entry:instrument:detector_"+"MB"+":data") 
    364 //                              if(WaveExists(mask) == 1 && WaveExists(mask2) == 1) 
    365 //                                      maskMissing = 0 
    366 //                              endif 
    367 //                      endif    
    368 //                      NVAR delQ = $(folderPath+instPath+"MT"+":gDelQ_MT") 
    369 //                       
    370 //                      Wave qTotal = $(folderPath+instPath+"MT"+":qTot_"+"MT")                 // 2D q-values   
    371 //                      Wave qTotal2 = $(folderPath+instPath+"MB"+":qTot_"+"MB")                        // 2D q-values   
    372 //               
    373 //                      nSets = 2 
    374 //                      break                            
     175         
    375176                 
    376177                case "MLRTB": 
     
    789590        // 
    790591         
    791          
    792          
    793592        SetDataFolder root: 
    794593         
     
    797596 
    798597 
     598Proc V_Write1DAnnular(pathStr,folderStr,detGroup,saveName) 
     599        String pathStr="root:Packages:NIST:VSANS:" 
     600        String folderStr="SAM" 
     601        String detGroup = "F" 
     602        String saveName = "Annular_Data.dat" 
     603         
     604         
     605        V_fWrite1DAnnular(pathStr,folderStr,detGroup,saveName) 
     606         
     607end 
     608 
     609// TODO: 
     610// -- this is a temporary solution before a real writer is created 
     611// -- resolution is not generated here (and it shouldn't be) since resolution is not known yet. 
     612// -- but a real writer will need to be aware of resolution, and there may be different forms 
     613// 
     614// this will bypass save dialogs 
     615// -- AND WILL OVERWITE DATA WITH THE SAME NAME 
     616// 
     617//                      V_Write1DData_ITX("root:Packages:NIST:VSANS:",type,saveName,binType) 
     618// 
     619Function V_fWrite1DAnnular(pathStr,folderStr,detGroup,saveName) 
     620        String pathStr,folderStr,detGroup,saveName 
     621         
     622        String formatStr="",fullpath="" 
     623        Variable refnum,dialog=1 
     624 
     625        SetDataFolder $(pathStr+folderStr) 
     626 
     627        if(cmpstr(detGroup,"F") == 0) 
     628                Wave/Z pw = phiBin_qxqy_FLRTB 
     629                Wave/Z iw = iBin_qxqy_FLRTB 
     630                Wave/Z sw = eBin_qxqy_FLRTB 
     631        else 
     632                Wave/Z pw = phiBin_qxqy_MLRTB 
     633                Wave/Z iw = iBin_qxqy_MLRTB 
     634                Wave/Z sw = eBin_qxqy_MLRTB 
     635        endif 
     636 
     637         
     638        String dataSetFolderParent,basestr 
     639         
     640        //make sure the waves exist 
     641         
     642        if(WaveExists(pw) == 0) 
     643                SetDataFolder root: 
     644                Abort "q is missing" 
     645        endif 
     646        if(WaveExists(iw) == 0) 
     647                SetDataFolder root: 
     648                Abort "i is missing" 
     649        endif 
     650        if(WaveExists(sw) == 0) 
     651                SetDataFolder root: 
     652                Abort "s is missing" 
     653        endif 
     654//      if(WaveExists(resw) == 0) 
     655//              Abort "Resolution information is missing." 
     656//      endif 
     657         
     658//      Duplicate/O qw qbar,sigQ,fs 
     659//      if(dimsize(resW,1) > 4) 
     660//              //it's USANS put -dQv back in the last 3 columns 
     661//              NVAR/Z dQv = USANS_dQv 
     662//              if(NVAR_Exists(dQv) == 0) 
     663//                      SetDataFolder root: 
     664//                      Abort "It's USANS data, and I don't know what the slit height is." 
     665//              endif 
     666//              sigQ = -dQv 
     667//              qbar = -dQv 
     668//              fs = -dQv 
     669//      else 
     670//              //it's SANS 
     671//              sigQ = resw[p][0] 
     672//              qbar = resw[p][1] 
     673//              fs = resw[p][2] 
     674//      endif 
     675//       
     676 
     677        PathInfo catPathName 
     678        fullPath = S_Path + saveName 
     679 
     680        Open refnum as fullpath 
     681 
     682        fprintf refnum,"Annular data written from folder %s on %s\r\n",folderStr,(date()+" "+time()) 
     683 
     684// TODO -- make this work for 6-columns (or??) 
     685//      formatStr = "%15.4g %15.4g %15.4g %15.4g %15.4g %15.4g\r\n"      
     686//      fprintf refnum, "The 6 columns are | Q (1/A) | I(Q) (1/cm) | std. dev. I(Q) (1/cm) | sigmaQ | meanQ | ShadowFactor|\r\n"         
     687//      wfprintf refnum,formatStr,qw,iw,sw,sigQ,qbar,fs 
     688 
     689        //currently, only three columns 
     690        formatStr = "%15.4g %15.4g %15.4g\r\n"   
     691        fprintf refnum, "The 3 columns are | Phi (degrees) | I(phi) (1/cm) | std. dev. I(phi) (1/cm)\r\n"        
     692 
     693        wfprintf refnum,formatStr,pw,iw,sw 
     694        Close refnum 
     695         
     696//      KillWaves/Z sigQ,qbar,fs 
     697        Print "Data written to: ",fullpath 
     698         
     699        SetDataFolder root: 
     700        return(0) 
     701End 
Note: See TracChangeset for help on using the changeset viewer.