Changeset 692


Ignore:
Timestamp:
Apr 15, 2010 12:49:58 PM (12 years ago)
Author:
srkline
Message:

Adding Jae-Hie's changes to HFIR_Utils from 4/15 email.

File:
1 edited

Legend:

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

    r683 r692  
    183183// 
    184184// this run number should be a unique identifier for the file 
    185 // 
     185//Because HFIR data format is w/ 2X 4digit number. We add them to get a unique number => This will cause the arrow button not working. 
    186186Function GetRunNumFromFile(item) 
    187187        String item 
     
    201201                        return (invalid) 
    202202                else 
    203                         runStr = item[pos-9,pos-5] 
     203                        Variable pos_bio = strsearch( LowerStr(item),"biosans",0) 
     204                        //if  (pos_bio== -1) 
     205                                runStr  = item[pos-9,pos-6]     //first 4 numbers 
     206                        //else 
     207                                runStr  += item[pos-4,pos-1]    //add last 4 numbers 
     208                        //endif 
    204209                        //convert to a number 
    205210                        num = str2num(runStr) 
     211                         
    206212                        //if valid, return it 
    207213                        if (num == NaN) 
    208                                 //4 characters were not a number 
     214                                //8 characters were not a number 
    209215                                return (invalid) 
    210216                        else 
     
    214220                Endif 
    215221        Endif 
     222         
    216223End 
    217224 
     
    228235// 
    229236// "ABC" returned as an invalid result 
    230 Function/S GetRunNumStrFromFile(item) 
     237// XXXXSANS_expXX._scan1234_5678.xmp ==> "12345678" 
     238Function/S GetRunNumStrFromFile(item)   //,numposition) 
    231239        String item 
     240        Variable numposition 
    232241         
    233242        String invalid = "ABC"  //"ABC" is not a valid run number, since it's text 
    234243        String retStr 
    235244        retStr=invalid 
    236          
     245 
    237246        //find the "dot" 
    238247        Variable pos = strsearch( LowerStr(item),".xml",0) 
     
    242251        else 
    243252                pos = strsearch( LowerStr(item),"_scan",0) 
    244                 //found, get the nine characters preceeding it 
    245                 if (pos ==-1) 
     253                 
     254                if  (pos == -1) 
    246255                        //not a raw data file 
    247256                        return (retStr) 
    248257                else 
    249                         //Take the first four 
    250                         retStr= item[pos+5,pos+8] 
     258                        //Variable pos_bio = strsearch( LowerStr(item),"biosans_",0)  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
     259                        //if  (numposition == 0) 
     260                                //Take the first four: //HiResSANS 
     261                                retStr = item[pos+5,pos+8] 
     262                        //else   
     263                                //add the last four: //BioSANS 
     264                                retStr += item[pos+10,pos+13] 
     265                        //Endif 
    251266                        return (retStr) 
    252                          
    253267                Endif 
    254268        Endif 
     
    268282Function/S FindFileFromRunNumber(num) 
    269283        Variable num 
     284 
    270285        String fullName="",partialName="",item="" 
    271286        //get list of raw data files in folder that match "num" (add leading zeros) 
    272         if( (num>9999) || (num<0) ) 
     287        if( (num>99999999) || (num<0) ) 
    273288                //Print "error in  FindFileFromRunNumber(num), file number too large or too small" 
    274289                Return ("") 
     
    277292        String numStr="" 
    278293         
    279         if(num > 999) 
    280                 numStr = num2str(num) 
     294        if(num > 9999999 && num < 100000000) 
     295                numStr = num2istr(num) 
     296        endif 
     297        if(num > 999999 && num < 10000000) 
     298                numStr = "0"+num2istr(num) 
     299        endif    
     300        if(num > 99999 && num < 1000000) 
     301                numStr = "00"+num2istr(num) 
     302        endif    
     303        if(num > 9999 && num < 100000) 
     304                numStr = "000"+num2istr(num) 
     305        endif 
     306        if(num > 999 && num < 10000) 
     307                numStr =  "0000"+num2istr(num) 
    281308        endif 
    282309        if(num > 99 && num < 1000) 
    283                 numStr = "0"+num2str(num) 
    284         endif 
     310                numStr = "00000"+num2istr(num) 
     311        endif    
    285312        if(num > 9 && num < 100) 
    286                 numStr = "00"+num2str(num) 
    287         endif 
    288         if(num < 10) 
    289                 numStr = "000"+num2Str(num) 
     313                numStr = "000000"+num2istr(num) 
     314        endif    
     315        if(num < 10 && num >0) 
     316                numStr = "0000000"+num2iStr(num) 
    290317        endif 
    291318        if(num == 0) 
    292                 numStr = "0000" 
    293         endif 
    294                  
     319                numStr = "00000000" 
     320        endif 
     321 
    295322        //make sure that path exists 
    296323        PathInfo catPathName 
     
    305332        Variable numItems,ii,runFound,isRAW 
    306333        numItems = ItemsInList(list,";")                //get the new number of items in the list 
    307         ii=0 
     334 
     335        ii=3 
    308336        do 
    309337                //parse through the list in this order: 
    310                 // 1 - does item contain run number (as a string) "NAMESANS_expNN_scan####_####.xml" : Let the first #### is the run num. 
     338                // 1 - does item contain run number (as a string) "NAMESANS_expNN_scan####_####.xml" : Let's check the 8  nums. 
    311339                // 2 - exclude by isRaw? (to minimize disk access) 
    312340                item = StringFromList(ii, list  ,";" ) 
     341                 
    313342                if(strlen(item) != 0) 
    314                         //find the run number, if it exists as a three character string 
    315                         testStr = GetRunNumStrFromFile(item) 
     343                        //find the run number, if it exists as a 8 character string 
     344                        testStr = GetRunNumStrFromFile(item)    //0) 
    316345                        runFound= cmpstr(numStr,testStr)        //compare the three character strings, 0 if equal 
     346                         
    317347                        if(runFound == 0) 
    318348                                //the run Number was found 
    319349                                //build valid filename 
    320350                                partialName = FindValidFileName(item) 
    321  
     351                                 
    322352                                if(strlen(partialName) != 0)            //non-null return from FindValidFileName() 
    323353                                        fullName = path + partialName 
     
    330360                                Endif 
    331361                        Endif 
     362                         
    332363                Endif 
    333364                ii+=1 
    334365        while(ii<numItems)              //process all items in list 
    335         print "Please type 'scan number(s)' from your file name..." 
     366        print "The run number (", numStr, " +- 1 ) does not exist... (Note: The run number is defined as 12345678 if the file name is NameSANS_exp##_scan1234_5678.xml)" 
    336367        Return ("")     //null return if file not found in list  
    337368End 
     
    365396                return 0                                //Not a xml file. Do nothing... 
    366397        endif 
    367  
    368         //temp list of ns 
    369         MAKE/T/N=(1)/O nsList 
    370         nsList[0] = "1.1"  
    371398         
    372399        // Check if  it is the SPICE version = 1.1 
    373         Variable  item,i 
    374         String thislocation,ns = "" 
     400        Variable  item,i,ns = 0 
     401        String thislocation 
    375402        if (refNum >0) 
    376                 for (item = 0; item < DimSize(nsList, 0); item += 1)            // loop over all possible namespaces 
    377                         XMLlistAttr(refNum, "/SPICErack", nsList[item]) 
    378                         wave/T M_listAttr 
    379          
    380                         for (i = 0; i < DimSize(M_listAttr,0); i+=1)                    // loop over all available attributes 
    381                                 // Expect the required hfir XML header (will fail if "schemalocation" is not found) 
    382                                 if ( CmpStr(  LowerStr(M_listAttr[i][1]),  LowerStr("SPICE_version") ) == 0 ) 
    383                                         thisLocation = HFIR_TrimWS(M_listAttr[i][2]) 
    384                                         if ( StringMatch(thisLocation, nsList[item] ) ) 
    385                                                 ns = nsList[item]                        
    386                                          
    387                                                 Break   // found it! 
    388                                         endif 
    389                                 endif 
    390                         endfor 
    391                         if (strlen(ns))                  
    392                                 Break            
    393                         endif 
    394                 endfor 
     403                ns = str2num(XMLstrFmXpath(refNum, "//SPICErack/@SPICE_version","","")) 
    395404        endif 
    396405        XmlCloseFile(refNum,0) 
    397         KillWaves/Z M_listAttr, nsList 
    398         if (StringMatch(ns,"1.1") <1) 
    399                 ns = "0" 
     406        if (ns <1.1) 
     407                ns =0 
    400408        else 
    401                 ns = "1" 
    402         endif 
    403          
    404         return str2num(ns) 
     409                ns =1 
     410        endif 
     411         
     412        return ns 
    405413End 
    406414 
     
    430438        else 
    431439                //Check from beam stop motor position 
    432         Variable beamtrap_1y=0,beamtrap_2y=0,beamtrap_3y=0,beamtrap_4y=0,tol=30 
     440        Variable beamtrap_1y=0,beamtrap_2y=0,beamtrap_3y=0,beamtrap_4y=0,tol=451 
    433441        //      if(your test here) 
    434         beamtrap_1y=getRealValueFromHeader(fname,"trap_y_101mm","mm") 
    435         beamtrap_2y=getRealValueFromHeader(fname,"trap_y_25mm","mm") 
    436         beamtrap_3y=getRealValueFromHeader(fname,"trap_y_50mm","mm") 
    437         beamtrap_4y=getRealValueFromHeader(fname,"trap_y_76mm","mm") 
    438  
    439 //       if (beamtrap_1y<10 && beamtrap_2y<10 && beamtrap_3y<10 && beamtrap_4y<10)       
    440          if (beamtrap_1y < tol && beamtrap_2y < tol && beamtrap_3y < tol && beamtrap_4y < tol)   
    441                         //Write the flag ON 
     442                beamtrap_1y=getRealValueFromHeader(fname,"//Motor_Positions/trap_y_101mm","mm") 
     443                beamtrap_2y=getRealValueFromHeader(fname,"//Motor_Positions/trap_y_25mm","mm") 
     444                beamtrap_3y=getRealValueFromHeader(fname,"//Motor_Positions/trap_y_50mm","mm") 
     445                beamtrap_4y=getRealValueFromHeader(fname,"//Motor_Positions/trap_y_76mm","mm") 
     446 
     447                if (beamtrap_1y < tol && beamtrap_2y < tol && beamtrap_3y < tol && beamtrap_4y < tol)    
     448                        //Write the flag ON 
    442449                        Write_isTransmissionToHeader(fName,"True") 
    443                 return (1) 
    444         else 
    445         //some other file 
    446                 return (0) 
    447         endif 
     450                        return (1) 
     451                else 
     452                        //some other file 
     453                        return (0) 
     454                endif 
    448455        endif 
    449456        return (0) 
     
    560567                if(ii==0) 
    561568                        //first pass, try the partialName 
    562         tempName = partialName 
     569                        tempName = partialName 
    563570                        Open/Z/R/T="????TEXT"/P=catPathName refnum tempName     //Does open file (/Z flag) 
    564571                        if(V_flag == 0) 
     
    577584                Endif 
    578585                ii+=1 
    579                 //print "ii=",ii 
     586 
    580587        while(ii<11) 
    581588        //go get the selected bits of information, using tempName, which exists 
     
    691698// called by ProtocolAsPanel.ipf and Tile_2D.ipf 
    692699// 
    693 Function/S GetNameFromHeader(fullName) 
    694         String fullName 
     700Function/S GetNameFromHeader(fName) 
     701        String fName 
    695702        String temp, newName = "" 
    696703        Variable spc,ii=0 
     
    698705        //filename is 31-33 characters INSTRNAMESANS_exp##_scan####_####.xml (where # : numbers) 
    699706        //returns a null string if no name can be found 
    700         Variable iimax =  strlen(fullName) 
     707        Variable iimax =  strlen(fName) 
    701708        do 
    702                 temp = fullname[ii,iimax-1-4]           //characters ii,all of the name 
     709                temp = fname[ii,iimax-1-4]              //characters ii,all of the name 
    703710                spc = strsearch(temp," ",0) 
    704711                if (spc == -1) 
     
    781788                item = StringFromList(ii,list,",") 
    782789                //is it already a valid filename? 
     790                 
    783791                tempStr=FindValidFilename(item) //returns filename if good, null if error 
    784792                if(strlen(tempstr)!=0) 
     
    790798                        //is it a number? 
    791799                        runNum=str2num(item) 
    792                         //print runnum 
     800 
    793801                        if(numtype(runNum) != 0) 
    794802                                //not a number -  maybe an error                         
     
    808816                endif 
    809817        endfor          //loop over all items in list 
    810          
     818 
    811819        return(newList) 
    812820End 
     
    828836         
    829837        num=itemsinlist(list,",") 
    830 //      print num 
     838 
    831839        for(ii=0;ii<num;ii+=1) 
    832840                //get the item 
     
    925933        list = IndexedFile(catpathName,-1,"????") 
    926934        num=ItemsInList(list,";") 
    927         //print "num = ",num 
     935 
    928936        for(ii=(num-1);ii>=0;ii-=1) 
    929937                item = StringFromList(ii, list  ,";") 
    930938                //simply remove all that are not raw data files (SA1 SA2 SA3) 
    931                 if( !stringmatch(item,"HiResSANS*.xml")  && !stringmatch(item,"BioSANS*.xml") ) 
     939                //if( !stringmatch(item,"*HiResSANS*.xml") && !stringmatch(item,"*BioSANS*.xml")) 
    932940                        if( !stringmatch(item,".*") && !stringmatch(item,"*.pxp") && !stringmatch(item,"*.DIV"))                //eliminate mac "hidden" files, pxp, and div files 
    933                                 newlist += item + ";" 
     941                                newlist += (item) + ";"     
    934942                        endif 
    935                 endif 
     943                //endif 
    936944        endfor 
    937945        //remove VAX version numbers 
     
    9941002End 
    9951003 
     1004 
     1005 
     1006 
    9961007// Return the filename that represents the previous or next file. 
    9971008// Input is current filename and increment.  
     
    10091020                 
    10101021        //find the next specified file by number 
    1011         fileName = FindFileFromRunNumber(num+prevnext) 
     1022        fileName = FindPrevNextRawFile(curfilename, prevnext) 
    10121023 
    10131024        if(cmpstr(fileName,"")==0) 
     
    10161027        Endif 
    10171028 
    1018 //      print "in FU "+filename 
     1029        //print "in FU "+filename 
    10191030 
    10201031        Return filename 
    10211032End 
     1033 
     1034// Find next or previous file name w/ current file name given. 
     1035// Sort the list of files and get the next/previous file name. 
     1036Function/S FindPrevNextRawFile(curfilename, prevnext) 
     1037        String curfilename 
     1038        Variable prevnext 
     1039         
     1040        String fullName="",partialName="",item="", list="" 
     1041        Variable numItems,isRAW 
     1042                         
     1043        //make sure that path exists 
     1044        PathInfo catPathName 
     1045        String path = S_path 
     1046         
     1047        if (V_flag == 0) 
     1048                Abort "folder path does not exist - use Pick Path button" 
     1049        Endif 
     1050 
     1051         
     1052        list = SortList(IndexedFile(catPathName,-1,"????"),";") //get all files in folder and make sure it is sorted. 
     1053         
     1054        //find (the) one with the number in the run # location in the name 
     1055 
     1056        numItems = ItemsInList(list,";")                //get the new number of items in the list 
     1057        //index of curfilename 
     1058        Variable index = WhichListItem(curfilename,list,";",0,0) 
     1059        //get the prenextitem in the list 
     1060        item = StringFromList(index+prevnext, list  ,";") 
     1061        partialName = FindValidFileName(item) 
     1062         
     1063        if(strlen(partialName) != 0)            //non-null return from FindValidFileName() 
     1064                fullName = path + partialName 
     1065                //check if RAW, if so,this must be the file! 
     1066                isRAW = CheckIfRawData(fullName) 
     1067                if(isRaw) 
     1068                        //stop here 
     1069                        return(fullname) 
     1070                Endif 
     1071        Endif 
     1072 
     1073        print "Please type 'scan number(s)' from your file name..." 
     1074        Return ("")     //null return if file not found in list  
     1075End 
     1076 
Note: See TracChangeset for help on using the changeset viewer.