Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/shift_energy_axis' into develop
Browse files Browse the repository at this point in the history
  • Loading branch information
rettigl committed Feb 12, 2025
2 parents a06fdc3 + 2eef16a commit 8c44525
Show file tree
Hide file tree
Showing 4 changed files with 56 additions and 0 deletions.
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 @@ -244,6 +244,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 @@ -252,6 +253,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_depends.keys()
if k in res_xarray.dims
}

# store data for resolved axis coordinates
for axis in res_xarray.dims:
Expand All @@ -266,10 +272,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 @@ -293,6 +301,32 @@ def load_scan(
**{"conversion_parameters": conversion_metadata},
)

# shift energy axis
photon_energy = 0.0
try:
photon_energy = self.metadata["elabFTW"]["laser_status"]["probe_photon_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

0 comments on commit 8c44525

Please sign in to comment.