Ignore:
Timestamp:
Nov 13, 2015 4:03:38 PM (7 years ago)
Author:
srkline
Message:

more additions to the R/W functions to access VSANS data files

File:
1 edited

Legend:

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

    r967 r969  
    10801080// so the FHWM will be different in each direction. May need to return 
    10811081// "dummy" value for "B" detector if pixels there are square 
    1082 Function V_getDet_PixelFWHM(fname,detStr) 
    1083         String fname,detStr 
    1084  
    1085         String path = "entry:instrument:detector_"+detStr+":PixelFWHM" 
     1082Function V_getDet_PixelFWHM_X(fname,detStr) 
     1083        String fname,detStr 
     1084 
     1085        String path = "entry:instrument:detector_"+detStr+":PixelFWHM_X" 
    10861086 
    10871087// TODO -- different behavior for "B" 
     
    10931093End 
    10941094 
     1095// TODO -- write and X and Y version of this. Pixels are not square 
     1096// so the FHWM will be different in each direction. May need to return 
     1097// "dummy" value for "B" detector if pixels there are square 
     1098Function V_getDet_PixelFWHM_Y(fname,detStr) 
     1099        String fname,detStr 
     1100 
     1101        String path = "entry:instrument:detector_"+detStr+":PixelFWHM_Y" 
     1102 
     1103// TODO -- different behavior for "B" 
     1104        if(cmpstr(detStr,"B") == 0) 
     1105                return(V_getRealValueFromHDF5(fname,path)) 
     1106        else 
     1107                return(V_getRealValueFromHDF5(fname,path)) 
     1108        endif 
     1109End 
     1110 
    10951111Function V_getDet_PixelNumX(fname,detStr) 
    10961112        String fname,detStr 
     
    14681484 
    14691485        String path = "entry:instrument:sample_aperture:shape:size" 
     1486        WAVE w = V_getRealWaveFromHDF5(fname,path) 
     1487 
     1488        outW = w 
     1489        return(0) 
     1490End              
     1491 
     1492///////  sample_aperture_2 (data folder) 
     1493 
     1494Function/S V_getSampleAp2_Description(fname) 
     1495        String fname 
     1496 
     1497        String path = "entry:instrument:sample_aperture_2:description" 
     1498        Variable num=60 
     1499        return(V_getStringFromHDF5(fname,path,num)) 
     1500End 
     1501 
     1502Function V_getSampleAp2_distance(fname) 
     1503        String fname 
     1504 
     1505        String path = "entry:instrument:sample_aperture_2:distance" 
     1506        return(V_getRealValueFromHDF5(fname,path)) 
     1507End 
     1508//      shape (data folder) 
     1509 
     1510Function/S V_getSampleAp2_shape(fname) 
     1511        String fname 
     1512 
     1513        String path = "entry:instrument:sample_aperture_2:shape:shape" 
     1514        Variable num=60 
     1515        return(V_getStringFromHDF5(fname,path,num)) 
     1516End 
     1517 
     1518// TODO -- this needs to return a WAVE, since the shape may be circle, or rectangle 
     1519// and will need to return more than a single dimension 
     1520// TODO -- be careful of the UNITS 
     1521Function V_getSampleAp2_size(fname,outW) 
     1522        String fname 
     1523        Wave outW 
     1524 
     1525        String path = "entry:instrument:sample_aperture_2:shape:size" 
    14701526        WAVE w = V_getRealWaveFromHDF5(fname,path) 
    14711527 
     
    16131669 
    16141670 
    1615 Function V_getSample_rotationAngle(fname) 
    1616         String fname 
    1617          
    1618         String path = "entry:sample:rotation_angle"      
    1619         return(V_getRealValueFromHDF5(fname,path)) 
    1620 end 
    1621  
    1622  
    16231671//Sample Rotation Angle 
    16241672Function V_getSampleRotationAngle(fname) 
     
    16661714 
    16671715 
    1668  
    1669  
    1670  
    1671 // sample label 
    1672 // 
    1673 // TODO 
    1674 // limit to 60 characters?? do I need to do this with HDF5? 
    1675 // 
    1676 // do I need to pad to 60 characters? 
    1677 // 
    1678 Function V_WriteSamLabelToHeader(fname,str) 
    1679         String fname,str 
    1680          
    1681 //      if(strlen(str) > 60) 
    1682 //              str = str[0,59] 
    1683 //      endif    
    1684          
    1685         Make/O/T/N=1 tmpTW 
    1686         String groupName = "/sample"    //      /entry is automatically prepended -- so just explicitly state the group 
    1687         String varName = "description" 
    1688         tmpTW[0] = str // 
    1689  
    1690         variable err 
    1691         err = V_WriteTextWaveToHDF(fname, groupName, varName, tmpTW) 
    1692         if(err) 
    1693                 Print "HDF write err = ",err 
    1694         endif 
    1695          
    1696         // now be sure to kill the data folder to force a re-read of the data next time this file is read in 
    1697         err = V_KillNamedDataFolder(fname) 
    1698         if(err) 
    1699                 Print "DataFolder kill err = ",err 
    1700         endif 
    1701                  
    1702         return(err) 
    1703 End 
    1704  
    1705 // sample transmission 
    1706 Function V_WriteTransmissionToHeader(fname,trans) 
    1707         String fname 
    1708         Variable trans 
    1709          
    1710         Make/O/D/N=1 wTmpWrite 
    1711         String groupName = "/sample"    //      skip "entry" - /entry/sample becomes groupName /entry/entry/sample 
    1712         String varName = "transmission" 
    1713 //      Make/O/R/N=1 wTmpWrite 
    1714 //      String groupName = "/data"      //      skip "entry" - /entry/sample becomes groupName /entry/entry/sample 
    1715 //      String varName = "Transmission" 
    1716         wTmpWrite[0] = trans // 
    1717  
    1718         variable err 
    1719         err = V_WriteWaveToHDF(fname, groupName, varName, wTmpWrite) 
    1720         if(err) 
    1721                 Print "HDF write err = ",err 
    1722         endif 
    1723         // now be sure to kill the data folder to force a re-read of the data next time this file is read in 
    1724         err = V_KillNamedDataFolder(fname) 
    1725         if(err) 
    1726                 Print "DataFolder kill err = ",err 
    1727         endif 
    1728         return(err) 
    1729 End 
    17301716 
    17311717 
     
    19051891End 
    19061892 
     1893Function/S V_getTransmissionFileName(fname) 
     1894        String fname 
     1895 
     1896        String path = "entry:reduction:transmission_file_name"   
     1897        Variable num=60 
     1898        return(V_getStringFromHDF5(fname,path,num)) 
     1899End 
     1900 
     1901Function/S V_getEmptyBeamFileName(fname) 
     1902        String fname 
     1903 
     1904        String path = "entry:reduction:empty_beam_file_name"     
     1905        Variable num=60 
     1906        return(V_getStringFromHDF5(fname,path,num)) 
     1907End 
     1908 
    19071909 
    19081910//whole detector trasmission 
     
    20002002 
    20012003 
    2002 ////////////////////////////// 
    2003 ////////////////////////////// 
    2004 ////////////////////////////// 
    2005  
    2006 Function V_KillNamedDataFolder(fname) 
    2007         String fname 
    2008          
    2009         Variable err=0 
    2010          
    2011         String folderStr = V_GetFileNameFromPathNoSemi(fname) 
    2012         folderStr = V_RemoveDotExtension(folderStr) 
    2013          
    2014         KillDataFolder/Z $("root:"+folderStr) 
    2015         err = V_flag 
    2016          
    2017         return(err) 
    2018 end 
    2019  
    2020 //given a filename of a SANS data filename of the form 
    2021 // name.anything 
    2022 //returns the name as a string without the ".fbdfasga" extension 
    2023 // 
    2024 // returns the input string if a"." can't be found (maybe it wasn't there" 
    2025 Function/S V_RemoveDotExtension(item) 
    2026         String item 
    2027         String invalid = item   // 
    2028         Variable num=-1 
    2029          
    2030         //find the "dot" 
    2031         String runStr="" 
    2032         Variable pos = strsearch(item,".",0) 
    2033         if(pos == -1) 
    2034                 //"dot" not found 
    2035                 return (invalid) 
    2036         else 
    2037                 //found, get all of the characters preceeding it 
    2038                 runStr = item[0,pos-1] 
    2039                 return (runStr) 
    2040         Endif 
    2041 End 
    2042  
    2043 //returns a string containing filename (WITHOUT the ;vers) 
    2044 //the input string is a full path to the file (Mac-style, still works on Win in IGOR) 
    2045 //with the folders separated by colons 
    2046 // 
    2047 // called by MaskUtils.ipf, ProtocolAsPanel.ipf, WriteQIS.ipf 
    2048 // 
    2049 Function/S V_GetFileNameFromPathNoSemi(fullPath) 
    2050         String fullPath 
    2051          
    2052         Variable offset1,offset2 
    2053         String filename="" 
    2054         //String PartialPath 
    2055         offset1 = 0 
    2056         do 
    2057                 offset2 = StrSearch(fullPath, ":", offset1) 
    2058                 if (offset2 == -1)                              // no more colons ? 
    2059                         fileName = FullPath[offset1,strlen(FullPath) ] 
    2060                         //PartialPath = FullPath[0, offset1-1] 
    2061                         break 
    2062                 endif 
    2063                 offset1 = offset2+1 
    2064         while (1) 
    2065          
    2066         //remove version number from name, if it's there - format should be: filename;N 
    2067         filename =  StringFromList(0,filename,";")              //returns null if error 
    2068          
    2069         Return filename 
    2070 End 
Note: See TracChangeset for help on using the changeset viewer.