Changeset 536


Ignore:
Timestamp:
Jul 22, 2009 10:03:39 AM (13 years ago)
Author:
srkline
Message:

July 22 version of Jae-Hie's changes to the HFIR reader

File:
1 edited

Legend:

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

    r525 r536  
    99// functions are either labeled with the procedure file that calls them, 
    1010// or noted that they are local to this file 
    11  
    12  
    13  
    14  
    15  
    1611 
    1712// initializes globals that are specific to a particular facility 
     
    2924         
    3025        // pixel dimensions are now read directly from the file header. 
    31         Variable/G root:myGlobals:PixelResDefault = 0.5                 //pixel resolution in cm 
    32          
    33         Variable/G root:myGlobals:DeadtimeDefault = 3.4e-6              //deadtime in seconds 
    34  
    35         Variable/G root:myGlobals:apOff = 5.0           // (cm) distance from sample aperture to sample position 
     26        Variable/G root:myGlobals:PixelResDefault = 0.51        //pixel resolution in cm 
     27         
     28        Variable/G root:myGlobals:DeadtimeDefault = 3.4e-6              //deadtime in seconds????????????????????????????????????????????????????????????????????? 
     29 
     30        Variable/G root:myGlobals:apOff = 5.0           // (cm) distance from sample aperture to sample position??????????????????????????????????????????????????? 
    3631 
    3732End 
     
    167162         
    168163        Variable DDet 
    169  
     164        NVAR PixelResDefault = root:myGlobals:PixelResDefault 
    170165        //your code here 
    171          
     166        DDet = PixelResDefault  //0.515 cm, typical for new ORNL detectors 
    172167        return(DDet) 
    173168End 
     
    185180         
    186181        Variable deadtime 
    187          
    188 // your code here 
    189  
     182        NVAR DeadtimeDefault = root:myGlobals:DeadtimeDefault 
     183         
     184        deadtime = DeadtimeDefault      //3.4e-6 seconds, typical for new ORNL detectors //??????????????????????????? 
    190185        return(deadtime) 
    191186End 
     
    203198Function GetRunNumFromFile(item) 
    204199        String item 
    205  
    206         Variable num=-1         // an invalid return value 
    207          
    208         //your code here 
    209          
    210         return (num) 
     200        Variable invalid = -1   //negative numbers are invalid 
     201        Variable num=-1 
     202         
     203        //find the "dot" 
     204        String runStr="" 
     205        Variable pos = strsearch(item,".",0) 
     206        if(pos == -1) 
     207                //"dot" not found 
     208                return (invalid) 
     209        else 
     210                //found, get the nine characters preceeding it 
     211                if (pos <=8) 
     212                        //not enough characters 
     213                        return (invalid) 
     214                else 
     215                        runStr = item[pos-9,pos-5] 
     216                        //convert to a number 
     217                        num = str2num(runStr) 
     218                        //if valid, return it 
     219                        if (num == NaN) 
     220                                //4 characters were not a number 
     221                                return (invalid) 
     222                        else 
     223                                //run was OK 
     224                                return (num) 
     225                        Endif 
     226                Endif 
     227        Endif 
    211228End 
    212229 
     
    231248         
    232249        //your code here 
    233          
    234         return(retStr) 
     250        //find the "dot" 
     251        Variable pos = strsearch( LowerStr(item),".xml",0) 
     252        if(pos == -1) 
     253                //"dotxml" not found 
     254                return (retStr) 
     255        else 
     256                pos = strsearch( LowerStr(item),"_scan",0) 
     257                //found, get the nine characters preceeding it 
     258                if (pos ==-1) 
     259                        //not a raw data file 
     260                        return (retStr) 
     261                else 
     262                        //Take the first four 
     263                        retStr= item[pos+5,pos+8] 
     264                        return (retStr) 
     265                         
     266                Endif 
     267        Endif 
     268         
    235269End 
    236270 
     
    247281Function/S FindFileFromRunNumber(num) 
    248282        Variable num 
    249          
    250283        String fullName="",partialName="",item="" 
     284        //get list of raw data files in folder that match "num" (add leading zeros) 
     285        if( (num>999) || (num<=0) ) 
     286                //Print "error in  FindFileFromRunNumber(num), file number too large or too small" 
     287                Return ("") 
     288        Endif 
     289        //make a three character string of the run number 
     290        String numStr="" 
     291        if(num<10) 
     292                numStr = "00"+num2str(num) 
     293        else 
     294                if(num<100) 
     295                        numStr = "0"+num2str(num) 
     296                else 
     297                        numStr = num2str(num) 
     298                Endif 
     299        Endif 
    251300         
    252301        //make sure that path exists 
     
    256305                Abort "folder path does not exist - use Pick Path button" 
    257306        Endif 
    258  
    259         //your code here         
    260  
    261         return(fullname) 
    262          
     307        String list="",newList="",testStr="" 
     308         
     309        list = IndexedFile(catPathName,-1,"????")       //get all files in folder 
     310        //find (the) one with the number in the run # location in the name 
     311        Variable numItems,ii,runFound,isRAW 
     312        numItems = ItemsInList(list,";")                //get the new number of items in the list 
     313        ii=0 
     314        do 
     315                //parse through the list in this order: 
     316                // 1 - does item contain run number (as a string) "NAMESANS_expNN_scan####_####.xml" : Let the first ### is the run num. 
     317                // 2 - exclude by isRaw? (to minimize disk access) 
     318                item = StringFromList(ii, list  ,";" ) 
     319                if(strlen(item) != 0) 
     320                        //find the run number, if it exists as a three character string 
     321                        testStr = GetRunNumStrFromFile(item) 
     322                        runFound= cmpstr(numStr,testStr)        //compare the three character strings, 0 if equal 
     323                        if(runFound == 0) 
     324                                //the run Number was found 
     325                                //build valid filename 
     326                                partialName = FindValidFileName(item) 
     327 
     328                                if(strlen(partialName) != 0)            //non-null return from FindValidFileName() 
     329                                        fullName = path + partialName 
     330                                        //check if RAW, if so,this must be the file! 
     331                                        isRAW = CheckIfRawData(fullName) 
     332                                        if(isRaw) 
     333                                                //stop here 
     334                                                return(fullname) 
     335                                        Endif 
     336                                Endif 
     337                        Endif 
     338                Endif 
     339                ii+=1 
     340        while(ii<numItems)              //process all items in list 
     341        print "Please type 'scan number(s)' from your file name..." 
     342        Return ("")     //null return if file not found in list  
    263343End 
    264344 
     
    307387                                // Expect the required hfir XML header (will fail if "schemalocation" is not found) 
    308388                                if ( CmpStr(  LowerStr(M_listAttr[i][1]),  LowerStr("SPICE_version") ) == 0 ) 
    309                                         thisLocation = TrimWS(M_listAttr[i][2]) 
     389                                        thisLocation = HFIR_TrimWS(M_listAttr[i][2]) 
    310390                                        if ( StringMatch(thisLocation, nsList[item] ) ) 
    311391                                                ns = nsList[item]                        
     
    335415// called by Transmission.ipf, CatVSTable.ipf, NSORT.ipf 
    336416// 
    337 Function isTransFile(fName) 
     417Function isTransFile(fName)   ///  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
    338418        String fname 
    339419         
     420        Variable beamtrap_1y=0,beamtrap_2y=0,beamtrap_3y=0,beamtrap_4y=0 
    340421//      if(your test here) 
    341 //              //yes, its a transmisison file 
    342 //              Return(1) 
    343 //      else 
    344 //              //some other file 
    345 //              Return(0) 
    346 //      Endif 
     422        beamtrap_1y=getRealValueFromHeader(fname,"trap_y_101mm","mm") 
     423        beamtrap_2y=getRealValueFromHeader(fname,"trap_y_25mm","mm") 
     424        beamtrap_3y=getRealValueFromHeader(fname,"trap_y_50mm","mm") 
     425        beamtrap_4y=getRealValueFromHeader(fname,"trap_y_76mm","mm") 
     426 
     427         if (beamtrap_1y<10 && beamtrap_2y<10 && beamtrap_3y<10 && beamtrap_4y<10)       
     428        //yes, its a transmisison file 
     429                return (1) 
     430        else 
     431        //some other file 
     432                return (0) 
     433        endif 
    347434End 
    348435 
     
    399486         
    400487        String retStr=partialName 
    401          
     488 
    402489        //your code here 
    403          
    404         return(retStr) 
     490        //try name with no changes - to allow for ABS files that have spaces in the names 12APR04 
     491        retStr = ValidFileString(partialName) 
     492        if(cmpstr(retStr,"") !=0) 
     493                return(retStr) 
     494        endif 
     495         
     496        //if the partial name is derived from the file header, there can be spaces at the beginning 
     497        //or in the middle of the filename - depending on the prefix and initials used 
     498        // 
     499        //remove any leading spaces from the name before starting 
     500        partialName = RemoveAllSpaces(partialName) 
     501         
     502        //try name with no spaces 
     503        retStr = ValidFileString(partialName) 
     504        if(cmpstr(retStr,"") !=0) 
     505                //non-null return 
     506                return(retStr) 
     507        endif 
     508         
     509        //try all UPPERCASE 
     510        partialName = UpperStr(partialName) 
     511        retStr = ValidFileString(partialName) 
     512        if(cmpstr(retStr,"") !=0) 
     513                //non-null return 
     514                return(retStr) 
     515        endif 
     516         
     517        //try all lowercase (ret null if failure) 
     518        partialName = LowerStr(partialName) 
     519        retStr = ValidFileString(partialName) 
     520        if(cmpstr(retStr,"") !=0) 
     521                //non-null return 
     522                return(retStr) 
     523        else 
     524                return(retStr) 
     525        endif 
     526End 
     527 
     528// Function checks for the existence of a file 
     529 
     530// *** the PATH is hard-wired to catPathName (which is assumed to exist) 
     531// version numers up to ;10 are tried 
     532// only the "name;vers" is returned if successful. The path is not prepended 
     533// 
     534// local function 
     535// 
     536Function/S ValidFileString(partialName) 
     537        String partialName 
     538 
     539        String tempName = ""  
     540        //Variable ii,refnum 
     541        tempName = partialName 
     542        Return (tempName) 
    405543End 
    406544 
     
    507645Function/S GetNameFromHeader(fullName) 
    508646        String fullName 
    509         String newName = "" 
    510  
    511         //your code here 
     647        String temp, newName = "" 
     648        Variable spc,ii=0 
     649         
     650        //filename is 31-33 characters INSTRNAMESANS_exp##_scan####_####.xml (where # : numbers) 
     651        //returns a null string if no name can be found 
     652        Variable iimax =  strlen(fullName) 
     653        do 
     654                temp = fullname[ii,iimax-1-4]           //characters ii,all of the name 
     655                spc = strsearch(temp," ",0) 
     656                if (spc == -1) 
     657                        break           //no more spaces found 
     658                endif 
     659                ii+=1 
     660        While(ii<iimax) 
     661         
     662        If(strlen(temp) < 1) 
     663                newName = ""            //be sure to return a null string if problem found 
     664        else 
     665                newName = temp 
     666        Endif 
    512667         
    513668        Return(newName) 
     
    684839// called by Correct.ipf, ProtocolAsPanel.ipf, Transmission.ipf 
    685840// 
    686 Function AttenuationFactor(fileStr,lam,attenNo) 
     841Function AttenuationFactor(fileStr,lam,attenpercent) 
    687842        String fileStr 
    688         Variable lam,attenNo 
     843        Variable lam,attenpercent 
    689844         
    690845        Variable attenFactor=1 
    691846         
    692847        // your code here 
     848        attenFactor = 1- attenpercent /100  //???Attenuate transmission 
    693849 
    694850        return(attenFactor) 
Note: See TracChangeset for help on using the changeset viewer.