Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions src/specsscan/config/default.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@
data_path: ""
# option to enable nested progress bars
enable_nested_progress_bar: false
# option to shift by photon energy if available
shift_by_photon_energy: false

# dictionary containing parameters passed to the SpecsAnalyzer. Will be completed by the SpecsAnalyzer default config parameters
spa_params:
apply_fft_filter: false
Expand Down
13 changes: 13 additions & 0 deletions src/specsscan/config/example_config_FHI.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
data_path: "path/to/data"
# option to enable nested progress bars
enable_nested_progress_bar: false
# option to shift by photon energy if available
shift_by_photon_energy: true

# dictionary containing renaming rules for axis names (to change the name in the xarrays)
coordinate_mapping:
Expand All @@ -25,6 +27,17 @@ coordinate_depends:
Y: "/entry/sample/transformations/trans_y"
Z: "/entry/sample/transformations/trans_z"

# dictionary of axis labels for the different axes
coordinate_labels:
Ekin: "Kinetic Energy"
Angle: "Analyzer Dispersion"
polar: "Sample Polar"
tilt: "Sample Tilt"
azimuth: "Sample Azimuth"
X: "X Translation"
Y: "Y Translation"
Z: "Z Translation"

# dictionary containing units for the respective axes
units:
angular0: "degree"
Expand Down
34 changes: 34 additions & 0 deletions src/specsscan/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -245,6 +245,7 @@ def load_scan(
# rename coords and store mapping information, if available
coordinate_mapping = self._config.get("coordinate_mapping", {})
coordinate_depends = self._config.get("coordinate_depends", {})
coordinate_labels = self._config.get("coordinate_labels", {})
rename_dict = {
k: coordinate_mapping[k] for k in coordinate_mapping.keys() if k in res_xarray.dims
}
Expand All @@ -253,6 +254,11 @@ def load_scan(
for k in coordinate_depends.keys()
if k in res_xarray.dims
}
label_dict = {
rename_dict.get(k, k): coordinate_labels[k]
for k in coordinate_labels.keys()
if k in res_xarray.dims
}

# store data for resolved axis coordinates
for axis in res_xarray.dims:
Expand All @@ -267,10 +273,12 @@ def load_scan(
slow_axes.remove(k)
slow_axes.add(v)
self._scan_info["coordinate_depends"] = depends_dict
self._scan_info["coordinate_label"] = label_dict

for name in res_xarray.dims:
try:
res_xarray[name].attrs["unit"] = self._config["units"][name]
res_xarray[name].attrs["long_name"] = label_dict[name]
except KeyError:
pass

Expand All @@ -294,6 +302,32 @@ def load_scan(
**{"conversion_parameters": conversion_metadata},
)

# shift energy axis
photon_energy = 0.0
try:
photon_energy = self.metadata["instrument"]["beam"]["probe"]["incident_energy"]
except KeyError:
try:
photon_energy = self.metadata["elabFTW"]["laser_status"]["probe_photon_energy"]
except KeyError:
pass

self.metadata["scan_info"]["reference_energy"] = "vacuum level"
if photon_energy and self._config["shift_by_photon_energy"]:
logger.info(f"Shifting energy axis by photon energy: -{photon_energy} eV")
res_xarray = res_xarray.assign_coords(
{
rename_dict["Ekin"]: (
rename_dict["Ekin"],
res_xarray[rename_dict["Ekin"]].data - photon_energy,
res_xarray[rename_dict["Ekin"]].attrs,
),
},
)
self.metadata["scan_info"]["reference_energy"] = "Fermi edge"
self.metadata["scan_info"]["coordinate_label"][rename_dict["Ekin"]] = "E-E_F"
res_xarray[rename_dict["Ekin"]].attrs["long_name"] = "E-E_F"

res_xarray.attrs["metadata"] = self.metadata
self._result = res_xarray

Expand Down
6 changes: 6 additions & 0 deletions src/specsscan/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
from __future__ import annotations

import datetime as dt
import importlib
import logging
from pathlib import Path
from typing import Any
Expand Down Expand Up @@ -410,6 +411,11 @@ def handle_meta(
complete_dictionary(scan_info, lut_meta),
) # merging dictionaries

# store program version
metadata["scan_info"]["program_name"] = "specsanalyzer"
metadata["scan_info"]["program_version"] = importlib.metadata.version("specsanalyzer")

# timing
logger.info("Collecting time stamps...")
if "time" in metadata["scan_info"]:
time_list = [metadata["scan_info"]["time"][0], metadata["scan_info"]["time"][-1]]
Expand Down