Ignore:
Timestamp:
Mar 30, 2007 5:26:06 PM (16 years ago)
Author:
srkline
Message:

more transferring of functions to NCNR_* files.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sans/SANSReduction/branches/kline_29MAR07/Put in User Procedures/SANS_Reduction_v5.00/NCNR_DataReadWrite.ipf

    r71 r72  
    801801End 
    802802 
     803/////   ASC FORMAT READER  ////// 
     804/////   FOR WORKFILE MATH PANEL ////// 
     805 
     806//function to read in the ASC output of SANS reduction 
     807// currently the file has 20 header lines, followed by a single column 
     808// of 16384 values, Data is written by row, starting with Y=1 and X=(1->128) 
     809// 
     810//returns 0 if read was ok 
     811//returns 1 if there was an error 
     812// 
     813// assumes a square detector 
     814// 
     815Function ReadASCData(fname,destPath) 
     816        String fname, destPath 
     817        //this function is for reading in ASCII data so put data in user-specified folder 
     818        SetDataFolder "root:"+destPath 
     819 
     820        NVAR pixelsX = root:myGlobals:gNPixelsX 
     821        NVAR pixelsY = root:myGlobals:gNPixelsY 
     822        Variable refNum=0,ii,p1,p2,tot,num=pixelsX,numHdrLines=20 
     823        String str="" 
     824        //data is initially linear scale 
     825        Variable/G :gIsLogScale=0 
     826        Make/O/T/N=(numHdrLines) hdrLines 
     827        Make/O/D/N=(num*num) data//,linear_data 
     828         
     829        //full filename and path is now passed in... 
     830        //actually open the file 
     831//      SetDataFolder destPath 
     832        Open/R/Z refNum as fname                // /Z flag means I must handle open errors 
     833        if(refnum==0)           //FNF error, get out 
     834                DoAlert 0,"Could not find file: "+fname 
     835                Close/A 
     836                SetDataFolder root: 
     837                return(1) 
     838        endif 
     839        if(V_flag!=0) 
     840                DoAlert 0,"File open error: V_flag="+num2Str(V_Flag) 
     841                Close/A 
     842                SetDataFolder root: 
     843                return(1) 
     844        Endif 
     845        //  
     846        for(ii=0;ii<numHdrLines;ii+=1)          //read (or skip) 18 header lines 
     847                FReadLine refnum,str 
     848                hdrLines[ii]=str 
     849        endfor 
     850        //       
     851        Close refnum 
     852         
     853//      SetDataFolder destPath 
     854        LoadWave/Q/G/D/N=temp fName 
     855        Wave/Z temp0=temp0 
     856        data=temp0 
     857        Redimension/N=(pixelsX,pixelsY) data//,linear_data 
     858         
     859        //linear_data = data 
     860         
     861        KillWaves/Z temp0  
     862         
     863        //return the data folder to root 
     864        SetDataFolder root: 
     865         
     866        Return(0) 
     867End 
     868 
     869// fills the "default" fake header so that the SANS Reduction machinery does not have to be altered 
     870// pay attention to what is/not to be trusted due to "fake" information 
     871// 
     872// destFolder is of the form "myGlobals:WorkMath:AAA" 
     873// 
     874Function FillFakeHeader_ASC(destFolder) 
     875        String destFolder 
     876        Make/O/N=23 $("root:"+destFolder+":IntegersRead") 
     877        Make/O/N=52 $("root:"+destFolder+":RealsRead") 
     878        Make/O/T/N=11 $("root:"+destFolder+":TextRead") 
     879         
     880        Wave intw=$("root:"+destFolder+":IntegersRead") 
     881        Wave realw=$("root:"+destFolder+":RealsRead") 
     882        Wave/T textw=$("root:"+destFolder+":TextRead") 
     883         
     884        //Put in appropriate "fake" values 
     885        //parse values as needed from headerLines 
     886        Wave/T hdr=$("root:"+destFolder+":hdrLines") 
     887        Variable monCt,lam,offset,sdd,trans,thick 
     888        Variable xCtr,yCtr,a1,a2,a1a2Dist,dlam,bsDiam 
     889        String detTyp="" 
     890        String tempStr="",formatStr="",junkStr="" 
     891        formatStr = "%g %g %g %g %g %g" 
     892        tempStr=hdr[3] 
     893        sscanf tempStr, formatStr, monCt,lam,offset,sdd,trans,thick 
     894//      Print monCt,lam,offset,sdd,trans,thick,avStr,step 
     895        formatStr = "%g %g %g %g %g %g %g %s" 
     896        tempStr=hdr[5] 
     897        sscanf tempStr,formatStr,xCtr,yCtr,a1,a2,a1a2Dist,dlam,bsDiam,detTyp 
     898//      Print xCtr,yCtr,a1,a2,a1a2Dist,dlam,bsDiam,detTyp 
     899         
     900        realw[16]=xCtr          //xCtr(pixels) 
     901        realw[17]=yCtr  //yCtr (pixels) 
     902        realw[18]=sdd           //SDD (m) 
     903        realw[26]=lam           //wavelength (A) 
     904        // 
     905        // necessary values 
     906        realw[10]=5                     //detector calibration constants, needed for averaging 
     907        realw[11]=10000 
     908        realw[12]=0 
     909        realw[13]=5 
     910        realw[14]=10000 
     911        realw[15]=0 
     912        // 
     913        // used in the resolution calculation, ONLY here to keep the routine from crashing 
     914        realw[20]=65            //det size 
     915        realw[27]=dlam  //delta lambda 
     916        realw[21]=bsDiam        //BS size 
     917        realw[23]=a1            //A1 
     918        realw[24]=a2    //A2 
     919        realw[25]=a1a2Dist      //A1A2 distance 
     920        realw[4]=trans          //trans 
     921        realw[3]=0              //atten 
     922        realw[5]=thick          //thick 
     923        // 
     924        // 
     925        realw[0]=monCt          //def mon cts 
     926 
     927        // fake values to get valid deadtime and detector constants 
     928        // 
     929        textw[9]=detTyp+"  "            //6 characters 4+2 spaces 
     930        textw[3]="[NGxSANS00]"  //11 chars, NGx will return default values for atten trans, deadtime...  
     931         
     932        //set the string values 
     933        formatStr="FILE: %s CREATED: %s" 
     934        sscanf hdr[0],formatStr,tempStr,junkStr 
     935//      Print tempStr 
     936//      Print junkStr 
     937        String/G $("root:"+destFolder+":fileList") = tempStr 
     938        textw[0] = tempStr              //filename 
     939        textw[1] = junkStr              //run date-time 
     940         
     941        //file label = hdr[1] 
     942        tempStr = hdr[1] 
     943        tempStr = tempStr[0,strlen(tempStr)-2]          //clean off the last LF 
     944//      Print tempStr 
     945        textW[6] = tempStr      //sample label 
     946         
     947        return(0) 
     948End 
     949 
     950 
     951 
     952 
     953 
     954 
    803955////testing procedure that is not called anymore and is out-of-date 
    804956////with the new data structures. update before re-implementing 
     
    9791131End 
    9801132 
     1133// file creation date (20 characters @ byte 55) 
     1134Function/S getFileCreationDate(fname) 
     1135        String fname 
     1136         
     1137        return(getStringFromHeader(fname,55,20)) 
     1138End 
     1139 
    9811140// read a single real value with GBLoadWave 
    9821141Function getRealValueFromHeader(fname,start) 
     
    10351194end 
    10361195 
     1196//Sample Rotation Angle is at byte 170 
     1197Function getSampleRotationAngle(fname) 
     1198        String fname 
     1199         
     1200        return(getRealValueFromHeader(fname,170)) 
     1201end 
     1202 
    10371203//temperature is at byte 186 
    10381204Function getTemperature(fname) 
     
    10491215end 
    10501216 
    1051 //beamstop xPos is at byte 252 
    1052 Function getBSXPos(fname) 
     1217//beam xPos is at byte 252 
     1218Function getBeamXPos(fname) 
    10531219        String fname 
    10541220         
     
    10561222end 
    10571223 
    1058 //beamstop Y pos is at byte 256 
    1059 Function getBSYPos(fname) 
     1224//beam Y pos is at byte 256 
     1225Function getBeamYPos(fname) 
    10601226        String fname 
    10611227         
     
    11261292end 
    11271293 
    1128  
     1294//////  integer values 
    11291295 
    11301296Function getIntegerFromHeader(fname,start) 
     
    11721338End 
    11731339 
     1340/////   TRANSMISSION RELATED FUNCTIONS    //////// 
     1341//box coordinate are returned by reference 
     1342Function GetXYBoxFromFile(filename,x1,x2,y1,y2) 
     1343        String filename 
     1344        Variable &x1,&x2,&y1,&y2 
     1345         
     1346        Variable refnum 
     1347        String tmpFile = FindValidFilename(filename) 
     1348                 
     1349        Open/R/P=catPathName refnum as tmpFile 
     1350        FSetPos refnum,478 
     1351        FBinRead/F=3/B=3 refnum, x1 
     1352        FBinRead/F=3/B=3 refnum, x2 
     1353        FBinRead/F=3/B=3 refnum, y1 
     1354        FBinRead/F=3/B=3 refnum, y2 
     1355        Close refnum 
     1356         
     1357        return(0) 
     1358End 
     1359 
     1360//go find the file, open it and write 4 integers to the file 
     1361//in the positions for analysis.rows(2), .cols(2) = 4 unused 4byte integers 
     1362Function WriteXYBoxToHeader(filename,x1,x2,y1,y2) 
     1363        String filename 
     1364        Variable x1,x2,y1,y2 
     1365         
     1366        Variable refnum 
     1367        Open/A/T="????TEXT" refnum as filename 
     1368        FSetPos refnum,478 
     1369        FBinWrite/F=3/B=3 refNum, x1 
     1370        FBinWrite/F=3/B=3 refNum, x2 
     1371        FBinWrite/F=3/B=3 refNum, y1 
     1372        FBinWrite/F=3/B=3 refNum, y2 
     1373        //move to the end of the file before closing 
     1374        FStatus refnum 
     1375        FSetPos refnum,V_logEOF 
     1376        Close refnum 
     1377         
     1378        return(0) 
     1379End 
Note: See TracChangeset for help on using the changeset viewer.