Ignore:
Timestamp:
Jun 3, 2010 6:53:19 PM (12 years ago)
Author:
ajj
Message:

Updates and fixes to make ANSTO data reduction work.

  • Translated existing code from 6.x version of macros to 7.x

Plus!

  • Transmission calculation now works
  • Next/Prev? works (assuming contiguous numbering)
  • File associations for transmission are stored
  • Catalog is appropriately sorted
File:
1 edited

Legend:

Unmodified
Added
Removed
  • sans/Dev/trunk/NCNR_User_Procedures/Reduction/SANS/ANSTO_Utils.ipf

    r683 r707  
    3030 
    3131        Variable/G root:myGlobals:apOff = 5.0           // (cm) distance from sample aperture to sample position 
    32  
    33         // flags to turn detector corrections on/off for testing (nha. this overrides the default, turning these corrections OFF) 
    34         Variable/G root:myGlobals:gDoDetectorEffCorr = 0 
    35         Variable/G root:myGlobals:gDoTransmissionCorr = 0 
    3632 
    3733End 
     
    192188        String item 
    193189 
     190        Variable invalid = -1 
    194191        Variable num=-1         // an invalid return value 
    195192         
    196         //your code here 
    197          
     193        String runStr="" 
     194        Variable pos = strsearch(item,".",0) 
     195        if(pos == -1) 
     196                //"dot" not found 
     197                return (invalid) 
     198        else 
     199                //found, get the three characters preceeding it 
     200                if (pos <=6) 
     201                        //not enough characters 
     202                        return (invalid) 
     203                else 
     204                        runStr = item[pos-7,pos-1] 
     205                        //convert to a number 
     206                        num = str2num(runStr) 
     207                        //if valid, return it 
     208                        if (num == NaN) 
     209                                //3 characters were not a number 
     210                                return (invalid) 
     211                        else 
     212                                //run was OK 
     213                                return (num) 
     214                        Endif 
     215                Endif 
     216        Endif    
    198217        return (num) 
    199218End 
     
    217236        retStr=invalid 
    218237         
    219         //your code here 
    220          
    221         return(retStr) 
     238        String runStr = "" 
     239        Variable pos = strsearch(item,".",0) 
     240        if(pos == -1) 
     241                //"dot" not found 
     242                return (invalid) 
     243        else 
     244                //found, get the three characters preceeding it 
     245                if (pos <=6) 
     246                        //not enough characters 
     247                        return (invalid) 
     248                else 
     249                        runStr = item[pos-7,pos-1] 
     250                        return (runStr) 
     251                Endif 
     252        Endif 
    222253End 
    223254 
     
    235266        Variable num 
    236267         
    237         String fullName="",partialName="",item="" 
     268        String fullName="",partialName="",item="",numStr="" 
    238269         
    239270        //make sure that path exists 
     
    244275        Endif 
    245276 
    246         //your code here         
    247  
    248         return(fullname) 
    249          
     277        //make 7 digit string from run number 
     278        sprintf numStr,"%07u",num 
     279 
     280        //partialname = "QKK"+tmp_num+".nx.hdf" 
     281 
     282        String list="",newList="",testStr="" 
     283 
     284        list = IndexedFile(catPathName,-1,"????")       //get all files in folder 
     285        //find (the) one with the number in the run # location in the name 
     286        Variable numItems,ii,runFound,isRAW 
     287        numItems = ItemsInList(list,";")                //get the new number of items in the list 
     288        ii=0 
     289        do 
     290                //parse through the list in this order: 
     291                // 1 - does item contain run number (as a string) "QKKXXXXXXX.nx.hdf" 
     292                // 2 - exclude by isRaw? (to minimize disk access) 
     293                item = StringFromList(ii, list  ,";" ) 
     294                if(strlen(item) != 0) 
     295                        //find the run number, if it exists as a three character string 
     296                        testStr = GetRunNumStrFromFile(item) 
     297                        runFound= cmpstr(numStr,testStr)        //compare the three character strings, 0 if equal 
     298                        if(runFound == 0) 
     299                                //the run Number was found 
     300                                //build valid filename 
     301                                partialName = FindValidFileName(item) 
     302                                if(strlen(partialName) != 0)            //non-null return from FindValidFileName() 
     303                                        fullName = path + partialName 
     304                                        //check if RAW, if so,this must be the file! 
     305                                        isRAW = CheckIfRawData(fullName) 
     306                                        if(isRaw) 
     307                                                //stop here 
     308                                                return(fullname) 
     309                                        Endif 
     310                                Endif 
     311                        Endif 
     312                Endif 
     313                ii+=1 
     314        while(ii<numItems)              //process all items in list 
     315        Return ("")     //null return if file not found in list 
    250316End 
    251317 
     
    260326        Variable value = 0 
    261327         
    262         if(cmpStr(FindValidFilename(fname),fname)==0) 
    263                 value = 1 
     328        Variable hdfID,hdfgID 
     329        Variable isNXHDF = 0 
     330         
     331        //nha. look for non-NeXus files  
     332        if (strsearch(fname, "nx.hdf", 0) >= 0) 
     333                isNXHDF = 1 
    264334        endif 
     335 
     336        if(isNXHDF == 1) 
     337                //Need to actually determine if file is RAW data. 
     338                HDF5OpenFile/Z hdfID as fname 
     339                HDF5OpenGroup/Z hdfID, "/data", hdfgID 
     340                if (V_Flag == 0) 
     341                        //DIV file (with nx.hdf suffix) 
     342                        value = 0 
     343                else 
     344                        //Some other nx.hdf file 
     345                        value = 1 
     346                endif 
     347                HDF5CloseGroup/Z hdfgID 
     348                HDF5CloseFile/Z hdfID 
     349        else 
     350                value = 0 
     351        endif 
     352         
    265353        return(value) 
    266354End 
     
    293381        //err not handled here 
    294382 
    295         Wave/T wSampleName = $(dfName+":entry1:sample:name")  
     383        Wave/T wSampleName = $(dfName+":sample:name")  
    296384        String sampleName = wSampleName[0] 
    297385         
     
    320408        //err not handled here 
    321409 
    322         Wave wTransmission_Flag = $(dfName+":entry1:sample:transmission_flag") //is only being set after 27/5/2009. ??? 
     410        Wave wTransmission_Flag = $(dfName+":sample:TransmissionFlag") //is only being set after 27/5/2009. ??? 
    323411        value = wTransmission_Flag[0] 
    324          
    325         //workaround - determine by bsx position 
    326         Wave wBSX = $(dfName+":entry1:instrument:beam_stop:geometry:position:BSPosXmm") 
    327         variable bsx = wBSX[0] 
    328          
    329         if (bsx >= -10 ) 
    330                 value = 1 
    331         endif 
     412//       
     413//   AJJ June 2nd 2010 - Unclear that this check is correct. Certainly BSPosXmm is not correct parameter in current data format... 
     414//      if (value == 0) 
     415//      //workaround - determine by bsx position 
     416//      Wave wBSX = $(dfName+":instrument:beam_stop:geometry:position:BSPosXmm") 
     417//      variable bsx = wBSX[0] 
     418//               
     419//              if (bsx >= -10 ) 
     420//                      value = 1 
     421//              endif 
     422//      endif 
    332423 
    333424        return(value) 
     
    384475         
    385476        //your code here 
    386         //nha. look for non-NeXus files  
    387         if (strsearch(partialName, "nx.hdf", 0) == -1) 
    388                 return(retStr) 
    389         endif 
    390          
     477        //Assuming no issues with partialNames.... 
     478                 
    391479        return(partialName) 
    392480 
     
    491579// 
    492580Function/S GetNameFromHeader(fullName) 
     581// given the fully qualified path and filename ie. fullName, return just the filename 
    493582        String fullName 
    494583        String newName = "" 
    495584 
    496585        //your code here 
    497          
     586        newName = ParseFilePath(0, fullName, ":", 1, 0) 
     587 
    498588        Return(newName) 
    499589End 
     
    562652                item = StringFromList(ii,list,",") 
    563653 
    564                 //hardcode the mask filename - ??? bad  
    565                 if(strlen(item)==4) 
    566                         item = "QKK000"+item+".nx.hdf" 
    567                 endif 
    568                 //is it already a valid filename? 
    569  
    570                 //hardcode the mask filename - ??? bad  
    571                 if(cmpstr(item,"mask.bin")==0) 
    572                         tempStr = item 
    573                 else 
    574654                tempStr=FindValidFilename(item) //returns filename if good, null if error 
    575                 endif 
     655                 
    576656                if(strlen(tempstr)!=0) 
    577657                        //valid name, add to list 
    578658                        //Print "it's a file" 
    579                         newList += tempStr + "," 
    580                 else 
     659                                if(strlen(newList)==0) 
     660                                        newList = tempStr 
     661                                else 
     662                                        newList += "," + tempStr 
     663                                endif            
     664                        else 
    581665                        //not a valid name 
    582666                        //is it a number? 
     
    703787        endif 
    704788         
    705         if( (lambda < 5) || (lambda > 5 ) ) 
    706                 Abort "Wavelength out of calibration range (5A). You must manually enter the absolute parameters" 
    707         Endif 
     789//      if( (lambda < 5) || (lambda > 5 ) ) 
     790//              Abort "Wavelength out of calibration range (5A). You must manually enter the absolute parameters" 
     791//      Endif 
    708792         
    709793        if(!(WaveExists($attStr)) || !(WaveExists($lamStr)) ) 
     
    755839        // note 5A only at this stage but other wavelengths as measured 
    756840        // these values have to be re-determined as were measured on time and not monitor counts 
    757         Make/O/N=(num) root:myGlobals:Attenuators:lambda={5} 
     841        //Make/O/N=(num) root:myGlobals:Attenuators:lambda={5} 
     842        Make/O/N=(num) root:myGlobals:Attenuators:lambda={4.94}  
    758843 
    759844        //Quokka attenuator factors. 19/1/09 nha 
    760845        //20/3/09 nha updated to  
    761846        //file://fianna/Sections/Bragg/Data_Analysis_Team/Project/P025 Quokka Commissioning DRV/3_Development/ATTest-timeseries.pdf  
    762          
    763         root:myGlobals:Attenuators:att0 = {1} 
    764         root:myGlobals:Attenuators:att1 = {0.499} 
    765         root:myGlobals:Attenuators:att2 = {0.175} 
    766         root:myGlobals:Attenuators:att3 = {0.0727} 
    767         root:myGlobals:Attenuators:att4 = {0.0326} 
    768         root:myGlobals:Attenuators:att5 = {0.0124} 
    769         root:myGlobals:Attenuators:att6 = {0.00573} 
    770         root:myGlobals:Attenuators:att7 = {0.00257} 
    771         root:myGlobals:Attenuators:att8 = {0.000929} 
    772         root:myGlobals:Attenuators:att9 = {6.93e-5} 
    773         root:myGlobals:Attenuators:att10 = {5.46e-6} 
    774         root:myGlobals:Attenuators:att11 = {1.55e-6} 
     847        //updated by epg 13-02-2010 to reflect kwo measurements at g7 
     848         
     849        root:myGlobals:Attenuators:att0 = {1} 
     850        root:myGlobals:Attenuators:att1 = {0.498782} 
     851        root:myGlobals:Attenuators:att2 = {0.176433} 
     852        root:myGlobals:Attenuators:att3 = {0.0761367} 
     853        root:myGlobals:Attenuators:att4 = {0.0353985} 
     854        root:myGlobals:Attenuators:att5 = {0.0137137} 
     855        root:myGlobals:Attenuators:att6 = {0.00614167} 
     856        root:myGlobals:Attenuators:att7 = {0.00264554} 
     857        root:myGlobals:Attenuators:att8 = {0.000994504} 
     858        root:myGlobals:Attenuators:att9 = {0.000358897} 
     859        root:myGlobals:Attenuators:att10 = {7.2845e-05} 
     860        root:myGlobals:Attenuators:att11 = {1.67827e-06} 
    775861 
    776862End 
Note: See TracChangeset for help on using the changeset viewer.