code changes for release 3.1.0: SciLog, DA30-PShell data files

This commit is contained in:
2025-12-22 17:04:08 +01:00
parent 43689ef162
commit ea838b395f
12 changed files with 2437 additions and 169 deletions
+26 -23
View File
@@ -2,7 +2,7 @@
#pragma rtGlobals=3 // Use modern global access method and strict wave access.
#pragma IgorVersion = 8.00
#pragma ModuleName = PearlPShellImport
#pragma version = 2.1
#pragma version = 2.2
#if IgorVersion() < 9.00
#include <HDF5 Browser>
#endif
@@ -10,7 +10,7 @@
#include "pearl-gui-tools"
#include "pearl-area-import"
// copyright (c) 2013-22 Paul Scherrer Institut
// copyright (c) 2013-25 Paul Scherrer Institut
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -63,7 +63,7 @@ strconstant kDataDimLabel = "data"
strconstant kPreviewDatasets = "ImageEnergyDistribution;ScientaSpectrum;ScientaImage;Counts;SampleCurrent;"
/// List of datasets that must be loaded to determine the axis scaling of a Scienta image
strconstant kScientaScalingDatasets = "LensMode;ScientaChannelBegin;ScientaChannelEnd;ScientaSliceBegin;ScientaSliceEnd;Eph;"
strconstant kScientaScalingDatasets = "LensMode;ScientaChannelBegin;ScientaChannelEnd;ScientaSliceBegin;ScientaSliceEnd;Eph;ScientaHighEnergy;ScientaHighThetaX;ScientaLowEnergy;ScientaLowThetaX;"
/// List of diagnostic datasets that are normally loaded with a scan
strconstant kEssentialDiagnostics = "ManipulatorX;ManipulatorY;ManipulatorZ;ManipulatorTheta;ManipulatorTilt;ManipulatorPhi;MonoEnergy;"
@@ -2202,6 +2202,10 @@ end
/// where the first folder in the list takes precedence.
/// it may fall back to more or less reasonable default values if no data is not found.
/// @arg `LensMode`
/// @arg `ScientaLowEnergy`
/// @arg `ScientaHighEnergy`
/// @arg `ScientaLowThetaX`
/// @arg `ScientaHighThetaX`
/// @arg `ScientaChannelBegin`
/// @arg `ScientaChannelEnd`
/// @arg `ScientaSliceBegin`
@@ -2260,6 +2264,10 @@ function ps_detect_scale(data_df, ax, lo, hi, un)
ax[%$kDataDimLabel] = "value"
wave /T /Z LensMode = ps_find_scale_wave("LensMode", data_df, scan_df, attr_df)
wave /Z LowEnergy = ps_find_scale_wave("ScientaLowEnergy", data_df, scan_df, attr_df)
wave /Z HighEnergy = ps_find_scale_wave("ScientaHighEnergy", data_df, scan_df, attr_df)
wave /Z LowThetaX = ps_find_scale_wave("ScientaLowThetaX", data_df, scan_df, attr_df)
wave /Z HighThetaX = ps_find_scale_wave("ScientaHighThetaX", data_df, scan_df, attr_df)
wave /Z ChannelBegin = ps_find_scale_wave("ScientaChannelBegin", data_df, scan_df, attr_df)
wave /Z ChannelEnd = ps_find_scale_wave("ScientaChannelEnd", data_df, scan_df, attr_df)
wave /Z SliceBegin = ps_find_scale_wave("ScientaSliceBegin", data_df, scan_df, attr_df)
@@ -2268,35 +2276,30 @@ function ps_detect_scale(data_df, ax, lo, hi, un)
// lens mode can give more detail
if (waveexists(LensMode) && (numpnts(LensMode) >= 1))
strswitch(LensMode[0])
case "Angular45":
lo[%$kAngleDimLabel] = -45/2
hi[%$kAngleDimLabel] = +45/2
un[%$kAngleDimLabel] = "°"
ax[%$kAngleDimLabel] = "angle"
break
case "Angular60":
lo[%$kAngleDimLabel] = -60/2
hi[%$kAngleDimLabel] = +60/2
un[%$kAngleDimLabel] = "°"
ax[%$kAngleDimLabel] = "angle"
break
case "Transmission":
un[%$kAngleDimLabel] = "arb."
ax[%$kAngleDimLabel] = "offset"
break
endswitch
if (stringmatch(LensMode[0], "*Transmission*"))
un[%$kAngleDimLabel] = "mm"
ax[%$kAngleDimLabel] = "position"
else
un[%$kAngleDimLabel] = "°"
ax[%$kAngleDimLabel] = "angle"
endif
endif
// best option if scales are explicit in separate waves
if (waveexists(ChannelBegin) && waveexists(ChannelEnd) && (numpnts(ChannelBegin) >= 1) && (numpnts(ChannelEnd) >= 1))
if (waveexists(LowEnergy) && waveexists(HighEnergy) && (numpnts(LowEnergy) >= 1) && (numpnts(HighEnergy) >= 1))
lo[%$kEnergyDimLabel] = LowEnergy[0]
hi[%$kEnergyDimLabel] = HighEnergy[0]
elseif (waveexists(ChannelBegin) && waveexists(ChannelEnd) && (numpnts(ChannelBegin) >= 1) && (numpnts(ChannelEnd) >= 1))
lo[%$kEnergyDimLabel] = ChannelBegin[0]
hi[%$kEnergyDimLabel] = ChannelEnd[0]
elseif (waveexists(ScientaChannels) && (numpnts(ScientaChannels) >= 1))
lo[%$kEnergyDimLabel] = ScientaChannels[0]
hi[%$kEnergyDimLabel] = ScientaChannels[numpnts(ScientaChannels)-1]
endif
if (waveexists(SliceBegin) && waveexists(SliceEnd) && (numpnts(SliceBegin) >= 1) && (numpnts(SliceEnd) >= 1))
if (waveexists(LowThetaX) && waveexists(HighThetaX) && (numpnts(LowThetaX) >= 1) && (numpnts(HighThetaX) >= 1))
lo[%$kAngleDimLabel] = LowThetaX[0]
hi[%$kAngleDimLabel] = HighThetaX[0]
elseif (waveexists(SliceBegin) && waveexists(SliceEnd) && (numpnts(SliceBegin) >= 1) && (numpnts(SliceEnd) >= 1))
lo[%$kAngleDimLabel] = SliceBegin[0]
hi[%$kAngleDimLabel] = SliceEnd[0]
endif