From 488209c82ce29243c6217aeb1816929b57233270 Mon Sep 17 00:00:00 2001 From: rettigl Date: Wed, 12 Feb 2025 13:51:47 +0100 Subject: [PATCH 1/2] add program name and version --- src/specsscan/helpers.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/specsscan/helpers.py b/src/specsscan/helpers.py index f67d580..934b8df 100644 --- a/src/specsscan/helpers.py +++ b/src/specsscan/helpers.py @@ -2,6 +2,7 @@ from __future__ import annotations import datetime as dt +import importlib import logging from pathlib import Path from typing import Any @@ -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]] From 2eef16aee1a683aec8c9bd222c685423d2573d17 Mon Sep 17 00:00:00 2001 From: rettigl Date: Wed, 12 Feb 2025 14:09:02 +0100 Subject: [PATCH 2/2] add option to shift energy axis to EF, and add axis labels --- src/specsscan/config/default.yaml | 3 ++ src/specsscan/config/example_config_FHI.yaml | 13 ++++++++ src/specsscan/core.py | 34 ++++++++++++++++++++ 3 files changed, 50 insertions(+) diff --git a/src/specsscan/config/default.yaml b/src/specsscan/config/default.yaml index 94d2250..652062a 100644 --- a/src/specsscan/config/default.yaml +++ b/src/specsscan/config/default.yaml @@ -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 diff --git a/src/specsscan/config/example_config_FHI.yaml b/src/specsscan/config/example_config_FHI.yaml index a18a255..cb26071 100644 --- a/src/specsscan/config/example_config_FHI.yaml +++ b/src/specsscan/config/example_config_FHI.yaml @@ -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: @@ -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" diff --git a/src/specsscan/core.py b/src/specsscan/core.py index 039d7b4..8b88c6c 100755 --- a/src/specsscan/core.py +++ b/src/specsscan/core.py @@ -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 } @@ -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_depends.keys() + if k in res_xarray.dims + } # store data for resolved axis coordinates for axis in res_xarray.dims: @@ -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 @@ -294,6 +302,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