Changeset 929


Ignore:
Timestamp:
Apr 20, 2020 4:36:10 PM (2 years ago)
Author:
ilavsky
Message:

More fixes to NXcanSAS in Nika

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/User Procedures/Nika/NI1_FileLoaders.ipf

    r928 r929  
    39373937       
    39383938        string FileContent=NI1_ReadNexusCanSAS(PathName, FileNameToLoad)
    3939         variable fileID, UsedQXY, UsedAzimAngle, UnbinnedQx, UnbinnedQy, HaveMask, HaveErrors
     3939        variable fileID, UsedQXY, UsedAzimAngle, UnbinnedQx, UnbinnedQy, HaveMask, HaveErrors, i
    39403940        string TempStr, TempStr1
    39413941        UsedQXY = 0
     
    39543954                        if(ItemsInList(TempStr)<2)      //only Q wave
    39553955                                HDF5LoadData /N=Q2Dwave  /O  fileID , TempStr
    3956                         else            //assume Qx, Qy
    3957                                 TempStr1=stringfromList(0,TempStr)
    3958                                 if(stringmatch(TempStr1,"*Qx"))
    3959                                         HDF5LoadData /N=Qx2D  /O  fileID , TempStr1
    3960                                 elseif(stringmatch(TempStr1,"*Qy"))
    3961                                         HDF5LoadData /N=Qy2D  /O  fileID , TempStr1
    3962                                 endif
    3963                                 TempStr1=stringfromList(1,TempStr)
    3964                                 if(stringmatch(TempStr1,"*Qx"))
    3965                                         HDF5LoadData /N=Qx2D  /O  fileID , TempStr1
    3966                                 elseif(stringmatch(TempStr1,"*Qy"))
    3967                                         HDF5LoadData /N=Qy2D  /O  fileID , TempStr1
    3968                                 endif                   
     3956                        else            //assume Qx, Qy, optionally Qz
     3957                                For(i=0;i<ItemsInList(TempStr);i+=1)
     3958                                        TempStr1=stringfromList(i,TempStr)
     3959                                        if(stringmatch(TempStr1,"*Qx"))
     3960                                                HDF5LoadData /N=Qx2D  /O  fileID , TempStr1
     3961                                        elseif(stringmatch(TempStr1,"*Qy"))
     3962                                                HDF5LoadData /N=Qy2D  /O  fileID , TempStr1
     3963                                        elseif(stringmatch(TempStr1,"*Qz"))
     3964                                                HDF5LoadData /N=Qz2D  /O  fileID , TempStr1
     3965                                        endif
     3966                                endfor
    39693967                                UsedQXY=1       
    39703968                        endif
     
    39983996                        endif
    39993997                        HDF5CloseFile fileID 
    4000 
     3998                        //TitleOfData
     3999                        SVAR UserSampleName = root:Packages:Convert2Dto1D:UserSampleName
     4000                        UserSampleName = StringByKey("TitleOfData", FileContent, ":", ",")
     4001                       
    40014002                        NVAR ReverseBinnedData=root:Packages:Convert2Dto1D:ReverseBinnedData
    40024003                        NVAR BeamCenterX = root:Packages:Convert2Dto1D:BeamCenterX
     
    40054006                                Wave Qx2D
    40064007                                Wave Qy2D
     4008                                Wave/Z Qz2D
     4009                                if(!WaveExists(Qz2D))
     4010                                        Duplicate/Free Qy2D, Qz2D
     4011                                        Qz2D = 0
     4012                                endif
    40074013                                //convert Q in appropriate units...
    40084014                                strswitch(QUnits)       
     
    40134019                                                MatrixOp /O Qx2D = Qx2D/10
    40144020                                                MatrixOp /O Qy2D = Qy2D/10
     4021                                                MatrixOp /O Qz2D = Qz2D/10
    40154022                                                break
    40164023                                        case "1/m":
    40174024                                                MatrixOp /O Qx2D = Qx2D/(1e10)
    40184025                                                MatrixOp /O Qy2D = Qy2D/(1e10)
     4026                                                MatrixOp /O Qz2D = Qz2D/(1e10)
    40194027                                                break
    40204028                                endswitch
     
    40274035                                matrixOP/O Qx2D = powR(Qx2D,2)
    40284036                                matrixOP/O Qy2D = powR(Qy2D,2)
    4029                                 matrixOp/O Q2DWave = sqrt(Qx2D + Qy2D)
     4037                                matrixOP/O Qz2D = powR(Qz2D,2)
     4038                                matrixOp/O Q2DWave = sqrt(Qx2D + Qy2D + Qz2D)
    40304039                                Wavestats/Q Q2DWave
    40314040                                BeamCenterX = V_minRowLoc
     
    41784187        string QUnits="1/angstrom"             
    41794188        string tempStrUnits, tempStr65
     4189        string TitleOfData=""
    41804190       
    41814191        HDF5OpenFile/P=$(PathName)/R fileID as FileNameToLoad
     
    41904200                AttribList = NI1_HdfReadAllAttributes(fileID, stringfromlist(i,ListOfGroups),0)
    41914201                GroupName = stringfromlist(i,ListOfGroups)
    4192                 //version 0.1 of the standard...
    41934202                if(stringMatch(StringByKey("NX_class", AttribList),"NXdata") && stringMatch(StringByKey("canSAS_class", AttribList),"SASdata"))                                 // skip version check and hope for best. && stringMatch(StringByKey("canSAS_version", AttribList),"0.1"))
    41944203                        PathToData = stringfromlist(i,ListOfGroups)
     
    41994208                        HDF5ListGroup /F /TYPE=2  /Z fileID , PathToData
    42004209                        ListOfDataSets = S_HDF5ListGroup
     4210                        TitleOfData=stringByKey("title",AttribList)
     4211                        if(strlen(TitleOfData)<1)       //no title in the file...
     4212                                TitleOfData = stringFromList(0,FileNameToLoad,".")
     4213                        endif
    42014214                        SignalNameAtrr=stringByKey("signal",AttribList)
    42024215                        QNamesAtrr=stringByKey("I_axes",AttribList)
     
    42044217                        if(StringMatch(QNamesAtrr, "Q,Q" ))
    42054218                                TempQPath = RemoveEnding(GrepList(ListOfDataSets, "Q$",0,";"), ";")
    4206                                 //need to locate Q units here also... QUnits
    4207                                 tempStrUnits = NI1_HdfReadAllAttributes(fileID, TempQPath,1)
    4208                                 QUnits = StringByKey("units", tempStrUnits, ":", ";")
     4219                                if(strlen(TempQPath)>1)         //Name ending with Q was found, we are done.                   
     4220                                        //need to locate Q units here also... QUnits
     4221                                        tempStrUnits = NI1_HdfReadAllAttributes(fileID, TempQPath,1)
     4222                                        QUnits = StringByKey("units", tempStrUnits, ":", ";")
     4223                                else            //we could have Qx, Qy, Qz
     4224                                        tempStr65 = RemoveEnding(GrepList(ListOfDataSets, "Qx$",0,";"), ";")
     4225                                        TempQPath = tempStr65+";"
     4226                                        TempQPath += RemoveEnding(GrepList(ListOfDataSets, "Qy$",0,";"), ";")+";"
     4227                                        TempQPath += RemoveEnding(GrepList(ListOfDataSets, "Qz$",0,";"), ";")+";"
     4228                                        //need to locate Q units here also... QUnits
     4229                                        tempStrUnits = NI1_HdfReadAllAttributes(fileID, tempStr65,1)                   
     4230                                        QUnits = StringByKey("units", tempStrUnits, ":", ";")
     4231                                endif
    42094232                        elseif(StringMatch(QNamesAtrr, "Qx,Qy" ))
    42104233                                        tempStr65 = RemoveEnding(GrepList(ListOfDataSets, "Qx$",0,";"), ";")
     
    42204243
    42214244                        DataIdentification = "DataWv:"+TempDataPath+","+"QWv:"+TempQPath+","+"IdevWv:"+TempIdevPath+","
    4222                         DataIdentification += "MaskWv:"+TempMaskPath+","+"AzimAngles:"+TempAzAPath+","+"QUnits:"+QUnits+";"
     4245                        DataIdentification += "MaskWv:"+TempMaskPath+","+"AzimAngles:"+TempAzAPath+","+"QUnits:"+QUnits+","
     4246                        DataIdentification += "TitleOfData:"+TitleOfData+","
    42234247                        //DataIdentification += "UnbinnedQx:"+OrigQxPath+","+"UnbinnedQy:"+OrigQyPath+","
    42244248                        break
    4225 //                      For(j=0;j<ItemsInList(ListOfDataSets);j+=1)
    4226 //                              tempGroupName = stringfromlist(j,ListOfDataSets)
    4227 //                              tempStr = NI1_HdfReadAllAttributes(fileID, stringfromlist(j,ListOfDataSets),1)
    4228 //                              if(stringmatch(stringByKey("signal",AttribList),"I"))                   //I is intensity data
    4229 //                                      TempDataPath = stringfromlist(j,ListOfDataSets)
    4230 //                                      tempStr2 = stringByKey("axes", tempStr)
    4231 //                                      if(stringmatch(tempStr2,"Q"))
    4232 //                                              TempQPath = TempDataPath[0,strlen(TempDataPath)-2]+"Q"
    4233 //                                      elseif(stringmatch(tempStr2,"Qx,Qy"))
    4234 //                                              TempQPath = TempDataPath[0,strlen(TempDataPath)-2]+"Qx"+";"
    4235 //                                              TempQPath += TempDataPath[0,strlen(TempDataPath)-2]+"Qy"
    4236 //                                      else
    4237 //                                              abort "Problem identifying Q axes"
    4238 //                                      endif
    4239 //                                      if(StringMatch(ListOfDataSets,"*Mask*"))
    4240 //                                              TempMaskPath = TempDataPath[0,strlen(TempDataPath)-2]+"Mask"
    4241 //                                      endif
    4242 //                                      if(StringMatch(ListOfDataSets,"*Idev*"))
    4243 //                                              TempIdevPath = TempDataPath[0,strlen(TempDataPath)-2]+"Idev"
    4244 //                                      endif
    4245 //                                      if(StringMatch(ListOfDataSets,"*AzimAngles*"))
    4246 //                                              TempAzAPath = TempDataPath[0,strlen(TempDataPath)-2]+"AzimAngles"
    4247 //                                      endif
    4248 //                                      if(StringMatch(ListOfDataSets,"*UnbinnedQx*"))
    4249 //                                              OrigQxPath = TempDataPath[0,strlen(TempDataPath)-2]+"UnbinnedQx"
    4250 //                                      endif
    4251 //                                      if(StringMatch(ListOfDataSets,"*UnbinnedQy*"))
    4252 //                                              OrigQyPath = TempDataPath[0,strlen(TempDataPath)-2]+"UnbinnedQy"
    4253 //                                      endif
    4254 //                                      DataIdentification = "DataWv:"+TempDataPath+","+"QWv:"+TempQPath+","+"IdevWv:"+TempIdevPath+","
    4255 //                                      DataIdentification += "MaskWv:"+TempMaskPath+","+"AzimAngles:"+TempAzAPath+","
    4256 //                                      DataIdentification += "UnbinnedQx:"+OrigQxPath+","+"UnbinnedQy:"+OrigQyPath+","
    4257 //                              endif                   
    4258 //                      endfor
    4259                 endif
    4260                 //this is generic NXcanSAS as available on https://github.com/canSAS-org/NXcanSAS_examples April 2020
    4261 //              if(stringMatch(StringByKey("NX_class", AttribList),"NXdata") && (stringMatch(StringByKey("canSAS_class", AttribList),"SASdata") || stringMatch(StringByKey("SAS_class", AttribList),"SASdata")))
    4262 //                       // data : NXdata                               minimum content here...
    4263 //                          //  @NX_class = "NXdata"
    4264 //                          //  @canSAS_class = "SASdata"
    4265 //                          //  @signal = "I"
    4266 //                          //  @I_axes = "<see the documentation>"
    4267 //                          //  @Q_indices : NX_INT = <see the documentation>
    4268 //                          //  I : NX_NUMBER
    4269 //                          //     @units = <see the documentation>
    4270 //                          //  Q : NX_NUMBER
    4271 //                          //     @units = NX_PER_LENGTH
    4272 //                      PathToData = stringfromlist(i,ListOfGroups)
    4273 //                      //print "Found location of data : " + PathToData
    4274 //                      HDF5ListGroup /F /TYPE=2  /Z fileID , PathToData
    4275 //                      ListOfDataSets = S_HDF5ListGroup
    4276 //                      string IdataSetname=stringByKey("signal", AttribList)
    4277 //                      string QdataSetname=stringByKey("I_axes", AttribList)
    4278 //                      //this simply does not work, examples do not match standard.
    4279 //                      For(j=0;j<ItemsInList(ListOfDataSets);j+=1)
    4280 //                              tempStr = NI1_HdfReadAllAttributes(fileID, stringfromlist(j,ListOfDataSets),1)
    4281 //                              if(stringmatch(stringByKey("signal", AttribList),"I"))                                                                  //the group has signal=I attribute
    4282 //                                      TempDataPath = stringfromlist(j,ListOfDataSets)
    4283 //                                      tempStr2 = stringByKey("I_axes", AttribList)
    4284 //                                      if(stringmatch(tempStr2,"Q"))
    4285 //                                              TempQPath = TempDataPath[0,strlen(TempDataPath)-2]+"Q"
    4286 //                                      elseif(stringmatch(tempStr2,"Qx,Qy"))
    4287 //                                              TempQPath = TempDataPath[0,strlen(TempDataPath)-2]+"Qx"+";"
    4288 //                                              TempQPath += TempDataPath[0,strlen(TempDataPath)-2]+"Qy"
    4289 //                                      else
    4290 //                                              abort "Problem identifying Q axes"
    4291 //                                      endif
    4292 //                                      if(StringMatch(ListOfDataSets,"*Mask*"))
    4293 //                                              TempMaskPath = TempDataPath[0,strlen(TempDataPath)-2]+"Mask"
    4294 //                                      endif
    4295 //                                      if(StringMatch(ListOfDataSets,"*Idev*"))
    4296 //                                              TempIdevPath = TempDataPath[0,strlen(TempDataPath)-2]+"Idev"
    4297 //                                      endif
    4298 //                                      if(StringMatch(ListOfDataSets,"*AzimAngles*"))
    4299 //                                              TempAzAPath = TempDataPath[0,strlen(TempDataPath)-2]+"AzimAngles"
    4300 //                                      endif
    4301 //                                      if(StringMatch(ListOfDataSets,"*UnbinnedQx*"))
    4302 //                                              OrigQxPath = TempDataPath[0,strlen(TempDataPath)-2]+"UnbinnedQx"
    4303 //                                      endif
    4304 //                                      if(StringMatch(ListOfDataSets,"*UnbinnedQy*"))
    4305 //                                              OrigQyPath = TempDataPath[0,strlen(TempDataPath)-2]+"UnbinnedQy"
    4306 //                                      endif
    4307 //                                      DataIdentification = "DataWv:"+TempDataPath+","+"QWv:"+TempQPath+","+"IdevWv:"+TempIdevPath+","
    4308 //                                      DataIdentification += "MaskWv:"+TempMaskPath+","+"AzimAngles:"+TempAzAPath+","
    4309 //                                      DataIdentification += "UnbinnedQx:"+OrigQxPath+","+"UnbinnedQy:"+OrigQyPath+","
    4310 //
    4311 //                              endif                   
    4312 //                      endfor
    4313 //              endif
     4249                                                                        //                      For(j=0;j<ItemsInList(ListOfDataSets);j+=1)
     4250                                                                        //                              tempGroupName = stringfromlist(j,ListOfDataSets)
     4251                                                                        //                              tempStr = NI1_HdfReadAllAttributes(fileID, stringfromlist(j,ListOfDataSets),1)
     4252                                                                        //                              if(stringmatch(stringByKey("signal",AttribList),"I"))                   //I is intensity data
     4253                                                                        //                                      TempDataPath = stringfromlist(j,ListOfDataSets)
     4254                                                                        //                                      tempStr2 = stringByKey("axes", tempStr)
     4255                                                                        //                                      if(stringmatch(tempStr2,"Q"))
     4256                                                                        //                                              TempQPath = TempDataPath[0,strlen(TempDataPath)-2]+"Q"
     4257                                                                        //                                      elseif(stringmatch(tempStr2,"Qx,Qy"))
     4258                                                                        //                                              TempQPath = TempDataPath[0,strlen(TempDataPath)-2]+"Qx"+";"
     4259                                                                        //                                              TempQPath += TempDataPath[0,strlen(TempDataPath)-2]+"Qy"
     4260                                                                        //                                      else
     4261                                                                        //                                              abort "Problem identifying Q axes"
     4262                                                                        //                                      endif
     4263                                                                        //                                      if(StringMatch(ListOfDataSets,"*Mask*"))
     4264                                                                        //                                              TempMaskPath = TempDataPath[0,strlen(TempDataPath)-2]+"Mask"
     4265                                                                        //                                      endif
     4266                                                                        //                                      if(StringMatch(ListOfDataSets,"*Idev*"))
     4267                                                                        //                                              TempIdevPath = TempDataPath[0,strlen(TempDataPath)-2]+"Idev"
     4268                                                                        //                                      endif
     4269                                                                        //                                      if(StringMatch(ListOfDataSets,"*AzimAngles*"))
     4270                                                                        //                                              TempAzAPath = TempDataPath[0,strlen(TempDataPath)-2]+"AzimAngles"
     4271                                                                        //                                      endif
     4272                                                                        //                                      if(StringMatch(ListOfDataSets,"*UnbinnedQx*"))
     4273                                                                        //                                              OrigQxPath = TempDataPath[0,strlen(TempDataPath)-2]+"UnbinnedQx"
     4274                                                                        //                                      endif
     4275                                                                        //                                      if(StringMatch(ListOfDataSets,"*UnbinnedQy*"))
     4276                                                                        //                                              OrigQyPath = TempDataPath[0,strlen(TempDataPath)-2]+"UnbinnedQy"
     4277                                                                        //                                      endif
     4278                                                                        //                                      DataIdentification = "DataWv:"+TempDataPath+","+"QWv:"+TempQPath+","+"IdevWv:"+TempIdevPath+","
     4279                                                                        //                                      DataIdentification += "MaskWv:"+TempMaskPath+","+"AzimAngles:"+TempAzAPath+","
     4280                                                                        //                                      DataIdentification += "UnbinnedQx:"+OrigQxPath+","+"UnbinnedQy:"+OrigQyPath+","
     4281                                                                        //                              endif                   
     4282                                                                        //                      endfor
     4283                endif
    43144284
    43154285        endfor
Note: See TracChangeset for help on using the changeset viewer.