Ignore:
Timestamp:
Feb 25, 2016 4:30:38 PM (7 years ago)
Author:
srkline
Message:

more changes and additons to display VSANS data

adding functions for IvsQ plotting

coverted much of VCALC to have similar folder structure as HDF to allow re-use of the Q-binning procedures from VCALC with real data in work files.

re-working the beam center finder to get it to work with work file data rather then only VCALC.

new plotting routines for the panels to rescale to the beam center (still in pixels, though)

File:
1 edited

Legend:

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

    r981 r982  
    4040// 
    4141// TODO: -- is there an extra "entry" heading? Am I adding this by mistake by setting base_name="entry" for RAW data? 
    42 // 
     42//                      -- as dumb as it is -- do I just leave it now, or break everything. ont the plus side, removing the extra entry 
     43//          layer may catch a lot of the hard-wired junk that is present... 
    4344Function V_LoadHDF5Data(file,folder) 
    4445        String file,folder 
    4546 
    46         String base_name 
     47        String base_name,detStr 
     48        String destPath 
     49        Variable ii 
     50         
    4751        SetDataFolder $("root:Packages:NIST:VSANS:"+folder) 
    48 //      SetDataFolder root: 
     52        destPath = "root:Packages:NIST:VSANS:"+folder 
     53 
    4954        if(cmpstr(folder,"RAW")==0) 
    5055                base_name="entry" 
     56//              base_name="RAW"         // this acts as a flag to remove the duplicate "entry" level 
    5157        else 
    52                 base_name="entry"               //TODO -- remove this / change behavior in V_LoadHDF5_NoAtt() 
     58        // null will use the file name as the top level (above entry) 
     59                base_name=""            //TODO -- remove this / change behavior in V_LoadHDF5_NoAtt() 
    5360        endif 
    5461         
     
    5764        // if RAW data, then generate the errors and linear data copy 
    5865        // do this 9x 
     66        // then do any "massaging" needed to redimension, fake values, etc. 
     67        // 
    5968        string tmpStr = "root:Packages:NIST:VSANS:RAW:entry:entry:instrument:"  
     69 
    6070        if(cmpstr(folder,"RAW")==0) 
    61                 V_MakeDataError(tmpStr+"detector_B") 
    62                 V_MakeDataError(tmpStr+"detector_MB") 
    63                 V_MakeDataError(tmpStr+"detector_MT") 
    64                 V_MakeDataError(tmpStr+"detector_ML") 
    65                 V_MakeDataError(tmpStr+"detector_MR") 
    66                 V_MakeDataError(tmpStr+"detector_FB") 
    67                 V_MakeDataError(tmpStr+"detector_FT") 
    68                 V_MakeDataError(tmpStr+"detector_FL") 
    69                 V_MakeDataError(tmpStr+"detector_FR") 
    70  
    71 // TODO -- once I get "real" data, get rid of this call to force the data to be proper dimensions. 
     71         
     72                // TODO -- once I get "real" data, get rid of this call to force the data to be proper dimensions. 
    7273                V_RedimFakeData() 
    73 // 
    74 // TODO -- for the "real" data, may need a step in here to convert integer detector data to DP, or I'll 
    75 //          get really odd results from the calculations, and may not even notice. 
    76  
    77 // TODO 
    78 //  -- get rid of these fake calibration waves as "real" ones are filled in 
     74 
     75                // makes data error and linear copy -- DP waves if V_RedimFakeData() called above  
     76                for(ii=0;ii<ItemsInList(ksDetectorListAll);ii+=1) 
     77                        detStr = StringFromList(ii, ksDetectorListAll, ";") 
     78                        V_MakeDataError(tmpStr+"detector_"+detStr)       
     79                endfor 
     80 
     81 
     82                // TODO -- for the "real" data, may need a step in here to convert integer detector data to DP, or I'll 
     83                //          get really odd results from the calculations, and may not even notice. 
     84                // !!!! Where do I actually do this? - this is currently done in Raw_to_work() 
     85                // -- is is better to do here, right as the data is loaded? 
     86                // TODO -- some of this is done in V_RedimFakeData() above - which will disappear once I get real data 
     87 
     88         
     89                // TODO 
     90                //  -- get rid of these fake calibration waves as "real" ones are filled in by NICE 
    7991                Execute "MakeFakeCalibrationWaves()" 
    80 //              fMakeFakeCalibrationWaves()             //skips the alert 
    81                  
     92                //              fMakeFakeCalibrationWaves()             //skips the alert 
     93 
     94 
     95                // TODO -- do I want to calculate the nonlinear x/y arrays and the q-values here? 
     96                // -- otherwise the mouse-over doesn't calculate the correct Q_values 
     97                // the display currently is not shifted or altered at all to account for the non-linearity 
     98                // or for display in q-values -- so why bother with this? 
     99                NVAR gDoNonLinearCor = root:Packages:NIST:VSANS:Globals:gDoNonLinearCor 
     100                // generate a distance matrix for each of the detectors 
     101                if (gDoNonLinearCor == 1) 
     102                        Print "Calculating Non-linear correction at RAW load time"// for "+ detStr 
     103                        for(ii=0;ii<ItemsInList(ksDetectorListNoB);ii+=1) 
     104                                detStr = StringFromList(ii, ksDetectorListNoB, ";") 
     105                                Wave w = V_getDetectorDataW(folder,detStr) 
     106        //                      Wave w_err = V_getDetectorDataErrW(fname,detStr) 
     107                                Wave w_calib = V_getDetTube_spatialCalib(folder,detStr) 
     108                                Variable tube_width = V_getDet_tubeWidth(folder,detStr) 
     109                                NonLinearCorrection(w,w_calib,tube_width,detStr,destPath) 
    82110                                 
    83 /// END FAKE DATA CORRECTIONS            
    84                  
     111                                // (2.5) Calculate the q-values 
     112                                // calculating q-values can't be done unless the non-linear corrections are calculated 
     113                                // so go ahead and put it in this loop. 
     114                                // TODO :  
     115                                // -- make sure that everything is present before the calculation 
     116                                // -- beam center must be properly defined in terms of real distance 
     117                                // -- distances/zero location/ etc. must be clearly documented for each detector 
     118                                //      ** this assumes that NonLinearCorrection() has been run to generate data_RealDistX and Y 
     119                                // ** this routine Makes the waves QTot, qx, qy, qz in each detector folder. 
     120                                // 
     121                                V_Detector_CalcQVals(folder,detStr,destPath) 
     122                                 
     123                        endfor 
     124                else 
     125                        Print "Non-linear correction not done" 
     126                endif 
     127                                         
     128                                         
     129                /// END FAKE DATA CORRECTIONS            
     130                         
    85131        endif 
    86132         
     
    90136 
    91137// 
    92 // TODO -- this is all FAKED since all the data arrays are (1,128,128) 
    93 // I'm intentionally using the wrong number of pixels so I'm more likely to go back and get rid of this later. 
     138// TODO -- this is all FAKED since all the data arrays are written to hdf as (1,128,128) 
     139//  -- try to fill in the bits from VCALC, if it exists (or force it) 
    94140// 
    95141// the SetScale parts may be useful later. 
     
    97143Function V_RedimFakeData() 
    98144         
    99                 SetDataFolder root:Packages:NIST:VSANS:RAW:entry:entry:instrument:detector_B 
    100                 Wave det_B=data 
    101                 Redimension/N=(320,320)/E=1 det_B 
    102                 det_B = p+q+2 
    103                  
    104                 Variable ctr=20,npix=128 
    105                 SetDataFolder root:Packages:NIST:VSANS:RAW:entry:entry:instrument:detector_MT 
    106                 Wave det_MT=data 
    107                 Redimension/N=(npix,48)/E=1 det_MT               
    108                 SetScale/I x -npix/2,npix/2,"",det_MT 
    109                 SetScale/I y ctr,ctr+48,"",det_MT 
    110 //              det_mt[][20] = 50 
    111         det_MT *= 10 
     145        // check for fake data in VCALC folder... 
     146        wave/Z tmpw=$"root:Packages:NIST:VSANS:VCALC:entry:entry:instrument:detector_B:det_B" 
     147        if(WaveExists(tmpw) == 0) 
     148                Execute "VCALC_Panel()" 
     149        endif 
     150         
     151        SetDataFolder root:Packages:NIST:VSANS:RAW:entry:entry:instrument:detector_B 
     152        Wave det_B=data 
     153        Redimension/N=(320,320)/E=1 det_B        
     154        Redimension/D det_B 
     155//      det_B = p+q+2 
     156        wave tmpw=$"root:Packages:NIST:VSANS:VCALC:entry:entry:instrument:detector_B:det_B" 
     157        det_B=tmpw 
     158        det_B += 2 
     159                         
     160        Variable ctr=20,npix=128 
     161        SetDataFolder root:Packages:NIST:VSANS:RAW:entry:entry:instrument:detector_MT 
     162        Wave det_MT=data 
     163        Redimension/N=(npix,48)/E=1 det_MT 
     164        Redimension/D det_MT             
     165        SetScale/I x -npix/2,npix/2,"",det_MT 
     166        SetScale/I y ctr,ctr+48,"",det_MT 
     167//      det_MT *= 10 
     168//      det_MT += 2 
     169        wave tmpw=$"root:Packages:NIST:VSANS:VCALC:entry:entry:instrument:detector_MT:det_MT" 
     170        det_MT=tmpw 
    112171        det_MT += 2 
    113  
    114                 SetDataFolder root:Packages:NIST:VSANS:RAW:entry:entry:instrument:detector_MB 
    115                 Wave det_MB=data 
    116                 Redimension/N=(npix,48)/E=1 det_MB               
    117                 SetScale/I x -npix/2,npix/2,"",det_MB 
    118                 SetScale/I y -ctr,-ctr-48,"",det_MB 
    119         det_MB *= 5 
     172         
     173        SetDataFolder root:Packages:NIST:VSANS:RAW:entry:entry:instrument:detector_MB 
     174        Wave det_MB=data 
     175        Redimension/N=(npix,48)/E=1 det_MB               
     176        Redimension/D det_MB 
     177        SetScale/I x -npix/2,npix/2,"",det_MB 
     178        SetScale/I y -ctr-48,-ctr,"",det_MB 
     179//      det_MB *= 5 
     180//      det_MB += 2 
     181        wave tmpw=$"root:Packages:NIST:VSANS:VCALC:entry:entry:instrument:detector_MB:det_MB" 
     182        det_MB=tmpw 
    120183        det_MB += 2 
    121                  
    122                 ctr=30 
    123                 SetDataFolder root:Packages:NIST:VSANS:RAW:entry:entry:instrument:detector_ML 
    124                 Wave det_ML=data 
    125                 Redimension/N=(48,npix)/E=1 det_ML               
    126                 SetScale/I x -ctr-48,-ctr,"",det_ML 
    127                 SetScale/I y -npix/2,npix/2,"",det_ML 
    128         det_ML *= 2 
     184         
     185        ctr=30 
     186        SetDataFolder root:Packages:NIST:VSANS:RAW:entry:entry:instrument:detector_ML 
     187        Wave det_ML=data 
     188        Redimension/N=(48,npix)/E=1 det_ML               
     189        Redimension/D det_ML 
     190        SetScale/I x -ctr-48,-ctr,"",det_ML 
     191        SetScale/I y -npix/2,npix/2,"",det_ML 
     192//      det_ML *= 2 
     193//      det_ML += 2 
     194        wave tmpw=$"root:Packages:NIST:VSANS:VCALC:entry:entry:instrument:detector_ML:det_ML" 
     195        det_ML=tmpw 
    129196        det_ML += 2 
    130          
    131                 SetDataFolder root:Packages:NIST:VSANS:RAW:entry:entry:instrument:detector_MR 
    132                 Wave det_MR=data 
    133                 Redimension/N=(48,npix)/E=1 det_MR               
    134                 SetScale/I x ctr,ctr+48,"",det_MR 
    135                 SetScale/I y -npix/2,npix/2,"",det_MR 
    136         det_MR +=2 
    137                  
    138                 ctr=30 
    139                 SetDataFolder root:Packages:NIST:VSANS:RAW:entry:entry:instrument:detector_FT 
    140                 Wave det_FT=data 
    141                 Redimension/N=(npix,48)/E=1 det_FT               
    142                 SetScale/I x -npix/2,npix/2,"",det_FT 
    143                 SetScale/I y ctr,ctr+48,"",det_FT 
    144  
    145                 SetDataFolder root:Packages:NIST:VSANS:RAW:entry:entry:instrument:detector_FB 
    146                 Wave det_FB=data 
    147                 Redimension/N=(npix,48)/E=1 det_FB               
    148                 SetScale/I x -npix/2,npix/2,"",det_FB 
    149                 SetScale/I y -ctr,-ctr-48,"",det_FB 
    150                  
    151                 SetDataFolder root:Packages:NIST:VSANS:RAW:entry:entry:instrument:detector_FL 
    152                 Wave det_FL=data 
    153                 Redimension/N=(48,npix)/E=1 det_FL               
    154                 SetScale/I x -ctr-48,-ctr,"",det_FL 
    155                 SetScale/I y -npix/2,npix/2,"",det_FL 
    156                  
    157                 SetDataFolder root:Packages:NIST:VSANS:RAW:entry:entry:instrument:detector_FR 
    158                 Wave det_FR=data 
    159                 Redimension/N=(48,npix)/E=1 det_FR               
    160                 SetScale/I x ctr,ctr+48,"",det_FR 
    161                 SetScale/I y -npix/2,npix/2,"",det_FR 
    162  
     197                 
     198        SetDataFolder root:Packages:NIST:VSANS:RAW:entry:entry:instrument:detector_MR 
     199        Wave det_MR=data 
     200        Redimension/N=(48,npix)/E=1 det_MR               
     201        Redimension/D det_MR 
     202        SetScale/I x ctr,ctr+48,"",det_MR 
     203        SetScale/I y -npix/2,npix/2,"",det_MR 
     204//      det_MR +=2 
     205        wave tmpw=$"root:Packages:NIST:VSANS:VCALC:entry:entry:instrument:detector_MR:det_MR" 
     206        det_MR=tmpw 
     207        det_MR += 2 
     208         
     209        ctr=30 
     210        SetDataFolder root:Packages:NIST:VSANS:RAW:entry:entry:instrument:detector_FT 
     211        Wave det_FT=data 
     212        Redimension/N=(npix,48)/E=1 det_FT               
     213        Redimension/D det_FT 
     214        SetScale/I x -npix/2,npix/2,"",det_FT 
     215        SetScale/I y ctr,ctr+48,"",det_FT 
     216        wave tmpw=$"root:Packages:NIST:VSANS:VCALC:entry:entry:instrument:detector_FT:det_FT" 
     217        det_FT=tmpw 
     218 
     219        SetDataFolder root:Packages:NIST:VSANS:RAW:entry:entry:instrument:detector_FB 
     220        Wave det_FB=data 
     221        Redimension/N=(npix,48)/E=1 det_FB               
     222        Redimension/D det_FB 
     223        SetScale/I x -npix/2,npix/2,"",det_FB 
     224        SetScale/I y -ctr-48,-ctr,"",det_FB 
     225        wave tmpw=$"root:Packages:NIST:VSANS:VCALC:entry:entry:instrument:detector_FB:det_FB" 
     226        det_FB=tmpw 
     227                         
     228        SetDataFolder root:Packages:NIST:VSANS:RAW:entry:entry:instrument:detector_FL 
     229        Wave det_FL=data 
     230        Redimension/N=(48,npix)/E=1 det_FL               
     231        Redimension/D det_FL 
     232        SetScale/I x -ctr-48,-ctr,"",det_FL 
     233        SetScale/I y -npix/2,npix/2,"",det_FL 
     234        wave tmpw=$"root:Packages:NIST:VSANS:VCALC:entry:entry:instrument:detector_FL:det_FL" 
     235        det_FL=tmpw 
     236         
     237        SetDataFolder root:Packages:NIST:VSANS:RAW:entry:entry:instrument:detector_FR 
     238        Wave det_FR=data 
     239        Redimension/N=(48,npix)/E=1 det_FR               
     240        Redimension/D det_FR 
     241        SetScale/I x ctr,ctr+48,"",det_FR 
     242        SetScale/I y -npix/2,npix/2,"",det_FR 
     243        wave tmpw=$"root:Packages:NIST:VSANS:VCALC:entry:entry:instrument:detector_FR:det_FR" 
     244        det_FR=tmpw 
     245         
    163246// get rid of zeros 
    164                 det_FL += 2 
    165                 det_FR += 2 
    166                 det_FT += 2 
    167                 det_FB += 2 
     247        det_FL += 2 
     248        det_FR += 2 
     249        det_FT += 2 
     250        det_FB += 2 
     251 
     252V_RescaleToBeamCenter("RAW","MB",64,55) 
     253V_RescaleToBeamCenter("RAW","MT",64,-8.7) 
     254V_RescaleToBeamCenter("RAW","MR",-8.1,64) 
     255V_RescaleToBeamCenter("RAW","ML",55,64) 
     256V_RescaleToBeamCenter("RAW","FL",55,64) 
     257V_RescaleToBeamCenter("RAW","FR",-8.1,64) 
     258V_RescaleToBeamCenter("RAW","FT",64,-8.7) 
     259V_RescaleToBeamCenter("RAW","FB",64,55) 
     260 
     261 
    168262 
    169263        return(0) 
     
    217311        if(cmpstr(base_name,"") == 0) 
    218312                base_name = StringFromList(0,FileName,".") 
     313        endif 
     314        if(cmpstr(base_name,"RAW") == 0) 
     315                base_name = "" 
    219316        endif 
    220317        //base_name = "entry" 
Note: See TracChangeset for help on using the changeset viewer.