Sort after DimLabels
ChrLie
This snippet sorts columns or rows of a 2D wave after dimension labels in either Dim=0 or Dim=1. Should also work for 1D waves in Dim 0.
function SortDIML(wave w, int dim [, int rev])
if(dim != 0 && dim != 1)
return -1
endif
if(dim)
MatrixTranspose w
endif
// make index wave(s) with DimLabels to sort after
variable nPnts = DimSize(w, 0)
Make/FREE/T/N=(nPnts,2) idxt
idxt[][0] = GetDimLabel(w, 0,p)
idxt[][1] = num2str(p)
// normal or reverse sort?
if(!ParamIsDefault(rev) && rev !=0)
sortcolumns/R/kndx={0} sortwaves={idxt}
else
sortcolumns/kndx={0} sortwaves={idxt}
endif
Make/FREE/N=(nPnts) idx, order = str2num(idxt[p][1])
MakeIndex order, idx
// insert idx column, sort and delete again
Insertpoints/M=1 0, 1, w
MultiThread w[][0] = idx
Sortcolumns/DIML/kndx={0} sortwaves={w}
Deletepoints/M=1 0, 1, w
if(dim)
MatrixTranspose w
endif
return 1
end
// Example:
Make/O/N=(3,3) w=p+q
SetDimlabel 1, 0, run3, w
SetDimlabel 1, 1, run1, w
SetDimlabel 1, 2, run2, w
edit w.ld
SortDIML(w,1)
if(dim != 0 && dim != 1)
return -1
endif
if(dim)
MatrixTranspose w
endif
// make index wave(s) with DimLabels to sort after
variable nPnts = DimSize(w, 0)
Make/FREE/T/N=(nPnts,2) idxt
idxt[][0] = GetDimLabel(w, 0,p)
idxt[][1] = num2str(p)
// normal or reverse sort?
if(!ParamIsDefault(rev) && rev !=0)
sortcolumns/R/kndx={0} sortwaves={idxt}
else
sortcolumns/kndx={0} sortwaves={idxt}
endif
Make/FREE/N=(nPnts) idx, order = str2num(idxt[p][1])
MakeIndex order, idx
// insert idx column, sort and delete again
Insertpoints/M=1 0, 1, w
MultiThread w[][0] = idx
Sortcolumns/DIML/kndx={0} sortwaves={w}
Deletepoints/M=1 0, 1, w
if(dim)
MatrixTranspose w
endif
return 1
end
// Example:
Make/O/N=(3,3) w=p+q
SetDimlabel 1, 0, run3, w
SetDimlabel 1, 1, run1, w
SetDimlabel 1, 2, run2, w
edit w.ld
SortDIML(w,1)
Forum
Support
Gallery
Igor Pro 9
Learn More
Igor XOP Toolkit
Learn More
Igor NIDAQ Tools MX
Learn More