Ignore:
Timestamp:
Mar 19, 2008 2:56:39 AM (14 years ago)
Author:
prjemian
Message:

more metadata read by IgorPro? reader

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 1dwg/trunk/IgorPro/cansasXML.ipf

    r12 r17  
    11#pragma rtGlobals=1             // Use modern global access method. 
    2 #pragma version=1.02 
     2#pragma version=1.04 
    33 
    44// file:        cansasXML.ipf 
    55// author:      Pete R. Jemian <jemian@anl.gov> 
    6 // date:        2008-03-16 
     6// date:        2008-03-19 
    77// purpose:  implement an IgorPro file reader to read the canSAS 1-D reduced SAS data in XML files 
    88//                      adheres to the cansas1d/1.0 standard 
    99// URL: http://www.smallangles.net/wgwiki/index.php/cansas1d_documentation 
     10// 
     11// requires:    IgorPro (http://www.wavemetrics.com/) 
     12//                              XMLutils - XOP (http://www.igorexchange.com/project/XMLutils) 
    1013 
    1114FUNCTION CS_XmlReader(fileName) 
     
    7881        CS_registerNameSpaces(fileID)                           // to assist XPath construction 
    7982 
    80         // PRJ_quick(fileID) 
    81  
    8283        // identify supported versions of canSAS XML standard 
    8384        STRING version 
     
    119120        VARIABLE fileID 
    120121        WAVE/T W_ElementList 
    121         SVAR nsStr, errorMsg 
    122         STRING/G Title, FolderList = "" 
     122        SVAR nsStr, errorMsg, xmlFile 
     123        STRING/G Title 
    123124        STRING XPathStr, Title_folder, SASdata_folder 
    124         STRING SASentryPath, SASdataPath 
     125        STRING SASentryPath, SASdataPath, RunNum 
    125126        VARIABLE i, j, index, SASdata_index, returnCode = 0 
    126127 
     
    150151                ENDIF 
    151152                NewDataFolder/O  $Title_folder 
    152                 FolderList = AddListItem(Title_folder, FolderList, ";", Inf) 
     153                STRING/G FolderList = "" 
     154                FolderList = AddListItem(":"+Title_folder+":", FolderList, ";", Inf) 
    153155                // 
    154156                // CS_correctedXpathStr 
     
    163165                        SASdataPath = CS_correctedXpathStr(SASdataList[0]) 
    164166                        SASdata_folder = ":" + Title_folder + ":" 
     167                        RunNum = "/Run" 
     168                        CS_appendMetaData( "Run",                               SASentryPath+CS_XPath_NS(RunNum),                               "") 
     169                        CS_appendMetaData( "Run_name",                  SASentryPath+CS_XPath_NS(RunNum + "/@name"),    "") 
     170                        CS_appendMetaData( "SASdata_name",      SASdataPath+CS_XPath_NS("/@name"),                              "") 
    165171                        PRINT "\t\t dataFolder:", SASdata_folder 
     172                        CS_1i_fillMetadataTable(fileID) 
    166173                        IF (CS_1i_extractSasData(fileID, SASdataPath, SASdata_folder)) 
    167174                                // non-zero return code means an error, message is in errorMsg 
     
    175182                                BREAK 
    176183                        ENDIF 
    177                         CS_appendMetaData(  "Run", "", CS_XmlStrFmXpath(fileID, SASdataPath+"/",  "../Run["+num2str(j+1)+"]")) 
    178                         CS_appendMetaData(  "Run_name", "", CS_XmlStrFmXpath(fileID, SASdataPath+"/",  "../Run["+num2str(j+1)+"]/@name")) 
    179                         CS_appendMetaData(  "SASdata_name", "", CS_XmlStrFmXpath(fileID, SASdataPath,  "/@name")) 
    180184                ELSE 
    181185                        // multiple SASdata elements, place data waves in subfolders 
     
    187191                                SASdata_folder = CleanupName(StringByKey("name", W_ElementList[SASdata_index][2]), 0) 
    188192                                PRINT "\t\t dataFolder:", SASdata_folder 
    189                                 CS_appendMetaData(  "Run"+num2str(j), "", CS_XmlStrFmXpath(fileID, SASdataPath+"/",  "../Run["+num2str(j+1)+"]")) 
    190                                 CS_appendMetaData(  "Run"+num2str(j)+"_name", "", CS_XmlStrFmXpath(fileID, SASdataPath+"/",  "../Run["+num2str(j+1)+"]/@name")) 
    191                                 CS_appendMetaData(  "SASdata"+num2str(j)+"_name", "", CS_XmlStrFmXpath(fileID, SASdataPath,  "/@name")) 
     193                                RunNum = "/Run["+num2str(j+1)+"]" 
     194                                CS_appendMetaData( "Run"+num2str(j),                            SASdataPath+"/.."+CS_XPath_NS(RunNum),                          "") 
     195                                CS_appendMetaData( "Run"+num2str(j)+"_name",            SASdataPath+"/.."+CS_XPath_NS(RunNum + "/@name"),       "") 
     196                                CS_appendMetaData( "SASdata"+num2str(j)+"_name",        SASdataPath+CS_XPath_NS("/@name"),                                      "") 
    192197                                SetDataFolder $Title_folder 
    193198                                IF ( CheckName(SASdata_folder, 11) != 0 ) 
     
    197202                                SetDataFolder :: 
    198203                                SASdata_folder =  ":" + Title_folder + ":" + SASdata_folder + ":" 
     204                                FolderList = AddListItem(SASdata_folder, FolderList, ";", Inf) 
    199205                                //--- 
     206                                CS_1i_fillMetadataTable(fileID) 
    200207                                IF (CS_1i_extractSasData(fileID, SASdataPath, SASdata_folder)) 
    201208                                        // non-zero return code means an error, message is in errorMsg 
     
    211218                        ENDFOR  // many SASdata 
    212219                ENDIF                   // 1 or many SASdata 
     220                MAKE/O/T/N=(3,2) admin 
     221                admin[0][0] = "xmlFile" 
     222                admin[0][1] = xmlFile 
     223                admin[1][0] = "FolderList" 
     224                admin[1][1] = FolderList 
     225                admin[2][0] = "numSASdata" 
     226                admin[2][1] = num2str(numpnts(SASdataList)) 
     227                Title_folder = ":" + Title_folder + ":" 
     228                MoveWave admin, $Title_folder 
     229                MoveString FolderList, $Title_folder 
    213230        ENDFOR          // each SASentry 
    214231 
     
    225242        WAVE/T metadata 
    226243        STRING suffix = "" 
    227         STRING value 
     244        STRING value, detailsPath, detectorPath, notePath 
    228245        // collect some metadata 
    229246        // first, fill a table with keywords, and XPath locations, 3rd column will be values 
     
    256273                        suffix = num2str(i) 
    257274                ENDIF 
    258                 CS_appendMetaData("sample_details"+suffix+"_name",      detailsList[i]+CS_XPath_NS("/@name"), "") 
    259                 CS_appendMetaData("sample_details"+suffix,                      detailsList[i], "") 
     275                detailsPath = CS_correctedXpathStr(detailsList[i]) 
     276                CS_appendMetaData("sample_details"+suffix+"_name",      detailsPath+CS_XPath_NS("/@name"), "") 
     277                CS_appendMetaData("sample_details"+suffix,                      detailsPath, "") 
    260278        ENDFOR 
    261279 
     
    263281        // <SASinstrument> 
    264282        CS_appendMetaData("Instrument_name", sasEntryPath+CS_XPath_NS("/SASinstrument/name"), "") 
     283        CS_appendMetaData("Instrument_attr_name", sasEntryPath+CS_XPath_NS("/SASinstrument/@name"), "") 
    265284 
    266285        // <SASinstrument><SASsource> 
    267286        CS_appendMetaData("source_name", sasEntryPath+CS_XPath_NS("/SASinstrument/SASsource/@name"), "") 
    268287        CS_appendMetaData("radiation", sasEntryPath+CS_XPath_NS("/SASinstrument/SASsource/radiation"), "") 
     288        CS_appendMetaData("beam_size_name", sasEntryPath+CS_XPath_NS("/SASinstrument/SASsource/beam_size/@name"), "") 
     289        CS_appendMetaData("beam_size_x", sasEntryPath+CS_XPath_NS("/SASinstrument/SASsource/beam_size/x"), "") 
     290        CS_appendMetaData("beam_size_x_unit", sasEntryPath+CS_XPath_NS("/SASinstrument/SASsource/beam_size/x/@unit"), "") 
     291        CS_appendMetaData("beam_size_y", sasEntryPath+CS_XPath_NS("/SASinstrument/SASsource/beam_size/y"), "") 
     292        CS_appendMetaData("beam_size_y_unit", sasEntryPath+CS_XPath_NS("/SASinstrument/SASsource/beam_size/y/@unit"), "") 
     293        CS_appendMetaData("beam_size_z", sasEntryPath+CS_XPath_NS("/SASinstrument/SASsource/beam_size/z"), "") 
     294        CS_appendMetaData("beam_size_z_unit", sasEntryPath+CS_XPath_NS("/SASinstrument/SASsource/beam_size/z/@unit"), "") 
    269295        CS_appendMetaData("beam_shape", sasEntryPath+CS_XPath_NS("/SASinstrument/SASsource/beam_shape"), "") 
    270         // ignore <beam_size> for now 
    271296        CS_appendMetaData("wavelength", sasEntryPath+CS_XPath_NS("/SASinstrument/SASsource/wavelength"), "") 
    272297        CS_appendMetaData("wavelength_unit", sasEntryPath+CS_XPath_NS("/SASinstrument/SASsource/wavelength/@unit"), "") 
     
    279304 
    280305        // ignore <SASinstrument><SAScollimation> for now 
     306        CS_simpleXmlListXpath(fileID, sasEntryPath, "/SASinstrument//SAScollimation")           //output: W_listXPath 
     307        DUPLICATE/O/T   W_listXPath, SAScollimationList 
     308        STRING collimationPath 
     309        suffix = "" 
     310        FOR (i = 0; i < numpnts(SAScollimationList); i += 1) 
     311                IF (numpnts(SAScollimationList) > 1) 
     312                        suffix = num2str(i) 
     313                ENDIF 
     314                collimationPath = CS_correctedXpathStr(SAScollimationList[i]) 
     315                CS_appendMetaData("collimation_name"+suffix,    collimationPath+CS_XPath_NS("/@name"), "") 
     316                CS_appendMetaData("collimation_distance"+suffix,        collimationPath+CS_XPath_NS("/distance"), "") 
     317                CS_appendMetaData("collimation_distance_unit"+suffix,   collimationPath+CS_XPath_NS("/distance/@unit"), "") 
     318                CS_appendMetaData("collimation_aperture_name"+suffix,   collimationPath+CS_XPath_NS("/aperture/@name"), "") 
     319                CS_appendMetaData("collimation_aperture_type"+suffix,   collimationPath+CS_XPath_NS("/aperture/type"), "") 
     320                CS_appendMetaData("collimation_aperture_size_name"+suffix,      collimationPath+CS_XPath_NS("/aperture/size/@name"), "") 
     321                CS_appendMetaData("collimation_aperture_size_x"+suffix,         collimationPath+CS_XPath_NS("/aperture/size/x"), "") 
     322                CS_appendMetaData("collimation_aperture_size_x_unit"+suffix,    collimationPath+CS_XPath_NS("/aperture/size/x/@unit"), "") 
     323                CS_appendMetaData("collimation_aperture_size_y"+suffix,         collimationPath+CS_XPath_NS("/aperture/size/y"), "") 
     324                CS_appendMetaData("collimation_aperture_size_y_unit"+suffix,    collimationPath+CS_XPath_NS("/aperture/size/y/@unit"), "") 
     325                CS_appendMetaData("collimation_aperture_size_z"+suffix,         collimationPath+CS_XPath_NS("/aperture/size/z"), "") 
     326                CS_appendMetaData("collimation_aperture_size_z_unit"+suffix,    collimationPath+CS_XPath_NS("/aperture/size/z/@unit"), "") 
     327                CS_appendMetaData("collimation_aperture_distance"+suffix,       collimationPath+CS_XPath_NS("/aperture/distance"), "") 
     328                CS_appendMetaData("collimation_aperture_distance_unit"+suffix,  collimationPath+CS_XPath_NS("/aperture/distance/@unit"), "") 
     329        ENDFOR 
    281330 
    282331        // <SASinstrument><SASdetector> might appear multiple times 
     
    288337                        suffix = num2str(i) 
    289338                ENDIF 
    290                 CS_appendMetaData("detector_name"+suffix,       SASdetectorList[i]+CS_XPath_NS("/name"), "") 
    291                 CS_appendMetaData("SDD"+suffix,                         SASdetectorList[i]+CS_XPath_NS("/SDD"), "") 
    292                 CS_appendMetaData("SDD"+suffix+"_unit",                 SASdetectorList[i]+CS_XPath_NS("/SDD/@unit"), "") 
    293                 // ignore <offset> for now 
    294                 // ignore <orientation> for now 
    295                 // ignore <beam_center> for now 
    296                 // ignore <pixel_size> for now 
    297                 CS_appendMetaData("slit_length"+suffix,                 SASdetectorList[i]+CS_XPath_NS("/slit_length"), "") 
    298                 CS_appendMetaData("slitLength"+suffix+"_unit",  SASdetectorList[i]+CS_XPath_NS("/slit_length/@unit"), "") 
     339                detectorPath = CS_correctedXpathStr(SASdetectorList[i]) 
     340                CS_appendMetaData("detector_name"+suffix,       detectorPath+CS_XPath_NS("/name"), "") 
     341                CS_appendMetaData("SDD"+suffix,                         detectorPath+CS_XPath_NS("/SDD"), "") 
     342                CS_appendMetaData("SDD"+suffix+"_unit",                 detectorPath+CS_XPath_NS("/SDD/@unit"), "") 
     343                CS_appendMetaData("detector_offset_name"+suffix,        detectorPath+CS_XPath_NS("/offset/@name"), "") 
     344                CS_appendMetaData("detector_offset_x"+suffix,           detectorPath+CS_XPath_NS("/offset/x"), "") 
     345                CS_appendMetaData("detector_offset_x_unit"+suffix,      detectorPath+CS_XPath_NS("/offset/x/@unit"), "") 
     346                CS_appendMetaData("detector_offset_y"+suffix,           detectorPath+CS_XPath_NS("/offset/y"), "") 
     347                CS_appendMetaData("detector_offset_y_unit"+suffix,      detectorPath+CS_XPath_NS("/offset/y/@unit"), "") 
     348                CS_appendMetaData("detector_offset_z"+suffix,           detectorPath+CS_XPath_NS("/offset/z"), "") 
     349                CS_appendMetaData("detector_offset_z_unit"+suffix,      detectorPath+CS_XPath_NS("/offset/z/@unit"), "") 
     350 
     351                CS_appendMetaData("detector_orientation_name"+suffix,           detectorPath+CS_XPath_NS("/orientation/@name"), "") 
     352                CS_appendMetaData("detector_orientation_roll"+suffix,           detectorPath+CS_XPath_NS("/orientation/roll"), "") 
     353                CS_appendMetaData("detector_orientation_roll_unit"+suffix,      detectorPath+CS_XPath_NS("/orientation/roll/@unit"), "") 
     354                CS_appendMetaData("detector_orientation_pitch"+suffix,          detectorPath+CS_XPath_NS("/orientation/pitch"), "") 
     355                CS_appendMetaData("detector_orientation_pitch_unit"+suffix,     detectorPath+CS_XPath_NS("/orientation/pitch/@unit"), "") 
     356                CS_appendMetaData("detector_orientation_yaw"+suffix,            detectorPath+CS_XPath_NS("/orientation/yaw"), "") 
     357                CS_appendMetaData("detector_orientation_yaw_unit"+suffix,       detectorPath+CS_XPath_NS("/orientation/yaw/@unit"), "") 
     358 
     359                CS_appendMetaData("detector_beam_center_name"+suffix,   detectorPath+CS_XPath_NS("/beam_center/@name"), "") 
     360                CS_appendMetaData("detector_beam_center_x"+suffix,              detectorPath+CS_XPath_NS("/beam_center/x"), "") 
     361                CS_appendMetaData("detector_beam_center_x_unit"+suffix,         detectorPath+CS_XPath_NS("/beam_center/x/@unit"), "") 
     362                CS_appendMetaData("detector_beam_center_y"+suffix,              detectorPath+CS_XPath_NS("/beam_center/y"), "") 
     363                CS_appendMetaData("detector_beam_center_y_unit"+suffix,         detectorPath+CS_XPath_NS("/beam_center/y/@unit"), "") 
     364                CS_appendMetaData("detector_beam_center_z"+suffix,              detectorPath+CS_XPath_NS("/beam_center/z"), "") 
     365                CS_appendMetaData("detector_beam_center_z_unit"+suffix,         detectorPath+CS_XPath_NS("/beam_center/z/@unit"), "") 
     366 
     367                CS_appendMetaData("detector_pixel_size_name"+suffix,    detectorPath+CS_XPath_NS("/pixel_size/@name"), "") 
     368                CS_appendMetaData("detector_pixel_size_x"+suffix,               detectorPath+CS_XPath_NS("/pixel_size/x"), "") 
     369                CS_appendMetaData("detector_pixel_size_x_unit"+suffix,  detectorPath+CS_XPath_NS("/pixel_size/x/@unit"), "") 
     370                CS_appendMetaData("detector_pixel_size_y"+suffix,               detectorPath+CS_XPath_NS("/pixel_size/y"), "") 
     371                CS_appendMetaData("detector_pixel_size_y_unit"+suffix,  detectorPath+CS_XPath_NS("/pixel_size/y/@unit"), "") 
     372                CS_appendMetaData("detector_pixel_size_z"+suffix,               detectorPath+CS_XPath_NS("/pixel_size/z"), "") 
     373                CS_appendMetaData("detector_pixel_size_z_unit"+suffix,  detectorPath+CS_XPath_NS("/pixel_size/z/@unit"), "") 
     374 
     375                CS_appendMetaData("slit_length"+suffix,                 detectorPath+CS_XPath_NS("/slit_length"), "") 
     376                CS_appendMetaData("slitLength"+suffix+"_unit",  detectorPath+CS_XPath_NS("/slit_length/@unit"), "") 
    299377        ENDFOR 
    300378 
     
    309387                        suffix = num2str(i) 
    310388                ENDIF 
    311                 CS_appendMetaData("SASnote"+suffix+"_name",     SASnoteList[i]+CS_XPath_NS("/@name"), "") 
    312                 CS_appendMetaData("SASnote"+suffix,                             SASnoteList[i], "") 
    313         ENDFOR 
    314  
     389                notePath = CS_correctedXpathStr(SASnoteList[i]) 
     390                CS_appendMetaData("SASnote"+suffix+"_name",     notePath+CS_XPath_NS("/@name"), "") 
     391                CS_appendMetaData("SASnote"+suffix,                             notePath, "") 
     392        ENDFOR 
     393        //CS_1i_fillMetadataTable(fileID) 
     394END 
     395 
     396// ================================================================== 
     397 
     398FUNCTION/S CS_1i_fillMetadataTable(fileID) 
     399        VARIABLE fileID 
     400        WAVE/T metadata 
     401        VARIABLE i 
     402        STRING value 
    315403        // +++++++++++++++++++++++++                    // try to fill the value column from the XML data 
    316404        FOR (i = 0; i < DimSize(metadata, 0); i += 1) 
     
    771859        fList = AddListItem("test.xml",                                 fList, ";", Inf)                // cs_collagen.xml with no namespace 
    772860        fList = AddListItem("test2.xml",                                fList, ";", Inf)                // version 2.0 file (no standard yet) 
     861        fList = AddListItem("ISIS_SANS_Example.xml",    fList, ";", Inf)                // from S. King, 2008-03-17 
     862        fList = AddListItem("W1W2.xml",                                 fList, ";", Inf)                // from S. King, 2008-03-17 
    773863        fList = AddListItem("ill_sasxml_example.xml",   fList, ";", Inf)                // from canSAS 2007 meeting, reformatted 
    774864        fList = AddListItem("isis_sasxml_example.xml",  fList, ";", Inf)                // from canSAS 2007 meeting, reformatted 
     
    778868        fList = AddListItem("cs_collagen_full.xml",             fList, ";", Inf)                // more Q range than previous 
    779869        fList = AddListItem("cs_af1410.xml",                    fList, ";", Inf)                // multiple SASentry and SASdata elements 
    780         fList = AddListItem("1998spheres.xml",                  fList, ";", Inf)                // 2 SASentry, few thousand data points each 
     870        //fList = AddListItem("1998spheres.xml",                        fList, ";", Inf)                // 2 SASentry, few thousand data points each 
    781871        fList = AddListItem("does-not-exist-file.xml",          fList, ";", Inf)                // non-existent file 
    782872        // try to load each data set in the table 
     
    791881        ENDFOR 
    792882END 
    793  
    794 // ================================================================== 
    795  
    796 FUNCTION PRJ_quick(fileID) 
    797         VARIABLE fileID 
    798         WAVE/T W_ElementList, W_listXPath 
    799         SVAR nsStr 
    800  
    801         XMLlistXpath(fileID, "/cs:SASroot/cs:SASentry/cs:Title", nsStr)         // output: W_listXPath 
    802         print W_listXPath[0] 
    803         XMLlistXpath(fileID, "//cs:Idata[4]", nsStr)            // output: W_listXPath 
    804         print W_listXPath[0] 
    805         XMLlistXpath(fileID, "//cs:Idata*", nsStr)              // output: W_listXPath 
    806         print W_listXPath[0] 
    807         XMLlistXpath(fileID, "//cs:Idata", nsStr)               // output: W_listXPath 
    808         print W_listXPath[0] 
    809         XMLlistXpath(fileID, "/cs:SASroot/cs:SASentry/cs:SASdata/cs:Idata[4]", nsStr)           // output: W_listXPath 
    810         print W_listXPath[0] 
    811         XMLlistXpath(fileID, "/*/@*", "")               // output: W_listXPath 
    812         print W_listXPath[0] 
    813         PRINT TrimWS(XmlStrFmXpath(fileID, "/*/@version", "", "")) 
    814         PRINT TrimWS(XmlStrFmXpath(fileID, "/*/@xmlns", "", "")) 
    815         PRINT StringByKey("schemaLocation", W_ElementList[0][2]) 
    816  
    817         //CS_simpleXmlListXpath(fileID, "", "/SASroot//SASentry") 
    818         //WAVE/T        W_listXPath 
    819         //DUPLICATE/O/T   W_listXPath, SASentryList 
    820  
    821         //<SASroot version="1.0" 
    822         //      xmlns="http://www.smallangles.net/cansas1d" 
    823         //      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    824         //      xsi:schemaLocation="http://www.smallangles.net/cansas1d/ http://www.smallangles.net/cansas1d/1.0/cansas1d.xsd" 
    825         //      > 
    826  
    827  
    828 END 
Note: See TracChangeset for help on using the changeset viewer.