Changeset 40 for 1dwg


Ignore:
Timestamp:
May 19, 2008 2:34:17 PM (13 years ago)
Author:
prjemian
Message:

more adjustments to IgorPro? XML reader
now checks for particular XMLutils XOP feature (& requests upgrade when trapped)
metadata uses tags that look like Xpath, well sort of

File:
1 edited

Legend:

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

    r39 r40  
    11#pragma rtGlobals=1             // Use modern global access method. 
    2 #pragma version=1.06 
     2#pragma version=1.07 
    33 
    44// file:        cansasXML.ipf 
    55// author:      Pete R. Jemian <jemian@anl.gov> 
    6 // date:        2008-05-18 
     6// date:        2008-05-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 
     
    3131        //              -3: <SASroot> version  is not 1.0 
    3232        //              -4: no <SASentry> elements 
     33        //              -5: XOPutils needs upgrade 
    3334        // 
    3435        STRING fileName 
     
    6869        ENDIF 
    6970 
     71        // 
     72        //      test to see if XOPutils has the needed upgrade 
     73        // 
     74        XMLlistXpath(fileID, "/*", "")   
     75        IF ( EXISTS( "M_listXPath" ) == 0 ) 
     76                XmlCloseFile(fileID,0) 
     77                errorMsg = "XOPutils needs an upgrade:  http://www.igorexchange.com/project/XMLutils" 
     78                PRINT errorMsg 
     79                SetDataFolder $origFolder 
     80                RETURN(-5)                                              // XOPutils needs an upgrade 
     81        ENDIF 
     82        WAVE/T  M_listXPath 
     83 
    7084        // check for canSAS namespace string, returns "" if not valid or not found 
    7185        STRING/G ns = CS_getDefaultNamespace(fileID) 
    7286        IF (strlen(ns) == 0 ) 
     87                XmlCloseFile(fileID,0) 
    7388                errorMsg = "root element is not <SASroot> with valid canSAS namespace" 
    7489                PRINT errorMsg 
     
    121136        // but that call can be expensive (time) when there are lots of elements. 
    122137        VARIABLE fileID 
    123         STRING ns = "", thisNS 
    124         STRING p = "cs" 
     138        STRING ns = "", thisLocation 
    125139        VARIABLE i, item 
    126140        MAKE/T/N=(1)/O nsList           // list of all possible namespaces 
     
    128142 
    129143        FOR (item = 0; item < DimSize(nsList, 0); item += 1)            // loop over all possible namespaces 
    130                 XMLlistAttr(fileID, "/cs:SASroot", p+"="+nsList[item]) 
     144                XMLlistAttr(fileID, "/cs:SASroot", "cs="+nsList[item]) 
    131145                WAVE/T M_listAttr 
    132146                FOR (i = 0; i < DimSize(M_listAttr,0); i+=1)                    // loop over all available attributes 
    133147                        // Expect the required canSAS XML header (will fail if "schemalocation" is not found) 
    134148                        IF ( CmpStr(  LowerStr(M_listAttr[i][1]),  LowerStr("schemaLocation") ) == 0 ) 
    135                                 thisNS = StringFromList( 0, M_listAttr[i][2], " " )     // get the first string 
    136                                 IF ( strlen(thisNS) == strlen(M_listAttr[i][2]) )               // just in case tab-delimited 
    137                                         thisNS = StringFromList( 0, M_listAttr[i][2], "\t" )    // get the first string 
    138                                 ENDIF 
    139                                 IF ( CmpStr(  TrimWS(thisNS),  nsList[item] ) == 0 ) 
     149                                thisLocation = TrimWS(M_listAttr[i][2]) 
     150                                IF ( StringMatch(thisLocation, nsList[item] + "*") ) 
    140151                                        ns = nsList[item] 
    141152                                        BREAK           // found it! 
     
    234245        SVAR ns = root:Packages:CS_XMLreader:ns 
    235246        CS_appendMetaData(fileID, "namespace", "", ns) 
    236         CS_appendMetaData(fileID, "title", "", Title) 
     247        CS_appendMetaData(fileID, "Title", "", Title) 
    237248         
    238249        XmlListXpath(fileID, SASdataPath + "/..//cs:Run", nsStr) 
     
    260271        SVAR nsStr = root:Packages:CS_XMLreader:nsStr 
    261272 
    262         XmlWaveFmXpath(file,prefix+XML_name,nsStr,"")   //this loads ALL the vector's nodes at the same time 
     273        XmlWaveFmXpath(file,prefix+XML_name,nsStr,"")                   //this loads ALL the vector's nodes at the same time 
    263274        WAVE/T M_xmlcontent 
    264275        WAVE/T W_xmlContentNodes 
    265         IF (DimSize(M_xmlcontent, 0))   //this is a test to see if the nodes exist.  this isn't strictly necessary if you know they're there 
     276        IF (DimSize(M_xmlcontent, 0))                   // test to see if the nodes exist.  not strictly necessary if you know the nodes are there 
    266277                IF (DimSize(M_xmlcontent,1)>DimSize(M_xmlcontent,0))    //if you're not in vector mode 
    267278                        MatrixTranspose M_xmlcontent 
     
    300311                // find the names of all the data columns and load them as vectors 
    301312                // this gets tricky if we want to avoid namespace references 
    302 //              XmlListXpath(fileID, "//"+nsPre+":SASentry["+num2istr(i)+"]//"+nsPre+":Idata[1]/*", nsStr) 
    303313                XmlListXpath(fileID, SASdataPath+"//cs:Idata[1]/*", nsStr) 
    304314                WAVE/T M_listXPath 
     
    306316                STRING igorWave 
    307317                VARIABLE j 
    308                 FOR (j = 0; j < DimSize(M_listXPath, 0); j += 1) 
     318                FOR (j = 0; j < DimSize(M_listXPath, 0); j += 1)        // loop over all columns in SASdata/Idata[1] 
    309319                        xmlElement = M_listXPath[j][1] 
    310320                        STRSWITCH(xmlElement) 
     
    336346        VARIABLE i, j 
    337347        WAVE/T metadata 
    338         STRING suffix = "" 
     348        STRING suffix = "", preMeta = "", preXpath = "" 
    339349        STRING value, detailsPath, detectorPath, notePath 
    340350 
     
    346356 
    347357        // handle most <SASsample> fields 
    348         CS_appendMetaData(fileID, "sample/ID",                                          sasEntryPath + "/cs:SASsample/cs:ID", "") 
    349         CS_appendMetaData(fileID, "sample/thickness",                           sasEntryPath + "/cs:SASsample/cs:thickness", "") 
    350         CS_appendMetaData(fileID, "sample/thickness/@unit",             sasEntryPath + "/cs:SASsample/cs:thickness/@unit", "") 
    351         CS_appendMetaData(fileID, "sample/transmission",                        sasEntryPath + "/cs:SASsample/cs:transmission", "") 
    352         CS_appendMetaData(fileID, "sample/temperature",                         sasEntryPath + "/cs:SASsample/cs:temperature", "") 
    353         CS_appendMetaData(fileID, "sample/temperature/@unit",           sasEntryPath + "/cs:SASsample/cs:temperature/@unit", "") 
    354         CS_appendMetaData(fileID, "sample/position/x",                          sasEntryPath + "/cs:SASsample/cs:position/cs:x", "") 
    355         CS_appendMetaData(fileID, "sample/position/x/@unit",            sasEntryPath + "/cs:SASsample/cs:position/cs:x/@unit", "") 
    356         CS_appendMetaData(fileID, "sample/position/y",                          sasEntryPath + "/cs:SASsample/cs:position/cs:y", "") 
    357         CS_appendMetaData(fileID, "sample/position/y/@unit",            sasEntryPath + "/cs:SASsample/cs:position/cs:y/@unit", "") 
    358         CS_appendMetaData(fileID, "sample/position/z",                          sasEntryPath + "/cs:SASsample/cs:position/cs:z", "") 
    359         CS_appendMetaData(fileID, "sample/position/z/@unit",            sasEntryPath + "/cs:SASsample/cs:position/cs:z/@unit", "") 
    360         CS_appendMetaData(fileID, "sample/orientation/roll",                    sasEntryPath + "/cs:SASsample/cs:orientation/cs:roll", "") 
    361         CS_appendMetaData(fileID, "sample/orientation/roll/@unit",      sasEntryPath + "/cs:SASsample/cs:orientation/cs:roll/@unit", "") 
    362         CS_appendMetaData(fileID, "sample/orientation/pitch",           sasEntryPath + "/cs:SASsample/cs:orientation/cs:pitch", "") 
    363         CS_appendMetaData(fileID, "sample/orientation/pitch/@unit",     sasEntryPath + "/cs:SASsample/cs:orientation/cs:pitch/@unit", "") 
    364         CS_appendMetaData(fileID, "sample/orientation/yaw",                     sasEntryPath + "/cs:SASsample/cs:orientation/cs:yaw", "") 
    365         CS_appendMetaData(fileID, "sample/orientation/yaw/@unit",       sasEntryPath + "/cs:SASsample/cs:orientation/cs:yaw/@unit", "") 
     358        CS_appendMetaData(fileID, "SASsample/@name",                            sasEntryPath + "/cs:SASsample/@name", "") 
     359        CS_appendMetaData(fileID, "SASsample/ID",                                       sasEntryPath + "/cs:SASsample/cs:ID", "") 
     360        CS_appendMetaData(fileID, "SASsample/thickness",                                sasEntryPath + "/cs:SASsample/cs:thickness", "") 
     361        CS_appendMetaData(fileID, "SASsample/thickness/@unit",                  sasEntryPath + "/cs:SASsample/cs:thickness/@unit", "") 
     362        CS_appendMetaData(fileID, "SASsample/transmission",                     sasEntryPath + "/cs:SASsample/cs:transmission", "") 
     363        CS_appendMetaData(fileID, "SASsample/temperature",                      sasEntryPath + "/cs:SASsample/cs:temperature", "") 
     364        CS_appendMetaData(fileID, "SASsample/temperature/@unit",           sasEntryPath + "/cs:SASsample/cs:temperature/@unit", "") 
     365        CS_appendMetaData(fileID, "SASsample/position/x",                          sasEntryPath + "/cs:SASsample/cs:position/cs:x", "") 
     366        CS_appendMetaData(fileID, "SASsample/position/x/@unit",            sasEntryPath + "/cs:SASsample/cs:position/cs:x/@unit", "") 
     367        CS_appendMetaData(fileID, "SASsample/position/y",                          sasEntryPath + "/cs:SASsample/cs:position/cs:y", "") 
     368        CS_appendMetaData(fileID, "SASsample/position/y/@unit",            sasEntryPath + "/cs:SASsample/cs:position/cs:y/@unit", "") 
     369        CS_appendMetaData(fileID, "SASsample/position/z",                          sasEntryPath + "/cs:SASsample/cs:position/cs:z", "") 
     370        CS_appendMetaData(fileID, "SASsample/position/z/@unit",            sasEntryPath + "/cs:SASsample/cs:position/cs:z/@unit", "") 
     371        CS_appendMetaData(fileID, "SASsample/orientation/roll",                    sasEntryPath + "/cs:SASsample/cs:orientation/cs:roll", "") 
     372        CS_appendMetaData(fileID, "SASsample/orientation/roll/@unit",      sasEntryPath + "/cs:SASsample/cs:orientation/cs:roll/@unit", "") 
     373        CS_appendMetaData(fileID, "SASsample/orientation/pitch",           sasEntryPath + "/cs:SASsample/cs:orientation/cs:pitch", "") 
     374        CS_appendMetaData(fileID, "SASsample/orientation/pitch/@unit",     sasEntryPath + "/cs:SASsample/cs:orientation/cs:pitch/@unit", "") 
     375        CS_appendMetaData(fileID, "SASsample/orientation/yaw",                     sasEntryPath + "/cs:SASsample/cs:orientation/cs:yaw", "") 
     376        CS_appendMetaData(fileID, "SASsample/orientation/yaw/@unit",       sasEntryPath + "/cs:SASsample/cs:orientation/cs:yaw/@unit", "") 
    366377        // <SASsample><details> might appear multiple times, too! 
    367378        XmlListXpath(fileID, sasEntryPath+"/cs:SASsample//cs:details", nsStr)   //output: M_listXPath 
     
    374385                ENDIF 
    375386                detailsPath = detailsList[i][0] 
    376                 CS_appendMetaData(fileID, "sample/details"+suffix+"/@name",     detailsPath + "/@name", "") 
    377                 CS_appendMetaData(fileID, "sample/details"+suffix,              detailsPath, "") 
     387                CS_appendMetaData(fileID, "SASsample/details"+suffix+"/@name",  detailsPath + "/@name", "") 
     388                CS_appendMetaData(fileID, "SASsample/details"+suffix,           detailsPath, "") 
    378389        ENDFOR 
    379390 
    380391 
    381392        // <SASinstrument> 
    382         CS_appendMetaData(fileID, "Instrument/name",            sasEntryPath + "/cs:SASinstrument/cs:name", "") 
    383         CS_appendMetaData(fileID, "Instrument/@name",   sasEntryPath + "/cs:SASinstrument/@name", "") 
     393        CS_appendMetaData(fileID, "SASinstrument/name",         sasEntryPath + "/cs:SASinstrument/cs:name", "") 
     394        CS_appendMetaData(fileID, "SASinstrument/@name",        sasEntryPath + "/cs:SASinstrument/@name", "") 
    384395 
    385396        // <SASinstrument><SASsource> 
    386         CS_appendMetaData(fileID, "source/@name",               sasEntryPath + "/cs:SASinstrument/cs:SASsource/@name", "") 
    387         CS_appendMetaData(fileID, "radiation",                  sasEntryPath + "/cs:SASinstrument/cs:SASsource/cs:radiation", "") 
    388         CS_appendMetaData(fileID, "beam/size/@name",            sasEntryPath + "/cs:SASinstrument/cs:SASsource/cs:beam_size/@name", "") 
    389         CS_appendMetaData(fileID, "beam/size/x",                sasEntryPath + "/cs:SASinstrument/cs:SASsource/cs:beam_size/cs:x", "") 
    390         CS_appendMetaData(fileID, "beam/size/x@unit",           sasEntryPath + "/cs:SASinstrument/cs:SASsource/cs:beam_size/cs:x/@unit", "") 
    391         CS_appendMetaData(fileID, "beam/size/y",                sasEntryPath + "/cs:SASinstrument/cs:SASsource/cs:beam_size/cs:y", "") 
    392         CS_appendMetaData(fileID, "beam/size/y@unit",           sasEntryPath + "/cs:SASinstrument/cs:SASsource/cs:beam_size/cs:y/@unit", "") 
    393         CS_appendMetaData(fileID, "beam/size/z",                sasEntryPath + "/cs:SASinstrument/cs:SASsource/cs:beam_size/cs:z", "") 
    394         CS_appendMetaData(fileID, "beam/size/z@unit",           sasEntryPath + "/cs:SASinstrument/cs:SASsource/cs:beam_size/cs:z/@unit", "") 
    395         CS_appendMetaData(fileID, "beam/shape",                 sasEntryPath + "/cs:SASinstrument/cs:SASsource/cs:beam_shape", "") 
    396         CS_appendMetaData(fileID, "wavelength",                 sasEntryPath + "/cs:SASinstrument/cs:SASsource/cs:wavelength", "") 
    397         CS_appendMetaData(fileID, "wavelength/@unit",           sasEntryPath + "/cs:SASinstrument/cs:SASsource/cs:wavelength/@unit", "") 
    398         CS_appendMetaData(fileID, "wavelength_min",             sasEntryPath + "/cs:SASinstrument/cs:SASsource/cs:wavelength_min", "") 
    399         CS_appendMetaData(fileID, "wavelength_min/@unit",       sasEntryPath + "/cs:SASinstrument/cs:SASsource/cs:wavelength_min/@unit", "") 
    400         CS_appendMetaData(fileID, "wavelength_max",             sasEntryPath + "/cs:SASinstrument/cs:SASsource/cs:wavelength_max", "") 
    401         CS_appendMetaData(fileID, "wavelength_max/@unit",       sasEntryPath + "/cs:SASinstrument/cs:SASsource/cs:wavelength_max/@unit", "") 
    402         CS_appendMetaData(fileID, "wavelength_spread",          sasEntryPath + "/cs:SASinstrument/cs:SASsource/cs:wavelength_spread", "") 
    403         CS_appendMetaData(fileID, "wavelength_spread/@unit",    sasEntryPath + "/cs:SASinstrument/cs:SASsource/cs:wavelength_spread/@unit", "") 
     397        preMeta = "SASinstrument/SASsource" 
     398        preXpath = sasEntryPath + "/cs:SASinstrument/cs:SASsource" 
     399        CS_appendMetaData(fileID, preMeta + "/@name",                      preXpath + "/@name", "") 
     400        CS_appendMetaData(fileID, preMeta + "/radiation",                  preXpath + "/cs:radiation", "") 
     401        CS_appendMetaData(fileID, preMeta + "/beam/size/@name",            preXpath + "/cs:beam_size/@name", "") 
     402        CS_appendMetaData(fileID, preMeta + "/beam/size/x",                preXpath + "/cs:beam_size/cs:x", "") 
     403        CS_appendMetaData(fileID, preMeta + "/beam/size/x@unit",           preXpath + "/cs:beam_size/cs:x/@unit", "") 
     404        CS_appendMetaData(fileID, preMeta + "/beam/size/y",                preXpath + "/cs:beam_size/cs:y", "") 
     405        CS_appendMetaData(fileID, preMeta + "/beam/size/y@unit",           preXpath + "/cs:beam_size/cs:y/@unit", "") 
     406        CS_appendMetaData(fileID, preMeta + "/beam/size/z",                preXpath + "/cs:beam_size/cs:z", "") 
     407        CS_appendMetaData(fileID, preMeta + "/beam/size/z@unit",           preXpath + "/cs:beam_size/cs:z/@unit", "") 
     408        CS_appendMetaData(fileID, preMeta + "/beam/shape",                 preXpath + "/cs:beam_shape", "") 
     409        CS_appendMetaData(fileID, preMeta + "/wavelength",                 preXpath + "/cs:wavelength", "") 
     410        CS_appendMetaData(fileID, preMeta + "/wavelength/@unit",           preXpath + "/cs:wavelength/@unit", "") 
     411        CS_appendMetaData(fileID, preMeta + "/wavelength_min",             preXpath + "/cs:wavelength_min", "") 
     412        CS_appendMetaData(fileID, preMeta + "/wavelength_min/@unit",       preXpath + "/cs:wavelength_min/@unit", "") 
     413        CS_appendMetaData(fileID, preMeta + "/wavelength_max",             preXpath + "/cs:wavelength_max", "") 
     414        CS_appendMetaData(fileID, preMeta + "/wavelength_max/@unit",       preXpath + "/cs:wavelength_max/@unit", "") 
     415        CS_appendMetaData(fileID, preMeta + "/wavelength_spread",          preXpath + "/cs:wavelength_spread", "") 
     416        CS_appendMetaData(fileID, preMeta + "/wavelength_spread/@unit",    preXpath + "/cs:wavelength_spread/@unit", "") 
    404417 
    405418        // <SASinstrument><SAScollimation> might appear multiple times 
     
    408421        DUPLICATE/O/T   M_listXPath, SAScollimationList 
    409422        STRING collimationPath 
    410         suffix = "" 
    411423        FOR (i = 0; i < DimSize(SAScollimationList, 0); i += 1) 
     424                preMeta = "SASinstrument/SAScollimation" 
    412425                IF (DimSize(SAScollimationList, 0) > 1) 
    413                         suffix = "_" + num2str(i) 
     426                        preMeta += "_" + num2str(i) 
    414427                ENDIF 
    415428                collimationPath = SAScollimationList[i][0] 
    416                 CS_appendMetaData(fileID, "collimation/@name"+suffix,                   collimationPath + "/@name", "") 
    417                 CS_appendMetaData(fileID, "collimation/length"+suffix,                  collimationPath + "/cs:length", "") 
    418                 CS_appendMetaData(fileID, "collimation/length_unit"+suffix,             collimationPath + "/cs:length/@unit", "") 
    419                 CS_appendMetaData(fileID, "collimation/aperture/@name"+suffix,          collimationPath + "/cs:aperture/@name", "") 
    420                 CS_appendMetaData(fileID, "collimation/aperture/type"+suffix,           collimationPath + "/cs:aperture/cs:type", "") 
    421                 CS_appendMetaData(fileID, "collimation/aperture/size/@name"+suffix,     collimationPath + "/cs:aperture/cs:size/@name", "") 
    422                 CS_appendMetaData(fileID, "collimation/aperture/size/x"+suffix,         collimationPath + "/cs:aperture/cs:size/cs:x", "") 
    423                 CS_appendMetaData(fileID, "collimation/aperture/size/x/@unit"+suffix,   collimationPath + "/cs:aperture/cs:size/cs:x/@unit", "") 
    424                 CS_appendMetaData(fileID, "collimation/aperture/size/y"+suffix,         collimationPath + "/cs:aperture/cs:size/cs:y", "") 
    425                 CS_appendMetaData(fileID, "collimation/aperture/size/y/@unit"+suffix,   collimationPath + "/cs:aperture/cs:size/cs:y/@unit", "") 
    426                 CS_appendMetaData(fileID, "collimation/aperture/size/z"+suffix,         collimationPath + "/cs:aperture/cs:size/cs:z", "") 
    427                 CS_appendMetaData(fileID, "collimation/aperture/size/z/@unit"+suffix,   collimationPath + "/cs:aperture/cs:size/cs:z/@unit", "") 
    428                 CS_appendMetaData(fileID, "collimation/aperture/distance"+suffix,       collimationPath + "/cs:aperture/cs:distance", "") 
    429                 CS_appendMetaData(fileID, "collimation/aperture/distance/@unit"+suffix, collimationPath + "/cs:aperture/cs:distance/@unit", "") 
     429                CS_appendMetaData(fileID, preMeta + "/@name",               collimationPath + "/@name", "") 
     430                CS_appendMetaData(fileID, preMeta + "/length",              collimationPath + "/cs:length", "") 
     431                CS_appendMetaData(fileID, preMeta + "/length_unit",         collimationPath + "/cs:length/@unit", "") 
     432                FOR (j = 0; j < DimSize(M_listXPath, 0); j += 1)        // aperture may be repeated! 
     433                        IF (DimSize(M_listXPath, 0) == 1) 
     434                                preMeta = "SASinstrument/SAScollimation/aperture" 
     435                        ELSE 
     436                                preMeta = "SASinstrument/SAScollimation/aperture_" + num2str(j) 
     437                        ENDIF 
     438                        preXpath = collimationPath + "/cs:aperture["+num2str(j+1)+"]" 
     439                        CS_appendMetaData(fileID, preMeta + "/@name",         preXpath + "/@name", "") 
     440                        CS_appendMetaData(fileID, preMeta + "/type",          preXpath + "/cs:type", "") 
     441                        CS_appendMetaData(fileID, preMeta + "/size/@name",     preXpath + "/cs:size/@name", "") 
     442                        CS_appendMetaData(fileID, preMeta + "/size/x",        preXpath + "/cs:size/cs:x", "") 
     443                        CS_appendMetaData(fileID, preMeta + "/size/x/@unit",   preXpath + "/cs:size/cs:x/@unit", "") 
     444                        CS_appendMetaData(fileID, preMeta + "/size/y",        preXpath + "/cs:size/cs:y", "") 
     445                        CS_appendMetaData(fileID, preMeta + "/size/y/@unit",   preXpath + "/cs:size/cs:y/@unit", "") 
     446                        CS_appendMetaData(fileID, preMeta + "/size/z",        preXpath + "/cs:size/cs:z", "") 
     447                        CS_appendMetaData(fileID, preMeta + "/size/z/@unit",   preXpath + "/cs:size/cs:z/@unit", "") 
     448                        CS_appendMetaData(fileID, preMeta + "/distance",       preXpath + "/cs:distance", "") 
     449                        CS_appendMetaData(fileID, preMeta + "/distance/@unit", preXpath + "/cs:distance/@unit", "") 
     450                ENDFOR 
    430451        ENDFOR 
    431452 
     
    434455        WAVE/T  M_listXPath 
    435456        DUPLICATE/O/T   M_listXPath, SASdetectorList 
    436         suffix = "" 
    437457        FOR (i = 0; i < DimSize(SASdetectorList, 0); i += 1) 
     458                preMeta = "SASinstrument/SASdetector" 
    438459                IF (DimSize(SASdetectorList, 0) > 1) 
    439                         suffix = "_" + num2str(i) 
     460                        preMeta += "_" + num2str(i) 
    440461                ENDIF 
    441462                detectorPath = SASdetectorList[i][0] 
    442                 CS_appendMetaData(fileID, "detector/@name"+suffix,                      detectorPath + "/cs:name", "") 
    443                 CS_appendMetaData(fileID, "SDD"+suffix,                                 detectorPath + "/cs:SDD", "") 
    444                 CS_appendMetaData(fileID, "SDD"+suffix+"/@unit",                        detectorPath + "/cs:SDD/@unit", "") 
    445                 CS_appendMetaData(fileID, "detector/offset/@name"+suffix,               detectorPath + "/cs:offset/@name", "") 
    446                 CS_appendMetaData(fileID, "detector/offset/x"+suffix,                   detectorPath + "/cs:offset/cs:x", "") 
    447                 CS_appendMetaData(fileID, "detector/offset/x/@unit"+suffix,             detectorPath + "/cs:offset/cs:x/@unit", "") 
    448                 CS_appendMetaData(fileID, "detector/offset/y"+suffix,                   detectorPath + "/cs:offset/cs:y", "") 
    449                 CS_appendMetaData(fileID, "detector/offset/y/@unit"+suffix,             detectorPath + "/cs:offset/cs:y/@unit", "") 
    450                 CS_appendMetaData(fileID, "detector/offset/z"+suffix,                   detectorPath + "/cs:offset/cs:z", "") 
    451                 CS_appendMetaData(fileID, "detector/offset/z/@unit"+suffix,             detectorPath + "/cs:offset/cs:z/@unit", "") 
    452  
    453                 CS_appendMetaData(fileID, "detector/orientation/@name"+suffix,          detectorPath + "/cs:orientation/@name", "") 
    454                 CS_appendMetaData(fileID, "detector/orientation/roll"+suffix,           detectorPath + "/cs:orientation/cs:roll", "") 
    455                 CS_appendMetaData(fileID, "detector/orientation/roll/@unit"+suffix,     detectorPath + "/cs:orientation/cs:roll/@unit", "") 
    456                 CS_appendMetaData(fileID, "detector/orientation/pitch"+suffix,          detectorPath + "/cs:orientation/cs:pitch", "") 
    457                 CS_appendMetaData(fileID, "detector/orientation/pitch/@unit"+suffix,    detectorPath + "/cs:orientation/cs:pitch/@unit", "") 
    458                 CS_appendMetaData(fileID, "detector/orientation/yaw"+suffix,            detectorPath + "/cs:orientation/cs:yaw", "") 
    459                 CS_appendMetaData(fileID, "detector/orientation/yaw/@unit"+suffix,      detectorPath + "/cs:orientation/cs:yaw/@unit", "") 
    460  
    461                 CS_appendMetaData(fileID, "detector/beam_center/@name"+suffix,          detectorPath + "/cs:beam_center/@name", "") 
    462                 CS_appendMetaData(fileID, "detector/beam_center/x"+suffix,              detectorPath + "/cs:beam_center/cs:x", "") 
    463                 CS_appendMetaData(fileID, "detector/beam_center/x/@unit"+suffix,        detectorPath + "/cs:beam_center/cs:x/@unit", "") 
    464                 CS_appendMetaData(fileID, "detector/beam_center/y"+suffix,              detectorPath + "/cs:beam_center/cs:y", "") 
    465                 CS_appendMetaData(fileID, "detector/beam_center/y/@unit"+suffix,        detectorPath + "/cs:beam_center/cs:y/@unit", "") 
    466                 CS_appendMetaData(fileID, "detector/beam_center/z"+suffix,              detectorPath + "/cs:beam_center/cs:z", "") 
    467                 CS_appendMetaData(fileID, "detector/beam_center/z/@unit"+suffix,        detectorPath + "/cs:beam_center/cs:z/@unit", "") 
    468  
    469                 CS_appendMetaData(fileID, "detector/pixel_size/@name"+suffix,           detectorPath + "/cs:pixel_size/@name", "") 
    470                 CS_appendMetaData(fileID, "detector/pixel_size/x"+suffix,               detectorPath + "/cs:pixel_size/cs:x", "") 
    471                 CS_appendMetaData(fileID, "detector/pixel_size/x/@unit"+suffix,         detectorPath + "/cs:pixel_size/cs:x/@unit", "") 
    472                 CS_appendMetaData(fileID, "detector/pixel_size/y"+suffix,               detectorPath + "/cs:pixel_size/cs:y", "") 
    473                 CS_appendMetaData(fileID, "detector/pixel_size/y/@unit"+suffix,         detectorPath + "/cs:pixel_size/cs:y/@unit", "") 
    474                 CS_appendMetaData(fileID, "detector/pixel_size/z"+suffix,               detectorPath + "/cs:pixel_size/cs:z", "") 
    475                 CS_appendMetaData(fileID, "detector/pixel_size/z/@unit"+suffix,         detectorPath + "/cs:pixel_size/cs:z/@unit", "") 
    476  
    477                 CS_appendMetaData(fileID, "slit_length"+suffix,                         detectorPath + "/cs:slit_length", "") 
    478                 CS_appendMetaData(fileID, "slit_length"+suffix+"/@unit",                detectorPath + "/cs:slit_length/@unit", "") 
     463                CS_appendMetaData(fileID, preMeta + "/@name",                    detectorPath + "/cs:name", "") 
     464                CS_appendMetaData(fileID, preMeta + "/SDD",                              detectorPath + "/cs:SDD", "") 
     465                CS_appendMetaData(fileID, preMeta + "/SDD/@unit",                        detectorPath + "/cs:SDD/@unit", "") 
     466                CS_appendMetaData(fileID, preMeta + "/offset/@name",             detectorPath + "/cs:offset/@name", "") 
     467                CS_appendMetaData(fileID, preMeta + "/offset/x",                 detectorPath + "/cs:offset/cs:x", "") 
     468                CS_appendMetaData(fileID, preMeta + "/offset/x/@unit",           detectorPath + "/cs:offset/cs:x/@unit", "") 
     469                CS_appendMetaData(fileID, preMeta + "/offset/y",                 detectorPath + "/cs:offset/cs:y", "") 
     470                CS_appendMetaData(fileID, preMeta + "/offset/y/@unit",           detectorPath + "/cs:offset/cs:y/@unit", "") 
     471                CS_appendMetaData(fileID, preMeta + "/offset/z",                 detectorPath + "/cs:offset/cs:z", "") 
     472                CS_appendMetaData(fileID, preMeta + "/offset/z/@unit",           detectorPath + "/cs:offset/cs:z/@unit", "") 
     473 
     474                CS_appendMetaData(fileID, preMeta + "/orientation/@name",        detectorPath + "/cs:orientation/@name", "") 
     475                CS_appendMetaData(fileID, preMeta + "/orientation/roll",         detectorPath + "/cs:orientation/cs:roll", "") 
     476                CS_appendMetaData(fileID, preMeta + "/orientation/roll/@unit",   detectorPath + "/cs:orientation/cs:roll/@unit", "") 
     477                CS_appendMetaData(fileID, preMeta + "/orientation/pitch",        detectorPath + "/cs:orientation/cs:pitch", "") 
     478                CS_appendMetaData(fileID, preMeta + "/orientation/pitch/@unit",   detectorPath + "/cs:orientation/cs:pitch/@unit", "") 
     479                CS_appendMetaData(fileID, preMeta + "/orientation/yaw",          detectorPath + "/cs:orientation/cs:yaw", "") 
     480                CS_appendMetaData(fileID, preMeta + "/orientation/yaw/@unit",    detectorPath + "/cs:orientation/cs:yaw/@unit", "") 
     481 
     482                CS_appendMetaData(fileID, preMeta + "/beam_center/@name",        detectorPath + "/cs:beam_center/@name", "") 
     483                CS_appendMetaData(fileID, preMeta + "/beam_center/x",            detectorPath + "/cs:beam_center/cs:x", "") 
     484                CS_appendMetaData(fileID, preMeta + "/beam_center/x/@unit",      detectorPath + "/cs:beam_center/cs:x/@unit", "") 
     485                CS_appendMetaData(fileID, preMeta + "/beam_center/y",            detectorPath + "/cs:beam_center/cs:y", "") 
     486                CS_appendMetaData(fileID, preMeta + "/beam_center/y/@unit",      detectorPath + "/cs:beam_center/cs:y/@unit", "") 
     487                CS_appendMetaData(fileID, preMeta + "/beam_center/z",            detectorPath + "/cs:beam_center/cs:z", "") 
     488                CS_appendMetaData(fileID, preMeta + "/beam_center/z/@unit",      detectorPath + "/cs:beam_center/cs:z/@unit", "") 
     489 
     490                CS_appendMetaData(fileID, preMeta + "/pixel_size/@name",         detectorPath + "/cs:pixel_size/@name", "") 
     491                CS_appendMetaData(fileID, preMeta + "/pixel_size/x",             detectorPath + "/cs:pixel_size/cs:x", "") 
     492                CS_appendMetaData(fileID, preMeta + "/pixel_size/x/@unit",       detectorPath + "/cs:pixel_size/cs:x/@unit", "") 
     493                CS_appendMetaData(fileID, preMeta + "/pixel_size/y",             detectorPath + "/cs:pixel_size/cs:y", "") 
     494                CS_appendMetaData(fileID, preMeta + "/pixel_size/y/@unit",       detectorPath + "/cs:pixel_size/cs:y/@unit", "") 
     495                CS_appendMetaData(fileID, preMeta + "/pixel_size/z",             detectorPath + "/cs:pixel_size/cs:z", "") 
     496                CS_appendMetaData(fileID, preMeta + "/pixel_size/z/@unit",       detectorPath + "/cs:pixel_size/cs:z/@unit", "") 
     497 
     498                CS_appendMetaData(fileID, preMeta + "/slit_length",                    detectorPath + "/cs:slit_length", "") 
     499                CS_appendMetaData(fileID, preMeta + "/slit_length/@unit",              detectorPath + "/cs:slit_length/@unit", "") 
    479500        ENDFOR 
    480501 
     
    484505        DUPLICATE/O/T   M_listXPath, SASprocessList 
    485506        STRING SASprocessPath 
    486         suffix = "" 
    487507        FOR (i = 0; i < DimSize(SASprocessList, 0); i += 1) 
     508                preMeta = "SASprocess" 
    488509                IF (DimSize(SASprocessList, 0) > 1) 
    489                         suffix = "_" + num2str(i) 
     510                        preMeta += "_" + num2str(i) 
    490511                ENDIF 
    491512                SASprocessPath = SASprocessList[i][0] 
    492                 CS_appendMetaData(fileID, "process"+suffix+"/@name",            SASprocessPath + "/@name", "") 
    493                 CS_appendMetaData(fileID, "process"+suffix+"/name",             SASprocessPath + "/cs:name", "") 
    494                 CS_appendMetaData(fileID, "process"+suffix+"/date",                     SASprocessPath + "/cs:date", "") 
    495                 CS_appendMetaData(fileID, "process"+suffix+"/description",      SASprocessPath + "/cs:description", "") 
     513                CS_appendMetaData(fileID, preMeta+"/@name",        SASprocessPath + "/@name", "") 
     514                CS_appendMetaData(fileID, preMeta+"/name",         SASprocessPath + "/cs:name", "") 
     515                CS_appendMetaData(fileID, preMeta+"/date",                 SASprocessPath + "/cs:date", "") 
     516                CS_appendMetaData(fileID, preMeta+"/description",   SASprocessPath + "/cs:description", "") 
    496517                XmlListXpath(fileID, SASprocessList[i][0]+"//cs:term", nsStr) 
    497518                FOR (j = 0; j < DimSize(M_listXPath, 0); j += 1) 
    498                         CS_appendMetaData(fileID, "process"+suffix+"/term_"+num2str(j)+"/@name",        M_listXPath[j][0] + "/@name", "") 
    499                         CS_appendMetaData(fileID, "process"+suffix+"/term_"+num2str(j)+"/@unit",                M_listXPath[j][0] + "/@unit", "") 
    500                         CS_appendMetaData(fileID, "process"+suffix+"/term_"+num2str(j),                         M_listXPath[j][0], "") 
     519                        CS_appendMetaData(fileID, preMeta+"/term_"+num2str(j)+"/@name",     M_listXPath[j][0] + "/@name", "") 
     520                        CS_appendMetaData(fileID, preMeta+"/term_"+num2str(j)+"/@unit",            M_listXPath[j][0] + "/@unit", "") 
     521                        CS_appendMetaData(fileID, preMeta+"/term_"+num2str(j),                             M_listXPath[j][0], "") 
    501522                ENDFOR 
     523                // ignore <SASprocessnote> 
    502524        ENDFOR 
    503525 
     
    506528        WAVE/T  M_listXPath 
    507529        DUPLICATE/O/T   M_listXPath, SASnoteList 
    508         suffix = "" 
    509530        FOR (i = 0; i < DimSize(SASnoteList, 0); i += 1) 
     531                preMeta = "SASnote" 
    510532                IF (DimSize(SASnoteList, 0) > 1) 
    511                         suffix = "_" + num2str(i) 
     533                        preMeta += "_" + num2str(i) 
    512534                ENDIF 
    513535                notePath = SASnoteList[i][0] 
    514                 CS_appendMetaData(fileID, "SASnote"+suffix+"/@name",    notePath + "/@name", "") 
    515                 CS_appendMetaData(fileID, "SASnote"+suffix,             notePath, "") 
     536                CS_appendMetaData(fileID, preMeta+"/@name",     notePath + "/@name", "") 
     537                CS_appendMetaData(fileID, preMeta,              notePath, "") 
    516538        ENDFOR 
    517539 
     
    669691        fList = AddListItem("does-not-exist-file.xml",          fList, ";", Inf)                // non-existent file 
    670692        fList = AddListItem("cs_rr_polymers.xml",               fList, ";", Inf)                // Round Robin polymer samples from John Barnes @ NIST 
    671         fList = AddListItem("s81-polyurea.xml",                         fList, ";", Inf)                // Round Robin polymer samples from John Barnes @ NIST 
     693        fList = AddListItem("s81-polyurea.xml",                         fList, ";", Inf)                // polyurea from APS/USAXS/Indra (with extra metadata) 
    672694         
    673695        // try to load each data set in the table 
     
    688710 
    689711 
    690 FUNCTION prjTest_writer(xmlFile) 
    691         STRING xmlFile 
    692         VARIABLE fileID 
    693         STRING nsStr = "cansas1d/1.0", prefixStr = "" 
    694         fileID = XMLcreateFile(xmlFile,"SASroot",nsStr,prefixStr) 
    695         XMLsetAttr(fileID,              "/SASroot",                             nsStr, "version", "1.0") 
    696         XMLsetAttr(fileID,              "/SASroot",                             nsStr, "xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance") 
    697         XMLsetAttr(fileID,              "/SASroot",                             nsStr, "xsi:schemaLocation", "cansas1d/1.0    http://svn.smallangles.net/svn/canSAS/1dwg/trunk/cansas1d.xsd") 
    698         XMLaddNode(fileID,      "/SASroot",                             nsStr, "SASentry", "", 1) 
    699         XMLsetAttr(fileID,              "/SASroot/SASentry",    nsStr, "name", "something") 
    700         XMLaddNode(fileID,      "/SASroot/SASentry",    nsStr, "Title", "my very first title", 1) 
    701         XMLaddNode(fileID,      "/SASroot/SASentry",    nsStr, "Run", "2008-03-19", 1) 
    702         XMLsetAttr(fileID,              "/SASroot/SASentry/Run", nsStr, "name", "actually is a date") 
    703         XMLsaveFile(fileID) 
    704         XMLcloseFile(fileID,0) 
    705 END 
    706  
    707  
    708712FUNCTION testCollette() 
     713                                        // !!!!!!!!!!!!!!!!! NOTE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
     714                                        //          THIS IS JUST AN EXAMPLE 
    709715 
    710716// suggestions from ISIS users 
    711         // 3.   Loading actual data from LOQ caused some problems. Data created by Colette names files with run number. When entering full path to load the data if you use " 
    712 \example\31531.X" Igor will read \3 as a character. A simple fix which has worked for this is to use / instead of \ e.g. " 
     717        // 3.   Loading actual data from LOQ caused some problems.  
     718        //      Data created by Colette names files with run number.  
     719        //      When entering full path to load the data if you use " 
     720\example\31531.X" Igor will read \3 as a character.  
     721        //      A simple fix which has worked for this is to use / instead of \ e.g. " 
    713722\example/31531.X". 
    714         // I assume this will not be an issue once a proper pull down menu has been created. 
    715723         
    716         //4.    Once data is loaded in Igor it is relatively easy to work with but would be nicer if the SASdata was loaded into root directory (named using run number rather than generically as it is at the moment) rather than another folder. 
    717         //This becomes more problematic when two samples are being loaded for comparison. Although still relatively easy to work with, changing the folders can lead to mistakes being made. 
     724        //4.    Once data is loaded in Igor it is relatively easy to work with but would be nicer if the SASdata  
     725        //      was loaded into root directory (named using run number rather than generically as it is at the moment) rather than another folder. 
     726        //This becomes more problematic when two samples are being loaded for comparison.  
     727        //      Although still relatively easy to work with, changing the folders can lead to mistakes being made. 
    718728 
    719729        //Say, for Run=31531, then Qsas_31531 
     
    727737                importFolder = GetIndexedObjName(srcDir, 4, i) 
    728738                SetDataFolder $importFolder 
    729                 IF ( exists( "metadata" ) == 1 ) 
     739                IF ( EXISTS( "metadata" ) == 1 ) 
    730740                        // looks like a SAS data folder 
    731741                        WAVE/T metadata 
Note: See TracChangeset for help on using the changeset viewer.