Changeset 707


Ignore:
Timestamp:
Jun 3, 2010 6:53:19 PM (12 years ago)
Author:
ajj
Message:

Updates and fixes to make ANSTO data reduction work.

  • Translated existing code from 6.x version of macros to 7.x

Plus!

  • Transmission calculation now works
  • Next/Prev? works (assuming contiguous numbering)
  • File associations for transmission are stored
  • Catalog is appropriately sorted
Location:
sans/Dev/trunk/NCNR_User_Procedures/Reduction/SANS
Files:
4 edited

Legend:

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

    r588 r707  
    11#pragma rtGlobals=1             // Use modern global access method. 
    22#pragma version=5.0 
    3 #pragma IgorVersion = 6.1 
     3#pragma IgorVersion = 6.1 //required to read and write files created with HDF 1.8 library 
    44 
    55//************************** 
     
    9494         
    9595        // filename as stored in the file header 
    96         textw[0]= fname  
     96        textw[0]= ParseFilePath(0, fname, ":", 1, 0)     
    9797         
    9898        // date and time of collection 
     
    125125        // total monitor count 
    126126        realw[0] = getMonitorCount(fname) 
    127          
    128         // total detector count 
    129         realw[2] = getDetCount(fname) 
     127 
    130128         
    131129        // attenuator number (NCNR-specific, your stub returns 0) 
     
    196194        getDetectorData(fname,data) 
    197195         
     196        // total detector count 
     197        //nha 21/5/10 moved here because it requires the detector data to already be written 
     198        //Result of issue with 0 counts being written for a while in metadata. 
     199        realw[2] = getDetCount(fname) 
     200         
    198201        //keep a string with the filename in the RAW folder 
    199202        String/G root:Packages:NIST:RAW:fileList = textw[0] 
     
    282285        Wave tempData = $dfName+":data:div" 
    283286        data = tempData 
    284  
     287         
     288        //funky edge correction bodgy ??? 
     289        //copy second column to first column 
     290        data[][0] = data[p][1] 
     291        //copy second last column to last column 
     292        data[][191] = data[p][190] 
     293        //copy second row to first row 
     294        data[0][] = data[1][q] 
     295        //copy second last row to last row 
     296        data[191][] = data[190][q] 
    285297        //keep a string with the filename in the DIV folder 
    286298        String/G $(curPath + ":fileList") = textw[0] 
     
    322334        //nha ??? Should make this wave in our own DataFolder to avoid clashing names.  
    323335        //Make /N=(1,1) wTransmission 
    324         String groupName = "/data" 
     336        String groupName = "/reduce" 
    325337        String varName = "div" 
    326338        // your code returning value 
     
    509521        Variable wholeTrans 
    510522         
    511         String groupName = "/entry1/reduce" 
     523        String groupName = "/reduce" 
    512524        variable err 
    513525         
     
    534546        // do nothing if not using NCNR Transmission module 
    535547         
    536         String groupName = "/entry1/reduce" 
     548        String groupName = "/reduce" 
    537549        variable err 
    538550         
     
    570582// if not, write a 1 to the file here as a default 
    571583// 
    572 Function WriteAttenNumberToHeader(fname,num) 
    573         String fname 
    574         Variable num 
    575          
    576         // your code here, default of 1 
    577          
    578         return(0) 
    579 End 
     584Function WriteAttenNumberToHeader(fname,attenNumber) 
     585        String fname 
     586        Variable attenNumber 
     587         
     588        // your writer here 
     589        Wave wAttenNumber 
     590        //nha ??? Should make this wave in our own DataFolder to avoid clashing names.  
     591        Make /N=(1,1) wAttenNumber 
     592        String groupName = "/instrument/collimator" 
     593        String varName = "att" 
     594        //convert number to a rotation angle 
     595        attenNumber = attenNumber * 30 
     596        wAttenNumber[0] = attenNumber // 
     597        // your code returning value 
     598        variable err 
     599        err = hdfWrite(fname, groupName, varName, wAttenNumber) 
     600        KillWaves wAttenNumber 
     601        //err not handled here 
     602                 
     603        return(0) 
     604 
     605End 
     606 
    580607 
    581608// total monitor count during data collection 
     
    633660 
    634661//lateral detector offset (centimeters) 
    635 Function WriteDetectorOffsetToHeader(fname,num) 
    636         String fname 
    637         Variable num 
    638          
    639         //your code here 
     662Function WriteDetectorOffsetToHeader(fname,DetectorOffset) 
     663        String fname 
     664        Variable DetectorOffset 
     665         
     666        // your writer here 
     667        Wave wDetectorOffset 
     668        //nha ??? Should make this wave in our own DataFolder to avoid clashing names.  
     669        Make /N=(1,1) wDetectorOffset 
     670        String groupName = "/instrument/detector" 
     671        String varName = "detector_x" 
     672        //convert from cm (NIST standard) to mm (NeXus standard) 
     673        DetectorOffset = DetectorOffset * 10 
     674        wDetectorOffset[0] = DetectorOffset // 
     675        // your code returning value 
     676        variable err 
     677        err = hdfWrite(fname, groupName, varName, wDetectorOffset) 
     678        KillWaves wDetectorOffset 
     679        //err not handled here 
    640680         
    641681        return(0) 
     
    715755        endif 
    716756 
    717         Wave hmm_xy = $(dfName+":entry1:data:hmm_xy") 
     757        Wave hmm_xy = $(dfName+":data:hmm_xy") 
    718758         
    719759        //redimension /I /N = (dimsize(hmm_xy, 2), dimsize(hmm_xy, 1)), data 
     
    731771        endif    
    732772        // end workaround 
    733                  
     773         
     774        //funky edge correction bodgy ??? 
     775        //copy second column to first column 
     776        data[][0] = data[p][1] 
     777        //copy second last column to last column 
     778        data[][191] = data[p][190] 
     779        //copy second row to first row 
     780        data[0][] = data[1][q] 
     781        //copy second last row to last row 
     782        data[191][] = data[190][q] 
     783                         
    734784        KillWaves hmm_xy 
    735785         
     
    739789 
    740790// file suffix (NCNR data file name specific) 
    741 // return null string 
     791// return filename as suffix 
    742792Function/S getSuffix(fname) 
    743793        String fname 
    744794         
    745         return("") 
     795        return(ParseFilePath(0, fname, ":", 1, 0)) 
    746796End 
    747797 
     
    752802        String fname 
    753803         
    754         return("") 
     804        return(getFileAssoc(fname)) 
    755805End 
    756806 
     
    766816        //err not handled here 
    767817         
    768         Wave/T wSampleName = $dfname+":entry1:sample:name" 
     818        Wave/T wSampleName = $dfname+":sample:name" 
    769819        str = wSampleName[0] 
    770820        KillWaves wSampleName 
     
    784834        //err not handled here 
    785835         
    786         Wave/T wStartTime = $dfName+":entry1:start_time" 
     836        Wave/T wStartTime = $dfName+":start_time" 
    787837        str = wStartTime[0] 
    788838        KillWaves wStartTime 
     
    794844//monitor count 
    795845Function getMonitorCount(fname) 
    796         String fname 
    797         Variable value 
    798          
    799         // your code returning value 
    800         variable err 
    801         string dfName = "" 
    802         err = hdfRead(fname, dfName) 
    803         //err not handled here 
    804          
    805         Wave wCounts = $dfName+":entry1:monitor:bm1_counts" 
     846//not patched 
     847        String fname 
     848        Variable value 
     849         
     850        // your code returning value 
     851        variable err 
     852        string dfName = "" 
     853        err = hdfRead(fname, dfName) 
     854        //err not handled here 
     855         
     856        Wave wCounts = $dfName+":monitor:bm1_counts" 
    806857        value = wCounts[0] 
    807858        KillWaves wCounts 
     
    826877//total detector count 
    827878Function getDetCount(fname) 
    828         String fname 
    829         Variable value 
    830          
    831         // your code returning value 
    832         variable err 
    833         string dfName = "" 
    834         err = hdfRead(fname, dfName) 
    835         //err not handled here 
    836  
    837         Wave wCounts = $(dfName+":entry1:data:total_counts") 
     879//not patched, but could be 
     880        String fname 
     881        Variable value 
     882         
     883        // your code returning value 
     884        variable err 
     885        string dfName = "" 
     886        err = hdfRead(fname, dfName) 
     887        //err not handled here 
     888 
     889        //      Wave wCounts = $(dfName+":data:total_counts") 
     890        // changed 22/12/09 nha 
     891                if(WaveExists($(dfName+":data:total_counts"))) 
     892                        Wave wCounts = $(dfName+":data:total_counts") 
     893                elseif(WaveExists($(dfName+":instrument:detector:total_counts"))) 
     894                Wave wCounts = $(dfName+":instrument:detector:total_counts") 
     895               else 
     896                print "Can't find detector total_counts in " + fname 
     897               endif 
     898         
    838899        value = wCounts[0] 
     900         
     901        //nha 21/5/10 temporary glitch wrote detector count to file as 0         
     902                if (value<1) 
     903                        NVAR XPix = root:myGlobals:gNPixelsX 
     904                        NVAR YPix = root:myGlobals:gNPixelsX 
     905                        Make/D/O/N=(XPix,YPix) $"root:RAW:data" 
     906                        WAVE data=$"root:RAW:data" 
     907                        getDetectorData(fname,data) 
     908                        value = sum(data) 
     909                endif 
     910         
    839911        KillWaves wCounts 
    840912         
     
    853925        //err not handled here 
    854926 
    855         Wave wAttrotdeg = $(dfName+":entry1:instrument:parameters:derived_parameters:AttRotDeg") 
     927        if(WaveExists($(dfName+":instrument:collimator:att"))) 
     928                        Wave wAttrotdeg = $(dfName+":instrument:collimator:att") 
     929        elseif(WaveExists($(dfName+":instrument:parameters:derived_parameters:AttRotDeg"))) 
     930                        Wave wAttrotdeg = $(dfName+":instrument:parameters:derived_parameters:AttRotDeg") 
     931        else 
     932                        print "Can't find attenuator in " + fname 
     933        endif    
     934         
    856935        value = wAttrotdeg[0] 
    857936        att = round(value)/30 
     
    860939end 
    861940 
     941 
    862942//transmission 
    863943Function getSampleTrans(fname) 
     
    872952        //err not handled here 
    873953 
    874         Wave wTransmission = $(dfName+":entry1:data:Transmission") 
     954        if(WaveExists($(dfName+":reduce:Transmission"))) //canonical location 
     955                        Wave wTransmission = $(dfName+":reduce:Transmission") 
     956        elseif(WaveExists($(dfName+":instrument:parameters:Transmission")))  
     957                        Wave wTransmission = $(dfName+":instrument:parameters:Transmission") 
     958        else  
     959                        print "Can't find Transmission in " + fname 
     960        endif 
    875961        value = wTransmission[0] 
    876962        KillWaves wTransmission 
     
    888974        //nha ??? Should make this wave in our own DataFolder to avoid clashing names.  
    889975        Make /N=(1,1) wTransmission 
    890         String groupName = "/entry1/data" 
     976        String groupName = "/reduce" 
    891977        String varName = "Transmission" 
    892978        wTransmission[0] = trans // 
     
    912998        //err not handled here 
    913999 
    914         Wave wBoxCounts = $(dfName+":entry1:reduce:boxCounts")  
    915         value = wBoxCounts[0] 
    916         KillWaves wBoxCounts 
     1000        Wave wBoxCounts = $(dfName+":reduce:boxCounts")  
     1001        if (waveexists(wBoxCounts) == 0) 
     1002                //boxcounts not yet set in  reduce group 
     1003                //return 0 
     1004                value = 0 
     1005        else 
     1006                value = wBoxCounts[0] 
     1007        endif 
     1008 
     1009        KillWaves/Z wBoxCounts 
    9171010         
    9181011        return(value) 
     
    9431036        //err not handled here 
    9441037 
    945         Wave wThickness = $(dfName+":entry1:sample:thickness") //does not exist ??? 
    946         value = wThickness[0] 
     1038        if(WaveExists($(dfName+":sample:SampleThickness"))) //canonical location - a bit ugly and verbose, but that's just my opinion 
     1039                Wave wThickness = $(dfName+":sample:SampleThickness") 
     1040        elseif(WaveExists($(dfName+":sample:thickness"))) 
     1041                Wave wThickness = $(dfName+":sample:thickness") 
     1042        else 
     1043                print "Can't find Sample Thickness in " + fname 
     1044        endif 
     1045                         
     1046        value = wThickness[0]/10 
    9471047        //value = 1 //??? temporary fix. nha 
    9481048        KillWaves wThickness 
     
    9601060        //nha ??? Should make this wave in our own DataFolder to avoid clashing names.  
    9611061        Make /N=(1,1) wThickness 
    962         String groupName = "/entry1/sample" 
    963         String varName = "thickness" 
    964         wThickness[0] = thickness // 
     1062        String groupName = "/sample" 
     1063        String varName = "SampleThickness" 
     1064        wThickness[0] = thickness*10 // 
    9651065        // your code returning value 
    9661066        variable err 
     
    9831083        //err not handled here 
    9841084 
    985         Wave wSample_rotation_angle = $(dfName+":entry1:sample:sample_theta") //is this correct 
     1085        Wave wSample_rotation_angle = $(dfName+":sample:sample_theta") //is this correct 
    9861086        value = wSample_rotation_angle[0] 
    9871087        KillWaves wSample_rotation_angle 
     
    10221122        //err not handled here 
    10231123 
    1024         Wave wBeamXPos = $(dfName+":entry1:instrument:parameters:BeamCenterX") //is this correct 
     1124        if(WaveExists($(dfName+":instrument:reduce:BeamCenterX"))) //canonical location 
     1125                        Wave wBeamXPos = $(dfName+":instrument:reduce:BeamCenterX") 
     1126        elseif(WaveExists($(dfName+":instrument:parameters:BeamCenterX"))) 
     1127                        Wave wBeamXPos = $(dfName+":instrument:parameters:BeamCenterX")  
     1128        else 
     1129                        print "Can't find BeamCenterX in" $fname 
     1130        endif 
    10251131        value = wBeamXPos[0]     
    10261132        KillWaves wBeamXPos 
     
    10391145        //nha ??? Should make this wave in our own DataFolder to avoid clashing names.  
    10401146        Make /N=(1,1) wBeamCenterX 
    1041         String groupName = "/entry1/instrument/parameters" 
     1147        String groupName = "/instrument/reduce" 
    10421148        String varName = "BeamCenterX" 
    10431149        wBeamCenterX[0] = beamCenterX // 
     
    10611167        //err not handled here 
    10621168 
    1063         Wave wBeamYPos = $(dfName+":entry1:instrument:parameters:BeamCenterZ") //is this correct 
     1169        if(WaveExists($(dfName+":instrument:reduce:BeamCenterZ"))) //canonical location 
     1170                        Wave wBeamYPos = $(dfName+":instrument:reduce:BeamCenterZ") 
     1171        elseif(WaveExists($(dfName+":instrument:parameters:BeamCenterZ"))) 
     1172                        Wave wBeamYPos = $(dfName+":instrument:parameters:BeamCenterZ")  
     1173        else 
     1174                        print "Can't find BeamCenterZ in" $fname 
     1175        endif 
    10641176        value = wBeamYPos[0]     
    10651177        KillWaves wBeamYPos 
     
    10771189        //nha ??? Should make this wave in our own DataFolder to avoid clashing names.  
    10781190        Make /N=(1,1) wBeamCenterY 
    1079         String groupName = "/entry1/instrument/parameters" 
     1191        String groupName = "/instrument/reduce" 
    10801192        String varName = "BeamCenterZ" 
    10811193        wBeamCenterY[0] = beamCenterY // 
     
    11011213 
    11021214        //workaround for bad HDF5 dataset 
    1103         String tempDF = dfName+":entry1:instrument:parameters:L2mm" 
    1104         if(Exists(tempDF)) 
    1105                 Wave wSourceToDetectorDist = $(dfName+":entry1:instrument:parameters:L2mm") //is this correct 
     1215        if(WaveExists($(dfName+":instrument:parameters:L2"))) //canonical location 
     1216                Wave wSourceToDetectorDist = $(dfName+":instrument:parameters:L2") 
     1217        elseif(WaveExists($(dfName+":instrument:parameters:L2mm"))) 
     1218                Wave wSourceToDetectorDist = $(dfName+":instrument:parameters:L2mm") 
     1219        elseif(WaveExists($(dfName+":instrument:parameters:derived_parameters:L2mm")))   
     1220                Wave wSourceToDetectorDist = $(dfName+":instrument:parameters:derived_parameters:L2mm") 
    11061221        else 
    1107                 Wave wSourceToDetectorDist = $(dfName+":entry1:instrument:parameters:derived_parameters:L2mm") //is this correct 
     1222                print "Can't find L2 in " + fname 
    11081223        endif 
    11091224         
     
    11231238        //nha ??? Should make this wave in our own DataFolder to avoid clashing names.  
    11241239        Make /N=(1,1) wSDD 
    1125 //      String groupName = "/entry1/instrument/parameters/derived_parameters" 
    1126         String groupName = "/entry1/instrument/parameters" 
    1127         String varName = "L2mm" 
     1240        String groupName = "/instrument/parameters" 
     1241        String varName = "L2" 
    11281242        wSDD[0] = sdd * 1000 // 
    11291243        // your code returning value 
     
    11461260        //err not handled here 
    11471261 
    1148         Wave wDetectorOffset = $(dfName+":entry1:instrument:detector:detector_x") //is this correct 
     1262        Wave wDetectorOffset = $(dfName+":instrument:detector:detector_x") //is this correct 
    11491263        value = wDetectorOffset[0]/10 
    11501264        KillWaves wDetectorOffset 
     
    11631277        //err not handled here 
    11641278 
    1165         Wave wBSdiameter = $(dfName+":entry1:instrument:parameters:BSXmm") //is this correct 
     1279        if(WaveExists($(dfName+":instrument:parameters:BSdiam"))) //canonical location 
     1280                Wave wBSdiameter = $(dfName+":instrument:parameters:BSdiam") 
     1281        elseif(WaveExists($(dfName+":instrument:parameters:BSXmm"))) 
     1282                Wave wBSdiameter = $(dfName+":instrument:parameters:BSXmm")  
     1283        else 
     1284                print "Can't find Beamstop Diameter in " + fname 
     1285        endif 
    11661286        value = wBSdiameter[0] 
    11671287        KillWaves wBSdiameter 
     
    11791299        //nha ??? Should make this wave in our own DataFolder to avoid clashing names.  
    11801300        Make /N=(1,1) wBS 
    1181         String groupName = "/entry1/instrument/parameters" 
    1182         String varName = "BSXmm" 
     1301        String groupName = "/instrument/parameters" 
     1302        String varName = "BSdiam" 
    11831303        wBS[0] = bs // 
    11841304        // your code returning value 
     
    12001320        //err not handled here 
    12011321 
    1202         Wave wSourceApertureDiam = $(dfName+":entry1:instrument:parameters:derived_parameters:EApXmm") //is this correct 
     1322        if(WaveExists($(dfName+":instrument:parameters:EApX"))) 
     1323                Wave wSourceApertureDiam = $(dfName+":instrument:parameters:EApX") // canonical location 
     1324        elseif(WaveExists($(dfName+":instrument:parameters:derived_parameters:EApXmm"))) 
     1325                Wave wSourceApertureDiam = $(dfName+":instrument:parameters:derived_parameters:EApXmm")  
     1326        else 
     1327                print "Can't find Source Aperture Diameter in " + fname 
     1328        endif    
    12031329        value = wSourceApertureDiam[0] 
    12041330        KillWaves wSourceApertureDiam 
     
    12161342        //nha ??? Should make this wave in our own DataFolder to avoid clashing names.  
    12171343        Make /N=(1,1) wsource 
    1218         String groupName = "/entry1/instrument/parameters/derived_parameters" 
    1219         String varName = "EApXmm" 
     1344        String groupName = "/instrument/parameters" 
     1345        String varName = "EApX" 
    12201346        wsource[0] = source // 
    12211347        // your code returning value 
     
    12371363        //err not handled here 
    12381364 
    1239         Wave wSampleApertureDiam = $(dfName+":entry1:instrument:sample_aperture:geometry:shape:SApXmm") //is this correct 
     1365        if(WaveExists($(dfName+":sample:diameter"))) //canonical location 
     1366                Wave wSampleApertureDiam = $(dfName+":sample:diameter") 
     1367        elseif(WaveExists($(dfName+":instrument:parameters:autoSampleAp:diameter"))) //canonical location 
     1368                Wave wSampleApertureDiam = $(dfName+":instrument:parameters:autoSampleAp:diameter") 
     1369        elseif (WaveExists($(dfName+":instrument:sample_aperture:geometry:shape:SApXmm"))) 
     1370                Wave wSampleApertureDiam = $(dfName+":instrument:sample_aperture:geometry:shape:SApXmm")  
     1371        else 
     1372                print "Can't find Sample Aperture Diameter in " + fname 
     1373        endif    
    12401374        value = wSampleApertureDiam[0] 
    12411375        KillWaves wSampleApertureDiam 
     
    12531387        //nha ??? Should make this wave in our own DataFolder to avoid clashing names.  
    12541388        Make /N=(1,1) wsource 
    1255         String groupName = "/entry1/instrument/sample_aperture/geometry/shape" 
    1256         String varName = "SApXmm" 
     1389        String groupName = "/sample" 
     1390        String varName = "diameter" 
    12571391        wsource[0] = source // 
    12581392        // your code returning value 
     
    12771411        //err not handled here 
    12781412         
    1279         //workaround for bad HDF5 dataset 
    1280         String tempDF = dfName+":entry1:instrument:parameters:L1mm" 
    1281         if(Exists(tempDF)) 
    1282                 Wave wSourceToSampleDist = $(dfName+":entry1:instrument:parameters:L1mm") //is this correct 
     1413        if(WaveExists($(dfName+":instrument:parameters:L1"))) //canonical location 
     1414                Wave wSourceToSampleDist = $(dfName+":instrument:parameters:L1")         
     1415        elseif(WaveExists($(dfName+":instrument:parameters:L1mm"))) 
     1416                Wave wSourceToSampleDist = $(dfName+":instrument:parameters:L1mm")  
     1417        elseif(WaveExists($(dfName+":instrument:parameters:derived_parameters:L1mm"))) 
     1418                Wave wSourceToSampleDist = $(dfName+":instrument:parameters:derived_parameters:L1mm") 
    12831419        else 
    1284                 Wave wSourceToSampleDist = $(dfName+":entry1:instrument:parameters:derived_parameters:L1mm") //is this correct 
     1420                print "Can't find L1 in " + fname 
    12851421        endif 
    12861422         
     
    13001436        //nha ??? Should make this wave in our own DataFolder to avoid clashing names.  
    13011437        Make /N=(1,1) wSSD 
    1302 //      String groupName = "/entry1/instrument/parameters/derived_parameters" 
    1303         String groupName = "/entry1/instrument/parameters" 
    1304         String varName = "L1mm" 
     1438        String groupName = "/instrument/parameters" 
     1439        String varName = "L1" 
    13051440        wSSD[0] = SSD * 1000 //input in metres, converted to mm for saving to file. 
    13061441        // your code returning value 
     
    13231458        //err not handled here 
    13241459 
    1325         Wave wWavelength = $(dfName+":entry1:data:LambdaA") //is this correct 
     1460        //      Wave wWavelength = $(dfName+":data:LambdaA")  
     1461        //change 22/12/09 nha 
     1462        // all these locations to be deprecated  
     1463        if(WaveExists($(dfName+":instrument:velocity_selector:Lambda")))  // canonical location 
     1464                Wave wWavelength = $(dfName+":instrument:velocity_selector:Lambda")  
     1465        elseif(WaveExists($(dfName+":data:Lambda"))) 
     1466                Wave wWavelength = $(dfName+":data:Lambda")  
     1467        elseif(WaveExists($(dfName+":data:LambdaA"))) 
     1468                Wave wWavelength = $(dfName+":data:LambdaA")  
     1469        elseif(WaveExists($(dfName+":instrument:velocity_selector:LambdaA"))) 
     1470                Wave wWavelength = $(dfName+":instrument:velocity_selector:LambdaA")  
     1471        else 
     1472                print "Can't find Lambda in " + fname 
     1473        endif  
    13261474        value = wWavelength[0]   
    13271475        KillWaves wWavelength 
     
    13391487        //nha ??? Should make this wave in our own DataFolder to avoid clashing names.  
    13401488        Make /N=(1,1) wWavelength 
    1341         String groupName = "/entry1/data" 
    1342         String varName = "LambdaA" 
     1489        String groupName = "/instrument/velocity_selector" 
     1490        String varName = "Lambda" 
    13431491        wWavelength[0] = wavelength // 
    13441492        // your code returning value 
     
    13461494        err = hdfWrite(fname, groupName, varName, wWavelength) 
    13471495         
    1348         //and because Bill Hamilton is not happy with the NeXus naming, we write it to 2 other places 
    1349         groupName = "/entry1/instrument/parameters" 
    1350         err = hdfWrite(fname, groupName, varName, wWavelength) 
    1351         //velocity_selector group causes Igor crash 
    1352         //groupName = "/entry1/instrument/velocity_selector" 
     1496        //and because Bill Hamilton is not happy with the NeXus naming, we write it to 3 other places 
     1497        //groupName = "/instrument/parameters" 
     1498        //err = hdfWrite(fname, groupName, varName, wWavelength) 
     1499        //velocity_selector group causes Igor crash in some cases 
     1500        //groupName = "/instrument/velocity_selector" 
     1501        //err = hdfWrite(fname, groupName, varName, wWavelength) 
     1502        // 
     1503        //groupName = "/data" 
     1504        //varName = "lambda" 
    13531505        //err = hdfWrite(fname, groupName, varName, wWavelength) 
    13541506         
     
    13741526         
    13751527        //velocity_selector group causes Igor crash 
    1376         //Wave wWavelengthSpread = $(dfName+":entry1:instrument:velocity_selector:LambdaResFWHM_percent") //is this correct 
    1377         Wave wWavelengthSpread = $(dfName+":entry1:instrument:parameters:LambdaResFWHM_percent") //is this correct 
    1378  
     1528        if(WaveExists($(dfName+":instrument:velocity_selector:LambdaResFWHM_percent")))  //canonical location 
     1529                Wave wWavelengthSpread = $(dfName+":instrument:velocity_selector:LambdaResFWHM_percent") 
     1530        elseif(WaveExists($(dfName+":instrument:parameters:LambdaResFWHM_percent")))  
     1531                Wave wWavelengthSpread = $(dfName+":instrument:parameters:LambdaResFWHM_percent") 
     1532        else 
     1533                print "Can't find Wavelength Spread in " + fname 
     1534        endif 
    13791535        value = wWavelengthSpread[0]     
    13801536        KillWaves wWavelengthSpread 
     
    13931549        Make /N=(1,1) wWavelengthSpread 
    13941550        //velocity_selector group causes Igor crash 
    1395         //String groupName = "/entry1/instrument/velocity_selector" 
    1396         String groupName = "/entry1/instrument/parameters" 
     1551        String groupName = "/instrument/velocity_selector" 
    13971552        String varName = "LambdaResFWHM_percent" 
    13981553 
     
    14181573        //err not handled here 
    14191574 
    1420         Wave wActiveArea = $(dfName+":entry1:instrument:detector:active_height")  
    1421         Wave w_x_bin = $(dfName+":entry1:instrument:detector:x_bin") 
     1575        Wave wActiveArea = $(dfName+":instrument:detector:active_height")  
     1576        Wave w_x_bin = $(dfName+":instrument:detector:x_bin") 
    14221577        Variable numPixels = dimsize(w_x_bin, 0) 
    14231578        value = wActiveArea[0]/numPixels 
     
    14391594        //err not handled here 
    14401595 
    1441         Wave wActiveArea = $(dfName+":entry1:instrument:detector:active_width")  
    1442         Wave w_y_bin = $(dfName+":entry1:instrument:detector:y_bin") 
     1596        Wave wActiveArea = $(dfName+":instrument:detector:active_width")  
     1597        Wave w_y_bin = $(dfName+":instrument:detector:y_bin") 
    14431598        Variable numPixels = dimsize(w_y_bin, 0) 
    14441599        value = wActiveArea[0]/numPixels 
     
    14721627        //err not handled here  
    14731628 
    1474         Wave wTime1 = $(dfName+":entry1:monitor:bm1_time")  
     1629        Wave wTime1 = $(dfName+":monitor:bm1_time")  
    14751630        value = wTime1[0]        
    14761631        KillWaves wTime1 
     
    14891644        //err not handled here  
    14901645 
    1491         Wave wPhysicalWidth = $(dfName+":entry1:instrument:detector:active_width")  
     1646        Wave wPhysicalWidth = $(dfName+":instrument:detector:active_width")  
    14921647        value = wPhysicalWidth[0]/10 
    14931648        KillWaves wPhysicalWidth 
    14941649                 
     1650        return(value) 
     1651end 
     1652 
     1653Function/S getSICSVersion(fname) 
     1654        String fname 
     1655        String value 
     1656        // your code returning value 
     1657        variable err 
     1658        string dfName = "" 
     1659        err = hdfRead(fname, dfName) 
     1660        //err not handled here  
     1661 
     1662        Wave/T wSICSVersion = $(dfName+":sics_release")  
     1663        value = wSICSVersion[0]  
     1664        KillWaves wSICSVersion 
     1665         
     1666        return(value) 
     1667end 
     1668 
     1669Function/S getHDFversion(fname) 
     1670        String fname 
     1671        String value 
     1672        // your code returning value 
     1673        variable err 
     1674        string dfName = "" 
     1675        string attribute = "HDF5_Version" 
     1676        err = hdfReadAttribute(fname, dfName, "/", 1, attribute) 
     1677//      string attribute ="signal" 
     1678//      err = hdfReadAttribute(fname, dfName, "/entry/data/hmm_xy", 2, attribute) 
     1679        //err not handled here  
     1680 
     1681        Wave/T wHDF5_Version = $(dfName+":"+attribute)  
     1682        value = wHDF5_Version[0]         
     1683//      KillWaves wHDF5_Version 
     1684 
    14951685        return(value) 
    14961686end 
     
    15481738        //err not handled here  
    15491739 
    1550         Wave wX1 = $(dfName+":entry1:reduce:x1")  
    1551         x1 = wX1[0] 
    1552         Wave wX2 = $(dfName+":entry1:reduce:x2")  
    1553         x2 = wX2[0] 
    1554         Wave wY1 = $(dfName+":entry1:reduce:y1")  
    1555         y1 = wY1[0] 
    1556         Wave wY2 = $(dfName+":entry1:reduce:y2")  
    1557         y2 = wY2[0] 
    1558          
    1559         KillWaves wX1, wX2, wY1, wY2 
     1740         
     1741        Wave wX1 = $(dfName+":reduce:x1")  
     1742        if (waveexists(wX1) == 0) 
     1743                //Waves don't exists which means an XY box has not been set for this file. 
     1744                //Hence return 0 bounding boxes (default) 
     1745        else 
     1746                x1 = wX1[0] 
     1747                Wave wX2 = $(dfName+":reduce:x2")  
     1748                x2 = wX2[0] 
     1749                Wave wY1 = $(dfName+":reduce:y1")  
     1750                y1 = wY1[0] 
     1751                Wave wY2 = $(dfName+":reduce:y2")  
     1752                y2 = wY2[0] 
     1753        endif 
     1754         
     1755        KillWaves/Z wX1, wX2, wY1, wY2 
    15601756        return(0) 
    15611757 
     
    15711767        Variable x1,x2,y1,y2 
    15721768 
    1573         String groupName = "/entry1/reduce" 
    1574         variable err 
    1575          
     1769        String groupName = "/reduce" 
     1770        variable err 
     1771                 
    15761772        Wave wX1 
    1577         Make /N=(1,1) wX1 
     1773        Make/O/N=(1,1) wX1 
    15781774        Wave wX2 
    1579         Make /N=(1,1) wX2 
     1775        Make/O/N=(1,1) wX2 
    15801776        Wave wY1 
    1581         Make /N=(1,1) wY1 
     1777        Make/O/N=(1,1) wY1 
    15821778        Wave wY2 
    1583         Make /N=(1,1) wY2 
     1779        Make/O/N=(1,1) wY2 
    15841780                 
    15851781        wX1[0] = x1 
     
    16071803// (suffix of the data file) 
    16081804// 
    1609 // if not using the NCNR Transmission module, this function is null 
    1610 Function WriteAssocFileSuffixToHeader(trans_fname,empty_fname) 
    1611         String trans_fname, empty_fname 
    1612                  
    1613 // your writer here 
    1614         Wave/T wEmpty_fname 
    1615         //nha ??? Should make this wave in our own DataFolder to avoid clashing names.  
    1616         Make/T /N=(1,1) wEmpty_fname 
    1617         String groupName = "/entry1/reduce" 
    1618         String varName = "empty_beam_file_name" 
    1619  
    1620         wEmpty_fname[0] = empty_fname  
    1621         // your code returning value 
    1622         variable err 
    1623         err = hdfWrite(trans_fname, groupName, varName, wEmpty_fname) 
    1624         KillWaves wEmpty_fname 
    1625         //err not handled here 
    1626         return(0) 
    1627 end 
    1628  
    1629 Function WriteFileAssoc(fname,assoc_fname) 
     1805//AJJ June 3 2010 - Note!! For ANSTO data the "suffix" is just the filename. 
     1806Function WriteAssocFileSuffixToHeader(fname,assoc_fname) 
    16301807        String fname,assoc_fname 
    16311808                 
     
    16361813         
    16371814        String varName ="" 
    1638         String groupName = "/entry1/reduce" 
     1815        String groupName = "/reduce" 
    16391816        if(isTransFile(fname)) 
    16401817                varName = "empty_beam_file_name" 
     
    16561833         
    16571834        String assoc_fname 
    1658         String groupName = ":entry1:reduce:" 
     1835        String groupName = ":reduce:" 
    16591836         
    16601837        String varName = "" 
     
    16711848 
    16721849        Wave/T wAssoc_fname = $(dfName+groupName+varName)  
    1673         assoc_fname =wAssoc_fname[0]     
    1674         KillWaves wAssoc_fname 
     1850        if (waveexists(wAssoc_fname) == 1) 
     1851                assoc_fname =wAssoc_fname[0]     
     1852        else 
     1853                assoc_fname = "" 
     1854        endif 
     1855        KillWaves/Z wAssoc_fname 
    16751856         
    16761857        return(assoc_fname) 
     1858end 
     1859 
     1860Function hdfReadAttribute(fname, dfName, nodeName, nodeType, attributeStr) 
     1861// this is a copy of hdfRead, and could be incorporated back into hdfRead. 
     1862         
     1863        String fname, &dfName, nodeName, attributeStr 
     1864        variable nodeType 
     1865        String nxentryName 
     1866        variable err=0,fileID    
     1867        String cDF = getDataFolder(1), temp 
     1868        String fname_temp = ParseFilePath(0, fname, ":", 1, 0) 
     1869 
     1870         
     1871        String fileSuffix 
     1872         
     1873        if(strsearch(fname_temp,".nx.hdf",0,2)>=0) 
     1874                fileSuffix=".nx.hdf" 
     1875        else 
     1876                err = 1 
     1877                abort "unrecognised file suffix. Not .nx.hdf" 
     1878        endif 
     1879         
     1880        dfName = "root:packages:quokka:"+removeending(fname_temp,fileSuffix) 
     1881         
     1882        //folder must already exist i.e. hdfRead must have already been called 
     1883        if(!DataFolderExists(dfName))  
     1884                // possibly call an hdfRead from here 
     1885                return err 
     1886        endif 
     1887         
     1888        //test for the name of nxentry 
     1889        if(DataFolderExists(dfName+":"+removeending(fname_temp,fileSuffix))) 
     1890                nxentryName = removeending(fname_temp,fileSuffix) 
     1891        elseif(DataFolderExists(dfName+":"+"entry1")) 
     1892                nxentryName = "entry1" 
     1893        else 
     1894                print "NXentry not found" 
     1895                return err 
     1896        endif 
     1897         
     1898        //this is the stupid bit. 
     1899        // If you're looking for attributes of the root node, then nodename = "/" 
     1900        // If you're looking for attributes     of the nxentry node, then e.g. nodename ="/entry/instrument" 
     1901        // /entry is replaced with nxentryName 
     1902        nodeName = ReplaceString("entry", nodeName, nxentryName)         
     1903         
     1904        //convert nodeName to data folder string 
     1905        String dfNodeName = nodeName 
     1906        dfNodeName = ReplaceString( "/", nodeName, ":") 
     1907        dfName = dfName + dfNodeName 
     1908        if(nodeType == 2) //data item (dataset) 
     1909                //remove the end of dfName so that it points to a folder and not a dataset 
     1910                variable length = strlen(dfName)  
     1911                variable position = strsearch(dfName, ":", length, 1) // search backwards to find last : 
     1912                // to do - truncate string to remove dataset 
     1913                string truncate = "\"%0." + num2str(position) + "s\"" 
     1914                sprintf dfName, truncate, dfName 
     1915        endif 
     1916         
     1917        setDataFolder dfName 
     1918         
     1919        try      
     1920                HDF5OpenFile /R /Z fileID  as fname 
     1921                if(!fileID) 
     1922                        err = 1 
     1923                        abort "couldn't load HDF5 file" 
     1924                endif 
     1925 
     1926                HDF5LoadData /O /Q /Z /TYPE=(nodeType) /A=attributeStr, fileID, nodeName 
     1927 
     1928                if (V_flag!=0) 
     1929                        print "couldn't load attribute " + attributeStr 
     1930                endif 
     1931        catch 
     1932 
     1933        endtry 
     1934        if(fileID) 
     1935                HDF5CloseFile /Z fileID  
     1936        endif 
     1937 
     1938// add the name of the root node to dfName  
     1939// in the case of sensitivity files aka DIV files, don't append a root node to dfName 
     1940        if(DataFolderExists(dfName+":"+removeending(fname_temp,fileSuffix))) 
     1941                dfName = dfName+":"+removeending(fname_temp,fileSuffix)  //for files written Dec 2009 and after 
     1942        elseif(DataFolderExists(dfName+":"+"entry1")) 
     1943                dfName = dfName+":entry1" //for files written before Dec 2009 
     1944        endif 
     1945 
     1946        setDataFolder $cDF 
     1947        return err 
    16771948end 
    16781949 
     
    16861957        String cDF = getDataFolder(1), temp 
    16871958        String fname_temp = ParseFilePath(0, fname, ":", 1, 0) 
    1688          
     1959                 
    16891960        String fileSuffix 
    16901961        if(strsearch(fname_temp,".nx.hdf",0,2)>=0) 
     
    17211992        endif 
    17221993 
     1994        // add the name of the root node to dfName  
     1995        // in the case of sensitivity files aka DIV files, don't append a root node to dfName 
     1996        if(DataFolderExists(dfName+":"+removeending(fname_temp,fileSuffix))) 
     1997                dfName = dfName+":"+removeending(fname_temp,fileSuffix)  //for files written Dec 2009 and after 
     1998        elseif(DataFolderExists(dfName+":"+"entry1")) 
     1999                dfName = dfName+":entry1" //for files written before Dec 2009 
     2000        endif 
     2001 
    17232002        setDataFolder $cDF 
    17242003        return err 
     
    17352014        String cDF = getDataFolder(1), temp 
    17362015        String fname_temp = ParseFilePath(0, fname, ":", 1, 0) 
    1737          
     2016        String NXentry_name 
     2017                         
    17382018        try      
    1739                 HDF5OpenFile /Z fileID  as fname  //open file read-write 
     2019                HDF5OpenFile/Z fileID  as fname  //open file read-write 
    17402020                if(!fileID) 
    17412021                        err = 1 
    17422022                        abort "HDF5 file does not exist" 
    17432023                endif 
     2024                 
     2025                //get the NXentry node name 
     2026                HDF5ListGroup /TYPE=1 fileID, "/" 
     2027                //remove trailing ; from S_HDF5ListGroup 
     2028                NXentry_name = S_HDF5ListGroup 
     2029                NXentry_name = ReplaceString(";",NXentry_name,"") 
     2030                if(strsearch(NXentry_name,":",0)!=-1) //more than one entry under the root node 
     2031                        err = 1 
     2032                        abort "More than one entry under the root node. Ambiguous" 
     2033                endif  
     2034                //concatenate NXentry node name and groupName    
     2035                groupName = "/" + NXentry_name + groupName 
    17442036                HDF5OpenGroup /Z fileID , groupName, groupID 
    17452037 
     
    17522044                        //err = 1 
    17532045                        //abort "HDF5 group does not exist" 
    1754                 endif            
    1755                 HDF5SaveData /O /Z  wav, groupID, varName 
     2046                else 
     2047                        // get attributes and save them 
     2048                        //HDF5ListAttributes /Z fileID, groupName    this is returning null. expect it to return semicolon delimited list of attributes  
     2049                        //Wave attributes = S_HDF5ListAttributes 
     2050                endif 
     2051         
     2052                HDF5SaveData /O /Z /IGOR=0  wav, groupID, varName 
    17562053                if (V_flag != 0) 
    17572054                        err = 1 
    1758                         abort "Cannot save wave to HDF5 group" 
     2055                        abort "Cannot save wave to HDF5 dataset" + varName 
    17592056                endif    
     2057                 
     2058                //HDF5SaveData /O /Z /IGOR=0 /A=attributes groupID, varName 
     2059                //if (V_flag != 0) 
     2060                ////    err = 1 
     2061                //      abort "Cannot save attributes to HDF5 dataset" 
     2062                //endif  
    17602063        catch 
    17612064 
  • sans/Dev/trunk/NCNR_User_Procedures/Reduction/SANS/ANSTO_Utils.ipf

    r683 r707  
    3030 
    3131        Variable/G root:myGlobals:apOff = 5.0           // (cm) distance from sample aperture to sample position 
    32  
    33         // flags to turn detector corrections on/off for testing (nha. this overrides the default, turning these corrections OFF) 
    34         Variable/G root:myGlobals:gDoDetectorEffCorr = 0 
    35         Variable/G root:myGlobals:gDoTransmissionCorr = 0 
    3632 
    3733End 
     
    192188        String item 
    193189 
     190        Variable invalid = -1 
    194191        Variable num=-1         // an invalid return value 
    195192         
    196         //your code here 
    197          
     193        String runStr="" 
     194        Variable pos = strsearch(item,".",0) 
     195        if(pos == -1) 
     196                //"dot" not found 
     197                return (invalid) 
     198        else 
     199                //found, get the three characters preceeding it 
     200                if (pos <=6) 
     201                        //not enough characters 
     202                        return (invalid) 
     203                else 
     204                        runStr = item[pos-7,pos-1] 
     205                        //convert to a number 
     206                        num = str2num(runStr) 
     207                        //if valid, return it 
     208                        if (num == NaN) 
     209                                //3 characters were not a number 
     210                                return (invalid) 
     211                        else 
     212                                //run was OK 
     213                                return (num) 
     214                        Endif 
     215                Endif 
     216        Endif    
    198217        return (num) 
    199218End 
     
    217236        retStr=invalid 
    218237         
    219         //your code here 
    220          
    221         return(retStr) 
     238        String runStr = "" 
     239        Variable pos = strsearch(item,".",0) 
     240        if(pos == -1) 
     241                //"dot" not found 
     242                return (invalid) 
     243        else 
     244                //found, get the three characters preceeding it 
     245                if (pos <=6) 
     246                        //not enough characters 
     247                        return (invalid) 
     248                else 
     249                        runStr = item[pos-7,pos-1] 
     250                        return (runStr) 
     251                Endif 
     252        Endif 
    222253End 
    223254 
     
    235266        Variable num 
    236267         
    237         String fullName="",partialName="",item="" 
     268        String fullName="",partialName="",item="",numStr="" 
    238269         
    239270        //make sure that path exists 
     
    244275        Endif 
    245276 
    246         //your code here         
    247  
    248         return(fullname) 
    249          
     277        //make 7 digit string from run number 
     278        sprintf numStr,"%07u",num 
     279 
     280        //partialname = "QKK"+tmp_num+".nx.hdf" 
     281 
     282        String list="",newList="",testStr="" 
     283 
     284        list = IndexedFile(catPathName,-1,"????")       //get all files in folder 
     285        //find (the) one with the number in the run # location in the name 
     286        Variable numItems,ii,runFound,isRAW 
     287        numItems = ItemsInList(list,";")                //get the new number of items in the list 
     288        ii=0 
     289        do 
     290                //parse through the list in this order: 
     291                // 1 - does item contain run number (as a string) "QKKXXXXXXX.nx.hdf" 
     292                // 2 - exclude by isRaw? (to minimize disk access) 
     293                item = StringFromList(ii, list  ,";" ) 
     294                if(strlen(item) != 0) 
     295                        //find the run number, if it exists as a three character string 
     296                        testStr = GetRunNumStrFromFile(item) 
     297                        runFound= cmpstr(numStr,testStr)        //compare the three character strings, 0 if equal 
     298                        if(runFound == 0) 
     299                                //the run Number was found 
     300                                //build valid filename 
     301                                partialName = FindValidFileName(item) 
     302                                if(strlen(partialName) != 0)            //non-null return from FindValidFileName() 
     303                                        fullName = path + partialName 
     304                                        //check if RAW, if so,this must be the file! 
     305                                        isRAW = CheckIfRawData(fullName) 
     306                                        if(isRaw) 
     307                                                //stop here 
     308                                                return(fullname) 
     309                                        Endif 
     310                                Endif 
     311                        Endif 
     312                Endif 
     313                ii+=1 
     314        while(ii<numItems)              //process all items in list 
     315        Return ("")     //null return if file not found in list 
    250316End 
    251317 
     
    260326        Variable value = 0 
    261327         
    262         if(cmpStr(FindValidFilename(fname),fname)==0) 
    263                 value = 1 
     328        Variable hdfID,hdfgID 
     329        Variable isNXHDF = 0 
     330         
     331        //nha. look for non-NeXus files  
     332        if (strsearch(fname, "nx.hdf", 0) >= 0) 
     333                isNXHDF = 1 
    264334        endif 
     335 
     336        if(isNXHDF == 1) 
     337                //Need to actually determine if file is RAW data. 
     338                HDF5OpenFile/Z hdfID as fname 
     339                HDF5OpenGroup/Z hdfID, "/data", hdfgID 
     340                if (V_Flag == 0) 
     341                        //DIV file (with nx.hdf suffix) 
     342                        value = 0 
     343                else 
     344                        //Some other nx.hdf file 
     345                        value = 1 
     346                endif 
     347                HDF5CloseGroup/Z hdfgID 
     348                HDF5CloseFile/Z hdfID 
     349        else 
     350                value = 0 
     351        endif 
     352         
    265353        return(value) 
    266354End 
     
    293381        //err not handled here 
    294382 
    295         Wave/T wSampleName = $(dfName+":entry1:sample:name")  
     383        Wave/T wSampleName = $(dfName+":sample:name")  
    296384        String sampleName = wSampleName[0] 
    297385         
     
    320408        //err not handled here 
    321409 
    322         Wave wTransmission_Flag = $(dfName+":entry1:sample:transmission_flag") //is only being set after 27/5/2009. ??? 
     410        Wave wTransmission_Flag = $(dfName+":sample:TransmissionFlag") //is only being set after 27/5/2009. ??? 
    323411        value = wTransmission_Flag[0] 
    324          
    325         //workaround - determine by bsx position 
    326         Wave wBSX = $(dfName+":entry1:instrument:beam_stop:geometry:position:BSPosXmm") 
    327         variable bsx = wBSX[0] 
    328          
    329         if (bsx >= -10 ) 
    330                 value = 1 
    331         endif 
     412//       
     413//   AJJ June 2nd 2010 - Unclear that this check is correct. Certainly BSPosXmm is not correct parameter in current data format... 
     414//      if (value == 0) 
     415//      //workaround - determine by bsx position 
     416//      Wave wBSX = $(dfName+":instrument:beam_stop:geometry:position:BSPosXmm") 
     417//      variable bsx = wBSX[0] 
     418//               
     419//              if (bsx >= -10 ) 
     420//                      value = 1 
     421//              endif 
     422//      endif 
    332423 
    333424        return(value) 
     
    384475         
    385476        //your code here 
    386         //nha. look for non-NeXus files  
    387         if (strsearch(partialName, "nx.hdf", 0) == -1) 
    388                 return(retStr) 
    389         endif 
    390          
     477        //Assuming no issues with partialNames.... 
     478                 
    391479        return(partialName) 
    392480 
     
    491579// 
    492580Function/S GetNameFromHeader(fullName) 
     581// given the fully qualified path and filename ie. fullName, return just the filename 
    493582        String fullName 
    494583        String newName = "" 
    495584 
    496585        //your code here 
    497          
     586        newName = ParseFilePath(0, fullName, ":", 1, 0) 
     587 
    498588        Return(newName) 
    499589End 
     
    562652                item = StringFromList(ii,list,",") 
    563653 
    564                 //hardcode the mask filename - ??? bad  
    565                 if(strlen(item)==4) 
    566                         item = "QKK000"+item+".nx.hdf" 
    567                 endif 
    568                 //is it already a valid filename? 
    569  
    570                 //hardcode the mask filename - ??? bad  
    571                 if(cmpstr(item,"mask.bin")==0) 
    572                         tempStr = item 
    573                 else 
    574654                tempStr=FindValidFilename(item) //returns filename if good, null if error 
    575                 endif 
     655                 
    576656                if(strlen(tempstr)!=0) 
    577657                        //valid name, add to list 
    578658                        //Print "it's a file" 
    579                         newList += tempStr + "," 
    580                 else 
     659                                if(strlen(newList)==0) 
     660                                        newList = tempStr 
     661                                else 
     662                                        newList += "," + tempStr 
     663                                endif            
     664                        else 
    581665                        //not a valid name 
    582666                        //is it a number? 
     
    703787        endif 
    704788         
    705         if( (lambda < 5) || (lambda > 5 ) ) 
    706                 Abort "Wavelength out of calibration range (5A). You must manually enter the absolute parameters" 
    707         Endif 
     789//      if( (lambda < 5) || (lambda > 5 ) ) 
     790//              Abort "Wavelength out of calibration range (5A). You must manually enter the absolute parameters" 
     791//      Endif 
    708792         
    709793        if(!(WaveExists($attStr)) || !(WaveExists($lamStr)) ) 
     
    755839        // note 5A only at this stage but other wavelengths as measured 
    756840        // these values have to be re-determined as were measured on time and not monitor counts 
    757         Make/O/N=(num) root:myGlobals:Attenuators:lambda={5} 
     841        //Make/O/N=(num) root:myGlobals:Attenuators:lambda={5} 
     842        Make/O/N=(num) root:myGlobals:Attenuators:lambda={4.94}  
    758843 
    759844        //Quokka attenuator factors. 19/1/09 nha 
    760845        //20/3/09 nha updated to  
    761846        //file://fianna/Sections/Bragg/Data_Analysis_Team/Project/P025 Quokka Commissioning DRV/3_Development/ATTest-timeseries.pdf  
    762          
    763         root:myGlobals:Attenuators:att0 = {1} 
    764         root:myGlobals:Attenuators:att1 = {0.499} 
    765         root:myGlobals:Attenuators:att2 = {0.175} 
    766         root:myGlobals:Attenuators:att3 = {0.0727} 
    767         root:myGlobals:Attenuators:att4 = {0.0326} 
    768         root:myGlobals:Attenuators:att5 = {0.0124} 
    769         root:myGlobals:Attenuators:att6 = {0.00573} 
    770         root:myGlobals:Attenuators:att7 = {0.00257} 
    771         root:myGlobals:Attenuators:att8 = {0.000929} 
    772         root:myGlobals:Attenuators:att9 = {6.93e-5} 
    773         root:myGlobals:Attenuators:att10 = {5.46e-6} 
    774         root:myGlobals:Attenuators:att11 = {1.55e-6} 
     847        //updated by epg 13-02-2010 to reflect kwo measurements at g7 
     848         
     849        root:myGlobals:Attenuators:att0 = {1} 
     850        root:myGlobals:Attenuators:att1 = {0.498782} 
     851        root:myGlobals:Attenuators:att2 = {0.176433} 
     852        root:myGlobals:Attenuators:att3 = {0.0761367} 
     853        root:myGlobals:Attenuators:att4 = {0.0353985} 
     854        root:myGlobals:Attenuators:att5 = {0.0137137} 
     855        root:myGlobals:Attenuators:att6 = {0.00614167} 
     856        root:myGlobals:Attenuators:att7 = {0.00264554} 
     857        root:myGlobals:Attenuators:att8 = {0.000994504} 
     858        root:myGlobals:Attenuators:att9 = {0.000358897} 
     859        root:myGlobals:Attenuators:att10 = {7.2845e-05} 
     860        root:myGlobals:Attenuators:att11 = {1.67827e-06} 
    775861 
    776862End 
  • sans/Dev/trunk/NCNR_User_Procedures/Reduction/SANS/CatVSTable.ipf

    r689 r707  
    5858        Make/O/D/N=0 $"root:myGlobals:CatVSHeaderInfo:MCR"              //added Mar 2008 
    5959        Make/O/D/N=0 $"root:myGlobals:CatVSHeaderInfo:Pos"              //added Mar 2010 
     60        //For ANSTO 
     61        Make/O/T/N=0 $"root:myGlobals:CatVSHeaderInfo:SICS"      
     62        Make/O/T/N=0 $"root:myGlobals:CatVSHeaderInfo:HDF" 
    6063         
    6164        Make/O/D/N=0 $"root:myGlobals:CatVSHeaderInfo:Reactorpower"       //only used for for ILL, June 2008, 
     
    8487        WAVE MCR = $"root:myGlobals:CatVSHeaderInfo:MCR"                //added Mar 2008 
    8588        WAVE Pos = $"root:myGlobals:CatVSHeaderInfo:Pos" 
    86          
     89        //For ANSTO 
     90        WAVE SICS = $"root:myGlobals:CatVSHeaderInfo:SICS"       
     91        WAVE HDF = $"root:myGlobals:CatVSHeaderInfo:HDF" 
    8792         
    8893        If(V_Flag==0) 
     
    101106                ModifyTable width(:myGlobals:CatVSHeaderInfo:Field)=50 
    102107                ModifyTable width(:myGlobals:CatVSHeaderInfo:MCR)=50 
     108#if (exists("QUOKKA")==6) 
     109                //ANSTO 
     110                ModifyTable width(:myGlobals:CatVSHeaderInfo:SICS)=80 
     111                ModifyTable width(:myGlobals:CatVSHeaderInfo:HDF)=40 
     112#endif           
     113                 
    103114#if (exists("ILL_D22")==6) 
    104115                ModifyTable width(:myGlobals:CatVSHeaderInfo:Reactorpower)=50           //activate for ILL, June 2008 
     
    135146                //get a valid file based on this partialName and catPathName 
    136147                tempName = FindValidFilename(partialName) 
     148                 
    137149                 
    138150                If(cmpstr(tempName,"")==0)              //a null string was returned 
     
    162174                ii+=1 
    163175        while(ii<numitems) 
    164 //Now sort them all based on the suffix data (orders them as collected) 
     176//Now sort them all based on some criterion that may be facility dependent (aim is to order them as collected) 
    165177        SortWaves() 
    166178//Append the files that are not raw files to the list 
     
    213225        Wave GPos = $"root:myGlobals:CatVSHeaderInfo:Pos" 
    214226        Wave/Z GReactPow = $"root:myGlobals:CatVSHeaderInfo:ReactorPower"               //activate for ILL June 2008 ( and the sort line too) 
     227        //For ANSTO 
     228        Wave/T GSICS = $"root:myGlobals:CatVSHeaderInfo:SICS" 
     229        Wave/T GHDF = $"root:myGlobals:CatVSHeaderInfo:HDF" 
    215230 
    216231#if (exists("ILL_D22")==6) 
     
    219234        //      Sort GSuffix, GSuffix, GFilenames, GLabels, GDateTime, GSDD, GLambda, GCntTime, GTotCnts, GCntRate, GTransmission, GThickness, GXCenter, GYCenter, GNumAttens,GRunNumber,GIsTrans,GRot,GTemp,GField,GMCR 
    220235        Sort GSuffix, GSuffix, GFilenames, GLabels, GDateTime, GSDD, GLambda, GCntTime, GTotCnts, GCntRate, GTransmission, GThickness, GXCenter, GYCenter, GNumAttens,GRunNumber,GIsTrans,GRot,GTemp,GField,GMCR,GPos,gNumGuides 
     236#elif (exists("QUOKKA")==6) 
     237    //ANSTO 
     238        Sort GFilenames, GSuffix, GFilenames, GLabels, GDateTime, GSDD, GLambda, GCntTime, GTotCnts, GCntRate, GTransmission, GThickness, GXCenter, GYCenter, GNumAttens,GRunNumber,GIsTrans,GRot,GTemp,GField,GMCR, GSICS, GHDF 
    221239#else 
    222240//      Sort GSuffix, GSuffix, GFilenames, GLabels, GDateTime, GSDD, GLambda, GCntTime, GTotCnts, GCntRate, GTransmission, GThickness, GXCenter, GYCenter, GNumAttens,GRunNumber,GIsTrans,GRot,GTemp,GField,GMCR 
     
    251269        Wave Pos = $"root:myGlobals:CatVSHeaderInfo:Pos" 
    252270        Wave/Z ReactorPower = $"root:myGlobals:CatVSHeaderInfo:reactorpower"       //activate for ILL, June 08 (+ edit line) 
     271        Wave/Z SICS = $"root:myGlobals:CatVSHeaderInfo:SICS" // For ANSTO June 2010 
     272        Wave/Z HDF = $"root:myGlobals:CatVSHeaderInfo:HDF" // For ANSTO June 2010 
     273         
    253274#if (exists("ILL_D22")==6) 
    254275        Edit Filenames, Labels, DateAndTime, SDD, Lambda, CntTime, TotCnts, CntRate, Transmission, Thickness, XCenter, YCenter, NumAttens, RotAngle, Temperature, Field, MCR, ReactorPower as "Data File Catalog" 
     
    260281// alternate ordering, put the magnetic information first 
    261282//      Edit Filenames, Labels, RotAngle, Temperature, Field, DateAndTime, SDD, Lambda, CntTime, TotCnts, CntRate, Transmission, Thickness, XCenter, YCenter, NumAttens as "Data File Catalog" 
     283#elif (exists("QUOKKA")==6) 
     284        //ANSTO 
     285        Edit Filenames, Labels, DateAndTime,  SDD, Lambda, CntTime, TotCnts, CntRate, Transmission, Thickness, XCenter, YCenter, NumAttens, RotAngle, Temperature, Field, MCR,SICS, HDF as "Data File Catalog" 
    262286#else 
    263         // either HFIR or ANSTO 
     287        // HFIR or anything else 
    264288        Edit Filenames, Labels, DateAndTime, SDD, Lambda, CntTime, TotCnts, CntRate, Transmission, Thickness, XCenter, YCenter, NumAttens, RotAngle, Temperature, Field, MCR as "Data File Catalog" 
    265289#endif 
     
    286310        Wave/T GLabels = $"root:myGlobals:CatVSHeaderInfo:Labels" 
    287311        Wave/T GDateTime = $"root:myGlobals:CatVSHeaderInfo:DateAndTime" 
     312        //ANSTO 
     313        Wave/T GSICS = $"root:myGlobals:CatVSHeaderInfo:SICS" 
     314        Wave/T GHDF = $"root:myGlobals:CatVSHeaderInfo:HDF" 
     315        //END ANSTO 
    288316        Wave GSDD = $"root:myGlobals:CatVSHeaderInfo:SDD" 
    289317        Wave GLambda = $"root:myGlobals:CatVSHeaderInfo:Lambda" 
     
    328356        InsertPoints lastPoint,1,GLabels 
    329357        GLabels[lastPoint]=getSampleLabel(fname) 
     358         
     359        #if (exists("QUOKKA")==6) 
     360                InsertPoints lastPoint,1,GSICS 
     361                GSICS[lastPoint]=getSICSVersion(fname) 
     362                         
     363                //read the HDF version 
     364                InsertPoints lastPoint,1,GHDF 
     365                GHDF[lastPoint]=getHDFVersion(fname) 
     366        #endif 
    330367                 
    331368        //read the reals 
  • sans/Dev/trunk/NCNR_User_Procedures/Reduction/SANS/Includes_ANSTO.ipf

    r684 r707  
    5252#include "Schematic"                            version>=5.0 
    5353#include "Tile_2D"                              version>=5.0 
    54 #include "ANSTO_Transmission"   version>=5.0 
     54#include "Transmission" version>=5.0 
    5555#include "WorkFileUtils"        version>=5.0 
    5656#include "WriteQIS"                             version>=5.0  
Note: See TracChangeset for help on using the changeset viewer.