update data explorer: axis scale and labels in preview
This commit is contained in:
@ -1,5 +1,5 @@
|
||||
#pragma rtGlobals=3 // Use modern global access method and strict wave access.
|
||||
#pragma IgorVersion = 6.2
|
||||
#pragma IgorVersion = 6.36
|
||||
#pragma ModuleName = PearlPShellImport
|
||||
#pragma version = 1.02
|
||||
#include <HDF5 Browser>
|
||||
@ -537,6 +537,7 @@ function /s psh5_load_scan_meta(fileID, scanpath)
|
||||
ScanReadables[0] = "ScientaSpectrum"
|
||||
wavenames = AddListItem("ScanReadables", wavenames, ";", inf)
|
||||
endif
|
||||
wavenames = ReplaceString(";;", wavenames, ";")
|
||||
|
||||
return wavenames
|
||||
end
|
||||
@ -699,6 +700,21 @@ function /s psh5_load_scan_preview(fileID, scanpath, [set_scale])
|
||||
wave /z data = $dataname
|
||||
if (waveexists(data))
|
||||
if (set_scale)
|
||||
setdatafolder dataDF
|
||||
string positioners
|
||||
string positioner
|
||||
string positionerpath
|
||||
positioners = psh5_load_scan_meta(fileID, scanpath)
|
||||
wave /t /z ScanWritables
|
||||
if (waveexists(ScanWritables) && (numpnts(ScanWritables) >= 1))
|
||||
positioner = ScanWritables[0]
|
||||
if (strlen(positioner) > 0)
|
||||
positionerpath = scanpath + "/" + positioner
|
||||
positionerpath = ReplaceString("//", positionerpath, "/")
|
||||
HDF5LoadData /O /Q /Z fileID, positionerpath
|
||||
endif
|
||||
endif
|
||||
|
||||
setdatafolder dataDF
|
||||
newdatafolder /o/s attr
|
||||
killwaves /a/z
|
||||
@ -1008,18 +1024,24 @@ function ps_set_dimlabels(data)
|
||||
setdimlabel 2, -1, $kScanDimLabel, data
|
||||
endif
|
||||
break
|
||||
case "ScientaSpectrum":
|
||||
setdimlabel 0, -1, $kEnergyDimLabel, data
|
||||
break
|
||||
case "ImageAngleDistribution":
|
||||
case "ScientaAngleDistribution":
|
||||
setdimlabel 0, -1, $kScanDimLabel, data
|
||||
setdimlabel 1, -1, $kAngleDimLabel, data
|
||||
if (WaveDims(data) >= 2)
|
||||
setdimlabel 0, -1, $kScanDimLabel, data
|
||||
setdimlabel 1, -1, $kAngleDimLabel, data
|
||||
else
|
||||
setdimlabel 0, -1, $kAngleDimLabel, data
|
||||
endif
|
||||
break
|
||||
case "ScientaSpectrum":
|
||||
case "ImageEnergyDistribution":
|
||||
case "ScientaEnergyDistribution":
|
||||
setdimlabel 0, -1, $kScanDimLabel, data
|
||||
setdimlabel 1, -1, $kEnergyDimLabel, data
|
||||
if (WaveDims(data) >= 2)
|
||||
setdimlabel 0, -1, $kScanDimLabel, data
|
||||
setdimlabel 1, -1, $kEnergyDimLabel, data
|
||||
else
|
||||
setdimlabel 0, -1, $kEnergyDimLabel, data
|
||||
endif
|
||||
break
|
||||
default:
|
||||
setdimlabel 0, -1, $kScanDimLabel, data
|
||||
@ -1040,8 +1062,8 @@ function ps_scale_datasets()
|
||||
dfref attrDF = :attr
|
||||
|
||||
make /n=3 /free lo, hi
|
||||
make /n=3 /t /free un
|
||||
ps_detect_scale(lo, hi, un)
|
||||
make /n=3 /t /free ax, un
|
||||
ps_detect_scale(ax, lo, hi, un)
|
||||
|
||||
wave /t /z /SDFR=dataDF ScanReadables
|
||||
if (WaveExists(ScanReadables))
|
||||
@ -1051,7 +1073,7 @@ function ps_scale_datasets()
|
||||
for (isr = 0; isr < nsr; isr += 1)
|
||||
wave /z /SDFR=dataDF wsr = $ScanReadables[isr]
|
||||
if (WaveExists(wsr))
|
||||
ps_scale_dataset_2(wsr, lo, hi, un)
|
||||
ps_scale_dataset_2(wsr, ax, lo, hi, un)
|
||||
endif
|
||||
endfor
|
||||
endif
|
||||
@ -1078,9 +1100,9 @@ function ps_scale_dataset(data)
|
||||
setdatafolder dataDF
|
||||
|
||||
make /n=3 /free lo, hi
|
||||
make /n=3 /t /free un
|
||||
ps_detect_scale(lo, hi, un)
|
||||
ps_scale_dataset_2(data, lo, hi, un)
|
||||
make /n=3 /t /free ax, un
|
||||
ps_detect_scale(ax, lo, hi, un)
|
||||
ps_scale_dataset_2(data, ax, lo, hi, un)
|
||||
|
||||
setdatafolder saveDF
|
||||
end
|
||||
@ -1096,7 +1118,7 @@ end
|
||||
/// @arg `lo[%%energy]` analyser energy dimension.
|
||||
/// @arg `lo[%%angle]` analyser angle dimension.
|
||||
/// @arg `lo[%%scan]` scan dimension.
|
||||
/// @arg `lo[%%data]` data dimension (units).
|
||||
/// @arg `lo[%%data]` data dimension.
|
||||
///
|
||||
/// the function tries to read the following waves,
|
||||
/// and may fall back to more or less reasonable default values if they are not found.
|
||||
@ -1108,15 +1130,18 @@ end
|
||||
/// @arg `ScanWritables`
|
||||
/// @arg wave referenced by `ScanWritables[0]`
|
||||
///
|
||||
/// @param ax text wave to receive the axis labels.
|
||||
///
|
||||
/// @param lo wave to receive the lower limits.
|
||||
///
|
||||
/// @param hi wave to receive the upper limits.
|
||||
///
|
||||
/// @param un text wave to receive the unit labels.
|
||||
///
|
||||
/// @return the function results are written to the lo, hi, un waves.
|
||||
/// @return the function results are written to the lo, hi, un, and ax waves.
|
||||
///
|
||||
function ps_detect_scale(lo, hi, un)
|
||||
function ps_detect_scale(ax, lo, hi, un)
|
||||
wave /t ax
|
||||
wave lo
|
||||
wave hi
|
||||
wave /t un
|
||||
@ -1124,28 +1149,32 @@ function ps_detect_scale(lo, hi, un)
|
||||
dfref dataDF = GetDataFolderDFR()
|
||||
dfref attrDF = :attr
|
||||
|
||||
redimension /n=4 lo, hi, un
|
||||
setdimlabel 0, 0, $kEnergyDimLabel, lo, hi, un
|
||||
setdimlabel 0, 1, $kAngleDimLabel, lo, hi, un
|
||||
setdimlabel 0, 2, $kScanDimLabel, lo, hi, un
|
||||
setdimlabel 0, 3, $kDataDimLabel, lo, hi, un
|
||||
redimension /n=4 lo, hi, un, ax
|
||||
setdimlabel 0, 0, $kEnergyDimLabel, lo, hi, un, ax
|
||||
setdimlabel 0, 1, $kAngleDimLabel, lo, hi, un, ax
|
||||
setdimlabel 0, 2, $kScanDimLabel, lo, hi, un, ax
|
||||
setdimlabel 0, 3, $kDataDimLabel, lo, hi, un, ax
|
||||
|
||||
// default values
|
||||
lo[%$kEnergyDimLabel] = 0
|
||||
hi[%$kEnergyDimLabel] = 1
|
||||
un[%$kEnergyDimLabel] = "eV"
|
||||
ax[%$kEnergyDimLabel] = "Ekin"
|
||||
|
||||
lo[%$kAngleDimLabel] = -1
|
||||
hi[%$kAngleDimLabel] = 1
|
||||
un[%$kAngleDimLabel] = ""
|
||||
un[%$kAngleDimLabel] = "arb."
|
||||
un[%$kAngleDimLabel] = "slice"
|
||||
|
||||
lo[%$kScanDimLabel] = 0
|
||||
hi[%$kScanDimLabel] = 1
|
||||
un[%$kScanDimLabel] = ""
|
||||
un[%$kScanDimLabel] = "arb."
|
||||
ax[%$kScanDimLabel] = "scan"
|
||||
|
||||
lo[%$kDataDimLabel] = 0
|
||||
hi[%$kDataDimLabel] = 0
|
||||
un[%$kDataDimLabel] = "arb."
|
||||
ax[%$kDataDimLabel] = "value"
|
||||
|
||||
wave /SDFR=attrDF /T /Z LensMode
|
||||
wave /SDFR=attrDF /Z ChannelBegin = ScientaChannelBegin
|
||||
@ -1160,14 +1189,17 @@ function ps_detect_scale(lo, hi, un)
|
||||
lo[%$kAngleDimLabel] = -45/2
|
||||
hi[%$kAngleDimLabel] = +45/2
|
||||
un[%$kAngleDimLabel] = "deg"
|
||||
ax[%$kAngleDimLabel] = "angle"
|
||||
break
|
||||
case "Angular60":
|
||||
lo[%$kAngleDimLabel] = -60/2
|
||||
hi[%$kAngleDimLabel] = +60/2
|
||||
un[%$kAngleDimLabel] = "deg"
|
||||
ax[%$kAngleDimLabel] = "angle"
|
||||
break
|
||||
case "Transmission":
|
||||
un[%$kAngleDimLabel] = "arb."
|
||||
ax[%$kAngleDimLabel] = "offset"
|
||||
break
|
||||
endswitch
|
||||
endif
|
||||
@ -1190,6 +1222,7 @@ function ps_detect_scale(lo, hi, un)
|
||||
if (WaveExists(scanner))
|
||||
lo[%$kScanDimLabel] = scanner[0]
|
||||
hi[%$kScanDimLabel] = scanner[numpnts(scanner)-1]
|
||||
ax[%$kScanDimLabel] = NameOfWave(scanner)
|
||||
endif
|
||||
endif
|
||||
end
|
||||
@ -1211,14 +1244,23 @@ end
|
||||
/// @param data data wave to be scaled.
|
||||
/// dimension labels (index -1) must be set to match the limit waves.
|
||||
///
|
||||
/// @param ax axis labels.
|
||||
/// the axis labels are written to the wave note in the format `AxisLabel%%s=%%s`
|
||||
/// where `X`, `Y`, `Z`, `D` is substituted for the first place holder
|
||||
/// and the label for the second one.
|
||||
///
|
||||
/// @param lo lower limits.
|
||||
/// the lower limits are applied using the SetScale operation.
|
||||
///
|
||||
/// @param hi upper limits.
|
||||
/// the upper limits are applied using the SetScale operation.
|
||||
///
|
||||
/// @param un unit labels.
|
||||
/// the unit labels are applied using the SetScale operation.
|
||||
///
|
||||
function ps_scale_dataset_2(data, lo, hi, un)
|
||||
function ps_scale_dataset_2(data, ax, lo, hi, un)
|
||||
wave data
|
||||
wave /t ax
|
||||
wave lo
|
||||
wave hi
|
||||
wave /t un
|
||||
@ -1227,19 +1269,24 @@ function ps_scale_dataset_2(data, lo, hi, un)
|
||||
sdim = GetDimLabel(data, 0, -1)
|
||||
if (strlen(sdim))
|
||||
setscale /i x lo[%$sdim], hi[%$sdim], un[%$sdim], data
|
||||
Note data, "AxisLabelX=" + ax[%$sdim]
|
||||
endif
|
||||
|
||||
sdim = GetDimLabel(data, 1, -1)
|
||||
if (strlen(sdim))
|
||||
setscale /i y lo[%$sdim], hi[%$sdim], un[%$sdim], data
|
||||
Note data, "AxisLabelY=" + ax[%$sdim]
|
||||
endif
|
||||
|
||||
sdim = GetDimLabel(data, 2, -1)
|
||||
if (strlen(sdim))
|
||||
setscale /i z lo[%$sdim], hi[%$sdim], un[%$sdim], data
|
||||
Note data, "AxisLabelZ=" + ax[%$sdim]
|
||||
endif
|
||||
|
||||
setscale d 0, 0, un[%$kDataDimLabel], data
|
||||
Note data, "AxisLabelD=" + ax[%$kDataDimLabel]
|
||||
Note data, "Dataset=" + NameOfWave(data)
|
||||
end
|
||||
|
||||
/// load and reduce the ScientaImage dataset of the first scan of a PShell data file.
|
||||
|
Reference in New Issue
Block a user